計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)2-Verilog HDL語言初步_第1頁
計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)2-Verilog HDL語言初步_第2頁
計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)2-Verilog HDL語言初步_第3頁
計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)2-Verilog HDL語言初步_第4頁
計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)2-Verilog HDL語言初步_第5頁
已閱讀5頁,還剩231頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、P.1P.2硬件描述語言是一種用文本形式來描述和硬件描述語言是一種用文本形式來描述和設(shè)計(jì)電路的語言。是硬件設(shè)計(jì)人員和電子設(shè)計(jì)設(shè)計(jì)電路的語言。是硬件設(shè)計(jì)人員和電子設(shè)計(jì)自動化(自動化(EDAEDA)工具之間的界面。)工具之間的界面。P.3功能:功能:1 1)編寫設(shè)計(jì)文件;)編寫設(shè)計(jì)文件;2 2)建立電子系統(tǒng)行為級的仿真模型;)建立電子系統(tǒng)行為級的仿真模型;3 3)自動綜合以生成符合要求且在電路結(jié)構(gòu)上)自動綜合以生成符合要求且在電路結(jié)構(gòu)上可以實(shí)現(xiàn)的數(shù)字邏輯網(wǎng)表(可以實(shí)現(xiàn)的數(shù)字邏輯網(wǎng)表(NetlistNetlist););4 4)寫入到)寫入到CPLDCPLD和和FPGAFPGA器件中。器件中。P.4

2、1 1、電路設(shè)計(jì)的規(guī)模越來越大,復(fù)雜度越來越高。、電路設(shè)計(jì)的規(guī)模越來越大,復(fù)雜度越來越高。2 2、電子領(lǐng)域的競爭越來越激烈,開發(fā)周期要短。、電子領(lǐng)域的競爭越來越激烈,開發(fā)周期要短。3 3、調(diào)試電路速度快。不必修改電路原理圖原型,、調(diào)試電路速度快。不必修改電路原理圖原型,只需要對只需要對HDLHDL進(jìn)行修改。進(jìn)行修改。4 4、易于理解,易于維護(hù)。、易于理解,易于維護(hù)。5 5、有許多易于掌握的仿真、綜合和布局布線工具。、有許多易于掌握的仿真、綜合和布局布線工具。P.51. Bottom Up的設(shè)計(jì)方法的設(shè)計(jì)方法1.1.由基本門構(gòu)成各由基本門構(gòu)成各個組合與時(shí)序邏輯個組合與時(shí)序邏輯2.2.由邏輯單元組

3、成各由邏輯單元組成各個獨(dú)立的功能模塊個獨(dú)立的功能模塊3.3.由各個功能模塊由各個功能模塊連成一個完整系統(tǒng)連成一個完整系統(tǒng)4.4.完成整個系統(tǒng)測完成整個系統(tǒng)測試與性能分析試與性能分析REGISTERPCRAMALU&1P.6傳統(tǒng)的電路系統(tǒng)設(shè)計(jì)方法的步驟傳統(tǒng)的電路系統(tǒng)設(shè)計(jì)方法的步驟: :1.1.采用自下而上的設(shè)計(jì)方法采用自下而上的設(shè)計(jì)方法- -從狀態(tài)圖的簡化,寫出最從狀態(tài)圖的簡化,寫出最簡邏輯表達(dá)式簡邏輯表達(dá)式; ;2. 2. 采用通用邏輯元器件采用通用邏輯元器件- -通常采用通常采用7474系列和系列和CMOS4000CMOS4000系列的產(chǎn)品進(jìn)行設(shè)計(jì);系列的產(chǎn)品進(jìn)行設(shè)計(jì); 3.3.在系

4、統(tǒng)硬件設(shè)計(jì)的后期進(jìn)行調(diào)試和仿真在系統(tǒng)硬件設(shè)計(jì)的后期進(jìn)行調(diào)試和仿真 ; 只有在部分或全部硬件電路連接完畢,才可以進(jìn)行只有在部分或全部硬件電路連接完畢,才可以進(jìn)行電路調(diào)試,一旦考慮不周到,系統(tǒng)設(shè)計(jì)存在較大缺陷,電路調(diào)試,一旦考慮不周到,系統(tǒng)設(shè)計(jì)存在較大缺陷,則要重新設(shè)計(jì),使設(shè)計(jì)周期延長。則要重新設(shè)計(jì),使設(shè)計(jì)周期延長。 4.4.設(shè)計(jì)結(jié)果是一張電路圖設(shè)計(jì)結(jié)果是一張電路圖 ; 當(dāng)設(shè)計(jì)調(diào)試完畢后,形成電原理圖,該圖包括元器件當(dāng)設(shè)計(jì)調(diào)試完畢后,形成電原理圖,該圖包括元器件型號和信號之間的互連關(guān)系等等型號和信號之間的互連關(guān)系等等 P.7優(yōu)點(diǎn):優(yōu)點(diǎn):1.1.設(shè)計(jì)人員對于用這種方法進(jìn)行設(shè)計(jì)比較熟悉;設(shè)計(jì)人員對于用

5、這種方法進(jìn)行設(shè)計(jì)比較熟悉;2.2.實(shí)現(xiàn)各個子塊電路所需的時(shí)間短。實(shí)現(xiàn)各個子塊電路所需的時(shí)間短。缺點(diǎn):缺點(diǎn):1.1.一般來講,對系統(tǒng)的整體功能把握不足;一般來講,對系統(tǒng)的整體功能把握不足;2.2.實(shí)現(xiàn)整個系統(tǒng)的功能所需的時(shí)間長,因?yàn)楸仨毾葘?shí)現(xiàn)整個系統(tǒng)的功能所需的時(shí)間長,因?yàn)楸仨毾?將各個小模塊完成,使用這種方法對設(shè)計(jì)人員之將各個小模塊完成,使用這種方法對設(shè)計(jì)人員之間相互進(jìn)行協(xié)作有比較高的要求。間相互進(jìn)行協(xié)作有比較高的要求。P.82. Top down 的設(shè)計(jì)方法的設(shè)計(jì)方法4.4.工藝庫映射工藝庫映射3.3.各個功能模塊系各個功能模塊系統(tǒng)級聯(lián)合驗(yàn)證統(tǒng)級聯(lián)合驗(yàn)證2.2.各個功能模塊劃各個功能模塊劃分

6、,設(shè)計(jì)和驗(yàn)證分,設(shè)計(jì)和驗(yàn)證1. 1. 系統(tǒng)層:頂層模塊,系統(tǒng)層:頂層模塊,行為級描述,功能模行為級描述,功能模擬和性能評估擬和性能評估REGISTERPCRAMALU&1CPUP.9從系統(tǒng)層開始設(shè)計(jì)和優(yōu)化,保證了設(shè)計(jì)結(jié)果的從系統(tǒng)層開始設(shè)計(jì)和優(yōu)化,保證了設(shè)計(jì)結(jié)果的正確性正確性適合復(fù)雜的、大規(guī)模電路的設(shè)計(jì)適合復(fù)雜的、大規(guī)模電路的設(shè)計(jì)縮短設(shè)計(jì)周期縮短設(shè)計(jì)周期依賴于先進(jìn)的依賴于先進(jìn)的EDAEDA設(shè)計(jì)工具和環(huán)境,費(fèi)用昂貴設(shè)計(jì)工具和環(huán)境,費(fèi)用昂貴需要精確的工藝庫支持需要精確的工藝庫支持四四. .設(shè)計(jì)過程設(shè)計(jì)過程P.10文本編輯器文本編輯器 圖形編輯器圖形編輯器生成生成Verilog HDLVeri

