VerilogHDL基本語法ppt課件_第1頁
VerilogHDL基本語法ppt課件_第2頁
VerilogHDL基本語法ppt課件_第3頁
VerilogHDL基本語法ppt課件_第4頁
VerilogHDL基本語法ppt課件_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二部分第二部分 Verilog HDL基本語法基本語法2.1 Verilog HDL2.1 Verilog HDL程序模塊結(jié)構(gòu)程序模塊結(jié)構(gòu)設(shè)設(shè)計(jì)計(jì)模模塊塊模塊端口定義模塊端口定義I/OI/O說明說明功能描述功能描述模塊內(nèi)容模塊內(nèi)容信號類型說明信號類型說明12.1.1 模塊端口定義模塊端口定義模塊端口定義模塊端口定義用來聲明設(shè)計(jì)電路模塊的輸入輸出用來聲明設(shè)計(jì)電路模塊的輸入輸出端口。端口定義端口。端口定義格式格式如下如下module 模塊名(端口模塊名(端口1,端口,端口2,端口,端口3,);); 在端口定義的在端口定義的圓括弧圓括弧中,是設(shè)計(jì)電路模塊與外界中,是設(shè)計(jì)電路模塊與外界聯(lián)系的聯(lián)系的全

2、部輸入輸出端口信號或引腳全部輸入輸出端口信號或引腳,它是設(shè)計(jì)實(shí)體,它是設(shè)計(jì)實(shí)體對外的一個(gè)通信界面,是外界可以看到的部分(不包對外的一個(gè)通信界面,是外界可以看到的部分(不包含電源和接地端),多個(gè)端口名之間用含電源和接地端),多個(gè)端口名之間用“,”分隔。分隔。例如,例如,module adder(sum,cont,ina,inb,cin););22.1.2 模塊內(nèi)容模塊內(nèi)容模塊內(nèi)容模塊內(nèi)容包括包括I/O說明、信號類型聲明和功能描述。說明、信號類型聲明和功能描述。1. 模塊的模塊的I/O說明說明模塊的模塊的I/O說明說明用來聲明模塊端口定義中各端口數(shù)據(jù)流動(dòng)方向用來聲明模塊端口定義中各端口數(shù)據(jù)流動(dòng)方向

