1. 程式人生 > 其它 >001 PCI Express體系結構(一)

001 PCI Express體系結構(一)

一 、PCI匯流排的基本知識

PCI匯流排作為處理器系統的區域性匯流排,主要目的是為了連線外部裝置,而不是作為處理器的系統匯流排連線Cache和主儲存器。但是PCI匯流排、系統匯流排和處理器體系結構之間依然存在著緊密的聯絡。

(1) PCI匯流排空間與處理器空間隔離

PCI裝置具有獨立的地址空間,即PCI匯流排地址空間,該空間與儲存器地址空間通過HOST主橋隔離。處理器需要通過HOST主橋才能訪問PCI裝置,而PCI裝置需要通過HOST主橋才能主儲存器。在HOST主橋中含有許多緩衝,這些緩衝使得處理器匯流排與PCI匯流排工作在各自的時鐘頻率中,彼此互不干擾。HOST主橋的存在也使得PCI裝置和處理器可以方便地共享主儲存器資源。處理器訪問PCI裝置時,必須通過HOST主橋進行地址轉換;而PCI裝置訪問主儲存器時,也需要通過HOST主橋進行地址轉換。HOST主橋的一個重要作用就是將處理器訪問的儲存器地址轉換為PCI匯流排地址。PCI裝置使用的地址空間是屬於PCI匯流排域的,而與儲存器地址空間不同。

