第3章 Verilog設(shè)計(jì)入門~0BD71_第1頁(yè)
第3章 Verilog設(shè)計(jì)入門~0BD71_第2頁(yè)
第3章 Verilog設(shè)計(jì)入門~0BD71_第3頁(yè)
第3章 Verilog設(shè)計(jì)入門~0BD71_第4頁(yè)
第3章 Verilog設(shè)計(jì)入門~0BD71_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 Verilog設(shè)計(jì)入門 主要內(nèi)容主要內(nèi)容u 3.1 組合電路的組合電路的Verilog描述描述u 3.2 時(shí)序模塊及其時(shí)序模塊及其Verilog表述表述u 3.3 二進(jìn)制計(jì)數(shù)器及其二進(jìn)制計(jì)數(shù)器及其Verilog設(shè)計(jì)設(shè)計(jì)Verilog概述概述u什么是什么是Verilog HDL?uVerilog HDL(Hardware Discription Language)是一種硬件描述語(yǔ)言,用于是一種硬件描述語(yǔ)言,用于從算法級(jí)、門級(jí)到開(kāi)關(guān)級(jí)的多種抽象設(shè)從算法級(jí)、門級(jí)到開(kāi)關(guān)級(jí)的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。計(jì)層次的數(shù)字系統(tǒng)建模。Verilog的歷史的歷史u最初是于最初是于1983年由年由Gate

2、way Design Automation公司公司(后被后被Cadence收購(gòu)收購(gòu))為其模擬為其模擬器產(chǎn)品開(kāi)發(fā)的硬件建模語(yǔ)言器產(chǎn)品開(kāi)發(fā)的硬件建模語(yǔ)言u(píng)1990年,年,Cadence公司成立公司成立OVI(Open Verilog International)組織來(lái)負(fù)責(zé)推廣組織來(lái)負(fù)責(zé)推廣Verilogu1995年,年,IEEE制定了制定了Verilog HDL標(biāo)準(zhǔn),即標(biāo)準(zhǔn),即IEEE Std 1364 - 1995Verilog與與VHDLu目前,設(shè)計(jì)者使用目前,設(shè)計(jì)者使用Verilog和和VHDL的情的情況況美國(guó):美國(guó):Verilog: 60%, VHDL: 40%臺(tái)灣:臺(tái)灣:Verilog:

3、 50%, VHDL: 50%3.1 組合電路的組合電路的Verilog描述描述 3.1.1 2選選1多路選擇器及其多路選擇器及其Verilog描述描述 3.1 組合電路的Verilog描述 3.1.1 2選選1多路選擇器及其多路選擇器及其Verilog描述描述 absy3.1 組合電路的Verilog描述 3.1.1 2選選1多路選擇器及其多路選擇器及其Verilog描述描述 端口在模塊名字端口在模塊名字后的括號(hào)中列出后的括號(hào)中列出端口等價(jià)于硬件端口等價(jià)于硬件的引腳的引腳(pin)端口可以說(shuō)明為端口可以說(shuō)明為input, output及及inoutmodule是層次化設(shè)計(jì)是層次化設(shè)計(jì)的基本構(gòu)

4、件的基本構(gòu)件模塊內(nèi)部的邏輯模塊內(nèi)部的邏輯功能和電路結(jié)構(gòu)功能和電路結(jié)構(gòu)Assign關(guān)鍵字引關(guān)鍵字引導(dǎo)導(dǎo) 的賦值語(yǔ)句的賦值語(yǔ)句 標(biāo)示符標(biāo)示符 module(模塊模塊)umodule能夠表示:能夠表示:物理塊,如物理塊,如IC或或ASIC單元單元邏輯塊,如一個(gè)邏輯塊,如一個(gè)CPU設(shè)計(jì)的設(shè)計(jì)的ALU部分部分整個(gè)系統(tǒng)整個(gè)系統(tǒng)u每一個(gè)模塊的描述從關(guān)鍵詞每一個(gè)模塊的描述從關(guān)鍵詞module開(kāi)始,有一個(gè)開(kāi)始,有一個(gè)名稱名稱(如(如SN74LS74,DFF,ALU等等),由關(guān)鍵詞等等),由關(guān)鍵詞endmodule結(jié)束。結(jié)束。module是層是層次化設(shè)計(jì)的基次化設(shè)計(jì)的基本構(gòu)件本構(gòu)件邏輯描述放在邏輯描述放在modu

5、le內(nèi)部?jī)?nèi)部模塊端口模塊端口(module ports)端口在模塊名字端口在模塊名字后的括號(hào)中列出后的括號(hào)中列出端口可以說(shuō)明為端口可以說(shuō)明為input, output及及inout端口等價(jià)于硬件端口等價(jià)于硬件的引腳的引腳(pin)u注意模塊的名稱注意模塊的名稱DFF,端口列表及說(shuō)明,端口列表及說(shuō)明u模塊通過(guò)端口與外部通信模塊通過(guò)端口與外部通信賦值語(yǔ)句賦值語(yǔ)句 條件操作符條件操作符 關(guān)鍵字關(guān)鍵字 賦值語(yǔ)句和條件操作符賦值語(yǔ)句和條件操作符條件運(yùn)算符條件運(yùn)算符三三目運(yùn)算符目運(yùn)算符信號(hào)信號(hào) = = 條件條件?表達(dá)式表達(dá)式1 1:表達(dá)式表達(dá)式2 2 條件運(yùn)算符為條件運(yùn)算符為?:?: 用法:用法:當(dāng)條件為

