SVA的動態控制($asserton,$assertoff,$assertkill等)


資料來源

(1) 硅芯思見:【91】SVA的動態控制 (qq.com)

1.$asserton, $assertoff, $assertkill

(1) 作用

注1:$assertoff暫時關閉所有斷言的執行,如果該函數執行時斷言正在執行,正在執行的斷言不會被終止;

注2:$asserton重新啟動斷言執行;

注3:$assertkill將會終止設計中所有的斷言,包括已經執行的斷言;當遇到下一個斷言需要開始執行時,需要使用$asserton啟動;

(2) 使用示例: $asserton/$assertoff/$assertkill[(level[,list_of_modules_or_assertions])];

注1:level用於指定層以下哪幾層設計收到函數的影響;如果level為0,函數將影響至頂層以下所有的設計;

注2:list_of_modules_or_assertions指定該函數作用於哪些模塊或斷言(不能指向序列,但可以指向屬性);

注3:這些函數可以不指定參數,這樣這些函數的作用域將默認為整個設計;

2.詳細示例

2.1示例一

 

注1:第一次斷言在3ns處觸發,$assertoff發生在6ns處,所以第一次斷言的執行沒有收到$assertoff影響;

注2:第二次斷言在15ns處觸發,但是由於$assertoff發生在6ns處,所以第二次斷言被關閉,不會執行;

注3:22ns處$asserton執行,重新啟動斷言檢查,所以27ns處的第三次斷言被有效觸發執行;

2.2示例二

 

注1:6ns時,$assertkill執行,雖然這時3ns開始的斷言在執行中,但是會立即被終止執行,即當前正在執行的斷言會被$assertkill終止;如果后續的斷言還要繼續執行,需要使用$asserton重新開啟斷言檢查;

2.3示例三

 

注1:$assertoff(1,test)表示所有例化在test的示例中的斷言從6ns開始關閉,此時如果有斷言正在執行,其將不受到$assertoff的影響,之后新的例化子test的示例中的斷言將不再執行,直至后續$asserton重新開啟斷言檢查;

2.4示例四

 

注1:$assertoff(0,u_dut0)將u_dut0及其以下所有層次斷言關閉;

注2:$assertoff(1,u_dut1)將u_dut1模塊的所有斷言關閉,但是不包括其下所有層次;

注3:$assertoff(1,top_tb)將top_tb模塊內所有斷言關閉,但是不包括其下所有層次;

注4:$asserton(0,u_dut0)重新開啟了u_dut0的斷言檢查; 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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