7、log HDL源程序源程序邏輯綜合優(yōu)化邏輯綜合優(yōu)化FPGA/CPLDFPGA/CPLD布布線線/ /適配器適配器FPGA/CPLDFPGA/CPLD編編程、下載程、下載行為仿真行為仿真功能仿真功能仿真時(shí)序仿真時(shí)序仿真硬件測試硬件測試Verilog仿真器仿真器P.11 內(nèi)容簡介內(nèi)容簡介vVerilog HDLVerilog HDL與與C C語言的比較語言的比較vVerilogVerilog模塊的基本結(jié)構(gòu)模塊的基本結(jié)構(gòu)v邏輯功能的定義邏輯功能的定義P.12C語言語言Verilog語言語言functionmodule, functionif-then-elseif-then-elseforforwh

8、ilewhilecasecasebreakbreakdefinedefineprintfprintfintintVerilog HDL是在是在C C語言基礎(chǔ)上發(fā)展起來的,保留了語言基礎(chǔ)上發(fā)展起來的,保留了C C語語言的結(jié)構(gòu)特點(diǎn)言的結(jié)構(gòu)特點(diǎn)。P.13C C語言語言VerilogVerilog功能功能C C語言語言VerilogVerilog功能功能+ + +加加=大于等于大于等于- - -減減= 大于大于左移左移 右移右移P.14由關(guān)鍵詞由關(guān)鍵詞module和和endmodule定義定義module 模塊名模塊名 ( (端口列表端口列表) )端口定義端口定義數(shù)據(jù)類型說明數(shù)據(jù)類型說明邏輯功能定義邏

9、輯功能定義endmoduleP.151.模塊聲明模塊聲明module關(guān)鍵詞關(guān)鍵詞模塊名模塊名 模塊唯一的標(biāo)識符模塊唯一的標(biāo)識符端口列表端口列表是由輸入、輸出和雙向端口的端是由輸入、輸出和雙向端口的端口表達(dá)式按一定的次序組成的一口表達(dá)式按一定的次序組成的一個列表,它用來指明模塊所具有個列表,它用來指明模塊所具有的端口,這些端口用來與其它模的端口,這些端口用來與其它模塊進(jìn)行連接。塊進(jìn)行連接。P.162. 端口定義端口定義 又稱又稱“端口聲明語句端口聲明語句”,用來進(jìn)行端口方向的,用來進(jìn)行端口方向的說明。說明。 Verilog語言中有如下三種端口聲明語句語言中有如下三種端口聲明語句:1)input對

10、應(yīng)的端口是輸入端口對應(yīng)的端口是輸入端口2 )output對應(yīng)的端口是輸出端口對應(yīng)的端口是輸出端口3 )inout對應(yīng)的端口是雙向端口對應(yīng)的端口是雙向端口moduleinputoutputinoutP.173. 數(shù)據(jù)類型說明數(shù)據(jù)類型說明用來指定模塊內(nèi)用到的數(shù)據(jù)對用來指定模塊內(nèi)用到的數(shù)據(jù)對象的類型象的類型。wire連線型連線型wire A,B,C,D;/定義信號定義信號ADAD為為wirewire型型reg寄存器型寄存器型reg 3:0 out;/定義信號定義信號outout的數(shù)據(jù)類型為的數(shù)據(jù)類型為 4位位reg型型缺省數(shù)據(jù)類型為缺省數(shù)據(jù)類型為wire型型P.184. 邏輯功能定義邏輯功能定義 模

11、塊中最核心部分,有三種方法可在模塊中模塊中最核心部分,有三種方法可在模塊中產(chǎn)生邏輯。產(chǎn)生邏輯。例:例: assign a = b & c; 類似于在電路圖輸入方式下調(diào)入圖形符號完類似于在電路圖輸入方式下調(diào)入圖形符號完成設(shè)計(jì)。成設(shè)計(jì)。P.19元件例化的格式為元件例化的格式為:例:調(diào)用模塊的例子例:調(diào)用模塊的例子module MUX2-1 (out,a,b,sel););output out;input a,b,sel;not (sel_,sel);and (a1,a,sel _);and ( b1,b,sel);or (out,a1,b1);endmoduleP.20設(shè)計(jì)師自己設(shè)計(jì)的各種

12、模塊也可以看作元件,被頂層設(shè)計(jì)師自己設(shè)計(jì)的各種模塊也可以看作元件,被頂層文件或其他文件調(diào)用:文件或其他文件調(diào)用:端口列表有兩種表示方式,端口列表有兩種表示方式,第一種方式顯式給出端口與信號之間的對應(yīng)關(guān)系:第一種方式顯式給出端口與信號之間的對應(yīng)關(guān)系:第二種方法是隱式給出端口與信號之間的關(guān)系:第二種方法是隱式給出端口與信號之間的關(guān)系:這種方式下,例化的端口列表中信號的順序要與該模這種方式下,例化的端口列表中信號的順序要與該模塊定義中的端口列表中端口順序嚴(yán)格一致。而第一種方塊定義中的端口列表中端口順序嚴(yán)格一致。而第一種方法則無此要求。法則無此要求。P.21舉例:由舉例:由1 1位全加器組成的位全加器

13、組成的4 4位全加器位全加器module full_add (a,b,cin,sum,cout); input a,b,cin; output sum,cout; assign cout,sum = a+b+cin;endmodulemodule add4(sum,cout,a,b,cin); output 3:0 sum; output cout; input 3:0 a,b; input cin;P.22 wire cin1,cin2,cin3; full_add f0 (a0,b0,cin,sum0,cin1); full_add f1 (a1,b1,cin1,sum1,cin2); f

