Cyclone V ACPの実験その2

前回の実験で、ACPが期待通りに動かない環境を作ることができました。この環境に設定を追加してACPを有効にします。Cyclone Vのマニュアルに記載されているACPの有効化に必要な設定は次のとおりです。
(Cyclone V Hard Processor System Technical Reference Manual 2015.05.04の9-29)

  • リード時はARCACHEのアトリビュートがMMUページ・テーブルのアトリビュートと一致すること
  • リード時はARUSER[0] = 1かつARCACHE[1] = 1という条件が必要
  • ライト時はAWCACHEのアトリビュートがMMUページ・テーブルのアトリビュートと一致すること
  • ライト時はAWUSER[0] = 1かつAWCACHE[1] = 1という条件が必要
  • Cortex-A9 MPCoreは次の設定が必要
    • Snoop Control Unitを有効にする
    • コヒーレント・メモリはCacheable/Shareableに設定する
    • ACTLRレジスタのSMPビットをセットする。

これらの設定をプログラムに追加すると、次のようになります。

  • FPGA内のDMACがドライブするAxUSERとAxCACHEは147行目で指定しています。具体的にはARUSERとAWUSERは1に、ARCACHEとAWCACHEはすべて1(0xf)に設定しています(レジスタで設定できるように回路を設計している)。
  • Snoop Control Unitの有効化は145行目です。マニュアルによると、0xfffec000にSCUがマッピングされています。SCUのマニュアルを参照すると、0番地のビット0が有効化ビットなので、0xfffec000に1を設定します(Cyclone VのマニュアルにはSCUのレジスタマップは記載されていません)。
  • ACTLRレジスタのSMPビットをセットしてるのは、141~143行目です。SMPはビット6です。ACTLRレジスタのリード/ライトには、alt_cache.cのヘルパー関数を利用しました。
  • コヒーレント・メモリをCacheable/Shareableに設定しているのは、29行目と31行目です。ALT_MMU_ATTR_WBAやALT_MMU_TTB_S_SHAREABLEの意味は、alt_mmu.hのソースコード内にコメントとして記載されています。

ALT_MMU_ATTR_WBAでキャッシュが有効になるようです。ALT_MMU_TTB_S_SHAREABLEは次のように記載されています。

なお、alt_mmu.hはSoC EDSインストールディレクトリの/embedded/ip/altera/hps/altera_hps/hwlib/includeに格納されています。

実行結果

ACPウィンドウをリードした時には、キャッシュに留まっているCPUのライト・データが期待通りに読み出せていることがわかります。

スポンサーリンク







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