使用锁存器做一个寄存器 和 内存

2022-10-09 13:01:19 浏览数 (1)

theme: condensed-night-purple

计算机需要 ”内存“来记录这些计算后的结果,如果只是计算后就扔掉没有多大意义,我们需要将结果存储起来以便后面使用

RAM

当我们打游戏的时候如果停电或者电源不小心被拔掉,那么之前做的一切工作将丢失。损失数据的原因是因为电脑是用的: ”随机存取存储器“,简称“ROM”。他只能在有电的时候存储东西;另一种存储叫做持久存储,电源关闭时数据也不会丢失。

存储一位的电路

之前说过的电路他们电流的流动方向总是向前流动,比如之前的八位加法器。但是也可以做回向电路,把输出连回输入

记录“1”

也即记录“true“,回想一下什么时候输出为true比较容易。答案是OR门,只要有一个输入为true输出将永远为true。只要有一个1,输出将永远为1

因此将输出的线路接回到两个输入线路中的其中一个即(输出=A/B) 。只要A/B其中一个输入1,那么输出就是1,由于输出会链接到另一个输入,因此B/A也会为1。之后不管如何变化A/B,B/A始终都为1,因此这个电路就是存储1的电路。

图示:只要当A输入为1的时候,这个电路的输出将会一直是1(输出会链接到B因此B为1),不管A如何变化。 也即存储”1“

存储之后将永远无法改变输出是1这个结果。

记录“0”

同样,用什么来存储false比较简单呢?答案是通过AND门,因为 只要有一个为false输出就一直为false。 即只要有一个0,那么输出就会一直是0.

和上面一样,替换1为0即可:

将输出的线路接回到两个输入线路中的其中一个即(输出=A/B) 。只要A/B其中一个输入0,那么输出就是0,由于输出会链接到另一个输入,因此B/A也会为0。之后不管如何变化A/B,B/A始终都为0,因此这个电路就是永久存储0的电路。

图示:当A输入0时,AND的结果为0,B也为0.之后不管A如何变化,输出将永远为0 同样也是持久化的存储了之后就不会改变

AND-OR锁存器

现在我们把上面的两个存储电路结合起来做成一个有用的存储:

组合到一起之后:

变化:存储1的B线输入接至整体的最后输出,存储0的B线输入为存储1的输出

首先来看两个输入:设置和复位。先不纠结他们的作用,把他们看成普通的输入即可

SET,RESET都为1:最后输出为0

SET=0,RESET=1:最后输出为0

RESET,SET都为0:输出为0

重点来了:

SET=1RESET=0:输出为1,不管之后SET如何变化(设置为0也好1也好)最后的输出都为TRUE(他锁住了1位的信息),除非RESET设置为1输出才会重置为0因此这也是RESET的含义 观察规律可得出:复位为1不管输入是0还是1最终输出都是0;复位为0输出的值=SET的值。当SET为1时他锁住了这个1

锁存介绍

重点:当SET为1RESET=0时他锁住了这个1(即SET不管如何变化最后的结果永远都是1)。

这叫“锁存”,因为他“锁定”了一个值,放入数据的动作叫做“写入”,拿出数据的动作叫做”读取“

锁存器优化——门锁

两条线设置和复位太麻烦,为了更容易使用。通过一条输入线设置为0或1来存储值,还需要另外一根线去启用内存,让他存储。启用时允许写入,没有启动时就”锁定“这条线叫”允许写入线“

正如图中所说的,这叫”门锁“,因为门可以打开和关上。

接下来读者自己去做下面的规则运算吧,最终会发现只有当允许写入线打开数据输入才会进行存储(OUT才会改变),允许写入线关闭,不管数据输入如何变化最后的结果都不会变(OUT不会改变)

抽象-门锁

将这个门锁放到一个盒子里面,这个盒子可以存储一个Bit的信息。

允许写入线关闭,数据输入线不管是0还是1输出都不会有变化。 允许写入线开启,输出随着数据输入的值进行改变。

寄存器-存储一系列锁存器

经过上面介绍我们现在可以存储一个一位的数字了,不过存储一位的数字并不能做什么。

定义

如果我们可以并排放八个锁存器,就可以存八位的信息,比如一个8Bit的数字。

一组这样的锁存器叫做寄存器,寄存器能存一个数字,这个数字有多少位,叫做位宽。 早期的电脑是用的八位寄存器,然后发展16位,32位,现在许多计算机都有64位宽的寄存器

8位寄存器需要多少线?

数据输入需要有八根线,对应的八个锁存器对应存储的数字

数据输出线也是需要八根线,每个锁存器输出各自存储的位

最后只需要用一条启用写入线连接所有的允许输入线即可.当设置为1时,这个八位的寄存器才会进行存储之后输出的时候会发生变化;当设置为0时,不会影响数据的输出。

可见八位的寄存器所需的线的数量时17根(8 8 1) 由此可推断出我们现如今使用的64位寄存器所需要多少线:(64 64 1)=129根线

寄存器是一块比较小的内存用于存储一个值,而RAM是一大块内存能在不同地址(矩阵中的行列。地址多少取决于矩阵中行列数量)存大量数字

