« ZYNQでFPGA(PL)からARM(PS)のDDR3メモリへDMA転送 | トップページ | A-D/D-A変換ICの実用技術: 高性能を引き出す回路の作り方と実装方法 を買ってみた »

2013.11.26

ZYNQのPLからPSへ大規模DMA

PLからPSへ大きなサイズのDMAができるようにしました。

AXIバスは最大で256ビートのバースト転送(32bit幅なら1024バイト)ができます。AXIのマスターとなる回路をユーザロジックに作り、ZYNQのPSにAXIでパケットを送ればメインメモリに書き込まれます。

しかし、AXIバスは最大256ビートまでなので、より長いサイズのDMAを行いたい場合は、このバースト転送を細切れにして発行するしかありません。

そこで、そういうステートマシンを作りました。

Axi_master_3

上の図は64ビートのバーストライトを4回繰り返しています。書き込んでいるデータは乱数(XorShift)です。

実際に67108864ビート(256MByte)のDMAを行ってみて、その時の端子の状態をMITOUJTAGのバウンダリスキャンで見てみたところ、約0.77秒の間、DDR3 SDRAMの端子が激しく動いていました。

256Mバイトを0.77秒で書くわけなので348MByte/secということになります。

Axi_master_4

たしか、ZYNQのメモリは32bit幅で、周波数は1066MHzくらいだったと思うので、メモリ帯域幅は4Gバイト/秒はあるはずです。

したがって、AXIのマスターポートから100MHzのバスクロックでデータを入れても10%も使っていない計算になります。まだまだ余裕ですね。

Axi_master_5

|

« ZYNQでFPGA(PL)からARM(PS)のDDR3メモリへDMA転送 | トップページ | A-D/D-A変換ICの実用技術: 高性能を引き出す回路の作り方と実装方法 を買ってみた »

コメント

やはり、BVALIDが来るのは遅れますね。なひたふさんの回路だと関係ないみたいですが。AXI INTERCONNECTの設定はデフォルトですか?

投稿: marsee | 2013.11.27 08:19

私はまだAXIのことをよくわかっていないので、デフォルトの設定から変更していません。
BVALIDが遅れるのは、実際にDDR3 SDRAMに書き込まれた後だからじゃないかなと思います。

投稿: なひたふ | 2013.11.27 09:31

了解しました。お返事ありがとうございました。
AXI INTERCONNECTをバッファリング・モードにした時にどうなるか興味深いです。後でやってみようと思っています。

投稿: marsee | 2013.11.27 09:57

つまりAXIの中のFIFOを有効にするということですね?

あのオプションは気になっていたのですが、どんなバグが潜んでいるかと思うと、怖くて使えませんでした。

ちゃんと動くならよさそうですが・・

投稿: なひたふ | 2013.11.27 12:18

コメントを書く



(ウェブ上には掲載しません)




« ZYNQでFPGA(PL)からARM(PS)のDDR3メモリへDMA転送 | トップページ | A-D/D-A変換ICの実用技術: 高性能を引き出す回路の作り方と実装方法 を買ってみた »