组合逻辑电路
组合逻辑电路分析
初步分析应该是比较简单的,将电路从左看到右边看边写就行,之后再进行化简即可。化简过程中的问题不再赘述。有时候可能会让写真值表、波形图之类的。
波形图按照上图所画照着画就行。ABC组合一共有八种状态,可将其对应到三位的二进制数上。若把ABC当作一个二进制数,就可以很好地跟图贴合(模拟出了进位的效果),这样的话其他情况的波形图也好画了。
组合逻辑电路设计
首先要明确逻辑功能,搞成与或或者或与形式。可以先搞清楚有几个输入几个输出,方便安排图的画法。然后就是注意线别绕来绕去。
组合逻辑电路优化
本部分介绍EDA工具实现优化设计时用到的一些技术。
单输出电路
相同输入端的与非门比与门或门都快,所用晶体管少,实际中多用与非门。不过或非门也比与门或门快。
因此比如说像\(L = AB + CD\),一般就会转换成\(L = \overline{\overline {AB}\cdot \overline{CD}}\)以加快速度。
因为单输出比较简单,尽量使用与非门就行,所以不多说了。
多输出电路
假如需要输出多个值,我们没必要一个逻辑函数做一个电路,而是最好共用他们相同的乘积项之类的。
多级逻辑电路
扇入数会对电路设计有很大的影响。比如\(L = ABCD + ABC\overline E + ABD\overline F\)这种,与门输入上需要接受4个点信号,或则需要接受3个。若扇入数小于4,则根本无法实现。但是稍微处理一下,变成\(L=AB(CD+C\overline E + D \overline F)\)就可以实现了。
有时候分解后再处理,也会变得简单,比如下图所示:
左边是分解钱的原始电路,右边是分解后简化的电路。
组合逻辑电路中的竞争/冒险
概念简述
下面通过两个简单电路的工作情况,说明产生竞争-冒险的原因。下图所示的与门
在稳态情况下,当A=0,B=1 或者A=1,B=0时,输出山始终为0。如果信号A、 B的变化同时发生,则能满足要求。若由于前级门电路的延迟差异或其他原因,致使B从1变为0的时刻,滞后A从0变为1的时刻,因此,在很短的时间间隔内,与门的两个输人端均为1,其输出端出现一个高电平窄脉冲(干扰脉冲)。如图所示:
这个L的小凸起,相信大家很容易理解问题有多大。
一个逻辑门的两个输人端的信号同时向相反方向变化,而变化的时间有差异的现象,称为竞争。两个输人端可以是不同变量所产生的信号,但其取值的变化方向是相反的。也可以是在一定条件下,门电路输出端的逻辑表达式简化成两个互补信号相乘或者相加。由竞争而可能产生输出千扰脉冲的现象称为冒险。
防止措施
- 发现并消去互补相乘项。
比如\(F = (A+B)(\overline A+C)\),若将该式处理成\(F = AC + \overline AB + BC\)
就会好很多。 - 增加乘积,避免互补相加
式\(L=AC + B\overline C\)(A=1,B=1时就出现竞争-冒险了)变为\(L=AC+B\overline C+ AB\)。当\(A=B=1\)时,根据逻辑表达式有\(L=C+\overline C+1\),不会只出现互补项相加的情况,避免了竞争-冒险。 - 输出端并联电容器
直接通过减缓突变时的变化就行了,由于变化慢,突变又只是一下下,加了电容器之后几乎没有影响。
经典组合逻辑电路
编码器
二进制编码器结构如图所示:
下面介绍下普通编码器和优先编码器。
- 普通编码器
就是经典输入配经典输出,输出没有先后次序,输入没有先后次序。
典型如这么一个编码器。 - 优先编码器
4线一2线优先编码器的功能表如下图所示,根据真值表设计优先编码器电路。据图可知\(I_0~I_3\)的优先级别。例如,对于\(I_0\),只有当其余均为0,即均无有效电平输人,输出可为 00。对于\(I_3\),无论其他了个输人是否为有效电平输人,输出均为 11。由此可知\(I_3\)优先级最高,其他的依次。
下面再说说8线-3线优先编码器CD4532。
接下来在实际一点的场景中看看其功能:
- 首先是\(EI_1=0\)时,片1被禁止编码,进而\(EO_1=0\),进而片0也被禁止编码。因此,GS输出为0,4个L输出也为0。
- 当\(EI_1=1\)时,片1允许编码,若\(A_15\)到\(A_8\)全为0,均无有效电平输入,则\(EO_1=1\),才使片0允许编码。因此在这里,片1的优先级要高一些。进一步分析可知,\(L3 = GS = 0\),从而输出只能是0000到0111。\(A_0\)优先级最低。
- \(EI_1=1\),若\(A_15\)到\(A_8\)不全为0,\(GS=L_3=1\)并且\(EO_1=0\)使得片0被禁止编码。从而输出为1000-1111(并且是由片1决定的)。
从上面可以看出来,CD4532的功能就是
- 首先\(I_7\)到\(I_0\)是有优先级的,前者优先。
- \(EI\)为0则禁用编码器。若I没有输出,则\(EO=1\),\(GS=0\);若有,则\(EO=0\),\(GS=1\)。
- 三个Y连在一起就是正常的二进制表示。
译码器/数据分配器
译码器
把二进制数据变成输出。图如下:
下面拿2线-4线译码器来看一看:
之所以要做成这样,是因为与非门快。
典型译码器电路及应用
- 二进制译码器
典型的有2线-4线,3线-8线。后者如下:
注意到E1、E2前面有小圆点。只有\(\overline E_1=\overline E_2=E_3=1\)时,A的输入才有效,否之\(\overline Y\)全为1。
74HC138,表明其是CMOS的产品。74LS138则是TTL的。74x139则是2线-4线的,图如下:
用1个73x139,4个73x138可以组成5线-32线的译码器。线路图如下:
注意\(B_0-B_4\)怎么搭的线。\(B_3,B_4\)表示出来的4个Y分别对应4个74HC138。
还有如下题型。
如何使用3线-8线译码器实现\(L = \overline A\cdot\overline C+ AB\)?其实按最小项分解即可很容易画出电路(注意,优化时最好转换成与非门)。得到的结果如下:
- 二-十进制译码器
图如下:
BCD码超过9的输出,会使得输出全为1。 - 七段显示译码器
我们知道,显示一个数只用7段即可(那种几块钱的计时器之类的)。
常见的七段显示译码器有两种:一种平时低电平,亮的部分高电平(共阴极显示器);平时高电平,亮的部分低电平(共阳极显示器)。下面介绍共阴极七段显示译码器74HC4511。
其数字输出用的是8421BCD码,多余的6种情况显示器不显示。该译码器设置了3个辅助控制端\(LE\),\(\overline {BL}\),\(\overline {LT}\),用以实现一些辅助功能。当\(\overline {LT}=0\)时,所有输出全是1,显示字形8。该功能用于检查显示器的好坏。\(\overline {BL}=0\)并且\(\overline {LT}=1\)直接熄灭不再输出。辅助控制全为1时,锁住当前屏幕的状态。
关于数字部分a段的最简逻辑表达式为:
当然,只知道这个还不能够表示出一个数字(因为数字表示要7段),但是这已经足够!
揭露了七段显示译码器的原理。若再添加上小数点显示,则其示意电路图如下:
数据分配器
数据分配器是将公共线路上的数据根据需要送到不同的线路上去,实现数据分配功能的逻辑电路称为数据分配器。
数据分配器可以使用带有使能端的二进制译码器实现。如用3线-8线译码器可以把一个数据信号分配到8个不同的通道上去。其电路图如下:
其中D作为数据输入,EN则是控制数据是否输入。下图列出一个用门电路设计的分配器(课本自带习题):
在根据题目要求进行设计时,先列真值表能帮助很多。
数据选择器
数据选择器是指经过选择将公共线路上的数据根据需要送到不同的线路上去,实现数据分配功能的逻辑电路称为数据分配器。
下面给出2选1数据选择器电路图及简化符号:
利用2选1数据选择器组装,可以进一步得到4选1数据选择器:
典型数据选择电路及应用
- 实现逻辑函数
用4选1数据选择器实现\(L=\overline AB + A\overline B\),我们只需先知道其对应最小项表示即可。这个最小项是01和10,故我们只给01 、10高电平即可,如图:
- 实现查找表LUT
构成FPGA基本单元的逻辑块主要是查找表LUT。LUT实质上是一个小规模的存储器,以真值表的形式实现给定的逻辑函数。
LUT内部电路结构如下:
符号如下:
下图是实现逻辑函数\(L = \sum m (3,4,6,7)\)的LUT内部结构: - 集成数据选择器
这里首先介绍下74HC151,他是一种典型的CMOS集成数据选择器。其有3个地址输入端,可选择8个数据源,具有两个互补输出端,同相输出端和反相输出端,还有一个使能输入端E。
可以看到,使能端控制输出是否有效,选择端就是译码器结构,Y处输出是D内容。当然,74HC151所能传输的信息还远远不够,我们可对其进行位的扩展、字的扩展。
位的扩展电路图如下:
可以看到,3个输入端S控制了更多的输出。
字的扩展电路图如下:
可以看到,其能处理4位输出。
主要要理解位、字的含义。
数值比较器
数值比较器的定义和功能
数值比较器就是对两个二进制数A、B进行比较的逻辑电路,比较结果有A>B、A<B以及A=B。下面先介绍下1位数值比较器。首先是逻辑函数如下:
按照这个函数做出来的电路图如下:
两位数值比较器如下(比较逻辑是从最高位比到最低位):
更高位的设计原理是一样的,从高位比到低位,74HC85是4位CMOS集成数值比较器。
如何扩展数值比较器呢?下面有两种方法。
- 串联
- 并联(位数多时、需要速度时采用)
算术运算电路
半加器和全加器
首先是不考虑低位进位的加法运算,称之为半加,两个1位二进制的半加运算逻辑表达式如下,S表示和数,C表示进位数:
由上述表达式可以得出由异或门和与门组成的班加器,电路图及符号如下:
全加器则增加了一个输入C,表示低位进位数。逻辑表达式如下:
得到的全加器电路图及符号如下:
多位数加法器
- 串行进位加法器
缺点在于,运行速度慢。后来人们发明了超前进位的方式。 - 超前进位加法器
一开始加法器逻辑表达式是这样的:
这里我们定义两个中间变量:
若\(P_i=1\),则低位的进位能传输到高位的进位;若A、B都为1,则G=1,因而G被称为产生变量。下面给出4位超前进位加法器74HC283图:
可以看到,电路非常复杂。故8位二进制加法器可以用两片74HC283串起来,图如下:
如果并联,则是如下:
减法器
首先我们要知道求补相加演算法。原理如下:
\[A-B=A +B_补-2^n = A +B_反+1-2^n \]- 当A>=B时,要得到结果,只需要A先加B的反码后再加1,然后去掉最大位即可。
- 当A<B时,要得到结果,A先加B的反码后再加1得到的结果与最终结果绝对值互为补码。
电路图如下:
若是A>=B,则必有借位,从而V=0,片0信号到片1时维持不变;若是A<B,则没有借位,但最终结果要取补码,这个只需要异或门处理下就行。
组合可编程逻辑器件
PLD结构、表示方法
其结构如图所示:
基本电路结构如下:
表示方法如下:
- 连接方式
有三种连接方式。硬件连接不可以变成改变;可编程接通可依靠用户实现;可编程断开也可依靠用户实现。图如下:
- 基本门电路的表示方式
首先是基本门电路符号如下:
第一个是与门,第二个是或门,第三个是输出恒等于0的与门;第四个是输出为1的状态;第五个是互补输出的缓冲器;第六个是三态输出缓冲器。 - 编程连接技术
可擦除CMOS技术用浮栅MOS代替熔丝。未经过编程的浮栅MOS与普通NMOS一样,但是经过编程的MOS编程始终处于截止状态。
上面介绍了可擦除 PLD 采用浮栅 MOS 管,而浮栅 MOS 管又分为香栅注人 MOS 管 (Stacked-gate Injection Metal Oxide Semiconductor, SIMOs 管)、浮栅隧道氧化层 MOS 管 (Floating-gate Tun-nel Oxide,Flotox 管)和快闪(Flash)叠栅 MOS 管。不同的浮栅 MOS 管连接的 PLD,编程信息的擦除方法也不同。SIMOS 管连接PLD,采用紫外光照射擦除;Flotox 管和快闪叠栅 MOS 管,采用电擦除方法。
PLD分类
PLD按集成度可大体分为两种:高密度、低密度器件,1000门以下为低密度。低密度器件有:
- PROM 可编程只读存储器
- PLA 可编程逻辑阵列
- PAL 可编程阵列逻辑
- GAL 通用阵列逻辑
高密度则有:
CPLD、FPGA
若按结构分,可分为简单PLD,复杂可编程逻辑器件,现场可编程门阵列。
若按照PLD中的与、或阵列是否可编程可分为三种,电路图如下:
分别是PROM、PLA、PAL的基本电路结构
组合逻辑电路的PLD实现
从上面的PROM电路图可以看出,PROM把最小项全译出来了,如果用它来实现,往往只用到一部分最小项,利用率低,因此很少作为PLD器件使用。
- PLA
PLA就是为解决PROM利用率低的问题出现的。
逻辑表达式:$$L_0 = \overline A\cdot \overline B C+\overline A B \overline C+ A \overline B\cdot \overline C+AB C $$
可用下图所示电路实现:
然而,PLA缺乏高质量的支撑软件和编程工具,价格贵,故而使用不广泛。
- PAL
借用一个例子便能理解:
后来PAL采用了可擦除CMOS编程单元。与中小规模组合逻辑集成器件相比,PAL通用性好,速度和集成度均有所提高,设计和使用的灵活性得到改善。但是PAL输出电路结构类型多不统一,且用PAL实现的时序电路非常有限。为此,后来又推出了采用可擦拭CMOS编程技术的GAL器件。