组合逻辑电路
门电路实现了各种底层逻辑功能
将这些门电路进行排列组合,便变成了组合逻辑电路
组合逻辑电路概述
特点:当前时刻输出仅取决于该时刻的输入,与电路原来状态(历史状态)无关(时序)
电路结构:由逻辑门电路组成,输入输出都可是多个
电路特点:没有记忆单元,无反馈状态
数字电路可以分为组合逻辑电路
和时序逻辑电路
,前者只和输入有关,后者不仅与输入有关还与历史状态有关
只要输入确定,输出就确定,可以绘制成一张真值表或使用一组逻辑函数表示
y1 = f1(a1,a2,...,an)
y2 = f2(a1,a2,...,an)
- ......
yn = fn(a1,a2,...,an)
y为输出端,a为输入端
组合逻辑电路分析方法
图 ——> 功能
通过分析电路图,找出电路的逻辑功能
分析步骤:
- 给定的逻辑电路
- 输出逻辑函数式
- 列真值表
- 分析逻辑功能
以函数式为核心,向其看齐,一般通过真值表分析逻辑功能(猜谜)
练习一些电路的输入输出真值表,并对功能加以推测
常见功能:
判断1数量的奇偶
奇输出1,偶输出0
判断输入二进制数的取值范围
如0-3输出一个
y1=1,y2=0
,4-7输出两个y1=0,y2=1
判断输入1的数量是否大于等于2
......
当一个电路满足:
- 判断1数量的奇偶,奇输出1,偶输出0
- 判断输入1的数量是否大于等于2
它可以是一个加法器:
输入A、B、C
- A、B为要加的两个数
- C为进位标识符
输出Y1、Y2
Y2储存加的结果:偶数个1为0,奇数个1为1
如1+1=0,1+0=1,0+1=1,0+0=0
当有三个1,AB相加为0,C进位得1
Y1表示是否向上进位
组合逻辑电路设计方法
与分析方法互异
功能 ——> 图
根据实际逻辑问题,求出实现这一逻辑功能的最简单的逻辑电路
最简:
- 电路所用器件数最少
- 器件的种类最少
- 器件之间的连线最少
设计步骤:
进行逻辑抽象
找到输入、输出变量
对输入输出变量进行逻辑状态赋值
列真值表
写出逻辑函数式
选定器件的类型
将逻辑函数化简或变换成适当的形式
画逻辑图
工艺设计
逻辑抽象是重难点
例一:下山两条路,一真一假,村名两类人,一说真话一说假话,你碰到了一个村民,只能问一个问题,如何确定下山的路
答案:如果我问你右边这条路是否能够下山,你会回答是吗?
- 对于说假话的村民加了一层逻辑非:即这条路若能够下山,那么我是说假话的,我认为否,但提问的是
是否会回答是
,我此时确实认为要回答否,于是对于是否会回答是
这一问题我要回答否
,但因为我要说假话,我又要回答是
例二:交通信号灯故障,有以下故障情况,三灯都不亮,R/Y同时亮,A/G同时亮,R/Y同时亮,三灯同时亮。请做出一个判断信号灯是否故障的电路
三个输入:红(R)黄(Y)绿(G)灯
一个输出:是否出现故障(Z)
画真值表
R | Y | G | Z |
---|---|---|---|
0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
逻辑函数:Z = R'Y'G' + R'YG + RYG' + RY'G + RYG
通过卡诺图化简:Z = R'T'G' + RA + RG + AG
常用组合逻辑电路
编码器
数字
- 表示数量多少
- 编码,比如电话号码
编码:用文字、图像或数码表示特定对象的过程
编码器的逻辑功能:把输入的每一个高、低电平信号编制成一个对应的二进制代码
编码器
- 普通编码器:同时只相应一个有效信号
- 优先编码器:可以有多个同时相应,排队处理,有一个优先级的设定
八三编码器
八线三线编码器
属于普通编码器
任何时刻只允许输入一个编码信号,否则输出将混乱
输入为I1-I8
,输出为Y1-Y3
同时只能有一个I
高电平输入,如I2
输入高电平,则Y1-Y3
依次输出010
,表示二进制数 2,若同时有两个I
输入,就会崩坏
根据真值表可得
Y3=I4+I5+I6+I7
Y2=I2+I3+I6+I7
Y1=I1+I3+I5+I7
那么就可以画出一个相应的逻辑图设计门电路
优先编码器
允许同时输入两个或以上信号,并按优先级输出一个信号
通过一坨与门、或非门进行优先级的检测
- 使用与门封锁同时进来的信号
- 限制高低电平的通过
S为选通输入端
- S'=0,正常工作
- S'=1,输出端被封锁在高电平,即所有输出端
Y'
都是高电平(111)
Ys'为选通输出端
Ys = (I0' I1' I2' I3' I4' I5' I6' I7' S)'
Y(EX)'为扩展端,用于扩展编码功能
Y(EX)' = [(I0+I1+I2+I3+I4+I5+I6+I7)S]'
只要任何一个输入端有低电平输入且S=1(正常工作),Y(EX)'
为低电平
大当家非为1,二当家才有效;大当家和二当家非为1,三当家才有效;以此类推
我们用低电平表示有效,节省功耗(但不利于理解)
Ys'` | Y(EX)' | 状态 |
---|---|---|
1 | 1 | 不工作 |
0 | 1 | 工作但无输入 |
1 | 0 | 工作且有输入 |
0 | 0 | 不可能出现 |
16线4线优先编码器
高低八位输入,四位输出
高低位通过低八位的Ys'
和高八位的S'
连接,只有当低八位不工作或工作但无输入时,高八位才会正常工作
若低八位工作且有输入,高八位将不工作
十进制优先编码器
BCD编码:二进制转十进制编码器
译码器
编码的反操作,将每个输入的二进制码译成对应的输出高低电平信号
常用的译码器:二进制译码器,二-十进制译码器和显示译码器
二进制译码器
3线8线译码器
8线3线编码器的反操作
简单好用
低电平输出(低电平为有效,高电平为无效)
二极管与门阵列实现
二极管导通压降:0.7V
纯纯使用二极管正负导向和导通压降控制电流传输
缺点:
- 输入电阻低,输出电阻较高
- 输出高、低电平信号存在偏移
实际上不会使用二极管,而是使用三极管或CMOS
TTL与非门实现3-8译码器
附加控制端G:S2' = S3' = 0, S1 = 1
时G输出1,其余情况输出0
当G输出为高电平时正常工作,当G输出低电平全部被封锁到高电平
该译码器也叫最小项译码器
与二极管阵列实现区别
- 用逻辑门实现
- 输出端低电平有效
- 有3个附加控制端
4线16线译码器
用两片3线8线译码器组成,两个TTL的控制端相连,达到第一片和第二片不同时工作的效果
二-十进制译码器
将输入BCD码的是个代码译成10个高、低电平输出信号
Y0' = (A3' A2' A1' A0')'
Y1' = (A3' A2' A1' A0)'
Y2' = (A3' A2' A1 A0')'
Y3' = (A3' A2' A1 A0)'
Y4' = (A3' A2 A1' A0')'
Y5' = (A3' A2 A1' A0)'
Y6' = (A3' A2 A1 A0')'
Y7' = (A3' A2 A1 A0)'
Y8' = (A3 A2' A1' A0')'
Y9' = (A3 A2' A1' A0)'
显示译码器
七段字符显示器
分半导体数码管和液晶显示器两种
1、LED数码管
希望广而告之
半导体:好多二极管,公共阴极
优点:工作电压低、体积小、寿命长、可靠性高、响应时间短、亮度高
缺点:功耗大
2、液晶显示器
满足个人需求
液晶:一种有机化合物,颜色受外加电场影响
优点:功耗小,工作电压低
缺点:亮度差,响应速度低
BCD-七段显示译码器
驱动显示器件,数码管或液晶显示器
其逻辑函数经卡诺图化简可
Ya = [(A3' A2' A1' A0)+(A3 A1)+(A2 A0')]'
Yb = [(A3 A1)+(A2 A1 A0')+(A2 A1' A0')]'
Yb = [(A3 A2)+(A2' A1 A0')]'
Yd = [(A2 A1 A0)+(A2 A1' A0')+(A2' A1' A0)]'
Ye = [(A2 A1')+(A0)]'
Yf = [(A3' A2' A0)+(A2' A1)+(A1 A0)]'
Yg = [(A3' A2' A1')+(A2 A1 A0)]'
逻辑函数 ——> 电路图 ——> 电路器件
输入端
正常输入端:A0 A1 A2 A3
灭灵输入RBI:把不希望显示的零熄灭
灯测试输入LT:当LT'=0,正常情况所有灯将被同时点亮
灭灯输入/灭零输出BI'/RBO':双功能端
作为输入端使用,成为输入控制端
只要BI'=0,无论A怎么输入,数码管各段同时熄灭
作为输出端使用,成为灭零输出端,与灭零输入端相连
用译码器设计组合逻辑电路
使用3线8线译码器设计一个多输出的组合逻辑电路
38译码器:最小项译码器,可以实现任意的三变量的组合逻辑电路
设计过程
- 将给定函数化成最小项和形式:每项都出现,每项不重复,如
AC ——> ABC+AB'C = m0+m2
- 变换成与非的形式(非非的形式,为了用零表示有效输出):如
m0+m2 ——> (m0'm2')'
- 根据38译码器设计相应电路
数据选择器
使用38译码器设计的组合逻辑电路只能有三个输入,为实现四个输入,引入数据选择器
四选一:三变量的组合逻辑函数
八选一(双四选一):四变量的组合逻辑函数
四选一选择器
从一组输入数据中选出某一个来,用到数据选择器,又叫多路选择开关:MUX
就类似于高中电路那种单刀双掷开关,四选一就是说单刀四掷开关
一个四选一选择器:
- 地址线 A
- 非门开关 S
- 四个输入端口 Di
- 一个输出端口 Y
判断是双四选一还是八选一电路:有几个地址线,双四选一为两个,八选一为一个
四选一选择器
Y1 = [D0(A1'A0') + D1(A1'A0) + D2(A1A0') + D3(A1A0)]S1
其中一个四选一选择器
Y2 = [D0(A1'A0') + D1(A1'A0) + D2(A1A0') + D3(A1A0)]S2
另一个四选一选择器
Y = Y1 + Y2
八选一选择器输出
需要注意:S' = 0
时,选择器正常工作,否则选择器被禁止工作,被封锁为低电平
S'也做扩展端用,作为片间的连接
八选一选择器
有三个地址线A0/A1/A2
两个四选一选择器的开关S1
不能等于S2
,即同时只有一个四选一起效,通常S1/S2
通过一个反相器相连以实现
Y = D0(A2'A1'A0') + D1(A2'A1'A0) + D2(A2'A1A0') + D3(A2'A1A0) + D4(A2A1'A0') + D5(A2A1'A0) + D6(A2A1A0') + D7(A2A1A0)
同时再加一个输入控制端S'
,便构成了一个八选一数据选择器
用选择器设计组合逻辑电路
四选一选择器:Y = [D0(A1'A0') + D1(A1'A0) + D2(A1A0') + D3(A1A0)]S'
A1/A0作为两个输入变量,D0...D3为第三个变量的适当形式(如A0/A0'/A1/A1'),就可以产生任何形式的3
变量组合逻辑函数
将Z = R'A'G' + RA + RG + AG
化为Z = R'(A'G') + R(A'G) + R(AG') + 1(AG)
那么进行匹配,有
D0: R'
D1/D2: R
D3:1
A1:A
A0: G
S'直接接地,使正常工作,D3置空,A直连A1,G直连A0,R直连D1/D2,通过反相器连接D0
八选一选择器:Y = D0(A2'A1'A0') + D1(A2'A1'A0) + ... + D7(A2A1A0)
使用八选一选择器产生三变量逻辑函数:Z = A'B'C' + AC + A'BC
令A2=A,A1=B, A2=C
,然后存在项的Di
置为1
,不存在的项的Di
置为0
加法器
没有减法器、乘法器,只有加法器,所有算术运算都是通过加法和移位来实现的
CPU ——> 运算器:加法器为核心
半加器
半加器:如1+1, 0+0, 0+1, 1+0
,只考虑当前位值以及是否进位,只判断是否,不加
- 当前位
S = A异或B
- 进位标志
CO = AB
个位数的加法使用半加器即可
全加器,不仅考虑当前位数,并且考虑来自低位的进位CI
,即要向上多考虑一位,A(1)+B(0)+CI(1) = 10
等于是有三个输入,即当前位的两个数和进位输入
全加器
串行进位加法器
必须使用多个全加器,依次将低位全加器的进位输出端CO接到高位输入端CI实现进位功能
超前进位加法器
串行的进位信号逐级传递的传输速度过慢,于是设计出超前进位加法器
两个多位数第i位相加产生的进位输出信号CO可以表示为:CO(i) = AiBi + (Ai+Bi)CI(i)
- 即AB均为1 或 AB有一个为1且进位符为1
- 这里
CI(i)
是未知的,是当前位的进位输入信号,实际上就是上一位的进位输出信号
将AiBi
定义为Gi
,Ai+Bi
定义为Pi
,则:
CO(i) = G(i) + P(i)CI(i)
= Gi + Pi[G(i-1) + P(i-1)CI(i-1)]
- 就是将当前位的进位输入信号替换为上一位的进位输出信号,重复这一过程,将直接计算到最低位
CPU计算的速度远远大于信号传递的速度,对每一位都进行这样的计算,得到加法结果
优点:运算时间短
缺点:电路复杂,增加了成本,稳定性降低
以空间换时间
用加法器设计组合逻辑电路
通常用加法器实现两个逻辑变量相加
将8421码转换成余3码:
- 余3码:就是正常的二进制数+3,比如6为0110,它的余3码就是1001
- 可以保证进位信号的一致性
Y为输出,ABCD为输入:Y3Y2Y1Y0 = DCBA + 0011
数值比较器
1位数值比较器
如何比较A和B,底层使用与非门电路进行比较
A>B(A=1,B=0):AB' = 1
A<B(A=0,B=1):A'B = 1
A=B:A⊕B = 0
A | B | Y1'(A>B) | Y2'(A<B) | Y3'(A=B) |
---|---|---|---|---|
0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
Y1' = (A'B)'
Y2' = [(A'B)'(AB')']'
Y3' = (AB')'
多位数值比较器
又高位到低位的逐位比较,只有高位相等时才需要比较低位
输出同样为三个:即大于、小于、等于
竞争-冒险现象
竞争:门电路的两个输入信号同时向相反的逻辑电平跳变的现象,二者跳变的顺序决定了不同的输出结果
竞争-冒险:由于竞争电路输出端出现尖峰脉冲的现象
- 竞争是竞争-冒险的必要不充分条件
就比如:Y = AB
,本来A=1, B=0, Y=0
,在某一时刻,A->0, B->1
,按道理来说Y
仍为0,但二者跳变存在时间差,使得某一小段时间Y=1
,这就叫尖峰脉冲,发生了竞争-冒险现象
- 可能对电路系统造成损坏
- 可能增加功耗
通过检查逻辑函数式判断是否存在竞争-冒险现象,并通过变换进行消除
检查方法
1、观察输出逻辑函数
若输出端的逻辑函数在一定条件下可化为Y=A+A', Y=AA'
,则可判定存在竞争冒险现象
2、使用实验检测
概率事件
举个栗子:
对于输出函数式Y = AB+A'C
当B=1且C=1时,Y=A+A',于是我们得知这个电路一定会存在竞争冒险现象
输出函数:Y = (A+B)(B'+C)
当A=C=0时,Y=BB',一定存在竞争冒险
消除竞争冒险
1、接入滤波电容
在输出端接一个小电容接地(通交流截直流)
优点:简单
缺点:增加了输出电压波形上升和下降时间,破坏波形(增加了相应时间)
2、修改逻辑设计
对于Y = AB+A'C
,通常增加一个冗(rong)余输入变量BC
得:Y = AB+A'C+BC
当B=C=1,电路输出本就是1,不会出现突变
- 增加冗余项消除竞争冒险
Summary
现在几乎所有的电路都具有记忆功能,但现在的组合逻辑电路只与当前输入有关,不具有记忆功能
组合逻辑电路的分析步骤:写出输出端逻辑表达式 - 化简变换逻辑表达式 - 列出真值表 - 确定功能
组合逻辑电路的设计步骤:根据设计要求列出真值表 - 写出逻辑表达式或画出卡诺图 - 化简和变换 - 画出逻辑图
常见的组合逻辑器件:译码器,数据选择器