《數字電路設計及Verilog HDL實現》課件第4章_第1頁
《數字電路設計及Verilog HDL實現》課件第4章_第2頁
《數字電路設計及Verilog HDL實現》課件第4章_第3頁
《數字電路設計及Verilog HDL實現》課件第4章_第4頁
《數字電路設計及Verilog HDL實現》課件第4章_第5頁
已閱讀5頁,還剩308頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

4.1組合邏輯電路概述

4.2組合邏輯電路分析

4.3組合邏輯電路設計

4.4常用組合邏輯電路

4.5組合電路中的競爭與險象

第4章組合邏輯電路組合邏輯電路在邏輯功能上的特點是:電路在任何時刻的輸出狀態只取決于該時刻的輸入狀態,而與電路原來的狀態無關。因此,組合電路在電路構成上具有以下基本特征:

(1)電路由邏輯門電路組成。

(2)輸出、輸入之間沒有反饋延遲電路。

(3)不包含記憶性元件。4.1組合邏輯電路概述圖4.1.1組合邏輯電路框圖組合邏輯電路可以用圖4.1.1所示的框圖進行描述。圖中,

I0,I1,…,In是電路的輸入信號;Y0,Y1,…,Ym-1是電路的輸出信號。輸出信號與輸入信號間的關系可以表示為

Y0=f0(I0,I1,…,In-1)

Y1=f1(I0,I1,…,In-1)

Ym-1=fm-1(I0,I1,…,In-1)

(4.1.1)組合邏輯電路的應用非常廣泛,常用的單元電路有運算器、編碼器、譯碼器、數值比較器、數據選擇器、奇偶檢測電路等,組合邏輯電路也是時序邏輯電路的組成部分。

本章主要講述組合邏輯電路的一般分析方法和設計方法,還將詳細介紹典型組合單元電路的功能、應用以及采用小規模(SSI)器件、中規模(MSI)器件和VerilogHDL設計這些單元電路模塊的方法,并對組合邏輯電路中的險象問題進行討論。4.2.1組合邏輯電路分析方法

組合邏輯電路分析的目的就是根據給定電路,確定該電路輸出與輸入之間的邏輯關系,得出電路的邏輯功能描述;如果有必要還可以對電路做進一步改進。

組合邏輯電路的分析過程通常分以下為幾個步驟:

4.2組合邏輯電路分析

(1)根據給定邏輯電路圖,從電路的輸入端開始逐級分析,寫出輸出端的邏輯函數表達式。

(2)對寫出的輸出邏輯函數進行化簡。

(3)列出真值表。

(4)分析真值表,確定電路的邏輯功能。

組合邏輯電路的分析過程可以用圖4.2.1描述。圖4.2.1組合邏輯電路的分析過程4.2.2簡單組合邏輯電路分析舉例

組合邏輯電路在實現上可以采用小規模、中規模和超大規模集成電路。這里通過幾個由門電路組成的組合邏輯電路的例子,說明簡單組合邏輯電路的分析方法,由中規模集成電路構成的組合邏輯電路的分析會在4.4節中進行敘述。

【例4.2.1】試分析圖4.2.2所示邏輯電路的功能。

解圖4.2.2所示的邏輯電路是由4個與非門組成的“兩級”組合邏輯電路。所謂的“級”數,是指從輸入信號到輸出信號所經歷的邏輯門的最大數目。圖4.2.2中輸入信號到輸出信號所經歷的邏輯門都是兩個,所以該電路是一個“兩級”組合邏輯電路,圖中所標出的x、y、z是一級門電路的輸出。圖4.2.2例4.2.1的邏輯電路圖

(1)寫出輸出函數的邏輯表達式。

逐級寫出邏輯表達式,第一級表達式是

(4.2.1)第二級表達式是

(4.2.2)

對于那些簡單的邏輯電路,在分析時可以直接寫出輸出函數的邏輯表達式。

(2)化簡。

(4.2.3)

(3)列出真值表。

根據式(4.2.3)列出其真值表,如表4.2.1所示。

(4)確定電路邏輯功能。

對真值表進行分析可知該電路的功能是,當三個輸入信號A、B和C中有兩個或兩個以上為高電平時,輸出為1;否則輸出為0。所以該電路可以看做是一個三人投票表決電路,輸出為1表示表決通過,輸出為0表示未通過。表4.2.1例4.2.1的真值表

【例4.2.2】試分析圖4.2.3所示邏輯電路的邏輯功能。

解圖4.2.3所示電路是一個三級組合邏輯電路,為了便于電路分析,圖中標出了第二級電路的輸出P1~P7。圖4.2.3例4.2.2邏輯電路圖

(1)寫出輸出函數的邏輯表達式。

(4.2.4)

(2)化簡。

對式(4.2.4)進行化簡,得到輸出邏輯函數:

(4.2.5)

(3)列出真值表。

根據式(4.2.5)列出表4.2.2所示的真值表。表4.2.2例4.2.2的真值表

(4)確定電路邏輯功能。

對表4.2.2的輸入、輸出進行分析,該電路的邏輯功能是:當DCBA表示的輸入二進制數小于或等于5時,Y0為1;當輸入二進制數在6和10之間時,Y1等于1;當輸入二進制數大于或等于11時,Y2等于1。由此可知該邏輯電路是對輸入4位二進制數范圍進行判別的電路。

通過上面兩個例子,說明了簡單組合邏輯電路的分析方法和步驟。4.3.1用中小規模集成電路設計組合邏輯電路

1.小規模器件設計組合邏輯電路的方法

用小規模集成電路設計組合邏輯電路的一般步驟如下:(1)進行邏輯抽象。

邏輯抽象的任務是通過分析設計任務,確定輸入變量、輸出變量及其邏輯狀態的含義,找到輸出與輸入之間的

