《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)與應(yīng)用》 課件 PGA-第5章-基本組合邏輯電路的設(shè)計(jì)_第1頁(yè)
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)與應(yīng)用》 課件 PGA-第5章-基本組合邏輯電路的設(shè)計(jì)_第2頁(yè)
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)與應(yīng)用》 課件 PGA-第5章-基本組合邏輯電路的設(shè)計(jì)_第3頁(yè)
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)與應(yīng)用》 課件 PGA-第5章-基本組合邏輯電路的設(shè)計(jì)_第4頁(yè)
《Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)與應(yīng)用》 課件 PGA-第5章-基本組合邏輯電路的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩112頁(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)介

第5章基本組合邏輯電路的設(shè)計(jì)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法模塊內(nèi)部邏輯行為描述對(duì)外是不可見(jiàn)的,其內(nèi)部描述的改變,不會(huì)影響模塊之間的連接關(guān)系。用VerilogHDL設(shè)計(jì)模塊電路內(nèi)部具體邏輯行為的描述方式也稱為建模方式。組合邏輯電路模塊的功能描述,可以采用以下三種描述方式:(1)元件例化描述(2)數(shù)據(jù)流描述(3)always語(yǔ)句5.1.1元件例化描述在VerilogHDL設(shè)計(jì)中,用戶常需要利用基本門(mén)電路和自定義模塊或?qū)嶓w進(jìn)行組合,設(shè)計(jì)數(shù)字系統(tǒng)。VerilogHDL預(yù)先定義了常見(jiàn)的基本門(mén)級(jí)元件,如and、or、nor等基本門(mén)級(jí)電路,并允許用戶自定義設(shè)計(jì)有特定功能的模塊元件。元件例化的過(guò)程是將預(yù)先設(shè)計(jì)好的模塊電路定義為一個(gè)元件,然后利用映射語(yǔ)句將此元件與另一個(gè)模塊實(shí)體指定的端口相連,實(shí)現(xiàn)層次化數(shù)字系統(tǒng)設(shè)計(jì)。采用元件例化法設(shè)計(jì)復(fù)雜數(shù)字電路時(shí),首先需要完成描述數(shù)字系統(tǒng)總功能的電路原理圖設(shè)計(jì),參考數(shù)字電路相關(guān)知識(shí);然后,根據(jù)電路原理圖中各元件之間的關(guān)系,運(yùn)用VerilogHDL例化所有元件,完成數(shù)字電路設(shè)計(jì)。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法元件例化具體方式主要有兩種:(1)位置映射法(2)信號(hào)名稱映射法其中信號(hào)名稱映射法不能用于描述標(biāo)準(zhǔn)的基本門(mén)級(jí)元件。1.位置映射法位置映射法嚴(yán)格要求模塊實(shí)體的端口名稱與元件定義的輸入/輸出端口順序一一對(duì)應(yīng),但不需要注明元件定義時(shí)的端口名,其一般語(yǔ)句引用格式如下:

元件名模塊例化名(輸出端口1信號(hào)名,輸出端口2信號(hào)名,…,

輸入端口1信號(hào)名,輸入端口2信號(hào)名,…);其中,“模塊例化名”是用戶命名的模塊實(shí)體名稱,可以省略。在輸入/輸出端口列表中,括號(hào)左邊的第一個(gè)端口通常為輸出,后續(xù)端口則為輸入。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述舉例如下:andU1(COUT,A,B,C,D);例化4輸入與門(mén),例化后與門(mén)輸入為A、B、C、D信號(hào),輸出為COUT信號(hào),名稱U1可省略。orU2(COUT,A,B,C,D);例化2輸入或門(mén),例化后或門(mén)輸入為A、B、C、D信號(hào),輸出為COUT信號(hào),名稱U2可省略。【例5.1】用位置映射法法設(shè)計(jì)1位半加器電路,其模塊電路名稱為half_add1,元件符號(hào)如圖5.1所示。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述圖5.11位半加器元件符號(hào)加法器是一種常見(jiàn)的算術(shù)運(yùn)算電路,包括半加器、全加器、多位加法器等。半加器是相對(duì)較簡(jiǎn)單的加法器,僅考慮兩個(gè)加數(shù)本身,無(wú)需考慮來(lái)自低位的進(jìn)位。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述表5.11位半加器功能表1位半加器的邏輯表達(dá)式:圖5.21位半加器電路原理圖假設(shè)A、B分別表示半加器加數(shù)和被加數(shù)輸入信號(hào),逢二即進(jìn)位,SUM表示當(dāng)前位值輸出信號(hào),COUT表示進(jìn)位輸出信號(hào),功能表如表5.1所示。觀察邏輯表達(dá)式可知,可以使用異或門(mén)、與門(mén)等基本門(mén)級(jí)元件實(shí)現(xiàn)1位半加器電路,將邏輯表達(dá)式轉(zhuǎn)換成電路原理圖如圖5.2所示。對(duì)應(yīng)代碼如下:modulehalf_add1(inputA,inputB,//兩個(gè)加數(shù)輸入端口聲明 outputwireSUM,//輸出端口聲明 outputwireCOUT);//參考電路原理圖5.2,位置映射法描述全加器電路xorE0(SUM,A,B);andE1(COUT,A,B);endmodule5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述圖5.31位半加器功能仿真1位半加器的功能仿真結(jié)果如圖5.3所示。當(dāng)A=“0”、B=“0”時(shí),SUM輸出結(jié)果為“0”,無(wú)進(jìn)位信號(hào),COUT=“0”;當(dāng)A=“1”、B=“0”時(shí),SUM輸出結(jié)果為“1”,無(wú)進(jìn)位信號(hào),COUT=“0”;當(dāng)A=“0”、B=“1”時(shí),SUM輸出結(jié)果為“1”,無(wú)進(jìn)位信號(hào),COUT=“0”;當(dāng)A=“1”、B=“1”時(shí),SUM輸出結(jié)果為“1”,有進(jìn)位信號(hào),COUT=“1”?!纠?.2】用位置映射法法設(shè)計(jì)1位全加器電路,其模塊電路名稱為full_add1。元件符號(hào)如圖5.4所示。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述圖5.41位全加器元件符號(hào)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述表5.21位全加器功能表1位全加器的邏輯表達(dá)式:圖5.5一位全加器電路原理圖根據(jù)設(shè)計(jì)原理,1位半加器功能表見(jiàn)表5.2。觀察1位全加器的邏輯表達(dá)式可知:可使用異或門(mén)、與門(mén)、或門(mén)等基本門(mén)級(jí)元件實(shí)現(xiàn)1位全加器電路,將邏輯表達(dá)式轉(zhuǎn)換成電路原理圖,如圖5.5所示。其中w1,w2,w3為異或門(mén)“E1”,與門(mén)“E2”和“E3”的輸出信號(hào)。對(duì)應(yīng)代碼如下:modulefull_add1(inputCIN,

inputA,inputB,//兩個(gè)加數(shù)輸入端口聲明

outputwireSUM,//輸出端口聲明

outputwireCOUT);wirew1,w2,w3;//定義基本門(mén)元件E1~E3的輸出信號(hào)為:w1,w2,w3

