1.1 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.1.1 HOST主橋
HOST主橋是一個很特別的橋片,其主要功能是隔離處理器係統的存儲器域與處理器係統的PCI總線域,管理PCI總線域,並完成處理器與PCI設備間的數據交換。處理器與PCI設備間的數據交換主要由“處理器訪問PCI設備的地址空間”和“PCI設備使用DMA機製訪問主存儲器”這兩部分組成。
為簡便起見,下文將處理器係統的存儲器域簡稱為存儲器域,而將處理器係統的PCI總線域稱為PCI總線域,存儲器域和PCI總線域的詳細介紹見第2.1節。值得注意的是,在一個處理器係統中,有幾個HOST主橋,就有幾個PCI總線域。
HOST主橋在處理器係統中的位置並不相同,如PowerPC處理器將HOST主橋與處理器集成在一個芯片中。而有些處理器不進行這種集成,如x86處理器使用南北橋結構,處理器內核在一個芯片中,而HOST主橋在北橋中。但是從處理器體係結構的角度上看,這些集成方式並不重要。
PCI設備通過HOST主橋訪問主存儲器時,需要與處理器的Cache進行一致性操作,因此在設計HOST主橋時需要重點考慮Cache一致性操作。在HOST主橋中,還含有許多數據緩衝,以支持PCI總線的預讀機製。
HOST主橋是聯係處理器與PCI設備的橋梁。在一個處理器係統中,每一個HOST主橋都管理了一顆PCI總線樹,在同一顆PCI總線樹上的所有PCI設備屬於同一個PCI總線域。如圖1?1所示,HOST主橋x之下的PCI設備屬於PCI總線x域,而HOST主橋y之下的PCI設備屬於PCI總線y域。在這顆總線樹上的所有PCI設備的配置空間都由HOST主橋通過配置讀寫總線周期訪問。
如果HOST主橋支持PCI V3.0規範的Peer-to-Peer數據傳送方式,那麼分屬不同PCI總線域的PCI設備可以直接進行數據交換。如圖1?1所示,如果HOST主橋y支持Peer-to-Peer數據傳送方式,PCI設備y01可以直接訪問PCI設備01或者PCI設備11,而不需要通過處理器的參與。但是這種跨越總線域的數據傳送方式在PC架構中並不常用,在PC架構中,重點考慮的是PCI設備與主存儲器之間的數據交換,而不是PCI設備之間的數據交換。此外在PC架構中,具有兩個HOST主橋的處理器係統也並不多見。
在PowerPC處理器中,HOST主橋可以通過設置Inbound寄存器,使得分屬於不同PCI總線域的設備可以直接通信。許多PowerPC處理器都具有多個HOST主橋,有關PowerPC處理器使用的HOST主橋詳見第2.2節。
1.1.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總線域空間。
1.1.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總線規範定義的標準橋片。
PCI-to-(E)ISA橋和PCI-to-Cardbus橋的主要作用是通過PCI總線擴展(E)ISA和Cardbus總線。在PCI總線推出之後,(E)ISA總線並沒有在處理器係統中立即消失,此時需要使用PCI-(E)ISA橋擴展(E)ISA總線,而使用PCI-to-Cardbus橋用來擴展Cardbus總線,本篇並不關心(E)ISA和Cardbus總線的設計與實現。
1.1.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端口,因此使用存儲器映像尋址方式訪問外部設備的寄存器空間。
1.1.5 PCI總線的負載
PCI總線的所能掛接的負載與總線頻率相關,其中總線頻率越高,所能掛接的負載越少。下文以 PCI總線和PCI-X總線為例說明總線頻率、峰值帶寬和負載能力之間的關係,如表1?1所示。
總線類型 | 總線頻率 | 峰值帶寬 | 負載能力 |
PCI | 33MHz | 133MB/s | 4-5個插槽 |
66MHz | 266MB/s | 1-2個插槽 |
|
PCI-X | 66MHz | 266MB/s | 4個插槽 |
133MHz | 533MB/s | 2個插槽 |
|
266MHz | 1066MB/s | 1個插槽 |
|
533MHz | 2131MB/s | 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個負載。
最後更新:2017-04-03 16:48:37