目錄
PCIe總線的拓撲結構
PCI Express協定分層
實體層(Physical Layer)
資料鍊路層(Link Layer)
處理層(Transaction Layer)
軟體層(Software Layer)
資料傳輸時候的流程
TLP和DLLP封包格式
PCIe總線的拓撲結構
PCIe采用的是樹形拓撲結構, 一般由根元件(Root Complex),交換裝置(Switch),終端裝置(Endpoint)等類型的PCIe裝置組成
Root Complex: 根橋裝置,是PCIe最重要的一個組成部件; Root Complex主要負責PCIe封包的解析和生成。RC接受來自CPU的IO指令,生成對應的PCIe封包,或者接受來自裝置的PCIe TLP封包,解析資料傳輸給CPU或者記憶體。
Switch: PCIe的轉接器裝置,目的是擴充PCIe總線。和PCI并行總線不同,PCIe的總線采用了高速差分總線,并采用端到端的連接配接方式, 是以在每一條PCIe鍊路中兩端隻能各連接配接一個裝置, 如果需要挂載更多的PCIe裝置,那就需要用到switch轉接器。switch在linux下不可見,軟體層面可以看到的是switch的上行口(upstream port, 靠近RC的那一側) 和下行口(downstream port)。
一般而言,一個switch 隻有一個upstream port, 可以有多個downstream port.
PCIe endponit: PCIe終端裝置,是PCIe樹形結構的葉子節點。比如網卡,NVME卡,顯示卡都是PCIe ep裝置。
圖1:PCIe 體系結構拓撲圖
PCI Express協定分層
PCI Express體系結構采用分層設計,就像網絡通信中的七層OSI結構一樣,這樣利于跨平台的應用。PCI-Express體系結構如圖2所示。它共分為四層,從下到上分别為:
- 實體層(Physical Layer)
- 資料鍊路層(Link Layer)
- 處理層(Transaction Layer)
- 軟體層(Software Layer)
圖2 PCIe 協定層結構
-
實體層(Physical Layer)
實體層是最低層,它負責接口或者裝置之間的連結,是實體接口之間的連接配接,可對應于網絡中OSI七層模式中的實體層來了解。
實體層決定了PCI Express總線接口的實體特性,如點對點串行連接配接、微差分信号驅動、熱撥插、可配置帶寬等。初始的單一串行PCI Express連結包含兩個低電壓微分驅動信号對(4線的接收和發送對)的雙向連接配接,即“發送”和“接受”信号。
資料時鐘使用8/10b解碼方式來達到相 當高的資料速率(這一技術同時也在其它串行總線技術中,如InfiniBand和RapidIO);時鐘資訊直接被編碼成資料流,比起分離信号時鐘更 好。
-
資料鍊路層(Link Layer)
資料鍊路層的主要職責就是確定資料包可靠、正确傳輸。它的任務是確定資料包的完整性,并在資料包中添加序列号和發送備援校驗碼到處理層。大多數資料包 是由處理層發起的,基于信任,資料流控制協定確定資料包隻在終端緩存空閑時傳輸。排隊了所有資料的重試,使得信道帶寬浪費現象得到有效地限制。
-
處理層(Transaction Layer)
處理層的作用主要是接受從軟體層送來的讀、寫請求,并且建立一個請求包傳輸到連結層。所有請求都是分離執行,有些請示包将需要一個響應包。處理層同時 接受從鍊路層傳來的響應包,并與原始的軟體請求關聯。處理層還整合或者拆分處理級資料包來發送請求,如資料讀、寫請求,并且操縱連結配置和信号控制。以确 保端到端連接配接通信正确,沒有無效資料通過整個組織(包括源裝置和目标裝置,甚至包括可能通過的多個橋接器和交換器)。
在PCI Express總線技術中,資料包類型主要有兩種,那就是由處理層發起的“處理層資料包”(Transaction Layer Packet,TLP)和“資料鍊路層資料包”(Data Link Layer Packet,DLLP)。每個資料包都有一個可以使響應包定向于正确發起者的唯一辨別符,包的格式支援32位記憶體位址和擴充64位記憶體位址。包同時還有 如“非窺探”、“無嚴格排序”和“優先權”等屬性,這些屬性将應用于優化路由I/O子系統的資料包。
處理層包括4個位址空間,其中3個是PCI接口原有的,如記憶體、I/O和配置位址空間,另一外新PCI-Express接口新加的,它就是“資訊空 間”。PCI2.2标準中介紹不斷變化的系統中斷宣傳的方法稱之為 “資訊信号中斷”(Message Signaled Interrupt,MSI)。這裡特殊規格格式的記憶體寫事物代替無邊信号硬寫,如中斷、電源管理請求、複位等等有關資訊方面。這幾個位址空間類型的用途如下表所示:
位址空間 | 處理類型 | 基本用途 |
記憶體 | 讀/寫 | 處理來自或發送到記憶體中的資料 |
I/O | 讀/寫 | 處理來自或發送到I/O節點中的資料 |
配置 | 讀/寫 | 裝置配置或者設定 |
資訊 | 基線/供應商定義/先進交換 | 處理從事件信号機制到通用目資訊的所有資訊 |
表1:PCIe位址空間
-
軟體層(Software Layer)
軟體層被稱為最重要的部分,因為它是保持與PCI總線相容的關鍵。其目的在于使系統在使用PCI Express啟動時,像在PCI下的初始化和運作那樣,無論是在系統中發現的硬體裝置,還是在系統中的資源,如記憶體、I/O空間和中斷等,它可以建立非 常優化的系統環境,而不需要進行任何改動。在PCI-Express體系結構中保持這些配置空間和I/O裝置連接配接的規範穩定是非常關鍵的。事實上,在 PCI-Express平台中所有作業系統在引導時都不需要進行任何編輯,也就是說在軟體方面完全可以實作從PCI總線平穩過渡。
資料傳輸時候的流程
PCIE協定傳輸資料是以資料包的形式傳輸, 如下圖所示從發送端說起。資料交到Device B 的Core層, 由Core層将資料格式轉換成處理層(Transaction Layer)可以接受的封包格式,處理層産生相應的資料包,并存儲再對應的Buffer中。資料繼續傳送到資料鍊路層(Data Link Layer),資料鍊路層将上一層傳來的資料包添加Seq Num和CRC校驗用來給接收端進行一些資料正确性的檢查。然後在實體層(Physical Layer) 将資料進行編碼,通過多條鍊路使用模拟信号進行傳輸。
在接收端,下圖左側示。實體層(Physical Layer)将接收到的資料包解碼後傳送到資料鍊路層(Data Link Layer),資料鍊層将接收的資料進行校驗檢查,沒有問題就把資料傳送給處理層(Transaction Layer)。處理層把資料壓入buffer之後,Device A core 層将資料包轉換成軟體課程處理的資料。
一般來說在使用FPGA 開發時,如果調用PCIE 硬核,實體層/資料鍊路層/處理層,這三個層都已經內建在IP核裡面了。
圖3 PCIe 資料傳輸流程
TLP和DLLP封包格式
圖4 TLP 包格式
TLP 包類型:
- Memory Read-Unlocked
- Memory Read-Locked
- Memory Write
- IO Read
- IO Write
- Configuration Read-Type 0
- Configuration Write-Type 0
- Completion -Unlocked
- Completion-Locked
- Completion w/data-Unlocked
- Completion w/data-Locked
- Message Request
- Message Request w/data
圖5 DLLP 包格式
DLLP 包類型:
- TLP Ack/Nak
- Power Management
- Link Flow Control
- Vendor-Specific