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

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

4.3.1.3. Avalon® Streaming RXインターフェイス

アプリケーション層では、 Avalon® Streaming RXインターフェイスを介してRタイルPCI Express IPコアのトランザクション層からデータを受信します。Rタイルの場合、rx_st_ready_i は常にHighでなければなりません。アプリケーション・ロジックのバッファー制御の処理は、RXフロー・コントロール・インターフェイスで行う必要があります。詳細については、RXフロー・コントロール・インターフェイス を参照してください。

このインターフェイスでは、サイクルあたり4つの rx_st_sop_o信号と4つの rx_st_eop_o 信号をサポートします。ただしこれは、RタイルIPが1x16コンフィグレーションで動作している場合です。

Configuration Mode 0 (1x16) で、ダブル幅コンフィグレーションの場合、コアのセグメントは4つあります。各セグメントには、256ビットのデータ (pX_rx_stN_data_o[255:0])、128ビットのヘッダー (pX_rx_stN_hdr_o[127:0])、および32ビットのTLPプリフィクス (pX_rx_stN_prefix_o[31:0]) があります。このコアを1x16モードでコンフィグレーションすると、データバスは1024ビットバスになります。

Configuration Mode 1 (2x8) で、ダブル幅コンフィグレーションの場合も、 Avalon® Streamingセグメントは4つです (x8ポートごとに2つ)。

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

アプリケーション・ロジックでは、次のガイドラインを考慮する必要があります。
  • パケットの開始 (pX_rx_stN_sop_o) は、セグメント (_stN_) のいずれでも発生する可能性があります。
  • 単一のTLPが複数のセグメントにまたがっている場合、アプリケーション・ロジックによるTLPの処理は、セグメント・インデックスの順序 (セグメントst0 → st1 → st2 → st3 → st0) で行う必要があります。
  • 複数のTLPが同じクロックサイクルで到着する場合、アプリケーション・ロジックによるTLPの処理は、セグメント・インデックスの順序 (セグメントst0 → st1 → st2 → st3 → st0) で行う必要があります。
  • 1クロックサイクルにあるSOP (pX_rx_stN_sop_o) は、最大3つです。次の表で示しているのはに、セグメント全体で可能な組み合わせです。
    表 54.  1クロックサイクルでの3つの pX_rx_stN_sop_o 可能な組み合わせ
    pX_rx_st0_sop_o pX_rx_st0_eop_o pX_rx_st1_sop_o pX_rx_st1_eop_o pX_rx_st2_sop_o pX_rx_st2_eop_o pX_rx_st3_sop_o pX_rx_st3_eop_o
    1'b1 1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0
    1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b1
    1'b1 1'b1 1'b1 1'b1 1'b1 1'b0 1'b0 1'b0
    1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b1
    1'b1 1'b1 1'b1 1'b0 1'b0 1'b1 1'b1 1'b0
    1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b1
    1'b1 1'b0 1'b0 1'b1 1'b1 1'b1 1'b1 1'b0
