芯片规格与扩展思路

存储芯片的规格写成 字数 × 字长。例如,8K×18K\times1 位表示有 8K8K 个存储单元,每个单元存储 1 位;这里 1K=210=10241K=2^{10}=1024。

  • 位扩展:字数够了,但每个字的位数不够。
  • 字扩展:每个字的位数够了,但存储单元数量不够。
  • 字位同时扩展:字数与字长都不够。

重点: 横着拼位,竖着拼字。位扩展增加字长,字扩展增加地址空间。

位扩展法

例:8 片 8K × 1 位芯片组成 8K × 8 位存储器

地址数量仍为 8K8K,每个地址的数据由 1 位扩展到 8 位,因此需要:

N位=目标字长芯片字长=81=8 片N_{\text{位}}=\frac{\text{目标字长}}{\text{芯片字长}} =\frac{8}{1}=8\text{ 片}

图 3.12:8 片 8K × 1 位芯片的位扩展连接示意图

总线连接与工作方式

  • 地址线并联:8K=2138K=2^{13},所以所有芯片共用 13 根地址线 A0∼A12A_0\sim A_{12},访问相同的片内地址。
  • 片选线、读/写控制线并联:8 片芯片同时被选中,并同时读或写。
  • 数据线分开连接:每片只负责系统数据总线 D0∼D7D_0\sim D_7 中的一位。按图中的连接,芯片①接 D7D_7,芯片②接 D6D_6,依次到芯片⑧接 D0D_0。

例如,CPU 访问地址 100 时,8 片芯片都访问各自的第 100 号单元,各提供 1 位,合起来就是一个完整的 8 位数据字。

位扩展:地址不变,数据位数增加;多片芯片同时工作。

字扩展法

例:4 片 16K × 8 位芯片组成 64K × 8 位存储器

每个字已经有 8 位,只需把字数由 16K16K 扩展为 64K64K,因此需要:

N字=目标字数芯片字数=64K16K=4 片N_{\text{字}}=\frac{\text{目标字数}}{\text{芯片字数}} =\frac{64K}{16K}=4\text{ 片}

图 3.13:4 片 16K × 8 位芯片的字扩展连接示意图

地址线、片选与数据线

单片芯片有 16K=21416K=2^{14} 个单元,需要 14 根片内地址线;整个存储器有 64K=21664K=2^{16} 个单元,需要 16 根地址线。因此地址分为:

A15,A14⏟高 2 位:片选+A13∼A0⏟低 14 位:片内地址\underbrace{A_{15},A_{14}}_{\text{高 2 位:片选}} \quad+\quad \underbrace{A_{13}\sim A_0}_{\text{低 14 位:片内地址}}
  • 低 14 位地址线 A0∼A13A_0\sim A_{13} 并联到所有芯片,选择片内的具体单元。
  • 高 2 位地址线 A15,A14A_{15},A_{14} 送入 2—4 译码器,其 4 个输出分别连接 4 片芯片的片选端。
  • 数据线共用:各片的 8 根数据线对应连接到 D0∼D7D_0\sim D_7。
  • 读/写控制线并联:本例正常访问时只选中一片,由它完成读写。

图中的 CS‾\overline{\mathrm{CS}} 表示片选信号低电平有效。

各芯片的地址分配

以下地址均为 16 位二进制地址;空格只用于每 4 位分组,十六进制地址以 H 结尾。

A15A14A_{15}A_{14} 选中芯片 最低地址(二进制) 最高地址(二进制) 地址范围(十六进制)
00 ① 0000 0000 0000 0000 0011 1111 1111 1111 0000H~3FFFH
01 ② 0100 0000 0000 0000 0111 1111 1111 1111 4000H~7FFFH
10 ③ 1000 0000 0000 0000 1011 1111 1111 1111 8000H~BFFFH
11 ④ 1100 0000 0000 0000 1111 1111 1111 1111 C000H~FFFFH

每片覆盖 16K16K 个地址。求最低地址时,片内地址的低 14 位全取 0;求最高地址时,低 14 位全取 1。

字扩展:数据位数不变,地址空间增加;高位地址选片,低位地址选单元。

字位同时扩展

例:8 片 16K × 4 位芯片组成 64K × 8 位存储器

先用位扩展把“每个字有几位”补够,再用字扩展把“有多少个字”补够。

图 3.14:8 片 16K × 4 位芯片的字位同时扩展及 CPU 连接图

第一步:位扩展。 每组用 2 片 16K×416K\times4 位芯片并联,组成 16K×816K\times8 位:

N每组=84=2 片N_{\text{每组}}=\frac{8}{4}=2\text{ 片}

同组两片访问相同地址,分别负责 D0∼D3D_0\sim D_3 和 D4∼D7D_4\sim D_7,必须同时被选中,才能共同提供 8 位数据。

第二步:字扩展。 再把 4 组 16K×816K\times8 位组合为 64K×864K\times8 位:

N组=64K16K=4 组,N总=4×2=8 片N_{\text{组}}=\frac{64K}{16K}=4\text{ 组}, \qquad N_{\text{总}}=4\times2=8\text{ 片}

地址线与片选怎么接

地址仍分为 高 2 位组号 + 低 14 位组内地址:

  • A0∼A13A_0\sim A_{13} 并联到全部 8 片芯片,选择片内单元。
  • A15,A14A_{15},A_{14} 送入 2—4 译码器,每个输出同时连接一组中两片芯片的片选端。
  • 各组的两片分别连接数据总线的低 4 位与高 4 位;各组之间共用 D0∼D7D_0\sim D_7。读/写控制线并联。

重点: 同一时刻选中的是“一组两片芯片”。组内两片同时工作,组间只选一组。

A15A14A_{15}A_{14} 选中组 同时选中的芯片 地址范围
00 第 1 组 ①、② 0000H~3FFFH
01 第 2 组 ③、④ 4000H~7FFFH
10 第 3 组 ⑤、⑥ 8000H~BFFFH
11 第 4 组 ⑦、⑧ C000H~FFFFH

具体地址示例

假设 CPU 访问地址 80D6H,对应的 16 位二进制地址是 1000 0000 1101 0110,拆开为:

10⏟高 2 位:第 3 组00000011010110⏟低 14 位:组内地址\underbrace{10}_{\text{高 2 位:第 3 组}} \quad \underbrace{00000011010110}_{\text{低 14 位:组内地址}}
  • 高 2 位为 10,译码器选中第 3 组,即芯片⑤和⑥。
  • 低 14 位为 00000011010110,即片内地址 00D6H(十进制 214)。
  • 芯片⑤和⑥同时访问各自的第 214 号单元,分别提供 4 位,CPU 得到完整的 8 位数据。

因此,高位地址决定访问哪一组,低位地址决定组内哪个单元;组内通过位扩展凑足字长。

对比与芯片数公式

比较项 位扩展 字扩展 字位同时扩展
扩展内容 字长 字数 字数与字长
图中示例 8K×1→8K×88K\times1\to8K\times8 16K×8→64K×816K\times8\to64K\times8 16K×4→64K×816K\times4\to64K\times8
芯片数量 8 片 4 片 4 组,每组 2 片,共 8 片
地址线 所有芯片并联 低位并联,高位用于片选 低位并联,高位用于组选
数据线 各片负责不同数据位 各片共用数据总线 组内分担数据位,组间共用总线
同时选中 全部 8 片 1 片 1 组中的 2 片
本例是否需要片选译码器 不需要 需要 需要

用 aK×baK\times b 位芯片组成 cK×dcK\times d 位存储器,当字数和字长都能按整数倍扩展时:

N=目标字数芯片字数×目标字长芯片字长=ca×db\boxed{ N=\frac{\text{目标字数}}{\text{芯片字数}} \times\frac{\text{目标字长}}{\text{芯片字长}} =\frac{c}{a}\times\frac{d}{b} }

其中,d/bd/b 是每组做位扩展需要的片数,c/ac/a 是做字扩展需要的组数。本例:

N=64K16K×84=4×2=8 片N=\frac{64K}{16K}\times\frac{8}{4} =4\times2=8\text{ 片}

记忆时抓住两点:横着拼位,同组同时选中;竖着拼字,高位地址选组。