基于FPGA的VGA显示设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正文
一,VGA时序标准
VGA是一种常用的显示输出接口,采用行场扫描控制结合RGB三色合成原理,输出
显示信号。每个VGA接口为15针接口,分三行排布,每行5针。如图所示:
图1.1 VGA接口
15针并未全部使用,有效的信号线共5根,即红绿蓝三基色信号线:R,G,B,每线电压从0V到0.71V变化,表示无色到饱和,依据电平高低,显示颜色的饱和程度。行同步控制信号,Hsync,控制每行扫描像素的有效和失效。场同步:Vsync,控制场方向,即整个图像显示过程的时间长度,场同步中的显示部分的时间长度,等于每行扫描时间的总和。
在不同刷新频率下,显示每个像素的时间是不同的,相同刷新频率下,每个像素显示时间是固定的,所以,不同的每个像素写入时间,导致了分辨率的不同。因为VGA的显示是逐行扫描,每行从左到右扫描,到了行尾,回归到下一行的行头,继续向尾部扫描。所以,显示原理是逐次写入每行的像素数据,直到整幅图像显示成功为止。
VGA显示的数据是不能锁存的,所以必须一次又一次的连续输入数据,72Hz的刷新率下,一秒钟显示72幅图像,所以,需要连续写入72幅图像,才能达到一秒的显示效果。所以,VGA显示图像,要反反复复写入图像数据,才能得到持续的显示效果。
图1.2 VGA接口线序
VGA显示,无法做到类似于TFT液晶屏的定点写入,VGA是扫描式暂时显示,所以时序显得尤为重要,时序出现失误,图像会出现走形,无法达到准确效果。而显示的时序控制主要依靠两条数据通道:行同步和场同步,即Hsync和Vsync,其控制了扫描显示的起点和终点,同时控制扫描起点的时间,通过时间的控制,达到确定的显示效果。
具体的控制时序图如下:
图1.3 VGA 同步时序
VGA显示中,以每个像素写入时间作为FPGA时钟周期,所以每个时钟周期写入一组RGB像素值。逐行写入,所以每行数据显示的结果,拼凑成一帧图像,72Hz下,每秒显示72帧图像。由于本设计要求静态显示效果,所以,我们只定义一帧的数据,最后无限循环执行即可。
行同步信号用一个上升脉冲表示,脉冲以前称为前沿时间,用Tfp表示,脉冲后面还有一段时间消隐,叫后沿时间,用Tbp表示,场同步信号控制的方式,按时间先后为:上升脉冲,回归低电平,后沿消隐,正常显示时间,前沿消隐,一帧图像显示完毕,上升脉冲······以此类推。所以,场同步控制显示时,要注意先留出高电平脉冲时间,即Tpulse,接下来留出后沿时间,即Tbp,然后开始行同步控制扫描过程,全部显示完毕,要留出前沿时间,即Tfp,到达前沿时间之后,不允许进行像素写入,即写入无效。
针对行扫描,参照下图时序:
图1.4 行同步时序
行同步即控制每行扫描过程,扫描由高电平脉冲启动,到脉冲回归低电平,首先要预留出后沿消隐时间,即Tbp.之后到了显示部分,即Tdisp,每个时钟周期写入一组RGB值,为一个像素的数据。写完一行之后,到了前沿消隐时间,即Tfp.这段时间不能写入数据。当Tfp过后,下一个扫描周期,从高电平脉冲开始。周而复始,知道到达屏幕最底行。扫描至一帧画面完成。
本设计要求网格线为白色,即RGB均为1,其余为黑色,即RGB均为0。由于显示在800X600的分辨率以下,72Hz刷新率,需参照具体时序参数。
具体参数参照下表:
图1.5 800X600 72Hz下的VGA时序参数
二,软件部分
1,建模思路
本设计采用过程建模思想,针对时序上的过程,对应进行描述,行同步,场同步之间采用并行,通过计数器分别驱动,此外,显示赋值部分与前两者同样并行,时钟采用系统时钟,50MHz。
由于每个时钟周期显示一个像素,而行同步以时钟周期为参照单位,场同步以行扫描次数为参照单位。所以,根据行同步周期与场同步周期,建立两个周期的计数器,分别用来作为行同步控制时间标准和场同步控制时间标准。观察上述图表可以发现,行同步时钟以像素个数来作为时间标准,即以时钟周期个数作为时间参照标准。而场同步,以扫描线的条数作为参照标准,即每次完成一次行扫描,触发场计数一次。
在行同步和场同步计数器基础上,再进行时序判断,产生行同步信号和场同步信号。根据时序描述,每次显示开始,要由场同步信号产生6行扫描时间长度,即6X1040个时钟周期的高电平脉冲作为场同步控制信号。场控制信号如下:
图1.6 场同步控制信号Vsync
如上图,场同步信号占据6行扫描的时间,即Tpulse=6X1040,但是并不是意味着过了这个脉冲就立即可以进行行扫描,显示数据,我们发现,接下来出现的是后沿消隐时间,前后沿消隐时间内不允许写入数据,否则显示器会不支持输入的信号,从而无法正常显示。前沿时间,后沿时间,和控制脉冲共同组成消隐时间,这段时间内,扫描点从右下角返回左上角,即从画面终点回到扫描显示的起点。所以,消隐时间之内,不允许进行像素数据写入。
所以在脉冲控制时间之后,还要经过23行扫描时间的后沿消隐时间,这段时间内不允许写入像素数据,所以要约束时序,即经过23X1040个时钟周期的后沿消隐时间,才到达允许显示的时间,即Tdisp。
允许显示的时间,即Tdisp,数值上,等于600行扫描过程的全部时间总和。
接下来分析行扫描控制过程,行扫描控制信号模式和场扫描控制信号模式必须一致,两者可采用低电平脉冲触发,也可以用高电平脉冲触发。本次设计采用高电平触发。每次行扫描过程需要1040个脉冲周期,其中有效显示像素的时间为800个像素周期,即分辨率为800X600。首先行扫描同步信号Hsync发出一个高电平脉冲,占据120个周期,即Hor sync time。之后是后沿消隐时间,占据64个时钟周期,所以显示要从第185个时钟周期开始,由于计数器从0开始,所以要从第184个计数周期开始写入像素数据。写入800组RGB数值,写到第984个时钟周期为止。场同步要从第29行扫描开始,到第629行扫描为止。
行同步和场同步计数器设计好后,要进行同步信号输出控制,即0—119时钟周期内进行高电平输出,从第120周期开始回归低电平,开始行同步控制。场同步要从0—5行进行高电平输出,开始场同步控制,第6行开始回归低电平。
之后要进行设计数据部分,设计思想就是确定画面中的主要显示点,即确定在第几行的第几点显示数据,判断显示数值的位置范围,其余部分为背景色,统一赋值。采用依次判断思想。
顶层模块,端口部分,共2个1位输入端口,分别是时钟和复位输入。输出端口,2个一位的输出端口,即行同步和场同步。一个三位的输出端口,即RGB信号输出端口,每条数据线上0表示不显示,1表示满色显示。RGB为000显示黑色,111显示白色。
2,部分核心代码分析
always@(posedge clk) 时钟上升沿触发
begin 顺序执行
if(rst) 复位
vcnt <= 0; 从0行开始执行
else if(vcnt==665) 整个场同步过程占据666行
vcnt <= 0;
else if(hcnt==1039) 当每行扫描完成,即经过1040个时钟周期后,加1 vcnt <= vcnt + 1;
end