那么我们如果要用锁存器存256位就需要129X4=513条线!!!因此后面换了一种组合方式存储RAM

内存-矩阵连接锁存器

在矩阵中,不并列排放锁存器,做成网格的形式。 这样存256位就可以使用16X16的网格。

如果要启用其中的某个寄存器,指明对应的行号和列号即可。

如何实现只打开某个锁存器

首先给定行号和列号,只有对应的行号和列号都满足条件时,才会打开某个锁存器的行列选择器 (ROW COLUMN SELECT TEST)。

实现方案已经看出来了使用的是AND门(也就是下图的ROW COLUMN SELECT TEST) ,那么这个行号和列号怎么转换成对应的比特01呢?(后面总结矩阵需要多少跟线的时候在讲解)

如何实现"允许写入线"

和之前一样也是用的一根允许写入线来控制所有锁存器的写入线。

但和之前稍微不同的是

允许存储不单单是允许写入就可以存储的了,还需要满足另外一个条件就是:对应的行列选择器被打开

因此需要在传统的WRITE ENABLE的基础上 AND 行列选择器的开关。只有行号,列号,允许写入线都是1才进行存储。

而且每次只有一个锁存器会这样,这会在数据输入线实现的时候有特别大的帮助

如何实现数据输入线

得益于之前的写入判断:只有行号,列号,允许写入线都是1才进行存储,而且每次只有一个锁存器会这样。因此我们不需要向并排那样每个锁存器都有一个输入线 ,矩阵只需要一个数据输入线即可,因为每次只能操作一个锁存器,其他锁存器会忽略数据线上的值,因为没有“允许写入(行列不满足)”

大致修改流程

先锁定行列矩阵中开启哪个锁存器,在判断是否允许写入,如果允许写入那么数据线的值就是输出,如果不允许写入那么输出不会改变

如何实现数据读取线

类似数据输入线一样,每次锁定要读取的行列即可。但是每次只可以输出一个锁存器上存储的数字

总结-矩阵后的256位内存需要多少线

答案是仅仅需要35跟线即可。

一条数据线,一条允许写入线,一条允许读取线(强调!!每次只可读取一位如果需要读取多位需要将多个内存向寄存器那样把锁存器并排放置),还有剩下32个线就是我们用于锁定对应行列的锁存器,这个32跟线就是多路复用器的32跟线,下面介绍多路复用器

多路复用器----将行列二进制地址转换为行和列打开对应的锁存器

由于256位的寄存器行列数最大值也就是16,因此4位数足够了。

转换示例:比如行号12用二进制表示:1100,列号8用二进制表示:1000.因此行列的表示可以写成11001000代表的是十二行第8列

选择多路复用器

根据转换的不同行列数,需要不同的多路复用器。

上面我们用的都是16行,因此行和列选择的都是1到16多路复用器。一个多路复用器处理行,一个处理列

工作方式

输入四位数字,会选择对应的行或列,比如代表列的0000列的复用器会选择第一列,如果是0001=1会选择第二列,以此类推..

抽象-可以存储256位的内存

8位地址里面四位表示行号,另外四位表示列号

数据Data输入线

允许写入线:WRITE ENABLE

允许读取线: READ ENABLE

存储多位信息

我们从最初只能存储一位的内存发展到存储八位的内存再之后发展到刚刚提到的可以存储256位的内存(每次只可取一个位)。但是这一个可以存储256位的内存也只是每次可以输出一位的信息,并没有多大用处,因此将这些内存再次链接起来,向寄存器那样将多个锁存器并排放置

将八个256位内存并排放置,每次都可以存储一个八位的数字,八位也叫一个字节(byte)。 每次都给8个256位内存一样的地址,每个地址存一位,也就意味着总共能存256个字节

抽象-看成一个整体的可寻址内存

8-BIT ADDRESS INPUT:代表的是这八个256位内存中使用的同一个行列,因此这个RAM有256个地址,而每个地址都可以读写一个8位的值,也就是可以存储256X8位的信息,也即256个字节(byte)

这个RAM有16个寻址空间地址,每个地址可以读写8位值,可以看到是由8个16位内存组成 下一篇文章将CPU的时候会用到

现在计算机的内存已经扩展到了GB的方式,和上面介绍的一样,也是不断的打包这些矩阵,不断把内存打包到更大规模,8位最多能代表256个内存地址,如果想要给千兆或者十亿字节的内存寻址(寻找地址),需要使用32位的地址。

总结

这篇文章,我们用锁存器做了一个SRAM(静态随机存取存储器) ,还有其他类型的RAM,比如DRAM,闪存和NVRAM。。他们在功能上和SRAM相同,但用不同的电路存单个位:比如用不同的逻辑门,电容器,电荷捕获或忆阻器。但根本上,这些技术都是矩阵层层嵌套来存储大量信息。计算机底层其实很好理解,难得是一层层难以理解的抽象。

下篇文章我们制作一个CPU~~

原文视频

【计算机科学速成课】[40集全/精校] - Crash Course ComputerScience

Youtube 原视频

0 人点赞