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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

除了這個方式,SV還提供了和C/C++直接的接口DPI。DPI接口允許用戶用C編寫程序,并和SV實現(xiàn)對接,也可以用SV寫程序,將SV程序導出到c中。二者實現(xiàn)了相互調用。如何要在SV中使用自己定義的C函數(shù),需要在SV中導入函數(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中被調用,其有兩個參量 address和data。在C函數(shù)中通常要包含兩個頭文件:svdpi.h和svdpi_src.h。

C和SV的數(shù)據(jù)類型有以下幾種對應關系:

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

a[31:0] = b[0]

a[63:32] = b[1]

這點初學者很容易掉坑里,我一開始在傳遞這個變量的時候以為是一個svBitVecVal存儲1bit數(shù)據(jù)。在SV測的多維數(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ù)據(jù)位置。指針指向了數(shù)據(jù)data的第一個32bit數(shù)據(jù),即data[0][0][31:0],之后數(shù)據(jù)往后增加指針即可得到。

對于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ù)組,即動態(tài)數(shù)據(jù)。在C中通過svOpenArrayHandle來獲取這些數(shù)據(jù),這些數(shù)據(jù)的操作也需要通過一些函數(shù),不能直接操作。比如以下函數(shù)可以獲得動態(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);

比如定義一個數(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)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關注

    關注

    3

    文章

    4400

    瀏覽量

    66367
  • SV
    SV
    +關注

    關注

    0

    文章

    7

    瀏覽量

    14104
  • 仿真驗證
    +關注

    關注

    0

    文章

    26

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    SV7321, SV7358, SV7324英文手冊

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

    SV8541A、SV8542A、SV8544A 微功率低噪聲運算放大器技術手冊

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

    請問如何在 Keil μVision 或 IAR EWARM 中使用觀察點進行調試?

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

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

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

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

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

    ?如何在虛擬環(huán)境中使用 Python,提升你的開發(fā)體驗~

    RaspberryPiOS預裝了Python,你需要使用其虛擬環(huán)境來安裝包。今天出版的最新一期《TheMagPi》雜志刊登了我們文檔負責人NateContino撰寫的一篇實用教程,幫助你入門
    的頭像 發(fā)表于 03-25 09:34 ?526次閱讀
    ?如<b class='flag-5'>何在</b>虛擬<b class='flag-5'>環(huán)境</b><b class='flag-5'>中使</b>用 Python,提升你的開發(fā)體驗~

    何在MATLAB中使用DeepSeek模型

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

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

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

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

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

    串口屏支持哪些編程語言和開發(fā)環(huán)境?

    串口屏作為一種常用的顯示和交互設備,支持多種編程語言和開發(fā)環(huán)境。以下是對串口屏支持的編程語言和開發(fā)環(huán)境的詳細歸納:
    的頭像 發(fā)表于 11-13 11:45 ?966次閱讀
    串口屏支持哪些編程<b class='flag-5'>語言</b>和開發(fā)<b class='flag-5'>環(huán)境</b>?

    MCU編程語言和開發(fā)環(huán)境介紹

    微控制器單元(Microcontroller Unit,簡稱MCU)是嵌入式系統(tǒng)的核心,廣泛應用于各種電子產(chǎn)品中。隨著技術的發(fā)展,MCU編程語言和開發(fā)環(huán)境也在不斷進步,以適應不同的應用需求。 1.
    的頭像 發(fā)表于 11-01 11:51 ?2708次閱讀

    這些電源常用仿真軟件,你都知道嗎?

    Designers of SIMPLIS Technologies開發(fā)的一種基于時域部分線性化技術的電源仿真軟件,可進行電源系統(tǒng)的高效仿真,在閉環(huán)開關電源設計中使用廣泛。 02 電磁
    發(fā)表于 10-25 14:20

    SV中define宏定義的用法

    SV中使用預處理指令`define來定義宏,宏可以用來創(chuàng)建文本替換。根據(jù)場景不同,`define主要用來定義常量、簡化復雜的表達式或代碼段以及提高代碼的可移植性。其基本語法為:
    的頭像 發(fā)表于 10-21 14:22 ?2481次閱讀

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

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