1 前言
本文是基于《编码》、《穿越计算机的迷雾》两部著作进行读后整理的记录性博客。对书中较为重要的内容进行归纳整理进行二次创作,略去了繁琐的讲述细节,力求简明扼要。
编码:一种由若干符号和规则组成的系统,用来向计算机表述指令。
2 正文
2.1 反馈与触发器
在上学期间,我们都经历过被打铃器支配的恐惧。每次下课玩的正开心,一声铃响,我们不得不停下飞奔回教室。这个部分将基于我们幼时的打铃器开始探讨触发器。
在开始之前,我们先来看一下下面的这个奇怪的电路:
![](https://img.haomeiwen.com/i26963789/20acf26681fa3fe5.png)
我们来分析一下上述的电路,当我们闭合开关时,电路接通,连通的电路使得电磁铁把金属簧片拉了下来。当金属簧片的位置变化时,电路不再连通,电磁铁不再具有磁性,金属簧片又弹回原位。
如此一来,电路又一次连通了。从整个过程来看:开关一旦闭合,金属簧片就会上下跳动——电路也会随之连通或断开——声音也就会随之发出。如果金属簧片发出了一种刺耳的声音,这套系统就成为了一个蜂鸣器。如果金属簧片前端是一把小锤子,旁边只要放上一个锣,就构成了一个电铃。
看到这幅图你或许立刻想起了之前介绍过的反向器,因此电路可以简化为如下图所示。
![](https://img.haomeiwen.com/i26963789/cb60c6d6cb067820.png)
把一个非门的输出取出一部分来,同时又作为它的输入,这样就形成了一个反馈。
这幅图似乎在表达着一种矛盾的逻辑,反向器的输出与其输入是相反的,但是在这里,输出同时又是输入!然而,我们要牢牢记住,反向器在本质上就是一个继电器,而继电器将状态取反以得到另一个状态是需要一点点时间的。所以,即使输入和输出是相同的,输出也会很快地改变,成为输入的相反状态。
一个非门,再加上反馈之后,就能产生一连串交替变化的输出,像这种东西,在电子技术领域里叫做振荡器。它和我们先前学到的所有东西存在本质上的区别。在此之前我们讲过的所有的电路,其状态的改变都依靠人为的干预,通常是通过改变开关状态来实现的。但是振荡器却在不需要人干涉的情况下,可以完全自发地工作。
一开始,非门是有输出的。我们用一条直线来表示,并且把它画在纸上靠上的位置。省略了坐标轴,不考虑具体的输出电压数值和持续时间。不过很快,由于反馈的关系,非门失去了输出,这意味着输出为零。于是可以在刚才那条横线的下面,再画一条横线,表示当前没有输出,或者说输出是零伏,并且也用线条的长度代表持续时间。再往后,这个振荡器一直在工作,而它的输出也必然如下图那样交替变化下去。
![](https://img.haomeiwen.com/i26963789/21bc41749825d5ee.png)
但需要明白的是真实的振荡器的波形很难保持一条水平线,机械结构存在抖动或者震颤,但是我们在这里可以无视它的存在。
其次,像你每次打开或者关闭水龙头一样,电路在接通或者断开的瞬间,电压或电流不会马上就达到最大值,总是有一个由小到大或者由大到小的过程。为了表示这个变化过程,需要在两种输出线条之间添加“坡度”,即一条非常陡峭的斜线。由于现代科技的进步,这个变化过程可以缩短到几纳秒,或者更短暂。这个过渡太快太陡了,为了方便直接把它画成一条直来直去的竖线,如下图所示。
![](https://img.haomeiwen.com/i26963789/e500e859078efef6.png)
这是一种非常有规律的、周期性变化的波形,属于有棱有角的方形,因此在电学里叫做 “方波”。我们现在讲的这个振荡器,它所产生的方波总是被称为 “脉冲”。
对于振荡器输出的每一个方形脉冲,电压或电流从零上升到最大值的那条线叫做上升沿;反之,电压或电流逐渐下降的那条线叫做下降沿。
和其他呈规律性变化的波形一样,每秒能产生多少个这样的脉冲,称为这种振荡器的频率。
精准的振荡器(每秒产生的脉冲个数非常准确和稳定的),其应用十分广泛。直到现在,还有很多人在用一种需要安上电池才能走动的钟表。在这种钟表里面,有一个振荡器,它每隔一秒产生一个脉冲,用来驱动一个小小的电动机,促使它每次转动一个角度,并通过齿轮传动机构带动秒针跟着向前移动一步,还 “嗒” 地响一下。由于这个原因,这种振荡脉冲经常被称为时钟脉冲,或者时钟信号。
[引子] 反馈在或门和与门上的应用
我们尝试将或门的输出端接在输入端构成一个反馈:
![]()
在上述电路中,初始状态下输入均为 0,电路输出也为 0。但当我们将电路的输入端开关闭合,整个电路就形成了一个反馈,之后无论我们是否接通开关,电路输出均为 1。那么我们这个电路就能记录 “1”。
![]()
同样的,我们也可以将与门按照上述方式进行连接:
![]()
而这个电路的作用和上面的不同,由于与门的特性,不管我们的输入端的开关是否接通,输出端始终为 0。那么我们这个电路就能够记录 “0”。
我们再来看看采用特殊方式连接的一对或非门。或非门的特点是只有在两个输入端都没有电压时,输出端才产生电压。
![](https://img.haomeiwen.com/i26963789/4e1bf6730ce5dd10.png)
下面是一个包含两个或非门、两个开关和一个灯泡的电路。
![](https://img.haomeiwen.com/i26963789/03756dfab9a947d6.png)
值得注意的是这种特殊的连线方式:左边或非门的输出是右边或非门的输入,而右边或非门的输出是左边或非门的输入。这种连接方式我们称之为反馈(feedback)。系统的输出返回给输入这种形式和我们在振荡器中讨论的情况很相似。
在初始状态下,电路中只有左边的或非门输出电流(图上标注为红色的地方),这是因为其两个输入均为 0。
让我们闭合上面的开关,左边或非门将立刻输出 0,右边或非门的输出也会随之变为 1,这时灯泡将被点亮。
奇妙的是,这时一旦你断开上面的开关,灯炮依然闪闪发光。这是因为由于左边或非门的输入中有一个为 1,其输出依然是 0,因而左边或非门的输出不变,所以灯泡仍然亮着。
![](https://img.haomeiwen.com/i26963789/dfd69ba54b193d89.png)
结合上述电路,我们不难发现,电路反馈使得电路能够经由某些操作(断开或闭合开关)从而稳定在一个状态
现在来试试闭合下面的开关。我们会发现右边或非门的输入中有一个立刻变为 1,其输出就相应地变为 0,灯泡随之熄灭。左边或非门的输出此刻变为 1。
这时你再去断开下面的开关就会发现,灯泡一直处在熄灭状态。
![](https://img.haomeiwen.com/i26963789/f1df7fd7ad0f80b0.png)
我们将先前的情况一起总结一下:
接通上面的开关,灯泡被点亮,断开此开关灯泡仍然亮着。
接通下面的开关,灯泡被熄灭,断开此开关灯泡仍然不亮。
电路的奇怪之处是:同样是在两个开关都断开的状态下,灯泡有时亮着,有时却不亮。当两个开关都断开时,电路有两个稳定态,这类电路统称为触发器(Flip-Flop)。
需要注意的是,普通的电路,以及常规的逻辑门都有一个共性,那就是输出直接依赖于输入,当输入消失的时候,输出也跟着不存在了。触发器不同,当它触发的时候,输出会发生变化。但是,当输入撤销之后,输出依然能够维持。这就是说,触发器具有记忆功能,触发器电路可以保持信息。
上述介绍的电路比我们前面介绍的或门和与门的反馈更复杂,功能也更加完善。这里的电路能够根据上下两个输入(开关的断开与闭合)从而保存不同的状态,“接通上面的开关,灯泡被点亮,断开此开关灯泡仍然亮着”——对应着记录 “1”;“接通下面的开关,灯泡被熄灭,断开此开关灯泡仍然不亮”——对应着记录 “0”。
触发器种类繁多,先前所讲述的是最简单的一种 R-S(Reset-Set,复位/置位)触发器。我们通常把两个或非门绘制成另一种形式,加上标识符就得到了下面这幅图。
![](https://img.haomeiwen.com/i26963789/8e4d988314cbba18.png)
分析上述电路,我们会发现我们无法确定电路刚接通后的状态(R 和 S 都是断开的),答案是我们不知道具体哪一个有输出,这里面存在着反馈,会引发竞争,具体需要参考零件的参数和工作速度,速度慢的一方只能在竞争中处于下风。
上述电路中和之前介绍的电路不同,该电路存在两个反馈。
- 初始状态 R 和 S 都是断开的,接通 R,R = 1,于是不管 Q 以前是 0 还是 1,它现在一定为 0(Q = 0)。
由于反馈的存在,Q = 0 紧接着被送到下面。因此下方或非门有输出(= 1)。当然,
= 1 又被反馈到上面。但是,因为 R 已经给或门提供了 “1”,所以 Q 的状态不会受到影响,整个电路就此处于稳定状态不再改变。之后不管我们是断开还是合上 R,电路右侧的状态不会发生改变。
- 同样的考虑初始状态下 R 和 S 都是断开的,接通 S,情况和上述类似。
不难发现,上述的过程也即我们在上一个电路时介绍的状态转换情况,两者不同的地方在于前面介绍的案例中只有一个输出(灯泡),只存在一个反馈,因此不存在利用第二个开关达到第一个开关同样的效果。
我们通常用 Q 来表示用于点亮灯泡的输出的状态。另一个输出 (读做 Q 反)是对 Q 的取反。Q 是 0,Q反就是 1,反之亦然。输入端 S(Set)用来置位,R(Reset)用来复位。你可以把 “置位” 理解为把 Q 设为 1,而 “复位” 是把 Q 设为 0。当状态 S 为 1 时(对应于先前触发器中上面的开关闭合的情况),此时 Q 变为 1 而 Q反变为 0;当 R 状态为 1 时(对应于前面图中闭合下面的开关的情况),此时 Q 变为 0 而 Q反变为 1。当 S 和 R 均为 0 时,输出保持 Q 原来的状态不变。我们把结论总结如下表所示。
![](https://img.haomeiwen.com/i26963789/4cc4bf10aa0752e7.png)
因为 R-S 触发器仅有两个输入端,所以不同的输入组合共有 4 种,分别对应于表中的 4 行。注意表中倒数第 2 行,这一行输入 S 和 R 均为 0,而输出标识为 Q 和 Q反。这表示当 S 和 R 输入均为 0 时,Q 和 Q反端的输出保持为 S、R 同时被设为 0 以前的输出值。表中最后一行表示 S 和 R 均为 1 的输入组合是被禁止或者不合法的。如果 S、R 状态同时为 1 时,Q 和 Q反均会为零,这与 Q 和 Q反互反的假设关系相矛盾。所以当使用 R-S 触发器进行电路设计时,R、S 输入同时为 1 的情况一定要避免。
针对这部分的电路需要注意的是,电路存在 “记忆” 功能,能够在改变输入的状态下依旧维持输出。因此我们在考虑输出状态时需要知道下一步的处理可能带来的电路变化。
在此我们针对 S 和 R 的不同输出情况进行讨论:
- S -- 1,R -- 0 | Q -- 1,Q反 -- 0
- 在这种状态下,我们有两种操作的可能:断开 S 或者 接通 R
断开 S,电路记录下断开之前的状态保持不变;接通 R,Q 转换为 0,Q反保持不变,两者状态相同- S -- 0,R -- 1 | Q -- 0,Q反 -- 1
- 在这种状态下,我们有两种操作的可能:接通 S 或者 断开 R
接通 S,Q反转换为 0,Q 保持不变,两者状态相同(禁止);断开 R,电路记录下断开之前的状态保持不变
接着我们针对 S 和 R 的另外两种输出情况进行讨论:
- S -- 0,R -- 0 | Q -- 1,Q反 -- 0 或者 Q -- 0,Q反 -- 1
- 在这种状态下,我们有两种操作的可能:接通 S 或者 接通 R
接通 S,Q -- 1,Q反 -- 0:保持不变;Q -- 0,Q反 -- 1:Q 变为 1,Q反变为 0
接通 R,Q -- 1,Q反 -- 0:Q 变为 0,Q反变为 1;Q -- 0,Q反 -- 1:保持不变- S -- 1,R -- 1 | Q -- 0,Q反 -- 0(禁止)
- 在这种状态下,我们有两种操作的可能:断开 S 或者 断开 R
断开 S,Q反转换为 1,Q 保持不变;断开 R,Q 转换为 1,Q反保持不变
分析上述讨论过程,我们可以发现除 S -- 1,R -- 1 状态外,S 具备将 Q 置为 1 的作用(置位),R 具备将 Q 置为 0 的作用(复位)。正是由于我们对于 R 和 S 的输入进行了限制,也即不存在两者皆为 1 的状态。因此针对上述讨论,我们可以结合上面表格的内容了解后续操作可能给电路带来的变化。
R-S 触发器可以简化为带有输入和输出标志的小框图,就像下面画的这样。
![](https://img.haomeiwen.com/i26963789/a307152f977a7f1c.png)
3 小结
编码:触发器(一)篇对触发器部分内容进行了讲述,结合反馈电路引出了触发器并介绍了简单的 R-S 触发器。为了精简内容删减了部分较为详细的书写,仅作为整理总结。
网友评论