第4章1-Verilog詞法教學(xué)設(shè)計_第1頁
第4章1-Verilog詞法教學(xué)設(shè)計_第2頁
第4章1-Verilog詞法教學(xué)設(shè)計_第3頁
第4章1-Verilog詞法教學(xué)設(shè)計_第4頁
第4章1-Verilog詞法教學(xué)設(shè)計_第5頁
已閱讀5頁,還剩134頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-4-1615硬件描述語言硬件描述語言Verilog HDL介紹硬件描述語言介紹硬件描述語言Verilog HDL的語言規(guī)則、數(shù)據(jù)類型和語句的語言規(guī)則、數(shù)據(jù)類型和語句結(jié)構(gòu),并介紹最基本、最典型的數(shù)字邏輯電路的結(jié)構(gòu),并介紹最基本、最典型的數(shù)字邏輯電路的Verilog HDL描述,作為描述,作為Verilog HDL工程設(shè)計的基礎(chǔ)。工程設(shè)計的基礎(chǔ)。知識要點:知識要點:(1)Verilog HDL設(shè)計模塊的基本結(jié)構(gòu)。設(shè)計模塊的基本結(jié)構(gòu)。(2)Verilog HDL的語言規(guī)則。的語言規(guī)則。(3)用)用Verilog HDL實現(xiàn)各種類型電路及系統(tǒng)設(shè)計的方法。實現(xiàn)各種類型電路及系統(tǒng)設(shè)計的方法。(4

2、)Verilog HDL設(shè)計流程。設(shè)計流程。 2022-4-16164.1.1 Verilog4.1.1 Verilog HDL HDL程序模塊結(jié)構(gòu)程序模塊結(jié)構(gòu)設(shè)設(shè)計計模模塊塊模塊端口定義模塊端口定義I/OI/O說明說明功能描述功能描述模塊內(nèi)容模塊內(nèi)容信號類型說明信號類型說明2022-4-16174.1.1 模塊端口定義模塊端口定義模塊端口定義用來聲明設(shè)計電路模塊的輸入輸出模塊端口定義用來聲明設(shè)計電路模塊的輸入輸出端口,端口定義格式如下端口,端口定義格式如下module 模塊名(端口模塊名(端口1,端口,端口2,端口,端口3,););在端口定義的圓括弧中,是設(shè)計電路模塊與外界聯(lián)系在端口定義的圓

3、括弧中,是設(shè)計電路模塊與外界聯(lián)系的全部輸入輸出端口信號或引腳,它是設(shè)計實體對外的全部輸入輸出端口信號或引腳,它是設(shè)計實體對外的一個通信界面,是外界可以看到的部分(不包含電的一個通信界面,是外界可以看到的部分(不包含電源和接地端),多個端口名之間用源和接地端),多個端口名之間用“,”分隔。例如,分隔。例如,module adder(sum,cont,ina,inb,cin););2022-4-16184.1.2 模塊內(nèi)容模塊內(nèi)容模塊內(nèi)容包括模塊內(nèi)容包括I/O說明、信號類型聲明和功能描述。說明、信號類型聲明和功能描述。1. 1. 模塊的模塊的I/O說明說明模塊的模塊的I/O說明用來聲明模塊端口定義

