PCI与PCI Express(PCIe)总线在处理器系统中得到了大规模应用。PCISIG(Peripheral Component Interconnect Special Interest Group,外围部件互连专业组)也制定了一系列PCI与PCI Express总线相关的规范,这些规范所涉及的内容广泛且庞杂。对于已经理解了PCI与PCI Express总线的工程师,这些规范便于其进一步获得必要的细节知识;而对于刚刚接触PCI和PCI Express总线的工程师,这些规范性的文档并不适合阅读。在阅读这些规范时,工程师还需要具备一定的与体系结构相关的基础知识,这恰恰是规范并不涉及的内容。对于多数工程师,规范文档适合于查阅,而不便于学习。
本书将以处理器体系结构为主线介绍PCI Express总线的组成,以便读者进一步理解PCI Express总线协议。本书并不是关于PCI和PCI Express总线的百科全书,因为读者完全可以通过阅读PCI和PCI Express总线规范获得细节信息。本书侧重的是PCI和PCI Express总线中与处理器体系结构相关的内容。
本书不会对PCI总线的相关规范进行简单重复,部分内容并不在PCI总线规范定义的范围内,例如HOST主桥和RC。PCI总线规范并未规定处理器产商如何实现HOST主桥和RC,不同的处理器厂商实现的HOST主桥和RC有较大差异,而这些内容正是本书所讨论的重点。此外,本书还讲述了一些在PCI总线规范中提及、但却容易被忽略的一些重要概念。
本书由三篇组成:第I篇(第1~3章)、第II篇(第4~13章)、第III篇(第14~15章)。
(1)第I篇
第I篇(第1~3章)介绍了PCI总线的基础知识。
主要说明了PCI总线涉及的一些基本知识。有些知识稍显过时,但是在PCI总线中出现的一些数据传送方式,如Posted、Non-Posted和Split数据传送方式,依然非常重要,仍是读者需要掌握的。
重点介绍了PCI桥。PCI桥是PCI及PCI Express体系结构的精华所在。本章还使用一定篇幅介绍了非透明桥。非透明桥不是PCI总线定义的标准桥片,但是在处理器系统之间的互联中得到了广泛的应用。
阐述了PCI总线的数据传送方式。与Cache相关的内容和预读取机制是本章的重点。目前PCI与PCI Express对预读取机制的支持并不理想。但在可以预见的将来,PCI Express总线将充分使用智能预读取机制进一步提高总线的利用率。
(2)第II篇
第II篇(第4~13章)介绍了PCI Express总线的相关概念。第II篇的内容以第I篇为基础。从系统软件的角度来看,PCI Express总线向前兼容PCI总线,理解PCI Express总线必须建立在深刻理解PCI总线的基础之上。因此,读者需要按照顺序阅读这两篇。
本章是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处理器中得到了广泛的应用。
(3)第III篇
第III篇(第14~15章)以Linux系统为实例,说明了PCI总线在处理器系统中的使用方法。可能会有许多读者对这一篇有浓厚的兴趣。Linux无疑是一个非常优秀的操作系统,但是需要提醒系统工程师(们),Linux系统只是一个完全开源的操作系统,对于有志于学习处理器体系结构的工程师,学习Linux系统是必要的,但是仅靠学习Linux系统远远不够。
通常来说,理解处理器体系结构至少需要了解两三种处理器,并了解它们在不同操作系统上的实现。尺有所短寸有所长,不同的处理器和操作系统所应用的领域并不完全相同。也正是这个原因,本书以PowerPC和x86处理器为基础,对PCI和PCI Express总线进行说明。
本书在写作过程中得到了我的同事和在处理器及操作系统行业奋战多年的朋友们的帮助。在Linux系统中许多与处理器和PCI总线相关的模块,都有着他们的辛勤付出。刘建国和郭超宏先生审阅了本书的第I篇;马明辉先生审阅了本书的第II篇;张巍、余珂与刘劲松先生审阅了第13章。吴晓川、王勇、丁建峰、李力与吴强先生共同审阅了全书。
本书第12章中出现的Capric和Cornus卡由郭冠军和高健协助完成。看着他们通过对PCI Express总线理解的逐渐深入,最终设计出一款具有较高性能的Cornus卡,倍感欣慰。此外,杨强浩先生也参与了Capric和Cornus卡的原始设计与方案制定,在此对他以及他的团队在这一过程中给予的帮助表示感谢,我们也一道通过这两块卡的制作,进一步领略了PCI Express总线的技术之美。
一个优秀的协议,从制定到广大技术人员理解其精妙之处、再到协议应用到一个个优秀的产品中,需要更多地人参与、投入、实践,这也是编写此书最大的动力源泉。本书的完成与我的妻子范淑琴的激励直接相关,Capricornus(摩羯座)也是她的星座。
还要感谢本书的编辑车忱与策划时静,正是他们的努力使得本书提前面世。
对本书尚留疑问的读者,可通过我的邮箱sailing.w@gmail.com与我联系。最后,希望这本书对您有所帮助。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作者:? 王齐