PCI Express是一種高性能、通用的I/O互連技術,為各種未來的計算和通信平臺而定義。PCI Express的關鍵屬性,如使用模型、負載存儲架構和軟件接口,被保留和繼承下來,而其并行總線的實現被高度可擴展的完全串行接口所取代。PCI Express利用在點對點互連、基于交換機的技術和分組協議方面的最新進展,提供新的性能和功能水平。PCI Express的電源管理、服務質量(QoS)、熱插拔支持、數據完整性和錯誤處理是PCI Express支持的一些高級功能。
1.1 PCI Express 鏈路
基本的PCI Express鏈路由兩個低電壓、差分驅動的信號對組成:一個發送對和一個接收對,如圖1-1所示。

圖1-1 PCI Express鏈路
PCI Express Link的主要鏈路屬性是:
- 基本鏈路 -- PCI Express鏈路由兩個單向的差分鏈路組成,實現為一對發送和一對接收。使用編碼方案嵌入數據時鐘,以實現非常高的數據速率。
- 信令速率 -- 一旦初始化,每個鏈路必須只在支持的信令水平之一上運行。
對于第一代PCI Express技術,只定義了一個信令率,它提供了有效的2.5 Gigabits/second/Lane/direction的原始帶寬;第二代技術提供有效的5.0 Gigabits/second/Lane/direction的原始帶寬;第三代提供有效的8.0 Gigabits/second/Lane/direction的原始帶寬;第四代產品提供有效的16.0 Gigabits/second/Lane/direction的原始帶寬;第五代提供有效的32.0 Gigabits/second/Lane/direction原始帶寬。
- 通道 -- 一個鏈路必須支持至少一個通道 - 每個通道代表一組差分信號對(一對用于傳輸,一對用于接收)。為了擴大帶寬,一個鏈路可以聚集多個通道,用xN表示,其中N可以是任何支持的鏈路寬度。在5GT/s數據速率下運行的x8鏈路代表了每個方向20GT/s的原始帶寬的聚合帶寬。
- 初始化 -- 在硬件初始化過程中,每個PCI Express鏈路都是在鏈路兩端的兩個代理協商通道帶寬和操作頻率后設置的。不涉及固件或操作系統軟件。
- 對稱性 -- 每個鏈路必須支持每個方向上的對稱數量的Lane,即一個x16鏈路表示每個方向上有16個差分信號對。
1.2 PCI Express結構拓撲
圖1-2是一個PCI Express結構拓撲示例。該圖說明了一個單一結構實例 -- 由一個根復合體(RC)、多個端點(I/O設備)、一個交換機和一個PCI Express到PCI/PCI-X橋組成,所有這些都通過PCI Express鏈路互連起來。

圖1-2 PCI Express拓撲結構
1.2.1 根復合體
- Root Complex表示I/O層次結構的根,它將CPU/內存子系統與I/O連接起來。
- 如圖1-2所示,一個RC可以支持一個或多個PCI Express端口。每個接口定義了一個單獨的層次結構域。每個層次結構域可以由一個單一的端點或一個包含一個或多個交換機組件和端點的子層次結構組成。
- 層次域之間通過RC路由點對點交易的能力是可選的,并且取決于實施。
- 一個RC必須支持生成配置請求,作為一個請求者。
- 允許一個RC作為請求者支持生成I/O請求。
- 一個RC必須不支持鎖定語義作為一個完成器。
- 允許RC作為請求者支持生成鎖定的請求。
1.2.2 端點
Endpoint指的是一種功能,它可以代表自己或代表獨特的非PCI Express設備(除PCI設備或主機CPU外)成為PCI Express交易的請求者或完成者,例如,PCI Express附屬圖形控制器或PCI Express-USB主機控制器。端點分為legacy端點、PCI Express端點或根復雜集成端點(RCiEPs)。
1.2.2.1 legacy端點規則
- legacy端點必須是一個具有00h類型配置空間頭的功能。
- legacy端點必須支持作為完成者的配置請求。
- legacy端點可以支持I/O請求作為完成者。
- legacy端點可以產生I/O請求。
- 如果設備的legacy軟件支持,legacy端點可以支持鎖定內存語義作為一個完成者。
- legacy端點不得發出鎖定的請求。
- legacy端點可以實現擴展配置空間能力,但這種能力可能被軟件忽略。
- 作為內存事務請求者操作的legacy端點不需要能夠生成4GB或更大的地址。
- 如果請求中斷資源,legacy端點需要支持MSI或MSI-X或兩者。如果實現了MSI,legacy端點被允許支持MSI能力結構的32位或64位消息地址版本。
- legacy端點被允許支持32位尋址,用于請求內存資源的基址寄存器。
- legacy端點必須出現在由根復合體發起的一個層次結構域中。
1.2.2.2 PCI Express端點規則
- 一個PCI Express端點必須是一個具有00h類型配置空間頭的功能。
- 一個PCI Express端點必須支持作為完成者的配置請求。
- 一個PCI Express端點必須不依賴于操作系統對通過BAR(s)申請的I/O資源的分配。
- 一個PCI Express端點必須不產生I/O請求。
- PCI Express端點不得作為完成者支持鎖定請求,也不得作為請求者產生鎖定請求。必須編寫符合PCI Express標準的軟件驅動程序和應用程序,以防止在訪問PCI Express端點時使用鎖定語義。
- 作為內存事務的請求者運行的PCI Express端點必須能夠生成大于4GB的地址。
- 如果請求中斷資源,PCI Express端點需要支持MSI或MSI-X或兩者。 如果實施MSI,PCI Express端點必須支持MSI能力結構的64位消息地址版本。
- 通過BAR請求內存資源的PCI Express端點必須設置BAR的Prefetchable位,除非該范圍包含具有讀取副作用的位置或功能不允許寫入合并的位置。
- 對于PCI Express端點來說,對于所有具有Prefetchable位設置的BAR,必須支持64位尋址。對于所有沒有預取位設置的BAR,允許32位尋址。
- 一個BAR所要求的最小內存地址范圍是128字節。
- 一個PCI Express端點必須出現在由根復合體發起的一個層次結構域內。
1.2.3 交換機
交換機被定義為多個虛擬PCI到PCI橋接設備的邏輯組合,如圖1-3所示。所有的交換機受以下基本規則的約束。

