引用: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秒。