(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裝置通過仲裁獲得PCI匯流排的使用權後,才能進行資料傳送,在PCI總線上進行資料傳送,並不需要處理器進行干預。

PCI匯流排仲裁器不在PCI匯流排規範定義的範圍內,也不一定是HOST主橋和PCI橋的一部分。雖然絕大多數HOST主橋和PCI橋都包含PCI匯流排仲裁器,但是在某些處理器系統的設計中也可以使用獨立的PCI匯流排仲裁器。如在PowerPC處理器的HOST主橋中含有PCI匯流排仲裁器,但是使用者可以關閉這個匯流排仲裁器,而使用獨立的PCI匯流排仲裁器。

PCI裝置使用共享匯流排方式進行資料傳遞,在同一條總線上,所有PCI裝置共享同一匯流排頻寬,這將極大地影響PCI匯流排的利用率。這種機制顯然不如PCIe匯流排採用的交換結構,但是在PCI匯流排盛行的年代,半導體的工藝、設計能力和製作成本決定了採用共享匯流排方式是當時的最優選擇。

(6) 中斷機制

PCI總線上的裝置可以通過四根中斷請求訊號INTA~D#向處理器提交中斷請求。與ISA總線上的裝置不同,PCI總線上的裝置可以共享這些中斷請求訊號,不同的PCI裝置可以將這些中斷請求訊號“線與”後,與中斷控制器的中斷請求引腳連線。PCI裝置的配置空間記錄了該裝置使用這四根中斷請求訊號的資訊。

PCI匯流排進一步提出了MSI(Message Signal Interrupt)機制,該機制使用儲存器寫匯流排事務傳遞中斷請求,並可以使用x86處理器FSB(Front Side Bus)匯流排提供的Interrupt Message匯流排事務,從而提高了PCI裝置的中斷請求效率。

雖然從現代匯流排技術的角度上看,PCI匯流排仍有許多不足之處,但也不能否認PCI匯流排已經獲得了巨大的成功,不僅x86處理器將PCI匯流排作為標準的區域性匯流排連線各類外部裝置,PowerPC、MIPS和ARM[1]處理器也將PCI匯流排作為標準局部匯流排。除此之外,基於PCI匯流排的外部裝置,如乙太網控制器、音效卡、硬碟控制器等,也已經成為主流。

注:[1]在ARM處理器中,使用SoC平臺匯流排,即AMBA匯流排,連線片內裝置。但是某些ARM生產廠商,依然使用AMBA-to-PCI橋推出PCI匯流排,以連線PCI裝置。

二、PCI匯流排的組成結構

如上文所述,PCI匯流排作為處理器系統的區域性匯流排,是處理器系統的一個組成部件,講述PCI匯流排的組成結構不能離開處理器系統這個大環境。在一個處理器系統中,與PCI匯流排相關的模組如圖1‑1所示。

如圖1‑1所示在一個處理器系統中,與PCI匯流排相關的模組包括,HOST主橋、PCI匯流排、PCI橋和PCI裝置。PCI匯流排由HOST主橋和PCI橋推出,HOST主橋與主儲存器控制器在同一級總線上,PCI裝置可以方便地通過HOST主橋訪問主儲存器,即進行DMA操作。

值得注意的是,PCI裝置的DMA操作需要與處理器系統的Cache進行一致性操作,當PCI裝置通過HOST主橋訪問主儲存器時,Cache一致性模組將進行地址監聽,並根據監聽的結果改變Cache的狀態。

在一些簡單的處理器系統中,可能不含有PCI橋,此時所有PCI裝置都是連線在HOST主橋推出的PCI總線上,此外在一些處理器系統中可能含有多個HOST主橋,如在圖1‑1所示的處理器系統中含有HOST主橋x和HOST主橋Y。

1、HOST主橋

HOST主橋主要功能是隔離處理器系統的儲存器域與處理器系統的PCI匯流排域,管理PCI匯流排域,並完成處理器與PCI裝置間的資料交換。處理器與PCI裝置間的資料交換主要由“處理器訪問PCI裝置的地址空間”和“PCI裝置使用DMA機制訪問主儲存器”這兩部分組成。

在一個處理器系統中,有幾個HOST主橋,就有幾個PCI匯流排域。

如圖1‑1所示,HOST主橋x之下的PCI裝置屬於PCI匯流排x域,而HOST主橋y之下的PCI裝置屬於PCI匯流排y域。在這顆匯流排樹上的所有PCI裝置的配置空間都由HOST主橋通過配置讀寫匯流排週期訪問。

2、PCI匯流排

在處理器系統中,含有PCI匯流排和PCI匯流排樹這兩個概念。這兩個概念並不相同,在一顆PCI匯流排樹中可能具有多條PCI匯流排,而具有血緣關係的PCI匯流排組成一顆PCI匯流排樹。如在圖1‑1所示的處理器系統中,PCI匯流排x樹具有兩條PCI匯流排,分別為PCI匯流排x0和PCI匯流排x1。而PCI匯流排y樹中僅有一條PCI匯流排。

PCI匯流排由HOST主橋或者PCI橋管理,用來連線各類裝置,如音效卡、網絡卡和IDE介面卡等。在一個處理器系統中,可以通過PCI橋擴充套件PCI匯流排,並形成具有血緣關係的多級PCI匯流排,從而形成PCI匯流排樹型結構。在處理器系統中有幾個HOST主橋,就有幾顆這樣的PCI匯流排樹,而每一顆PCI匯流排樹都與一個PCI匯流排域對應。

與HOST主橋直接連線的PCI匯流排通常被命名為PCI匯流排0。考慮到在一個處理器系統中可能有多個主橋,圖1‑1將HOST主橋x推出的PCI匯流排命名為x0匯流排,而將PCI橋x1擴展出的PCI匯流排稱之為x1匯流排;而將HOST主橋y推出的PCI匯流排稱為y0~yn。分屬不同PCI匯流排樹的裝置,其使用的PCI匯流排地址空間分屬於不同的PCI匯流排域空間。

3、PCI裝置

在PCI匯流排中有三類裝置,PCI主裝置、PCI從裝置和橋裝置。其中PCI從裝置只能被動地接收來自HOST主橋,或者其他PCI裝置的讀寫請求;而PCI主裝置可以通過匯流排仲裁獲得PCI匯流排的使用權,主動地向其他PCI裝置或者主儲存器發起儲存器讀寫請求。而橋裝置的主要作用是管理下游的PCI匯流排,並轉發上下游匯流排之間的匯流排事務。

一個PCI裝置可以即是主裝置也是從裝置,但是在同一個時刻,這個PCI裝置或者為主裝置或者為從裝置。PCI匯流排規範將PCI主從裝置統稱為PCI Agent裝置。在處理器系統中常見的PCI網絡卡、顯示卡、音效卡等裝置都屬於PCI Agent裝置。

在PCI匯流排中,HOST主橋是一個特殊的PCI裝置,該裝置可以獲取PCI匯流排的控制權訪問PCI裝置,也可以被PCI裝置訪問。但是HOST主橋並不是PCI裝置。PCI規範也沒有規定如何設計HOST主橋。

在PCI匯流排中,還有一類特殊的裝置,即橋裝置。橋裝置包括PCI橋、PCI-to-(E)ISA橋和PCI-to-Cardbus橋。本篇重點介紹PCI橋,而不關心其他橋裝置的實現原理。PCI橋的存在使PCI匯流排極具擴充套件性,處理器系統可以使用PCI橋進一步擴充套件PCI匯流排。

PCI橋的出現使得采用PCI匯流排進行大規模系統互連成為可能。但是在目前已經實現的大規模處理器系統中,並沒有使用PCI匯流排進行處理器系統與處理器系統之間的大規模互連。因為PCI匯流排是一個以HOST主橋為根的樹型結構,使用主從架構,因而不易實現多處理器系統間的對等互連。

即便如此PCI橋仍然是PCI匯流排規範的精華所在,掌握PCI橋是深入理解PCI體系結構的基礎。PCI橋可以連線兩條PCI匯流排,上游PCI匯流排和下游PCI匯流排,這兩個PCI匯流排屬於同一個PCI匯流排域,使用PCI橋擴充套件的所有PCI匯流排都同屬於一個PCI匯流排域。

其中對PCI裝置配置空間的訪問可以從上游匯流排轉發到下游匯流排,而資料傳送可以雙方向進行。在PCI匯流排中,還存在一種非透明PCI橋,該橋片不是PCI匯流排規範定義的標準橋片,但是適用於某些特殊應用,本篇將在第2.5節中詳細介紹這種橋片。在本書中,如不特別強調,PCI橋是指透明橋,透明橋也是PCI匯流排規範定義的標準橋片。

4、HOST處理器

PCI匯流排規定在同一時刻內,在一顆PCI匯流排樹上有且只有一個HOST處理器。這個HOST處理器可以通過HOST主橋,發起PCI匯流排的配置請求匯流排事務,並對PCI總線上的裝置和橋片進行配置。

在PCI匯流排中,HOST處理器是一個較為模糊的概念。在SMP(symmetric multiprocessing)處理器系統中,所有CPU都可以通過HOST主橋訪問其下的PCI匯流排樹,這些CPU都可以作為HOST處理器。但是值得注意的是,HOST主橋才是PCI匯流排樹的實際管理者,而不是HOST處理器。

在HOST主橋中,設定了許多暫存器,HOST處理器通過操作這些暫存器管理這些PCI裝置。如在x86處理器的HOST主橋中設定了0xCF8和0xCFC這兩個I/O埠訪問PCI裝置的配置空間,而PowerPC處理器的HOST主橋設定了CFG_ADDR和CFG_DATA暫存器訪問PCI裝置的配置空間。值得注意的是,在PowerPC處理器中並沒有I/O埠,因此使用儲存器映像定址方式訪問外部裝置的暫存器空間。

5、PCI匯流排的負載

PCI匯流排的所能掛接的負載與匯流排頻率相關,其中匯流排頻率越高,所能掛接的負載越少。下文以 PCI匯流排和PCI-X匯流排為例說明匯流排頻率、峰值頻寬和負載能力之間的關係,如表1‑1所示。

由表1‑1所示,PCI匯流排頻率越高,所能掛接的負載越少,但是整條匯流排所能提供的頻寬越大。值得注意的是,PCI-X匯流排與PCI匯流排的傳送協議略有不同,因此66MHz的PCI-X匯流排的負載數較大,PCI-X匯流排的詳細說明見第1.5節。當PCI-X匯流排頻率為266MHz和533MHz時,該匯流排只能掛接一個PCI-X插槽。在PCI匯流排中,一個插槽相當於兩個負載,接外掛和插卡各算為一個負載,在表1‑1中,33MHz的PCI匯流排可以掛接4~5個插槽,相當於直接掛接8~10個負載。

三、參考資料

1、PCI Express體系結構導讀

2、https://mp.weixin.qq.com/s/eNNxJpgNxkvgSFA823FJhA