圖1-3 交換機的邏輯框圖
- 交換機在配置軟件中顯示為兩個或多個邏輯PCI到PCI橋。
- 交換機使用PCI橋機制轉發交易;例如,基于地址的路由,除非參與組播。
- 除了本文件中提到的情況,交換機必須在任何一組端口之間轉發所有類型的事務層數據包(TLP)。
- 必須按照規定支持鎖定請求。交換機不需要支持下游端口作為鎖定請求的啟動端口。
- 每個啟用的交換機端口必須遵守流量控制規范。
- 交換機不允許將一個數據包分割成更小的數據包,例如,一個具有256字節有效載荷的單一數據包不得被分割成兩個各有128字節有效載荷的數據包。
- 當同一虛擬通道上發生搶占時,交換機的入口端口(入站鏈路)之間的仲裁可以使用輪回或加權輪回來實現。
- 端點(由00h類型的配置空間頭表示)不得出現在交換機內部總線的配置軟件中,作為代表交換機下游端口的虛擬PCI-to-PCI橋的對等物。
1.3 PCI Express分層概述
PCI Express用三個離散的邏輯層來指定架構:交易層、數據鏈接層和物理層。這些層中的每一個都被分為兩個部分:一個處理出站(要傳輸)信息,一個處理入站(接收)信息,如圖1-4所示。這種分層定義的根本目的是為了方便理解。但是,這種分層并不意味著一種特定的PCI Express實現。

圖1-4 High-Level分層圖
PCI Express使用數據包在組件之間通信信息。數據包是在交易層和數據鏈路層中形成的,用于將信息從發送組件傳送到接收組件。當傳輸的數據包流經其他層時,它們被擴展為處理這些層的數據包所必需的額外信息。在接收端,采用相反的過程,數據包從它們的物理層表示轉化為數據鏈路層表示,最后(對于事務層數據包)轉化為可由接收設備的事務層處理的形式。圖1-5顯示了交易層數據包信息在各層的流動情況。

圖1-5 數據包在各層的流動情況
1.3.1 交易層
架構的上層是事務層。交易層的主要職責是組裝和拆卸TLPs。TLPs用于通信事務,如讀和寫,以及某些類型的事件。事務層還負責管理TLPs的基于信用的流量控制。
每一個需要響應數據包的請求數據包都被實現為一個分割事務。每個數據包都有一個唯一的標識符,使響應數據包能夠被引導到正確的發起人那里。數據包格式支持不同形式的尋址,這取決于事務的類型(內存、I/O、配置和消息)。數據包還可以有無窺探、寬松排序和基于ID的排序(IDO)等屬性。
事務層支持四個地址空間:它包括三個PCI地址空間(內存、I/O和配置)并增加了消息空間。PCI Express使用消息空間來支持所有先前的邊帶信號,如中斷、電源管理請求等,作為帶內消息事務。可以把PCI Express消息事務看作是 "虛擬線路",因為它們的作用是消除目前在平臺實現中使用的各種邊帶信號。
1.3.2 數據鏈路層
堆棧中的中間層,即數據鏈路層,是交易層和物理層之間的一個中間階段。數據鏈路層的主要職責包括鏈路管理和數據完整性,包括錯誤檢測和錯誤糾正。
數據鏈路層的傳輸端接受由事務層組裝的TLP,計算并應用數據保護碼和TLP序列號,并將其提交給物理層,以便在鏈路上傳輸。接收數據鏈路層負責檢查收到的TLPs的完整性,并將其提交給交易層作進一步處理。在檢測到TLP錯誤時,該層負責要求重發TLP,直到信息被正確接收,或確定鏈路失敗。
數據鏈路層還產生和消耗用于鏈路管理功能的數據包。
1.3.3 物理層
物理層包括所有用于接口操作的電路,包括驅動器和輸入緩沖器、并聯到串行和串行到并行的轉換、PLL(s)和阻抗匹配電路。它還包括與接口初始化和維護有關的邏輯功能。物理層以具體實施的格式與數據鏈路層交換信息。該層負責將從數據鏈路層收到的信息轉換為適當的序列化格式,并以連接到鏈路另一端的設備兼容的頻率和寬度在PCI Express鏈路上傳輸。
PCI Express架構有 "hooks",通過速度升級和先進的編碼技術支持未來的性能提升。未來的速度、編碼技術或媒體可能只影響物理層的定義。