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)
)。如果您需要在程序语句块末尾使用延迟构造,则需要一个空语句,它只是一个分号。
我在使用 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)
)。如果您需要在程序语句块末尾使用延迟构造,则需要一个空语句,它只是一个分号。