SystemVerilog forever loop

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

发布了91 篇原创文章 · 获赞 7 · 访问量 5252

猜你喜欢

转载自blog.csdn.net/qq_43042339/article/details/104465451
今日推荐