14、ull_add f2 (.a(a2),.b(b2),.cin(cin2), .sum(sum2),.cout(cin3); full_add f3 (.cin(cin3),.a(a3),.b(b3), .cout(cout),.sum(sum3);endmoduleP.23例:例:always (posedge clk) beginif(reset) out=0;else out=out+1; endP.24 在在Verilog模塊中,所有的過程塊(如模塊中,所有的過程塊(如initial、always)、持續(xù)賦值語句、實(shí)例引用之間都)、持續(xù)賦值語句、實(shí)例引用之間都是并行的;是并行的; 它們表

15、示的是一種通過變量名互相連接的關(guān)它們表示的是一種通過變量名互相連接的關(guān)系;系; 在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)系;系; 只有持續(xù)賦值語句只有持續(xù)賦值語句assign和實(shí)例引用語句可和實(shí)例引用語句可以獨(dú)立于過程塊而存在于模塊的功能定義部以獨(dú)立于過程塊而存在于模塊的功能定義部分。分。P.25 內(nèi)容簡介內(nèi)容簡介v 詞法詞法v 數(shù)據(jù)類型數(shù)據(jù)類型v 寄存器和存儲器寄存器和存儲器v 運(yùn)算符運(yùn)算符P.26 空白符(間隔符)空白符(間隔符)包括:空格包括:空格(b)、tab(t)(制表符制表符)、換行符、換行符(n)及換頁符。及換頁符??瞻追勾a錯落有致、閱讀方

16、便。綜合空白符使代碼錯落有致、閱讀方便。綜合時(shí),空白符被忽略。但是在字符串中空白和時(shí),空白符被忽略。但是在字符串中空白和制表符會被認(rèn)為是有意義的字符。制表符會被認(rèn)為是有意義的字符。P.27Verilog程序可以不分行:程序可以不分行:initial begin ina=3b001;inb=3b011; end也可以加入空白符采用多行編寫:也可以加入空白符采用多行編寫:initial begin ina=3b001; inb=3b011; endP.28 注釋注釋有兩種注釋形式:有兩種注釋形式:單行注釋:以單行注釋:以/開始到本行結(jié)束。開始到本行結(jié)束。多行注釋:以多行注釋:以/ /* *開始到開

17、始到* */ /結(jié)束。結(jié)束。/*舉例說明舉例說明*/module addbit(a,b,ci,sum,co);/輸入端口輸入端口input a;input b;.P.293. . 數(shù)字與字符串?dāng)?shù)字與字符串Verilog HDL有下面有下面4種基本邏輯狀態(tài):種基本邏輯狀態(tài):0低電平、邏輯低電平、邏輯0或或“假假”1高電平、邏輯高電平、邏輯1或或“真真”X未知狀態(tài)未知狀態(tài)Z高阻態(tài)高阻態(tài)X、Z不分不分大小寫大小寫P.301)整數(shù)整數(shù)有有4種進(jìn)制表示形式:種進(jìn)制表示形式: 二進(jìn)制整數(shù)(二進(jìn)制整數(shù)(b或或B) 十進(jìn)制整數(shù)(十進(jìn)制整數(shù)(d或或D) 十六進(jìn)制整數(shù)(十六進(jìn)制整數(shù)(h或或H) 八進(jìn)制整數(shù)(八進(jìn)制

18、整數(shù)(o或或O)常數(shù)按照其數(shù)值類型可以劃分為整數(shù)常數(shù)按照其數(shù)值類型可以劃分為整數(shù)和實(shí)數(shù)兩種和實(shí)數(shù)兩種P.31數(shù)字表達(dá)方式有以下數(shù)字表達(dá)方式有以下3種:種: 舉例:舉例:8b11000101 /位寬為位寬為8位的二進(jìn)制數(shù)位的二進(jìn)制數(shù)8hd5 /位寬為位寬為8位的十六進(jìn)制數(shù)位的十六進(jìn)制數(shù)d5H5o27 /位寬為位寬為5位的八進(jìn)制數(shù)位的八進(jìn)制數(shù)27OP.324B1X_01/4位二進(jìn)制數(shù)位二進(jìn)制數(shù)1X015HX/5位十六進(jìn)制數(shù)位十六進(jìn)制數(shù)XX4hz/4位十六進(jìn)制數(shù)位十六進(jìn)制數(shù)z8h 2 A/位寬與字符間允許有空格位寬與字符間允許有空格-8D5/8位二進(jìn)制數(shù),位二進(jìn)制數(shù),-5的補(bǔ)碼的補(bǔ)碼X可以用來定義十

19、六進(jìn)制數(shù)的可以用來定義十六進(jìn)制數(shù)的4位二進(jìn)制狀態(tài),位二進(jìn)制狀態(tài),八進(jìn)制數(shù)的八進(jìn)制數(shù)的3位,二進(jìn)制數(shù)的位,二進(jìn)制數(shù)的1位。位。Z的表示方的表示方法同法同X類似。類似。P.33數(shù)值常量中的下劃線數(shù)值常量中的下劃線“_”是為了增加可讀是為了增加可讀性,可以忽略。如性,可以忽略。如8b1100_0110表示表示8位二進(jìn)制位二進(jìn)制數(shù)。數(shù)。數(shù)值常量中的數(shù)值常量中的“?”表示高阻狀態(tài)。表示高阻狀態(tài)。例:例:2B1?表示?表示2位的二進(jìn)制數(shù)其中的一位是高位的二進(jìn)制數(shù)其中的一位是高 阻狀態(tài)。阻狀態(tài)。P.34如果沒有定義一個整數(shù)型的長度,數(shù)的如果沒有定義一個整數(shù)型的長度,數(shù)的長度為相應(yīng)值中定義的位數(shù)。下面是兩個例

20、子:長度為相應(yīng)值中定義的位數(shù)。下面是兩個例子:o721 /9位位2進(jìn)制位寬的八進(jìn)制數(shù)進(jìn)制位寬的八進(jìn)制數(shù)hAF /8位位2進(jìn)制位寬的十六進(jìn)制數(shù)進(jìn)制位寬的十六進(jìn)制數(shù)如果定義的長度比為常量指定的長度長,如果定義的長度比為常量指定的長度長,通常在左邊填通常在左邊填0補(bǔ)位。但是如果數(shù)最左邊一位補(bǔ)位。但是如果數(shù)最左邊一位為為x或或z,就相應(yīng)地用,就相應(yīng)地用x或或z在左邊補(bǔ)位。例如:在左邊補(bǔ)位。例如:10b10 左邊添左邊添0占位占位, 0000000010 10bx0 x1 左邊添左邊添x占位占位,xxxxxxx0 x1P.35如果定義的位寬比實(shí)際的位數(shù)小,那么最如果定義的位寬比實(shí)際的位數(shù)小,那么最左邊的

21、位相應(yīng)地被截?cái)啵鹤筮叺奈幌鄳?yīng)地被截?cái)啵?b1001_0011 /與與3b011相等相等5h0FFF /與與5h1F相等相等P.362)實(shí)數(shù))實(shí)數(shù)有兩種表示方法:有兩種表示方法: 十進(jìn)制表示方法十進(jìn)制表示方法 2.0 5.67 2. /非法:小數(shù)點(diǎn)兩側(cè)必須有數(shù)字非法:小數(shù)點(diǎn)兩側(cè)必須有數(shù)字 科學(xué)計(jì)數(shù)法科學(xué)計(jì)數(shù)法 43_5.1e2/43510.0(下劃線忽略)(下劃線忽略) 9.6E2/960.0 5E-4/0.0005P.37下面的幾個例子是無效的格式:下面的幾個例子是無效的格式:.253.7.E3.8e-2實(shí)數(shù)可以轉(zhuǎn)化為整數(shù),根據(jù)實(shí)數(shù)可以轉(zhuǎn)化為整數(shù),根據(jù)四舍五入的原則,而不是截四舍五入的原則,而

