2010-10-25 3 views
1

Я попытался скомпилировать кодне может иметь смысл ошибки в системе 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 "("

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

+1

Какой программный инструмент вы пытаетесь скомпилировать? Некоторым симуляторам по умолчанию соответствует синтаксис Verilog-2001, и нужно сказать, что ожидается SystemVerilog ... – Marty

+0

Altera Quartus II – segfault

+1

Я не знаком с этим программным обеспечением. 'always_ff' - это ключевое слово в SystemVerilog, но не в Verilog-2001. Проверьте документы программного обеспечения, чтобы убедиться, что вам нужно включить поддержку SystemVerilog. Если вы используете его из командной строки, это может быть что-то вроде '-sv' или тому подобное. – Marty

ответ

6

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

Для Quartus автоматически распознавать, что вы используете систему Verilog, необходимо вызвать файл something.sv

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

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

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

output reg [7:0] count 

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

Приветствия

1

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

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

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

0

проблема с этим кодом

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