1、背景
ALU 能执行 算术和逻辑运算,算出来之后的结果需要存起来,可能还要进行多个连续操作,因此需要用到计算机内存。
2、内存分类
随机存取存储器 :简称 ”RAM”,它只能在有电的情况下存储东西,比如游戏状态。
持久存储:电源关闭时数据也不会丢失。
3、制作只能存储 1 位的电路
3.1 背景:
前几集说过的电路都是单向的,总是向前流动,比如上集的 8 位 “ 脉动进位加法器 ”。但也可以做回向电路,把输出连回输入。
3.2 例子 1:用一个 OR 门试试,把输出连回输入。
(1)两个输入(A,)都设为 0,”0 OR 0″ 是 0,所以电路输出 0。
(2)将 A 变成 1,”1 OR 0″ 为 1,所以输出 1。一转眼的功夫,输出回到 B,OR 门看到两个输入都是 1,”1 OR 1″ 仍然为 1,所以输出不变。
(3)如果将 A 变成 0,OR 门依然输出 1。
(4)结果:
这个电路能记录 “1”,而且是永久的,无论怎么试,都没法从 1 变回 0。
3.3 例子 2:AND 门
开始时,A 和 B 都设 1,”1 AND 1″ 永远输出 1,如果之后 A 设为 0,由于是 AND 门,输出会变成 0。
结论:这个电路能记录 0,无论 A 设什么值,电路始终输出 0。
4、”AND-OR 锁存器 ”
把能存 0 和 1 的电路结合起来做成 AND-OR 锁存器。
4.1 特点:
有两个输入。” 设置 ” 输入, 把输出变成 1,“ 复位 ” 输入, 把输出变成 0。
如果 ” 设置 ” 和 ” 复位 ” 都是 0,电路会输出最后放入的内容。也就是说,它存住了 1 位的信息!
放入数据的动作叫 “ 写入 ”,拿出数据的动作叫 “ 读取 ”
4.2 缺点:
用两条线 “ 设置 ” 和 ” 复位 ” 来输入, 有点难理解。
4.3 优化:门锁电路
为了更容易用,我们希望只有一条输入线,将它设为 0 或 1 来存储值;还需要一根线(允许写入线)来 ” 启用 ” 内存,启用时允许写入,没启用时就 “ 锁定。因为门可以打开和关上,所以叫 ” 门锁 ”。
将 ” 门锁 ” 抽象成组件:把 “ 门锁 ” 放到盒子里 – 这个盒子能存一个 bit。关掉允许写入线, 不管给 “ 数据线 ” 什么值,输出都不会变。
5、寄存器
5.1 定义 :
如果并排放 8 个锁存器,可以存 8 位信息,比如一个 8 bit 数字,一组这样的锁存器叫 “ 寄存器 ”。
寄存器能存一个数字,这个数字的位数,叫 ” 位宽 ”。早期电脑用 8 位寄存器,然后是 16 位,32 位,64 位宽的寄存器。
5.2 原理设计
- 写入寄存器前,要先启用里面所有锁存器。可以用一根线连接所有 “ 允许输入线 ”, 把它设为 1。然后用 8 条数据线发数据,然后将
- “ 允许写入线 ” 设回 0,现在 8 位的值就存起来了。
5.3 并排放置锁存器的缺点
如果只有很少的位(bits),把锁存器并排放置,也勉强够用,但是 64 位寄存器要 64 根数据线,64 根 ” 允许输入线 ” 和 1 根线启用所有锁存器,加起来也有 129 条线了。如果存 256 位要 513 条线。
改进:使用矩阵 排列锁存器。
6、矩阵
在矩阵中,将锁存器排列成网格。
存 256 位,我们用 16×16 网格的锁存器,有 16 行 16 列,要启用某个锁存器,就打开相应的 行线 和 列线。
6.1 特点:
-
用一根 “ 允许写入线 ” 连所有锁存器, 为了让锁存器变成 “ 允许写入 ”, 行线,列线和 “ 允许写入线 ” 都必须是 1。
每次只有 1 个锁存器会启用,来存数据。其他锁存器会忽略数据线上的值,因为没有 "允许写入"。
- 用一根 ” 允许读取线 ” 来读数据, 从一个指定的锁存器,读取数据
- 对于 256 位的存储, 只要 35 条 ” 数据线 ”, 1 条 ” 允许写入线 ”, 1 条 ” 允许读取线 ”。还有 16 行 16 列的线用于选择锁存器 .
- 需要某种方法来 唯一指定 交叉路口 — 多路复用器
6.2 多路复用器:
原理:
需要某种方法来 唯一指定 交叉路口,比如说在城市中,你可能想和别人 在第 12 大道和第 8 街的交界碰面,这是一个交叉点的地址。反应到矩阵中是 ”12 行 8 列 ”。12 用二进制表示为 1100,8 用二进制表示为 1000。”12 行 8 列 ” 可以写成 11001000,为了将地址转成行和列,我们需要 “ 多路复用器。
即 使用二进制表示行和列,来唯一定位锁存器。
工作方式:
输入一个 4 位数字,它会把线连到相应的输出线,如果输入 0000,它会选择第一列,如果输入 0001,会选择下一列。
一个多路复用器处理行(row) N 另一个多路复用器处理列(column)。
7、概念抽象
7.1 256 位内存
可以把 256 位内存当成一个整体。构成如下:
- 输入一个 8 位地址:4 位代表列,4 位代表行。
- “ 允许写入线 ”
- “ 允许读取线 ”
- 一条数据线,用于读 / 写数据。
7.2 扩大规模,并排放置 256 位内存。
一行 8 个,可以存一个 8 位数字,8 位也叫一个字节(byte)。
为了存一个 8 位数字,我们同时给 8 个 256 位内存一样的地址,每个地址存 1 位。这里总共能存 256 个字节(byte)。
7.3 看成一个整体的可寻址内存。
有 256 个地址。每个地址能读或写一个 8 位值。
7.4
8 位最多能代表 256 个内存地址,(1111 1111 是 255,0~255 一共 256 个数字)。要给千兆或十亿字节的内存寻址,需要 32 位的地址。
8、内存
内存可以随时访问任何位置,因此叫 “ 随机存取存储器 ”,简称 RAM。
RAM 就像人类的短期记忆,记录当前在做什么事。
这节课 我们用锁存器做了一块 SRAM(静态随机存取存储器),还有其他类型的 RAM,如 DRAM,闪存和 NVRAM。它们在功能上与 SRAM 相似,但用不同的电路存单个位,- 比如用不同的逻辑门,电容器,电荷捕获或忆阻器。但根本上 这些技术都是矩阵层层嵌套,来存储大量信息。