Не могу понять ошибку в System Verilog - PullRequest
1 голос
/ 25 октября 2010

Я пытался скомпилировать код

module counter(
    input clk,
    input upSignal,
    input downSignal,
    output [7:0] count
   );
        always_ff @(posedge clk) begin
          if (upSignal)
              count <= count + 1;
          else if (downSignal)
              count <= count - 1;
        end
    endmodule

но я получаю ошибку

Error (10170): Verilog HDL syntax error at counter.v(7) near text "@"; expecting ".", or "("

что это значит?

Ответы [ 3 ]

7 голосов
/ 26 октября 2010

Quartus поддерживает некоторые системные версии. Смотрите эту ссылку для деталей> Справка Quartus

Чтобы quartus автоматически распознал, что вы используете системный verilog, вам нужно вызвать ваш файл что-нибудь.sv

Так что в этом случае, вероятно, counter.sv

Если ваш файл называется counter.v , то вы получите ошибку. Я могу подтвердить, что он действительно компилируется с Quartus II v10.0.

Я бы порекомендовал изменить выходной порт вашего модуля на reg, Quartus не жаловался, но симулятор сделал бы.

output reg [7:0] count

Дайте нам знать, как вы поживаете.

Приветствия

1 голос
/ 08 ноября 2010

Я думаю, что Джордж прав (Привет, Джордж! Необычно видеть тебя здесь), файл интерпретируется как Verilog (не SystemVerilog), и поэтому он не понимает всегда_ff.

О типеВ качестве выходного значения я предпочитаю использовать логику в SystemVerilog.Его эффект идентичен, но он уходит от "объявленного" reg ", поэтому это регистр" мышления, который может поймать людей.

Кроме того, причина, по которой вы получили это конкретное сообщение об ошибке, заключалась в том, чтоНе знаю, что было всегда, так как предполагается, что это имя модуля / интерфейса / функции. У модуля может быть карта портов, которая может начинаться с символа «.», а для всего остального потребуется открывающая скобка.

0 голосов
/ 28 июня 2012

Еще одна проблема с этим кодом.

Переменная count присваивается из процедурного блока (always_ff), поэтому переменная count должна быть объявлена ​​как тип переменной, обычно логический тип для этого кода SystemVerilog.Объявление должно включать в себя: output logic [7: 0] count

...