IO设备——总线系统
文章目录
- 总线系统
- 为什么需要总线?——互连方式的演进
- 总线层次结构
- 系统总线的三根支柱
- 数据总线 (Data Bus)
- 地址总线 (Address Bus)
- 控制总线 (Control Bus)
- 同步总线 vs 异步总线
- 同步总线
- 异步串行总线
- 总线性能指标详解
- 实际带宽计算示例
- 南北桥架构与演进
- 传统南北桥架构 (2000s 典型 PC)
- 现代集成架构 (2010s 至今)
总线系统
为什么需要总线?——互连方式的演进
计算机系统中各部件之间必须通过通信线路连接。这种互连结构的设计直接影响系统的性能、成本和可扩展性。
互连方式演进: 第1代: 分散连接 第2代: 共享总线 ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │CPU│ │Mem│ │I/O│ │CPU│ │Mem│ │I/O│ │I/O│ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ │ │ │ └──────┼──────┼──────┘ ├──────┤ │ │ │ ├──────┤ ┌────┴────┐ ├──────┼──────┤ │ 系统总线 │ │ │ │ └─────────┘ N×N 连线 = O(N²) N 条连线 = O(N) 复杂、昂贵、不可扩展 简单、经济、易扩展但瓶颈 第3代: 层次化总线 第4代: 高速串行点对点 ┌───┐ ┌───┐ ┌───┐ ┌───┐ │CPU│──高速──│Mem│ │CPU│──QPI──│Mem│ └─┬─┘ 总线 └───┘ └─┬─┘ Link └───┘ │ ┌──────┐ │ PCIe Root Complex └──┤ 北桥 │ ├── PCIe Lane 0 ── GPU └──┬───┘ ├── PCIe Lane 1 ── SSD │ 低速总线 ├── PCIe Lane 2 ── NIC ┌──┴───┐ └── PCIe Lane 3 ── USB Controller │ 南桥 │ │ └──┬───┘ 点对点串行链路 ┌──┴──┬──┬──┐ 每设备独占带宽 │ │ │ │ USB SATA LAN Audio| 方式 | 原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| 分散连接 | 每个部件间有独立的点对点连线 | 信号路径简单,精确控制 | 布线呈 O(N²) 增长,不可扩展 | 早期小型计算机 |
| 共享总线 | 多部件共享一组公共传输线 | 灵活经济、易扩展、标准化 | 带宽共享,多设备同时访问时成为瓶颈 | 传统 PC 系统总线 |
| 层次化总线 | 高速总线 + 低速总线通过桥接器分层 | 按需分配带宽,低速设备不拖累高速设备 | 设计较复杂,桥接器增加延迟 | 南北桥架构 |
| 交叉开关 (Crossbar) | 任意输入→任意输出直连 | 低延迟、高带宽、无竞争 | 成本 O(N²),不适合大规模 | 高性能计算、数据中心交换机 |
| 片上网络 (NoC) | 芯片内部的包交换网络 | 可扩展、支持并行通信 | 路由算法复杂、需拥塞控制 | 多核 SoC(手机处理器等) |
总线层次结构
┌──────────────────────────────────────────────────────────────┐ │ CPU 芯片 (Die) │ │ │ │ ┌────────┐ 内部总线 ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ ALU │◄─────────►│寄存器堆 │◄─┤ 译码器 │◄─┤ 取指 │ │ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │ │ │ ┌────────────────────────────────────────────────────┐ │ │ │ 集成内存控制器 (IMC) L3 Cache │ │ │ └───────────────────┬────────────────────────────────┘ │ └───────────────────────┼──────────────────────────────────────┘ │ 系统总线 (或 QPI/DMI/Infinity Fabric) ┌────────────────┼────────────────┐ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ 数据总线 │ │ 地址总线 │ │ 控制总线 │ │ (Data) │ │(Address) │ │ (Control) │ ├──────────┤ ├──────────┤ ├──────────────┤ │ 双向传输 │ │ 单向输出 │ │ 双向/分时 │ │ CPU↔设备 │ │ CPU→设备 │ │ 读/写/中断/ │ │ │ │ │ │ 复位/时钟/ │ │ 典型宽度: │ │ 典型宽度: │ │ 总线请求/允许 │ │ 32/64位 │ │ 32/64位 │ │ │ └──────────┘ └──────────┘ └──────────────┘ │ │ │ └────────────────┼────────────────┘ │ 挂接各种 I/O 接口卡| 总线类型 | 作用范围 | 速度 | 连接对象 |
|---|---|---|---|
| 内部总线 | 芯片内部 | 极快 (与 CPU 同频) | 寄存器、ALU、Cache、译码器等微架构元件 |
| 系统总线 | PCB 板上芯片间 | 快 (数百 MHz~数 GHz) | CPU、主存 (DRAM)、高速 I/O 控制器 |
| I/O 总线 | 主板插槽/外部端口 | 中-快 | I/O 接口卡、外设控制器 |
| 扩展总线 | 外部端口/线缆 | 慢-中 | USB 设备、外部存储、外接显示器等 |
系统总线的三根支柱
数据总线 (Data Bus)
数据总线是真正搬运数据的"货车"。其宽度直接决定了系统的一次吞吐能力。
数据总线宽度演化: 8位 ──► Intel 8080/8085, Z80 (1970s) 16位 ──► Intel 8086/8088, 80286 (1980s) 32位 ──► Intel 80386/80486, Pentium (1985-1995) 64位 ──► Pentium Pro 及之后, AMD64/x86-64 (1995-至今) 128位+► DDR 内存总线 (一次预取多字), AVX-512 内部通路 双向传输:CPU 通过数据总线既可以读入数据也可以写出数据。 实现方式:三态门控制——同一时刻只有一个设备驱动总线,其他设备处于高阻态。地址总线 (Address Bus)
地址总线决定系统的"视野"有多大——能看见多大的内存空间、多少个 I/O 端口。
地址总线宽度 → 寻址能力: 16 根地址线 → 2^16 = 64 KB (8086 时代) 20 根地址线 → 2^20 = 1 MB (8086 实模式) 24 根地址线 → 2^24 = 16 MB (80286) 32 根地址线 → 2^32 = 4 GB (80386 ~ Pentium 4) 36 根地址线 → 2^36 = 64 GB (PAE 物理地址扩展) 48 根地址线 → 2^48 = 256 TB (x86-64 虚拟地址) 52 根地址线 → 2^52 = 4 PB (x86-64 物理地址, 实际实现)📌 地址总线是单向的——从 CPU(或 DMA 控制器等主控设备)输出到总线上所有从设备。从设备通过地址译码器判断"这个地址是不是在叫我"。
控制总线 (Control Bus)
控制总线是协调整个系统的"指挥系统",信号种类最多、最复杂:
控制总线信号分类: ┌──────────────────────────────────────────────────────────┐ │ 系统控制信号 │ │ · CLK (系统时钟) · RESET (复位) · PWRGOOD (电源良好) │ ├──────────────────────────────────────────────────────────┤ │ 存储器/I/O 访问信号 │ │ · M/IO# (存储器还是I/O) · RD# (读) · WR# (写) │ │ · MEMR# / MEMW# (内存读写) · IOR# / IOW# (I/O读写) │ ├──────────────────────────────────────────────────────────┤ │ 总线控制信号 │ │ · HOLD (总线请求) · HLDA (总线允许) │ │ · BREQ (总线请求输出) · BACK# (总线确认) │ ├──────────────────────────────────────────────────────────┤ │ 中断信号 │ │ · INTR (可屏蔽中断请求) · NMI (不可屏蔽中断) │ │ · INTA# (中断确认) │ ├──────────────────────────────────────────────────────────┤ │ DMA 信号 │ │ · DREQ (DMA请求) · DACK# (DMA确认) │ └──────────────────────────────────────────────────────────┘📌 控制总线上的 # 后缀表示该信号为低电平有效(Active Low)。如 RD#` 表示该线拉低时执行读操作。这是数字电路中的常见约定,用于提高抗干扰能力。
同步总线 vs 异步总线
同步总线
所有设备踩着同一个节拍,像团体操一样整齐。
同步总线读取时序 (简化): CLK: _┌─┐__┌─┐__┌─┐__┌─┐__┌─┐__┌─┐__┌─┐__┌─┐_ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ T1 T2 T3 T4 T5 T6 T7 ADDR: ──<════════ 地址有效 ════════>────────── RD#: ────────┐ ┌────────────── └─────────────────┘ 读命令发出 DATA: ──────────────────<══ 数据 ══>────────── 从设备在 T5 放上数据 CPU 在 T5 锁存数据:::warning
时序解读
- T1:CPU 将地址放上 ADDR 总线,地址开始有效
- T1→T3:CPU 拉低 RD# 线,发出"读"命令
- T1→T5:从设备(如存储器)内部进行地址译码和数据读取(需要时间)
- T5:从设备将数据放上 DATA 总线,CPU 在这个时钟沿锁存数据
- T5 之后:CPU 撤销 RD# 和 ADDR,一次读取完成
:::
:::info
优点:协议简单,易于理解和实现,时序可预测。
:::
:::color4
缺点:
- 木桶效应:时钟频率受最慢设备限制
- 时钟偏移 (Clock Skew):长距离下时钟到达各点时间不一致
- 并行串扰:高速并行传输时,相邻数据线间的电磁干扰导致波形畸变
:::
时钟偏移示意: CLK 源 ─┬──── 0 cm ────► 设备A 收到时钟 ─── 正常 ✓ │ ├──── 10 cm ───► 设备B 收到时钟 ─── 稍有延迟 │ └──── 30 cm ───► 设备C 收到时钟 ─── 明显延迟 ⚠️ 在 100MHz 信号 (周期 10ns) 下, 30cm PCB 走线延迟约 1.5~2ns = 15%~20% 的时钟周期偏移 高速下可能导致设备C在错误的时刻采样数据!异步串行总线
异步总线放弃了全局时钟,每个数据帧自带同步信息。
异步串行帧格式 (以 UART 8N1 为例): 空闲 ┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐ ┌──┐ ┌────── (高电平)│起│ │D0│D1│D2│D3│D4│D5│D6│D7│ │停│ │空闲 │始│ │ │ │ │ │ │ │ │ │ │止│ │ │位│ │ │ 数据位 (LSB→MSB) │ │位│ │ └──┘ └──┴──┴──┴──┴──┴──┴──┴──┘ └──┘ └────── 0 ◄── 通常 8 位, 也可配为 5/6/7/8 位 ──► 1 帧结构说明: · 起始位: 1 bit, 恒为低电平 (0), 告诉接收方"数据来了" · 数据位: 5~8 bits, LSB (最低位) 先发送 · 校验位: 0~1 bit (可选), 奇校验/偶校验/固定位/无校验 · 停止位: 1/1.5/2 bits, 恒为高电平 (1), 帧结束标记:::color2
发送方和接收方没有共享时钟,全靠帧内这三个信号同步:
- 起始位的下跳沿 → 接收方启动本地定时器
- 双方事先约定相同的波特率(如 9600、115200)
- 接收方按约定速率在每位的中间时刻采样
- 停止位 → 确认一帧结束,接收方复位等待下一个起始位
:::
📌** 每次只传一帧、每帧自带起止标记——即使双方时钟略有偏差,也不会累积超过一帧的长度。这就是"异步"的精髓:无需精确同步,靠帧格式自同步。**
| 对比维度 | 同步并行总线 | 异步串行总线 |
|---|---|---|
| 定时方式 | 公共时钟信号统一节奏 | 起始位/停止位 + 双方约定波特率 |
| 传输方式 | 多数据线同时传输 (8/16/32/64 位并排) | 单线逐位发送 |
| 最高速度 | 受时钟偏移和串扰限制 (~几百 MHz) | 现代串行可达数十 GHz (如 PCIe Gen5 ×16 ≈ 64 GB/s) |
| 线缆数量 | 多 (地址+数据+控制, 数十至上百根) | 少 (2~4 对差分线即可) |
| 成本 | 高 (引脚多, PCB 层数多) | 低 (引脚少, 线缆细) |
| 典型代表 | 传统 PCI (32bit/33MHz) | PCI Express, USB, SATA, SAS, Ethernet |
| 时钟偏移 | 问题严重 (并行线间偏差) | 不存在 (串行单线) |
| 信号完整性 | 高频下挑战大 | 差分信号抗干扰强 |
📌 现代计算机中,高速串行总线几乎完全取代了并行总线。PCI Express 取代了 PCI,SATA 取代了 PATA(IDE),USB 取代了并口。这被称为"串行化革命"——理由很简单:在极高频率下,让一条线跑得极快,远比让 32 条线精确同步容易。
总线性能指标详解
| 指标 | 公式/定义 | 实例计算 | 影响因素 |
|---|---|---|---|
| 总线宽度 | 数据线条数 | 64 位 | 芯片引脚数、PCB 布线空间 |
| 工作频率 | 每秒传输次数 | 100 MHz = 10^8 次/秒 | 工艺、传输距离、电气特性 |
| 总线带宽 | 宽度 × 频率 ÷ 8 (B/s) | 64bit × 100MHz ÷ 8 = 800 MB/s | 宽度 + 频率的乘积 |
| 突发传输 | 一次地址阶段后连续传多组数据 | PCI 突发 → 地址发一次, 数据连传 N 字 | 地址阶段开销被分摊 |
| 寻址能力 | 2^地址线数量 | 32 根地址线 → 4 GB | 地址线数 (也受 PAE 等技术扩展) |
| 负载能力 | 可驱动设备数 | 典型 TTL 可驱动 10 个负载 | 驱动芯片的输出电流能力 |
实际带宽计算示例
PCI Express 带宽计算: PCIe Gen3: 单 Lane 速率 = 8 GT/s (GigaTransfers/s) 编码方式 128b/130b → 有效带宽 = 8G × 128/130 ≈ 7.877 Gbps 单 Lane ≈ 984.6 MB/s ×1 ≈ 1 GB/s (网卡、声卡等) ×4 ≈ 4 GB/s (NVMe SSD) ×8 ≈ 8 GB/s (RAID 卡) ×16 ≈ 16 GB/s (显卡) PCIe Gen4 速率翻倍, Gen5 再翻倍……每一代带宽翻倍。南北桥架构与演进
传统南北桥架构 (2000s 典型 PC)
┌──────────┐ │ CPU │ └────┬─────┘ │ FSB (前端总线), 共享带宽, 典型 400MT/s~1600MT/s │ ┌────┴─────────────────────────────────────────┐ │ 北桥 (MCH / GMCH) │ │ · 内存控制器 (DRAM Controller) │ │ · 集成显卡接口 (GMCH 含 Intel GMA) │ │ · PCIe ×16 显卡接口 │ │ · 与南桥的 DMI 接口 │ └────┬──────────┬──────────┬───────────────────┘ │ DDR2/3 │ PCIe ×16 │ DMI (×4 PCIe lanes) ▼ ▼ ▼ ┌────────┐ ┌────────┐ ┌─────────────────────────┐ │ 内存 │ │ GPU │ │ 南桥 (ICH/PCH) │ │ (DRAM) │ └────────┘ │ · SATA 控制器 │ └────────┘ │ · USB 控制器 │ │ · HD Audio │ │ · 以太网 MAC │ │ · LPC (接 Super I/O, │ │ BIOS Flash, TPM) │ │ · PCIe ×1 插槽 │ │ · SPI (接 BIOS/UEFI) │ └─────────────────────────┘| 芯片 | 角色 | 连接对象 | 速度 |
|---|---|---|---|
| 北桥 (MCH) | 内存控制器集线器,管理高速数据流 | CPU、内存(DDR)、独立显卡(PCIe ×16) | 极高 |
| 南桥 (ICH/PCH) | I/O 控制器集线器,管理低速外设 | SATA、USB、音频、网卡、BIOS Flash、PCIe ×1 | 较慢 |
| FSB | CPU 与北桥之间的共享总线 | — | 400~1600 MT/s |
| DMI | 北桥与南桥之间的专用链路 | — | ≈ PCIe ×4 带宽 |
现代集成架构 (2010s 至今)
┌─────────────────────────────────────────┐ │ CPU 芯片 │ │ ┌──────────┐ ┌──────────┐ │ │ │ 计算核心 │ │ 集成 GPU │ │ │ └──────────┘ └──────────┘ │ │ ┌──────────────────────┐ │ │ │ 系统代理 (System Agent)│ ← 原北桥功能 │ │ │ · 内存控制器 (IMC) │ │ │ │ · PCIe 根复合体 │ │ │ │ · 显示引擎 │ │ │ └──────────┬───────────┘ │ └─────────────┼──────────────────────────┘ │ DMI 3.0/4.0 (≈ PCIe ×8 带宽) │ ┌─────────────┴──────────────────────────┐ │ PCH (平台控制器中心) │ ← 原南桥功能 │ · SATA / USB / GbE / Wi-Fi / BT │ │ · HD Audio / SPI / eSPI │ │ · 额外的 PCIe lanes │ │ · 各种低速 I/O │ └────────────────────────────────────────┘| 变化 | 传统 | 现代 | 好处 |
|---|---|---|---|
| 北桥去哪了 | 独立芯片 (MCH) | 集成进 CPU(系统代理) | CPU 直连内存,延迟大幅降低 |
| FSB 去哪了 | CPU↔北桥共享总线 | 被 QPI/DMI/Infinity Fabric 点对点链路取代 | 每设备独占带宽,不再争抢 |
| 南桥变什么 | ICH | PCH(平台控制器中心) | 功能更丰富,集成 Wi-Fi/BT |
📌演进趋势:北桥 → 集成进 CPU(降低内存延迟);南桥 → PCH(功能更丰富);FSB → 点对点高速链路(DMI/QPI/Infinity Fabric)。未来趋势是更多控制器进一步集成进 CPU 芯片(如部分 SoC 已将 PCH 功能全部纳入单一芯片)。