6、當(dāng)條件為真真,信號(hào)取表,信號(hào)取表達(dá)式達(dá)式1 1的值;為的值;為假假,則,則取表達(dá)式取表達(dá)式2 2的值。的值。關(guān)鍵字關(guān)鍵字u關(guān)鍵字關(guān)鍵字事先定義好的確認(rèn)符,用來(lái)組織語(yǔ)事先定義好的確認(rèn)符,用來(lái)組織語(yǔ)言結(jié)構(gòu);或者用于定義言結(jié)構(gòu);或者用于定義Verilog HDLVerilog HDL提供的門提供的門元件(如元件(如andand,notnot,oror,bufbuf)。)。u用用小寫(xiě)小寫(xiě)字母定義!字母定義! 如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wir

7、e。用戶程序中的變量、用戶程序中的變量、節(jié)點(diǎn)等名稱不能與關(guān)節(jié)點(diǎn)等名稱不能與關(guān)鍵字同名!鍵字同名!Verilog HDL關(guān)鍵字關(guān)鍵字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparamete

8、rpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisableVerilog HDL關(guān)鍵字關(guān)鍵字(續(xù))(續(xù))tri0tri1 vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamst

9、rengthstrong0 strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortrireg標(biāo)識(shí)符標(biāo)識(shí)符 所謂標(biāo)識(shí)別符就是用戶為程序描述中的所謂標(biāo)識(shí)別符就是用戶為程序描述中的Verilog Verilog 對(duì)對(duì)象所起的名字。象所起的名字。 標(biāo)識(shí)符必須以英語(yǔ)字母(標(biāo)識(shí)符必須以英語(yǔ)字母(a-z, A-Za-z, A-Z)起頭,或者用)起頭,或者用下橫線符(下橫線符( _ _ )起頭。其中可以包含數(shù)字、)起頭。其中可以包含數(shù)字、$ $符和符和下橫線符。下橫線符。 標(biāo)識(shí)符最長(zhǎng)可以達(dá)到標(biāo)識(shí)符最長(zhǎng)可以達(dá)到10231023個(gè)字符

10、。個(gè)字符。 模塊名、端口名和實(shí)例名都是標(biāo)識(shí)符。模塊名、端口名和實(shí)例名都是標(biāo)識(shí)符。 VerilogVerilog語(yǔ)言是語(yǔ)言是大小寫(xiě)敏感大小寫(xiě)敏感的,因此的,因此sel sel 和和 SEL SEL 是是兩個(gè)不同的標(biāo)識(shí)符。兩個(gè)不同的標(biāo)識(shí)符。合法和非法標(biāo)識(shí)符合法和非法標(biāo)識(shí)符 shift_reg_a shift_reg_a busa_indexbusa_index bus263bus26334net 34net a a* *b_net b_net n263n263Verilog Verilog 是大小寫(xiě)敏感的。所有的是大小寫(xiě)敏感的。所有的Verilog Verilog 關(guān)鍵詞都是小寫(xiě)的。關(guān)鍵詞都是小寫(xiě)

11、的。非法的非法的合法的合法的1、不能用數(shù)字開(kāi)頭、不能用數(shù)字開(kāi)頭2、不能含有非字母符號(hào)、不能含有非字母符號(hào)*3、不能含有非字母符號(hào)、不能含有非字母符號(hào)空格和注釋u Verilog 是一種格式很自由的語(yǔ)言。是一種格式很自由的語(yǔ)言。u 空格在文本中起一個(gè)分離符的作用,別的空格在文本中起一個(gè)分離符的作用,別的沒(méi)有其沒(méi)有其 他用處。他用處。u 單行注釋符用單行注釋符用 /* 與與C 語(yǔ)言一致語(yǔ)言一致u多行注釋符用多行注釋符用 /* - */ 與與C 語(yǔ)言一致語(yǔ)言一致規(guī)范的書(shū)寫(xiě)格式規(guī)范的書(shū)寫(xiě)格式u規(guī)定了文本布局、命名和注釋的約定,以提規(guī)定了文本布局、命名和注釋的約定,以提高源代碼的高源代碼的可讀性可讀性和

12、和可維護(hù)性可維護(hù)性。 最頂層的最頂層的module_endmodule模塊放在最左模塊放在最左側(cè)側(cè) 低一層次的語(yǔ)句向右靠一個(gè)低一層次的語(yǔ)句向右靠一個(gè)TAB鍵的距離鍵的距離 同一語(yǔ)句關(guān)鍵字對(duì)齊同一語(yǔ)句關(guān)鍵字對(duì)齊文件取名和存盤文件取名和存盤u 文件的擴(kuò)展名為文件的擴(kuò)展名為.vu 文件名與該程序的模塊名一致文件名與該程序的模塊名一致u 文件取名大小寫(xiě)敏感文件取名大小寫(xiě)敏感u 文件名不應(yīng)該用中文文件名不應(yīng)該用中文 和數(shù)字和數(shù)字u 文件存在英文名字的文件夾中,不要存文件存在英文名字的文件夾中,不要存在根目錄或桌面上在根目錄或桌面上Verilog HDL程序是由程序是由模塊模塊構(gòu)成的。每個(gè)模塊嵌套在構(gòu)成的

13、。每個(gè)模塊嵌套在module和和endmodule聲明語(yǔ)句中。模塊是可以進(jìn)行層次嵌套的。聲明語(yǔ)句中。模塊是可以進(jìn)行層次嵌套的。每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出端口,然后對(duì)模每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出端口,然后對(duì)模塊的功能進(jìn)行行為邏輯描述。塊的功能進(jìn)行行為邏輯描述。程序書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以程序書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分多行寫(xiě)。分多行寫(xiě)。除了除了endmodule語(yǔ)句、語(yǔ)句、begin_end語(yǔ)句和語(yǔ)句和fork_join語(yǔ)句外,語(yǔ)句外,每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)。每個(gè)語(yǔ)句和數(shù)據(jù)定義的最后必須有分號(hào)。可用可用/*.*/和

