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

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

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

從可綜合的RTL代碼的角度聊聊interface

FPGA技術(shù)驛站 ? 來源:FPGA技術(shù)驛站 ? 2023-10-12 09:06 ? 次閱讀

SystemVerilog引入了interface,這里我們從可綜合的RTL代碼的角度聊聊interface。

什么是interface?

Interface是將一系列信號封裝為一個模塊,這里的“一系列信號”通常是彼此相關(guān)的,比如AXI接口協(xié)議之一的AXI4-Stream的TLAST/TVALID/TREADY/TDATA,這個“模塊”稱為接口模塊。接口模塊可以被實例化作為其他module的端口,從而簡化了module之間以及module與TB(testbench)之間的連線操作。

使用interface的好處

使用interface的好處也是顯而易見的。我們來看個例子。如下圖所示,待測模塊和測試平臺之間的連線包含5個信號,采用此方法就要在DUT module內(nèi)定義5個端口,在TB內(nèi)定義對應(yīng)的5個信號。

c7524efc-6892-11ee-939d-92fbcf53809c.png

如果采用interface就會形成下圖所示的連接方式。這樣無論是DUT還是TB只需要在自身模塊內(nèi)實例化這個interface即可。

c764393c-6892-11ee-939d-92fbcf53809c.png

可見,使用interface會帶來這樣幾個好處:

(1)module之間的連線由輸入/輸出列表替換為interface,不易出錯

(2)如果需要更新module的輸入/輸出端口,只用在interface里進行一次更新,而不必在相關(guān)module的端口處進行多次更新

其他好處跟UVM相關(guān),這里先不做闡述。

接口的定義

我們從可綜合RTL代碼的角度看個例子,如下圖所示的兩個模塊,一個是控制模塊,一個是存儲模塊,控制模塊生成相應(yīng)的控制信號給存儲模塊。

c7786538-6892-11ee-939d-92fbcf53809c.png

我們使用interface定義這組信號,如下圖所示代碼。從這段代碼可以看到,接口模塊以interface作為關(guān)鍵字開始,以endinterface結(jié)束(像不像module,endmodule)。Interface可以參數(shù)化,如代碼的4行所示,可以有輸入/輸出或雙向端口如代碼第7行所示。代碼第10行和第11行定義了寫方向的控制信號,第13行和14行定義了讀方向的控制信號。第16行modport(端口模塊)用來定義信號方向。對存儲模塊而言,這些信號都是輸入信號,對控制模塊而言,除時鐘外其他信號均為輸出信號。

因為只是定義信號的方向,所以只用列出信號名稱而無需指定信號的位寬。同時,同方向的信號可列在同一行,如代碼第17行所示。如果信號方向聲明的結(jié)尾也是modport的結(jié)尾,那么該結(jié)尾沒有任何額外標(biāo)點符號,如代碼第22行的結(jié)尾,如果信號方向聲明的結(jié)尾不是modeport的結(jié)尾,那么結(jié)尾就用逗號,如代碼第21行。注意代碼第10行至第14行定義的信號類型為logic,相比于Verilog里的reg,logic更靈活,不僅可以用在always進程中,也能用于assign賦值語句中(Verilog需要用wire)。

c7843e58-6892-11ee-939d-92fbcf53809c.png

在存儲模塊中,可直接在端口列表內(nèi)實例化該接口模塊,如下圖所示代碼片段第9行,實例化方式和模塊的實例化方式一樣,需要注意的是這里不能指定interface內(nèi)的parameter,其余輸入/輸出端口不在接口模塊內(nèi)的可單獨聲明,如代碼第10行和第11行所示。

c79d407e-6892-11ee-939d-92fbcf53809c.png

在模塊內(nèi)部使用interface內(nèi)聲明的接口,需要采用如下圖所示代碼片段的方式,如代碼第23行,通過i0_mem_ports.wen使用寫使能信號。因為代碼內(nèi)部可能會反復(fù)使用interface內(nèi)的信號,所以interface的名字盡量短一些。

