我有一个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文件只是一个任务(不是一个模块) ,我不希望它成为一个模块)应该没问题?所以不确定为什么这不起作用。
任何帮助都会很棒
答案 0 :(得分:1)
你的第一个问题是你混淆了Verilog2K(" Verilog")和SystemVerilog。在Verilog中,任务声明只能出现在模块中或生成(而不是全局'),这会给出错误消息。其次,您的任务包含两个语句(begin/end
seq块和时间控制),这在Verilog中无效; SV放松了这一点。话虽如此,将#200
放在块之外没有任何意义,所以你不妨在块中移动它以使其与Verilog兼容。
您的下一个问题是您的任务没有输入或输出 - x
,y
,z
是内部的;您需要制作input
,output
或inout
。
最后,您已经错误地剪切/粘贴了 - 这段代码不会在没有多个分号的情况下编译。