14、和/.對(duì)程序的任何部分作注釋。加上必要的注對(duì)程序的任何部分作注釋。加上必要的注釋,以增強(qiáng)程序的可讀性和可維護(hù)性。釋,以增強(qiáng)程序的可讀性和可維護(hù)性。3.1 組合電路的Verilog描述 3.1.2 4選選1多路選擇器及其多路選擇器及其case語(yǔ)句表述方式語(yǔ)句表述方式 3.1 組合電路的Verilog描述 主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型Verilog 有幾種主要的數(shù)據(jù)類型:有幾種主要的數(shù)據(jù)類型: Nets 表示器件之間的物理連接表示器件之間的物理連接, 稱為網(wǎng)絡(luò)連接類型稱為網(wǎng)絡(luò)連接類型 Register 表示抽象的儲(chǔ)存單元,稱為寄存器變量類型表示抽象的儲(chǔ)存單元,稱為寄存器變量類型 Parameter

15、 表示運(yùn)行時(shí)的常數(shù),稱為參數(shù)類型表示運(yùn)行時(shí)的常數(shù),稱為參數(shù)類型 寄存器陣列寄存器陣列主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型-Net-Net型變量定義型變量定義Nets(網(wǎng)絡(luò)連線):(網(wǎng)絡(luò)連線):由模塊或門驅(qū)動(dòng)的連線。由模塊或門驅(qū)動(dòng)的連線。驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻驅(qū)動(dòng)端信號(hào)的改變會(huì)立刻傳遞到輸出的連線上。傳遞到輸出的連線上。 如果不明確地說(shuō)明連接如果不明確地說(shuō)明連接是何種類型,應(yīng)該是是何種類型,應(yīng)該是指指 wire 類型。類型。例如:右圖上,例如:右圖上,selb的改的改變,會(huì)自動(dòng)地立刻影響或變,會(huì)自動(dòng)地立刻影響或門的輸出。門的輸出。 netsabslselbselansloutwire型變量型變量最常用的

16、最常用的netsnets型變量,常用來(lái)表示以型變量,常用來(lái)表示以assignassign語(yǔ)句賦值的語(yǔ)句賦值的組合組合邏輯信號(hào)。邏輯信號(hào)。模塊中的輸入模塊中的輸入/ /輸出信號(hào)類型輸出信號(hào)類型缺省缺省為為wirewire型。型??捎米鋈魏畏匠淌降妮斎?,或可用做任何方程式的輸入,或“assign”assign”語(yǔ)句和實(shí)例語(yǔ)句和實(shí)例元件的輸出。元件的輸出。wirewire 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, ,2, ,數(shù)據(jù)名數(shù)據(jù)名n;n;wiren-1:0wiren-1:0 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, ,2, ,數(shù)據(jù)名數(shù)據(jù)名m;m;或或 wiren:1wiren:1 數(shù)據(jù)名數(shù)據(jù)名1,1,

17、數(shù)據(jù)名數(shù)據(jù)名2, ,2, ,數(shù)據(jù)名數(shù)據(jù)名m;m;每條總線每條總線位寬為位寬為n共有共有m條總線條總線wirewire型向量(總線)型向量(總線)主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型-reg-reg型變量定義型變量定義 寄存器(寄存器(register)類型變量)類型變量 register 型變量能保持其值,直到它被賦于新的值。型變量能保持其值,直到它被賦于新的值。 register 型變量常用于行為建模,產(chǎn)生測(cè)試的激勵(lì)信號(hào)型變量常用于行為建模,產(chǎn)生測(cè)試的激勵(lì)信號(hào) 常用行為語(yǔ)句結(jié)構(gòu)來(lái)給寄存器類型的變量賦值。常用行為語(yǔ)句結(jié)構(gòu)來(lái)給寄存器類型的變量賦值。 如果信號(hào)變量是在過(guò)程塊如果信號(hào)變量是在過(guò)程塊 (ini

18、tial(initial塊塊 或或 alwaysalways塊塊) )中中被賦值的,必須把它聲明為寄存器類型變量被賦值的,必須把它聲明為寄存器類型變量abslselbselansloutreg_areg_selreg_bureg型變量型變量定義定義在過(guò)程塊中被賦值的信號(hào)在過(guò)程塊中被賦值的信號(hào),往往往往代表觸發(fā)器代表觸發(fā)器,但,但不一定不一定就是觸發(fā)器(也可以是組合邏輯信號(hào))!就是觸發(fā)器(也可以是組合邏輯信號(hào))!regreg 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, ,2, ,數(shù)據(jù)名數(shù)據(jù)名n;n;regn-1:0regn-1:0 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, ,2, ,數(shù)據(jù)名數(shù)據(jù)名m;m;或

19、或 regn:1regn:1 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, ,2, ,數(shù)據(jù)名數(shù)據(jù)名m;m;每個(gè)向量每個(gè)向量位寬為位寬為n共有共有m個(gè)個(gè)reg型向量型向量 例例 reg4:1 regc,regd; / reg4:1 regc,regd; / /regc,regdregc,regd為為4 4位寬的位寬的regreg型向量型向量regreg型向量(總線)型向量(總線)主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型-reg型變量定義型變量定義u用于行為建模用于行為建模u兩種語(yǔ)句:兩種語(yǔ)句:pinitial 只能執(zhí)行一次只能執(zhí)行一次palways 循環(huán)執(zhí)行循環(huán)執(zhí)行u一個(gè)模塊內(nèi)可包含任意多個(gè)一個(gè)模塊內(nèi)可包含任意多個(gè)

