计算机系统解密:从理解计算机到编写高效代码
上QQ阅读APP看书,第一时间看更新

2.5 构建更复杂的电路

门的引入极大地简化了硬件设计过程,人们不再需要从分立元件设计一切。例如,原来制造一个双输入的NAND门需要大约10个元件,而7400系列电路将4个双输入NAND门包含在一个封装中,称为小规模集成(Small-Scale Integration, SSI)部件,因此一个封装可以替代40个元件。

硬件设计人员可以用SSI门构建任何东西,就像使用分立元件那样。这使得成本变低、硬件内部更紧凑。而且由于某些门的组合被大量使用,因此引入了包含这些组合的中等规模集成(Medium-Scale Integration, MSI)部件,进一步减少了所需部件的数量。后来又出现了大规模集成(Large-Scale Integration, LSI)、超大规模集成(Very Large-Scale Integration, VLSI)等。

下面的内容将介绍一些门的组合。但这不是终点,我们将使用这些更高级别的功能部件制造出更高级别的部件,类似于用较小的程序构建复杂的计算机程序。

2.5.1 制作加法器

我们来构建一个二进制补码加法器。尽管很可能永远不需要设计这样的加法器,但这个例子可以让你明白怎么巧妙地操作逻辑来提高硬件和软件的性能。

我们在第1章中提到,2个位的和是这两个位的XOR结果,进位是这些位的AND结果。图2-39为门的实现。

图2-39 半加器

可以看到XOR门实现了和运算,AND门实现了进位功能。图2-39中门的实现之所以被称为半加器,是因为缺少了一些东西。两个位的相加没问题,但有第三个输入我们才可以进位。这意味着得出每个位的和需要两个加法器。至少有两个输入为1,才可以进位。表2-1是全加器的真值表。

表2-1 全加器真值表

构建全加器比较复杂,其结构如图2-40所示。

图2-40 全加器

图2-41所示的行波进位加法器内部包含很多门。但我们可以使用全加器来构建超过一位的加法器。图2-41展示了行波进位加法器的构造图。

图2-41 行波进位加法器

行波进位加法器得名于从一个位进位到下一个位的方式。两位之间进位的方式就像波浪一样。可以看到每个位都有两个门发生延迟,如果构建一个32位或64位的加法器,延迟会增加很多。我们可以用一个超前进位加法器来消除这些延迟,我们可以通过一些基本的基础运算来弄清楚超前进位加法器的工作原理。

从图2-40可以看出,全加器对位i的进位会被输入位i+1的进位:

Ci+1 = (AiANDBi)OR(AiANDCi)OR(BiANDCi)

最大的症结在于,我们需要Ci才能得到Ci+1,这一步会产生波纹。从Ci+2的公式中可以看出这点:

Ci+2 = (Ai+1ANDBi+1)OR(Ai+1ANDCi+1)OR(Bi+1ANDCi+1)

将第一个方程代入第二个方程可以消除这种依赖性:

Ci+2 = (Ai+1ANDBi+1)

OR(Ai+1AND((AiANDBi)OR(AiANDCi)OR(BiANDCi)))

OR(Bi+1AND((AiANDBi)OR(AiANDCi)OR(BiANDCi)))

请注意,虽然多了很多AND和OR,但仍然只有两个门的传播延迟。Cn只依赖于AB输入,所以进位时间及加法时间并不取决于位数。CnCn–1生成,随着n的增加,Cn–1使用的门的数量越来越多。虽然门成本低廉,但也会消耗功率,所以在速度和功耗之间得有权衡。

2.5.2 制作解码器

在1.5节中,我们用位构建编码数字。解码器的作用正好相反,它将编码后的数字还原成一组独立的位。解码器的一个应用是驱动显示器。你可能在老科幻电影中看到过数码管(如图2-42所示),它们是一种非常酷的复古数字显示器。数码管本质上是一组霓虹灯,每个数字都对应一个霓虹灯。由于每根发光的线都有自己的连接,所以需要我们把一个4位的二进制数变成10个独立的输出中的一个。

图2-42 数码管

回想一下,八进制表示法将8个不同的数值编码为3位的数字。图2-43显示了一个3:8解码器,它将一个八进制的值转化为到一组独立的位。

图2-43 3:8解码器

当输入为000时,Y0输出为真;当输入为001,Y1输出为真,以此类推。解码器是以输入和输出的数量来命名的,图2-43中的例子有3个输入和8个输出,所以它是一个3:8解码器。这种解码器通常绘制成图2-44所示的样子。

图2-44 3:8解码器原理图符号

2.5.3 制作多路输出选择器

你可以使用解码器来构建多路输出选择器(demultiplexer),通常简称为dmux。它允许一个输入定向到多个输出中的一个输出,就像用分院帽把霍格沃茨的学生分到不同的学院一样。多路输出选择器按图2-45所示的方式将一个解码器与一些门结合起来。

图2-45 1:4多路输出选择器

多路输出选择器根据解码器的输入S0-1使输入信号D与四个输出端Y0-3中的一个对应。图2-46为多路输出选择器的原理图符号。

图2-46 多路输出选择器原理图符号

2.5.4 制作选择器

从多个输入中选择一个输入是另一个常用功能。例如,一个加法器可能有几个操作数源,我们需要从中选择一个。通过使用门,我们可以创建称为选择器或多路选择器(multiplexer, mux)的功能块。

选择器将一个解码器与一些附加门结合了起来,如图2-47所示。

图2-47 4:1选择器

选择器的使用频率也很高,它有自己的原理图符号,图2-48所示的是4:1选择器的符号,几乎是解码器符号的反转。

图2-48 4:1选择器原理图符号

你可能不知道,其实你对选择器还挺熟悉的。你可能见过转盘上标有“关闭”“吐司(烘烤)”“面包(烘焙)”和“肉或鱼(烤、炙)”的烤箱,那就是有四个位置的选择器开关。烤箱有两个加热元件,一个在顶部,另一个在底部。烤箱逻辑工作原理如表2-2所示。

表2-2 烤箱工作逻辑

我们可以用组合在一起的4:1选择器实现这个逻辑,如图2-49所示。

图2-49 烤箱选择器开关