Appearance
主存和 CPU 之间的连接
2026 大纲 三(四)3 主存和 CPU 之间的连接。
手里的芯片总是不够大,问题是往哪个方向补
一片存储芯片的规格写成
这两种扩展的物理连接差别很大,而差别的根源只有一句话:
🔴 位扩展是"所有片一起出力、各出一部分位",字扩展是"每次只有一片工作、其余不选中"。所以前者不需要片选译码,后者必须译码。 记住这一条,接线怎么接、片选怎么给、地址线怎么分,都能推出来。
在动手算之前,先把一个最容易翻车的地方钉死:
🔴 规格里的
是单元数,不是字节数。 的芯片总容量是 2 KB,但 个单元,片内地址需要 位。若误把 当成 2 KB 去取对数会得到 11 位,片选逻辑和地址范围会全盘错位。片内地址位数只由单元数决定,与每单元多少位无关。
一、位扩展:把字长补够
当

图 7.10 DRAM 芯片的扩展(袁春风《计算机组成与系统结构(第 3 版)》p216)
教材这张图是 8 片
它同时揭示了一件事:这样的结构一次只能读出地址连续且对齐的 8 个字节(第
二、字扩展:把容量补够
当
| 选中 | 地址范围 | |
|---|---|---|
| 00 | 芯片 0 | 0000H ~ 0FFFH |
| 01 | 芯片 1 | 1000H ~ 1FFFH |
| 10 | 芯片 2 | 2000H ~ 2FFFH |
| 11 | 芯片 3 | 3000H ~ 3FFFH |
这张表反过来用,就能回答"某个地址落在哪一片、该片的最小地址是多少":拿地址除以单片的单元数,商就是片号,商乘回单片单元数就是该片的最小地址。例如 4 片 0B1FH 0800H。
三、字位同时扩展
算片数之前先把两个口径对齐
真题里的片数题很少直接给你
坑一:编址单位。 "按字节编址"时地址空间的单位是字节,"按字编址"时地址空间的单位是字,要乘上字长才是字节容量。例如 24 位地址线、按字编址、字长 32 位,则地址空间是
坑二:分区。 题面常把主存分成 ROM 区和 RAM 区,问某一区要几片。先把该区的容量单独算出来(总容量减去另一区,或按给定的比例分),再除以单片容量、再乘位扩展倍数。位扩展倍数千万别漏——
⚠️ 还有一个与片数无关但常同题出现的量:MAR 的位数看的是地址空间,不是实际装了多少。地址空间 64 MB 而只装了 32 MB 主存时,MAR 仍需 26 位——它要能表达整个地址空间。
四、控制信号与译码方式
画主存与 CPU 的连接图时只画地址线和数据线是不完整的:
| 信号 | 方向 | 接到哪里 | 作用 |
|---|---|---|---|
| CPU → 存储器 | 译码器的使能端 | 只有 CPU 确实要访存时,译码器才输出片选 | |
| CPU → 各芯片 | 读写控制端 | 决定本次是读还是写 | |
| CPU → 各芯片 | 输出三态门 | 读操作时打开数据输出,避免总线冲突 | |
| CPU → 各芯片 | 写控制端 | 写操作时有效 |
🔴 译码器的使能端必须接
。 地址总线上任何时刻都有电平,CPU 执行不访存的指令时地址线上残留的也是某个值。若译码器一直使能,它就会持续输出某个片选,导致 CPU 并未访存却选中了某片。
如果还要把某段地址空间留给 I/O 或其他芯片,可以在使能端再串一个由更高位地址构成的门电路(例如仅当
高位地址怎么参与译码,有三种做法:全译码让高位地址全部参与,每个地址唯一对应一个单元、无地址重叠,代价是译码电路较复杂;部分译码只用部分高位地址、其余悬空,电路简单但存在地址重叠——悬空的那几位取任何值都不影响选片,于是若干不同地址落到同一个物理单元上;线选法用单根高位地址直接作片选(低电平有效),最简单但浪费地址空间,且任何时刻只能选中一片。三者不是好坏问题而是取舍:在地址空间远大于实际需求的小系统里,重叠并不构成实际问题。
五、为什么片选用高位地址
高位地址接译码器(常规做法)使同一片内的地址连续:片 0 占 0000H~0FFFH、片 1 占 1000H~1FFFH……地址范围是整齐的区间,便于分区管理。
低位地址接译码器则相反:相邻地址落在不同芯片上,地址 0 在片 0、地址 1 在片 1……每片内部的地址不再连续。这不是接错了,而是另一种有意的设计——交叉编址,目标是并行带宽而不是连续性,详见 多体交叉存储器。
⚠️ 无论怎么扩展,主存的存取周期都不变。存取周期由单个芯片的特性决定,与片数无关。想缩短有效存取时间得靠多体交叉、Cache 这些别的手段。
由一段给定地址范围反求连接的三步走查:容量、片选逻辑、各片地址范围(想核对"恒定高位"是怎么找出来的时展开)
某 8 位机主存地址 16 位(8000H ~ 9FFFH 这段地址上用
第一步,求容量。
第二步,找出恒定不变的高位——它就是片选条件。 把区间两端写成二进制对齐比较:
8000H = 100 0 0000 0000 0000
9FFFH = 100 1 1111 1111 1111
↑↑↑
A15 A14 A13 恒为 100,其余各位跑遍全 0 到全 1区间内恒有
第三步,确定片数与地址线分配。
- 片内地址
位,接 - 剩下的
送 2-4 译码器区分四片 - 译码器使能端接第二步得到的
| 芯片 | 地址范围 | |
|---|---|---|
| 0 | 00 | 8000H ~ 87FFH |
| 1 | 01 | 8800H ~ 8FFFH |
| 2 | 10 | 9000H ~ 97FFH |
| 3 | 11 | 9800H ~ 9FFFH |
这三步的顺序是通用的:容量由区间长度定 → 恒定高位定片选 → 变化位从高到低依次分给译码器和片内地址。
考点速记
- 芯片规格
中 是单元数不是字节数,片内地址位数 ;位扩展补字长(地址线共享、数据线分段、片选相同,不需要译码),字扩展补容量(高位地址经译码器产生片选,每次只选一片),总片数 ,字位同扩要先分组再译码。 - 地址线划分为低
位接片内、高 位接译码器;译码器使能端要接 ;全译码无地址重叠、部分译码简单但有重叠、线选法最浪费。 - 高位选片使片内地址连续,低位选片则退化为交叉编址;位扩展的物理结构决定了一次只能读出对齐的若干字节,这是数据需要对齐的硬件原因;扩展多少片都不改变存取周期。
这一节在真题里被考过的形式(下方「真题练习」里属于本篇的那几道):
- 给主存总容量与 ROM / RAM 的划分,问各需多少片:先把该区的容量单独算出来,再除以单片容量、乘上位扩展倍数(
要两片才凑成一组 )。⚠️ 漏乘位扩展倍数是这类题最主要的失分点。 - 给地址线位数与编址方式,问需要多少片:先按编址单位换算出字节容量——按字编址时地址数要乘字长,24 位地址线按字编址、字长 32 位是 64 MB 而不是 16 MB。
- 给地址空间大小与实装主存容量,问 MAR 至少多少位:看地址空间,不看实装容量。地址空间 64 MB ⇒ 26 位,哪怕只装了 32 MB。
- 给一个具体地址,问它所在芯片的最小地址:地址 ÷ 单片单元数 = 片号,片号 × 单片单元数 = 该片最小地址。
- 给地址线位数与两个区的容量比例,问某区的地址范围:总空间由地址线位数定,按比例切出该区大小,再按"谁在低地址"排出区间端点。
易错:把
里的 当成字节容量取对数。 的片内地址是 12 位( ),不是 11 位。
易错:按字编址当成按字节编址。地址空间
字长才是字节容量。
易错:MAR 位数按实装容量算。它看的是地址空间。
易错:只做字扩展忘了位扩展倍数,片数少算一半甚至更多。
教材出处
- 袁春风《计算机组成与系统结构(第 3 版)》§7.2.5 存储器芯片的扩展:位扩展 / 字扩展 / 字位同时扩展的定义与实例、图 7.10 DRAM 芯片的扩展及数据对齐的成因(p215~216)
- 连续编址与交叉编址的地址划分方式:同上 §7.2.6,印刷页 p217
相关知识
半导体随机存取存储器|DRAM 芯片与内存条|多模块存储器|数据对齐与大小端