International Journal of Electrical & Computer Sciences IJECS-IJENS Vol:12 No:05
56
The Design and Implementation of VGA
Controller on FPGA
Radi H.R., Caleb W.W.K., M.N.Shah Zainudin., M.Muzafar Ismail.
Faculty of Electronic and Computer Engineering
Universiti Teknikal Malaysia Melaka
Hang Tuah Jaya
76100 Durian Tunggal, Melaka, Malaysia
Abstract— Industrial production machines of today must be
highly flexible in order to competitively account for dynamic and
unforeseen changes in the product demands. Field-programmable
gate arrays (FPGAs) are especially suited to fulfill these
requirements; FPGAs are very powerful, relatively inexpensive,
and adaptable, since their configuration is specified in an abstract
hardware description language. Thus, in order to design and
implement VGA Controller on FPGA, Verilog Hardware
Description Language (Verilog HDL) is used. Verilog HDL is used
to describe and program the gates and counters in FPGA blocks
in order to construct an internal logic circuit in FPGA. The main
purpose of this project is to design and implement VGA
Controller on FPGA. Therefore, the block diagram for VGA
Controller is designed and the VGA Controller program is
written based on the block diagram using Verilog HDL. Also,
functions required for VGA Controller are included in the Verilog
code and test bench is created to test the functions written to
ensure the FPGA VGA Controller works correctly and accurately
without errors. Finally, the completed program is implemented on
FPGAs chip of Altera DE2-115 Development and Educational
Board.
Index Term— Altera DE2-115 Development and Educational
Board, block diagram, Field-programmable gate arrays (FPGAs),
Verilog Hardware Description Language (Verilog HDL), VGA
Controller
I. INTRODUCTION
Field-Programmable Gate Arrays (FPGAs) are digital
integrated circuits (ICs) that contain configurable blocks of
logic along with configurable interconnects between these
blocks [1]. Specifically, an FPGA contains programmable logic
components called logic elements (LEs) and a hierarchy of
reconfigurable interconnects that allow the LEs to be physically
connected. LEs can be configured to perform complex
combinational functions, or merely simple logic gates like
AND and XOR. In most FPGAs, the logic blocks also include
memory elements, which may be simple flip-flops or more
complete blocks of memory [2].
VGA (video graphics array) is a video display standard. It
provides a simple method to connect a system with a monitor
for showing information or images. As a standard display
interface, VGA has been widely used. There is more and more
need in displaying the result of the process in real time as the
fast development of embedded system, especially the
development of high speed image processing [3]. Apart from
that, display will be replacing paper for future. Words of
wisdom; seeing is believing and picture telling thousand words,
display can give correct information about something. Display
is used when people present something. Pictures or texts at
display catch more attention than verbal voice when people are
doing presentation. When people do that kind of presentation,
there must be some device involved in control the display.
Verilog Hardware Description Language (Verilog HDL) is a
popular and standard hardware description language which is
now extensively used by engineers and scientists on digital
hardware designs. Verilog HDL offers many useful features for
digital hardware design, that is, Verilog HDL is a
general-purpose hardware description language that is easy to
learn and easy to use. It is similar in syntax to the C
programming language. Verilog HDL allows different levels of
abstraction to mix in the same model [4]. Thus, a hardware
model can be defined in terms of switches, gates, RTL, or
behavioral code. Also, most popular logic synthesis tools
support Verilog HDL. This makes it the language of choice for
designers [4].
The purpose of this project is to design a VGA Controller
using Verilog HDL and implement it on FPGA. First and
foremost, RGB data are abstracted from an image file in bitmap
format using MATLAB and rearranged using Microsoft Excel.
The arranged data are then stored in a MIF file created by using
Altera Quartus II compiler software. After that, a VGA
Controller program is written in Verilog HDL using Altera
Quartus II compilar software, which will compile, run and
simulate the written program. Once the simulation is
succeeded, the program will be burnt into Altera DE2-115
Board (Fig. 1), which will process the VGA Controller program
and display the image on LCD screen.
II. BASIC KNOWLEDGE
A few basic knowledge need to be understand before starting
the design process.
1210504-05-9090-IJECS-IJENS © October 2012 IJENS
IJENS
International Journal of Electrical & Computer Sciences IJECS-IJENS Vol:12 No:05
A. Field-programmable Gate Arrays
FPGAs are a semiconductor device containing
programmable logic components called "logic blocks", and
programmable interconnects [9]. Logic blocks can be
programmed to perform the function of basic logic gates such
as AND, and XOR, or more complex combinational functions
such as decoders or simple mathematical functions. FPGAs are
also known as reconfigurable devices. These reconfigurable
FPGAs are generally favored in prototype building because the
device does not need to be thrown away every time a change is
made. This allows one piece of hardware to perform several
different functions. Of course, those functions cannot be
performed at the same time. Besides that, FPGAs are standard
parts, they are not designed for any particular function but are
programmed by the customer for a particular purpose [5].
FPGAs have compensating advantages, largely due to the
fact that they are standard parts. There is no wait from
completing the design to obtaining a working chip. The design
can be programmed into the FPGA and tested immediately.
Apart from that, FPGAs are excellent prototyping vehicles.
When the FPGA is used in the final design, the jump from
prototype to product is much smaller and easier to negotiate.
Also, the same FPGA can be used in several different designs,
reducing inventory costs [5].
B. Altera DE2-115 Development and Education Board
The Altera DE2-115 Development and Education board was
designed by professors, for professors. It is an ideal vehicle for
learning about digital logic, computer organization, and
FPGAs. Featuring an Altera Cyclone® IV 4CE115 FPGA, the
DE2-115 board is designed for university and college
laboratory use. It is suitable for a wide range of exercises in
courses on digital logic and computer organization, from
simple tasks that illustrate fundamental concepts to advanced
designs [6].
C. VGA Controller
The monitor screen for a standard VGA format contains 640
columns by 480 rows of picture elements called pixel. An
image is displayed on the screen by turning on and off
individually pixels. Turning on one pixel does not represent
much, but combining numerous pixels generates an image. The
monitor continuously scans through the entire screen, rapidly
turning individual pixels on and off. Although pixels are turned
on one at a time, we get the impression that all the pixels are on
because the monitor scans so quickly. This is why old monitors
with slow scan rates flicker.
Referred to Appendix (Fig. 2), the scanning process starts
from row 0, column 0 in the top left corner of the screen and
moves to the right until it reaches the last column. When the
scan reaches the end of a row, it retraces to the beginning of the
next row. When it reaches the last pixel in the bottom right
corner of the screen, it retraces back to the top-left corner and
repeats the scanning process. In order to reduce flicker on the
screen, the entire screen must be scanned 60 times per second.
This period is called the refresh rate. The human eye can detect
flicker at refresh rates less than 30 Hz. To reduce flicker from
57
interference from fluorescent lighting sources, refresh rates
higher than 60 Hz are sometimes used in PC monitors. During
the horizontal and the vertical retraces, all the pixels are turned
off [7].
The VGA monitor is controlled by 5 signals: red, green, blue,
horizontal synchronization, and vertical synchronization. The
three color signals, collectively referred to as the RGB signal,
control the color of a pixel at a given location on the screen.
They are analog signals with voltages ranging from 0.7 to 1.0
volt. Different color intensities are obtained by varying the
voltage. For simplicity, these three-color signals are treated as
digital signals, so we can just turn each one on or off [7].
The horizontal and vertical synchronization signals are used
to control the timing of the scan rates. Unlike the three analog
RGB signals, these two sync signals are digital signals. In other
words, they take on either logic 0 or logic 1 value. The
horizontal synchronization signal is used to control the
horizontal deflection circuit in the VGA monitor, so that the
start and end of a line of pixels is correctly displayed across the
visible display area of the screen. Meanwhile, the vertical
synchronization signal is used to control the vertical deflection
circuit in the VGA monitor, so that the start and end of a frame
(of lines) is correctly displayed between the top and bottom
edges of the visible display area of the screen. In other words,
the horizontal synchronization signal determines the time it
takes to scan a row, while the vertical synchronization signal
determines the time it takes to scan the entire screen. By
manipulating these two sync signals and the three RGB signals,
images are formed on the monitor screen [7].
To obtain the 640 × 480 screen resolution, a clock with a
25.175 MHz frequency is used. A higher clock frequency is
needed for a higher screen resolution. For the 25.175 MHz
clock, the period is as below:
µs per clock cycle
(1)
Referred to Appendix (Fig. 3), for section B of the horizontal
synchronization signal, 3.77 µs is needed, which is
approximately 95 clock cycles (3.77/0.0397). For section C,
1.79 µs is needed, which is approximately 45 clock cycles.
Similarly, 640 clock cycles (section D) for the 640 columns of
pixels and 20 clock cycles for section E [7].
The total number of clock cycles needed for each row scan is
800 clock cycles (95 + 45 + 640 + 20). Notice that with a
25.175 MHz clock, section D requires exactly 640 cycles,
generating the 640 columns per row. If a different clock speed
is used, a different screen resolution will be obtained.
Because the vertical sync signal is analogous to the
horizontal sync signal, the same calculations can be performed
as with the horizontal sync regions to obtain the number of
cycles needed for each vertical region. However, instead of
using the number of periods of a 25.175 MHz clock, the times
for each vertical region are multiples of the horizontal cycles.
For example, the time for a horizontal cycle is 31.77 µs, and
section P requires 64 µs, which is approximately two horizontal
1210504-05-9090-IJECS-IJENS © October 2012 IJENS
IJENS
International Journal of Electrical & Computer Sciences IJECS-IJENS Vol:12 No:05
cycles (2 × 31.77). Section Q requires 1,020 µs, which equals to
32 horizontal cycles (1,020/31.77). The calculation for section
R is 480 horizontal cycles (15,250/31.77).
D. Verilog Hardware Description Language
Verilog HDL is a description language that can be used to
model a digital system at many levels of abstraction ranging
from the algorithmic-level to the switch-level. The complexity
of the digital system being modeled could vary from that of a
simple gate to a complete electronic digital system, or anything
in between. The digital system can be described hierarchically
and timing can be explicitly modeled within the same
description.
The Verilog HDL language includes capabilities to describe
the behavioral nature of a design, the dataflow nature of a
design, a design’s structural composition, delays and a
waveform generation mechanism including aspects of response
monitoring and verification, all modeled using one single
language. In addition, the language provides a programming
language interface through which the internals of a design can
be accessed during simulation including the control of a
simulation run.
The language not only defines the syntax but also defines
very clear simulation semantics for each language construct.
Therefore, models written in this language can be verified using
a Verilog simulation. The language inherits many of its
operator symbols and constructs from the C programming
language. Verilog HDL provides an extensive range of
modeling capabilities, some of which are quite difficult to
comprehend initially. However, a core subset of the language is
quite easy to learn and use. This is sufficient to model most
application. The complete language, however, has sufficient
capabilities to capture the descriptions from the most complex
chips to a complete electronic system.
E. Altera Quartus II Compiler Software
Altera Quartus is programmable logic device design software
from Altera. Its features include an implementation of VHDL
and Verilog for hardware description, visual edition of logic
circuits, and vector waveform simulation [8].
Quartus II is a software tool produced by Altera for analysis
and synthesis of HDL designs, which enables the developer to
compile their designs, perform timing analysis, examine RTL
diagrams, simulate a design's reaction to different stimuli, and
configure the target device with the programmer [8].
III. DESIGN AND IMPLEMENTATION
A. Block Diagram
Referred to Appendix (Fig. 4), the function of “clock
generator” block is to reduce the frequency of input clock from
50 MHz to 25 MHz. Meanwhile, “vga_sync” block is used to
generate timing and synchronization signals. The “h_count”
and “v_count” indicate the relative positions of the scans and
essentially specify the location of the current pixel while the
“h_sync” signal specifies the required time to scan a row, and
the “v_sync” signal specifies the required time to scan the
58
entire screen. “vga_sync” block also generates the “video_on”
signal which indicates whether to enable or disable the display.
Besides that, “address generator” block is used to generate
address for the “img_data” block by using the “h_sync” and
“v_sync” signal. “img_data” block will get the index data (q)
from the MIF file according to the address generated. Note that
the index data are connected to the “img_index” block to use as
the address. The “img_index” block will get the RGB data (q)
from MIF file according to the address generated (index data).
The RGB data consist of 24-bits, whereas “q [23:16] “, “q
[15:8]” and “q [7:0]” indicate the “R_data”, “G_data” and
“B_data” respectively.
B. Design Flow of VGA Synchronization
First and foremost, reset button is sensed. If reset is equal to 1,
“h_count” and “v_count” will be reset to 0. If reset is equal to 0,
it will check whether the value of “h_count” is equal to 799 or
not. If the value of “h_count” is not equal to 799, it will be
increased by 1. The step after “h_count” increased by 1 will be
discussed later in part (ii) and part (iii) of the flow chart for
“vga_sync” module. Meanwhile, if the value of “h_count” is
equal to 799, it will be reset to 0. This is due to one complete
horizontal scan is start from 0 to 799. Then, it will check
whether the value of “v_count” is equal to 524 or not. If the
value of “v_count” is not equal to 524, it will be increased by 1.
The step after “v_count” increased by 1 will be discussed later
in part (iv) and part (v) of the flow chart for “vga_sync” module.
If the value of “v_count” is equal to 799, it will be reset to 0.
This is due to one complete vertical scan is start from 0 to 524.
While “h_count” is increased by 1, it will check whether the
value of “h_count” is less than 96 or not. The value of
“h_count” less than 96 indicates horizontal retrace. If the value
of “h_count” is less than 96, “cH_display” will be set to 0. The
value of “cH_display” will then store into “h_sync”. If the
value of “h_count” is not less than 96, “cH_display” will be set
to 1 and then stored into “h_sync”.
Also, while “h_count” is increased by 1, it will check
whether the value of “h_count” is less than 784 and greater or
equal to 144 or not. The value of “h_count” less than 784 and
greater or equal to 144 indicates the display area for horizontal
scan. If the value of “h_count” is less than 784 and greater or
equal to 144, “h_valid” will be set to 1. If the value of
“h_count” is not less than 784 and greater or equal to 144,
“h_valid” will be set to 0. The step after “h_valid” is set will be
discussed later in part (vi) of the flow chart for “vga_sync”
module.
While “v_count” is increased by 1, it will check whether the
value of “v_count” is less than 2 or not. The value of “v_count”
less than 2 indicates vertical retrace. If the value of “v_count” is
less than 2, “cV_display” will be set to 0. The value of
“cV_display” will then store into “v_sync”. If the value of
“v_count” is not less than 2, “cV_display” will be set to 1 and
then stored into “v_sync”.
Also, while “v_count” is increased by 1, it will check
whether the value of “v_count” is less than 514 and greater or
equal to 34 or not. The value of “h_count” less than 514 and
greater or equal to 34 indicates the display area for vertical
scan. If the value of “v_count” is less than 514 and greater or
equal to 34, “v_valid” will be set to 1. If the value of “v_count”
1210504-05-9090-IJECS-IJENS © October 2012 IJENS
IJENS
International Journal of Electrical & Computer Sciences IJECS-IJENS Vol:12 No:05
is not less than 514 and greater or equal to 34, “v_valid” will be
set to 0. The step after “v_valid” is set will be discussed later in
part (vi) of the flow chart for “vga_sync” module.
The value of “h_valid” and “v_valid” obtained from part (iii)
and part (v) of the flow chart for “vga_sync” module are used to
multiple each other and the resultant value is stored in
“cDisplay_EN”. After that, the value in “cDisplay_EN” is
stored into “video_on”.
C. Design Flow of VGA Controller
First and foremost, a 25 MHz “vga_clk” is generated from a
50 MHz input clock. Then, “reset” is generated for “vga_sync”
module. The timing diagram for horizontal and vertical scan is
generated also. After that, address is generated for the
“img_data” module by using the “h_sync” and “v_sync” signal
from “vga_sync” module. “img_data” module will get the
index data (q) from the MIF file according to the address
generated. Note that the index data are connected to the
“img_index” module to use as the address. Thus, “img_index”
module will get the RGB_data_raw (q) from MIF file according
to the address generated (index data). Since the RGB_data_raw
consist of 24-bits, it is separated into “q [23:16] “, “q [15:8]”
and “q [7:0]”, which indicate the “R_data”, “G_data” and
“B_data” respectively. Next, the connections to the output port
are made and image is displayed on LCD screen.
59
connection variables and avoid wasting space or having tiny
problem while testing the Verilog HDL codes on FPGA chip. If
there is any warning as mention above, the signals and
constraints may not state completely routed and met in the
design summary.
After finish the whole synthesis process without any error and
warning, device was generated and previewed by using
“programmer” in Altera Quartus II compiler software. The
device was created and it was really to be programmed into
Altera Cyclone IV E – EP4CE115F29C7, the FPGA chip.
IV. CONCLUSION
In conclusion, Field-Programmable Gate Array (FPGA) is
great invention to be used in developing a VGA Controller. By
using Verilog Hardware Description Language (Verilog HDL)
on FPGA, VGA Controller could be constructed easily without
constructing the circuit manually; just to write a behavioral
model or few behavioral models based on its logic flows, then
simulate it with test benches, synthesize it with netlist, and
finally program it onto FPGA. It is very effective as this VGA
Controller only needs new data to change to other design
display. Thus, FPGA-based VGA controller might be a good
choice as it is easy to be designed and tiny to be used.
REFERENCES
D. Implementation
In this project, Altera DE2-115 Development and Education
board is used as a prototype of VGA controller which the
Verilog HDL coding written was downloaded into Altera
Cyclone IV E - EP4CE115F29C7, the FPGA chip. Thus, Altera
Quartus II compiler software was used to be the main synthesis
tool to synthesize the written Verilog HDL coding and program
it onto Cyclone IV E, the FPGA chip.
Some of the information is important to be checked before
burning the code into FPGA chip. The Family and Device are
the important part to be checked before downloading the code
into FPGA; because of it does not work on the FPGA chosen if
the Family and Device set in Altera Quartus II compiler
software are different with the type and version of FPGA which
to be used as prototype of project.
Besides, design goal has to be made sure it is balanced and
there is no error and warning after synthesis processes, and all
signals and constraints are completely routed and met
respectively [10]. If there is any imbalance design, error or
warning, the coding sometimes might still can be downloaded
into FPGA but it might certainly have unnecessary problem in
prototype functionality or using extra gates in FPGA (used
space wasted).
The errors happen normally occurred when there is/are not
synthesizable function code being used in Verilog HDL coding
written. To solve this problem, different method of coding
which synthesizable should be used to replace the method of
coding which is not synthesizable. Moreover, the warnings may
also happen when there is/are “don’t care” or “high impedance”
ports which may be useless or not connected after downloading
into FPGA. Thus, by referring this summary it is easier for us to
remove or connect those missing, extra or miss to add
C. Maxfield, “FPGAs: Instant Access”, Elsevier Ltd., USA, 2008.
Altera Corporation, “What is an FPGA?” (26 October 2011), [Online].
Available: http://www.altera.com/products/fpga.html
[3] D. Bing, Z. Qi, and W. Rui, “The design and implementation of VGA
image controller based on FPGA”, College of Automation, Harbin
Engineering University, China, 2006.
[4] S. Palnitkar, “Verilog HDL - A guide to Digital Design and Synthesis”,
Sun Microsystems, Inc, USA, 1996.
[5] W. Wolf, “FPGA-Based System Design”, Pearson Education, Inc., USA,
2004.
[6] Altera Corporation, DE2-115 Development and Education Board (28
February 2012), [Online]. Available:
http://www.altera.com/education/univ/materials/boards/de2-115/unv-de2
-115-board.html
[7] E. Hwang, “Build A VGA Monitor Controller”, Circuit Cellar, USA,
2004.
[8] Altera Corporation, “Introduction to Quartus II” (28 February 2012),
[Online]. Available:
http://users.ece.gatech.edu/~hamblen/UP3/intro_to_quartus2.pdf
[9] M. Khalil-Hani, “Starter’s Guide to Digital Systems VHDL & Verilog
Design”, Prentice Hall, Malaysia, 2007.
[10] M. D. Ciletti, Modeling, Synthesis, and Rapid Prototyping with the
VerilogHDL. verilog HDL - A guide to Digital Design and Synthesis:
SunSoft Press. 8, 580-592; 1999.MIMOS History (14 April 2012).
[1]
[2]
1210504-05-9090-IJECS-IJENS © October 2012 IJENS
IJENS
International Journal of Electrical & Computer Sciences IJECS-IJENS Vol:12 No:05
60
APPENDIX
Fig. 1. Altera DE2-115 Development and Education Board
Fig. 4. Block Diagram of VGA Controller.
Fig. 2. Scanning pattern of VGA Controller.
Fig. 3. The horizontal and vertical synchronization signal- timing diagram.
1210504-05-9090-IJECS-IJENS © October 2012 IJENS
IJENS