首页/计算机组成原理/存储器层次结构/主存储器扩展 🔗 在 Obsidian 中打开
计算机组成原理 · 存储器层次结构

主存储器扩展

重要度 ⭐⭐存储器层次结构存储扩展位扩展字扩展字位同时扩展存储器
速查
单个芯片容量(字数 $\times$ 位数)常不满足 CPU 的字长寻址空间要求。用多片组合扩展:位扩展加宽字长、字扩展加深容量、字位同时扩展两者兼得。芯片数 = 字长比 $\times$ 字数比。

速查

项目
位扩展增加字长,芯片地址线并联
字扩展增加字数,用片选信号区分
字位同时扩展先位扩展再字扩展

核心概念

为什么需要存储器扩展?

单个存储芯片的容量(字数 $\times$ 位数)往往不能满足 CPU 对字长寻址空间的要求。存储器扩展就是用多个小容量芯片组合成满足需求的大容量存储器。

三种扩展方式

1. 位扩展(位并联)

目的:增加存储器的字长(数据位数),不增加字数。

原理:将多个芯片的地址线、片选线、读/写控制线并联,每个芯片负责数据总线的一部分位。

典型例题:用 8 片 $1K\times1$ 位的芯片组成 $1K\times8$ 位的存储器。

  • 地址线:所有芯片共用 A₀~A₉(10 根,寻址 1K)
  • 片选线:所有芯片共用同一 CS 信号
  • 数据线:每片提供 1 位,8 片共 8 位
  • 需要芯片数 = 目标字长 / 芯片字长 $= 8/1 = 8$ 片

2. 字扩展(字串联 / 地址串联)

目的:增加存储器的字数(寻址空间),不增加字长。

原理:各芯片的数据线、地址线、读/写控制线并联,但用高位地址线经译码器产生不同的片选信号,使同一时刻只有一个芯片被选中。

典型例题:用 4 片 $1K\times8$ 位的芯片组成 $4K\times8$ 位的存储器。

  • 数据线:所有芯片共用 D₀~D₇
  • 低位地址线 A₀~A₉:所有芯片并联(片内寻址 1K)
  • 高位地址线 A₁₀~A₁₁:接 2-4 译码器,产生 4 个片选信号
  • 需要芯片数 = 目标字数 / 芯片字数 $= 4K/1K = 4$ 片
芯片片选信号A₁₁A₁₀地址范围
芯片0CS₀000000H~03FFH
芯片1CS₁010400H~07FFH
芯片2CS₂100800H~0BFFH
芯片3CS₃110C00H~0FFFH

3. 字位同时扩展

目的:同时增加字数和字长。

原理:先做位扩展(每组内芯片并联增加字长),再做字扩展(多组之间用译码器选组增加字数)。

典型例题:用 $1K\times4$ 位的芯片组成 $4K\times8$ 位的存储器。

  • 每组需要 $\frac{8}{4}=2$ 片做位扩展 → 得到 $1K\times8$ 位
  • 共需要 $4K/1K = 4$ 组做字扩展
  • 总共需要 $2\times4 = 8$ 片

关键定义表格

概念说明
位扩展增加字长,不增加字数;芯片地址线并联,数据线各占一位
字扩展增加字数,不增加字长;低位地址并联,高位地址译码选片
字位同时扩展先位扩展成组,再字扩展成整体
片选信号 CS控制芯片是否被激活的信号,低电平有效
地址译码器将高位地址线译码为多个片选信号的组合逻辑电路
存储器容量= 字数 $\times$ 字长,单位:位(bit) 或 字节(Byte)

手算示例

例1:位扩展计算

题目:用 $16K\times1$ 位的芯片组成 $16K\times8$ 位的存储器,需要多少片?

:字长比 $= 8/1 = 8$;需要 8 片;地址线 14 根(2¹⁴=16K),所有芯片并联;每片提供 1 位数据。

例2:字扩展计算

题目:用 $8K\times8$ 位的芯片组成 $32K\times8$ 位的存储器,需要多少片?高位地址如何分配?

:字数比 $= 32K/8K = 4$,需要 4 片;低位地址 A₀~A₁₂(13 根,寻址 8K),高位地址 A₁₃~A₁₄(2 根)接 2-4 译码器。

例3:字位同时扩展

题目:用 $4K\times4$ 位的芯片组成 $16K\times8$ 位的存储器,求芯片总数。

:位扩展每组 $\frac{8}{4}=2$ 片 → $4K\times8$ 位;字扩展 $16K/4K=4$ 组;总芯片数 $= 2\times4 = 8$ 片

例4:地址范围计算

题目:某系统用 2 片 $4K\times8$ 位 ROM 和 2 片 $4K\times8$ 位 RAM 组成 $16K\times8$ 位存储器,ROM 从 0000H 开始。

芯片A₁₃A₁₂起始结束类型
芯片0000000H0FFFHROM
芯片1011000H1FFFHROM
芯片2102000H2FFFHRAM
芯片3113000H3FFFHRAM

常见考法

  1. 计算芯片数量:给定目标容量和芯片规格,求最少需要多少片
  2. 画连接图:给出芯片型号和目标容量,画出地址线、数据线、片选线
  3. 地址范围计算:给定连接方式,求每个芯片的地址范围
  4. 地址译码器设计:给定地址范围,反推译码器连接
  5. 与 CPU 的配合:考虑 CPU 数据总线、地址总线宽度与存储器的匹配

易错点

必记
  1. 混淆位扩展和字扩展方向:位扩展"加深"字长,字扩展"加宽"字数
  2. 地址范围计算时忘记十六进制转换
  3. 片选信号有效电平:注意低有效(CS̅)还是高有效
  4. 高位地址线起始位:芯片有 K 位片内地址,则高位从第 K 位开始
  5. 字位同时扩展总片数 = 字长比 $\times$ 字数比,不是两者之和
  6. 地址重叠:译码器输入有未用地址线,可能导致地址重叠

核心结论

  1. 位扩展只增加字长,所有芯片地址并联、数据分位
  2. 字扩展只增加字数,低位地址并联,高位地址译码选片
  3. 字位同时扩展 = 先位扩展成组,再字扩展选组
  4. 芯片数 = 字长比 $\times$ 字数比
  5. n 位地址线可寻址 2ⁿ 个存储单元
  6. k 根线通过译码器最多可选中 2ᵏ 个芯片
  7. 存储器扩展的核心是地址分配片选逻辑设计

记忆卡片

位扩展增加字数还是字长?
字长(数据位数);地址空间不变。
2K×4 → 8K×16 需几片?
字长比 4 × 字数比 4 = 16 片
字扩展时高位地址作用?
接地址译码器,产生片选信号 CS̅。
16 位地址总线最大空间?
2¹⁶ = 64KB(按字节编址)。
字位同时扩展顺序?
芯片总数相同,但先位成组再字选组更清晰。

交互动画 · 扩展方式与芯片数

选择一种扩展方式,查看芯片排布
芯片数 = 字长比 × 字数比
点击上方按钮开始
每个橙色块代表一片芯片;位扩展时芯片横向并排(共享地址、数据分位),字扩展时纵向堆叠(译码选片),字位同时扩展时先成组再选组。

相关知识点

sram-and-dram memory-expansion

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。