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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、。由于他們的模擬、器的廣泛使用,Verilog HDL 作為一種便于使用且實(shí)用的語言逐漸為眾多設(shè)計(jì)者所接受。在一次努力增加語言普及性的活動(dòng)中, 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硬件描述語言參考手冊(cè)中有詳細(xì)描述。1.3主要能力下面列出的是Verilog硬件描述語言的

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

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

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

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

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

9、另一個(gè)模塊中使用。一個(gè)模塊的基本語法如下: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說明部分用于定義不同的項(xiàng),例如模塊描述中使用的寄存器和參數(shù)。語句定義設(shè)計(jì)的功 能和結(jié)構(gòu)。說明部分和語句可以散布在模塊中的任何地方;但是變量、寄存器、線網(wǎng)和參數(shù) 等的說明部分必須在使用前出現(xiàn)。為了使模塊描述清晰和具有良好的可讀性 , 最好將所有的說明部分放在語句前。本書中的所有實(shí)例都遵守這一規(guī)范。圖2-1為建模一個(gè)半加器電路的模塊的簡(jiǎn)單實(shí)例。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個(gè)端口: 兩個(gè)輸入端口A和B,兩個(gè)輸出端口Sum和Carry。由于沒有定義端口的位數(shù), 所有端口大小1位;同時(shí), 由于沒有各端口的數(shù)據(jù)類型說明, 這四個(gè)端口都是線網(wǎng)數(shù)據(jù)類型。模塊包含兩條描述半加器數(shù)據(jù)流行為的連續(xù)賦值圖2-1 半加器電路第2章 HDL指南5語句。從這種意義上講,這些語句在模塊中出現(xiàn)的順序無關(guān)緊要,這些語句是并發(fā)的。每條語句的執(zhí)行順

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

13、。 如果此編譯器指令所在的模塊包含上面的連續(xù)賦值語句 , #2 代表2ns。如果沒有這樣的編譯器指令, Verilog HDL 模擬器會(huì)指定一個(gè)缺省時(shí)間。 IEEE VerilogHDL 標(biāo)準(zhǔn)中沒有規(guī)定缺省時(shí)間2.3數(shù)據(jù)流描述方式。用數(shù)據(jù)流描述方式對(duì)一個(gè)設(shè)計(jì)建模的最基本的機(jī)制就是使用連續(xù)賦值語句。在連續(xù)賦值 語句中,某個(gè)值被指派給線網(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ù)無論何時(shí)發(fā)生變化 , 右邊表都重新計(jì)算, 并且在指定的操作數(shù)變化與賦值給左邊表變化值被賦予左邊表的線網(wǎng)變

14、量。定義了右邊表延值, 缺省為0。器電路的建模的實(shí)例模型。之間的持續(xù)時(shí)間。如果沒有圖2-2顯示了使用數(shù)據(jù)流描述方式對(duì) 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/以反引號(hào)“ ”開始的第一條語句是編譯器指令, 編譯器指令timescale 將模塊中所有的設(shè)置為1 ns,時(shí)間精度為1 ns。例如,在連續(xù)賦值語句中和2 ns。值#1和#2分別對(duì)應(yīng)1 ns模塊Decoder2x4有3個(gè)輸入端口和1個(gè)4位輸出端口。線網(wǎng)類型說明了兩個(gè)連線型變量 Abar和Bbar (連線類型是線網(wǎng)類型的

16、一種)。此外,模塊包含6個(gè)連續(xù)賦值語句。參見圖2-3中的波形圖。當(dāng) EN在第5 ns變化時(shí),語句3、4、5和6執(zhí)行。這是因?yàn)?EN是這些連續(xù)賦值語句中右邊表的操作數(shù)。 Z0在第7 ns時(shí)被賦予新值0。當(dāng)A在第15 ns變化時(shí), 語句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)?。請(qǐng)注意連續(xù)賦值語句是如何對(duì)電路的數(shù)據(jù)流行為建模的;這種建模方式是隱式而非顯式 的建模方式。此外,連續(xù)賦值語句是并發(fā)執(zhí)行的,也就是說各語句的執(zhí)行順序與其在描述中出現(xiàn)

