2022.04.01 - PCIe 偽端口(Pseudo-port)是什么?
PCIe 偽端口,故名思義,假的端口。偽端口僅具有 PCIe 端口的部分屬性。比如 Retimer 的 Port 就是偽端口。Retimer 的 Tx 和 Rx 只有物理層部分,沒有也不需要數(shù)據(jù)鏈路層、傳輸層。
2022.04.02 - 如何判斷 PCIe 系統(tǒng)是否要用 Retimer?
有兩種常用的方法來判斷 PCIe 系統(tǒng)是否需要 Retimer:
? ?根據(jù)信道衰減:檢測端到端的 PCIe 信道插入衰減,若信號衰減大于 PCIe 信道預算,則需要采用 Retimer。信道插入衰減包括 RC 和 EP 的封裝損耗。
? ?根據(jù)眼圖:根據(jù)均衡后的信號眼圖及誤碼率來判斷是否要用 Retimer。若眼高 EH<15mV,眼寬 EW<0.3UI,或者誤碼率 BER>10-12,則建議采用 Retimer。此方法考慮了信號反射及碼間干擾,比采用信道衰減的判別法更為準確。
▼ 表1 PCIe 系統(tǒng)各部分的信號衰減預算
Root packageNon-root packageCEM connectorAdd-in Card(AIC)System BudgetTotal channel budget
9.0 dB4.0 dB1.5 dB9.5 dB17.5 dB36 dB
表注:System budget 包括基板、轉接卡、基板-轉接卡, PCIe CEM 連接器。
參考:
Seamless Transition to PCIe? 5.0 Technology in System Implementations
2022.04.03 - PCIe 預編碼(Precoding)是干啥的?
?PCIe 接收端采用 DFE (決策反饋均衡器) 進行判決,在 32 GT/s 速率下比 16 GT/s 更容易發(fā)生 Burst Error (連續(xù)突發(fā)錯誤)。為了減少 Burst Error 的發(fā)生,Gen5 速率下可以選配 Precoding。Precoding 僅適用于 32 GT/s 及以上速率,其他速率時不開啟。PCIe Rx 通過 EQ TS2 請求 Tx 開啟 Precoding。
?Precoding 可以把連續(xù)多bit的 Burst Error 拆分為 2 bit 的 Entry Error 及 Exit Error,從而達到消除 Burst Error 的目的。對于單 bit 的突然錯誤,開啟 Precoding 后會變成 2 bit 錯誤,從而使系統(tǒng)誤碼率 BER 會提升為之前的兩倍。
?Precoding 發(fā)生于 Tx Scramble 之后、Rx De-scramble 之前。開啟 Precoding 不會影響信號質量及完整性。PCIe Precoding 示意圖如下:

