ZYNQのPSで実行時間を測定する方法

概要

ZYNQである処理の実行時間を測定したいときにどうすればよいのかについて紹介します。
一般的なCのコードではtime.hを使ったりしますが、ZYNQではこの方法は非推奨なようです。
今回はXilinxが用意したxtime_l.hというファイルを用います。

Vivadoプロジェクトの作成

今回はZYNQのPS部分のみを使用します。

SDKプロジェクトの作成

HelloWorldのテンプレートでプロジェクトを作成し、HelloWorld.cを次のように書き換えました。

#include <stdio.h>
#include "platform.h"
#include "xparameters.h"
#include "xtime_l.h"


int main()
{
    XTime tStart, tEnd;
    init_platform();

    XTime_GetTime(&tStart);
    printf("Hello World\n\r");
    XTime_GetTime(&tEnd);

    printf("Output took %llu clock cycles.\n\r", 2 * (tEnd - tStart));
    printf("Output took %.2lf us.\n\r", 1.0 * (tEnd - tStart) / (COUNTS_PER_SECOND / 100000000));

    cleanup_platform();
    return 0;
}

実行結果

printfをした場合

Hello World
Output took 10388 clock cycles.
Output took 1731.33 us.

printfを外してGetTimeにかかる時間を測定

Output took 50 clock cycles.
Output took 8.33 us.