0% found this document useful (0 votes)
237 views43 pages

Vga Display VHDL

The document discusses the basics of VGA display standards including resolution, refresh rate, and color support. It describes the operation of CRT monitors including horizontal and vertical scanning patterns. It provides details on VGA synchronization including timing parameters and regions. It includes VHDL code for a VGA synchronization module that generates horizontal and vertical sync signals along with pixel counters based on the VGA timing standard.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
237 views43 pages

Vga Display VHDL

The document discusses the basics of VGA display standards including resolution, refresh rate, and color support. It describes the operation of CRT monitors including horizontal and vertical scanning patterns. It provides details on VGA synchronization including timing parameters and regions. It includes VHDL code for a VGA synchronization module that generates horizontal and vertical sync signals along with pixel counters based on the VGA timing standard.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 43

Lecture 8

VGA Display
Part 1
VGA Synchronization
Required Reading
• Old Edition of the Textbook 2008 (see Piazza)
P. Chu, FPGA Prototyping by VHDL Examples
Chapter 12, VGA Controller I: Graphic

• Source Code of Examples


http://academic.csuohio.edu/chu_p/rtl/fpga_vhdl.html

• Basys 3 FPGA Board Reference Manual


7. VGA Port

2
Recommended Reading

• New Edition of the Textbook 2017:


P. Chu, FPGA Prototyping by VHDL Examples
Chapter 20 Introduction to the Video System

• Source Code of Examples


http://academic.csuohio.edu/chu_p/rtl/fpga_mcs_vhdl.html

3
Basics

4
VGA – Video Graphics Array

• Video display standard introduced in the late 1980’s


• Widely supported by PC graphics hardware
and monitors
• Used initially with the CRT (cathode ray tube)
monitors
• Later adopted for LCD (liquid-crystal display)
monitors as well

5
VGA – Characteristic Features

• Resolution: 640x480
• Refresh Rate: 25Hz, 30Hz, 60Hz (frames / second)
• Display: up to 256 colors (8 bits)
• RGB: Red, Green and Blue analog signals

6
Operation of a CRT monitor

7
CRT Monitor – Conceptual Diagram

8
CRT Monitor – Scanning Pattern

9
CRT Monitor – Horizontal Scan

10
VGA Controller

11
VGA Controller – Simplified View

12
Three-bit VGA Color Combinations

13
VGA Synchronization

14
Horizontal Synchronization

15
Four regions of hsync

• Display: 0..639, width = 640


• Right border (front porch): 640..655, width = 16
• Retrace (horizontal flyback): 656..751, width=96
• Left border (back porch): 752..799, width=48

16
Vertical Synchronization

17
Four regions of vsync

• Display: 0..479, width = 480 lines


• Bottom border (front porch): 480..489, width = 10
• Retrace (vertical flyback): 490..491, width=2
• Top border (back porch): 491..524, width=33

18
Pixel Rate

• p: the number of pixels in a horizontal scan line


p = 800 pixels/line
• l: the number of horizontal lines in a screen
l = 525 lines/screen
• s: the number of screens per second (refresh rate)
s = 60 screens/second

Pixel Rate = p Ÿ l Ÿ s = 25 Mpixels/second

19
VHDL Code of
VGA Sync

20
Assumptions

• 50 MHz clock
=> 2 clock cycles per pixel
=> p_tick generated every second clock period
used as an enable for the horizontal counter

21
VHDL Code of VGA Sync (1)
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity vga_sync is
port(
clk, reset: in std_logic;
hsync, vsync: out std_logic;
video_on, p_tick: out std_logic;
pixel_x, pixel_y: out std_logic_vector (9 downto 0)
);
end vga_sync;

22
VHDL Code of VGA Sync (2)
architecture arch of vga_sync is

-- VGA 640-by-480 sync parameters


constant HD: integer:=640; --horizontal display area
constant HF: integer:=16 ; --h. front porch
constant HR: integer:=96 ; --h. retrace
constant HB: integer:=48 ; --h. back porch

constant VD: integer:=480; --vertical display area


constant VF: integer:=10; --v. front porch
constant VR: integer:=2; --v. retrace
constant VB: integer:=33; --v. back porch

23
VHDL Code of VGA Sync (3)
-- mod-2 counter
signal mod2_reg, mod2_next: std_logic;

-- sync counters
signal v_count_reg, v_count_next: unsigned(9 downto 0);
signal h_count_reg, h_count_next: unsigned(9 downto 0);

