實驗相關(guān)ve培訓(xùn)verilog硬件描述語言_第1頁
實驗相關(guān)ve培訓(xùn)verilog硬件描述語言_第2頁
實驗相關(guān)ve培訓(xùn)verilog硬件描述語言_第3頁
實驗相關(guān)ve培訓(xùn)verilog硬件描述語言_第4頁
實驗相關(guān)ve培訓(xùn)verilog硬件描述語言_第5頁
已閱讀5頁,還剩167頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第1章簡介本章介紹Verilog HDL語言的發(fā)展歷史和它的主要能力。1.1什么是Verilog HDL?Verilog HDL是一種硬件描述語言,用于從算法級、到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對象的復(fù)雜性可以介于簡單的完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)能夠按層次描述,并可在相同描述中顯式地進(jìn)行時序建模。Verilog HDL 語言具有下述描述能力:設(shè)計的行為特性、設(shè)計的數(shù)據(jù)流特性、設(shè)計的結(jié)構(gòu)組成以及包含響應(yīng)和設(shè)計驗證方面的和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語言。此外, Verilog HDL語言提供了編程語言接口,通過該接口可以在模擬、驗證期間從設(shè)計外部設(shè)計,包

2、括模擬的具體和運行。Verilog HDL語言不僅定義了語法,而且對每個語法結(jié)構(gòu)都定義了清晰的模擬、語義。因此,用這種語言編寫的模型能夠使用 Verilog器進(jìn)行驗證。語言從C編程語言中繼承了多種操作符和結(jié)構(gòu)。 Verilog HDL提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。但是,Verilog HDL語言的子集非常易于學(xué)習(xí)和使用,這對大多數(shù)建模應(yīng)用來說已經(jīng)足夠。當(dāng)然 ,完整的硬件描述語言足以對從最復(fù)雜的到完整的電子系統(tǒng)進(jìn)行描述。1.2歷史Verilog HDL語言最初是于1983年由Gateway Design Automation 公司為其模擬器開發(fā)的硬件建模語言。那時它只是一種語言

3、。由于他們的模擬、器的廣泛使用,Verilog HDL 作為一種便于使用且實用的語言逐漸為眾多設(shè)計者所接受。在一次努力增加語言普及性的活動中, Verilog HDL語言于1990年被推向公眾領(lǐng)域。 Open Verilog International(OVI)是促進(jìn)Verilog發(fā)展的國際性組織。1992年, OVI決定致力于推廣Verilog OVI標(biāo)準(zhǔn)成為IEEE標(biāo)準(zhǔn)。這一努力最后獲得, Verilog 語言于1995年成為IEEE標(biāo)準(zhǔn),稱為IEEE Std13641995。完整的標(biāo)準(zhǔn)在Verilog硬件描述語言參考手冊中有詳細(xì)描述。1.3主要能力下面列出的是Verilog硬件描述語言的

4、主要能力: 基本邏輯門,例如and、or和nand等都內(nèi)置在語言中。 用戶定義原語( UDP)創(chuàng)建的靈活性。用戶定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。 開關(guān)級基本結(jié)構(gòu)模型,例如pmos 和nmos等也被內(nèi)置在語言中。Gateway Design Automation公司后來被Cadence Design Systems公司收購。2Verilog HDL 硬件描述語言 提供顯式語言結(jié)構(gòu)指定設(shè)計中的端口到端口的及路徑和設(shè)計的時序檢查。 可采用三種不同方式或混合方式對設(shè)計建模。這些方式包括:行為描述方式 使用過結(jié)構(gòu)建模;數(shù)據(jù)流方式 使用連續(xù)賦值語句模塊實例語句描述建模。模;結(jié)構(gòu)化方式

5、 使用 Verilog HDL中有兩類數(shù)據(jù)類型:線網(wǎng)數(shù)據(jù)類型和寄存器數(shù)據(jù)類型。線網(wǎng)類型表示構(gòu)件間的物理連線,而寄存器類型表示抽象的數(shù)據(jù)元件。 能夠描述層次設(shè)計,可使用模塊實例結(jié)構(gòu)描述任何層次。 設(shè)計的規(guī)模可以是任意的;語言不對設(shè)計的規(guī)模(大小)施加任何限制。 Verilog HDL不再是某些公司的專有語言而是IEEE標(biāo)準(zhǔn)。 人和言。都可閱讀 Verilog 語言,因此它可作為 EDA的工具和設(shè)計者之間的交互語 Verilog HDL語言的描述能力能夠通過使用編程語言接口( PLI)機(jī)制進(jìn)一步擴(kuò)展。 PLI外部函數(shù)Verilog 模塊內(nèi)信息、是設(shè)計者與模擬器交互的例程集合。、寄存器傳送級( RT

6、L)到算法級, 設(shè)計能夠在多個層次上加以描述,從開關(guān)級、包括進(jìn)程和隊列級。 能夠使用內(nèi)置開關(guān)級原語在開關(guān)級對設(shè)計完整建模。 同一語言可用于生成模擬激勵和指定測試的驗證約束條件,例如輸入值的指定。 Verilog HDL 能夠模擬驗證的執(zhí)行,即模擬驗證執(zhí)行過程中設(shè)計的值能夠被和顯示。這些值也能夠用于與期望值比較,在不匹配的情況下,打印報告消息。 在行為級描述中, Verilog HDL不僅能夠在RTL級上進(jìn)行設(shè)計描述,而且能夠在體系結(jié)構(gòu)級描述及其算法級行為上進(jìn)行設(shè)計描述。 能夠使用模塊實例化語句在結(jié)構(gòu)級進(jìn)行結(jié)構(gòu)描述。 圖1-1顯示了Verilog HDL 的混合模能力,即在一個設(shè)計中每個模塊均可

