The Lab
Retro Reference

Video Timing Reference

Pixel clocks and porch-level horizontal/vertical timing for the standards you reach for when building a video controller in an FPGA: VGA and VESA, HDMI/DVI (CEA-861), analog broadcast (NTSC, PAL, SECAM), and the classic 8/16-bit machines.

The timing model

Every raster mode is one horizontal counter and one vertical counter. Each axis runs active → front porch → sync → back porch and wraps at its total. Horizontal counts pixel clocks; vertical counts whole lines. Blanking = front porch + sync + back porch. Sync polarity says whether the pulse drives the line low (negative, the VGA default) or high (positive). All porch figures below are in pixels (H) and lines (V) unless a unit is given.

Timing calculator

Enter the four porches per axis and the pixel clock. Get totals, line and frame rates, the counter compare points, and a paste-ready parameter block. The C64 and VIC-20 presets carry the right dot clock, totals, and line/frame rates; their porch split is nominal, since those chips draw borders and a composite sync rather than VGA porches.

      

VGA & VESA

Progressive RGB modes with separate H and V sync, the usual target for FPGA VGA output through a resistor-ladder DAC. Pixel clock in MHz; H porches in pixels, V porches in lines.
ModeRefreshPixel
clock
Horizontal (px) Vertical (lines) Sync
H / V
H freqV freq
actfpsyncbptotal actfpsyncbptotal
Sync polarity: active-low, + active-high. 720×400 @70 is the IBM VGA 80×25 text mode. 640×480 @60 lands on 59.94 Hz exactly (25.175 MHz), the one mode shared with CEA-861.

HDMI & DVI (CEA-861)

Digital TV formats. The same pixel timing feeds a DVI/HDMI TMDS serializer; HDMI just adds data islands during blanking. VIC is the CEA video identification code. Pixel clock in MHz.
VICFormatPixel
clock
Horizontal (px) Vertical (lines) Sync
H / V
H freqRate
actfpsyncbptotal actfpsyncbptotal
Every NTSC-derived rate has a /1.001 sibling: drop the pixel clock to 25.175→(already 59.94), 27→26.973, 74.25→74.176, 148.5→148.352 MHz for the 59.94/29.97/23.976 Hz variants. 1080i vertical figures are per field; total 1125 lines carry 540 active each, sync/porch counted in half-lines.

Analog broadcast

Composite/component analog. These are scan parameters, not pixels: the line is a continuous waveform, so timing is in microseconds and levels in IRE or millivolts. Generating these from an FPGA means a fast video DAC and a precise subcarrier.
ParameterNTSC-MPAL-B/GPAL-ISECAM
Total lines / frame525625625625
Active lines (visible)~480–486576576576
Interlace2:12:12:12:1
Fields / sec59.94505050
Frames / sec29.97252525
Line frequency fH15.734 kHz15.625 kHz15.625 kHz15.625 kHz
Line period63.556 µs64.000 µs64.000 µs64.000 µs
Color subcarrier fsc3.579545 MHz4.433619 MHz4.433619 MHz4.250 / 4.40625
Chroma encodingQAM I/QQAM ±VQAM ±VFM sequential
Video bandwidth4.2 MHz5.0 MHz5.5 MHz6.0 MHz
Channel width6 MHz7 MHz8 MHz8 MHz
Sound offset+4.5 MHz+5.5 MHz+6.0 MHz+6.5 MHz
Black setup (pedestal)7.5 IRE0 IRE0 IRE0 IRE
Signal level (p-p)1.0 V1.0 V1.0 V1.0 V
Sync depth−40 IRE (−286 mV)−300 mV−300 mV−300 mV
Display gamma2.22.82.82.8
NTSC fH = 4.5 MHz ÷ 286 = 15734.264 Hz; fsc = 315⁄88 MHz. PAL fsc = (1135⁄4 + 1⁄625) × fH. 1 IRE = 1⁄140 V = 7.143 mV across the 140-IRE sync-tip-to-white span.
One scan line, broken down (nominal values, ITU-R BT.470). The active window is where you clock out picture samples.
Horizontal intervalNTSCPAL
Total line63.556 µs64.000 µs
Front porch1.5 µs1.65 µs
Sync pulse (low)4.7 µs4.7 µs
Back porch4.5 µs5.7 µs
Breezeway to burst~0.6 µs~0.9 µs
Color burst2.5 µs (9 cyc)2.25 µs (10 cyc)
Total H blanking~10.9 µs~12.05 µs
Active video~52.6 µs~51.95 µs
Vertical blanking carries the equalizing and serration pulses: 6 pre-equalizing (0.5H), the broad vertical sync (3 lines, serrated at 0.5H), then 6 post-equalizing pulses, before picture resumes near line 21 (NTSC) / line 23 (PAL).

Retro machine video

The 8 and 16-bit display chips, which is what you are usually re-creating on an FPGA. Dot clock is the pixel rate the chip shifts at; cycles/line counts in chip dots. Visible is the active picture inside the border.
Chip / systemStdMaster clockDot clockCPU clock Dots / lineLines / frameVisibleFrame
VIC-II (C64, 6567R8)NTSC14.31818 MHz8.18182 MHz1.022727 MHz520263320×200~59.83 Hz
VIC-II (C64, 6569)PAL17.734472 MHz7.881984 MHz0.985248 MHz504312320×200~50.12 Hz
PPU (NES, 2C02)NTSC21.477272 MHz5.369318 MHz1.789773 MHz341262256×240~60.10 Hz
PPU (NES, 2C07)PAL26.601712 MHz5.320342 MHz1.662607 MHz341312256×240~50.01 Hz
Agnus/Denise (Amiga OCS)NTSC28.63636 MHz7.15909 MHz7.15909 MHz~455262320×200~59.94 Hz
Agnus/Denise (Amiga OCS)PAL28.37516 MHz7.09379 MHz7.09379 MHz~454312320×256~50.08 Hz
ULA (ZX Spectrum 48K)PAL14.00 MHz7.00 MHz3.50 MHz448312256×192~50.08 Hz
Amiga lores dot is master⁄4 (hires doubles it to ~14.3/14.2 MHz); its line is measured in 3.5 MHz color clocks (227.5 NTSC / ~227 PAL), so dots/line are approximate. C64 NTSC uses 65 cycles/line (×8 dots), PAL 63. ZX Spectrum is 224 T-states/line at 3.5 MHz, 69888 T-states/frame.