1.6 寄存器 & 内存(Registers and RAM)

2022-10-02
4分钟阅读时长

计算机的存储器(Memory)可分为两种类型:

  1. 随机存取存储器(Random Access Memory, RAM):仅在有电的情况下存储内容,常用作内存。
    • SRAM( Static Random Access Memory,静态随机存取存储器):“静态”是指这种存储器只要保持通电,里面储存的数据就可以恒常保持(接下来用锁存器做的就是它)。
    • DRAM( Dynamic Random Access Memory,动态随机存取存储器):“动态”是指所储存的数据需要周期性地更新。
    • Flash:允许多次写入的非易失性存储器。
    • NVRAM( Non-Volatile Random Access Memory):非易失性随机存取存储器。
  2. 持久存储器(Persistent Memory):电源关闭时,数据也不会丢失。

1.6.1 AND-OR 锁存器

用 OR 或门可以记录 1,用 AND 与门可以记录 0:

记录 0 或 1

将两者如下图所示连接则构成 AND-OR 锁存器,可以锁定(latch)一个值来存储 1 位信息,故有此名。其有两个输入:「设置」为 1 则输出为 1,「复位」为 1 则输出为 0,两者均为 0 则输出最后记录的数字。

AND-OR 锁存器

另,通常将放入数据的动作称为「写入」(writing),拿出数据的动作称为「读取」(reading)。

1.6.2 门锁(Gated Latch)

AND-OR 锁存器需要用两个输入记录一个数字,使用起来较为麻烦,因此引入可以控制读写的「门锁」(Gated Latch)来存储 1 bit。门锁在输入输出之外,添加了一条允许写入线(Write Enable)——启用时允许写入数据,反之锁定(locked)。

门锁

1.6.3 八位锁存器(8-bit Latch)

将 8 个门锁用 1 根允许写入线连接,构成八位锁存器,可用于存储 8 位信息。先将允许写入线置 1,写入数据后将其置 0 则可完成存储。

八位锁存器

1.6.4 锁存器矩阵(Latches Matrix)

连接

使用 16 × 16 个可存储 1 bit 的锁存器矩阵来存储 256 位,当需要启用某个锁存器时就打开相对应的行线、列线和允许写入线。

锁存器矩阵

在交叉处使用 AND 与门连接,当且仅当行线、列线、单个锁存器的允许写入线均为 1 时,才允许该锁存器进行写入。

使用与门连接

这也意味着可以使用 1 根数据线来连接矩阵中的所有锁存器用于传输数据,因为可根据行列线进行需要开启的锁存器。类似地,可以使用 1 根允许写入线来控制从矩阵中的某个锁存器读取数据。

因此,256 位的锁存器矩阵仅需 35 条线连接—— 1 条数据线、1 条允许写入线、1 条允许读取线以及 16 行、16 列用于选择锁存器的线。

选择

4 位二进制数可表示的最大数字为 16,刚好足够满足对 16 × 16 的矩阵进行行数、列数的地址编码。

可以使用 8 位二进制数来唯一标识行列交叉处的锁存器,比如第 12 行第 8 列的锁存器可以表示为 1100 1000,这就是前文 1.4.4 节中提过「位址」(memory addresses)。

为了使机器读懂这个位址,需要使用 2 个支持 16 路的「多路复用器」(multiplexer)来分别处理行列地址,输入 4 位的数字后,多路复用器会连通相应的行/列线。

多路复用器

16 × 16 的单位锁存器矩阵可以存储 256 个 bit,将 8 个 256-bit 的存储器连接起来构成大小为 256Bytes 的存储器。

在 256Bytes 存储器中,一个八位数字是将每位各自存储在一个 256-bit 内存中,1 个 256-bit 存储器中的某位比特与其余 7 个 256-bit 存储器中的某 7 位比特共享同一个地址。因此,256Bytes 内存中也只有 256 个地址,各自代表 1Byte 的大小,可读写 8bit 值。

简单起见,将这个 256Bytes 的存储器当作整体抽象为一个可寻址存储器。

8 位可寻址存储器

1.6.5 RAM

8 位位址最多可以表示 256 (0~255)个地址,想要对 TB 或是 GB 级别的存储器寻址则更高位的数字表示地址(比如 16/32 位)。

1980s 的 1MB 内存条

上图是 1 MB 大小的 RAM 内存条(1980s),通常是由 8 个内存模块(memory modules)构成,1 个内存模块里有 32 个内存方块(squares of memory),1 个内存方块中有 4 个小块(block),1 个小块中有 128 × 64 位的矩阵,单个小块是 8192bits 大小。

因此,1 个内存方块中有 8192 × 4 = 32768 bits,总共有 32 个内存方块,单个内存模块大约在 100w bits 大小,有 8 个内存模块,总共是 800w bits 约等于 1 MB 大小。