forever的循环永远或无限的时间运行。
*
Syntax
forever
// 单一陈述
forever begin
// 多个陈述
end
forever循环类似于以下Verilog中显示的代码。两者都运行无限的仿真时间,并且在其中包含延迟元素很重要。 没有延迟元素的forever或always的块会挂在仿真中!
always
// 单一陈述
always begin
// 多个陈述
end
在SystemVerilog中,always块不能放置在类和其他SystemVerilog程序块内部。 相反,我们可以使用forever循环来达到相同的效果。
下面显示的伪代码模仿了testbench中监视器的功能,该监视器一旦启动就可以运行,只要它监视的总线上有活动就可以运行。
class Monitor;
virtual task run();
forever begin
@(posedge vif.clk);
if (vif.write & vif.sel)
//捕获写数据
if (!vif.write & vif.sel)
// 捕获读取的数据
end
endtask
endclass
module tb;
Monitor mon;
// 启动监视任务,只要总线上有活动,就允许它继续
initial begin
fork
mon.run();
join_none
end
endmodule
参考文献:
【1】https://www.chipverify.com/systemverilog/systemverilog-forever-loop