# FreeVGA - Video Timing Information
Pure VGA/SVGA hardware programming (registers, identification, and otherlow-level stuff.)
Author: Joshua Neal
Keywords: VGA SVGA hardware video programming

Home Intro Basics Measurements Horizontal Vertical Considerations Back

Hardware Level VGA and SVGA Video Programming Information Page
Video Timing Information

Introduction
This page is written to give the necessary background on video timing that is useful for video programming. This is not a comprehensive reference on the subject, rather it just gives the minimum information needed to know to perform mode setting and the creation of custom video modes. It includes a small bit of information about the messy side of video adapters, the electrical output and how that is interpreted by the monitor. Much of this information pertains both to monitors and other CRT devices such as television displays, and is less applicable to LCD displays as they have different timing requirements.

Basic Description
The video hardware produces a continuous signal on its output connector, except when it is in reset mode, where the video outputs are held in a single state. The continuous signal is required because the pixel information is only displayed for a short period of time, and relies on the persistence of the phosphor glow on the monitor as well as the ability of eyesight to perform automatic averaging to appear to be a steady image. That signal is usually output on multiple pins of the monitor connector, although it could also be a TV compatible output. LCD displays use a similar technique, although the timing is more advanced and depends on the specific type of panel and its driver circuitry. The signal includes both the pixel data that the monitor displays, as well as timing and "framing" information that the video display uses to drive its internal circuitry.
The image's pixels are "scanned" on to the screen from left to right, top to bottom, and is broken up into "dot periods" or pixels, which is controlled by the "dot clock" for the mode, which is the basis for all the other video timings. Each horizontal "scan line" of dot periods is called a horizontal refresh as it "refreshes" the information on the display in a horizontal line. Many of these scan lines (the amount depending on the video mode), scanning from top to bottom, make up a vertical refresh, also known as a "frame". There are many vertical refreshes per second, where a higher refresh rate produces an image with less flicker.

Timing Measurements
One of the important pieces of terminology to understand is how timing is measured. These include terms such as megahertz, kilohertz, and hertz. The first three are a measure of frequency which is based on the term hertz (abbreviated hz), which can be replaced by the term "Cycles per second." In video timing, hertz is used to describe the frequencies of the timing signals, such as when saying that the vertical refresh frequency is 60 hertz (or 60hz). This means that there are 60 cycles per second, which means that there are 60 vertical refreshes per second. Another case where hertz is used is when saying the horizontal refresh rate, such as when saying 31500 hz, which means that there are 31,500 horizontal refresh cycles per second. One abbreviation frequently found is the term kilohertz (abbreviated Khz) which means 1,000 cycles/per second. For example, 31.5 kilohertz means 31.5 x 1000 hertz, or 31500 hz. This is used to save writing a few zeros and is a bit more concise. Similarly the term megahertz (abbreviated Mhz) is used, which means 1,000,000 cycles/per second. For example, instead of saying that a certain mode uses a 25,000,000 hz dot clock, or saying that it uses a 25,000 Khz clock, it can be concisely be stated by saying that it uses a 25 Mhz dot clock.
Similarly, the periods of time involved in video timing are very short as they are typically small fractions of a second. The terms millisecond, microsecond, and nanosecond are useful for expressing these small periods of time. The term millisecond (abbreviated ms) means one thousandth of a second, or 0.001 seconds. In one second, there are 1,000 milliseconds. This is used to describe things, such as the length of time a vertical refresh takes, for example a 16.6 millisecond vertical refresh means 16.6 thousands of a second, or 0.0166 seconds. In one second, there are 1,000,000 microseconds. The term microsecond (abbreviated us) is used to describe something in terms of millionths of a second, or 0.000001 second. For example the length of a horizontal refresh could be 31.7 microseconds, or 31.7 millionths of a second, 0.0000317 second, or 0.0317 ms. The term nanosecond (abbreviated ns) is used to describe one billionth of a second, or 0.000000001 seconds. There are 1,000,000,000 nanoseconds in one second. One circumstance where this is used, is to describe the period of time one dot period takes. For example, one dot period could be stated as 40 nanoseconds, 0.04 us, 0.00004 ms, or 0.00000004 seconds. In each case, the most concise term is used, to provide a shorter, more concise description.
Because the unit hertz is defined using a unit of time (second), the period of one cycle can be determined by division. The simplest example is 1 hz, where the length of the cycle, by definition would be 1 second. For other values, it can be calculated according to the following formula:

- Period (in seconds) = 1 / frequency (in hertz)

For example, a 60 hertz vertical refresh would last 1 / 60 second, which is approximately 0.0166 seconds, or 16.6 ms. Similarly, a 31.5 Khz horizontal refresh would be 1 / 31500 second, which is approximately 0.000031 seconds, or 31.7 us. A 25 Mhz dot clock would produce a dot period of 1 / 25000000 second, which is 0.00000004 seconds, or 40 ns. If the period of a cycle is known, then the frequency can be calculated as:

- Frequency (in hertz) = 1 / Period (in seconds).

