全局声明在verilog 2001语法中是非法的任务

时间:2017-10-21 10:43:16

标签: verilog

我有一个verilog文件,我想在其中拥有的是一个执行某些数学的任务,然后我在另一个文件中include "maths.v"并通过在mathsfunction;中编写initial begin - end来调用该任务如果我理解正确的话,另一个文件中的task mathsfunction; reg [0:31] x; reg [0:31] y; reg [0:31] z; begin x = $urandom; y = $urandom; z = x + y end #200 endtask 阻塞应该运行任务,代码如下:

Maths.v

task mathsfunction;

我得到一个编译错误,它位于第一行Global declarations are illegal in Verilog 2001 syntax.,即GMSMapView从我到目前为止学到的,有一个verilog文件只是一个任务(不是一个模块) ,我不希望它成为一个模块)应该没问题?所以不确定为什么这不起作用。

任何帮助都会很棒

1 个答案:

答案 0 :(得分:1)

你的第一个问题是你混淆了Verilog2K(" Verilog")和SystemVerilog。在Verilog中,任务声明只能出现在模块中或生成(而不是全局'),这会给出错误消息。其次,您的任务包含两个语句(begin/end seq块和时间控制),这在Verilog中无效; SV放松了这一点。话虽如此,将#200放在块之外没有任何意义,所以你不妨在块中移动它以使其与Verilog兼容。

您的下一个问题是您的任务没有输入或输出 - xyz是内部的;您需要制作inputoutputinout

最后,您已经错误地剪切/粘贴了 - 这段代码不会在没有多个分号的情况下编译。