01改变世界:计算机原理趣谈
上QQ阅读APP看书,第一时间看更新

1.2.2 具有记忆力的电路

尽管人们所熟悉的组合逻辑电路不仅可以表达二进制信息,而且通过一定的方式相连之后还能实现各种运算,但不能保存中间结果以备下次运算时使用。这种电路是“直肠子”,只能一次性把需要的运算全做完,然后直接显示出来。为此,计算机的设计者需要预见所有计算任务的全过程并把它们“焊死”在电路中,这种做法只可能出现在最早期的专用计算机中。

于是就有了时序逻辑电路——一种输出不仅取决于输入,还取决于自身状态的“神奇”电路。1918年,英国物理学家威廉•埃克尔斯和F•W•乔丹首次用电子管搭建了一种时序逻辑电路,成功将转瞬即逝的电信号留住。

接下来尝试用逻辑门构建一个该电路的示例。

编者想起ENIAC之父埃克特设计的水银延迟线,信号被“囚禁”在电、声混合的环路中,不停地循环奔跑。那么,将信号“囚禁”在回环的逻辑电路中会是什么样子的呢?

接下来,先拿一个简单的或门做实验,把它的输出端和某个输入端相连,如图1.18所示,输入端记为AB,输出端记为QBQ相连。

图1.18 首尾相连的或门

1)一开始,AB同时为0,0和0的逻辑或为0,Q便为0,BQ一致,3端都保持在0的状态,相安无事。

2)此时,如果从A端输入1,B端还为0,1和0的逻辑或为1,Q便为1,这个1反馈到B端,B也变成了1,1和1的逻辑或还是1,三端便都稳定在1的状态。

3)接着,如果再将A端的输入变回0,B端保持为1,0和1的逻辑或还是1,Q保持为1。这意味着,BQ已“互相扶持”,组成了独立的“小团体”,不论A端的输入如何变化,输出永远为1。

我们成功地实现了一个能保存1的电路,它是触发型的,在A首次从0变为1时,触发了1的存储。那么0呢?用或门的“镜像”——与门试试吧!如图1.19所示。

图1.19 首尾相连的与门

1)首先,同时令AB为1,1和1的逻辑与为1,即Q为1,BQ一致,3端都保持在1的状态,相安无事。

2)此时,如果A变为0,B端为1,0和1的逻辑与为0,即Q为0,这个0反馈到B端,B也变成了0,0和0的逻辑与还是0,3端便都稳定在0的状态。

3)接着,如果再将A端的输入变回1,B端保持为0,1和0的逻辑与还是0,Q保持为0。这意味着,BQ“同归于尽”,不论A“如何努力”,输出永远为0。

这下保存0的电路也有了,它和保存1的电路一样,也是触发型的,在A端首次从1变为0时完成0的存储。

不过,人们需要的是一个既能存1又能存0的电路,得把上面两个电路组合起来,才能存储一个完整的比特,如图1.20所示。

图1.20 由与、或门组合而成的单比特存储电路

1)先分析与门,只要与门的任意输入为0,输出必定为0。因此,如果期望Q为0,只需要确保B为0即可,A的取值无所谓。当然,当Q为0后,人们也可以通过向A输入0,使或门输出0,这个0作为与门的一个输入导致Q稳定为0,B反而可以随意变动。

2)如果期望Q为1,AB都必须输入1。但Q为1后,这个1反馈到或门的输入,A的值是可以变回0的。

3)上述两步分析中有一个共同规律,那便是,当A为0、B为1时,Q保持原样。

如此,人们得到一张令人困惑的真值表,如表1.4所示。

表1.4 与、或门单比特存储电路真值表

不过仔细观察可以发现,如果想在这个电路中存储1,必须从A输入1;如果想存储0,必须从B输入0。ABQ产生作用的状态不同,这在专业上称为A为高电平有效,B为低电平有效。高电平有效更符合人们的常识,如灯泡会在开灯时亮起、关灯时熄灭;而低电平有效却等同于灯泡在关灯时亮起。

为了避免这种逻辑混淆人们的思路,必须把B端扭转为高电平有效。采用的方法就是再增加一个非门,如图1.21所示。

图1.21 由与、或、非门组合而成的单比特存储电路

如表1.5所示,真值表得到了不错的“修缮”。A为1时存储1,B为1时存储0,当然前者还需要B=0的附加条件。

表1.5 与、或、非门单比特存储电路真值表

Q的状态转换图如图1.22所示。

图1.22 与、或、非门单比特存储电路状态转换图[3]


[3] X表示0、1皆可。

在专业上,比特的置1称为置位(Set),置0称为复位(Reset)。因此,A端常被称为S端,B端则被称为R端。由于两者的变化触发着Q的变化,故整个电路称为RS触发器。

RS触发器有多种实现方式,如将两个或非门首尾相连,或者将两个与非门首尾相连,如图1.23所示。后者输入端字母上的横杠表示低电平有效。它们的真值表如表1.6和表1.7所示,感兴趣的读者不妨自己推导一下。

图1.23 基于或非门和基于与非门的RS触发器

表1.6 基于或非门的RS触发器真值表

表1.7 基于与非门的RS触发器真值表

在RS触发器的基础上,人们还搭建了各种复杂的触发器电路,它们都拥有保持原状态、等待触发的特点,成为存储比特信息的绝佳“容器”。多个触发器组合起来,就可以用于存储一条完整的数据,如8个触发器可以组成一个8位的寄存器。