因果關系。確定邏輯狀態的含義,就是用0、1分別表示變量的兩種不同狀態。4.3組合邏輯電路設計

(2)列出真值表。

在上一步的基礎上,分析在每一種確定輸入組合下對應輸出的取值。

(3)寫出輸出的邏輯表達式。

(4)化簡。對輸出邏輯函數根據需要進行化簡,或變換成適當的邏輯形式。化簡和變換的形式應根據所選門電路而定。

(5)畫出邏輯電路圖。

用小規模器件設計組合邏輯電路的過程可用圖4.3.1描述。圖4.3.1組合邏輯電路設計步驟

2.中規模器件設計組合邏輯電路的方法

采用中規模集成電路實現組合邏輯電路時,由于中規模器件大多數都是專用的功能器件,每一種器件的輸入和輸出之間都有確定的邏輯關系,因此需要了解各種典型中規模器件的功能,根據電路的特點適當選擇中規模集成電路,這樣就可以方便地實現組合邏輯電路。用典型中規模器件實現組合邏輯電路的方法見4.4節。4.3.2用VerilogHDL設計組合邏輯電路的方法

1.門級結構描述模塊

門級結構描述模塊就是將邏輯電路圖用VerilogHDL規定的文本語言表示出來,即調用VerilogHDL語言中內置的基本門元件來描述邏輯圖中的元件及各元件之間的連接關系。VerilogHDL中內置了12個基本門類型,如表4.3.1所示。表4.3.1VerilogHDL語言內置的12個基本門元件關鍵字

1)多輸入門

and、nand、or、nor、xor和xnor是具有多個輸入端的邏輯門。它們的共同特點是,只允許有一個輸出,但可以有多個輸入。其一般調用形式為

anda1(out,in1,in2,in3,…);

調用這幾個門級元件時,括號中需要列出輸入輸出變量,在括號左邊的第一個變量必須是輸出變量。

2)多輸出門

buf、not是具有多個輸出端的邏輯門。它們的共同特點是:允許有多個輸出,但只有一個輸入。一般調用形式為

bufb1(out1,out2,out3,…,in);

notn1(out1,out2,out3,…,in);

這兩類輸出門在調用時,要求括號右邊的第一個變量必須是輸入變量。

3)三態門

bufif1、bufif0、notif1、notif0是三態門元件模型,這些門有一個輸出、一個數據輸入和一個輸入控制。如果輸入控制信號無效,則三態門的輸出為高阻態z,一般的調用形式為

bufif1c1(out,int,ctrl);

bufif0c2(out,int,ctrl);

notif1d1(out,int,ctrl);

notif0d2(out,int,ctrl);

在調用以上三類門元件時,需要注意的是,各門級元件的輸出、輸入必須為wire型的變量。

2.行為描述模塊

行為描述模塊就是對組合邏輯電路的功能和算法進行描述,在Verilog模塊中常用assign語句、always語句生成所需的邏輯電路。

1)用assign語句

assign只能對wire型變量進行賦值。

例如:

assignf=x>y?a:b;

該語句通過比較x和y的大小,決定f的取值,當x>y時,f取a的值,否則f取b的值;

2)用always語句

always是Verilog模塊設計過程中使用最多的關鍵字之一,它的含義和用法已經在前面章節中做過詳細的介紹,這里主要介紹如何使用always描述組合邏輯電路。

always既可以用于描述組合邏輯電路,也可以用于描述時序邏輯電路。在描述組合邏輯電路時,always在使用上有以下幾個特點或規則:

(1)在敏感列表中使用電平敏感事件,不要使用邊沿敏感事件。

(2)為變量賦值時使用阻塞賦值,不要使用非阻塞賦值。

(3)不要在一個以上的always塊中為同一個變量賦值。

4.3.3組合邏輯電路設計舉例

【例4.3.1】在舉重比賽中,有兩名副裁判,一名主裁判。當兩名以上裁判(必須包括主裁判在內)認為運動員上舉杠鈴合格,按動電鈕,裁決合格信號燈亮,則該運動員成績有效。試設計該電路。

解在這個例子中分別講述采用基本門電路、Verilog的結構描述模塊、Verilog的功能描述模塊的方法實現該電路。方法一:使用基本門電路實現。

(1)邏輯抽象,確定輸入輸出變量和邏輯含義。

輸入變量有3個分別代表3個裁判,設主裁判為變量A,副裁判分別為變量B和C,若同意則按下電鈕,用1表示,不按電鈕用0表示。

輸出變量有1個,用來表示合格信號燈,記作Y。燈亮為1,表示合格,否則為0。

(2)根據邏輯要求列出真值表,如表4.3.2所示。

(3)由真值表寫出表達式:

(4.3.1)

(4)化簡,得到最簡與或式:

Y=AB+AC

(4.3.2)

(5)畫出邏輯電路圖。

用與或門實現的電路如圖4.3.2所示。表4.3.2例4.3.1的真值表圖4.3.2用基本邏輯門實現例4.3.1邏輯函數的化簡和變換的形式取決于所采用的器件,下面分別采用與非門、或非門、與或非門實現例4.3.1的邏輯功能。

(1)若采用與非門,則對式(4.3.2)可以采用兩次取反變換,得到與非-與非表達式:

(4.3.3)

由式(4.3.3)可以畫出如圖4.3.3所示的采用與非門實現的邏輯電路圖。圖4.3.3用與非門實現例4.3.1

(2)若采用或非門,則需要將輸出函數表達式轉換為或非-或非表達式。畫出卡諾圖如圖4.3.4所示,對其中取值為0的項進行化簡,求出邏輯函數的或-與表達式,然后進行兩次取反,得到或非-或非表達式:

(4.3.4)

