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

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

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

淺談System Verilog的DPI機(jī)制

冬至子 ? 來(lái)源:IC驗(yàn)證者之家 ? 作者:一只特立獨(dú)行的豬 ? 2023-05-23 15:39 ? 次閱讀

在上一篇《淺談建模的意義和驗(yàn)證的危機(jī)》中,曾大肆鼓吹“對(duì)于認(rèn)知DUT,行為建模既是方法,也是目的”,“心中沒(méi)有她,又怎能待好她”,呼吁IC驗(yàn)證者要通過(guò)手寫(xiě)DUT的reference model來(lái)實(shí)現(xiàn)對(duì)DUT的規(guī)格特性的充分理解。然而,此篇內(nèi)容卻涉及調(diào)用第三方的代碼作為reference model。此刻耳畔仿佛想起了啪啪的打臉之聲。

System Verilog(SV)把其他編程語(yǔ)言統(tǒng)一成為外語(yǔ),F(xiàn)oreign Programming Language(FPL)。Direct Programming Interface(DPI)是SV定義的一種專(zhuān)門(mén)集成外語(yǔ)代碼和處理SV之外的業(yè)務(wù)功能的機(jī)制,主要負(fù)責(zé)和廣大的外部語(yǔ)言代碼進(jìn)行溝通和交涉。如果用西安的各所大學(xué)來(lái)比喻SV的各個(gè)機(jī)制功能,那么DPI對(duì)應(yīng)的大致就是西安外事學(xué)院了。

海納百川,有容乃大是川大的校訓(xùn)。SV的制定者希望Test Bench能兼濟(jì)包容,也不希望所有組件和代碼都只能是由SV語(yǔ)言開(kāi)發(fā)。并且不得不承認(rèn),通過(guò)集成C/C++/Matlab的代碼,會(huì)縮短搭建驗(yàn)證平臺(tái)的時(shí)間,減少I(mǎi)C驗(yàn)證者的工作量。

在DPI機(jī)制中,仿真系統(tǒng)的資源被分成獨(dú)立的兩部分:SV-domain(SV語(yǔ)言區(qū)域)和FPL-domain(其他語(yǔ)言區(qū)域)。這些資源包括緩存數(shù)據(jù)和變量的存儲(chǔ)資源,也包括程序編譯鏈接和執(zhí)行的運(yùn)行資源。在驗(yàn)證平臺(tái)中調(diào)用FPL程序代碼時(shí)要遵循黑盒原則,即FPL代碼涉及的業(yè)務(wù)功能是獨(dú)立的,與SV部分要充分解耦。在SV和FPL中無(wú)法直接訪(fǎng)問(wèn)對(duì)方代碼中的變量。

他們就像白天和黑夜。雖然黑夜給了我們黑色眼睛,我們也曾用它去尋找光明,但是黑夜永遠(yuǎn)不懂光明,正如白天不懂夜色的黑。

image.png

System Verilog 3.1版本支持的FPL只有C。其他語(yǔ)言可以通過(guò)C寫(xiě)的wrapper包裝一下實(shí)現(xiàn)跟SV的通信。

DPI專(zhuān)門(mén)定義了一些數(shù)據(jù)類(lèi)型,這些數(shù)據(jù)類(lèi)型與SV的多種數(shù)據(jù)有對(duì)應(yīng)關(guān)系。在C程序的接口處,使用這些專(zhuān)門(mén)定義的參數(shù),利用數(shù)據(jù)類(lèi)型的對(duì)應(yīng)關(guān)系,實(shí)現(xiàn)SV-domain和C-domain的通信。為了便于使用,SV還為某些重要的數(shù)據(jù)類(lèi)型,量身定制了一系列的操作和處理函數(shù)。如何使用這些數(shù)據(jù)類(lèi)型和相應(yīng)的操作函數(shù)實(shí)現(xiàn)兩個(gè)domain的數(shù)據(jù)傳遞和轉(zhuǎn)換,是DPI關(guān)鍵技術(shù)點(diǎn),也是本文的干貨所在。

