在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