c7b28e70-6892-11ee-939d-92fbcf53809c.png

同樣地,在控制模塊內(nèi)可直接實例化上述定義的interface,如下圖所示代碼片段。

c7c1386c-6892-11ee-939d-92fbcf53809c.png

在設(shè)計的頂層,需要依次實例化接口、存儲模塊和控制模塊。此時,就需要對接口的parameter進行設(shè)定,如下圖所示代碼片段的第15行所示。

傳統(tǒng)的輸入/輸出列表方式存在這樣幾個不足之處:

(1)需要在相關(guān)模塊中反復(fù)聲明輸入/輸出信號

(2)存在不同模塊端口不匹配的風(fēng)險

(3)設(shè)計規(guī)格的更改會導(dǎo)致需要在相關(guān)多個模塊中進行輸入/輸出信號的更新

這種重復(fù)性的更新不僅涉及到很多行代碼,還會存在信號名稱寫錯或者信號位寬寫錯的風(fēng)險。

注意:module端口聲明若采用input/output/inout這種形式,實例化時這些端口是可以懸空的,但如果采用interface,實例化的interface是不允許處于未連接的狀態(tài)。

c7ddf65a-6892-11ee-939d-92fbcf53809c.png

Vivado對interface是支持的。將上述4個文件直接添加到Vivado中,如下圖所示。在Hierarchy窗口中,可以看到top下面只有控制模塊和存儲模塊,而沒有接口模塊,因為接口并不是一個module。在Libraries下則可以看到接口模塊。在Compile Order窗口下,可以看到工具會先編譯接口模塊,再編譯其他模塊。

c7fbc388-6892-11ee-939d-92fbcf53809c.png

Vivado下打開Elaborated Design,可以看到interface信息,如下圖中的高亮部分,工具以“接口名.信號名”的方式顯示net的名字。

c818fa2a-6892-11ee-939d-92fbcf53809c.png

綜上所示,SystemVerilog提供的interface支持參數(shù)化,支持信號分組(modport),在可綜合的RTL代碼中,可使用interface簡化輸入/輸出列表的描述。






審核編輯:劉清

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

    關(guān)注

    1

    文章

    384

    瀏覽量

    59513
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    181

    瀏覽量

    19085
  • Interface
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    38570
  • Module
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

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

    關(guān)注

    0

    文章

    188

    瀏覽量

    12189

原文標(biāo)題:說說SystemVerilog的Interface

