第3章-組合電路的Verilog設(shè)計(jì)匯總課件_第1頁(yè)
第3章-組合電路的Verilog設(shè)計(jì)匯總課件_第2頁(yè)
第3章-組合電路的Verilog設(shè)計(jì)匯總課件_第3頁(yè)
第3章-組合電路的Verilog設(shè)計(jì)匯總課件_第4頁(yè)
第3章-組合電路的Verilog設(shè)計(jì)匯總課件_第5頁(yè)
已閱讀5頁(yè),還剩77頁(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、 E D A技術(shù)與應(yīng)用第3章 組合電路的Verilog設(shè)計(jì) E D A技術(shù)與應(yīng)用3.1 半加器電路的Verilog描述半加器的電路結(jié)構(gòu)半加器的仿真功能波形圖ABSOCO0000011010101101半加器的真值表半加器邏輯表達(dá)式:和:SO=A0A1進(jìn)位:CO=A0A1 E D A技術(shù)與應(yīng)用例3-1:半加器 module h_adder (A, B, SO, CO);input A, B;output SO, CO;assign SO=AB;/將變量A和B執(zhí)行異或邏輯后 將結(jié)果賦值給輸出信號(hào)SOassign CO=A&B;/將變量A和B執(zhí)行與邏輯后將 結(jié)果賦值給輸出信號(hào)COendmodule以

2、關(guān)鍵詞module_endmodule引導(dǎo)的完整的電路模塊或稱“模塊”描述。模塊對(duì)應(yīng)著硬件電路上的邏輯實(shí)體(也稱實(shí)例Instance)以關(guān)鍵詞input和output引導(dǎo)的對(duì)模塊的外部端口描述語(yǔ)句。描述電路器件的端口狀況及信號(hào)性質(zhì),如信號(hào)流動(dòng)方向和信號(hào)的數(shù)據(jù)類型等。以關(guān)鍵詞assign引導(dǎo)的賦值語(yǔ)句,用于描述模塊的邏輯功能和電路結(jié)構(gòu)。三個(gè)組成部分: E D A技術(shù)與應(yīng)用任何一可綜合的最基本模塊都必須以關(guān)鍵詞module開(kāi)頭。module右側(cè)(空一格或多格)是模塊名,模塊名屬于標(biāo)示符,由設(shè)計(jì)者自定。(不應(yīng)用數(shù)字或中文定義,也不應(yīng)用與EDA工具庫(kù)中已定義好的關(guān)鍵詞或元件名作為模塊名,且不能用數(shù)字起

3、頭)模塊名右側(cè)的括號(hào)稱為模塊端口列表,列出此模塊所有輸入、輸出或雙向端口名,端口名間用逗號(hào)分開(kāi),右側(cè)括號(hào)外加分號(hào)。endmodule是模塊結(jié)束語(yǔ)句,不加任何標(biāo)點(diǎn)符號(hào)。對(duì)模塊端口和功能的描述語(yǔ)句必須放在module_endmodule之間。1、模塊語(yǔ)句及其表達(dá)方式 module 模塊名 (模塊端口名表);模塊端口和模塊功能描述endmodule E D A技術(shù)與應(yīng)用對(duì)端口名表中的端口進(jìn)行定義。端口關(guān)鍵詞:input,output,inout端口關(guān)鍵詞旁的端口名可以有多個(gè),逗號(hào)分開(kāi),最后加分號(hào)。前三種描述了標(biāo)量位,最后一種描述了邏輯矢量位。例: output 3:0 C, D; /定義兩個(gè)4位位寬

4、的總線端口輸出信號(hào)C3:0(等同于定義了四個(gè)單個(gè)位信號(hào)C3、C2、C1、C0)和D3:02、端口語(yǔ)句、端口信號(hào)名和端口模式input 端口名1,端口名2,;/輸入端口output 端口名1,端口名2,; /輸出端口inout 端口名1,端口名2,; /雙向端口input msb : lsb 端口名1,端口名2,; /多信號(hào)端口 或總線端口 -邏輯矢量位最高位數(shù)最低位數(shù) E D A技術(shù)與應(yīng)用input:輸入端口。單向只讀模式,數(shù)據(jù)只能由此端口被讀入模塊實(shí)體中。output:輸出端口。單向輸出模式,數(shù)據(jù)只能通過(guò)此端口從模塊實(shí)體向外流出,即將此模塊中數(shù)據(jù)向此端口賦值。inout:雙向端口。輸入輸出雙

5、向端口,從端口內(nèi)部看,可對(duì)此端口進(jìn)行賦值,或通過(guò)此端口讀入外部的數(shù)據(jù)信息;從端口外部看,信號(hào)既可由此端口流出,又可向此端口輸入信號(hào)。2、端口語(yǔ)句、端口信號(hào)名和端口模式input 端口名1,端口名2,;/輸入端口output 端口名1,端口名2,; /輸出端口inout 端口名1,端口名2,; /雙向端口input msb : lsb 端口名1,端口名2,; /多信號(hào)端口 或總線端口 -邏輯矢量位最高位數(shù)最低位數(shù) E D A技術(shù)與應(yīng)用:邏輯異或。&:邏輯與。3、邏輯操作符AB/A、B異或A&B /A、B相與 E D A技術(shù)與應(yīng)用assign是連續(xù)賦值命名的關(guān)鍵詞。等號(hào)右側(cè)的驅(qū)動(dòng)表達(dá)式中的任一信號(hào)

6、變量發(fā)生變化時(shí),此表達(dá)式被計(jì)算一遍,并將獲得的數(shù)據(jù)立即賦給等號(hào)左側(cè)的變量名所標(biāo)示的目標(biāo)變量。驅(qū)動(dòng)的含義是強(qiáng)調(diào)表達(dá)式的本質(zhì)是對(duì)于目標(biāo)變量的激勵(lì)源或賦值源。assign引導(dǎo)的賦值語(yǔ)句是并行賦值語(yǔ)句。4、連續(xù)賦值語(yǔ)句assign 目標(biāo)變量名= 驅(qū)動(dòng)表達(dá)式;并行執(zhí)行:語(yǔ)句是同時(shí)執(zhí)行的,與先后次序無(wú)關(guān)。順序執(zhí)行:按照語(yǔ)句的前后排列方式逐條順序執(zhí)行的。 E D A技術(shù)與應(yīng)用方括號(hào)表示,括號(hào)中的內(nèi)容是可以選擇使用的。任何時(shí)刻,等式右側(cè)的“驅(qū)動(dòng)表達(dá)式”中任一變量發(fā)生變化時(shí)立即計(jì)算出此表達(dá)式的值,經(jīng)過(guò)指定的延時(shí)時(shí)間后再賦值給左側(cè)的目標(biāo)變量。延時(shí)值用于Verilog Test Bench程序中進(jìn)行仿真,在綜合器中

7、延時(shí)值被忽略,不參與綜合。例: timescale 10ns/100ps;/設(shè)置仿真的基本時(shí)間單元是10ns, 仿真時(shí)間精度100psassign #6 R1=A&B;/6個(gè)時(shí)間單元后將結(jié)果賦值給目標(biāo)變量4、連續(xù)賦值語(yǔ)句assign 延時(shí) 目標(biāo)變量名= 驅(qū)動(dòng)表達(dá)式; E D A技術(shù)與應(yīng)用Verilog語(yǔ)言預(yù)先定義好的有特殊含義的英文詞語(yǔ)。Verilog規(guī)定所有關(guān)鍵詞必須小寫(xiě)。5、關(guān)鍵詞設(shè)計(jì)者在Verilog程序中自定義的,用于標(biāo)識(shí)不同名稱的詞語(yǔ),如模塊名、信號(hào)名、端口名等。標(biāo)識(shí)符區(qū)分大小寫(xiě)。6、標(biāo)識(shí)符 E D A技術(shù)與應(yīng)用注釋符號(hào)“/”,用于隔離程序,添加程序說(shuō)明文字。本身無(wú)功能含義。“/”后

8、的注釋文字只能放在同一行。另一種注釋符號(hào)“/*/”類似一個(gè)括號(hào),只要文字在此“括號(hào)”中就可以換行。7、注釋符號(hào)可以一行寫(xiě)多條語(yǔ)句,或分行書(shū)寫(xiě)。建議最頂層module_endmodule模塊描述語(yǔ)句放在最左側(cè),比他低一層次的描述語(yǔ)句靠右一個(gè)Tab鍵距離,同一語(yǔ)句的關(guān)鍵詞對(duì)齊(如module_endmodule、table_endtable、begin_end等)。8、規(guī)范的程序書(shū)寫(xiě)格式 E D A技術(shù)與應(yīng)用文件名可由設(shè)計(jì)者任意給定,文件后綴擴(kuò)展名必須是“.v”。建議程序的文件名與該程序的模塊名一致(對(duì)于Quartus II必須滿足這一點(diǎn))。文件名區(qū)分大小寫(xiě)(對(duì)于Quartus II文件名與程序模

9、塊名的大小寫(xiě)必須一致)。文件名不應(yīng)該用中文或數(shù)字來(lái)命名。進(jìn)入工程設(shè)計(jì)的Verilog程序必須存入某文件夾中,不要存在根目錄內(nèi)或桌面上。9、文件取名和存盤(pán) E D A技術(shù)與應(yīng)用例3-1:半加器 module h_adder (A, B, SO, CO);input A, B;output SO, CO;assign SO=AB;/將變量A和B執(zhí)行異或邏輯后 將結(jié)果賦值給輸出信號(hào)SOassign CO=A&B;/將變量A和B執(zhí)行與邏輯后將 結(jié)果賦值給輸出信號(hào)COendmodule以關(guān)鍵詞module_endmodule引導(dǎo)的完整的電路模塊或稱“模塊”描述。模塊對(duì)應(yīng)著硬件電路上的邏輯實(shí)體(也稱實(shí)例I

10、nstance)以關(guān)鍵詞input和output引導(dǎo)的對(duì)模塊的外部端口描述語(yǔ)句。描述電路器件的端口狀況及信號(hào)性質(zhì),如信號(hào)流動(dòng)方向和信號(hào)的數(shù)據(jù)類型等。以關(guān)鍵詞assign引導(dǎo)的賦值語(yǔ)句,用于描述模塊的邏輯功能和電路結(jié)構(gòu)。三個(gè)組成部分: E D A技術(shù)與應(yīng)用3.2 多路選擇器的Verilog描述4選1多路選擇器4選1多路選擇器MUX41a的時(shí)序波形3.2.1 4選1多路選擇器及case語(yǔ)句表述方式輸入端口通道選擇控制信號(hào)端輸出端口s1s0y00a01b10c11d真值表 E D A技術(shù)與應(yīng)用例3-2:4選1多路選擇器 module MUX41a (a, b, c, d, s1, s0, y); i

11、nput a, b, c, d; input s1, s0; output y; reg y; /信號(hào)類型定義段 always (a or b or c or d or s1 or s0)begin : MUX41 /塊語(yǔ)句開(kāi)始 case(s1,s0)2b00: y=a; 2b01: y=b; 2b10: y=c; 2b11: y=d; default: y=a;endcase endendmodule E D A技術(shù)與應(yīng)用以關(guān)鍵詞reg定義的模塊內(nèi)相關(guān)信號(hào)的特性和數(shù)據(jù)類型。以關(guān)鍵詞always引導(dǎo)的對(duì)模塊邏輯功能描述的順序語(yǔ)句。以case_endcase引導(dǎo)的多條件分支賦值語(yǔ)句。以begin

12、_end引導(dǎo)的順序語(yǔ)句塊。Verilog數(shù)據(jù)并位及數(shù)據(jù)表達(dá)方式。五種新的語(yǔ)句結(jié)構(gòu)和表述方式:例3-2: E D A技術(shù)與應(yīng)用用于定義寄存器型數(shù)據(jù)類型的變量。Verilog中最常用的變量:寄存器型變量:表示暫時(shí)存儲(chǔ)數(shù)據(jù)的變量(并不一定表示硬件中的物理寄存器)。關(guān)鍵詞是reg;需要定義某信號(hào)為寄存器型變量時(shí),必須顯性定義;被賦值的信號(hào)在過(guò)程語(yǔ)句always引導(dǎo)的語(yǔ)句(具有時(shí)序執(zhí)行的特點(diǎn),習(xí)慣上稱行為語(yǔ)句)中規(guī)定必須是reg型變量。不能作為邏輯門(mén)輸出或者assign語(yǔ)句輸出。網(wǎng)線性變量:進(jìn)程之間的物理互連。常用關(guān)鍵詞是wire;默認(rèn)定義為wire型;assign引導(dǎo)的賦值語(yǔ)句左側(cè)的目標(biāo)信號(hào)的類型必須

13、是網(wǎng)線型wire。輸入端口信號(hào)不能定義為寄存器型信號(hào)類型。1、reg型變量定義reg 變量名1,變量名2,; /一位變量reg msb: lsb 變量名1,變量名2,; /矢量型變量 E D A技術(shù)與應(yīng)用Verilog-2001版本允許在端口名表中直接對(duì)端口變量定義矢量(總線形式),甚至定義端口的數(shù)據(jù)類型。例: module seg_7 (input 3:0 num, input en, output reg 6:0 seg); /定義輸入端口num是一個(gè)4位矢量,定義en為一位的輸入端口,定義輸出端口seg是一個(gè)寄存器數(shù)據(jù)類型 的7位總線。1、reg型變量定義reg 變量名1,變量名2,;

14、/一位變量reg msb: lsb 變量名1,變量名2,; /矢量型變量 E D A技術(shù)與應(yīng)用Verilog中有兩類能引導(dǎo)順序語(yǔ)句的過(guò)程語(yǔ)句,一類是always語(yǔ)句,另一類是initial語(yǔ)句。任何順序語(yǔ)句都必須放在過(guò)程語(yǔ)句結(jié)構(gòu)中。以關(guān)鍵詞always引導(dǎo),右側(cè)的括號(hào)及括號(hào)中所列的信號(hào)或表達(dá)式都屬于敏感信號(hào),過(guò)程語(yǔ)句中所有輸入信號(hào)都放在敏感信號(hào)表中。敏感信號(hào)表述方式:用關(guān)鍵詞or連接所有敏感信號(hào)(每當(dāng)其中一個(gè)或多個(gè)信號(hào)發(fā)生變化時(shí),都啟動(dòng)過(guò)程語(yǔ)句,執(zhí)行一遍此結(jié)構(gòu)中的所有程序語(yǔ)句。)用逗號(hào)區(qū)分所有敏感信號(hào)。省略形式(默認(rèn)過(guò)程語(yǔ)句中敏感信號(hào)表中列全了所有應(yīng)該被列入的信號(hào),寫(xiě)成always (*)或a

15、lways *)。2、過(guò)程語(yǔ)句always (敏感信號(hào)及敏感信號(hào)列表或表達(dá)式)包括塊語(yǔ)句的各類順序語(yǔ)句 E D A技術(shù)與應(yīng)用以關(guān)鍵詞begin_end引導(dǎo),本身沒(méi)有功能,僅限于在always引導(dǎo)的過(guò)程語(yǔ)句結(jié)構(gòu)中使用,類似于一個(gè)括號(hào),括號(hào)中的語(yǔ)句都被認(rèn)定歸屬于同一操作模塊。此語(yǔ)句不可綜合,只能用于仿真。若某 一語(yǔ)句結(jié)構(gòu)中僅包含一條語(yǔ)句,且無(wú)需定義局部變量時(shí),塊語(yǔ)句被默認(rèn)使用,即無(wú)需顯式定義塊,可省略。若包含多條語(yǔ)句(包括含有局部變量定義的單條語(yǔ)句),則必須用begin_end的顯式結(jié)構(gòu)將它們“括”起來(lái)?!埃簤K名”可用于注釋當(dāng)前塊的特征,綜合時(shí)不參加編譯,可省略。3、塊語(yǔ)句begin_endbeg

16、in : 塊名語(yǔ)句1;語(yǔ)句2;語(yǔ)句n;end E D A技術(shù)與應(yīng)用case語(yǔ)句的含義是,當(dāng)滿足case右側(cè)括號(hào)中的表達(dá)式的值等于取值1、取值2時(shí),執(zhí)行對(duì)應(yīng)的語(yǔ)句。Verilog有兩類條件語(yǔ)句,if_else語(yǔ)句和case_endcase語(yǔ)句,都屬于可綜合的順序語(yǔ)句必須放在過(guò)程語(yǔ)句always中使用。case語(yǔ)句有三種表述方式,case、casez、casex。4、case條件語(yǔ)句case (表達(dá)式) 取值1: begin 語(yǔ)句1;語(yǔ)句2;語(yǔ)句n; end 取值2: begin 語(yǔ)句n+1;語(yǔ)句n+2;語(yǔ)句n+m; end default: begin 語(yǔ)句n+m+1;endendcase E

17、D A技術(shù)與應(yīng)用4、case條件語(yǔ)句表達(dá)式中的值必須在case以下列出的取值范圍內(nèi),且數(shù)據(jù)類型必須匹配。Verilog允許出現(xiàn)多個(gè)分支取值同時(shí)滿足case表達(dá)式的情況,此時(shí)將執(zhí)行最先滿足表達(dá)式的分支項(xiàng),然后隨即跳出case語(yǔ)句,不再檢測(cè)其余分支項(xiàng)。除非所有條件句中的選擇取值能完整覆蓋case語(yǔ)句中表達(dá)式的取值,否則通常最末一個(gè)條件句的選擇必須加上default語(yǔ)句,完成以上已列所有條件句中未能列出的其他可能取值的邏輯操作。使用default語(yǔ)句的目的是避免綜合器插入不必要的鎖存器,但有時(shí)為了實(shí)現(xiàn)時(shí)序電路,也會(huì)利用不完整的條件語(yǔ)句。注意: E D A技術(shù)與應(yīng)用5、Verilog的四種邏輯狀態(tài)0:

18、二進(jìn)制0、低電平、邏輯0、事件為偽的判斷結(jié)果。1:二進(jìn)制1、高電平、邏輯1、事件為真的判斷結(jié)果。z或Z:高阻態(tài),或高阻值,不區(qū)分大小寫(xiě)。x或X:不確定,或未知的邏輯狀態(tài),不區(qū)分大小寫(xiě)。例3-2中,s1, s0所有可能的數(shù)據(jù)都已出現(xiàn)在四條條件語(yǔ)句中,但由于存在z值和x值,所以仍然推薦加上default,以免綜合器加上不必要時(shí)序模塊。 E D A技術(shù)與應(yīng)用5、Verilog的四種邏輯狀態(tài)問(wèn)號(hào)“?”可以用來(lái)表示高阻值;還可以表示“不關(guān)心”,即可以用問(wèn)號(hào)“?”替代一些位值,以表示在邏輯關(guān)系中對(duì)這些位不在乎是什么值,以便簡(jiǎn)化邏輯表達(dá)。casez:當(dāng)變量取值為高阻值z(mì)時(shí)使用。如果分支取值的某些位是高阻值z(mì)

19、,則這些位的比較就不用再考慮,只關(guān)注其他位(1或0)的比較結(jié)果。casex:當(dāng)變量取值為未知值x時(shí)使用。如果表達(dá)式的值和取值之間,有一方的某些位是z或x,那么這些位的比較就不予以考慮。 E D A技術(shù)與應(yīng)用6、并位操作運(yùn)算符大括號(hào)“ ”是并位運(yùn)算符。 可以將兩個(gè)或多個(gè)信號(hào)按二進(jìn)制位拼接起來(lái),作為一個(gè)數(shù)據(jù)信號(hào)使用。例:s1, s0/用 將s1、s0拼接起來(lái)得到一個(gè)新的 信號(hào)變量,即位矢s1, s0,由于s1、 s0的取值范圍是二進(jìn)制數(shù)0和1,新的 信號(hào)變量的取值范圍是兩位二進(jìn)制 數(shù)00、01、10、11。并位運(yùn)算符可以嵌套使用。例:a1, b1, 4a2, b2=a1, b1, a2, b2,

20、a2, b2, a2, b2, a2, b2=a1, b1, a2, b2, a2, b2, a2, b2, a2, b2 E D A技術(shù)與應(yīng)用7、Verilog的數(shù)字表達(dá)形式 一撇左側(cè)的“位寬”(十進(jìn)制數(shù)形式)指示此數(shù)的二進(jìn)制位數(shù)(不管后面指示的是什么進(jìn)制,這里位寬都是以二進(jìn)制數(shù)為標(biāo)準(zhǔn)得到的位數(shù))。一撇右側(cè)“進(jìn)制”(字母形式)指示出其右側(cè)“數(shù)字”的進(jìn)制。B表示二進(jìn)制,O表示八進(jìn)制,H表示十六進(jìn)制,D表示十進(jìn)制,且不分大小寫(xiě)。例:2b10 /兩位二進(jìn)制數(shù)104B1011 /四位二進(jìn)制數(shù)10114hA /四位二進(jìn)制數(shù)10103D7 /三位二進(jìn)制數(shù)111 E D A技術(shù)與應(yīng)用7、Verilog的數(shù)

21、字表達(dá)形式 Verilog中只有標(biāo)明了數(shù)值的數(shù)據(jù)才能確定其二進(jìn)制位數(shù)。例:S3: 0=1;/3: 0表示有四位二進(jìn)制,所以等號(hào)右側(cè) 的1應(yīng)該等于二進(jìn)制數(shù)0001,正式表達(dá)為 4b0001S5: 0=7; /等號(hào)右側(cè)的7等于6b0001115bz /正式表達(dá)為5bzzzzzreg7: 0 R;R=4; /等號(hào)右側(cè)的4正式表達(dá)為8b00000100 E D A技術(shù)與應(yīng)用7、Verilog的數(shù)字表達(dá)形式 Verilog-2001規(guī)范還可以定義有符號(hào)二進(jìn)制數(shù)。sb是定義有符號(hào)二進(jìn)制數(shù)的進(jìn)制限定關(guān)鍵詞。例:8b10111011/無(wú)符號(hào)數(shù)8sb10111011 /有符號(hào)數(shù),采用2的補(bǔ)碼形式表示,最高 位是

22、符號(hào),若為1則是負(fù)數(shù),若為0則是正 數(shù),這里符號(hào)位是1。換算成十進(jìn)制數(shù)是 -69。 E D A技術(shù)與應(yīng)用例3-2:4選1多路選擇器 module MUX41a (a, b, c, d, s1, s0, y); input a, b, c, d; input s1, s0; output y; reg y; /信號(hào)類型定義段 always (a or b or c or d or s1 or s0)begin : MUX41 /塊語(yǔ)句開(kāi)始 case(s1,s0)2b00: y=a; 2b01: y=b; 2b10: y=c; 2b11: y=d; default: y=a;endcase end

23、endmodule E D A技術(shù)與應(yīng)用3.2.2 4選1多路選擇器及assign語(yǔ)句表述方式 相同的功能可以由不同的電路結(jié)構(gòu)實(shí)現(xiàn),也可以由不同的描述方法來(lái)描述。例3-3:4選1多路選擇器 module MUX41a (a, b, c, d, s1, s0, y); input a, b, c, d, s1, s0; output y; wire 1: 0 SEL; /定義2元素位矢量SEL為網(wǎng)線型變量 wire AT, BT, CT, DT; /定義中間變量,以作連接或信號(hào)節(jié)點(diǎn) assign SEL=s1, s0; /對(duì)s1、s0進(jìn)行并位操作,即 SEL1=s1; SEL 0=s0 assi

24、gn AT=(SEL=2D0);assign BT=(SEL=2D1); assign CT=(SEL=2D2);assign DT=(SEL=2D2); assign y=(a&AT) | (b&BT) | (c&CT) | (d&DT) /4個(gè)邏輯信號(hào)相或endmodule采用了數(shù)據(jù)流的邏輯描述方式,即直接用布爾邏輯表達(dá)式來(lái)描述模塊的功能。 E D A技術(shù)與應(yīng)用1、按位邏輯操作符邏輯操作是按位分別進(jìn)行的。若兩個(gè)操作數(shù)位矢具有不同長(zhǎng)度,綜合器自動(dòng)根據(jù)最長(zhǎng)位的操作數(shù)的位數(shù),把較短的數(shù)據(jù)按左端補(bǔ)0對(duì)齊。邏輯操作的結(jié)果的位寬由操作表達(dá)式左端的賦值目標(biāo)信號(hào)的位寬來(lái)決定。邏輯操作符功能A,B邏輯操作結(jié)

25、果C,D邏輯操作結(jié)果C,E邏輯操作結(jié)果邏輯取反A=1b1C=4b0011E=6b101001|邏輯或A | B=1b1C | D=4b1111C | E=6b011110&邏輯與A&B=1b0C&D=4b1000C&E=6b000100邏輯異或AB=1b1CD=4b0111CE=6b011010或邏輯同或AB=1b0CD=4b1000CE=4b100101設(shè):A=1b0; B=1b1; C3: 0=4b1100; D3:0=4b1011; E5:0=6b010110 E D A技術(shù)與應(yīng)用2、等式操作符全等比較操作符“=”將x或z都當(dāng)成確定的值進(jìn)行比較,當(dāng)表述完全相等時(shí)輸出1。全等比較操作符“=

26、”對(duì)于兩個(gè)比較位數(shù)不等的情況,不會(huì)像等于比較操作符“=”那樣高位補(bǔ)0后再比較,而會(huì)直接判斷兩數(shù)據(jù)不等。運(yùn)算操作的結(jié)果的位寬由操作表達(dá)式左端的賦值目標(biāo)信號(hào)的位寬來(lái)決定。等式操作符含義等式操作示例=等于(3=4)=0; (A=4b1011)=1; (B=4b1011)=0;!=不等于(D!=C)=0; (3!=4)=1;=全等(D=C)=1; (E=4b0 x10)=0;!=不全等(E!=4b0 x10)=1;設(shè):A=4b1011; B=4b0010; C=4b0z10; D=4b0z10; E=3bx10 E D A技術(shù)與應(yīng)用3、wire定義網(wǎng)線型變量如果assign語(yǔ)句中需要有端口以外的信號(hào)或

27、連接線性質(zhì)的變量,由于assign語(yǔ)句中的輸出信號(hào)變量必須是wire網(wǎng)線型變量,這些端口以外的信號(hào)或變量必須顯式定義。wire定義的網(wǎng)線型變量可在任何類型的表達(dá)式或賦值語(yǔ)句中(包括連續(xù)賦值和過(guò)程賦值語(yǔ)句)作輸入信號(hào),也可在連續(xù)賦值語(yǔ)句或?qū)嶓w元件例化中用作輸出信號(hào)??捎弥苯觲ire來(lái)表達(dá)assign語(yǔ)句。例:wire Y=a1a2;/等同于wire a1, a2; assign Y=a1a2wire 變量名1,變量名2,; /一位變量wire msb: lsb 變量名1,變量名2,;/矢量型變量 E D A技術(shù)與應(yīng)用3.2.2 4選1多路選擇器及assign語(yǔ)句表述方式 相同的功能可以由不同的電

28、路結(jié)構(gòu)實(shí)現(xiàn),也可以由不同的描述方法來(lái)描述。例3-3:4選1多路選擇器 module MUX41a (a, b, c, d, s1, s0, y); input a, b, c, d, s1, s0; output y; wire 1: 0 SEL; /定義2元素位矢量SEL為網(wǎng)線型變量 wire AT, BT, CT, DT; /定義中間變量,以作連接或信號(hào)節(jié)點(diǎn) assign SEL=s1, s0; /對(duì)s1、s0進(jìn)行并位操作,即 SEL1=s1; SEL 0=s0 assign AT=(SEL=2D0);assign BT=(SEL=2D1); assign CT=(SEL=2D2);ass

29、ign DT=(SEL=2D2); assign y=(a&AT) | (b&BT) | (c&CT) | (d&DT) /4個(gè)邏輯信號(hào)相或endmodule采用了數(shù)據(jù)流的邏輯描述方式,即直接用布爾邏輯表達(dá)式來(lái)描述模塊的功能。 E D A技術(shù)與應(yīng)用3.2.3 4選1多路選擇器及條件賦值語(yǔ)句表述方式例3-4:4選1多路選擇器 module MUX41a (A, B, C, D, S1, S0, Y); input A, B, C, D, S1, S0; output Y; wire AT = S0 ? D : C; wire BT = S0 ? B : A; wire Y = (S1 ? AT

30、: BT); endmodule例3-4的RTL圖s1s0y00a01b10c11d真值表 E D A技術(shù)與應(yīng)用條件賦值語(yǔ)句條件表達(dá)式 ? 表達(dá)式1 :表達(dá)式2條件操作符“?:”當(dāng)條件表達(dá)式的計(jì)算值為真時(shí)(數(shù)值等于1),選擇并計(jì)算表達(dá)式1的值,否則(數(shù)值等于0),選擇并計(jì)算表達(dá)式2的值。在連續(xù)賦值(并行賦值)和過(guò)程賦值(順序賦值)語(yǔ)句結(jié)構(gòu)中都可以使用。 E D A技術(shù)與應(yīng)用3.2.3 4選1多路選擇器及條件賦值語(yǔ)句表述方式例3-4:4選1多路選擇器 module MUX41a (A, B, C, D, S1, S0, Y); input A, B, C, D, S1, S0; output Y

31、; wire AT = S0 ? D : C; wire BT = S0 ? B : A; wire Y = (S1 ? AT : BT); endmodule例3-4的RTL圖s1s0y00a01b10c11d真值表 E D A技術(shù)與應(yīng)用3.2.4 4選1多路選擇器及條件語(yǔ)句表述方式例3-5:4選1多路選擇器 module MUX41a (A, B, C, D, S1, S0, Y); input A, B, C, D, S1, S0; output Y; reg 1: 0 SEL; reg Y; always (A, B, C, D, SEL) begin /塊語(yǔ)句起始SEL=S1, S0

32、; /把S1,S0并位為2元素矢量變量 SEL 1: 0if (SEL=0) Y=A; /當(dāng)SEL=0成立,即(SEL=0)=1 時(shí),Y=A else if (SEL=1) Y=B; /當(dāng)(SEL=1)為真,Y=B else if (SEL=2) Y=C; /當(dāng)(SEL=2)為真,Y=C else Y=D; /當(dāng)(SEL=3)為真,即 SEL=2b11時(shí),Y=D end /塊語(yǔ)句結(jié)束endmodule E D A技術(shù)與應(yīng)用1、if條件語(yǔ)句只有一個(gè)條件的if條件語(yǔ)句if (條件表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;2選1多路選擇器。條件表達(dá)式的值為1時(shí),執(zhí)行語(yǔ)句1,條件表達(dá)式的值為0時(shí),執(zhí)行語(yǔ)句

33、2。執(zhí)行的語(yǔ)句有多條時(shí),用begin_end括起來(lái)。if (條件表達(dá)式) 語(yǔ)句1; else begin 語(yǔ)句2;語(yǔ)句3;語(yǔ)句n;end E D A技術(shù)與應(yīng)用1、if條件語(yǔ)句多條件的if條件語(yǔ)句if (條件表達(dá)式1) 語(yǔ)句1; else if (條件表達(dá)式2) 語(yǔ)句2;else if (條件表達(dá)式3) 語(yǔ)句3;else 語(yǔ)句n;計(jì)算條件表達(dá)式1的值,若為1,執(zhí)行語(yǔ)句1,若為0,計(jì)算條件表達(dá)式2的值,條件表達(dá)式2的值若為1,執(zhí)行語(yǔ)句2,若為0,計(jì)算條件表達(dá)式3,以此方式順序執(zhí)行下去,直至完成所有if條件語(yǔ)句。 E D A技術(shù)與應(yīng)用2、過(guò)程賦值語(yǔ)句阻塞式賦值:賦值符號(hào)是“=”。特點(diǎn)是一旦執(zhí)行完當(dāng)前

34、的賦值語(yǔ)句,賦值目標(biāo)變量即刻獲得來(lái)自等號(hào)右側(cè)表達(dá)式的計(jì)算值。若一個(gè)塊語(yǔ)句中含多條阻塞式賦值語(yǔ)句,當(dāng)執(zhí)行到其中某條賦值語(yǔ)句時(shí),其他語(yǔ)句被禁止執(zhí)行,這時(shí)其他語(yǔ)句如同被阻塞了一樣。非阻塞式賦值:賦值符號(hào)是“=”。特點(diǎn)是首先計(jì)算右側(cè)表達(dá)式的值,然后進(jìn)入等待時(shí)間段,此時(shí)允許塊中其他賦值語(yǔ)句的執(zhí)行,直到塊語(yǔ)句執(zhí)行結(jié)束時(shí)才整體完成賦值操作。若一個(gè)塊語(yǔ)句中含多條非阻塞式賦值語(yǔ)句,在執(zhí)行當(dāng)前語(yǔ)句時(shí),對(duì)于塊中的其他語(yǔ)句的執(zhí)行情況一律不加限制,不加阻塞。很多情況下,不同的賦值符號(hào)將導(dǎo)致不同的電路結(jié)構(gòu)和邏輯功能的綜合結(jié)果,不能互換。同一過(guò)程中對(duì)同一變量的賦值,阻塞式賦值和非阻塞式賦值不允許混合使用?!?”可用于連續(xù)賦

35、值語(yǔ)句(assign)和過(guò)程賦值語(yǔ)句(always)“=”只能用于過(guò)程賦值語(yǔ)句(always) E D A技術(shù)與應(yīng)用3、數(shù)據(jù)類型表示方式Verilog具備通過(guò)賦值操作達(dá)到自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型的功能。例:reg 1: 0SEL;SEL=S1, S0;else if (SEL=2) Y=C;/SEL是2位二進(jìn)制矢量,2是十進(jìn) 制整數(shù)類型,對(duì)于這種不匹配情 況,綜合器會(huì)自動(dòng)匹配,將右側(cè) 表達(dá)式轉(zhuǎn)換成左側(cè)同類型數(shù)據(jù), 即2轉(zhuǎn)換成二進(jìn)制數(shù)2b10。所以 S1, S0=2b10,(SEL=2), (SEL=2D2)三式含義相同。賦值結(jié)果的位寬由操作表達(dá)式左端的賦值目標(biāo)信號(hào)的位寬來(lái)決定。若右側(cè)表達(dá)式的位數(shù)小于目

36、標(biāo)變量已定義的矢量位,高位補(bǔ)0。若所賦的值大于某變量已定義的矢量位可能的值,綜合器會(huì)首先將右側(cè)的數(shù)據(jù)折算成二進(jìn)制數(shù),然后根據(jù)被賦值變量所定義的位數(shù),向左(高位)截取多余的位數(shù),即保留低位,刪除高位。 E D A技術(shù)與應(yīng)用3.2.4 4選1多路選擇器及條件語(yǔ)句表述方式例3-5:4選1多路選擇器 module MUX41a (A, B, C, D, S1, S0, Y); input A, B, C, D, S1, S0; output Y; reg 1: 0 SEL; reg Y; always (A, B, C, D, SEL) begin /塊語(yǔ)句起始SEL=S1, S0; /把S1,S0并

37、位為2元素矢量變量 SEL 1: 0if (SEL=0) Y=A; /當(dāng)SEL=0成立,即(SEL=0)=1 時(shí),Y=A else if (SEL=1) Y=B; /當(dāng)(SEL=1)為真,Y=B else if (SEL=2) Y=C; /當(dāng)(SEL=2)為真,Y=C else Y=D; /當(dāng)(SEL=3)為真,即 SEL=2b11時(shí),Y=D end /塊語(yǔ)句結(jié)束endmodule E D A技術(shù)與應(yīng)用3.3 Verilog加法器設(shè)計(jì)3.3.1 全加器設(shè)計(jì)及例化語(yǔ)句應(yīng)用1、全加器原理圖結(jié)構(gòu)由三個(gè)邏輯模塊組成,其中兩個(gè)是半加器,一個(gè)是或門(mén)。五個(gè)端口:ain(加數(shù))、bin(被加數(shù))、cin(進(jìn)位

38、輸入)、sum(和值輸出)和cout(進(jìn)位輸出)。以預(yù)存的半加器描述文件h_adder.v和或門(mén)庫(kù)元件or作為較低層次的基本元件,由高層次頂層設(shè)計(jì)調(diào)用,就可以得到全加器。全加器f_adder電路圖半加器或門(mén) E D A技術(shù)與應(yīng)用2、全加器頂層設(shè)計(jì)文件例3-6:全加器 module f_adder (ain, bin, cin, cout, sum); output cout, sum; input ain, bin, cin; wire net1, net2, net3; /定義網(wǎng)線型變量net1、 net2和net3,用作內(nèi)部 底層元件連接的連線。 h_adder U1 (ain, bin,

39、 net1, net2); /調(diào)用底層元件 h_adder U2 (.A(net1), .SO(sum), .B(cin), .CO(net3); or U3 (cout, net2, net3);endmodule全加器仿真時(shí)序 E D A技術(shù)與應(yīng)用3、Verilog例化語(yǔ)句及其用法例化有調(diào)用復(fù)制的意思,例化的對(duì)象叫做實(shí)例或?qū)嶓w,即元件。所謂元件例化就是引入一種連接關(guān)系,將預(yù)先設(shè)計(jì)好的設(shè)計(jì)模塊定義為一個(gè)元件,然后利用特定的語(yǔ)句將此元件與當(dāng)前的設(shè)計(jì)實(shí)體中指定端口相連接,從而為當(dāng)前設(shè)計(jì)實(shí)體引進(jìn)一個(gè)新的、低一級(jí)的設(shè)計(jì)層次。元件例化可以是多層次的,一個(gè)調(diào)用了較低層次元件的頂層設(shè)計(jì)實(shí)體模塊,本身也可以

40、被更高層次設(shè)計(jì)實(shí)體所調(diào)用,稱為該設(shè)計(jì)實(shí)體模塊中的一個(gè)元件。被例化語(yǔ)句調(diào)用的底層模塊可以以不同形式出現(xiàn):一個(gè)設(shè)計(jì)好的Verilog設(shè)計(jì)文件;來(lái)自Verilog元件庫(kù)的元件;FPGA器件中的嵌入式元件功能塊;以別的硬件描述語(yǔ)言設(shè)計(jì)的元件;IP核。 E D A技術(shù)與應(yīng)用3、Verilog例化語(yǔ)句及其用法:Verilog描述的模塊名,即元件名。具有唯一性。如例3-6中的h_adder和or。:在具體電路上元件被調(diào)用后放在不同位置或擔(dān)任不同任務(wù)必須有對(duì)應(yīng)的名稱。用戶自定義,沒(méi)有唯一性,但在模塊中一旦確定此名,就唯一確定下來(lái)了。如例3-6中的U1、U2、U3。例化元件端口是模塊文件中已定義的端口名(內(nèi)部端

41、口名),它與其對(duì)應(yīng)括號(hào)內(nèi)的例化元件外接端口名相連。 ( .例化元件端口(例化元件外接端口名), ); E D A技術(shù)與應(yīng)用3、Verilog例化語(yǔ)句及其用法例:h_adder U2 (.A(net1), .SO(sum), .B(cin), .CO(net3);/描述某 一元件與外部連線或其他元件連接的情況。 h_adder是待調(diào)用的模塊元件名,表示該模塊是半加器。U2是例化的元件名,是用戶在特定情況下調(diào)用元件h_adder而取的名字,表示全加器電路圖上的第二個(gè)半加器U2。.A(net1)表示第二個(gè)半加器的輸入端口A與外部連線net1相連。.SO(sum)表示第二個(gè)半加器的輸出端口SO與全加器

42、輸出口線sum相連。端口名關(guān)聯(lián)法h_adderU2 E D A技術(shù)與應(yīng)用3、Verilog例化語(yǔ)句及其用法也稱信號(hào)名映射法。端口名關(guān)聯(lián)法中連接表述放置的位置不影響連接結(jié)果。如 h_adder U2 (.A(net1), .SO(sum), .B(cin), .CO(net3);與h_adder U2( .B(cin), .CO(net3), .A(net1), .SO(sum); 功能相同。允許某些或某個(gè)端口不接,即連續(xù)表述不寫(xiě)上去。如.B()。若是輸入口則綜合結(jié)果是高阻態(tài),若是輸出口則為斷開(kāi)。端口名關(guān)聯(lián)法 E D A技術(shù)與應(yīng)用3、Verilog例化語(yǔ)句及其用法也稱位置映射法。模塊源文件中的端

43、口名與例化語(yǔ)句端口名順序和位置一一對(duì)應(yīng)。一旦位置關(guān)聯(lián)例化語(yǔ)句確定后,被連接元件的源文件中的端口表內(nèi)的信號(hào)排列位置就不能再變動(dòng)了。位置關(guān)聯(lián)法例:h_adder U1 (ain, bin, net1, net2);半加器模塊:h_adder (A, B, SO, CO) E D A技術(shù)與應(yīng)用2、全加器頂層設(shè)計(jì)文件例3-6:全加器 module f_adder (ain, bin, cin, cout, sum); output cout, sum; input ain, bin, cin; wire net1, net2, net3; /定義網(wǎng)線型變量net1、 net2和net3,用作內(nèi)部 底層

44、元件連接的連線。 h_adder U1 (ain, bin, net1, net2); /調(diào)用底層元件 h_adder U2 (.A(net1), .SO(sum), .B(cin), .CO(net3); or U3 (cout, net2, net3);endmodule E D A技術(shù)與應(yīng)用3.3.2 半加器的UDP結(jié)構(gòu)建模掃描方式調(diào)用了兩個(gè)元件:與門(mén)and庫(kù)元件。端口表內(nèi)最左側(cè)信號(hào)默認(rèn)定義為輸出信號(hào),其他信號(hào)默認(rèn)為輸入信號(hào)。異或門(mén)XOR2。用戶自己設(shè)計(jì)的一個(gè)邏輯元件。結(jié)構(gòu)化建模:直接描述基本邏輯元件的連接并由此實(shí)現(xiàn)邏輯功能的Verilog表述方式。半加器的電路結(jié)構(gòu)例3-8:半加器 mo

45、dule H_ADDER (A, B, SO, CO); input A, B; output SO, CO; XOR2 U1 (SO, A, B); /調(diào)用元件XOR2 and U2 (CO, A, B);/調(diào)用元件andendmodule E D A技術(shù)與應(yīng)用例3-7:異或邏輯元件 primitive XOR2 (DOUT, X1, X2); input X1, X2; output DOUT; table / / X1 X2 : DOUT 0 0 : 0; 0 1 : 1; 1 0 : 1; 1 1 : 0; endtableendprimitive用戶設(shè)計(jì)的異或邏輯元件。內(nèi)部包含一張異

46、或邏輯真值表。XOR2元件文件(例3-7)和頂層文件(例3-8)的存盤(pán)文件名分別是XOR2.v, H_ADDER.v,需要放在同一文件夾中進(jìn)行編譯處理。 E D A技術(shù)與應(yīng)用1、庫(kù)元件及其調(diào)用Verilog中預(yù)先定義的基本邏輯單元稱為原語(yǔ)(primitive),即現(xiàn)成的門(mén)級(jí)庫(kù)元件。包括and(與門(mén))、nand(與非門(mén))、or(或門(mén))、nor(或非門(mén))、xor(異或門(mén))、xnor(同或門(mén))、not(非門(mén))等。有一到多個(gè)輸入端口,但只有一個(gè)輸出,且默認(rèn)輸出口的排列位置在最左側(cè)。如兩輸入與門(mén)and(out, in1, in2),三輸入與門(mén)and(out, in1, in2, in3)。內(nèi)建于庫(kù)中的門(mén)

47、級(jí)元件的元件名也都是關(guān)鍵詞,必須小寫(xiě)。 E D A技術(shù)與應(yīng)用2、用戶自定義原語(yǔ)用戶自定義原語(yǔ)(User-Defined Primitives, UDP)是用戶自定義基礎(chǔ)元件,其行為和Verilog內(nèi)部的基本單元類似。關(guān)鍵詞primitive_endprimitive。primitive 旁的標(biāo)識(shí)符是元件名,元件名右側(cè)的括號(hào)是端口表,端口表中的標(biāo)識(shí)符是端口名,且端口表中的端口名是固定的。UDP元件只能有一個(gè)輸出端,且輸出端口名要放在端口表括號(hào)的最左側(cè),而在右側(cè)只能列出所有輸入端口。UDP的功能由真值表定義,關(guān)鍵詞table_endtable引導(dǎo)出該UDP邏輯功能的真值表。 E D A技術(shù)與應(yīng)用例

48、3-7:異或邏輯元件 primitive XOR2 (DOUT, X1, X2); input X1, X2; output DOUT; table / / X1 X2 : DOUT 0 0 : 0; 0 1 : 1; 1 0 : 1; 1 1 : 0; endtableendprimitive用戶設(shè)計(jì)的異或邏輯元件。內(nèi)部包含一張異或邏輯真值表。XOR2元件文件(例3-7)和頂層文件(例3-8)的存盤(pán)文件名分別是XOR2.v, H_ADDER.v,需要放在同一文件夾中進(jìn)行編譯處理。 E D A技術(shù)與應(yīng)用3.3.3 利用UDP元件設(shè)計(jì)多路選擇器真值表中的“?”表示不在乎是什么值。因?yàn)橹焕粋€(gè)元

49、件,所以可以省略例化元件名。例3-9:4選1多路選擇器 primitiveMUX41_UDP (Y, D3, D2, D1, D0, S1, S0); input D3, D2, D1, D0, S1, S0; output Y; table / / D3 D2 D1 D0 S1 S0 : Y ? ? ? 1 0 0 : 1; ? ? ? 0 0 0 : 0; ? ? 1 ? 0 1 : 1; ? ? 0 ? 0 1 : 0; ? 1 ? ? 1 0 : 1; ? 0 ? ? 1 0 : 0; 1 ? ? ? 1 1 : 1; 0 ? ? ? 1 1 : 0; endtableendprimi

50、tive例3-10:4選多路選擇器 module MUX41UDP (D, S, DOUT); input 3: 0 D; input 1: 0 S; output DOUT; MUX41_UDP (DOUT, D3, D2, D1, D0, S1, S0);endmodule E D A技術(shù)與應(yīng)用3.3.4 8位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用例3-11:8位加法器 module ADDER8B (A, B, CIN, COUT, DOUT); output 7: 0 DOUT; output COUT; input 7: 0 A, B; input CIN; wire 8: 0 DATA; /加

51、操作的進(jìn)位自動(dòng)進(jìn)入 DATA8 assign DATA=A+B+CIN; assign COUT=DATA8; assign DOUT=DATA7: 0;endmodule例3-12:8位加法器 module ADDER8B (A, B, CIN, COUT, DOUT); output 7: 0 DOUT; output COUT; input 7: 0 A, B; input CIN;/加操作的進(jìn)位進(jìn)入并位COUT assign COUT, DOUT=A +B+CIN;endmodule E D A技術(shù)與應(yīng)用3.3.4 8位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用8位加法器仿真波形8位加法器的RTL電路

52、了解和檢驗(yàn)程序的詳細(xì)功能8位數(shù)相加的和再加進(jìn)位值 E D A技術(shù)與應(yīng)用3.3.5 算術(shù)運(yùn)算操作符算術(shù)操作符功能說(shuō)明操作示例+加S=A+B=8b00011000-減S=B-A=8b11111110*乘S=A*B=8b10001111/除結(jié)果:小數(shù)拋棄S=A/3=8b00000100%求余除法求余數(shù)S=A%3=8b00000001設(shè):A3: 0=4b1101; B3: 0=4b1011; 定義S為S7: 0五種算術(shù)運(yùn)算符,其中加、減、乘法運(yùn)算符可綜合,除和求余運(yùn)算符的操作數(shù)必須以2為底數(shù)的冪才可綜合。運(yùn)算結(jié)果的位寬由操作表達(dá)式左端的賦值目標(biāo)信號(hào)的位寬來(lái)決定。對(duì)數(shù)據(jù)類型沒(méi)有嚴(yán)格要求。數(shù)制間可混合進(jìn)行

53、運(yùn)算。 E D A技術(shù)與應(yīng)用3.3.5 算術(shù)運(yùn)算操作符算術(shù)操作符功能說(shuō)明操作示例+加S=A+B=8b00011000-減S=B-A=8b11111110*乘S=A*B=8b10001111/除結(jié)果:小數(shù)拋棄S=A/3=8b00000100%求余除法求余數(shù)S=A%3=8b00000001設(shè):A3: 0=4b1101; B3: 0=4b1011; 定義S為S7: 0對(duì)于減法運(yùn)算,輸出的結(jié)果是補(bǔ)碼。對(duì)于乘法運(yùn)算,如果為無(wú)符號(hào)數(shù)相乘,可直接用乘法算符,如果為有符號(hào)數(shù)相乘,需將操作數(shù)和輸出結(jié)果用signed定義為有符號(hào)數(shù),乘法結(jié)果為補(bǔ)碼。對(duì)于加法運(yùn)算,無(wú)論是否將操作數(shù)定義為有符號(hào)數(shù),都當(dāng)做無(wú)符號(hào)數(shù)處理。

54、 E D A技術(shù)與應(yīng)用例3-13:有符號(hào)數(shù)和無(wú)符號(hào)數(shù)的加法與乘法比較 module test1 (A, B, C, D, RCD, RAB, RM1, RM2, S, C0, R1, R2); input 3: 0 C, D; input signed 3: 0 A, B; output 3: 0 RCD; output 3: 0 RAB; output 7: 0 RM1; output 7: 0 RM2; output 3: 0 S; output C0; output R1, R2; reg 3: 0 S; reg C0; reg 3: 0 RCD; reg 7: 0 RM1; reg s

55、igned 3: 0 RAB; reg signed 7: 0 RM2; reg R1, R2; always (A, B, C, D) beginRCD = C+D; RAB = A+B;RM1 = C*D; RM2 = A*B;C0, S = 1b0, C - 1b0, D;/注意并位操作R1 D); R2 B); end endmodule仿真波形 E D A技術(shù)與應(yīng)用3.3.6 BCD碼加法器設(shè)計(jì)4位二進(jìn)制表示的BCD碼范圍是09,其余6個(gè)數(shù),10(4b1010)15(4b1111)屬于無(wú)效BCD碼。若兩個(gè)BCD碼相加后值超過(guò)9,必須再加上6得到一個(gè)有效BCD碼,并向高位進(jìn)位1。有時(shí)盡

56、管兩個(gè)BCD碼相加后的值是有效的BCD碼,但如果相加后向高位有進(jìn)位,仍然認(rèn)為其和大于等于10,仍需相加的結(jié)果再加上6。十進(jìn)制數(shù)8421BCD碼二進(jìn)制數(shù)十進(jìn)制數(shù)8421BCD碼二進(jìn)制數(shù)000000000810001000100010001910011001200100010100001 00001010300110011110001 00011011401000100120001 0010 1100501010101130001 0011 1101601100110140001 01001110701110111150001 01011111BCD碼表 E D A技術(shù)與應(yīng)用例3-14:BCD碼加

57、法器 module BCD_ADDER (A, B, D); input 7: 0 A, B; output 8: 0 D; wire 4: 0 DT0, DT1; reg 8: 0 D; reg S; always (DT0) begin if (DT04: 0=5b01010) /如果低位BCD碼的和大于等于10,則使和加上6,且有進(jìn)位,使進(jìn)位標(biāo)志S等于1,使用了5位進(jìn)行比較,考慮了進(jìn)位的可能性begin D 3: 0= (DT0 3: 0+4b0110); S=1b1; end else begin D3: 0=DT03: 0; S=1b0; end /否則,將低位值賦予低位BCD碼D3

58、:0輸出,無(wú)進(jìn)位,使進(jìn)位標(biāo)志S等于0 end always (DT1) begin if (DT14: 0=5b01010) begin D 7: 4= (DT1 3: 0+4b0110); D8=1b1; end else begin D7: 4=DT13: 0; D8=1b0; end end assign DT0=A3: 0+B3: 0; /設(shè)沒(méi)有來(lái)自低位的進(jìn)位 assign DT1=A7: 4+B7: 4+S;/S是來(lái)自低位BCD碼相加的進(jìn)位endmodule E D A技術(shù)與應(yīng)用例3-14的仿真波形不等式操作符含義操作示例大于(AB)=1; (A12)=1;小于(AB)=0; (A2

59、0)=1;=小于或等于(A=大于或等于(A=14)=0設(shè):A3: 0=4B1101; B3: 0=4B0110; 不等式操作符 E D A技術(shù)與應(yīng)用3.4 組合邏輯乘法器設(shè)計(jì)3.4.1 參數(shù)定義關(guān)鍵詞parameter和localparamparameter是定義參數(shù)的關(guān)鍵詞。用來(lái)定義常量,即用parameter來(lái)定義一個(gè)標(biāo)識(shí)符,用以代表某個(gè)常量,如延時(shí)、變量位寬等,從而成為一個(gè)符號(hào)化常量。改變parameter的定義 時(shí),就能很容易地改變整個(gè)設(shè)計(jì)。例:parameter A=15, B=4b1011, C=8hAC;parameter d=8b1001_0011, e=8sb10101101

60、;模塊中使用參數(shù)定義的常數(shù)只能被賦值一次。localparam是是一個(gè)局部參數(shù)定義關(guān)鍵詞,用法與parameter相同,只是無(wú)法通過(guò)外部程序的數(shù)據(jù)傳遞來(lái)改變localparam定義的常量。parameter 標(biāo)識(shí)符名1=表達(dá)式或數(shù)值1, 標(biāo)識(shí)符名2=表達(dá)式或數(shù)值2,; E D A技術(shù)與應(yīng)用3.4.2 整數(shù)型寄存器類型定義integer類型與reg都屬于寄存器類型。定義為integer類型的變量多數(shù)被用于表達(dá)循環(huán)變量,用于指示循環(huán)的次數(shù)。reg類型必須明確定義其位數(shù),如reg 7: 0 A;integer類型的定義不必特指位數(shù),默認(rèn)為32位寬的二進(jìn)制寄存器類型。integer 標(biāo)識(shí)符1,標(biāo)識(shí)符2

溫馨提示

  • 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)論