17、的順序無關(guān)。圖2-3 連續(xù)賦值語句實(shí)例2.4 行為描述方式設(shè)計(jì)的行為功能使用下述過程語句結(jié)構(gòu)描述:1) initial語句:此語句只執(zhí)行一次。第2章 HDL指南72) always語句:此語句總是循環(huán)執(zhí)行, 或者說此語句重復(fù)執(zhí)行。只有寄存器類型數(shù)據(jù)能夠在這兩種語句中被賦值。寄存器類型數(shù)據(jù)在被賦新值前保持原 有值不變。所有的初始化語句和always語句在0時(shí)刻并發(fā)執(zhí)行。下例為always語句對(duì)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 有三個(gè)輸入和兩個(gè)輸出。由于Sum、Cout、T1、T2和T3在always 語句中被賦值,它們被說明為 reg 類型(reg 是寄存器數(shù)據(jù)類型的一種)。always 語句中有一個(gè)與(緊跟在字符 后面的表)。相關(guān)聯(lián)的順序過程(begi

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

20、定賦值延遲 4個(gè)時(shí)間執(zhí)行。就是說,在第一條語句執(zhí)行后等待 4的示例。個(gè)時(shí)間,然后執(zhí)行第二條語句。下面是語句內(nèi)S u m = #3 (A B) C i n;這個(gè)賦值中的意味著首先計(jì)算右邊表的值 , 等待3個(gè)時(shí)間,然后賦值給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語句包含一個(gè)順序過程。這一順序過程在 0 ns時(shí)開始執(zhí)行,并且在順序過程中所有語句全部執(zhí)行完畢后 , initial語句永遠(yuǎn)掛起。這一順序過程包含帶有定義語句內(nèi)的分組過程賦值的實(shí)例。語句 1和2在0 ns時(shí)執(zhí)行。第三條語句也在 0時(shí)刻執(zhí)行,導(dǎo)致Pop 在第5 ns時(shí)被賦值。語句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)級(jí)原語(在晶體管級(jí));3) 用戶定義的原語(在);4) 模塊實(shí)例 (創(chuàng)建層次結(jié)構(gòu))。通過使用線網(wǎng)來相互連接。下面的結(jié)構(gòu)描述形式使用內(nèi)置該實(shí)例基于圖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語描述的全加器電路實(shí)例。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在這一實(shí)例中,模塊包含門的實(shí)例語句,也就是說包含內(nèi)置門 xor、and和or 的實(shí)例語句。門實(shí)例由線網(wǎng)類型變量 S1、T1、T2和T3互連。由于沒有指定的順序 , 門實(shí)例語句

24、可以以任何順序出現(xiàn);圖中顯示了純結(jié)構(gòu); xor、and和or是內(nèi)置語; X1、X2、A1等是實(shí)例名稱。緊的信號(hào)列表是它的互連;列表中的第一個(gè)是門輸出,余下的是輸入。例如, S1跟在每個(gè)與xor 門實(shí)例X1的輸出連接,而A和B與實(shí)例X1的輸入連接。4位全加器可以使用4個(gè)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在這一實(shí)例中,模塊實(shí)例用于建模 4位全加器。在模塊實(shí)例語句中,端口可以與名稱或位置關(guān)聯(lián)。前兩個(gè)實(shí)例 FA1和FA2使用命名關(guān)聯(lián)方式,也就是說,端口的名稱和它連接的線網(wǎng)被顯式描述(每一個(gè)的形式“ .port_name (net_name))。最后兩個(gè)實(shí)例語句,實(shí)例 FA3和FA4使用位置關(guān)聯(lián)方式將端口與線網(wǎng)關(guān)聯(lián)。這里關(guān)聯(lián)的順序很重要,例如,在實(shí)例 FA4中,第一個(gè)FA4與FA_Str 的端口A連接,第二個(gè)FB4與FA_Str 的端口B連接,余下的由此類推。圖2-6 4位全加器2.6混合設(shè)計(jì)描述方式在模塊中,結(jié)構(gòu)的和

27、行為的結(jié)構(gòu)可以自由混合。也就是說,模塊描述中可以包含實(shí)例化10Verilog HDL 硬件描述語言的門、模塊實(shí)例化語句、連續(xù)賦值語句以及 always語句和initial語句的混合。它們之間可以相互包含。來自always語句和initial語句(切記只有寄存器類型數(shù)據(jù)可以在這兩種語句中賦值)的值能夠驅(qū)動(dòng)門或開關(guān),而來自觸發(fā)always語句和initial語句?;蜻B續(xù)賦值語句(只能驅(qū)動(dòng)線網(wǎng))的值能夠反過來用于下面是混合設(shè)計(jì)方式的1位全加器實(shí)例。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);/ /門實(shí)例語句。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ā)生,門實(shí)例語句即被執(zhí)行。只要 A、B或Cin上有發(fā)生,就執(zhí)行always 語句,并且只要S1或Cin上有2

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

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

32、局部定義。為完成這能,初始化語句中的順序過程( begin-end)必須標(biāo)記。在這種情況下 , ONLY_ONCE是順序過程標(biāo)記。如果在順序過程內(nèi)沒有局部的變量,就不需要該標(biāo)記。測(cè)試模塊產(chǎn)生的波形如圖2-7顯示。下面是測(cè)試模塊產(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 測(cè)試模塊Top執(zhí)行產(chǎn)生的波形的 RS_FF模塊的測(cè)試模塊如圖2-8所示。驗(yàn)證與非門交叉連接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 ,);/在門實(shí)例語句中,實(shí)例名稱是可選的。endmodulemodule T e s t ; reg TS, TR; wire TQ, TQb

