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 位,我们用 16x16 网格的锁存器,有 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 相似,但用不同的电路存单个位,- 比如用不同的逻辑门,电容器,电荷捕获或忆阻器。但根本上 这些技术都是矩阵层层嵌套,来存储大量信息。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。