SystemVerilog Stimulus Timing Regions

program 就是为了解决module和tb的race violation问题. 因为program作用在reactive 区域,这时赋值的更新已经稳定.

因此,我们一般推荐在Testbench中使用program,在设计dut中使用module,在顶层module中例化dut的module和 testbench的program。

program中的注意点:

  • program中不能例化其他program和module
  • 不能出现interface和always,可以使用initial forever替代always
  • program内部可以发起多个initial块
  • program中内部定义的变量最好采用阻塞赋值=,当然采用非阻塞仿真器也不会产生error,驱动外部信号则应该采用非阻塞赋值<=
  • program中的initial块和module中的initial块执行位置不同,前者在reactive,后者在active块中执行。
  • program中存在的多个initial块中,如果有一个initial采用了退出系统函数$exit(),则会结束该program,而不仅仅是该initial块。

 

SystemVerilog Stimulus Timing Regions

 

具体例子可以看https://zhuanlan.zhihu.com/p/98773154  如果只想了解四个区域的作用特性没必要看这个.遵守推荐tb建法就是。