大家好,我是廣元兄。很高興和大家分享信號完整性的相關知識。希望大家點贊,分享。有什么問題加微交流學習,微信號【SI_Basic】。
Slogan:一起學習,共同進步!
在現有的電子產品,從消費類產品到高速產品中,PCIe總線作為主要的主板級互連。不同于PCI 并行總線結構,PCIe 使用串行總線結構,端對端的連接模式。
數據從芯片發出,經過事務層,數據鏈路層,物理層,發出去后,接收端的數據通過物理層,數據鏈路層,事務層,再到終端設備芯片。
事務層(Transaction Layer)
事務層用于處理數據包的傳送管理,是請求和處理信息的基礎,這里面有四種地址空間,三種處理類型等,基本信息如下:
當處理器或其他PCIe設備訪問PCIe設備時,所傳送的數據報文先通過事務層被分發成一個或者多個TLP,之后才能通過PCIe總線送達各個層。
TLP為事務層的數據包,具有一定的格式,有包頭,數據負載和可選的摘要。包頭里的數據用于對包的管理和控制。
TLP數據傳輸有一定規則:數據承載量有限制;數據從低字節高位先發送,從左到右。
TLP數據負載DW(Double Words)長度,定義如下:
TLP尋址方式:地址,ID識別,間接。
地址尋址主要用于內存和I/O,用于請求和讀寫等,支持64位和32位地址,I/O只支持32位地址。ID尋址主要用于配置請求和信息響應,包含Bus Number,Device Number,Function Number。間接尋址只用于信息請求。
接收端處理機制就是對接收到的經過Data Link Layer 進行數據完整性驗證過的TLP進行再處理。無效的包被去除,保留的也會被忽略。
虛擬通道機制Virtual Channel(VC)Mechanism支持整個使用TC標簽區分的流量。VC 的基礎是有獨立的結構資源(隊列/緩沖區和相關的控制邏輯), 這些資源用于不同 VC 之間,通過完全獨立的流控制跨鏈路移動信息。這是解決流量控制引起的阻塞問題的關鍵。 具體的虛擬通道都是由VC ID決定和識別的。
每個虛擬通道都有獨立的流程控制的緩沖空間,在接收和發送雙方,流程控制信息是用數據鏈路包(DLLP)打包發送,其中的”VC ID”就是用來載送虛擬通道的識別。
每個虛擬通道對應的流程包含6個不同的流程控制,信息如下:
數據鏈路層(Data Link Layer)
為了確保數據端對端的可靠性,在事務層的TLp Digtest選擇性地做ECRC校驗,ECRC的初值是FFFF FFFF。說到CRC 這里就有數據鏈路層,數據鏈路層為處理層和物理層的中間層,為TLP在鏈路傳遞中提供可靠機制。數據鏈路層的作用:
- 數據交換
- 誤碼檢測和重發
- 初始化和電源管理
- 生成用于鏈路管理的DLLP
DLLP(Data Link Layer Packet)用于一個鏈路上的兩個組件之間點對點發送。而TLP 從一個組件傳輸到另一個組件,可能會通過一個或多個中間組件。
數據完整性檢測就是為DLLP和TLP做CRC校驗。DLLP使用16bit CRC,而TLP使用的是32 bit的LCRC(Link CRC)。
這個LCRC 和Sequence Number,用于檢測錯誤或者發送過程中丟失的TLP,讓源端重新發送,保證數據的完整性。
數據鏈路層跟蹤鏈路連接狀態,同時和事務層以及物理層交換鏈路狀態,并通過物理層完成對鏈路的管理。
物理層(Physical Layer)
物理層又分為邏輯子層和電氣子層兩部分。
邏輯子層有兩個主要部分:
傳輸部分,準備從數據鏈路層傳遞的傳出信息以供電氣子層傳輸;接收部分,在將接收到的信息傳遞到數據鏈路層之前對其進行識別和準備。
邏輯子層和電氣子層通過狀態和控制寄存器接口或功能協調每個收發器的狀態。邏輯子層指導物理層的控制和管理功能。
在物理層有兩大功能:
一是編碼和解碼。Gen2,8b/10b編碼和解碼機制,Gen3,128b/130b。
在傳輸端,加擾應用于 8b/10b 編碼之前的字符。在接收端,對 8b/10b 解碼后的字符應用解擾。這里面會有數據加擾功能,加擾功能可以通過多通道鏈路上的一個或多個線性反饋移位寄存器 (LFSR) 來實現。
當每個鏈路有多個傳輸 LFSR 時,它們必須協同工作,在每個 LFSR 中保持相同值(通道到通道輸出偏移)。當每個鏈路有多個接收 LFSR 時,它們必須協同工作,在每個 LFSR 中保持相同的時延值(總偏斜),如下圖:
不管它們是如何實現的,LFSR 必須在逐個通道的基礎上與數據交互,就好像對于該鏈路中的每個通道有一個單獨的 LFSR,如此處所述。
- 數據加擾規則如下:
- COM 符號初始化。
- 對于除 SKP之外的每個符號,LFSR值提前8個連續移位。
- 除訓練序列命令設置(例如TS1、TS2)和一致性模式中的數據符號(D 代碼)外,所有數據符號(D代碼)都要加擾, 所有特殊符號(K代碼)均未加擾。
- LFSR (D0-D15) 的初始化值為FFFFh,COM退出,初始化發送端的LFPS,COM進入,初始化接收端的LFPS。
- 配置/檢測過程中默認開啟加擾。
第二大功能就是鏈路初始化和訓練(Initialization & Training)。在訓練過程中,確認和完成以下內容:
- 鏈路寬度(X4,X8……)
- 鏈路速率(5Gbps,10Gbps……)
- 通道互換
- 極性互換
在訓練序列查詢期間,接收端將 TS1 和 TS2 有序集的符號 6-15 作為通道極性反轉的指示符(D+ 和 D- 交換)。如果發生通道極性反轉,則接收到的 TS1 符號 6-15 將為 D21.5,而不是預期的 D10.2。類似地,如果發生通道極性反轉,則 TS2 有序集的符號 6-15 將為 D26.5,而不是預期的 D5.2。如果檢測到極性反轉,接收端必須反轉接收到的數據。
發射端不能反轉傳輸的數據。所有通道上的所有 PCIe接收端都需要獨立支持通道極性反轉。
PCIe鏈路兩端設備所用的Lane可以錯序連接,稱之為“Lane Reversal”,相同的Lane上,差分信號的極性也可以錯序連接,稱之為“Polarity Inversion”。
在實際的工作中,會根據這樣的功能來捋順走線,進行版圖優化設計:
不同于2.0&3.0三種不同的時鐘架構,4.0只給出兩種。每個都有一個相關的濾波器功能,可以理解 PLL 帶寬/峰值和等效抖動的最壞情況組合。
不同于2.0&3.0三種不同的時鐘架構,4.0只給出兩種。每個都有一個相關的濾波器功能,可以理解 PLL 帶寬/峰值和等效抖動的最壞情況組合。
PCIe參考時鐘的架構分為共同時鐘和獨立時鐘架構:
這里面有一個延遲值需要注意,就是數據和 Refclk 之間的累積傳輸延遲12 ns。Tx和Rx的最大內部傳輸延遲為2.0 ns。
這里面還有一個鏈路損耗的標準概念,放到PCIe CEM里再講。
電源管理Power
Power Management PM 除了軟件與硬件上的兼容模式,更多的是硬件上管理模式。PCIe設備之間通過功耗管理事件(Power Management Event,PME)來進行通信,同時控制功耗狀態的切換。規范文檔就定義了PCIe 設備的PM狀態:
- D0狀態:Full-on。又分為兩個狀態:未初始化和活動狀態。
- D1狀態:Light Sleep,輕睡眠狀態,該狀態可選。
- D2狀態:Deep Sleep,深睡眠狀態,該狀態也可選。
- D3狀態:Full-off,分為兩個狀態:熱狀態(電源未切斷)和冷狀態(電源切斷)
在鏈路訓練狀態機(Link Training and Status State Machine ,LTSSM)這部分,有三種狀態和電源有關:
- L0 是可以發送和接收數據和控制數據包的正常操作狀態。所有的電源管理狀態都是從這個狀態進入的。
- L0s是一種省電狀態,也允許鏈路快速進入并從省電狀態恢復,沒有延遲。
- L1 也是一種省電狀態。L1 狀態允許在L0上額外省電,但是需要額外的恢復延遲。