chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

454398 ? 來(lái)源:AI加速微信公眾號(hào) ? 作者:AI加速微信公眾號(hào) ? 2020-09-27 14:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

仿真驗(yàn)證中,SV語(yǔ)言不能很好的描述復(fù)雜的計(jì)算或者流程關(guān)系,使用軟件語(yǔ)言(比如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ì)接,只是通過(guò)命令行執(zhí)行了C程序。比如我們寫(xiě)了一個(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編寫(xiě)程序,并和SV實(shí)現(xiàn)對(duì)接,也可以用SV寫(xiě)程序,將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ù)類(lèi)型有以下幾種對(duì)應(yīng)關(guān)系:

我們需要注意SV和C之間參量傳遞有兩種方式,一種是值傳遞,比如byte-char,shortint-short int等,另外一種方式是通過(guò)指針傳遞,比如在SV中packed和unpacked的數(shù)組,是通過(guò)引用傳遞到C的,那么C中就使用指針來(lái)進(jìn)行接收。比如bit[n:0]作為packed數(shù)組,傳遞到C中是用svBitVecVal*來(lái)接收的,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é)者很容易掉坑里,我一開(kāi)始在傳遞這個(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中讀寫(xiě)data數(shù)據(jù)的時(shí)候就需要通過(guò)指針來(lái)確認(rèn)數(shù)據(jù)位置。指針指向了數(shù)據(jù)data的第一個(gè)32bit數(shù)據(jù),即data[0][0][31:0],之后數(shù)據(jù)往后增加指針即可得到。

對(duì)于unpacked的數(shù)組數(shù)據(jù),在C中可以使用指針直接訪問(wèn),但是在packed中的數(shù)據(jù),卻只允許使用定義的函數(shù)來(lái)讀寫(xiě)。這些函數(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中通過(guò)svOpenArrayHandle來(lái)獲取這些數(shù)據(jù),這些數(shù)據(jù)的操作也需要通過(guò)一些函數(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)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4405

    瀏覽量

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

    關(guān)注

    0

    文章

    7

    瀏覽量

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

    關(guān)注

    0

    文章

    26

    瀏覽量

    8324
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    何在AMD Vitis Unified IDE中使用系統(tǒng)設(shè)備樹(shù)

    您將在這篇博客中了解系統(tǒng)設(shè)備樹(shù) (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 維護(hù)來(lái)自 XSA 的硬件元數(shù)據(jù)。本文還講述了如何對(duì) SDT 進(jìn)行操作,以便在 Vitis Unified IDE 中實(shí)現(xiàn)更靈活的使用場(chǎng)景。
    的頭像 發(fā)表于 11-18 11:13 ?2783次閱讀
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系統(tǒng)設(shè)備樹(shù)

    【產(chǎn)品介紹】Modelsim:HDL語(yǔ)言仿真軟件

    概述ModelSim是業(yè)界最優(yōu)秀的HDL語(yǔ)言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的單內(nèi)核支持VHDL和Verilog混合
    的頭像 發(fā)表于 11-13 11:41 ?179次閱讀
    【產(chǎn)品介紹】Modelsim:HDL<b class='flag-5'>語(yǔ)言</b><b class='flag-5'>仿真</b><b class='flag-5'>軟件</b>

    何在VS code中配置Zephyr集成開(kāi)發(fā)環(huán)境

    上一篇文章介紹了如何在VS code中使用瑞薩官方插件為RA芯片創(chuàng)建項(xiàng)目與項(xiàng)目調(diào)試,相信大家對(duì)RA在VS code中的開(kāi)發(fā)有了基礎(chǔ)的了解。
    的頭像 發(fā)表于 11-05 14:46 ?1020次閱讀
    如<b class='flag-5'>何在</b>VS code中配置Zephyr集成開(kāi)發(fā)<b class='flag-5'>環(huán)境</b>

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中導(dǎo)入模型后,需要設(shè)置其輸入和輸出接口以與您的設(shè)計(jì)進(jìn)行適配。 1. 在Vivado HLS項(xiàng)目中導(dǎo)入模型文件 可以
    發(fā)表于 10-22 06:29

    E203軟件仿真環(huán)境的搭建

    ,如何讓E203能夠在軟件仿真環(huán)境下運(yùn)行自己編寫(xiě)的C語(yǔ)言代碼呢? 以下是我們的方案。 首先,hbird-sdkapplicationbaremetal目錄下放置著一些測(cè)試程序,以he
    發(fā)表于 10-20 09:38

    運(yùn)行自己編寫(xiě)的C語(yǔ)言項(xiàng)目的E203軟件仿真環(huán)境的搭建

    ,如何讓E203能夠在軟件仿真環(huán)境下運(yùn)行自己編寫(xiě)的C語(yǔ)言代碼呢? 以下是我們的方案。 首先,hbird-sdkapplicationbaremetal目錄下放置著一些測(cè)試程序,以he
    發(fā)表于 10-20 06:44

    Simcenter FLOEFD HVAC模塊:促進(jìn)對(duì)建筑環(huán)境和居住舒適度的仿真

    優(yōu)勢(shì)評(píng)估熱舒適度HVAC系統(tǒng)的測(cè)試效率設(shè)計(jì)符合嚴(yán)苛環(huán)境法規(guī)SiemensDigitalIndustriesSoftware是建筑環(huán)境氣流和溫度仿真領(lǐng)域的領(lǐng)先企業(yè)。它打造
    的頭像 發(fā)表于 09-25 11:40 ?401次閱讀
    Simcenter FLOEFD HVAC模塊:促進(jìn)對(duì)建筑<b class='flag-5'>環(huán)境</b>和居住舒適度的<b class='flag-5'>仿真</b>

    SV7321, SV7358, SV7324英文手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《SV7321, SV7358, SV7324英文手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-09 18:09 ?0次下載

    SV8541A、SV8542A、SV8544A 微功率低噪聲運(yùn)算放大器技術(shù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《SV8541A、SV8542A、SV8544A 微功率低噪聲運(yùn)算放大器技術(shù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-09 17:17 ?0次下載

    請(qǐng)問(wèn)如何在 Keil μVision 或 IAR EWARM 中使用觀察點(diǎn)進(jìn)行調(diào)試?

    何在 Keil μVision 或 IAR EWARM 中使用觀察點(diǎn)進(jìn)行調(diào)試?
    發(fā)表于 08-20 06:29

    何在裸機(jī)環(huán)境中運(yùn)行KleidiAI微內(nèi)核

    探索如何在裸機(jī)環(huán)境中運(yùn)行 KleidiAI 內(nèi)核,并通過(guò)測(cè)試多款 C/C++ 編譯器,以確定如何能更高效地生成代碼。
    的頭像 發(fā)表于 08-08 15:16 ?3614次閱讀
    如<b class='flag-5'>何在</b>裸機(jī)<b class='flag-5'>環(huán)境</b>中運(yùn)行KleidiAI微內(nèi)核

    電磁環(huán)境仿真與驗(yàn)證系統(tǒng)軟件

    電磁環(huán)境仿真與驗(yàn)證系統(tǒng)軟件
    的頭像 發(fā)表于 04-29 16:59 ?806次閱讀
    電磁<b class='flag-5'>環(huán)境</b><b class='flag-5'>仿真</b>與驗(yàn)證系統(tǒng)<b class='flag-5'>軟件</b>

    何在MATLAB中使用DeepSeek模型

    在 DeepSeek-R1(https://github.com/deepseek-ai/DeepSeek-R1) AI 模型橫空出世后,人們幾乎就立馬開(kāi)始詢問(wèn)如何在 MATLAB 中使用這些模型
    的頭像 發(fā)表于 02-13 09:20 ?4036次閱讀
    如<b class='flag-5'>何在</b>MATLAB<b class='flag-5'>中使</b>用DeepSeek模型

    何在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 ?4365次閱讀

    何在Tina-ti仿真軟件中添加ads1282&amp;ads1283這兩款adc?

    何在Tina-ti仿真軟件中添加ads1282&ads1283這兩款adc?可以給一下模板嗎
    發(fā)表于 12-12 07:40