3、包括輸入(包括輸入(input)、輸出()、輸出(output)和雙向()和雙向(inout)。)。I/O說說明格式如下明格式如下input 端口端口1,端口,端口2,端口,端口3,;output 端口端口1,端口,端口2,端口,端口3,;例如例如 input ina,inb,cin;output sum,cont;32. 信號類型聲明信號類型聲明 信號類型聲明信號類型聲明用來說明設(shè)計(jì)電路的功能描述中,所用的用來說明設(shè)計(jì)電路的功能描述中,所用的信號的數(shù)據(jù)類型以及函數(shù)聲明。信號的數(shù)據(jù)類型以及函數(shù)聲明。 信號的數(shù)據(jù)類型主要有信號的數(shù)據(jù)類型主要有連線(連線(wire)、寄存器(寄存器(reg)、整型

4、(整型(integer)、實(shí)型(實(shí)型(real)和和時(shí)間(時(shí)間(time)等類型。等類型。 43. 功能描述功能描述 功能描述功能描述是是Verilog HDL程序設(shè)計(jì)中最主要的部分,用來程序設(shè)計(jì)中最主要的部分,用來描述設(shè)計(jì)模塊的內(nèi)部結(jié)構(gòu)和模塊端口間的邏輯關(guān)系,在電路描述設(shè)計(jì)模塊的內(nèi)部結(jié)構(gòu)和模塊端口間的邏輯關(guān)系,在電路上相當(dāng)于上相當(dāng)于器件的內(nèi)部電路結(jié)構(gòu)器件的內(nèi)部電路結(jié)構(gòu)。 功能描述可以用功能描述可以用assign語句語句、元件例化(元件例化(instantiate)、always塊語句塊語句、initial塊語句塊語句等方法來實(shí)現(xiàn),通常把確定這些等方法來實(shí)現(xiàn),通常把確定這些設(shè)計(jì)模塊描述的方法稱

5、為建模。設(shè)計(jì)模塊描述的方法稱為建模。 5(1)用)用assign語句建模語句建模 用用assign語句建模的方法很簡單,只需要在語句建模的方法很簡單,只需要在“assign”后面再加一個(gè)表達(dá)式即可。后面再加一個(gè)表達(dá)式即可。assign語句一般適合對語句一般適合對組合邏輯組合邏輯進(jìn)行賦值,稱為連續(xù)進(jìn)行賦值,稱為連續(xù)賦值方式。賦值方式?!纠?.1】1位全加器的設(shè)計(jì)。位全加器的設(shè)計(jì)。 inainbcinadder1sumcout6Verilog HDL源程序如下源程序如下module adder1(sum,cout,ina,inb,cin);); /模塊端口定義模塊端口定義input ina,in

6、b,cin;output sum,cout;/I/O聲明聲明assign cout,sum = ina+inb+cin; /功能描述語句功能描述語句endmodule /endmodule后不加分號后不加分號 默認(rèn)的數(shù)據(jù)類型為默認(rèn)的數(shù)據(jù)類型為wire(連線)型,(連線)型, 為拼接為拼接運(yùn)算符,是將運(yùn)算符,是將cout、sum這樣兩個(gè)這樣兩個(gè)1位操作數(shù)拼接位操作數(shù)拼接為一個(gè)為一個(gè)2位操作數(shù)。位操作數(shù)。7(2)用元件例化()用元件例化(instantiate)方式建模)方式建模 元件例化方式建模是利用元件例化方式建模是利用Verilog HDL提供的元提供的元件庫實(shí)現(xiàn)的。件庫實(shí)現(xiàn)的。例如,用與門

7、例化元件定義一個(gè)例如,用與門例化元件定義一個(gè)3輸入端與門可以輸入端與門可以寫為寫為andmyand3(y,a,b,c);8(3)用)用always塊語句建模塊語句建模always塊語句可以產(chǎn)生各種邏輯,常用于塊語句可以產(chǎn)生各種邏輯,常用于時(shí)序邏輯時(shí)序邏輯的功能描述。一個(gè)程序設(shè)計(jì)模塊中,可以包含一個(gè)的功能描述。一個(gè)程序設(shè)計(jì)模塊中,可以包含一個(gè)或多個(gè)或多個(gè)always語句。語句。程序運(yùn)行中,在某種條件滿足程序運(yùn)行中,在某種條件滿足時(shí),就重復(fù)執(zhí)行一遍時(shí),就重復(fù)執(zhí)行一遍always結(jié)構(gòu)中的語句結(jié)構(gòu)中的語句?!纠?.2】8位二進(jìn)制加法計(jì)數(shù)器的設(shè)計(jì)。位二進(jìn)制加法計(jì)數(shù)器的設(shè)計(jì)。 9module cnt8(

8、out,cout,data,load,cin,clk,clr); input 7:0 data;input load, cin, clk, clr; output 7:0 out;output cout; reg 7:0 out; /寄存器型參量,具有寄存功能寄存器型參量,具有寄存功能10always (posedge clk) /時(shí)鐘上升沿,每次上升沿,時(shí)鐘上升沿,每次上升沿,執(zhí)行執(zhí)行always語句語句 begin if (clr) out =8b0; else if (load) out = data; else out = out+8b1; endassign cout = &

9、out & cin; /”&out”與縮減運(yùn)算式與縮減運(yùn)算式endmodule11(4)用)用initial塊語句建模塊語句建模initial塊語句與塊語句與always語句類似,不過在程序中它語句類似,不過在程序中它只執(zhí)行只執(zhí)行1次次就結(jié)束了。就結(jié)束了。 12Verilog HDL程序設(shè)計(jì)模塊的基本結(jié)構(gòu)小結(jié)程序設(shè)計(jì)模塊的基本結(jié)構(gòu)小結(jié): Verilog HDL程序是由程序是由模塊模塊構(gòu)成的。每個(gè)模塊的構(gòu)成的。每個(gè)模塊的內(nèi)容都是嵌在內(nèi)容都是嵌在module和和endmodule兩語句之間,每兩語句之間,每個(gè)模塊實(shí)現(xiàn)特定的功能,模塊是可以進(jìn)行個(gè)模塊實(shí)現(xiàn)特定的功能,模塊是可以進(jìn)行層次

10、嵌套層次嵌套的。的。 每個(gè)模塊首先要進(jìn)行每個(gè)模塊首先要進(jìn)行端口定義端口定義,并說明輸入,并說明輸入(input)、輸出()、輸出(output)或雙向()或雙向(inouts),然),然后對模塊的后對模塊的功能功能進(jìn)行邏輯進(jìn)行邏輯描述描述。13 Verilog HDL程序的程序的書寫格式自由書寫格式自由,一行可以一,一行可以一條或多條語句,一條語句也可以分為多行寫。條或多條語句,一條語句也可以分為多行寫。 除了除了endmodule語句外,每條語句后必須要有語句外,每條語句后必須要有分號分號“;”。 可以用可以用/*/或或/對對Verilog HDL程序的任程序的任何部分作何部分作注釋注釋。

11、一個(gè)完整的源程序都應(yīng)當(dāng)加上需要的注釋,一個(gè)完整的源程序都應(yīng)當(dāng)加上需要的注釋,以加強(qiáng)程序的可讀性。以加強(qiáng)程序的可讀性。 142.2 Verilog HDL的詞法的詞法2.2.1 空白符和注釋空白符和注釋 Verilog HDL的空白符包括的空白符包括空格空格、tab符號符號、換行換行和和換頁換頁。 空白符如果不是出現(xiàn)在字符串中,編譯源程序空白符如果不是出現(xiàn)在字符串中,編譯源程序時(shí)將被忽略。時(shí)將被忽略。 注釋分為注釋分為行注釋行注釋和和塊注釋塊注釋兩種方式。行注釋用兩種方式。行注釋用符號符號/(兩個(gè)斜杠)開始,注釋到本行結(jié)束。塊注(兩個(gè)斜杠)開始,注釋到本行結(jié)束。塊注釋用釋用/*開始,用開始,用*

12、/結(jié)束結(jié)束。塊注釋可以跨越多行,但。塊注釋可以跨越多行,但它們不能嵌套。它們不能嵌套。 152.2.2 常數(shù)常數(shù) Verilog HDL的常數(shù)包括的常數(shù)包括數(shù)字?jǐn)?shù)字、未知未知X和和高阻高阻Z三三種。數(shù)字可以用二進(jìn)制、十進(jìn)制、八進(jìn)制和十六進(jìn)制種。數(shù)字可以用二進(jìn)制、十進(jìn)制、八進(jìn)制和十六進(jìn)制等等4種不同數(shù)制來表示,完整的種不同數(shù)制來表示,完整的數(shù)字格式數(shù)字格式為為 其中,位寬表示數(shù)字對應(yīng)的二進(jìn)制數(shù)的位數(shù)寬度;其中,位寬表示數(shù)字對應(yīng)的二進(jìn)制數(shù)的位數(shù)寬度;進(jìn)制符號包括進(jìn)制符號包括b或或B(表示二進(jìn)制數(shù)),(表示二進(jìn)制數(shù)),d或或D(表示(表示十進(jìn)制數(shù)),十進(jìn)制數(shù)),h或或H(表示十六進(jìn)制數(shù)),(表示十六

13、進(jìn)制數(shù)),o或或O(表(表示八進(jìn)制數(shù))。示八進(jìn)制數(shù))。16例如例如8b10110001 /表示位寬為表示位寬為8位的二進(jìn)制數(shù)位的二進(jìn)制數(shù)8hf5 /表示位寬為表示位寬為8位的十六進(jìn)制數(shù)位的十六進(jìn)制數(shù)十進(jìn)制數(shù)的位寬和進(jìn)制符號可以缺省十進(jìn)制數(shù)的位寬和進(jìn)制符號可以缺省,例如,例如125/表示十進(jìn)制數(shù)表示十進(jìn)制數(shù)125X和和Z表示位數(shù)的特殊性表示位數(shù)的特殊性:8b1111xxxx/等價(jià)等價(jià)8hfx8b1101zzzz/等價(jià)等價(jià)8hdz172.2.3 字符串字符串字符串是用字符串是用雙引號雙引號括起來的括起來的可打印字符序列可打印字符序列,它必須,它必須包含在包含在同一行同一行中。中。例如,例如,”AB

14、C”,”A BOY.”,”A”,”1234”都是字符串。都是字符串。182.2.4 標(biāo)識符標(biāo)識符 標(biāo)識符是用戶編程時(shí)為常量、變量、模塊、寄存標(biāo)識符是用戶編程時(shí)為常量、變量、模塊、寄存器、端口、連線、示例和器、端口、連線、示例和begin-end塊等元素定義的名塊等元素定義的名稱。標(biāo)識符可以是字母、數(shù)字和下劃線稱。標(biāo)識符可以是字母、數(shù)字和下劃線“_”等符號組等符號組成的任意序列。定義標(biāo)識符時(shí)應(yīng)遵循如下成的任意序列。定義標(biāo)識符時(shí)應(yīng)遵循如下規(guī)則:規(guī)則: 首字符不能是數(shù)字。首字符不能是數(shù)字。 字符數(shù)不能多于字符數(shù)不能多于1024個(gè)。個(gè)。 大小寫字母是不同的。大小寫字母是不同的。 不要與關(guān)鍵字同名。不要

15、與關(guān)鍵字同名。 192.2.5 關(guān)鍵字關(guān)鍵字 關(guān)鍵字是關(guān)鍵字是Verilog HDL預(yù)先定義的單詞,它們預(yù)先定義的單詞,它們在程序中有不同的使用目的。所有關(guān)鍵字都用小寫在程序中有不同的使用目的。所有關(guān)鍵字都用小寫例如,例如, module和和endmodule來指出源程序模塊的開始來指出源程序模塊的開始和結(jié)束;用和結(jié)束;用assign來描述一個(gè)邏輯表達(dá)式等。來描述一個(gè)邏輯表達(dá)式等。 Verilog HDL的關(guān)鍵字有的關(guān)鍵字有97個(gè)。個(gè)。 202.2.6 操作符操作符 操作符也稱為運(yùn)算符,是操作符也稱為運(yùn)算符,是Verilog HDL預(yù)定義的預(yù)定義的函數(shù)名字,這些函數(shù)對被操作的對象(即操作數(shù))函

16、數(shù)名字,這些函數(shù)對被操作的對象(即操作數(shù))進(jìn)行規(guī)定的運(yùn)算,得到一個(gè)結(jié)果。進(jìn)行規(guī)定的運(yùn)算,得到一個(gè)結(jié)果。 操作符通常由操作符通常由13個(gè)字符組成,例如,個(gè)字符組成,例如,“+”表表示加操作,示加操作,“= =”(兩個(gè)(兩個(gè)=字符)表示邏輯等操作,字符)表示邏輯等操作,“= = =”(3個(gè)個(gè)=字符)表示全等操作。字符)表示全等操作。 有些操作符的操作數(shù)只有有些操作符的操作數(shù)只有1個(gè),稱為個(gè),稱為單目單目操作;操作;有些操作符的操作數(shù)有有些操作符的操作數(shù)有2個(gè),稱為個(gè),稱為雙目雙目操作;有些操操作;有些操作符的操作數(shù)有作符的操作數(shù)有3個(gè),稱為個(gè),稱為三目三目操作。操作。 211. 算術(shù)操作符(算術(shù)操

17、作符(Arithmetic operators)常用的算術(shù)操作符:常用的算術(shù)操作符: +(加)、(加)、-(減)、(減)、*(乘)、(乘)、/(除)、(除)、%(求余)。(求余)。其中其中%是求余操作符是求余操作符, 在兩個(gè)整數(shù)相除的基礎(chǔ)上,取在兩個(gè)整數(shù)相除的基礎(chǔ)上,取出其余數(shù)。例如,出其余數(shù)。例如,5 % 6的值為的值為5;13 % 5的值是的值是3。222. 邏輯操作符(邏輯操作符(Logical operators )邏輯操作符包括:邏輯操作符包括:&(邏輯與)、(邏輯與)、|(邏輯或)、?。ㄟ壿嫹牵ㄟ壿嫽颍ⅲ。ㄟ壿嫹牵?. 位運(yùn)算(位運(yùn)算(Bitwise operators

18、)位運(yùn)算是將兩個(gè)操作數(shù)按對應(yīng)位進(jìn)行邏輯操作。位運(yùn)算是將兩個(gè)操作數(shù)按對應(yīng)位進(jìn)行邏輯操作。位運(yùn)算操作符包括:位運(yùn)算操作符包括:(按位取反)、(按位取反)、&(按位與)、(按位與)、|(按位或)、(按位或)、(按位異或)、(按位異或)、或或(按位同或)。(按位同或)。 在進(jìn)行位運(yùn)算時(shí),當(dāng)兩個(gè)操作數(shù)的位寬不同時(shí),在進(jìn)行位運(yùn)算時(shí),當(dāng)兩個(gè)操作數(shù)的位寬不同時(shí),計(jì)算機(jī)會自動(dòng)將兩個(gè)操作數(shù)按右端對齊,位數(shù)少的操計(jì)算機(jī)會自動(dòng)將兩個(gè)操作數(shù)按右端對齊,位數(shù)少的操作數(shù)會在高位用作數(shù)會在高位用0補(bǔ)齊。補(bǔ)齊。 234. 關(guān)系操作符(關(guān)系操作符(Pelational operators)關(guān)系操作符有:關(guān)系操作符有: (

19、小于)、(小于)、(大于)、(大于)、=(大(大于等于)。于等于)。其中,其中,(右移)、(右移)、 n ; /將操作數(shù)的內(nèi)容右移將操作數(shù)的內(nèi)容右移n位,同時(shí)從位,同時(shí)從左邊開始左邊開始用用0來填補(bǔ)來填補(bǔ)移出的位數(shù)。移出的位數(shù)。操作數(shù)操作數(shù) 4的結(jié)果是的結(jié)果是A = 8b00001101;而;而A 4的結(jié)果是的結(jié)果是A = 8b00010000。 278. 條件操作符條件操作符(Conditional operators)條件操作符為:?:條件操作符為:?:條件操作符的條件操作符的操作數(shù)有操作數(shù)有3個(gè),個(gè),其使用格式為其使用格式為操作數(shù)操作數(shù) = 條件條件 ? 表達(dá)式表達(dá)式1:表達(dá)式:表達(dá)式2

20、; 即當(dāng)條件為真(條件結(jié)果值為即當(dāng)條件為真(條件結(jié)果值為1)時(shí),操作數(shù))時(shí),操作數(shù) = 表達(dá)式表達(dá)式1;為假(條件結(jié)果值為;為假(條件結(jié)果值為0)時(shí),操作數(shù))時(shí),操作數(shù) = 表達(dá)表達(dá)式式2。28源程序如下源程序如下moduleexample_2_3(out,a,b,c);input a,b,c;outputout;assign out = a? b:c;endmodule【例例2.3】用用Verilog HDL語言描述下圖所示的電路。語言描述下圖所示的電路。outcba1&299. 位并接操作符(位并接操作符(Concatenation operators)并接操作符為:并接操作符為:

21、并接操作符的并接操作符的使用格式使用格式:操作數(shù)操作數(shù)1的某些位,操作數(shù)的某些位,操作數(shù)2的某些位,的某些位,操作數(shù),操作數(shù)n的某些位;的某些位;作用:作用:即將操作數(shù)即將操作數(shù)1的某些位與操作數(shù)的某些位與操作數(shù)2的某些位的某些位與與與操作數(shù)與操作數(shù)n的某些位并接在一起。的某些位并接在一起。例如,例如,將將1位全加器進(jìn)位位全加器進(jìn)位cont與和與和sum并接在一起使用,并接在一起使用,它們的結(jié)果由兩個(gè)加數(shù)它們的結(jié)果由兩個(gè)加數(shù)ina、inb及低位進(jìn)位及低位進(jìn)位cin相加決相加決定的表達(dá)式為定的表達(dá)式為cont,sum= ina+inb+cin; 302.2.7 Verilog HDL數(shù)據(jù)對象數(shù)據(jù)

22、對象Verilog HDL數(shù)據(jù)對象是指用來存放各種類型數(shù)據(jù)的數(shù)據(jù)對象是指用來存放各種類型數(shù)據(jù)的容器,包括容器,包括常量常量和和變量變量。 1. 常量常量常量是一個(gè)恒定不變的值數(shù),一般常量是一個(gè)恒定不變的值數(shù),一般在程序前部定義在程序前部定義。常量定義常量定義格式格式為為parameter 常量名常量名1 = 表達(dá)式,常量名表達(dá)式,常量名2 = 表達(dá)式,表達(dá)式,常量名常量名n = 表達(dá)式;表達(dá)式;parameter是常量定義關(guān)鍵字,常量名是用戶定義的標(biāo)是常量定義關(guān)鍵字,常量名是用戶定義的標(biāo)識符,表達(dá)式是為常量賦的值。例如識符,表達(dá)式是為常量賦的值。例如parameter vcc = 5,fbus

23、 = 8b11010001; 312. 變量變量 變量是在程序運(yùn)行時(shí)其值可以改變的量。變量是在程序運(yùn)行時(shí)其值可以改變的量。 在在Verilog HDL中,變量分為中,變量分為網(wǎng)絡(luò)型(網(wǎng)絡(luò)型(nets type)和和寄存器型(寄存器型(register type)兩種。兩種。 (1)網(wǎng)絡(luò)型變量()網(wǎng)絡(luò)型變量(nets type) netsnets型變量是輸出值始終根據(jù)輸入變化而更新的型變量是輸出值始終根據(jù)輸入變化而更新的變量,它一般用來定義硬件電路中的變量,它一般用來定義硬件電路中的各種物理連線各種物理連線。32類類 型型功能說明功能說明wire、tri連線類型(兩者功能完全相同)連線類型(兩者

24、功能完全相同)wor、trior具有線或特性的連線(兩者功能一致)具有線或特性的連線(兩者功能一致)wand、triand具有線與特性的連線(兩者功能一致)具有線與特性的連線(兩者功能一致)tri1、tri0分別為上拉電阻和下拉電阻分別為上拉電阻和下拉電阻supply1、supply0分別為電源(邏輯分別為電源(邏輯1)和地(邏輯)和地(邏輯0)Verilog HDL提供的提供的nets型變量如下型變量如下33(2)寄存器型變量()寄存器型變量(register type) register型變量是一種數(shù)值容器,不僅可以型變量是一種數(shù)值容器,不僅可以容納當(dāng)容納當(dāng)前值前值,也可以,也可以保持歷史

25、值保持歷史值,這一屬性與,這一屬性與觸發(fā)器或寄存觸發(fā)器或寄存器的記憶功能器的記憶功能有很好的對應(yīng)關(guān)系。有很好的對應(yīng)關(guān)系。 register型變量與型變量與wire型變量的根本區(qū)別:型變量的根本區(qū)別:register型變量需要被明確地賦值,并且在被重新賦值型變量需要被明確地賦值,并且在被重新賦值前一直保持原值。前一直保持原值。 register型變量是在型變量是在always、initial等過程語句中等過程語句中定義,并通過過程語句賦值。定義,并通過過程語句賦值。 34常用的常用的register型變量及說明型變量及說明 類類 型型功功 能能 說說 明明reg常用的寄存器型變量常用的寄存器型變

26、量integer32位帶符號整數(shù)型變量位帶符號整數(shù)型變量real64位帶符號實(shí)數(shù)型變量位帶符號實(shí)數(shù)型變量time無符號時(shí)間型變量無符號時(shí)間型變量35 integer、real和和time等等3種寄存器型變量都是純數(shù)種寄存器型變量都是純數(shù)學(xué)的抽象描述,不對應(yīng)任何具體的硬件電路,但它們學(xué)的抽象描述,不對應(yīng)任何具體的硬件電路,但它們可以描述與模擬有關(guān)的計(jì)算。例如,可以利用可以描述與模擬有關(guān)的計(jì)算。例如,可以利用time型型變量控制經(jīng)過特定的時(shí)間后關(guān)閉顯示等。變量控制經(jīng)過特定的時(shí)間后關(guān)閉顯示等。 reg型變量是數(shù)字系統(tǒng)中存儲設(shè)備的抽象,常用型變量是數(shù)字系統(tǒng)中存儲設(shè)備的抽象,常用于具體的硬件描述,因此是

27、最常用的寄存器型變量。于具體的硬件描述,因此是最常用的寄存器型變量。 reg型變量定義的關(guān)鍵字是型變量定義的關(guān)鍵字是reg,定義,定義格式格式如下如下reg 位寬位寬 變量變量1,變量,變量2,變量,變量n;用用reg定義的變量有一個(gè)范圍選項(xiàng)(即位寬),定義的變量有一個(gè)范圍選項(xiàng)(即位寬),默認(rèn)默認(rèn)的位寬是的位寬是1。位寬為。位寬為1位的變量稱為位的變量稱為標(biāo)量標(biāo)量,位寬超過,位寬超過1位的變量稱為位的變量稱為向量向量。標(biāo)量的定義不需要加位寬選項(xiàng),。標(biāo)量的定義不需要加位寬選項(xiàng),例如例如 reg a,b;/定義兩個(gè)定義兩個(gè)reg型變量型變量a,b 36向量定義時(shí)需要位寬選項(xiàng)向量定義時(shí)需要位寬選項(xiàng),

28、例如,例如reg7:0data;/定義定義1個(gè)個(gè)8位寄存器型位寄存器型變量,最高有效位是變量,最高有效位是7,最低有效位是,最低有效位是0reg0:7data;/定義定義1個(gè)個(gè)8位寄存器型位寄存器型變量,最高有效位是變量,最高有效位是0,最低有效位是,最低有效位是7向量定義后可以采有多種使用形式(即賦值)向量定義后可以采有多種使用形式(即賦值)data=8b00000000;data5:3=3b111;data7=1; 37(3)數(shù)組)數(shù)組 若干個(gè)相同寬度的向量構(gòu)成數(shù)組。若干個(gè)相同寬度的向量構(gòu)成數(shù)組。在數(shù)字系統(tǒng)中,在數(shù)字系統(tǒng)中,reg型數(shù)組變量即為型數(shù)組變量即為memory(存儲器)型變量(存

29、儲器)型變量。存儲器型可以用如下語句定義存儲器型可以用如下語句定義reg7:0mymemory1023:0;上述語句定義了一個(gè)上述語句定義了一個(gè)1024個(gè)字存儲器變量個(gè)字存儲器變量mymemory,每個(gè)字的字長為每個(gè)字的字長為8位。在表達(dá)式中可以用下面的語句位。在表達(dá)式中可以用下面的語句來使用存儲器:來使用存儲器:mymemory7 = 75;/存儲器存儲器mymemory的第的第7個(gè)字個(gè)字被賦值被賦值75382.3 Verilog HDL的語句的語句 語句是構(gòu)成語句是構(gòu)成Verilog HDL程序不可缺少的部分。程序不可缺少的部分。Verilog HDL的語句包括賦值語句、條件語句、循的語句

30、包括賦值語句、條件語句、循環(huán)語句、結(jié)構(gòu)說明語句和編譯預(yù)處理語句等類型,環(huán)語句、結(jié)構(gòu)說明語句和編譯預(yù)處理語句等類型,每一類語句又包括幾種不同的語句。在這些語句中,每一類語句又包括幾種不同的語句。在這些語句中,有些語句屬于順序執(zhí)行語句,有些語句屬于并行執(zhí)有些語句屬于順序執(zhí)行語句,有些語句屬于并行執(zhí)行語句。行語句。 392.3.1 賦值語句賦值語句1. 門基元賦值語句門基元賦值語句格式:格式:基本邏輯門關(guān)鍵字基本邏輯門關(guān)鍵字(門輸出,門輸入(門輸出,門輸入1,門輸,門輸入入2,門輸入,門輸入n);); 基本邏輯門關(guān)鍵字是基本邏輯門關(guān)鍵字是Verilog HDL預(yù)定義的邏預(yù)定義的邏輯門,包括輯門,包括

31、and、or、not、xor、nand、nor等;等;圓括弧中內(nèi)容是被描述門的輸出和輸入信號。圓括弧中內(nèi)容是被描述門的輸出和輸入信號。例如,具有例如,具有a、b、c、d四個(gè)輸入和四個(gè)輸入和y為輸出與非門為輸出與非門的門基元賦值語句為的門基元賦值語句為nand(y,a,b,c,d););該語句與該語句與y = (a & b & c & d)等效)等效402. 連續(xù)賦值語句連續(xù)賦值語句格式格式assign賦值變量賦值變量 = 表達(dá)式;表達(dá)式;例如例如assigny = (a & b & c & d);); 在執(zhí)行中,輸出在執(zhí)行中,輸出y的變化跟隨輸入

32、的變化跟隨輸入a、b、c、d的的變化而變化,變化而變化,反映了信息傳送的連續(xù)性反映了信息傳送的連續(xù)性。 41【例例2.4】4輸入端與非門的輸入端與非門的Verilog HDL源程序。源程序。moduleexample_4_4(y,a,b,c,d);outputy;inputa,b,c,d;assign #1 y = (a&b&c&d);endmodule #1表示該門的輸出與輸入信號之間具有表示該門的輸出與輸入信號之間具有1個(gè)個(gè)單位的時(shí)間延遲。單位的時(shí)間延遲。 423. 過程賦值語句過程賦值語句 過程賦值語句出現(xiàn)在過程賦值語句出現(xiàn)在initial和和always塊語句中

33、,塊語句中,賦值符號是賦值符號是“=”,格式為,格式為賦值變量賦值變量 = 表達(dá)式;表達(dá)式; 在過程賦值語句中,賦值號在過程賦值語句中,賦值號“=”左邊的賦值變左邊的賦值變量必須是量必須是reg(寄存器)型變量,其值在該語句結(jié)束(寄存器)型變量,其值在該語句結(jié)束即可得到即可得到。如果一個(gè)塊語句中包含若干條過程賦值語。如果一個(gè)塊語句中包含若干條過程賦值語句,那么這些過程賦值語句是按照語句編寫的句,那么這些過程賦值語句是按照語句編寫的順序順序由由上至下一條一條地上至下一條一條地執(zhí)行執(zhí)行,前面的語句沒有完成,后面,前面的語句沒有完成,后面的語句就不能執(zhí)行,就象被阻塞了一樣。因此,過程的語句就不能執(zhí)行

34、,就象被阻塞了一樣。因此,過程賦值語句也稱為阻塞賦值語句。賦值語句也稱為阻塞賦值語句。 434. 非阻塞賦值語句非阻塞賦值語句 非阻塞賦值語句也是出現(xiàn)在非阻塞賦值語句也是出現(xiàn)在initial和和always塊語塊語句中,賦值符號是句中,賦值符號是“=”,格式為格式為賦值變量賦值變量 = 表達(dá)式;表達(dá)式; 在非阻塞賦值語句中,賦值號在非阻塞賦值語句中,賦值號“=”左邊的賦值左邊的賦值變量也必須是變量也必須是reg型變量型變量,其值其值不象在過程賦值語句不象在過程賦值語句那樣,語句結(jié)束時(shí)即刻得到,而那樣,語句結(jié)束時(shí)即刻得到,而在該塊語句結(jié)束才可在該塊語句結(jié)束才可得到得到。 44【例例2.5】上升沿

35、觸發(fā)的上升沿觸發(fā)的D觸發(fā)器的的源程序。觸發(fā)器的的源程序。moduleD_FF(q,d,clock);inputd,clock;outputq;regq;always(posedge clock) q = d;endmoduleq是觸發(fā)器的輸出,屬于是觸發(fā)器的輸出,屬于reg型變量;型變量;d和和clock是輸是輸入,屬于入,屬于wire型變量(由隱含規(guī)則定義)。型變量(由隱含規(guī)則定義)。 452.3.2 條件語句條件語句條件語句包含條件語句包含if語句和語句和case語句,它們都是順語句,它們都是順序語句,應(yīng)放在序語句,應(yīng)放在always塊中。塊中。1. if語句語句完整的完整的Verilog

36、 HDL的的if語句結(jié)構(gòu)如下:語句結(jié)構(gòu)如下:if (表達(dá)式表達(dá)式) begin 語句語句; endelse if (表達(dá)式表達(dá)式) begin 語句語句; endelse begin 語句語句; end46【例例2.6】8線線-3線優(yōu)先編碼器的設(shè)計(jì)線優(yōu)先編碼器的設(shè)計(jì) 輸入輸入輸出輸出a0 a1 a2 a3 a4 a5 a6 a7y0 y1 y2x x x x x x x 01 1 1x x x x x x 0 10 1 1x x x x x 0 1 11 0 1x x x x 0 1 1 10 0 1x x x 0 1 1 1 11 1 0 x x 0 1 1 1 1 10 1 0 x 0 1

37、 1 1 1 1 11 0 00 1 1 1 1 1 1 10 0 047Verilog HDL源代碼如下源代碼如下moduleexample_2_6(y,a);input 7:0a;output 2:0y;reg 2:0y;always (a)beginif(a7)y=3b111; else if(a6)y=3b110;48else if(a5)y=3b101;else if(a4)y=3b100;else if(a3)y=3b011;else if(a2)y=3b010;else if(a1)y=3b001;else y=3b000;endendmodule492. case語句語句 ca

38、se語句是一種多分支的條件語句,完整的語句是一種多分支的條件語句,完整的case語句的語句的格式格式為為case (表達(dá)式表達(dá)式) 選擇值選擇值1 : 語句語句1; 選擇值選擇值2 : 語句語句2; 選擇值選擇值n : 語句語句n; default :語句語句n+1;endcase50【例例2.7】用用case語句描述語句描述4選選1數(shù)據(jù)選擇器。數(shù)據(jù)選擇器。 moduleexample_4_7(z,a,b,c,d,s1,s2);inputs1,s2;inputa,b,c,d;outputz;regz;always (s1 or s2 or a or b or c or d)beginabcds

39、1s2數(shù)數(shù)據(jù)據(jù)選選擇擇器器z51 case (s1,s2) 2b00:z=a;2b01:z=b;2b10:z=c;2b11:z=d; default: z=a; endcaseendendmodule52 case語句還有兩種變體語句形式,即語句還有兩種變體語句形式,即casez和和casex語句。語句。casez和和casex語句與語句與case語句的語句的格式完全相同,它們的區(qū)別是:在格式完全相同,它們的區(qū)別是:在casez語句中,語句中,如果分支表達(dá)式某些位的值為高阻如果分支表達(dá)式某些位的值為高阻z,那么對這些,那么對這些位的比較就不予以考慮,只關(guān)注其他位的比較結(jié)果。位的比較就不予以考慮

40、,只關(guān)注其他位的比較結(jié)果。 在在casex語句中,把不予以考慮的位擴(kuò)展到未知語句中,把不予以考慮的位擴(kuò)展到未知x,即不考慮值為高阻即不考慮值為高阻z和未知和未知x的那些位,只關(guān)注其他的那些位,只關(guān)注其他位的比較結(jié)果。位的比較結(jié)果。 532.3.3 循環(huán)語句循環(huán)語句 循環(huán)語句包含循環(huán)語句包含for語句、語句、repeat語句、語句、while語句語句和和forever語句語句4種。種。1. for語句語句for語句的語法格式為語句的語法格式為for (循環(huán)指針循環(huán)指針 = 初值初值; 循環(huán)指針循環(huán)指針 終值終值; 循環(huán)指針循環(huán)指針 = 循環(huán)指針循環(huán)指針 + 步長值步長值) begin 語句語句;

41、 end54【例例2.8】8位奇偶校驗(yàn)器的描述。位奇偶校驗(yàn)器的描述。 moduleexample_2_8(a, out);input 7:0a;outputout;regout;integern;always(a)begin out = 0; for (n = 0; n =b) max=a;elsemax=b; endendfunction71函數(shù)調(diào)用的格式如下函數(shù)調(diào)用的格式如下函數(shù)名(關(guān)聯(lián)參數(shù)表);函數(shù)名(關(guān)聯(lián)參數(shù)表); 函數(shù)調(diào)用一般是出現(xiàn)在模塊、任務(wù)或函數(shù)語函數(shù)調(diào)用一般是出現(xiàn)在模塊、任務(wù)或函數(shù)語句中。通過函數(shù)的調(diào)用來完成某些數(shù)據(jù)的運(yùn)算或轉(zhuǎn)句中。通過函數(shù)的調(diào)用來完成某些數(shù)據(jù)的運(yùn)算或轉(zhuǎn)換。換。

42、例如,調(diào)用例例如,調(diào)用例2.9編制的求最大值的函數(shù)編制的求最大值的函數(shù)peak=max(data,peak); 其中,其中,data和和peak是與函數(shù)定義的兩個(gè)參數(shù)是與函數(shù)定義的兩個(gè)參數(shù)a、b關(guān)聯(lián)的關(guān)聯(lián)參數(shù)。通過函數(shù)的調(diào)用,求出關(guān)聯(lián)的關(guān)聯(lián)參數(shù)。通過函數(shù)的調(diào)用,求出data和和peak中的最大值,并用函數(shù)名中的最大值,并用函數(shù)名max返回。返回。 722.4 不同抽象級別的不同抽象級別的Verilog HDL模型模型 Verilog HDL是一種用于邏輯電路設(shè)計(jì)的硬件描是一種用于邏輯電路設(shè)計(jì)的硬件描述語言。用述語言。用Verilog HDL描述的電路稱為該設(shè)計(jì)電路描述的電路稱為該設(shè)計(jì)電路的的V

43、erilog HDL模型。模型。 Verilog HDL具有具有行為描述行為描述和和結(jié)構(gòu)描述結(jié)構(gòu)描述功能。功能。 行為描述行為描述是對設(shè)計(jì)電路的邏輯功能的描述,并是對設(shè)計(jì)電路的邏輯功能的描述,并不用關(guān)心設(shè)計(jì)電路使用那些元件以及這些元件之間不用關(guān)心設(shè)計(jì)電路使用那些元件以及這些元件之間的連接關(guān)系。的連接關(guān)系。 行為描述屬于行為描述屬于高層次高層次的描述方法,在的描述方法,在Verilog HDL中,行為描述包括中,行為描述包括系統(tǒng)級系統(tǒng)級(System Level)、)、算法級算法級(Algorithm Level)和)和寄存器傳輸級寄存器傳輸級(RTL:Register Transfer Lev

44、el)等)等3種抽象級別。種抽象級別。73 結(jié)構(gòu)描述結(jié)構(gòu)描述是對設(shè)計(jì)電路的結(jié)構(gòu)進(jìn)行描述,即是對設(shè)計(jì)電路的結(jié)構(gòu)進(jìn)行描述,即描述設(shè)計(jì)電路使用的元件及這些元件之間的連接描述設(shè)計(jì)電路使用的元件及這些元件之間的連接關(guān)系。關(guān)系。 結(jié)構(gòu)描述屬于結(jié)構(gòu)描述屬于低層次低層次的描述方法,在的描述方法,在Verilog HDL,結(jié)構(gòu)描述包括,結(jié)構(gòu)描述包括門級門級(Gate Level)和)和開關(guān)開關(guān)級級(Switch Level)2種抽象級別。種抽象級別。 在在Verilog HDL的學(xué)習(xí)中,應(yīng)重點(diǎn)掌握高層的學(xué)習(xí)中,應(yīng)重點(diǎn)掌握高層次描述方法,但門級描述在一些電路設(shè)計(jì)中也有次描述方法,但門級描述在一些電路設(shè)計(jì)中也有一定的實(shí)際意義。一定的實(shí)際意義。742.4.1 Verilog HDL門級描述門級描述 用于用于門級描述門級描述關(guān)鍵字包括:關(guān)鍵字包括:not(非門)、(非門)、and(與門)、(與門)、nand(與非門)、(與非門)、or(或門)、(或門)、nor(或(或非門)、非門)、xor(異或門)、(異或門)、xnor(異或非門)、(異或非門)、buf(緩沖器)以及(緩沖器)以及bufif1、bufif0、notif1、not

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論