22、不是截?cái)嘣瓌t,當(dāng)將實(shí)數(shù)賦給一個斷原則,當(dāng)將實(shí)數(shù)賦給一個整數(shù)時(shí),這種轉(zhuǎn)化會自行發(fā)整數(shù)時(shí),這種轉(zhuǎn)化會自行發(fā)生,例如:在轉(zhuǎn)化成整數(shù)時(shí),生,例如:在轉(zhuǎn)化成整數(shù)時(shí),實(shí)數(shù)實(shí)數(shù)25.5和和25.8都變成都變成26,而,而25.2則變成則變成25。P.383)字符串字符串字符串是雙引號內(nèi)的字符序列,不能分成字符串是雙引號內(nèi)的字符序列,不能分成多行書寫。若字符串用做多行書寫。若字符串用做Verilog HDL表達(dá)式或表達(dá)式或賦值語句中的操作數(shù),則字符串被看作賦值語句中的操作數(shù),則字符串被看作8位似的位似的ASCII值序列,每一個字符對應(yīng)值序列,每一個字符對應(yīng)8位位ASCII值。值。P.39例例1:字符串變量聲明

23、:字符串變量聲明reg 8*12:1 stringvar;initial begin stringvar=“hello world!”; endP.40轉(zhuǎn)意符:轉(zhuǎn)意符:特殊字符表示特殊字符表示意義意義n換行符換行符tTab鍵鍵符號符號*符號符號*ddd3位八進(jìn)制表示的位八進(jìn)制表示的ASCII值值%符號符號%P.41Verilog HDL中的標(biāo)識符可以是任意一中的標(biāo)識符可以是任意一組字母、數(shù)字以及符號組字母、數(shù)字以及符號“$”和和“_ ”(下劃線)(下劃線)的組合,但是標(biāo)識符的第一個字符必須是字的組合,但是標(biāo)識符的第一個字符必須是字母或下劃線。標(biāo)識符是區(qū)分大小寫的。母或下劃線。標(biāo)識符是區(qū)分大小寫

24、的。count_A1_d2COUNTR56_6830 count/標(biāo)識符不允許以數(shù)字開頭標(biāo)識符不允許以數(shù)字開頭out */標(biāo)識符中不允許包含標(biāo)識符中不允許包含* *P.42Verilog HDL內(nèi)部已經(jīng)使用的詞稱為內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵關(guān)鍵字或保留字。字或保留字。這些關(guān)鍵字用戶不能隨便使用。這些關(guān)鍵字用戶不能隨便使用。在編寫程序時(shí),變量的定義不要與這些關(guān)鍵詞在編寫程序時(shí),變量的定義不要與這些關(guān)鍵詞沖突。沖突。所有的關(guān)鍵字都是小寫所有的關(guān)鍵字都是小寫P.43Verilog HDL中共有中共有19種數(shù)據(jù)類型。種數(shù)據(jù)類型。這里主要介紹這里主要介紹4種最基本的數(shù)據(jù)類型。種最基本的數(shù)據(jù)類型。net t

25、ype 相當(dāng)于硬件電路中的各種物理連線。相當(dāng)于硬件電路中的各種物理連線。P.44Net Type的變量不能存儲值,而且必須受到驅(qū)的變量不能存儲值,而且必須受到驅(qū)動器的驅(qū)動。動器的驅(qū)動。兩種驅(qū)動方式:兩種驅(qū)動方式:1)在結(jié)構(gòu)描述中將它連接到一個邏輯門或模塊)在結(jié)構(gòu)描述中將它連接到一個邏輯門或模塊的輸出端。的輸出端。2)用持續(xù)賦值語句)用持續(xù)賦值語句assign對其進(jìn)行賦值。對其進(jìn)行賦值。特點(diǎn):特點(diǎn):輸出的值緊跟輸入值的變化而變化。輸出的值緊跟輸入值的變化而變化。 當(dāng)沒有驅(qū)動源對其驅(qū)動時(shí),它將保持高阻態(tài)。當(dāng)沒有驅(qū)動源對其驅(qū)動時(shí),它將保持高阻態(tài)。P.45為了能夠精確地反映硬件電路中各種可為了能夠精確

26、地反映硬件電路中各種可能的物理信號連接特性,能的物理信號連接特性, Verilog HDL提供了提供了多種連線型數(shù)據(jù)。常用的有多種連線型數(shù)據(jù)。常用的有wire型和型和tri型。這型。這兩種變量都用于連接器件單元,它們具有相同兩種變量都用于連接器件單元,它們具有相同的語法格式和功能。的語法格式和功能。wire型變量:通常用來表示單個門驅(qū)動或連續(xù)型變量:通常用來表示單個門驅(qū)動或連續(xù) 賦值語句驅(qū)動的連線型數(shù)據(jù)。賦值語句驅(qū)動的連線型數(shù)據(jù)。tri型變量:通常用來表示多驅(qū)動器驅(qū)動的連線型變量:通常用來表示多驅(qū)動器驅(qū)動的連線 型數(shù)據(jù)。型數(shù)據(jù)。P.46wire型變量的格式:型變量的格式:wire n-1:0

27、數(shù)據(jù)名數(shù)據(jù)名1,數(shù)據(jù)名,數(shù)據(jù)名2,數(shù)據(jù)名,數(shù)據(jù)名n;wirewire型數(shù)據(jù)確認(rèn)符;型數(shù)據(jù)確認(rèn)符;n-1:0代表該數(shù)據(jù)的位寬。缺省狀態(tài),位寬代表該數(shù)據(jù)的位寬。缺省狀態(tài),位寬 默認(rèn)值為默認(rèn)值為1。這里的位是二進(jìn)制的位。這里的位是二進(jìn)制的位。數(shù)據(jù)名數(shù)據(jù)名若一次定義多個數(shù)據(jù),數(shù)據(jù)名之間若一次定義多個數(shù)據(jù),數(shù)據(jù)名之間 用逗號隔開。用逗號隔開。聲明語句的最后用分號表示語句的結(jié)束。聲明語句的最后用分號表示語句的結(jié)束。P.47例例1. 定義數(shù)據(jù)總線寬定義數(shù)據(jù)總線寬8位,地址總線寬位,地址總線寬20位。位。wire7:0 databus;/ databus寬寬8位位wire19:0 addrbus;/ addr

28、bus寬寬20位位或:或:wire8:1 databus;wire20:1 addrbus;P.48例例2. 多位多位wire 型數(shù)據(jù)可按下面方法使用型數(shù)據(jù)可按下面方法使用wire7:0 in, out;/定義兩個定義兩個8位位wire型向量型向量assign out=in;/ assign 就是持續(xù)賦值語句就是持續(xù)賦值語句例例3. 可只使用多位數(shù)據(jù)中的幾位,但要注意可只使用多位數(shù)據(jù)中的幾位,但要注意 位寬。位寬。wire7:0 out;wire3:0 in;assign out5:2=in;P.49說明:說明:1) wire 型變量常用來表示以型變量常用來表示以assign語句賦值語句賦值的

29、的組合邏輯組合邏輯信號。信號。2)輸入)輸入/輸出信號缺省時(shí)自動定義為輸出信號缺省時(shí)自動定義為wire 型。型。3)對綜合器而言,)對綜合器而言, wire 型信號的每一位可以型信號的每一位可以取取0,1,X或或Z中的任意值。中的任意值。P.50寄存器是數(shù)據(jù)存儲單元的抽象。寄存器型寄存器是數(shù)據(jù)存儲單元的抽象。寄存器型數(shù)據(jù)對應(yīng)的是具有狀態(tài)保持作用的硬件電路,數(shù)據(jù)對應(yīng)的是具有狀態(tài)保持作用的硬件電路,如觸發(fā)器、鎖存器等。如觸發(fā)器、鎖存器等。寄存器型數(shù)據(jù)和連線型數(shù)據(jù)的區(qū)別:寄存器型數(shù)據(jù)和連線型數(shù)據(jù)的區(qū)別:寄存器型數(shù)據(jù)保持最后一次的賦值。而寄存器型數(shù)據(jù)保持最后一次的賦值。而連線型數(shù)據(jù)需有持續(xù)的驅(qū)動。連線

