PCIe Chapter 22:連線診斷、Lane Margining 與 Flit 紀錄

Lane Margining(接收端裕量量測)讓軟體在 Link 維持 L0 時,觀察接收端偏離正常取樣位置後的表現。本章以 16.0 GT/s Endpoint 的一條 Lane 為例,從 Extended Capability(延伸能力結構)找到控制位置,查詢接收端能力,再讀懂命令回報與復原流程。

Lane Margining 的規格閱讀路線診斷前先確認能力與就緒,再操作指定範圍。找到對應 Port 的能力確認用途、模式與就緒依 Lane/接收端選擇控制讀取回報並恢復正常設定

作者繪製的規格閱讀路線;命令之間的等待與交握,見下方完整案例。

從 Endpoint 的 Lane 3 開始,要依序查哪幾張圖?

【模擬資料】以下資料為教學用途建立,不代表特定硬體或平台。拓撲為 Root Port 直接連接 Endpoint,沒有 Retimer(訊號重整器),也沒有 Lane Reversal(Lane 順序反轉)。目前 Link 在 L0,以 16.0 GT/s x4 運作;兩端最大寬度均為 x8。這次觀察 Endpoint 接收 Root Port 資料的方向,指定啟用中的預設 Lane 3。

先回顧一個方向關係:Root Port 是 Downstream Port,Endpoint 的 Port 是 Upstream Port。這次要調整的是 Endpoint 的 Receiver(接收端),所以從 Endpoint 的設定空間下命令。多功能 Endpoint 只在 Function 0 放這組 Lane Margining(接收端裕量量測)能力。

閱讀順序這次讀哪裡?帶著什麼結果往下查?
1. 定位結構Figure 7-126/Table 7-111,p.1080沿 Extended Capability(延伸能力結構)鏈找到 ID 0027h、Version 1h,將起點記為 C
2. 找 Lane 項目Figure 7-125,pp.1079–1080Lane 0 Control 從 C+08h 起,每 Lane 佔 4 bytes;Lane 3 Control=C+14h,Status=C+16h
3. 確認可下命令Figures 7-127/7-128、Tables 7-112/7-113,pp.1080–1081本例 Margining uses Driver Software=0、Margining Ready=1;Margining Software Ready 此時無定義,不拿它當額外門檻
4. 選接收端Figure 4-60,p.553;Receiver Number 編碼,p.552Endpoint 的 Upstream Port Receiver 是 Rx(F),Receiver Number=110b;不是 Root Port 自己的 Rx(A)=001b
5. 組命令、讀回報Figures 7-129/7-130、Tables 7-114/7-115,pp.1082–1083;Table 4-63,pp.554–556欄位位置在 Chapter 7,命令與回覆語意在 Chapter 4;兩邊要合併閱讀

這裡的 Lane 項目依預設 Lane 編號排列,不隨協商寬度或 Lane Reversal 重新編號。Maximum Link Width 決定有效項目的範圍;超出最大寬度的項目值未定義。本例另外確認 Lane 3 位於目前 x4 的啟用範圍,才對它進行測試。

來源:§7.7.10–§7.7.10.5,文件/PDF pp.1077–1083;§4.2.18.1、Figure 4-60,pp.552–553。

知道暫存器位置後,如何完成一次命令?

先完成 §4.2.18.3 的操作準備:目前速率須至少為 16.0 GT/s,待測 Lane 必須在目前 Link Width 內;Upstream Port 的 Function 電源設定須阻止 Port 進入 L1,兩端 ASPM Control(自主 Link 省電控制)須設為 00b。保存 Hardware Autonomous Speed Disable 與 Hardware Autonomous Width Disable 原值;兩端的對應欄位若可寫,均設為 1,測完再恢復。

本例以上準備都已完成,且每次只測一條 Lane。Figure 7-129 的 16-bit Control 與 Figure 7-130 的 Status 使用相對應的欄位位置;bit 7 是 RsvdP(保留原值),本例原值為 0。下表數值都是完整 16-bit 讀值,不是記憶體中的 byte 排列。

