回顾
上一集,使用逻辑门做了一个简单的 ALU,但是这个是仅仅用于计算的。
算出结果后,如果仍掉就没有什么意义了,需要找个办法存起来,
所以,今天要讲的是从把一个东西算出来,到怎么把算出来的东西存储起来。
1. 数据有损失的原因
玩游戏的时候,一旦断点,那么就会失去游戏的进度,也就是游戏数据丢失了。
这是为什么呢?
因为这个时候使用的是 RAM(随机存取存储器) , 它只能在有电的情况下存储东西,例如:游戏状态。
2. 另一种存储:持久存储
即使在电源关闭的情况下,也不会丢失数据,这个后面的章节会讲。
3. 今天要做的东西:一个存储1位的电路
先做出可以存储1位的电路。然后扩大,做出内存模块,下次再和ALU组合,做出CPU。
正题
1. 从课程开始至今,我们说过的电路都是单向的
就是说电路总是向前流动的。例如,上集讲的「脉动进位加法器」;
但是也可以做「回向电路」,把输出连回输入。
2. 做出能存 0 和能存 1 的电路
这样将两者结合起来的时候,就可以构成「AND-OR 锁存器」,
它有两个输入
- 「设置」输入,把输出变成 1
- 「复位」输入,把输出变成 0
最终,存住了 1 位的信息。这个叫做「锁存」,因为它「锁定」了一个值
放入数据的动作叫「写入」,拿出数据的动作叫「读取」
3. 继续抽象,希望只有一条输入线
因为用两条线「设置」和「复位」来输入有点难理解,
为了使用更加容易,希望只有一条输入线;
4. 可以存放一个 Bit 的盒子
这里会涉及到「门锁」的概念。
门:可以打开或者关上。
这时候,我们希望有一个盒子,把「门锁」放到盒子中,这个盒子可以存一个 Bit。
5. 寄存器
在前面的基础上,我们来扩展一下规模: 我们并排放 8 个锁存器,一组这样的锁存器称为「寄存器」
寄存器可以存一个数字,这个数字有多少位,叫做「位宽」
可以存 8 位信息,例如一个 8 bit 的数字
早期的电脑使用的是 8 位寄存器,然后随着时代的发展,有了 16位,32位等的寄存器。
小结:存 1 位,锁存器;存 8 位,寄存器。
6. 「多路复用器」
为了减少线路的使用,我们需要将地址转成「行」和「列」,这个时候就需要用到「多路复用器」
一个 16*16 的矩阵可以存 256 位,组合 256 位内存 + 多路复用器,可寻址的 256 字节 内存
数据选择器/多路复用器 解码 8 位地址,定位到单个锁存器;
7. 独立的存储模块和电路
这是一个整体的可寻址内存
8. 内存的一个重要特性:可以随时访问任何位置
因此叫内存又叫「随机存储器」
一条 1980 年代的内存,1M 大小
总结:
划重点,今天主要讲的是使用「锁存器」做了一块 SRAM 「静态随机存取存储器」。