FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Zynq Cortex-A9 ARMでお手軽にサイクル計測する手法を調査する(2)

f:id:msyksphinz:20160601001536p:plain

前回で、ARMでサイクルカウンタを使用する方法を調査した。

サンプルプログラムを用いてPLへのアクセス性能を計測するプログラムを記述する

これを前回PS/PLのサンプルデザインに適用してみよう。以下のように、PL内にメモリが格納されている。

f:id:msyksphinz:20160827111037p:plain

メモリへのストアとロードを繰替えして、どの程度サイクル数が必要なのか計測してみる。

int main()
{
  init_platform();

  print("Start Timer Test\n\r");

  unsigned long start_time = pmon_start_cycle_counter ();
  int i;
  uint32_t result0 = 0,
      result1 = 0;

  for (i=0; i < 1000; i++) {
    Xil_Out32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 0, i);
    Xil_Out32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 4, i+1);
    result0 += Xil_In32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 0);
    result1 += Xil_In32(XPAR_SIMPLE_BRAM_0_S_AXI_BASEADDR + 4);
  }

  unsigned long stop_time = pmon_read_cycle_counter();

  xil_printf ("start_time = %ld, stop_time = %ld, result0=%d, result1=%d\n",
              start_time, stop_time, result0, result1);

  cleanup_platform();
  return 0;
}

以下のように、サイクル数が計測できた。いくつかバリエーションを変えて、サイクル数を計測している。また、アクセス回数に比例してサイクル数が変化しているので、計測方法も問題無いと思う。

f:id:msyksphinz:20160901223952p:plain

サイクル数
Load1回 1877
Load2回 3648
Store1回 2102
Store2回 4064
Load2回/Store2回 7503

関連記事

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com