在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在基于SV的仿真環境中使用軟件語言

454398 ? 來源:AI加速微信公眾號 ? 作者:AI加速微信公眾號 ? 2020-09-27 14:20 ? 次閱讀

仿真驗證中,SV語言不能很好的描述復雜的計算或者流程關系,使用軟件語言(比如C)就比較方便。那么當我們使用C描述了這些關系后,如何在基于SV的仿真環境中使用呢?有兩種方式,一種是將C編譯為可執行文件,利用系統函數進行調用。另外一種方式利用SV提供的 DPI-C接口。第一種方式并不是嚴格意義上的SV和C的對接,只是通過命令行執行了C程序。比如我們寫了一個hello world的c程序:

int main(){

printf(“hello world!/n”);

return 0;

}

我們將其編譯為可執行文件gcc -o hello hello.c

我們就可以在我們的SV函數中直接執行:

function void exe();

$system(“./hello”);

Endfunction

除了這個方式,SV還提供了和C/C++直接的接口DPI。DPI接口允許用戶用C編寫程序,并和SV實現對接,也可以用SV寫程序,將SV程序導出到c中。二者實現了相互調用。如何要在SV中使用自己定義的C函數,需要在SV中導入函數。比如:

module Bus(input In1, output Out1);
import "DPI" function void slave_write(input int address,
input int data);
export "DPI" function write; // Note – not a function prototype

// This SystemVerilog function could be called from C
function void write(int address, int data);
// Call C function
slave_write(address, data); // Arguments passed by copy
endfunction
...
endmodule

C中為:

#include "svdpi.h"
extern void write(int, int); // Imported from SystemVerilog
void slave_write(const int I1, const int I2)
{
buff[I1] = I2;
...
}

C函數slave_write在SV中被調用,其有兩個參量 address和data。在C函數中通常要包含兩個頭文件:svdpi.h和svdpi_src.h。

C和SV的數據類型有以下幾種對應關系:

我們需要注意SV和C之間參量傳遞有兩種方式,一種是值傳遞,比如byte-char,shortint-short int等,另外一種方式是通過指針傳遞,比如在SV中packed和unpacked的數組,是通過引用傳遞到C的,那么C中就使用指針來進行接收。比如bit[n:0]作為packed數組,傳遞到C中是用svBitVecVal*來接收的,svBitVecVal是一個宏定義,實際上就是32bit數據。在這里需要注意的是,n bit的SV數據在C中是以32bit數據存放的,按照小端排列。比如bit[127:0] a,對應的C中數據svBitVecVal* b,有以下對應關系:

a[31:0] = b[0]

a[63:32] = b[1]

這點初學者很容易掉坑里,我一開始在傳遞這個變量的時候以為是一個svBitVecVal存儲1bit數據。在SV測的多維數據也都可以在C中使用1維指針接收,比如有以下函數:

Void write(svBitVecVal* data){

}

SV中可以為:

Import “DPI-C” function void write(bit[127:0] data[16][16]);

這樣在C中讀寫data數據的時候就需要通過指針來確認數據位置。指針指向了數據data的第一個32bit數據,即data[0][0][31:0],之后數據往后增加指針即可得到。

對于unpacked的數組數據,在C中可以使用指針直接訪問,但是在packed中的數據,卻只允許使用定義的函數來讀寫。這些函數有:

svBit svGetSelectBit(const svBitPackedArrRef s, int i);

svLogic svGetSelectLogic(const svLogicPackedArrRef s, int i);

void svPutSelectBit(svBitPackedArrRef d, int i, svBit s);

void svPutSelectLogic(svLogicPackedArrRef d, int i, svLogic s);

