总线的分类
这一节容易被当成”背四张表”。但这四种分类不是并列的四个清单,而是四个互相独立的维度——任何一条具体总线都要在这四个维度上各占一个格子。
| 维度 | 问的是 | 取值 |
|---|---|---|
| 连接范围 | 它连的两端在哪 | 片内 / 系统 / 通信 |
| 传输信息 | 系统总线内部再分 | 地址 / 数据 / 控制 |
| 传输格式 | 一次传几位 | 串行 / 并行 |
| 传输方向 | 两个方向能不能同时 | 单工 / 半双工 / 全双工 |
例如 PCIe 是「系统总线(外部互连)+ 串行 + 全双工」,CPU 内部那条单总线是「片内 + 并行 + 半双工」。判断题里”某某总线属于哪一类”,先问清问的是哪个维度。
机制
按连接范围分:三层
| 类别 | 连接谁与谁 | 例子 | 争用怎么解决 |
|---|---|---|---|
| 片内总线 | 芯片内部的各部件 | CPU 内的寄存器、ALU、Cache 之间 | 控制器排拍,设计时定死 |
| 系统总线 | CPU、主存、I/O 子系统 | 教材的地址/数据/控制总线抽象 | 仲裁器,运行时裁决 |
| 通信总线 | 计算机与计算机之间、或与远程设备 | 网络链路、串行通信线 | 介质访问控制协议 |
三层的分界是**「跨不跨芯片、跨不跨机器」**。5.3.3 那条 CPU 内部单总线是第一层,它根本没有上主板——这是判断「总线是不是就等于主板」时最有力的一个反例。
I/O 总线(PCIe、USB、SATA)在王道的口径里归到系统总线之下,作为”连接主机与 I/O 控制器”的那一段;有的教材把它单列为第四类。答题时按题干给的类别数作答,判据始终是”连接对象”。
按传输信息分:系统总线的三组线
地址总线、数据总线、控制总线,内容见 6.1.1。这里只强调一个常考的推论:
三组线的根数互相独立,也都可以与 CPU 字长不同。 32 位 CPU 完全可以配 36 根地址线、64 根数据线。“64 位 CPU 就有 64 根地址线”是错的——这两个数字之间没有必然关系。
按传输格式分:串行与并行
| 并行总线 | 串行总线 | |
|---|---|---|
| 一次传 | 多位(每位一根线) | 1 位(每通道) |
| 引脚数 | 多 | 少 |
| 提升带宽靠 | 加位宽 | 加频率、加通道数 |
| 主要限制 | 位间到达时间偏移、串扰 | 需要串并转换、时钟恢复 |
| 适用 | 短距离、中低频 | 高速、长距离 |
「串行一次只传 1 位,所以一定比并行慢」是错的。 现代高速互连几乎全是串行的,原因在带宽公式的另一个因子上:
并行走的是加位宽这条路,串行走的是加频率这条路。 而并行加位宽很快撞墙——根数越多、频率越高、线越长,各位信号到达接收端的时间差(skew)与相互串扰就越无法忽略,最终必须为最慢的那一位留出余量,频率提不上去。串行没有位间偏移问题,可以把频率推到并行做不到的量级,再用多个 lane 把带宽乘回来。
关联对照:「加宽还是加快」这个取舍在本书出现两次
- 流水线(5.6.5):超标量是加宽(一拍发射多条),超流水线是加深(把一拍切得更细以提频率)
- 总线(本节):并行是加宽(多加几根线),串行是加快(少根线但推高频率)
两处的结论也一致:加宽先撞墙。 流水线加宽撞的是指令级并行度和相关检测的复杂度,总线加宽撞的是信号偏移与串扰。所以两处最终都往”加快”那一侧走。
按传输方向分:单工、半双工、全双工
| 方向 | 需要的通道 | |
|---|---|---|
| 单工 | 只能一个固定方向 | 1 组,方向固定 |
| 半双工 | 两个方向都行,但同一时刻只能一个方向 | 1 组,需要转向(turnaround) |
| 全双工 | 两个方向同时 | 2 组独立通道 |
半双工的隐藏代价是”转向时间”。 数据线从”主设备驱动”切换到”从设备驱动”,中间必须留一段两边都不驱动的空档,否则就是 6.1.1 说的三态门冲突。这段空档在时序题里可能被单独计入总线周期。
共享的并行数据总线天然是半双工的(同一组线双向复用);全双工需要两组线,这正是串行链路常见的做法(PCIe 每 lane 有独立的发送对与接收对)。
总线复用
同一组物理线在不同时间承担不同含义。 最常见的是地址/数据复用:
- 地址阶段:线上传地址
- 从设备锁存地址
- 数据阶段:同一组线改传数据
收益是引脚数减半,代价是一次事务多出一个阶段。 这是典型的”用时间换空间”,判据与 5.4.3 微指令字段编码那里完全一样:编码越紧凑,就越要用时间(译码、分时)去换。
层次辨析:两种「复用」不是一回事
- DRAM 的行/列地址复用(3.2.1):复用的是芯片的地址引脚,行地址与列地址先后送入,由 RAS/CAS 区分
- 系统总线的地址/数据复用:复用的是总线上的线,地址与数据先后传送,由总线周期的阶段区分
共同点是”分时复用”这个手法本身;不同点是复用的对象、区分的信号、以及协议层次完全不同。 不要因为都叫”复用”就把两者的时序混着答。
边界
分类维度之间互相独立。 “串行总线”和”系统总线”不是对立选项,PCIe 同时是两者。看到”下列关于总线分类的说法”这类题,先确认每个选项在说哪个维度。
片内总线不需要仲裁。 它的争用者在设计时已知,由控制器排拍解决(5.3.3),不存在运行时的仲裁器。
串行不等于慢,并行不等于快。 判据是”位宽 × 频率”的乘积,不是单看位宽。
复用降低的是引脚和布线成本,不是提高性能。 它通常降低单次事务效率。选它是因为引脚是稀缺资源。
全双工需要两组独立通道。 “一根线上两个方向同时传”在共享总线上做不到——那正是分时约束禁止的事。
对照速查
| 概念 | 一句话 |
|---|---|
| 片内 / 系统 / 通信 | 按跨不跨芯片、跨不跨机器 |
| 串行 vs 并行 | 加频率 vs 加位宽;并行先撞墙(skew、串扰) |
| 单工 / 半双工 / 全双工 | 半双工要付转向时间,全双工要付两组通道 |
| 地址/数据复用 | 省引脚,多一个阶段;用时间换空间 |
| 与 DRAM 行列复用的关系 | 手法相同,对象与协议层次都不同 |
考点
- 判断题高频:「数据总线越宽,可寻址空间越大」错——地址空间只看地址线根数与编址单位。
- 判断题高频:「串行总线的传输率一定低于并行总线」错。
- 归类题:给一条具体互连(PCIe / USB / CPU 内部总线),问它在各维度上属于哪一类。
- 复用计算:地址/数据复用时,一次事务的周期数比不复用多几个——多的是地址阶段那部分。
- 转向时间:半双工总线连续做”读后写”时,中间要留转向空档,时序题里可能单独给出。
链接
- 🏠 返回总览:计算机组成原理第 6 章:总线总览
- ⬅️ 上一节:6.1.1 总线的基本概念
- ➡️ 下一节:6.1.3 系统总线的结构
- 🔗 带宽公式(位宽 × 频率):6.1.5 总线的性能指标
- 🔗 加宽还是加快:5.6.5 高级流水线技术
- 🔗 DRAM 行/列地址复用:3.2.1 SRAM 芯片和 DRAM 芯片
- 🔗 编码紧凑要用时间换:5.4.3 微程序控制器