由式(4.3.4)畫出的邏輯電路如圖4.3.5所示。圖4.3.4例4.3.1的卡諾圖圖4.3.5用或非門實現例4.3.1

(3)若采用與或非門,則可對式(4.3.4)再進行變換,得到式(4.3.5):

(4.3.5)

由此可畫出圖4.3.6所示的電路。方法二:使用VerilogHDL進行結構描述。

結構描述其實就是邏輯電路門級結構的一種文本描述。通過實例化Verilog的基本門元件并定義門之間的連接關系,實現如圖4.3.2中用與門和或門實現的電路,其Verilog代碼見代碼4.3.1。為了描述方便,對圖4.3.2中邏輯門和中間信號進行了標注,如圖4.3.7所示。圖4.3.6用與或非門實現例4.3.1圖4.3.7用結構描述模塊實現例4.3.1代碼4.3.1用門級結構(與門和或門)實現例4.3.1。

1modulesamp4_3_1(A,B,C,Y);//模塊定義

2inputA,B,C;//輸入信號定義

3outputY;//輸出信號定義

4and#10ad1(t1,A,B),//結束用逗號,表示ad1、ad2都是與門

5ad2(t2,A,C);//用分號,表示與門定義結束

6or#10o1(Y,t1,t2);

endmodule在這個VerilogHDL結構描述模塊中,行1定義了模塊,該模塊的名稱是samp4_3_11,上層模塊可以通過模塊名samp4_3_11調用該模塊。行2、3對模塊的端口進行了說明,說明A、B、C是輸入信號,Y是輸出信號。行4表示電路中使用了一個與門,名為ad1,輸入是A和B,輸出是t1,“#10”表示輸入與輸出之間的延遲為10個時間單位,時間單位是由時間尺度timescale定義的;行4后面是逗號,表示行5使用的元件類型與行4是相同的,也是一個與門,名為ad2,輸入是A和C,輸出是t2,t1和t2在整個模塊中沒有出現其定義語句,則適應默認類型wire。行6是對電路中使用的或門o1的定義,o1的輸入是t1和t2,輸出是Y。

另采用與非門結構描述模塊的代碼見代碼4.3.2,電路標注如圖4.3.8所示。圖4.3.8用結構描述模塊(與非門)實現例4.3.1代碼4.3.2用門級結構(與非門)實現例4.3.1。

modulesamp4_3_2(A,B,C,Y);

inputA,B,C;

outputY;

nand#10nd1(n1,A,B),

nd2(n2,A,C),

nd3(Y,n1,n2);

endmodule

方法三:使用VerilogHDL進行行為描述。

在進行復雜數字系統設計時,如果只使用門級結構描述電路,那么設計起來將非常麻煩。可以使用行為描述來說明數字電路的行為或功能。在進行行為描述時,常用always語句和if語句。實現例4.3.1的模塊見代碼4.3.3。代碼4.3.3用行為描述if語句實現例4.3.1。

modulesamp4_3_3(A,B,C,Y);

inputA,B,C;

outputY;

regY;

always@(AorBorC)

if(A&B|A&C|A&B&C)//輸入變量中有兩個或三個1時

Y=1;

else

Y=0;

endmodule在always觸發事件列表中使用(A,B,C)表示只要三個輸入信號電平發生變化時,就執行該模塊。需要注意的是,在組合電路中不要使用信號邊沿作為觸發條件。

在always塊中也可以使用case語句實現該功能,模塊描述見代碼4.3.4。代碼4.3.4用行為描述case語句實現例4.3.1。

modulesamp4_3_4(A,B,C,Y);

inputA,B,C;

outputY;

regY;

always@(AorBorC)

case({A,B,C})

3′B101:Y=1;

3′B110:Y=1;

3′B111:Y=1;

default:Y=0;

endcase

endmodule在使用if和case語句實現組合邏輯電路時,要注意對所有可能出現的狀態都要進行判斷,如果在條件判斷中只出現了對部分狀態的處理,則一定要使用else或default語句實現對其余狀態的處理,否則綜合后電路中會出現時序電路中的鎖存器電路。在代碼4.3.3和代碼4.3.4中雖然沒有定義所有可能的選擇,但對沒有定義的情況用else和default進行了缺省行為的處理,因此,它們都是純組合邏輯,不會產生額外的鎖存器。

【例4.3.2】設計一個可以實現4位格雷碼和4位二進制編碼的相互轉換電路,有一個控制端S:當S=1時,可以將輸入的4位格雷碼轉換成4位二進制編碼;當S=0時,實現將輸入的4位二進制編碼轉換成4位格雷碼。

解方法一:使用基本門電路實現。

(1)邏輯抽象,確定輸入輸出變量和邏輯含義。

根據題意,輸入變量有5個,其中4個是輸入的格雷碼或二進制編碼,用B3B2B1B0表示,1個變量用于控制編碼轉換的方向,用S表示。當S=1時實現將格雷碼轉換成二進制碼;

當S=0時實現將二進制碼轉換成格雷碼。輸出變量有4個,用于表示代碼轉換后的結果,用G3G2G1G0表示。

(2)根據題目要求列出真值表,如表4.3.3所示。表4.3.3例4.3.2的真值表

(3)寫出輸出邏輯表達式。

由于此題有5個輸入變量,直接采用卡諾圖化簡比較麻煩,因此分S=0和S=1兩種情況分別寫出輸出G3G2G1G0的表達式。

情況一:S=0時,二進制碼轉換為格雷碼的卡諾圖如圖4.3.9所示。圖4.3.9例4.3.2中當S=0時的卡諾圖由真值表得:

G3=B3

由圖4.3.9得:

情況二:S=1時,格雷碼轉換為二進制碼的卡諾圖如圖4.3.10所示。

