cadence-irun(xrun) 增量編譯


引用:https://blog.csdn.net/weiqi7777/article/details/78636903

 

irun支持MSIE編譯,MSIE的全稱是 multi-snapshot incremental elaboration。將多個編譯好的snapshot,組合成一個最終的snapshot,去仿真。

利用這個技術,我們就可以使用irun來進行增量編譯,從而節約編譯時間。

為了實現增量編譯,我們將snapshot分為primary snapshot和incremental snapshot,primary snapshot指環境中不經常變化的代碼,編譯成的snapshot,incremental snapshot指環境中經常變化的代碼,編譯成的snapshot,最后再將這兩個snapshot進行組合,得到最終的snapshot,去仿真。

一、編譯流程

下圖是單個primary snapshot的編譯流程:

 

 

將DUT,編譯成primary snapshot,TB載入primary snapshot后,和tb一起進行編譯,得到仿真的snapshot,再去仿真。

 

 下圖是多個primary snapshot的編譯流程:

將SOC編譯成primary snapshot,將IP編譯成primary snapshot,將2個primary snapshot,和tb一起編譯,得到最終的仿真snapshot,再進行仿真。

二、實現方法

一般情況下,我們是將DUT和TB進行分開編譯,以實現增量編譯。對於驗證人員來說,DUT是不會變化的,因此我們可以將DUT,編譯成primary snapshot,TB部分載入DUT的primary snapshot,和自己的TB代碼一起編譯,成最終的incremental snapshot,去仿真。這樣,當環境修改之后,不需要重新編譯RTL,這樣,就節省了編譯時間。特別是RTL的設計規模很大之后,這節約的時間,就更明顯了。

三、測試

測試環境,組織結構如下:

  • flist.rtl : 編譯rtl的flist
  • flist.tb :     編譯tb的flist
  • Makefile
  • top_tb.sv :    testbench頂層
  • source:     存放rtl code的目錄
  • uvm_code:存放tb code的目錄

1、makefile解析   

Makefile內容如下:

tc:= base_test_0

irun_prim:

    irun -sv -64bit -f flist.rtl -mkprimsnap -top uart_tx -l irun_rtl.log

irun_inca:

    irun -c -sv -64bit -f flist.tb -uvm -uvmhome CDNS-1.2 -primtop uart_tx -l irun_tb.log

irun_run:

    irun -R +UVM_TESTNAME=$(tc) -l irun_run.log

clean:

    rm -rf INCA_libs

    rm -f *.log

 

對於 irun_prim 目標,根據RTL代碼生成primary snapshot。

  • -sv: 啟動sv編譯
  • -64bit: 啟動64位的irun
  • -f flist.rtl : 指定編譯RTL的flist
  • -mkprimsnap: 生成primary snapshot
  • -top: 指定RTL的頂層
  • -l: 指定log文件

對於 irun_inca 目標,載入RTL編譯得到的primary snapshot,根據TB代碼生成incremental snapshot,

  • -c: 只編譯,不仿真
  • -f flist.tb: 指定編譯TB的flist
  • -uvm: 啟動uvm編譯
  • -uvmhome CDNS-1.2: 指定uvm的home目錄為irun工具目錄下的UVM-1.2目錄
  • -primtop uart_tx: 指定需要載入primary snapshot的頂層。

對於 irun_run 目標,仿真。

  • -R : 不編譯,直接仿真
  • +UVM_TESTNAME: uvm指定testcase的選項

2、第一次執行

make irun_prim; 生成primary snapshot

make irun_inca: 載入primary snapshot,和tb一起編譯生成incremantal snapshot。

載入primary snapshot:

生成incremantal snapshot。

3、第二次執行

此時,修改top_tb.sv的代碼,增加一行打印。

因為RTL沒有編譯,因此可以跳過編譯RTL,直接make irun_inca。

載入 primary snapshot,跳過了代碼生成。

生成incremantal snapshot。

仿真,打印出hello。

測試的RTL,規模比較小,感受不到增量編譯的好處,但是當RTL的規模一旦變得很大,編譯RTL就要花費數十分鍾,此時,就可以體會到增量編譯的好處了。

在服務器,測試我們的環境,使用增量編譯后,將編譯時間,從5分鍾,縮減到了20秒。

 


免責聲明!

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



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