//參考電路原理圖5.5,位置映射法描述全加器電路xorE1(w1,A,B);andE2(w2,A,B);andE3(w3,w1,CIN);xorE4(SUM,w1,CIN);orE5(COUT,w2,w3);endmodule5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述1位全加器的功能仿真結(jié)果如圖5.6所示。當(dāng)A=“0”、B=“0”、CIN=“0”時(shí),SUM輸出結(jié)果為“0”,無(wú)進(jìn)位信號(hào),COUT=“0”;當(dāng)A=“0”、B=“0”、CIN=“1”時(shí),SUM輸出結(jié)果為“1”,無(wú)進(jìn)位信號(hào),COUT=“0”;當(dāng)A=“0”、B=“1”、CIN=“1”時(shí),SUM輸出結(jié)果為“0”,有進(jìn)位信號(hào),COUT=“1”;當(dāng)A=“1”、B=“1”、CIN=“1”時(shí),SUM輸出結(jié)果為“1”,有進(jìn)位信號(hào),COUT=“1”。以此類推,其功能仿真結(jié)果驗(yàn)證了設(shè)計(jì)的正確性。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述圖5.61位全加器功能仿真2.信號(hào)名稱映射法信號(hào)名稱映射法利用“.”符號(hào)表示元件定義時(shí)的端口名稱,不要求嚴(yán)格遵守端口順序,但只能用于描述用戶自定義的模塊元件,其一般語(yǔ)句引用格式如下:元件名模塊例化名(.元件定義端口1信號(hào)名(端口1信號(hào)名),.元件定義端口2信號(hào)名(端口2信號(hào)名),.元件定義端口3信號(hào)名(端口1信號(hào)名),…);其中,“模塊例化名”是用戶命名的模塊實(shí)體名稱,可以省略。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述舉例如下:假設(shè)and與or是用戶定義的2輸入與門(mén)和2輸入或門(mén),其輸出端口名稱為:IN1,IN2,輸出端口名稱為:OUT。andU1(.IN1(A),.IN2(B),.OUT(COUT));例化2輸入與門(mén),例化后與門(mén)輸入為A、B信號(hào),輸出為COUT信號(hào),名稱可省略。orU2(.IN1(A),.IN2(B),.OUT(COUT));例化2輸入或門(mén),例化后或門(mén)輸入為A、B信號(hào),輸出為COUT信號(hào),名稱可省略?!纠?.3】用信號(hào)名稱映射法完成1位半加器電路,其模塊電路名稱half_add_2。參考例5.1完成本次設(shè)計(jì)。半加器實(shí)例的輸出信號(hào)為:A2、B2,輸出信號(hào)為SUM2、COUT2,其描述代碼如下:5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述modulehalf_add2(inputA2,inputB2,

outputwireSUM2, outputwireCOUT2);//例5.1自定義的1位半加器:half_add1,信號(hào)名稱映射half_add1u_half_add( .A(A2), .B(B2), .SUM(SUM2), .COUT(COUT2));endmodule功能仿真結(jié)果參考圖5.7所示:5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述圖5.71位半加器功能仿真【例5.4】用信號(hào)名稱映射法設(shè)計(jì)1位全加器電路,其模塊電路名稱full_add2。參考例5.2所設(shè)計(jì)1位全加器完成本次設(shè)計(jì)。全加器的輸出信號(hào)為:A2、B2、CIN2,輸出信號(hào)為SUM2、COUT2,其描述代碼如下:5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述modulefull_add2(inputCIN2,

inputA2,inputB2, outputwireSUM2, outputwireCOUT2);//例5.2用戶定義的1位全加器:full_add1,信號(hào)名稱映射full_add1u_full_add1(.A(A2),.B(B2),.CIN(CIN2),.SUM(SUM2),.COUT(COUT2));endmodule功能仿真結(jié)果如圖5.8所示。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述圖5.81位全加器功能仿真兩種映射方法各有特點(diǎn):(1)位置映射法:相對(duì)比較直觀,適用于端口較少的元件模塊例化;(2)信號(hào)名稱映射法:則相對(duì)簡(jiǎn)單,不僅代碼易錯(cuò)性較低,而且程序可讀性和可移植性更優(yōu)。因此,在FPGA實(shí)際開(kāi)發(fā)流程中,信號(hào)名稱映射法是人們廣泛采用的方式。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.1元件例化描述數(shù)據(jù)流描述是使用連續(xù)賦值assign語(yǔ)句對(duì)電路的邏輯功能建模方式。相對(duì)于元件例化描述,數(shù)據(jù)流描述能從更高的抽象層次設(shè)計(jì)電路,將設(shè)計(jì)重點(diǎn)放在電路功能描述,而無(wú)需考慮電路原理圖的設(shè)計(jì)。該方式只能用于設(shè)計(jì)組合邏輯電路,并且其賦值運(yùn)算為“=”。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.2數(shù)據(jù)流描述assign語(yǔ)句只能對(duì)wire型變量進(jìn)行賦值,其等號(hào)左邊變量的數(shù)據(jù)類型也必須是wire型,其語(yǔ)句一般引用格式如下:assign變量名=表達(dá)式;舉例如下:assignY=a-b;//描述兩個(gè)信號(hào)做減法assignY=a*b;//描述兩個(gè)信號(hào)做乘法【例5.5】用數(shù)據(jù)流描述法設(shè)計(jì)1位半加器電路,其模塊電路名稱為half_add_3。參考5.1完成本次設(shè)計(jì)。半加器輸出信號(hào)為A3、B3,輸出信號(hào)為SUM3、COUT3,其描述代碼如下。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.2數(shù)據(jù)流描述參考代碼一:modulehalf_add1_3( inputA3,inputB3, outputwireSUM3, outputwireCOUT3);//assign語(yǔ)句描述半加器邏輯assignSUM3=A3^B3;assignCOUT3=A3&B3;endmodule參考代碼二://**********1位半加器,數(shù)據(jù)流法參考*********modulehalf_add1_3( inputA3,inputB3, outputwireSUM3, outputwireCOUT3);//assign語(yǔ)句描述半加器邏輯assign{COUT3,SUM3}=A3+B3;endmodule功能仿真結(jié)果可參考圖5.3?!纠?.6】用數(shù)據(jù)流描述法設(shè)計(jì)1位全加器電路,其模塊電路名稱為full_add_3。參考5.2完成本次設(shè)計(jì)。全加器輸出信號(hào)為:A3、B3、CIN3,輸出信號(hào)為SUM3、COUT3,其描述代碼如下。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.2數(shù)據(jù)流描述參考代碼一://**********1位全加器,數(shù)據(jù)流法參考*********modulefull_add1_3(inputCIN3,

inputA3,inputB3,//兩個(gè)加數(shù)輸入端口聲明

outputwireSUM3,//輸出端口聲明

outputwireCOUT3);//描述全加器邏輯assignSUM3=A3^B3^CIN3;assignCOUT3=(A3&B3)|(A3^B3)&CIN3;endmodule功能仿真結(jié)果可參考圖5.6。【例5.6】用數(shù)據(jù)流描述法設(shè)計(jì)1位全加器電路,其模塊電路名稱為full_add_3。參考5.2完成本次設(shè)計(jì)。全加器輸出信號(hào)為:A3、B3、CIN3,輸出信號(hào)為SUM3、COUT3,其描述代碼如下。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.2數(shù)據(jù)流描述參考代碼二://**********1位全加器,數(shù)據(jù)流法參考*********modulefull_add1_3(inputCIN3,

inputA3,inputB3,

outputwireSUM3,

