从另一个Verilog模块调用任务

时间:2017-10-19 19:51:39

标签: task verilog

我正在尝试学习Verilog并且我有一个Verilog模块,然后我想做的就是调用另一个文件并从我当前的模块中运行它。

所以我的模块如下:

module maths();
//register etc details
initial begin

`include "add.v"

end
endmodule

我从maths模块调用的add.v文件就像:

task add;
    A = $random;
    B = $random;
    C = A + B;
    $display("Answer: %d", C);
endtask

但我收到任务文件near "task": syntax error, unexpected "task"near "endtask": syntax error, unexpected "endtask"中的错误。

我在How to call tasks from a separate module in Verilog?阅读了答案,但那里给出的答案是需要在初始或总是阻塞内调用任务,因为它在模块的初始块内。

我在哪里错了?

1 个答案:

答案 0 :(得分:0)

像Serge说的那样,总是在文件的开头包含你的文件,就在模块声明之前。

`include "add.v"

module maths();
//register etc details
initial begin
    add;
end
endmodule

至于问题,您在添加任务中缺少初始结束语句。任务总是需要这两个语句来包装您的任务代码。

所以,这应该有效:

reg A, B, C;

task add;
begin
    A = $random;
    B = $random;
    C = A + B;
    $display("Answer: %d", C);
end
endtask

不要忘记A,B,C声明:)!