漫谈从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

这是一个非常神奇的电路,我们来看看该电路的特点:

  1. 当该电路刚通上电时,R和S都为0,Q,Q’输出状态是不确定的,但2个灯泡必有一个是亮的
  2. 当R为0,S为1时,Q亮,Q’不亮。然后将S重新置为0,Q,Q’输出状态依旧不变,状态能够保存
  3. 当R为1,S为0时,Q’亮,Q不亮。然后将R重新置为0,Q,Q’输出状态依旧不变,状态能够保存
  4. 当两个输出都为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个电压:

  1. 由于时钟先是0,左边D触发器的输入为输入D,但是右边D触发器的EN=0,会阻断最终输出Q
  2. 当时钟变为1的那一刻,左边D触发器的输入还保存输入D,右边D触发器的EN变为1,最终输出D的数据
  3. 也就是上述电路,只有当时钟处于上升沿时,数据端输入才会被电路保存下来。其他情况稳定地保存现有记忆

优化(补充)

RS触发器、D触发器、D边沿触发器,都存在刚上电时状态不确定的情况,我们可以修改电路,增加电路状态初始化功能,实现具有预置Preset和清零Clear功能的D边沿触发器。

  1. RS触发器_clear

从rs触发器使用3位或非门即可

  1. D触发器_clear

  1. D边沿触发器_clear

  1. 模拟效果


参考资料:

  1. 《编码:隐匿在计算机软硬件背后的语言》
  2. 一个8位二进制CPU的设计和实现,踌躇月光

系列文章

  1. 计算机中数值和字符串怎么用二进制表示?
  2. 聊聊开关和CPU之间故事
  3. 简易加法器的实现
  4. 减法器的设计与实现并用译码器显示16、10进制

本篇文章到这里就结束啦,如果我的文章对你有所帮助,还请帮忙一键三连:点赞、关注、收藏,你的支持会激励我输出更高质量的文章,感谢!

关注公众号:小牛呼噜噜,回复 “手写一个CPU源码”,即可获取该项目所有源码

计算机内功、源码解析、科技故事、项目实战、面试八股等更多硬核文章,首发于公众号「小牛呼噜噜」,我们下期再见!