Generating a VGA monitor signal using the XSA-100board
We currently have a working implementations of a 1288x480 VGA display using a 50 MHz clock from the onboard oscillator. To get to the file click here and download the module.
The VGA module performs all the synchronization and timing for VGA display. All you need to do is provide the colors to be displayed and you can make pretty pictures on your monitor. The VGA interface on the XS boards require 8 signals: 2 synchronization signals which the VGA module provides and 6 color signals (2 bits each for red, green and blue). Your job is to figure out what colors you want to display. The module will cycle through all the pixels on the screen and tells the user what the current location is with a pair of counters. The user must provide a color value at each location.
The module only has 1 input, which is the clock. When using the VGA module, you will need to clock your system with the onboard clock (at 50 MHz) from pin 88. The module has 5 outputs: vga_h_sync, vga_v_sync, CounterX, CounterY, and Valid. The 2 sync lines should be routed directly to the VGA output pins. The 2 counters are the coordinates of the current pixel location. However, the counters do not always correspond to visible pixels, so you only need to provide valid output when Valid is asserted. In fact, asserting non-zero values on the color lines when valid is not asserted can cause errors in the display. See the online documentation for more details on using the VGA port on the boards.
The interface is the module sync_gen50.
To understand how it works, it's best to look through the example "program" vgaflag.v, which uses the two above modules to display a plaid flag on the screen. Also required is a constraints file which specifies the pin locations for those precious signals.
Then, when creating your own project in Verilog, just use the two modules in the same way, and create a corresponding (or identical, if your signal names are the same) constraints file. easy to understand.