PCIe でバーストを使用した読み取りと書き込みについて質問があります。PCIeを介してCPUに接続されたfpgaがあります。テスト用の単純なドライバーがあります。ドライバーは、fpga との間でデータの書き込みと読み取りを行います。fpga には、データの書き込みと読み取りを行う SRAM コアが含まれています。読み取りと書き込みは正常に機能していますが、デバイスから読み取るとバーストは発生しません。fpga にデータを書き込む場合、BAR を ioremap_wc() でマップするとバーストがうまく機能します。しかし、fpgaから読み取ると、CPUはバーストなしでシングルアクセスを行います。読み取りと書き込みの転送でデータをキャッシュできるようにするには、メモリをライトバックとしてマークする必要があることがわかりましたが、/proc/mtrr を使用してアドレスのライトバックをマークすると、読み取りと書き込みでバーストが発生しません。PCI ヘッダーの BAR は、プリフェッチ可能とマークされています。PCIバスで読み書き用のバーストを実装する方法を知っている人はいますか? 誰かが私を助けてくれることを願っています。
質問する
1661 次
1 に答える
0
PICe バスでバースト転送を行う最善の方法は、プロセッサ I/O の代わりに DMA コントローラを使用することです。FPGA が PCIe バス マスターである場合、プログラムしてデータを転送できる場合があります。それ以外の場合は、ほとんどのプラットフォームに組み込まれている DMA コントローラーがあります。
書き込み結合は、キャッシュされていない場合と同じように読み取りを実行することを期待しています。ただし、ioremap_cache() を使用しても、プラットフォームが PIO 読み取りをバーストしない場合があります。プロセッサ、読み取りを行う命令、およびシステムロジックに依存する可能性があります。
于 2013-09-05T03:29:26.843 に答える