vhdl參考verilog hdl硬件描述語(yǔ)言_第1頁(yè)
vhdl參考verilog hdl硬件描述語(yǔ)言_第2頁(yè)
vhdl參考verilog hdl硬件描述語(yǔ)言_第3頁(yè)
vhdl參考verilog hdl硬件描述語(yǔ)言_第4頁(yè)
vhdl參考verilog hdl硬件描述語(yǔ)言_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

1、第3章Verilog語(yǔ)言要素本章介紹Verilog HDL的基本要素,包括標(biāo)識(shí)符、注釋、數(shù)值、編譯程序指令、系統(tǒng)任務(wù)和系統(tǒng)函數(shù)。另外,本章還介紹了Verilog硬件描述語(yǔ)言中的兩種數(shù)據(jù)類(lèi)型。3.1標(biāo)識(shí)符Verilog HDL中的標(biāo)識(shí)符(identifier)可以是任意一組字母、數(shù)字、 $符號(hào)和_(下劃線(xiàn))符號(hào)的組合,但標(biāo)識(shí)符的第一個(gè)字符必須是字母或者下劃線(xiàn)。另外,標(biāo)識(shí)符是區(qū)分大小寫(xiě)的。以下是標(biāo)識(shí)符的幾個(gè)例子:C o u n tCOUNT_ R 1 _ D 2R 5 6 _ 6 8 F I VE $/與C o u n t不同。轉(zhuǎn)義標(biāo)識(shí)符(escd identifier )可以在一條標(biāo)識(shí)符中包含任

2、何可打印字符。轉(zhuǎn)義標(biāo)識(shí)符以 (反斜線(xiàn))符號(hào)開(kāi)頭,以空白結(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í)符中,反斜線(xiàn)和結(jié)束空格并不是轉(zhuǎn)義標(biāo)識(shí)符的一部分。也就是說(shuō),標(biāo)識(shí)符OutGate 和標(biāo)識(shí)符OutGate恒等。Verilog HDL定義了一系列保留字,叫做語(yǔ)言中的所有保留字。注意只有小寫(xiě)的,它僅用于某些上下文中。 附錄A列出了才是保留字。例如,標(biāo)識(shí)符 always(這是個(gè)關(guān)鍵詞)與標(biāo)識(shí)符ALWAYS(非另外,轉(zhuǎn)義標(biāo)識(shí)符與)是不同的。并不完全相同。標(biāo)識(shí)符in

3、itial 與標(biāo)識(shí)符initial(這是個(gè))不同。注意這一約定與那些轉(zhuǎn)義標(biāo)識(shí)符不同。3.2注釋在Verilog HDL中有兩種形式的注釋。/*第一種形式:可以擴(kuò)展至多行 */第二種形式:在本行結(jié)束。3.3格式Verilog HDL區(qū)分大小寫(xiě)。也就是說(shuō)大小寫(xiě)不同的標(biāo)識(shí)符是不同的。此外, Verilog HDL是第3章 Verilog 語(yǔ)言要素15格式的,即結(jié)構(gòu)可以多行編寫(xiě),也可以在一行內(nèi)編寫(xiě)。(新行、制表符和空格)沒(méi)有特殊意義。下面通過(guò)實(shí)例解釋說(shuō)明。initial bego p = 3 b001; #2 T o p = 3 b011; end和下面的指令一樣:initial beginT o p

4、 = 3 b001;#2 T o p = 3 b011;end3.4系統(tǒng)任務(wù)和函數(shù)以$字符開(kāi)始的標(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 today);/* $display 系統(tǒng)任務(wù)在新的一行中顯示。*/$time/該系統(tǒng)任務(wù)返回當(dāng)前的模擬時(shí)間。系統(tǒng)任務(wù)和系統(tǒng)函數(shù)在第10章中詳細(xì)講解。3.5編譯指令以(反引號(hào))開(kāi)始的某些標(biāo)識(shí)符是編譯器指令。在 Veril