▲圖 1: Precoding working the scrambler / de-scrambler
友情鏈接:
? ?Seamless Transition to PCIe? 5.0 Technology in System Implementations
? ?[FPGA 實現(xiàn)及PCIe IP 核知識點] PCIe 為什么要增加 Precoding?
2022.04.04 - PCIe Equalization 有哪幾種模式?
PCIe Equalization 有 3 中模式:
? ?Full EQ Mode:全均衡模式。采用該模式時,PCIe 鏈路會對 8 GT/s 及以上每一檔速率都要進行一次均衡。對于 32 GT/s,要在 8 GT/s、16 GT/s 及 32 GT/s 時都進行一次 EQ,耗時較久。
? ?EQ Bypass to highest rate:只在最高速率進行一次 EQ。該模式僅適用于 32 GT/s 及以上速率,當 8 GT/s、16 GT/s 開啟該模式時, 8 GT/s、16 GT/s 仍然不做 EQ。
? ?No EQ needed:采用該模式時,PCIe 鏈路不做 EQ。采用該模式能夠大大節(jié)省 EQ 的時間,以最快速度建立連接。
2022.04.05 - PCIe Full-Equalization 是啥?
?Full EQ Mode,全均衡模式, 是最傳統(tǒng)的 PCIe 均衡模式。采用該模式時,鏈路訓練到達 2.5 GT/s L0 后,返回 Recovery 繼續(xù)針對 8 GT/s、16 GT/s 及 32 GT/s 等速率從低到高依次進行 EQ,直到完成最高速率 EQ。隨著傳輸速率的提高,需要 EQ 的此時越來越多(單次約100 ms),EQ 耗時越來較久。
2022.04.06 - PCIe Bypass-Equalization-to-Highest-Rate 機制是啥?
?如前文(2022.04.05)所述,采用 PCIe Full-EQ 模式鏈路訓練耗時很久,EQ-to-Highest-Rate 模式是縮減 EQ 時間的方式之一。對于支持 32 GT/s 及以上速率的設備,其可能根本無需工作在 8 GT/s 或 16 GT/s 速率,這時再針對 8 GT/s 或 16 GT/s 速率進行 EQ,多少有點浪費。
?只有鏈路兩端設備均支持 Bypass-Equalization-to-Highest-Rate 時才能采用該模式時,否則還是會按照 Full-EQ 模式進行鏈路訓練及均衡。鏈路雙方在 8b/10b 編碼期間通過 TS 進行協(xié)商,決定是否要采用 Bypass-Equalization-to-Highest-Rate 模式進行均衡。如果協(xié)商后決定采用 Bypass-Equalization-to-Highest-Rate 模式進行鏈路訓練,鏈路到達 2.5 GT/s L0 后,返回 Recovery 直接切速到最高速率并針對最高速率(32 GT/s 或以上)進行 1 次 EQ。對于兩端有能力最高支持 32 GT/s 及以上速率的設備,如果把目標速度設置為 8 GT/s 或 16 GT/s 速率,是不建議采用 Bypass-Equalization-to-Highest-Rate 模式的,即便采用了,也不會針對 8 GT/s 或 16 GT/s 的目標速率進行 EQ。
2022.04.07 - PCIe No-Equalization-Needed 機制是啥?
?如前文(2022.04.05)所述,采用 PCIe Full-EQ 模式鏈路訓練耗時很久,No-Equalization-Needed 模式是除 Bypass-Equalization-to-Highest-Rate 模式外的另一種縮減 EQ 時間的方式。
?從名字也看得出來,No-Equalization-Needed 模式比 Bypass-Equalization-to-Highest-Rate 模式更狠,采用 No-Equalization-Needed 模式時一次均衡都不做,能夠大大節(jié)省 EQ 的時間,以最快速度建立連接。如果本地存有之前均衡預設好的值,或者對鏈路質量足夠有信心覺得不用 EQ,可以選用此模式不做 EQ。
?只有鏈路兩端設備均支持 No-Equalization-Needed 時才能采用該模式時,鏈路雙方在 8b/10b 編碼期間通過 TS 進行協(xié)商,決定是否要采用 No-Equalization-Needed 模式進行鏈路訓練。如果協(xié)商后決定采用 No-Equalization-Needed 模式進行鏈路訓練,鏈路到達 2.5 GT/s L0 后,返回 Recovery 直接切速到最高速率且不做 EQ。對于兩端有能力最高支持 32 GT/s 及以上速率的設備,如果把目標速度設置為 8 GT/s 或 16 GT/s 速率,是不建議采用 No-Equalization-Needed 模式的。非要采用的話,也行,同樣不會針對 8 GT/s 或 16 GT/s 等任何速率進行 EQ,但是鏈路信號質量得不到保證。
2022.04.08 - PCIe Quiesce Guarantee 是什么?
?Quiesce Guarantee,靜默保證,是 TS 中的一個字段(Symbol6 bit6),常用于 DL_Active之后重新進行 EQ 的情況。Quiesce Guarantee 是一種可選的手段,跟 TS 中的 Request Equalization、Equalization Request Data Rate 字段配合使用。
?鏈路工作在 8 GT/s 或以上速率時,如果 DSP 檢測到 EQ 問題或者 USP 想要重新 EQ,則需要重新進行 EQ。此時 DL 層可能正在進行數(shù)據(jù)傳輸,如果貿然啟動 EQ,有可能會在 Port、Device、System 層面引發(fā)錯誤。比如,DSP 發(fā)起了一筆 MRd,在 收到 CplD 之前進入 EQ,鑒于 EQ 耗時較久,會導致 Completion Timeout。Quiesce Guarantee 正是這樣一種機制,告知對端我已準備好,你隨時可以發(fā)起 EQ。
2022.04.09 - PCIe 是如何重新發(fā)起 EQ 的?
?當 USP 請求重新 EQ 時,USP 進 Recovery 狀態(tài),在 Recovery.RcvrCfg 狀態(tài)時給 DSP 發(fā)送 TS2, Request Equalization 位置一,Equalization Request Data Rate 置為需要 EQ 的速率,Quiesce Guarantee 位可以(非必須)置一,通知 DSP 其在 1 ms 內將啟動 EQ,以確保不會對 DSP 其他操作產生影響。
?DSP 收到 USP 的 EQ 請求后(處于 Recovery.RcvrCfg 且連續(xù)收到 8 個 Request Equalization 位置一的 TS2),可以(非必須)依照 USP 發(fā)來 TS2 中的 Quiesce Guarantee 位來判斷是否會對 USP 產生影響。只有在確保 DSP 啟動 EQ 不會對 DSP 和 USP 的其他操作產生影響的前提下,DSP 才能啟動 EQ 進程。如果 DSP 確定 EQ 不會對 DSP 和 USP 的其他操作產生影響,其需要在 1ms 內按照 USP 請求的 EQ 速率發(fā)起 EQ 進程。否則,DSP 鏈路狀態(tài)寄存器中相應速率的 Link Equanlization Requset 位置一,由 DSP 作為 EQ 請求方,查詢 USP 狀態(tài)(Quiesce Guarantee 位置一)。
?USP 收到 DSP 的 EQ 請求后,可以(非必須)暫停其正在執(zhí)行的操作,并按照收到 DSP 的 EQ 請求,再次向 DSP 發(fā)起 EQ 請求(TS2 的 Quiesce Guarantee 位必須置一)。USP 響應 DSP EQ 請求的時間沒有限制,但應盡快執(zhí)行。DSP 收到 USP 響應后,在保證 EQ 對自身操作沒有影響的前提下,需要在 1ms 內發(fā)起 EQ,否則把相應速率的 Link Equanlization Requset 位置一稍后再來一次。
?DSP 主動發(fā)起 EQ 請求也含在了以上介紹中。
2022.04.10 - PCIe Equalization 中提到的 Full Swing、Reduce Swing 是什么意思?
PCIe EQ 中的 Swing 是指 Tx 的輸出電壓擺幅,分兩種模式:
? ?Full Swing:全擺幅模式,超高速 Tx 的必選模式,能夠在較低的電壓范圍內保持較高的噪聲容限。
? ?Reduced Swing:降低擺幅模式,是一種可選的低功耗擺幅模式,多用于對電源和噪聲干擾比較敏感的系統(tǒng)。
兩種模式的典型電路如圖 2 所示。

