主存容量的扩展

单片存储芯片的容量和位宽通常都达不到要求,于是要用多片拼。拼的方向只有两个:把字长拼够(位扩展),和把单元数拼够(字扩展)。两个方向可以同时用。

整节只有一个公式,难的从来不是公式,而是公式里那个”总容量”该怎么算——它取决于编址单位,而编址单位常常不在题面上,要从数据总线宽度反推。本节所有的”好乱”都来自这一处。

机制

唯一的公式

总片数目标存储器的总容量单片容量目标字长单片字长位扩展系数目标单元数单片单元数字扩展系数

两种算法必然一致,用哪个都行;同时算一遍是最好的自检。

位扩展:拼字长

多片并联,共用地址线、共用片选、共用读写控制线,只把数据线分段接出。

  • 每片提供数据的一部分,所有片必须同时工作
  • 地址线根数不变,单元数不变
  • 例:用 位芯片构成 位 → 8 片,地址线仍 13 根

“共用片选”是位扩展的标志,也是它区别于多体交叉的关键(见 3.2.4)。

字扩展:拼单元数

多片分组,各组数据线并联在同一组数据总线上,靠片选信号区分谁在工作。

  • 每片提供一段连续地址
  • 字长不变,地址线根数增加,增加的高位地址进译码器产生片选
  • 例:用 位芯片构成 位 → 4 片,地址线从 14 根增到 16 根,高 2 位译码出 4 个片选

任何时刻只有一片(或一组)被选中,这正是字扩展与位扩展在电气上的分界。

字位同时扩展

先按位扩展凑够字长,得到一个”组”;再按字扩展凑够单元数。

组内片数目标字长单片字长组数目标单元数单片单元数

同一组内的各片共用片选,不同组之间靠片选区分。

flowchart TB
    subgraph G0["组 0(低地址段)· 共用 CS0"]
        A0["片 D7~D0"] --- A1["片 D15~D8"] --- A2["片 D23~D16"] --- A3["片 D31~D24"]
    end
    subgraph G1["组 1(次一段)· 共用 CS1"]
        B0["片"] --- B1["片"] --- B2["片"] --- B3["片"]
    end
    DEC["高位地址译码器<br/>产生 CS0 / CS1 / …"] --> G0
    DEC --> G1
    NOTE["组内 = 位扩展(拼字长)<br/>组间 = 字扩展(拼单元数)"]

    classDef n fill:#d6eaf8,stroke:#2874a6
    class NOTE,DEC n

边界

疑问点:给了地址总线和数据总线根数就能求片数,地址复用不参与计算

题目:设 CPU 地址总线有 24 根,数据总线有 32 根,用 位的 RAM 芯片构成该机的主存储器,则该机主存最多需要多少片这样的存储芯片?(选项:256 / 512 / 64 / 128)

第一步:从数据总线定字长。 数据总线 32 根 → 存储字长 32 位 = 4 B,也就是每个地址对应 4 B(按字编址)。 第二步:从地址总线定单元数。 24 根 → 个存储单元。 第三步:总容量。 。 第四步:单片容量。 位 。 第五步:相除。 片。

用位扩展 × 字扩展再算一遍自检: 位扩展系数 位位 片一组;字扩展系数 组。 ✅ 两条路一致。

地址复用在这道题里完全不出现。 单片 需要 19 根地址引脚,如果它是 DRAM,这 19 位会分两次送、只占 10 根引脚——但那是芯片内部怎么接线的问题,与”CPU 有 24 根地址线所以地址空间是 “没有任何关系。 凡是题目给的是”CPU 地址总线根数”,就直接用它算地址空间,不要去折半或加倍。

边界辨析:编址单位没给时,从数据总线宽度反推

上一题真正的难点在第一步:题面从头到尾没说”按字节编址”还是”按字编址”。 如果按字节编址,总容量就是 ,片数 片——32 不在选项里,这反过来确认了题意是按字编址。

一般规则: 题目明说按字节/按字编址 → 照说的算。 题目没说,但给了数据总线宽度 → 按字编址,每个地址对应一个存储字(宽度 = 数据总线宽度)。这是”存储单元”的原始定义,见 3.2.3。 两种算法都算一遍,看哪个落在选项里 —— 选择题里这一招永远有效,且能当场暴露自己对编址单位的假设。

这也是这类题让人觉得”乱”的真正原因:乱的不是位扩展和字扩展,是题面省略了编址单位。

位扩展不增加地址线,字扩展才增加。 一道题问”扩展后地址线增加几根”,只数字扩展系数的对数。

片选来自高位地址,芯片地址引脚接低位地址。 单片 占 19 位,CPU 有 24 位,剩下的高 5 位进译码器,恰好产生 32 个片选——与上面算出的 32 组吻合。这个吻合不是巧合,它就是字扩展系数。

“最多需要多少片”问的是把地址空间填满。 若题目问”实际用了多少片”,要看给定的实际容量。

对照速查

位扩展字扩展
拼什么字长单元数
地址线不变增加
片选共用(同时工作)分别产生(同时只选中一组)
数据线分段接出并联
系数目标字长 / 单片字长目标单元数 / 单片单元数
步骤做什么
1从数据总线定存储字长(= 编址单位,若题目没另说)
2从地址总线定单元数
3相乘得总容量
4除以单片容量得片数
5用 位扩展系数 × 字扩展系数 自检

考点

  • 片数 = 总容量 / 单片容量 = 位扩展系数 × 字扩展系数,两条路必须一致
  • 位扩展共用片选、地址线不变;字扩展靠片选区分、地址线增加
  • 编址单位没给就从数据总线宽度反推(按字编址)
  • 地址复用是芯片内部的事,不进入片数计算
  • 单片地址位数接低位,剩余高位进译码器产生片选,片选个数 = 字扩展组数
  • “最多需要多少片”= 把地址空间填满

链接