第一部分 总览 1
1.1.1 初始PCI解决方案的作用 2
1.1 PCI Express简介 2
第1章 体系结构展望 2
1.2 与原有总线的比较 3
1.2.3 PCI Express的总吞吐量 4
1.2.2 总线性能及其插槽数的比较 4
1.2.1 作者的声明 4
1.3.1 基于33MHz PCI总线的系统 5
1.3 I/O总线体系结构展望 5
1.2.4 比较每引脚的性能 5
1.3.2 基于66MHz PCI总线的系统 16
1.3.3 基于66MHz和133MHz PCI-X 1.0总线的平台 18
1.4 PCI Express的线路 21
1.3.4 基于DDR和QDR PCI-X 2.0总线的平台 21
1.4.1 PCI Express的拓扑结构 26
1.4.2 PCI Express系统模块图 28
1.5 PCI Express规范 30
2.1 PCI Express事务简介 31
第2章 体系结构概述 31
2.1.1 PCI Express事务协议 32
2.1.2 一些事务示例 35
2.2.1 概述 38
2.2 PCI Express的设备层 38
2.2.2 设备层及相关的数据包 39
2.2.3 各PCI Express设备层的功能 42
2.3 非报告存储器读事务示例 54
2.5 PCI Express的性能与数据传送效率 57
2.4 热插拔 57
第二部分 事务协议 59
3.1 简介 60
第3章 地址空间与事务路由 60
3.1.3 端点的路由能力有限 61
3.1.2 多端口设备承担路由负荷 61
3.1.1 接收器检查3种类型的链路流量 61
3.2.2 数据链路层数据包(DLLP) 62
3.2.1 有序集 62
3.1.4 系统路由策略是可编程的 62
3.2 两种类型的本地链路流量 62
3.3.2 使用分离事务协议了吗 65
3.3.1 用于访问4种地址空间的TLP 65
3.3 处理层数据包路由基础 65
3.3.4 PCI Express的路由方法与PCI兼容吗 67
3.3.3 TLP路由的3种方法 67
3.3.6 使用TLP的头信息:概述 68
3.3.5 定义数据包格式和路由的头字段 68
3.4 应用路由机制 69
3.4.1 地址路由 70
3.4.2 ID路由 72
3.4.3 隐式路由 75
3.5.1 路由配置是PCI兼容的吗 79
3.5 路由选项的即插即用设置 79
3.5.2 基址寄存器(BAR):类型0、类型1的头 81
3.5.3 基址/限界寄存器,只限类型1头 84
3.5.4 总线号寄存器,只限类型1头 88
4.1.1 为什么要使用基于数据包的事务协议 90
4.1 基于数据包的协议简介 90
第4章 基于数据包的事务 90
4.2.1 组装和拆解TLP 92
4.2 处理层数据包 92
4.2.2 设备核心请求访问4种空间 93
4.2.4 TLP的结构 94
4.2.3 所定义的TLP事务变体 94
4.2.5 建立事务TLP请求和完成 100
4.3 数据链路层数据包 115
4.3.3 接收器对DLLP的处理 116
4.3.2 DLLP是本地流量 116
4.3.1 DLLP的类型 116
4.3.4 发送一个数据链路层数据包 117
4.3.5 DLLP数据包的类型 118
5.1 通过各链路可靠地传输TLP 122
第5章 ACK/NAK协议 122
5.2.1 ACK/NAK协议中发送器的基本组成 124
5.2 ACK/NAK协议的基本组成 124
5.2.2 ACK/NAK协议的接收器基本组成 127
5.3 ACK/NAK DLLP的格式 128
5.4.1 发送器协议详解 129
5.4 ACK/NAK协议详解 129
5.4.2 接收器协议详解 135
5.6 ACK/NAK协议小结 142
5.5 利用ACK/NAK协议可靠地处理错误情况 142
5.6.1 发送器部分 143
5.7 安排数据包时推荐的优先级 144
5.6.2 接收器部分 144
5.8.1 丢失TLP 145
5.8 更多的示例 145
5.8.3 丢失跟随NAK DLLP的ACK DLLP 146
5.8.2 丢失ACK DLLP或ACK DLLP并有CRC错误 146
5.9.1 没有直通转发模式 147
5.9 交换器直通转发模式 147
5.9.2 交换器直通转发模式 148
6.1 服务质量 150
第6章 QoS/TC/VC和仲裁 150
6.1.1 同步事务支持 151
6.1.2 差异性服务 152
6.3 流量类别和虚拟通道 153
6.2 对QoS/TC/VC和仲裁的看法 153
6.3.1 VC分配和TC映射 154
6.4.1 虚拟信道仲裁 157
6.4 仲裁 157
6.4.2 端口仲裁 163
6.4.3 交换器仲裁示例 167
7.1 流控制的概念 170
第7章 流控制 170
7.2.1 VC流控制缓冲区的组织 172
7.2 流控制缓冲区 172
7.3.1 流控制的基本组成 173
7.3 流控制机制简介 173
7.2.2 流控制信用 173
7.2.3 流控制缓冲区的最大容量 173
7.4 流控制数据包 175
7.5.1 第一阶段——初始化之后的流控制 176
7.5 流控制模型的操作——示例 176
7.5.2 第二阶段——流控制缓冲区填满 178
7.5.3 第三阶段——信用限额计数器翻转 179
7.6 通告无限流控制 180
7.5.4 第四阶段——FC缓冲区溢出错误检查 180
7.7 最小流控制通告 181
7.6.3 头和数据通告可能冲突 181
7.6.1 谁能通告无限流控制信用 181
7.6.2 无限信用通告的特殊用途 181
7.8.1 FC初始化序列 182
7.8 流控制初始化 182
7.9 FC_INIT之后的流控制更新 185
7.9.2 流控制更新频率 186
7.9.1 FC_Update DLLP的格式和内容 186
7.9.3 错误检测定时器——一种伪需求 187
8.1 简介 189
第8章 事务顺序 189
8.3 真正的PCI Express顺序规则 190
8.2 生产者/使用者模型 190
8.4.1 RO对存储器写和消息的影响 191
8.4 灵活的顺序 191
8.3.1 真正PCI Express设备的生产者/使用者模型 191
8.4.3 强顺序规则总结 192
8.4.2 RO对存储器读事务的影响 192
8.5.1 强顺序可能导致事务阻塞 193
8.5 改变顺序规则,提高性能 193
8.5.2 用VC缓冲区完成的顺序管理 194
8.6 支持PCI总线和避免死锁 195
8.5.3 改进的顺序规则小结 195
9.1 发送中断的两种方法 198
第9章 中断 198
9.2.1 MSI功能寄存器组 199
9.2 消息信号中断 199
9.2.3 生成MSI中断请求的基础 202
9.2.2 MSI配置基础 202
9.2.5 中断延迟 204
9.2.4 中断处理程序处理时的存储器同步 204
9.3.1 背景知识——PCI中断信令 205
9.3 传统的PCI中断发送机制 205
9.2.6 一些规则、建议等等 205
9.3.2 虚拟INTx信令 208
9.5 基本系统外围设备必须考虑的特殊情况 211
9.4 设备可以同时支持MSI和传统的中断 211
9.5.1 示例系统 212
10.1 背景 214
第10章 错误检测和处理 214
10.2.1 PCI Express的错误校验机制 215
10.2 PCI Express错误管理简介 215
10.2.2 错误报告机制 216
10.3 PCI Exprss错误的来源 217
10.2.3 错误处理机制 217
10.3.2 数据中毒(可选) 218
10.3.1 ECRC的产生与校验 218
10.3.4 链路流控制相关的错误 219
10.3.3 TC到VC映射错误 219
10.3.6 分离事务的错误 220
10.3.5 畸形处理层数据包(TLP) 220
10.4.1 可修正的错误 222
10.4 错误分类 222
10.5.1 错误消息 223
10.5 报告错误的方法 223
10.4.2 不可修正的非致命错误 223
10.4.3 不可修正的致命错误 223
10.6.1 PCI兼容的错误报告机制 224
10.6 基本的错误检测和处理 224
10.5.2 完成状况 224
10.6.2 PCI Express的基本错误处理 226
10.7 高级错误报告机制 230
10.7.2 粘滞比特的处理 231
10.7.1 ECRC的生成和校验 231
10.7.3 高级可修正错误的处理 232
10.7.4 高级不可修正错误的处理 233
10.7.6 根联合体错误跟踪和报告 235
10.7.5 错误记录 235
10.8 错误记录与报告小结 237
第三部分 物理层 239
11.1 物理层概述 240
第11章 物理层逻辑 240
11.1.3 接收逻辑概述 242
11.1.2 发送逻辑概述 242
11.1.1 声明 242
11.2.2 多路复用器(Mux)和多路复用器控制逻辑 244
11.2.1 发送(Tx)缓冲区 244
11.1.4 物理层链路活动状态电源管理 244
11.1.5 链路定向和初始化 244
11.2 发送逻辑细节 244
11.2.3 字节拆分(可选) 247
11.2.4 扰频器 251
11.2.5 8b/10b编码 253
11.2.6 并行到串行转换器(串行器) 261
11.2.9 发送逻辑的其他主题 262
11.2.8 发送器(Tx)时钟 262
11.2.7 差动发送驱动器 262
11.3.1 差动接收器 263
11.3 接收逻辑的细节 263
11.3.4 符号边界测定(符号锁定) 265
11.3.3 串行到并行转换器(反串行器) 265
11.3.2 接收时钟的恢复 265
11.3.5 接收器时钟补偿逻辑 266
11.3.6 通道到通道的相位补偿 267
11.3.7 8b/10b解码器 268
11.3.8 去扰频器 270
11.4 物理层错误处理 271
11.3.11 接收缓冲区(Rx缓冲区) 271
11.3.9 字节反拆分 271
11.3.10 过滤器和数据包校正检查 271
12.1 电气物理层概述 273
第12章 电气物理层 273
12.2 高速电气信令 274
12.2.2 阻抗和终结 275
12.2.1 时钟要求 275
12.2.4 ESD和短路要求 276
12.2.3 DC共模电压 276
12.2.5 接收器检测 277
12.2.6 差动驱动器和接收器 278
12.2.8 链路上发送线路的损耗 280
12.2.7 电气空闲 280
12.2.10 去矫(或预矫) 281
12.2.9 AC耦合 281
12.3.1 抖动、噪音和信号衰减 283
12.3 LVDS眼图 283
12.2.11 信标信令 283
12.3.2 眼测试(Eye Test) 284
12.3.5 噪音和信号衰减使眼变高 285
12.3.4 抖动可使眼边加宽或变窄 285
12.3.3 最优眼 285
12.4.1 概述 287
12.4 发送器驱动器特性 287
12.5 输入接收器的特性 288
12.4.2 发送驱动器一致性测试和测量负载 288
12.6 在各种电源状态中的电气物理层状态 289
13.1.1 基本复位 292
13.1 两类系统复位 292
第13章 系统复位 292
13.1.2 带内复位或Hot复位 294
13.3 从L2低功率状态中的链路唤醒 297
13.2 退出复位 297
14.1.1 概述 299
14.1 链路初始化和定向概述 299
第14章 链路初始化和定向 299
14.2 链路定向和初始化期间所用的有序集 302
14.2.1 TS1和TS2有序集 303
14.2.4 SKIP有序集 304
14.2.3 FTS有序集 304
14.2.2 电气空闲有序集 304
14.3.1 概述 305
14.3 链路定向和状况状态机(LTSSM) 305
14.3.2 LTSSM各状态概述 306
14.4 LTSSM各状态详述 307
14.4.1 检测状态 308
14.4.2 轮询状态 309
14.4.3 配置状态 312
14.4.4 恢复状态 320
14.4.6 LOs状态 324
14.4.5 Lo状态 324
14.4.7 L1状态 327
14.4.8 L2状态 328
14.4.9 Hot复位状态 329
14.4.11 回环状态 330
14.4.10 禁用状态 330
14.5.1 链路功能寄存器 332
14.5 与LTSSM相关的配置寄存器 332
14.5.2 链路状况寄存器 333
14.5.3 链路控制寄存器 334
第四部分 与电源有关的主题 335
15.1 功率预算简介 336
第15章 功率预算 336
15.2 功率预算的各个要素 337
15.3.2 扩充设备限制功率消耗 339
15.3.1 扩充端口的插槽功率极限 339
15.3 插槽功率极限控制 339
15.4 功率预算功能寄存器组 340
16.1 简介 342
第16章 电源管理 342
16.2.1 PCI PM基础 343
16.2 配置软件的入门知识 343
16.2.2 OnNow Design Initiative计划定义了全部PM 344
16.2.3 PCI Express电源管理与ACPI 347
16.3.1 PM功能寄存器组 352
16.3 设备功能的电源管理 352
16.3.2 设备的PM状态 353
16.3.3 PCI-PM寄存器详述 358
16.4 链路电源管理简介 363
16.5 链路活动状态电源管理 364
16.5.1 L0s状态 366
16.5.2 L1 ASPM状态 367
16.5.3 ASPM退出延迟 373
16.6.1 D1/D2/D3hot和L1状态 376
16.6 软件发起的链路电源管理 376
16.6.2 L2/L3准备就绪——切断链路的电源 379
16.7 链路唤醒协议和PME的生成 381
16.7.1 PME消息 382
16.7.3 避免PME消息产生背压(Back Pressure)死锁 383
16.7.2 PME序列 383
16.7.5 唤醒无法通信的链路 384
16.7.4 PME环境 384
16.7.6 辅助电源 386
第五部分 可选功能 387
17.1 背景 388
第17章 热插拔 388
17.2.2 PCI热插拔和PCI Express热插拔的区别 389
17.2.1 突然移除通知 389
17.2 PCI Express环境下的热插拔 389
17.3.1 软件基本要素 390
17.3 支持热插拔所需的基本要素 390
17.4.1 开与关状态 392
17.4 卡移除与插入过程 392
17.3.2 硬件基本要素 392
17.4.2 卡移除过程 393
17.4.3 卡插入过程 395
17.5.2 标准用户接口 396
17.5.1 背景 396
17.5 标准使用模型 396
17.6 标准热插拔控制器信令接口 399
17.7.1 插槽功能 400
17.7 热插拔控制器编程接口 400
17.7.2 插槽控制 402
17.7.3 插槽状况和事件管理 403
17.7.4 卡插槽与服务器IO模块实现 404
17.9.2 驱动程序暂停(可选) 407
17.9.1 概述 407
17.8 插槽编号 407
17.8.1 物理插槽ID 407
17.9 终止卡与驱动程序的活动 407
17.10 原语 408
18.1.1 附加卡连接器 409
18.1 简介 409
第18章 附加卡与连接器 409
18.1.2 辅助信号 413
18.1.3 电气要求 417
18.1.4 附加卡的互操作性 418
18.2.3 提升卡 419
18.2.2 服务器IO模块(SIOM) 419
18.2 正在开发的外形规格 419
18.2.1 概述 419
18.2.5 NEWCARD外形规格 420
18.2.4 微型PCI Express卡 420
第六部分 PCI Express配置 423
19.1 设备与功能的定义 424
第19章 配置概述 424
19.3 系统启动时拓扑未知 425
19.2 主总线与二级总线的定义 425
19.4.2 功能配置空间 426
19.4.1 简介 426
19.4 每种功能实现一组配置寄存器 426
19.6.3 没有对等配置事务 427
19.6.2 配置事务仅能向下游移动 427
19.5 主机/PCI桥的配置寄存器 427
19.6 由处理器发起的配置事务 427
19.6.1 仅根联合体能发起配置事务 427
19.9 如何区分PCI到PCI桥与非桥功能 428
19.8 如何发现功能 428
19.7 配置事务通过总线、设备和功能号路由 428
20.1 简介 429
第20章 配置机制 429
20.2.1 背景 430
20.2 PCI兼容配置机制 430
20.2.2 PCI兼容配置机制说明 431
20.3.1 说明 434
20.3 PCI Express增强配置机制 434
20.4 类型0配置请求 435
20.3.2 规则 435
20.5 类型1配置请求 436
20.6 PCI兼容配置访问示例 437
20.7 增强配置访问示例 438
20.8.4 PCI Express与初始化时间 439
20.8.3 PCI-X中初始化阶段的定义 439
20.8 初始配置访问 439
20.8.1 初始化期间会发生什么 439
20.8.2 PCI中初始化阶段的定义 439
20.8.5 运行期间对CRS接收的RC响应 440
21.2 带单个根联合体系统的枚举 441
21.1 简介 441
第21章 PCI Express枚举 441
21.3 枚举带多个根联合体的系统 447
21.3.3 枚举过程 448
21.3.2 增强配置机制的运行特征 448
21.3.1 PCI兼容配置机制的运行特征 448
21.4.2 交换器内的多功能设备 450
21.4.1 根联合体内的多功能设备 450
21.4 根联合体或交换器内的多功能设备 450
21.5 嵌入交换器或根联合体中的端点 451
21.6.1 概述 452
21.6 记住你的身份 452
21.7.1 RCRB地址中的问题 453
21.7 根联合体寄存器块(RCRB) 453
21.6.2 根联合体总线号/设备号的分配 453
21.6.3 在ID分配前发起请求 453
21.6.4 在ID分配前发起完成 453
21.8.3 PCI特殊周期事务 454
21.8.2 PCI Express到PCI桥或PCI Express到PCI-X桥的问题 454
21.7.2 有关RCRB的其他信息 454
21.8 其他规则 454
21.8.1 分割配置事务要求单个完成 454
22.1.1 概述 455
22.1 头类型0(Header Type 0) 455
第22章 PCI兼容配置寄存器 455
22.1.2 兼容PCI的头类型0寄存器 456
22.1.4 用于识别设备驱动程序的寄存器 457
22.1.3 与PCI不兼容的头类型0寄存器 457
22.1.6 BIST寄存器 460
22.1.5 头类型寄存器 460
22.1.7 功能指针寄存器 461
22.1.9 扩展ROM基址寄存器 463
22.1.8 CardBus CIS指针寄存器 463
22.1.10 命令寄存器 464
22.1.11 状况寄存器 466
22.1.14 中断线寄存器 467
22.1.13 主控器延时定时器寄存器 467
22.1.12 缓存行大小寄存器 467
22.1.16 基址寄存器 468
22.1.15 中断引脚寄存器 468
22.2.2 兼容PCI的头类型1寄存器 474
22.2.1 概述 474
22.1.17 Min_Gnt/Max_Lat寄存器 474
22.2 头类型1(Header Type 1) 474
22.2.3 与PCI不兼容的头类型1寄存器 475
22.2.5 总线号寄存器 476
22.2.4 术语 476
22.2.12 功能指针寄存器 478
22.2.11 BIST寄存器 478
22.2.6 厂商ID寄存器 478
22.2.7 设备ID寄存器 478
22.2.8 修订版ID寄存器 478
22.2.9 类代码寄存器 478
22.2.10 头类型寄存器 478
22.2.14 桥的存储器、寄存器组和设备ROM 479
22.2.13 基本事务过滤机制 479
22.2.15 桥的IO过滤器 480
22.2.16 桥的可预取存储器过滤器 485
22.2.18 桥命令寄存器 491
22.2.17 桥的存储器映射IO过滤器 491
22.2.19 桥状况寄存器 494
22.2.22 与桥中断有关的寄存器 497
22.2.21 桥延迟定时器寄存器 497
22.2.20 桥高速缓存行大小寄存器 497
22.3.1 AGP功能 498
22.3 PCI兼容功能 498
22.3.2 关键产品数据(VPD)功能 500
22.3.4 机箱与插槽号的分配 506
22.3.3 机箱/插槽编号寄存器简介 506
第23章 扩展ROM 512
23.1 ROM的作用——可在启动期间使用的设备 512
23.2 ROM检测 513
23.3 必需的ROM映射 514
23.4 ROM的内容 514
23.4.1 多代码映像 514
23.4.2 代码映像的格式 515
23.5 初始化代码的执行 519
23.6 开放固件简介 521
23.6.1 概述 521
23.6.2 通用设备驱动程序的格式 521
23.6.3 传递资源列表到即插即用OS 522
第24章 Express专用配置寄存器 524
24.1 简介 524
24.2.1 简介 525
24.2 PCI Express功能寄存器组 525
24.2.2 必需的寄存器 526
24.2.3 插槽寄存器 538
24.2.4 根端口寄存器 542
24.3.1 概述 544
24.3.2 高级错误报告功能 544
24.3 PCI Express扩展功能 544
24.3.3 虚拟信道(VC)功能 547
24.3.4 设备序列号功能寄存器组 557
24.3.5 功率预算功能寄存器组 558
24.4 RCRB 559
24.4.1 概述 559
24.4.4 RCRB中的扩展功能寄存器组 560
24.4.3 对RCRB的不对齐或锁定访问 560
24.4.5 RCRB丢失链路 560
24.4.2 固件向OS提供每个RCRB的基地址 560
A.1 目的 562
A.2 串行总线的拓扑结构 562
附录A 测试、调试和验证 562
A.3 双单工 563
A.4 设置分析仪、捕获和触发条件 564
A.5 链路定向,通信的第一步 565
A.6 插槽连接器与mid-bus垫 569
A.7 练习:深入的验证 570
A.8.1 概述 572
A.8.2 高速PCB的设计要求 572
A.8 信号完整性、设计和测量 572
附录B PCI Express体系结构的市场及应用 575
B.1 简介 575
B.2.1 桌面系统 576
B.2.2 服务器系统 576
B.2 企业计算系统 576
B.2.3 嵌入式控制系统 577
B.2.4 存储系统 577
B.2.5 通信系统 579
B.3 小结 580
C.2 使用模型 581
C.1 简介 581
C.2.1 智能适配器 581
附录C 用PCI Express技术实现智能适配器和多主机系统 581
C.2.3 多处理器系统 582
C.3 使用PCI的多处理器实现历史 582
C.2.2 主机故障转移 582
C.4 在PCI Express基本系统中实现多主机/智能适配器 583
C.4.1 示例:在PCI Express基本系统中实现智能适配器 585
C.4.2 示例:在PCI Express系统中实现故障转移 586
C.4.3 示例:在PCI Express基本系统中实现双主机 587
C.5 小结 588
C.6.1 直接地址转换 589
C.6.2 基于查找表的地址转换 589
C.6 地址转换 589
C.6.3 下游BAR限界寄存器 590
C.6.4 转发64位地址的存储器事务 590
附录D 类代码 592
E.2 背景 599
E.1 简介 599
E.3 PCI Express锁定协议 599
附录E 锁定事务系列 599
E.3.1 锁定消息——虚拟锁定信号 600
E.3.2 锁定协议序列——一个示例 600
E.4 锁定规则小结 602
E.4.1 与锁定事务的发起和传播有关的规则 602
E.4.2 与交换器有关的规则 603
E.4.5 与传统端点有关的规则 604
E.4.4 与根联合体有关的规则 604
E.4.6 与PCI Express端点有关的规则 604
E.4.3 与PCI Express/PCI桥有关的规则 604