▲圖 2: Transmitter with full-swing and reduced-swing drivers.
2022.04.11 - 我在 pipe 口上看到了 TS1/TS2,為什么 PCIe Controller 沒作統(tǒng)計?
?不一定有 TS1、TS2 就要統(tǒng)計。對于 8 GT/s 及以上速率,LTSSM 只對 Block Aligned 塊對齊之后收到的 TS 進行統(tǒng)計。塊對齊的一大標志是 Rx 收到了 EIEOS。
?對于 Recovery.RcvrLock 狀態(tài)而言,若其上一狀態(tài)為 L0s、L1 或 Recovery.Speed,檢測到 EIEOS 后視為塊對齊。若其上一狀態(tài)為 L0,收到 EDS 后視為塊對齊。以上說的是初次在某速率下(8GT/s 及以上)進入其 Recovery.RcvrLock 狀態(tài)的情況。
?若上一狀態(tài)為 Recovery.EQ、Recovery.Idle,塊對齊的依據(jù)是什么?還需要重新檢測到 EIEOS 后再計數(shù) TS 嗎?Spec 中未明確說明。依據(jù)個人經(jīng)驗,無論 Recovery.EQ -> Recovery.RcvrLock 還是 Recovery.Idle -> Recovery.RcvrLock,此前 LTSSM 已經(jīng)在該速率下進入過 Recovery.RcvrLock,塊對齊已經(jīng)完成,此時收到 TS 可以直接計數(shù),無需等待 EIEOS。
2022.04.12 - Block Alignment 塊對齊是什么?
?Block 是 Gen3 及以上速率的概念。Gen3 及以上速率時,在完成 Bit Lock 后進行 Block Alignment Lock。Block Alignment 塊對齊是在 Recovery 狀態(tài)進行的。Tx 通過發(fā)送 EIEOS 來分隔 Block,Rx 依據(jù)收到的 EIEOS 界定 Block 邊界。若 Rx 收到了 EIEOS 且接下來 130 bit 正確收到了有序集,則 Block 邊界查找成功。否則繼續(xù)檢測 EIEOS。
Block Alignment 有 3 個 Phase:
? ?Unaligned Phase,未對齊階段。Rx 收到 EIOS 后進入 Unaligned Phase。在此階段 Rx 依據(jù) SKPOS 調整 Block Alignment,Rx 收到 EIEOS 后進入 Aligned Phase。
? ?Aligned Phase,對齊階段。在此階段 Rx 依據(jù) SKPOS 調整 Block Alignment。若 Rx 收到 EIEOS 則對 Block Alignment 進行調整。若收到 SDS,進入 Locked Phase。若 Rx 收到未定義的同步頭,退至 Unaligned Phase。
? ?Locked Phase,鎖定階段。為防止數(shù)據(jù)丟失,Rx 進入此階段后不再調整其 Block Alignment。若 Rx 收到未定義的同步頭,退至 Unaligned Phase 或 Aligned Phase。
2022.04.13 - 為什么 EIOSQ 在 2.5 GT/s, 8 GT/s, 16 GT/s, 32 GT/s 時 由 1 個 EIOS 組成,而 5 GT/s 時卻需要 2 個 EIOS ?
?這個 Spec 上沒講明,我也沒有找到明確的解答。以下是個人猜測的原因:
?2.5 GT/s 時,速率相對較低,信號質量好,EIOSQ 由 1 個 EIOS 組成。速率從 2.5 GT/s 上升為 5 GT/s 后,并沒有經(jīng)過 EQ,信號質量不如 2.5 GT/s 時好。為了確保 Rx 能夠正確進入電氣閑,EIOSQ 由 2 個 EIOS 組成,Rx 只需接收到 1 筆 EIOS 即可進入電氣閑。
?8 GT/s,16 GT/s,32 GT/s 時,EIOSQ 仍然只需 1 個 EIOS,是因為進入這些速率是經(jīng)過了 EQ 的,信號質量有保證。
2022.04.14 - 128b/130b 編碼時,PCIe 終止數(shù)據(jù)流傳輸?shù)?EDS 為 Framing Token,為啥啟動數(shù)據(jù)流傳輸?shù)?SDS 卻要是有序集的形式?
?128b/130b 編碼時,PCIe 的 Block 分為 OS (Ordered Set,有序集) Block 及 Data Block,OS Block 期間傳輸 OS,Data Block 期間傳輸 Data Stream。
?鏈路通過發(fā)送 SDS 從 OS 傳輸切到 Data Stream。發(fā)送 SDS 的時候,鏈路仍處于 OS Block 傳輸,按道理也應該發(fā)送有序集,所以 SDS 為有序集的形式。
?鏈路通過發(fā)送 EDS 從 Data Stream 傳輸切到 OS 傳輸,此時鏈路處于 Data Block 傳輸時段,EDS 不應為有序集的形式,又不便采用 TLP、DLLP,采用 Framing Token 是最佳選擇。
2022.04.15 - 8b/10b 發(fā)送 TLP 時,有 STP 及 END來標志 TLP 的開始結束,128b/130b 時只有 STP 沒有 END,如何知道 TLP 結束?
8b/10b 編碼時,STP (K27.7) 及 END (K29.7) 均為 8b/10b 的控制字,兩者均不攜帶 TLP 相關信息,有必要采用 STP 及 END 來標志 TLP 的開始和結束。其幀格式如下圖 3 所示。