由真值表得G3=B3,G2~G0根據卡諾圖可得:

綜合上述兩種情況,可以得到式(4.3.6)和式(4.3.7)。圖4.3.10例4.3.2中當S=1時的卡諾圖當S=0時:

(4.3.6)當S=1時:

(4.3.7)綜合式(4.3.6)和式(4.3.7)可得各輸出的邏輯表達式:

(4.3.8)

(4)根據式(4.3.8)可以畫出用基本門電路實現的邏輯電路圖,如圖4.3.11所示。圖4.3.11例4.3.2的邏輯電路圖方法二:使用Verilog結構描述實現。

在圖4.3.11中使用了一個與或門,該與或門的輸入端中,有一個是低電平有效,這個門在Verilog的基本門類型中并沒有提供,所以,這里先要定義一個模塊實現該復合門電路的功能。實現圖4.3.11電路完整的結構描述模塊見代碼4.3.5,代碼中邏輯門實例u1、u2、xr1、xr2和xr3在圖4.3.11中進行了標注。代碼4.3.5中的u_gate1和u_gate2模塊都可以實現與或門的功能,但是u_gate2模塊的可讀性更好一些。代碼4.3.5用門級結構模塊實現例4.3.2。

modulesamp4_3_5(B,S,G);

input[3:0]B;

inputS;

output[3:0]G;

assignG[3]=B[3];

u_gate1u1(.A(G[2]),.B(S),.C(S),.D(B[2]),.Y(t1)),

u2(.Y(t2),.A(G[1]),.B(S),.C(S),.D(B[1]));

xorxr1(G[2],B[3],B[2]),

xr2(G[1],t1,B[1]),

xr3(G[0],t2,B[0]);

endmodule

moduleu_gate1(A,B,C,D,Y);//自定義復合門

inputA,B,C,D;

outputY;

notu1(w1,C);

andad1(n1,A,B),

ad2(n2,w1,D);

oro1(Y,n1,n2);

endmodule

moduleu_gate2(A,B,C,D,Y);

inputA,B,C,D;

outputY;

assignY=A&B|(~C)&D;

endmodule

方法三:使用Verilog行為描述實現。

采用Verilog進行行為描述的代碼見代碼4.3.6。該代碼采用if和case語句描述了在S的控制下,實現由B到G的轉換。

代碼4.3.6用行為描述的方法實現例4.3.2。modulesamp4_3_6(B,S,G);

input[3:0]B;

inputS;

outputreg[3:0]G;

always@(SorB)

if(S)

begin//實現格雷碼到二進制碼的轉換

case(B)

4′b0000:G=4′b0000;

4′b0001:G=4′b0001;

4′b0011:G=4′b0010;

4′b0010:G=4′b0011;

4′b0110:G=4′b0100;

4′b0111:G=4′b0101;

4′b0101:G=4′b0110;

4′b0100:G=4′b0111;

4′b1100:G=4′b1000;

4′b1101:G=4′b1001;

4′b1111:G=4′b1010;

4′b1110:G=4′b1011;

4′b1010:G=4′b1100;

4′b1011:G=4′b1101;

4′b1001:G=4′b1110;

4′b1000:G=4′b1111;endcase

end

else//實現二進制碼到格雷碼的轉換

begin

case(B)

4′b0000:G=4′b0000;

4′b0001:G=4′b0001;

4′b0010:G=4′b0011;

4′b0011:G=4′b0010;

4′b0100:G=4′b0110;

4′b0101:G=4′b0111;

4′b0110:G=4′b0101;

4′b0111:G=4′b0100;

4′b1000:G=4′b1100;4′b1001:G=4′b1101;

4′b1010:G=4′b1111;

4′b1011:G=4′b1110;

4′b1100:G=4′b1010;

4′b1101:G=4′b1011;

4′b1110:G=4′b1001;

4′b1111:G=4′b1000;

endcase

end

endmodule代碼4.3.5和代碼4.3.6所描述的電路功能仿真結果如圖4.3.12所示,圖中的(a)和(b)分別是S=0、S=1時輸出G(G3G2G1G0)與輸入B(B3B2B1B0)的關系。圖4.3.12代碼4.3.5和代碼4.3.6的功能仿真圖(a)S=0;(b)S=14.4.1加法器

加法器是進行算術運算的基本單元電路,在計算機中無論加、減、乘、除運算都是轉換為若干步加法運算實現的。4.4常用組合邏輯電路

1.加法器工作原理及實現

1)1位全加器

1位全加器是實現兩個1位二進制數加法運算的電路,是構成算術運算電路的基本單元。“全加”的含義是在計算時考慮來自低位的進位信號。還有一種半加器,它只對本位的數據進行運算,而不考慮低位的進位信號。圖4.4.1是1位全加器的邏輯符號,輸入信號分別是二進制數據An、Bn以及一個來自低位的進位信號Cn-1;輸出信號是本位的數據和F以及本位數據向高位的進位Cn。1位全加器的真值表如表4.4.1所示。圖4.4.1全加器的邏輯符號由真值表可得:

(4.4.1)

根據式(4.4.1),1位全加器可以采用異或門和與非門實現,邏輯電路如圖4.4.2所示。表4.4.11位全加器真值表圖4.4.21位全加器電路圖

2)4位加法器

4位加法器可以用四片1位全加器構成。圖4.4.3是用四個1位全加器構成的4位加法器。該電路結構簡單,是由四個1位全加器以串行進位的方式連接組成的,低位全加器的進位輸出端與高位全加器的進位輸入端連接。這種連接方式電路的主要缺點是運算速度慢,這是因為進位信號在四個1位加法器之間是由低位到高位串行傳輸的,高位的運算必須等相鄰低位的運算完成后,才能正確進行,所以最高位的運算結果需要較長時間才能得到。圖4.4.34位串行進位加法器為了提高運算速度,就必須消除由于進位信號串行傳遞所需的時間,下面對各位進位信號的產生過程進行分析。

