Ripan Deuri

1. 導入

PCI Express (PCIe) は、パケット生成、信頼性、物理伝送などの懸念を分離するためにレイヤー化されたアーキテクチャとして設計されています。これらのレイヤーの中でも、トランザクション層は、ソフトウェアレベルの操作を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 (フォーマット): 3ビット。ヘッダーサイズ (3DW または 4DW) とデータペイロードの有無を示します。

    • 000 = 3-DWヘッダー、データなし (例: 32ビットメモリーリード)
    • 001 = 4-DWヘッダー、データなし (例: 64ビットメモリーリード)
    • 010 = 3-DWヘッダー、データあり (例: 32ビットメモリーライト)
    • 011 = 4-DWヘッダー、データあり (例: 64ビットメモリーライト)
  • Type: 5ビット。Fmtと組み合わせてTLPタイプを定義します:

    • 00000 = メモリーリード要求 (MRd)
    • 00001 = ロック付きメモリーリード要求 (MRdLk)
    • 00000 と Fmt 010 = メモリーライト (MWr)
    • 00100 = 設定リード タイプ 0 (CfgRd0)
    • 00101 = 設定ライト タイプ 0 (CfgWr0)
    • 01010 = 完了 (Cpl)
    • 01010 と Fmt 010 = データ付き完了 (CplD)
    • 10000 = メッセージ要求 (Msg)
  • TC (トラフィッククラス): 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/Device/Function) を使用してソースデバイスを識別します。
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ビットアドレッシングの場合のみ使用)