从寄存器到存储器
复习
- 一个寄存器可以保存一个多位数字
- 时序逻辑用寄存器保存数据和状态
- 数据一多,就不能再为每个寄存器单独拉一套接口
TL;DR
- 把许多寄存器排在一起,再为每格编号,就得到存储阵列
- 地址说明这次访问哪一格
- 译码器选择写入位置,多路选择器选择读取位置
正文
一个 8 位寄存器能记一个数。要记 16 个数,可以摆 16 个寄存器;可若每个都单独拉出读线、写线和开关,机器很快会被线淹没。
老办法又来了:给每一格编一个号,对外只留一组公共入口。
给格子编地址
假设先摆 4 个 8 位寄存器:
| 地址 | 保存的数据 |
|---|---|
00 | 第 0 格的 8 位数据 |
01 | 第 1 格的 8 位数据 |
10 | 第 2 格的 8 位数据 |
11 | 第 3 格的 8 位数据 |
两位地址有 4 种组合,刚好选中 4 格。一般来说,n 位地址可以区分 2ⁿ 个位置。
写入时只开一扇门
写入时,所有寄存器都能看到公共数据线,但地址译码器只打开其中一格的写使能。因此只有被选中的寄存器会在时钟边沿更新,其余继续保存原值。
读取时,所有寄存器都输出自己的内容,多路选择器再根据地址,只把其中一格送到公共出口。
无论里面有 4 格还是 1024 格,对外操作都只有两种:
读:给地址 → 得到该地址的数据
写:给地址和数据 → 发出写入信号
这就是存储器
继续扩展行列、地址和选择电路,这排有编号的抽屉就成了真正的存储器。站在机器其他部件的角度,它只暴露几样东西:
- 地址线:打开哪个抽屉
- 数据线:放进去或拿出来的内容
- 读写控制线:这次是读还是写
地址不是数据本身,只是数据所在的位置。就像“12 号抽屉”并不是抽屉里的纸条。
临时存储与长期存储
用来临时保存程序和计算数据的通常是 RAM。它能按地址访问任意位置,但常见 RAM 断电后会丢失内容。
机器启动时最先执行的程序不能随着断电消失,因此会放进 ROM 或其他非易失存储。ROM 的名字来自“只读存储器”;现实中的许多实现也能通过特殊方式改写,只是不会像 RAM 那样被日常运算随手覆盖。
寄存器很快,却昂贵;存储器能保存更多数据,也为程序和中间结果提供了统一的地址。现在,会算的运算器和会记的存储器都准备好了。下一章,把它们接成一台需要人手控制、但已经能读取、计算和写回的小计算机。
思考题
要区分 256 个位置,地址至少需要多少位?如果每格保存 8 位,总容量是多少?
小结
知识点
- 地址为多个存储位置编号
- 译码器负责写入选择,多路选择器负责读取选择
- 存储器通过地址、数据和读写控制线工作
- RAM 与非易失存储承担不同任务
思考题答案(仅供参考)
需要 8 位地址,因为 2⁸ = 256。每格保存 8 位,也就是 1 字节,因此总容量为 256 字节。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