20、initial 和和always語(yǔ)句,語(yǔ)句,它們相互并行執(zhí)行,即,它們的執(zhí)行順序與其在模塊它們相互并行執(zhí)行,即,它們的執(zhí)行順序與其在模塊中的順序無(wú)關(guān)中的順序無(wú)關(guān)過(guò)程語(yǔ)句結(jié)構(gòu)過(guò)程語(yǔ)句結(jié)構(gòu)always語(yǔ)句語(yǔ)句過(guò)程語(yǔ)句結(jié)構(gòu)過(guò)程語(yǔ)句結(jié)構(gòu)alwaysalways語(yǔ)句語(yǔ)句ualways語(yǔ)句反復(fù)執(zhí)行語(yǔ)句反復(fù)執(zhí)行例:例: always #5 Clock=Clock;u由事件控制的順序過(guò)程的由事件控制的順序過(guò)程的always語(yǔ)句語(yǔ)句例:例:module HalfAdder(A, B, Sum, Carry); input A, B; output Sum, Carry; reg Sum,Carry; alway

21、s(A or B) begin Sum=AB; Carry=A&B; end endmoduleu電平敏感事件控制電平敏感事件控制例:例:always(A or B)u邊沿觸發(fā)事件控制邊沿觸發(fā)事件控制例:例:always(negedge Clock)過(guò)程語(yǔ)句結(jié)構(gòu)過(guò)程語(yǔ)句結(jié)構(gòu)always語(yǔ)句語(yǔ)句塊語(yǔ)句塊語(yǔ)句 begin_end塊語(yǔ)句用來(lái)將多個(gè)語(yǔ)句組織在一起,使得他們?cè)谡Z(yǔ)法上如同一個(gè)語(yǔ)句。塊語(yǔ)句用來(lái)將多個(gè)語(yǔ)句組織在一起,使得他們?cè)谡Z(yǔ)法上如同一個(gè)語(yǔ)句。塊語(yǔ)句分為兩類:塊語(yǔ)句分為兩類:u順序塊:語(yǔ)句置于關(guān)鍵字順序塊:語(yǔ)句置于關(guān)鍵字begin和和end之間,塊中的語(yǔ)句以順序方式執(zhí)行。之間,塊中的

22、語(yǔ)句以順序方式執(zhí)行。u并行塊:關(guān)鍵字并行塊:關(guān)鍵字fork和和join之間的是并行塊語(yǔ)句,塊中的語(yǔ)句并行執(zhí)行。之間的是并行塊語(yǔ)句,塊中的語(yǔ)句并行執(zhí)行。Fork和和join語(yǔ)句常用于語(yǔ)句常用于test bench描述。這是因?yàn)榭梢砸黄鸾o出矢量及描述。這是因?yàn)榭梢砸黄鸾o出矢量及其絕對(duì)時(shí)間,而不必描述所有先前事件的時(shí)間。其絕對(duì)時(shí)間,而不必描述所有先前事件的時(shí)間。u在順序塊中,語(yǔ)句一條接一條地計(jì)算執(zhí)行。在順序塊中,語(yǔ)句一條接一條地計(jì)算執(zhí)行。u在并行塊中,所有語(yǔ)句在各自的延遲之后立即計(jì)算執(zhí)行。在并行塊中,所有語(yǔ)句在各自的延遲之后立即計(jì)算執(zhí)行。begin #5 a = 3; #5 a = 5; #5 a

23、= 4;endfork #5 a = 3; #15 a = 4; #10 a = 5;join上面的兩個(gè)例子在功能上是等價(jià)的。上面的兩個(gè)例子在功能上是等價(jià)的。Fork-join例子里的賦值故意打亂順序是例子里的賦值故意打亂順序是為了強(qiáng)調(diào)順序是沒(méi)有關(guān)系的。為了強(qiáng)調(diào)順序是沒(méi)有關(guān)系的。注意注意fork-join塊是典型的不可綜合語(yǔ)句,并且在一些仿真器時(shí)效率較差。塊是典型的不可綜合語(yǔ)句,并且在一些仿真器時(shí)效率較差。 塊語(yǔ)句 begin_end條件語(yǔ)句-case語(yǔ)句casecase語(yǔ)句是測(cè)試表達(dá)式與另外一系列表達(dá)式分支是否匹配語(yǔ)句是測(cè)試表達(dá)式與另外一系列表達(dá)式分支是否匹配的一個(gè)多路條件語(yǔ)句。的一個(gè)多路條

24、件語(yǔ)句。uCase語(yǔ)句進(jìn)行逐位比較以求完全匹配(包括語(yǔ)句進(jìn)行逐位比較以求完全匹配(包括x和和z)。)。uDefault語(yǔ)句可選,在沒(méi)有任何條件成立時(shí)執(zhí)行。語(yǔ)句可選,在沒(méi)有任何條件成立時(shí)執(zhí)行。此時(shí)如果未說(shuō)明此時(shí)如果未說(shuō)明default,Verilog不執(zhí)行任何動(dòng)作。不執(zhí)行任何動(dòng)作。u多個(gè)多個(gè)default語(yǔ)句是非法的。語(yǔ)句是非法的。條件語(yǔ)句-case語(yǔ)句case , :賦值語(yǔ)句或空語(yǔ)句;:賦值語(yǔ)句或空語(yǔ)句; , :賦值語(yǔ)句或空語(yǔ)句;:賦值語(yǔ)句或空語(yǔ)句; default:賦值語(yǔ)句或空語(yǔ)句;:賦值語(yǔ)句或空語(yǔ)句;endcase重要內(nèi)容:重要內(nèi)容:u1、使用、使用default語(yǔ)句是一個(gè)很好的編程習(xí)慣,