7、以在不同設(shè)計層次上建模。 Verilog HDL 還具有內(nèi)置邏輯函數(shù),例如&(按位與)和|(按位或)。 開關(guān) 算法 開關(guān) 門 對高級編程語言結(jié)構(gòu),例如條件語句、情況語句和循環(huán)語句,語言中都可以使用。 RTL 門 可以顯式地對并發(fā)和定建模。圖1-1 混合設(shè)計層次建模 提供強(qiáng)的文件讀寫能力。 語言在特定情況下是非確定性的,即在不同的模擬器上模型可以產(chǎn)生不同的結(jié)果;例如,隊列上的順序在標(biāo)準(zhǔn)中沒有定義。習(xí)題1. Verilog HDL 是在哪一年首次被IEEE標(biāo)準(zhǔn)化的?2. Verilog HDL支持哪三種基本描述方式?3. 可以使用Verilog HDL描述一個設(shè)計的時序嗎?介3第1章 簡4

8、. 語言中的什么特性能夠用于描述參數(shù)化設(shè)計?5. 能夠使用Verilog HDL 編寫測試驗證程序嗎?6. Verilog HDL 是由哪個公司最先開發(fā)的?7. Verilog HDL中的兩類主要數(shù)據(jù)類型什么?8. UDP代表什么?9. 寫出兩個開關(guān)級基本門的名稱。10. 寫出兩個基本邏輯門的名稱。第2章本章提供HDL語言的速成指南。HDL指南2.1模塊模塊是Verilog 的基本描述,用于描述某個設(shè)計的功能或結(jié)構(gòu)及其與其他模塊通信的原語和用戶定義的原語方式描述 ; 設(shè)計的外部端口。一個設(shè)計的結(jié)構(gòu)可使用開關(guān)級原語、數(shù)據(jù)流行為使用連續(xù)賦值語句進(jìn)行描述 ; 時序行為使用過程結(jié)構(gòu)描述。一個模塊可以在

9、另一個模塊中使用。一個模塊的基本語法如下:module m o d u l e _ n a m e (p o r t _ l i s t); D e c l a r a t i o n s :r e g , w i r e , pa r ame t e r , i npu t , ou t pu t , i nou t , f un c ti on , t a s k , . . .S t a t e m e n t s :I n iti a l A l wa y sModu l es t a t e me n t s t a t e me n ti n s t an ti a ti on G

10、a t e i n s t an ti a ti on UDP i n s t an ti a ti on Con ti nuou s a ss i gnme n tendmodule說明部分用于定義不同的項,例如模塊描述中使用的寄存器和參數(shù)。語句定義設(shè)計的功 能和結(jié)構(gòu)。說明部分和語句可以散布在模塊中的任何地方;但是變量、寄存器、線網(wǎng)和參數(shù) 等的說明部分必須在使用前出現(xiàn)。為了使模塊描述清晰和具有良好的可讀性 , 最好將所有的說明部分放在語句前。本書中的所有實例都遵守這一規(guī)范。圖2-1為建模一個半加器電路的模塊的簡單實例。module H a l f A d d e r (A , B , Sum

11、 , Ca rr )y;input A, B;output Sum , Ca rr y ;assign #2 Sum = A B ;assign #5 Ca rr y = A & B;endmodule模塊的名字是HalfAdder。 模塊有4個端口: 兩個輸入端口A和B,兩個輸出端口Sum和Carry。由于沒有定義端口的位數(shù), 所有端口大小1位;同時, 由于沒有各端口的數(shù)據(jù)類型說明, 這四個端口都是線網(wǎng)數(shù)據(jù)類型。模塊包含兩條描述半加器數(shù)據(jù)流行為的連續(xù)賦值圖2-1 半加器電路第2章 HDL指南5語句。從這種意義上講,這些語句在模塊中出現(xiàn)的順序無關(guān)緊要,這些語句是并發(fā)的。每條語句的執(zhí)行順

