PCI Express* 向けRタイル Avalon® StreamingインテルFPGA IPユーザーガイド

ID 683501
日付 10/07/2022
Public
ドキュメント目次

4.3.1.4. Avalon® Streaming TXインターフェイス

アプリケーション層では、 Avalon® -ST TXインターフェイスを介してRタイルPCI Express IPコアのトランザクション層にデータを転送します。RタイルPCI Express IPによって、送信開始前に pX_tx_st_ready_o をアサートする必要があります。

RタイルPCI Express IPコアのコンフィグレーションが、Configuration Mode 0 (1x16) でされ、ダブル幅コンフィグレーションの場合、256ビットのデータ幅のセグメントは4つです。これにより、サイクルごとに複数のTLPが許可されます。つまり、Configuration Mode 0 (1x16) の場合、pX_tx_stN_sop_i 信号と pX_tx_stN_eop_i 信号が各4つあります。

また、このインターフェイスは、Avalonインターフェイス仕様で指定されている pX_tx_st_ready_o 信号と pX_tx_stN_dvalid_i 信号の間の固定レイテンシーには従いません。

RタイルPCI Expressコアは、Configuration Mode 0 (1x16) で、ダブル幅コンフィグレーションの場合、コアのセグメントは4つあります。各セグメントには、256ビットのデータ (pX_tx_stN_data_i[255:0])、128ビットのヘッダー (pX_tx_stN_hdr_i[127:0])、および32ビットのTLPプリフィクス (pX_tx_stN_prefix_i[31:0]) があります。このコアは、Configuration Mode 0 (1x16)でコンフィグレーションすると、データバスは合計1024ビットバスになります。その構成は、 pX_tx_st0_data_i[255:0]pX_tx_st1_data_i[255:0]pX_tx_st2_data_i[255:0]、および pX_tx_st3_data_1[255:0] です。

パリティーの生成は、32:1 XORで行われます (つまり、32ビットのデータ、ヘッダー、またはプリフィクスごとにパリティービットが1つあります)。

アプリケーション・ロジックでは、次のガイドラインを考慮する必要があります。
  • pX_tx_st_ready_o がアサートされた場合、TLPの送信が中断されないようにする必要があります。アプリケーションによる pX_tx_stN_valid_i のデアサートは、 pX_tx_stN_sop_ipX_tx_stN_eop_i の間のreadyサイクルでは行わないでください。ただし、RタイルPCIe IPコアからのバックプレッシャーが、 pX_tx_st_ready_o のデアサートによって示された場合は例外です。
    注: このガイドラインを満たさないと、TLPの送信に無効なLCRCが含まれる場合があります。
  • Configuration Mode 0 (1x16) で、ダブル幅モードの場合、TLP (pX_tx_stN_sop_i) の開始が発生する可能性があるのセグメントは、セグメント0 (st0) またはセグメント2 (st2) のみです (つまり、特定のTLPはセグメント1またはセグメント3では開始できません)。
  • Configuration Mode 0 (1x16) で、ダブル幅モードの場合、ヘッダーセグメント2 (st2_hdr) が許可されるのは、セグメント0とセグメント1も使われている (つまり、st0_hdr, st1_hdrst0_data, st1_data も使われている) 場合のみです。
  • 単一のTLPが複数のセグメントにまたがっている場合、アプリケーション・ロジックによるTLPの処理は、セグメント・インデックスの順序 (セグメントst0 → st1 → st2 → st3 → st0) で行う必要があります。
  • 送信されるTLPの長さがセグメントサイズよりも大きい場合、 pX_tx_stN_eop_i 信号をアサートするために使用するセグメントは、TLPの長さによって決まります。
  • 送信されるTLPの長さがセグメントサイズ (255ビット) よりも小さい場合、対応する pX_tx_stN_eop_i 信号が発生するセグメントは、pX_tx_stN_sop_i がアサートされているセグメントと同じである必要があります。
  • pX_tx_st_ready_opX_tx_stN_valid_iのデアサート間の最大レイテンシーは16 coreclkout_hip サイクルです。
  • Configuration Mode 0 (1x16) で、シングル幅モードの場合、使用できるセグメントは、クロックサイクル (つまり、 st0_hdr/st0_data または st1_hdr/st1_data) ごとに1つのみです。また、セグメント1を使用する場合、st0_data は、前のTLPで使用する必要があります。
