數(shù)字硬件建模SystemVerilog(一)-RTL和門(mén)級(jí)建模
![poYBAGPkkFyAXpR5AATV5hNoNUw721.png](https://file.elecfans.com/web2/M00/8F/7C/poYBAGPkkFyAXpR5AATV5hNoNUw721.png)
接下來(lái)系列文章會(huì)有很多在Verilog中知識(shí)點(diǎn)有被提及,關(guān)于這兩者關(guān)系,請(qǐng)查看《談?wù)刅erilog和SystemVerilog簡(jiǎn)史,FPGA設(shè)計(jì)是否需要學(xué)習(xí)SystemVerilog》。
本文定義了通常用于描述使用SystemVerilog對(duì)硬件功能進(jìn)行建模的詳細(xì)級(jí)別的術(shù)語(yǔ)。
抽象
SystemVerilog能夠在許多不同的細(xì)節(jié)級(jí)別(稱(chēng)為“抽象級(jí)別”)對(duì)數(shù)字邏輯進(jìn)行建模。抽象意味著缺乏細(xì)節(jié)。數(shù)字模型越抽象,它所代表的硬件的細(xì)節(jié)就越少。
圖1-3顯示了SystemVerilog中可用的建模抽象的主要級(jí)別的詳細(xì)模型
![poYBAGPkkGyARJWjAANSTIunnl0644.png](https://file.elecfans.com/web2/M00/8F/7C/poYBAGPkkGyARJWjAANSTIunnl0644.png)
圖1-3:SystemVerilog建模抽象級(jí)別
門(mén)級(jí)建模
SystemVerilog支持使用門(mén)級(jí)原語(yǔ)對(duì)數(shù)字邏輯進(jìn)行建模。數(shù)字邏輯門(mén)是一個(gè)非常接近硅(silicon)實(shí)現(xiàn)的詳細(xì)模型。
SystemVerilog提供了幾個(gè)內(nèi)置的門(mén)級(jí)原語(yǔ),并允許工程師定義其他原語(yǔ),這些原語(yǔ)是指用戶(hù)定義的原語(yǔ)(UDP)。SystemVerilog中的內(nèi)置原語(yǔ)列在表1-1中:
表1-1:SystemVerilog門(mén)級(jí)原語(yǔ)
原語(yǔ) | 描述 |
---|---|
與and | 具有2個(gè)或更多輸入和1輸出的與門(mén) |
與非門(mén)nand | 具有2個(gè)或更多輸入和1輸出的與非門(mén) |
或or | 具有2個(gè)或更多輸入和1個(gè)輸出的或門(mén) |
或非門(mén)nor | 具有2個(gè)或更多輸入和1輸出的或非門(mén) |
異或門(mén)xor | 具有2個(gè)或更多輸入和1輸出的異或門(mén) |
異或非門(mén)是xnor | 具有2個(gè)或更多輸入和1輸出的異或非門(mén) |
緩沖器buf | 具有1個(gè)輸入和1或更多輸出的緩沖門(mén) |
反向門(mén)not | 具有1輸入和1或更多輸出的反向門(mén) |
buffif0 | 三態(tài)緩沖門(mén),帶“1輸入*1輸出”和1個(gè)激活低啟用 |
bufif1 | 具有1輸入、1輸出和1激活高啟用的三態(tài)緩沖門(mén) |
notif0 | 帶1輸入、1輸出和1低激活的三態(tài)反向緩沖門(mén) |
notif1 | 帶1輸入、1輸出和1高激活的三態(tài)反向緩沖門(mén) |
SystemVerilog還為ASIC和FPGA庫(kù)開(kāi)發(fā)人員提供了通過(guò)定義用戶(hù)定義原語(yǔ)(UDP)添加到內(nèi)置原語(yǔ)集的方法。UDP以表格格式定義,表格中的每一行列出一組輸入值和結(jié)果輸出值。組合邏輯和順序邏輯(如觸發(fā)器)原語(yǔ)都可以定義。
圖1-4顯示了帶進(jìn)位的1位加法器的門(mén)級(jí)電路。示例1-1顯示了“使用原語(yǔ)對(duì)電路建模的SystemVerilog代碼”。
![pYYBAGPkkICAbxBkAAJF3aZrMiY000.png](https://file.elecfans.com/web2/M00/8F/FF/pYYBAGPkkICAbxBkAAJF3aZrMiY000.png)
圖1-4:帶進(jìn)位的1位加法器,用邏輯門(mén)表示示例1-1;帶進(jìn)位的1位加法器的SystemVerilog門(mén)級(jí)模型
`begin_keywords
"1800-2012"
modulegate_adder
(inputwirea,b,ci,
outputwiresum,co
);
timeunit1ns;timeprecision100ps;
wiren1,n2,n3;
xorg1(n1,a,b);
xor
#1.3g2(sum,n1,ci);
andg3(n2,a,b);
andg4(n3,n1,ci);
or
#(1.5,1.8)g5(co,n2,n3);
endmodule:gate_adder
`end_keywords
門(mén)級(jí)原語(yǔ)的語(yǔ)法非常簡(jiǎn)單:
<>
type
>〈instancename>(,);
許多門(mén)級(jí)原語(yǔ)可以具有可變數(shù)量的輸入。例如,and原語(yǔ)可以表示2輸入、3輸入或4輸入與門(mén),如下所示:
and i1{o1,a,b);//2-輸入與門(mén)
and i2(o2,a,b,c};//3-輸入與門(mén)
and i3{o3,a,b,c,d);//4-輸入與門(mén)
原語(yǔ)的實(shí)例名稱(chēng)雖然是可選的,但它是良好的代碼注釋?zhuān)咕S護(hù)代碼和將SystemVerilog源代碼與示意圖或設(shè)計(jì)的其他表示形式聯(lián)系起來(lái)變得容易。實(shí)例名稱(chēng)是用戶(hù)定義的,可以是任何合法的SystemVerilog名稱(chēng)。
門(mén)級(jí)原語(yǔ)可以用傳播延遲來(lái)建模。如果未指定延遲,則門(mén)輸入上的更改將立即反映在門(mén)輸出上。延遲是一個(gè)表達(dá)式,可以是一個(gè)簡(jiǎn)單的值,如示例1-1中的實(shí)例g2,也可以是一個(gè)更復(fù)雜的表達(dá)式,如實(shí)例g5。上述代碼中的柵極g2的傳播延遲為13ns,這意味著當(dāng)其中一個(gè)柵極輸入上發(fā)生轉(zhuǎn)換時(shí),在柵極輸出sum改變之前,這個(gè)時(shí)間是13ns。門(mén)g5將傳播延遲分為不同的延遲,用于輸出上的上升和下降躍遷。如果co值從0轉(zhuǎn)換為l,延遲為1ns。如果co正在從1轉(zhuǎn)換為0,更改延遲為1.8ns。
門(mén)級(jí)模型能夠以高精度表示實(shí)際硅的傳播延遲。邏輯門(mén)的功能反映了將在硅中使用的晶體管組合的功能,并且門(mén)延遲可以反映通過(guò)這些晶體管的傳播延遲。ASIC和FPGA供應(yīng)商使用這種精度對(duì)特定設(shè)備的詳細(xì)行為進(jìn)行建模。
門(mén)級(jí)模型通常由軟件工具或?qū)iT(mén)從事庫(kù)開(kāi)發(fā)的工程師生成。在RTL級(jí)別設(shè)計(jì)的設(shè)計(jì)工程師很少(如果有的話(huà))使用門(mén)級(jí)原語(yǔ)建模。相反,RTL設(shè)計(jì)者使用門(mén)級(jí)模型的網(wǎng)表,其中網(wǎng)表是通過(guò)合成RTL模型生成的。網(wǎng)表級(jí)模型由目標(biāo)ASIC或FPGA設(shè)備的供應(yīng)商提供。關(guān)于門(mén)級(jí)建模的內(nèi)容比本文中介紹的要多得多。
開(kāi)關(guān)級(jí)建模。SystemVerilog還可以使用開(kāi)關(guān)原語(yǔ)(如pmos、nmos和cmos)、電阻開(kāi)關(guān)原語(yǔ)(如rpmos、cnmos和rcmos)和電容網(wǎng)絡(luò)在晶體管級(jí)對(duì)數(shù)字電路建模。這種級(jí)別的建??梢院芎玫乇硎緦?shí)際的硅實(shí)現(xiàn)。然而,由于這些結(jié)構(gòu)只能仿真數(shù)字行為,因此很少使用。晶體管、電阻器和電容器都是仿真器件。數(shù)字仿真不能準(zhǔn)確反映晶體管的行為。開(kāi)關(guān)級(jí)建模通常不在SystemVerilog的FPGA設(shè)計(jì)流程中使用。
RTL模型
一個(gè)更抽象的建模級(jí)別——也是系列文章的重點(diǎn)——是寄存器傳輸級(jí)別(Register Transfer Levels),或RTL。此級(jí)別的建模使用編程語(yǔ)句和運(yùn)算符表示數(shù)字功能。RTL模型是功能模型,不包含有關(guān)如何在硅中實(shí)現(xiàn)該功能的詳細(xì)信息。由于這種抽象,復(fù)雜的數(shù)字功能可以比在詳細(xì)的門(mén)級(jí)更快速、更簡(jiǎn)潔地建模。RTL模型的仿真速度也大大快于門(mén)級(jí)和開(kāi)關(guān)級(jí)模型,這使得驗(yàn)證更大、更復(fù)雜的設(shè)計(jì)成為可能。SystemVerilog為RTL建模提供了兩種主要結(jié)構(gòu):連續(xù)賦值(continuous assignments)和always程序塊。
連續(xù)賦值以assign關(guān)鍵字開(kāi)始,可以表示簡(jiǎn)單的組合邏輯。前面的示例1-1說(shuō)明了1-bit加法器的門(mén)級(jí)模型。示例1-2顯示了如何通過(guò)使用連續(xù)賦值在更抽象的層次上建模相同的1位加法器功能:
`begin_keywords
"1800-2012"
modulertl_adder
(inputlogica,b,ci,
outputlogicsum,co
);
timeunit1ns/1ns;
assign{co,sum}=a+b+ci;
endmodule:rtl_adder
`end_keywords
示例1-2:帶進(jìn)位的1位加法器的SystemVerilog RTL模型
RTL建模的一個(gè)優(yōu)點(diǎn)是代碼更易于自文檔化(self-documenting)。查看示例1-1中的門(mén)級(jí)模型并識(shí)別模型所代表的內(nèi)容可能很困難,尤其是在沒(méi)有注釋和有意義的名稱(chēng)的情況下。但是,查看示例1-2中RTL模型中的代碼并認(rèn)識(shí)到該功能是一個(gè)加法器要容易得多。
RTL建模的另一個(gè)強(qiáng)大優(yōu)勢(shì)是能夠處理矢量和數(shù)據(jù)包。矢量是一個(gè)大于一位寬的信號(hào)。開(kāi)關(guān)級(jí)和門(mén)級(jí)建模的操作一1位寬的信號(hào),在SystemVerilog中稱(chēng)為標(biāo)量信號(hào)。要對(duì)32位加法器進(jìn)行建模,需要對(duì)每個(gè)位上運(yùn)行的開(kāi)關(guān)或門(mén)進(jìn)行建模,這與實(shí)際硅中的操作相同。上述示例1-2中的連續(xù)賦值語(yǔ)句可以通過(guò)改變信號(hào)的聲明,對(duì)任意大小的加法器進(jìn)行建模。
更復(fù)雜的功能可以使用程序塊建模。程序塊封裝了一行或多行編程語(yǔ)句,以及有關(guān)何時(shí)執(zhí)行這些語(yǔ)句的信息。RTL級(jí)別使用四種類(lèi)型的always過(guò)程:always、always_comb、always_ff和always_latch。
以下示例簡(jiǎn)明地表示具有寄存器輸出的32位加法器/減法器:
`begin_keywords
"1800-2012"
(inputlogicclk,//1-bitscalarinput
inputlogicmode,//1-bitscalarinput
inputlogic[31:0]a,b,//32-bitvectorinputs
outputlogic[31:0]sum//32-bitvectoroutput
);
timeunit1ns/1ns;
always_ff@(posedgeclk)begin
if
(mode==0)sum<=?a?+?b;
else
sum<=?a?-?b;
end
endmodule:rtl_adder_subtracter
`end_keywords
示例1-3:32位加法器/減法器的SystemVerilog RTL模型
在一個(gè)典型的仿真和綜合設(shè)計(jì)流程中,工程師們將花費(fèi)大部分時(shí)間在RTL級(jí)別建模和驗(yàn)證RTL功能。
行為級(jí)和事務(wù)級(jí)建模
SystemVerilog過(guò)程塊可用于在比RTL更高的抽象級(jí)別上建模,該抽象通常被稱(chēng)為行為模型(也稱(chēng)為總線(xiàn)功能或算法模型)。行為模型可能看起來(lái)與RTL模型非常相似,因?yàn)镽TL和行為模型都是程序塊。行為模型在兩個(gè)方面與RTL有所不同。
高級(jí)抽象是事務(wù)級(jí)建模。事務(wù)模型通常用于驗(yàn)證代碼中,并且通常使用SystemVerilog的面向?qū)ο缶幊探Y(jié)構(gòu)進(jìn)行建模。
RTL綜合編譯器無(wú)法綜合抽象的行為和事務(wù)級(jí)別,本系列中也沒(méi)有討論.
?RTL模型必須遵守嚴(yán)格的語(yǔ)言限制,才能由RTL綜合編譯器進(jìn)行合成。行為模型可以使用完整的SystemVerilog語(yǔ)言。
?RTL程序塊在單個(gè)時(shí)鐘周期內(nèi)執(zhí)行其編程語(yǔ)句,如果是組合邏輯,則在零周期內(nèi)執(zhí)行。行為模型過(guò)程塊可以使用任意數(shù)量的時(shí)鐘周期來(lái)執(zhí)行其語(yǔ)句。
-
Verilog
+關(guān)注
關(guān)注
28文章
1339瀏覽量
109889 -
System
+關(guān)注
關(guān)注
0文章
164瀏覽量
36812 -
建模
+關(guān)注
關(guān)注
1文章
299瀏覽量
60702
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
RTL級(jí)設(shè)計(jì)的基本要素和步驟是什么
![<b class='flag-5'>RTL</b><b class='flag-5'>級(jí)</b>設(shè)計(jì)的基本要素和步驟是什么](https://file.elecfans.com/web2/M00/8B/85/pYYBAGPGYlOAZXeCAAcUVPsQ4mk163.png)
關(guān)于功能驗(yàn)證、時(shí)序驗(yàn)證、形式驗(yàn)證、時(shí)序建模的論文
RTL級(jí)仿真與門(mén)級(jí)仿真
RTL級(jí)的功能仿真結(jié)果和系統(tǒng)級(jí)建模仿真的結(jié)果比較
關(guān)于RTL仿真和門(mén)級(jí)仿真求助~
【小白入門(mén)筆記】 小腳丫實(shí)現(xiàn)38譯碼器——模塊建模和門(mén)級(jí)建模初探
【FPGA學(xué)習(xí)】Verilog HDL 語(yǔ)言的描述語(yǔ)句之門(mén)級(jí)建模形式
什么是IP開(kāi)發(fā)及FPGA建模?
Verilog HDL為門(mén)級(jí)電路建模的能力詳解
![Verilog HDL為<b class='flag-5'>門(mén)</b><b class='flag-5'>級(jí)</b>電路<b class='flag-5'>建模</b>的能力詳解](https://file.elecfans.com/web1/M00/E3/60/o4YBAGBB3i6AcgSmAAAW0C2Z-Xw678.png)
FPGA基礎(chǔ)設(shè)計(jì)之使用邏輯門(mén)和連續(xù)賦值對(duì)電路建模
多輸入門(mén)、多輸出門(mén)和三態(tài)門(mén)詳解
![多輸入門(mén)、多輸出門(mén)和三態(tài)<b class='flag-5'>門(mén)</b>詳解](https://file1.elecfans.com/web2/M00/81/F1/wKgaomQlAriAYIEeAABwv05UdI4475.jpg)
基于Verilog的開(kāi)關(guān)級(jí)建模
![基于Verilog的開(kāi)關(guān)<b class='flag-5'>級(jí)</b><b class='flag-5'>建模</b>](https://file1.elecfans.com/web2/M00/81/F1/wKgZomQlA5KARoPwAACH_bB3Xfc177.jpg)
評(píng)論