基于Verilog的VGA驱动设计(一)VGA时序分析
2009-11-28 17:40
513 查看
基于Verilog的VGA驱动设计(一)VGA时序分析
http://blog.ednchina.com/tengjingshu/219303/message.aspx
VGA时序分析
电阻DAC转换网络和640X480的VGA时序图:
图1
扫描频率
显示器采用光栅扫描方式,即轰击荧光屏的电子束在CRT屏幕上从左到右(受水平同步信号HSYNC控制)、从上到下(受垂直同步信号VSYNC控制)做有规律的移动。光栅扫描又分逐行扫描和隔行扫描。电子束采用光栅扫描方式,从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后,又回到下一条水平线的左端,重复上面的过程;当电子束完成右下角一点的扫描后,形成一帧。此后,电子束又回到左上方起点,开始下一帧的扫描。这种方法也就是常说的逐行扫描显示。
HorizonalTiming
图2
图3
Horizonaltiminginformation水平扫描时序
图4
Notes:
·Activeareaisactuallyanactiveareaaddedwith6overscanborderpixels(insomeotherVGAtimingtablesthoseborderpixelsareincludedinbackandfrontporch)
Verticaltiminginformation垂直扫描时序
图5
Notes:
·Activeareaisactuallyanactiveareaaddedwith4overscanborderlines(insomeotherVGAtimingtablesthoseborderlinesareincludedinbackandfrontporch)
·NotethanwhentheactivepartofVGApageiswidened,itpassesbytherisingedgeoftheverticalsyncsignalinsomemodes(markedwith*)
根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用Spartan-3EStarterKit板上的50MHz的有源晶振。为了显示器显示效果好,采用刷新频率为72Hz。
以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns
水平扫描Horizonal(Line)
A水平(行)周期为1040个像素(Pix),时间为1040x20ns=20.8us;
B同步脉冲为120像素(Pix);
C后沿为61个像素(Pix);
D有效时间为806个像素(Pix);
E前沿为53个像素。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////水平扫描参数的设定
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////parameterLinePeriod=12'd1040;
parameterH_SyncPulse=10'd120;
parameterH_BackPorch=10'd61;
parameterH_ActivePix=10'd806;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////水平扫描计数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)x_cnt<=1;
elseif(x_cnt==LinePeriod)x_cnt<=1;
elsex_cnt<=x_cnt+1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////水平扫描信号hsync产生
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)hsync_r<=1'b1;
elseif(x_cnt==1)hsync_r<=1'b0;//产生hsync信号
elseif(x_cnt==H_SyncPulse)hsync_r<=1'b1;
垂直扫描Vertical(Frame)
O垂直扫描周期为666个行扫描,时间为666x1040x20ns=13853us;
P同步脉冲为6个行扫描,时间为6x1040x20ns=125us;
Q后沿为21个行扫描,时间为21x1040x20ns=436us;
R有效时间为604个行扫描,时间为604x1040x20ns=12563us;
S前沿为35个行扫描,时间为35x1040x20ns=728us。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描参数的设定
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
parameterFramePeriod="10"'d666;
parameterV_SyncPulse=10'd6;
parameterV_BackPorch=10'd21;
parameterV_ActivePix=10'd604;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描计数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)y_cnt<=1;
elseif(y_cnt==FramePeriod)y_cnt<=1;
elseif(x_cnt==LinePeriod)y_cnt<=y_cnt+1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描信号hsync产生
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)vsync_r<=1'b1;
elseif(y_cnt==1)vsync_r<=1'b0;//产生vsync信号
elseif(y_cnt==V_SyncPulse)vsync_r<=1'b1;
并不是每个像素都能显示的,只有在有效区域像素区域内才能显示RGB
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描信号hsync产生
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
wirevalid;//有效显示区标志
assignvalid=
(x_cnt>=(H_SyncPulse+H_BackPorch))&&
(x_cnt<(H_SyncPulse+H_BackPorch+H_ActivePix))&&
(y_cnt>=(V_SyncPulse+V_BackPorch))&&
(y_cnt<(V_SyncPulse+V_BackPorch+V_ActivePix));
下面是测量逐行扫描60HZ的电视盒的VGA时序波形:
图6水平—垂直同步信号
图7水平—垂直同步信号
图8RED-BLUE颜色信号
图9水平同步-R颜色
图10颜色R-垂直同步
图11
初步整理的时序
行周期32us(频率31.3Hz)
行同步脉冲时间7us
场频率60Hz
参考资料
1)VGASignalGenerationwiththeXSBoard
2)CPLD驱动VGA显示器
http://blog.21ic.com/user1/636/archives/2007/43935.html
(图1)
3)VGAtiminginformation
http://www.epanorama.net/documents/pc/vga_timing.html
(图2、图3、图4、图5)
4)瑞芯科技设计示例RHic013:使用FPGA控制VGA显示
5)VGAController,Altium
http://www.dzsc.com/dzbbs/20070204/200765205519734395.html
(图6、图7、图8、图9、图10、图11)
VGA时序分析
电阻DAC转换网络和640X480的VGA时序图:
图1
扫描频率
显示器采用光栅扫描方式,即轰击荧光屏的电子束在CRT屏幕上从左到右(受水平同步信号HSYNC控制)、从上到下(受垂直同步信号VSYNC控制)做有规律的移动。光栅扫描又分逐行扫描和隔行扫描。电子束采用光栅扫描方式,从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后,又回到下一条水平线的左端,重复上面的过程;当电子束完成右下角一点的扫描后,形成一帧。此后,电子束又回到左上方起点,开始下一帧的扫描。这种方法也就是常说的逐行扫描显示。
HorizonalTiming
图2
A(us)LinePeriod
B(us)Syncpulselenght
C(us)Backporch
D(us)Activevideotime
E(us)Frontporch
VerticalTiming
图3
O(ms)FramePeriod
P(ms)Synclength
Q(ms)Backporch
R(ms)Activevideotime
S(ms)Frontporch
Horizonaltiminginformation水平扫描时序
图4
Notes:
·Activeareaisactuallyanactiveareaaddedwith6overscanborderpixels(insomeotherVGAtimingtablesthoseborderpixelsareincludedinbackandfrontporch)
Verticaltiminginformation垂直扫描时序
图5
Notes:
·Activeareaisactuallyanactiveareaaddedwith4overscanborderlines(insomeotherVGAtimingtablesthoseborderlinesareincludedinbackandfrontporch)
·NotethanwhentheactivepartofVGApageiswidened,itpassesbytherisingedgeoftheverticalsyncsignalinsomemodes(markedwith*)
根据上面的水平和垂直扫描时序可以分析显示800x600模式,FPGA系统时钟采用Spartan-3EStarterKit板上的50MHz的有源晶振。为了显示器显示效果好,采用刷新频率为72Hz。
以下以系统时钟频率为50MHz,显示器显示800x600模式为例分析水平扫描和垂直扫描时序:系统时钟周期为1/50MHz=20ns
水平扫描Horizonal(Line)
A水平(行)周期为1040个像素(Pix),时间为1040x20ns=20.8us;
B同步脉冲为120像素(Pix);
C后沿为61个像素(Pix);
D有效时间为806个像素(Pix);
E前沿为53个像素。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////水平扫描参数的设定
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////parameterLinePeriod=12'd1040;
parameterH_SyncPulse=10'd120;
parameterH_BackPorch=10'd61;
parameterH_ActivePix=10'd806;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////水平扫描计数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)x_cnt<=1;
elseif(x_cnt==LinePeriod)x_cnt<=1;
elsex_cnt<=x_cnt+1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////水平扫描信号hsync产生
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)hsync_r<=1'b1;
elseif(x_cnt==1)hsync_r<=1'b0;//产生hsync信号
elseif(x_cnt==H_SyncPulse)hsync_r<=1'b1;
垂直扫描Vertical(Frame)
O垂直扫描周期为666个行扫描,时间为666x1040x20ns=13853us;
P同步脉冲为6个行扫描,时间为6x1040x20ns=125us;
Q后沿为21个行扫描,时间为21x1040x20ns=436us;
R有效时间为604个行扫描,时间为604x1040x20ns=12563us;
S前沿为35个行扫描,时间为35x1040x20ns=728us。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描参数的设定
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
parameterFramePeriod="10"'d666;
parameterV_SyncPulse=10'd6;
parameterV_BackPorch=10'd21;
parameterV_ActivePix=10'd604;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描计数
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)y_cnt<=1;
elseif(y_cnt==FramePeriod)y_cnt<=1;
elseif(x_cnt==LinePeriod)y_cnt<=y_cnt+1;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描信号hsync产生
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
always@(posedgeclkornegedgerst_n)
if(!rst_n)vsync_r<=1'b1;
elseif(y_cnt==1)vsync_r<=1'b0;//产生vsync信号
elseif(y_cnt==V_SyncPulse)vsync_r<=1'b1;
并不是每个像素都能显示的,只有在有效区域像素区域内才能显示RGB
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////垂直扫描信号hsync产生
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
wirevalid;//有效显示区标志
assignvalid=
(x_cnt>=(H_SyncPulse+H_BackPorch))&&
(x_cnt<(H_SyncPulse+H_BackPorch+H_ActivePix))&&
(y_cnt>=(V_SyncPulse+V_BackPorch))&&
(y_cnt<(V_SyncPulse+V_BackPorch+V_ActivePix));
下面是测量逐行扫描60HZ的电视盒的VGA时序波形:
图6水平—垂直同步信号
图7水平—垂直同步信号
图8RED-BLUE颜色信号
图9水平同步-R颜色
图10颜色R-垂直同步
图11
初步整理的时序
行周期32us(频率31.3Hz)
行同步脉冲时间7us
场频率60Hz
参考资料
1)VGASignalGenerationwiththeXSBoard
2)CPLD驱动VGA显示器
(图1)
3)VGAtiminginformation
(图2、图3、图4、图5)
4)瑞芯科技设计示例RHic013:使用FPGA控制VGA显示
5)VGAController,Altium
6)VGA接口时序波形
(图6、图7、图8、图9、图10、图11)
相关文章推荐
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- [Craftor原创]基于Verilog的I2C总线驱动设计
- 基于“事件”驱动的领域驱动设计(DDD)框架分析
- 【翻译】基于Verilog设计的时序注意事项【Quartus II】【Digital Logic】
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- 基于basys2驱动LCDQC12864B的verilog设计图片显示
- 基于Verilog的VGA显示驱动
- FPGA设计-时序约束(中篇-实例分析)
- LCD驱动设计与分析 --GQ2440+LTV350QV_F04 + LINUX2.6.22内核
- 【转】FPGA高级设计之时序分析和收敛
- 基于testNg的测试框架设计(一)数据驱动
- 基于Gpio的Linux字符型驱动设计--…
- 基于UML项目的分析与设计
- 基于Linux-3.10.0-229内核的Baytrail eMMC驱动分析之一概述
- 基于Sip的P2P设计和原理分析
- 我也来分析Windows CE串口驱动----基于Windows CE 5.0 S3C2440 BSP
- 基于 mini2440 电阻式触摸屏(四):mini2440触摸屏驱动分析
- 艾伟:基于web信息管理系统的权限设计分析和总结
- linux sd卡驱动分析,基于mini2440,sdio mmc sd卡驱动编写
- 基于模型驱动的自动化测试设计