同一組欄位,命令與回報的 Payload 不同Control 051E 選 Rx F、timing type 011,向右五步。Status 821E 的 Payload 82 表示執行中且錯誤計數二,不是向右一百三十步。 Control:051Eh → timing,向右 5 steps [15:8] Payload=05h方向與步數[7]RsvdP[6]0b[5:3] Type011b[2:0] Receiver110b:Rx(F) Status:821Eh → 執行中,MErrorCount=2Payload=82h:bits [7:6]=10b;bits [5:0]=000010bUsage Model [6]=0b:本次使用 Lane Margining
作者依 Figures 7-129/7-130 與 Table 4-63 繪製。回報的低位欄位用來辨認對象與命令,Payload 要按回報定義解碼。

每次換命令前,先送 No Command 並等待其回覆。Table 4-63 將它定義為 Receiver=000b、Type=111b、Payload=9Ch、Usage Model=0b;本例 Control 為 9C38h。新命令須以一次不可分割的寫入更新 Control,再以一次不可分割的讀取取得 Status。核對回報的 Receiver、Type、Usage Model,以及該命令預期的 Payload;檢查 No Command 回覆時,核對 Receiver Number Status=000b、Margin Type Status=111b、Usage Model Status=0b;依 Table 7-115,Margin Payload Status 此時不作有效結果比較。

若 Link 仍在 L0 且速率至少為 16.0 GT/s,目標接收端須在收到有效命令後 1 ms 內套用並回覆;Step Margin 的回覆仍可能是準備中。§4.2.18.3 建議兩次 Status 讀取至少間隔 10 μs。新命令發出 10 ms 後仍未取得預期回覆,軟體可以宣告該接收端的 margining 失敗;這和 Configuration Write 已取得 Completion 是不同的檢查。這裡說的命令回覆,也不等同於 Data Link Layer 的 Ack。

來源:§4.2.18.2–§4.2.18.3,文件/PDF pp.557–561;Figures 7-129/7-130、Tables 7-114/7-115,pp.1082–1083。

查完能力,再向右移 5 steps,回報怎麼讀?

延續前面的模擬配置,Rx(F) 的能力回覆假設如下。下表每一列新命令之前,都已完成 No Command 交握,包括只改 Payload 的情況。Table 4-63 左半部是命令,右半部是回覆;Report 類命令的回覆 Payload 會換成所查的值。

命令/觀察時點寫入 Control讀到 Status如何解讀?
Report Margin Control Capabilities880Eh150EhPayload=15h:獨立錯誤取樣器、以 sample count 回報、支援左右分開的 timing,也支援 voltage;不支援上下分開的 voltage
Report MNumTimingSteps8A0Eh200Eh回報 32 steps;這是接收端宣告的步數上限
Report MMaxTimingOffset8B0Eh190Eh回報最大時間位移為 nominal UI(標稱單位間隔)的 25%
Set Error Count LimitC516hC516hPayload 高兩位為 11b、低六位為 5;接收端回報已登記的錯誤上限 5
Step Margin:向右 5 steps,剛開始051Eh401EhPayload 高兩位 01b:仍在準備,尚未開始執行步進量測;錯誤計數為 0
同一命令,稍後讀取051Eh801Eh10b:量測執行中;錯誤計數為 0
同一命令,再次讀取051Eh821Eh10b:仍在執行;MErrorCount=2,未超過本例上限 5

例如 880Eh 可拆成 (88h << 8) | (001b << 3) | 110b。Report Margin Control Capabilities 的 Payload=15h,其 bit 4 是 MIndErrorSampler、bit 3 是 MSampleReportingMethod、bit 2 是 MIndLeftRightTiming、bit 1 是 MIndUpDownVoltage、bit 0 是 MVoltageSupported。bit 3=0 表示使用 sample count;bit 1=0 只表示不能分開選上下方向,並不否定 bit 0 宣告的 voltage 支援。

Step Margin 的 Payload=05h,則依 §4.2.18.1.2 解讀:本例 MIndLeftRightTiming=1,bit 6=0 選右邊、bits [5:0]=5 選步數。Table 8-12 要求位移隨步數單調增加,沒有保證每一步都是等距;因此知道 32 steps 對應最大 25% UI,仍不能把第 5 step 直接按比例換成固定時間。

