精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

存储器扩展

考情分析

存储器扩展设计题以大题形式考查。需要掌握:给定主存容量和芯片规格,计算需要多少芯片、如何连接地址线和数据线、片选信号如何产生。

大纲定位

考纲第三章(四)「主存储器」第 3 条:主存和 CPU 之间的连接

要求到什么程度:会做位扩展/字扩展/字位同时扩展,能画出芯片与地址线、数据线、控制线的连接,能写出每片的地址范围。

基本概念

单个存储芯片的容量有限,实际主存系统通过多芯片组合扩展。

芯片规格表示2n×b2n 个存储单元,每单元 b 位)。

例:8K×8 表示 8192 个单元,每单元 8 位,共 64 Kbit。

位扩展

目标:字长不够,扩展每个存储单元的位数(数据位宽)。

方法:多芯片数据线并联,地址线和控制线共享。

:用 4K×4 的芯片,扩展为 4K×8

需要芯片数=84=2 
  • 2 片芯片地址线完全相同(接同一组地址总线)
  • 片 1 的 4 位数据线接数据总线低 4 位(D0D3
  • 片 2 的 4 位数据线接数据总线高 4 位(D4D7
  • 片选 CS 两片相同(同时选中)

位扩展不需要地址译码,所有芯片同时被选中——同一个地址会同时落到所有片上,各片各出一部分位,拼成一个完整的字

图 7.10 DRAM 芯片的扩展

图 7.10 DRAM 芯片的扩展

教材这张图是 8 片 DRAM 位扩展成 64 位双字:同一组行列地址 (i,j) 广播到全部 8 片,DRAM0 出第 0~7 位、DRAM1 出第 8~15 位……DRAM7 出第 56~63 位,由存储控制器拼成一个 64 位双字。

编者注(易混):「位扩展不需译码、所有片同时选中」说的是在字长这一层。但如果上层按字节编址、而每片一次只出 1 字节,那么"某个字节地址落在哪一片"仍然是有答案的——字节地址的低 log2(片数) 位就是片号。这时它等价于按字节交叉的多体结构。两种说法描述的是同一个物理连接,别因为"位扩展不需片选译码"就认为不存在体号/片号。

控制信号怎么接

卷面上画主存–CPU 连接图时,只画地址线和数据线是不够的,下面这几根必须画出来

信号方向接到哪作用
MREQ(访存请求)CPU → 存储器译码器的使能端只有 CPU 真正访存时译码器才输出片选,否则全部芯片不选中
R/WCPU → 各芯片所有芯片的读写控制端决定这次是读还是写
OE(输出使能)CPU → 各芯片芯片输出三态门读操作时打开数据输出,避免总线冲突
WE(写使能)CPU → 各芯片芯片写控制端写操作时有效

译码器使能端为什么要接访存信号:地址总线上随时都有电平,若译码器一直使能,就会在 CPU 并未访存时误选中某片。把 MREQ 接到使能端,等于给译码加了一道"确实要访存"的闸。

如果还要把某段地址空间留给 I/O 或其他芯片,使能端上再串一个由高位地址构成的门电路即可(如 A15A14 A13 有效时才使能)。

为什么高位接译码器、低位接片内

这条规则大家都会背,但反过来会怎样才是真正的考点。

  • 高位接译码器(正确做法):同一片内的地址是连续的。片 0 占 0000H~0FFFH,片 1 占 1000H~1FFFH……地址范围表能写成整齐的区间。
  • 低位接译码器(若这么接):相邻地址会被分配到不同芯片上——地址 0 在片 0、地址 1 在片 1、地址 2 在片 2……每片内部的地址不再连续。

后者其实就退化成了低位交叉编址(见《多体交叉存储器》)。它不是"错",而是另一种设计目标:交叉编址为的是并行访问带宽,顺序编址为的是地址连续、便于分区。题目问"为什么高位接译码器",答的就是"保证每片地址连续"。

字扩展

目标:容量不够,扩展存储单元个数(地址空间)。

方法:多芯片的数据线并联,高位地址线经译码器产生各芯片的片选信号,低位地址线直接连芯片。

:用 4K×8 的芯片,扩展为 16K×8

需要芯片数=16K4K=4 
  • 芯片内部地址需 log2(4K)=12 位,接地址总线低 12 位 A0A11
  • 高 2 位 A12,A13 通过 2-4 译码器产生 4 个片选信号,分别连 4 片芯片的 CS
  • 每片数据线各自连数据总线(位宽相同不需扩展)
地址范围A13A12选中芯片
0000H~0FFFH00芯片 0
1000H~1FFFH01芯片 1
2000H~2FFFH10芯片 2
3000H~3FFFH11芯片 3

字位同时扩展

目标:字长和容量都需要扩展。

方法:先做位扩展(组内并联),再做字扩展(组间译码)。

:用 4K×4 的芯片,扩展为 16K×8

位扩展:84=2 片/组字扩展:16K4K=4 总芯片数=2×4=8 
  • 同组 2 片:地址线相同,数据线分高低 4 位,片选相同
  • 4 组:高 2 位地址经 2-4 译码器产生 4 个片选

地址线分配规律

设芯片有 n 根地址线(对应 2n 个存储单元),主存系统用 m 根地址线:

  • n:直接连各芯片地址线(片内寻址)
  • mn:用于片选译码(选择哪一组/哪一片)

译码方式

全译码

高位地址全部参与译码,每个地址唯一对应一个存储单元。无地址重叠,但译码逻辑较复杂。

部分译码

只用部分高位地址译码,剩余高位悬空。简单但存在地址重叠(多个地址对应同一物理位置)。

线选法

用单根高位地址直接连芯片片选(低电平有效)。最简单,但浪费地址空间,且只允许一次选中一片。

综合计算模板

先把符号钉死,这里错一个量纲后面全错:

符号含义单位
M主存总单元数(按字节编址时即字节数)
w主存位宽
c芯片的单元数(如 4K×4 芯片,c=4K
b芯片的位宽(如 4K×4 芯片,b=4

编者注(易错)c单元数不是字节数4K×4 的芯片容量是 2 KB,但 c=4K=4096,片内地址 log24096=12 位。若把 c 当成 2 KB 去取对数会得到 11 位,差一位,片选和地址范围全盘错

  1. 确定主存总单元数 M 和位宽 w
  2. 确定芯片规格:c 单元 × b
  3. 计算芯片数:(wb)×(Mc)
  4. 计算地址线分配:低 log2c 位接芯片内部地址,高 log2(M/c) 位接译码器
  5. 写出每组芯片的地址范围

反向题:由地址范围倒推(真题最爱的变体)

正向题给芯片求范围,真题更爱反着考:给地址范围,求容量、芯片连接和片选逻辑

:某 8 位机主存地址 16 位(A15A0),按字节编址。某 RAM 区域占地址范围 8000H ~ 9FFFH。 (1) 该区域容量多大?(2) 写出片选逻辑;(3) 若用 2K×8 位芯片实现,如何连接?

(1) 容量 = 9FFFH8000H + 1 = 2000H = 213 B = 8 KB

(2) 把范围两端写成二进制找不变的高位

8000H = 100 0 0000 0000 0000
9FFFH = 100 1 1111 1111 1111
         ↑↑↑
   A15 A14 A13 = 100 固定,A12~A0 跑遍全 0 到全 1

区域内恒有 A15=1, A14=0, A13=0,所以片选(低电平有效):

CS=A15A14A13

(3) 8 KB ÷ 2 KB = 4 片字扩展。每片片内地址 log22K=11 位(A10A0),用 A12A11 接 2-4 译码器区分 4 片,译码器使能端接上面的 A15A14A13。各片范围(每片 0800H):

芯片A12A11地址范围
0008000H ~ 87FFH
1018800H ~ 8FFFH
2109000H ~ 97FFH
3119800H ~ 9FFFH

解题口诀:范围相减加一得容量;两端写二进制,高位不变段就是片选条件,变化段从高到低依次给译码器和片内地址。

考点清单

  • 位扩展:数据线扩宽,不需要译码,芯片同时选中
  • 字扩展:地址空间扩大,高位地址需要译码产生片选
  • 字位同时扩展:先分组(位扩展),组内共享片选,组间译码
  • 总芯片数 = 位扩展倍数 × 字扩展倍数
  • 片内寻址用低位地址,片选用高位地址
  • 全译码无地址重叠,部分译码有地址重叠

真题练习