位扩展、字扩展与片选逻辑,一文搞定存储器设计题
摘要/导语
上一期我们聊了如何通过双端口和多模块技术让内存跑得更快(<点击查看上期>)。但今天我们要解决一个更现实的问题:如果单颗内存芯片容量太小,或者位数不够,该怎么办?
就像乐高积木一样,我们需要把小的存储芯片"拼"起来,才能满足CPU的需求。这就是本期要讲的**"主存与CPU的连接"------位扩展与字扩展**。这可是408考研和设计题的重灾区,文末附带真题实战,建议收藏反复看!
🚀 正文内容
🔍 第一部分:解剖一颗存储器芯片
在开始"拼装"之前,我们先来看看一颗标准的存储器芯片内部长什么样。别被复杂的电路图吓倒,它其实就是一个精密的数据仓库 。
我们可以把它拆解为四个核心部门:
- 存储矩阵(核心库房):这是真正存放0和1的地方,通常排列成行和列的矩阵形式。
- 译码驱动电路(导航员):CPU发来地址后,它负责把地址翻译成具体的"行号"和"列号",精准定位到某一个存储单元。
- 读写电路(搬运工):负责把数据写进去,或者把数据读出来送到数据线上。
- 外部引脚(对外接口) :这是芯片与CPU沟通的桥梁,主要包括:
- 地址线:告诉芯片我要找哪个房间。
- 数据线:传输实际的数据内容。
- 片选线 ( C S ‾ \overline{CS} CS) :相当于芯片的"总开关",只有它被激活(通常是低电平),芯片才工作。
- 读写控制线 ( W E ‾ \overline{WE} WE / O E ‾ \overline{OE} OE) :指挥是"存入"还是"取出"。
💡 避坑指南:
很多同学做题时容易忽略片选线。记住:不管地址对不对其,只要片选信号没给对,这颗芯片就是"装死"状态,数据总线处于高阻态,绝不干扰别人。
📏 第二部分:位扩展 ------ "加宽马路"
场景 :假设你的CPU是32位的(一次能处理32bit数据),但你手里只有8位的存储芯片(比如 1 K × 8 1K \times 8 1K×8 位)。
问题 :一次只能传8位,CPU得传4次才能凑齐32位,太慢了!
对策 :位扩展。
怎么做?
这就好比原本只有一条车道的马路,现在要扩建成四车道。
- 我们需要 4片 1 K × 8 1K \times 8 1K×8 的芯片。
- 地址线并联:大家共用一套地址线(因为都是找第几个房间,房间号是一样的)。
- 控制线并联:读写命令大家一起听。
- 数据线串联(拼接) :第一片负责低8位,第二片负责次低8位......以此类推,拼成32位宽的数据总线。

(这里展示的是8片8K x 1位的扩展成8K x 8位)
🧠 记忆口诀:
位扩展,地址同,片选同,数据分头走。
🏢 第三部分:字扩展 ------ "加盖楼层"
场景 :你的CPU有16根地址线(寻址范围64K),但你手里只有1K容量的芯片。
问题 :地址太多,芯片太少,根本住不下!
对策 :字扩展。
怎么做?
这就好比地基面积不变(数据线宽度不变),但是往高处盖楼,增加房间数量。
- 我们需要 64片 1 K × N 1K \times N 1K×N 的芯片(假设数据位宽匹配)。
- 数据线并联:大家都连在同一组数据总线上(因为每次只选其中一片工作)。
- 低位地址并联 :芯片内部的10根地址线( 2 10 = 1 K 2^{10}=1K 210=1K)全部连在一起,用来在各自芯片内部找房号。
- 高位地址做片选 :剩下的6根地址线( 16 − 10 = 6 16-10=6 16−10=6),通过译码器 变成64个片选信号,分别连到64个芯片的 C S ‾ \overline{CS} CS 端。
这里就涉及到了两种片选方法:
-
线选法 :直接用某一根高位地址线连到一个芯片的片选端。