5、og 語(yǔ)言編譯時(shí),特定的編譯器指令在整個(gè)編譯過(guò)程中有效(編譯過(guò)程可完整的標(biāo)準(zhǔn)編譯器指令如下:多個(gè)文件),直到遇到其它的不同編譯程序指令。define, undefifdef, else, endifdefault_nettypeincluderesetalltimescaleunconnected_drive, nounconnected_drivecelldefine, endcelldefine3.5.1define 和undefdefine指令用于文本替換,它很像C語(yǔ)言中的#define 指令,如:define MAX _ BU S _ S I Z E32. . .reg MAX _ B

6、U S _ S I Z E- 1:0 A d d R e g;一旦 define 指令被編譯,其在整個(gè)編譯過(guò)程中都有效。例如,通過(guò)另一個(gè)文件中的define指令,MAX_BUS_SIZE 能被多個(gè)文件使用。undef 指令取消前面定義的宏。例如:define WORD 16 /建立一個(gè)文本宏替代。. . .wire WORD : 1 Bus;16 Verilog HDL 硬件描述語(yǔ)言. . .undef WORD/ 在undef編譯指令后, WOR D的宏定義不再有效.3.5.2 ifdef、else 和endif這些編譯指令用于條件編譯,如下所示:ifdef W I NDOW Sparame

7、ter WORD_S I ZE = 16elseparameter WORD _ S I Z E= 32endif在編譯過(guò)程中,如果已定義了名字為 WINDOWS的文本宏,就選擇第一種參數(shù)選擇第二種參數(shù)說(shuō)明。else 程序指令對(duì)于ifdef 指令是可選的。,否則3.5.3 default_nettype該指令用于為隱式線(xiàn)網(wǎng)指定線(xiàn)網(wǎng)類(lèi)型。也就是將那些沒(méi)有被說(shuō)明的連線(xiàn)定義線(xiàn)網(wǎng)類(lèi)型。default_nettype wand該實(shí)例定義的缺省的線(xiàn)網(wǎng)為線(xiàn)與類(lèi)型。因此,如果在此指令后面的任何模塊中沒(méi)有說(shuō)明的連線(xiàn),那么該線(xiàn)網(wǎng)被假定為線(xiàn)與類(lèi)型。3.5.4 includeinclude 編譯器指令用于嵌入內(nèi)嵌文件

8、的內(nèi)容。文件既可以用相對(duì)路徑名定義,也可以用全路徑名定義, 例如:include . . / . . /primitives.v編譯時(shí),這一行由文件“ ././primitives.v” 的內(nèi)容替代。3.5.5 resetall該編譯器指令將所有的編譯指令重新設(shè)置為缺省值。resetall例如,該指令使得缺省連線(xiàn)類(lèi)型為線(xiàn)網(wǎng)類(lèi)型。3.5.6 timescale在Verilog HDL 模型中,所有時(shí)延都用與實(shí)際時(shí)間相關(guān)聯(lián)。該指令用于定義時(shí)延的時(shí)間表述。使用 timescale編譯器指令將時(shí)間和時(shí)延精度。 timescale編譯器指令格式為:timescale t i m e _ u n i t

9、/ t i m e _ p r e c itime_unit 和time_preci由值1、10、和100以及s、ms、us、ns、ps和fs組成。例如:timescale 1ns/100ps表示時(shí)延為1ns, 時(shí)延精度為100ps。timescale 編譯器指令在模塊說(shuō)明外部出現(xiàn), 并且影響后面所有的時(shí)延值。例如:第3章 Verilog 語(yǔ)言要素17timescale 1ns/ 100psmodule 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ī)定了上升及下降時(shí)延值。endmod

10、ule編譯器指令定義時(shí)延以ns為,并且時(shí)延精度為 1/10 ns(100 ps)。因此,時(shí)延值5.22對(duì)應(yīng)5.2 ns, 時(shí)延6.17對(duì)應(yīng)6.2 ns。如果用如下的timescale程序指令代替上例中的編譯器指令,timescale 10ns/1ns那么5.22對(duì)應(yīng)52ns, 6.17對(duì)應(yīng)62ns。在編譯過(guò)程中, timescale指令影響這一編譯器指令后面所有模塊中的時(shí)延值,直至遇到另一個(gè)timescale指令或resetall指令。當(dāng)一個(gè)設(shè)計(jì)中的多個(gè)模塊帶有自身的 timescale編譯指令時(shí)將發(fā)生什么?在這種情況下,模擬器總是定位在所有模塊的最小時(shí)延精度上,并且所有時(shí)延都相應(yīng)地?fù)Q算為最小