以四位加法器為例,現定義從低位到高位四個1位全加器的進位輸入信號依次是C-1、C0

C1

及C2,對應的進位輸出依次是C0

、C1

、C2和C3,由式(4.4.1)可以得到各進位信號的邏輯表達式:

(4.4.2)設Pi=Ai+Bi,Gi=AiBi,則有:

(4.4.3)由式(4.4.3)可以看出,每一位的進位信號Ci可以表示為輸入加數、被加數和最低位進位信號C-1的邏輯函數,因此每個進位信號C0~C3都可以根據式(4.4.3)采用與或門并行產生,而不必采用串行進位方式,這樣就提高了運算速度,但這是以增加電路的復雜程度為代價換取的,當加法器的位數增加時,電路的復雜程度也隨之急劇上升。

圖4.4.4是一個4位超前進位加法器的電路結構圖,請讀者分析電路的工作過程。為了便于分析,圖中對C0~C3信號進行了標注。4位全加器的邏輯符號如圖4.4.5所示。圖4.4.44位超前進位加法器圖4.4.54位全加器的邏輯符號

2.加法器的應用舉例

加法器除了進行二進制加法外,還可以用來構成代碼轉換、減法器、十進制加法器等電路。

【例4.4.1】分析圖4.4.6所示電路,說明其邏輯功能。

解圖4.4.6中,74LS283是4位超前進位加法器,A(A3A2A1A0)、B(B3B2B1B0)分別是兩個4位的加數,F(F3F2F1F0)是運算的結果和,CI是進位輸入,CO是進位輸出。

由圖4.4.6有:

(4.4.4)圖4.4.6例4.4.1的電路圖當K=0時:

其功能是實現4位加法運算。

當K=1時:

其功能是實現A與B的反碼相加再加1的功能,即實現4位二進制補碼減法運算。

因此,圖4.4.6的功能是在輸入K信號的控制下,實現補碼的加或減運算。

【例4.4.2】試用一位全加器實現兩位二進制乘法器。

解設有兩個2位二進制數分別為A=A1A0

,B=B1B0,P是其乘法運算結果,則有:

P=A×B=A1A0×B1B0

由于2位二進制的乘法運算的結果最多是4位二進制數,因此設P=P3P2P1P0,其各位產生的計算過程如下:其中:

(4.4.5)

其中,C1是A1B0+A0B1的進位輸出,C2是A1B1+C1的進位輸出。用1位加法器和與門實現的2位二進制乘法的電路如圖4.4.7所示。圖4.4.7兩位乘法電路

3.加法器的Verilog設計與仿真

1)1位全加器

1位全加器的Verilog模塊及調用見代碼4.4.1,其功能仿真結果見圖4.4.8。

代碼4.4.11位全加器模塊及調用。

modulesamp4_4_1(A,B,C0,S,C1);//調用1位全加器的頂層模塊

inputA,B,C0;

outputS,C1;

adder_fullu1(.ia(A),.ib(B),.ic(C0),.os(S),.oc(C1));

endmodule

moduleadder_full(ia,ib,ic,os,oc);//1位全加器模塊

inputia,ib,ic;

outputos,oc;

assign{oc,os}=ia+ib+ic;

endmodule圖4.4.8一位加法器功能仿真圖

2)4位全加器

4位全加器的Verilog模塊及調用見代碼4.4.2,其功能仿真結果見圖4.4.9。

代碼4.4.24位全加器模塊及調用。

modulesamp4_4_2(A,B,S,C)

//調用4位加法器的頂層模塊

input[3:0]A,B;

output[3:0]S;

outputC;

adder_4u1(.ia(A),.ib(B),.os(S),.oc(C));

endmodule

moduleadder_4(ia,ib,os,oc);//4位全加器模塊

input[3:0]ia,ib;

output[3:0]os;

outputoc;

assign{oc,os}=ia+ib;

endmodule圖4.4.94位加法器功能仿真圖4.4.2編碼器

1.編碼器的工作原理及實現

1)普通編碼器

圖4.4.10是一個普通的8線-3線編碼器電路,其中,

是8個輸入信號,Y2Y1Y0是3位二進制代碼輸出信號。圖4.4.10普通的8線-3線編碼器根據圖4.4.10寫出輸出的邏輯表達式為

(4.4.6)

其輸入與輸出關系見表4.4.2所示。表4.4.2普通8線—3線編碼器輸入輸出關系表

2)優先編碼器

優先編碼器允許在同一時刻有兩個或兩個以上的輸入信號有效。當多個輸入信號同時有效時,只對其中優先權最高的一個進行編碼,輸入信號的優先級別是由設計者根據需要確定的。圖4.4.11所示為常用優先編碼器74LS148的邏輯電路圖。圖中,是選通控制輸入端,當=0時,編碼器的輸出取決于輸入信號,當=1時,所有輸出均被封鎖為1;YS為選

通輸出端,當=0,YS=0時,表示編碼電路工作,但所有輸入信號均為無效狀態;是擴展端,當=0,=0時,表示編碼電路工作,有編碼信號輸入。YS和

常用于編碼器的擴展連接;8個編碼輸入信號中優先權最高,優先權最低。74LS148的邏輯符號見圖4.4.12。若不考慮、YS和,則電路輸出方程為

(4.4.7)圖4.4.1174LS148邏輯電路圖表4.4.3列出了圖4.4.11所示優先編碼器的真值表。圖4.4.12是8線-3線優先編碼器的邏輯符號。圖4.4.1274LS148邏輯符號表4.4.3優先編碼器真值表

