【数字逻辑入门】计算机如何存储1位二进制数
0 前言
本文将会以R-S锁存器为例,引出锁存器的核心和本质,之后再带你构建更多类型的锁存器,你能够:
- 感受到由浅入深的学习方式
- 体会到掌握核心本质的快感
- 深刻理解核心套外壳的设计理念(产品迭代1.0–>2.0–>3.0)
同时,强烈建议你使用logisim软件,边看文章边实践,这样能够加深理解,这款软件半小时即可入门,图形化的操作方式,简单又好用。
核心套外壳的思想,能够帮助你【区分表象与本质,抓住问题的核心,理解设计理念!】
1 确立一个目标,提升你的认知效率
点进这篇文章,我想你是非常想要学会锁存器相关知识的,那么,为了进一步提高你的认知效率,我先给你定下一个目标,带着这个目标,再去一步一步寻找和学习相关知识,并且,你应该使用软件,在实践中学习,这么一来,你的认知效率将会翻倍。
我们都知道计算机的硬盘和内存,我们也知道,这些设备能够存储数据,并且这些数据是二进制信息,也就是0、1的各种排列组合,那么,你是否曾经产生疑惑,4GB、16GB,乃至1TB的信息,是如何被存储的?
今天让我们来解答这个问题,我们先不管1TB的信息如何存储的,今天我们就谈:如何存储1位二进制信息,也就是如何存储一个0或者一个1。
我们需要制作一个器件,能够存储一个0或者一个1。这个器件,就是R-S锁存器,在通电状态下,它能够锁住(存储)1个二进制位,也就是1 bit
。
让我们来一步步地揭开它的神秘面纱吧!
2 R-S锁存器
2.1 基本结构
我们来看一下他=它的结构,通常有两种描述方法:
- 描述1
- 描述2
这两种结构完全一样,只不过放置的方式不一样,通常我们会采用描述2的方式。
可以看到,R-S锁存器包含了2个或非门,2个输入端口,1个输出端口,这个结构真的简单至极。
如果你学过一点数字逻辑的知识,也许你会跟我争辩,R-S锁存器不是2个输出端口吗?先按照我说的继续往下听,之后会解释的。
2.2 如何锁住1-bit
那么,这样一个结构,如何锁住(存储)1-bit的?
为了方便描述,我们先为上面的结构命名一下。
- 2个输入端口分别命名为
R
和S
- 1个输出端口被命名为
Q
让我们记住这个初始状态
R | S | Q |
---|---|---|
0 | 0 | 0 |
然后,我们将R
置为1。
你会发现,此时的状态是
R | S | Q |
---|---|---|
1 | 0 | 0 |
我们再将S
置为1
此时的状态是
R | S | Q |
---|---|---|
1 | 1 | 0 |
我们再将R
置为0
此时的状态是
R | S | Q |
---|---|---|
0 | 1 | 1 |
我们再将S
置为0
此时的状态是
R | S | Q |
---|---|---|
0 | 0 | 1 |
接下来,我们汇总一下上面的几种状态
R | S | Q |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
0 | 1 | 1 |
0 | 0 | 1 |
我们可以看到,同样是0,0
,但是输出却可能是0
或1
,这也就意味着,这不是组合逻辑,而是时序逻辑,输入的顺序会影响结果。
同时,我们再继续进行实验可以发现(此处请自行完成实验,亲自体验以下结论)
- 一旦置
R = 1,S = 0
,S不变的情况下,无论R如何改变,Q都等于0 - 一旦置
R = 0,S = 1
,R不变的情况下,无论S如何改变,Q都等于1 - 当
R = 0,S = 0
的时候,Q的结果,取决于上一个状态。如果之前是因为R = 1,S = 0
导致的Q = 0
,则现在的Q依然0;如果之前是因为R = 0,S = 1
导致的Q = 1
,则现在的Q依然为1 - 一旦置
R = 1,S = 1
,Q一定等于0,这种情况与我们的目标不符,我们需要禁止它
因此,我们得到了R-S锁存器特性表
R | S | Q |
---|---|---|
0 | 0 | 和之前状态的Q一样 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 禁止使用 |
我带你分析完了这些,我们改回看主题,看一下它是如何锁住1-bit的。我们看一下刚才描述的状态:
- 一旦置
R = 1,S = 0
,S不变的情况下,无论R如何改变,Q都等于0 - 一旦置
R = 0,S = 1
,R不变的情况下,无论S如何改变,Q都等于1
我们观察后面加粗的句子,不难看出,1个二进制数被“锁在”了器件中,这也就是所谓的锁存器,它在功能上,实现了存储1个二进制位。
2.3 为什么可以锁住1-bit
刚才,我们知道了R-S锁存器能够存储1个二进制位,并且已经达成了目标,是的,我们成功存储了1个二进制位,但是,这还不够,我们应该保持好奇心,问一问自己,为什么能够锁住?
让我们来分析一下R-S锁存器的工作,以R = 1,S = 0
为初态举例。
下面是初态,并且我在几个关键的地方做了标记。
之后,我令R = 0
,我们来逐步地分析一下,到底发生了什么。
首先,0
信号传到了a
端,此时a = 0
然后,a
和e
进行或非运算,得到的结果传到了b
端,此时b = 0
然后b端的结果,反馈到了c端,c = 0
;之后,可以得到d = 1
;之后,d端的结果又反馈到了e端,可以得知,e = 1
并没有发生变化,就此,这个过程就稳定了下来,b端输出到Q的数据也就是最终结果了。
我们梳理一下这个过程,在令R = 0
之后,只有a端的数据变为了0,其他端口的数据均没有变化,这样一来,也就产生了锁住数据的现象,产生这种现象的原因,是因为反馈回路的存在。
我们可以知道,bc
锁住了0
,de
锁住了1
,这二者正好相反,因此我们有时候也会将R-S锁存器设计为下面的样子,这样可以获得两个一直相反的输出结果
其中,上面读作输出Q,下面读作输出Q拔,二者的取值永远相反,你也能够理解,为什么之前我们禁止了R = S = 1
的情况,因为这样输出就不相反了,与设计目标不符。
2.4 为什么叫“R-S锁存器”
为什么这个器件被命名为R-S锁存器呢?为什么不叫别的名字?
我们要知道,凡是命名,都有其含义,都能表达其意义,这样的命名才有价值,R-S锁存器也是如此。
它是英文名称是:Set-Reset latch,有被称为S-R Latch或者R-S Latch
我们来解释一下
- R就是
reset
,重置、复位的意思,所以,当仅有它为1的时候,输出Q = 0
- S就是
set
,设置、置位的意思,所以,当仅有它为1的时候,输出Q = 1
- Latch,锁存器的意思,它能够存储1个二进制位
2.5 R-S锁存器的功能
R-S锁存器,也可以被称为置位复位触发器,我想你明白这个含义了,现在我们只是总结一下。
R | S | Q | 说明 |
---|---|---|---|
0 | 0 | 和之前状态的Q一样 | 保持 |
0 | 1 | 1 | 置位 |
1 | 0 | 0 | 复位 |
1 | 1 | 禁止使用 | 非法 |
3 锁存器的核心和本质
通过R-S锁存器,我们可以理解锁存器的本质,掌握一类锁存器的核心,这才是我们要关注的重点内容,至于锁存器的设计和样子,不是最重要的,那只不过是在核心的基础之上,套上了外壳,从而让其拥有更广泛的的应用。
关于核心套外壳,我有必要进一步解释一下,我们知道,计算机领域又很多核心部件,例如CPU,这是被外国垄断的高科技器件,它是核心,而计算机其他的部分,内存、硬盘、显示器等等,都是外壳,我们给核心套上不同的外壳,就构成了不同的计算机,能够进行不同的应用;又比如富士康代工厂,他们做的就是给核心套上外壳的工作。
我想你应该能够理解核心的重要性了。
那么锁存器的核心是什么?
这就是锁存器的核心,原理方面,我之前已经详细讲解过,不再赘述,但是希望你认真对待那些看似简单容易的知识,因为它们可能蕴含着拥有无穷力量的核心思想。
3.1 核心套外壳的产品
那么核心套外壳之后,有那些产品呢?有很多,例如:
- 基本R-S锁存器
- 门控R-S锁存器
- D型锁存器
甚至,由此核心,还可以构成各种各样触发器。
需要注意的是,这些外壳,并不是死板的,你完全可以根据需要,灵活地变化他们,不必拘泥于某种特定的形式,不过前提是,变化之后的产品真的很好用,否则,你更应该直接使用封装好的产品。
后面的小节,我会为你详细讲解核心套外壳的产品。
3 外壳一:基本R-S锁存器
嘿!一个新的目标出现了,之前我们为了存储1位数据,制作了R-S锁存器,现在,我们需要存储一位数据,并能够让他输出存储的数据,以及和存储数据互补(0和1在二进制下是互补的)的数据。
这个产品我不再分析,因为你之前见过了:
现在我们将其封装一下,让它更像一个产品。
至于它的功能,我想你已经知道了,基本R-S锁存器,增加的外壳是一个输出端口。
4 外壳二:门控R-S锁存器
现在,新的任务又下达了,我们的基本R-S锁存器,可以随意被使用,这可不好,现在我们需要增加一个开关,只有开关打开的时候,基本R-S锁存器才可以被使用。
我们考虑一下,看看上面封装好的基本R-S锁存器,我们可以加的外壳是:在进入R、S输入端口之前,增加2个与门,这样就可以控制输入信号的有效、无效。
你可以试一试这个电路,这就是门控R-S锁存器。
名称的含义,门控,就是加一个开关,它被称为使能端(Enable terminal),简写EN
。
我们将它封装一下:
5 外壳三:D型锁存器
全新的任务
- 彻底禁止掉
R = S = 1
的情况,对于任何输入的数据,使其,不可能存在这种情况,保证安全,完全避免非法状态。 - 让这个器件能够实现数据0和1的写入,并且能够控制是否写入。
我们由门控R-S锁存器开始思考,既然R和S不能相同,那就只能相反了,这样虽然会舍弃掉R = S = 0
的情况,不过,既然这种情况会与上一个状态相同,而上一个状态R和S一定相反,所以,舍弃掉又有何妨呢?因此,我们的思路就有了,让R和S永远相反,我们怎么做呢?我想你应该知道了,使用1个输入端和1个非门!
就像下面这样,加缓冲器是为了让数据流动时间和加了非门的线路同步
那么第二个目标如何达成?显然我们已经完成了一部分,1个输入端和1个开关我们已经有了,我们只需要,去掉Qbar即可。
你会发现,这里有了较大的变化,我的节奏加快了,如果你前面认真实践了的话,我想你是适应这种变化的。
我来解释一下这些变化
- 为了达成目标,我们要让R和S的值一直相反,因此我们加了一个非门和缓冲门,用一个输入端操控它,注意,不要将非门放错位置,你仔细想一下会明白怎么放置的(举一个例子就好,例如
DI = 0
的时候,如何让DO = 0
)。 - 我们将开关作为写入端
- 我们不使用Qbar端口
我来解释一下端口名称的变化
- DI:数据输入端,可以控制输入的数据是0还是1
- DO:数据输出端,可以读取存储在锁存器中的数据
- W:写入端,可以控制是否将数据写入端的数据写入到锁存器中
- 若
W = 1
,则DI中的数据会被写入到锁存器中,并且存储起来,此时,DO读取的数据是和DI一样的 - 若
W = 0
,则DI中的数据不会被写入到锁存器中,此时,DO将会读取锁存器中存储的数据,与DI的数据无关
- 若
我们封装一下这个器件
扩展内容:这也是我们现在会常用的锁存器类型,我们通常会使用Verilog HDL实现它
module moduleName (input wire w,input wire Din,output reg Dout);always @(w or Din)beginif(w)Dout <= Din;elseDout <= Dout;endendmodule
关于Verilog HDL的知识,你可以自行搜索,如果你不感兴趣,这部分内容可以忽略。
6 一点注意
这里器件的存储,不是永久保存,因为它的本质是电子器件,电是难免会泄露的,我们还需要对其做一些补充,这里不深入展开。
另外,对于门控R-S锁存器中的开关,也被称为保持位(Hold That Bit),当它为0的时候,无论R、S怎么变,锁住的数据也不会改变,这也就是所谓的保持。
7 思考题&预告
我留下思考题和预告,请你仔细思考并认真实践
- 最初,我们使用或非门构造了R-S锁存器,事实上,与非门一样可以完成这件事情,我在3.1节提过,产品的设计的不能死板,它是灵活的,请你思考一下如何设计。
- 请思考一下,具体讲解的几种外壳,有没有感受到,外壳的设计也又核心思想支撑? 之后我们会揭秘。
- 核心套外壳的产品,也完全可以作为新的核心,为他们再赋予外壳,做出更多有用的产品。
- 我们的目标是构建一个RAM存储器,以R-S为锁存器的RAM产品,随着时代的发展,它的性能提升进入了瓶颈期,这个时候,人们的最佳选择是优化核心,这也由RAM存储器,转变成了SRAM、DRAM等类型的存储器,这些后面也会提及(也可以按照此思路,去想一想:算盘–>计算器–>电子计算机–>量子计算机)。
【数字逻辑入门】计算机如何存储1位二进制数相关推荐
- 计算机组成与设计并行乘法器,数字逻辑与计算机组成
本书主要介绍数字逻辑.计算机组成和指令集体系结构(ISA)涉及的相关概念.理论和技术内容,以新兴开放指令集架构RISC-V为模型机,着重介绍数字逻辑电路设计.ISA设计和微体系结构设计等相关内容.本书 ...
- 《数字逻辑与计算机设计基础》
- 数字逻辑计算机组成,数字逻辑设计与计算机组成pdf
数字逻辑设计与计算机组成 内容简介 本书从简单的数字逻辑电路设计基础开始,由浅入深,讲解组合逻辑和时序逻辑电路的设计技术.计算机组成的基本原理和计算机体系结构的相关概念,后深入探讨了现代计算机系统如何 ...
- sql 数字减去null_减去两个16位数字| 8086微处理器
sql 数字减去null Problem: Write a program to subtract two 16-bit numbers where starting address is 2000 ...
- 【计算机组成原理 数字逻辑 Verilog】32位加法器的实现:支持整数的加减运算
目录 0 前言 0.1 使用环境 0.2 知识点 0.3 注意事项 1 建模:1位加法器 1.1 构建基础模型 1.1.1 一位加法器 1.1.1.1 科技黑箱:外部端口与功能 1.1.1.2 揭秘黑 ...
- 数字逻辑课程设计,简单的8位模型计算机verilog设计
简单8位模型计算机 0.摘要 1.绪论 1.1 模型计算机简介 1.2 设计主要内容 1.2.1 设计指标 1.2.2 设计思路 2.系统设计 2.1模型计算机原理 2.2 模型计算机组成 2.3 模 ...
- 计算机存储数字,数字串在计算机内的表示与存储
数字串在计算机内的表示与存储 人们习惯使用10进制数,而在计算机内,采用二进制表示和处理数据更方便.因此,在计算机输入和输出数据时,要进行十→二和二→十的进制转换处理,这是多数应用环境中的实际情况.而 ...
- 计算机怎样存储数值,(二)计算机如何保存字符和数字,并完成计算
1.保存字符 计算机在创建之初,只能显示英文字母和特殊字符,后来慢慢才有了其他语言.但是打开网页或者编辑器却可能出现乱码.我们知道计算机只能保存0和1,那么如何把字符保存成二进制,以及如何把二进制解码 ...
- JS数字存储-指数位-尾数位-最大安全数字
JS数字存储 存储标准 JavaScript中的数字的存储标准是IEEE754浮点数标准.代码中使用的无论是整数还是小数,都是同一种数据类型--64位双精度浮点型. 64位存储划分 64位分别是1位符 ...
最新文章
- DW中CSS属性详解
- 警告!别再使用 TIMESTAMP 作为日期字段~
- Android 新手常见的10个误区(下)
- window清理垃圾
- 你了解VLSM多少(1)
- 获取m,n之间的随机整数
- h5打开app_移动端产品比较分析:APP、小程序、H5
- 内含20万“不可描述”图片,这个数据集千万别在办公室打开
- python 下载文件-python实现从ftp服务器下载文件
- php mysql join查询结果_PHP mySQL表JOIN查询 - 最有效的方法?
- 2021-09-08FTRL 跟随正确的领导者
- c语言float类型小数部分占几个字节,c语言float类型小数点后位数
- 各种泵的图形符号_泵的图形符号
- ftp 创建工具下载,3款能够下载的ftp 创建工具
- 今日学习在线编程题:小码哥的手下
- mysql 建表最佳实践
- 编程该学什么以及vc++一些心得
- 现在做硬件工程师还有前途吗?
- 在linux中安装gdb遇到的问题
- 【数据集处理】Python 将图片名字中含有某一字符串的图片存到指定文件夹下
热门文章
- 【NIO】之IO和NIO的区别
- 数据库抽象类PDOStatement对象使用
- Swift中的延迟加载(懒加载)
- Web Service 缓存
- 合成/聚合原则: 桥接模式
- 新风系统风速推荐表_新风系统风速标准及与噪音的关系
- python平均分由高到低顺序排列输出选手编号和最后得分_python 字典的使用案例二:求平均分,并按平均分由高到低输出选手编号和最后得分...
- 点云数据显示_vispy 显示 kitti 点云数据
- java response 获得code_Java教程分享使用HttpClient抓取页面内容
- Linux怎么处理binray文件,Linux下如何反汇编arm raw binary文件