11、時(shí)延精度。例如,timescale 1ns/ 100psmodule 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 = 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

12、 t O , Pu t A , Pu t B);endmodule在這個(gè)例子中,每個(gè)模塊都有自身的 timescale編譯器指令。timescale編譯器指令第一次應(yīng)用于時(shí)延。因此,在第一個(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中的延遲)將換算成精度為 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。更重要

13、的是,仿真使用100 ps為時(shí)間精度。如果仿真模塊 AndFunc,由于模塊TB不是模塊AddFunc的子模塊,模塊 TB中的timescale程序指令將不再有效。18Verilog HDL 硬件描述語(yǔ)言3.5.7 unconnected_drive和nounconnected_drive在模塊實(shí)例化中,出現(xiàn)在這兩個(gè)編譯器指令間的任何未連接的輸入端口或者為正偏電路狀態(tài)或者為反偏電路狀態(tài)。unconnected_drive pull1. . ./*在這兩個(gè)程序指令間的所有未連接的輸入端口為正偏電路狀態(tài)(連接到nounconnected_drive) */unconnected_drive pul

14、l0. . ./*在這兩個(gè)程序指令間的所有未連接的輸入端口為反偏電路狀態(tài)(連接到低電平) */nounconnected_drive3.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或“真”x:未知z:注意這四種值的解釋都內(nèi)置于語(yǔ)言中。如一個(gè)為 z的

15、值總是意味著抗,一個(gè)為 0的值通常是指邏輯0。在門(mén)的輸入或一個(gè)表達(dá)式中的為“ z”的值通常解釋成“ x”。此外, x值和z值都是不分大小寫(xiě)的,也就是說(shuō),值0 x1z與值0X1Z相同。Verilog HDL中的常量是由以上這四類(lèi)基本值組成的。Verilog HDL中有三類(lèi)常量:整型實(shí)數(shù)型字符串型下劃線(xiàn)符號(hào)( _)可以隨意用在整數(shù)或?qū)崝?shù)中,它們就數(shù)量本身沒(méi)有意義。它們能用來(lái)提高易讀性;唯一的限制是下劃線(xiàn)符號(hào)不能用作為首字符。3.6.1 整型數(shù)整型數(shù)可以按如下兩種方式書(shū)寫(xiě):第3章 Verilog 語(yǔ)言要素19簡(jiǎn)單的十進(jìn)制數(shù)格式基數(shù)格式1. 簡(jiǎn)單的十進(jìn)制格式這種形式的整數(shù)定義為帶有一個(gè)可選的 “+”(

16、一元)或 “”(一元)操作符的數(shù)字序列。下面是這種簡(jiǎn)易十進(jìn)制形式整數(shù)的例子。3215十進(jìn)制數(shù)32 十進(jìn)制數(shù) 15這種形式的整數(shù)值代表一個(gè)有符號(hào)的數(shù)。負(fù)數(shù)可使用兩種補(bǔ)碼形式表示。因此 32在5位的二進(jìn)制形式中為10000,在6位二進(jìn)制形式中為110001;15在5位二進(jìn)制形式中為10001,在6位二進(jìn)制形式中為110001。2. 基數(shù)表示法這種形式的整數(shù)格式為:s i z e ba s e v a l u esize 定義以位計(jì)的常量的位長(zhǎng); base為o或O(表示八進(jìn)制),b或B(表示二進(jìn)制),d或D(表示十進(jìn)制),h或H(表示進(jìn)制)之一; value是基于base的值的數(shù)字序列。值 x和z以