4、中各端口數(shù)據(jù)流動方向說明用來聲明模塊端口定義中各端口數(shù)據(jù)流動方向包括輸入(包括輸入(input)、輸出()、輸出(output)和雙向()和雙向(inout)。)。I/O說說明格式如下明格式如下input 端口端口1,端口,端口2,端口,端口3,;output 端口端口1,端口,端口2,端口,端口3,;例如例如 input ina,inb,cin;output sum,cont;nVerilog 模塊的結(jié)構(gòu)由在模塊的結(jié)構(gòu)由在module和和endmodule 關(guān)鍵詞之間的四個主要部分組成:關(guān)鍵詞之間的四個主要部分組成: - 端口信息:端口信息: module block1(a, b, c, d

5、 ); - 輸入輸入/輸出說明輸出說明 : input a, b, c ; output d ; - 內(nèi)部信號:內(nèi)部信號: wire x; - 功能定義:功能定義: assign d = a | x ; assign x = ( b & c ); endmoduleabcdeabced2022-4-16222.2.信號類型聲明信號類型聲明信號類型聲明用來說明設(shè)計電路的功能描述中,所用的信號的數(shù)據(jù)類型以及信號類型聲明用來說明設(shè)計電路的功能描述中,所用的信號的數(shù)據(jù)類型以及函數(shù)聲明。函數(shù)聲明。信號的數(shù)據(jù)類型主要有信號的數(shù)據(jù)類型主要有1.1. 線網(wǎng)(線網(wǎng)(netnet)-物理連接,物理連接,表

6、示電路的節(jié)點,有驅(qū)動為驅(qū)動值,否則為,有驅(qū)動為驅(qū)動值,否則為 Z.(Z.(強度不考慮強度不考慮) ),2.2. 連線(連線(wirewire)-輸入或元件連接線輸入或元件連接線, ,多位組合邏輯的連線,可以做向量如多位組合邏輯的連線,可以做向量如 wire 3:0 dataawire 3:0 dataa; ;3.3. 寄存器(寄存器(regreg)- -理解為時序過程連線或輸出連線。理解為時序過程連線或輸出連線。4.4. 整型(整型(integerinteger)、)、5.5. 實型(實型(realreal)6.6. 時間(時間(timetime)等類型。)等類型。 2022-4-16253.

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

8、- 寄存器類型:寄存器類型: reg 在在always 塊中被賦值的信號,塊中被賦值的信號,往往往往代表代表 觸發(fā)器,但不一定是觸發(fā)器。觸發(fā)器,但不一定是觸發(fā)器。 - 連線類型:連線類型: wire 用用 assign 關(guān)鍵詞指定的組合邏輯的信號關(guān)鍵詞指定的組合邏輯的信號 或連線或連線2022-4-1628(1)用)用assign語句建模語句建模 用用assign語句建模的方法很簡單,只需要在語句建模的方法很簡單,只需要在“assign”后面再加一個表達(dá)式即可。后面再加一個表達(dá)式即可。assign語句一般適合對組合邏輯語句一般適合對組合邏輯進(jìn)行賦值,稱為連續(xù)賦值方式。進(jìn)行賦值,稱為連續(xù)賦值方式

9、?!纠纠?.1】1位全加器的設(shè)計。位全加器的設(shè)計。 inainbcinAdder1sumcout2022-4-1629Verilog HDL源程序如下源程序如下module adder1(sum,cout,ina,inb,cin);input ina,inb,cin;output sum,cout;assign cout,sum = ina+inb+cin;endmodule2022-4-1630(2)用元件例化()用元件例化(instantiate)方式建模)方式建模 元件例化方式建模是利用元件例化方式建模是利用Verilog HDL提供的元提供的元件庫實現(xiàn)的。件庫實現(xiàn)的。例如,用與門例化

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

11、2-4-16328位二進(jìn)制加法計數(shù)器的位二進(jìn)制加法計數(shù)器的Verilog HDL源程序:源程序:module cnt8(out,cout,data,load,cin,clk,clr); input 7:0 data;input load,cin,clk,clr; output 7:0 out;outputcout; reg 7:0 out;2022-4-1633always (posedge clk)begin if (load)out = data; else if (clr)out =b00000000; else if (cin) out = out+1; end assign cout

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

13、。的。 每個模塊首先要進(jìn)行端口定義,并說明輸入每個模塊首先要進(jìn)行端口定義,并說明輸入(input)、輸出()、輸出(output)或雙向()或雙向(inout),然),然后對模塊的功能進(jìn)行邏輯描述。后對模塊的功能進(jìn)行邏輯描述。 2022-4-1635 Verilog HDL程序的書寫格式自由,一行可以一程序的書寫格式自由,一行可以一條或多條語句,一條語句也可以分為多行寫。條或多條語句,一條語句也可以分為多行寫。 除了除了end或含或含end(如(如endmodule)語句外,每)語句外,每條語句后必須要有分號條語句后必須要有分號“;”。 可以用可以用/*/或或/對對Verilog HDL程序的

14、程序的任何部分作注釋。一個完整的源程序都應(yīng)當(dāng)加上任何部分作注釋。一個完整的源程序都應(yīng)當(dāng)加上需要的注釋,以加強程序的可讀性。需要的注釋,以加強程序的可讀性。 abcdeaout2BUFFbINVout1dout2AND2i1clkout1D QDFFclkDFFcD QD QabDFFclkDFFcD Qab2022-4-16444.2.1 空白符和注釋空白符和注釋 Verilog HDL的空白符包括空格、的空白符包括空格、tab符號、符號、換行和換頁。空白符如果不是出現(xiàn)在字符串中,換行和換頁。空白符如果不是出現(xiàn)在字符串中,編譯源程序時將被忽略。編譯源程序時將被忽略。 注釋分為行注釋和塊注釋兩種

15、方式。行注注釋分為行注釋和塊注釋兩種方式。行注釋用符號釋用符號/(兩個斜杠)開始,注釋到本行結(jié)束。(兩個斜杠)開始,注釋到本行結(jié)束。塊注釋用塊注釋用/*開始,用開始,用*/結(jié)束。塊注釋可以跨越多結(jié)束。塊注釋可以跨越多行,但它們不能嵌套。行,但它們不能嵌套。 2022-4-16464.2.2 常數(shù)常數(shù) Verilog HDL的常數(shù)包括數(shù)字、未知的常數(shù)包括數(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ù)寬度;其中

16、,位寬表示數(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ù)),(表示十六進(jìn)制數(shù)),o或或O(表(表示八進(jìn)制數(shù))。示八進(jìn)制數(shù))。2022-4-1647例如例如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ù)1258b1111xxxx/等價等價8hfx8b1101zzzz/等價等價8hdz20