通常情況,C的函數(shù)都是不消耗仿真時(shí)間,即延時(shí)是0,瞬間完成,就像在SV中調(diào)用function一樣。只不過(guò)這個(gè)function的端口類(lèi)型只有input,output和inout,不支持ref。

為了把C語(yǔ)言的數(shù)據(jù)類(lèi)型能映射到SV語(yǔ)言,SV定義了一個(gè)文件svdpi.h。在該文件中定義了許多的數(shù)據(jù)類(lèi)型,這些類(lèi)型基本可以和C語(yǔ)言的數(shù)據(jù)類(lèi)型一一對(duì)應(yīng)。

image.png

上面表格是我挑出的比較重要的幾種數(shù)據(jù)類(lèi)型,而其中比較重要的是open array[]。

綠皮書(shū)有一章節(jié)(12.5)專(zhuān)門(mén)介紹它,在svdpi.h中也專(zhuān)門(mén)為它定義了很多的微操函數(shù)。

在C語(yǔ)言里面,函數(shù)接口的參數(shù)會(huì)劃分方向,對(duì)于輸入的變量,加上const,一旦在C程序中,對(duì)輸入變量進(jìn)行賦值操作,編譯器會(huì)報(bào)錯(cuò)。我覺(jué)得犯這種錯(cuò)誤的概率太低,沒(méi)必要加。問(wèn)道于何同學(xué),覺(jué)得這種錯(cuò)誤還是比較常見(jiàn)的,建議加上。

image.png

在SV角度看,open array[ ]就是動(dòng)態(tài)數(shù)組(dynamic array)。SV之所以選擇動(dòng)態(tài)數(shù)組來(lái)進(jìn)行SV和C之間的數(shù)據(jù)內(nèi)容傳遞,是因?yàn)閯?dòng)態(tài)數(shù)組的深度可以靈活改變。只要在定義dpi接口的時(shí)候,把動(dòng)態(tài)數(shù)組的名稱(chēng)和C的對(duì)應(yīng)的數(shù)組關(guān)聯(lián)上,那么只需要在不同的場(chǎng)景中,通過(guò)動(dòng)態(tài)的改變動(dòng)態(tài)數(shù)組的深度,就可實(shí)現(xiàn)SV和C的數(shù)據(jù)傳遞。

隊(duì)列(queue)表示有意見(jiàn),嘟嘟囔囔的撅著小嘴問(wèn),為啥不選我?

先坐下吧,閔老師扶了扶眼鏡說(shuō),SV和C的數(shù)據(jù)存儲(chǔ)雖然都放在內(nèi)存中,但是系統(tǒng)需要把它們倆的存儲(chǔ)空間分開(kāi),最忌諱內(nèi)存越界。動(dòng)態(tài)數(shù)組在每次使用之前,需要先通過(guò)new[N]來(lái)分配空間,之后動(dòng)態(tài)數(shù)組的內(nèi)存空間就確定了。然而隊(duì)列的存儲(chǔ)空間是一直可變的,SV雖然會(huì)初始時(shí)刻給你分配一定空間,但是當(dāng)元素把空間裝滿(mǎn)后,SV會(huì)自動(dòng)分配更多的空間。這樣就容易造成內(nèi)存越界。

關(guān)聯(lián)數(shù)組(associative array)也想發(fā)言,把肥嘟嘟的小手舉得高高的。

先把手放下來(lái),閔老師笑著輕輕擺了擺手,你太離散了,存儲(chǔ)的都是稀疏和分散的數(shù)據(jù),SV仿真器要采用tree或hash table的方式來(lái)存放,會(huì)帶來(lái)額外的存儲(chǔ)開(kāi)銷(xiāo)。

以上就是DPI的相關(guān)背景介紹。干說(shuō)不練假把式,我們舉個(gè)例子吧。

如下圖所示,peak_find是一個(gè)matlab函數(shù),輸入變量signal包含多個(gè)無(wú)符號(hào)數(shù)據(jù),經(jīng)過(guò)一系列運(yùn)算和處理,輸出4個(gè)無(wú)符號(hào)數(shù)據(jù)到變量peak_two之中。

