chi*_*ico 3 verilog system-verilog
如果我通过引用调用任务并传递事件,则在事件触发后将不会在任务内部检测到该事件:
event e;
fork
test_ev(e);
begin
#1ms;
->e;
end
join
...
task ev(ref event e);
@(e)
do_something; // this will never happen
endtask
Run Code Online (Sandbox Code Playgroud)
玩这个测试平台:http://www.edaplayground.com/x/5YS7,似乎有些模拟器喜欢ref event,有些则没有.未发出编译警告,但该@(..)语句永远不会传递.
对我来说似乎是一个有效的SystemVerilog使用,是否有一个我不知道的警告?
不需要通过引用传递事件变量 - 它已经是一个引用.
这里的问题是SystemVerilog将两个构造绑定到一个关键字中.在Verilog中,a event只是一个无值变量,你可以用触发器->改变它并等待它像任何其他变量一样改变.
SystemVerilog增强了event数据类型,使其更像一个类变量.除了event不需要构造函数之外,任何事件声明都会自动构造一个事件对象.这使事件向后兼容Verilog.当您从一个事件变量到另一个事件变量进行分配时,您正在将句柄复制到事件对象.这与复制类变量相同 - 您只复制句柄而不是对象.
因此,要使代码工作,请替换ref为input.