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