outputwireCOUT3);assign{COUT3,SUM3}=A3+B3+CIN3;endmodule功能仿真結(jié)果可參考圖5.6。在VerilogHDL中,always語(yǔ)句可以用于描述組合邏輯電路,也可以用于描述時(shí)序邏輯電路,是行為級(jí)描述中最重要的一種形式,其格式為:always@(敏感事件列表)begin塊內(nèi)局部變量說(shuō)明,可選;過(guò)程賦值語(yǔ)句;end5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.3always語(yǔ)句描述例如:always@(aorb)//對(duì)輸入信號(hào)a,b敏感beginY=a-b;//描述兩個(gè)信號(hào)做減法F=a*b;//描述兩個(gè)信號(hào)做乘法end5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.3always語(yǔ)句描述always語(yǔ)句屬于無(wú)限循環(huán)語(yǔ)句,只要觸發(fā)語(yǔ)句敏感事件,一直重復(fù)執(zhí)行其內(nèi)部的過(guò)程賦值語(yǔ)句。語(yǔ)句使用時(shí),需注意以下事項(xiàng):(1)敏感事件列表,若敏感參數(shù)發(fā)生變化,則觸發(fā)always塊中語(yǔ)句執(zhí)行,可選項(xiàng),若無(wú)敏感信號(hào),缺省表示對(duì)所有輸入信號(hào)都敏感。(2)賦值語(yǔ)句既可以使用阻塞操作符“=”,也可以使用非阻塞操作符“<=”,描述時(shí)序邏輯電路時(shí)推薦使用非阻塞賦值語(yǔ)句。(3)begin_end塊語(yǔ)句與C語(yǔ)言中大括號(hào){}類似,界定一組行為描述,通常用于標(biāo)識(shí)順序執(zhí)行語(yǔ)句塊。(4)在always塊語(yǔ)句中賦值時(shí),等式左邊變量類型必須定義為variable類型。(5)一個(gè)程序設(shè)計(jì)中,可以有1個(gè)或多個(gè)always塊語(yǔ)句,always塊語(yǔ)句不能嵌套使用,多個(gè)always塊語(yǔ)句之間是并行執(zhí)行關(guān)系。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.3always語(yǔ)句描述【例5.7】用always語(yǔ)句設(shè)計(jì)1位半加器電路,其模塊電路名稱half_add_4。半加器輸出信號(hào)為:A4、B4,輸出信號(hào)為SUM4、COUT4,其描述代碼如下:modulehalf_add_4(

inputA4,

inputB4,

outputwireSUM4,

outputwireCOUT4);always@(*)//“*”表示對(duì)所有輸出信號(hào)敏感begin{COUT4,SUM4}=A4+B4;endendmodule功能仿真結(jié)果參考圖5.3所示。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.3always語(yǔ)句描述【例5.8】用always語(yǔ)句設(shè)計(jì)1位全加器電路,其模塊電路名稱為full_add_4。全加器輸出信號(hào)為:A4、B4、CIN4,輸出信號(hào)為SUM4、COUT4,其描述代碼如下:modulefull_add_4(inputCIN4,

inputA4,inputB4,

outputwireSUM4,

outputwireCOUT4);//使用并接操作符,描述全加器功能always@(*)begin{COUT4,SUM4}=A4+B4+CIN4;endendmodule功能仿真結(jié)果可參考圖5.6。模塊是VerilogHDL數(shù)字電路設(shè)計(jì)的基本單位,其描述包含了具體硬件電路的功能或結(jié)構(gòu),以及與其他模塊通信的外部端口,是層次化設(shè)計(jì)的基礎(chǔ)。層次化設(shè)計(jì)基本思想就是將一個(gè)比較復(fù)雜的數(shù)字電路劃分多模塊、多層次,再分別對(duì)每個(gè)模塊建模,然后將同一層次的功能模塊層層組合成子模塊和總模塊,完成所需的設(shè)計(jì)。在層次化設(shè)計(jì)中所使用的模塊通常有兩種,一種是開(kāi)發(fā)環(huán)境提供的標(biāo)準(zhǔn)模塊,如and、or、nor等基本門(mén)電路,另一種是由用戶設(shè)計(jì)的具有特定功能的模塊。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)數(shù)字電路層次化設(shè)計(jì)有兩種設(shè)計(jì)方法:(1)自頂向下(top-down)(2)自底向上(bottom-up)自頂向下:是先將最終設(shè)計(jì)數(shù)字系統(tǒng)抽象為頂層模塊,再按特定方式將頂層模塊劃分為各個(gè)子模塊,然后對(duì)子模塊進(jìn)行邏輯設(shè)計(jì)。自底向上:是傳統(tǒng)數(shù)字系統(tǒng)設(shè)計(jì)多采用的方法,設(shè)計(jì)者選用集成電路芯片和其他元器件,由底層逐級(jí)向上構(gòu)成子系統(tǒng)和系統(tǒng)。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)

圖5.9自頂向下設(shè)計(jì)結(jié)構(gòu)圖圖5.9是自頂向下設(shè)計(jì)的層次結(jié)構(gòu)圖,其設(shè)計(jì)過(guò)程可以理解為從電路頂層抽象描述向最底層描述的一系列轉(zhuǎn)換過(guò)程,直到得到易實(shí)現(xiàn)的硬件單元描述?!纠?.9】根據(jù)圖5.10所示的1位全加-減器的層次結(jié)構(gòu)框圖,使用自頂向下方法實(shí)現(xiàn)設(shè)計(jì)1位全加-減電路系統(tǒng)(SEL端為全加減器的控制端,SEL為1時(shí),數(shù)字系統(tǒng)執(zhí)行全加功能,反之?dāng)?shù)字系統(tǒng)執(zhí)行全減功能)。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)圖5.101位全加-減器層次結(jié)構(gòu)圖由圖5.10可知,1位全加-減器劃分為3個(gè)次層,由3個(gè)用戶設(shè)計(jì)的模塊,以及開(kāi)發(fā)環(huán)境提供的基本門(mén)級(jí)元件構(gòu)成。首先,通過(guò)VerilogHDL描述方式,分別構(gòu)建1位全加器、全減器模塊,以及選擇控制模塊,接著引用此3個(gè)元件模塊完成頂層模塊設(shè)計(jì)。當(dāng)控制端“SEL”為“1”時(shí),選擇控制器輸出全加器的運(yùn)算結(jié)果,反之選擇全減器運(yùn)算結(jié)果作為當(dāng)前輸出結(jié)果。參考設(shè)計(jì)方案如圖5.11所示。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)圖5.111位全加-減器設(shè)計(jì)方案為加深數(shù)字電路設(shè)計(jì)基礎(chǔ)理論理解,本例電路設(shè)計(jì)分別采用元件例化、數(shù)據(jù)流和always語(yǔ)句描述方式。讀者可以嘗試運(yùn)用以上任意1種方式重新描述這些子模塊,并在Vivado或Quartus等開(kāi)發(fā)工具中進(jìn)行仿真驗(yàn)證。1.1位全加器VerilogHDL設(shè)計(jì)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)參考代碼如下:modulefull_add1(//參考例5.2inputCIN,

inputA,inputB,

outputwireSUM,

outputwireCOUT);//定義基本門(mén)元件E1~E3的輸出信號(hào)為:w1,w2,w3wirew1,w2,w3;xorE1(w1,A,B);andE2(w2,A,B);andE3(w3,w1,CIN);xorE4(SUM,w1,CIN);orE5(COUT,w2,w3);endmodule其功能仿真結(jié)果可參考圖5.6。2.1位全減器VerilogHDL設(shè)計(jì)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)典型的1位全減器:AS、BS分別表示減數(shù)和被減數(shù)輸入信號(hào),CS表示借位輸入信號(hào),S表示當(dāng)前位值輸出信號(hào),CSUB表示借位輸出信號(hào),其功能如表5.3所示:表5.31位全減器功能表1位全加器的邏輯表達(dá)式:圖5.121位全減器電路原理圖觀察邏輯表達(dá)式可知,可以使用異或門(mén)、與門(mén)、或門(mén)等基本門(mén)級(jí)元件實(shí)現(xiàn)1位全加器電路,其電路原理參考圖如圖5.12所示:圖5.131位全減器元件符號(hào)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)其描述代碼如下:modulefull_sub1(inputAS,inputBS,inputCIN,outputwireS,outputwireCSUB);//定義基本門(mén)元件E1-E5的輸出信號(hào)為:w1,w2,w3,w4,w5wirew1,w2,w3,w4,w5;//全減器功能描述,參考電路原理圖xor(w1,AS,BS);nor(w2,AS);nor(w3,w1);and(w4,BS,w2);and(w5,CIN,w3);xor(S,CIN,w1);or(CSUB,w4,w5);endmodule1位全減器的功能仿真結(jié)果如圖5.14所示。當(dāng)AS=“0”、BS=“0”、CIN=“0”時(shí),S輸出結(jié)果為“0”,無(wú)借位信號(hào),CSUB=“0”;當(dāng)AS=“0”、BS=“0”、CIN=“1”時(shí),S輸出結(jié)果為“0”,需要向高位借位,CSUB=“1”;當(dāng)AS=“1”、BS=“0”、CIN=“1”時(shí),S輸出結(jié)果為“0”,無(wú)需借位,CSUB=“0”;當(dāng)AS=“1”、BS=“1”、CIN=“1”時(shí),S輸出結(jié)果為“1”,需要借位,CSUB=“1”,以此類推。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)圖5.141位全減器功能仿真3.1控制器模塊設(shè)計(jì)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)設(shè)計(jì)原理:SEL表示選擇控制輸入信號(hào),SEL為1時(shí),選擇加法運(yùn)算,SEL為0時(shí),選擇減法運(yùn)算;DATA[1:0]表示來(lái)自加法器的輸出信號(hào){COUT,SUM},DATA[3:2]表示來(lái)自減法器的輸出信號(hào){S,CSUB};SUM_S表示選擇器當(dāng)前位值輸出信號(hào),COUT_S表示選擇器進(jìn)位/借位輸出信號(hào),其功能如表5.4所示,模塊電路參考元件符號(hào)如圖5.15所示。表5.4選擇控制器功能表圖5.15選擇控制器元件符號(hào)觀察功能表5.4,運(yùn)用always語(yǔ)句實(shí)現(xiàn)選擇控制器電路,其行為級(jí)描述代碼如下:modulefull_sel(inputSEL,//控制輸入端口聲明input[3:0]DATA,//數(shù)據(jù)輸入端口聲明outputregSUM_S=1'b0,//SUM_S表示加-減運(yùn)算后的當(dāng)前位值//COUT_S表示加-減運(yùn)算后,進(jìn)位或借位輸出端口聲明outputregCOUT_S=1'b0

);//選擇控制模塊功能描述always@(*)beginif(SEL)begin//SEL=1,選擇加法運(yùn)算 SUM_S<=DATA[0];COUT_S<=DATA[1];end

