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

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

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

SystemVerilog中bind用法總結(jié)+送實(shí)驗(yàn)源碼和腳本

芯片驗(yàn)證日記 ? 來(lái)源:芯片驗(yàn)證日記 ? 作者:芯片驗(yàn)證日記 ? 2023-01-11 08:59 ? 次閱讀

1.前言

bind是systemverilog中一個(gè)重要的知識(shí)點(diǎn),很多時(shí)候能夠在驗(yàn)證中發(fā)揮重要的作用,今天就針對(duì)這個(gè)知識(shí)點(diǎn)做一個(gè)梳理,希望能幫助到大家。

2. 為什么需要bind

當(dāng)RTL已經(jīng)編寫完畢,驗(yàn)證工程師有責(zé)任添加斷言時(shí)。RTL設(shè)計(jì)者不希望驗(yàn)證工程師為了添加斷言而修改其RTL,于是SystemVerilog的綁定特性應(yīng)運(yùn)而生。bind可以實(shí)現(xiàn)驗(yàn)證和設(shè)計(jì)的分離,將module/interface/program綁定到任意的設(shè)計(jì)模塊或者其特定例化中,可以將interface直接bind到top module中進(jìn)行例化。bind可以使得驗(yàn)證工程師不改動(dòng)或最小的改動(dòng)原有設(shè)計(jì)代碼和文件結(jié)構(gòu),就能夠?qū)崿F(xiàn)對(duì)設(shè)計(jì)代碼的檢查。

SystemVerilog斷言(SVA)可以直接添加到RTL代碼中,也可以通過(guò)bindfile間接添加。實(shí)踐表明,大多數(shù)的斷言最好是使用bindfile添加。在獨(dú)立的文件中寫入所有必需的斷言,使用bind就可以將斷言文件的端口與測(cè)試代碼中RTL的端口/信號(hào)綁定。這是多么酷的一個(gè)功能。

3. bind的語(yǔ)法

bind用于指定module、interface、program的一個(gè)或多個(gè)實(shí)例化,而無(wú)需修改目標(biāo)文件的代碼。因此,封裝在module、interface、program中的插入代碼或斷言可以以非侵入方式(non-intrusive manner)在目標(biāo)模塊或模塊實(shí)例中實(shí)例化。類似地,封裝在接口中的檢測(cè)代碼可以綁定到目標(biāo)接口或接口實(shí)例。

SVA檢驗(yàn)器通過(guò)關(guān)鍵字bind可以與設(shè)計(jì)中的任何模塊(module)或者實(shí)例(instance)綁定。將SVA檢驗(yàn)器可以與模塊、模塊的實(shí)例或者一個(gè)模塊的多個(gè)實(shí)例進(jìn)行bind綁定。實(shí)現(xiàn)綁定時(shí),使用的是設(shè)計(jì)中的實(shí)際信號(hào),語(yǔ)法如下:


bind ;

這里注意以下幾點(diǎn):

[1] 通過(guò)bind語(yǔ)句將SVA的checker與設(shè)計(jì)模塊綁定,等價(jià)于將SVA例化到設(shè)計(jì)模塊中。

[2] bind不僅可以將斷言與設(shè)計(jì)module綁定,也可以將任意兩個(gè)模塊之間進(jìn)行綁定。

[3] bind功能可用于以下位置:

pYYBAGO9SyCAIRw_AAHGbcqxaZs341.png

4. bind的具體應(yīng)用實(shí)例

4.1 通過(guò)模塊名實(shí)現(xiàn)綁定

語(yǔ)法:bind module_name sva_name sva_inst;

具體實(shí)例的代碼如下圖所示:

poYBAGO9S1SAEFLxAAQH_dnyFnw213.png

針對(duì)上圖中代碼的一些解釋:

[1] dut 是module的名字

[2] dut_assert 是內(nèi)部包含 property 以及斷言的模塊,可以是 module 或者 interface

[3] my_assert是dut_assert的實(shí)例化名字

[4] 括號(hào)中的信號(hào)clk/rst_n/vld/rdy是dut的端口信號(hào),并且連接到dut_assert的對(duì)應(yīng)端口

[5] 包含斷言的interface/module,其端口信號(hào)的方向均為input,也就是說(shuō)property中包含的信號(hào)都是從該interface/module外部給進(jìn)來(lái)的。

bind成功后,斷言會(huì)關(guān)聯(lián)到module_name的所有例化示例,sva_inst路徑位于rtl_inst下一層,參考下面仿真器中的hierarchy結(jié)構(gòu):

