点击查看【bilibili】

导语

存储(memory)分为随机存储器(RAM,即内存)持久存储(persistent memory),前者只能在有电的情况下存储东西,后者则在电源关闭时也不会丢失数据。 6、寄存器 & 内存 Registers and RAM - 图1本节课从实现 只能存储 1 位的电路 开始,不断扩大(抽象、套娃),最后制作出内存模块。

锁存器 Gated Latch - 存 1 位

OR 门 - 记录‘1’的电路

通过将 OR 门的输出连回输入,输出一旦为 1(即至少一个输入为 1),则永远都输出 1,即该电路能记录 ‘1’
image.png

AND 门 - 记录‘0’的电路

通过将 AND 门的输出连回输入,输出一旦为 0(即至少一个输入为 0),则永远都输出 0,即该电路能记录 ‘0’
image.png

AND-OR 锁存器

将 AND 和 OR 电路结合起来,组成AND-OR 锁存器。电路图如下:
image.png

设置 SET 复位 RESET 输出 OUTPUT
1 0 1
0 1 0
0 0 输出最后放入的内容,即存储了 1 位内容

当 SET 和 RESET 都设置位 0 时,就能锁存 1 位信息(值)。

门锁 GATED LATCH

为了更易用,将 SET 和 RESET 两条输入线合为一条数据输入线(将锁存器设为0 或 1来存储值),另外增加一条允许写入线来启用内存,启用时允许写入,不启用则锁定。修改后电路图如下:
image.png
当然,可以不再关心逻辑门的实现,将上述逻辑电路抽象成一个新的组件:
image.png

寄存器 Register - 存 N 位

定义:将 N 个锁存器组合,即可存储 N 位信息,这样一组锁存器称为寄存器
寄存器能存一个数字,这个数字有多少位,叫 位宽
早期电脑用 8 位寄存器,然后是 16 位,32 位,而现在许多计算机都有 64 位宽的寄存器。

并排排放

如下图所示,并排排放 8 个锁存器,就组成了 8 位寄存器,可以存 8 位信息,比如一个 8 bit 数字。
image.png

矩阵

如果使用并排排放锁存器的方式,要存储 256 位,寄存器就需要连接 513 根线(256条输入,256条输出,1条启用写入线),过于庞大。解决办法就是使用矩阵
矩阵中,不再并列排放锁存器,而是以网格的形式排放。
如下图所示是一个 16 × 16 的矩阵,能存储256位,但一共只需要连接 35 条线(16条行线、16条列线用于选择相应的锁存器,还有 1 条数据线, 1 条公用的启用写入线,1 条允许读取线)
image.png

多路复用器

使用矩阵,我们需要指定行和列。针对以上 16 ×16 的门锁矩阵,需要 4bits 表示行地址,4bits 表示列地址。
eg. 12 行 8 列表示为:1100 1000。
为了将地址转化为行和列,要用到 2 个多路复用器,一个用于处理行,一个用于处理列
image.png

将以上 256 位内存看作一个整体,提升一层抽象,如下图所示。输入一个 8 位地址:4 位代表列,4 位代表行。还有 1 条数据线, 1 条允许写入线,1 条允许读取线。
image.png

内存

组合 8 个 256 位内存,即可组成可寻址的 256 字节内存。如下图所示。
image.png
为了存一个 8 位数字(1 个字节),我们同时给 8 个 256 位内存一样的地址,每个内存存 1 位。
一共256个地址,共能存 256 个字节 (byte)。

将以上结构看作一个整体,再次抽象成一个整体的可寻址内存:
image.png

内存的一个重要特性是:可以随时访问任何位置,因此叫 “随机存取存储器” ,简称 RAM。

通过一层层的抽象(俄罗斯套娃),可以把内存打包到更大规模。

结束语

本节课,我们用锁存器做了一块 SRAM(静态随机存取存储器)。还有其他类型的 RAM,如 DRAM,闪存和 NVRAM,它们在功能上与 SRAM 相似,但用不同的电路存单个位(比如用不同的逻辑门,电容器,电荷捕获或忆阻器),但根本上 ,这些技术都是矩阵层层嵌套,来存储大量信息。