导语
存储(memory)分为随机存储器(RAM,即内存)和持久存储(persistent memory),前者只能在有电的情况下存储东西,后者则在电源关闭时也不会丢失数据。 本节课从实现 只能存储 1 位的电路 开始,不断扩大(抽象、套娃),最后制作出内存模块。
锁存器 Gated Latch - 存 1 位
OR 门 - 记录‘1’的电路
通过将 OR 门的输出连回输入,输出一旦为 1(即至少一个输入为 1),则永远都输出 1,即该电路能记录 ‘1’。
AND 门 - 记录‘0’的电路
通过将 AND 门的输出连回输入,输出一旦为 0(即至少一个输入为 0),则永远都输出 0,即该电路能记录 ‘0’。
AND-OR 锁存器
将 AND 和 OR 电路结合起来,组成AND-OR 锁存器。电路图如下:
设置 SET | 复位 RESET | 输出 OUTPUT |
---|---|---|
1 | 0 | 1 |
0 | 1 | 0 |
0 | 0 | 输出最后放入的内容,即存储了 1 位内容 |
当 SET 和 RESET 都设置位 0 时,就能锁存住 1 位信息(值)。
门锁 GATED LATCH
为了更易用,将 SET 和 RESET 两条输入线合为一条数据输入线(将锁存器设为0 或 1来存储值),另外增加一条允许写入线来启用内存,启用时允许写入,不启用则锁定。修改后电路图如下:
当然,可以不再关心逻辑门的实现,将上述逻辑电路抽象成一个新的组件:
寄存器 Register - 存 N 位
定义:将 N 个锁存器组合,即可存储 N 位信息,这样一组锁存器称为寄存器。
寄存器能存一个数字,这个数字有多少位,叫 位宽。
早期电脑用 8 位寄存器,然后是 16 位,32 位,而现在许多计算机都有 64 位宽的寄存器。
并排排放
如下图所示,并排排放 8 个锁存器,就组成了 8 位寄存器,可以存 8 位信息,比如一个 8 bit 数字。
矩阵
如果使用并排排放锁存器的方式,要存储 256 位,寄存器就需要连接 513 根线(256条输入,256条输出,1条启用写入线),过于庞大。解决办法就是使用矩阵。
在矩阵中,不再并列排放锁存器,而是以网格的形式排放。
如下图所示是一个 16 × 16 的矩阵,能存储256位,但一共只需要连接 35 条线(16条行线、16条列线用于选择相应的锁存器,还有 1 条数据线, 1 条公用的启用写入线,1 条允许读取线)
多路复用器
使用矩阵,我们需要指定行和列。针对以上 16 ×16 的门锁矩阵,需要 4bits 表示行地址,4bits 表示列地址。
eg. 12 行 8 列表示为:1100 1000。
为了将地址转化为行和列,要用到 2 个多路复用器,一个用于处理行,一个用于处理列。
将以上 256 位内存看作一个整体,提升一层抽象,如下图所示。输入一个 8 位地址:4 位代表列,4 位代表行。还有 1 条数据线, 1 条允许写入线,1 条允许读取线。
内存
组合 8 个 256 位内存,即可组成可寻址的 256 字节内存。如下图所示。
为了存一个 8 位数字(1 个字节),我们同时给 8 个 256 位内存一样的地址,每个内存存 1 位。
一共256个地址,共能存 256 个字节 (byte)。
将以上结构看作一个整体,再次抽象成一个整体的可寻址内存:
内存的一个重要特性是:可以随时访问任何位置,因此叫 “随机存取存储器” ,简称 RAM。
通过一层层的抽象(俄罗斯套娃),可以把内存打包到更大规模。
结束语
本节课,我们用锁存器做了一块 SRAM(静态随机存取存储器)。还有其他类型的 RAM,如 DRAM,闪存和 NVRAM,它们在功能上与 SRAM 相似,但用不同的电路存单个位(比如用不同的逻辑门,电容器,电荷捕获或忆阻器),但根本上 ,这些技术都是矩阵层层嵌套,来存储大量信息。