30、型數(shù)據(jù)需有持續(xù)的驅(qū)動。P.51reg 常用的寄存器型變量常用的寄存器型變量reg型數(shù)據(jù)的格式:型數(shù)據(jù)的格式:reg n-1:0 數(shù)據(jù)名數(shù)據(jù)名1,數(shù)據(jù)名,數(shù)據(jù)名2,數(shù)據(jù)名數(shù)據(jù)名n;例例1. reg a, b; /定義了兩個定義了兩個reg型變量型變量reg 7:0 qout; /定義定義qout為為8位寬的位寬的reg 型變量型變量P.52說明:說明:1) reg型數(shù)據(jù)常用來表示型數(shù)據(jù)常用來表示“always”模塊內(nèi)的指模塊內(nèi)的指定信號,常代表觸發(fā)器。定信號,常代表觸發(fā)器。在在“always”模塊內(nèi)被模塊內(nèi)被賦值的每一個信號都必須定義成賦值的每一個信號都必須定義成reg型型。2)對于)對于reg

31、型數(shù)據(jù),其賦值語句的作用就如同型數(shù)據(jù),其賦值語句的作用就如同改變一組觸發(fā)器的存儲單元的值。改變一組觸發(fā)器的存儲單元的值。3)若)若reg型數(shù)據(jù)未初始化(即缺?。?,則初始型數(shù)據(jù)未初始化(即缺?。?,則初始值為不定狀態(tài)。值為不定狀態(tài)。P.53在在Verilog HDL中,用中,用parameter來定義來定義常量,即用它來定義變量的位寬及延時(shí)等。常量,即用它來定義變量的位寬及延時(shí)等。格式:格式:;parameter常用來定義延遲時(shí)間和變量寬度。常用來定義延遲時(shí)間和變量寬度。P.54例:例:parameter e=2,f=9;/定義兩個常數(shù)參數(shù)定義兩個常數(shù)參數(shù)parameter r=5.7; /定義定

32、義r為一個實(shí)型參數(shù)為一個實(shí)型參數(shù)parameter a_delay=(r+f)/2;/用常數(shù)表達(dá)式賦值用常數(shù)表達(dá)式賦值P.55用用reg類型變量可構(gòu)成寄存器和存儲器類型變量可構(gòu)成寄存器和存儲器 寄存器寄存器reg 7:0 mybyte;A= mybyte6;/將將mybyte的第的第6位賦值給位賦值給AB= mybyte5:2;/將將mybyte的第的第5,4,3,2 位賦值給位賦值給BP.56例:例:reg 7:0 a,b;reg 3:0 c;reg d;d=a7&b7;/位選擇位選擇c=a7:4+b3:0;/域選擇域選擇寄存器可以寄存器可以取任意長度。取任意長度。寄存器中的寄存器中

33、的值通常被解值通常被解釋為無符號釋為無符號數(shù)。數(shù)。P.572. 存儲器存儲器 Verilog HDL通過對通過對reg型變量建立數(shù)組來型變量建立數(shù)組來對存儲器建模,可以描述對存儲器建模,可以描述RAM型存儲器、型存儲器、ROM存儲器和存儲器和reg 文件。數(shù)組中的每一個單元文件。數(shù)組中的每一個單元通過一個數(shù)組索引進(jìn)行尋址。在通過一個數(shù)組索引進(jìn)行尋址。在Verilog語言中語言中沒有多維數(shù)組存在,沒有多維數(shù)組存在,memory型數(shù)據(jù)是通過擴(kuò)型數(shù)據(jù)是通過擴(kuò)展展reg型數(shù)據(jù)的地址范圍來生成的。型數(shù)據(jù)的地址范圍來生成的。P.58格式:格式:reg n-1:0 :定義了存儲器中每一個存儲單元的:定義了存

34、儲器中每一個存儲單元的大小。大小。m-1:0:定義了該存儲器中有多少個這樣的單:定義了該存儲器中有多少個這樣的單元。元。P.59例例1. 定義一個存儲器,定義一個存儲器,1024個字節(jié),每個字節(jié)個字節(jié),每個字節(jié) 8位。位。reg 7:0 mymem1023:0;例例2. 存儲器與寄存器的區(qū)別存儲器與寄存器的區(qū)別reg n-1:0 rega;/一個一個n位的寄存器位的寄存器reg meman-1:0; /n個一位寄存器組成的存?zhèn)€一位寄存器組成的存 儲器組儲器組reg 3:0 Amem63:0;P.60說明:說明:1)數(shù)組的維數(shù)不能大于)數(shù)組的維數(shù)不能大于2。2)存儲器屬于寄存器數(shù)組類型。連線數(shù)據(jù)

35、類)存儲器屬于寄存器數(shù)組類型。連線數(shù)據(jù)類 型沒有相應(yīng)的存儲器類型。型沒有相應(yīng)的存儲器類型。3)單個寄存器說明既能夠用于說明寄存器類)單個寄存器說明既能夠用于說明寄存器類 型,也可以用于說明存儲器類型。型,也可以用于說明存儲器類型。P.61例:例:parameter ADDR_SIZE = 16 , WORD_SIZE = 8;reg WORD_SIZE:1 RamPar ADDR_SIZE- 1 : 0,DataReg;RamPar存儲器,是存儲器,是16個個8位寄存器數(shù)組;位寄存器數(shù)組;DataReg8位寄存器。位寄存器。P.624)在賦值語句中需要注意如下區(qū)別:)在賦值語句中需要注意如下區(qū)

36、別:因此在存儲器被賦值時(shí),需要定因此在存儲器被賦值時(shí),需要定 義一個索引。下例說明它們之間的不同。義一個索引。下例說明它們之間的不同。reg 5:1 Dig; / Dig為為5位寄存器。位寄存器。. . .Dig = 5b11011; reg BOg5:1; / Bog為為5個個1位寄存器組成的的存儲器組位寄存器組成的的存儲器組. . .Bog = 5b11011; P.63有一種存儲器賦值的方法是分別對存儲器中有一種存儲器賦值的方法是分別對存儲器中的每個字賦值。例如:的每個字賦值。例如:reg 3:0 Xrom 4:1;Xrom1 = 4hA;Xrom2 = 4h8;Xrom3 = 4hF;

