PCI Expressのリードライト
PCI デバッグライブラリを使って、開発中のPCI Express IPコアに読み書きを行ってみました。
・読み出し
使った関数は、_MemReadBlockLongで、8ワード(32バイト)です。
・書きこみ
使った関数は、_MemWriteBlockLongで、8ワード(32バイト)です。
これらの関数名にはBlockとついていますが、JTAGロジックアナライザで見てみると、1ワードの転送をN回繰り返していました。
本来はPCI Expressは1つのTLPパケットに256バイトくらいのデータを載せられるのですが、パソコンから単純にアクセスすると、1ワードにつきTLPパケットを1個発行してしまうようです。
DMAモードというか、1つのTLPに複数のワードを載せる「バースト転送」は発行されませんでした。
PCIでもバースト転送を発行させるのは大変だみたいなことがTech-Iの本にかかれていたので、同じような理由なのでしょう。
ただ、明らかに書きこみのほうが速いですね。書きこみでは1μ秒の間に32バイト書き込んでいるので、32MBytes/secといったところでしょう。読み出しはその約8分の1でした。
今からDMAモードの実装に入ることにします。
| 固定リンク
コメント