一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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)不再提示

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

FPGA技術(shù)驛站 ? 來(lái)源:FPGA技術(shù)驛站 ? 2023-10-12 09:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

什么是interface?

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

使用interface的好處

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

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

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

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

可見(jiàn),使用interface會(huì)帶來(lái)這樣幾個(gè)好處:

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

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

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

接口的定義

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

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

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

因?yàn)橹皇嵌x信號(hào)的方向,所以只用列出信號(hào)名稱(chēng)而無(wú)需指定信號(hào)的位寬。同時(shí),同方向的信號(hào)可列在同一行,如代碼第17行所示。如果信號(hào)方向聲明的結(jié)尾也是modport的結(jié)尾,那么該結(jié)尾沒(méi)有任何額外標(biāo)點(diǎn)符號(hào),如代碼第22行的結(jié)尾,如果信號(hào)方向聲明的結(jié)尾不是modeport的結(jié)尾,那么結(jié)尾就用逗號(hào),如代碼第21行。注意代碼第10行至第14行定義的信號(hào)類(lèi)型為logic,相比于Verilog里的reg,logic更靈活,不僅可以用在always進(jìn)程中,也能用于assign賦值語(yǔ)句中(Verilog需要用wire)。

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

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

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

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

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

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

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

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

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

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

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

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

這種重復(fù)性的更新不僅涉及到很多行代碼,還會(huì)存在信號(hào)名稱(chēng)寫(xiě)錯(cuò)或者信號(hào)位寬寫(xiě)錯(cuò)的風(fēng)險(xiǎn)。

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

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

Vivado對(duì)interface是支持的。將上述4個(gè)文件直接添加到Vivado中,如下圖所示。在Hierarchy窗口中,可以看到top下面只有控制模塊和存儲(chǔ)模塊,而沒(méi)有接口模塊,因?yàn)榻涌诓⒉皇且粋€(gè)module。在Libraries下則可以看到接口模塊。在Compile Order窗口下,可以看到工具會(huì)先編譯接口模塊,再編譯其他模塊。

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

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

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

綜上所示,SystemVerilog提供的interface支持參數(shù)化,支持信號(hào)分組(modport),在可綜合的RTL代碼中,可使用interface簡(jiǎ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)投訴
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    389

    瀏覽量

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19533
  • Interface
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    39076
  • Module
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

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

    關(guān)注

    0

    文章

    190

    瀏覽量

    12950

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

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

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

    為什么quartus綜合沒(méi)有報(bào)錯(cuò)而modelsim rtl仿真就報(bào)錯(cuò)了

    為什么quartus綜合沒(méi)有報(bào)錯(cuò)而modelsim rtl仿真就報(bào)錯(cuò)了
    發(fā)表于 09-24 11:02

    如何理解Xilinx的RTL

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

    來(lái)自vivado hls的RTL可以由Design Compiler進(jìn)行綜合嗎?

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

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

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

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

    如何保證RTL設(shè)計(jì)與綜合后網(wǎng)表的一致性文章簡(jiǎn)介:在超大規(guī)模數(shù)字集成電路的設(shè)計(jì)中,我們使用邏輯綜合工具來(lái)完成RTL設(shè)計(jì)到門(mén)級(jí)網(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 ?121次下載

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

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

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

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

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

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

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

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

    邏輯綜合與物理綜合

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

    RTL追蹤到Scala

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