17、22-4-16484.2.3 字符串字符串字符串是用雙引號括起來的可打印字符序列,它必須字符串是用雙引號括起來的可打印字符序列,它必須包含在同一行中。例如,包含在同一行中。例如,”ABC”,”A BOY.”,”A”,”1234”都是字符串。都是字符串。2022-4-16494.2.4 標(biāo)識符標(biāo)識符 標(biāo)識符是用戶編程時為常量、變量、模塊、寄存器、標(biāo)識符是用戶編程時為常量、變量、模塊、寄存器、端口、連線、示例和端口、連線、示例和begin-end塊等元素定義的名稱。塊等元素定義的名稱。標(biāo)識符可以是字母、數(shù)字和下劃線標(biāo)識符可以是字母、數(shù)字和下劃線“_”等符號組成的等符號組成的任意序列。定義標(biāo)識符時應(yīng)

18、遵循如下規(guī)則任意序列。定義標(biāo)識符時應(yīng)遵循如下規(guī)則 首字符不能是數(shù)字。首字符不能是數(shù)字。 字符數(shù)不能多于字符數(shù)不能多于1024個。個。 大小寫字母是不同的。大小寫字母是不同的。 不要與關(guān)鍵字同名。不要與關(guān)鍵字同名。 2022-4-16504.2.5 關(guān)鍵字關(guān)鍵字 關(guān)鍵字是關(guān)鍵字是Verilog HDL預(yù)先定義的單詞,它們預(yù)先定義的單詞,它們在程序中有不同的使用目的。例如,在程序中有不同的使用目的。例如,module和和endmodule來指出源程序模塊的開始和結(jié)束;用來指出源程序模塊的開始和結(jié)束;用assign來描述一個邏輯表達(dá)式等。來描述一個邏輯表達(dá)式等。 Verilog HDL的關(guān)鍵字有的關(guān)

19、鍵字有97個(見表個(見表 ?所?所示)。示)。 2022-4-16514.2.6 操作符操作符 操作符也稱為運算符,是操作符也稱為運算符,是Verilog HDL預(yù)定義的預(yù)定義的函數(shù)名字,這些函數(shù)對被操作的對象(即操作數(shù))函數(shù)名字,這些函數(shù)對被操作的對象(即操作數(shù))進(jìn)行規(guī)定的運算,得到一個結(jié)果。進(jìn)行規(guī)定的運算,得到一個結(jié)果。 操作符通常由操作符通常由13個字符組成,例如,個字符組成,例如,“+”表表示加操作,示加操作,“=”(兩個(兩個=字符)表示邏輯等操作,字符)表示邏輯等操作,“=”(3個個=字符)表示全等操作。有些操作符的字符)表示全等操作。有些操作符的操作數(shù)只有操作數(shù)只有1個,稱為單

