Verilog 中的子程序(由 ModelSim 使用)

Subroutines in Verilog (used by ModelSim)

我在使用 Verilog 运行子程序时遇到问题。我正在学习几个教程,但无法编译我的 verilog 文件。这是我的代码的简化版本。

module name(/*stuff*/)
inputs /*stuff*/
outputs /*stuff*/

initial begin
/*stuff*/
end

   //Simple reset task
    task reset_module ();
        reset[1] = 1;
        #(`CLOCK_CYCLE*4) 
        reset[1] = 0;
        #(`CLOCK_CYCLE*4)
    endtask

endmodule

编译器抱怨 endtask 关键字是意外的。

您需要在延迟行的末尾添加分号:

task reset_module();
  reset[1] = 1;
  #(`CLOCK_CYCLE*4); 
  reset[1] = 0;
  #(`CLOCK_CYCLE*4);
endtask

最后一个延迟构造后需要一个分号。那是因为 #(expression) 结构并不是一个完整的语句,它是一个语句修饰符。每个语句前面可以有任意数量的延迟结构(如 #(expr) @(expr) )。如果您需要在程序语句块末尾使用延迟构造,则需要一个空语句,它只是一个分号。