▲圖 3: 8b/10b 編碼時的 TLP 幀
128b/130b 編碼時,STP 為 Framing Token(圖 4),其中包含了數(shù)據(jù)鏈路層提供的該 TLP 的 Length、FCRC、Sequence Number 等信息。Rx 可以依據(jù) STP Token 中的 TLP Length 來獲取 TLP 的長度,無需專門的 END。其幀格式如圖 5 所示。

▲圖 4: STP Framing Token 格式

▲圖 5: 128b/130b 編碼時的 TLP 幀
2022.04.16 - 符號鎖定我理解,位鎖定是啥? 位有啥好鎖定的?
?PCIe 的位鎖定是指 Rx PLL 鎖定在了與 Tx 相同的頻率上,不是說鎖定了某個 Bit。Rx PLL 依據(jù)接收數(shù)據(jù)流的 Bit 跳變,使得 Rx 還原時鐘頻率同步于 Tx 時鐘。如果沒有位鎖定,PCIe Rx 無法正確重建 Rx 時鐘,也無法正確解析數(shù)據(jù)。
2022.04.17 - PCIe Ordered Set 和 Framing Token 有何區(qū)別?
?有序集用于鏈路訓練、時鐘偏差補償、進出電氣閑等。有序集長度為 4B 整倍數(shù),一般 16 Symbol(SKPOS/EIOS 4 symbol @Gen1/2)。Gen3+ 時,有序集的同步頭為 01b,在 Orderer Sets Block 中發(fā)送,有序集的 Symbol 0 來指示當前有序集的類型。
?Framing Token 是幀令牌,標記幀的類型、起始、長度、狀態(tài)、結束等等。Framing Token 長度較短,為 1, 2, 4 Symbol。Framing Token 是 PCIe Gen3 出現(xiàn)的概念,F(xiàn)raming Token 中的 STP、SDP、EDB、IDL 在 Gen1/2 時候以特殊符號(K Code)的形式存在。Gen3+ 時,F(xiàn)raming Token 的同步頭為 10b,在 Data Block 中發(fā)送。
2022.04.18 - Multiplexer 和 de-multiplexer 有何作用?
?Multiplexer 多路復用器位于 Tx 端,負責按需選通要發(fā)送的數(shù)據(jù),包括 DL 層下來的 Data、K 控制字、Framing Token、有序集及邏輯閑等,如圖 6 所示。在鏈路訓練階段,選通 K/D 通道,發(fā)送 TS1/TS2/SKIP/EIOS 等有序集進行鏈路訓練;鏈路訓練完畢后,若 DL 層有數(shù)據(jù)下來,則有序選通 D 通道及 K 通道,在 TLP/DLLP 頭尾插入 STP/SDP/END/EDB,插入 SKPOS 等;沒有數(shù)據(jù)下來時,選通邏輯閑 D 通道,發(fā)送邏輯閑。
?De-multiplexer 是 Multiplexer 的逆過程,位于 Rx 端,對組裝好的數(shù)據(jù)進行解析及拆分。

