【数字逻辑入门】计算机如何存储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个输入端口分别命名为RS
  • 1个输出端口被命名为Q

让我们记住这个初始状态

RSQ
000

然后,我们将R置为1
在这里插入图片描述
你会发现,此时的状态是

RSQ
100

我们再S置为1
在这里插入图片描述
此时的状态是

RSQ
110

我们再R置为0
在这里插入图片描述
此时的状态是

RSQ
011

我们再S置为0
在这里插入图片描述
此时的状态是

RSQ
001

接下来,我们汇总一下上面的几种状态

RSQ
000
100
110
011
001

我们可以看到,同样是0,0,但是输出却可能是01,这也就意味着,这不是组合逻辑,而是时序逻辑,输入的顺序会影响结果

同时,我们再继续进行实验可以发现(此处请自行完成实验,亲自体验以下结论

  • 一旦置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锁存器特性表

RSQ
00和之前状态的Q一样
011
100
11禁止使用

我带你分析完了这些,我们改回看主题,看一下它是如何锁住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
在这里插入图片描述
然后,ae进行或非运算,得到的结果传到了b端,此时b = 0
在这里插入图片描述
然后b端的结果,反馈到了c端,c = 0;之后,可以得到d = 1;之后,d端的结果又反馈到了e端,可以得知,e = 1并没有发生变化,就此,这个过程就稳定了下来,b端输出到Q的数据也就是最终结果了。

我们梳理一下这个过程,在令R = 0之后,只有a端的数据变为了0,其他端口的数据均没有变化,这样一来,也就产生了锁住数据的现象,产生这种现象的原因,是因为反馈回路的存在

我们可以知道,bc锁住了0de锁住了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锁存器,也可以被称为置位复位触发器,我想你明白这个含义了,现在我们只是总结一下。

RSQ说明
00和之前状态的Q一样保持
011置位
100复位
11禁止使用非法

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型锁存器

全新的任务

  1. 彻底禁止掉R = S = 1的情况,对于任何输入的数据,使其,不可能存在这种情况,保证安全,完全避免非法状态。
  2. 让这个器件能够实现数据0和1的写入,并且能够控制是否写入。

我们由门控R-S锁存器开始思考,既然R和S不能相同,那就只能相反了,这样虽然会舍弃掉R = S = 0的情况,不过,既然这种情况会与上一个状态相同,而上一个状态R和S一定相反,所以,舍弃掉又有何妨呢?因此,我们的思路就有了,让R和S永远相反,我们怎么做呢?我想你应该知道了,使用1个输入端和1个非门

就像下面这样,加缓冲器是为了让数据流动时间和加了非门的线路同步
在这里插入图片描述
那么第二个目标如何达成?显然我们已经完成了一部分,1个输入端和1个开关我们已经有了,我们只需要,去掉Qbar即可。
在这里插入图片描述
你会发现,这里有了较大的变化,我的节奏加快了,如果你前面认真实践了的话,我想你是适应这种变化的。

我来解释一下这些变化

  1. 为了达成目标,我们要让R和S的值一直相反,因此我们加了一个非门和缓冲门,用一个输入端操控它,注意,不要将非门放错位置,你仔细想一下会明白怎么放置的(举一个例子就好,例如DI = 0的时候,如何让DO = 0)。
  2. 我们将开关作为写入端
  3. 我们不使用Qbar端口

我来解释一下端口名称的变化

  1. DI:数据输入端,可以控制输入的数据是0还是1
  2. DO:数据输出端,可以读取存储在锁存器中的数据
  3. W:写入端,可以控制是否将数据写入端的数据写入到锁存器中
    1. W = 1,则DI中的数据会被写入到锁存器中,并且存储起来,此时,DO读取的数据是和DI一样的
    2. 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 思考题&预告

我留下思考题和预告,请你仔细思考并认真实践

  1. 最初,我们使用或非门构造了R-S锁存器,事实上,与非门一样可以完成这件事情,我在3.1节提过,产品的设计的不能死板,它是灵活的,请你思考一下如何设计。
  2. 请思考一下,具体讲解的几种外壳,有没有感受到,外壳的设计也又核心思想支撑? 之后我们会揭秘。
  3. 核心套外壳的产品,也完全可以作为新的核心,为他们再赋予外壳,做出更多有用的产品。
  4. 我们的目标是构建一个RAM存储器,以R-S为锁存器的RAM产品,随着时代的发展,它的性能提升进入了瓶颈期,这个时候,人们的最佳选择是优化核心,这也由RAM存储器,转变成了SRAM、DRAM等类型的存储器,这些后面也会提及(也可以按照此思路,去想一想:算盘–>计算器–>电子计算机–>量子计算机)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法训练】DAY1:整数反转

1 前言 题目来源于Leetcode。 重点&#xff1a;理清逻辑&#xff0c;忽略细节&#xff0c;模仿高手&#xff0c;五毒神掌 2 题目分析 题目很容易理解&#xff0c;先分成两个部分 正数负数 先解决正数 最开始想到的是 intchar数组long唯一增加的就是&#xff0c;先判断整…

【蓝桥杯】BASIC-8 回文数(2020-06-08)

题目 试题 基础练习 回文数 资源限制 时间限制&#xff1a;1.0s 内存限制&#xff1a;512.0MB 问题描述   1221是一个非常特殊的数&#xff0c;它从左边读和从右边读是一样的&#xff0c;编程求所有这样的四位十进制数。    输出格式   按从小到大的顺序输出满足条件的…

【算法训练】Leetcode 1295. 统计位数为偶数的数字(2020.06.09 )

1 题目 1295. 统计位数为偶数的数字 给你一个整数数组 nums&#xff0c;请你返回其中位数为 偶数 的数字的个数。 示例 1&#xff1a; 输入&#xff1a;nums [12,345,2,6,7896] 输出&#xff1a;2 解释&#xff1a; 12 是 2 位数字&#xff08;位数为偶数&#xff09; 345 …

Vivado设置指定源文件进行RTL优化

像VS编译器设置启动项一样&#xff0c;Vivado中&#xff0c;也有类似设计&#xff0c;可以看到&#xff0c;当前选中的是ALU&#xff0c;那么进行RTL优化的时候&#xff0c;会优化RTL的结果&#xff0c;而不是别的&#xff0c;如何改成别的&#xff1f; 在某文件上右键单击选择…

【完整流程】用VSCode替换Vivado默认编辑器

本文楼主找了很多资料&#xff0c;选出了最有用的资料&#xff0c;按照教程走&#xff0c;就可以顺利搞定&#xff0c;先给出画面 很酷很方便&#xff0c;同时还有 自动补全检测错误列选自动生成仿真测试文件 等重要功能 Vivado原来的编辑器是这样的…… 关键是&#xff0c…

IEDA中JavaDoc的自动生成、手动生成,以及生成html文档

1 自动生成类的注释 JavaDoc就是java特有的一种注释。 1.1 配置 首先&#xff0c;IDEA点击File-->Settings 然后Editor-->File and Code Templates-->Class 之后在这地方&#xff0c;添加一些代码 /** * ${description} * * <p> * 创建日期&#xff1a;$…

【java】父类与子类的引用赋值关系

理清楚4个目标 父类引用&#xff08;“名”&#xff09;父类对象&#xff08;“实”&#xff09;子类引用子类对象 理清楚几个操作 // 父类 public class parent{}// 子类 public class sun{}父类引用指向父类对象 parent p1 new parent();子类引用指向子类对象 son s1 …

IDEA自动生成 构造方法 get set方法

对于一个类&#xff0c;创建好成员变量后 右键单击&#xff0c;选中Generate 然后 这几个依次是 构造方法getsetget和set 我们可以选中一个&#xff0c;然后选中要生成的变量&#xff0c;点击OK 这样就可以自动生成 构成方法get方法set方法

IDEA快速修改类名和文件名

在你要修改的类名上&#xff0c;选中类名&#xff0c;然后 右键单击选中Refactor选中Rename 也可以使用快捷键 Win用户是Shift F6

【FPGA VerilogHDL】第一次尝试:LED灯基础实验

0 实验环境 0.1 软件环境 ISE 14.7win10vivado 2017.4 0.2 硬件设备 ISE适用的FPGA开发板&#xff1a;ALINK AX309 1 需求 能够灵活控制4个LED灯 2 Verilog实现 timescale 1ns / 1ps // // Create Date: 14:18:20 08/08/2020 // Module Name: led // Revision…

使用ISE一键生成bit文件

我们知道&#xff0c;这几个&#xff0c;在第一次做好源文件之后&#xff0c;需要一个个进行右键单击-->run&#xff0c;以发现错误。 但是之后的调试&#xff0c;只要一点点变化&#xff0c;哪怕是注释变化&#xff0c;都需要重新run3次&#xff0c;太麻烦了。 不过经过实…

【FPGA Verilog】实验二:key按键基础实验

只说一下经验和教训 1 必须按照设计流程走 不要因为实验简单&#xff0c;就直接进行综合&#xff0c;比如按照 设计编码RTL优化仿真综合管脚分配&#xff0c;实现下载 一定要按照这个步骤来。 2 必须先查看开发板说明文档 开始出了一个令人困惑的问题&#xff0c;后来发现…

【Java】字符串转换为数字:Integer的parseInt方法

Java官方文档[1]的解释 public static int parseInt​(String s) throws NumberFormatException Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus…

在win10上使用Vmware安装Mac OS

安装macOS 如何在Windows上VMware上安装macOS Catalina 10.15 做一些提示&#xff1a; 如果您在第一次启动mac的时候&#xff0c;在出现【语言选择】之前&#xff0c;出现了连接蓝牙内容。 您可以将教程中【修改为win10 x64】那一步跳过&#xff0c;请注意&#xff0c;如果您…

【Computer Organization】The Core Design Thinking of single cycle CPU

1 Overview This section introduces someting that maybe you need to know before learning. Note:This CPU is based on MIPS instruction set. 1.1 Tools LogisimCS 3410 ComponentsMARS MIPS simulatorWin10 or Mac OS 1.2 Courses 自己动手画CPU《计算机组织与结构实…

【汇编语言】王爽 - 内中断复习

0 前言 基于王爽《汇编语言》和Coursera的《计算机组成》课程。 1 中断分类 CPU在执行指令的过程中&#xff0c;产生了一个异常/中断&#xff0c;因为CPU只能同时执行一条指令&#xff0c;所以需要暂停该指令的执行&#xff0c;转而去处理异常/中断信息。 这个异常可以来…

【算法】蛮力法/穷举法/枚举法 的基本问题分析

炮兵问题的优化&#xff0c;设立逻辑数组 蛮力法设计思想 有策略地穷举 验证 制定穷举策略避免重复 简单来说&#xff0c;就是列举问题所有可能的解&#xff0c;然后去看看是否满足题目要求&#xff0c;是一种逆向解题方式。&#xff08;我也不知道答案是什么&#xff0c;…

【计算机网络实验·北航】实验一:网络实验入门(1)

1.3 远程在线环境使用 PCA、PCB、PCC和PCD&#xff1a;4台PC机S1、S2&#xff1a;2台交换机R1、R2&#xff1a;2台路由器中间的设备&#xff1a;组网连线器 远程组网连线&#xff1a; 使用PCA上的组网连线软件&#xff0c;配置组网连线器&#xff0c;实现组网连线。 PCA和PCB…

【操作系统】虚拟化CPU、Memory,共享文件

几个概念 CPU、虚拟CPU进程内存、虚拟地址空间 物理的CPU被OS虚拟成了多个虚拟的CPU&#xff0c;这些虚拟CPU分别运行各自的程序&#xff0c;这些正在运行的程序被称为进程。物理内存被OS虚拟成了多个虚拟地址空间&#xff0c;每个进程都有独立的、自己的地址空间&#xff0c;…

【Linux】编译C语言文件(-o -lpthread)

在gcc中使用-o编译 对于一个一般的程序&#xff0c;直接使用gcc <C语言文件名> -o <编译后生成的文件名>即可&#xff0c;例如以下程序&#xff1a; // cpu.c #include <stdio.h> #include <unistd.h> #include <stdlib.h>int main(int argc,…