IO设备——总线系统

文章目录

总线系统

为什么需要总线?------互连方式的演进

计算机系统中各部件之间必须通过通信线路连接。这种互连结构的设计直接影响系统的性能、成本和可扩展性。

plain 复制代码
  互连方式演进:

  第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(手机处理器等)

总线层次结构

plain 复制代码
  ┌──────────────────────────────────────────────────────────────┐
  │                        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)

数据总线是真正搬运数据的"货车"。其宽度直接决定了系统的一次吞吐能力。

plain 复制代码
  数据总线宽度演化:

  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 端口。

plain 复制代码
  地址总线宽度 → 寻址能力:

  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)

控制总线是协调整个系统的"指挥系统",信号种类最多、最复杂:

plain 复制代码
  控制总线信号分类:

  ┌──────────────────────────────────────────────────────────┐
  │ 系统控制信号                                              │
  │ · 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 异步总线

同步总线

所有设备踩着同一个节拍,像团体操一样整齐。

plain 复制代码
  同步总线读取时序 (简化):

  CLK:    _┌─┐__┌─┐__┌─┐__┌─┐__┌─┐__┌─┐__┌─┐__┌─┐_
           └─┘  └─┘  └─┘  └─┘  └─┘  └─┘  └─┘  └─┘
           T1    T2    T3    T4    T5    T6    T7
  
  ADDR:   ──<════════ 地址有效 ════════>──────────
  
  RD#:    ────────┐                 ┌──────────────
                  └─────────────────┘
                  读命令发出
  
  DATA:   ──────────────────<══ 数据 ══>──────────
                              从设备在 T5 放上数据
                              CPU 在 T5 锁存数据

:::warning

时序解读

  1. T1:CPU 将地址放上 ADDR 总线,地址开始有效
  2. T1→T3:CPU 拉低 RD# 线,发出"读"命令
  3. T1→T5:从设备(如存储器)内部进行地址译码和数据读取(需要时间)
  4. T5:从设备将数据放上 DATA 总线,CPU 在这个时钟沿锁存数据
  5. T5 之后:CPU 撤销 RD# 和 ADDR,一次读取完成

:::

:::info

优点:协议简单,易于理解和实现,时序可预测。

:::

:::color4

缺点

  • 木桶效应:时钟频率受最慢设备限制
  • 时钟偏移 (Clock Skew):长距离下时钟到达各点时间不一致
  • 并行串扰:高速并行传输时,相邻数据线间的电磁干扰导致波形畸变

:::

plain 复制代码
  时钟偏移示意:

  CLK 源 ─┬──── 0 cm ────► 设备A 收到时钟 ─── 正常 ✓
           │
           ├──── 10 cm ───► 设备B 收到时钟 ─── 稍有延迟
           │
           └──── 30 cm ───► 设备C 收到时钟 ─── 明显延迟 ⚠️
  
  在 100MHz 信号 (周期 10ns) 下,
  30cm PCB 走线延迟约 1.5~2ns = 15%~20% 的时钟周期偏移
  高速下可能导致设备C在错误的时刻采样数据!
异步串行总线

异步总线放弃了全局时钟,每个数据帧自带同步信息。

plain 复制代码
  异步串行帧格式 (以 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

发送方和接收方没有共享时钟,全靠帧内这三个信号同步:

  1. 起始位的下跳沿 → 接收方启动本地定时器
  2. 双方事先约定相同的波特率(如 9600、115200)
  3. 接收方按约定速率在每位的中间时刻采样
  4. 停止位 → 确认一帧结束,接收方复位等待下一个起始位

:::

📌** 每次只传一帧、每帧自带起止标记------即使双方时钟略有偏差,也不会累积超过一帧的长度。这就是"异步"的精髓:无需精确同步,靠帧格式自同步。**

对比维度 同步并行总线 异步串行总线
定时方式 公共时钟信号统一节奏 起始位/停止位 + 双方约定波特率
传输方式 多数据线同时传输 (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 个负载 驱动芯片的输出电流能力
实际带宽计算示例
plain 复制代码
  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)
plain 复制代码
  ┌──────────┐
  │   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 至今)
plain 复制代码
  ┌─────────────────────────────────────────┐
  │                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 功能全部纳入单一芯片)。


相关推荐
anew___2 天前
计算机组成原理:深入理解运算方法与运算器设计
计算机组成原理·运算器
-To be number.wan4 天前
计算机组成原理 | 指令格式全解析
学习·计算机组成原理
-To be number.wan4 天前
计算机组成原理 | 指令寻址
学习·计算机组成原理
悲伤小伞5 天前
计算机组成原理-概述-题
计算机组成原理
雪度娃娃5 天前
I/O设备——I/O系统总览
计算机组成原理
-To be number.wan5 天前
计算机组成原理 | 虚拟存储器
学习·计算机组成原理
月落归舟9 天前
最最最基础的计算机底层执行逻辑!!!
计算机组成原理
-To be number.wan10 天前
计算机组成原理 | Cache和主存的映射方式
学习·缓存·计算机组成原理
-To be number.wan10 天前
计算机组成原理 | Cache替换算法
学习·计算机组成原理