版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第3章 Verilog設計入門 主要內容主要內容u 3.1 組合電路的組合電路的Verilog描述描述u 3.2 時序模塊及其時序模塊及其Verilog表述表述u 3.3 二進制計數(shù)器及其二進制計數(shù)器及其Verilog設計設計Verilog概述概述u什么是什么是Verilog HDL?uVerilog HDL(Hardware Discription Language)是一種硬件描述語言,用于是一種硬件描述語言,用于從算法級、門級到開關級的多種抽象設從算法級、門級到開關級的多種抽象設計層次的數(shù)字系統(tǒng)建模。計層次的數(shù)字系統(tǒng)建模。Verilog的歷史的歷史u最初是于最初是于1983年由年由Gate
2、way Design Automation公司公司(后被后被Cadence收購收購)為其模擬為其模擬器產品開發(fā)的硬件建模語言器產品開發(fā)的硬件建模語言u1990年,年,Cadence公司成立公司成立OVI(Open Verilog International)組織來負責推廣組織來負責推廣Verilogu1995年,年,IEEE制定了制定了Verilog HDL標準,即標準,即IEEE Std 1364 - 1995Verilog與與VHDLu目前,設計者使用目前,設計者使用Verilog和和VHDL的情的情況況美國:美國:Verilog: 60%, VHDL: 40%臺灣:臺灣: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描述描述 端口在模塊名字端口在模塊名字后的括號中列出后的括號中列出端口等價于硬件端口等價于硬件的引腳的引腳(pin)端口可以說明為端口可以說明為input, output及及inoutmodule是層次化設計是層次化設計的基本構
4、件的基本構件模塊內部的邏輯模塊內部的邏輯功能和電路結構功能和電路結構Assign關鍵字引關鍵字引導導 的賦值語句的賦值語句 標示符標示符 module(模塊模塊)umodule能夠表示:能夠表示:物理塊,如物理塊,如IC或或ASIC單元單元邏輯塊,如一個邏輯塊,如一個CPU設計的設計的ALU部分部分整個系統(tǒng)整個系統(tǒng)u每一個模塊的描述從關鍵詞每一個模塊的描述從關鍵詞module開始,有一個開始,有一個名稱名稱(如(如SN74LS74,DFF,ALU等等),由關鍵詞等等),由關鍵詞endmodule結束。結束。module是層是層次化設計的基次化設計的基本構件本構件邏輯描述放在邏輯描述放在modu
5、le內部內部模塊端口模塊端口(module ports)端口在模塊名字端口在模塊名字后的括號中列出后的括號中列出端口可以說明為端口可以說明為input, output及及inout端口等價于硬件端口等價于硬件的引腳的引腳(pin)u注意模塊的名稱注意模塊的名稱DFF,端口列表及說明,端口列表及說明u模塊通過端口與外部通信模塊通過端口與外部通信賦值語句賦值語句 條件操作符條件操作符 關鍵字關鍵字 賦值語句和條件操作符賦值語句和條件操作符條件運算符條件運算符三三目運算符目運算符信號信號 = = 條件條件?表達式表達式1 1:表達式表達式2 2 條件運算符為條件運算符為?:?: 用法:用法:當條件為
6、當條件為真真,信號取表,信號取表達式達式1 1的值;為的值;為假假,則,則取表達式取表達式2 2的值。的值。關鍵字關鍵字u關鍵字關鍵字事先定義好的確認符,用來組織語事先定義好的確認符,用來組織語言結構;或者用于定義言結構;或者用于定義Verilog HDLVerilog HDL提供的門提供的門元件(如元件(如andand,notnot,oror,bufbuf)。)。u用用小寫小寫字母定義!字母定義! 如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wir
7、e。用戶程序中的變量、用戶程序中的變量、節(jié)點等名稱不能與關節(jié)點等名稱不能與關鍵字同名!鍵字同名!Verilog HDL關鍵字關鍵字edgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparamete
8、rpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisableVerilog HDL關鍵字關鍵字(續(xù))(續(xù))tri0tri1 vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamst
9、rengthstrong0 strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortrireg標識符標識符 所謂標識別符就是用戶為程序描述中的所謂標識別符就是用戶為程序描述中的Verilog Verilog 對對象所起的名字。象所起的名字。 標識符必須以英語字母(標識符必須以英語字母(a-z, A-Za-z, A-Z)起頭,或者用)起頭,或者用下橫線符(下橫線符( _ _ )起頭。其中可以包含數(shù)字、)起頭。其中可以包含數(shù)字、$ $符和符和下橫線符。下橫線符。 標識符最長可以達到標識符最長可以達到10231023個字符
10、。個字符。 模塊名、端口名和實例名都是標識符。模塊名、端口名和實例名都是標識符。 VerilogVerilog語言是語言是大小寫敏感大小寫敏感的,因此的,因此sel sel 和和 SEL SEL 是是兩個不同的標識符。兩個不同的標識符。合法和非法標識符合法和非法標識符 shift_reg_a shift_reg_a busa_indexbusa_index bus263bus26334net 34net a a* *b_net b_net n263n263Verilog Verilog 是大小寫敏感的。所有的是大小寫敏感的。所有的Verilog Verilog 關鍵詞都是小寫的。關鍵詞都是小寫
11、的。非法的非法的合法的合法的1、不能用數(shù)字開頭、不能用數(shù)字開頭2、不能含有非字母符號、不能含有非字母符號*3、不能含有非字母符號、不能含有非字母符號空格和注釋u Verilog 是一種格式很自由的語言。是一種格式很自由的語言。u 空格在文本中起一個分離符的作用,別的空格在文本中起一個分離符的作用,別的沒有其沒有其 他用處。他用處。u 單行注釋符用單行注釋符用 /* 與與C 語言一致語言一致u多行注釋符用多行注釋符用 /* - */ 與與C 語言一致語言一致規(guī)范的書寫格式規(guī)范的書寫格式u規(guī)定了文本布局、命名和注釋的約定,以提規(guī)定了文本布局、命名和注釋的約定,以提高源代碼的高源代碼的可讀性可讀性和
12、和可維護性可維護性。 最頂層的最頂層的module_endmodule模塊放在最左模塊放在最左側側 低一層次的語句向右靠一個低一層次的語句向右靠一個TAB鍵的距離鍵的距離 同一語句關鍵字對齊同一語句關鍵字對齊文件取名和存盤文件取名和存盤u 文件的擴展名為文件的擴展名為.vu 文件名與該程序的模塊名一致文件名與該程序的模塊名一致u 文件取名大小寫敏感文件取名大小寫敏感u 文件名不應該用中文文件名不應該用中文 和數(shù)字和數(shù)字u 文件存在英文名字的文件夾中,不要存文件存在英文名字的文件夾中,不要存在根目錄或桌面上在根目錄或桌面上Verilog HDL程序是由程序是由模塊模塊構成的。每個模塊嵌套在構成的
13、。每個模塊嵌套在module和和endmodule聲明語句中。模塊是可以進行層次嵌套的。聲明語句中。模塊是可以進行層次嵌套的。每個模塊要進行端口定義,并說明輸入輸出端口,然后對模每個模塊要進行端口定義,并說明輸入輸出端口,然后對模塊的功能進行行為邏輯描述。塊的功能進行行為邏輯描述。程序書寫格式自由,一行可以寫幾個語句,一個語句也可以程序書寫格式自由,一行可以寫幾個語句,一個語句也可以分多行寫。分多行寫。除了除了endmodule語句、語句、begin_end語句和語句和fork_join語句外,語句外,每個語句和數(shù)據(jù)定義的最后必須有分號。每個語句和數(shù)據(jù)定義的最后必須有分號。可用可用/*.*/和
14、和/.對程序的任何部分作注釋。加上必要的注對程序的任何部分作注釋。加上必要的注釋,以增強程序的可讀性和可維護性。釋,以增強程序的可讀性和可維護性。3.1 組合電路的Verilog描述 3.1.2 4選選1多路選擇器及其多路選擇器及其case語句表述方式語句表述方式 3.1 組合電路的Verilog描述 主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型Verilog 有幾種主要的數(shù)據(jù)類型:有幾種主要的數(shù)據(jù)類型: Nets 表示器件之間的物理連接表示器件之間的物理連接, 稱為網絡連接類型稱為網絡連接類型 Register 表示抽象的儲存單元,稱為寄存器變量類型表示抽象的儲存單元,稱為寄存器變量類型 Parameter
15、 表示運行時的常數(shù),稱為參數(shù)類型表示運行時的常數(shù),稱為參數(shù)類型 寄存器陣列寄存器陣列主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型-Net-Net型變量定義型變量定義Nets(網絡連線):(網絡連線):由模塊或門驅動的連線。由模塊或門驅動的連線。驅動端信號的改變會立刻驅動端信號的改變會立刻傳遞到輸出的連線上。傳遞到輸出的連線上。 如果不明確地說明連接如果不明確地說明連接是何種類型,應該是是何種類型,應該是指指 wire 類型。類型。例如:右圖上,例如:右圖上,selb的改的改變,會自動地立刻影響或變,會自動地立刻影響或門的輸出。門的輸出。 netsabslselbselansloutwire型變量型變量最常用的
16、最常用的netsnets型變量,常用來表示以型變量,常用來表示以assignassign語句賦值的語句賦值的組合組合邏輯信號。邏輯信號。模塊中的輸入模塊中的輸入/ /輸出信號類型輸出信號類型缺省缺省為為wirewire型。型??捎米鋈魏畏匠淌降妮斎?,或可用做任何方程式的輸入,或“assign”assign”語句和實例語句和實例元件的輸出。元件的輸出。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 型變量常用于行為建模,產生測試的激勵信號型變量常用于行為建模,產生測試的激勵信號 常用行為語句結構來給寄存器類型的變量賦值。常用行為語句結構來給寄存器類型的變量賦值。 如果信號變量是在過程塊如果信號變量是在過程塊 (ini
18、tial(initial塊塊 或或 alwaysalways塊塊) )中中被賦值的,必須把它聲明為寄存器類型變量被賦值的,必須把它聲明為寄存器類型變量abslselbselansloutreg_areg_selreg_bureg型變量型變量定義定義在過程塊中被賦值的信號在過程塊中被賦值的信號,往往往往代表觸發(fā)器代表觸發(fā)器,但,但不一定不一定就是觸發(fā)器(也可以是組合邏輯信號)!就是觸發(fā)器(也可以是組合邏輯信號)!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;每個向量每個向量位寬為位寬為n共有共有m個個reg型向量型向量 例例 reg4:1 regc,regd; / reg4:1 regc,regd; / /regc,regdregc,regd為為4 4位寬的位寬的regreg型向量型向量regreg型向量(總線)型向量(總線)主要的數(shù)據(jù)類型主要的數(shù)據(jù)類型-reg型變量定義型變量定義u用于行為建模用于行為建模u兩種語句:兩種語句:pinitial 只能執(zhí)行一次只能執(zhí)行一次palways 循環(huán)執(zhí)行循環(huán)執(zhí)行u一個模塊內可包含任意多個一個模塊內可包含任意多個
20、initial 和和always語句,語句,它們相互并行執(zhí)行,即,它們的執(zhí)行順序與其在模塊它們相互并行執(zhí)行,即,它們的執(zhí)行順序與其在模塊中的順序無關中的順序無關過程語句結構過程語句結構always語句語句過程語句結構過程語句結構alwaysalways語句語句ualways語句反復執(zhí)行語句反復執(zhí)行例:例: always #5 Clock=Clock;u由事件控制的順序過程的由事件控制的順序過程的always語句語句例:例: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)過程語句結構過程語句結構always語句語句塊語句塊語句 begin_end塊語句用來將多個語句組織在一起,使得他們在語法上如同一個語句。塊語句用來將多個語句組織在一起,使得他們在語法上如同一個語句。塊語句分為兩類:塊語句分為兩類:u順序塊:語句置于關鍵字順序塊:語句置于關鍵字begin和和end之間,塊中的語句以順序方式執(zhí)行。之間,塊中的語句以順
22、序方式執(zhí)行。u并行塊:關鍵字并行塊:關鍵字fork和和join之間的是并行塊語句,塊中的語句并行執(zhí)行。之間的是并行塊語句,塊中的語句并行執(zhí)行。Fork和和join語句常用于語句常用于test bench描述。這是因為可以一起給出矢量及描述。這是因為可以一起給出矢量及其絕對時間,而不必描述所有先前事件的時間。其絕對時間,而不必描述所有先前事件的時間。u在順序塊中,語句一條接一條地計算執(zhí)行。在順序塊中,語句一條接一條地計算執(zhí)行。u在并行塊中,所有語句在各自的延遲之后立即計算執(zhí)行。在并行塊中,所有語句在各自的延遲之后立即計算執(zhí)行。begin #5 a = 3; #5 a = 5; #5 a = 4;
23、endfork #5 a = 3; #15 a = 4; #10 a = 5;join上面的兩個例子在功能上是等價的。上面的兩個例子在功能上是等價的。Fork-join例子里的賦值故意打亂順序是例子里的賦值故意打亂順序是為了強調順序是沒有關系的。為了強調順序是沒有關系的。注意注意fork-join塊是典型的不可綜合語句,并且在一些仿真器時效率較差。塊是典型的不可綜合語句,并且在一些仿真器時效率較差。 塊語句 begin_end條件語句-case語句casecase語句是測試表達式與另外一系列表達式分支是否匹配語句是測試表達式與另外一系列表達式分支是否匹配的一個多路條件語句。的一個多路條件語句。
24、uCase語句進行逐位比較以求完全匹配(包括語句進行逐位比較以求完全匹配(包括x和和z)。)。uDefault語句可選,在沒有任何條件成立時執(zhí)行。語句可選,在沒有任何條件成立時執(zhí)行。此時如果未說明此時如果未說明default,Verilog不執(zhí)行任何動作。不執(zhí)行任何動作。u多個多個default語句是非法的。語句是非法的。條件語句-case語句case , :賦值語句或空語句;:賦值語句或空語句; , :賦值語句或空語句;:賦值語句或空語句; default:賦值語句或空語句;:賦值語句或空語句;endcase重要內容:重要內容:u1、使用、使用default語句是一個很好的編程習慣,特別是用
25、于檢測語句是一個很好的編程習慣,特別是用于檢測x和和z。u2、Casez和和casex為為case語句的變體,允許比較無關語句的變體,允許比較無關(dont-care)值。值。ucase表達式或表達式或case項中的任何位為無關值時,在比較過程中該位不項中的任何位為無關值時,在比較過程中該位不予考慮。予考慮。u在在casez語句中,語句中,? 和和 z 被當作無關值。被當作無關值。u在在casex語句中,語句中,?,z 和和 x 被當作無關值。被當作無關值。數(shù)字表達數(shù)字表達(1 1)整數(shù)型常量整數(shù)型常量(即(即整常數(shù)整常數(shù))的)的4 4種進制表示形式:種進制表示形式:二進制整數(shù)(二進制整數(shù)(b
26、 b或或B B););十進制整數(shù)(十進制整數(shù)(d d或或D D););十六進制整數(shù)(十六進制整數(shù)(h h或或H H););八進制整數(shù)(八進制整數(shù)(o o或或O O)。)。數(shù)字表達數(shù)字表達v注:注:這里位寬指對應二進制數(shù)的寬度。這里位寬指對應二進制數(shù)的寬度。u 整常數(shù)的整常數(shù)的3種表達方式:種表達方式:數(shù)據(jù)表達數(shù)據(jù)表達(2 2)x x和和z z值值x x表示不定值,表示不定值,z z表示高阻值;表示高阻值;8b1001xxxx或8 h9x8b1010zzzz或8 haz每個字符代表的二進制數(shù)的寬度取決于所用的進制;每個字符代表的二進制數(shù)的寬度取決于所用的進制;當用二進制表示時,已標明位寬的數(shù)若用
27、當用二進制表示時,已標明位寬的數(shù)若用x x或或z z表示某些位,則只有在表示某些位,則只有在最左邊最左邊的的x x或或z z具有具有擴展性擴展性!為清晰可見,最好直接寫出每一位的值!為清晰可見,最好直接寫出每一位的值! 例例8bzx = 8bzzzz_zzzx 8bzx = 8bzzzz_zzzx 例例8b1x = 8b0000_001x8b1x = 8b0000_001x“?”是是z z的另一種表示符號,建議在的另一種表示符號,建議在casecase語句中使用語句中使用?表示高阻態(tài)表示高阻態(tài)z 例例 casez (select) casez (select) 4b?1: out = a; 4
28、b?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ù)流描述方式 按位邏輯操作符按位邏輯操作符雙雙目運算符目運算符單單目運算符目運算符位運算其結果與操作數(shù)位數(shù)相同。位運算符中的雙目運算符要位運算其結果與操作數(shù)位數(shù)相同。位運算符中的雙目運算符要求對兩個操作數(shù)的相應位求對兩個操作數(shù)的相應位逐位逐位進行運算。
29、進行運算。兩個不同長度的操作數(shù)進行位運算時,將自動按兩個不同長度的操作數(shù)進行位運算時,將自動按右右端端對齊對齊,位,位數(shù)少的操作數(shù)會在高位用數(shù)少的操作數(shù)會在高位用0 0補齊。補齊。 例例 若若A = 5b11001A = 5b11001,B = 3b101B = 3b101, 則則A & B = A & B = (5b110015b11001)& &(5b5b0000101101)= 5b00001 = 5b00001 運算結果為運算結果為1 1位的邏輯值位的邏輯值1 1或或0 0。 等于運算符等于運算符(= =)(= =)和全等運算符和全等運算符(= = =)(= = =)的的區(qū)別區(qū)別: :
30、使用使用等于等于運算符時,兩個操作數(shù)必須運算符時,兩個操作數(shù)必須逐位逐位相等相等, ,結果才為結果才為1 1;若某些位為若某些位為x x或或z z,則結果為,則結果為0 0。使用使用全等全等運算符時,若兩個操作數(shù)的相應位完全運算符時,若兩個操作數(shù)的相應位完全一致一致(如同(如同是是1 1,或同是,或同是0 0,或同是,或同是x x,或同是,或同是z z), ,則結果為則結果為1 1;否則為;否則為0 0。 所有的等式運算符優(yōu)先級別相同。所有的等式運算符優(yōu)先級別相同。 = = = = =和!和!= = =運算符常用于運算符常用于casecase表達式的判別,又稱為表達式的判別,又稱為“casec
31、ase等等式運算符式運算符”。等式運算符等式運算符-雙雙目運算符等式運算符等式運算符-雙雙目運算符u 例例 if( if(A A = = = 1bx1bx) $display(“AisX”) $display(“AisX”);/當當A A為不為不定值時,定值時, 式(式(A A = = = = 1bx1bx)的運算結果為)的運算結果為x x,則該語句不執(zhí),則該語句不執(zhí)行行 if(if(A A = = = = = 1bx1bx) $display(“AisX”) $display(“AisX”);/當當A A為為不定值時,式(不定值時,式(A A = = = = = = 1bx1bx)的運算結果
32、為)的運算結果為1 1,該語句執(zhí),該語句執(zhí)行行表表3-1 “= =”的真值表的真值表表表3-2 “= = =”的真值表的真值表等于等于運算的結果運算的結果可能為可能為1或或0全等于全等于運算的運算的結果只有結果只有1或或0賦值語句賦值語句u 分為兩類:分為兩類:連續(xù)賦值語句,過程賦值語句連續(xù)賦值語句,過程賦值語句 (1 1)連續(xù)連續(xù)賦值語句賦值語句assignassign語句,用于對語句,用于對wirewire型變量型變量賦值,是描述賦值,是描述組合邏輯組合邏輯最常用的方法之一。最常用的方法之一。 例例 assign c=a&b; /a assign c=a&b; /a、b b、c c均為均為
33、wirewire型變量型變量u描述的是描述的是組合邏輯,并行操作組合邏輯,并行操作u在在過程塊外部使用過程塊外部使用。u用于用于netnet驅動。驅動。u在等式左邊可以有一個簡單延時說明。在等式左邊可以有一個簡單延時說明。只限于在表達式左邊用只限于在表達式左邊用#delay#delay形式形式u可以是顯式或隱含的??梢允秋@式或隱含的。 語法:語法: #delay strength = ; #delay strength = ;wire out;assign out = a & b; / 顯顯式式wire inv = in; / 隱含隱含賦值語句賦值語句(2 2)過程過程賦值語句賦值語句用于對用
34、于對regreg型變量賦值,有兩種方式:型變量賦值,有兩種方式:非阻塞(非阻塞(non-blocking)non-blocking)賦值方式:賦值方式: 賦值符號為賦值符號為=,如,如 b b = a a ; 阻塞(阻塞(blocking)blocking)賦值方式:賦值方式: 賦值符號為賦值符號為= =,如,如 b b = = a a ;二、非阻塞賦值與阻塞二、非阻塞賦值與阻塞賦值的區(qū)別賦值的區(qū)別1. 1. 非阻塞非阻塞賦值方式賦值方式 clkDFFcD QD QabDFF非阻塞非阻塞賦值賦值在在塊塊結束時才完結束時才完成賦值操作!成賦值操作!注:注:c c的值比的值比b b的值落后一個時鐘
35、周期!的值落后一個時鐘周期!賦值語句賦值語句2. 2. 阻塞阻塞賦值方式賦值方式 阻塞阻塞賦值賦值在在該語該語句句結束時就完成結束時就完成賦值操作!賦值操作!clkDFFcD Qab注:在一個塊語句中,如果有多條阻塞注:在一個塊語句中,如果有多條阻塞賦值語句,在賦值語句,在前面的賦值語句沒有完成之前,后面的語句就不能被前面的賦值語句沒有完成之前,后面的語句就不能被執(zhí)行,就像被阻塞了一樣,因此稱為執(zhí)行,就像被阻塞了一樣,因此稱為阻塞阻塞賦值方式賦值方式。 這里這里c c的值與的值與b b的值一樣的值一樣 !賦值語句賦值語句非阻塞非阻塞(non-blocking)non-blocking)賦值方式
36、賦值方式 ( b= a) ( b= a):nb b的值被賦成新值的值被賦成新值a a的操作的操作, , 并不是立刻完成的,而并不是立刻完成的,而是在塊結束時才完成;是在塊結束時才完成;n塊內的多條塊內的多條賦值語句在塊結束時同時賦值;賦值語句在塊結束時同時賦值;n硬件有對應的電路硬件有對應的電路。阻塞阻塞(blocking)blocking)賦值方式賦值方式 ( b = a) ( b = a):nb b的值立刻被賦成新值的值立刻被賦成新值a a;n完成該賦值語句后才能執(zhí)行下一句的操作;完成該賦值語句后才能執(zhí)行下一句的操作;n硬件沒有對應的電路,因而綜合結果未知。硬件沒有對應的電路,因而綜合結果
37、未知。非阻塞非阻塞賦值與賦值與阻塞阻塞賦值方式的主要賦值方式的主要區(qū)別區(qū)別v建議在初學時只使用一種方式,不要混用!建議在初學時只使用一種方式,不要混用!v建議在可綜合風格的模塊中使用建議在可綜合風格的模塊中使用非阻塞非阻塞賦值!賦值!賦值語句賦值語句3.1 組合電路的Verilog描述 3.1.5 加法器及其加法器及其Verilog描述描述 3.1 組合電路的Verilog描述 3.1 組合電路的Verilog描述 3.1.5 加法器及其加法器及其Verilog描述描述 頂層模塊和例化語句頂層模塊和例化語句u模塊是可以進行層次嵌套的。模塊是可以進行層次嵌套的。每個每個Verilog HDL源文
38、件中只準有一個頂層模塊,其他為子模塊。源文件中只準有一個頂層模塊,其他為子模塊。源文件源文件與頂層模塊同名與頂層模塊同名!應在頂層模塊中對子模塊進行例化。應在頂層模塊中對子模塊進行例化。u元件例化:引入一種連接關系,將預先設計好的模塊定義為一個元件例化:引入一種連接關系,將預先設計好的模塊定義為一個元件,用例化語句引入到上一層的設計中。元件,用例化語句引入到上一層的設計中??梢詫⒛K的實例通過端口連接起來構成一個大的系統(tǒng)或元件??梢詫⒛K的實例通過端口連接起來構成一個大的系統(tǒng)或元件。自上而下層次化設計的一種重要途徑。自上而下層次化設計的一種重要途徑。例化可以是一個設計模塊(例化可以是一個設計模
39、塊(設計模塊例化設計模塊例化),也可以是),也可以是 FPGA元件元件庫中的元件(庫中的元件(門元件例化門元件例化)例化是調用復制的含義例化是調用復制的含義門元件例化門元件例化程序通過調用一個在程序通過調用一個在VerilogVerilog語言庫中現(xiàn)存的語言庫中現(xiàn)存的實例門元件來實現(xiàn)某邏輯門功能。實例門元件來實現(xiàn)某邏輯門功能。模塊元件例化模塊元件例化頂層模塊(頂層模塊(trist1trist1)調用由某子模塊()調用由某子模塊(mytrimytri)定義的實例元件()定義的實例元件(tri_insttri_inst)來實現(xiàn)某功能。)來實現(xiàn)某功能。例化元件名例化元件名門元件關鍵字門元件關鍵字an
40、d myand3( f,a,b,c);頂層模塊和例化語句頂層模塊和例化語句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) * /endmodule例化元件名例化元件名子模塊名子模塊名頂層模
41、塊頂層模塊子模塊子模塊頂層模塊和例化語句頂層模塊和例化語句3.1 組合電路的Verilog描述 例化語句格式:例化語句格式: 端口名關聯(lián)法端口名關聯(lián)法位置關聯(lián)法位置關聯(lián)法3.1 組合電路的Verilog描述 3.1.5 加法器及其加法器及其Verilog描述描述 可綜合建模類型只有兩種可綜合建模類型只有兩種:4組合邏輯組合邏輯: :任何時候,如果輸出信號直接由當前的輸入信號的任何時候,如果輸出信號直接由當前的輸入信號的組合決定,則此邏輯為組合邏輯。組合決定,則此邏輯為組合邏輯。4時序邏輯:時序邏輯:如果邏輯中具有記憶功能,則此邏輯為時序邏輯。如果邏輯中具有記憶功能,則此邏輯為時序邏輯。在任何給
42、定的時刻,如果輸出不能完全由輸入信號在任何給定的時刻,如果輸出不能完全由輸入信號確定,則此邏輯具有記憶功能。確定,則此邏輯具有記憶功能。3.2 時序模塊及其Verilog表述 3.2 時序模塊及其Verilog表述 3.2.1 邊沿觸發(fā)型觸發(fā)器及其邊沿觸發(fā)型觸發(fā)器及其Verilog表述表述 3.2 時序模塊及其Verilog表述 3.2.1 邊沿觸發(fā)型觸發(fā)器及其邊沿觸發(fā)型觸發(fā)器及其Verilog表述表述 邊沿敏感時序u 時序控制時序控制可以用在可以用在RTL級或行為級組合邏輯或時序邏輯描述中。級或行為級組合邏輯或時序邏輯描述中。u 可以用關鍵字可以用關鍵字posedge(上升沿)(上升沿)和和
43、negedge(下降沿)(下降沿)限定信號敏限定信號敏 感邊沿。感邊沿。u 敏感表中可以有多個信號,用關鍵字敏感表中可以有多個信號,用關鍵字or連接。連接。always(negedge Clock)電平敏感事件控制電平敏感事件控制always(A or B)3.2 時序模塊及其Verilog表述 3.2.2 電平觸發(fā)型鎖存器及其電平觸發(fā)型鎖存器及其Verilog表述表述 注:注:u鎖存器的動作行為如下:鎖存器的動作行為如下: 當時鐘信號為當時鐘信號為 1時,輸入數(shù)據(jù)的值直時,輸入數(shù)據(jù)的值直 接傳給輸出。接傳給輸出。 當時鐘信號為當時鐘信號為0時,輸出保持當前狀時,輸出保持當前狀 態(tài)不變。態(tài)不變
44、。u 用不完整的條件語句,產生時序電路用不完整的條件語句,產生時序電路 復位控制信號是可綜合風格有限狀態(tài)機代碼的重要組成部分,通常在復位控制信號是可綜合風格有限狀態(tài)機代碼的重要組成部分,通常在有限狀態(tài)機建模中有復位控制信號。有限狀態(tài)機建模中有復位控制信號。帶復位端的時序電路建模帶復位端的時序電路建模同步復位:同步復位: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 q;always (always (posedge clkpos
45、edge clk) ) if(r) if(r) q=0; q=0; elseif(r=0) elseif(r=0) q=d; q=d;endmoduleendmodule同步塊中的異步復位:同步塊中的異步復位: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 時序模塊及其Verilog表述 3.2.5 異步復位型鎖存器及其異步復位型鎖存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省南京市2024-2025學年高一上學期期末學情調研數(shù)學試卷(含答案)
- 2024-2025學年北京市順義區(qū)第二中學高三上學期12月月考數(shù)學試題(含答案)
- 2022高考英語完形填空和閱讀理解暑假選練(4)答案(外研版)
- 【名師伴你行】2021屆高考物理二輪復習專題提能專訓:16機械振動、機械波、光及光的波動性
- 項目管理試用期總結:回顧成長路上的收獲與挑戰(zhàn)
- 2022高考英語溫州市信息匹配、閱理自練及答案2
- 【KS5U原創(chuàng)】新課標2021年高一英語暑假作業(yè)7
- 四年級數(shù)學(簡便運算)計算題專項練習與答案
- 2021街道社區(qū)矯正工作匯報材料
- 云南省德宏州潞西市芒市中學2014-2021學年高中生物必修三教案-2.2通過激素調節(jié)
- 2025北京朝陽初二(上)期末數(shù)學真題試卷(含答案解析)
- 做賬實操-科學研究和技術服務業(yè)的賬務處理示例
- 2025年人教版歷史八上期末復習-全冊重難點知識
- 2024年國家安全員資格考試題庫及解析答案
- 山東省濱州市2023-2024學年高一上學期1月期末考試 政治 含答案
- 儀控技術手冊-自控專業(yè)工程設計用典型條件表
- 法務崗位招聘筆試題及解答(某大型國企)2025年
- 《慶澳門回歸盼祖國統(tǒng)一》主題班會教案
- 洗衣房工作人員崗位職責培訓
- 廣東省深圳市光明區(qū)2022-2023學年五年級上學期數(shù)學期末試卷(含答案)
- XX小區(qū)春節(jié)燈光布置方案
評論
0/150
提交評論