▲圖 6: Tx Multiplexer 示意圖
2022.04.19 - PCIe 是如何實現(xiàn) Block Type 檢測的?
?Block Type 檢測是檢測當前數(shù)據(jù)流為 Ordered Set Block 還是 Data block,是 PCIe Gen3 及以上的概念,因為 Gen3 時才出現(xiàn) Ordered Set Block 與 Data Block 之分。
?Block Type 檢測原理很簡單,就是根據(jù)同步頭中的兩個 bit 進行判斷,但在判斷之前,必須先完成 Block Alignment。如果檢測到 Block 為 Ordered Set Block,則當前 Block 為 PL 層自用,不會上傳到 DL 層;如果檢測到 Data Block,則會上傳至 DL 層。
?考慮到鏈路中所有 Lane 上都攜帶有相同的 Block 信息,可以只在 1 條 Lane 上檢測 Block Type。
2022.04.20 - PCIe elastic buffer 彈性緩存是做什么的?
?Elastic buffter 是 Rx 端的一種異步 FIFO,通過在 Elastic Buffer 中插入或刪除 SKP,來解決 PCIe 接收數(shù)據(jù) Tx/Rx 跨時鐘域問題。
?Elastic Buffer 輸入時鐘為 Recovered Clock,輸出時鐘為 Rx Local Clock。當 Rx Local Clock 比 Recovered Clock 快時,Elastic Buffer 會出現(xiàn) Underflow,在 Empty 之前往 Elastic Buffer 中插入 SKP;當 Rx Local Clock 比 Recovered Clock 慢時,Elastic Buffer 會出現(xiàn) Overflow,在 Full 之前從 Elastic Buffer 中刪除 SKP。
2022.04.21 - Byte striping/un-striping 是做什么的?
?Byte Striping 位于 Tx 端,是對于有多條 Lane 的 Link 而言的。Byte Striping 內,Tx 把 Multiplexer 出來的待發(fā)送的串行 Byte 數(shù)據(jù)按照 Byte 依次分配到該 Link 多條 Lane 上并行發(fā)送出去。圖 7 是 x8 link Byte Striping@8b/10b 的一個例子。128b/130b 時,各條 Lane 先發(fā)送 Sync Header 再發(fā)送 Block Symbol。
?Byte Un-striping 是 Byte Striping 的逆過程,位于 Rx 端,對各條 Lane 上的數(shù)據(jù)進行解析重組為串行 Byte,送給 De-multiplexer。

