连接原理

主存与 CPU 之间只有三组线:数据总线、地址总线、控制总线。这一节的内容可以压缩成四句话,但这四句话各自锚定了一个后面反复要用的量——数据线定字长和带宽,地址线定地址空间,控制线定时序。

把”哪根线决定哪个量”钉死,是后面三节全部计算题的前提。

机制

三类总线各定一个量

flowchart LR
    CPU["CPU"]
    MEM["主存<br/>MAR / MDR / 存储体"]
    CPU -- "地址总线(单向)<br/>根数 → 地址空间上限" --> MEM
    CPU <-- "数据总线(双向)<br/>根数 → 存储字长、带宽" --> MEM
    CPU -- "控制总线<br/>读/写、时序、完成时刻" --> MEM

    classDef m fill:#fdebd0,stroke:#e67e22
    class MEM m

① 主存储器通过数据总线、地址总线和控制总线与 CPU 连接。

② 数据总线的位数与工作频率的乘积,正比于数据传输速率。

③ 地址总线的位数决定了可寻址的最大内存空间。最大地址空间地址线根数每个地址对应的位数④ 控制总线(读/写)指出总线周期的类型和本次输入/输出操作完成的时刻。

三条线里地址总线是单向的(CPU → 主存),数据总线双向,控制总线中各根信号方向不一。

疑问点:第二条为什么是"正比于"而不是"等于"

写成”正比”而不是”等于”,是因为等号只在一个理想条件下成立:每个时钟周期恰好传送一次数据,且总线始终在传数据。

现实中至少有三个因素让它偏离等号: 一是并非每个周期都在传数据——一次总线事务里还有传地址、传命令、等待存储器准备数据的周期(见 3.2.4 的突发传送模板,17 拍里只有 8 拍在传数据)。 二是一个周期可能传不止一次——DDR 在上升沿和下降沿各传一次,系数是 2 而不是 1。 三是协议本身有开销——握手、仲裁、总线空闲。

因此教材把它写成正比,把那个系数留给具体场合。而”总线带宽”这个术语指的是理论最大值,此时取等号:

总线带宽数据总线位数总线时钟频率

做题时的分工很清楚:问”总线带宽/最大数据传输率”用等号;问”实际传输速率”必须按事务把周期数一遍。 完整的总线定时与事务见 第 6 章。

连接时的对应关系

CPU 侧主存侧数量关系
地址线 芯片地址引脚 + 片选译码输入低位接芯片,高位进译码器
数据线 芯片数据引脚位扩展后总位数必须等于
/ 芯片读写控制端直接相连
— 片选由高位地址译码产生

“低位地址接芯片、高位地址进译码器”是全部连接题的骨架,具体在 3.3.3和 3.3.4展开。

边界

地址线根数给的是”最大”地址空间,不是实际容量。 24 根地址线意味着最多 个可寻址单元,实际装多少片是另一件事。

“每个地址对应多少位”必须先确定。 按字节编址时是 8 位,按字编址时等于存储字长。题目不说的时候,从数据总线宽度反推——见 3.3.2。

数据总线宽度与存储字长是同一个量的两个名字(在 CPU 与主存直连的模型下)。它同时决定了一次访问能取回多少数据,因此也决定了 对齐访问的边界大小。

控制总线不只有读/写。 它还包含时钟、复位、总线请求/允许、就绪应答等,但主存连接题里只用到读、写和片选。

对照速查

线方向决定
地址总线单向 CPU→主存地址空间上限
数据总线双向存储字长、带宽
控制总线各不相同总线周期类型、完成时刻
说法对错
总线带宽 = 数据线位数 × 频率✅(理论最大值)
实际传输速率 = 数据线位数 × 频率❌(要乘有效系数)
地址线 根 → 最大 字节❌(是 个单元)
地址总线是双向的❌

考点

  • 三类总线各定一个量:数据线定字长与带宽,地址线定地址空间,控制线定时序
  • 地址总线单向,数据总线双向
  • 总线带宽 = 数据线位数 × 时钟频率(理论最大值);实际速率只是”正比于”
  • 地址线 根 → 个存储单元,单元多大要看编址单位
  • 连接的骨架是低位地址接芯片、高位地址进片选译码器

链接