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