37、Xrom4 = 4h2;P.64Verilog語言參考了語言參考了C語言中大多數(shù)運(yùn)算語言中大多數(shù)運(yùn)算符的語義和句法。但符的語義和句法。但Verilog中沒有增中沒有增1(i+)和減和減1 (i )運(yùn)算符。運(yùn)算符。1. 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 +(一元加和二元加)(一元加和二元加) (一元減和二元減)(一元減和二元減) *(乘)(乘) /(除)(除) %(取模)(取模)P.65說明說明:1)兩個整數(shù)相除,結(jié)果值要略去小數(shù)部分,只)兩個整數(shù)相除,結(jié)果值要略去小數(shù)部分,只取整數(shù)部分;取整數(shù)部分;2)取模運(yùn)算時(shí),結(jié)果的符號位采用模運(yùn)算式里)取模運(yùn)算時(shí),結(jié)果的符號位采用模運(yùn)算式里第一個操作數(shù)的符號位;第一

38、個操作數(shù)的符號位;模運(yùn)算表達(dá)式模運(yùn)算表達(dá)式 結(jié)果結(jié)果說明說明10 % 42余數(shù)為余數(shù)為212 % 30整數(shù)整數(shù)-11 % 5-1余數(shù)為余數(shù)為-1P.663)在進(jìn)行算術(shù)運(yùn)算操作時(shí),如果某個操作數(shù))在進(jìn)行算術(shù)運(yùn)算操作時(shí),如果某個操作數(shù)有不確定的值有不確定的值X或或Z,那么整個結(jié)果為,那么整個結(jié)果為X。例:例:b10 x1 + b01111 結(jié)果為不確定數(shù)結(jié)果為不確定數(shù)bxxxxx4)無符號數(shù)和有符號數(shù))無符號數(shù)和有符號數(shù) 若操作數(shù)為寄存器型或連線型,或基數(shù)若操作數(shù)為寄存器型或連線型,或基數(shù)格式表示形式的整數(shù)則為無符號數(shù);格式表示形式的整數(shù)則為無符號數(shù); 若為整型或?qū)嵭停瑒t可以是有符號數(shù)。若為整型或

39、實(shí)型,則可以是有符號數(shù)。P.67例:例:reg 5:0 Bar;integer Tab;. . .Bar = -6d12;/寄存器變量寄存器變量Bar的十進(jìn)制數(shù)為的十進(jìn)制數(shù)為 52,向量值為,向量值為110100。Tab = -6d12;/整數(shù)整數(shù)Tab的十進(jìn)制數(shù)為的十進(jìn)制數(shù)為-12,位,位 形式為形式為110100。 P.685)算術(shù)操作結(jié)果的長度)算術(shù)操作結(jié)果的長度算術(shù)表達(dá)式結(jié)果的長度由最長的操作數(shù)決算術(shù)表達(dá)式結(jié)果的長度由最長的操作數(shù)決定。在賦值語句下,算術(shù)操作結(jié)果的長度由操定。在賦值語句下,算術(shù)操作結(jié)果的長度由操作符左端目標(biāo)長度決定。作符左端目標(biāo)長度決定。reg 3:0 Arc, Bar

40、, Crt;reg 5:0 Frx;. . . Arc = Bar + Crt;Frx = Bar + Crt;P.69例:算術(shù)運(yùn)算符應(yīng)用的一個例子。例:算術(shù)運(yùn)算符應(yīng)用的一個例子。module arithmetic (a,b,out1,out2,out3, out4,out5) input 2:0 a ,b; output 3:0 out1 ; output 4:0 out3 ; output 2:0 out2 , out4,out5 ; reg 3:0 out1 ; reg 4:0 out3 ; reg 2:0 out2 , out4,out5 ;P.70 always (a or b)be

41、gin out1=a+b ; out2=a-b ; out3=a*b ; out4=a/b ; out5=a%b ;endendmoduleP.71邏輯運(yùn)算符有邏輯運(yùn)算符有3種種: & (邏輯與邏輯與) | (邏輯或邏輯或) !(邏輯非邏輯非)P.722) !是單目運(yùn)算符,只要求一個操作數(shù)。!是單目運(yùn)算符,只要求一個操作數(shù)。例:例: !(ab) , ! a 3)在一個邏輯表達(dá)式中,如果包含多個邏輯)在一個邏輯表達(dá)式中,如果包含多個邏輯運(yùn)算符,運(yùn)算符,如:!如:!a&b|(xy)&c按以下優(yōu)先次序:按以下優(yōu)先次序: ! & | 邏輯運(yùn)算符中,邏輯運(yùn)算符中,“&am

42、p; ”和和“|”的優(yōu)先級的優(yōu)先級別低于關(guān)系運(yùn)算符,別低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算高于算術(shù)運(yùn)算符。符。P.73 按位取反;按位取反; |按位或;按位或; & 按位與;按位與; 按位異或;按位異或;在在Verilog語言中有語言中有7種位邏輯運(yùn)算符:種位邏輯運(yùn)算符:或或 按位異或非;按位異或非;&按位與非;按位與非;|按位或非;按位或非;P.74例:若例:若A=5b11001;B=5b10101,則:,則:A=5b00110A&B= 5b10001A|B= 5b11101AB= 5b01100說明:說明:1)按位運(yùn)算符中,除了)按位運(yùn)算符中,除了“”為單目運(yùn)算符外,

43、為單目運(yùn)算符外,其余均為雙目運(yùn)算符。其余均為雙目運(yùn)算符。P.752)對于雙目運(yùn)算符,如果操作數(shù)長度不相等)對于雙目運(yùn)算符,如果操作數(shù)長度不相等, 長度較小的操作數(shù)在最左側(cè)添長度較小的操作數(shù)在最左側(cè)添0補(bǔ)位。補(bǔ)位。3)無論單目按位運(yùn)算符還是雙目按位運(yùn)算符,)無論單目按位運(yùn)算符還是雙目按位運(yùn)算符,經(jīng)過按位運(yùn)算后,原來的操作數(shù)有幾位,所得經(jīng)過按位運(yùn)算后,原來的操作數(shù)有幾位,所得結(jié)果仍為幾位。結(jié)果仍為幾位。4)不要將邏輯運(yùn)算符和按位運(yùn)算符相混淆。)不要將邏輯運(yùn)算符和按位運(yùn)算符相混淆。P.76Verilog關(guān)系運(yùn)算符有:關(guān)系運(yùn)算符有:(大于)(大于)=(大于等于)(大于等于)=(小于等于)(小于等于)P

44、.77例:關(guān)系運(yùn)算符應(yīng)用的一個例子。例:關(guān)系運(yùn)算符應(yīng)用的一個例子。module relation (a,b,out1,out2,out3,out4) input 2:0 a ,b; output out1 ,out2,out3,out4 ; reg out1,out2,out3,out4 ; always (a or b)begin out1=ab ; out2=ab ; if (a=b) out4=1 else out4=0 endendmoduleP.78說明:說明:1)在進(jìn)行關(guān)系運(yùn)算時(shí),若聲明的關(guān)系為)在進(jìn)行關(guān)系運(yùn)算時(shí),若聲明的關(guān)系為“假假”,則返回值是則返回值是“0”;若聲明的關(guān)系為;

