2019.06.11
2019.06.10
AXI Stream to MMにFIFOを入れた
昨日の記事では、AXI DataMoverでAXI StreamをDDR3メモリに転送することはできましたが、MIG(と、その手前にあるInterConnect)がTREADYを下げてくるので、データを出すだけの単純なAXI4 Streamだと対処できませんでした。
そこで、Streamのソースと、AXI DataMoverの間にAXI FIFOを入れることにしました。
VivadoのIP IntegratorでAXI FIFOを探すと3種類くらい出てきますが、使用したのは「AXI4-Stream Data FIFO」です。
出来上がったデータパスの全体構成はこんな感じです。
FIFOの設定は以下のとおりです。
これで動かしてみると、TREADYは相変わらず下がっていますが・・・
AXI Streamのソースは、データを止めることなく出し続けることができるようになりました。
FIFOの残数を見ると_/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\__という動きをしているのがわかります。
次の図は、AXI DataMoverの後ろのAXI Interconnectの部分です。綺麗にトランザクションが発行されています。
ステータスも正常に返ってきています。15とか出ているので一瞬驚きましたが、TVALIDのときには85なので大丈夫でした。
転送の全体です。DDR3が相手なので最初や最後の部分で少し乱れていますが、問題なく転送できました。
このように、AXI DataMoverの前にFIFOを入れると、AXI Streamのソースは単純に出すだけのタイプで良くなるので楽に作れるようになります。
2019.06.09
XILINXのAXI DataMoverを使う
XILINXのAXI DataMoverというのを使うと、AXI StreamからDDR3メモリへのデータ転送が簡単にできるようです。
今回はStreamからMemory Mapへの書き込みをしたいのでS2MMというモードで作ってみます。
S_AXIS_S2MMにAXI Streamを入れるとM_AXI_S2MMからFull AXIが出てきてDDR3メモリなどに接続できるという優れもののコアのようです。
S_AXIS_S2MM_CMDというのがコマンドを与えるポートで、これ自体もAXI Streamでできています。
下の図ような72bitのコマンドを与えて、tvalidを1にします。
- BTTが転送したいバイトサイズ(1~8388607)
- Typeは0だとアドレス固定、1だとアドレスが増えていく
- DRRとDSAはMM2Sで使うらしく、今回は調べていない
- EOFはMM2Sで最後の転送のときに1にしておくとTLASTを立ててくれる
- SADDRは転送先アドレス
- TAGはAXIのパケットに付ける目印のタグ
- RSVDは0
- xUSERとxCACHEはとりあえず存在しない
となっています。
☀
実際に下の図のようなデザインを作り、XILINXのIPであるVIOを使ってトリガやパラメータを与え、ILAで波形を取ってみました。
TAGが5、SADDRは0、BTT(転送バイト数)が0x20のコマンドを与えました。下の波形はコマンド用AXI Streamの波形です。
その後、データポートのAXI Streamに8ワード(32バイト)のデータを与えます。
AXI MMのポートからは以下のような信号が出てきました。これはごく普通のAXIの転送です。
最後にSTSというAXI Streamのポートに返ってきたステータスを確認しますが、今回はIBTTモード(転送サイズを途中で打ち切ることができるモード)を使っているので、ステータスは32bitの幅があります。
波形は以下のとおりです。1クロック分しか出てこないのでロジアナで読みにくいですね。
値は0x80002085で、EOP(End of Packe)とOkayフラグが立ち、転送したバイトサイズは0x20のようです。
☀
確かにAXI StreamからAXI MMへのデータ転送は簡単にできそうです。
が、大事なことを見落としていました。それは、AXI DataMoverがTREADYを0に下げることがあるということです。S2MMの先が詰まっているときや、転送の始まりの部分ではTREADYがいったん0に下がります。
そうすると、AXI Streamのデータソースはデータの送信をいったん中止しなければなりません。データソースは普通、ADCや画像だったりするので止められないですね。
だから、ADCや画像データをそのままAXI S2MMにつないでDDR3に格納するのは無理がありそうです。間にFIFOを一回挟まなければならなさそうです。
<追記>
最近のコメント