主存容量的扩展
单片存储芯片的容量和位宽通常都达不到要求,于是要用多片拼。拼的方向只有两个:把字长拼够(位扩展),和把单元数拼够(字扩展)。两个方向可以同时用。
整节只有一个公式,难的从来不是公式,而是公式里那个”总容量”该怎么算——它取决于编址单位,而编址单位常常不在题面上,要从数据总线宽度反推。本节所有的”好乱”都来自这一处。
机制
唯一的公式
两种算法必然一致,用哪个都行;同时算一遍是最好的自检。
位扩展:拼字长
多片并联,共用地址线、共用片选、共用读写控制线,只把数据线分段接出。
- 每片提供数据的一部分,所有片必须同时工作
- 地址线根数不变,单元数不变
- 例:用
位芯片构成 位 → 8 片,地址线仍 13 根
“共用片选”是位扩展的标志,也是它区别于多体交叉的关键(见 3.2.4)。
字扩展:拼单元数
多片分组,各组数据线并联在同一组数据总线上,靠片选信号区分谁在工作。
- 每片提供一段连续地址
- 字长不变,地址线根数增加,增加的高位地址进译码器产生片选
- 例:用
位芯片构成 位 → 4 片,地址线从 14 根增到 16 根,高 2 位译码出 4 个片选
任何时刻只有一片(或一组)被选中,这正是字扩展与位扩展在电气上的分界。
字位同时扩展
先按位扩展凑够字长,得到一个”组”;再按字扩展凑够单元数。
同一组内的各片共用片选,不同组之间靠片选区分。
flowchart TB subgraph G0["组 0(低地址段)· 共用 CS0"] A0["片 D7~D0"] --- A1["片 D15~D8"] --- A2["片 D23~D16"] --- A3["片 D31~D24"] end subgraph G1["组 1(次一段)· 共用 CS1"] B0["片"] --- B1["片"] --- B2["片"] --- B3["片"] end DEC["高位地址译码器<br/>产生 CS0 / CS1 / …"] --> G0 DEC --> G1 NOTE["组内 = 位扩展(拼字长)<br/>组间 = 字扩展(拼单元数)"] classDef n fill:#d6eaf8,stroke:#2874a6 class NOTE,DEC n
边界
疑问点:给了地址总线和数据总线根数就能求片数,地址复用不参与计算
题目:设 CPU 地址总线有 24 根,数据总线有 32 根,用
位的 RAM 芯片构成该机的主存储器,则该机主存最多需要多少片这样的存储芯片?(选项:256 / 512 / 64 / 128) 第一步:从数据总线定字长。 数据总线 32 根 → 存储字长 32 位 = 4 B,也就是每个地址对应 4 B(按字编址)。 第二步:从地址总线定单元数。 24 根 →
个存储单元。 第三步:总容量。 。 第四步:单片容量。 位 。 第五步:相除。 片。 用位扩展 × 字扩展再算一遍自检: 位扩展系数
片一组;字扩展系数 位 位 组。 ✅ 两条路一致。 地址复用在这道题里完全不出现。 单片
需要 19 根地址引脚,如果它是 DRAM,这 19 位会分两次送、只占 10 根引脚——但那是芯片内部怎么接线的问题,与”CPU 有 24 根地址线所以地址空间是 “没有任何关系。 凡是题目给的是”CPU 地址总线根数”,就直接用它算地址空间,不要去折半或加倍。
边界辨析:编址单位没给时,从数据总线宽度反推
上一题真正的难点在第一步:题面从头到尾没说”按字节编址”还是”按字编址”。 如果按字节编址,总容量就是
,片数 片——32 不在选项里,这反过来确认了题意是按字编址。 一般规则: 题目明说按字节/按字编址 → 照说的算。 题目没说,但给了数据总线宽度 → 按字编址,每个地址对应一个存储字(宽度 = 数据总线宽度)。这是”存储单元”的原始定义,见 3.2.3。 两种算法都算一遍,看哪个落在选项里 —— 选择题里这一招永远有效,且能当场暴露自己对编址单位的假设。
这也是这类题让人觉得”乱”的真正原因:乱的不是位扩展和字扩展,是题面省略了编址单位。
位扩展不增加地址线,字扩展才增加。 一道题问”扩展后地址线增加几根”,只数字扩展系数的对数。
片选来自高位地址,芯片地址引脚接低位地址。 单片
“最多需要多少片”问的是把地址空间填满。 若题目问”实际用了多少片”,要看给定的实际容量。
对照速查
| 位扩展 | 字扩展 | |
|---|---|---|
| 拼什么 | 字长 | 单元数 |
| 地址线 | 不变 | 增加 |
| 片选 | 共用(同时工作) | 分别产生(同时只选中一组) |
| 数据线 | 分段接出 | 并联 |
| 系数 | 目标字长 / 单片字长 | 目标单元数 / 单片单元数 |
| 步骤 | 做什么 |
|---|---|
| 1 | 从数据总线定存储字长(= 编址单位,若题目没另说) |
| 2 | 从地址总线定单元数 |
| 3 | 相乘得总容量 |
| 4 | 除以单片容量得片数 |
| 5 | 用 位扩展系数 × 字扩展系数 自检 |
考点
- 片数 = 总容量 / 单片容量 = 位扩展系数 × 字扩展系数,两条路必须一致
- 位扩展共用片选、地址线不变;字扩展靠片选区分、地址线增加
- 编址单位没给就从数据总线宽度反推(按字编址)
- 地址复用是芯片内部的事,不进入片数计算
- 单片地址位数接低位,剩余高位进译码器产生片选,片选个数 = 字扩展组数
- “最多需要多少片”= 把地址空间填满
链接
- 🏠 返回总览:计算机组成原理第 3 章:存储系统总览
- ⬅️ 上一节:3.3.1 连接原理
- ➡️ 下一节:3.3.3 存储芯片的地址分配和片选
- 🔗 3.2.4(位扩展与多体交叉的分界)
- 🔗 3.2.1(地址复用的作用域)
- 📖 名词库:第 3 章名词库