逻辑运算系列(二): 组合逻辑电路

随着半导体制作工艺的发展,许多常用的组合逻辑电路被制作成了中规模集成芯片,一直被广泛应用。作为本系列的第二篇文章,本文将重点讲解组合逻辑电路的相关概念。

算术逻辑单元,简称 ALU,是中央处理器(CPU)的执行单元和核心组成部分,由“与门”和“或门”构成的算术逻辑单元,主要功能是进行二位元算术运算,比如加、减、乘 (不包括整数除法)。基本上,所有现代 CPU 的体系结构,是以二进制的补码形式表示。

关于二进制,这里稍微解释下,二进制的最高位(二进制由左到右,最左边为最高位)也叫做符号位,代表二进制的正负,正数为零,负数为一,二进制分为原码、反码和补码。当二进制为正数时,原码、反码和补码相同,当二进制为负数时,将源码按位取反,得到反码,然后最低位加一得到补码。计算机就是以补码形式储存的。

半加器

接下来看第一个 ALU——半加器。半加器和全加器是算数逻辑单元的中的基本单元,每完成一位二进制数相加都可以得到一种逻辑电路,如果只考虑两个加数本身,而不考虑低位进位本身的加法运算,称为半加,实现这个逻辑功能的电路叫做半加器,如下图:

上面是逻辑图,下面是真值表:

上图,A、B 表示加数,S 是本位和,C 表示进位数,可以看出这是一个由异或门和与门组成的逻辑电路。

全加器

全加器可以把来自被加数、加数和低位的进位信号相加,并根据求和结果给出该位的进位信号。

其中,A 和 B 为加数和被加数,其中 C 为低位进位数,S 为本位和,v 为高位进位数,,由两个半加器和一个或门组成。

多位数半加器

串行进位加法器,若由多位数相加,则可采用并行相加串行进位的方式来完成,将低位的进位输出信号接到高位的进位输出端。因此,任意 1 位加法运算必须在低一位的运算完成后才能进行,这种进位方式称为串行进位。例如,三个二进制数据相加,可以采用三个全加器,构成三位数加法器。

当然,这种方式既有好处也有坏处,好处是逻辑电路比较简单,但运算速度不够快。

由于串行进位加法器受到进位信号的限制,运行速度不是很快。所以,人们又设计出了多位数超前进位加法逻辑电路,使每位的进位只被加数决定,与低位进位无关。

超前进位的所有位数进位是同时完成的。一个 CP 脉冲就能完成整个进位过程。优点是运算速度快,明显的缺点是电路复杂。这里就不详细介绍了,后续章节会详细介绍。

还有就是减法运算,加法和减法主要通过输入的高电平或者低电平来控制,逻辑电路也是一样的。

编码器

编码器,数字系统中常用的数据是二进制码表示,用一个二进制代码表示特定含义的信息称为编码,具有这种编码逻辑的逻辑电路叫做编码器。

以 4 线 -2 线为例,它有 2^n 个输入,n 位二进制码输出相对应,编码器有两种,分别是普通编码器和优先编码器,各有不同的作用,普通编码器任何时候只允许输入一位编码信号。

稍微介绍一下,四个输入接口 I0 到 I3 为高电平有效,输出的是二进制代码 Y1,Y0,任何时候 I0 到 I3 中只能有一个值为 1,并且输出一组二进制代码。除了表中四种组合有效外,其余全部无效,输出为零。

下面是真值表。

下面看看优先编码器,同样以 4 线 -2 线为例,优先编码器和普通编码器的区别在于,优先编码器可以同时输入两个以上编码信号。但只对其优先权最高的一个编码,也就是说可以识别信号的优先级。

功能如下图所示,可知 I0 到 I3 的级别,相对于 I0,只有当 I1、I2、I3 均为零的时候,才有无效电平输入,而且 I0 为 1 的时候,输出 00,但是 I3 不一样,无论其他三个数是否输入有效电平,均输出为 11,由此可见,I3 的优先级别最高,这四个输入的优先级从高到低分别为 I3、I2、I1、I0。

优先编码器允许两个以上的的输入同时为 1,但只对优先级别较高的输入进行编码。当所有电路输入为 0 时,输出 Y1、Y2 均为 0。而当 Y0 为 1 时,输出的 Y1、Y0 也全为零。造成这个的原因是输入条件不同,输出代码相同。

实际使用的编码器一般输入都比较多,下面看一个典型的优先编码器。

这里的 GS 是优先编码工作状态,EI 是高电平有效的输出使能端,EO 为输出使能端。当 EI 为 1 时,允许编辑器工作,EI 为 0 时,禁止编码器工作,此时不论 8 个输入端为何种状态,输出皆为低电平,而且 GS 和 EO 也均为低电平。

GS 的主要功能是,当 EI 为 1 时,至少有一个输入端有高电平信号输入时,GS 为 1,表明编码器处于工作状态。反之,则 GS 为 0。这就相当于一个判断该编码器是否处于工作状态的一个提示。

上面是真值表,可以看出,EI 为 0 时,I7 到 I0 没有输入,也没有输出,GS 和 EO 也分别为零,此编码器处于关闭状态。等于 1 时,允许编码,I7 的优先等级最高。

接下来看译码器。译码和编码相反,译码是编码的逆过程,主要是具有特定含义的二进制码转化为对应的输出信号,这就是译码过程。后续会更新一些汇编和 CPU 指令等内容,欢迎关注。