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搭配 Fmt010= 記憶體寫入 (MWr) -
00100= 組態讀取 Type 0 (CfgRd0) -
00101= 組態寫入 Type 0 (CfgWr0) -
01010= 完成 (Cpl) -
01010搭配 Fmt010= 含資料完成 (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 位元定址)
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.