34、;/測(cè)試模塊的實(shí)例語句:RS_FF NSTA (.Q(T Q), .S (T S), .R(T R), .Q b a r(T Q b);/采用端口名相關(guān)聯(lián)的連接方式。/ 加載激勵(lì):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è)計(jì)的結(jié)構(gòu)。在門實(shí)例語句中使用門T Q)b;;例如,第一個(gè)實(shí)例語句中的門為1個(gè)時(shí)間。該門意味著如果 R或Qbar假定在T時(shí)刻變化, Q將在T+1時(shí)刻獲得計(jì)算結(jié)果值。模塊Test是一個(gè)測(cè)試模塊。測(cè)試模塊中的 RS_FF用實(shí)例語句說明其端口用端口名關(guān)聯(lián)方式連接。在這一模塊中有兩條初始化語句。第一個(gè)初始化語句只簡(jiǎ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、是測(cè)試模塊產(chǎn)生的輸出。請(qǐng)注意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ù)流描述使用什么語句描述一個(gè)設(shè)計(jì)?2. 使用timescale 編譯器指令

38、的目的是什么?舉出一個(gè)實(shí)例。3. 在過程賦值語句中可以定義哪兩種?請(qǐng)舉例詳細(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編寫一個(gè)測(cè)試驗(yàn)證程序。9. 列出你在Verilog HDL模型中使用的兩類賦值語句。10. 在順序過程中何時(shí)需要定義標(biāo)記?11. 使用數(shù)據(jù)流描述方式編寫圖 2 - 11所示的異或邏輯的Ve

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

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

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

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)識(shí)符表示系統(tǒng)任務(wù)或系統(tǒng)函數(shù)。任務(wù)提供了一種封裝行為的機(jī)制。這種 機(jī)制可在設(shè)計(jì)的不同部分被調(diào)用。任務(wù)可以返回 0個(gè)或多個(gè)值。函數(shù)除只能返回一個(gè)值以外與任務(wù)相同。此外,函數(shù)在0時(shí)刻執(zhí)行,即不 延遲,而任務(wù)可以帶有延遲。$display ("Hi, you have reached LT to

43、day");/* $display 系統(tǒng)任務(wù)在新的一行中顯示。*/$time/該系統(tǒng)任務(wù)返回當(dāng)前的模擬時(shí)間。系統(tǒng)任務(wù)和系統(tǒng)函數(shù)在第10章中詳細(xì)講解。3.5編譯指令以(反引號(hào))開始的某些標(biāo)識(shí)符是編譯器指令。在 Verilog 語言編譯時(shí),特定的編譯器指令在整個(gè)編譯過程中有效(編譯過程可完整的標(biāo)準(zhǔn)編譯器指令如下:多個(gè)文件),直到遇到其它的不同編譯程序指令。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 指令被編譯,其在整個(gè)編譯過程中define指令,MAX_BUS_SIZE 能被多個(gè)文件使用。undef 指令取消前面定義的宏。例如:效。例如,通過另一個(gè)文件中的define WORD 16 /建立一個(gè). . .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 程序指令對(duì)于ifdef 指令是可選的。,就選擇第一種參數(shù),否則3.5.3 default_nettype該指令用于為隱式線網(wǎng)指定線網(wǎng)類型。也就是將那些沒有被說明的連線定義線網(wǎng)類型。default_

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

47、 模型中,所有都用時(shí)間表述。使用 timescale編譯器指令將時(shí)間與實(shí)際時(shí)間相關(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對(duì)應(yīng)6.17對(duì)應(yīng)6.2 ns。如果用如下的timescale程序指令代替上例中的編譯器指令,timescale 10ns/1ns那么5.22對(duì)應(yīng)52ns, 6.17對(duì)應(yīng)62ns。在編譯過程中, timescale指令影響這一編譯器指令后面所有模塊中的值,直至遇到另一個(gè)timescale指

49、令或resl指令。當(dāng)一個(gè)設(shè)計(jì)中的多個(gè)模塊帶有自身的 timescale編譯指令時(shí)將發(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在這個(gè)例子中,每個(gè)模塊自身的 timescale編譯器指令。timescale編譯器指令第一次應(yīng)用于。因此,在第一個(gè)模塊中, 5.22對(duì)應(yīng)5.2 ns, 6.17對(duì)應(yīng)6.2 ns; 在第二個(gè)模塊中5.21對(duì)應(yīng)52 ns, 10.4對(duì)應(yīng)104 ns, 15對(duì)應(yīng)150 ns。如果模塊TB,設(shè)計(jì)中的所有模塊最小時(shí)間精度為100 ps。因此,所有延遲(特別是模塊 TB中的延遲)

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

52、程序指令間的連接的輸入端口為正偏電路狀態(tài)(連接到高電平) */nounconnected_driveunconnected_drive pull0. . ./*在這兩個(gè)程序指令間的nounconnected_drive連接的輸入端口為反偏電路狀態(tài)(連接到低電平) */3.5.8 celldefine 和 endcelldefine這兩個(gè)程序指令用于將模塊標(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論