12、序依賴于發(fā)生在變量 A和B上的在模塊中,可用下述方式描述一個設(shè)計:1) 數(shù)據(jù)流方式;2) 行為方式;3) 結(jié)構(gòu)方式;4) 上述描述方式的混合。下面幾節(jié)通過實例講述這些設(shè)計描述方式。不過有必要首先對 Verilog HDL的介紹。作簡要2.2Verilog HDL模型中的所有都根據(jù)時間定義。 下面是帶的連續(xù)賦值語句實例。assign #2 S u m = A B;#2指2個時間。使用編譯指令將時間如下所示: timescale 1ns /100ps與物理時間相關(guān)聯(lián)。這樣的編譯器指令需在模塊描述前定義,此語句說明時間為 1ns并且時間精度為100ps (時間精度是指所有的必須被限定在0.1ns內(nèi))

13、。 如果此編譯器指令所在的模塊包含上面的連續(xù)賦值語句 , #2 代表2ns。如果沒有這樣的編譯器指令, Verilog HDL 模擬器會指定一個缺省時間。 IEEE VerilogHDL 標(biāo)準(zhǔn)中沒有規(guī)定缺省時間2.3數(shù)據(jù)流描述方式。用數(shù)據(jù)流描述方式對一個設(shè)計建模的最基本的機(jī)制就是使用連續(xù)賦值語句。在連續(xù)賦值 語句中,某個值被指派給線網(wǎng)變量。 連續(xù)賦值語句的語法為:assign d e l a y L H S _ n e t = RHS_ ex p r e ss i o n;右邊表使用的操作數(shù)無論何時發(fā)生變化 , 右邊表都重新計算, 并且在指定的操作數(shù)變化與賦值給左邊表變化值被賦予左邊表的線網(wǎng)變

14、量。定義了右邊表延值, 缺省為0。器電路的建模的實例模型。之間的持續(xù)時間。如果沒有圖2-2顯示了使用數(shù)據(jù)流描述方式對 2-4圖2-2 2-4器電路6Verilog HDL 硬件描述語言timescale 1ns/ 1nsmodule D e c o d e r 2 x 4 (A , input A , B , EN; output 0 :3 Z; wire Aba r , Bba r ;B ,EN ,)Z;#1 Aba r#1 Bba r#2 Z0#2 Z1=A;B;(A ba r/ 語/ 句/ 語/ 句/ 語句/ 語句/ 語句/語句1。2。3。4。5。6。assign assign assi

15、gnassign&&Bba rB && E)N ;E)N ;E)N ;/ (A ba r/assign #2 Z2= ( A &Bba r &assign #2 Z3 =endmodule ( A & B & E)N/以反引號“ ”開始的第一條語句是編譯器指令, 編譯器指令timescale 將模塊中所有的設(shè)置為1 ns,時間精度為1 ns。例如,在連續(xù)賦值語句中和2 ns。值#1和#2分別對應(yīng)1 ns模塊Decoder2x4有3個輸入端口和1個4位輸出端口。線網(wǎng)類型說明了兩個連線型變量 Abar和Bbar (連線類型是線網(wǎng)類型的

16、一種)。此外,模塊包含6個連續(xù)賦值語句。參見圖2-3中的波形圖。當(dāng) EN在第5 ns變化時,語句3、4、5和6執(zhí)行。這是因為 EN是這些連續(xù)賦值語句中右邊表的操作數(shù)。 Z0在第7 ns時被賦予新值0。當(dāng)A在第15 ns變化時, 語句1、5和6執(zhí)行。執(zhí)行語句5和6不影響Z0和Z1的取值。執(zhí)行語句5導(dǎo)致Z2值在第17 ns變?yōu)?。執(zhí)行語句1導(dǎo)致Abar在第16 ns被重新賦值。由于Abar的改變,反過來又導(dǎo)致Z0值在第18 ns 變?yōu)?。請注意連續(xù)賦值語句是如何對電路的數(shù)據(jù)流行為建模的;這種建模方式是隱式而非顯式 的建模方式。此外,連續(xù)賦值語句是并發(fā)執(zhí)行的,也就是說各語句的執(zhí)行順序與其在描述中出現(xiàn)

17、的順序無關(guān)。圖2-3 連續(xù)賦值語句實例2.4 行為描述方式設(shè)計的行為功能使用下述過程語句結(jié)構(gòu)描述:1) initial語句:此語句只執(zhí)行一次。第2章 HDL指南72) always語句:此語句總是循環(huán)執(zhí)行, 或者說此語句重復(fù)執(zhí)行。只有寄存器類型數(shù)據(jù)能夠在這兩種語句中被賦值。寄存器類型數(shù)據(jù)在被賦新值前保持原 有值不變。所有的初始化語句和always語句在0時刻并發(fā)執(zhí)行。下例為always語句對1位全加器電路建模的示例,如圖 2-4。module FA _ S e q (A , B , C i n , Sum , Co u)t;input A, B, Ci n ; output Sum , Cou

