Cyclone V ACPの実験その1

Cyclone Vでは、ACP(Accelerated coherency port)の機能を使うことで、CPUとFPGA内のAXIマスタでメイン・メモリの内容を共有できます。通常、このようなメモリの共有にはキャッシュ・フラッシュが必要になりますが、ACPを利用するとキャッシュ・フラッシュが不要になります。Cyclone VのマニュアルにはACPを有効にするための条件が色々と記載されていますが、実際にはどのようにすればACPが有効になるのかを実機で確認してみました。

動作確認環境

  • ターゲット機器: DE0-Nano-SoC
  • 開発環境: Quartus II/SoC EDS 15.0
  • ソフトウェア: ベアメタルアプリ (gnuコンパイラを使用)

ベアメタルアプリの作成方法はこちらです。

動作確認用デザイン

Cyclone VのFPGA内にAXIのDMACを実装し、設定したメモリ・アドレスからデータをリードします。AXIはFPGA-to-HPS Bridgeに接続しています。

ACP動作確認環境

ACP動作確認環境

動作確認

その1: MMUとデータ・キャッシュOFFで動作を確認

MMUとデータ・キャッシュがOFFの状態で動作を確認してみます。動作確認用のプログラムは次の通りです。

このプログラムは、CPUからメイン・メモリの0x20000000番地に32ビットのデータをライトし、それをFPGAのDMACを使ってリードしています。FPGAからのメイン・メモリのリードは、0x20000000と0xA0000000の2か所で行っています。0x20000000はCPUがライトした同じアクセス、そのアドレスを0x80000000オフセットさせた0xA0000000がACPに割り当てられたアドレスです。pplib/pl_address_table.hはFPGA内DMACのレジスタ設定アドレスを定義しているファイルです。ACPには直接関係しません。

プログラムの動作

プログラムの動作

実行結果

0x20000000からの通常リード、0xA0000000からのACPリードの両方でCPUがライトしてデータを確認できました。キャッシュとMMUがOFFの場合にはCPUのライトが直ちにDDRに書き込まれるので、キャッシュ・フラッシュは不要ということなのでしょう。ACPウィンドウからも期待通りのデータがリードできるところが興味深いです。

その2: MMUとデータ・キャッシュONで動作を確認

MMUとデータ・キャッシュを有効にして動作を確認してみます。動作確認用のプログラムは次の通りです。MMUの設定については以下のページのQuad SPIサンプルを参考にしています。
https://www.altera.com/support/support-resources/design-examples/soc.html

実行結果

予想通り、データの不一致が起こりました。0x20000000からの通常リード、0xA0000000からのACPリードの両方がCPUのライト・データと一致しませんでした。CPUがライトしたデータはキャッシュに留まっているため、DDRの内容は更新されないということなのでしょう。このテスト環境があれば、どのような設定を行えばACPが有効になるのか確認できます。ACPが有効になれば、0xA0000000のACPウィンドウからのリードは、CPUがライトしたデータと一致するはずです。(続く

スポンサーリンク
広告大
広告大
  • このエントリーをはてなブックマークに追加
スポンサーリンク
広告大