内容
PYNQ-Z1にてPYNQ-Z2のチュートリアルである
Video Series 23: Generate a video output on Pynq-Z2 HDMI outを行う。
bitstreamまで完了、Vitisでのコンパイル、ボードへの書き込みも問題なし。
しかしながら、一向に画面が表示されない。
改善したので備忘録です。
環境
Ubuntu 22.04.4 LTS
vivado 2023.2
vitis IDE 2023.2.0
チュートリアルからの変更点
vivado
チュートリアル通りにブロック配置、配線を行う。
・VTC、VPG解像度の変更 800x600→1280x720
・その他 FCLK1周波数 40MHzから74.25MHzに変更する(実際は76.923となった)
vitis
helloworld.c
vpg初期化に加えて、vtc初期化を追加した
helloworld.c
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xv_tpg.h"
#include "xvtc.h"
XV_tpg tpg_inst;
XVtc VtcInst;
int Status;
int main()
{
init_platform();
print("Hello World\n\r");
/* TPG Initialization */
Status = XV_tpg_Initialize(&tpg_inst, XPAR_V_TPG_0_DEVICE_ID);
if(Status != XST_SUCCESS)
{
xil_printf("TPG configuration failed\r\n");
return(XST_FAILURE);
}
// Set Resolution to 1280x720
XV_tpg_Set_height(&tpg_inst, 720);
XV_tpg_Set_width(&tpg_inst, 1280);
// Set Color Space to RGB
XV_tpg_Set_colorFormat(&tpg_inst, 0x0);
// Set pattern to color bar
XV_tpg_Set_bckgndId(&tpg_inst, XTPG_BKGND_COLOR_BARS);
// Start the TPG
XV_tpg_EnableAutoRestart(&tpg_inst);
XV_tpg_Start(&tpg_inst);
xil_printf("TPG started!\r\n");
/* VTC Initialization */
XVtc_Config *VtcCfg;
VtcCfg = XVtc_LookupConfig(XPAR_VTC_0_DEVICE_ID);
if (NULL == VtcCfg) {
xil_printf("VTC LookupConfig failed\r\n");
return(XST_FAILURE);
}
Status = XVtc_CfgInitialize(&VtcInst, VtcCfg, VtcCfg->BaseAddress);
if (Status != XST_SUCCESS) {
xil_printf("VTC CfgInitialize failed\r\n");
return(XST_FAILURE);
}
XVtc_Timing Timing;
// Configure timing parameters for 1280x720 resolution
Timing.HActiveVideo = 1280; // Horizontal Active Video Size
Timing.HFrontPorch = 110; // Horizontal Front Porch
Timing.HSyncWidth = 40; // Horizontal Sync Width
Timing.HBackPorch = 220; // Horizontal Back Porch
Timing.HSyncPolarity = 1; // Horizontal Sync Polarity
Timing.VActiveVideo = 720; // Vertical Active Video Size
Timing.VFrontPorch = 5; // Vertical Front Porch
Timing.VSyncWidth = 5; // Vertical Sync Width
Timing.VBackPorch = 20; // Vertical Back Porch
Timing.VSyncPolarity = 1; // Vertical Sync Polarity
XVtc_SetGeneratorTiming(&VtcInst, &Timing);
XVtc_EnableGenerator(&VtcInst);
xil_printf("VTC started!\r\n");
/* End of TPG and VTC code */
cleanup_platform();
return 0;
}
最後に
何度もVivadoでbitstream、Vitisでコンパイルを繰り返しました。。。
FPGA敷居が高いです。
参考
vtc.writeが参考になりました!