-- output buffer
signal v_sync_reg, h_sync_reg: std_logic;
signal v_sync_next, h_sync_next: std_logic;

-- status signal
signal h_end, v_end, pixel_tick: std_logic;

24
pixel_tick and pixel_x generation

pixel_x

25
HSC: horizontal sync counter
(combinational logic)

26
pixel_x generation (alternative view)

27
VHDL Code of VGA Sync (4)
process (clk, reset)
begin
if reset='1' then
mod2_reg <= '0';
v_count_reg <= (others=>'0');
h_count_reg <= (others=>'0');
v_sync_reg <= '0';
h_sync_reg <= '0';
elsif (clk'event and clk='1') then
mod2_reg <= mod2_next;
v_count_reg <= v_count_next;
h_count_reg <= h_count_next;
v_sync_reg <= v_sync_next;
h_sync_reg <= h_sync_next;
end if;
end process;
28
VHDL Code of VGA Sync (5)
-- mod-2 circuit to generate 25 MHz enable tick
mod2_next <= not mod2_reg;

-- 25 MHz pixel tick


pixel_tick <= '1' when mod2_reg='1' else '0';

-- status
h_end <= -- end of horizontal counter
'1' when h_count_reg=(HD+HF+HR+HB-1) else --799
'0';
v_end <= -- end of vertical counter
'1' when v_count_reg=(VD+VF+VR+VB-1) else --524
'0';

29
VHDL Code of VGA Sync (6)
-- mod-800 horizontal sync counter
process (h_count_reg, h_end, pixel_tick)
begin
if pixel_tick='1' then -- 25 MHz tick
if h_end='1' then
h_count_next <= (others=>'0');
else
h_count_next <= h_count_reg + 1;
end if;
else
h_count_next <= h_count_reg;
end if;
end process;

30
pixel_y generation

31
VSC: vertical sync counter
(combinational logic)

32
pixel_y generation (alternative view)

33
VHDL Code of VGA Sync (7)
-- mod-525 vertical sync counter
process (v_count_reg, h_end, v_end, pixel_tick)
begin
if pixel_tick='1' and h_end='1' then
if (v_end='1') then
v_count_next <= (others=>'0');
else
v_count_next <= v_count_reg + 1;
end if;
else
v_count_next <= v_count_reg;
end if;
end process;

34
VHDL Code of VGA Sync (8)
-- horizontal and vertical sync, buffered to avoid glitch
h_sync_next <=
‘0' when (h_count_reg >= (HD+HF)) --656
and (h_count_reg <= (HD+HF+HR-1)) else --751
‘1';
v_sync_next <=
‘0' when (v_count_reg >= (VD+VF)) --490
and (v_count_reg <= (VD+VF+VR-1)) else --491
‘1';
-- video on/off
video_on <=
'1' when (h_count_reg<HD) and (v_count_reg<VD) else
'0';

35
h_sync, v_sync registers

36
h_sync_next logic

37
Horizontal Synchronization

38
Vertical Synchronization

39
VHDL Code of VGA Sync (9)
-- output signal
hsync <= h_sync_reg;
vsync <= v_sync_reg;
pixel_x <= std_logic_vector(h_count_reg);
pixel_y <= std_logic_vector(v_count_reg);
p_tick <= pixel_tick;

end arch;

40
VGA Sync Testing Circuit (1)
library ieee;
use ieee.std_logic_1164.all;
entity vga_test is
port (
clk, reset: in std_logic;
sw: in std_logic_vector(2 downto 0);
hsync, vsync: out std_logic;
rgb: out std_logic_vector(2 downto 0)
);
end vga_test;

architecture arch of vga_test is


signal rgb_reg: std_logic_vector(2 downto 0);
signal video_on: std_logic;

41
VGA Sync Testing Circuit (2)
begin
vga_sync_unit: entity work.vga_sync
port map(clk=>clk, reset=>reset,
hsync=>hsync, vsync=>vsync, video_on=>video_on,
p_tick=>open, pixel_x=>open, pixel_y=>open);
process (clk, reset)
begin
if reset='1' then
rgb_reg <= (others=>'0');
elsif (clk'event and clk='1') then
rgb_reg <= sw;
end if;
end process;
rgb <= rgb_reg when video_on='1' else "000";
end arch;
42
VGA Controller – Simplified View

43

You might also like