Почему iverilog генерирует синтаксическую ошибку для always_ff?

Недавно я запустил System Verilog и немного ошеломлен синтаксической ошибкой. Учитывая следующий модуль:

test.sv :

module test(
  input logic clk,  
  output logic out );

  always_ff @(posedge clk) begin
    out = 1'b1;
  end
endmodule

При компиляции с iverilog -g2012 test.sv генерируется простой syntax-error для строки 5 (always_ff). Я не знаю, почему это происходит, поскольку мой синтаксис кажется правильным.


person Moritz Mossböck    schedule 06.11.2020    source источник


Ответы (1)


Синтаксис правильный для SystemVerilog, но он не поддерживается для всех версий iverilog. Из примечаний к выпуску Icarus Verilog 11

Теперь поддерживаются следующие функции языка SystemVerilog:

конструкции always_comb, always_ff и always_latch

Если вы не используете эту версию, вам следует обновить ее.

Ваш код компилируется в других симуляторах на edaplayground.

С другой стороны, вам не нужно использовать always_ff. Вы все еще можете использовать always:

  always @(posedge clk) begin
    out <= 1'b1;
  end

Я изменил ваше назначение на неблокирующее (<=), которое рекомендуется для последовательной логики.

person toolic    schedule 06.11.2020