表 55.  AvalonストリーミングRXインターフェイス信号
信号名 方向 説明 EP/RP/BP クロックドメイン
pX_rx_stN_data_o[W:0] (ここでは

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

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

出力 これは受信データバスです。アプリケーション層では、このバス上のIPコアのトランザクション層からデータを受け取ります。 EP/RP/BP coreclkout_hip
pX_rx_stN_hdr_o[127:0] (ここでは

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

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

出力 これは受信ヘッダーです。これは、PCIe仕様のTLPヘッダー形式に従います。 EP/RP/BP coreclkout_hip
pX_rx_stN_prefix_o[31:0] (ここでは

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

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

出力

これは、受信した最初のTLPプリフィクスでです。これは、PCIe仕様のTLPプリフィクス形式に従います。PASIDがサポートされています。

これらの信号は、対応する rx_st_sop_o がアサートされたときに有効です。

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

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

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

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

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

出力

rx_stN_valid_o の対応するビットと組み合わせてアサートされると、TLPの最初のサイクルを通知します。

rx_stN_sop_o: アサートされると、rx_stN_data_o[255:0] のTLPの開始を通知します。

例えば、アサートされると、rx_st2_sop_o では、rx_st2_data_o[255:0] のTLPの開始を通知します 。

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

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

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

出力

rx_stN_valid_o の対応するビットと組み合わせてアサートされると、TLPの最後のサイクルを通知します。

rx_stN_eop_o: アサートされると、rx_stN_data_o[255:0] のTLPの終了を通知します。

例えば、アサートされると、rx_st2_eop_o では、rx_st2_data_o[255:0] のTLPの開始を通知します。

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

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

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

出力 これらの信号により、アプリケーション層に入る rx_st_data_o 信号を修飾します。 EP/RP/BP coreclkout_hip
pX_rx_stN_hvalid_o (ここでは

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

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

出力 これらの信号により、アプリケーション層に入る rx_stN_hdr_o 信号を修飾します。 EP/RP/BP coreclkout_hip
pX_rx_stN_pvalid_o (ここでは

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

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

出力 これらの信号により、アプリケーション層に入る rx_stN_prefix_o 信号を修飾します。 EP/RP/BP coreclkout_hip
pX_rx_stN_data_par_o[Z:0] (ここでは

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

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

出力 rx_stN_data_o のパリティー信号です。 EP/RP/BP coreclkout_hip
pX_rx_stN_hdr_par_o[3:0] (ここでは

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

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

出力 rx_stN_hdr_o のパリティー信号です。 EP/RP/BP coreclkout_hip
pX_rx_stN_prefix_par_o (ここでは

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

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

出力 rx_stN_prefix_o のパリティー信号です。 EP/RP/BP coreclkout_hip
pX_rx_st_ready_i 入力 アプリケーション層がデータを受け入れる準備ができていることを示します。この信号は常に1に設定する必要があります。RX側のフロー・コントロールの処理は、クレジット・コントロール・インターフェイスを介して行われます。 EP/RP/BP coreclkout_hip
pX_rx_stN_empty_o[2:0] (ここでは

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

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

出力

rx_stN_eop_o 信号がアサートされるサイクル中に空になっているdwordの数を指定します。rx_stN_eop_o 信号がアサートされない場合は、これらの信号は無効です。

EP/RP/BP coreclkout_hip
pX_rx_stN_bar_o[2:0] (ここでは

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

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

出力

出力中のTLPのBARを指定します。

これらの出力は、rx_stN_sop_orx_stN_valid_o の両方がアサートされる場合に有効です。

EP/RP coreclkout_hip
pX_rx_stN_vfactive_o (ここでは

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

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

出力

アサートされると、これらの信号では、受信したTLPが仮想ファンクションをターゲットにしていることを示します。これらの信号がデアサートされると、受信したTLPは物理ファンクションをターゲットにしていることを示します。また、 rx_stN_pfnum_o 信号はファンクション番号を示します。

これらの信号は、対応する rx_st_sop_o がアサートされたときに有効です。

EP/RP coreclkout_hip
pX_rx_stN_vfnum_o[10:0] (ここでは

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

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

出力

受信したTLPのターゲットVF番号を指定します。アプリケーションでは、この情報をリクエストとコンプリーションの両方のTLPに使用します。コンプリーションTLPの場合、これらのビットにより、このコンプリーションTLPのリクエスターのVF番号が指定されます。

これらの信号は、rx_st_vf_active_o、および対応する rx_st_sop_o がアサートされている場合に有効です。

EP / RP coreclkout_hip
pX_rx_stN_pfnum_o[2:0] (ここでは

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

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

出力

受信したTLPのターゲット物理ファンクション番号を指定します。

これらの信号は、対応する rx_st_sop_o がアサートされたときに有効です。

EP/RP coreclkout_hip
例として、下の Avalon® ストリーミングRXインターフェイスのタイミングの図で示すのは、AvalonストリーミングRXインターフェイスに複数のTLPがあり、その各TLPが複数のセグメントにまたがっている場合のビヘイビアです。次は、クロックサイクルごとの波形の説明です。
  1. クロックサイクル1: アプリケーション・ロジックにより p0_rx_st_ready_i 信号をアサートします。この信号は常にHighに設定する必要があります。RXフロー・コントロールの処理は、アプリケーション・ロジックにより、RXフロー・コントロール・インターフェイスを使用して行う必要があります (詳細については、RXフロー・コントロール・インターフェイス を参照してください)。
  2. クロックサイクル2:
    1. 最初のTLP (T0) の開始がセグメント1に到着します。このとき p0_rx_st1_sop_o がアサートされます。
    2. 信号 p0_rx_st1_hvalid_o がアサートされ、p0_rx_st1_hdr_o バス内の最初のTLP (T0H0) のヘッダーの検証が行われます。
    3. 信号 p0_rx_st1_dvalid_o がアサートされ、p0_rx_st1_data_o バス内の最初のTLP (T0H0) のヘッダーの検証が行われます。
    4. この最初のTLP (T0) の終わりはセグメント2にあります。これは、p0_rx_st2_eop_o のアサートによって示されます。
    5. 信号 p0_rx_st2_dvalid_o がアサートされ、 p0_rx_st2_data_o バス内の最初のTLP (T0D1) のデータの検証が行われます。
    6. バス p0_rx_st2_empty_o では、p0_rx_st2_data_o バス (T0D1) 内の無効なdwordの数を示します。
  3. クロックサイクル3:
    1. 次のTLP (T1) がセグメント1に到着します。これは、p0_rx_st1_sop_o のアサートで示されます。
    2. 信号 p0_rx_st1_hvalid_o がアサートされ、p0_rx_st1_hdr_o バス内のこのTLP (T1H0) のヘッダーの検証が行われます。
    3. 信号 p0_rx_st1_dvalid_o がアサートされ、p0_rx_st1_data_o バス内のこのTLP (T1D0) のデータの検証が行われます。
    4. 信号 p0_rx_st2_dvalid_o がアサートされ、p0_rx_st2_data_o バス内のこのTLP (T1D1) のデータの検証が行われます。
    5. 信号 p0_rx_st3_dvalid_o がアサートされ、p0_rx_st3_data_o バス内のこのTLP (T1D2) のデータの検証が行われます。
  4. クロックサイクル4:
    1. T1 TLPの終わりはセグメント0にあります。これは、p0_rx_st0_eop_o のアサートによって示されます。
    2. 信号 p0_rx_st0_dvalid_o がアサートされ、p0_rx_st0_data_o バス内のこのTLP (T1D3) のデータの検証が行われます。
    3. バス p0_rx_st0_empty_o で示されるdwordの数は、p0_rx_st0_data_o バス (T1D3) 内では有効ではありません。

次のTLPは、セグメント1の次のクロックサイクルで到着し、セグメント0で終了します。

図 29.  Avalon® Streaming RXインターフェイスのタイミング