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