总线的分类

这一节容易被当成”背四张表”。但这四种分类不是并列的四个清单,而是四个互相独立的维度——任何一条具体总线都要在这四个维度上各占一个格子。

维度问的是取值
连接范围它连的两端在哪片内 / 系统 / 通信
传输信息系统总线内部再分地址 / 数据 / 控制
传输格式一次传几位串行 / 并行
传输方向两个方向能不能同时单工 / 半双工 / 全双工

例如 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 有独立的发送对与接收对)。

总线复用

同一组物理线在不同时间承担不同含义。 最常见的是地址/数据复用:

  1. 地址阶段:线上传地址
  2. 从设备锁存地址
  3. 数据阶段:同一组线改传数据

收益是引脚数减半,代价是一次事务多出一个阶段。 这是典型的”用时间换空间”,判据与 5.4.3 微指令字段编码那里完全一样:编码越紧凑,就越要用时间(译码、分时)去换。

层次辨析:两种「复用」不是一回事

  • DRAM 的行/列地址复用(3.2.1):复用的是芯片的地址引脚,行地址与列地址先后送入,由 RAS/CAS 区分
  • 系统总线的地址/数据复用:复用的是总线上的线,地址与数据先后传送,由总线周期的阶段区分

共同点是”分时复用”这个手法本身;不同点是复用的对象、区分的信号、以及协议层次完全不同。 不要因为都叫”复用”就把两者的时序混着答。

边界

分类维度之间互相独立。 “串行总线”和”系统总线”不是对立选项,PCIe 同时是两者。看到”下列关于总线分类的说法”这类题,先确认每个选项在说哪个维度。

片内总线不需要仲裁。 它的争用者在设计时已知,由控制器排拍解决(5.3.3),不存在运行时的仲裁器。

串行不等于慢,并行不等于快。 判据是”位宽 × 频率”的乘积,不是单看位宽。

复用降低的是引脚和布线成本,不是提高性能。 它通常降低单次事务效率。选它是因为引脚是稀缺资源。

全双工需要两组独立通道。 “一根线上两个方向同时传”在共享总线上做不到——那正是分时约束禁止的事。

对照速查

概念一句话
片内 / 系统 / 通信按跨不跨芯片、跨不跨机器
串行 vs 并行加频率 vs 加位宽;并行先撞墙(skew、串扰)
单工 / 半双工 / 全双工半双工要付转向时间,全双工要付两组通道
地址/数据复用省引脚,多一个阶段;用时间换空间
与 DRAM 行列复用的关系手法相同,对象与协议层次都不同

考点

  • 判断题高频:「数据总线越宽,可寻址空间越大」错——地址空间只看地址线根数与编址单位。
  • 判断题高频:「串行总线的传输率一定低于并行总线」错。
  • 归类题:给一条具体互连(PCIe / USB / CPU 内部总线),问它在各维度上属于哪一类。
  • 复用计算:地址/数据复用时,一次事务的周期数比不复用多几个——多的是地址阶段那部分。
  • 转向时间:半双工总线连续做”读后写”时,中间要留转向空档,时序题里可能单独给出。

链接