第I篇PCI體係結構概述
PCI總線作為處理器係統的局部總線,主要目的是為了連接外部設備,而不是作為處理器的係統總線連接Cache和主存儲器。但是PCI總線、係統總線和處理器體係結構之間依然存在著緊密的聯係。
PCI總線作為係統總線的延伸,其設計考慮了許多與處理器相關的內容,如處理器的Cache共享一致性和數據完整性,以及如何與處理器進行數據交換等一係列內容。其中Cache共享一致性和數據完整性是現代處理器局部總線的設計的重點和難點,也是本書將重點講述的主題之一。
獨立地研究PCI總線並不可取,因為PCI總線僅是處理器係統的一個組成部分。深入理解PCI總線需要了解一些與處理器體係結構相關的知識。這些知識是本書所側重描述的,同時也是PCI總線規範所忽略的內容。脫離實際的處理器係統,不容易也不可能深入理解PCI總線規範。
對於今天的讀者來說,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橋繼續進行總線擴展。
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(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)總線。
PCI總線規範在上世紀九十年代提出。這條總線推出之後,很快得到了各大主流半導體廠商的認同,迅速統一了當時並存的各類局部總線。EISA、VESA等其他32位總線很快就被PCI總線淘汰了。從那時起,PCI總線一直在處理器體係結構中占有重要地位。
在此後相當長的一段時間裏,PC處理器係統的大多數外部設備都是直接或者間接地與PCI總線相連。即使目前PCI Express總線逐步取代了PCI總線成為PC局部總線的主流,也不能掩蓋PCI總線的光芒。從軟件層麵上看,PCI Express總線與PCI總線基本兼容;從硬件層麵上看,PCI Express總線在很大程度上繼承了PCI總線的設計思路。因此PCI總線依然是軟硬件工程師在進行處理器係統的開發與設計時,必須要掌握的一條局部總線。
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總線規範可以支持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總線控製器。
最後更新:2017-04-03 16:48:39