18、 t; reg Sum , Cou t;reg T 1 ,always ( A Sum T 1T 2T 3T 2 , T 3;o r B o r C i n ) begin= ( A B) C i;n=A BA& C i;n& C i;n& ;BC o u tend endmodule= ( T 1| T 2) | T 3;模塊FA_Seq 有三個輸入和兩個輸出。由于Sum、Cout、T1、T2和T3在always 語句中被賦值,它們被說明為 reg 類型(reg 是寄存器數(shù)據(jù)類型的一種)。always 語句中有一個與(緊跟在字符 后面的表)。相關(guān)聯(lián)的順序過程(begi

19、n-end對)。這意味著只要A、B或Cin 上發(fā)生,即A、B或Cin之一的值發(fā)生變化,順序過程就執(zhí)行。在順序過程中的語句順序執(zhí)行,并且在順序過程執(zhí)行結(jié)束后被掛起。順序過程執(zhí)行完成后,always 語句再次等待A、B或Cin上發(fā)生的。在順序過程中出現(xiàn)的語句是過程賦值模塊化的實圖2-4 1位全加器電路例。模塊化過程賦值在下一條語句執(zhí)行前完成執(zhí)行。過程賦值可以有一個可選的可以細(xì)分為兩種類型:。1) 語句間2) 語句內(nèi)下面是語句間: 這是語句執(zhí)行的。: 這是右邊表的示例:數(shù)值計算與左邊表賦值間的。S u m = (A B) C i n; #4 T 1 = A & C i n;在第二條語句中的規(guī)

20、定賦值延遲 4個時間執(zhí)行。就是說,在第一條語句執(zhí)行后等待 4的示例。個時間,然后執(zhí)行第二條語句。下面是語句內(nèi)S u m = #3 (A B) C i n;這個賦值中的意味著首先計算右邊表的值 , 等待3個時間,然后賦值給Sum。如果在過程賦值中未延,缺省值為 0,也就是說,賦值立即發(fā)生。這種形式以及在always 語句中指定語句的其他形式將在第 8章中詳細(xì)討論。下面是initial語句的示例:timescale 1ns / 1ns8Verilog HDL 硬件描述語言module Tes t (Pop, Pi d );output Pop , P i d;reg Pop , P i d;ini

21、tial beginP o p =P i d =P o p =/ /語句 1。/語句 2。/語句 3。/語句 4。/ /語句 5。/ /語句 6。0;0;#5#3#6#21;1;0;0;P i d PopP i d=end endmodule這一模塊產(chǎn)生如圖2-5所示的波形。initial語句包含一個順序過程。這一順序過程在 0 ns時開始執(zhí)行,并且在順序過程中所有語句全部執(zhí)行完畢后 , initial語句永遠(yuǎn)掛起。這一順序過程包含帶有定義語句內(nèi)的分組過程賦值的實例。語句 1和2在0 ns時執(zhí)行。第三條語句也在 0時刻執(zhí)行,導(dǎo)致Pop 在第5 ns時被賦值。語句4在第5 ns 執(zhí)行,并且Pid

22、 在第8 ns被賦值。同樣,Pop在14 ns被賦值0,Pid在第16 ns被賦值0。第6條語句執(zhí)行后, initial語句永遠(yuǎn)被掛起。第 8更詳細(xì)地講解initial語句。圖2-5 Test 模塊的輸出波形2.5結(jié)構(gòu)化描述形式在Verilog HDL中可使用如下方式描述結(jié)構(gòu):1) 內(nèi)置語(在);2) 開關(guān)級原語(在晶體管級);3) 用戶定義的原語(在);4) 模塊實例 (創(chuàng)建層次結(jié)構(gòu))。通過使用線網(wǎng)來相互連接。下面的結(jié)構(gòu)描述形式使用內(nèi)置該實例基于圖2-4所示的邏輯圖。module FA _ S t r (A , B , C i n , Sum , Co u)t;input A, B, Ci

23、n ; output Sum , Cou t; wire S1 , T 1 , T 2 , T;3語描述的全加器電路實例。xorX 1 (S1 , A , B),X 2 (Sum , S1 , C i n);and第2章 HDL指南9A 1 (T3 ,A 2 (T 2 ,A 3 (T 1 ,A, B),B , C i n),A , C i n),orO1 (Cou t , T 1 , T 2 , T)3;endmodule在這一實例中,模塊包含門的實例語句,也就是說包含內(nèi)置門 xor、and和or 的實例語句。門實例由線網(wǎng)類型變量 S1、T1、T2和T3互連。由于沒有指定的順序 , 門實例語句

24、可以以任何順序出現(xiàn);圖中顯示了純結(jié)構(gòu); xor、and和or是內(nèi)置語; X1、X2、A1等是實例名稱。緊的信號列表是它的互連;列表中的第一個是門輸出,余下的是輸入。例如, S1跟在每個與xor 門實例X1的輸出連接,而A和B與實例X1的輸入連接。4位全加器可以使用4個1位全加器模塊描述,描述的邏輯圖如圖 2-6所示。下面是4位全加器的結(jié)構(gòu)描述形式。module F o u r B i t FA (FA , FB , FC i n , FSum , FCou)t ;parameter S I Z E = 4;input S I Z E:1 FA, FB;output S I Z E:1 F S

