第1章 PCI總線的基本知識(shí)
PCI總線作為處理器系統(tǒng)的局部總線,主要目的是為了連接外部設(shè)備,而不是作為處理器的系統(tǒng)總線連接Cache和主存儲(chǔ)器。但是PCI總線、系統(tǒng)總線和處理器體系結(jié)構(gòu)之間依然存在著緊密的聯(lián)系。
本文引用地址:http://butianyuan.cn/article/201612/330506.htmPCI總線作為系統(tǒng)總線的延伸,其設(shè)計(jì)考慮了許多與處理器相關(guān)的內(nèi)容,如處理器的Cache共享一致性和數(shù)據(jù)完整性,以及如何與處理器進(jìn)行數(shù)據(jù)交換等一系列內(nèi)容。其中Cache共享一致性和數(shù)據(jù)完整性是現(xiàn)代處理器局部總線的設(shè)計(jì)的重點(diǎn)和難點(diǎn),也是本書將重點(diǎn)講述的主題之一。
獨(dú)立地研究PCI總線并不可取,因?yàn)镻CI總線僅是處理器系統(tǒng)的一個(gè)組成部分。深入理解PCI總線需要了解一些與處理器體系結(jié)構(gòu)相關(guān)的知識(shí)。這些知識(shí)是本書所側(cè)重描述的,同時(shí)也是PCI總線規(guī)范所忽略的內(nèi)容。脫離實(shí)際的處理器系統(tǒng),不容易也不可能深入理解PCI總線規(guī)范。
對(duì)于今天的讀者來說,PCI總線提出的許多概念略顯過時(shí),也有許多不足之處。但是在當(dāng)年,PCI總線與之前的存在其他并行局部總線如ISA、EISA和MCA總線相比,具有許多突出的優(yōu)點(diǎn),是一個(gè)全新的設(shè)計(jì)。
(1)
PCI設(shè)備具有獨(dú)立的地址空間,即PCI總線地址空間,該空間與存儲(chǔ)器地址空間通過HOST主橋隔離。處理器需要通過HOST主橋才能訪問PCI設(shè)備,而PCI設(shè)備需要通過HOST主橋才能主存儲(chǔ)器。在HOST主橋中含有許多緩沖,這些緩沖使得處理器總線與PCI總線工作在各自的時(shí)鐘頻率中,彼此互不干擾。HOST主橋的存在也使得PCI設(shè)備和處理器可以方便地共享主存儲(chǔ)器資源。
處理器訪問PCI設(shè)備時(shí),必須通過HOST主橋進(jìn)行地址轉(zhuǎn)換;而PCI設(shè)備訪問主存儲(chǔ)器時(shí),也需要通過HOST主橋進(jìn)行地址轉(zhuǎn)換。HOST主橋的一個(gè)重要作用就是將處理器訪問的存儲(chǔ)器地址轉(zhuǎn)換為PCI總線地址。PCI設(shè)備使用的地址空間是屬于PCI總線域的,而與存儲(chǔ)器地址空間不同。
x86處理器對(duì)PCI總線域與存儲(chǔ)器域的劃分并不明晰,這也使得許多程序員并沒有準(zhǔn)確地區(qū)分PCI總線域地址空間與存儲(chǔ)器域地址空間。而本書將反復(fù)強(qiáng)調(diào)存儲(chǔ)器地址和PCI總線地址的區(qū)別,因?yàn)檫@是理解PCI體系結(jié)構(gòu)的重要內(nèi)容。
PCI規(guī)范并沒有對(duì)HOST主橋的設(shè)計(jì)進(jìn)行約束。每一個(gè)處理器廠商使用的HOST主橋,其設(shè)計(jì)都不盡相同。HOST主橋是聯(lián)系PCI總線與處理器的核心部件,掌握HOST主橋的實(shí)現(xiàn)機(jī)制是深入理解PCI體系結(jié)構(gòu)的前提。
本書將以Freescale的PowerPC處理器和Intel的x86處理器為例,說明各自HOST主橋的實(shí)現(xiàn)方式,值得注意的是本書涉及的PowerPC處理器僅針對(duì)Freescale的PowerPC處理器,而不包含IBM和AMCC的Power和PowerPC處理器。而且如果沒有特別說明,本書中涉及的x86處理器特指Intel的處理器,而不是其他廠商的x86處理器。
(2)
PCI總線具有很強(qiáng)的擴(kuò)展性。在PCI總線中,HOST主橋可以直接推出一條PCI總線,這條總線也是該HOST主橋的所管理的第一條PCI總線,該總線還可以通過PCI橋擴(kuò)展出一系列PCI總線,并以HOST主橋?yàn)楦?jié)點(diǎn),形成1顆PCI總線樹。這些PCI總線都可以連接PCI設(shè)備,但是在1顆PCI總線樹上,最多只能掛接256個(gè)PCI設(shè)備(包括PCI橋)。
在同一條PCI總線上的設(shè)備間可以直接通信,并不會(huì)影響其他PCI總線上設(shè)備間的數(shù)據(jù)通信。隸屬于同一顆PCI總線樹上的PCI設(shè)備,也可以直接通信,但是需要通過PCI橋進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。
PCI橋是PCI總線的一個(gè)重要組成部件,該部件的存在使得PCI總線極具擴(kuò)展性。PCI橋也是有別于其他局部總線的一個(gè)重要部件。在“以HOST主橋?yàn)楦?jié)點(diǎn)”的PCI總線樹中,每一個(gè)PCI橋下也可以連接一個(gè)PCI總線子樹,PCI橋下的PCI總線仍然可以使用PCI橋繼續(xù)進(jìn)行總線擴(kuò)展。
PCI橋可以管理這個(gè)PCI總線子樹,PCI橋的配置空間含有一系列管理PCI總線子樹的配置寄存器。在PCI橋的兩端,分別連接了兩條總線,分別是上游總線(Primary Bus)和下游總線(Secondary Bus)。其中與處理器距離較近的總線被稱為上游總線,另一條被稱為下游總線。這兩條總線間的通信需要通過PCI橋進(jìn)行。PCI橋中的許多概念被PCIe總線采納,理解PCI橋也是理解PCIe體系結(jié)構(gòu)的基礎(chǔ)。
(3)
PCI設(shè)備使用的地址可以根據(jù)需要由系統(tǒng)軟件動(dòng)態(tài)分配。PCI總線使用這種方式合理地解決了設(shè)備間的地址沖突,從而實(shí)現(xiàn)了“即插即用”功能。從而PCI總線不需要使用ISA或者EISA接口卡為解決地址沖突而使用的硬件跳線。
每一個(gè)PCI設(shè)備都有獨(dú)立的配置空間,在配置空間中含有該設(shè)備在PCI總線中使用的基地址,系統(tǒng)軟件可以動(dòng)態(tài)配置這個(gè)基地址,從而保證每一個(gè)PCI設(shè)備使用的物理地址并不相同。PCI橋的配置空間中含有其下PCI子樹所能使用的地址范圍。
(4)
PCI總線與之前的局部總線相比,極大提高了數(shù)據(jù)傳送帶寬,32位/33MHz的PCI總線可以提供132MB/s的峰值帶寬,而64位/66MHz的PCI總線可以提供的峰值帶寬為532MB/s。雖然PCI總線所能提供的峰值帶寬遠(yuǎn)不能和PCIe總線相比,但是與之前的局部總線ISA、EISA和MCA總線相比,仍然具有較大的優(yōu)勢。
ISA總線的最高主頻為8MHz,位寬為16,其峰值帶寬為16MB/s;EISA總線的最高主頻為8.33MHz,位寬為32,其峰值帶寬為33MB/s;而MCA總線的最高主頻為10MHz,最高位寬為32,其峰值帶寬為40MB/s。PCI總線提供的峰值帶寬遠(yuǎn)高于這些總線。
(5)
PCI設(shè)備通過仲裁獲得PCI總線的使用權(quán)后,才能進(jìn)行數(shù)據(jù)傳送,在PCI總線上進(jìn)行數(shù)據(jù)傳送,并不需要處理器進(jìn)行干預(yù)。
PCI總線仲裁器不在PCI總線規(guī)范定義的范圍內(nèi),也不一定是HOST主橋和PCI橋的一部分。雖然絕大多數(shù)HOST主橋和PCI橋都包含PCI總線仲裁器,但是在某些處理器系統(tǒng)的設(shè)計(jì)中也可以使用獨(dú)立的PCI總線仲裁器。如在PowerPC處理器的HOST主橋中含有PCI總線仲裁器,但是用戶可以關(guān)閉這個(gè)總線仲裁器,而使用獨(dú)立的PCI總線仲裁器。
PCI設(shè)備使用共享總線方式進(jìn)行數(shù)據(jù)傳遞,在同一條總線上,所有PCI設(shè)備共享同一總線帶寬,這將極大地影響PCI總線的利用率。這種機(jī)制顯然不如PCIe總線采用的交換結(jié)構(gòu),但是在PCI總線盛行的年代,半導(dǎo)體的工藝、設(shè)計(jì)能力和制作成本決定了采用共享總線方式是當(dāng)時(shí)的最優(yōu)選擇。
(6)
PCI總線上的設(shè)備可以通過四根中斷請(qǐng)求信號(hào)INTA~D#向處理器提交中斷請(qǐng)求。與ISA總線上的設(shè)備不同,PCI總線上的設(shè)備可以共享這些中斷請(qǐng)求信號(hào),不同的PCI設(shè)備可以將這些中斷請(qǐng)求信號(hào)“線與”后,與中斷控制器的中斷請(qǐng)求引腳連接。PCI設(shè)備的配置空間記錄了該設(shè)備使用這四根中斷請(qǐng)求信號(hào)的信息。
PCI總線進(jìn)一步提出了MSI(Message Signal Interrupt)機(jī)制,該機(jī)制使用存儲(chǔ)器寫總線事務(wù)傳遞中斷請(qǐng)求,并可以使用x86處理器FSB(Front Side Bus)總線提供的Interrupt Message總線事務(wù),從而提高了PCI設(shè)備的中斷請(qǐng)求效率。
雖然從現(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平臺(tái)總線,即AMBA總線,連接片內(nèi)設(shè)備。但是某些ARM生產(chǎn)廠商,依然使用AMBA-to-PCI橋推出PCI總線,以連接PCI設(shè)備。
評(píng)論