DMAによる長いメモリライトを実装
開発中のPCI Expressコアで、DMAによる長いメモリライトを実装しました。
128バイトを超えるサイズのデータを、128バイト単位に細切れにして複数回のMemWrトランザクションを発生させるというものです。
下の図は800バイト分のDMAを行ったところです。128バイトのペイロードを持つパケットが6個と、32バイトのが1個発行されました。
各パケットは920ns間隔で発行されているので、転送速度は128Bytes/0.92us = 139MBytes/secとなります。
問題は、コアがパケットを送ってからAckが返るまでの時間が長いこと。264nsもかかっているので、この時間が無駄となって、もっと密度を上げることができません。
本当はAckが返る前に次のパケットを送ってもよいのですが、そうするともっと速くなりそうですね。
でも、フローコントロールが必要になってきますので、FPGAのリソース使用率とのトレードオフになります。
最初に5回、PCからFPGAにむけて書き込んでいるのは、DMAの転送先アドレスや長さなどです。このオーバーヘッドはほとんど無視できるほどです。
| 固定リンク
コメント