PCI(Peripheral Component Interconnect)總線的誕生與PC(Personal Computer)的蓬勃發(fā)展密切相關(guān)。在處理器體系結(jié)構(gòu)中,PCI總線屬于局部總線(Local Bus),。局部總線作為系統(tǒng)總線的延伸,主要功能是為了連接外部設(shè)備,。
處理器主頻的不斷提升,要求速度更快,,帶寬更高的局部總線,。起初PC使用8位的XT總線作為局部總線,并很快升級到16位的ISA(Industry Standard Architecture)總線,,逐步發(fā)展到32位的EISA(Extended Industry Standard Architecture),、VESA(Video Electronics Standards Association)和MCA(Micro Channel Architecture)總線。
PCI總線規(guī)范在上世紀(jì)九十年代提出,。這條總線推出之后,,很快得到了各大主流半導(dǎo)體廠商的認(rèn)同,迅速統(tǒng)一了當(dāng)時并存的各類局部總線,。EISA,、VESA等其他32位總線很快就被PCI總線淘汰了。從那時起,,PCI總線一直在處理器體系結(jié)構(gòu)中占有重要地位,。
在此后相當(dāng)長的一段時間里,PC處理器系統(tǒng)的大多數(shù)外部設(shè)備都是直接或者間接地與PCI總線相連,。即使目前PCI Express總線逐步取代了PCI總線成為PC局部總線的主流,,也不能掩蓋PCI總線的光芒。從軟件層面上看,,PCI Express總線與PCI總線基本兼容,;從硬件層面上看,PCI Express總線在很大程度上繼承了PCI總線的設(shè)計思路,。因此PCI總線依然是軟硬件工程師在進行處理器系統(tǒng)的開發(fā)與設(shè)計時,,必須要掌握的一條局部總線。
PCI總線V1.0規(guī)范僅針對在一個PCB(Printed Circuit Board)環(huán)境內(nèi)的,,器件之間的互連,,而1993年4月30日發(fā)布的V2.0規(guī)范增加了對PCI插槽的支持,。1995年6月1日,PCI V2.1總線規(guī)范發(fā)布,,這個規(guī)范具有里程碑意義,。正是這個規(guī)范使得PCI總線大規(guī)模普及,至此PCI總線完成了對(E)ISA和MCA總線的替換,。
至1996年,,VESA總線也逐漸離開了人們的視線,,當(dāng)然PCI總線并不能完全提供顯卡所需要的帶寬,,真正替代VESA總線的是AGP總線。隨后PCISIG(PCI Special Interest Group)陸續(xù)發(fā)布了PCI總線V2.2,,V2.3規(guī)范,,并最終將PCI總線規(guī)范定格在V3.0。
除了PCI總線規(guī)范外,,PCISIG還定義了一些與PCI總線相關(guān)的規(guī)范,,如PCMCIA(Personal Computer Memory Card International Association)規(guī)范和MiniPCI規(guī)范。其中PCMCIA規(guī)范主要針對Laptop應(yīng)用,,后來PCMCIA升級為PC Card(Cardbus)規(guī)范,,而PC Card又升級為ExpressCard規(guī)范。
PC Card規(guī)范基于32位,,33MHz的PCI總線,;而ExpressCard規(guī)范基于PCI Express和USB 2.0。這兩個規(guī)范都在Laptop領(lǐng)域中獲得了成功,。除了PCMCIA規(guī)范外,,Mini PCI總線也非常流行,與標(biāo)準(zhǔn)PCI插槽相比,,Mini PCI插槽占用面積較小,,適用于一些對尺寸有要求的應(yīng)用。
除了以上規(guī)范之外,,PCISIG還推出了一系列和PCI總線直接相關(guān)的規(guī)范,。如PCI-to-PCI橋規(guī)范、PCI電源管理規(guī)范,、PCI熱插拔規(guī)范和CompactPCI總線規(guī)范,。其中PCI-to-PCI橋規(guī)范最為重要,理解PCI-to-PCI橋是理解PCI體系結(jié)構(gòu)的基礎(chǔ),;而CompactPCI總線規(guī)范多用于具有背板結(jié)構(gòu)的大型系統(tǒng),,并支持熱拔插。
PCISIG在PCI總線規(guī)范的基礎(chǔ)上,,進一步提出PCI-X規(guī)范,。與PCI總線相比,,PCI-X總線規(guī)范可以支持133MHz、266MHz和533MHz的總線頻率,,并在傳送規(guī)則上做了一些改動,。雖然PCI-X總線還沒有得到大規(guī)模普及就被PCI Express總線替代,但是在PCI-X總線中提出的許多設(shè)計思想仍然被PCI Express總線繼承,。
PCI總線規(guī)范是Intel對PC領(lǐng)域做出的一個巨大貢獻,。Intel也在PCI總線規(guī)范留下了深深的印記,PCI總線規(guī)范的許多內(nèi)容都與基于IA (Intel Architecture)架構(gòu)的x86處理器密切相關(guān),。但是這并不妨礙其他處理器系統(tǒng)使用PCI總線,,事實上PCI總線在非x86處理器系統(tǒng)上也取得了巨大的成功。目前絕大多數(shù)處理器系統(tǒng)都使用PCI/PCI Express總線連接外部設(shè)備,,特別是一些通用外設(shè),。
隨著時間的推移,PCI和PCI-X總線逐步遇到瓶頸,。PCI和PCI-X總線使用單端并行信號進行數(shù)據(jù)傳遞,,由于單端信號容易被外部系統(tǒng)干擾,其總線頻率很難進一步提高,。目前,,為了獲得更高的總線頻率以提高總線帶寬,高速串行總線逐步替代了并行總線,。PCI Express總線也逐漸替代PCI總線成為主流,。但是從系統(tǒng)軟件的角度上看,PCI Express總線仍然基于PCI總線,。理解PCI Express總線的一個基礎(chǔ)是深入理解PCI總線,,同時PCI Express總線也繼承了PCI總線的許多概念。本篇將詳細介紹與處理器體系結(jié)構(gòu)相關(guān)的,,一些必備的PCI總線知識,。
為簡化起見,本篇主要介紹PCI總線的32位地址模式,。在實際應(yīng)用中,,使用64位地址模式的PCI設(shè)備非常少。而且在PCI Express總線逐漸取代PCI總線的大趨勢之下,,將來也很難會有更多的,,使用64位地址的PCI設(shè)備。如果讀者需要掌握PCI總線的64位地址模式,,請自行閱讀PCI總線的相關(guān)規(guī)范,。實際上,如果讀者真正掌握了PCI總線的32位地址模式之后,,理解64位地址模式并不困難,。
為節(jié)省篇幅,,下文將PCI Express總線簡稱為PCIe總線,PCI-to-PCI橋簡稱為PCI橋,,PCI Express-to-PCI橋簡稱為PCIe橋,,Host-to-PCI主橋簡稱為HOST主橋。值得注意的是許多書籍將HOST主橋稱為PCI主橋或者PCI總線控制器,。
PCI總線的基本知識
PCI總線作為處理器系統(tǒng)的局部總線,,主要目的是為了連接外部設(shè)備,而不是作為處理器的系統(tǒng)總線連接Cache和主存儲器,。但是PCI總線,、系統(tǒng)總線和處理器體系結(jié)構(gòu)之間依然存在著緊密的聯(lián)系。
PCI總線作為系統(tǒng)總線的延伸,,其設(shè)計考慮了許多與處理器相關(guān)的內(nèi)容,,如處理器的Cache共享一致性和數(shù)據(jù)完整性,,以及如何與處理器進行數(shù)據(jù)交換等一系列內(nèi)容,。其中Cache共享一致性和數(shù)據(jù)完整性是現(xiàn)代處理器局部總線的設(shè)計的重點和難點,也是本書將重點講述的主題之一,。
獨立地研究PCI總線并不可取,,因為PCI總線僅是處理器系統(tǒng)的一個組成部分。深入理解PCI總線需要了解一些與處理器體系結(jié)構(gòu)相關(guān)的知識,。這些知識是本書所側(cè)重描述的,,同時也是PCI總線規(guī)范所忽略的內(nèi)容。脫離實際的處理器系統(tǒng),,不容易也不可能深入理解PCI總線規(guī)范,。
對于今天的讀者來說,PCI總線提出的許多概念略顯過時,,也有許多不足之處,。但是在當(dāng)年,PCI總線與之前的存在其他并行局部總線如ISA,、EISA和MCA總線相比,,具有許多突出的優(yōu)點,是一個全新的設(shè)計,。
?。?) PCI總線空間與處理器空間隔離
PCI設(shè)備具有獨立的地址空間,即PCI總線地址空間,,該空間與存儲器地址空間通過HOST主橋隔離,。處理器需要通過HOST主橋才能訪問PCI設(shè)備,而PCI設(shè)備需要通過HOST主橋才能主存儲器,。在HOST主橋中含有許多緩沖,,這些緩沖使得處理器總線與PCI總線工作在各自的時鐘頻率中,,彼此互不干擾。HOST主橋的存在也使得PCI設(shè)備和處理器可以方便地共享主存儲器資源,。
處理器訪問PCI設(shè)備時,,必須通過HOST主橋進行地址轉(zhuǎn)換;而PCI設(shè)備訪問主存儲器時,,也需要通過HOST主橋進行地址轉(zhuǎn)換,。HOST主橋的一個重要作用就是將處理器訪問的存儲器地址轉(zhuǎn)換為PCI總線地址。PCI設(shè)備使用的地址空間是屬于PCI總線域的,,而與存儲器地址空間不同,。
x86處理器對PCI總線域與存儲器域的劃分并不明晰,這也使得許多程序員并沒有準(zhǔn)確地區(qū)分PCI總線域地址空間與存儲器域地址空間,。而本書將反復(fù)強調(diào)存儲器地址和PCI總線地址的區(qū)別,,因為這是理解PCI體系結(jié)構(gòu)的重要內(nèi)容。
PCI規(guī)范并沒有對HOST主橋的設(shè)計進行約束,。每一個處理器廠商使用的HOST主橋,,其設(shè)計都不盡相同。HOST主橋是聯(lián)系PCI總線與處理器的核心部件,,掌握HOST主橋的實現(xiàn)機制是深入理解PCI體系結(jié)構(gòu)的前提,。
本書將以Freescale的PowerPC處理器和Intel的x86處理器為例,說明各自HOST主橋的實現(xiàn)方式,,值得注意的是本書涉及的PowerPC處理器僅針對Freescale的PowerPC處理器,,而不包含IBM和AMCC的Power和PowerPC處理器。而且如果沒有特別說明,,本書中涉及的x86處理器特指Intel的處理器,,而不是其他廠商的x86處理器。
?。?) 可擴展性
PCI總線具有很強的擴展性,。在PCI總線中,HOST主橋可以直接推出一條PCI總線,,這條總線也是該HOST主橋的所管理的第一條PCI總線,,該總線還可以通過PCI橋擴展出一系列PCI總線,并以HOST主橋為根節(jié)點,,形成1顆PCI總線樹,。這些PCI總線都可以連接PCI設(shè)備,但是在1顆PCI總線樹上,,最多只能掛接256個PCI設(shè)備(包括PCI橋),。
在同一條PCI總線上的設(shè)備間可以直接通信,并不會影響其他PCI總線上設(shè)備間的數(shù)據(jù)通信。隸屬于同一顆PCI總線樹上的PCI設(shè)備,,也可以直接通信,,但是需要通過PCI橋進行數(shù)據(jù)轉(zhuǎn)發(fā)。
PCI橋是PCI總線的一個重要組成部件,,該部件的存在使得PCI總線極具擴展性,。PCI橋也是有別于其他局部總線的一個重要部件。在“以HOST主橋為根節(jié)點”的PCI總線樹中,,每一個PCI橋下也可以連接一個PCI總線子樹,,PCI橋下的PCI總線仍然可以使用PCI橋繼續(xù)進行總線擴展。
PCI橋可以管理這個PCI總線子樹,,PCI橋的配置空間含有一系列管理PCI總線子樹的配置寄存器,。在PCI橋的兩端,分別連接了兩條總線,,分別是上游總線(Primary Bus)和下游總線(Secondary Bus),。其中與處理器距離較近的總線被稱為上游總線,另一條被稱為下游總線,。這兩條總線間的通信需要通過PCI橋進行,。PCI橋中的許多概念被PCIe總線采納,理解PCI橋也是理解PCIe體系結(jié)構(gòu)的基礎(chǔ),。
?。?) 動態(tài)配置機制
PCI設(shè)備使用的地址可以根據(jù)需要由系統(tǒng)軟件動態(tài)分配。PCI總線使用這種方式合理地解決了設(shè)備間的地址沖突,,從而實現(xiàn)了“即插即用”功能。從而PCI總線不需要使用ISA或者EISA接口卡為解決地址沖突而使用的硬件跳線,。
每一個PCI設(shè)備都有獨立的配置空間,,在配置空間中含有該設(shè)備在PCI總線中使用的基地址,系統(tǒng)軟件可以動態(tài)配置這個基地址,,從而保證每一個PCI設(shè)備使用的物理地址并不相同,。PCI橋的配置空間中含有其下PCI子樹所能使用的地址范圍。
?。?) 總線帶寬
PCI總線與之前的局部總線相比,,極大提高了數(shù)據(jù)傳送帶寬,32位/33MHz的PCI總線可以提供132MB/s的峰值帶寬,,而64位/66MHz的PCI總線可以提供的峰值帶寬為532MB/s,。雖然PCI總線所能提供的峰值帶寬遠不能和PCIe總線相比,但是與之前的局部總線ISA,、EISA和MCA總線相比,,仍然具有較大的優(yōu)勢。
ISA總線的最高主頻為8MHz,位寬為16,,其峰值帶寬為16MB/s,;EISA總線的最高主頻為8.33MHz,位寬為32,,其峰值帶寬為33MB/s,;而MCA總線的最高主頻為10MHz,最高位寬為32,,其峰值帶寬為40MB/s,。PCI總線提供的峰值帶寬遠高于這些總線。
?。?) 共享總線機制
PCI設(shè)備通過仲裁獲得PCI總線的使用權(quán)后,,才能進行數(shù)據(jù)傳送,在PCI總線上進行數(shù)據(jù)傳送,,并不需要處理器進行干預(yù),。
PCI總線仲裁器不在PCI總線規(guī)范定義的范圍內(nèi),也不一定是HOST主橋和PCI橋的一部分,。雖然絕大多數(shù)HOST主橋和PCI橋都包含PCI總線仲裁器,,但是在某些處理器系統(tǒng)的設(shè)計中也可以使用獨立的PCI總線仲裁器。如在PowerPC處理器的HOST主橋中含有PCI總線仲裁器,,但是用戶可以關(guān)閉這個總線仲裁器,,而使用獨立的PCI總線仲裁器。
PCI設(shè)備使用共享總線方式進行數(shù)據(jù)傳遞,,在同一條總線上,,所有PCI設(shè)備共享同一總線帶寬,這將極大地影響PCI總線的利用率,。這種機制顯然不如PCIe總線采用的交換結(jié)構(gòu),,但是在PCI總線盛行的年代,半導(dǎo)體的工藝,、設(shè)計能力和制作成本決定了采用共享總線方式是當(dāng)時的最優(yōu)選擇,。
(6) 中斷機制
PCI總線上的設(shè)備可以通過四根中斷請求信號INTA~D#向處理器提交中斷請求,。與ISA總線上的設(shè)備不同,,PCI總線上的設(shè)備可以共享這些中斷請求信號,不同的PCI設(shè)備可以將這些中斷請求信號“線與”后,,與中斷控制器的中斷請求引腳連接,。PCI設(shè)備的配置空間記錄了該設(shè)備使用這四根中斷請求信號的信息。
PCI總線進一步提出了MSI(Message Signal Interrupt)機制,,該機制使用存儲器寫總線事務(wù)傳遞中斷請求,,并可以使用x86處理器FSB(Front Side Bus)總線提供的Interrupt Message總線事務(wù),,從而提高了PCI設(shè)備的中斷請求效率。
雖然從現(xiàn)代總線技術(shù)的角度上看,,PCI總線仍有許多不足之處,,但也不能否認(rèn)PCI總線已經(jīng)獲得了巨大的成功,不僅x86處理器將PCI總線作為標(biāo)準(zhǔn)的局部總線連接各類外部設(shè)備,,PowerPC,、MIPS和ARM[1]處理器也將PCI總線作為標(biāo)準(zhǔn)局部總線。除此之外,,基于PCI總線的外部設(shè)備,,如以太網(wǎng)控制器、聲卡,、硬盤控制器等,,也已經(jīng)成為主流。
[1] 在ARM處理器中,,使用SoC平臺總線,,即AMBA總線,連接片內(nèi)設(shè)備,。但是某些ARM生產(chǎn)廠商,,依然使用AMBA-to-PCI橋推出PCI總線,以連接PCI設(shè)備,。
PCI總線的組成結(jié)構(gòu)
如上文所述,,PCI總線作為處理器系統(tǒng)的局部總線,是處理器系統(tǒng)的一個組成部件,,講述PCI總線的組成結(jié)構(gòu)不能離開處理器系統(tǒng)這個大環(huán)境,。在一個處理器系統(tǒng)中,與PCI總線相關(guān)的模塊如圖1?1所示,。
如圖1-1所示在一個處理器系統(tǒng)中,,與PCI總線相關(guān)的模塊包括,HOST主橋,、PCI總線、PCI橋和PCI設(shè)備,。PCI總線由HOST主橋和PCI橋推出,,HOST主橋與主存儲器控制器在同一級總線上,PCI設(shè)備可以方便地通過HOST主橋訪問主存儲器,,即進行DMA操作,。
值得注意的是,PCI設(shè)備的DMA操作需要與處理器系統(tǒng)的Cache進行一致性操作,,當(dāng)PCI設(shè)備通過HOST主橋訪問主存儲器時,,Cache一致性模塊將進行地址監(jiān)聽,并根據(jù)監(jiān)聽的結(jié)果改變Cache的狀態(tài)。
在一些簡單的處理器系統(tǒng)中,,可能不含有PCI橋,,此時所有PCI設(shè)備都是連接在HOST主橋推出的PCI總線上,此外在一些處理器系統(tǒng)中可能含有多個HOST主橋,,如在圖1?1所示的處理器系統(tǒng)中含有HOST主橋x和HOST主橋Y,。
1.1.1 HOST主橋
HOST主橋是一個很特別的橋片,其主要功能是隔離處理器系統(tǒng)的存儲器域與處理器系統(tǒng)的PCI總線域,,管理PCI總線域,,并完成處理器與PCI設(shè)備間的數(shù)據(jù)交換。處理器與PCI設(shè)備間的數(shù)據(jù)交換主要由“處理器訪問PCI設(shè)備的地址空間”和“PCI設(shè)備使用DMA機制訪問主存儲器”這兩部分組成,。
為簡便起見,,下文將處理器系統(tǒng)的存儲器域簡稱為存儲器域,而將處理器系統(tǒng)的PCI總線域稱為PCI總線域,,存儲器域和PCI總線域的詳細介紹見第2.1節(jié),。值得注意的是,在一個處理器系統(tǒng)中,,有幾個HOST主橋,,就有幾個PCI總線域。
HOST主橋在處理器系統(tǒng)中的位置并不相同,,如PowerPC處理器將HOST主橋與處理器集成在一個芯片中,。而有些處理器不進行這種集成,如x86處理器使用南北橋結(jié)構(gòu),,處理器內(nèi)核在一個芯片中,,而HOST主橋在北橋中。但是從處理器體系結(jié)構(gòu)的角度上看,,這些集成方式并不重要,。
PCI設(shè)備通過HOST主橋訪問主存儲器時,需要與處理器的Cache進行一致性操作,,因此在設(shè)計HOST主橋時需要重點考慮Cache一致性操作,。在HOST主橋中,還含有許多數(shù)據(jù)緩沖,,以支持PCI總線的預(yù)讀機制,。
HOST主橋是聯(lián)系處理器與PCI設(shè)備的橋梁。在一個處理器系統(tǒng)中,,每一個HOST主橋都管理了一顆PCI總線樹,,在同一顆PCI總線樹上的所有PCI設(shè)備屬于同一個PCI總線域。如圖1?1所示,,HOST主橋x之下的PCI設(shè)備屬于PCI總線x域,,而HOST主橋y之下的PCI設(shè)備屬于PCI總線y域,。在這顆總線樹上的所有PCI設(shè)備的配置空間都由HOST主橋通過配置讀寫總線周期訪問。
如果HOST主橋支持PCI V3.0規(guī)范的Peer-to-Peer數(shù)據(jù)傳送方式,,那么分屬不同PCI總線域的PCI設(shè)備可以直接進行數(shù)據(jù)交換,。如圖1?1所示,如果HOST主橋y支持Peer-to-Peer數(shù)據(jù)傳送方式,,PCI設(shè)備y01可以直接訪問PCI設(shè)備01或者PCI設(shè)備11,,而不需要通過處理器的參與。但是這種跨越總線域的數(shù)據(jù)傳送方式在PC架構(gòu)中并不常用,,在PC架構(gòu)中,,重點考慮的是PCI設(shè)備與主存儲器之間的數(shù)據(jù)交換,而不是PCI設(shè)備之間的數(shù)據(jù)交換,。此外在PC架構(gòu)中,,具有兩個HOST主橋的處理器系統(tǒng)也并不多見。
在PowerPC處理器中,,HOST主橋可以通過設(shè)置Inbound寄存器,,使得分屬于不同PCI總線域的設(shè)備可以直接通信。許多PowerPC處理器都具有多個HOST主橋,,有關(guān)PowerPC處理器使用的HOST主橋詳見第2.2節(jié),。
1.1.2 PCI總線
在處理器系統(tǒng)中,含有PCI總線和PCI總線樹這兩個概念,。這兩個概念并不相同,,在一顆PCI總線樹中可能具有多條PCI總線,而具有血緣關(guān)系的PCI總線組成一顆PCI總線樹,。如在圖1?1所示的處理器系統(tǒng)中,,PCI總線x樹具有兩條PCI總線,分別為PCI總線x0和PCI總線x1,。而PCI總線y樹中僅有一條PCI總線,。
PCI總線由HOST主橋或者PCI橋管理,用來連接各類設(shè)備,,如聲卡,、網(wǎng)卡和IDE接口卡等。在一個處理器系統(tǒng)中,,可以通過PCI橋擴展PCI總線,,并形成具有血緣關(guān)系的多級PCI總線,從而形成PCI總線樹型結(jié)構(gòu),。在處理器系統(tǒng)中有幾個HOST主橋,就有幾顆這樣的PCI總線樹,,而每一顆PCI總線樹都與一個PCI總線域?qū)?yīng),。
與HOST主橋直接連接的PCI總線通常被命名為PCI總線0,。考慮到在一個處理器系統(tǒng)中可能有多個主橋,,圖1?1將HOST主橋x推出的PCI總線命名為x0總線,,而將PCI橋x1擴展出的PCI總線稱之為x1總線;而將HOST主橋y推出的PCI總線稱為y0~yn,。分屬不同PCI總線樹的設(shè)備,,其使用的PCI總線地址空間分屬于不同的PCI總線域空間。
1.1.3 PCI設(shè)備
在PCI總線中有三類設(shè)備,,PCI主設(shè)備,、PCI從設(shè)備和橋設(shè)備。其中PCI從設(shè)備只能被動地接收來自HOST主橋,,或者其他PCI設(shè)備的讀寫請求,;而PCI主設(shè)備可以通過總線仲裁獲得PCI總線的使用權(quán),主動地向其他PCI設(shè)備或者主存儲器發(fā)起存儲器讀寫請求,。而橋設(shè)備的主要作用是管理下游的PCI總線,,并轉(zhuǎn)發(fā)上下游總線之間的總線事務(wù)。
一個PCI設(shè)備可以即是主設(shè)備也是從設(shè)備,,但是在同一個時刻,,這個PCI設(shè)備或者為主設(shè)備或者為從設(shè)備。PCI總線規(guī)范將PCI主從設(shè)備統(tǒng)稱為PCI Agent設(shè)備,。在處理器系統(tǒng)中常見的PCI網(wǎng)卡,、顯卡、聲卡等設(shè)備都屬于PCI Agent設(shè)備,。
在PCI總線中,,HOST主橋是一個特殊的PCI設(shè)備,該設(shè)備可以獲取PCI總線的控制權(quán)訪問PCI設(shè)備,,也可以被PCI設(shè)備訪問,。但是HOST主橋并不是PCI設(shè)備。PCI規(guī)范也沒有規(guī)定如何設(shè)計HOST主橋,。
在PCI總線中,,還有一類特殊的設(shè)備,即橋設(shè)備,。橋設(shè)備包括PCI橋,、PCI-to-(E)ISA橋和PCI-to-Cardbus橋。本篇重點介紹PCI橋,,而不關(guān)心其他橋設(shè)備的實現(xiàn)原理,。PCI橋的存在使PCI總線極具擴展性,處理器系統(tǒng)可以使用PCI橋進一步擴展PCI總線,。
PCI橋的出現(xiàn)使得采用PCI總線進行大規(guī)模系統(tǒng)互連成為可能,。但是在目前已經(jīng)實現(xiàn)的大規(guī)模處理器系統(tǒng)中,,并沒有使用PCI總線進行處理器系統(tǒng)與處理器系統(tǒng)之間的大規(guī)模互連,。因為PCI總線是一個以HOST主橋為根的樹型結(jié)構(gòu),,使用主從架構(gòu),因而不易實現(xiàn)多處理器系統(tǒng)間的對等互連,。
即便如此PCI橋仍然是PCI總線規(guī)范的精華所在,,掌握PCI橋是深入理解PCI體系結(jié)構(gòu)的基礎(chǔ)。PCI橋可以連接兩條PCI總線,,上游PCI總線和下游PCI總線,,這兩個PCI總線屬于同一個PCI總線域,使用PCI橋擴展的所有PCI總線都同屬于一個PCI總線域,。
其中對PCI設(shè)備配置空間的訪問可以從上游總線轉(zhuǎn)發(fā)到下游總線,,而數(shù)據(jù)傳送可以雙方向進行。在PCI總線中,,還存在一種非透明PCI橋,,該橋片不是PCI總線規(guī)范定義的標(biāo)準(zhǔn)橋片,但是適用于某些特殊應(yīng)用,,本篇將在第2.5節(jié)中詳細介紹這種橋片,。在本書中,如不特別強調(diào),,PCI橋是指透明橋,,透明橋也是PCI總線規(guī)范定義的標(biāo)準(zhǔn)橋片。
PCI-to-(E)ISA橋和PCI-to-Cardbus橋的主要作用是通過PCI總線擴展(E)ISA和Cardbus總線,。在PCI總線推出之后,,(E)ISA總線并沒有在處理器系統(tǒng)中立即消失,此時需要使用PCI-(E)ISA橋擴展(E)ISA總線,,而使用PCI-to-Cardbus橋用來擴展Cardbus總線,,本篇并不關(guān)心(E)ISA和Cardbus總線的設(shè)計與實現(xiàn)。
1.1.4 HOST處理器
PCI總線規(guī)定在同一時刻內(nèi),,在一顆PCI總線樹上有且只有一個HOST處理器,。這個HOST處理器可以通過HOST主橋,發(fā)起PCI總線的配置請求總線事務(wù),,并對PCI總線上的設(shè)備和橋片進行配置,。
在PCI總線中,HOST處理器是一個較為模糊的概念,。在SMP(symmetric multiprocessing)處理器系統(tǒng)中,,所有CPU都可以通過HOST主橋訪問其下的PCI總線樹,這些CPU都可以作為HOST處理器。但是值得注意的是,,HOST主橋才是PCI總線樹的實際管理者,,而不是HOST處理器。
在HOST主橋中,,設(shè)置了許多寄存器,HOST處理器通過操作這些寄存器管理這些PCI設(shè)備,。如在x86處理器的HOST主橋中設(shè)置了0xCF8和0xCFC這兩個I/O端口訪問PCI設(shè)備的配置空間,,而PowerPC處理器的HOST主橋設(shè)置了CFG_ADDR和CFG_DATA寄存器訪問PCI設(shè)備的配置空間。值得注意的是,,在PowerPC處理器中并沒有I/O端口,,因此使用存儲器映像尋址方式訪問外部設(shè)備的寄存器空間。
1.1.5 PCI總線的負載
PCI總線的所能掛接的負載與總線頻率相關(guān),,其中總線頻率越高,,所能掛接的負載越少。PCI總線頻率越高,,所能掛接的負載越少,,但是整條總線所能提供的帶寬越大。值得注意的是,,PCI-X總線與PCI總線的傳送協(xié)議略有不同,,因此66MHz的PCI-X總線的負載數(shù)較大,PCI-X總線的詳細說明見第1.5節(jié),。當(dāng)PCI-X總線頻率為266MHz和533MHz時,,該總線只能掛接一個PCI-X插槽。在PCI總線中,,一個插槽相當(dāng)于兩個負載,,接插件和插卡各算為一個負載,在表1?1中,,33MHz的PCI總線可以掛接4~5個插槽,,相當(dāng)于直接掛接8~10個負載。