Не могу понять ошибку в System Verilog

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

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 "("

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


person segfault    schedule 25.10.2010    source источник
comment
В каком программном инструменте вы пытаетесь это скомпилировать? Некоторые симуляторы по умолчанию используют синтаксис Verilog-2001, и им нужно сообщить, чтобы они ожидали SystemVerilog...   -  person Marty    schedule 26.10.2010
comment
Я не знаком с этим программным обеспечением. always_ff является ключевым словом в SystemVerilog, но не в Verilog-2001. Проверьте документацию по программному обеспечению, чтобы узнать, нужно ли вам включить поддержку SystemVerilog. Если вы запускаете его из командной строки, это может быть что-то вроде -sv или подобное.   -  person Marty    schedule 26.10.2010


Ответы (3)


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

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

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

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

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

output reg [7:0] count

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

Ваше здоровье

person George    schedule 26.10.2010

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

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

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

person Paul S    schedule 08.11.2010

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

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

person Cliff Cummings    schedule 27.06.2012