Ripan Deuri

1. 簡介

PCI Express (PCIe) 採用分層架構設計,以區分封包產生、可靠性與實體傳輸等不同功能。在這些層級中,交易層 (Transaction Layer) 扮演核心角色,負責將軟體層級的操作轉換為可在 PCIe 架構中傳輸的結構化封包。

本文將以結構化的方式說明交易層的職責、交易類型,以及交易層封包 (TLP) 的詳細結構。

2. PCIe 層級

  • 交易層 (TL):產生交易層封包 (TLP)
  • 資料連結層 (DLL):確保 TLP 在鏈路上可靠傳遞
  • 實體層 (PHY):處理電氣訊號與位元層級傳輸

3. 交易層的角色

以下列出 交易層 的職責:

  • 透過記憶體位址或 ID 型路由決定目標
  • 將讀取/寫入/組態要求轉換為 交易層封包 (TLP)

4. PCIe 交易類型

PCIe 定義多種交易類型:

記憶體交易

  • 記憶體讀取
  • 記憶體寫入

組態交易

  • 用於裝置列舉
  • 存取組態空間

訊息交易

  • 中斷 (MSI/MSI-X)
  • 電源管理
  • 錯誤訊號

完成交易

  • 對要求的回應(例如:對讀取要求的資料回傳)

5. 交易層封包 (TLP) 結構

TLP 是 PCIe 中通訊的基本單位。

+---------------------------------+
| TLP Header (3DW / 4DW)          |
+---------------------------------+
| Data Payload (optional)         |
+---------------------------------+
| Digest (optional)               |
+---------------------------------+

Enter fullscreen mode Exit fullscreen mode

5.1 TLP 標頭

TLP 標頭定義封包的類型、意圖與路由資訊。

DW0 — 格式與控制

31           24 23     20 19     16 15                0
+--------------+---------+---------+------------------+
| Fmt + Type   |  TC     | Attr    | Length           |
+--------------+---------+---------+------------------+

Enter fullscreen mode Exit fullscreen mode

DW0 主要欄位:

  • Fmt (Format):3 位元。表示標頭大小 (3DW 或 4DW) 以及是否有資料酬載。

    • 000 = 3-DW 標頭,無資料 (例如 32-bit 記憶體讀取)
    • 001 = 4-DW 標頭,無資料 (例如 64-bit 記憶體讀取)
    • 010 = 3-DW 標頭,含資料 (例如 32-bit 記憶體寫入)
    • 011 = 4-DW 標頭,含資料 (例如 64-bit 記憶體寫入)
  • Type:5 位元。與 Fmt 結合定義 TLP 類型:

    • 00000 = 記憶體讀取要求 (MRd)
    • 00001 = 鎖定記憶體讀取要求 (MRdLk)
    • 00000 搭配 Fmt 010 = 記憶體寫入 (MWr)
    • 00100 = 組態讀取 Type 0 (CfgRd0)
    • 00101 = 組態寫入 Type 0 (CfgWr0)
    • 01010 = 完成 (Cpl)
    • 01010 搭配 Fmt 010 = 含資料完成 (CplD)
    • 10000 = 訊息要求 (Msg)
  • TC (Traffic Class):3 位元。表示優先順序 (0–7)。大多數流量使用 TC0。

  • Length:10 位元。指定資料酬載中的 DWORD 數量 (1–1024)。值為 0 代表 1024 個 DWORD。

DW1 — 要求識別

31              16 15        8 7         4 3         0
+------------------+----------+-----------+-----------+
| Requester ID     | Tag      | Last BE   | First BE  |
+------------------+----------+-----------+-----------+

Enter fullscreen mode Exit fullscreen mode

DW1 主要欄位:

  • Requester ID:16 位元。使用匯流排/裝置/功能 (BDF) 識別來源裝置。
Bus Number (8 bits) | Device Number (5 bits) | Function Number (3 bits)

Enter fullscreen mode Exit fullscreen mode

  • Tag:8 位元。由要求端指定的唯一識別碼。
    用於將完成 TLP 與對應的要求配對。

  • Last Byte Enable (Last BE):4 位元。表示酬載最後一個 DWORD 中的有效位元組。
    適用於未對齊或部分傳輸。

  • First Byte Enable (First BE):4 位元。表示酬載第一個 DWORD 中的有效位元組。

範例(部分寫入):

從 DWORD 內的偏移位置開始寫入 6 個位元組:

DWORD N:
+----+----+----+----+
| B3 | B2 | B1 | B0 |
+----+----+----+----+
  ✔    ✔    ✔    ✘     → First BE = 1110

DWORD N+1:
+----+----+----+----+
| B3 | B2 | B1 | B0 |
+----+----+----+----+
  ✘    ✔    ✔    ✔     → Last BE = 0111

Enter fullscreen mode Exit fullscreen mode

DW2/DW3 — 位址

  • 包含記憶體交易的目標位址
  • DW2:位址的低 32 位元
  • DW3:高 32 位元(僅用於 64 位元定址)