存储芯片的地址分配和片选
3.3.2解决了”要几片”,这一节解决”哪一片管哪一段地址”。
地址被劈成两截:低位直接接芯片的地址引脚,决定片内选哪个单元;高位用来产生片选,决定选哪一片。 三种片选方式的差别,全部在于高位那一截怎么用——是每根线直接当片选,是全部送进译码器,还是只送一部分。
用了多少根高位地址线,就决定了地址是否唯一、是否连续、空间有没有浪费。 这三个后果一一对应三种方式,记住对应关系就不必背表。
机制
地址的两截
其中
三种片选方式
线选法:每一根高位地址线直接接一片芯片的片选端(低电平有效)。
根高位线最多接 片- 任何时刻只允许一根为 0,其余为 1
- 地址不连续、有大量无效地址、地址空间浪费严重
- 优点:不需要译码器,最简单
全译码法:全部高位地址线送进译码器,译码输出作片选。
根高位线可产生 个片选- 每个存储单元有且只有一个地址,地址连续、无浪费、无重叠
- 缺点:译码电路最复杂
部分译码法:只把一部分高位地址线送进译码器,剩下的悬空不接。
- 悬空的地址线取 0 或 1 都不影响片选,于是同一个存储单元对应多个地址
- 这种现象叫地址重叠:未参与译码的地址线有几根,每个单元就有
个别名根 数 - 折中:译码电路比全译码简单,地址利用率比线选法高
flowchart TB ADDR["高位地址线"] ADDR --> S1["线选法<br/>每根线直接当片选"] ADDR --> S2["部分译码<br/>一部分进译码器,其余悬空"] ADDR --> S3["全译码<br/>全部进译码器"] S1 --> R1["最简单<br/>地址不连续 · 浪费最严重"] S2 --> R2["折中<br/>产生地址重叠(每单元多个别名)"] S3 --> R3["最复杂<br/>地址唯一 · 连续 · 无浪费"] classDef good fill:#d5f5e3,stroke:#27ae60 classDef mid fill:#fdebd0,stroke:#e67e22 classDef bad fill:#fadbd8,stroke:#c0392b class R3,S3 good class R2,S2 mid class R1,S1 bad
计算模板:求某一片的地址范围
第一步:确定地址总位数
第二步:确定片内地址位数
第三步:写出该片的高位片选码,这
第四步:拼起来读两个端点。
第五步:每 4 位一组转成十六进制。
一个完整的例子。 CPU 地址线
- 单片
→ , 接芯片 - 剩下
共 4 根,全译码用 4-16 译码器,本例只用其中 4 个输出
| 片 | 起始 | 末地址 | |
|---|---|---|---|
| 0 | 0000 | 0000H | 0FFFH |
| 1 | 0001 | 1000H | 1FFFH |
| 2 | 0010 | 2000H | 2FFFH |
| 3 | 0011 | 3000H | 3FFFH |
自检:每片跨度 0000H~3FFFH
若改成部分译码,只把 0000H~0FFFH 之外,还同时响应 4000H、8000H、C000H 三段——每个单元有
边界
“地址重叠”和”地址冲突”不是一回事。 地址重叠是一个单元有多个地址(部分译码的正常后果);地址冲突是一个地址选中了多片(连接错误,会造成数据总线竞争)。题目问”是否合理”时,重叠可以接受,冲突不可以。
线选法的地址一定不连续。 因为片选线要求”只有一根为 0”,所以片选码只能取 1110、1101、1011、0111 这类值,它们对应的地址段之间隔着大片无效区。
判断用了哪种方式,看有没有译码器、以及高位地址线是否全部参与。
| 现象 | 方式 |
|---|---|
| 无译码器,每根高位线接一片 | 线选法 |
| 有译码器,高位地址线全部接入 | 全译码 |
| 有译码器,部分高位地址线悬空 | 部分译码 |
RAM 区和 ROM 区共存靠的就是片选。 两类芯片挂在同一组地址和数据总线上,由译码器把地址空间切成 ROM 段和 RAM 段——这就是 3.1.1中”RAM 与 ROM 可以统一编址”的电路实现。
片内地址位数
对照速查
| 方式 | 译码器 | 地址连续 | 地址唯一 | 空间浪费 | 电路复杂度 |
|---|---|---|---|---|---|
| 线选法 | 无 | 否 | 是 | 最严重 | 最简单 |
| 部分译码 | 有 | 段内连续 | 否(重叠) | 有 | 中 |
| 全译码 | 有 | 是 | 是 | 无 | 最复杂 |
| 步骤 | 做什么 |
|---|---|
| 1 | 地址总位数 |
| 2 | 片内地址位数 |
| 3 | 高 |
| 4 | 低 |
| 5 | 四位一组转十六进制,用跨度自检 |
考点
- 地址分两截:低
位接芯片( 只由单片容量决定),高位产生片选 - 线选法无译码器、地址不连续、浪费最严重
- 全译码地址唯一且连续,无重叠
- 部分译码产生地址重叠,悬空
根则每单元有 个别名 - 地址重叠 ≠ 地址冲突:前者是设计后果,后者是连接错误
- 地址范围 = 片选码 + 低位全 0 / 全 1,用”跨度 = 单片容量”自检
- RAM 与 ROM 统一编址靠片选译码实现
链接
- 🏠 返回总览:计算机组成原理第 3 章:存储系统总览
- ⬅️ 上一节:3.3.2 主存容量的扩展
- ➡️ 下一节:3.3.4 存储器与 CPU 的连接
- 🔗 3.2.2 只读存储器(ROM 区的内容)
- 📖 名词库:第 3 章名词库