/* canonical

void svGetPartSelectBit(svBitVec32* d, const svBitPackedArrRef s, int i,

int w);

svBitVec32 svGetBits(const svBitPackedArrRef s, int i, int w);

svBitVec32 svGet32Bits(const svBitPackedArrRef s, int i); // 32-bits

unsigned long long svGet64Bits(const svBitPackedArrRef s, int i); // 64-bits

void svGetPartSelectLogic(svLogicVec32* d, const svLogicPackedArrRef s, int i,

int w);

/* actual

void svPutPartSelectBit(svBitPackedArrRef d, const svBitVec32 s, int i,

int w);

void svPutPartSelectLogic(svLogicPackedArrRef d, const svLogicVec32 s, int i,

int w);

除了可以向C中傳遞固定維度數組,還可以傳遞不固定維度數組,即動態數據。在C中通過svOpenArrayHandle來獲取這些數據,這些數據的操作也需要通過一些函數,不能直接操作。比如以下函數可以獲得動態數組的位置:

int svLeft(const svOpenArrayHandle h, int d);

int svRight(const svOpenArrayHandle h, int d);

int svLow(const svOpenArrayHandle h, int d);

int svHigh(const svOpenArrayHandle h, int d);

比如定義一個數組bit[3:0] data[3:9],那么

svLeft(data, 1)是3,svRight(data, 1)是9。

在SV中有如下形式:

Import “DPI-C” function void write(bit[3:0] data[])

C中為:
Void write(svOpenArrayHandle data)

C函數

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62773
  • SV
    SV
    +關注

    關注

    0

    文章

    6

    瀏覽量

    13937
  • 仿真驗證
    +關注

    關注

    0

    文章

    25

    瀏覽量

    8149
收藏 人收藏

    評論

    相關推薦

    何在Windows中使用MTP協議

    、圖片等)的通信協議,它被廣泛用于Android設備。以下是如何在Windows中使用MTP協議的詳細步驟: 1. 確保設備支持MTP 首先,你需要確認你的設備支持MTP協議。大多數現代Android
    的頭像 發表于 01-03 10:26 ?137次閱讀

    何在智能手機系統中使用bq27505

    電子發燒友網站提供《如何在智能手機系統中使用bq27505.pdf》資料免費下載
    發表于 10-17 10:21 ?0次下載
    如<b class='flag-5'>何在</b>智能手機系統<b class='flag-5'>中使</b>用bq27505

    何在MSP430?MCU中使用智能模擬組合

    電子發燒友網站提供《如何在MSP430?MCU中使用智能模擬組合.pdf》資料免費下載
    發表于 09-14 10:19 ?0次下載
    如<b class='flag-5'>何在</b>MSP430?MCU<b class='flag-5'>中使</b>用智能模擬組合

    何在反向降壓-升壓拓撲中使用TPS6290x

    電子發燒友網站提供《如何在反向降壓-升壓拓撲中使用TPS6290x.pdf》資料免費下載
    發表于 09-13 10:07 ?0次下載
    如<b class='flag-5'>何在</b>反向降壓-升壓拓撲<b class='flag-5'>中使</b>用TPS6290x

    何在汽車CAN應用中使用負邊緣觸發觸發器節省電力

    電子發燒友網站提供《如何在汽車CAN應用中使用負邊緣觸發觸發器節省電力.pdf》資料免費下載
    發表于 09-13 10:06 ?0次下載
    如<b class='flag-5'>何在</b>汽車CAN應用<b class='flag-5'>中使</b>用負邊緣觸發觸發器節省電力

    何在新興的低軌衛星應用中使用數字隔離器隔離信號

    電子發燒友網站提供《如何在新興的低軌衛星應用中使用數字隔離器隔離信號.pdf》資料免費下載
    發表于 09-12 09:37 ?0次下載
    如<b class='flag-5'>何在</b>新興的低軌衛星應用<b class='flag-5'>中使</b>用數字隔離器隔離信號

    何在RTOS中使用spi_interface.c?

    何在 RTOS 中使用 spi_interface.c?
    發表于 07-10 06:29

    請問cmakelists中的變量如何在程序中使用?

    大家好, 我有個問題請教,cmakelists.txt中的變量如何在程序中使用?比如以下cmakelists.txt文件中的PROJECT_VER變量,我如何在c程序中使用?試了很多辦
    發表于 06-11 07:34

    FX2 CY7C68013A如何在C++環境中使用LoadEEPROM函數?

    我使用的是 FX2 CY7C68013A 芯片。 我知道 CyUSB.NET 庫中有我需要的 LoadEEPROM 函數。 請問如何在 C++ 環境而不是 C#/CLR 環境中使用該函
    發表于 05-31 06:59

    電路仿真軟件如何使用 電路仿真軟件操作流程

    電路仿真軟件是一種用于設計、測試和驗證電路的工具,它可以模擬實際電路的行為和性能。本文將詳細介紹電路仿真軟件的使用流程,包括軟件的安裝、電路
    的頭像 發表于 05-04 10:39 ?2732次閱讀

    工業計算機是什么?如何在不同行業中使用?

    工業電腦是專為在工業環境中使用而設計的計算機。它們可用于各個行業,包括制造、運 輸和能源。它們通常比普通計算機更強大,并且能夠在大多數計算機無法運行的環境中運行。在本文中,我們將更深入地了解什么是工業計算機以及它們如
    的頭像 發表于 04-01 15:45 ?833次閱讀
    工業計算機是什么?如<b class='flag-5'>何在</b>不同行業<b class='flag-5'>中使</b>用?

    fpga仿真軟件有哪些

    此外,還有一些其他的FPGA仿真軟件,如Gvim和ISE等,可以根據具體需求和開發環境進行選擇。需要注意的是,不同的FPGA仿真軟件可能具有
    的頭像 發表于 03-15 14:00 ?4072次閱讀

    何在測試中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大會 上分享了他如何在測試中使用 ChatGPT。
    的頭像 發表于 02-20 13:57 ?776次閱讀

    何在DAVE IDE中使用XMC7200?

    能否在 DAVE IDE 中為 XMC 7200 EVK KIT 構建應用程序。我嘗試打開一個項目但它最多只能顯示 XMC48000。如何在 DAVE IDE 中使用 XMC7200 請幫忙。
    發表于 01-26 06:32

    何在ModustoolBox中使用SEGGER AppWizard GUI生成器軟件和CY8CKIT-062-WIFI-BT?

    我想知道如何在 ModustoolBox 中使用 SEGGER AppWizard GUI 生成器軟件和 CY8CKIT-062-WIFI-BT? 我構建了 GUI 并導出了,但我不知道如何在
    發表于 01-19 06:26
    主站蜘蛛池模板: 亚洲区在线播放| 午夜影院免费体验| 色综合综合网| 色偷偷亚洲男人| 日本免费小视频| 免费三级黄色| 四虎成人精品在永久在线观看| 性欧美巨大| 综合色图| 亚洲国产精品久久久久婷婷老年| 色视频免费观看高清完整| 男女视频在线观看免费| 中文字幕一区二区三区永久| 亚洲小说区图片区另类春色| 欧美五月婷婷| 456成人| 精品视频一区在线观看| 天天天天天操| 男人午夜禁片在线观看| 182tv免费视视频线路一二三| 中文字幕 亚洲一区| 中文字幕一区二区三区四区五区人| 5g成人影院| 亚洲人成a在线网站| 日韩电影中文字幕| 三级网站在线免费观看| 天堂网2014av| 午夜宅男视频| 免费视频爰爱太爽了| www.激情五月.com| 97国产影院| 一级特黄视频| 五月天婷婷基地| 国产精品资源网站在线观看| tdg58在线观看| 亚洲酒色1314狠狠做| 2021久久精品99精品久久| 色啦啦影院| 深爱五月激情网| 韩国三级hd中文字幕| 特一级黄|