在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