poYBAGO9S5aAO3B4AALc3gMNbag086.png

具體的實(shí)驗(yàn)源代碼和腳本,請(qǐng)參考分享的網(wǎng)盤鏈接中的basic目錄。

4.2 通過(guò)模塊實(shí)例化名實(shí)現(xiàn)綁定

語(yǔ)法:bind module_name:mudule_inst_name sva_name sva_inst;

具體實(shí)例的代碼如下圖所示:

pYYBAGO9S8yASX9kAAQXjJBVP5g577.png

注意跟4.1的區(qū)別:

上圖中第64行中,對(duì)dut的實(shí)例化my_dut1和my_dut2進(jìn)行bind。

下圖中的hierarchy結(jié)構(gòu)圖和上圖中的代碼是正確對(duì)應(yīng)的,這也很好理解。

pYYBAGO9S_-AGAK3AANFJMDf9IA074.png

具體的實(shí)驗(yàn)源代碼和腳本,請(qǐng)參考分享的網(wǎng)盤鏈接中的basic目錄。

4.3 通過(guò)模塊名實(shí)現(xiàn)bind的另一個(gè)例子

前面的例子對(duì)bind的基本用法已經(jīng)講的很清楚了,下面的例子只是想說(shuō)明下面這一點(diǎn):可以將需要的所有斷言寫入獨(dú)立的文件中,使用bind也可以將斷言文件的端口與測(cè)試臺(tái)代碼中RTL的端口/信號(hào)綁定。下面是這個(gè)例子的詳細(xì)代碼截圖。

下圖是testbench(最大的module)的代碼截圖:

pYYBAGO9TDqAMKNdAAPyPv-aTEg495.png

下圖是DUT代碼的截圖:

poYBAGO9TGmATDUCAAGr6CnB2P8445.png

下圖是斷言模塊:

pYYBAGO9TJiADw1DAALrierxAKQ989.png

如下圖所示,bind功能單獨(dú)寫在一個(gè)獨(dú)立module中,這種用法EDA工具也是支持的,這是這個(gè)例子跟上面例子的最大區(qū)別。

pYYBAGO9TMeAcy6OAALWZ0EYUOA867.png

注意理解下圖中的hierarchy結(jié)構(gòu),

pYYBAGO9TPWAemONAAExYw1LjDo190.png

具體的實(shí)驗(yàn)源代碼和腳本,請(qǐng)參考分享的網(wǎng)盤鏈接中的asic-world目錄。

4.4 參數(shù)化bind的實(shí)例

從前面的例子,我們可以很好的理解SV中的綁定命令允許向模塊添加新功能,通常用于向RTL模塊添加新的檢查。再往深里研究一下,bind還可以繼承參數(shù),綁定模塊可以根據(jù)其使用位置參數(shù)化自身。

下面的代碼用于演示bind的參數(shù)化特性,該特性允許綁定模塊(bdut模塊)根據(jù)其使用位置參數(shù)化自身。

當(dāng)查看bind語(yǔ)句(下圖中第29行)時(shí),它使用的所有參數(shù)都沒(méi)有在第29行定義,但當(dāng)綁定被激活時(shí),它就有了參數(shù)化自身的作用域。其實(shí)也很好理解,我們可以想象把第29行粘貼到“dut”中;在那里所有的定制參數(shù)都將流到“bdut”的實(shí)例化中。

需要注意的一個(gè)特殊情況是,第29行的“.Z()”參數(shù)化為空。這允許“bdut”的默認(rèn)值接管。第10行根據(jù)參數(shù)化在“bdut”中創(chuàng)建“邏輯[X]總線”。這可用于生成參數(shù)化覆蓋點(diǎn)或其他需要參數(shù)化的功能。

poYBAGO9TSyAJdsAAAMuvrwcSLg506.png

具體的實(shí)驗(yàn)源代碼和腳本,請(qǐng)參考分享的網(wǎng)盤鏈接中的parameter_bind-master目錄。

5. 通過(guò)interface實(shí)現(xiàn)bind功能

這在用法上跟上面模塊的例子一模一樣,只是把module換成interface即可,這里就不再贅述了。

6. 贈(zèng)送實(shí)驗(yàn)源碼和Makefile腳本

關(guān)注微信公眾號(hào)《芯片驗(yàn)證日記》,后臺(tái)回復(fù)”bind”,可得本文所有的源碼和Makefile腳本對(duì)應(yīng)的百度鏈接,目錄如下圖所示,這樣你就可以在本地復(fù)現(xiàn)本文中的所有。

