《计算机组成与体系结构(原书第4版)》 —3.5.2 典型的组合逻辑电路示例
3.5.2 典型的组合逻辑电路示例
首先,从一个非常简单的组合逻辑电路——半加器开始。
例3.12考虑两个二进制数相加的问题。有3件事情
要记住:0+0=0,0+1=1+0=1,1+1=10。了解这种电路的行为后,可以用真值表形式化这种行为。需要指定两个输出,不只是一个,因为需要有一个求和和一个进位。半加器的真值表如表3-9所示。
仔细观察会发现,求和实际上是一个异或运算。进位输出相当于一个与门。可以将一个异或门和一个与门进行组合,从而生成图3-11所示的半加器的逻辑图。
半加器电路是一个非常简单的电路,但不是很有用,因为它只能加两位。然而,可以将这样的加法器电路进行延伸以允许更大的二进制数字进行加法。想想你是如何执行十进制加法运算的:你从最右边的列开始相加并注意单位数字,然后向十位进位。再然后继续以类似方式进行到当前列。可以用相同的方式相加二进制数。需要有一个三个输入(x、y和进位)的电路和两个输出(总和及进位)。图3-12显示了一个全加器的真值表和相应的逻辑图。请注意,全加器是由两个半加器和一个或门组成的。
图 3-12
你可能想知道这种全加器电路是如何进行二进制数相加的?它能够执行只有三位数的加法吗?答案是,它不能。然而,可以建立能够相加两个16位字的加法器,通过复制16次上述电路,并且提供一个进位电路给电路左边的进位。图3-13说明了这一过程。因为在加法器中进位是以“行波”的顺序生成,这种类型的电路被称为行波进位加法器。注意,不用绘制所有的逻辑门来构成一个全加器,可采用黑盒来描绘加法器。使用黑盒的方法可以忽略实际门电路的细节,只需关注电路的输入和输出。你将很快看到这通常是与大多数电路包括译码器、多路复用器、加法器相关的。
图3-13 行波进位加法器的逻辑图
因为这个加法器动作很慢,所以不能正常实现。但是它容易理解,对于更多位数的二进制数加法的实现它也能提供给你一些想法。对于加法器设计进行修改产生了先行进位加法器、进位选择加法器和进位保存加法器以及其他一些形式。每个方法都试图缩短两个二进制数执行加法时的延迟。事实上,这些新的加法器通过并行地执行加法和减少最大进位路径,比行波进位加法器的速度要快40%~90%。加法器是非常重要的电路,计算机如果不能做加法将会是非常无用的。
所有计算机经常使用的一个同样重要的操作是从一组n个二进制输入译码为最大2n个输出。译码器使用这些输入和它们各自的值以选择一个特定的输出行。什么是“选择输出行”呢?它只是意味着一个独有的输出行被声明或设置为1,而其他输出行被设置为0。译码器通常由输入的数量和输出的数量来定义。例如,具有3个输入和8个输出的译码器称为3-8译码器。
我们提到过译码器是计算机中最常见的组件。你也许能够叫出计算机中很多运算操作的名称,但你会发现很难找到一个译码电路的例子。这是因为,你对计算机的访存过程还不是很熟悉。
在计算机中,所有的存储器地址都是一个二进制数。当对存储器进行访问时(无论是读取还是写入),首先必须确定的是实际的地址。这就是通过译码器完成的。例3.13将解释译码器如何工作和它可能被用于什么地方。
例3.133-8译码器电路
假设内存由8个芯片组成,每个包含8K字节。假设芯片0包含存储器地址0~8191(或以十六进制表示为1FFF),芯片1包含存储器地址8192~16383(或以十六进制表示为2000~3FFF),等等。假设总共有8K×8(=64K(65536))地址,不必用二进制数记下所有64K个地址;然而,以二进制形式写出一些地址(如在以下段落中说明的)将说明为什么译码器是必需的。
已知64=26和1K=210,那么64K=26×210=216,这表示需要16位来表示每个地址。如果读者无法理解这一点,请从较小的地址开始。例如,如果你有4个地址——地址0、1、2和3,等效的二进制地址是00、01、10和11,它们需要两位来表示,因为22=4。现在假设有8个地址,则必须使用二进制计数0~7。这需要多少位?答案是3。你可以把它们都写下来,或者直接想到8=23。上述例子说明表示地址所需的最小位数是指数。(我们将在本章后面以及第4章和第6章再阐述这个想法。)
芯片0上的所有地址格式为:000×××××××××××××。因为芯片0包含的地址为0~8191,这些地址的二进制表示范围是0000000000000000~0001111111111111。类似地,芯片1的所有地址具有格式001×××××××××××××,依此类推其余芯片。最左边的3位确定地址实际位于哪个芯片上。需要16位来表示整个地址,但是在每个芯片上,只有213个地址。因此,只需要13位来唯一地标识给定芯片上的地址。最右边的13位给出了这个信息。
给定一个地址时,计算机必须首先确定使用哪个芯片,然后必须找到该特定芯片上的实际地址。在示例中,计算机将使用最左边的3位来挑选芯片,然后使用剩余的13位在芯片上面找到地址。这3个高位实际上作为到译码器的输入,使得计算机可以确定激活哪个芯片用于读取或写入。如果前3位为000,则应激活芯片0。如果前3位是111,则应当激活芯片7。如果前3位是010会激活哪个芯片?它将是芯片2。选中特定的线去激活芯片。译码器的输出用于激活一个且仅一个芯片作为被译码的地址。
图3-14说明了表示译码器的物理组件和符号。我们将在3.6节中看到如何在内存中使用译码器。
图 3-14
另一个常见的组合电路是多路复用器。该电路选择许多输入线中的一个二进制信息,并将其引导到单个输出线。特定输入线的选择由一组选择变量或控制线控制。在任何给定时间,从电路到输出线只有一个输入路由(被选中的)。所有其他输入均为“切断”状态。如果控制线上的值发生了改变,则输入也会改变。图3-15展示了多路复用器中的物理组件和符号。S0和S1是控制线,I0~I3是输入值。
图 3-15
另一组有用的组合电路包括奇偶校验发生器和奇偶校验检查器(在第2章中研究过奇偶校验)。奇偶校验发生器是创建必要的奇偶校验位以使一个字相加的电路;奇偶校验检查器确保字中存在正确的奇偶校验(奇数或偶数),如果奇偶校验位不正确,则检测到错误。
通常,奇偶校验发生器和奇偶校验检查器使用XOR函数来构造。假设使用奇校验,表3-10给出了有3位数的奇偶校验发生器的真值表。具有3个信息位和1个奇偶校验位的4位字的奇偶校验检查器的真值表如表3-11所示。如果检测到错误,则奇偶校验检查器输出1,否则输出0。把它作为一个练习,请画出奇偶校验发生器和奇偶校验检查器相应的逻辑图。
位移可将字或字节的位向左或向右移动一个位置,是一个非常有用的操作。向左移动一位使它的指数增加一位。当无符号整数的位向左移一位时,具有与该整数乘以2相同的效果,但是能使用更少的机器周期来完成。向左或右移位(分别)后最左或最右位会丢失。左移1101会得到1010,右移则变成0110。一些缓冲器和编码器依赖移位器从 图3-16 4位移位器一个字节变成一个位流,使每个位都可以在序列中被处理。4位移位器如图3-16所示。当控制线S为低(即为0)时,输入的每个位(标记为I0到I3)都向左移动一位到输出(标记为O0到O3)。当控制线为高电平时,发生右移。这个移位器可以很容易地扩展到任意数量的位,结合存储器组件可以创建出移位寄存器。
在这个简短的小节中,不能介绍所有的组合电路。本章结尾的参考文献提供了更多关于组合电路的信息。然而,在完成组合逻辑之前,还有一个需要介绍的组合电路——ALU。前面已经介绍了构建算术逻辑单元(ALU)所需的所有组件。
图3-17给出了一个具有4个基本操作(AND、OR、NOT和加法)的简单ALU:每个运算都在2位字的机器上执行。控制线f0和f1确定CPU执行哪种操作。信号00代表加法(A+B),01代表NOT A,10代表A OR B,11代表A AND B。输入线A0和A1表示一个字的两位,B0和B1表示第二个字。C0和C1代表输出线。
图3-17 简单的两位ALU
- 点赞
- 收藏
- 关注作者
评论(0)