25、特別是用于檢測(cè)語(yǔ)句是一個(gè)很好的編程習(xí)慣,特別是用于檢測(cè)x和和z。u2、Casez和和casex為為case語(yǔ)句的變體,允許比較無(wú)關(guān)語(yǔ)句的變體,允許比較無(wú)關(guān)(dont-care)值。值。ucase表達(dá)式或表達(dá)式或case項(xiàng)中的任何位為無(wú)關(guān)值時(shí),在比較過(guò)程中該位不項(xiàng)中的任何位為無(wú)關(guān)值時(shí),在比較過(guò)程中該位不予考慮。予考慮。u在在casez語(yǔ)句中,語(yǔ)句中,? 和和 z 被當(dāng)作無(wú)關(guān)值。被當(dāng)作無(wú)關(guān)值。u在在casex語(yǔ)句中,語(yǔ)句中,?,z 和和 x 被當(dāng)作無(wú)關(guān)值。被當(dāng)作無(wú)關(guān)值。數(shù)字表達(dá)數(shù)字表達(dá)(1 1)整數(shù)型常量整數(shù)型常量(即(即整常數(shù)整常數(shù))的)的4 4種進(jìn)制表示形式:種進(jìn)制表示形式:二進(jìn)制整數(shù)(二進(jìn)制

26、整數(shù)(b b或或B B););十進(jìn)制整數(shù)(十進(jìn)制整數(shù)(d d或或D D););十六進(jìn)制整數(shù)(十六進(jìn)制整數(shù)(h h或或H H););八進(jìn)制整數(shù)(八進(jìn)制整數(shù)(o o或或O O)。)。數(shù)字表達(dá)數(shù)字表達(dá)v注:注:這里位寬指對(duì)應(yīng)二進(jìn)制數(shù)的寬度。這里位寬指對(duì)應(yīng)二進(jìn)制數(shù)的寬度。u 整常數(shù)的整常數(shù)的3種表達(dá)方式:種表達(dá)方式:數(shù)據(jù)表達(dá)數(shù)據(jù)表達(dá)(2 2)x x和和z z值值x x表示不定值,表示不定值,z z表示高阻值;表示高阻值;8b1001xxxx或8 h9x8b1010zzzz或8 haz每個(gè)字符代表的二進(jìn)制數(shù)的寬度取決于所用的進(jìn)制;每個(gè)字符代表的二進(jìn)制數(shù)的寬度取決于所用的進(jìn)制;當(dāng)用二進(jìn)制表示時(shí),已標(biāo)明位寬

27、的數(shù)若用當(dāng)用二進(jìn)制表示時(shí),已標(biāo)明位寬的數(shù)若用x x或或z z表示某些位,則只有在表示某些位,則只有在最左邊最左邊的的x x或或z z具有具有擴(kuò)展性擴(kuò)展性!為清晰可見(jiàn),最好直接寫(xiě)出每一位的值!為清晰可見(jiàn),最好直接寫(xiě)出每一位的值! 例例8bzx = 8bzzzz_zzzx 8bzx = 8bzzzz_zzzx 例例8b1x = 8b0000_001x8b1x = 8b0000_001x“?”是是z z的另一種表示符號(hào),建議在的另一種表示符號(hào),建議在casecase語(yǔ)句中使用語(yǔ)句中使用?表示高阻態(tài)表示高阻態(tài)z 例例 casez (select) casez (select) 4b?1: out =

28、a; 4b?1: out = a; 4b?1?: out = b; 4b?1?: out = b; 4b?1?: out = c; 4b?1?: out = c; 4b1?: out = d; 4b1?: out = d; endcase endcase3.1 組合電路的Verilog描述 3.1.3 4選選1多路選擇器及其數(shù)據(jù)流描述方式多路選擇器及其數(shù)據(jù)流描述方式 按位邏輯操作符按位邏輯操作符雙雙目運(yùn)算符目運(yùn)算符單單目運(yùn)算符目運(yùn)算符位運(yùn)算其結(jié)果與操作數(shù)位數(shù)相同。位運(yùn)算符中的雙目運(yùn)算符要位運(yùn)算其結(jié)果與操作數(shù)位數(shù)相同。位運(yùn)算符中的雙目運(yùn)算符要求對(duì)兩個(gè)操作數(shù)的相應(yīng)位求對(duì)兩個(gè)操作數(shù)的相應(yīng)位逐位逐位進(jìn)

