《数字电路设计及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

提交评论