For example, a 16.6 ms period would equate to 1 / 0.0166, which produces a frequency of approximately 60 hz. Similarly a 31.7 us period would produce approximately a 31.5 Khz frequency, and a 40 ns period would produce a 25 Mhz frequency.

Horizontal Timing
From a monitor's standpoint, the timing is fairly simple. It detects the horizontal sync pulses on the hsync line, then based on the polarity, frequency, and/or duration of those pulses sets up its horizontal scan circuitry to scan across the screen at the desired rate. During this period it continuously displays the signal input on the analog RGB pins/connectors. It is important to to know the horizontal sync frequency ranges of the monitor, as well as the acceptable width of the sync pulse for those sync ranges. If the width of the sync pulse is incorrect, it can make the displayed information too large or too small, as well as possibly preventing the monitor from synchronizing to the generated signal. The acceptable range of sync pulse width and polarity for a given frequency should be given in the specifications for the monitor; however, this is frequently overlooked by the manufacturer. It is recommended to contact the manufacturer, otherwise the result has to be determined by trial and error which can be damaging to the monitor's circuitry.
In addition to those that control horizontal sync frequency and width, there are other horizontal timing registers which tell the display generation hardware when to output the active display, when to output the overscan, and when to perform blanking. The active display is when pixel data from the frame buffer are being output and displayed. This could also be overlaid by data from another source, such as a TV or MPEG decoder, or a hardware cursor. The overscan is the border to the left and right of the screen. This was more important on older video hardware such as those monitors lacking horizontal and vertical picture controls, and is provided for compatibility reasons although current hardware typically reduces the need for this portion completely. The blanking period is used during the retrace portion of the horizontal display cycle which is the period in which the horizontal sweeps from the right of the screen back to the left. Outputting non-zero intensities during this period would end up being stretched, in reverse across the end of the current scan line to the beginning of the next scan line which, while interesting and possibly useful in a small number of circumstances. would add a bit of blurring to the image. Blanking is signaled to the monitor by sending zero intensities of the red, green, and blue components on the analog lines.
In the display generator, horizontal timings are specified by the number of dot periods they take. The dot period is controlled by selecting the desired dot clock frequency by programming certain registers.

Vertical Timing
Vertical timing is nearly the same as the horizontal timing, except that it controls the vertical movement of the display scan, spacing the scan lines the right width apart so that they seem to form a rectangular image. The monitor detects the vertical sync pulses on the vsync line, then based on the polarity, frequency, and/or duration of those pulses sets up its vertical circuitry to scan down the screen at the desired rate. It is necessary to know the vertical sync frequency ranges for a given monitor, and the range of acceptable vertical sync widths and polarities for those ranges. The rage of vertical sync frequencies supported by the monitor are nearly always given my the monitor's specifications, but like the horizontal sync widths, the vertical sync widths are not commonly specified. Contact the manufacturer, as attempting to guess the correct vertical sync width can possibly cause the monitor to fail.
As well as being programmed with the vertical sync frequency and pulse width, the display generation hardware has other registers which control when to output the active display, when to output the overscan, and when to perform blanking. In vertical terms, the active display is the scan lines which contain horizontal active display periods. The overscan is the border on top and bottom of the screen and, if present, consists of one or more entire scan lines in which the active display period is replaced with the overscan color. The blanking is used during the vertical retrace, and consists of one or more (usually more) scan lines in which the active display and overscan periods are replaced with blanking period, making the entire line effectively blanking. This prevents intensity from overlaying the screen during the vertical retrace where the monitor sweeps the vertical back to the top of the screen. Non-zero intensities output during this period would be written in a zig-zag pattern from the bottom to the top of the screen. In the display generator, the vertical timings are specified in terms of how many horizontal sync periods they take.
Programming Considerations
For maximum flexibility, video timings should be configurable by the end users to allow for the specifications of their monitor. However, it is probably a wise idea to maintain a table of monitors and their rated specifications, to allow the users to select thieir monitor and determine whether or not the configured video timings are within the rated specifications of their monitor and warn the user about this. There is a distinct need for a comprehensive and accurate software-usable database of monitor specifications in a platform and video hardware independent form with sufficient information for a program to both select timings for a particular video mode, as well as verify that a given set of timings will function properly on the end-user's hardware. This database should contain a human readable description of the monitor make and model, as well as software parsable fields giving corresponding ranges of horizontal and vertical frequencies and sync polarities for those ranges if applicable, as well as a method of determining the acceptable widths of horizontal and vertical sync pulses for a given frequency in the corresponding rages. Framing information could be included in this table in a frequency independent fashion, although this is something that can be safely adjusted by the end user without risk of damage to the monitor, thus it is preferrable to provide a method or interface for the end-user to adjust these parameters to their preference.

Notice: All trademarks used or referred to on this page are the property of their respective owners.
All pages are Copyright © 1997, 1998, J. D. Neal, except where noted. Permission for utilization and distribution is subject to the terms of the FreeVGA Project Copyright License.