点击关注我的GitHub

SystemVerilog 测试的开始和结束

在verilog测试中需要verilog提供的系统函数来结束仿真

在仿真500ns时通过系统函数$finish()结束仿真。

用户也可以通过$stop()来暂停仿真

$finish():仿真会退出

$stiop():暂停仿真,但是还有机会让仿真继续运行

module tb;

bit clk;

  initial begin

  forever #5ns clk<=~clk;

end

counter dut(clk);

initial begin

  #500ns;

  $finish ( );//主动的结束仿真

end

endmodule

 

 如果在仿真开始的时候,在命令窗敲击run0,下列的行为哪些会执行?

A.assign赋值语句

B.initial语句

C.always语句

D.always语句

答案:

注意assign在时刻0会执行一次,而always必须等到信号变化才执行。

因为声明变量logic a1 = 0;

所以只要一加载,不需要run,a1就是0.

initial在0时刻也执行完毕。

组合逻辑的always要注意。

SV推理了program将验证部分的设计部分进行有效隔离以后,SV也将每一个program作为一个独立的测试用例。

如果在testbench里面有多个program,那么等待所有的program中的最后一个initial过程块完成后,才能够结束仿真(自动结束)。

program是一种隐式的结束方式,要求仿真自动结束的前提是所有的program的initial块都应该在一定时间内完成。

但是有的initial中有forever,一直执行,就没法自动结束。

可以在program中植入$exit( )要求program强行的结束。

建议将设计放在module,测试或者采样放在program里面。

program里面不可以出现“硬件的领地”:

不得使用always,interface,

program不能够例化program

program中内部定义的变量的赋值采用 = (阻塞赋值)

program内部在驱动外部硬件信号时应该使用非阻塞赋值。(硬件赋值<=)

program也可以消除delt-cycle竞争的问题

*********************************************************

硬件module

软件program class

中间 interface

**********************************************************

module和interface是学习SV的终点,关于program我们需要熟悉他的特性

 

 答案:AC

 

posted @ 2021-06-01 13:31  justkeen  阅读(2017)  评论(0编辑  收藏  举报