17、及十六進(jìn)制中的a到f不區(qū)分大小寫(xiě)。下面是一些具體實(shí)例:5O374D24B1x_017Hx4hZ4d-4位5 八進(jìn)制數(shù) 位4 十進(jìn)制數(shù) 位4 二進(jìn)制數(shù)7位x(擴(kuò)展的x), 即位4 z(擴(kuò)展的z) , 即zzzz:數(shù)值不能為負(fù)x8h 2A在位長(zhǎng)和字符之間,以及基數(shù)和數(shù)值之間允許出現(xiàn)空格: 和基數(shù)b之間不允許出現(xiàn)空格:位長(zhǎng)不能夠?yàn)楸磉_(dá)式3b001(2+3)b10注意, x(或z)在制中代表1位x(或z)。進(jìn)制值中代表 4位x(或z),在八進(jìn)制中代表3位x(或z),在二進(jìn)基數(shù)格式計(jì)數(shù)形式的數(shù)通常為無(wú)符號(hào)數(shù)。這種形式的整型數(shù)的長(zhǎng)度定義是可選的。如果沒(méi)有定義一個(gè)整數(shù)型的長(zhǎng)度,數(shù)的長(zhǎng)度為相應(yīng)值中定義的位數(shù)。

18、下面是兩個(gè)例子:o721hAF位9 八進(jìn)制數(shù)8位進(jìn)制數(shù)如果定義的長(zhǎng)度比為常量指定的長(zhǎng)度長(zhǎng),通常在左邊填 0補(bǔ)位。但是如果數(shù)最左邊一位為x或z,就相應(yīng)地用x或z在左邊補(bǔ)位。例如:10b1010bx0 x1左邊添0占位, 0000000010左邊添x占位,x0 x1如果長(zhǎng)度定義得更小,那么最左邊的位相應(yīng)地被截?cái)?。例如?b1001_0011與3b011 相等5H0與5H1F 相等?字符在數(shù)中可以代替值z(mì)在值z(mì)被解釋為不分大小寫(xiě)的情況下提高可讀性(參見(jiàn)第8章)。3.6.2 實(shí)數(shù)實(shí)數(shù)可以用下列兩種形式定義:20Verilog HDL 硬件描述語(yǔ)言十進(jìn)制 2.0 5.678 11572.12 0.12.

19、科學(xué)23_5.1e23.6E25E4;例如:小數(shù)點(diǎn)兩側(cè)必須有1位數(shù)字; 這種形式的實(shí)數(shù)舉例如下:其值為23510.0; 忽略下劃線(xiàn)360.0 e(與E相同) 0.0005Verilog語(yǔ)言定義了實(shí)數(shù)如何隱式地轉(zhuǎn)換為整數(shù)。實(shí)數(shù)通過(guò)四舍五入被轉(zhuǎn)換為最相近的整數(shù)。42.446, 42.4592.5 , 92.69915.6226.22轉(zhuǎn)換為整數(shù)42 轉(zhuǎn)換為整數(shù)93 轉(zhuǎn)換為整數(shù) 16轉(zhuǎn)換為整數(shù) 263.6.3 字符串字符串是雙引號(hào)內(nèi)的字符序列。字符串不能分成多行書(shū)寫(xiě)。例如 :ERNAL ERRORREACHEDHERE用8位ASCII值表示的字符可看作是無(wú)符號(hào)整數(shù)。因此字符串是 8位ASCII值的序列

20、。為存儲(chǔ)字符串“ERNAL ERROR”,變量需要8*14位。reg 1 : 8*14 M e s s a g e;. . .M e s s a g e = ERNAL ERROR反斜線(xiàn) ( ) 用于對(duì)確定的特殊字符轉(zhuǎn)義。nt206換行符制表符字符本身字符八進(jìn)制數(shù)206對(duì)應(yīng)的字符3.7數(shù)據(jù)類(lèi)型Verilog HDL 有兩大類(lèi)數(shù)據(jù)類(lèi)型。1) 線(xiàn)網(wǎng)類(lèi)型。net type 表示Verilog結(jié)構(gòu)化元件間的物理連線(xiàn)。它的值由驅(qū)動(dòng)元件的值決定,例如連續(xù)賦值或門(mén)的輸出。如果沒(méi)有驅(qū)動(dòng)元件連接到線(xiàn)網(wǎng),線(xiàn)網(wǎng)的缺省值為 z。2) 寄存器類(lèi)型。register type表示一個(gè)抽象的數(shù)據(jù)單元,它只能在 always