20、目操作;有些操作符的操作個,稱為單目操作;有些操作符的操作數(shù)有數(shù)有2個,稱為雙目操作;有些操作符的操作數(shù)有個,稱為雙目操作;有些操作符的操作數(shù)有3個,稱為三目操作。個,稱為三目操作。2022-4-16521. 算術(shù)操作符(算術(shù)操作符(Arithmetic operators)常用的算術(shù)操作符:常用的算術(shù)操作符: +(加)、(加)、-(減)、(減)、*(乘)、(乘)、/(除)、(除)、%(求余)。(求余)。其中其中%是求余操作符是求余操作符, 在兩個整數(shù)相除的基礎(chǔ)上,取在兩個整數(shù)相除的基礎(chǔ)上,取出其余數(shù)。例如,出其余數(shù)。例如,5 % 6的值為的值為5;13 % 5的值是的值是3。2022-4-1

21、6532. 邏輯操作符(邏輯操作符(Logical operators )邏輯操作符包括:邏輯操作符包括:&(邏輯與)、(邏輯與)、|(邏輯或)、!(邏輯非)(邏輯或)、!(邏輯非)3. 位運算(位運算(Bitwise operators)位運算是將兩個操作數(shù)按對應(yīng)位進(jìn)行邏輯操作。位運位運算是將兩個操作數(shù)按對應(yīng)位進(jìn)行邏輯操作。位運算操作符包括:算操作符包括:(按位取反)、(按位取反)、&(按位與)、(按位與)、|(按(按位或)、位或)、(按位異或)、(按位異或)、或或(按位同或)。(按位同或)。在進(jìn)行位運算時,當(dāng)兩個操作數(shù)的位寬不同時,計算在進(jìn)行位運算時,當(dāng)兩個操作數(shù)的位寬不同

22、時,計算機會自動將兩個操作數(shù)按右端對齊,位數(shù)少的操作數(shù)機會自動將兩個操作數(shù)按右端對齊,位數(shù)少的操作數(shù)會在高位用會在高位用0補齊。補齊。 2022-4-16544. 關(guān)系操作符(關(guān)系操作符(Pelational operators)關(guān)系操作符有:關(guān)系操作符有: (小于)、(小于)、(大于)、(大于)、=(大(大于等于)。于等于)。其中,其中,(右移)、(右移)、 n;/將操作數(shù)的內(nèi)容右移將操作數(shù)的內(nèi)容右移n位,位,同時從左邊開始用同時從左邊開始用0來填補移出的位數(shù)。來填補移出的位數(shù)。操作數(shù)操作數(shù) 4的結(jié)果是的結(jié)果是A = 8b00001101;而;而A 4的結(jié)果是的結(jié)果是A = 8b000100

23、00。 7. 轉(zhuǎn)移操作符應(yīng)用轉(zhuǎn)移操作符應(yīng)用modulezzzz(ina,outb,clk);input ina,clk;output regoutb;reg 7:0 Measure1, Measure2,Measure3;reg 3:0 cont1,cont2,cont3;initial begin Measure1=b00000000; Measure2=b00000000; Measure3=b00000000; cont1=b0000; cont2=b0000; cont3=b0000;endalways(posedge clk) begin cont1=cont1+1; end alw

24、ays(posedge clk) if(cont1=7) begin Measure17 =ina; Measure11; /將一個串入信號并行處理, end always(posedge clk) if(8=cont1=10) begin Measure2=Measure1+1;/數(shù)據(jù)處理 end always(posedge clk) if(cont1=7) begin outb=Measure37; Measure3=Measure2 1;/將一個串入信號并行處理, endendmodule 2022-4-16608. 條件操作符條件操作符(Conditional operators)條

25、件操作符為:?:條件操作符為:?:條件操作符的操作數(shù)有條件操作符的操作數(shù)有3個,其使用格式為個,其使用格式為操作數(shù)操作數(shù) = 條件條件 ? 表達(dá)式表達(dá)式1:表達(dá)式:表達(dá)式2;即當(dāng)條件為真(條件結(jié)果值為即當(dāng)條件為真(條件結(jié)果值為1)時,操作數(shù))時,操作數(shù) = 表達(dá)表達(dá)式式1;為假(條件結(jié)果值為;為假(條件結(jié)果值為0)時,操作數(shù))時,操作數(shù) = 表達(dá)式表達(dá)式2?!纠纠?.3】用】用Verilog HDL語言描述下圖所示的電路。語言描述下圖所示的電路。 cabout2022-4-1661源程序如下源程序如下moduleexample_4_3(out,a,b,c);inputa,b,c;output

26、out;assign out = a? b:c;endmodule2022-4-16629. 位并接操作符(位并接操作符(Concatenation operators)并接操作符為:并接操作符為:并接操作符的使用格式為并接操作符的使用格式為操作數(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é)果由兩個并接在一起使用,它們的結(jié)

27、果由兩個加數(shù)加數(shù)ina、inb及低位進(jìn)位及低位進(jìn)位cin相加決定的表達(dá)式為相加決定的表達(dá)式為cont,sum= ina+inb+cin; 9位并接操作符應(yīng)用位并接操作符應(yīng)用2022-4-16644.2.7 Verilog HDL數(shù)據(jù)對象數(shù)據(jù)對象Verilog HDL數(shù)據(jù)對象是指用來存放各種類型數(shù)據(jù)的數(shù)據(jù)對象是指用來存放各種類型數(shù)據(jù)的容器,包括常量和變量。容器,包括常量和變量。 1. 常量常量常量是一個恒定不變的值數(shù),一般在程序前部定義。常量是一個恒定不變的值數(shù),一般在程序前部定義。常量定義格式為常量定義格式為parameter 常量名常量名1 = 表達(dá)式,常量名表達(dá)式,常量名2 = 表達(dá)式,表

28、達(dá)式,常量名,常量名n = 表達(dá)式;表達(dá)式;parameter是常量定義關(guān)鍵字,常量名是用戶定義的標(biāo)是常量定義關(guān)鍵字,常量名是用戶定義的標(biāo)識符,表達(dá)式是為常量賦的值。例如識符,表達(dá)式是為常量賦的值。例如parameter Vcc = 5,fbus = 8b11010001; 2022-4-16652. 變量變量變量是在程序運行時其值可以改變的量。在變量是在程序運行時其值可以改變的量。在Verilog HDL中,變量分為網(wǎng)絡(luò)型(中,變量分為網(wǎng)絡(luò)型(nets type)和寄存器型)和寄存器型(register type)兩種。)兩種。 (1)網(wǎng)絡(luò)型變量()網(wǎng)絡(luò)型變量(nets type)netsn

29、ets型變量是輸出值始終根據(jù)輸入變化而更新的變量,型變量是輸出值始終根據(jù)輸入變化而更新的變量,它一般用來定義硬件電路中的各種物理連線。它一般用來定義硬件電路中的各種物理連線。VerilogVerilog HDL HDL提供的提供的netsnets型變量如下。型變量如下。 2022-4-1666類類 型型功能說明功能說明wire、tri連線類型(兩者功能完全相同)連線類型(兩者功能完全相同)wor、trior具有線或特性的連線(兩者功能一致)具有線或特性的連線(兩者功能一致)wand、triand具有線與特性的連線(兩者功能一致)具有線與特性的連線(兩者功能一致)tri1、tri0分別為上拉電阻

30、和下拉電阻分別為上拉電阻和下拉電阻supply1、supply0分別為電源(邏輯分別為電源(邏輯1)和地(邏輯)和地(邏輯0)2022-4-1667(2)寄存器型變量()寄存器型變量(register type) register型變量是一種數(shù)值容器,不僅可以容納當(dāng)型變量是一種數(shù)值容器,不僅可以容納當(dāng)前值,也可以保持歷史值,這一屬性與觸發(fā)器或寄存前值,也可以保持歷史值,這一屬性與觸發(fā)器或寄存器的記憶功能有很好的對應(yīng)關(guān)系。器的記憶功能有很好的對應(yīng)關(guān)系。 register型變量也是一種連接線,可以作為設(shè)計型變量也是一種連接線,可以作為設(shè)計模塊中各器件間的信息傳送通道。模塊中各器件間的信息傳送通道。

31、register型變量與型變量與wire型變量的根本區(qū)別在于型變量的根本區(qū)別在于register型變量需要被明確型變量需要被明確地賦值,并且在被重新賦值前一直保持原值。地賦值,并且在被重新賦值前一直保持原值。register型變量是在型變量是在always、initial等過程語句中定義,并通過等過程語句中定義,并通過過程語句賦值。過程語句賦值。 2022-4-1668類類 型型功功 能能 說說 明明reg常用的寄存器型變量常用的寄存器型變量integer32位帶符號整數(shù)型變量位帶符號整數(shù)型變量real64位帶符號實數(shù)型變量位帶符號實數(shù)型變量time無符號時間型變量無符號時間型變量常用的常用的

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

33、量定義的關(guān)鍵字是型變量定義的關(guān)鍵字是reg,定義格式如下,定義格式如下reg 位寬位寬 變量變量1,變量,變量2,變量,變量n;用用reg定義的變量有一個范圍選項(即位寬),默認(rèn)的位寬是定義的變量有一個范圍選項(即位寬),默認(rèn)的位寬是1。位寬為位寬為1位的變量稱為標(biāo)量,位寬超過位的變量稱為標(biāo)量,位寬超過1位的變量稱為向量。標(biāo)位的變量稱為向量。標(biāo)量的定義不需要加位寬選項,例如量的定義不需要加位寬選項,例如reg a,b;/定義兩個定義兩個reg型變量型變量a,b 2022-4-1670向量定義時需要位寬選項,例如向量定義時需要位寬選項,例如reg7:0data;/定義定義1個個8位寄存器型位寄存

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

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

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

37、邏輯門,包括包括and、or、not、xor、nand、nor等;圓括弧等;圓括弧中內(nèi)容是被描述門的輸出和輸入信號。例如,具有中內(nèi)容是被描述門的輸出和輸入信號。例如,具有a、b、c、d四個輸入和四個輸入和y為輸出與非門的門基元賦值語為輸出與非門的門基元賦值語句為句為nand(y,a,b,c,d););該語句與該語句與y = (a & b & c & d)等效)等效2022-4-16742. 連續(xù)賦值語句連續(xù)賦值語句格式格式assign賦值變量賦值變量 = 表達(dá)式;表達(dá)式;例如例如assigny = (a & b & c & d);); 連續(xù)賦值語

38、句的連續(xù)賦值語句的“=”號兩邊的變量都應(yīng)該是號兩邊的變量都應(yīng)該是wire型變量。在執(zhí)行中,輸出型變量。在執(zhí)行中,輸出y的變化跟隨輸入的變化跟隨輸入a、b、c、d的變化而變化,反映了信息傳送的連續(xù)性。的變化而變化,反映了信息傳送的連續(xù)性。 2022-4-1675【例【例4.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表示該門的輸出與輸入信號之間具有表示該門的輸出與輸入信號之間

39、具有1個個單位的時間延遲。單位的時間延遲。 2022-4-16763. 過程賦值語句過程賦值語句 過程賦值語句出現(xiàn)在過程賦值語句出現(xiàn)在塊語句中,塊語句中,賦值符號是賦值符號是“=”,格式為,格式為賦值變量賦值變量 = 表達(dá)式;表達(dá)式; 在過程賦值語句中,賦值號在過程賦值語句中,賦值號“=”左邊的賦值變左邊的賦值變量必須是量必須是reg(寄存器)型變量,其值在該語句結(jié)束(寄存器)型變量,其值在該語句結(jié)束即可得到。如果一個塊語句中包含若干條過程賦值語即可得到。如果一個塊語句中包含若干條過程賦值語句,那么這些過程賦值語句是按照語句編寫的順序由句,那么這些過程賦值語句是按照語句編寫的順序由上至下一條一

40、條地執(zhí)行,前面的語句沒有完成,后面上至下一條一條地執(zhí)行,前面的語句沒有完成,后面的語句就不能執(zhí)行,就象被阻塞了一樣。因此,過程的語句就不能執(zhí)行,就象被阻塞了一樣。因此,過程賦值語句也稱為阻塞賦值語句。賦值語句也稱為阻塞賦值語句。 2022-4-16774. 非阻塞賦值語句非阻塞賦值語句非阻塞賦值語句也是出現(xiàn)在非阻塞賦值語句也是出現(xiàn)在塊語句塊語句中,賦值符號是中,賦值符號是“=”,格式為,格式為賦值變量賦值變量 = 表達(dá)式;表達(dá)式; 在非阻塞賦值語句中,賦值號在非阻塞賦值語句中,賦值號“=”左邊的賦值左邊的賦值變量也必須是變量也必須是reg型變量,其值不象在過程賦值語句型變量,其值不象在過程賦值

41、語句那樣,語句結(jié)束時即刻得到,而在該塊語句結(jié)束才可那樣,語句結(jié)束時即刻得到,而在該塊語句結(jié)束才可得到。得到。 2022-4-1678例如,在下面的塊語句中包含例如,在下面的塊語句中包含4條賦值語句條賦值語句always(posedge clock)m = 3;n = 75;n = m;r = n;語句執(zhí)行結(jié)束后,語句執(zhí)行結(jié)束后,r的值是的值是75,而不是,而不是3,因為第,因為第3行是非阻行是非阻塞賦值語句塞賦值語句“n = m”,該語句要等到本塊語句結(jié)束時,該語句要等到本塊語句結(jié)束時,n的的值才能改變。塊語句中的值才能改變。塊語句中的“(posedge clock)”是定時控制是定時控制敏感

42、函數(shù),表示時鐘信號敏感函數(shù),表示時鐘信號clock的上升沿到來的敏感時刻。的上升沿到來的敏感時刻。 module cont2(clk,con1,con2,con3);input clk;output con1,con2,con3;reg 2:0 con1,con2,con3;initial begin con1=0; con2=0; con3=0; endalways (posedge clk) begin con1=con1+1; con2=con2+1; con3=con3+1; endendmodulemodule cont3(clk,con1,con2,con3);input clk;

43、output con1,con2,con3;reg 2:0 con1,con2,con3;initial begin con1=0; con2=0; con3=0; endalways (posedge clk) begin con1=con1+1; con2=con2+1; con3=con3+1; endendmodulemodule cont3(clk,con1,con2,con3);input clk;output con1,con2,con3;reg 2:0 con1,con2,con3;initial begin con1=0; con2=0; con3=0; endalways

44、(posedge clk) begin con1=con1+1; con2=con1+1; con3=con2+1; endendmodulemodule cont3(clk,con1,con2,con3);input clk;output con1,con2,con3;reg 2:0 con1,con2,con3;initial begin con1=0; con2=0; con3=0; endalways (posedge clk) begin con1=con1+1; con2=con1+1; con3=con2+1; endendmodulemodule assig(clk,q1,12

45、);input clk;output 2:0 q1,q2;reg 2:0 q1,q2;Always (posedge clk) begin q1=q1+1; q2=q1; endendmodulemodule assig(clk,q1,12);input clk;output 2:0 q1,q2;reg 2:0 q1,q2;Always (posedge clk) begin q1=q1+1; q2=q1; endendmodule同步頭的產(chǎn)生深入認(rèn)識阻塞賦值和非阻塞式賦值的特點(OUT輸入S0/S1控制的D結(jié)果)錯誤的時序module lianxi8 (d0,d1,d2,d3,s1,s0,o

46、ut);output out;input d0,d1,d2,d3,s1,s0;reg 2:0 t ;reg out;always (d0,d1,d2,d3,s1,s0) begin t=0; if (s0=1) t=t+1; if (s1=1) t=t+2; case (t) 0:out=d0; 1:out=d1; 2:out=d2; 3:out=d3; default:out=d0; endcase end endmodule 正確的時序module lianxi8 (d0,d1,d2,d3,s1,s0,out);output out;input d0,d1,d2,d3,s1,s0;reg

47、2:0 t ;reg out;always (d0,d1,d2,d3,s1,s0) begin t=0; if (s0=1) t=t+1; if (s1=1) t=t+2; case (t) 0:out=d0; 1:out=d1; 2:out=d2; 3:out=d3; default:out=d0; / 假定值 endcase end endmodule module llll(clk1,clk2,out,t);output out,t;input clk1,clk2;reg 2:0 t ;reg 2:0 out;initial begin t=0; out=0; endalways (ne

48、gedge clk1) begin t=t+1; out=out+1; end endmodule module llll(clk1,clk2,out,t);output out,t;input clk1,clk2;reg 2:0 t ;reg 2:0 out;initial begin t=0; out=0; endalways (clk1) begin t=t+1; out=out+1; end endmodule 具有兩個邊沿的觸發(fā)時仿真有問題,實際的電路沒問題module llll(clk1,clk2,out,t);output out,t;input clk1,clk2;reg 2:

49、0 t ;reg 2:0 out;initial begin t=0; out=0; endalways (posedge clk1) begin t=t+1; end always (negedge clk2) begin out=out+1; end endmodule module llll(clk1,clk2,out,t);output out,t;input clk1,clk2;reg 2:0 t ;reg 2:0 out;initial begin t=0; out=0; endalways (posedge clk1) begin t=t+1; end always (neged

50、ge clk2) begin t=out+1; 此處是錯誤的 end endmodule module llll(clk1,clk2,out,t);output out,t;input clk1,clk2;reg 2:0 t ;reg 2:0 out;initial begin t=0; out=0; endalways (posedge clk1) begin t=t+1; end always (negedge clk2) begin out=t+1;此處是正確的 end endmodule 不建議使用,實際的電路無法形成,不具有可靠性module llll (clk,out);outpu

51、t out;input clk;reg 3:0 t ;reg 3:0 out;initial begin t=0; endalways * begin out=t+1; end endmodule 可以使用,實際的電路可以形成,具有可靠性module llll(clk1,clk2,out,t);output out,t;input clk1,clk2;reg 2:0 t ;reg 2:0 out;initial begin t=0; out=0; endalways ( clk1 or clk2) begin t=t+1; out=out+1; end endmodule module min

52、gan2(clk1,clk2,d0,d1,d2,d3,s1,s0,out,t);output out,t;input d0,d1,d2,d3,s1,s0,clk1,clk2;reg 2:0 t ;reg 2:0 out;always (posedge clk1 or negedge clk2,d0,d1,d2,d3,s1,s0) (方法不可取,clk未必是時鐘) begin t=t+1; out=out+1; end endmodule 前面的例子都使用阻塞賦值描述組合邏輯電路,這是設(shè)計這類電路最好的途徑。我們很自然地會提出這樣的問題,是否組合邏輯電路也能用非阻塞賦值來描述?回答是:在許多情況

53、下,這樣做是可以的,但是如果后面語句的賦值用到了前面語句賦值的結(jié)果,非阻塞賦值就會產(chǎn)生無意義的組合邏輯電路。如:因為用了非阻塞賦值,每一個后面的語句看到的Count值都是0,而不是前面一條語句生成的新的Count值。2022-4-1689【例【例4.5】上升沿觸發(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型

54、變量(由隱含規(guī)則定義)。型變量(由隱含規(guī)則定義)。 2022-4-16904.3.2 條件語句條件語句條件語句包含條件語句包含if語句和語句和case語句,它們都是順語句,它們都是順序語句,應(yīng)放在序語句,應(yīng)放在always塊中。塊中。1. if語句語句完整的完整的Verilog HDL的的if語句結(jié)構(gòu)如下:語句結(jié)構(gòu)如下:if (表達(dá)式表達(dá)式) begin 語句語句; endelse if (表達(dá)式表達(dá)式) begin 語句語句; endelse begin 語句語句; end2022-4-1691【例【例4.6】8線線-3線優(yōu)先編碼器的設(shè)計線優(yōu)先編碼器的設(shè)計 輸入輸入輸出輸出a0 a1 a2

55、a3 a4 a5 a6 a7y2 y1 y0 x x x x x x x 01 1 1x x x x x x 0 11 1 0 x x x x x 0 1 11 0 1x x x x 0 1 1 11 0 0 x x x 0 1 1 1 10 1 1x x 0 1 1 1 1 10 1 0 x 0 1 1 1 1 1 10 0 10 1 1 1 1 1 1 10 0 02022-4-1692Verilog HDL源代碼如下源代碼如下module example_4_6(y,a);input7:0a;output2:0y;reg2:0 y;always(a)beginif(a7)y=3b111;

56、 else if(a6)y=3b110; else 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;endendmodule2022-4-16932. case語句語句 case語句是一種多分支的條件語句,完整的語句是一種多分支的條件語句,完整的case語句的格式為語句的格式為case (表達(dá)式表達(dá)式) 選擇值選擇值1 : 語句語句1; 選擇值選擇值2 : 語句語句2; 選擇值選擇值n : 語句語句n; default :語句語句n+1;

57、 endcase2022-4-1694【例【例4.7】用】用case語句描述語句描述4選選1數(shù)據(jù)選擇器。數(shù)據(jù)選擇器。 abcds1s2數(shù)數(shù)據(jù)據(jù)選選擇擇器器zmoduleexample_4_7(z,a,b,c,d,s1,s2);inputs1,s2;inputa,b,c,d;outputz;regz;always(s1,s2) begin2022-4-1695case (s1,s2) 2b00:z=a;2b01:z=b;2b10:z=c;2b11:z=d; endcase endendmodule2022-4-1696 case語句還有兩種變體語句形式,即語句還有兩種變體語句形式,即casez和

58、和casex語句。語句。casez和和casex語句與語句與case語句的語句的格式完全相同,它們的區(qū)別是:在格式完全相同,它們的區(qū)別是:在casez語句中,語句中,如果分支表達(dá)式某些位的值為高阻如果分支表達(dá)式某些位的值為高阻z,那么對這些,那么對這些位的比較就不予以考慮,只關(guān)注其他位的比較結(jié)果。位的比較就不予以考慮,只關(guān)注其他位的比較結(jié)果。 在在casex語句中,把不予以考慮的位擴展到未知語句中,把不予以考慮的位擴展到未知x,即不考慮值為高阻即不考慮值為高阻z和未知和未知x的那些位,只關(guān)注其他的那些位,只關(guān)注其他位的比較結(jié)果。位的比較結(jié)果。 2022-4-16974.3.3 循環(huán)語句循環(huán)語句

59、 循環(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 語句語句; end2022-4-1698【例【例4.8】8位奇偶校驗器的描述。位奇偶校驗器的描述。 moduleqqqqqq(a,out);input7:0a;outputout;regout;integern=3b001;always(a) / a不能選最小時鐘不能選最小

60、時鐘begin out = 0; for (n = 0; n =b) max=a;elsemax=b; endendfunction2022-4-16111函數(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ù)的運算或轉(zhuǎn)換。例通過函數(shù)的調(diào)用來完成某些數(shù)據(jù)的運算或轉(zhuǎn)換。例如,調(diào)用例如,調(diào)用例4.9編制的求最大值的函數(shù)編制的求最大值的函數(shù)peak=max(data,peak);其中,其中,data和和peak是與函數(shù)定義的兩個參數(shù)是與函數(shù)定義的兩個參數(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中的最大值,并用

溫馨提示

  • 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

提交評論