image.png

將該函數(shù)集成到SV的Test Bench中,使用matlab engine的方式需要定義一個(gè)c程序?qū)⑵浒饋?lái),名稱(chēng)如下所示。

void peak_find_dpi(const svOpenArrayHandle signal_i, svOpenArrayHandle peak_two_o);

其接口參數(shù)就用到了開(kāi)放數(shù)組。

該C函數(shù)可分為如下幾步:

image.png

圖4 dpi.c的流程圖

站在SV角度看,C程序是外來(lái)的,是舶來(lái)品,需要“進(jìn)口”,即import。代碼只需一行: import “DPI-C” function void name_of_your_c_function();

假如我們國(guó)家只能進(jìn)口美國(guó)的商品,其他國(guó)家的貨物就得都先到美國(guó),再來(lái)中國(guó)。同樣的道理,用matlab engine的方式,調(diào)用matlab程序,得用C程序先包裝一下。

matlab程序如此,C++程序亦是如此。

對(duì)于C程序,仿真時(shí)通常是用GCC編譯,而matlab程序是用到了mathWorks公司的MATLAB工具,SV仿真需要用到Synopsys公司的VCS工具。夜路走的多了難免遇到鬼,工具用的多了也難免有版本問(wèn)題。

so文件報(bào)錯(cuò)是一個(gè)典型的工具版本不一致引入的問(wèn)題。如下圖所示。這個(gè)問(wèn)題其實(shí)是IT問(wèn)題,不是IC驗(yàn)證技術(shù)問(wèn)題,但是它跟IC驗(yàn)證息息相關(guān)。

image.png

