運行cadence dpi例子出現的問題


做ASIC驗證的童鞋們可以學學SystemVerilog DPI,它允許Verilog代碼直接調用C或者C++子程序,且比Verilog PLI簡單。與PLI的比較可參考如下文章:
中文:http://www.moditek.com/expofile/stuart-pli-dpi.pdf
英文:http://www.sutherland-hdl.com/papers/2004-SNUG-paper_Verilog_PLI_versus_SystemVerilog_DPI.pdf

最近使用DPI搭了個基於NIST標准的RM以驗證硬件實現后的加密模塊blockcipher,import到testbench中的是Crypto++ Library里不同模式(ECB、CBC等)的加密函數,這樣便可將DUT輸出和RM輸出進行compare了。

初學者一般可以用cadence自帶的例子進行學習,例子在cadence工具的安裝目錄/cadence/INCISIV111/doc/dpiEngrNtbk下,有個dpiEngrNtbkp.pdf簡單介紹了各個例子是如何運行的。

在運行cadence自帶的dpi的實例時,按照pdf說明,有“一步式”(irun)和“四步式”(ncvlog, ncelab, gcc, ncsim)兩種運行方式。“四步式”的時候,有時會出錯,遇到下面的提示:

Unable to load the default library libdpi.
./libdpi.so: cannot open shared object file:No such file or directory.

顯然是c語言文件生成的so文件沒有被ncsim正確load,那么問題出在哪兒呢?

問題出現在gcc的編譯選項上!linux服務器一般是64位的,因此用gcc編譯出來的.so共享庫也是64位的,而dpi這個程序本身是32位的,因此程序運行后找不到.so共享庫。只要在pdf上的gcc編譯選項加上"-m32",應該就可以了,如下:

gcc -m32 -fPIC -shared -o libdpi.so adder.c -I $CDS_INST_DIR/tools/inca/include($CDS_INST_DIR為Cadence INCISIV的安裝目錄)

這里簡單把相應仿真命令羅列一下。

“一步式”的命令如下:

irun -sv top.v adder.c

“四步式”的命令如下:

1 ncvlog -sv top.v
2 ncelab -access+RWC work.topincident
3 gcc -m32 -fPIC -shared -o libdpi.so adder.c -I $CDS_INST_DIR/tools/inca/include
4 ncsim work.top

更多DPI請參考:http://www.doulos.com/knowhow/sysverilog/tutorial/dpi/ 以及SystemVerilog LRM。


免責聲明!

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



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