paul@148 | 1 | = VGA Output Examples = |
paul@148 | 2 | |
paul@149 | 3 | A number of examples are provided to demonstrate the generation of a [[VGA |
paul@149 | 4 | Signal Output|VGA-compatible video signal]] by the microcontroller: |
paul@149 | 5 | |
paul@148 | 6 | * [[Examples/vga|vga]] |
paul@148 | 7 | * [[Examples/vga-cpu|vga-cpu]] |
paul@148 | 8 | * [[Examples/vga-dual|vga-dual]] |
paul@148 | 9 | * [[Examples/vga-pmp|vga-pmp]] |
paul@148 | 10 | * [[Examples/vga-timer|vga-timer]] |
paul@148 | 11 | |
paul@149 | 12 | Each one mostly demonstrates the same thing as the others, but certain |
paul@149 | 13 | implementation choices cause certain trade-offs to be made. Some of these are |
paul@149 | 14 | discussed below. |
paul@149 | 15 | |
paul@148 | 16 | == Comparison == |
paul@146 | 17 | |
paul@146 | 18 | In investigating different techniques, the following observations have been |
paul@146 | 19 | made about the behaviour of the different VGA examples: |
paul@146 | 20 | |
paul@146 | 21 | {{{#!table |
paul@146 | 22 | || DMA Channels || Horizontal Resolution || Picture Stability |
paul@146 | 23 | || Pixel Consistency || Scrolling Operational |
paul@146 | 24 | == |
paul@146 | 25 | vga || 1 || High || No || No || Yes |
paul@146 | 26 | == |
paul@146 | 27 | vga-cpu || 0 || High || Yes || Yes || Yes |
paul@146 | 28 | == |
paul@146 | 29 | vga-dual || 2 || High || No || No || No |
paul@146 | 30 | == |
paul@146 | 31 | vga-pmp || 1 || High || No || No || Yes |
paul@146 | 32 | == |
paul@146 | 33 | vga-timer || 2 || Low || Yes || Yes || Yes |
paul@146 | 34 | }}} |
paul@146 | 35 | |
paul@146 | 36 | Here, picture stability is assessed with the CPU accessing RAM. In general, |
paul@146 | 37 | all of the approaches can provide stable pictures with limited RAM access |
paul@146 | 38 | loading. However, under load, the picture will stretch and ripple for all |
paul@146 | 39 | examples where picture stability is given as "No". |
paul@146 | 40 | |
paul@146 | 41 | It should be noted that the vga-timer example employs two DMA channels, but |
paul@146 | 42 | this is only to maximise horizontal resolution. With a single channel, |
paul@146 | 43 | horizontal resolution is diminished still further in comparison to the other |
paul@146 | 44 | examples. |
paul@146 | 45 | |
paul@146 | 46 | It would appear that two most viable approaches are the vga-cpu and vga-timer, |
paul@146 | 47 | if only because they produce consistently-sized pixels, retain picture |
paul@146 | 48 | stability under load, and provide operational horizontal scrolling. These |
paul@146 | 49 | approaches provide a tradeoff between performance (vga-timer being faster) and |
paul@146 | 50 | resolution (vga-cpu being better). |