VGA图像显示控制电路VHDL设计
一、实验设计目的
学习VGA图像显示控制电路设计。
要求:
1、VGA正常工作;
2、图像显示;
二、实验设计原理
1、VGA如果正常工作?
普通的VGA显示器引出线共含有5个信号:
R、G、B:三基色信号
HS:行同步信号
VS:场同步信号
这五个信号的时序驱动,严格遵循“VGA工业标准”
颜色编码如下:
如果VGA显示真彩色BMP图像,则要R、G、B三个分量各8位,即24位表示一个像素值,很多情况下还采用32位表示一个像素值。
为了节省显存的存储空间,可采用高彩色图像,即每个像素值由16位表示,R、G、B三个分量分别使用5位、6位、5位,比真彩色图像数据量减少一半,同时又能满足显示效果。
(2)VGA行频和场频
时钟频率(Clock frequency) :25.175 MHz (像素输出的频率)
行频(Line frequency):31469 Hz
场频(Field frequency ) :59.94 Hz (每秒图像刷新频率)
(3)VGA实际的行频和场频
我们提供的时钟频率(Clock frequency)是 :20MHz (开发板的频率)
如何得到时钟频率25M Hz ?
利用锁相环来进行分频,得到25MHz的信号
如何得到行频(Line frequency):31469 Hz?答:分频:行频的近似值 25M/800=31250Hz
如何得到场频(Field frequency ):59.94 Hz (每秒图像刷新频率)?答:还是分频:得到场频的近似值 25M/800/525=59.52Hz
那么VGA的工作频率进行分频时,行频分频计数为什么是800?
场频分频计数为什么是525?
(4)VGA的工作时序图
(5)VGA工业标准显示模式
要求:
1)行周期为800像素时间点,场周期为525像素时间点;
2)行同步、场同步头脉冲要求是负极性脉冲。
(6)VGA正常工作程序设计
A.行频频率和行像素点计数
--this is Horizonal counter always@(posedge clk) begin if(hcnt < 800) then hcnt <= hcnt + 1; else hcnt <= (others => '0'); end
B.场频频率和场像素点计数
--this is Vertical counter always@(posedge clk) begin if (hcnt == 640+8 ) then if(vcnt < 525) then vcnt <= vcnt + 1; else vcnt <= (others => '0'); end
如何得到行、场同步脉冲信号呢?
--this is hs pulse process(clk) begin if (rising_edge(clk)) then if((hcnt>= 640+8+8) and (hcnt<640+8+8+96 )) then hs <= '0'; else hs <= '1'; end if; end if; end process;
--this is vs pulse process(vcnt) begin if ((vcnt >= 480+8+2) and (vcnt < 480+8+2+2)) then vs <= '0'; else vs <= '1'; end if; end process;