Express
PCIPCIPCIPCI Express
Express
Express 体系结构导读
PCI Express 体系结构导读...................................................................................................... 1
前言...................................................................................................................................2
第 I 篇................................................................................................................................4
PCI 体系结构概述....................................................................................................4
第 1 章 PCI 总线的基本知识.................................................................................. 6
第 2 章 PCI 总线的桥与配置.................................................................................. 9
第 3 章 PCI 总线的数据交换.................................................................................. 9
第 II 篇 PCI Express 体系结构概述..............................................................................10
第 4 章 PCIe 总线概述.......................................................................................... 11
第 5 章 Montevina 的 MCH 和 ICH......................................................................12
第 6 章 PCIe 总线的事务层.................................................................................. 13
第 7 章 PCIe 总线的数据链路层与物理层.......................................................... 14
第 8 章 PCIe 总线的链路训练与电源管理.......................................................... 14
第 9 章 流量控制................................................................................................... 14
第 10 章 MSI 和 MSI-X 中断机制........................................................................16
第 11 章 PCI/PCIe 总线的序................................................................................. 17
第 12 章 PCIe 总线的应用.................................................................................... 18
第 13 章 PCIe 总线与虚拟化技术........................................................................ 18
第 III 篇 Linux 与 PCI 总线.......................................................................................... 19
第 14 章 Linux PCI 的初始化过程........................................................................20
第 15 章 Linux PCI 的中断处理............................................................................20
参考文献......................................................................................................................... 21
1
本不会书写《PCIe 体系结构导读》。《Linux PowerPC 详解--核心篇》应有《应用篇》。
世间不如意十有八九。《应用篇》完成过半,也未能成行,本不该存在。
PCIe 规范的博大,足使天下无书。倘若能全面讲述 PCIe 规范,这种书籍未印几本,也
洛阳纸贵。PCI 总线是成功的规范。Intel 也借此一统 x86 处理器的外部设备,PCI 总线绝非
完美,虽然在 PC 领域取得了巨大成功,更加依赖的是 Intel 在 PC 机领域构建的庞大的,无
可匹敌的帝国时代。Intel 在 PC 领域的成功,促进了 PCI 总线的发展。
PCIe 总线与 PCI 总线在软件层面上兼容,而并不等同。PCIe 总线诞生、发展的年代,
是 Intel 在 PC、服务器领域一统江湖的年代。PCIe 总线逐步走向顶峰,却很难做到昔日的
振臂一呼,应者云集。巨人永不缺乏应者,应者缺乏的是紧跟巨人的脚步。
一览众山小的背后滋生着自恋情怀。x86 处理器与 PCIe 总线的配合亦趋完美。PCIe 总
线愈发令人仰慕。诸多厂商望着 PCIe 总线可望而不可及的身影,感叹万千,因为世间万物
没有比自由更加可贵。
Intel 背后的 PC 帝国,束缚着所有参与者的步伐,束缚参与者离开的勇气,束缚主导者
放弃的勇气。处理器总是渐变,Intel 在 PC 领域的成就是锋利的双刃。
应用为王的年代,处理器星光黯淡。永不放弃并非真理。变革仍是永恒的主题。更高、
更快、更强并不是处理器发展的唯一道路。ARM 处理器的崭露头角,呼唤着处理器的和久
必分。Intel 依然强大,也很难更加强大。新领域的进军,也无法忽视昔日的辉煌。难以忘
却的 PCIe 总线。弃,亦或离,难舍的情怀。
前言前言前言前言
PCI 与 PCI Express 总线在处理器系统中得到了大规模应用。PCISIG 也制定了一系列 PCI
与 PCI Express 总线相关的规范,这些规范所涉及的内容庞杂广泛。对于已经理解了 PCI 与
PCI Express 总线的工程师,这些规范便于他们进一步获得必要的细节知识。对于刚刚接触
PCI 与 PCI Express 总线的工程师,这些规范性的文档并不适合阅读。在阅读这些规范时,
工程师还需要具备一些与体系结构相关的基础知识,这恰是规范并不涉及的内容。对于多数
工程师,规范文档适于查阅,而不便于学习。
本书并不是一本 PCI 和 PCI Express 总线的百科全书,因为读者完全可以通过阅读 PCI
和 PCI Express 总线规范获得细节信息。本书侧重的是 PCI 和 PCI Express 总线中与处理器体
系结构相关的内容。
本书不会对 PCI 总线的相关规范进行简单重复,部分内容并不在 PCI 总线规范定义的
范围内,比如 HOST 主桥和 RC。PCI 总线规范并没有规定处理器厂商如何实现 HOST 主桥
和 RC,不同的处理器厂商所实现 HOST 主桥和 RC 有较大差异。而这些内容却是本书所讨
论的重点内容。此外本书还讲述了一些在 PCI 总线规范中提及,但是容易被忽略的一些重
要概念。
2
本书共由三篇组成。其中第一篇由第 1~3 章组成,介绍 PCI 总线的基础知识。第二篇
由第 4~13 章组成,介绍 PCI Express 总线的相关概念。第二篇的内容以第一篇为基础。从系
统软件的角度上看,PCI Express 总线向前兼容 PCI 总线,理解 PCI Express 总线必须要建立
在深刻理解 PCI 总线的基础之上。读者需要按照顺序阅读这两篇。
第一章主要说明 PCI 总线涉及的一些基本知识。有些知识稍显过时,但是在 PCI 总线
中出现的一些数据传送方式,如 Posted、Non-Posted 和 Split 数据传送方式,依然非常重要,
也是读者需要掌握的。
第二章重点介绍 PCI 桥。PCI 桥是 PCI 及 PCI Express 体系结构的精华所在,本章还使
用了一定篇幅介绍了非透明桥。非透明桥不是 PCI 总线定义的标准桥片,但是在处理器系
统之间的互联中得到了广泛的应用。
第三章详细阐述 PCI 总线的数据传送方式,与 Cache 相关的内容和预读机制是本章的重
点。目前 PCI 与 PCI Express 对预读机制支持得并不理想。但是在可以预见的将来,PCI Express
总线将充分使用智能预读机制进一步提高总线的利用率。
第四章是 PCI Express 篇的综述。第五章以 Intel 的笔记本平台 Montevina 为例说明 RC
的各个组成模块。实际上 RC 这个概念,只有在 x86 处理器平台中才真正存在。其他处理器
系统中,并不存在严格意义上的 RC。
第六、七章分别介绍 PCI Express 总线的事务层、数据链路层和物理层。物理层是 PCI
Express 总线的真正核心,也是中国工程师最没有机会接触的内容。这也是我们这一代工程
师的遗憾与无奈。第八章简要说明了 PCI Express 总线的链路训练与电源管理。
第九章主要讨论的是通用流量控制的管理方法与策略。PCI Express 总线的流量控制机
制仍需完善,其中不等长的报文长度也是限制 PCI Express 总线流量控制进一步提高的重要
因素。
第十章重点介绍 MSI 和 MSI-X 中断机制。MSI 中断机制在 PCI 总线中率先提出,但是
在 PCI Express 总线中也得到大规模普及。目前 x86 架构多使用 MSI-X 中断机制,而在许多
嵌入式处理器中仍然使用 MSI 中断机制。
第十一章的篇幅很短,重点介绍 PCI 和 PCI Express 总线中的序。有志于学习处理器体
系结构的工程师务必要掌握这部分内容。在处理器体系结构中有关 Cache 和数据传送序的内
容非常复杂,掌握这些内容也是系统工程师进阶所必须的。
第十二章讲述了笔者的一个实际设计 Capric 卡,简单介绍了 Linux 设备驱动程序的实现
过程,并对 PCI Express 总线的延时与带宽进行了简要分析。
第十三章介绍 PCI 总线与虚拟化相关的一些内容。虚拟化技术已崭露头角,但是与虚
拟化相关的一系列内容仍将对处理器体系结构产生深远的影响。目前虚拟化技术已经在 x86
和 PowerPC 处理器中得到了广泛的应用。
3
本书第三篇以 Linux 系统为实例说明 PCI 总线在处理器系统中的使用方法,也许有许多
读者对这一篇有着浓厚的兴趣。Linux 无疑是一个非常优秀的操作系统。但是需要提醒系统
工程师,Linux 系统仅是一个完全开源的操作系统。对于有志于学习处理器体系结构的工程
师,学习 Linux 系统是必要的,但是仅靠学习 Linux 系统并不足够。
通常说来,理解处理器体系结构至少需要了解两三种处理器,并了解两三种操作系统在
不同处理器上的实现。尺有所短,寸有所长。不同的处理器和操作系统所应用的领域并不完
全相同。也是因为这个原因,本书以 PowerPC 和 x86 处理器为基础对 PCI 和 PCI Express 总
线进行说明。
本书在写作过程中得到了我的同事和在处理器及操作系统行业奋战多年的朋友们的帮
助。在 Linux 系统中许多与处理器和 PCI 总线相关的模块,都有着他们的身影。刘建国和郭
超宏先生审阅了本书的第一篇。马明辉先生审阅了本书的第二篇。张巍、余珂与刘劲松先生
审阅了第十三章。吴晓川、王勇、丁建峰、李力与吴强先生共同审阅了全书。
本书第十二章中出现的 Capric 和 Cornus 卡由郭冠军和高健协助完成。看着他们通过对
PCI Express 总线理解的逐渐深入,最终设计出一个具有较高性能的 Cornus 卡,备感欣慰。
此外杨强浩先生也参与了 Capric 和 Cornus 卡的原始设计与方案制定,在此对他及他的团队
在这个过程中给予的帮助表示感谢,我们也一道通过这两块卡的制作进一步领略了 PCI
Express 总线的技术之美。
一个优秀协议的制定,到广大技术人员理解其精妙之处,再到协议应用到一个个优秀产
品中,需要更多的人参与、投入、实践,这也是书写此书最大的动力源泉。本书的完成与我
的妻子,范淑琴女士的激励直接相关,Capricornus 也是她的星座。还需要感谢本书的编辑
车忱与策划时静,正是他们的努力使得本书提前问世。
对本书尚留疑问的读者,可通过我的邮箱 sailing.w@gmail.com 与我联系。最后希望这
本书对您有所帮助。
第第第第 IIII 篇篇篇篇
PCIPCIPCIPCI 体系结构概述
PCI(Peripheral Component Interconnect)总线的诞生与 PC(Personal Computer)的蓬勃发展
密切相关。在处理器体系结构中,PCI 总线属于局部总线(Local Bus)。局部总线作为系统总
线的延伸,其主要功能是连接外部设备。
处理器主频的不断提升,要求速度更快,带宽更高的局部总线。起初 PC 使用 8 位的
XT 总线作为局部总线,并很快升级到 16 位的 ISA(Industry Standard Architecture)总线,并逐
步 发 展 到 32 位 的 EISA(Extended Industry Standard Architecture) 、VESA(Video Electronics
Standards Association)和 MCA(Micro Channel Architecture)总线。
4
PCI 总线规范在上世纪九十年代提出。这条总线推出之后,很快得到了各大主流半导体
厂商的认同,并迅速统一了当时并存的各类局部总线,EISA、VESA 等其他 32 位总线很快
就被 PCI 总线淘汰了。从那时起,PCI 总线一直在处理器体系结构中占有重要地位。
在此后相当长的一段时间里,处理器系统的大多数外部设备都是直接或者间接地与 PCI
总线相连。即使目前 PCI Express 总线逐步取代 PCI 总线成为 PC 局部总线的主流,也不能
掩盖 PCI 总线的光芒。从软件层面上看,PCI Express 总线与 PCI 总线基本兼容;从硬件层
面上看,PCI Express 总线在很大程度上继承了 PCI 总线的设计思路。因此 PCI 总线依然是
软硬件工程师在进行处理器系统的开发与设计时,必须要掌握的一条局部总线。
PCI 总线规范由 Intel 的 IAL(Intel Architecture Lab)提出,其 V1.0 规范在 1992 年 6 月 22
日正式发布。IAL 是 Intel 的一个重要实验室,USB(Universal Serial Bus)、AGP(Accelerated
Graphics Port)、PCI Express 总线规范和 PC 的南北桥结构都是由这个实验室提出的。
IAL 起初的研究领域包括硬件和软件,但是 IAL 在软件领域的研究遭到了 Microsoft 的
抵触,IAL 提出的许多软件规范并不被 Microsoft 认可,于是 IAL 更专注硬件领域,并在 PC
体系架构上取得了一个又一个突破。IAL 是现代 PC 体系架构的重要奠基者。2001 年,IAL
由于其创始人的离去而临时解散。在 2005 年,Intel 重建这个实验室。
PCI 总线 V1.0 规范仅针对在一个 PCB(Printed Circuit Board)环境内的,器件之间的互连,
而 1993 年 4 月 30 日发布的 V2.0 规范增加了对 PCI 插槽的支持。1995 年 6 月 1 日,PCI V2.1
总线规范发布,这个规范具有里程碑意义。正是这个规范使得 PCI 总线大规模普及,至此
PCI 总线完成了对(E)ISA 和 MCA 总线的替换。
至 1996 年,VESA 总线也逐渐离开了人们的视线,当然 PCI 总线并不能完全提供显卡
所需要的带宽,真正替代 VESA 总线的是 AGP 总线。随后 PCISIG(PCI Special Interest Group)
陆续发布了 PCI 总线 V2.2,V2.3 规范,并最终将 PCI 总线规范定格在 V3.0。
除 了 PCI 总 线 规 范 外 , PCISIG 还 定 义 了 一 些 与 PCI 总 线 相 关 的 规 范 , 如
PCMCIA(Personal Computer Memory Card International Association)规范和 MiniPCI 规范。其
中 PCMCIA 规范主要针对 Laptop 应用,后来 PCMCIA 升级为 PC Card(Cardbus)规范,而 PC
Card 又升级为 ExpressCard 规范。
PC Card 规范基于 32 位,33MHz 的 PCI 总线;而 ExpressCard 规范基于 PCI Express 和
USB 2.0。这两个规范都在 Laptop 领域中获得了成功。除了 PCMCIA 规范外,Mini PCI 总
线也非常流行,与标准 PCI 插槽相比,Mini PCI 插槽占用面积较小,适用于一些对尺寸有
要求的应用。
除了以上规范之外,PCISIG 还推出了一系列和 PCI 总线直接相关的规范。如 PCI-to-PCI
桥规范、PCI 电源管理规范、PCI 热插拔规范和 CompactPCI 总线规范。其中 PCI-to-PCI 桥
规范最为重要,理解 PCI-to-PCI 桥是理解 PCI 体系结构的基础;而 CompactPCI 总线规范多
用于具有背板结构的大型系统,并支持热拔插。
PCISIG 在 PCI 总线规范的基础上,进一步提出 PCI-X 规范。与 PCI 总线相比,PCI-X
5
总线规范可以支持 133MHz、266MHz 和 533MHz 的总线频率,并在传送规则上做了一些改
动。虽然 PCI-X 总线还没有得到大规模普及就被 PCI Express 总线替代,但是在 PCI-X 总线
中提出的许多设计思想仍然被 PCI Express 总线继承。
PCI 总线规范是 Intel 对 PC 领域做出的一个巨大贡献。Intel 也在 PCI 总线规范留下了深
深的印记,PCI 总线规范的许多内容都与基于 IA (Intel Architecture)架构的 x86 处理器密切相
关。但是这并不妨碍其他处理器系统使用 PCI 总线,事实上 PCI 总线在非 x86 处理器系统
上也取得了巨大的成功。目前绝大多数处理器系统都使用 PCI/PCI Express 总线连接外部设
备,特别是一些通用外设。
随着时间的推移,PCI 和 PCI-X 总线逐步遇到瓶颈。PCI 和 PCI-X 总线使用单端并行信
号进行数据传递,由于单端信号容易被外部系统干扰,其总线频率很难进一步提高。目前,
为了获得更高的总线频率以提高总线带宽,高速串行总线逐步替代了并行总线。PCI Express
总线也逐渐替代 PCI 总线成为主流。但是从系统软件的角度上看,PCI Express 总线仍然基
于 PCI 总线。理解 PCI Express 总线的一个基础是深入理解 PCI 总线,同时 PCI Express 总
线也继承了 PCI 总线的许多概念。本篇将详细介绍与处理器体系结构相关的,一些必备的
PCI 总线知识。
为简化起见,本篇主要介绍 PCI 总线的 32 位地址模式。在实际应用中,使用 64 位地
址模式的 PCI 设备非常少。而且在 PCI Express 总线逐渐取代 PCI 总线的大趋势之下,将来
也很难会有更多的,使用 64 位地址的 PCI 设备。如果读者需要掌握 PCI 总线的 64 位地址
模式,请自行阅读 PCI 总线的相关规范。实际上,如果读者真正掌握了 PCI 总线的 32 位地
址模式之后,理解 64 位地址模式并不困难。
为节省篇幅,下文将 PCI Express 总线简称为 PCIe 总线,PCI-to-PCI 桥简称为 PCI 桥,
PCI Express-to-PCI 桥简称为 PCIe 桥,Host-to-PCI 主桥简称为 HOST 主桥。值得注意的是许
多书籍将 HOST 主桥称为 PCI 主桥或者 PCI 总线控制器。
第 1111 章 PCIPCIPCIPCI 总线的基本知识
PCI 总线作为处理器系统的局部总线,其主要目的是为了连接外部设备,而不是作为处
理器的系统总线连接 Cache 和主存储器。但是 PCI 总线、系统总线和处理器体系结构之间依
然存在着紧密的联系。
PCI 总线作为系统总线的延伸,其设计考虑了许多与处理器相关的内容,如处理器的
Cache 共享一致性和数据完整性,以及如何与处理器进行数据交换等一系列内容。其中 Cache
共享一致性和数据完整性是现代处理器局部总线的设计的重点和难点,也是本书将重点讲述
的主题之一。
独立地研究 PCI 总线并不可取,因为 PCI 总线仅是处理器系统的一个组成部分。深入
理解 PCI 总线需要了解一些与处理器体系结构相关的知识。这些知识是本书所侧重描述的,
同时也是 PCI 总线规范所忽略的内容。脱离实际的处理器系统,不容易也不可能深入理解
PCI 总线规范。
6
对于今天的读者来说,PCI 总线提出的许多概念略显过时,也有许多不足之处。但是在
当年,PCI 总线与之前的存在其他并行局部总线如 ISA、EISA 和 MCA 总线相比,具有许多
突出的优点,是一个全新的设计。
(1)
PCI 总线空间与处理器空间隔离
PCI 设备具有独立的地址空间,即 PCI 总线地址空间,该空间与存储器地址空间通过
HOST 主桥隔离。处理器需要通过 HOST 主桥才能访问 PCI 设备,而 PCI 设备需要通过 HOST
主桥才能主存储器。在 HOST 主桥中含有许多缓冲,这些缓冲使得处理器总线与 PCI 总线
工作在各自的时钟频率中,彼此互不干扰。HOST 主桥的存在也使得 PCI 设备和处理器可以
方便地共享主存储器资源。
处理器访问 PCI 设备时,必须通过 HOST 主桥进行地址转换;而 PCI 设备访问主存储
器时,也需要通过 HOST 主桥进行地址转换。HOST 主桥的一个重要作用就是将处理器访问
的存储器地址转换为 PCI 总线地址。PCI 设备使用的地址空间是属于 PCI 总线域的,而与存
储器地址空间不同。
x86 处理器对 PCI 总线域与存储器域的划分并不明晰,这也使得许多程序员并没有准确
地区分 PCI 总线域地址空间与存储器域地址空间。而本书将反复强调存储器地址和 PCI 总
线地址的区别,因为这是理解 PCI 体系结构的重要内容。
PCI 规范并没有对 HOST 主桥的设计进行约束。每一个处理器厂商使用的 HOST 主桥,
其设计都不尽相同。HOST 主桥是联系 PCI 总线与处理器的核心部件,掌握 HOST 主桥的实
现机制是深入理解 PCI 体系结构的前提。
本书将以 Freescale 的 PowerPC 处理器和 Intel 的 x86 处理器为例,说明各自 HOST 主桥
的实现方式,值得注意的是本书涉及的 PowerPC 处理器仅针对 Freescale 的 PowerPC 处理器,
而不包含 IBM 和 AMCC 的 Power 和 PowerPC 处理器。而且如果没有特别说明,本书中涉
及的 x86 处理器特指 Intel 的处理器,而不是其他厂商的 x86 处理器。
(2)
可扩展性
PCI 总线具有很强的扩展性。在 PCI 总线中,HOST 主桥可以直接推出一条 PCI 总线,
这条总线也是该 HOST 主桥的所管理的第一条 PCI 总线,该总线还可以通过 PCI 桥扩展出
一系列 PCI 总线,并以 HOST 主桥为根节点,形成 1 颗 PCI 总线树。这些 PCI 总线都可以
连接 PCI 设备,但是在 1 颗 PCI 总线树上,最多只能挂接 256 个 PCI 设备(包括 PCI 桥)。
在同一条 PCI 总线上的设备间可以直接通信,而并不会影响其他 PCI 总线上设备间的
数据通信。隶属于同一颗 PCI 总线树上的 PCI 设备,也可以直接通信,但是需要通过 PCI
桥进行数据转发。
PCI 桥是 PCI 总线的一个重要组成部件,该部件的存在使得 PCI 总线极具扩展性。PCI
桥也是有别于其他局部总线的一个重要部件。在“以 HOST 主桥为根节点”的 PCI 总线树中,
每一个 PCI 桥下也可以连接一个 PCI 总线子树,PCI 桥下的 PCI 总线仍然可以使用 PCI 桥继
7
续进行总线扩展。
PCI 桥可以管理这个 PCI 总线子树,PCI 桥的配置空间含有一系列管理 PCI 总线子树的
配置寄存器。在 PCI 桥的两端,分别连接了两条总线,分别是上游总线(Primary Bus)和下游
总线(Secondary Bus)。其中与处理器距离较近的总线被称为上游总线,另一条被称为下游总
线。这两条总线间的通信需要通过 PCI 桥进行。PCI 桥中的许多概念被 PCIe 总线采纳,理
解 PCI 桥也是理解 PCIe 体系结构的基础。
(3)
动态配置机制
PCI 设备使用的地址可以根据需要由系统软件动态分配。PCI 总线使用这种方式合理地
解决了设备间的地址冲突,从而实现了“即插即用”功能。从而 PCI 总线不需要使用 ISA 或
者 EISA 接口卡为解决地址冲突而使用的硬件跳线。
每一个 PCI 设备都有独立的配置空间,在配置空间中含有该设备在 PCI 总线中使用的
基地址,系统软件可以动态配置这个基地址,从而保证每一个 PCI 设备使用的物理地址并
不相同。PCI 桥的配置空间中含有其下 PCI 子树所能使用的地址范围。
(4)
总线带宽
PCI 总线与之前的局部总线相比,极大提高了数据传送带宽,32 位/33MHz 的 PCI 总线
可以提供 132MB/s 的峰值带宽,而 64 位/66MHz 的 PCI 总线可以提供的峰值带宽为 532MB/s。
虽然 PCI 总线所能提供的峰值带宽远不能和 PCIe 总线相比,但是与之前的局部总线 ISA、
EISA 和 MCA 总线相比,仍然具有极大的优势。
ISA 总线的最高主频为 8MHz,位宽为 16,其峰值带宽为 16MB/s;EISA 总线的最高主
频为 8.33MHz,位宽为 32,其峰值带宽为 33MB/s;而 MCA 总线的最高主频为 10MHz,最
高位宽为 32,其峰值带宽为 40MB/s。PCI 总线提供的峰值带宽远高于这些总线。
(5)
共享总线机制
PCI 设备通过仲裁获得 PCI 总线的使用权后,才能进行数据传送,在 PCI 总线上进行数
据传送,并不需要处理器进行干预。
PCI 总线仲裁器不在 PCI 总线规范定义的范围内,也不一定是 HOST 主桥和 PCI 桥的一
部分。虽然绝大多数 HOST 主桥和 PCI 桥都包含 PCI 总线仲裁器,但是在某些处理器系统
的设计中也可以使用独立的 PCI 总线仲裁器。如在 PowerPC 处理器的 HOST 主桥中含有 PCI
总线仲裁器,但是用户可以关闭这个总线仲裁器,而使用独立的 PCI 总线仲裁器。
PCI 设备使用共享总线方式进行数据传递,在同一条总线上,所有 PCI 设备共享同一总
线带宽,这将极大地影响 PCI 总线的利用率。这种机制显然不如 PCIe 总线采用的交换结构,
但是在 PCI 总线盛行的年代,半导体的工艺、设计能力和制作成本决定了采用共享总线方
式是当时的最优选择。
8