计算机组成原理 | 位扩展、字扩展与片选逻辑

位扩展、字扩展与片选逻辑,一文搞定存储器设计题

摘要/导语

上一期我们聊了如何通过双端口和多模块技术让内存跑得更快(<点击查看上期>)。但今天我们要解决一个更现实的问题:如果单颗内存芯片容量太小,或者位数不够,该怎么办?

就像乐高积木一样,我们需要把小的存储芯片"拼"起来,才能满足CPU的需求。这就是本期要讲的**"主存与CPU的连接"------位扩展字扩展**。这可是408考研和设计题的重灾区,文末附带真题实战,建议收藏反复看!


🚀 正文内容

🔍 第一部分:解剖一颗存储器芯片

在开始"拼装"之前,我们先来看看一颗标准的存储器芯片内部长什么样。别被复杂的电路图吓倒,它其实就是一个精密的数据仓库

我们可以把它拆解为四个核心部门:

  1. 存储矩阵(核心库房):这是真正存放0和1的地方,通常排列成行和列的矩阵形式。
  2. 译码驱动电路(导航员):CPU发来地址后,它负责把地址翻译成具体的"行号"和"列号",精准定位到某一个存储单元。
  3. 读写电路(搬运工):负责把数据写进去,或者把数据读出来送到数据线上。
  4. 外部引脚(对外接口) :这是芯片与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 端。

这里就涉及到了两种片选方法:

  1. 线选法 :直接用某一根高位地址线连到一个芯片的片选端。

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

    • 优点:地址连续,不浪费空间,是正规军做法。
    • 关键 :要学会分析地址空间,算出每片芯片的起始和结束地址。

💡 避坑指南:

字扩展的核心在于**"分时工作"**。同一时刻,只有一片芯片的片选信号有效,其他芯片都在"睡觉"。所以它们的数据线可以并联在一起,不会打架。


🧩 第四部分:字位同时扩展 ------ "既加宽又加盖"

场景 :这是最真实的情况。CPU是32位,寻址64K;你手里只有 1 K × 8 1K \times 8 1K×8 的小芯片。

对策:既要位扩展(凑够32位),又要字扩展(凑够64K容量)。

计算步骤(考试必考):

  1. 算总数 :总容量 / 单片容量 = 所需芯片总数。
    • ( 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 片。
  2. 分组
    • 位方向 :需要4片并联( 32 / 8 = 4 32/8=4 32/8=4)组成一组,这就叫"一个存储体"。
    • 字方向 :需要64组( 64 K / 1 K = 64 64K/1K=64 64K/1K=64)进行串联。
  3. 连线逻辑
    • 组内(位扩展):地址线、片选线并联,数据线分开。
    • 组间(字扩展):地址线低位并联,高位经译码器接各组的公共片选端,数据线全部并联。

🎓 课后实战: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 芯片的数量分别是多少?

【解析】

  1. 分析需求

    • 总容量: 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位。
  2. 计算 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 片。
  3. 计算 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 片。


相关推荐
小烤箱1 小时前
ROS2 学习资源与学习方法
学习·ros·学习方法·ros2
casual~2 小时前
十六届蓝桥杯国赛个人题解
经验分享·学习·算法·蓝桥杯
小陈phd2 小时前
多模态大模型学习笔记(四十六)——图像-文本生成(Image-Text Generation):跨模态创作与语义互通
笔记·学习·计算机视觉
噜噜噜阿鲁~2 小时前
python学习笔记 | 11.4、面向对象高级编程-定制类
笔记·python·学习
爱喝水的鱼丶2 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第五篇:SAP 报表多格式输出:Excel/PDF 批量导出功能实现
学习·性能优化·pdf·excel·sap·abap
凯尔萨厮2 小时前
Hibernate(学习笔记)
笔记·学习·hibernate
lunzi_08262 小时前
【学习笔记】《Python编程 从入门到实践》第5章:if语句、条件测试与列表处理实战
笔记·python·学习
仙俊红2 小时前
rocketmq学习
大数据·学习·rocketmq
子一!!3 小时前
spring基础学习
java·学习·spring