寫在正文之前:
疫情高發,2020的春節,希望大家都能平安度過,武漢加油,祖國加油!
正文:
PCIe一直以來都是在我心頭揮之不去的一片荊棘,不管是主流的X86架構,ARM架構,還是新興的AI芯片,無一不把PCIe總線接口作為重要的互聯接口。而在過去的工作中,芯片架構,總線拓撲,帶寬計算,也都躲不開PCIe相關的研究。所以,最近抽出時間學習了PCIe總線架構和相關知識,在此總結(已經在公司內部做了分享),希望與各位交流共勉。
第一節:PCIe概述
為了直觀的給大家一個認識,首先拋出了這張Intel服務器的架構圖,可以清晰的看到PCIe接口所處位置和主要連接對象。圖中有很多專業名詞,有興趣可以查一下,對於長期從事服務器芯片開發的技術人員,應該比較熟悉了。

下面這張圖片是高通/華芯通公司ARM 48核服務器的芯片架構,雖然華芯通已經不復存在,但是仍然留下了寶貴的學習資料.

通過上面兩張圖片,可以看到PCIe接口在芯片上的位置核結構,接下來會對PCIe做基本的介紹:
Peripheral Component Interconnect Express:
高性能高帶寬的串行互聯標准
與PCI總線保持軟件兼容
串行差分雙工信號線
點到點互連
lane的概念:一組RX(2條差分線)與一組TX(2條差分線)
link的概念:若干lane組成的一條邏輯通道,有x1, x2, x4, x8, x16

那么什么是差分信號呢?
一個差分信號由D+和D-兩根信號組成,信號接收端通過比較這兩個信號的差值,判斷發送端發送的是1還是0
差分信號在布線時要求”等長”、”等寬”、”貼近”,而且在同層,所以外部干擾噪聲將被”同值”而且”同時”加載到D+和D-兩根信號上,其差值在理想情況下為0,對信號的邏輯值產生的影響較小, 所以差分信號可以使用更高的總線頻率
差分信號可有效抑制電磁干擾(EMI, Electro Magnetic Interference)
我們在討論芯片的架構時,經常會考量一個重要的PCIe指標,就是他的帶寬:

計算方法:
PCIe3 .0 協議支持 8.0 GT/s, 即每一條Lane 上支持每秒鍾內傳輸 8G個Bit。
而PCIe 3.0 的物理層協議中使用的是 128b/130b 的編碼方案。 即每傳輸128個Bit,需要發送130個Bit。
那么, PCIe 3.0協議的每一條Lane支持 8 * 128 / 130 = 7.877 Gbps = 984.6 MB/s 的速率。
PCIe的基本拓撲結構:
如下圖,PCIe具有主要的一些組件,組成了整體的拓撲結構.

第二節:PCIe分層結構
PCIe是層次化的協議結構:
事務層:
發送端TLP創建;接收端TLP解碼、校驗;QoS、Flow Control、Ordering
數據鏈路層:
DLLP的創建、解碼、校驗;Ack/nak應答機制
物理層:
Ordered-Set packet創建/解碼
發送/接收所有Packet
128b/130b編碼,擾碼
鏈路訓練和初始化

接下來會介紹三個層次各自的功能:
1. 事務傳輸層:
事務傳輸層產生發出的和接收的事務傳輸層數據包(TLP)
TLP包括一個報頭(Header)、一個可選數據配載(Payload)以及一個可選的端到端CRC(ECRC).
TLP可以是請求(Request),也可以是對請求的響應(Response),永遠是4byte的倍數
Header指定事務類型、優先級、地址,路由規則及其他數據包特征。
發送事務傳輸層構建數據包Header、添加ECRC並門控Payload的傳輸
接收事務傳輸層檢查TLP格式和Header,檢查ECRC


這里給出一個memory Read/Memory Write傳輸的例子:

對於事務層的傳輸包,具有一個包頭(Header):
Fmt[2:0]: Format of TLP, bits 7:5 of byte 0
Type[4:0]: Type of TLP – bits 4:0 of byte 0. Mrd/Mwr/IORd/IOWr/Msg/…
TC[2:0]: Traffic Class – bits 6:4 of byte 1
LN: Indicates a Memory Request is an LN Read/Write, or LN completion.
TH: The presences of TLP Processing Hints
Attr[2:0]: Attribute,ordering type of IDO/Relaxed
TD: Presence of TLP digest in the form of a single DW
EP – Indicates the TLP is Poisoned
Length[9:0] – Length of data payload in DW
TLP data must be 4-byte aligned
for TLPs that do not contain or refer to data payloads, including Cpl, CplLk and Messages.

事務層的優先級控制:
QoS: 傳輸類別和虛擬通道
傳輸分類: TC(Traffic class)
數據包被支配一個優先級
靈活的仲裁機制(任意、循環、加權輪詢)
如在PC中,給視頻流最高優先級保證足夠帶寬
通道虛擬化: VC(Virtual Channel)
允許多個獨立的數據流復用同一條線路。虛擬通道擁有自己的緩沖資源
本質是一個緩沖Buffer

TLP的路由:
三種路由方法:
基於地址的路由. - Address Routing
基於ID的路由 - ID-Based Routing
隱式路由(Implicit). - Implicit Routing

流量控制:
從數據傳輸的角度看,網絡中具有兩類資源:
數據通路
數據緩沖

目的:
用於報文發送方與接收方之間的流量控制
發送方必須有足夠的信用,才能發送報文
每次發送將消耗信用,接收方接收后,通過流控報文釋放信用
每個虛通道要實現一套流控機制
包含Posted、Non-Posted和Completion 3類,每類又分報文頭和負載

VC: 緩存到緩存之間的傳遞通路
VC和VC之間的數據傳遞,都需要實際的物理鏈路,所以稱為“虛通路”
相同類型的報文一般使用同一個VC進行數據傳輸
PCIe中,一個TC只能對應一個VC
Credit-Based流量控制算法
N123
N123+
N23
數據鏈路層的內容放在下一節.