pYYBAGO9TVqAXQBxAABkeriucIU376.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109927
  • System
    +關(guān)注

    關(guān)注

    0

    文章

    165

    瀏覽量

    36849
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    632

    瀏覽量

    29112
  • Bind
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    7596
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    從Linux源碼分析bind系統(tǒng)調(diào)用

    眾所周知,一個(gè)Server端Socket的建立,需要socket、bind、listen、accept四個(gè)步驟。
    的頭像 發(fā)表于 10-16 11:08 ?3214次閱讀
    從Linux<b class='flag-5'>源碼</b>分析<b class='flag-5'>bind</b>系統(tǒng)調(diào)用

    SystemVerilog的Virtual Methods

    SystemVerilog多態(tài)能夠工作的前提是父類的方法被聲明為virtual的。
    發(fā)表于 11-28 11:12 ?673次閱讀

    關(guān)于typedef的用法總結(jié)

    關(guān)于typedef的用法總結(jié)不管實(shí)在C還是C++代碼,typedef這個(gè)詞都不少見(jiàn),當(dāng)然出現(xiàn)頻率較高的還是在C代碼。typedef與#define有些相似,但更多的是不同,特別是在
    發(fā)表于 09-25 09:11

    Bind源代碼包安裝

    先到官方下載Bind的安裝包 wgetftp://ftp.isc.org/isc/bind9/9.6.0-P1/bind-9.6.0-P1.tar.gz tar xzvf
    發(fā)表于 04-04 20:30 ?23次下載

    OpenCV3編程入門-源碼例程全集-resize函數(shù)用法示例

    OpenCV3編程入門-源碼例程全集-resize函數(shù)用法示例
    發(fā)表于 09-18 16:38 ?2次下載

    OpenCV3編程入門-源碼例程全集-sobel函數(shù)用法示例

    OpenCV3編程入門-源碼例程全集-sobel函數(shù)用法示例
    發(fā)表于 09-18 16:38 ?1次下載

    OpenCV3編程入門-源碼例程全集-Scharr函數(shù)用法示例

    OpenCV3編程入門-源碼例程全集-Scharr函數(shù)用法示例
    發(fā)表于 09-18 16:38 ?0次下載

    OpenCV3編程入門-源碼例程全集-remap函數(shù)用法示例

    OpenCV3編程入門-源碼例程全集-remap函數(shù)用法示例
    發(fā)表于 09-18 16:38 ?0次下載

    OpenCV3編程入門-源碼例程全集-pyrDown函數(shù)用法示例

    OpenCV3編程入門-源碼例程全集-pyrDown函數(shù)用法示例
    發(fā)表于 09-18 16:38 ?1次下載

    OpenCV3編程入門-源碼例程全集-pyrUp函數(shù)用法示例

    OpenCV3編程入門-源碼例程全集-pyrUp函數(shù)用法示例
    發(fā)表于 09-18 16:38 ?0次下載

    STM32實(shí)驗(yàn)10輸入捕獲實(shí)驗(yàn)源碼

    STM32 實(shí)驗(yàn)10 輸入捕獲實(shí)驗(yàn)源碼
    發(fā)表于 05-05 16:06 ?7次下載

    SystemVerilog枚舉類型的使用建議

    SystemVerilog枚舉類型雖然屬于一種“強(qiáng)類型”,但是枚舉類型還是提供了一些“不正經(jīng)”的用法可以實(shí)現(xiàn)一些很常見(jiàn)的功能,本文將示例一些在枚舉類型使用過(guò)程的一些“不正經(jīng)”
    的頭像 發(fā)表于 09-01 14:20 ?1607次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對(duì)象復(fù)制的概念是有區(qū)別的。
    的頭像 發(fā)表于 11-21 10:32 ?858次閱讀

    SystemVerilogifndef如何避免重復(fù)編譯

    `ifndef是SystemVerilog/Verilog的一種條件編譯命令,可以認(rèn)為其是"if not defined"的縮寫,其用法與`ifdef相反,他們主要用來(lái)根據(jù)其后
    的頭像 發(fā)表于 06-25 15:59 ?3126次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>ifndef如何避免重復(fù)編譯

    什么是bind?你真的熟悉bind嗎?

    bind()方法創(chuàng)建一個(gè)新的函數(shù),在bind()被調(diào)用時(shí),這個(gè)新函數(shù)的this被指定 bind()的第一個(gè)參數(shù),而其余參數(shù)將作為新函數(shù)的參數(shù),供調(diào)用時(shí)使用。
    的頭像 發(fā)表于 07-13 09:56 ?2638次閱讀