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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM