存储器与 CPU 的连接

这一节把前三节合成一道题:给定 CPU 的地址线和数据线、给定可用的芯片规格,画出连接图并写出地址分配表。

它没有新知识点,只有一套固定步骤。 题目所有的难点都在前三节已经处理过:容量算法在 3.3.2,片选和地址范围在 3.3.3。这里要做的是把步骤走完并检查一遍。

机制

六步连接法

第一步:确定编址单位与总容量。 从数据总线宽度定存储字长,从地址线根数定单元数。RAM 区和 ROM 区分别算,题目通常会给各自的地址范围。

第二步:选芯片、定片数。 按 3.3.2 的公式算出位扩展系数与字扩展系数,并用两条路互相自检。

第三步:分配地址空间,列出地址分配表。 按 3.3.3 的模板写出每片(或每组)的片选码与起止地址。这张表是全题的骨架,先写表再画图。

第四步:连地址线。

  • 低 位( 单片单元数)直接接每片的地址引脚
  • 高位进译码器,译码输出作片选
  • 同一组内各片的地址引脚完全并联

第五步:连数据线。

  • 位扩展的各片分段接不同的数据线(第 0 片接 ,第 1 片接 ,依此类推)
  • 不同组的对应片并联在同一段数据线上,靠片选错开

第六步:连控制线。

  • RAM:读线和写线都接(、 或统一的 )
  • ROM 只接读线,不接写线
  • 片选 接译码器输出

四条检查

画完必须回头查这四项,它们对应四类典型错误:

检查项通不过说明什么
数据线是否接满位扩展系数算错,字长没凑够
地址是否冲突两片的片选可能同时有效,会造成总线竞争
地址范围是否覆盖题目要求字扩展系数算错,或片选码写错
ROM 是否误接了写线概念性错误

“地址冲突”和”地址重叠”的区别见 3.3.3:重叠可以接受,冲突不行。

速度匹配

CPU 的读写时序有固定的节拍,而存储芯片的存取时间未必跟得上。两种处理方式:

插入等待周期:CPU 在总线周期中插入若干个等待状态(Wait State),由存储器通过 READY / WAIT 信号通知”数据还没好”。这是同步总线上的标准做法,见 第 6 章。

换更快的芯片或加 Cache:前者提高单次速度,后者提高平均速度。只有后者是本章意义上的”降低延迟”(见 3.1.2)。

驱动能力也是一个现实约束:一根地址线要驱动几十片芯片时需加驱动器/缓冲器。408 只要求知道有这回事,不做计算。

边界

RAM 与 ROM 在同一个地址空间里共存是常态,不是特例。 典型布局是低地址段放 ROM(上电后 CPU 从固定地址取第一条指令,那里必须是非易失的),高地址段放 RAM。这与 OS 1.5 操作系统引导中”CPU 复位后从 ROM 中的 BIOS 开始执行”是同一件事的硬件侧描述。

位扩展的各片”共用片选”,所以它们在地址分配表里占同一行。 地址分配表的行数 = 组数,不是片数。这是列表时最常见的错误。

译码器的使能端也要接地址线。 一个 2-4 译码器只有 2 根输入,但若高位地址还有多余的根数,它们必须接到译码器的使能端,否则就变成了部分译码、产生地址重叠。题目若要求”全译码”,检查使能端是否用满是必查项。

存储器与 CPU 的连接题不涉及刷新。 刷新由存储器控制器自动完成,不出现在 CPU 与芯片的连接图上(见 3.2.1)。

对照速查

线接法
低位地址线直接并联到各片地址引脚,根数 单片单元数
高位地址线进译码器(含使能端),输出作片选
数据线位扩展分段,组间并联
读线RAM、ROM 都接
写线只接 RAM
片选译码器输出
步骤结论
1编址单位 + 总容量
2片数 = 位扩展系数 × 字扩展系数
3先写地址分配表
4~6地址线 / 数据线 / 控制线
查数据线接满、无地址冲突、覆盖完整、ROM 不接写线

考点

  • 六步固定流程,其中第三步的地址分配表要先于连接图写出
  • 低位地址接芯片、高位进译码器,译码器使能端也要用满才算全译码
  • 位扩展分段接数据线并共用片选,地址分配表按组列行
  • ROM 不接写线
  • 地址冲突是错误,地址重叠不是
  • 速度不匹配靠插入等待周期(READY 信号)解决
  • 刷新不出现在连接图上

链接