🗒️「数电」5.组合逻辑电路
2022-4-13
| 2024-7-26
Words 7533Read Time 19 min

概述

组合逻辑电路的特点
  • 任一时刻的输出仅取决于这一时刻的输入
  • 信号从输入向输出单方向传输,不含记忆(存储)原件

组合逻辑电路的设计与分析

组合逻辑电路的分析方法

基本分析步骤
  1. 根据电路图写逻辑表达式
  1. 有必要时进行化简
  1. 列出真值表
  1. 分析电路功能
例1:分析逻辑电路的功能
notion image
  1. 根据电路图写逻辑表达式,并进行必要的化简
    1. notion image
  1. 写真值表
    1. notion image
      其实第一个问题是真值表为什么要这么写。首先输入,既然给了A和B,那应该是一组,是一组。再看给的电路图,按照一般的逻辑,从上到下,发现输入是先1后0,输出是4321,所以也就顺着来,按照这个顺序来写真值表。
  1. 分析电路功能
    1. 可能乍一看比较懵。观察一下输出,既然不是01的布尔输出,那么肯定是某种编码。直接猜想,应该是8421编码。从0000的输出会比较好入手:只要A组或者B组中有一个全为0,输出就为0。再看输出的值,有1,2,3,4,6,9。那就分析A组B组相同的几种情况:同为0,输出为0;同为01,输出为1;同为10,输出为4;同为11,输出为9。现在应该能发现一点关系了。AB两组分别代表一个二进制数,输出是两个数的乘积。再验证一下其他值,发现确实如此。因此这个电路是一个两位二进制乘法电路。
      说明:最后一步分析电路的功能往往需要经验积累和灵感迸发,如果考试的时候实在想不出来,就写==功能如真值表所示==吧,肯定比空着强(doge

组合逻辑电路的设计方法

逻辑函数的变换

逻辑函数有很多形式,相信在学习第三章的时候已经有了解了。当时为了表达简便直观,统一化简成最简与或式。但是在实际工程中,可能不一定有合适的器件来满足按与或式搭建电路的需要。这个时候就需要根据所使用的逻辑器件来变换逻辑函数的形式。 与或、与非、与或非式比较重要,其他的了解即可
  • 与或式
    • 最简与或式的特点是:式中乘积项最少,乘积项中含的变量最少。所以实现电路所用的与门少,或门的输入端数少
      notion image
  • 与非式
    • 与非门是一种很神奇的门。只要有了它就可以搭出任何组合逻辑电路。为了解决怎么搭的问题,就需要化简成与非式。 变换方法:先求最简与或式,再取反两次运用摩根定理。
      notion image
      直接看最终的化简结果,诶不是还有非门吗?把与非门的两个输入短接就相当于非门啦。 与非式电路的内层、外层均只有与非运算。
  • 与或非式
    • 与非门可以完成所有的组合逻辑运算,那为什么还需要别的形式呢?想一想,门电路是不是还有一个很特殊的“运算”叫做线与? 首先看看线与和与或非式的关系吧:
      notion image
      线与关系是很容易写成与或非式的,反过来说,与或非式很容易通过OC门OD门的线与连接来实现。 除此之外,在之前介绍的时候也提到过一个叫做与或非门的东西。化成与或非式,也方便直接使用与或非门来实现逻辑功能。 变换方法:先取反,化简成与或式,再取反回来。
      notion image
      除了OC门、OD门之外,还有专门的与或非门,也可以处理与或非式的逻辑函数。
  • 或与式
    • 与或式是从最小项之和出来的,而或与式就是从最大项之积出来的。不过由于最大项本身也不常用,所以在教材里并不重要。 变换方法:先求与或非式,再运用摩根定理展开。
      notion image
  • 或非式
    • 和与非式对应,使用或非门完成整个逻辑电路。但是由于或非本身也是可以通过与非实现的,所以也不常用。 变换方法1:先求与或非式,两次取反,应用摩根定理
      notion image
      变换方法2:先求或与式,两次取反,应用摩根定理
      notion image

基本设计步骤

  1. 根据需要,确定输入输出,列出真值表
  1. 写出表达式并化简,根据设计要求进行形式变换
  1. 画出逻辑电路图
例2
notion image
  1. 确定输入输出,画真值表
    1. notion image
      这个真值表并不是完全标准的。因为水位不可能高于2m又低于1m,所以无关项直接用x表示了。
  1. 写逻辑式,化简变形
    1. notion image
  1. 画逻辑电路图
    1. notion image

常用组合逻辑电路

加法器

计算机的基本功能就是做算术。而算术运算的基础就是加法运算。减法可以通过补码统一到加法,乘法相当于多次加法,除法相当于多次减法。 实现加法运算,使用加法器。

1位二进制加法电路

  • 半加器
    • 如果两个一位二进制数相加,那么就是加数+被加数=本位和进位。(如图左上)
      notion image
      如图右侧列出真值表,分别写出的逻辑表达式。「注:进位位,在英语中叫carry bit」因为很简单所以就不画内部电路图了。使用时可以直接画电路符号,如上图左下。
  • 全加器
    • 一位二进制的加法用途实在太有限了。所以本质上还是想要多位的。而多位运算本质上是每一位运算后向上进位。所以我们需要加法器不仅能接收加数和被加数,还要能接收后面一位的进位C~i-1~。所以运算就变成了三个数的相加,如图左上。
      notion image
      列出真值表。首先观察,是,对这个组合敏感的话应该能知道这是三个量的异或、同或的结果。
      再看,写最小项化简,这里就不再赘述了。为什么化成与或式之后还要再做别的变化呢?因为前面看的使用了异或门,为了整体电路的最简,应该尽量复用这些门电路,所以尝试化成带有异或的式子。这个电路也不复杂,与门或门异或门很容易画出来。
    • 这里再补充一下使用半加器构成全加器
      • 首先看,三变量的异或,根据结合律可以变成先两个再两个。为什么先呢,因为半加器就是这两个输入,输出了相当于异或门,可以直接用。这个输出的再异或,通过另外一个半加器来实现,也就是做输出了。先画出这一半电路。
        notion image
        另外一半,经过变换的带有异或的形式。AB相与是半加器的. 或当然只能通过外加的或门来实现。后半,AB异或这是之前用过的第一个半加器的,现在这里与上,也就是另外一个半加器的
        notion image

多位加法电路

两个多位数码的加法运算,先从低位开始,计算加法后,这一位保持本位和,并向上进位。之后的位,除了计算两个数码都应位的加和,还要加上进位的信号。
  • 串行进位加法电路
    • 最直接的想法就是一位一位算,第一位算好了把进位信号输出到下一位,依次计算出答案。
      notion image
      这个电路结构简单,但是存在两个问题。第一,最终的输出需要等待每一位依次计算。计算的位数越多,等待的时间越长。第二,在低位的进位信号没有生成时,高位依然在执行计算,因此在得到最终结果之前高位数字会发生跳变,如果输出给下一级电路可能造出错误。
  • 并行进位(超前进位)加法电路
    • 串行进位等就在等待一个进位信号,那么我们把每一个进位信号单独计,再输入加法器加和,就可以几乎同时得到答案了。 由于每一个进位信号的计算都需要考虑比其低的每一位,所以电路复杂程度大幅上升。 不过,内部结构可以不考虑啦。感兴趣的话可以搜索一下74LS283集成四位加法器的内部电路图。这里就只讲集成芯片的使用了。
      notion image

加法器的拓展

加法器除了可以用来做加法,还可以有很多其他功能。
  • 级联——将四位加法器扩展为八位加法器
    • notion image
      首先举个例子,十进制加法:1024+2048,可以先计算24+48=72,再计算10+20=30。对于高位的和,我们左移两位,空出来的低位填上之前低位的和,就得到了四位数3072,通过两位数的加法计算了四位数的加法。 如果低位有进位呢?1024+4096,24+96=120,10+40+1=51,所以得到5120。也就是低位的进位在高位当作1处理。 所以就可以简单的把两个四位加法器串起来,分别计算低4位和高4位,再按照从高到低的顺序输出。
  • 减法——使用补码统一加法和减法
    • 正数的补码还是它本身,所以被减数不做处理。减数处理成一个负数,求补码,方法是取反加1。在前面提到过,低位的进位在高位当作1处理,所以加1的1就从进位输入来。取反需要自己外加电路。
      notion image
      notion image
  • 代码转换
    • 代码转换最简单就是8421码转余三码了吧,两个输入,一个输入8421码,一个输入3,也就是0011,输出和就是余三码了。 来看这个例子:
      notion image
      一个输入是DCBA四位二进制数,另外一个经过化简,是跟DCBA有关的一个四位二进制数。首先列加数A和被加数B的真值表,然后再把两数相加看输出。
      notion image
      看输出没有格雷码的特征,所以考虑是权值的区别。如果按照8421码计算,发现前面很巧出现了01234,顺着这个走下去,那么后面应该是56789,反过来计算第一位权值是2,所以可以推断这是一个8421转2421码的代码转换电路。
      这里补充一下,由于2421码高位权值小,所以编码形式不唯一,比如1001和0011都表示3,所以一般不要求设计2421码的输出,只需要会识别就行。不管是8421,还是5421,2421,低三位的权值都是一样的,只需要通过最高位就能判别。
  • 乘法——使用左移表示×2
    • 先看十进制,0001,左移一位,空位补0,变成0010,扩大了十倍。二进制也是一样。只不过从0001到0010扩大了两倍。所以在输入的时候错位输入,就能实现乘法。两个输入搭配,就能实现不同倍数的乘法。 来看这个例子:
      notion image
      第一步把Y=5X拆分成Y=X+4X,X直接输入就好,高位补0。4X需要把X左移两位,也就是原本输入,现在输入,低位补0。

编码器

首先明确什么叫做编码。举个例子,学校为了告诉你下节课在哪里上,会告诉你,第一教学楼,401教室。这就是编码。把物理信息变成了数字。一栋楼被编号为“一”,一个房间被编号为“401”,这就是编码的过程。 而在数字电路中,物理量首先转化为一个电平,电平输入编码器,得到输出的编码。

普通编码器

也就是同一时刻只允许输入一个信号。这是物理限制,如果输入多了是无法工作的,需要我们在输入的时候格外注意。
notion image
现在对四个输入进行编码。按理说2位二进制数就可以编码4种状态了。但是,一定要注意,除了四个输入对应的四种状态以外,还有一种无编码的状态,所以总共是五种状态。这里通过加入指示位INT~0~来编码无编码这个状态。 观察电路发现这是低电平有效的电路。也就是开关闭合请求编码时发送给编码器的是一个低电平。这个要和负逻辑区分开。低电平有效的意思是用低电平触发电路的功能。而负逻辑是说低电平表示1高电平表示0。 设计过程还是那个过程,列真值表,化简,画电路。
notion image

优先编码器

普通编码器存在一个很大的问题,同时只允许一个输入。对于简单的系统还好控制,但真实情况是很多输入会同时到来。所以就需要优先编码器。优先编码器的每个输入都有对应的优先级。当多个输入同时到来时,只对优先级最高的输入进行编码。
notion image
现在我们规定的优先级最高,最低。那么会发生什么呢?同样列真值表:
notion image
最大的不同是,普通编码器由于物理限制,只有五种状态。而优先编码器有四变量完整的16种状态。只不过由于优先级限制,只有五种对应的输出。 设计步骤还是完全相同的。

集成优先编码器

常用的优先编码器之一:8-3线编码器148
notion image
从这个框图可以看出,这个芯片是全低电平有效的。也就是输入低电平代表需要编码,输出低电平代表有编码。而输出1是闲置、无编码的状态。
编码器的扩展
八个输入不够用怎么办,多几片芯片连一块就行了。如何将8-3编码器扩展成16-4呢?
输入端很简单,两个8加起来就是16了,不用任何处理。主要看输出。如果按照顺序排,我们会发现,一张芯片上排了低一半而另一张排了高一半。也就是说,高一半要编码的话,低一半不管有没有输入都不许动。只有高一半全没输入,才轮到低一半说话。也就是高片工作时低片不工作。把高片的指示端接入低片的使能端。
输出,是一个比较复杂的问题。看原来的三位输出:如果低片工作,那么该输出多少就输出多少,仍然指代,而如果高片工作,输出是5,但实际上是应该8+5了。三位二进制数加8怎么办?8对应1000,不影响低三位。所以加8只需要首位加1就行了。也就是,当高片工作时,首位输出1,高片不工作,首位输出0.用一个指示端完成了输出的最高位。而剩下的位,按照原来的输出出来就好。由于无输出是高电平1,所以要保留输出,应该用与非门。
notion image
由于取反和与非门的作用,这里的输出不再是低电平有效了,而回归到高电平有效,直观理解也就是原码了。

译码器

译码器就是把编码信息转换回物理信息。就像你问看门的大爷,401在哪?他会告诉你,电梯上四楼,左转走到头。也就是把401这个编码重新变回到指向一个房间的路径。 物理信息既可以是高低电平的信号,也可以是另外一个编码,输入到另外的系统里面发挥作用。因此译码器也就分为了通用译码器和显示译码器。

二进制译码器

输入一个二进制数信号,给出一个相对应的输出。这么说可能比较抽象。就这例子来讲: 两位二进制数编码四种状态。四个状态对应四个输出。要求前面输入数码,后面对应的输出有效。这样的芯片叫做2线-4线译码器。这里以74HC139为例。这个芯片输入高电平为有效,输出低电平为有效。 列出真值表,写逻辑式
notion image
就着这个真值表可能更好讲解译码器的功能。比如说给出10这个二进制编码,对应的这个输出,由于每个编码仅对应一个输出,也就还原成了相互隔离的物理量。 顺着逻辑式画电路图。
notion image
这里解释一下,为了得到输入的原变量和反变量,为什么采用了一次取反和两次取反,而不是原输入和一次取反。有点像门电路里面的保护级,因为译码部分需要驱动的门电路很多,如果输入质量不高很可能在大负载下出错。为了避免因为外界输入质量不高导致的问题,所以自己动手丰衣足食,先经过非门处理再输入译码。 在画电路图的时候,增加了使能端。因为实际上,这是2线-4线译码器74HC139的内部电路图。

集成二进制译码器

这里着重介绍集成3位二进制译码器。也称作3线-8线译码器。典型芯片是74HC138。
notion image
对比74HC139和74HC138,发现他们都有三个使能端。这是因为译码器的使用实在是太普遍了,为了实现各种各样的逻辑功能,完成多片合作,需要更加精细的控制各个芯片的开启,所以就设置了三个使能端,方便后期扩展。
  • 译码器的扩展
    • 还是以最简单的扩展举例:级联。
      notion image
      数字电路级联的基本思路都是一样的。使用一位信号作为片选输入,区分高位芯片和低位芯片,其他部分复用就行。这里就可以看出,高位芯片使用了作为片选输入,低位芯片使用了作为片选输入。这样就省去了一个非门。
  • 使用译码器设计任意组合逻辑电路
    • 回归一下概念:
      1. 任意逻辑函数都能化成最小项之和的形式
      1. 译码器可以输出任意的最小项
      所以使用译码器可以实现任意的组合逻辑电路。看这个例子:
      notion image
      使用译码器实现组合逻辑电路的时候,大概步骤是:
    • 将函数化简为最小项之和
    • 然后有如下几个具体的实现方法:
      1. 将对应的最小项原变量取或(在这个例子里就是分别取反,得到原变量然后取或)
      1. 将对应的最小项的反变量取与非(也就是例子里使用的方法)
      1. 将对应的最小项的反变量的互补变量取与(在这个例子里就是取与)

显示译码器

所谓显示译码器,是一种特殊的译码器。输入原编码(地址),经过处理,产生专用与显示器件的新编码。 目前常用的显示器件分为LED和LCD。LED是发光二极管直接发光,显示图像。本质上就是控制电灯泡。LCD是利用液晶特性来显示图像,控制比较复杂。所以一般使用LED作为示例。 首先介绍一下二极管的共阴和共阳。
notion image
显示编码有很多。当然高像素的屏幕有很多LED,需要复杂的编码。但是如果只需要表示数字而且不要求显示精细,那么七段字符显示是一个很好的选择。
notion image
算上小数点,总共八个输出。编码0-9十个数四位就足够。如果有除了显示0-9的需求,可能更少的位数就足够了。
notion image
如果把abcdefg分别连接到对应的LED,那么就构成了一个基础的显示译码器。
  • 中规模显示译码器
    • 一般七段字符显示主要应用在0-9几个数字上。这里介绍的中规模显示译码器也是用于显示数字的。ABCD输入8421码,点亮对应的数字字形。值得一提的是,部分显示译码器对于1010-1111的编码是无输出,也有部分给这些位置编码了其他字符。在进行实验的时候要注意。
      notion image
      显示译码器因为涉及比较多的实际应用场景,所以输入输出会比较复杂。
      这个脚叫做动态灭零输入。也就是当显示器应当显示0,但是实际上不需要这个0的时候,我们在这个脚输入低电平,将灯关闭。举个例子也就是显示0123的时候,不需要0,只需要显示123。那就把这个动态灭零接低电平。
      当这里外接下拉到0,是强制灭灯输入,把所有灯都熄灭。如果没有外接下拉,这个脚是输出脚,表示灭灯的状态。也就是如果本来显示0,但是被动态灭零输入灭掉了,这里就给出低电平指示。用于电路的级联。
      就比较简单了,试灯输入。也就是,拿到显示器件的时候想要测试一下是不是所有LED灯都能正常点亮。这个脚接低电平就是点亮所有灯。
  • 显示译码器的级联
    • 显示译码器的级联问题本质上就是动态灭零的问题。 举个例子,像012.300,第一个0和最后两个0都是可以不显示的,12.3对应的灯亮就可以了。
      notion image
      因此控制逻辑是:小数点前最高位和小数点后最低位,只要是0就应当灭灯。其他位置,应当在更高位都是0的情况下才能灭灯。比如010.001,第一个0可以灭灯,但其他0都是不能灭掉的。

数据选择器

数据分配器

用作输出。只有一路数据通道,有多路输出通道。根据输入的地址,把数据送到对应的输出。并没有专门的芯片,但是可以通过译码器方便的实现。
notion image
因为数据只有一条线,也就是只有01,那就不拘泥于01了,可以是工作和不工作。所以通过译码器的地址输入选择端口,通过使能端控制开关传输数据。

数据选择器

这就刚好跟数据分配器反过来了。有多个数据输入,而只有一个输出。根据输入的地址选择相应的输入,传输到输出。
notion image
以四选一的数据选择器为例,数据选择器的基本思路就是通过全译码搭配与门,当地址对应时,输出取决于数据输入,当地址不匹配,与门就输出0。
  • 中规模数据选择器
    • notion image
      虽然扩展了八选一出来,但其实是有专门芯片的:
      notion image
  • 使用数据选择器设计任意组合逻辑电路
    • 看上面数据选择器的输出函数,发现数据选择器同样可以输出所有的最小项组合,因此也可以通过它来实现任意的组合逻辑电路。 数据选择器和译码器的不同在于,译码器指示了地址,对应地址的输出就有效;而数据选择器指示了地址,还要根据地址对应的数据来决定输出。 因此如果数据选择器有n位地址,可以处理n+1位变量的组合逻辑函数。下面举例说明:
      notion image
      数据选择器的级联和拓展依旧是典型的高位芯片和低位芯片的套路,就不再赘述了。

数值比较器

输入两个数,比较大小,输出大于,小于,或等于。 首先看一位的情况:
notion image
而多位的数值比较器,就是一个套娃的过程。先比较最高位,如果不同就能直接得到结果。如果相同再依次向低位去比较。

中规模数值比较器

这里需要提醒一个点,在使用数值比较器的时候要特别注意三个前级输入。如果是作为最低位,后面没有数的情况下,要给“=”输入接有效,其他输入接无效。不能随意悬空或者上拉下拉。
notion image

竞争-冒险现象

notion image
关于竞争冒险现象应该有两个说法。第一个是左边这个。在信号发生变化的时候,会从有效区间逐渐变化到无效区间再变回有效。那么在变化的过程中,就可能会出现不希望的取值,造成尖峰脉冲。比如从10变成01,但是中间就可能出现11和00的组合。 第二个是右边这个。由于电路中存在延迟,导致两个反方向跳变的信号并不是完全同时到达。也就产生了不希望的组合。看右边这个电路图,还有一个重要的结论:有竞争不一定产生冒险。比如那个下降沿。

竞争-冒险现象的判别

notion image
这里要注意的是,判别也只是判别到有可能产生竞争-冒险现象,至于是不是会产生,还需要实验或者仿真验证。

竞争-冒险现象的消除

notion image
第一个消除方法是被动的,既然有干扰,我就想办法把干扰滤除。加一个电容滤掉尖峰脉冲。不过这种方法有一个问题,那就是正常的跳变也会被影响,方波不方,而是呈现出电容的充放电曲线。 第二个方法属于眼不见心不烦。既然有干扰,我们就不看干扰,等一会,干扰过去了再看。问题是需要引入时钟而且还是和主时钟错开的异步时钟。 第三个方法是通过增加冗余项使电路不再出现竞争。问题是在复杂的逻辑情况下难以完全消除竞争冒险现象。 实际工程中一般使用触发器来滤除这个干扰。在之后的章节中会有讲解。
 
  • 数电
  • 「数电」4.门电路「数电」6.触发器
    Loading...