色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在基于SV的仿真環(huán)境中使用軟件語言

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

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

int main(){

printf(“hello world!/n”);

return 0;

}

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

我們就可以在我們的SV函數(shù)中直接執(zhí)行:

function void exe();

$system(“./hello”);

Endfunction

除了這個(gè)方式,SV還提供了和C/C++直接的接口DPI。DPI接口允許用戶用C編寫程序,并和SV實(shí)現(xiàn)對(duì)接,也可以用SV寫程序,將SV程序?qū)С龅絚中。二者實(shí)現(xiàn)了相互調(diào)用。如何要在SV中使用自己定義的C函數(shù),需要在SV中導(dǎo)入函數(shù)。比如:

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函數(shù)slave_write在SV中被調(diào)用,其有兩個(gè)參量 address和data。在C函數(shù)中通常要包含兩個(gè)頭文件:svdpi.h和svdpi_src.h。

C和SV的數(shù)據(jù)類型有以下幾種對(duì)應(yīng)關(guān)系:

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

a[31:0] = b[0]

a[63:32] = b[1]

這點(diǎn)初學(xué)者很容易掉坑里,我一開始在傳遞這個(gè)變量的時(shí)候以為是一個(gè)svBitVecVal存儲(chǔ)1bit數(shù)據(jù)。在SV測(cè)的多維數(shù)據(jù)也都可以在C中使用1維指針接收,比如有以下函數(shù):

Void write(svBitVecVal* data){

}

SV中可以為:

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

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

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

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中傳遞固定維度數(shù)組,還可以傳遞不固定維度數(shù)組,即動(dòng)態(tài)數(shù)據(jù)。在C中通過svOpenArrayHandle來獲取這些數(shù)據(jù),這些數(shù)據(jù)的操作也需要通過一些函數(shù),不能直接操作。比如以下函數(shù)可以獲得動(dòng)態(tài)數(shù)組的位置:

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);

比如定義一個(gè)數(shù)組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函數(shù)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4345

    瀏覽量

    62896
  • SV
    SV
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    13943
  • 仿真驗(yàn)證
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    8156
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在Windows中使用MTP協(xié)議

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

    何在智能手機(jī)系統(tǒng)中使用bq27505

    電子發(fā)燒友網(wǎng)站提供《如何在智能手機(jī)系統(tǒng)中使用bq27505.pdf》資料免費(fèi)下載
    發(fā)表于 10-17 10:21 ?0次下載
    如<b class='flag-5'>何在</b>智能手機(jī)系統(tǒng)<b class='flag-5'>中使</b>用bq27505

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

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

    何在反向降壓-升壓拓?fù)?b class='flag-5'>中使用TPS6290x

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

    何在汽車CAN應(yīng)用中使用負(fù)邊緣觸發(fā)觸發(fā)器節(jié)省電力

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

    何在新興的低軌衛(wèi)星應(yīng)用中使用數(shù)字隔離器隔離信號(hào)

    電子發(fā)燒友網(wǎng)站提供《如何在新興的低軌衛(wèi)星應(yīng)用中使用數(shù)字隔離器隔離信號(hào).pdf》資料免費(fèi)下載
    發(fā)表于 09-12 09:37 ?0次下載
    如<b class='flag-5'>何在</b>新興的低軌衛(wèi)星應(yīng)用<b class='flag-5'>中使</b>用數(shù)字隔離器隔離信號(hào)

    何在RTOS中使用spi_interface.c?

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

    請(qǐng)問cmakelists中的變量如何在程序中使用?

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

    FX2 CY7C68013A如何在C++環(huán)境中使用LoadEEPROM函數(shù)?

    我使用的是 FX2 CY7C68013A 芯片。 我知道 CyUSB.NET 庫中有我需要的 LoadEEPROM 函數(shù)。 請(qǐng)問如何在 C++ 環(huán)境而不是 C#/CLR 環(huán)境中使用該函
    發(fā)表于 05-31 06:59

    電路仿真軟件有哪些類型 電路仿真接線app軟件哪個(gè)好

    電路仿真軟件有以下幾個(gè)類型:電子數(shù)字仿真軟件、電子模擬仿真軟件、電源電氣
    的頭像 發(fā)表于 05-04 10:49 ?3460次閱讀

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

    電路仿真軟件是一種用于設(shè)計(jì)、測(cè)試和驗(yàn)證電路的工具,它可以模擬實(shí)際電路的行為和性能。本文將詳細(xì)介紹電路仿真軟件的使用流程,包括軟件的安裝、電路
    的頭像 發(fā)表于 05-04 10:39 ?2863次閱讀

    什么是電路仿真 數(shù)字電路仿真軟件哪個(gè)好用

    的計(jì)算機(jī)程序,能夠提供電路設(shè)計(jì)、調(diào)試和優(yōu)化的環(huán)境。不同的電路仿真軟件具有不同的特點(diǎn)和功能,下面是幾款常用的數(shù)字電路仿真軟件: Multisi
    的頭像 發(fā)表于 04-21 10:26 ?3823次閱讀

    工業(yè)計(jì)算機(jī)是什么?如何在不同行業(yè)中使用?

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

    fpga仿真軟件有哪些

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

    何在測(cè)試中使用ChatGPT

    Dimitar Panayotov 在 2023 年 QA Challenge Accepted 大會(huì) 上分享了他如何在測(cè)試中使用 ChatGPT。
    的頭像 發(fā)表于 02-20 13:57 ?793次閱讀
    主站蜘蛛池模板: 亚洲91av| 男男校园园bl文全肉高h寝室 | bt天堂午夜国产精品 | 亚洲免费在线视频 | 久久91精品久久久久久水蜜桃 | 囯产免费久久久久久国产免费 | 亚洲精品一区三区三区在线观看 | 亚洲AV 无码AV 中文字幕 | acg全彩无遮挡口工漫画网址 | 黄色a级免费网站 | 色百度网址大全 | 最新无码国产在线视频9299 | 洲精品无码高潮喷水A片 | 欧美另类videosbest | 成人免费肉动漫无遮网站 | 国产精品免费久久久久影院 | 天天狠狠弄夜夜狠狠躁·太爽了 | 妻子撸av中文字幕 | 色婷婷亚洲五月 | 色综合五月激情综合色一区 | 亚洲中文字幕无码一去台湾 | 国产精品成人无码久免费 | 久草在线福利视频在线播放 | 空姐内射出白浆10p 空姐厕所啪啪啪 | 成人在无码AV在线观看一 | 久久99re6国产在线播放 | 十九岁在线观看免费完整版电影 | 色cccwww| 被强J高H纯肉公交车啊 | 国产午夜精品自在自线之la | 亚洲精品伊人久久久久 | 翁公与小莹在客厅激情 | 黑丝美女娇喘 | 国产精品系列在线一区 | 国产在线精彩亚洲久久 | 思思久99久女女精品 | 被黑人掹躁10次高潮 | 久久午夜免费视频 | qvod 电影| 免费视频网站嗯啊轻点 | 哺乳期妇女挤奶水36d |