送信 AXI4-Stream インターフェイス - 1.2 日本語

FEC 付き Versal ACAP 統合 600G Interlaken サブシステム 製品ガイド (PG371)

Document ID
PG371
Release Date
2023-01-19
Version
1.2 日本語

同期 TX AXI4-Stream インターフェイスは、任意の長さのパケットを受け取ります。すべての信号は、c0_axi_clk クロックの立ち上がりエッジに同期します。次の図に、512 ビットのセグメント バスを使用した場合の連続する 2 つの 65 バイト パケットのデータ トランザクションのサンプル波形を示します。4 つのセグメントは、それぞれ 128 ビット幅です。

図 1. 送信 AXI4-Stream インターフェイスの波形例

データは、対応する tx_axis_tuser_ena<M> がアサートされている特定の tx_axis_tdata<M> セグメントで転送されます。tx_axis_tuser_ena<M> 信号は、セグメント <M> のほかの入力を有効にします。また、この信号はすべての c0_axi_clk クロック サイクルで有効である必要があります。tx_axis_tuser_ena<M> がディアサートされると、セグメント <M> のほかの信号は無視されます。

パケットの開始 (SOP) は、対応する tx_axis_tuser_ena<M> がアサートされた状態で tx_axis_tuser_sop<M> をアサートして示します。同様に、パケットの終了 (EOP) は、tx_axis_tuser_ena<M> がアサートされた状態で tx_axis_tuser_eop<M> をアサートして示します。特定のクロック サイクルで tx_axis_tuser_sop<M>tx_axis_tuser_eop<M> の両方がアサートされることもあります。これはパケットの長さが AXI4-Stream バス幅以下の場合に実行されます。さらに、特定のクロック サイクルの特定のセグメントで tx_axis_tuser_sop<M>tx_axis_tuser_eop<M> の両方がアサートされることもあります。これはパケットの長さが 16 バイト (セグメントのサイズ) 以下の場合に実行されます。

パケットのチャネル番号は、対応するセグメントの tx_axis_tuser_chan<M> 入力に示されます。このチャネル番号は tx_axis_tuser_ena<M> がアサートされているすべてのセグメントで有効である必要があります。特定のチャネル番号に対して SOP がアサートされた後、同じチャネル番号に対して EOP がアサートされるまで、そのチャネル番号に対して SOP をもう一度アサートすることはできません。

パケットの最初の 16 バイトは、対応する tx_axis_tuser_sop<M>tx_axis_tuser_ena<M> がアサートされているサイクルの間、特定のtx_axis_tdata<M> セグメント上に存在する必要があります。つまり、SOP はセグメントにアライメントされます。それ以降のデータは、後続のセグメントで 16 バイトずつ転送されます。これらの各セグメントで、対応する tx_axis_tuser_sop<M> がネゲートされる必要があります。パケットの最初のバイトはセグメントのビット [127:120] に書き込まれ、2 番目のバイトはビット [119:112] に書き込まれます (以下同様)。

パケットの最後のバイトは、対応する tx_axis_tuser_eop<M> がアサートされた tx_axis_tdata<M> セグメントで転送されます。tx_axis_tuser_eop<M> がアサートされている場合を除き、tx_axis_tuser_ena<M> がアサートされている間は、tx_axis_tdata<M> の 16 バイトすべてに有効なデータが含まれている必要があります。
注記: バースト インターリーブ モードでは、特定のパケットのデータを含むセグメントに対して、ほかのパケットからのデータを含むセグメントをインターリーブできます。異なるチャネルからのパケットは、tx_axis_tuser_chan<M> 入力によって特定されます。

パケットの最後のバイトを含むセグメントの間、tx_axis_tuser_mty<M> ポートに、対応する tx_axis_tdata<M> のバイトがいくつ無効 (または空) であるかが反映されます。特定の tx_axis_tuser_mty<M> ポートは、対応する tx_axis_tuser_ena<M>tx_axis_tuser_eop<M> の両方がアサートされたサイクルの間のみ意味を持ちます。tx_axis_tuser_mty<M> の値が 0x0 の場合、空のバイト レーンは存在しません (すなわち、セグメントのすべてのビットが有効)。

tx_axis_tuser_mty<M> の値が 0x1 の場合、1 本のバイト レーンが空です。具体的には、tx_axis_tdata<M>[7:0] に有効なデータは含まれません。

tx_axis_tuser_mty<M> の値が 0x2 の場合、2 本のバイト レーンが空です。具体的には、tx_axis_tdata<M>[15:0] に有効なデータは含まれません。

tx_axis_tuser_mty<M> の値が 0x3 の場合、3 本のバイト レーンが空です。具体的には、tx_axis_tdata<M>[23:0] に有効なデータは含まれません。tx_axis_tuser_mty<M> のほかの値についても同様です。

パケットの最後のバイトが含まれるセグメントで、tx_axis_tuser_eop<M>tx_axis_tuser_ena<M> と共にアサートされた場合、対応する tx_errin<M> もアサートされることがあります。これはそのパケットにエラーがあったことを示します。この情報は、そのパケットに関連する最後の Interlaken 制御ワードに含まれます。tx_axis_tuser_eop<M>tx_errin<M> のサンプル値が 1 の場合、tx_axis_tuser_mty<M>[2:0] の値は無視されて 000 として扱われ、tx_axis_tuser_mty<M>[3] は通常どおり使用されます。