21、語(yǔ)句和initial語(yǔ)句中被賦值,并且它的值從一個(gè)賦值到另一個(gè)賦值被保存下來(lái)。寄存器類(lèi)型的變量具有 x的缺省值。3.7.1 線(xiàn)網(wǎng)類(lèi)型線(xiàn)網(wǎng)數(shù)據(jù)類(lèi)型包含下述不同種類(lèi)的線(xiàn)網(wǎng)子類(lèi)型。第3章 Verilog 語(yǔ)言要素21wiretriwortriorwandtriandtriregtri1tri0supply0supply1簡(jiǎn)單的線(xiàn)網(wǎng)類(lèi)型說(shuō)明語(yǔ)法為:n e t _ k i n d m s b: l s b n e t 1 , n e t 2, . . . , n e t N;net_kind 是上述線(xiàn)網(wǎng)類(lèi)型的一種。 msb和lsb 是用于定義線(xiàn)網(wǎng)范圍的常量表達(dá)式;范圍定義是可選的;如果沒(méi)有定義范圍,缺省

22、的線(xiàn)網(wǎng)類(lèi)型為 1位。下面是線(xiàn)網(wǎng)類(lèi)型說(shuō)明實(shí)例。wire Rd y , S t a r t;/2個(gè)1位的連線(xiàn)。wand 2:0 A d d r; / A d d r是3位線(xiàn)與。當(dāng)一個(gè)線(xiàn)網(wǎng)有多個(gè)驅(qū)動(dòng)器時(shí),即對(duì)一個(gè)線(xiàn)網(wǎng)有多個(gè)賦值時(shí),不同的線(xiàn)網(wǎng)產(chǎn)生不同的行為。例如,wor R d e;.assign R d e = B l t & W y l ;.assign Rde = K b l | K i p;本例中,Rde有兩個(gè)驅(qū)動(dòng)源,分別來(lái)自于兩個(gè)連續(xù)賦值語(yǔ)句。由于它是線(xiàn)或線(xiàn)網(wǎng), Rde的有效值由使用驅(qū)動(dòng)源的值(右邊表達(dá)式的值)的線(xiàn)或(wor)表(參見(jiàn)后面線(xiàn)或網(wǎng)的有關(guān)章節(jié))決定。1. wire和tri線(xiàn)網(wǎng)用于

23、連接單元的連線(xiàn)是最常見(jiàn)的線(xiàn)網(wǎng)類(lèi)型。連線(xiàn)與三態(tài)線(xiàn) (tri)網(wǎng)語(yǔ)法和語(yǔ)義一致;三態(tài)線(xiàn)可以用于描述多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)同一根線(xiàn)的線(xiàn)網(wǎng)類(lèi)型;并且沒(méi)有其他特殊的意義。wire R e s e t;wire 3:2 C l a , P l a , S l a;tri M S B1 : L S B +1 A r t ;如果多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)線(xiàn)(或三態(tài)線(xiàn)網(wǎng)),線(xiàn)網(wǎng)的有效值由下表決定。wire ( 或 tri)01xz00 xx01x1x1xxz01xz下面是一個(gè)具體實(shí)例:assign C l a = P l a & S l a;.assign Cl a = P l a S l a;在這個(gè)實(shí)例中, Cla有兩個(gè)驅(qū)動(dòng)源。

24、兩個(gè)驅(qū)動(dòng)源的值(右側(cè)表達(dá)式的值)用于在上表中索引,22Verilog HDL 硬件描述語(yǔ)言以便決定Cla的有效值。由于 Cla是一個(gè)向量,每位的計(jì)算是相關(guān)的。例如,如果第一個(gè)右側(cè)表達(dá)式的值為01x, 并且第二個(gè)右測(cè)表達(dá)式的值為 11z,那么Cla 的有效值是x1x (第一位0和1在表中索引到x, 第二位1和1在表中索引到1,第三位x 和z在表中索引到x)。2. wor和trior線(xiàn)網(wǎng)線(xiàn)或指如果某個(gè)驅(qū)動(dòng)源為 1,那么線(xiàn)網(wǎng)的值也為 1。線(xiàn)或和三態(tài)線(xiàn)或(trior)在語(yǔ)法和功能上是一致的。wor M S B:L S B A r t ;trior MAX1: M I N1 Rd x , Sd x ,