25、u minput FC i n;input FC o u t;wire 1: S I Z E1 F T e m p; FA _ S t rFA 1( .A (FA1), . B(FB1), . C i n(FC i n),.S u m(F S u m1), . C o u t(F T e m p2),FA 2( .A (FA2), . B(FB2), . C i n(F T e m p1),.S u m(F S u m2), . C o u t(F T e m p2),FA 3(FA3, FB3, F T e m p2, F S u m3, F T e m p3,FA 4(FA4, FB4,

26、F T e m p3, F S u m4, FC o u t);endmodule在這一實例中,模塊實例用于建模 4位全加器。在模塊實例語句中,端口可以與名稱或位置關(guān)聯(lián)。前兩個實例 FA1和FA2使用命名關(guān)聯(lián)方式,也就是說,端口的名稱和它連接的線網(wǎng)被顯式描述(每一個的形式“ .port_name (net_name))。最后兩個實例語句,實例 FA3和FA4使用位置關(guān)聯(lián)方式將端口與線網(wǎng)關(guān)聯(lián)。這里關(guān)聯(lián)的順序很重要,例如,在實例 FA4中,第一個FA4與FA_Str 的端口A連接,第二個FB4與FA_Str 的端口B連接,余下的由此類推。圖2-6 4位全加器2.6混合設(shè)計描述方式在模塊中,結(jié)構(gòu)的和

27、行為的結(jié)構(gòu)可以自由混合。也就是說,模塊描述中可以包含實例化10Verilog HDL 硬件描述語言的門、模塊實例化語句、連續(xù)賦值語句以及 always語句和initial語句的混合。它們之間可以相互包含。來自always語句和initial語句(切記只有寄存器類型數(shù)據(jù)可以在這兩種語句中賦值)的值能夠驅(qū)動門或開關(guān),而來自觸發(fā)always語句和initial語句?;蜻B續(xù)賦值語句(只能驅(qū)動線網(wǎng))的值能夠反過來用于下面是混合設(shè)計方式的1位全加器實例。module FA _ M i x (A , B , C i n ,input A, B, Ci n ; output Sum , Cou t; reg

28、C o u t ;reg T 1 , T 2 , T 3;wire S 1;Sum , Co u)t;xor X 1(S1 , A, B);/ /門實例語句。always ( A or B or C i n ) begin / always 語句。T 1T 2T 3=A BA& &&C i;n C i;n;BC o u tend= (T 1|T 2) | T 3;assign S u m = S 1endmodule只要A或B上有 C i n; / 連續(xù)賦值語句。發(fā)生,門實例語句即被執(zhí)行。只要 A、B或Cin上有發(fā)生,就執(zhí)行always 語句,并且只要S1或Cin上有2

29、.7設(shè)計模擬發(fā)生,就執(zhí)行連續(xù)賦值語句。Verilog HDL不僅提供描述設(shè)計的能力,而且提供對激勵、響應(yīng)和設(shè)計驗證的建模能力。激勵和或作為選通的數(shù)據(jù)望的響應(yīng)值比較完成??捎贸跏蓟Z句產(chǎn)生。驗證運行過程中的響應(yīng)可以作為“變化時保存”。最后,設(shè)計驗證可以通過在初始化語句中寫入相應(yīng)的語句自動與期下面是測試模塊Top的例子。該例子測試2.3節(jié)中講到的FA_Seq模塊。timescale 1 n s/1 n smodule T o p;reg PA , PB , PC;iwire PCo , PSu m;/ 一個模塊可以有一個空的端口列表。/ 正在測試的實例化模塊:FA_S e q F 1(PA , P

30、B , PC i , PSum , PC)o;/。initialbegin: ON L Y_O NCEreg 3:0 P a l ;/需要4位, Pal才能取值8。for (P a l = 0; P al < 8; P a l = Pal + 1)第2章 HDL指南11beginPA , PB , PC i = P a l ;#5 $display (“PA,PCi = %b%b%”b, PA , PB , PC,iPB,“ : : : PCo, PSum=%b%”b , PCo , PSu m);endend endmodule在測試模塊描述中使用位置關(guān)聯(lián)方式將模塊實例語句中的信號與模

31、塊中的端口相連接。也就是說, PA連接到模塊FA_Seq的端口A,PB連接到模塊FA_Seq的端口B,依此類推。注意初始化語句中使用了一個for循環(huán)語句,在PA、PB和PCi上產(chǎn)生波形。for 循環(huán)中的第一條賦值語句用于表示合并的目標(biāo)。自右向左,右端各相應(yīng)的位賦給左端的參數(shù)。初始化語句還包含有一個預(yù)先定義好的系統(tǒng)任務(wù)。系統(tǒng)任務(wù) $display將輸入以特定的格式打印輸出。系統(tǒng)任務(wù)$display調(diào)用中的規(guī)定$display任務(wù)在5個時間后執(zhí)行。這 5個時間基本上代表了邏輯處理時間。即是輸入的延遲時間。的加載至觀察到模塊在測試條件下輸出之間這一模型中還有另外一個細(xì)微差別。 Pal在初始化語句內(nèi)被

32、局部定義。為完成這能,初始化語句中的順序過程( begin-end)必須標(biāo)記。在這種情況下 , ONLY_ONCE是順序過程標(biāo)記。如果在順序過程內(nèi)沒有局部的變量,就不需要該標(biāo)記。測試模塊產(chǎn)生的波形如圖2-7顯示。下面是測試模塊產(chǎn)生的輸出。PA,PA,PA,PA,PA,PA,PA,PA,PB,PB,PB,PB,PB,PB,PB,PB,PCi PCi PCi PCi PCi PCi PCiPCi=000001010011100101110111:PCo, PCo, PCo, PCo, PCo, PCo, PCo,PCo,PSum PSum PSum PSum PSum PSum PSumPSum=

33、0001011001101011圖2-7 測試模塊Top執(zhí)行產(chǎn)生的波形的 RS_FF模塊的測試模塊如圖2-8所示。驗證與非門交叉連接timescale 10ns/1nsmodule R S _ FF (Q , Qba r , R , )S ;output Q, Qbar ;input R, S;圖2-8 交叉連接的與非門nand #1 (Q, R , Qba r);12 Verilog HDL 硬件描述語言nand #1 (Qba r , S , Q ,);/在門實例語句中,實例名稱是可選的。endmodulemodule T e s t ; reg TS, TR; wire TQ, TQb

34、;/測試模塊的實例語句:RS_FF NSTA (.Q(T Q), .S (T S), .R(T R), .Q b a r(T Q b);/采用端口名相關(guān)聯(lián)的連接方式。/ 加載激勵:initial begin:T R = 0;T S = 0;#5 T S = 1;#5 T S = 0;T R = 1;#5 TS = 1;T R = 0;#5 T S = 0;#5 T R = 1;end/輸出顯示:initial$monitor ("At time %t ," , t$ime,"TR = %b, TS=%b, TQ=%b, TQb= %b "T,R , TS

35、 , TQ ,endmoduleRS_FF模塊描述了設(shè)計的結(jié)構(gòu)。在門實例語句中使用門T Q)b;;例如,第一個實例語句中的門為1個時間。該門意味著如果 R或Qbar假定在T時刻變化, Q將在T+1時刻獲得計算結(jié)果值。模塊Test是一個測試模塊。測試模塊中的 RS_FF用實例語句說明其端口用端口名關(guān)聯(lián)方式連接。在這一模塊中有兩條初始化語句。第一個初始化語句只簡單地產(chǎn)生 TS和TR上的波形。這一初始化語句包含帶有語句間的程序塊過程賦值語句。第二條初始化語句調(diào)用系統(tǒng)任務(wù) $monitor。這一系統(tǒng)任務(wù)調(diào)用的功能是只要參數(shù)表中指定的變量值發(fā)生變化就打印指定的字符串。產(chǎn)生的相應(yīng)波形如圖 2-9所示。下面

36、是測試模塊產(chǎn)生的輸出。請注意timescale指令在上的影響。圖2-9 Test模塊產(chǎn)生的波形HDL指南13第2章At At At At At At At At At At At At At Attime time time time time time time time time time time time time time0, TR=0, TS=0, TQ=x, TQb= x10,50,60,TR=0, TR=0,TR=0,TS=0, TS=1,TS=1,TQ=1, TQ=1,TQ=1,TQb= TQb=TQb=110100,110,120,150,160,170,200,210,2

37、50,260,TR=1, TR=1, TR=1, TR=0, TR=0, TR=0, TR=0, TR=0, TR=1,TR=1,TS=0, TS=0, TS=0, TS=1, TS=1, TS=1, TS=0, TS=0, TS=0,TS=0,TQ=1, TQ=1, TQ=0, TQ=0, TQ=1, TQ=1, TQ=1, TQ=1, TQ=1,TQ=0,TQb= TQb= TQb= TQb= TQb= TQb= TQb= TQb= TQb=TQb=0111100111后面的章節(jié)將更詳細(xì)地講述這些主題。習(xí)題1. 在數(shù)據(jù)流描述使用什么語句描述一個設(shè)計?2. 使用timescale 編譯器指令

38、的目的是什么?舉出一個實例。3. 在過程賦值語句中可以定義哪兩種?請舉例詳細(xì)說明。4. 采用數(shù)據(jù)流描述方式描述圖2-4中所示的1位全加器。5. initial語句與always 語句的關(guān)鍵區(qū)別是什么?6. 寫出產(chǎn)生圖2-10所示波形的變量BullsEye的初始化語句。圖2-10 變量BullsEye 的波形7. 采用結(jié)構(gòu)描述方式描寫圖 2-2中所示的2-4譯碼器。8. 為2.3節(jié)中描述的模塊Decode2x4編寫一個測試驗證程序。9. 列出你在Verilog HDL模型中使用的兩類賦值語句。10. 在順序過程中何時需要定義標(biāo)記?11. 使用數(shù)據(jù)流描述方式編寫圖 2 - 11所示的異或邏輯的Ve

39、rilog HDL描述,并使用規(guī)定的12. 找出下面連續(xù)賦值語句的錯誤。assign Reset = #2 WriteBus;。圖2-11異或邏輯第3章Verilog語言要素本章介紹Verilog HDL的基本要素,包括標(biāo)識符、注釋、數(shù)值、編譯程序指令、系統(tǒng)任務(wù)和系統(tǒng)函數(shù)。另外,本章還介紹了Verilog硬件描述語言中的兩種數(shù)據(jù)類型。3.1標(biāo)識符Verilog HDL中的標(biāo)識符(identifier)可以是任意一組字母、數(shù)字、 $符號和_(下劃線)符號的組合,但標(biāo)識符的第一個字符必是標(biāo)識符的幾個例子:C o u n t字母或者下劃線。另外,標(biāo)識符是區(qū)分大小寫的。以下COUNT_ R 1 _ D

40、 2R 5 6 _ 6 8 F I VE $/與C o u n t不同。轉(zhuǎn)義標(biāo)識符(escaped identifier )可以在一條標(biāo)識符中包含任何可打印字符。轉(zhuǎn)義標(biāo)識符以 (反斜線)符號開頭,以空白結(jié)尾(空白可以是一個空格、一個制表字符或換行符)。下面例舉 了幾個轉(zhuǎn)義標(biāo)識符:7400.*.$*QO u t G a t e與O u t G a t e相同。最后這個例子解釋了在一條轉(zhuǎn)義標(biāo)識符中,反斜線和結(jié)束空格并不是轉(zhuǎn)義標(biāo)識符的一部分。也就是說,標(biāo)識符OutGate 和標(biāo)識符OutGate恒等。Verilog HDL定義了一系列保留字,叫做語言中的所有保留字。注意只有小寫的,它僅用于某些上下文

41、中。 附錄A列出了才是保留字。例如,標(biāo)識符 always(這是個關(guān)鍵詞)與標(biāo)識符ALWAYS(非另外,轉(zhuǎn)義標(biāo)識符與)是不同的。并全相同。標(biāo)識符initial 與標(biāo)識符initial(這是個)不同。注意這一約定與那些轉(zhuǎn)義標(biāo)識符不同。3.2注釋在Verilog HDL中有兩種形式的注釋。/*第一種形式:可以擴(kuò)展至多行 */第二種形式:在本行結(jié)束。3.3格式Verilog HDL區(qū)分大小寫。也就是說大小寫不同的標(biāo)識符是不同的。此外, Verilog HDL是第3章 Verilog 語言要素15自由格式的,即結(jié)構(gòu)可以多行編寫,也可以在一行內(nèi)編寫。白空(新行、制表符和空格)沒有特殊意義。下面通過實例解釋

42、說明。initial begin T o p = 3' b001; #2 T o p = 3' b011; end和下面的指令一樣:initial beginT o p = 3' b001;#2 T o p = 3' b011;end3.4系統(tǒng)任務(wù)和函數(shù)以$字符開始的標(biāo)識符表示系統(tǒng)任務(wù)或系統(tǒng)函數(shù)。任務(wù)提供了一種封裝行為的機(jī)制。這種 機(jī)制可在設(shè)計的不同部分被調(diào)用。任務(wù)可以返回 0個或多個值。函數(shù)除只能返回一個值以外與任務(wù)相同。此外,函數(shù)在0時刻執(zhí)行,即不 延遲,而任務(wù)可以帶有延遲。$display ("Hi, you have reached LT to

43、day");/* $display 系統(tǒng)任務(wù)在新的一行中顯示。*/$time/該系統(tǒng)任務(wù)返回當(dāng)前的模擬時間。系統(tǒng)任務(wù)和系統(tǒng)函數(shù)在第10章中詳細(xì)講解。3.5編譯指令以(反引號)開始的某些標(biāo)識符是編譯器指令。在 Verilog 語言編譯時,特定的編譯器指令在整個編譯過程中有效(編譯過程可完整的標(biāo)準(zhǔn)編譯器指令如下:多個文件),直到遇到其它的不同編譯程序指令。define, undefifdef, else, endifdefault_nettypeincluderesltimescaleunconnected_drive, nounconnected_drivecelldefine, en

44、dcelldefine3.5.1define 和undefdefine指令用于文本替換,它很像C語言中的#define 指令,如:define MAX _ BU S _ S I Z E32. . .reg MAX _ BU S _ S I Z E- 1:0 A d d R e g;一旦 define 指令被編譯,其在整個編譯過程中define指令,MAX_BUS_SIZE 能被多個文件使用。undef 指令取消前面定義的宏。例如:效。例如,通過另一個文件中的define WORD 16 /建立一個. . .wire WORD : 1 Bus;替代。16 Verilog HDL 硬件描述語言.

45、. .undef WORD/ 在undef編譯指令后, WOR D的宏定義不再有效.3.5.2 ifdef、else 和endif這些編譯指令用于條件編譯,如下所示:ifdef W I NDOW Sparameter WORD_S I ZE = 16elseparameter WORD _ S I Z E= 32endif在編譯過程中,如果已定義了名字為 WINDOWS的選擇第二種參數(shù)說明。else 程序指令對于ifdef 指令是可選的。,就選擇第一種參數(shù),否則3.5.3 default_nettype該指令用于為隱式線網(wǎng)指定線網(wǎng)類型。也就是將那些沒有被說明的連線定義線網(wǎng)類型。default_

46、nettype wand該實例定義的缺省的線網(wǎng)為線與類型。因此,如果在此指令后面的任何模塊中沒有說明的連 線,那么該線網(wǎng)被假定為線與類型。3.5.4 includeinclude 編譯器指令用于嵌入內(nèi)嵌文件的內(nèi)容。文件既可以用相對路徑名定義,也可以用全路徑名定義, 例如:include " . . / . . /primitives."v編譯時,這一行由文件“ ././primitives.v” 的內(nèi)容替代。3.5.5 resl該編譯器指令將所有的編譯指令重新設(shè)置為缺省值。resl例如,該指令使得缺省連線類型為線網(wǎng)類型。3.5.6 timescale在Verilog HDL

47、 模型中,所有都用時間表述。使用 timescale編譯器指令將時間與實際時間相關(guān)聯(lián)。該指令用于延的和精度。 timescale編譯器指令格式為:timescale t i m e _ u n i t / t i m e _ p r e c i s i o ntime_unit 和time_precision 由值1、10、和100以及timescale 1ns/100pss、ms、us、ns、ps和fs組成。例如:表示為1ns,精度為100ps。timescale 編譯器指令在模塊說明外部出現(xiàn), 并且影響后面所有的值。例如:第3章 Verilog 語言要素17timescale 1ns/ 1

48、00psmodule A n d F u n c (Z, A, B);output Z;input A, B;and # (5.22, 6.17 )A l (Z, A, B);/規(guī)定了上升及下降值。endmodule編譯器指令5.2 ns,延以ns為,并且精度為 1/10 ns(100 ps)。因此,值5.22對應(yīng)6.17對應(yīng)6.2 ns。如果用如下的timescale程序指令代替上例中的編譯器指令,timescale 10ns/1ns那么5.22對應(yīng)52ns, 6.17對應(yīng)62ns。在編譯過程中, timescale指令影響這一編譯器指令后面所有模塊中的值,直至遇到另一個timescale指

49、令或resl指令。當(dāng)一個設(shè)計中的多個模塊帶有自身的 timescale編譯指令時將發(fā)生什么?在這種情況下,模擬器總是在所有模塊的最小精度上,并且所有都相應(yīng)地?fù)Q算為最小timescale 1ns/ 100ps精度。例如,module A n d F u n c (Z, A, B);output Z;input A, B;and # (5.22, 6.17 )A l (Z, A, B);endmoduletimescale 10ns/ 1nsmodule T B;reg Pu t A , Pu t B;wire G e t O;initial beginP u t A = 0;P u t B =

50、0;#5.21 P u t B = 1; #10.4 P u t A = 1; #15 P u t B = 0;endA n d F u n c AF 1(G e t O , Pu t A , Pu t B);endmodule在這個例子中,每個模塊自身的 timescale編譯器指令。timescale編譯器指令第一次應(yīng)用于。因此,在第一個模塊中, 5.22對應(yīng)5.2 ns, 6.17對應(yīng)6.2 ns; 在第二個模塊中5.21對應(yīng)52 ns, 10.4對應(yīng)104 ns, 15對應(yīng)150 ns。如果模塊TB,設(shè)計中的所有模塊最小時間精度為100 ps。因此,所有延遲(特別是模塊 TB中的延遲)

51、將換算成精度為 100 ps。延遲52 ns現(xiàn)在對應(yīng)520*100 ps,104對應(yīng)1040*100 ps,150對應(yīng)1500*100 ps。更重要的是,使用100 ps為時間精度。如果模塊 AndFunc,由于模塊TB不是模塊AddFunc的子模塊,模塊 TB中的timescale程序指令將不再有效。18Verilog HDL 硬件描述語言3.5.7 unconnected_drive和nounconnected_drive在模塊實例化中,出現(xiàn)在這兩個編譯器指令間的任何未連接的輸入端口或者為正偏電路 狀態(tài)或者為反偏電路狀態(tài)。unconnected_drive pull1. . ./*在這兩個

52、程序指令間的連接的輸入端口為正偏電路狀態(tài)(連接到高電平) */nounconnected_driveunconnected_drive pull0. . ./*在這兩個程序指令間的nounconnected_drive連接的輸入端口為反偏電路狀態(tài)(連接到低電平) */3.5.8 celldefine 和 endcelldefine這兩個程序指令用于將模塊標(biāo)記為單元模塊。它們表示包含模塊定義,如下例所示。celldefinemodule FD 1 S 3 AX (D , CK , )Z ;. . .endmoduleendcelldefine某些PLI例程使用單元模塊。3.6值集合Verilog HDL有下列四種基本的值:1) 0:邏輯0或“假”2) 1:邏輯1或“真”3) x:未知4) z:高阻注意這四種值的解釋都內(nèi)置于

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論