表 56.  Avalon Streaming TXインターフェイス信号
信号名 信号名 説明 EP/RP/BP クロックドメイン
pX_tx_stN_data_i[255:0] (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力 送信用のアプリケーション層データです。データバスは、複数の256ビットセグメントで編成されています。x16モードでは、4つのセグメントすべてを使用して1024ビットのデータバスを効果的に形成します。x8モードでは、2つのセグメントを使用して512ビットのデータバスを形成します。x4モードでは、各256ビットセグメントは独立したデータバスです。

アプリケーション層は、TXインターフェイスでは、適切にフォーマットされたTLPを準備する必要があります。データは、対応する tx_stN_valid_i信号がアサートされたときに有効です。

メッセージTLPのマッピングは、4-dwordヘッダーを持つトランザクション層TLPのマッピングと同じです。データサイクル数は、ヘッダー内の長さとアドレスフィールドに対して正しくなければなりません。パケットを発行する際にデータサイクル数が正しくないと、TXインターフェイスがハングし、それ以降のリクエストを受け入れることができなくなります。

注意: tx_stN_sop_itx_stN_eop_i の間にはアイドルサイクルを設けないでください。ただし、 tx_st_ready_o のデアサートに伴うバックプレッシャーがある場合は例外です。
EP/RP/BP coreclkout_hip
pX_tx_stN_hdr_i[127:0] (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力 これは送信されるヘッダーです。これは、PCIe仕様のTLPヘッダー形式に従っています。次のガイドラインを考慮してください。
  • PCIe向けRタイル Avalon® Streaming IPのコンフィグレーションは、EPまたはRPモードでされ、コンプリーター/リクエスターIDを自動計算します。アプリケーション・ロジックからは、送信されるTLPヘッダーの一部としてこの情報を提供する必要はありません。IPのコンフィグレーションがTLPバイパスモードでされている場合は、このガイドラインは適用されないことに注意してください。
  • PCIe向けRタイル Avalon® Streaming IPのコンフィグレーションがEPモードでされ、SR-IOVがイネーブルされている場合は、SR-IOVサポートの実装BDF割り当て のセクションを参照してください。

これらの信号が有効になるのは、対応する tx_stN_sop_i 信号がアサートされた場合です。

EP/RP/BP coreclkout_hip
pX_tx_stN_prefix_i[31:0] (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力 これは送信されるTLPプリフィクスです。これは、PCIe仕様のTLPプリフィクス形式に従っています。PASIDがサポートされています。

tx_stN_sop_i 信号がアサートされたときです。

TLPプリフィクスでは、ビッグ・エンディアンの実装を使用します (つまり、Fmtフィールドはビット [31:29] であり、Typeフィールドはビット [28:24] です)。

ある特定のTLPにプリフィクスが存在しない場合、そのdword (Fmtフィールドを含む) はすべてゼロです。

EP/RP/BP coreclkout_hip
pX_tx_stN_sop_i (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、2 (セグメント番号))

入力 対応するビットと共にアサートされた場合の tx_stN_valid_i のTLPの最初のサイクルを示します。x16コンフィグレーションの場合は次のとおりです。
  • tx_st3_sop_i: アサートされると、 tx_st3_data_i[255:0] のTLPの開始を示します。
  • tx_st2_sop_i: アサートされると、tx_st2_data_i[255:0] のTLPの開始を示します。
  • tx_st1_sop_i: アサートされると、 tx_st1_data_i[255:0] のTLPの開始を示します。
  • tx_st0_sop_i: アサートされると、tx_st0_data_i[255:0] のTLPの開始を示します。

これらの信号は、各TLPごとに1クロックサイクルの間アサートされます。また、対応する tx_stN_hdr_i および tx_stN_tlp_prfx_i 信号を修飾します。

注: pX_tx_stN_sop_i パルスの送信は、セグメント0または2 (st0またはst2) のみで可能です。
EP/RP/BP coreclkout_hip
pX_tx_stN_eop_i (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力 対応するビットと共にアサートされた場合の tx_stN_valid_i のTLPの最後のサイクルを示します。x16コンフィグレーションの場合は次のとおりです。
  • tx_st3_eop_i: アサートされると、tx_st3_data_i[255:0] のTLPの終了を示します。
  • tx_st2_eop_i: アサートされると、tx_st2_data_i[255:0] のTLPの終了を示します。
  • tx_st1_eop_i: アサートされると、tx_st1_data_i[255:0] のTLPの終了を示します。
  • tx_st0_eop_i: アサートされると、tx_st0_data_i[255:0] のTLPの終了を示します。

これらの信号は、TLPにつき1クロックサイクルの間アサートされます。

EP/RP/BP coreclkout_hip
pX_tx_stN_dvalid_i (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力

Readyサイクルで、tx_stN_data_i の対応するセグメントのデータをIPコアに修飾します。

タイミング・クロージャーを容易にするために、インテルでは、tx_st_ready_otx_stN_dvalid_i の両方の信号を登録することをお勧めします。

EP/RP/BP coreclkout_hip
pX_tx_stN_hvalid_i (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力

Readyサイクルで、tx_stN_data_i の対応するセグメントをIPコアに修飾します。

タイミング・クロージャーを容易にするために、インテルでは、tx_st_ready_otx_stN_hvalid_i の両方の信号を登録することをお勧めします。

EP/RP/BP coreclkout_hip
pX_tx_stN_pvalid_i (ここでは

X =0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力

Readyサイクルで、tx_stN_data_i の対応するセグメントをIPコアに修飾します。

タイミング・クロージャーを容易にするために、インテルでは、tx_st_ready_otx_stN_pvalid_i の両方の信号を登録することをお勧めします。

EP/RP/BP coreclkout_hip
pX_tx_stN_data_par_i[Z:0] (ここでは

X = 0、1、2、3 (IPコア番号)、Zはコアによって異なり、

N = 0、1、2、3 (セグメント番号))

入力

tx_stN_data_i のパリティーです。ビット [0] は tx_stN_data_i[31:0] に対応し、ビット [1] は tx_stN_data_i[63:32] に対応し、以下同様です。

デフォルトでは、PCIeハードIPではTXデータのパリティーを生成します。

EP/RP/BP coreclkout_hip
pX_tx_stN_hdr_par_i[3:0] (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力

tx_stN_hdr_i のパリティーです。

デフォルトでは、PCIeハードIPではTXヘッダーのパリティーを生成します。

EP/RP/BP coreclkout_hip
pX_tx_stN_prefix_par_i (ここでは

X = 0、1、2、3 (IPコア番号)、

N = 0、1、2、3 (セグメント番号))

入力

tx_stN_tlp_prfx_i のパリティーです。

デフォルトでは、PCIeハードIPではTXプリフィクスのパリティーを生成します。

EP/RP/BP coreclkout_hip
pX_tx_st_ready_o (ここでは

X = 0、1、2、3 (IPコア番号)

出力

PCIeハードIPによるデータ受け入れ準備ができていることを示します。readyLatencyの最大値は16サイクルです。

tx_st_ready_o のアサートが、PCIeハードIPのトランザクション層によってサイクル <n> で行われた場合は、 <n> + readyLatencyがReadyサイクルです。その間、アプリケーションにより tx_stN_valid_i をアサートしてデータ転送することができます。

tx_st_ready_o のデアサートが、 トランザクション層によってサイクル<n> で行われた場合は、アプリケーションによる tx_stN_valid_i のデアサートをサイクル <n> 後の readyLatency サイクル数以内に行う必要があります。

tx_st_ready_o のデアサートを行うことができる条件は次のとおりです。
  • LTSSMの準備ができていない。
  • 再試行が進行中である。
  • RタイルAvalon-ST IPが、内部生成TLPの送信でビジーである。
  • 内部RタイルTX FIFOがフルである。
EP/RP/BP coreclkout_hip

例として、下図の Avalon® Streaming TXインターフェイスのタイミングでは、Avalon Streaming TXインターフェイスのビヘイビアを示しています。これは、バックツーバックTLPのシナリオで、データが複数のセグメントにまたがっている場合です。次の説明では、クロックサイクルごとの波形について述べます。

  1. クロックサイクル1: PCI Expres向けRタイルインテルFPGA IPにより p0_tx_st_ready_o をアサートします。これは、ハードIPによるアプリケーション・ロジックからのTLPの受け入れ準備ができていることを示します。
  2. クロックサイクル2:
    1. 最初のTLP (T0) の開始はセグメント0 にあり p0_tx_st0_sop_i のアサートによって示されます。
    2. p0_tx_st0_hvalid_i がアサートされ、p0_tx_st0_hdr_i バスのこの最初のTLP (T0H0) のヘッダーを検証します。
    3. 信号 p0_tx_st0_dvalid_i がアサートされ、p0_tx_st0_data_i バスのこの最初のTLP (T0H0) のヘッダーを検証します。
    4. 信号 p0_tx_st1_dvalid_i がアサートされ、p0_tx_st1_data_i バスのこの最初のTLP (T0D1) のデータを検証します。
    5. 信号 p0_tx_st2_dvalid_i がアサートされ、p0_tx_st2_data_i バスのこの最初のTLP (T0D2) のデータの次の部分を検証します。
    6. 信号 p0_tx_st3_dvalid_i がアサートされ、p0_tx_st3_data_i バスのこの最初のTLP (T0D3) のデータの次の部分を検証します。
    7. この最初のTLP (T0) の終わりはセグメント3にあり、p0_tx_st3_eop_i のアサートによって示されます。
  3. クロックサイクル3:
    1. 次のTLP (T1) がセグメント0に到着し、p0_tx_st0_sop_i がHighのままであることで示されます。
    2. 信号 p0_tx_st0_hvalid_i がアサートされ、p0_tx_st0_hdr_i バスのこのTLP (T1H0) のヘッダーを検証します。
    3. 信号 p0_tx_st0_dvalid_i がアサートされ、p0_tx_st0_data_i バスのこのTLP (T1D0) のデータを検証します。
    4. 信号 p0_tx_st1_dvalid_i がアサートされ、p0_tx_st1_data_i バスのこのTLP (T1D1) のデータの次の部分を検証します。
    5. 信号 p0_tx_st2_dvalid_i がアサートされ、p0_tx_st2_data_i バスのこのTLP (T1D2) のデータの次の部分を検証します。
    6. 信号 p0_tx_st3_dvalid_i がアサートされ、p0_tx_st3_data_i バスのこのTLP (T1D2) のデータの最後の部分を検証します。
    7. このTLP (T1) の最後は、セグメント3にあり、p0_tx_st3_eop_i がHighのままであることで示されます。
図 30.  Avalon® Streaming TXインターフェイスのタイミング
注: コンフィグレーション・モード0 (1x16) の場合、TLP (pX_tx_stN_sop_i) の開始が発生する可能性があるのは、セグメント0 (st0) またはセグメント2 (st2) です。