🏩

VitisHLSによる高位合成でパターン表示回路を作る

2023/04/26に公開

VitisHLSによる高位合成でパターン表示回路を作る

はじめに

前回に続き、「FPGAプログラミング大全 第2版」をやる
https://amzn.to/40isQyG

本投稿では本書11-1~「高位合成の応用」を実施したメモを書きます

環境

FPGA : Xilinx Zybo Z7-20
OS : WSL2 Ubuntu20.04
開発環境 : Vivado ML edition 2022.1 Linux版

やりたいこと

Vitis HLSを使って高位合成によってパターン表示回路を作る

実装

Projectの作成

  • Vitis HLSを起動し、SourceとTest benchを追加
  • Build selected file
  • C Synthesis

patblt関数で矩形を描画 -> imagedataファイルに書き込みを行うテストベンチ一部抜粋

int main()
{
    for (int i=0; i<XSIZE*YSIZE; i++) {
        VRAM[i] = 0;
    }

    patblt(VRAM,   0,   0, 320, 240, 0x00ff0000);
    patblt(VRAM, 160, 120, 320, 240, 0x0000ff00);
    patblt(VRAM, 320, 240, 320, 240, 0x000000ff);

    FILE *fd = fopen("imagedata.raw", "wb");

    for (int y=0; y<YSIZE; y++) {
        for (int x=0; x<XSIZE; x++) {
            int temp = VRAM[y*XSIZE+x];
            fprintf( fd, "%c", (temp>>16) & 0xff );
            fprintf( fd, "%c", (temp>>8 ) & 0xff );
            fprintf( fd, "%c", (temp    ) & 0xff );
        }
    }
    fclose(fd);

    return 0;
}

C-RTL Cosimulation

  • 回路合成が終了したらシミュレーションを実施

  • Cosimulation -> Dunmp Trace:All -> OK
    終了するとサマリが出力される

  • Open Wave Viewer -> Vivadoが起動する

波形の確認

  • シミュレーションは2.732msで終了

  • m_axi_gmem_AWLEN[7:0] = 0x0f より、バースト長16

  • gmem_AWADDR[63:0]を見ると、WDATA[31:0]の終了を待たずにアドレス発行されている
    ->オーバーラップ転送されている(WDATAが固定なので分かりづらいが)
    参考.本書P358 AXIバス入門

    拡大

  • 保存されたrawdataの確認
     意図通りの絵が表示されている

IP出力

  • Export RTL -> OK
    IPとして保存された

Discussion