45、若聲明的關(guān)系為“真真”,則返,則返回值是回值是“1”;2)若某個操作數(shù)的值不定,則關(guān)系是模糊的,)若某個操作數(shù)的值不定,則關(guān)系是模糊的,返回值是不定值。返回值是不定值。3)所有關(guān)系運(yùn)算符有著相同的優(yōu)先級別。關(guān))所有關(guān)系運(yùn)算符有著相同的優(yōu)先級別。關(guān)系運(yùn)算符的優(yōu)先級別低于算術(shù)運(yùn)算符。系運(yùn)算符的優(yōu)先級別低于算術(shù)運(yùn)算符。P.79等式運(yùn)算符有等式運(yùn)算符有4種種 = =(等于)(等于) !=(不等于)(不等于) = = =(全等)(全等) != =(非全等)(非全等)P.80“=”與與“=”的區(qū)別:的區(qū)別:= 0 1 x z01 0 x x10 1 x xxx x x xzx x x x=0 1 x z0

46、1 0 0 010 1 0 0 x0 0 1 0z0 0 0 1相等運(yùn)算符真值表相等運(yùn)算符真值表P.81 單目運(yùn)算符,也有與、或、非運(yùn)算。包括下單目運(yùn)算符,也有與、或、非運(yùn)算。包括下面幾種:面幾種: &與與 &與非與非 | 或或 | 或非或非 異或異或 ,同或同或P.82其與、或、非運(yùn)算規(guī)則類似于位運(yùn)算符的運(yùn)算其與、或、非運(yùn)算規(guī)則類似于位運(yùn)算符的運(yùn)算規(guī)則,但其運(yùn)算過程不同。規(guī)則,但其運(yùn)算過程不同。對操作數(shù)的相應(yīng)位進(jìn)行與、或、非運(yùn)算,操作對操作數(shù)的相應(yīng)位進(jìn)行與、或、非運(yùn)算,操作數(shù)是幾位數(shù),則運(yùn)算結(jié)果是幾位。數(shù)是幾位數(shù),則運(yùn)算結(jié)果是幾位。位運(yùn)算:位運(yùn)算:縮位運(yùn)算:縮位運(yùn)算:對單個操

47、作數(shù)進(jìn)行與、或、非遞推運(yùn)算,最后對單個操作數(shù)進(jìn)行與、或、非遞推運(yùn)算,最后的運(yùn)算結(jié)果是的運(yùn)算結(jié)果是1位的二進(jìn)制數(shù)。位的二進(jìn)制數(shù)。P.83具體運(yùn)算過程:具體運(yùn)算過程:第一步:先將操作數(shù)的第第一步:先將操作數(shù)的第1位與第位與第2位進(jìn)行與、位進(jìn)行與、 或、非運(yùn)算;或、非運(yùn)算;第二步:將運(yùn)算結(jié)果與第第二步:將運(yùn)算結(jié)果與第3位進(jìn)行與、或、非位進(jìn)行與、或、非 運(yùn)算,依次類推,直至最后一位。運(yùn)算,依次類推,直至最后一位。例:例:reg3:0 a; reg b; b=&a;若:若:A=5b11001則:則:&A=0; |A=1;P.84 右移右移 n 或或 ana代表要進(jìn)行移位的操作數(shù);代表要進(jìn)

48、行移位的操作數(shù);n 代表要移幾位代表要移幾位這兩種移位運(yùn)算都用這兩種移位運(yùn)算都用0來填補(bǔ)移出的空位來填補(bǔ)移出的空位P.85module shift; reg3:0 start, result;initialbigin start=1; result= (start2);endendmoduleP.86? : 條件運(yùn)算符,有三個操作數(shù),與條件運(yùn)算符,有三個操作數(shù),與C 語言相同。語言相同。格式:格式:信號信號=條件條件 ? 表達(dá)式表達(dá)式1 : 表達(dá)式表達(dá)式2;當(dāng)條件成立時(shí),信號取表達(dá)式當(dāng)條件成立時(shí),信號取表達(dá)式1的值,反的值,反之取表達(dá)式之取表達(dá)式2的值。的值。P.87 module add_o

49、r_sub(a,b,op,result); parameter ADD=1b0; input 7:0 a,b; input op; output 7:0 result; assign result=(op= ADD)?a+b:a-b; endmoduleP.88這是一個特殊的運(yùn)算符,這一運(yùn)算符可以將兩這是一個特殊的運(yùn)算符,這一運(yùn)算符可以將兩個或更多個信號的某些位并接起來進(jìn)行運(yùn)算操個或更多個信號的某些位并接起來進(jìn)行運(yùn)算操作。其使用方法是把某些信號的某些位詳細(xì)地作。其使用方法是把某些信號的某些位詳細(xì)地列出來,中間用逗號分開,最后用大括號括起列出來,中間用逗號分開,最后用大括號括起來表示一個整體信號

50、。來表示一個整體信號。P.89例:例:wire 7:0 Dbus; wire 11:0 Abus; assign Dbus 7:4 = Dbus 0, Dbus 1, Dbus2, Dbus3;/以反轉(zhuǎn)的順序?qū)⒌投艘苑崔D(zhuǎn)的順序?qū)⒌投?位賦位賦給高端給高端4位。位。 assign Dbus = Dbus 3:0, Dbus 7:4;/高高4位與低位與低4位交換。位交換。P.90由于非定長常數(shù)的長度未知由于非定長常數(shù)的長度未知, 不允許連接不允許連接非定長常數(shù)。非定長常數(shù)。例如例如, 下列式子非法:下列式子非法:Dbus,5 /不允許連接操作非定長常數(shù)。不允許連接操作非定長常數(shù)。P.91運(yùn)算符優(yōu)先

51、級排序:運(yùn)算符優(yōu)先級排序:! * / %+ - = != = !=& |&|?:高優(yōu)先級別高優(yōu)先級別低優(yōu)先級別低優(yōu)先級別P.92 內(nèi)容簡介內(nèi)容簡介v 過程語句過程語句v 塊語句塊語句v 賦值語句賦值語句v 條件語句條件語句v 循環(huán)語句循環(huán)語句v 編譯向?qū)дZ句編譯向?qū)дZ句P.93Verilog HDL是由模塊組成的是由模塊組成的行為描述方式行為描述方式結(jié)構(gòu)描述方式結(jié)構(gòu)描述方式模塊模塊數(shù)據(jù)流描述方式數(shù)據(jù)流描述方式P.94過程塊過程塊過程語句過程語句語句塊語句塊initialalways過程性賦值語句過程性賦值語句高級程序語句高級程序語句過程賦值語句過程賦值語句過程持續(xù)賦值過程持續(xù)賦

52、值語句語句條件分支語句條件分支語句循環(huán)控制語句循環(huán)控制語句1. always過程語句過程語句P.95格式格式:always (敏感信號表達(dá)式)(敏感信號表達(dá)式)begin/過程賦值過程賦值/if-else,case,casex,casez選擇語句選擇語句/while,repeat,for循環(huán)循環(huán)/task,function調(diào)用調(diào)用end過程塊過程塊可選項(xiàng)可選項(xiàng)P.961)敏感信號)敏感信號只要表達(dá)式中某個信號發(fā)生變只要表達(dá)式中某個信號發(fā)生變化,就會引發(fā)塊內(nèi)語句的執(zhí)行。化,就會引發(fā)塊內(nèi)語句的執(zhí)行。 (a) /當(dāng)信號當(dāng)信號a的值發(fā)生變化時(shí)的值發(fā)生變化時(shí) (a b) /當(dāng)信號當(dāng)信號a或或b的值發(fā)生變