▲圖 7: x8 Byte Striping@8b/10b 示意圖
2022.04.22 - Packet filtering 是做什么的?
?Rx 收到的數(shù)據(jù)中,有 OS、TLP、DLLP、IDL 及控制字/Framing Token 等。這些數(shù)據(jù)中,OS、IDL 等是 PL 層自用的,TLP、DLLP 需要上傳到 DL 層。Packet Filtering 就是干這個的,來過濾 Packet,決定是否將 Packet 送給 DL。
2022.04.23 - 為什么 8 GT/s 及以上速率時需要均衡?
?LTSSM 中的 Recovery.Equalization 的確是到 Gen3 (8 GT/s) 時才有的,但均衡不是到 Gen3 才有的。2.5 GT/s 及 5 GT/s 時,信號速率相對較低,在 Tx 端采用信號去加重即可實現(xiàn)較好質量的信號傳輸,這里的信號去加重即是均衡技術的一種。由于信號去加重時參數(shù)固定,收發(fā)端無需協(xié)商,不需要 Recovery.Equaliation 這一過程進行協(xié)商。
?數(shù)據(jù)速率上升到 8 GT/s 及以上后,信號傳輸面臨的信號完整性問題更加突出,僅采用傳統(tǒng)的去加重無法滿足高質量的信號傳輸,需要收發(fā)端動態(tài)協(xié)商 Tx/Rx 參數(shù)來優(yōu)化信號質量。
2022.04.24 - PCIe 訓練完畢后,如何重新進行鏈路訓練?
?只需要將 Link Control Register 的 Retrain Link 置一就好了。如果需要在重新訓練時改變鏈路寬度、鏈路目標速度,需要在將 Link Control Register 的 Retrain Link 置一前完成相關參數(shù)的修改。
2022.04.25 - DSP Equalization 沒有 Phase0,那 DSP 是怎么給 USP 發(fā)送 preset 的?
?DSP 在切速前的 Recovery.RcvrCfg 狀態(tài)給 USP 發(fā)送 Preset。至于為什么要放在這個狀態(tài),spec 中未明確說明。從 Equalization 前后狀態(tài)來看(Recovery.RcvrLock -> Recovery.RcvrCfg -> Recovery.Speed -> Recovery.Equalization -> Recovery.RcvrLock),肯定是要放在 Equalization 之前的,放在之后沒有意義。
Equalization 前只有 RcvrLock、RcvrCfg、RcvrSpeed 三個狀態(tài),其中 RcvrLock 要做位鎖定符號鎖定,RcvrSpeed 要切速,只有個 RcvrCfg 還比較閑。如果 DSP 也來一個 Phase0,由于在 phase0 時速度已經(jīng)切完了,此時鏈路質量很差的話,USP 就解析不出 DSP 發(fā)給他的 preset 了。
?注意:如果 USP 當前已經(jīng)為 128b/130b 編碼切要切到更高一檔的速度,USP 也是要在 Recovery.RcvrCfg 狀態(tài)給 DSP 發(fā)送 preset 的。
2022.04.26 - FIR 均衡器有哪幾種輸出電平?
?采用三抽頭 FIR 均衡器時,對于某比特信號而言,其前后兩比特有 4 種不同的組合形式,這也意味著該比特輸出電平有 4 種可能。如圖 8 所示。電平幅值取決于三個抽頭系數(shù) C+1、C0 及 C-1。