- 优点:简单,不用译码器。
- 缺点:浪费地址空间,容易冲突(比如A15选了芯片1,那A15=1的所有地址都归芯片1,中间会有大量空洞)。
-
译码片选法(重点!) :使用3:8译码器或2:4译码器。

- 优点:地址连续,不浪费空间,是正规军做法。
- 关键 :要学会分析地址空间,算出每片芯片的起始和结束地址。
💡 避坑指南:
字扩展的核心在于**"分时工作"**。同一时刻,只有一片芯片的片选信号有效,其他芯片都在"睡觉"。所以它们的数据线可以并联在一起,不会打架。
🧩 第四部分:字位同时扩展 ------ "既加宽又加盖"
场景 :这是最真实的情况。CPU是32位,寻址64K;你手里只有 1 K × 8 1K \times 8 1K×8 的小芯片。
对策:既要位扩展(凑够32位),又要字扩展(凑够64K容量)。
计算步骤(考试必考):
- 算总数 :总容量 / 单片容量 = 所需芯片总数。
- ( 64 K × 32 ) / ( 1 K × 8 ) = 64 × 4 = 256 (64K \times 32) / (1K \times 8) = 64 \times 4 = 256 (64K×32)/(1K×8)=64×4=256 片。
- 分组 :
- 位方向 :需要4片并联( 32 / 8 = 4 32/8=4 32/8=4)组成一组,这就叫"一个存储体"。
- 字方向 :需要64组( 64 K / 1 K = 64 64K/1K=64 64K/1K=64)进行串联。
- 连线逻辑 :
- 组内(位扩展):地址线、片选线并联,数据线分开。
- 组间(字扩展):地址线低位并联,高位经译码器接各组的公共片选端,数据线全部并联。
🎓 课后实战:408真题演练
【题目】
某计算机主存容量为 64 K B 64KB 64KB,其中 R O M ROM ROM 区为 4 K B 4KB 4KB,其余为 R A M RAM RAM 区。按字节编址。现有 2 K × 8 2K \times 8 2K×8 位的 R O M ROM ROM 芯片和 4 K × 4 4K \times 4 4K×4 位的 R A M RAM RAM 芯片。若采用位扩展 和字扩展 相结合的方式设计该存储器,则需要 R O M ROM ROM 芯片和 R A M RAM RAM 芯片的数量分别是多少?
【解析】
-
分析需求:
- 总容量: 64 K B 64KB 64KB。
- R O M ROM ROM 区: 4 K B 4KB 4KB。
- R A M RAM RAM 区: 64 K B − 4 K B = 60 K B 64KB - 4KB = 60KB 64KB−4KB=60KB。
- 按字节编址 → \rightarrow → 数据线宽度为 8位。
-
计算 ROM 芯片数:
- 需求: 4 K B 4KB 4KB(即 4 K × 8 4K \times 8 4K×8 位)。
- 现有: 2 K × 8 2K \times 8 2K×8 位。
- 位宽已满足(都是8位),只需字扩展。
- 数量 = 4 K / 2 K = 2 4K / 2K = 2 4K/2K=2 片。
-
计算 RAM 芯片数:
- 需求: 60 K B 60KB 60KB(即 60 K × 8 60K \times 8 60K×8 位)。
- 现有: 4 K × 4 4K \times 4 4K×4 位。
- 先位扩展 :目标8位,现有4位 → \rightarrow → 需要2片并联( 4 × 2 = 8 4 \times 2 = 8 4×2=8位)。这2片构成一组(容量 4 K × 8 4K \times 8 4K×8)。
- 再字扩展 :目标 60 K 60K 60K,每组 4 K 4K 4K → \rightarrow → 需要 60 / 4 = 15 60 / 4 = 15 60/4=15 组。
- 总数量 = 15 组 × 2 片/组 = 30 15 \text{组} \times 2 \text{片/组} = 30 15组×2片/组=30 片。
【答案】
ROM芯片 2 片,RAM芯片 30 片。