29、行運(yùn)算。進(jìn)行運(yùn)算。兩個(gè)不同長(zhǎng)度的操作數(shù)進(jìn)行位運(yùn)算時(shí),將自動(dòng)按兩個(gè)不同長(zhǎng)度的操作數(shù)進(jìn)行位運(yùn)算時(shí),將自動(dòng)按右右端端對(duì)齊對(duì)齊,位,位數(shù)少的操作數(shù)會(huì)在高位用數(shù)少的操作數(shù)會(huì)在高位用0 0補(bǔ)齊。補(bǔ)齊。 例例 若若A = 5b11001A = 5b11001,B = 3b101B = 3b101, 則則A & B = A & B = (5b110015b11001)& &(5b5b0000101101)= 5b00001 = 5b00001 運(yùn)算結(jié)果為運(yùn)算結(jié)果為1 1位的邏輯值位的邏輯值1 1或或0 0。 等于運(yùn)算符等于運(yùn)算符(= =)(= =)和全等運(yùn)算符和全等運(yùn)算符(=

30、= =)(= = =)的的區(qū)別區(qū)別: :使用使用等于等于運(yùn)算符時(shí),兩個(gè)操作數(shù)必須運(yùn)算符時(shí),兩個(gè)操作數(shù)必須逐位逐位相等相等, ,結(jié)果才為結(jié)果才為1 1;若某些位為若某些位為x x或或z z,則結(jié)果為,則結(jié)果為0 0。使用使用全等全等運(yùn)算符時(shí),若兩個(gè)操作數(shù)的相應(yīng)位完全運(yùn)算符時(shí),若兩個(gè)操作數(shù)的相應(yīng)位完全一致一致(如同(如同是是1 1,或同是,或同是0 0,或同是,或同是x x,或同是,或同是z z), ,則結(jié)果為則結(jié)果為1 1;否則為;否則為0 0。 所有的等式運(yùn)算符優(yōu)先級(jí)別相同。所有的等式運(yùn)算符優(yōu)先級(jí)別相同。 = = = = =和!和!= = =運(yùn)算符常用于運(yùn)算符常用于casecase表達(dá)式的判別

31、,又稱為表達(dá)式的判別,又稱為“casecase等等式運(yùn)算符式運(yùn)算符”。等式運(yùn)算符等式運(yùn)算符-雙雙目運(yùn)算符等式運(yùn)算符等式運(yùn)算符-雙雙目運(yùn)算符u 例例 if( if(A A = = = 1bx1bx) $display(“AisX”) $display(“AisX”);/當(dāng)當(dāng)A A為不為不定值時(shí),定值時(shí), 式(式(A A = = = = 1bx1bx)的運(yùn)算結(jié)果為)的運(yùn)算結(jié)果為x x,則該語(yǔ)句不執(zhí),則該語(yǔ)句不執(zhí)行行 if(if(A A = = = = = 1bx1bx) $display(“AisX”) $display(“AisX”);/當(dāng)當(dāng)A A為為不定值時(shí),式(不定值時(shí),式(A A = =

32、= = = = 1bx1bx)的運(yùn)算結(jié)果為)的運(yùn)算結(jié)果為1 1,該語(yǔ)句執(zhí),該語(yǔ)句執(zhí)行行表表3-1 “= =”的真值表的真值表表表3-2 “= = =”的真值表的真值表等于等于運(yùn)算的結(jié)果運(yùn)算的結(jié)果可能為可能為1或或0全等于全等于運(yùn)算的運(yùn)算的結(jié)果只有結(jié)果只有1或或0賦值語(yǔ)句賦值語(yǔ)句u 分為兩類:分為兩類:連續(xù)賦值語(yǔ)句,過(guò)程賦值語(yǔ)句連續(xù)賦值語(yǔ)句,過(guò)程賦值語(yǔ)句 (1 1)連續(xù)連續(xù)賦值語(yǔ)句賦值語(yǔ)句assignassign語(yǔ)句,用于對(duì)語(yǔ)句,用于對(duì)wirewire型變量型變量賦值,是描述賦值,是描述組合邏輯組合邏輯最常用的方法之一。最常用的方法之一。 例例 assign c=a&b; /a assi

33、gn c=a&b; /a、b b、c c均為均為wirewire型變量型變量u描述的是描述的是組合邏輯,并行操作組合邏輯,并行操作u在在過(guò)程塊外部使用過(guò)程塊外部使用。u用于用于netnet驅(qū)動(dòng)。驅(qū)動(dòng)。u在等式左邊可以有一個(gè)簡(jiǎn)單延時(shí)說(shuō)明。在等式左邊可以有一個(gè)簡(jiǎn)單延時(shí)說(shuō)明。只限于在表達(dá)式左邊用只限于在表達(dá)式左邊用#delay#delay形式形式u可以是顯式或隱含的??梢允秋@式或隱含的。 語(yǔ)法:語(yǔ)法: #delay strength = ; #delay strength = ;wire out;assign out = a & b; / 顯顯式式wire inv = in; / 隱

34、含隱含賦值語(yǔ)句賦值語(yǔ)句(2 2)過(guò)程過(guò)程賦值語(yǔ)句賦值語(yǔ)句用于對(duì)用于對(duì)regreg型變量賦值,有兩種方式:型變量賦值,有兩種方式:非阻塞(非阻塞(non-blocking)non-blocking)賦值方式:賦值方式: 賦值符號(hào)為賦值符號(hào)為=,如,如 b b = a a ; 阻塞(阻塞(blocking)blocking)賦值方式:賦值方式: 賦值符號(hào)為賦值符號(hào)為= =,如,如 b b = = a a ;二、非阻塞賦值與阻塞二、非阻塞賦值與阻塞賦值的區(qū)別賦值的區(qū)別1. 1. 非阻塞非阻塞賦值方式賦值方式 clkDFFcD QD QabDFF非阻塞非阻塞賦值賦值在在塊塊結(jié)束時(shí)才完結(jié)束時(shí)才完成賦值操

35、作!成賦值操作!注:注:c c的值比的值比b b的值落后一個(gè)時(shí)鐘周期!的值落后一個(gè)時(shí)鐘周期!賦值語(yǔ)句賦值語(yǔ)句2. 2. 阻塞阻塞賦值方式賦值方式 阻塞阻塞賦值賦值在在該語(yǔ)該語(yǔ)句句結(jié)束時(shí)就完成結(jié)束時(shí)就完成賦值操作!賦值操作!clkDFFcD Qab注:在一個(gè)塊語(yǔ)句中,如果有多條阻塞注:在一個(gè)塊語(yǔ)句中,如果有多條阻塞賦值語(yǔ)句,在賦值語(yǔ)句,在前面的賦值語(yǔ)句沒(méi)有完成之前,后面的語(yǔ)句就不能被前面的賦值語(yǔ)句沒(méi)有完成之前,后面的語(yǔ)句就不能被執(zhí)行,就像被阻塞了一樣,因此稱為執(zhí)行,就像被阻塞了一樣,因此稱為阻塞阻塞賦值方式賦值方式。 這里這里c c的值與的值與b b的值一樣的值一樣 !賦值語(yǔ)句賦值語(yǔ)句非阻塞非阻

36、塞(non-blocking)non-blocking)賦值方式賦值方式 ( b= a) ( b= a):nb b的值被賦成新值的值被賦成新值a a的操作的操作, , 并不是立刻完成的,而并不是立刻完成的,而是在塊結(jié)束時(shí)才完成;是在塊結(jié)束時(shí)才完成;n塊內(nèi)的多條塊內(nèi)的多條賦值語(yǔ)句在塊結(jié)束時(shí)同時(shí)賦值;賦值語(yǔ)句在塊結(jié)束時(shí)同時(shí)賦值;n硬件有對(duì)應(yīng)的電路硬件有對(duì)應(yīng)的電路。阻塞阻塞(blocking)blocking)賦值方式賦值方式 ( b = a) ( b = a):nb b的值立刻被賦成新值的值立刻被賦成新值a a;n完成該賦值語(yǔ)句后才能執(zhí)行下一句的操作;完成該賦值語(yǔ)句后才能執(zhí)行下一句的操作;n硬件沒(méi)

37、有對(duì)應(yīng)的電路,因而綜合結(jié)果未知。硬件沒(méi)有對(duì)應(yīng)的電路,因而綜合結(jié)果未知。非阻塞非阻塞賦值與賦值與阻塞阻塞賦值方式的主要賦值方式的主要區(qū)別區(qū)別v建議在初學(xué)時(shí)只使用一種方式,不要混用!建議在初學(xué)時(shí)只使用一種方式,不要混用!v建議在可綜合風(fēng)格的模塊中使用建議在可綜合風(fēng)格的模塊中使用非阻塞非阻塞賦值!賦值!賦值語(yǔ)句賦值語(yǔ)句3.1 組合電路的Verilog描述 3.1.5 加法器及其加法器及其Verilog描述描述 3.1 組合電路的Verilog描述 3.1 組合電路的Verilog描述 3.1.5 加法器及其加法器及其Verilog描述描述 頂層模塊和例化語(yǔ)句頂層模塊和例化語(yǔ)句u模塊是可以進(jìn)行層次嵌套

38、的。模塊是可以進(jìn)行層次嵌套的。每個(gè)每個(gè)Verilog HDL源文件中只準(zhǔn)有一個(gè)頂層模塊,其他為子模塊。源文件中只準(zhǔn)有一個(gè)頂層模塊,其他為子模塊。源文件源文件與頂層模塊同名與頂層模塊同名!應(yīng)在頂層模塊中對(duì)子模塊進(jìn)行例化。應(yīng)在頂層模塊中對(duì)子模塊進(jìn)行例化。u元件例化:引入一種連接關(guān)系,將預(yù)先設(shè)計(jì)好的模塊定義為一個(gè)元件例化:引入一種連接關(guān)系,將預(yù)先設(shè)計(jì)好的模塊定義為一個(gè)元件,用例化語(yǔ)句引入到上一層的設(shè)計(jì)中。元件,用例化語(yǔ)句引入到上一層的設(shè)計(jì)中??梢詫⒛K的實(shí)例通過(guò)端口連接起來(lái)構(gòu)成一個(gè)大的系統(tǒng)或元件。可以將模塊的實(shí)例通過(guò)端口連接起來(lái)構(gòu)成一個(gè)大的系統(tǒng)或元件。自上而下層次化設(shè)計(jì)的一種重要途徑。自上而下層次化

39、設(shè)計(jì)的一種重要途徑。例化可以是一個(gè)設(shè)計(jì)模塊(例化可以是一個(gè)設(shè)計(jì)模塊(設(shè)計(jì)模塊例化設(shè)計(jì)模塊例化),也可以是),也可以是 FPGA元件元件庫(kù)中的元件(庫(kù)中的元件(門元件例化門元件例化)例化是調(diào)用復(fù)制的含義例化是調(diào)用復(fù)制的含義門元件例化門元件例化程序通過(guò)調(diào)用一個(gè)在程序通過(guò)調(diào)用一個(gè)在VerilogVerilog語(yǔ)言庫(kù)中現(xiàn)存的語(yǔ)言庫(kù)中現(xiàn)存的實(shí)例門元件來(lái)實(shí)現(xiàn)某邏輯門功能。實(shí)例門元件來(lái)實(shí)現(xiàn)某邏輯門功能。模塊元件例化模塊元件例化頂層模塊(頂層模塊(trist1trist1)調(diào)用由某子模塊()調(diào)用由某子模塊(mytrimytri)定義的實(shí)例元件()定義的實(shí)例元件(tri_insttri_inst)來(lái)實(shí)現(xiàn)某功能。

40、)來(lái)實(shí)現(xiàn)某功能。例化元件名例化元件名門元件關(guān)鍵字門元件關(guān)鍵字and myand3( f,a,b,c);頂層模塊和例化語(yǔ)句頂層模塊和例化語(yǔ)句module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable);endmodulemodule mytri(out,in,enable); output out; input in, enable; assign out = enable? in:bz; / * 如果如果enable為為1,則,則out = in,否則為高阻態(tài),否則為高阻態(tài) *

41、 /endmodule例化元件名例化元件名子模塊名子模塊名頂層模塊頂層模塊子模塊子模塊頂層模塊和例化語(yǔ)句頂層模塊和例化語(yǔ)句3.1 組合電路的Verilog描述 例化語(yǔ)句格式:例化語(yǔ)句格式: 端口名關(guān)聯(lián)法端口名關(guān)聯(lián)法位置關(guān)聯(lián)法位置關(guān)聯(lián)法3.1 組合電路的Verilog描述 3.1.5 加法器及其加法器及其Verilog描述描述 可綜合建模類型只有兩種可綜合建模類型只有兩種:4組合邏輯組合邏輯: :任何時(shí)候,如果輸出信號(hào)直接由當(dāng)前的輸入信號(hào)的任何時(shí)候,如果輸出信號(hào)直接由當(dāng)前的輸入信號(hào)的組合決定,則此邏輯為組合邏輯。組合決定,則此邏輯為組合邏輯。4時(shí)序邏輯:時(shí)序邏輯:如果邏輯中具有記憶功能,則此邏輯

42、為時(shí)序邏輯。如果邏輯中具有記憶功能,則此邏輯為時(shí)序邏輯。在任何給定的時(shí)刻,如果輸出不能完全由輸入信號(hào)在任何給定的時(shí)刻,如果輸出不能完全由輸入信號(hào)確定,則此邏輯具有記憶功能。確定,則此邏輯具有記憶功能。3.2 時(shí)序模塊及其Verilog表述 3.2 時(shí)序模塊及其Verilog表述 3.2.1 邊沿觸發(fā)型觸發(fā)器及其邊沿觸發(fā)型觸發(fā)器及其Verilog表述表述 3.2 時(shí)序模塊及其Verilog表述 3.2.1 邊沿觸發(fā)型觸發(fā)器及其邊沿觸發(fā)型觸發(fā)器及其Verilog表述表述 邊沿敏感時(shí)序u 時(shí)序控制時(shí)序控制可以用在可以用在RTL級(jí)或行為級(jí)組合邏輯或時(shí)序邏輯描述中。級(jí)或行為級(jí)組合邏輯或時(shí)序邏輯描述中。u

43、 可以用關(guān)鍵字可以用關(guān)鍵字posedge(上升沿)(上升沿)和和negedge(下降沿)(下降沿)限定信號(hào)敏限定信號(hào)敏 感邊沿。感邊沿。u 敏感表中可以有多個(gè)信號(hào),用關(guān)鍵字敏感表中可以有多個(gè)信號(hào),用關(guān)鍵字or連接。連接。always(negedge Clock)電平敏感事件控制電平敏感事件控制always(A or B)3.2 時(shí)序模塊及其Verilog表述 3.2.2 電平觸發(fā)型鎖存器及其電平觸發(fā)型鎖存器及其Verilog表述表述 注:注:u鎖存器的動(dòng)作行為如下:鎖存器的動(dòng)作行為如下: 當(dāng)時(shí)鐘信號(hào)為當(dāng)時(shí)鐘信號(hào)為 1時(shí),輸入數(shù)據(jù)的值直時(shí),輸入數(shù)據(jù)的值直 接傳給輸出。接傳給輸出。 當(dāng)時(shí)鐘信號(hào)為當(dāng)

44、時(shí)鐘信號(hào)為0時(shí),輸出保持當(dāng)前狀時(shí),輸出保持當(dāng)前狀 態(tài)不變。態(tài)不變。u 用不完整的條件語(yǔ)句,產(chǎn)生時(shí)序電路用不完整的條件語(yǔ)句,產(chǎn)生時(shí)序電路 復(fù)位控制信號(hào)是可綜合風(fēng)格有限狀態(tài)機(jī)代碼的重要組成部分,通常在復(fù)位控制信號(hào)是可綜合風(fēng)格有限狀態(tài)機(jī)代碼的重要組成部分,通常在有限狀態(tài)機(jī)建模中有復(fù)位控制信號(hào)。有限狀態(tài)機(jī)建模中有復(fù)位控制信號(hào)。帶復(fù)位端的時(shí)序電路建模帶復(fù)位端的時(shí)序電路建模同步復(fù)位:同步復(fù)位:module DFF2(q,clk,r,d);module DFF2(q,clk,r,d);input clk, d, r;input clk, d, r;output q; reg q;output q; reg

45、q;always (always (posedge clkposedge clk) ) if(r) if(r) q=0; q=0; elseif(r=0) elseif(r=0) q=d; q=d;endmoduleendmodule同步塊中的異步復(fù)位:同步塊中的異步復(fù)位:module async(q,ck,r,d);module async(q,ck,r,d);input clk, d, r;input clk, d, r;output q; reg q;output q; reg q;always (always (posedge clk or posedge clk or negedge r negedge r) ) if(!r) if(!r) q=0; q=0; elseif(r) elseif(r) q=d; q=d;endmoduleendmodule3.2 時(shí)序模塊及其Verilog表述 3.2.5 異步復(fù)位型鎖存器及其異步復(fù)位型鎖存器及其Verilog表述表述 3.2 時(shí)序模塊及其Veri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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)論