25、Bd x;如果多個(gè)驅(qū)動(dòng)源驅(qū)動(dòng)這類(lèi)網(wǎng),網(wǎng)的有效值由下表決定。wor ( 或 trior)01xz001x011111xx1xxz01xz3. wand和triand線(xiàn)網(wǎng)線(xiàn)與(wand)網(wǎng)指如果某個(gè)驅(qū)動(dòng)源為 0,那么線(xiàn)網(wǎng)的值為 0。線(xiàn)與和三態(tài)線(xiàn)與(triand)網(wǎng)在語(yǔ)法和功能上是一致的。wand -7 : 0 D b u s;triand Re s e t , C l k;如果這類(lèi)線(xiàn)網(wǎng)存在多個(gè)驅(qū)動(dòng)源,線(xiàn)網(wǎng)的有效值由下表決定。wand ( 或 triand)01xz00000101x1x0z01xztrireg線(xiàn)網(wǎng)此線(xiàn)網(wǎng) 數(shù)值(類(lèi)似于寄存器),并且用于電容節(jié)點(diǎn)的建模。當(dāng)三態(tài)寄存器 (trireg)的

26、所有驅(qū)動(dòng)源都處于 態(tài),也就是說(shuō),值為 z時(shí),三態(tài)寄存器線(xiàn)網(wǎng)保存作用 網(wǎng)上的最后一個(gè)值。此外,三態(tài)寄存器線(xiàn)網(wǎng)的缺省初始值為 x。trireg 1:8 Dbu s , Abu s;tri0和tri1線(xiàn)網(wǎng)這類(lèi)線(xiàn)網(wǎng)可用于線(xiàn)邏輯的建模,即線(xiàn)網(wǎng)有多于一個(gè)驅(qū)動(dòng)源。 tri0(tri1)線(xiàn)網(wǎng)的特征是,若無(wú)驅(qū)動(dòng)源驅(qū)動(dòng),它的值為0(tri1的值為1)。tri0 3:3 G n d B u s;tri1 0:5 O t Bu s , I t Bu s;下表顯示在多個(gè)驅(qū)動(dòng)源情況下tri0或tri1網(wǎng)的有效值。tri0 (tri1)01xz00 xx01x1x1xxz01x0(1)第3章 Verilog 語(yǔ)言要素236

27、. supply0和supply1線(xiàn)網(wǎng)supply0用于對(duì)“地”建模,即低電平 0;supply1網(wǎng)用于對(duì)電源建模,即supply0 Gnd, ClkGnd;supply1 2:0 Vcc;1;例如:3.7.2 未說(shuō)明的線(xiàn)網(wǎng)在Verilog HDL中,有可能不必位線(xiàn)網(wǎng)。某種線(xiàn)網(wǎng)類(lèi)型。在這樣的情況下,缺省線(xiàn)網(wǎng)類(lèi)型為 1可以使用default_nettype編譯器指令改變這一隱式線(xiàn)網(wǎng)說(shuō)明方式。使用方法如下:default_nettype n e t _ k i n d例如,帶有下列編譯器指令:default_nettype wand任何未被說(shuō)明的網(wǎng)缺省為1位線(xiàn)與網(wǎng)。3.7.3 向量和標(biāo)量線(xiàn)網(wǎng)在定義