回到 Status=821Eh,Payload=82h 的高兩位是執行狀態,低六位才是 MErrorCount(本次裕量測試的錯誤計數)。因為本例使用獨立錯誤取樣器,這個 2 是該取樣器偵測到的 bit errors,Link 的正常資料流可能仍然沒有錯誤。若 MIndErrorSampler=0,計數改依 §4.2.18.2 的邏輯錯誤條件解讀,例如 Port 進入 Recovery;兩種計數不能混在一起比較。

量測仍在執行時,軟體須依回報方式取得實際取樣量;本例可在完成必要交握後使用 Report MSampleCount。規格建議每個位置至少量到 108 bits 再換下一步,錯誤上限已超過時例外;準備期間尚未量測,不能算進取樣量。本例尚未提供取樣量,因此這幾個 Status 只示範命令與執行狀態的讀法,還不足以完成該位置的裕量評估。單次讀到 0 errors,只描述已觀察到的樣本。

另外兩個 Step Margin 回報是:11b 表示 NAK(不支援這筆裕量命令),MErrorCount=0;00b 表示錯誤過多,接收端已自動回到正常取樣位置。使用獨立取樣器時,超過上限是否自動結束是可選行為,所以仍須讀執行狀態。硬體的 01b 準備狀態不得持續超過收到新有效命令後的 100 ms;軟體若從發命令起已等 200 ms 仍看到 01b,可以判定該接收端 margining 失敗。這裡的 NAK 是裕量命令的執行回報,與 Data Link Layer 要求重送的 Nak 不同。

來源:§4.2.18.1–§4.2.18.3、Table 4-63 Margin Commands and Corresponding Responses,文件/PDF pp.553–561;§8.4.4、Table 8-12 Lane Margining,pp.1395–1398。

讀到結果後,怎麼結束這個方向的測試?

No Command 用來分隔命令,不會自動把持續中的 Step Margin 移回正常位置。一個測試方向結束時,先完成更換命令前所需的 No Command 交握。接著依 §4.2.18.3,於 Downstream 與 Upstream Ports 依序 broadcast 下列命令,而且每一步都先確認接收端回覆,再送下一步。本例無 Retimer,回覆的接收端分別是 Root Port 的 Rx(A) 與 Endpoint 的 Rx(F)。

  1. Go to Normal Settings:本例 Control=0F10h,恢復正常取樣位置。
  2. No Command:本例 Control=9C38h,等待交握完成。
  3. Clear Error Log:本例 Control=5510h,清除裕量量測累積的錯誤計數。
  4. No Command:本例 Control=9C38h,再確認回覆。

上述 Control 的 Receiver=000b 表示 broadcast;有效回覆除 No Command 外,會帶回實際回覆者的 Receiver Number。因此 Endpoint 的 Go to Normal Settings 回覆本例是 0F16h,Root Port 的回覆則是 0F11h。命令與 Status 不必逐 bit 相同。Clear Error Log 清的是 margining 錯誤紀錄,不是清除 AER(進階錯誤回報)的全部 Status。

AER
Advanced Error Reporting,進階錯誤回報

整個測試程序完成後,恢復先前保存的自主變速/變寬 Disable 值。若量測期間速率改變,結果不準確,軟體必須退出程序並把 Control 設為 No Command,避免日後回到 16.0 GT/s 以上時意外重新啟動。若 Link 進入 Recovery,還須按獨立或共用取樣器的規則處理暫停、回到預設位置與恢復測試;僅看到再次進入 L0,無法把前後資料視為同一段連續量測。

來源:§4.2.18,文件/PDF p.550;§4.2.18.1–§4.2.18.3,pp.553–561。

Margining 與 Flit 紀錄,各自回答什麼問題?

前面的 Margining 會改變測試條件,並回報指定取樣位置的表現。若只想看傳輸期間記錄的錯誤,則按用途選下面的結構;Flit Mode(固定長度傳輸單位模式)的格式與重送原理見 Chapter 18。

