漫谈从RS触发器到D触发器的发展历程
作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、源码解析、科技故事、项目实战、面试八股等更多硬核文章,首发于公众号「小牛呼噜噜」
大家好,我是呼噜噜,CPU只有计算能力是不够的,还需要能够记住数据,那么电路该怎么具有记忆功能呢?
由于组合逻辑电路,有计算功能,但是没有记忆功能,所以引入了触发器,揭开了时序逻辑电路的”神秘面纱”
触发器,也叫双稳态多谐振荡器(Bistable Multivibrator),早在1918年英国射电物理学家 William Henry Eccles和F. W. J o r d a n的工作中就发明的。它最大的作用就是可以保存信息,也就是其具有记忆性。
它可以“记住”最近一次是哪个开 关先闭合的。如果我们遇到这样一个触发器,它的灯泡亮着时,我们可以确定最近闭合的是上面 的开关;而灯泡灭着时则是下面的开关
是不是很神奇,其中的原理是什么?下面我们先来看看最简单的触发器-RS触发器
RS触发器
我们来看一下,非常经典的RS触发器,先写出RS的真值表:
R | S | Q | Q’ |
---|---|---|---|
0 | 0 | Q不定 | Q‘不定 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 1 | 0 | 0 |
本文我们是用2个或非门实现的,其中:R是输入端,Reset复位, S是Set设置位, Q是输出,Q’ 代表 非Q
这是一个非常神奇的电路,我们来看看该电路的特点:
- 当该电路刚通上电时,R和S都为0,Q,Q’输出状态是不确定的,但2个灯泡必有一个是亮的
- 当R为0,S为1时,Q亮,Q’不亮。然后将S重新置为0,Q,Q’输出状态依旧不变,状态能够保存
- 当R为1,S为0时,Q’亮,Q不亮。然后将R重新置为0,Q,Q’输出状态依旧不变,状态能够保存
- 当两个输出都为1时,输出都为0,则无法通过单个输出判断,输入状态,此时触发器状态是禁止、不稳的状态,实际使用时应该避免此情况
RS触发器,最大作用就是能够实现“保存Q状态”的功能,能够存储1bit数据(0或者1),所以RS触发器也叫锁存器。我们需要知晓,这里保存数据,并不是我们一般意义上将信息用刀刻到桌子上,而是利用反馈的数据实现 输出的状态稳定。这其实也是一种保存数据的思想
这个其实属于时序逻辑电路,其输出不仅仅取决于当前的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关
组合逻辑电路: 任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关
D触发器
上面的rs触发器,最大的问题就是存在不稳的状态(RS不能同时为1),要想解决这个问题,我们只需保证R和S 2个输入端 永远不能同时为1即可。我们可以在rs触发器电路的基础上,添加两个与门和一个非门,升级版电路名字也叫**D触发器 **或D锁存器。
上图 EN为有效位,D为数据data。当EN=1时,Q存储的是输入D的值。
注意,只有当有效位为1时,整个电路才工作。在有些教科书上,这里有效位也叫作”时钟“,当然它不是真的时钟,但它的输入信号却具有类似时钟一样的属性,即在 0和1之是有 规律地来回变化。
这里就不得不提到时钟了,时钟信号是一个高低信号稳定切换的脉冲信号,通过振荡器产生,其输出是0和1的交替序列
- 上升沿:常开到闭合,也就是从0变成1的瞬间
- 下降沿:常闭到断开的瞬间执行,从1变成0的瞬间
D边沿触发器
上面D触发器,是电平触发,意思是只有高电平(或者低电平)的时候才做指定的事。但是在现实情况下,电路的电压是不稳定的,当D触发器的有效位EN是高电位时,数据端D只要有一点点的变化,都会记录到电路中。所以为了增强电路抗干扰能力,我们希望电路边沿触发,就是当高电平向低电平转换,或者低电平向高电平转换,这个转换的瞬间触发去做指定的事。
我们可以将2个D触发器连接起来,组成D边沿触发器
有效位(时钟)输入既控制左边D触发器,又控制右边D触发器。左边D触发器的输出是右边D触发器的输入D。有效位分别传入2个触发器,值是相反的,表示当时钟电压稳定时,2个触发器工作原理是完全相同的,电路维持稳定。
只有时钟从0变为1的瞬间,期间其实是经历了2个电压:
- 由于时钟先是0,左边D触发器的输入为输入D,但是右边D触发器的EN=0,会阻断最终输出Q
- 当时钟变为1的那一刻,左边D触发器的输入还保存输入D,右边D触发器的EN变为1,最终输出D的数据
- 也就是上述电路,只有当时钟处于上升沿时,数据端输入才会被电路保存下来。其他情况稳定地保存现有记忆。
优化(补充)
RS触发器、D触发器、D边沿触发器,都存在刚上电时状态不确定的情况,我们可以修改电路,增加电路状态初始化功能,实现具有预置Preset和清零Clear功能的D边沿触发器。
- RS触发器_clear
从rs触发器使用3位或非门即可
- D触发器_clear
- D边沿触发器_clear
- 模拟效果
参考资料:
- 《编码:隐匿在计算机软硬件背后的语言》
- 一个8位二进制CPU的设计和实现,踌躇月光
系列文章
本篇文章到这里就结束啦,如果我的文章对你有所帮助,还请帮忙一键三连:点赞、关注、收藏,你的支持会激励我输出更高质量的文章,感谢!
关注公众号:小牛呼噜噜,回复 “手写一个CPU源码”,即可获取该项目所有源码
计算机内功、源码解析、科技故事、项目实战、面试八股等更多硬核文章,首发于公众号「小牛呼噜噜」,我们下期再见!