elsebegin//SEL=0,選擇減法運(yùn)算 SUM_S<=DATA[2];COUT_S<=DATA[3];endendendmodule5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)選擇控制器的功能仿真結(jié)果如圖5.16所示。當(dāng)SEL=“0”時(shí),此時(shí)選擇DATA[3:2]作為系統(tǒng)當(dāng)前輸出,SUM_S=DATA[2],COUT_S=DATA[3];當(dāng)SEL=“1”時(shí)SUM_S=DATA[0],COUT_S=DATA[1]。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)圖5.16選擇控制器功能仿真4.1位全加-減器VerilogHDL設(shè)計(jì)5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)引用全加器、全減器和選擇器模塊,完成1位全加-減器頂層模塊設(shè)計(jì),其電路原理圖如5.17所示。圖5.171位全加-減器電路原理圖元件例化描述代碼如下:modulefull_add_sub1(inputA,inputB,inputCIN,inputSEL,//輸入控制端口聲明outputwireSUM,//SUM表示加-減運(yùn)算后的當(dāng)前位值//COUT表示加-減運(yùn)算后,進(jìn)位或借位輸出端口聲明outputwireCOUT);//w[3:0],加法器、減法器與選擇器模塊之間連線信號(hào)wire[3:0]w;//參考電路原理圖,名稱關(guān)聯(lián)法描述全減器功能full_add1U1(.SUM(w[0]),.COUT(w[1]),.A(A),.B(B),.CIN(CIN));full_sub1U2(.S(w[2]),.CSUB(w[3]),.AS(A),.BS(B),.CIN(CIN));

full_selU3(.SUM_S(SUM),.COUT_S(COUT),.DATA(w),.SEL(SEL));endmodule5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)1位全加-減器的功能仿真結(jié)果如圖5.18所示。當(dāng)SEL=“0”時(shí),此時(shí)進(jìn)行減法運(yùn)算,A=“0”、B=“0”、CIN=“0”,{COUT,SUM}=“00”;A=“0”、B=“0”、CIN=“1”,{COUT,SUM}=“10”;A=“0”、B=“1”、CIN=“0”,{COUT,SUM}=“10”。當(dāng)SEL=“1”時(shí),此時(shí)進(jìn)行加法運(yùn)算,若A=“0”、B=“0”、CIN=“0”,{COUT,SUM}=“00”;A=“0”、B=“0”、CIN=“1”,{COUT,SUM}=“01”;A=“0”、B=“1”、CIN=“0”,{COUT,SUM}=“01”。5.1VerilogHDL數(shù)字電路設(shè)計(jì)方法5.1.4VerilogHDL層次化設(shè)計(jì)圖5.181位全加-減器功能仿真5.2數(shù)據(jù)選擇器的設(shè)計(jì)

數(shù)據(jù)選擇器(mux)是從一組指定數(shù)據(jù)中選出要求的1個(gè)數(shù)據(jù),作為當(dāng)前輸出,實(shí)現(xiàn)信號(hào)選擇的組合邏輯電路。它的作用相當(dāng)于多輸入端的單刀多擲開(kāi)關(guān)。2n路輸入信號(hào)和1路輸出信號(hào)的多路數(shù)據(jù)選擇器需要n個(gè)選擇控制變量(也稱為地址信號(hào)),控制變量的每種取值組合對(duì)應(yīng)選中1路輸入,將其作為當(dāng)前狀態(tài)下的輸出。5.2.1基于元件例化的mux設(shè)計(jì)常用的數(shù)據(jù)選擇器有4選1、8選1和16選1等類型,比如74LS153、74LS151是典型的4選1、8選1集成電路。本小節(jié)以4選1,8選1為例,介紹如何用VerilogHDL設(shè)計(jì)數(shù)據(jù)選擇器電路。5.2數(shù)據(jù)選擇器的設(shè)計(jì)4選1數(shù)據(jù)選擇器設(shè)計(jì)原理:元件符號(hào)如圖5.19所示,EN是使能端,當(dāng)EN=“1”時(shí),控制譯碼器正常工作;當(dāng)EN=“0”時(shí),譯碼器不工作。A[1..0]是二進(jìn)制址址信號(hào)輸入端,表示某一數(shù)據(jù)的地址信息,D[3..0]是等待被選擇的數(shù)據(jù)。當(dāng)EN=“1”時(shí),若A=’b00,數(shù)據(jù)選擇器輸出F=D[0];若A=’b01,數(shù)據(jù)選擇器輸出F=D[1];若A=’b10,數(shù)據(jù)選擇器輸出F=D[2];若A=’b11,數(shù)據(jù)選擇器輸出F=D[3]。而當(dāng)EN=“0”時(shí),數(shù)據(jù)選擇器不工作,輸出信號(hào)默認(rèn)F=’b0。圖5.194選1數(shù)據(jù)選擇器元件符號(hào)5.2數(shù)據(jù)選擇器的設(shè)計(jì)4選1數(shù)據(jù)選擇器功能表如表5.5所示。其中,A0~A1為地址信號(hào)輸入,D0~D7為數(shù)據(jù)信號(hào)輸入,EN是使用控制端,EN高電平有效,F(xiàn)是數(shù)據(jù)信號(hào)輸出,X表示任意值。