▲ 圖 8: 三抽頭均衡器的四種輸出電平
?舉個例子:當前比特為 1 ,C+1=-0.2,C0=0.7,C-1=-0.1,
? ?連續(xù) 3 比特為 011,輸出電壓為 -C+1+C0+C-1=0.8,對應圖中 Va,稱為 Normal 電平 。
? ?連續(xù) 3 比特為 111,輸出電壓為 C+1+C0+C-1=0.4,對應圖中 Vb,稱為 De-emphasized 電平 。
? ?連續(xù) 3 比特為 110,輸出電壓為 C+1+C0-C-1=0.6,對應圖中 Vc,稱為 Pre-shoot 電平 。
? ?連續(xù) 3 比特為 010,輸出電壓為 -C+1+C0-C-1=1.0,對應圖中 Vd,稱為 Maximum-height 電平 。
?根據(jù)以上四種電平,可計算出去加重、Pre-shoot及 Boost 幅度,表示為:
De?emphasis=20log10Vb/Va
Preshoot=20log10Vc/Vb
Boost=20log10Vd/Vb
2022.04.27 - PCIe DLLP Blocking 是什么?
?對于采用自動均衡機制的 PCIe 設備,USP 在收到 DSP 發(fā)來的 DLLP 之前不能發(fā)送任何 DLLP,DSP 在 EQ 完成之前也不能發(fā)送任何 DLLP,稱為 DLLP Blocking。鏈路訓練進入 L0 狀態(tài)后,如果 PCIe 設備知道 EQ 未完成、其接下來要進行 EQ,無論當前速率是多少(即便已經(jīng)達到目標速率),雙方都不能發(fā)送任何 DLLP。
?若由于 DLLP Blocking 導致設備從 L0 延遲進入 Recovery,USP 或 DSP 端有可能會發(fā)生推測電氣閑超時或 DLLP 超時,這兩種超時均是不可報告的錯誤。當發(fā)生上述兩種超時時,鏈路會進入 Recovery 重新對鏈路進行訓練,不會影響正確的鏈接操作。
2022.04.28 - PCIe Zero Write、Zero Read 是什么?
?Zero write 和 zero read 是指 PCIe 發(fā)送的數(shù)據(jù)載荷長度為 0 的內存讀寫請求,常用于 Flush 操作,以確保早前 Posted 發(fā)送的數(shù)據(jù)傳輸完成。
?Zero write、read 請求 TLP 中,length 設置為 1(不是 0,0 表示 1024 DW),但 byte enble 均設置為 0。Zero write TLP 中不攜帶數(shù)據(jù)載荷,Zero read 的 CplD 攜帶有 1 DW 數(shù)據(jù)載荷(協(xié)議未指定,可為任意值)。
2022.04.29 - PCIe Phantom Function 是什么?
?Phantom Function,“幻影” Function,看似存在實則不存在的 Function,用于增加單 Function 設備暫存的 NP 事務數(shù)量,從而增大 Outstanding 能力。
?一般情況下,PCIe 設備中每個 Function 都有一塊空間暫存該 Function 發(fā)出去的 NP 請求,共 8 塊,每塊暫存的 NP 請求數(shù)量上限取決于 Tag 字段寬度(8-bit TAG -> 256)。若設備只有一個 Function,那多多少少有點浪費。Phantom Function 正是看中了這一點,當設備只有一個 Function 且支持 Phantom Function 時,通過使能設備控制寄存器中 Phantom Function Enable 位,將 BDF 中的 Function Number 字段當 Tag 用,這樣每一個 Function 的 NP 暫存空間都能被利用到,從而將設備的 Outstanding 能力變?yōu)橹暗?8 倍。
?注意:Phantom Function 不是 Virtual Function,兩者不是一個概念。
2022.04.30 - PCIe Phantom Function 有何局限?
?由于開啟了 Phantom Function 的 PCIe 設備其 Function Number 被挪作他用,開啟了 Phantom Function 的設備有以下局限:
? ?不支持 ARI(Alternative Routing-ID );
? ?不支持多 VF;
? ?開啟 VF 后不支持 PF;
? ?不支持 ATS(Address Translation Service);
? ?不支持 IDO(ID-Based Ordering)。
?由于 Phantom Function 有以上諸多局限,非必要時一般不采用 Phantom Function。PCIe 4.0 引入了 10-bit Tag 能力,Outstanding 數(shù)目變?yōu)榱?1024,絕大部分情況夠用了。