VGA Output Examples

A number of examples are provided to demonstrate the generation of a VGA-compatible video signal by the microcontroller:

Each one mostly demonstrates the same thing as the others, but certain implementation choices cause certain trade-offs to be made. Some of these are discussed below.

Comparison

In investigating different techniques, the following observations have been made about the behaviour of the different VGA examples:

DMA Channels Horizontal Resolution Picture Stability Pixel Consistency Scrolling Operational
vga 1 High No No Yes
vga-cpu 0 High Yes Yes Yes
vga-dual 2 High No No No
vga-pmp 1 High No No Yes
vga-timer 2 Low Yes Yes Yes

Here, picture stability is assessed with the CPU accessing RAM. In general, all of the approaches can provide stable pictures with limited RAM access loading. However, under load, the picture will stretch and ripple for all examples where picture stability is given as "No".

It should be noted that the vga-timer example employs two DMA channels, but this is only to maximise horizontal resolution. With a single channel, horizontal resolution is diminished still further in comparison to the other examples.

It would appear that two most viable approaches are the vga-cpu and vga-timer, if only because they produce consistently-sized pixels, retain picture stability under load, and provide operational horizontal scrolling. These approaches provide a tradeoff between performance (vga-timer being faster) and resolution (vga-cpu being better).