5.2數(shù)據(jù)選擇器的設(shè)計(jì)由式4選1數(shù)據(jù)選擇器的表達(dá)式可得到電路原理圖,如圖5.20所示:圖5.204選1數(shù)據(jù)選擇器原理圖5.2數(shù)據(jù)選擇器的設(shè)計(jì)代碼如下:modulesel4_1_1(inputEN,//使能控制端口聲明input[1:0]A,//地址端口聲明input[3:0]D,//待選數(shù)據(jù)端口聲明outputwireF//輸出端口聲明);//定義非門(mén)元件N0~N1的輸出信號(hào)為:n[0]~n[1]wire[1:0]n;//定義與門(mén)元件E0~E3的輸出信號(hào)為:w[0]~w[3];或門(mén)元件E4輸出:w[4]wire[4:0]w;//參考邏輯圖,使用基本邏輯門(mén)元件,例化描述電路功能notN0(n[0],A[0]);//非門(mén)輸出n[0]=!A[0]notN1(n[1],A[1]);//非門(mén)輸出n[1]=!A[1]andE0(w[0],n,EN,D[0]);//4輸入與門(mén)

andE1(w[1],n[1],A[0],D[1]);andE2(w[2],A[1],n[0],D[2]);

andE3(w[3],A[1],A[0],D[3]);orE4(w[4],w[3],w[2],w[1],w[0]);andE5(F,w[4]);endmodule4選1數(shù)據(jù)選擇器的功能仿真結(jié)果如圖5.21所示,D0~D3用不同頻率的數(shù)據(jù)信號(hào)驅(qū)動(dòng),當(dāng)EN=“1”時(shí),且地址信號(hào)取值變化時(shí),F(xiàn)輸出信號(hào)也相應(yīng)改變;當(dāng)EN=“0”時(shí),F(xiàn)沒(méi)有輸出信號(hào),保持缺省值“0”。5.2數(shù)據(jù)選擇器的設(shè)計(jì)圖5.214選1數(shù)據(jù)選擇器功能仿真5.2數(shù)據(jù)選擇器的設(shè)計(jì)2.8選1數(shù)據(jù)選擇器設(shè)計(jì)原理:元件符號(hào)如圖5.22所示,EN是使能端,EN=“1”時(shí),控制譯碼器正常工作;EN=“0”時(shí),譯碼器不工作。A[2..0]是二進(jìn)制址址信號(hào)輸入端,表示某一數(shù)據(jù)的地址信息,D[7..0]是等待被選擇的數(shù)據(jù)。當(dāng)EN=“1”,若A=’b000,數(shù)據(jù)選擇器輸出F=D[0];若A=’b001,數(shù)據(jù)選擇器輸出F=D[1];若A=’b010,數(shù)據(jù)選擇器輸出F=D[2],以此類推;當(dāng)EN=“0”時(shí),數(shù)據(jù)選擇器不工作,輸出信號(hào)默認(rèn)為F=’b0。圖5.228選1數(shù)據(jù)選擇器元件符號(hào)5.2數(shù)據(jù)選擇器的設(shè)計(jì)8選1數(shù)據(jù)選擇器功能表如表5.6所示。其中,A0~A2為地址信號(hào)輸入,D0~D7為數(shù)據(jù)信號(hào)輸入,EN是使用控制端,EN高電平有效,F(xiàn)是數(shù)據(jù)信號(hào)輸出,X表示任意值。表5.68選1數(shù)據(jù)選擇器功能表

由8選1數(shù)據(jù)選擇器的輸出表達(dá)式,可得到電路原理圖,如圖5.23所示:5.2數(shù)據(jù)選擇器的設(shè)計(jì)圖5.238選1數(shù)據(jù)選擇器電路原理圖5.2數(shù)據(jù)選擇器的設(shè)計(jì)代碼如下:modulesel8_1_1(inputEN,input[2:0]A,input[7:0]D,outputwireF);wire[2:0]n;//定義非門(mén)元件N0-N2的輸出信號(hào)為:n[0]~n[2]wire[7:0]w;//定義與門(mén)元件E0-E7的輸出信號(hào)為:w[0]~w[7]//參考邏輯圖,使用基本門(mén)元件,例化描述電路功能notN0(n[0],A[0]);//非門(mén)輸出n[0]=!A[0]notN1(n[1],A[1]);//非門(mén)輸出n[1]=!A[1]notN2(n[2],A[2]);//非門(mén)輸出n[2]=!A[2]andE0(w[0],n,D[0]);//5輸入與門(mén)

andE1(w[1],n[2],n[1],A[0],D[1]);andE2(w[2],n[2],A[1],n[0],D[2]);andE3(w[3],n[2],A[1],A[0],D[3]);andE4(w[4],A[2],n[1],n[0],D[4]);andE5(w[5],A[2],n[1],A[0],D[5]);andE6(w[6],A[2],A[1],n[0],D[6]);

andE7(w[7],A,D[7]);orE8(w[8],w[7],w[6],w[5],w[4],w[3],w[2],w[1],w[0]);andE9(F,w[8],EN);endmodule5.2數(shù)據(jù)選擇器的設(shè)計(jì)8選1數(shù)據(jù)選擇器的功能仿真結(jié)果如圖5.24所示。D0~D7給予不同頻率的數(shù)據(jù)信號(hào),當(dāng)EN=“1”且地址信號(hào)取值變化時(shí),F(xiàn)輸出信號(hào)也相應(yīng)改變;當(dāng)EN=“0”時(shí),F(xiàn)沒(méi)有輸出信號(hào),保持缺省值“0”。5.2數(shù)據(jù)選擇器的設(shè)計(jì)圖5.248選1數(shù)據(jù)選擇器功能仿真5.2數(shù)據(jù)選擇器的設(shè)計(jì)5.2.2基于數(shù)據(jù)流描述的mux設(shè)計(jì)1.4選1數(shù)據(jù)選擇器4選1選擇器數(shù)據(jù)流描述代碼如下:modulesel4_1_2(inputEN,input[1:0]A,input[3:0]D,outputwireF);//參考邏輯表達(dá)式,描述電路功能assignF=(((~A[1])&(~A[0])&D[0])|((~A[1])&A[0]&D[1])|(A[1]&(~A[0])&D[2])|(A[1]&A[0]&D[3]))&EN;endmodule數(shù)據(jù)流描述方式的功能仿真結(jié)果可參考圖5.21。2.8選1數(shù)據(jù)選擇器8選1數(shù)據(jù)選擇器,數(shù)據(jù)流描述代碼如下:modulesel8_1_2(inputEN,input[2:0]A,input[7:0]D,outputregF);wire[1:0]w;//定義2個(gè)線性變量w[0]、w[1],避免代碼過(guò)長(zhǎng)//參考邏輯表達(dá)式,描述電路功能assignw[0]=((~A[2])&(~A[1])&(~A[0])&D[0])|((~A[2])&(~A[1])&A[0]&D[1])|((~A[2])&A[1]&(~A[0])&D[2])|((~A[2])&A[1]&A[0]&D[3]);assignw[1]=(A[2]&(~A[1])&(~A[0])&D[4])|(A[2]&(~A[1])&A[0]&D[5])|(A[2]&A[1]&(~A[0])&D[6])|(A[2]&A[1]&A[0]&D[7]);assignF=(w[1]|w[0])&EN;endmodule5.2數(shù)據(jù)選擇器的設(shè)計(jì)數(shù)據(jù)流描述方式的功能仿真結(jié)果參考圖5.24。5.2數(shù)據(jù)選擇器的設(shè)計(jì)5.2.3基于always語(yǔ)句描述的mux設(shè)計(jì)1.4選1數(shù)據(jù)選擇器always語(yǔ)言描述代碼如下:modulesel4_1_3(inputEN,input[1:0]A,input[3:0]D,outputregF);always@(*)beginif(!EN)F=0; else case(A)//采用case語(yǔ)句實(shí)現(xiàn) 2'b00:F=D[0]; 2'b01:F=D[1];2'b10:F=D[2]; 2'b11:F=D[3];

default:F=0;endcaseendendmodule5.2數(shù)據(jù)選擇器的設(shè)計(jì)4選1數(shù)據(jù)選擇器的功能仿真結(jié)果參考圖5.21。5.2數(shù)據(jù)選擇器的設(shè)計(jì)2、8選1數(shù)據(jù)選擇器always語(yǔ)言描述代碼如下:modulesel8_1_3(inputEN,input[2:0]A,input[7:0]D,outputregF);always@(*)beginif(!EN)F=0; else case(A) 3'b000:F=D[0]; 3'b001:F=D[1];3'b010:F=D[2]; 3'b011:F=D[3]; 3'b100:F=D[4]; 3'b101:F=D[5];

3'b110:F=D[6]; 3'b111:F=D[7]; default:F=0;endcaseendendmodule5.2數(shù)據(jù)選擇器的設(shè)計(jì)功能仿真結(jié)果可參考圖5.24。5.3編譯碼器的設(shè)計(jì)5.3.14-2編碼器設(shè)計(jì)在數(shù)字系統(tǒng)中,將有特定含義信息變換為二進(jìn)制碼的過(guò)程稱為編碼,具有編碼功能的邏輯電路稱為編碼器。將2n個(gè)離散信息代碼用n位二進(jìn)制碼組表示,也稱為二進(jìn)制編碼器,可分為普通和優(yōu)先編碼器兩類。1、普通編碼器在任何時(shí)刻,普通編碼器只允許一個(gè)輸入信號(hào)有效,當(dāng)存在多個(gè)有效信號(hào)時(shí),電路邏輯功能將會(huì)混亂。下面以4-2線編碼器為例,介紹普通編碼器的設(shè)計(jì)。4-2編碼器元件符號(hào)如圖5.25所示。EN是使用端,高電平“1”有效,A、B、C、D表示4路有特定意義信號(hào)輸入,高電平“1”有效,F(xiàn)表示信號(hào)編碼后的二進(jìn)制碼組(2位位寬),X表示任意值。4-2編碼器功能表見(jiàn)表5.7。圖5.254-2編碼器元件符號(hào)5.3編譯碼器的設(shè)計(jì)表5.74-2編碼器功能表

5.3編譯碼器的設(shè)計(jì)參考編碼器邏輯表達(dá)式,編碼器電路原理圖如圖5.26所示:圖5.264-2編碼器原理圖5.3編譯碼器的設(shè)計(jì)參考電路原理圖圖5.26,VerilogHDL元件例化代碼描述如下:modulecode4_2(inputEN,//使能控制端口聲明inputA,inputB,inputC,inputD,//輸入信號(hào)聲明outputwire[1:0]F//輸出端口聲明);wire[4:0]w;//參考邏輯電路圖,描述電路功能notE0(w[0],A);notE1(w[1],B);

notE2(w[2],C);xorE3(w[3],B,D);

xorE4(w[4],C,D);andE5(F[1],w[0],w[1],w[4],EN);andE6(F[0],w[0],w[2],w[3],EN);endmodule5.3編譯碼器的設(shè)計(jì)參考邏輯表達(dá)式,VerilogHDL數(shù)據(jù)流描述代碼如下:modulecode4_2(inputEN,//使能控制端口聲明inputA,inputB,inputC,inputD,//輸入信號(hào)聲明outputwire[1:0]F//輸出端口聲明);//數(shù)據(jù)流方式描述電路功能assignF[0]=(~A)&(~C)&(B^D);assignF[1]=(~A)&(~B)&(C^D);endmodule5.3編譯碼器的設(shè)計(jì)參考表格5.7,VerilogHDLalways語(yǔ)句描述代碼如下:modulecode4_2(inputEN,//使能控制端口聲明inputA,inputB,inputC,inputD,//輸入信號(hào)聲明outputwire[1:0]F//輸出端口聲明);//參考表格5.7,CASE語(yǔ)句描述電路功能always@(*)beginif(~EN)F=0;elsecase({A,B,C,D})'b1000:F='b00; 'b0100:F='b01; 'b0010:F='b10; 'b0001:F='b11; default:F='b00; endcaseend endmodule5.3編譯碼器的設(shè)計(jì)5.3編譯碼器的設(shè)計(jì)4-2編碼器的功能仿真結(jié)果如圖5.27所示。若EN=“1”,當(dāng)輸入信號(hào)為有效電平“1”(不能同時(shí)為1),F(xiàn)輸出對(duì)應(yīng)的二進(jìn)制碼組;當(dāng)EN=“0”時(shí),F(xiàn)沒(méi)有輸出信號(hào),保持缺省值“0”。圖5.274-2編碼器功能仿真2.優(yōu)先編碼器優(yōu)先編碼器允許多個(gè)輸入端信號(hào)有效。當(dāng)存在多個(gè)有效信號(hào)時(shí),輸入端優(yōu)先級(jí)高的信號(hào)將被編碼,下面以4-2線優(yōu)先編碼器為例,介紹優(yōu)先編碼器的設(shè)計(jì)。5.3編譯碼器的設(shè)計(jì)4-2優(yōu)先編碼器元件符號(hào)如圖5.28所示,其中EN是使用端,高電平“1”有效,A、B、C、D表示4路有特定意義信號(hào)輸入,高電平“1”有效,A優(yōu)先級(jí)最高,D優(yōu)先級(jí)最低,F(xiàn)表示信號(hào)編碼后的二進(jìn)制碼組(2位位寬),X表示任意值。4-2優(yōu)先編碼器功能表見(jiàn)表5.8。圖5.284-2優(yōu)先編碼器元件符號(hào)5.3編譯碼器的設(shè)計(jì)表5.84-2優(yōu)先編碼器功能表

5.3編譯碼器的設(shè)計(jì)參考優(yōu)先編碼器邏輯表達(dá)式,編碼器電路原理圖如圖5.29所示:圖5.294-2優(yōu)先編碼器原理圖5.3編譯碼器的設(shè)計(jì)參考電路原理圖5.29,VerilogHDL元件例化代碼描述如下:modulepri_code4_2(inputEN,//使能控制端口聲明inputA,inputB,inputC,inputD,//輸入信號(hào)聲明outputwire[1:0]F//輸出端口聲明);wire[5:0]w;//參考邏輯電路圖,描述電路功能notE0(w[0],A);notE1(w[1],B);notE2(w[2],C);orE3(w[3],C,D);andE4(w[4],w[2],D);orE5(w[5],w[4],B);andE6(F[0],w[0],w[5],EN);andE7(F[1],w[0],w[1],w[3],EN);endmodule5.3編譯碼器的設(shè)計(jì)VerilogHDL數(shù)據(jù)流描述如下:modulepri_code4_2(inputEN,//使能控制端口聲明inputA,inputB,inputC,inputD,//輸入信號(hào)聲明outputwire[1:0]F//輸出端口聲明);//參考邏輯表達(dá)式,描述電路功能assignF[0]=(~A)&(B|((~C)&D))&EN;assignF[1]=(~A)&(~B)&(C|D)&EN;endmodule5.3編譯碼器的設(shè)計(jì)參考功能表5.8,VerilogHDLalways語(yǔ)句描述如下:modulepri_code4_2(inputEN,//使能控制端口聲明inputA,inputB,inputC,inputD,//輸入信號(hào)聲明outputreg[1:0]F//輸出端口聲明);//if..else語(yǔ)句嵌套,描述電路優(yōu)先級(jí)別always@(*)beginif(~EN)F=0;elsebeginif(A)F='b00; elseif(B)F='b01; elseif(C)F='b10; elseF='b11;end endendmodule5.3編譯碼器的設(shè)計(jì)4-2優(yōu)先編碼器的功能仿真結(jié)果如圖5.30所示。若EN=“1”時(shí),當(dāng)某個(gè)輸入信號(hào)為有效電平“1”,F(xiàn)輸出對(duì)應(yīng)信號(hào)二進(jìn)制碼組,當(dāng)多個(gè)輸入信號(hào)為有效電平“1”時(shí),F(xiàn)輸出優(yōu)先級(jí)最高信號(hào)的二進(jìn)制碼組;當(dāng)EN=“0”時(shí),F(xiàn)不進(jìn)行編碼,保持缺省值“0”。圖5.304-2優(yōu)先編碼器功能仿真5.3編譯碼器的設(shè)計(jì)3.二-十進(jìn)制編碼器在數(shù)字系統(tǒng)中,常用四位二進(jìn)制代碼來(lái)表示一位十進(jìn)制數(shù)字“0、1、2、…、9”,稱為二-十進(jìn)制代碼,即BCD碼。二-十進(jìn)制(BCD)編碼器就是將0-9十個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制代碼的電路。BCD編碼的方案很多,可分為有權(quán)碼和無(wú)權(quán)碼兩類,比如典型有權(quán)碼有8421碼、2424碼等,無(wú)權(quán)碼有余3碼、格雷碼等。其中,8421碼是基本和最常用的BCD碼,本小節(jié)介紹8421優(yōu)先編碼器的設(shè)計(jì)。BCD-8421編碼器元件符號(hào)如圖5.31所示,其中EN是使能端,高電平“1”有效,D[9..0]表示十進(jìn)制數(shù)字輸入端,高電平有效,BCD[3..0]表示1位十進(jìn)制的二進(jìn)制編碼輸出,X表示任意值。當(dāng)EN=”1”,控制譯碼器正常工作,當(dāng)EN=“0”時(shí),譯碼器不工作。D[9..0]是一位十進(jìn)制數(shù)字“0、1、2、…、9”輸入信號(hào),BCD[3..0]表示一位十進(jìn)制的二進(jìn)制編碼輸出。當(dāng)D[9]優(yōu)先級(jí)為最高時(shí),D[0]優(yōu)先級(jí)最低,以此類推。圖5.31BCD-8421編碼器元件符號(hào)5.3編譯碼器的設(shè)計(jì)BCD-8421優(yōu)先編碼器功能表見(jiàn)表5.9。表5.9BCD-8421優(yōu)先編碼器功能表5.3編譯碼器的設(shè)計(jì)

5.3編譯碼器的設(shè)計(jì)參考DCB-8421優(yōu)先編碼器的邏輯表述式,編碼器電路的原理圖如圖5.32所示。圖5.32BCD-8421優(yōu)先編碼器電路原理圖5.3編譯碼器的設(shè)計(jì)參考電路原理圖5.32,VerilogHDL元件例化代碼描述如下:modulebcd_8421(inputEN,input[9:0]D,outputwire[3:0]BCD);N[9:2]w;//N2~N9等非門(mén)輸出D[2]~D[9]的反信號(hào)wire[10:0]w;//表示E0~E11等邏輯門(mén)的輸出信號(hào)//參考邏輯電路圖5.32,描述電路功能

notN2(N[2],D[2]);notN3(N[3],D[3]);notN3(N[4],D[4]);notN4(N[4],D[4]);notN5(N[5],D[5]);notN6(N[6],D[6]);notN7(N[7],D[7]);notN8(N[8],D[8]);

notN9(N[9],D[9]);//BCD[0]輸出電路描述

andE0(w[0],N[2],N[3],N[4],N[5],N[6],N[7],N[8],N[9]);andE1(w[1],w[0],D[1]);andE3(w[3],D[3],N[4],N[5],N[6],N[7],N[8],N[9]);andE5(w[5],D[5],N[6],N[7],N[8],N[9]);andE7(w[7],D[7],N[8],N[9]);orE8(w[8],D[9],w[1],w[3],w[5],w[7]);andE12(BCD[0],w[8],EN);//BCD[1]輸出電路描述andE2(w[2],D[2],N[3],N[4],N[5],N[6],N[7],N[8],N[9]);andE6(w[6],D[6],N[7],N[8],N[9]);andE9(w[9],w[2],w[3],w[6],w[7]);andE13(BCD[1],w[9],EN);//BCD[2]輸出電路描述andE4(w[4],D[4],N[5],N[6],N[7],N[8],N[9]);andE10(w[10],w[4],w[5],w[6],w[7]);andE14(BCD[2],w[10],EN);//BCD[3]輸出電路描述orE11(w[11],D[8],D[9]);andE15(BCD[3],w[11],EN);endmodule5.3編譯碼器的設(shè)計(jì)5.3編譯碼器的設(shè)計(jì)從5.2小節(jié)和5.3小節(jié)的設(shè)計(jì)示例,如“8選1數(shù)據(jù)選擇器”、“二-十進(jìn)制編碼器”等系統(tǒng)設(shè)計(jì)可以看出:隨著數(shù)字系統(tǒng)趨向復(fù)雜,元器例化和數(shù)據(jù)流方式繁瑣的描述方式已逐漸不適用。本小節(jié)暫省略數(shù)據(jù)流方式描述,建議使用always語(yǔ)句描述。VerilogHDLalways語(yǔ)句描述代碼如下://**********8421編碼器,元件例化描述參考***********modulebcd_8421(inputEN,input[9:0]D,outputreg[3:0]BCD);//參考功能表5.9,case語(yǔ)句描述電路功能always@(*)beginif(~EN)BCD='b0000;elsecasex(D)'b0000000001:BCD='b0000; 'b000000001X:BCD='b0001; 'b00000001XX:BCD='b0010; 'b0000001XXX:BCD='b0011;

'b000001XXXX:BCD='b0100; 'b00001XXXXX:BCD='b0101; 'b0001xxxxxx:BCD='b0110; 'b001xxxxxxx:BCD='b0111; 'b01xxxxxxxx:BCD='b1000; 'b1xxxxxxxxx:BCD='b1001; default:BCD='b0000; endcase end endmodule5.3編譯碼器的設(shè)計(jì)5.3編譯碼器的設(shè)計(jì)BCD-8421優(yōu)先編碼器的功能仿真結(jié)果如圖5.33所示。當(dāng)EN=“1”時(shí),輸入二進(jìn)制碼組信號(hào)變化,F(xiàn)輸出對(duì)應(yīng)的譯碼信號(hào);當(dāng)EN=“0”時(shí),F(xiàn)沒(méi)有輸出信號(hào),保持缺省值“0”。圖5.33BCD-8421編碼器功能仿真5.3編譯碼器的設(shè)計(jì)5.3.2譯碼器設(shè)計(jì)將二進(jìn)制碼組翻譯成有特定含義信息的過(guò)程稱為譯碼,譯碼是編碼的逆過(guò)程。譯碼器的n位二進(jìn)制輸入碼組可以翻譯為小于等于2n個(gè)離散輸出信號(hào),如常用的2-4譯碼器、3-8譯碼器、顯示譯碼器等。本小節(jié)以2-4線編碼器為例,介紹譯碼器的設(shè)計(jì)。2-4譯碼器元件符號(hào)如圖5.34,其中EN是使能端,高電平“1”有效,F(xiàn)[1..0]表示2位二進(jìn)制碼組輸入端,A、B、C、D表示4路有特定意義信號(hào)輸出,高電平“1”有效。設(shè)計(jì)原理:EN是使能端,EN=”1”時(shí),控制譯碼器正常工作;EN=“0”時(shí),譯碼器不工作。F[1..0]是二進(jìn)制碼組輸入端,表示某特定信息的編碼。當(dāng)F=’b00時(shí),譯碼器輸出{A,B,C,D}=’b1000,表示譯碼的有效輸出信號(hào)是A(高電平“1”);當(dāng)F=’b01時(shí),譯碼器輸出{A,B,C,D}=’b0100,表示譯碼的有效輸出信號(hào)是B(高電平“1”),以此類推。圖5.342-4譯碼器元件符5.3編譯碼器的設(shè)計(jì)2-4譯碼器功能表見(jiàn)表5.10。表5.102-4編碼器功能表

5.3編譯碼器的設(shè)計(jì)參考4-2編碼器邏輯表達(dá)式,其電路原理圖如圖5.35所示:圖5.352-4譯碼器原理圖5.3編譯碼器的設(shè)計(jì)參考2-4譯碼器電路原理圖,VerilogHDL元件例化代碼描述如下:moduledecode2_4(inputEN,input[1:0]F,outputwireA,B,C,D);wire[1:0]w;//參考2-4譯碼器邏輯電路圖,描述電路功能notE0(w[0],F[0]);notE1(w[1],F[1]);andE2(A,w[1],w[0],EN);andE3(B,w[1],F[0],EN);andE4(C,F[1],w[0],EN);andE5(D,F[1],F[0],EN);endmodule5.3編譯碼器的設(shè)計(jì)參考2-4譯碼器邏輯表達(dá)式,VerilogHDL數(shù)據(jù)流描述代碼如下:moduledecode2_4(inputEN,input[1:0]F,outputwireA,B,C,D);//參考4-2編碼器的邏輯表達(dá)式,描述電路功能assignA=(~F[1])&(~F[0]);assignB=(~F[1])&F[0];assignC=F[1]&(~F[0]);assignD=F[1]&F[0];endmodule參考功能表5.10,VerilogHDLalways語(yǔ)句描述代碼如下:moduledecode2_4(inputEN,input[1:0]F,outputwireA,B,C,D);//參考功能表5.10,CASE語(yǔ)句描述電路功能always@(*)beginif(~EN){A,B,C,D}='b0000;elsecase(F)'b00:{A,B,C,D}='b1000; 'b01:{A,B,C,D}='b0100; 'b10:{A,B,C,D}='b0010; 'b11:{A,B,C,D}='b0001; default:{A,B,C,D}='b0000; endcase end endmodule5.3編譯碼器的設(shè)計(jì)2-4譯碼器的功能仿真結(jié)果如圖5.36所示。當(dāng)EN=“1”時(shí),輸入二進(jìn)制碼組信號(hào)變化,F(xiàn)輸出對(duì)應(yīng)的譯碼信號(hào);當(dāng)EN=“0”時(shí),F(xiàn)沒(méi)有輸出信號(hào),保持缺省值“0”。5.3編譯碼器的設(shè)計(jì)圖5.364-2譯碼器功能仿真5.4比較器的設(shè)計(jì)5.4比較器的設(shè)計(jì)比較器是常用的組合邏輯電路,特別是在計(jì)算機(jī)中常常需要對(duì)兩個(gè)數(shù)A、B的大小進(jìn)行比較,其比較結(jié)果有A>B,A=B,A<B三種情況。兩個(gè)多位寬數(shù)A[n..0]、B[n..0]比較基本原則如下:(1)從高位向低位逐位比較。(2)高位不相等時(shí),高位比較的結(jié)果就是兩個(gè)數(shù)的比較結(jié)果。(3)高位相等時(shí),兩數(shù)的比較結(jié)果由低位比較決定。本小節(jié)以4位數(shù)據(jù)比較器為例,介紹數(shù)據(jù)比較器的設(shè)計(jì)。4位數(shù)據(jù)比較器元件符號(hào)如圖5.37所示:其中EN是使能端,高電平“1”有效,A[3..0]和B[3..0]表示2個(gè)4位待比較的輸入數(shù)據(jù),F(xiàn)[2..0]表示比較結(jié)果輸出。F[2]表示“A>B”輸出結(jié)果,F(xiàn)[1]表示“A<B”輸出結(jié)果,F(xiàn)[0]表示“A=B”輸出結(jié)果,高電平“1”有效,X表示任意值。設(shè)計(jì)原理:EN是使能端,當(dāng)EN=”1”時(shí),數(shù)據(jù)比較器正常工作;EN=“0”時(shí),數(shù)據(jù)比較器不工作。首先比較A[3]和B[3],若A[3]>B[3],則比較器輸出F=’b100;若A[3]<B[3],則比較器輸出F=’b010;若A[3]=B[3],則需要比較次高位A[2]和B[2]。如果A[2]>B[2],則比較器輸出F=’b100;若A[2]<B[2],則比較器輸出F=’b010;若A[3]=B[3],則需要比較A[1]和B[1],以此類推。5.374位比較器元件符號(hào)5.4比較器的設(shè)計(jì)根據(jù)設(shè)計(jì)原理,4位比較器功能表見(jiàn)表5.11。表5.114位比較器功能表輸入輸出ENA[3]B[3]A[2]B[2]A[1]B[1]A[0]B[0]F[2]F[1]F[0]0A[3]>B[3]XXXXXX1001A[3]<B[3]XXXXXX0101A[3]=B[3]A[2]>B[2]XXXX1001A[3]=B[3]A[2]<B[2]XXXX0101A[3]=B[3]A[2]=B[2]A[1]>B[1]XX1001A[3]=B[3]A[2]=B[2]A[1]<B[1]XX0101A[3]=B[3]A[2]=B[2]A[1]=B[1]A[0]>B[0]1001A[3]=B[3]A[2]=B[2]A[1]=B[1]A[0]<B[0]0101A[3]=B[3]A[2]=B[2]A[1]=B[1]A[0]=B[0]001參考功能表5.11,4位比較器的邏輯表達(dá)式如下:

5.4比較器的設(shè)計(jì)根據(jù)4位比較器的邏輯表達(dá)式,其電路原理圖如圖5.38。5.384位比較器電路原理圖5.4比較器的設(shè)計(jì)參考4位比較器電路原理圖,VerilogHDL元件例化代碼描述如下:modulecomp4_2(

inputEN,//使能控制端口聲明

input[3:0]A,B,//兩個(gè)4位待比較輸入信號(hào)聲明

outputwire[2:0]F//比較結(jié)果輸出端口聲明);//A>B時(shí),相關(guān)基本門(mén)元件E0-E8輸出信號(hào)為:wa[0]~wa[8]wire[8:0]wa;//A<B時(shí),相關(guān)基本門(mén)元件E9-E17輸出信號(hào)為:wb[0]~wb[8]wire[8:0]wb;//A=B時(shí),E20輸出信號(hào)為wab[0],wab[3:1]則為同或運(yùn)算輸出wire[3:0]wab;//參考邏輯電路圖,同或運(yùn)算元件例化描述xnorE22_A(wab[1],A[1],B[1]);xnorE22_B(wab[2],A[2],B[2]);xnorE22_C(wab[3],A[3],B[3]);//首先描述A>B情況下的電路功能,F[2]表示"A>B"比較結(jié)果notE0(wa[0],B[0]);notE1(wa[1],B[1]);notE2(wa[2],B[2]);5.4比較器的設(shè)計(jì)notE3(wa[3],B[3]);andE4(wa[4],wa[3],A[3]);andE5(wa[5],wab[3],wa[2],A[2]);andE6(wa[6],wab[3],wab[2],wa[1],A[1]);andE7(wa[7],wab[3],wab[2],wab[1],wa[0],A[0]);orE8(wa[8],wa[7],wa[6],wa[5],wa[4]);andE18(F[2],wa[8],EN);//描述A<B情況下的電路功能,F[1]表示"A<B"比較結(jié)果notE9(wb[0],A[0]);notE10(wb[1],A[1]);notE11(wb[2],A[2]);notE12(wb[3],A[3]);andE13(wb[4],wb[3],B[3]);andE14(wb[5],wab[3],wb[2],B[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)論