文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何在不改變RTL代碼的情況下,優(yōu)化FPGA HLS設(shè)計

    用軟件 C 轉(zhuǎn)化來的 RTL 代碼其實并不好理解。今天我們就來談?wù)?,如何在不改?RTL 代碼的情況下,提升設(shè)計性能。 本項目所需應(yīng)用與工
    的頭像 發(fā)表于 12-20 11:46 ?1660次閱讀
    如何在不改變<b class='flag-5'>RTL</b><b class='flag-5'>代碼</b>的情況下,優(yōu)化FPGA HLS設(shè)計

    RTL級設(shè)計的基本要素和步驟是什么

      綜合(Logic Synthesize)是指將HDL語言、原理圖等設(shè)計輸入翻譯成由與、或、非門等基本邏輯單元組成的門級連接(網(wǎng)表),并根據(jù)設(shè)計目標(biāo)與要求(約束條件)優(yōu)化所生成的邏輯連接,輸出門級網(wǎng)表文件。RTL綜合指將
    的頭像 發(fā)表于 01-17 16:57 ?1w次閱讀
    <b class='flag-5'>RTL</b>級設(shè)計的基本要素和步驟是什么

    RTL代碼和仿真代碼的區(qū)別

    RTL代碼和仿真代碼的區(qū)別,哪些verilog語句是綜合的??哪些不能??
    發(fā)表于 07-21 13:08

    為什么quartus綜合沒有報錯而modelsim rtl仿真就報錯了

    為什么quartus綜合沒有報錯而modelsim rtl仿真就報錯了
    發(fā)表于 09-24 11:02

    如何理解Xilinx的RTL

    各位大神,我的通用移位寄存器HDL代碼如上,我用的Xilinx ISE開發(fā)環(huán)境,我想問綜合后的RTL圖要如何理解,上述HDL代碼RTL圖如
    發(fā)表于 08-14 14:30

    來自vivado hls的RTL可以由Design Compiler進行綜合嗎?

    您好我有一個關(guān)于vivado hls的問題。RTL是否來自xivix FPGA的vivado hls onyl?我們可以在Design Compiler上使用它進行綜合嗎?謝謝
    發(fā)表于 04-13 09:12

    架構(gòu)的角度看如何寫好代碼 + 我的思考

    架構(gòu)漫談(八):架構(gòu)的角度看如何寫好代碼 + 我的思考
    發(fā)表于 06-18 06:16

    如何保證RTL設(shè)計與綜合后網(wǎng)表的一致性

    如何保證RTL設(shè)計與綜合后網(wǎng)表的一致性文章簡介:在超大規(guī)模數(shù)字集成電路的設(shè)計中,我們使用邏輯綜合工具來完成RTL設(shè)計到門級網(wǎng)表的轉(zhuǎn)化。我們
    發(fā)表于 01-23 23:10 ?19次下載

    RTL8201/RTL8201BL pdf datashee

    The RTL8201/RTL8201BL is a single-port Phyceiver with an MII (Media Independent Interface)/SNI
    發(fā)表于 03-04 16:42 ?120次下載

    設(shè)計復(fù)用的RTL指導(dǎo)原則

    設(shè)計復(fù)用的基本要求是RTL 代碼移植。通常的軟件工程指導(dǎo)原則在RTL 編碼時也適用。類似軟件開發(fā),基本的編碼指導(dǎo)原則要求
    發(fā)表于 12-24 00:46 ?32次下載

    如何設(shè)計綜合的Verilog代碼和應(yīng)該遵循什么原則

    在接觸Verilog 語法參考手冊的時候,我們發(fā)現(xiàn)其提供了一組非常豐富的功能來描述硬件。所以大家往往會疑惑那些Verilog語句是綜合的,那些是只能用于寫Testbench的,其實,參考手冊中只有
    發(fā)表于 04-20 10:59 ?4345次閱讀

    如何在C代碼中插入寄存器?

    對于邏輯級數(shù)較高的路徑,常用的方法之一是在其中插入流水寄存器,將路徑打斷,從而降低邏輯延遲,這在HDL代碼中實現(xiàn)起來比較容易。此外,RTL代碼風(fēng)格
    的頭像 發(fā)表于 02-02 17:07 ?2960次閱讀
    如何在C<b class='flag-5'>代碼</b>中插入寄存器?

    【開源硬件】PyTorch到RTL - 基于MLIR的高層次綜合技術(shù)

    01 演講題目 ? 開源硬件系列02期: PyTorch到RTL - 基于MLIR的高層次綜合技術(shù) 02 演講時間 ? 2022年11月27日 上午?10:00 03 內(nèi)容簡介 ? 為了解
    的頭像 發(fā)表于 11-24 08:15 ?1727次閱讀

    邏輯綜合與物理綜合

    利用工具將RTL代碼轉(zhuǎn)化為門級網(wǎng)表的過程稱為邏輯綜合。綜合一個設(shè)計的過程,讀取RTL
    的頭像 發(fā)表于 11-28 16:02 ?2332次閱讀

    RTL追蹤到Scala

      在三天前SpinalHDL1.8.0正式上線,在這次更新中增加了Scala代碼和生成的RTL代碼之間的對照功能,也就是說我們可以在生成的RTL
    的頭像 發(fā)表于 12-09 10:32 ?1068次閱讀