tx_axis_tuser_bctl<M>
入力は、tx_axis_tuser_sop<M>
または tx_axis_tuser_chan<M>
の変更と同様に動作します。これらの信号がアサートされると、セグメント <M> 上のデータが Interlaken インターフェイスに現れる前に、バースト制御ワードがデータ ストリームに挿入されます。元々あるスケジューリング メカニズムを使用せず、この方法でユーザー独自のスケジューリング メカニズムを実装できます。
エンハンスト スケジューリングの動作についての理解を深めるために、次の例を考えます。BurstMax を指定する CFG_C0_TX_MAIN_REG レジスタの c0_ctl_tx_burstmax
レジスタ フィールドが 256 バイトに設定され、BurstShort を指定する CFG_C0_TX_MAIN_REG レジスタの c0_ctl_tx_burstshort
レジスタ フィールドが 64 バイトに設定されているとします。エンハンスト スケジューリングを使用しないか、または tx_axis_tuser_bctl<M>
を使用しないと、TX ILKNF サブシステムに書き込まれた 264 バイトのパケットが Interlaken 側に現れるとき、BurstShort の要件を満たすために、パケットの後に 7 つの望ましくない IDLE 制御ワードが挿入されます。具体的には、次のプロセスが実行されます。
- 1 つのバースト制御ワード (パケットの開始を含む) が送信される
- 32 データ ワードが送信される
- 1 つのバースト制御ワード (パケットの開始を含まない) が送信される
- 1 データ ワードが送信される
- (BurstShort の要件を満たすために) 7 つの IDLE 制御ワードが送信される
合計 42 ワードになります。
BurstShort の要件を満たすのに必要な IDLE の挿入で失われる帯域幅を最小限に抑えるために、ILKNF サブシステムは、エンハンスト スケジューリング アルゴリズムを自動的に実行するメカニズムを備えています。最後から 2 番目のバーストのサイズは Burstmax-64 です。264 バイトのパケットは、それぞれ 192 バイトと 72 バイトの 2 つのバーストに分割されます。
- 1 つのバースト制御ワード (パケットの開始を含む) が送信される
- 24 データ ワードが送信される
- 1 つのバースト制御ワード (パケットの開始を含まない) が送信される
- 9 データ ワードが送信される
- 0 個の IDLE 制御ワードが送信される
合計 35 ワードになります。
エンハンスト スケジューリング メカニズムを使用せずに、対応する tx_axis_tuser_bctl<M>
信号を使用して、バースト制御ワードをどこに挿入するかを制御できます。同じ 264 バイト パケットで、128 バイトの送信後に tx_axis_tuser_bctl<M>
がアサートされた場合、次のプロセスが実行されます。
- 1 つのバースト制御ワード (パケットの開始を含む) が送信される
- 16 データ ワードが送信される
- 1 つのバースト制御ワード (パケットの開始を含まない) が送信される
- 17 データ ワードが送信される
- 0 個の IDLE 制御ワードが送信される
合計 35 ワードになります。
ILKNF サブシステムを介して最大限の帯域幅を確保するために、tx_axis_tuser_bctl<M>
を使用するときは、『Interlaken Protocol Definition, Revision 1.2』に定義されている、Interlaken バーストのすべての規則に従ってください。特に、特定のチャネル上の (EOP でも EOP-1 でもない) 各 Interlaken バーストに対応する AXI データのサイズが、BurstMax のバイト数に等しいことを確認してください。つまり、特定のパケットの (最後の 2 つのバーストを除く) すべての Interlaken バーストに対応するデータのサイズが、BurstMax に等しくなるようにします。さらに、チャネルの変更、または次のバーストに対応するデータの転送の前に、特定の Interlaken バーストに対応するデータ全体が AXI4-Stream バスに書き込まれるようにします。