FC2カウンター FPGAの部屋 AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

AXI4-Stream におけるサイド・チャネル信号 TKEEP と TSTRB の扱いについて

今まで、TKEEP と TSTRB は”Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 148 ページの”AXI4‐Stream 信号のま とめ”の”表 A-7”によるとオプションで Vitis HLS で IP コアを作成する時も C コードに処理を書かなかったのですが、特に DMA に入力する AXI4-Stream の TKEEP の処理については、入力をそのまま出力に返すか、オール 1 にしないと問題が起こる様だ。

Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 148 ページの”AXI4‐Stream 信号のま とめ”の”表 A-7”とそこの TKEEP と TSTRB の記述を引用する。
TKEEP_TSTRB_4_220306.png

TKEEP : ザイリンクス IP では、 ヌル バイ ト の利用をパケット化されたストリームの末尾にある残りのバイ トのエンコードに限定しています。
ザイリンクスのエンドポイン ト IP では、 ストリーム中の先頭または途中のヌル バイ ト を示す目的で TKEEP を使用しません。
デフォルト: 1

TSTRB : 変更な し
通常、 TSTRB はスパース ストリーム のエンコードに使用 し ます。TSTRB は、 残りのパケットのエンコード だけを目的として使用すべきではありません。
デフォルト: TKEEP と同じ、 それ以外の場合は 1


TKEEP はストリームの末尾の残りバイト、つまり、32 ビット幅だったら、4 バイト単位の転送なので、例えば 43 バイトを転送する時は、最後のデータ転送ではリトル・エンディアンでは 0x7 になるということか?
TSTRB はバイト・イネーブルとして使用できるのだろう?

TKEEP と TSTRB はビデオ・ストリームでは有効でないということだ。
Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 133 ページの ”7‐1 : ビデオ IP 分野における AXI4‐Stream 信号の使用”を引用する。
TKEEP_TSTRB_1_220306.png

DSP/ワイヤレス IP 分野でも TKEEP と TSTRB は有効でないようだ。
Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 134 ページの”表 7‐2 : DSP/ワイヤレス IP 分野における AXI4‐Stream 信号の使用”を引用する。
TKEEP_TSTRB_2_220306.png

通信 IP 分野では、TKEEP のみオプションでサポートされる。
Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 135 ページの”表 7‐3 : 通信 IP 分野における AXI4‐Stream 信号の使用”を引用する。
TKEEP_TSTRB_3_220306.png

AXI4‐Stream インフラストラクチャ IPのサブカテゴリとインフラストラクチャ IPで使用される信号を示す。殆どの信号がインフラストラクチャ IP では使用される様だ。
Vivado Design Suite AXI リファレンス ガイド UG1037 (v3.0) 2015 年 6 月 24 日”の 136 ページの”表 7‐4 : AXI4‐Stream インフラストラクチャ IP のサブ カテゴ リ”と”表 7‐5 : インフラストラクチャ IP 分野における AXI4‐Stream 信号の使用”を引用する。
TKEEP_TSTRB_5_220306.png
TKEEP_TSTRB_6_220306.png

つまり Xilinx 社の DMA では、TKEEP と TSTRB を使用するようだ。
TKEEP はケアが必要だが、”TKEEP and TSTRB combinations”によると、やはり TSTRB もケアしておいた方が良さそうだ。
どちらもオール 1 にするか? 入力された値をそのまま出力する。

”PYNQ を使って Python で手軽に FPGA を活用 (5)”をやってみる2(Jupyter Notebook で確認)”などで私が Vitis HLS で作成した DMA_pow2_axis IP はどうやら TKEEP と TSTRB を処理しなかったため動作しなかったようだ。
  1. 2022年03月06日 05:02 |
  2. AXI4バス
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/5520-82a32f75
この記事にトラックバックする(FC2ブログユーザー)