53、化時(shí)的值發(fā)生變化時(shí) ( clock) /當(dāng)當(dāng)clock上升沿到來時(shí)上升沿到來時(shí) ( clock) /當(dāng)當(dāng)clock下降沿到來時(shí)下降沿到來時(shí) ( clk reset)/當(dāng)當(dāng)clk的上升沿或的上升沿或reset的下降沿到來時(shí)的下降沿到來時(shí)P.97 mux4_1(out,in0,in1,in2,in3,sel); out; in0,in1,in2,in3 ; 1:0 sel; out; (in0 in1 in2 in3) (sel)2b00:out=in0 ;2b01:out=in1 ;P.982b10:out=in2 ;2b11:out=in3 ; :out=2bx ; 敏感信號分類敏感信號分類邊

54、沿敏感型邊沿敏感型電平敏感型電平敏感型wait語句語句P.992) posedge 與與 negedge 關(guān)鍵字關(guān)鍵字例例1:同步置數(shù)、同步清零的計(jì)數(shù)器:同步置數(shù)、同步清零的計(jì)數(shù)器 count(out,data,load,reset,clk);7:0 out; 7:0 data ; load , clk , reset; 7:0 out; ( clk) /clk上升沿觸發(fā)上升沿觸發(fā)P.100 (!reset) out=8h00 ;/同步清零,低有效同步清零,低有效 (load)out=data ;/同步預(yù)置同步預(yù)置 out=out+1 ;/計(jì)數(shù)計(jì)數(shù)例例2:時(shí)鐘信號為:時(shí)鐘信號為clk,clea

55、r為異步清零信號為異步清零信號 ( clk clear) ( clk clear)P.101錯誤的描述錯誤的描述: ( clk clear) (clear)out=0; out=in; /應(yīng)改為應(yīng)改為if (!clear)P.1023)用)用過程塊實(shí)現(xiàn)過程塊實(shí)現(xiàn)功能功能v 敏感信號表達(dá)式內(nèi)不能包含敏感信號表達(dá)式內(nèi)不能包含posedge 與與 negedge 關(guān)鍵字關(guān)鍵字v 組合邏輯的所有輸入信號都要作為組合邏輯的所有輸入信號都要作為“信號名信號名” 出現(xiàn)在敏感信號表達(dá)式中。出現(xiàn)在敏感信號表達(dá)式中。P.103 three_and(f,a,b,c); f; a,b,c ; f; (a or b)

56、f=a&b&c;/應(yīng)改為應(yīng)改為 (a or b or c)P.1044)用)用過程塊實(shí)現(xiàn)過程塊實(shí)現(xiàn)功能功能v 敏感信號表達(dá)式內(nèi)可以有敏感信號表達(dá)式內(nèi)可以有posedge 與與 negedge 關(guān)鍵字,也可以只有信號名;關(guān)鍵字,也可以只有信號名;v 不要求所有輸入信號都出現(xiàn)在敏感信號列表不要求所有輸入信號都出現(xiàn)在敏感信號列表的的“信號名信號名”中。中。P.105module D_FF(Q,D,CLK);output Q;input D,CLK;reg Q;always (negedge CLK) begin Q = D; endendmodule例:時(shí)鐘下降沿觸發(fā)的例:時(shí)鐘下降沿

57、觸發(fā)的D觸發(fā)器觸發(fā)器P.106說明:說明:1)過程語句后面可以是一個敏感事件列過程語句后面可以是一個敏感事件列表表,該敏感事件列表的作用是用來激活該敏感事件列表的作用是用來激活過程語句的執(zhí)行;過程語句的執(zhí)行;2)如果)如果過程塊中的敏感事件列表缺省,過程塊中的敏感事件列表缺省,則認(rèn)為觸發(fā)條件始終被滿足,則認(rèn)為觸發(fā)條件始終被滿足, 過程塊過程塊將無條件地循環(huán)執(zhí)行下去,直到遇到將無條件地循環(huán)執(zhí)行下去,直到遇到或或系統(tǒng)任務(wù)為止;系統(tǒng)任務(wù)為止;3)進(jìn)行仿真時(shí),)進(jìn)行仿真時(shí), 過程塊是從模擬過程塊是從模擬0開始開始執(zhí)行的,且執(zhí)行的,且語句在仿真過程中是不斷語句在仿真過程中是不斷重復(fù)執(zhí)行的;重復(fù)執(zhí)行的;P

58、.1074)敏感事件列表由一個或多個)敏感事件列表由一個或多個“事件表達(dá)式事件表達(dá)式”構(gòu)成,事件表達(dá)式說明了啟動塊內(nèi)語句執(zhí)行構(gòu)成,事件表達(dá)式說明了啟動塊內(nèi)語句執(zhí)行時(shí)的觸發(fā)條件,時(shí)的觸發(fā)條件,。Verilog規(guī)定:只要這些事件表達(dá)式所代表的規(guī)定:只要這些事件表達(dá)式所代表的多個觸發(fā)條件中有一個成立,就啟動塊內(nèi)語多個觸發(fā)條件中有一個成立,就啟動塊內(nèi)語句的執(zhí)行。句的執(zhí)行。5)。6)過程塊和過程塊和過程塊都不能嵌套使過程塊都不能嵌套使用。用。P.108例:不恰當(dāng)使用例:不恰當(dāng)使用always語句而產(chǎn)生仿真死鎖的語句而產(chǎn)生仿真死鎖的情況。情況。alwaysbegin clk=clk;endalwaysbe

59、gin #50 clk=clk;end加上時(shí)延控制加上時(shí)延控制“#50”產(chǎn)生一個周期為產(chǎn)生一個周期為100的的方波信號方波信號 當(dāng)敏感信號列表缺省當(dāng)敏感信號列表缺省時(shí),語句塊將一直執(zhí)時(shí),語句塊將一直執(zhí)行下去,這就可能在行下去,這就可能在仿真時(shí)產(chǎn)生仿真死鎖仿真時(shí)產(chǎn)生仿真死鎖情況情況 2. initial過程塊過程塊P.109過程塊過程塊P.110說明:說明:1) initial語句后面沒有語句后面沒有“敏感信號列表敏感信號列表”;2) initial過程塊中的語句是從模擬過程塊中的語句是從模擬0開始執(zhí)開始執(zhí) 行,它行,它中只執(zhí)行一次,在執(zhí)行中只執(zhí)行一次,在執(zhí)行 完后,該完后,該initial過程

60、塊就被掛起,不再執(zhí)過程塊就被掛起,不再執(zhí) 行;行;3) initial過程塊的使用主要是面向功能模擬過程塊的使用主要是面向功能模擬 的,通常的,通常。P.111例例1:用:用initial過程語句對測試變量過程語句對測試變量A、B、C 賦值。賦值。 timescale 1ns/100ps module test; reg A,B,C; initialbeginA=0;B=1;C=0;#50 A=1;B=0;P.112 #50 A= 0;C=1; #50 B=1; #50 B=0;C=0; #50 $finish; endendmoduleP.113例例2:initial過程塊用于對變量和存儲器進(jìn)行初過程塊用于對變量和存儲器進(jìn)行初始化。始化。module register_initialize(memory);inout areg;in

溫馨提示

  • 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

提交評論