连接原理
主存与 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→主存 | 地址空间上限 |
| 数据总线 | 双向 | 存储字长、带宽 |
| 控制总线 | 各不相同 | 总线周期类型、完成时刻 |
| 说法 | 对错 |
|---|---|
| 总线带宽 = 数据线位数 × 频率 | ✅(理论最大值) |
| 实际传输速率 = 数据线位数 × 频率 | ❌(要乘有效系数) |
| 地址线 | ❌(是 |
| 地址总线是双向的 | ❌ |
考点
- 三类总线各定一个量:数据线定字长与带宽,地址线定地址空间,控制线定时序
- 地址总线单向,数据总线双向
- 总线带宽 = 数据线位数 × 时钟频率(理论最大值);实际速率只是”正比于”
- 地址线
根 → 个存储单元,单元多大要看编址单位 - 连接的骨架是低位地址接芯片、高位地址进片选译码器
链接
- 🏠 返回总览:计算机组成原理第 3 章:存储系统总览
- ⬅️ 上一节:3.2.4 多模块存储器
- ➡️ 下一节:3.3.2 主存容量的扩展
- 🔗 第 6 章 总线(总线带宽与定时的完整定义)
- 📖 名词库:第 3 章名词库