MiniGA - High Quality PAL Encoder for Microcontrollers

MiniGA - High Quality PAL Encoder for Microcontrollers Click to expand image


Category: Video Controller

Created: March 20, 2007

Updated: January 27, 2020

Language: VHDL

Other project properties

Development Status: Beta

WishBone compliant: No

WishBone version: n/a

License: n/a



The MiniGA is a small graphics adapter for microcontrollers. It outputs a video signal for TVs, VCRs and TFTs with video input. MiniGA features a SPI interface which makes interfacing to most microcontrollers easy. A cycle-shared-RAM interface coordinates read and write accesses to the RAM so the user needn't take care about data collisions which simplifies the usage. Moreover MiniGA generates all needed timings and outputs a digital video which is converted to analog by a 10Bit DAC externally.


- PAL Encoder Core written 100% in VHDL
- No Xilinx/Altera specific IP core used (except DCM/PLL for clock generation)
- 100% digitally synthesized PAL video @ 45MHz sampling rate
- Almost exact PAL timing and frequencies
- 780x576px @ 16Bit color depth
- 1MByte asynchronous video RAM (Two standard 512k*8 SRAM organized as 512k*16, access time 15ns)
- Cycle shared memory interface performance: 60MByte/sec (30MByte/sec per bus, writing of >25 full frames/sec should be possible but not tested yet)
- RGB to YUV conversion
- FIR-Lowpass filter for U and V color components
- SPI-Interface
- Small PCB size of 86x53mm


- Version 1.00 finished


The following two images are result pictures from MiniGA. The first was photographed from a TV, the second was captured with a TV capture card.


MiniGA has been developed/tested on following platforms:
- Custom PCB with Xilinx XC3S200 (~85% system resources used)
- Development Board with Altera EP1C12 (~30% system resources used)

The pictures below show my Custom Board (prototype).
Note: There are newer board and schematic files in the CVS.

To Do

- Faster SPI Interface.
- Maybe shrink the core. The core is quite large because most calculations are too precise. The core outputs a 16Bit video and just 10Bits are used.
- Maybe Wishbone interface