今まで、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 : ザイリンクス 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 信号の使用”を引用する。

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

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

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 信号の使用”を引用する。


つまり 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 を処理しなかったため動作しなかったようだ。
- 2022年03月06日 05:02 |
- AXI4バス
-
| トラックバック:0
-
| コメント:0