2.編碼器的應用舉例

可以用兩片8線—3線優先編碼器連接成為一個16線-4線優先編碼器,如圖4.4.13所示。圖4.4.13用8線—3線優先編碼器構成16線—4線優先編碼器

3.編碼器的Verilog設計與仿真

1)基本功能優先編碼器

實現基本功能優先編碼器的Verilog程序見代碼4.4.3,其功能仿真結果見圖4.4.14。

代碼4.4.3基本功能優先編碼器模塊。modulesamp4_4_3(IN,Y);//調用基本功能優先編碼器的頂層模塊

input[7:0]IN;

output[2:0]Y;

encoder1u1(.iIN_N(IN),.oY_N(Y));

endmodule

moduleencoder1(iIN_N,oY_N);//基本功能優先編碼器模塊定義

input[7:0]iIN_N;

outputreg[2:0]oY_N;

always@(iIN_N)

case(iIN_N)8′b01111111:oY_N=3′b000;

8′b10111111:oY_N=3′b001;

8′b11011111:oY_N=3′b010;

8′b11101111:oY_N=3′b011;

8′b11110111:oY_N=3′b100;

8′b11111011:oY_N=3′b101;

8′b11111101:oY_N=3′b110;

8′b11111110:oY_N=3′b111;

default:oY_N=3′bxxx;

endcase

endmodule圖4.4.14代碼4.4.3功能仿真結果

2)74LS148優先編碼器

實現74LS148優先編碼器功能的Verilog模塊見代碼4.4.4,其功能仿真結果見圖4.4.15。

代碼4.4.474LS148優先編碼器模塊modulesamp4_4_4(ST,IN,Y,YEX,YS);

//調用74LS148編碼器的頂層模塊

inputST;

input[7:0]IN;

output[2:0]Y;

outputYEX,YS;

encoder_74148u1(.iST_N(ST),.iIN_N(IN),.oY_N(Y),.oYEX_N(YEX)

.oYS(YS));

endmodulemoduleencoder_74148(iST_N,iIN_N,oY_N,oYEX_N,oYS);

//74LS148編碼器模塊定義

inputiST_N;

input[7:0]iIN_N;

outputreg[2:0]oY_N;

outputregoYEX_N,oYS;

always@(iST_N,iIN_N)

if(!iST_N)

begin

oYEX_N=0;

oYS=1;

if(iIN_N[7]==0)

oY_N=3′h0;

elseif(iIN_N[6]==0)

oY_N=3′h1;

elseif(iIN_N[5]==0)

oY_N=3′h2;

elseif(iIN_N[4]==0)

oY_N=3′h3;

elseif(iIN_N[3]==0)

oY_N=3′h4;

elseif(iIN_N[2]==0)

oY_N=3′h5;

elseif(iIN_N[1]==0)

oY_N=3′h6;

elseif(iIN_N[0]==0)

oY_N=3′h7;

else

begin

oY_N=3′h7;

oYEX_N=1;

oYS=0;

end

end

else

begin

oY_N=3′h7;

oYEX_N=1;

oYS=1;

end

endmodule圖4.4.15代碼4.4.4功能仿真結果4.4.3譯碼器

1.二進制譯碼器

1)二進制譯碼器的工作原理

二進制譯碼器的邏輯功能是把輸入二進制代碼表示的所有狀態翻譯成對應的輸出信號。若輸入是3位二進制代碼,則3位二進制代碼可以表示8種狀態,因此就有8個輸出端,每個輸出端分別表示一種輸入狀態。因此,又把3位二進制譯碼器稱為3線—8線譯碼器,簡稱3-8譯碼器,與此類似的還有2-4譯碼器和4-16譯碼器等。

圖4.4.16所示是常用3-8譯碼器74LS138的邏輯電路圖,其邏輯符號見圖4.4.17。圖4.4.1674LS138的邏輯電路圖圖4.4.1774LS138的邏輯符號圖4.4.16中,A2A1A0是譯碼器輸入端,也稱為地址輸入端;是輸出端;此外還有STA、和三個控制端。若設,則當S=1時譯碼器工作;當S=0時禁止譯碼器譯碼,輸出全為1。

輸出信號的邏輯表達式為

(4.4.8)

A0三個變量的全部最小項,所以把這種譯碼器又叫做最小項譯碼器。74LS138的真值表見表4.4.4。表4.4.474LS138的真值表

2)二進制譯碼器的應用

(1)譯碼器的擴展。

【例4.4.3】將兩片74LS138擴展成4-16譯碼器。

解設4-16譯碼器輸入為A3A2A1A0,譯碼器的輸出為Y0~

Y15

,電路由兩片74LS138組成,分別實現高8位和低8位譯碼輸出。當A3=1時,使高位芯片工作,輸出有效,

低位芯片禁止工作,輸出均為1;當A3=0時,高位芯片禁止工作,輸出均為1,低位芯片允許譯碼,輸出有效。

74LS138工作的條件是:STA=1且,因此可利用A3控制兩個芯片的STA控制信號。電路圖連接如圖4.4.18所示,其中,74LS138(1)是低位芯片,74LS138(2)是高位芯片。

當A3=0時,74LS138(1)芯片的STA=1,輸出有效;74LS138(2)芯片的STA=0,禁止譯碼,輸出均為1。

當A3=1時,74LS138(1)芯片的STA=0,禁止譯碼,均輸出1;74LS138(2)芯片的STA=1,輸出有效。

也可用A3對

和信號進行控制實現擴展。圖4.4.18例4.4.3的電路圖

【例4.4.4】用74LS138擴展實現5-32譯碼器。

