做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.v2 ncelab -access+RWC work.topincident3 gcc -m32 -fPIC -shared -o libdpi.so adder.c -I $CDS_INST_DIR/tools/inca/include4 ncsim work.top
更多DPI請參考:http://www.doulos.com/knowhow/sysverilog/tutorial/dpi/ 以及SystemVerilog LRM。