1 VGA显示原理
随着显示技术的不断发展,在业界制定了多种显示协议标准。根据分辨率和刷新频率的不同,显示模式的发展可分为:VGA(640×480像素);SVGA(高级VGA,800×600像素);XGA(可扩展图形阵列,1 024×768像素)。本文可以识别各种刷新频率的上述显示模式,并得到像素频率值,进一步应用于A/D转换器采样模块处理中。
常见的彩色显示器一般由CRT(阴极射线管)构成,彩色是由R(红)、G(绿)、B(蓝)3色组成。显示是采用逐行扫描的方式,阴极射线枪发出的电子束打在涂有荧光粉的荧光屏上,产生RGB三色基,最后合成一个彩色图像。从荧幕的左上方开始向右扫描,每扫完一行图像电子束回到下一行的最左端,每行结束后电子枪回扫的过程中进行消隐。然后从新开始行扫描,消隐……,直到扫到荧幕的右下方,电子束回到荧幕的左上方从新开始新的图像扫描,并且在回到荧幕左上方的过程中进行消隐。在消隐过程中不发射电子束。每一行扫描结束时,用HS(行同步)信号进行同步;扫描完所有的行后用VS(场同步)信号进行同步。
2 FPGA系统实现
本文是基于FPGA对VGA显示模式的识别并计算出像素频率,采用自顶而下的设计思想,将整个系统分为分频模块、HS信号和VS信号计数模块、VGA显示模式选择模块。
2.1分频模块
程序中的分频模块输入是系统时钟,输出下一模块的基准时钟。频率计的设计中,需要一个基准时钟,这里依据外部输入50 MHz的时钟频率来产生0.5 Hz的频率,误差范围为±1/50 MHz。
2.2 HS和VS信号计数模块
HS和VS信号都是低电平有效、占空比小的方波信号。
本模块采用频率计的思想,使用直接测量法。直接将HS和VS信号作为计数时钟,在输入到HS和Vs信号计数模块的基准时钟的高电平时开始对HS和VS信号的计数,在基准时钟的低电平时停止保持计数,并保存计数值。
下面分析本文中的直接测量误差。
被测信号有一个脉冲的上升沿比基准时钟的上升沿早出现很短的时间,那么在FiducialClock=1时所测的被测信号的脉冲数就少了1个;同理,被测信号有一个脉冲的上升沿比基准时钟的下降沿早出现很短的时间,那么在Fiducial Clock=1时所测的被测信号的脉冲数就多了1个。计数时钟的周期记为n,实际输出的计数值记为N,那么,N=n±1,即计数时钟误差范围为±1/(n ±1)。
VGA的HS和VS信号的周期很小。n的最大值为1/43.4。所以上述误差很小。并且,在VGA显示模式选择模块中采用的是范围选择,故这种测量方法的误差在可以容忍的范围内。
2.3 VGA显示模式选择模块
本文主要对VGA显示模式进行识别,在确定显示模式之后,可以用查表直接输出对应模式的像素频率。
根据VGA的显示原理可以看出:在同一计数时间内场同步信号的脉冲数和行同步信号的脉冲数成比率关系。实际应用中将。HS和VS的计数模块的输出数相比后再查找表内的分辨率值就能确定显示模式了,在确定显示模式的同时输出像频。因为,每种显示模式和像频之间有确定的对应关系,并将测到的模式用7段数码管显示。
3 仿真结果
3.1实验1
3.1.1 PC机上设置
依次点击“开始”、“控制面板”、“显示”、“设置”。调节屏幕分辨率为1 024×768。再点击“高级”、“监视器”。调节屏幕刷新频率为85 Hz。
3.1.2 QuartusⅡ6.1的设计工程
在QuartusⅡ6.1中建立项目后,输入各模块的Verilog HDL程序代码,逻辑综合,布局布线,时序分析后生成编程文件。将编程文件下载到FPGA中进行验证。
实验验证:reg_th=116CDh,reg_tv=57h(采用十六进制表示)。即为行频71 kHz,场频为87 Hz。由VGA显示原理可知:由reg_th和reg_tv就能确定VGA显示模式的行数。此值符合在模式1 024×768下一列总的像素点数(包括前沿像素点、后沿像素点、同步头像素点、视频像素点)。在程序部分,采用的是区域选择,避免了由各种误差带来的数值的不匹配。
3.2 实验2
依次点击“开始”、“控制面板”、“显示”、“设置”。调节屏幕分辨率为800×600。再点击“高级”、“监视器”。调节屏幕刷新频率为75 Hz。
实验验证:reg_th=08901h,reg_tv=4Bh(采用十六进制表示)。即行频为47 kHz,场频是75 Hz。由VGA显示原理可知:由reg_th和reg_tv就能确定VGA显示模式的行数。此值符合在模式800 × 600下一列总的像素点数(包括前沿像素点、后沿像素点、同步头像素点、视频像素点)。在程序部分,采用的是区域选择,避免了由各种误差带来的数值的不匹配。