大家好我是科岩。
在文章「嵌入式工程师的自我修养」中,我引入过一个技术问题:
有2个设备A、B,通过网络连通可交互数据,其中A有外接按键,B有小显示屏。
2个设备实现这样的程序:A键盘上按下某个按键,B显示屏将按键值显示出来。
请问:从A按下按键那一刻起,到B显示屏看到按键值,”按键值“这个数据是怎么从A的按键传输到B的显示屏的?
科岩写了一个系列的文章,尝试回答下这个问题。
半导体原理,看这篇:「一沙一世界」之半导体与MOS管
逻辑运算与门电路的关系,看这篇:「一沙一世界」之门电路是个啥?
编码和进制的作用,这篇:「一沙一世界」之编码与进制
如何用硬件电路算加法,这篇:「一沙一世界」之硬件加法器
为了能让这个加法电路实现连续加数相加,得想办法把得到的和存起来。
这篇文章讲一下,如何用触发器保存一位二进制数。
上篇文章《「一沙一世界」之硬件加法器》我们讲到了一个8位加法器,下面是封装好的框图,想知道原理的小伙伴可以去读那篇文章。
这个加法器有个特点,就是两个加数A和B的值决定着加和S的值。
这个值是实时决定的,也就是说,A、B中只要有一个数据位发生了改变(0变1或1变0),加和就一定、立即发生改变。
我们如果想用这个加法器算「累加和」将会很麻烦,比如5个数A、B、C、D、E的加法。
首先把A、B作为输入,得出一个输出S1,我们要记下来S1的值,然后把S1和C作为输入,得出S2....以此类推,要记下很多个数,然后再用加法器计算。
工程师怎么会做这种无脑循环的工作呢,得想办法交给计算机寄几做。
好像只要做一个什么器件连在这个加法器的输出上,这个新器件能够保存加法器输出的和,并将算好的和再作为一个参数输入,传递给加法器就可以了。
注意这个新器件,首先它支持输入和输出;其次它能「保存」当前的值;最后,有一个类似「开关」的引脚决定它是否保持当前的值。
「保存」是什么意思?其实很好理解,就是不论输入的数据位怎么变化,输出都不变。
不考虑8个数据位,先只搭建一个这样具有「保存」功能的门电路,能保存一个bit就ok。
科岩已经点灯无数,这次依然从点灯开始,用或非门试一下。
「或非门」的真值关系如下表,记住输入只要有1,输出一定为0就可以了。
或非门的符号:
按照下面这个电路把两个或非门与一个小灯泡连起来,如图:
仔细观察,能发现我把右边或非门的输出直接作为输入连接到左边或非门上,这会产生什么神奇的现象呢?
如上图,最开始,左边或非门的输入都是0,输出为1;右边或非门输入一个是0,一个是1,输出0,灯泡是不亮的。
现在把开关S1连通,连通瞬间,左边或非门输出0,右边或非门输出1,灯泡被点亮,然后右边或非门输出的1给到左边或非门,2个输入都是1,它的输出为0保持不变,灯泡点亮不变。
接着我们把开关S1断开,如下图神奇的事情发生了,灯泡依然保持点亮状态!因为左边或非门仍有一个输入是1。
如果把S2闭合会怎样呢?灯泡马上熄灭了。
这时再打开S2,电路回到最初的状态,灯泡还是熄灭状态。
可以总结规律了:
•导通S1,灯泡点亮,不论我们怎么控制S1,灯泡都是亮的•导通S2,灯泡熄灭,不论我们怎么控制S2,灯泡都是亮的
这不就达到我们想要的「保存」功能了嘛,不论输入的数据位怎么变化,输出都不变。
像上面把两个或非门连起来,能够稳定保存电路状态的电路被称为「触发器」。
Flip-Flop的意思是「翻转」,中文翻译比较奇怪,我们通常理解的触发器是Trigger,不过没关系,其实就是个名称而已。
上面这个触发器叫做R-S触发器,它有2个输入端S(Set)和R(Reset),2个输出端Q和~Q(实在打不出Q上面的横线o(╥﹏╥)o)。
当S为1时,输出Q为1,~Q为0;当R为1时,输出Q为0,~Q为1;当S和R都为0时,输出Q和~Q保持不变;当S和R都为1时是一个不正确的状态,我们不使用这个状态。
不是特别绕吧?画个表:
R-S触发器最大特点就是它能记住2个输入端的状态。想要记住上一次的状态时,把2个输入端都置0就可以了。
每次画2个或非门太麻烦,封装一下:
有了触发器,计算机除了算些加减乘除、与或非逻辑运算,开始具备了存储功能,我觉得触发器真是一个神奇的存在,把平平无奇的门电路连起来竟然就赋予了计算机「记忆」。
计算机中寄存器(Register)、内存(RAM)最最基础的组成单元就是触发器。
理解了触发器的工作原理,也就理解了内存的工作原理。
下一篇我们就用触发器尝试搭建一个内存出来。
知其然,知其所以然,我是科岩,我们下期见。
---------------END---------------
文章到这里就结束了。
欢迎扫描下方二维码关注「科岩成果」~~~O(∩_∩)O~
你好,我是科岩。我做嵌入式工程师9年多了,目前在物联网创业公司任联合创始人。
我将持续分享个人的成长收获,帮助你提升技术能力与认知视野。另外我还听说,关注我的人个个都是人才,一起加油吧,人才们 :)