概述
SystemVerilog Interface是modport的一種,但比簡(jiǎn)單的輸入、輸出或輸入輸出端口的功能更多。在其最簡(jiǎn)單的形式中,Interface端口將相關(guān)的信號(hào)捆綁在一起作為一個(gè)單一的復(fù)合端口。例如,構(gòu)成AMBA AXI總線的所有單個(gè)信號(hào)都可以被歸納為一個(gè)Interface端口。
一個(gè)Interface可以做的不僅僅是封裝總線信號(hào)。SystemVerilog Interface為設(shè)計(jì)者提供了一種集中總線功能的方法,而不是將功能分散在設(shè)計(jì)中的幾個(gè)模塊中。這就模擬了設(shè)計(jì)工程師在RTL層面的工作,并讓綜合工作在整個(gè)設(shè)計(jì)中適當(dāng)?shù)胤峙溟T級(jí)總線硬件。
當(dāng)遵循特定的建模準(zhǔn)則和限制時(shí),Interface是可以綜合的。Interface也可以用在不可綜合級(jí)別的建模,并作為驗(yàn)證測(cè)試平臺(tái)的一部分。先進(jìn)的驗(yàn)證方法,如UVM 、OVM和VMM,都使用Interface。
使用Interface作為modport
interface:定義interface模塊以關(guān)鍵字interface和endinterface結(jié)尾,內(nèi)部通過(guò)定義輸入輸出信號(hào)和對(duì)應(yīng)的logic信號(hào),注意,雙態(tài)信號(hào)不可以定義為logic。定義好了interface后,需要在top層將interface進(jìn)行例化。
modport:使用modport來(lái)對(duì)上述信號(hào)接口進(jìn)行一個(gè)分組和方向指定,這樣會(huì)使得接口更加條理清晰。在頂層top中例化test時(shí)參數(shù)還是接口(模塊內(nèi)部是modport)
一個(gè)模塊的端口可以被聲明為一個(gè)Interface類型,而不是傳統(tǒng)的輸入、輸出或inout端口。一個(gè)模塊可以有任意數(shù)量的interface,interface可以與其他端口以任意順序連接。本書中的例子將Interface端口列在前面,只是為了強(qiáng)調(diào)Interface端口的作用。
有兩種風(fēng)格的Interface端口聲明--通用和特定類型。這兩種風(fēng)格都是可以綜合的。
通用Interface端口
一個(gè)通用的Interface端口通過(guò)使用關(guān)鍵字interface來(lái)定義端口的類型。而不是使用一個(gè)特定的Interface類型的名稱。語(yǔ)法是:
module(Interface )
當(dāng)module被實(shí)例化時(shí),任何類型的Interface都可以被連接到通用Interface端口。這就提供了靈活性,同一個(gè)模塊可以用多種方式使用,不同的Interface連接到模塊上。在下面的例子中,模塊bridge被定義為有兩個(gè)通用Interface端口。每個(gè)通用Interface端口可以有一個(gè)ahb_bus Interface實(shí)例或一個(gè)Interface端口。
特定類型的Interface端口
一個(gè)modport可以被明確地聲明為一個(gè)特定類型的Interface。一個(gè)特定類型的接口端口是通過(guò)使用一個(gè)Interface的名稱作為端口類型來(lái)聲明的。語(yǔ)法是:
module( )。
比如說(shuō):
一個(gè)特定類型的Interface端口只能連接到同一類型的Interface實(shí)例上。在上面的例子中,高層網(wǎng)表可以實(shí)例化CACHE模塊并連接一個(gè)ahb_bus Interface的實(shí)例,但不能連接一個(gè)usb_bus Interface的實(shí)例。如果錯(cuò)誤的Interface實(shí)例類型被連接到特定類型的Interface端口,仿真器或綜合工具將發(fā)出一個(gè)闡述錯(cuò)誤。特定類型的Interface端口確保錯(cuò)誤的Interface不會(huì)被無(wú)意中連接到端口上。明確命名可以連接到端口的Interface類型,也使端口類型對(duì)其他需要審查或維護(hù)模塊的人更加明顯。有了特定類型的Interface端口,就更容易看清端口的確切使用方式。
最佳實(shí)踐指南10-2 |
---|
為RTL模型使用特定類型的Interface端口。不要在設(shè)計(jì)模塊中使用通用的interface。 |
一個(gè)模塊的功能需要引用Interface內(nèi)的信號(hào)。對(duì)于特定類型的Interface,Interface內(nèi)的信號(hào)名稱在編寫模塊的時(shí)候就已經(jīng)知道了,可以毫無(wú)顧慮地引用。對(duì)于通用Interface端口,不能保證連接到模塊Interface端口的每個(gè)Interface實(shí)例都有相同的信號(hào)名稱。
Interface modports
Interface為簡(jiǎn)化模塊間的連接提供了一種實(shí)用而直接的方法。然而,連接到一個(gè)Interface的每個(gè)模塊可能需要看到Interface內(nèi)信號(hào)的獨(dú)特視圖。例如,在AHB總線上,hwdata信號(hào)是主模塊的輸出,而同樣的hwdata是同一總線上從屬模塊的輸入。
SystemVerilog Interface提供了一種方法來(lái)定義Interface信號(hào)的不同視圖,這樣每個(gè)模塊都能看到具有正確端口方向的Interface端口。這個(gè)定義是在Interface中使用modport關(guān)鍵字進(jìn)行的。Modport描述了Interface所代表的modport。一個(gè)Interface可以有任意數(shù)量的modport定義,每個(gè)定義都描述了一個(gè)或多個(gè)其他模塊如何看待Interface內(nèi)的信號(hào)。
一個(gè)modport定義了模塊在Interface中看到的信號(hào)的端口方向。modport的定義并不重復(fù)已經(jīng)在Interface信號(hào)聲明中定義的向量大小和類型信息。一個(gè)modport只定義連接模塊是否將一個(gè)信號(hào)視為輸入、輸出、inout端口。
下面的界面中顯示了兩個(gè)modport聲明的例子。
指定使用哪種modport
SystemVerilog提供了兩種方法來(lái)指定一個(gè)模塊Interface端口應(yīng)該使用哪種modport。
作為模塊定義中Interface端口聲明的一部分
作為與模塊實(shí)例的接口連接的一部分
這兩種方式都是可以綜合的,但將modport作為modport定義的一部分來(lái)指定有一些優(yōu)勢(shì),這將在下面幾段中討論。
在模塊的interface聲明中選擇modport。要從一個(gè)Interface使用的特定調(diào)制端口可以直接指定為模塊內(nèi)Interface端口聲明的一部分。要連接到Interface的modport被指定為:
.
比如說(shuō)。
只有特定類型的Interface端口可以指定一個(gè)modport作為端口聲明的一部分。通用Interface端口不能指定一個(gè)modport。
在實(shí)例化和連接這個(gè)主模塊的上級(jí)模塊,Interface的一個(gè)實(shí)例被連接到modport,而不指定modport的名稱。例如:
在module實(shí)例中選擇modport。另一種編碼方式是不在模塊定義中選擇modport,而是將modport的選擇推遲到模塊實(shí)例化時(shí)進(jìn)行。下面的例子聲明了第一個(gè)從屬模塊的端口作為simple_ahb Interface端口,但沒(méi)有指定使用哪個(gè)modport定義。
然后可以在模塊實(shí)例化時(shí)指定Interface的具體???,將一個(gè)Interface的實(shí)例連接到一個(gè)模塊實(shí)例。該連接被指定為:
.
比如說(shuō)。
當(dāng)在模塊實(shí)例中指定要使用的modport時(shí),模塊定義可以使用特定類型的Interface端口或通用Interface端口類型。
注意事項(xiàng) |
---|
一個(gè)modport可以在模塊端口定義或模塊實(shí)例中選擇,但不能同時(shí)選擇。 |
最佳實(shí)踐指南10-3 |
---|
選擇模塊使用的modport作為模塊的Interface端口聲明的一部分。不要在網(wǎng)表級(jí)別選擇modport。 |
將modport作為端口聲明的一部分來(lái)指定,還可以使模塊獨(dú)立于其他模塊進(jìn)行綜合。它還有助于使模塊更加自我記錄。閱讀或維護(hù)該模塊的工程師可以立即看到哪一個(gè)modport將被用于該模塊。
在不指定modport的情況下連接到Interface。模塊Interface端口可以連接到一個(gè)Interface實(shí)例,而不需要指定具體的modport定義。當(dāng)沒(méi)有指定modport時(shí),Interface中的所有wire都被假定為有一個(gè)雙向的inout方向。在仿真中,Interface中的變量被假定為ref類型。(ref端口允許端口的兩邊都可以讀取和修改變量。ref端口是不可綜合的,在本書中沒(méi)有討論)。綜合編譯器將沒(méi)有指定modport的Interface端口中的所有信號(hào)視為inout雙向端口。
使用modports來(lái)定義不同的連接集
在一個(gè)由幾個(gè)不同模塊使用的比較復(fù)雜的Interface中,可能不是每個(gè)模塊都需要看到Interface中的同一組信號(hào)。Modports使得為每個(gè)使用該Interface的模塊創(chuàng)建一個(gè)自定義的Interface視圖成為可能。
一個(gè)模塊只能訪問(wèn)其modport定義中列出的信號(hào)。這使得Interface中的一些信號(hào)有可能被完全隱藏,不被某些模塊看到。例如,Interface可能包含一些信號(hào),只有通過(guò)master_portsmodport連接到Interface的模塊才能使用,而通過(guò)s1ave_ports modport連接的模塊不能使用。
完整的AMBA AHB總線有19個(gè)信號(hào),其中有幾個(gè)信號(hào)只由總線主機(jī)使用,而不是由總線從機(jī)使用。
下面的例子說(shuō)明了一個(gè)自定義版本的simple_ahb Interface,增加了3個(gè)額外的AMBAAHB信號(hào)-hprot,hburst和htrans,只被主模塊使用。master_ports和slave_ports的modport聲明確保主模塊和從模塊看到各自模塊的正確信號(hào)集。
例10-5: 用modports的Interface來(lái)定制Interface信號(hào)的視圖
/////////////////////////////////////////////////////////// //SimpleAMBAAHBInterface /////////////////////////////////////////////////////////// //`begin_keywords"1800-2012" interfacesimple_ahb( inputlogichclk,//bustransferclk inputlogichresetN//busreset,activelow ); logic[31:0]haddr;//transferstartaddress logic[31:0]hwdata;//datasenttoslave logic[31:0]hrdata;//returndatafromslave logic[2:0]hsize;//transfersize logichwrite;//1forwrite,0forread logichready;//1fortransferfinished //additionalAHBsignalsonlyusedbybusmaster logic[3:0]hprot;//tranferprotectionmode logic[2:0]hburst;//transferburstmode logic[1:0]htrans;//transfertype //mastermoduleportdirections modportmaster_ports( outputhaddr,hwdata,hsize,hwrite,//toAHBslave inputhrdata,hready,//fromAHBslave inputhclk,hresetN,//fromchiplevel //additionalAHBsignalsonlyusedbybusmaster outputhprot,hburst,htrans ); //slavemoduleportdirections modportslave_ports( outputhrdata,hready,//toAHBmaster inputhaddr,hwdata,hsize,hwrite,//fromAHBmaster inputhclk,hresetN//fromchiplevel ); endinterface:simple_ahb //`end_keywords
使用 simple_ahb .master_ports modport 的模塊可以使用 hprot, hburst和htrans信號(hào)。一個(gè)使用simple_ahb.slave_ports modport的模塊不能訪問(wèn)這3個(gè)信號(hào)。因?yàn)檫@些信號(hào)沒(méi)有在slave_ports modport中列出,就好像這些信號(hào)根本不存在一樣。
也有可能在一個(gè)Interface內(nèi)有內(nèi)部信號(hào),這些信號(hào)通過(guò)任何modport都不可見(jiàn)。這些內(nèi)部信號(hào)可能被lint檢查器或Interface中的其他功能所使用。
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1019瀏覽量
83963 -
AHB總線
+關(guān)注
關(guān)注
0文章
18瀏覽量
9554 -
Verilog設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
20瀏覽量
6551 -
cache技術(shù)
+關(guān)注
關(guān)注
0文章
41瀏覽量
1096
原文標(biāo)題:數(shù)字硬件建模SystemVerilog-通信總線建模 --Interface和modport
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
[啟芯公開(kāi)課] SystemVerilog for Verification
如何在SystemVerilog中為狀態(tài)機(jī)的命令序列的生成建模
使用SystemVerilog來(lái)簡(jiǎn)化FPGA中接口的連接方式
數(shù)字硬件建模SystemVerilog-歸約運(yùn)算符
SystemVerilog語(yǔ)言介紹匯總
SystemVerilog對(duì)硬件功能如何進(jìn)行建模
數(shù)字硬件建模SystemVerilog-網(wǎng)絡(luò)
數(shù)字硬件建模SystemVerilog-結(jié)構(gòu)體
使用Verilog/SystemVerilog硬件描述語(yǔ)言練習(xí)數(shù)字硬件設(shè)計(jì)
FPGA學(xué)習(xí)-SystemVerilog語(yǔ)言簡(jiǎn)介
RTL和門級(jí)建模
![RTL和門級(jí)<b class='flag-5'>建模</b>](https://file.elecfans.com/web2/M00/8F/7C/poYBAGPkkFyAXpR5AATV5hNoNUw721.png)
Interface端口的概念介紹
數(shù)字硬件建模SystemVerilog之Interface方法概述
![<b class='flag-5'>數(shù)字</b><b class='flag-5'>硬件</b><b class='flag-5'>建模</b><b class='flag-5'>SystemVerilog</b><b class='flag-5'>之</b><b class='flag-5'>Interface</b>方法概述](https://file1.elecfans.com/web2/M00/82/61/wKgaomRLY7WAKMqOAAAaVBJC-8k333.png)
SystemVerilog的覆蓋率建模方式
SystemVerilog在硬件設(shè)計(jì)部分有哪些優(yōu)勢(shì)
![<b class='flag-5'>SystemVerilog</b>在<b class='flag-5'>硬件</b>設(shè)計(jì)部分有哪些優(yōu)勢(shì)](https://file1.elecfans.com/web2/M00/A9/45/wKgaomUwoFCAH2AVAAIMtBAX5n0432.jpg)
評(píng)論