解構成5-32譯碼器需要四個74LS138芯片,各芯片的控制信號可以通過門電路產生,更簡單的方法是通過一個2-4譯碼器74LS139產生,實現的電路如圖4.4.19所示。圖4.4.19用74LS138擴展成5-32譯碼器

(2)利用譯碼器實現邏輯函數。

【例4.4.5】分析圖4.4.20所示電路,寫出輸出函數F的邏輯表達式。

解由圖4.4.20可知三個使能輸入端均為有效,譯碼器正常工作。此時,有

(4.4.9)所以有

一個n變量輸入的譯碼器,其輸出包含了n個輸入變量的全部最小項(或最小項的非)。因此,利用n變量譯碼器和門電路就能實現任何形式的輸入變量不大于n的組合邏輯函數。圖4.4.20例4.4.5的電路圖

【例4.4.6】用譯碼器實現下面兩個函數。

解這兩個輸出函數均為三輸入變量函數,下面分別用

3-8譯碼器、與非門和3-8譯碼器、與門實現F1、F2。

方法一:選用3-8譯碼器和與非門實現。將輸出函數寫成最小項之和的形式,并變換為譯碼器反碼輸出形式,用與非門作為F1、F2的輸出門。(4.4.10)(4.4.11)當然,也可以通過填卡諾圖方法,將輸出函數寫成最小項之和的形式。

連接電路時只要將輸入變量A、B、C分別加到譯碼器地址輸入端A2、A1、A0,然后用相關的譯碼輸出信號作非門的輸入信號即可實現指定邏輯函數,實現電路如圖4.4.21所示。圖4.4.21用譯碼器和與非門實現例4.4.6的邏輯函數方法二:選用3-8譯碼器和與門實現。

將輸出函數寫成最大項之積的形式,然后進行如下變換:

(4.4.12)

(4.4.13)

用譯碼器和與門實現F1、F2的電路如圖4.4.22所示。圖4.4.22用譯碼器和非門實現例4.4.6的邏輯函數

3)二進制譯碼器的Verilog設計與仿真

代碼4.4.5給出了3-8譯碼器Verilog模塊的實現,其功能仿真結果見圖4.4.23。

代碼4.4.53-8譯碼器模塊。modulesamp4_4_5(STA,STB,STC,A,Y);

//調用3-8譯碼器模塊的頂層模塊

inputSTA,STB,STC;

input[2:0]A;

input[7:0]Y;

decoderu1(.iSTA(STA),.iSTB_N(STB),.iSTC_N(STC),.iA(A),

.oY_N(Y));

endmodule

moduledecoder(iSTA,iSTB_N,iSTC_N,iA,oY_N);

inputiSTA,iSTB_N,iSTC_N;

input[2:0]iA;

output[7:0]oY_N;reg[7:0]m_y;

assignoY_N=m_y;

always@(iSTA,iSTB_N,iSTC_N,iA)

if(iSTA&&!(iSTB_N||iSTC_N))

case(iA)

3′b000:m_y=8′b11111110;

3′b001:m_y=8′b11111101;

3′b010:m_y=8′b11111011;

3′b011:m_y=8′b11110111;

3′b100:m_y=8′b11101111;

3′b101:m_y=8′b11011111;

3′b110:m_y=8′b10111111;

3′b111:m_y=8′b01111111;

endcase

else

m_y=8′hff;

endmodule圖4.4.23代碼4.4.5的功能仿真圖

2.二-十進制譯碼器

1)集成二-十進制譯碼器

二-十進制譯碼器的邏輯功能是將輸入的BCD碼譯成十個輸出信號。

常用的中規模二-十進制譯碼芯片有74LS42,圖4.4.24是其邏輯符號,A3A2A1A0是BCD編碼輸入端;是輸出端,低電平有效。當A3A2A1A0為冗余碼輸入時,輸出均為高電平。這種譯碼器也稱為4線-10線譯碼器。表4.4.5是74LS42的邏輯真值表。圖4.4.2474LS42的邏輯符號表4.4.574LS42的真值表

2)二—十進制譯碼器的Verilog設計與仿真

實現二—十進制譯碼器的Verilog程序見代碼4.4.6,其功能仿真結果見圖4.4.25。

代碼4.4.6二—十進制譯碼器模塊。

modulesamp4_4_6(A,Y);

input[3:0]A;

outputreg[9:0]Y;

Decoder_BtoDu1(.iA(A),.oY(Y));

endmodule

moduleDecoder_BtoD(iA,oY);

input[3:0]iA;

outputreg[9:0]oY;

always@(iA)

case(iA)

4′b0000:oY=10′h001;

4′b0001:oY=10′h002;4′b0010:oY=10′h004;

4′b0011:oY=10′h008;

4′b0100:oY=10′h010;

4′b0101:oY=10′h020;

4′b0110:oY=10′h040;

4′b0111:oY=10′h080;

4′b1000:oY=10′h100;

4′b1001:oY=10′h200;

default:oY=10′h000;

endcase

endmodule圖4.4.25二—十進制譯碼功能仿真圖

3.顯示譯碼器

在數字測量儀表和各種數字系統中,都需要將數字量直觀地顯示出來,一方面供人們直接讀取測量和運算的結果,另一方面用于監視數字系統的工作情況,數字顯示電路是數字系統不可缺少的部分。

1)顯示譯碼器的工作原理