就像神農(nóng)嘗百草,梅同學(xué)通過(guò)嘗試多個(gè)版本的MATLAB,GCC和VCS,最終發(fā)現(xiàn)GCC4.8.5+MATLAB2015B+2017以上VCS的組合可以比較穩(wěn)妥。同時(shí)把/usr/lib64/libstdc++.so也要更新到6.0.21。遂搞定這個(gè)問(wèn)題。

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

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109926
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135875
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    9581
  • DPI
    DPI
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    11502
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    189

    瀏覽量

    12309
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺談公共機(jī)房樣機(jī)制作及日常維護(hù)

    淺談公共機(jī)房樣機(jī)制作及日常維護(hù)隨著電腦和網(wǎng)絡(luò)的應(yīng)用日益普及, 電腦在日常生活中扮演著越來(lái)越重要的角色,而學(xué)校的教育,無(wú)論是高校還是中小學(xué),公共機(jī)房都是一個(gè)不可缺少的教學(xué)實(shí)踐基礎(chǔ)硬件設(shè)備。而如何高效
    發(fā)表于 10-10 15:04

    調(diào)整屏幕DPI和旋轉(zhuǎn)方向

    =noro.sf.lcd_density=200保存更改再重啟開(kāi)發(fā)板即可。要恢復(fù)為開(kāi)機(jī)模屏顯示,使用光盤(pán)中的原始版本,或反向操作即可。更改屏幕DPI打開(kāi)文件系統(tǒng)下的 /system/build.prop,將如
    發(fā)表于 07-15 10:11

    調(diào)整屏幕DPI和旋轉(zhuǎn)方向

    =noro.sf.lcd_density=200保存更改再重啟開(kāi)發(fā)板即可。要恢復(fù)為開(kāi)機(jī)模屏顯示,使用光盤(pán)中的原始版本,或反向操作即可。更改屏幕DPI打開(kāi)文件系統(tǒng)下的/system/build.prop,將如下行:setprop
    發(fā)表于 10-10 16:13

    Modelsim XE是否支持System Verilog

    information:-1.Does itsupport System verilog forverification?2. Code coverage support.3.Assertion support.Whichversionof Modelsim XE su
    發(fā)表于 11-27 14:20

    System Verilog常見(jiàn)問(wèn)題及語(yǔ)言參考手冊(cè)規(guī)范

    本文討論了一些System Verilog問(wèn)題以及相關(guān)的SystemVerilog 語(yǔ)言參考手冊(cè)規(guī)范。正確理解這些規(guī)格將有助于System Verilog用戶(hù)避免意外的模擬結(jié)果。
    發(fā)表于 12-11 07:19

    System Verilog問(wèn)題和語(yǔ)言參考手冊(cè)規(guī)范

    本文討論了一些System Verilog問(wèn)題以及相關(guān)的SystemVerilog 語(yǔ)言參考手冊(cè)規(guī)范。正確理解這些規(guī)格將有助于System Verilog用戶(hù)避免意外的模擬結(jié)果。
    發(fā)表于 12-24 07:07

    求大佬分享一些System Verilog的學(xué)習(xí)經(jīng)驗(yàn)

    求大佬分享一些System Verilog的學(xué)習(xí)經(jīng)驗(yàn)
    發(fā)表于 06-21 06:29

    Verilog Digital System Design

    This book is on the IEEE Standard Hardware Description Languagebased on the Verilog® Hardware
    發(fā)表于 07-23 08:59 ?0次下載
    <b class='flag-5'>Verilog</b> Digital <b class='flag-5'>System</b> Design

    VHDL,Verilog,System verilog比較

    本文簡(jiǎn)單討論并總結(jié)了VHDL、Verilog,System verilog 這三中語(yǔ)言的各自特點(diǎn)和區(qū)別 As the number of enhancements
    發(fā)表于 01-17 11:32 ?0次下載

    基于System Verilog中的隨機(jī)化激勵(lì)

    基于System Verilog中的隨機(jī)化激勵(lì)
    發(fā)表于 10-31 09:25 ?9次下載
    基于<b class='flag-5'>System</b> <b class='flag-5'>Verilog</b>中的隨機(jī)化激勵(lì)

    淺談Verilog-95、Verilog-2001與System Verilog之間的區(qū)別

    發(fā)展歷史 1984年,Verilog開(kāi)始作為一種專(zhuān)用的硬件建模語(yǔ)言使用,取得了相當(dāng)大的成功。1990年,Cadence Design Systems公司將該語(yǔ)言面向公眾開(kāi)放,作為試圖與VHDL相抗衡
    的頭像 發(fā)表于 06-21 14:46 ?1w次閱讀

    學(xué)會(huì)這些System Verilog方法,芯片驗(yàn)證入門(mén)沒(méi)問(wèn)題

    一個(gè)掌握Verilog語(yǔ)言的工程師初次看SystemVerilog都會(huì)有這樣的感受,這就是Verilog啊,很容易啊,So easy啊。沒(méi)錯(cuò),確實(shí)是這樣,System Verilog
    的頭像 發(fā)表于 12-09 15:08 ?3499次閱讀

    System Verilog的概念以及與Verilog的對(duì)比

    Verilog模塊之間的連接是通過(guò)模塊端口進(jìn)行的。 為了給組成設(shè)計(jì)的各個(gè)模塊定義端口,我們必須對(duì)期望的硬件設(shè)計(jì)有一個(gè)詳細(xì)的認(rèn)識(shí)。 不幸的是,在設(shè)計(jì)的早期,我們很難把握設(shè)計(jì)的細(xì)節(jié)。 而且,一旦模塊
    的頭像 發(fā)表于 06-12 10:05 ?1366次閱讀

    verilog與其他編程語(yǔ)言的接口機(jī)制

    Verilog是一種硬件描述語(yǔ)言,用于描述數(shù)字電路的行為和結(jié)構(gòu)。與其他編程語(yǔ)言相比,Verilog具有與硬件緊密結(jié)合的特點(diǎn),因此其接口機(jī)制也有一些與眾不同之處。本文將詳細(xì)介紹Verilog
    的頭像 發(fā)表于 02-23 10:22 ?601次閱讀

    system verilog語(yǔ)言簡(jiǎn)介

    ICer需要System Verilog語(yǔ)言得加成,這是ICer深度的表現(xiàn)。
    發(fā)表于 11-01 10:44 ?0次下載