Vertical Generation Configuration Example - 6.2 English - PG016

Video Timing Controller LogiCORE IP Product Guide (PG016)

Document ID
PG016
Release Date
2025-11-26
Version
6.2 English

Programming the generation registers to the values shown in the following table results in the video timing signal outputs shown in the following figure.

In the following table, the Generator Encoding Register bits [3:0] are set to 0 to configure the number of lines skipped between each active chroma line to be 0. This configures the Active Chroma output signal for 4:4:4 or 4:2:2 mode in which every line contains valid chroma samples.

Table 1. Example Vertical Generation Register Inputs
Register Address Register Name Value
0x0060 Generator Active Size 0x0004_0003
0x0070 Generator HSize 0x0000_0007
0x0074 Generator VSize 0x0000_0008
0x0078 Generator HSync 0x0005_0004
0x0080 Generator Frame 0 Vsync 0x0006_0005
0x0068 Generator Encoding 0x0000_0000
0x006C Generator Polarity 0x0000_003F
0x0000 Control 0x01FF_FF07
Figure 1. Generated Vertical Timing (4:4:4 Chroma)

The following C code shows how to configure the register values in the table using the VTC driver.

 XVtc Vtc; /* Device driver instance */
 XVtc_Signal SignalCfg; /* VTC Signal configuration */
 XVtc_Polarity Polarity; /* Polarity configuration */
 XVtc_SourceSelect SourceSelect;/* Source Selection configuration */
 XVtc_Config *VtcCfgPtr;
 
 VtcCfgPtr = XVtc_LookupConfig(VTC_DEVICE_ID);
 
 XVtc_CfgInitialize(&Vtc, VtcCfgPtr, VtcCfgPtr->BaseAddress);
 
 /* Setup the VTC Source Select config structure. */
 /* 1=Generator registers are source */
 /* 0=Detector registers are source */
 memset((void *)&SourceSelect, 0, sizeof(SourceSelect));
 SourceSelect.VBlankPolSrc = 1;
 SourceSelect.VSyncPolSrc = 1;
 SourceSelect.HBlankPolSrc = 1;
 SourceSelect.HSyncPolSrc = 1;
 SourceSelect.ActiveVideoPolSrc = 1;
 SourceSelect.ActiveChromaPolSrc= 1;
 
 SourceSelect.VChromaSrc = 1;
 SourceSelect.VActiveSrc = 1;
 SourceSelect.VBackPorchSrc = 1;
 SourceSelect.VSyncSrc = 1;
 SourceSelect.VFrontPorchSrc = 1;
 SourceSelect.VTotalSrc = 1;
 SourceSelect.HActiveSrc = 1;
 SourceSelect.HBackPorchSrc = 1;
 SourceSelect.HSyncSrc = 1;
 SourceSelect.HFrontPorchSrc = 1;
 SourceSelect.HTotalSrc = 1;
 
 /* Setup the VTC Polarity config structure. */
 memset((void *)&Polarity, 0, sizeof(Polarity));
 Polarity.ActiveChromaPol = 1;
 Polarity.ActiveVideoPol = 1;
 Polarity.VBlankPol = 1;
 Polarity.VSyncPol = 1;
 Polarity.HBlankPol = 1;
 Polarity.HSyncPol = 1;
 
 /* Setup the VTC Signal config structure. */
 memset((void *)&SignalCfg, 0, sizeof(XVtc_Signal));
 SignalCfg.OriginMode = 1;//Set Frame Origin to Start of Active Video
 SignalCfg.HTotal = 7;
 SignalCfg.HActiveStart = 0;
 SignalCfg.HFrontPorchStart = 3;// Active Video Width
 SignalCfg.HSyncStart = 4;// Active Video Width + FP Width
 SignalCfg.HBackPorchStart = 5;// Active Video Width + FP Width + Sync Width
 
 SignalCfg.V0Total = 8;
 SignalCfg.V0ChromaStart = 0;
 SignalCfg.V0ActiveStart = 0;
 SignalCfg.V0FrontPorchStart = 4;// Active Video Height
 SignalCfg.V0SyncStart = 5;// Active Video Height + FP_Width
 SignalCfg.V0BackPorchStart = 6;// Active Video Height + FP Width + Sync Width
 
 /* Write VTC config to HW */ 
 XVtc_RegUpdate(&VTC);
 XVtc_SetPolarity(&Vtc, &Polarity);
 XVtc_SetGenerator(&Vtc, &SignalCfg);
 XVtc_SetSource(&Vtc, &SourceSelect);
 
 /* Enable VTC Generator */ 
 XVtc_Enable Generator(&Vtc);