PCIe Chapter 19:LTSSM、Equalization 與 Retimer
LTSSM(Link Training and Status State Machine,鏈結訓練與狀態機)描述 Link 的偵測、訓練與運作。本章先讀正常路徑,再用 Polling 案例把狀態箭頭接上收發紀錄、計數及 Timeout;Retimer 與升速則按各自的適用條件接著看。
主狀態用來定位進度,箭頭沒有代替子狀態的接收、計數與 Timeout 規則。L0 之後仍要分開確認 Data Link 與 Transaction 結果。
先找到狀態,再找轉換條件
讀 LTSSM(Link Training and Status State Machine,鏈結訓練與狀態機)紀錄時,先確認是哪一端的 Port、哪條 Link,以及資料記錄的方向與時間。Figure 4-48 用來定位主狀態;§4.2.6 解釋各狀態要完成的工作;§4.2.7 才定義子狀態的動作、接收條件與 Timeout。三者要接著讀。
本章選初次建立 Link 的 Polling 作完整示範。先查 Figure 4-49,確認 Receiver Detection(接收端終端偵測)之後如何進入 Polling;再放大 Figure 4-50,沿正常路徑讀 Polling.Active 與 Polling.Configuration。後節再接到速度提升、Equalization 與 Retimer,說明分析範圍如何隨情境改變。
Base 6.0 §4.2.6 Link Training and Status State Machine (LTSSM) Descriptions(pp.444–452);§4.2.7 Link Training and Status State Rules、Figure 4-48 Main State Diagram for Link Training and Status State Machine(pp.452–454);Figure 4-49 Detect Substate Machine(p.456)、Figure 4-50 Polling Substate Machine(p.464)。
看到 TS1 或 TS2,還差哪些條件才能前進?
一次收到正確序列,只代表那次接收有效;轉換條件還包含連續接收、傳送數量與 Lane 範圍。TS1、TS2 是 Training Sequence Ordered Sets(訓練用的有序符號組),兩端各自送出,也各自檢查收到的內容。
【模擬資料】以下資料為教學用途建立,不代表特定硬體或平台。Root Port 00:01.0 與 Endpoint 01:00.0 直接相連,沒有 Retimer。本次觀察 Root Port 的 LTSSM 與收發紀錄,初次訓練使用 2.5 GT/s、8b/10b;Detect 已在兩條候選 Lane 上偵測到 Receiver。以下暫稱 Lane A、Lane B,它們是工具已配對的接線通道,尚不是 Configuration 分配完成的 Logical Lane Number。
假設 Enter Compliance=0,沒有 Loopback 或 Compliance 測試要求。接收的 TS1 均以 PAD 填入 Link Number 與 Lane Number,Compliance Receive=0;本例也不涉及極性反轉。PAD 是尚未指派編號時使用的填充值,不是 Lane 0。所有下列觀察都在所屬子狀態的 Timeout 到期之前。
第一步:Polling.Active 同時看本端傳送量與每條 Lane 的接收
Root Port 在 Polling.Active 持續送出 TS1。依 p.457 的正常轉換路徑,至少要送出 1024 組 TS1,而且 Detect 曾偵測到 Receiver 的所有 Lane,都須連續收到八組符合條件的訓練序列。這裡的 1024 是本端傳送量,八組則是各 Lane 的接收條件,不能把兩個方向的數量相加。
| 同一次 Polling.Active 的時點 | 本端已送 TS1 | Lane A 連續合格接收 | Lane B 連續合格接收 | 依本例正常路徑的依本例條件的下一狀態 |
|---|---|---|---|---|
| A0 | 1000 | 8 | 7 | Polling.Active |
| A1 | 1023 | 31 | 30 | Polling.Active |
| A2 | 1024 | 32 | 31 | Polling.Configuration |
A0 的兩項條件都還不完整。到了 A1,兩條 Lane 的連續接收都已足夠,但本端仍少送一組 TS1;A2 才同時滿足。數字是工具依完整紀錄整理出的接收次數,不是規格要求公開的 Configuration Register。
第二步:Polling.Configuration 的傳送計數有新的起點
Root Port 進入 Polling.Configuration 後改送 TS2,Link Number 與 Lane Number 仍為 PAD。接著查 §4.2.7.2.3:在 Detect 曾偵測到 Receiver 的 Lane 上,收到八組連續 TS2,並且從收到第一組 TS2 之後,再送出 16 組 TS2,才能前進到 Configuration。本例 Lane A、Lane B 都已連續收到八組,接收條件成立;接著核對首次接收後的傳送數量。
| 同一次 Polling.Configuration 的時點 | 首次收到 TS2 前已送 | 首次收到 TS2 後已送 | 本端 TS2 合計 | Lane A/B 連續收到 TS2 | 依本例條件的下一狀態 |
|---|---|---|---|---|---|
| B0 | 6 | 15 | 21 | 8 / 8 | Polling.Configuration |
| B1 | 6 | 16 | 22 | 9 / 9 | Configuration |
B0 雖然總共送過 21 組 TS2,但符合本次起算條件的只有 15 組;要等到 B1 才足夠。分析工具若只顯示「TS2 共 21 組」,還得找出首次收到 TS2 的位置,才能判斷這一條規則。
到了 Configuration,哪些工作仍未完成?
B1 只把本端推進 Configuration。後續還要依 Figure 4-51(p.482)的 Linkwidth 與 Lanenum 子狀態建立 Link Number、Logical Lane Number 與寬度,並完成後續訓練,才會到 L0。兩條候選 Lane 都通過 Polling,也還沒有直接決定最後必為 x2。先前的 Chapter 8 說明了 Link 能力與目前結果如何分開;L0 之後的 Data Link 與 Flow Control 初始化則接到 Chapter 17。
Base 6.0 §4.2.7.1.2 Detect.Active(p.456);§4.2.7.2.1 Polling.Active(pp.457–458);§4.2.7.2.3 Polling.Configuration、§4.2.7.2.4 Polling.Speed(p.463);Figure 4-50(p.464);§4.2.7.3 Configuration(p.464 起)。
等待超時後,並非一律返回 Detect
先前的案例只走正常轉換。若遲遲無法前進,就要分開查每個子狀態的 Timeout 規則,不能沿用一個共同的「失敗」箭頭。
| 目前位置 | 規格的 Timeout 或條件 | 接著查什麼 |
|---|---|---|
| Detect.Active,只有部分 Lane 偵測到 Receiver | 等待 12 ms,再次執行 Receiver Detection | 兩次是否恰好相同 Lane 成功;相同才可走向 Polling,不同則回 Detect.Quiet |
| Polling.Active | 24 ms Timeout,另有部分 Lane 可前進的條件 | 至少一條 Lane 連續收到八組合格序列、首次收到 TS1/TS2 後已再送出至少 1024 組 TS1,以及預先指定 Lane 集合是否曾退出 Electrical Idle;符合規則可到 Polling.Configuration,其他條件可能到 Polling.Compliance 或 Detect |
| Polling.Configuration | 48 ms Timeout 前仍未滿足轉換條件 | 到期後回 Detect;原本缺的是連續接收,還是首次接收後的傳送量,須由紀錄分開確認 |
§4.2.6 的通則給 LTSSM Timeout「不得提早、最多延後 50%」的容許範圍,除非該處另有明文。因此,24 ms 與 48 ms 是規格標稱值,對應上限分別為 36 ms 與 72 ms;不能要求所有實作都恰好在第 24.000 ms 或 48.000 ms 轉移。分析前仍要確認 Timer 的起點、觀察時間及資料是否連續。
Polling.Active 的 Timeout 分支使用「至少一條」及 implementation-specific 的預定 Lane 集合,和正常路徑的「所有偵測成功 Lane」不同。這是規格容許進一步訓練的分支,不足以指出哪條 Lane 已損壞。Polling.Compliance 則還可能由 Enter Compliance 或指定的訓練控制條件觸發;實際進入原因要回查控制與序列內容。
Base 6.0 §4.2.6(p.444,Timeout 容許範圍);§4.2.7.1.2(p.456);§4.2.7.2.1(pp.457–458);§4.2.7.2.3(p.463)。
為什麼正在 Polling,Link Training 卻是零?
Link Status Register 的 Link Training bit 只描述特定狀態,並不是完整 LTSSM 的縮寫。本例讀 Root Port 的這個 bit;Endpoint、Switch Upstream Port 與 PCI Express to PCI/PCI-X Bridge 的此欄位不適用,必須固定為零。
| 本例 Root Port 的進度 | Link Training | 解讀方式 |
|---|---|---|
| Polling | 0 | 仍在交換訓練序列;零值不表示已進入 L0 |
| 初次 Configuration | 1 | 已離開 Polling,正在處理寬度、Lane 與後續訓練 |
| L0 | 0 | 須結合其他狀態與歷史,才知道這次零值是在訓練前還是訓練後 |
先用 Table 4-48 把狀態對應到 bit,再回 Table 7-26 看欄位適用性。Table 4-48 的 LinkUp 是 Physical Layer 給 Data Link Layer 的狀態,和 Link Status 的 Data Link Layer Link Active 不同;後者還須確認回報能力與 DL_Active。相關跨層狀態在 Chapter 8 與 Chapter 17 已完整說明。
Base 6.0 Table 4-48 Link Status Mapped to the LTSSM(p.453);§7.5.3.8、Figure 7-29、Table 7-26 Link Status Register(pp.978–979)。
升速時,再沿 Recovery 追到 Equalization
初次 Link 先以 2.5 GT/s 到 L0,即使兩端都支援更高速率也是如此;之後可從 L0 進 Recovery 改變速度。Polling 中宣告的高速度能力,不代表當時已用該速度傳輸。§4.2.7.2.4 也明確指出 Polling.Speed 不可達,不要把它補進初次升速路徑。
Equalization(等化,調整每條 Lane 的發送與接收設定以補償通道影響)有速率相關的流程。§4.2.4 要求第一次切換到各個 8.0 GT/s 以上速率時執行適用程序,但另定義了所有元件共同支援與宣告後可採用的略過機制。這裡先分清一般程序、略過到最高 NRZ 速率,以及 No Equalization Needed;不可因某端宣告一個 bit,就替整條路徑省略訓練。
- NRZ
- Non-Return-to-Zero,不歸零編碼
升速紀錄需要接起「哪一端提出變更、進了哪些 Recovery 子狀態、適用的等化流程、最後速度與寬度」。Chapter 8 的雙端 Register 與狀態帶讀可作查詢入口。經過 Recovery 也不等於重新列舉或清掉所有 Data Link 狀態,須按實際的 LinkUp 與 Reset 歷史判斷。
Base 6.0 §4.2.6.4(p.445);§4.2.7.2.4 與 p.464 的 Support for Higher Data Rates Than 2.5 GT/s 說明;§4.2.4 Link Equalization Procedure for 8.0 GT/s and Higher Data Rates(pp.392–393)。
有 Retimer 時,一條 Link 與電氣區段怎麼分?
Retimer(重定時器)理解 Physical Layer 協定,並重新建立訊號時序。Figure 4-61 先畫出整條 Link,再把 Retimer 兩側標為 Link Segments。每個 Retimer 有兩個 Pseudo Ports(偽連接埠),朝向會在 Configuration 期間動態確定。
| 示意路徑:Root Port → 一個 Retimer → Endpoint | 角色 | 分析位置 |
|---|---|---|
| Root Port 到 Retimer | Root Port 的 Downstream Port 對向 Retimer 的 Upstream Pseudo Port | 第一段電氣通道 |
| Retimer 到 Endpoint | Retimer 的 Downstream Pseudo Port 對向 Endpoint 的 Upstream Port | 第二段電氣通道 |
| Root Port 到 Endpoint 整體 | 仍是一條 PCIe Link | Data Link 與 Transaction 不因 Retimer 多出一層 Switch |
接著查 §4.3.2 的模式:Forwarding mode 轉送適用的符號及 Electrical Idle;Execution mode 則在 Polling.Compliance、等化 Phase 2/3 等指定情境參與協定。追查某一段的等化結果時,要標明 Pseudo Port 與方向,不能用 Root Port 的整體狀態替每一段補出相同結果。
Base 6.0 允許同一條 Link 最多兩個 Retimers,外形規格仍可能加上限制。這些元件對 Data Link 與 Transaction Layer 透明;不能替它們各配置一組 Bridge Bus Number,也不能把分段等化當成多組獨立的 TLP Ack/Replay。電氣品質是否合格,還需要 Chapter 8 的適用要求與實際量測。
- TLP
- Transaction Layer Packet,交易層封包
Base 6.0 §4.3 Retimers(pp.564–565);§4.3.2 Supported Retimer Topologies、Figure 4-61 同名圖(pp.566–567)。本節表格是作者整理的拓撲示意。
低功耗與測試分支,另外確認目的與條件
L0p(L0 內部分 Lane 省電的機制)只用於 Flit Mode,保持對稱的目標寬度,且每方向至少有一條活動 Lane。它不是讓整條 Link 先離開 L0 再重建;轉換期間兩側也可能短暫處於不同寬度。相對地,L0s 是另一種快速省電狀態,在 Flit Mode、有 Retimer,或使用獨立 SSC(Spread Spectrum Clocking,展頻時鐘)的分離參考時鐘時,不得支援與宣告。
Polling.Compliance 用於測試;Loopback 的 Lead 發起測試,Follower 負責回送資料;Hot Reset 用 in-band 訊號重設配置好的 Link 與相關下游裝置。它們在 Figure 4-48 都有各自的分支。分析工具若只留下「沒有 TLP」,仍要補上具體狀態與進入條件,才能分清訓練、低功耗或測試。L1、Function 電源狀態與平台政策則接到 Chapter 9。
- TLP
- Transaction Layer Packet,交易層封包
Base 6.0 §4.2.6.2(p.444)、§4.2.6.6–4.2.6.7(pp.445–447)、Figure 4-47 的轉換說明(p.450)、§4.2.6.8–4.2.6.12(pp.451–452)。
Link 從 x8 變成 x4,是降寬故障嗎?
教學假設:同一條 Link 連接 Switch Downstream Port A 與 Endpoint Upstream Port B;它已配置為 x8,正在 Flit Mode 運作。兩端的 Receiver L0p Supported 和 Remote L0p Supported 均有效,L0p Enable 為 1,Port A 的 Hardware Autonomous Width Disable 為 0。這些是作者設定的條件,不是實機量測。
先看 Device 3 Extended Capability 的 Figure 7-120:Capabilities 3 的 Receiver L0p Supported(接收端支援 L0p)描述本端能力;Status 3 的 Remote L0p Supported 描述對端支援資訊;Control 3 的 L0p Enable 則控制本 Port 能否發出要求及回覆 Ack。兩端支援且允許使用,是本案例開始前的條件,並不表示 Link 此刻已縮至 x4。
接著查 Table 7-109:在 L0p Enable=1 的條件下,向 Port A 的 Target Link Width 寫入 010b,會發起目標 x4 的 directed L0p 寬度變更。這個欄位只描述要求;實際是否完成,要看後續交換及 Lane 狀態。
Port B 回覆 Ack 後,兩端各自依下一個排定的 SKP 時機,讓要關閉的 Lane 送出 EIOSQ(進入電氣閒置的 Ordered Set),再進入 Electrical Idle;保留的 Lane 繼續傳送 Flit。這個示範是正常降寬流程;若看到 Nak、逾時、不同步或 Recovery,則需回到 §4.2.6.7 的對應分支。
配置時停用的 Lane 不能靠 L0p 開回來;進入 Recovery 時,Link 會回到最近進入 L0 時配置的寬度。因此,觀察到 x4 應先確認是 L0p 暫時縮減,還是配置或訓練得到的結果。Base 6.0 §4.2.6.7、§5.4.1.2、§7.7.9.2–§7.7.9.4,pp.445–447、626、1073–1077。
同樣表示 x4,為什麼封包和暫存器的編碼不同?
先用 Figure 3-15 辨識 Link Management DLLP(資料鏈結層的連線管理封包),再查 Table 4-44。以下四個 byte 是作者依規格建立的DLLP Payload;它們放在 Flit 的 DLP 2–5,不是完整 Flit,也不包含 DLP 0–1 或 Flit CRC。
- DLLP
- Data Link Layer Packet,資料鏈結層封包
手機閱讀時,可左右滑動表格查看完整內容。
| 方向與用途 | DLLP Payload bytes 0–3 | 對照 Table 4-44 |
|---|---|---|
| A → B:要求 x4 | 28 00 04 04 | Type=28h、Link Mgmt Type=00h;Cmd=0100b 是 Request、Priority=0,Byte 3 低四位 0100b 是 x4。 |
| B → A:回覆 Ack | 28 00 06 40 | Cmd=0110b 是 Request Ack;Byte 3 高四位 0100b 回映要求的 x4。 |
對照前一節:Device Control 3 的 Target Link Width 用 010b 表示 x4;DLLP 的寬度欄位用 0100b。它們是不同欄位,不能直接搬用同一個位元編碼。接收端遇到 Table 4-44 列出的保留 Type、Cmd 或適用欄位編碼時,依規格無聲忽略,不能自行判成 Ack。
本例假設 Flit 有效,且 DLP 0 的 Type of DLLP Payload=0,表示 DLP 2–5 是 DLLP Payload;CRC、FEC 與 Flit 其他部分沒有在這四個 byte 中表示。Base 6.0 Figure 3-15、Table 4-44、Figure 4-30/Table 4-16,pp.285、359–360、448–449。
- FEC
- Forward Error Correction,前向錯誤更正
兩端回報的退出延遲,如何合併?
教學假設:Port A 的 Port L0p Exit Latency=010b(2 至小於 4 µs),關聯 Retimer L0p Exit Latency=001b(1 至小於 2 µs);Data Link Feature Status 的 Remote Data Link Feature Supported Valid=1,Remote L0p Exit Latency=011b(4 至小於 8 µs)。
先看 Table 7-108:Port A 的 Local L0p Exit Latency 取 Port 與關聯 Retimer 較大者,因此是 010b。再查 Tables 7-64/7-65:本端與對端值經 Data Link Feature 交換;確認 Remote 資訊有效後,Link 的有效退出延遲取 Local 與 Remote 較大者,這裡落在 011b 的區間。
這些編碼是規格定義的延遲區間,不是本次實測值。若 Remote Valid=0,先取得有效交換結果;不能把預設零值當成對端已確認小於 1 µs。Base 6.0 Tables 7-64、7-65、7-108,pp.1035–1037、1074。
版本與來源
本章以 PCI Express Base Specification Revision 6.0(6.0-1.0-PUB)為準;上述文件印刷頁碼與 PDF 檢視器頁碼相同。案例的拓撲與計數均由作者建立;工具通道名稱不等同於規格分配的 Lane Number。
本章閱讀位置與用途
- §4.2.6(pp.444–452):各主狀態目的與 Timeout 通則;Table 4-48(p.453)、Figure 4-48(p.454):狀態與狀態欄位的對照。
- §4.2.7.1.1 Detect.Quiet(p.455)、§4.2.7.1.2 Detect.Active、Figure 4-49(p.456):偵測與重試分支。
- §4.2.7.2.1 Polling.Active(pp.457–458)、§4.2.7.2.3 Polling.Configuration 與 §4.2.7.2.4 Polling.Speed(p.463)、Figure 4-50(p.464):本章傳送與連續接收算例。
- §4.2.7.3 Configuration(p.464 起)、Figure 4-51 Configuration Substate Machine(p.482)、§4.2.7.3.1.1 Downstream Lanes(pp.464–465):Polling 後還須完成寬度與 Lane 配置。
- §7.5.3.8 Link Status Register、Figure 7-29、Table 7-26(pp.978–979):Link Training 的作用與適用範圍。
- §4.2.4(pp.392–393):首次等化及略過機制;§4.3、§4.3.2、Figure 4-61(pp.564–567):Retimer 角色、模式與電氣區段。


Comments