想觀察的內容規格入口適用條件與用途
64.0 GT/s 實體層狀態§7.7.7/Figure 7-97,pp.1055–1056讀 Equalization 與相關速率狀態;未支援 64.0 GT/s 時,標頭以外暫存器的行為未定義
Flit 錯誤紀錄、錯誤計數與 FBER 量測§7.7.8/Figure 7-103,pp.1060–1061只在 Flit Mode 生效;紀錄、Counter Control/Status 與 FBER(First Bit Error Rate,第一位元錯誤率)量測各有自己的欄位與條件
初始寬度、Segment 等資訊§7.7.9/Figure 7-120、Table 7-110,pp.1072、1077Device Status 3 的 Initial Link Width 是初次訓練結果;目前寬度另讀 Negotiated Link Width
主動注入測試錯誤§7.8.13/Figure 7-211,pp.1171–1172Flit Error Injection(Flit 錯誤注入)是可選能力,只在 Flit Mode 生效;找到結構後,仍須另外選擇是否啟動測試

Retimer 的裕量命令則由 Downstream Port 代送,透過 Control SKP Ordered Set(帶 Link 控制資訊的 SKP 序列)向下傳遞,回報向上返回。這仍是同一條 Link 內的接收端定位;本章案例的 Endpoint Rx(F) 使用自己的 Control/Status,不套用 Retimer 的代送路徑。

怎樣保存一份可以再分析的結果?

保存 Port/Function、預設 Lane、Receiver Number、速率與模式、能力回報、測試方向、步數、開始/結束時間、執行狀態、錯誤計數及取樣量。另記錄重訓練、速率改變與復原命令。這樣才能知道兩筆數據是否量到同一個位置、同一種錯誤,以及相近的樣本數。

§7.7.7 另提醒:64.0 GT/s 的 parity 錯誤記在名稱為 16.0 GT/s 的 Local/First Retimer/Second Retimer Data Parity Mismatch Status Registers。若要追蹤特定速率的錯誤,軟體應在速率改變時清除這些紀錄;先保存舊紀錄,再開始下一段觀察。

本例完成的是接收端能力查詢、單一 timing 位置的判讀與復原。完整裕量輪廓還需要逐一測其他位置、方向並取得足夠樣本。各速率參數可以不同;16.0 GT/s 的 voltage margining 是可選,32.0/64.0 GT/s 則要求支援。64.0 GT/s 的 Step Margin 同時作用於 PAM4(四階訊號)的三個眼,仍須按該速率參數解讀。這些接收端內部觀察不等同於 Chapter 21 的外部 stressed-eye 與 BER 測試,也不足以單獨宣告完整電氣符合性。

PAM4
Pulse Amplitude Modulation with 4 levels,四階脈衝振幅調變

版本與來源

本章依 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB);以下文件印刷頁與 PDF 檢視器頁碼相同。命令讀值為教學假設,未執行實機測試。

完整來源定位
  • §4.2.18 Lane Margining at Receiver, pp.550–561; §4.2.18.1 Receiver Number, Margin Type, Usage Model, and Margin Payload Fields, pp.551–557; Figure 4-60 Receiver Number Assignment, p.553; Table 4-63 Margin Commands and Corresponding Responses, pp.554–556.
  • §4.2.18.2 Margin Command and Response Flow, pp.557–560; §4.2.18.3 Receiver Margin Testing Requirements, pp.560–561.
  • §7.7.10 Lane Margining at the Receiver Extended Capability, pp.1077–1083; Figure 7-125 (layout), pp.1079–1080; Figure 7-126 / Table 7-111 (header), p.1080; Figure 7-127 / Table 7-112 (port capabilities), pp.1080–1081; Figure 7-128 / Table 7-113 (port status), p.1081; Figure 7-129 / Table 7-114 Lane N: Margining Control Register Entry, p.1082; Figure 7-130 / Table 7-115 Lane N: Margining Lane Status Register Entry, p.1083.
  • §8.4.4 Lane Margining at the Receiver - Electrical Requirements, pp.1395–1398; Table 8-12 Lane Margining, pp.1396–1398.
  • §4.2.3.1.1 PAM4 Signaling, p.343 (FBER); §7.7.7 Physical Layer 64.0 GT/s Extended Capability, pp.1055–1056, Figure 7-97; §7.7.8 Flit Logging Extended Capability, pp.1060–1061, Figure 7-103 Flit Logging Extended Capability Structure; §7.7.9 Device 3 Extended Capability Structure, p.1072, Figure 7-120; §7.7.9.4 / Table 7-110 Device Status 3 Register, p.1077; §7.8.13 Flit Error Injection Extended Capability, pp.1171–1172, Figure 7-211 Flit Error Injection Extended Capability Structure.
Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...