From Hamsterworks Wiki!
Here are the VGA timings I use within my projects.
The 640x480 mode is good, as most monitors work with 25MHz, it is also slow enough that timing isn't an issue. The 800x600 mode requires a lot more data, but 40MHz still gives a lot of time.
|Mode||MHz||ns||H Visible||H Front||H Sync||H Back||H Whole||HSync||V Visable||V Front||V Sync||V Back||V Whole||Vsync|
|1280x720x60 (aka 720p)||74.25||13.47||1280||72||80||216||1648||+||720||3||5||22||750||+|
|1920x1080x60 (aka 1080p)||148.50||6.73||1920||88||44||148||2200||+||1080||4||5||36||1125||+|
|3840x2160x30 (aka 2160p) (see note)||265.00||3.80||3840||32||48||122||4400||+||2160||5||3||23||2190||+|
|3840x2160x30 (aka 2160p) (see note)||297.00||3.37||3840||156||88||296||4400||+||2160||2||8||72||2250||+|
By using the DDR feature of an FPGA's output buffers it is possible to split a cycle in half. Two and a half 100MHz cycles nicely makes 25ns, allowing a project to run at 100MHz but still generate a 40MHz signal
- The first set of 2160p timings are from a Viewsonic monitor's EDID data. They may not be accurate as they suspiciously look as if the timings have been tweaked to fit down a dual channel DisplayPort interface. However they do work.
- The second set of 3840x2160 timings are from http://ubuntuforums.org/showthread.php?t=2164924 and have not been verified. They look wrong as the pixel clock was 307MHz, but should probably be 297.0 MHz to give 30Hz.