日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SystemVerilog搭建验证平台使用DPI时遇到的问题及解决方案

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SystemVerilog搭建验证平台使用DPI时遇到的问题及解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文目的在于分享一下把DPI稿能用了的過程,主要說一下平臺其他部分搭建好之后,在完成DPI相關工作階段遇到的問題,以及解決的辦法。


工作環境:win10 64bit, Questasim 10.1b


首先,ref_model中導入C代碼,同時將C代碼放在相同與ref_model相同目錄下

import "DPI-C" context function void huffman(input int datain[256], output int dataout[35][32]);

C代碼中添加include

#include "svdpi.h"

之后開始,RTL代碼+驗證平臺代碼編譯通過,圖形界面點仿真,報錯

Can't locate a C compiler for compilation of DPI export tasks/functionsNull foreign function pointer encountered when calling 'huffman#_mti_copy_opFailed to find user specified function 'huffman' in DPI C/C++ source files.

以上幾個錯誤,每一行是一個錯誤,不是在同一次出現。

因為SV綠皮書上沒有提到需要額外的gcc編譯器作為支持,所以開始沒想到是缺少東西,以為是調用格式錯誤,搜索各種資料,在這個過程中發現可能是因為缺少編譯器支持C的編譯,想來也對,questasim應該是不可能原生支持C的編譯的。

之后下載了編譯器【附地址:http://vdisk.weibo.com/s/Cg59vH6N6n5EG】,解壓后直接放在Questasim的安裝目錄即可。

理論上講,這個時候應該就能用了,但是questasim中一仿真,還是會出錯,沒辦法,又開始找問題。

這個過程中想到了軟件自帶的例子可能會有這方面的示例,于是到【D:\questasim_10.1b\examples\systemverilog\dpi】目錄下找到了幾個例子,之后在Questasim的命令行里do run.do運行了下給的例子,發現可以運行通過,沒有報錯,這說明,此時我的電腦中,使用DPI所需的東西肯定是全的,那么我的代碼跑不過就一定是出在了運行的方式上。

于是嘗試修改run.do文件來用命令行運行我的代碼(之前都是在GUI中鼠標點擊編譯運行,問題可能就出在編譯和仿真的時候的選項不同),在嘗試的時候遇到新的問題, 因為RTL是用VHDL寫的,而vlog是無法編譯的,搜了一下知道,要用vcom來編譯VHDL。

這之后還經歷了非常詭異的問題,就是我的BaseClass.sv每次在vlog編譯之后都一定會被修改,變成如下的代碼,BaseClass原來的內容不翼而飛了,如下

/* MTI_DPI *//** Copyright 2002-2012 Mentor Graphics Corporation.** Note:* This file is automatically generated.* Please do not edit this file - you will lose your edits.** Settings when this file was generated:* PLATFORM = 'win32'*/ #ifndef INCLUDED_HEAD #define INCLUDED_HEAD#ifdef __cplusplus #define DPI_LINK_DECL extern "C" #else #define DPI_LINK_DECL #endif#include "svdpi.h"DPI_LINK_DECL DPI_DLLESPEC void huffman(const int* datain,int* dataout);#endif

為什么會出現這個問題,一直沒搞清楚,并且現在也不出現了,如果有人知道原因,還請告訴我哈,對這個事耿耿于懷。
就這樣,幾經波折之后,這個問題消失了,用圖形界面也可以順利跑通了。

附上幾個有關DPI的地址,有問題沒解決的話可以去看一下
https://www.doulos.com/knowhow/sysverilog/tutorial/dpi/
https://en.wikipedia.org/wiki/SystemVerilog_DPI


剛剛又重建了一個project,把整個流程捋順了一下。

  • questasim 新建project,把沒有問題的testbench代碼導入,包括C代碼和我的VHDL代碼
  • GUI編譯,其他正常,只有C代碼報錯,信息如下
D:/Code/NCICC/Testbench_SV/TestofDPI/Huffman_func.c: In function 'huffman': D:/Code/NCICC/Testbench_SV/TestofDPI/Huffman_func.c:41: warning: incompatible implicit declaration of built-in function 'printf'"D:/Code/NCICC/Testbench_SV/TestofDPI/Huffman_func.c", line 41: error: identifier "printf" is undefinedprintf("After weight refresh\n");^1 error detected in the compilation of "D:/Code/NCICC/Testbench_SV/TestofDPI/Huffman_func.c". ** Error: (sccom-6143) Creation of debug database failed.
  • 使用命令行,分別輸入下面命令。第一個命令編譯VHDL代碼,第二個編譯SV和C代碼
vcom -work work -2002 -explicit -vopt whole_module.vhdvlog -work work -sv -dpiheader *.sv Huffman_func.c
  • 此時Transcript的信息最多只有warning,沒有error,但是,實際上vlog之后我的BaseClass.sv已經被改變了,見圖

  • 這時需要手動將BaseClass代碼改回來,保存,無需再編譯(這是我比較奇怪的地方,難道是vlog正常編譯了BaseClass,之后又把內容換掉了。隨后進行了實驗,不改BaseClass,也即保持它還是被改過的錯的代碼,依然能順利仿真。),之后在GUI中仿真,一切順利。

經驗

有問題及時記錄,解決了也及時寫下解決方法,不要等所有問題解決再做這件事,一方面,所有問題解決時精力耗費很多,已經不想做了,另一方面,這時距離一些問題出現已經有時間了,可能已經忘了出現過哪些問題以及解決辦法了。所以要在問題出現的和解決的時候及時記錄,盡可能還原整個大問題的出現和解決的過程,為以后出現類似問題留下足夠可參考的經驗。

希望會對后面遇到問題的朋友起到幫助。

嗯,酒醬。

轉載于:https://www.cnblogs.com/JVever/p/6686730.html

總結

以上是生活随笔為你收集整理的SystemVerilog搭建验证平台使用DPI时遇到的问题及解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。