28、向量線(xiàn)網(wǎng)時(shí)可選用scalared 或vectored。如果一個(gè)線(xiàn)網(wǎng)定義時(shí)使用了vectored, 那么就不允許位選擇和部分選擇該線(xiàn)網(wǎng)。換句話(huà)說(shuō),必須對(duì)線(xiàn)網(wǎng)整體賦值(位選擇和部分選擇在下一章中講解)。例如:wire vectored3:1 G r b;/不允許位選擇G r b2和部分選擇G r b 3:2wor scalared 4:0 B e s t ;/與wor 4:0 B e s t相同,允許位選擇B e s t 2和部分選擇B e s t 3:1。如果沒(méi)有定義,缺省值為標(biāo)量。3.7.4 寄存器類(lèi)型有5種不同的寄存器類(lèi)型。regegertimerealrealtime1. reg寄存器類(lèi)型

29、寄存器數(shù)據(jù)類(lèi)型reg是最常見(jiàn)的數(shù)據(jù)類(lèi)型。reg類(lèi)型使用保留字reg加以說(shuō)明,形式如下:reg m s b: l s b r e g1 , r e g 2, . . . r e g N;msb和lsb 定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的;如果沒(méi)有定義范圍,缺省值為1位寄存器。例如:reg 3:0 S a t ;reg C n t ;reg 1:32 K i s p ,/S/a t 為4 位寄存器。/位寄存器。L i s p;P i s p ,寄存器可以取任意長(zhǎng)度。寄存器中的值通常被解釋為無(wú)符號(hào)數(shù) , 例如:reg 1:4 C o m b;24Verilog HDL 硬件描述語(yǔ)言.

30、C o m b = 2; /C o m b 的值為14(1110),1110是2的補(bǔ)碼。C o m b = 5;/C o m b的值為15(0101)。2.器器是一個(gè)寄存器數(shù)組。器使用如下方式說(shuō)明:reg m s b: 1 s b m e m o r y 1 u p p e r 1: l o w e r 1,m e m o r y 2 u p p e r 2: l o w e r 2,. ;例如:reg 0:3 M y M e m 0:63/M y M e m為64個(gè)4位寄存器的數(shù)組。reg B o g 1:5/B o g為5個(gè)1位寄存器的數(shù)組。MyMem和Bog都是據(jù)類(lèi)型沒(méi)有相應(yīng)的器。數(shù)組的

31、維數(shù)不能大于 2。注意器類(lèi)型。器屬于寄存器數(shù)組類(lèi)型。線(xiàn)網(wǎng)數(shù)單個(gè)寄存器說(shuō)明既能夠用于說(shuō)明寄存器類(lèi)型,也可以用于說(shuō)明器類(lèi)型。parameter ADDR _ S I Z E= 16, WORD _ S I Z E= 8;reg 1: WORD _ S I Z E R a m P a r ADDR _ S I Z E1 : 0, D a t a R e g;RamPar是器,是16個(gè)8位寄存器數(shù)組,而DataReg是8位寄存器。在賦值語(yǔ)句中需要注意如下區(qū)別:器賦值不能在一條賦值語(yǔ)句中完成,但是寄存器可以。因此在器被賦值時(shí),需要定義一個(gè)索引。下例說(shuō)明它們之間的不同。reg 1:5 D i g; / D

32、 i g為5位寄存器。.D i g = 5b11011;上述賦值都是正確的, 但下述賦值不正確:reg BO g1:5; /B o g為5個(gè)1位寄存器的器。.B o g = 5b11011;有一種器賦值的方法是分別對(duì)reg 0:3 X r o m 1:4.器中的每個(gè)字賦值。例如:X r o m1 X r o m2 X r o m3 X r o m4=4hA;4h8;4hF;4h2;為器賦值的另法是使用系統(tǒng)任務(wù):1) $readmemb (加載二進(jìn)制值)2) $readmemb (加載進(jìn)制值)這些系統(tǒng)任務(wù)從指定的文本文件中數(shù)據(jù)并加載到器。文本文件必須包含相應(yīng)的二進(jìn)制或者進(jìn)制數(shù)。例如:reg 1:

33、4 RomB 7:1 ;$ readmemb (ram.patt, RomB);Romb是器。文件“ ram.patt”必須包含二進(jìn)制值。文件也可以包含空間和注釋。下面是文件中可能內(nèi)容的實(shí)例。1101第3章 Verilog 語(yǔ)言要素25111010000111000010010011系統(tǒng)任務(wù)$readmemb促使從索引7即Romb最左邊的字索引,開(kāi)始器的一部分,值域可以在$readmemb方法中顯式定義。例如:$readmemb (ram.patt, R o m B, 5, 3);在這種情況下只有 Romb5,Romb4和Romb3這些字從文件頭開(kāi)始被1101、1100和1000。文件可以包含

34、顯式的地址形式。h ex _add r e ss v a l u e如下實(shí)例:值。如果只加載。被的值為521100111010在這種情況下,值被讀入當(dāng)只定義開(kāi)始值時(shí),連續(xù)器指定的地址。直至到達(dá)器右端索引邊界。例如:$readmemb (rom.patt,R o m B, 6);/從地址6開(kāi)始,并且持續(xù)到1。$readmemb ( rom.patt,R o m B, 6, 4);/從地址6讀到地址4。3.eger寄存器類(lèi)型整數(shù)寄存器包含整數(shù)值。整數(shù)寄存器可以作為普通寄存器使建模。使用整數(shù)型說(shuō)明形式如下:型應(yīng)用為次行為egere g e r 1 ,e g e r ,2.e r g e r N m

35、s b:1 s b ;msb和lsb是定義整數(shù)數(shù)組界限的常量表達(dá)式,數(shù)組界限的定義是可選的。注意容許無(wú)位界限的情況。一個(gè)整數(shù)最少容納 32位。但是具體實(shí)現(xiàn)可提供例。eger A, B, C; / 三個(gè)整數(shù)型寄存器。eger Hi s t 3:6; /一組四個(gè)寄存器。的位。下面是整數(shù)說(shuō)明的實(shí)有符號(hào)數(shù),并且算術(shù)操作符提供 2的補(bǔ)碼運(yùn)算結(jié)果。例如,對(duì)于上面的整數(shù) B的說(shuō)明, B6和B20:10是一個(gè)整數(shù)型寄存器可整數(shù)不能作為位向量的。一種截取位值的方法是將整數(shù)賦值給一般的 reg類(lèi)型變量,然后從中選取相應(yīng)的位,如下所示:reg 31:0 B r e g;eger B;./B6和B.20:10是不允許

36、的。B r e g = B;/*現(xiàn)在,B r e g6和B r e g20:10是允許的,并且從整數(shù)B獲取相應(yīng)的位值。*/上例說(shuō)明了如何通過(guò)簡(jiǎn)單的賦值將整數(shù)轉(zhuǎn)換為位向量。類(lèi)型轉(zhuǎn)換自動(dòng)完成,不必使用特定的函數(shù)。從位向量到整數(shù)的轉(zhuǎn)換也可以通過(guò)賦值完成。例如 :26Verilog HDL 硬件描述語(yǔ)言eger J ;reg 3:0 B c q;J = 6;B c q = J ;/J/的值為32b0000.00110。/B c q的值為4b0110。B c q = 4b0101.J= B c q;/J 的值為32b0000.00101。J= 6;/J/ 的值為 32b1111.11010。/B c q

37、的值為4b1010。B c q = J ;注意賦值總是從最右端的位向最左邊的位進(jìn)行;任何多余的位被截?cái)?。如果你能夠回憶起整?shù)是作為2的補(bǔ)碼位向量表示的,就很容易理解類(lèi)型轉(zhuǎn)換。4. time類(lèi)型time類(lèi)型的寄存器用于和處理時(shí)間。 time類(lèi)型的寄存器使用下述方式加以說(shuō)明。time ti me _ i d1 , ti me _ i d2, . . ., t i m e _ i d N m s b:1 s b;msb和lsb是表明范圍界限的常量表達(dá)式。如果未定義界限,每個(gè)標(biāo)識(shí)符一個(gè)至少64位的時(shí)間值。時(shí)間類(lèi)型的寄存器只無(wú)符號(hào)數(shù)。例如 :time E v e n t s 0:31; /時(shí)間值數(shù)組。time C u r r T i m e;5. real和realtime類(lèi)型/C u r r T i m e一個(gè)時(shí)間值。實(shí)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論