數字顯示電路通常由顯示譯碼器、驅動器和顯示器等部分組成,如圖4.4.26所示。圖4.4.26數字顯示電路的組成由于顯示器件和顯示方式的多樣性,其譯碼電路也不相同,最簡單和最常用的是七段數碼顯示電路,它由多個發光二極管LED按分段式封裝制成。LED數碼管有共陰型和共陽型兩種形式,圖4.4.27分別給出了七段數碼顯示器件的外形圖、共陰極和共陽極LED電路連接圖。圖中,8個LED分別用于顯示數字和小數點,每個LED燈的亮滅由其對應的a~g、DP段位信號控制。在圖4.4.27(b)所示的共陰極連接的數碼管中,當段位信號為高電平時,對應的LED亮,當段位控制信號為低電平時,對應的LED燈滅。例如,當abcdefg=1111110時,只有g段位對應的LED燈滅,其余LED燈都亮,因此顯示數字“0”。在圖4.4.27(c)所示的共陽極連接的數碼管中,當段位信號為低電平時,對應的LED燈亮,當段位信號為高電平時,對應的LED燈滅,因此,共陽極數碼當段位控制信號abcdefg=0000001時,顯示“0”。圖4.4.27七段顯示LED數碼管(a)外形圖;(b)共陰極連接;(c)共陽極連接圖4.4.28所示的是常用七段譯碼器的輸出與顯示字形的對應關系。例如,當顯示數字“0”時,a~g七個段中只有g段的LED燈是滅的,其余段的LED燈都應點亮。圖4.4.28常用七段譯碼器字形中規模數字譯碼器件很多,常用的有:4線—七段共陰極譯碼器CT5448/CT7448、CT54LS48/CT74LS48、CT5449/CT7449、CT54LS49/CT74LS49、CT54248/CT74248、

CT54LS248/CT74LS248、CT54249/CT74249、CT54LS249/CT74LS249;4線—七段共陽極譯碼器CT54246/CT74246、CT54247/CT74247、CT54LS247/CT74LS247等。其中,48與248、49與249的引腳排列、功能和電器特性相同,差別僅在“6”和“9”的字形顯示不同。

圖4.4.29(a)和(b)分別是共陰極七段譯碼器74LS48的電路圖和邏輯符號。圖4.4.29七段譯碼器74LS48電路圖和邏輯符號(a)74LS48電路圖;(b)74LS48邏輯符號

74LS48為有內部上拉電阻的BCD七段譯碼器/驅動器。圖4.4.29中各信號功能分別如下:

·A3~A0:8421BCD輸入端。

·Ya~Yg:七段輸出端,為高電平有效,可驅動共陰極七段。

·:燈光測試輸入端。當=0且=1時,與A3~A0狀態無關,Ya~Yg輸出均為高電平,使七段數碼管各段全部點亮。

·

:串行滅零輸入端。對不希望顯示的數碼“0”,可以通過控制=0實現。即當=1且=0時,若A3~A0=0000,則不顯示“0”。

·

:熄滅輸入/串行滅零輸出端。具有雙重功能的端口,既可以作為輸入信號端,又可作為輸出信號端口。為消隱輸入,當=0時,與其他輸入信號無關,Ya~Yg輸出均為低電平,使七段LED燈處于熄滅狀態。為滅零輸出端口。

74LS48的真值表見表4.4.6。表4.4.6七段譯碼器74LS48的功能表

2)數碼顯示器的應用

圖4.4.30所示是用多片74LS48組成的一個數碼顯示系統。圖4.4.30七段譯碼器顯示系統對于整數部分最高位滅零輸入接地,表示滅掉最高位無意義的0。=0,且A3~A0=0,則滅零輸出一定等于0,可以連續滅掉高位的多個0。對于小數部分,與整數部分相反,最低位滅零輸入接地,這樣可以滅掉連續的多個低位0。小數部分最高位和整數最低位接

5V,表示不滅零。當振蕩器輸入高電平時,經反向器后使

=0,LED不顯示。圖4.4.30中振蕩器輸出脈沖的占空比可以調整數碼管的顯示亮度,當輸出脈沖為低電平時,經倒相使滅零輸入為1,LED顯示;當輸出脈沖為高電平時,LED燈熄滅。

圖中多個七段數碼管的數據信號A3A2A1A0連接在一起,可以通過控制各數碼管的共陰(或共陽)極信號來選擇用于數據顯示的數碼管,這是七段數碼掃描顯示的連接方式。

3)七段數字譯碼器的Verilog設計與仿真

具有共陰共陽輸出控制功能的七段數字譯碼器Verilog程序見代碼4.4.7,其功能仿真結果見圖4.4.31。

代碼4.4.7具有共陰共陽輸出可選控制的七段譯碼模塊。modulesamp4_4_7(flag,A,Y);

inputflag;

input[3:0]A;

outputreg[6:0]Y;

seg_decoderu1(.iflag(flag),.iA(A),.oY(Y));

endmodule

moduleseg_decoder(iflag,iA,oY);//七段譯碼模塊定義

inputiflag;//共陰、共陽輸出控制端

input[3:0]iA;//四位二進制輸入

outputreg[6:0]oY;

always@(iflag,iA)

begin

case(iA)

4′b0000:oY=7′h3f;//iflag=1共陰極輸出

4′b0001:oY=7′h06;

4′b0010:oY=7′h5b;

4′b0011:oY=7′h4f;

4′b0100:oY=7′h66;

4′b0101:oY=7′h6d;

4′b0110:oY=7′h7d;

4′b0111:oY=7′h27;4′b1000:oY=7′h7f;

4′b1001:oY=7′h6f;

4′b1010:oY=7′h77;

4′b1011:oY=7′h7c;

4′b1100:oY=7′h58;

4′b1101:oY=7′h5e;

4′b1110:oY=7′h79;

4′b1111:oY=7′h71;

endcase

if(!iflag)

oY=~oY;//iflag=1共陽極輸出

end

endmodule圖4.4.31代碼4.4.7的功能仿真圖4.4.4數據選擇器和數據分配器

1.數據選擇器

數據選擇器電路的作用相當于圖4.4.32所示的多路開關。根據輸入信號A1A0的狀態,從輸入的四路數

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論