🏩
VitisHLSによる高位合成でパターン表示回路を作る
VitisHLSによる高位合成でパターン表示回路を作る
はじめに
前回に続き、「FPGAプログラミング大全 第2版」をやる
本投稿では本書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