91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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ù)類型有以下幾種對(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

    文章

    4417

    瀏覽量

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

    關(guān)注

    0

    文章

    7

    瀏覽量

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

    關(guān)注

    0

    文章

    27

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    RDMA設(shè)計(jì)35:基于 SV 的驗(yàn)證平臺(tái)

    ,而只對(duì)其接口(AXI-Stream 及 Config)進(jìn)行仿真驗(yàn)證,將在一定程度上減小驗(yàn)證平臺(tái)的復(fù)雜度和搭建的難度?;?SV 的驗(yàn)證平臺(tái)的整體架構(gòu)如圖.1 所示。 圖1 基于 SV 的驗(yàn)證平臺(tái)
    發(fā)表于 02-01 13:14

    如何使用Modelsim仿真I2C控制器

    ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述語(yǔ)言仿真軟件。該軟件可以用來(lái)實(shí)現(xiàn)對(duì)設(shè)計(jì)的VHDL、Verilog HDL
    的頭像 發(fā)表于 01-10 14:14 ?5393次閱讀
    如何使用Modelsim<b class='flag-5'>仿真</b>I2C控制器

    何在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 ?3113次閱讀
    如<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 ?502次閱讀
    【產(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 ?1510次閱讀
    如<b class='flag-5'>何在</b>VS code中配置Zephyr集成開(kāi)發(fā)<b class='flag-5'>環(huán)境</b>

    開(kāi)源RISC-V處理器(蜂鳥(niǎo)E203)學(xué)習(xí)(一)修改仿真環(huán)境(vcs2018+verdi2018)

    /SI-RISCV/e200_opensource.git 下面就是e203項(xiàng)目的目錄,我們現(xiàn)在進(jìn)入vsim(驗(yàn)證目錄),其他先不管,后面的分享會(huì)慢慢介紹到。 3.修改環(huán)境 進(jìn)入到仿真的bin
    發(fā)表于 10-31 08:07

    何在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 ?599次閱讀
    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 ?3829次閱讀
    如<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 ?1058次閱讀
    電磁<b class='flag-5'>環(huán)境</b><b class='flag-5'>仿真</b>與驗(yàn)證系統(tǒng)<b class='flag-5'>軟件</b>