vga接口驱动设计验证Verilog代码设计

一, 设计要求

根据vga接口协议以及开发板电路原理图,我们编写vga驱动逻辑电路,使其能够正常显示数据。

二, vga接口协议

扫描方式:从左到右,从上到下扫描;那么我们开始扫描的位置就在显示器左上角开始。

VGA(Video Graphics Array,视频图形阵列),是 IBM 于 1987 年提出的一个使 用类比讯号的电脑显示标准。VGA 是最多制造商所共同支持的一个低标准,个 人电脑在加载自己的独特驱动程式之前,都必须支持 VGA 的标准。 今天我们就来学习一下这个接口的驱动时序,让我们的设计从此色彩纷呈。 首先我们看一下 VGA 接口的电路原理图

forum.jpg

电路视图

屏幕显示都是通过像素点集合起来形成的。

行脉冲信号:表示扫描完一行都会产生一个脉冲信号表示一行扫描完。

场脉冲信号:表示扫描完所有行(扫描完所有像素点)产生一个脉冲信号。

行脉冲信号产生的次数在扫描完所有像素点时:需要根据我们屏幕里包含多少行来决定。

场脉冲信号扫描完所有像素点只会产生一次。

行脉冲信号时序关系为:

forum.jpg

行脉冲信号时序关系

我们扫描完一行所有像素点其包含a,b,c,d这四个区域。a,b,d区域我们称为消隐区域,不显示像素点数据。消隐区域像素点数据信号为低电平。

场脉冲信号时序和行脉冲信号时序一致。

蓝色区域为显示区域,白色区域为消隐区。

不同显示标准对应的行列数据表:

forum.jpg

对应行列数据表

显示模式:640*480*60表示显示区域列包含640列,480行,60表示扫描完所有像素点的频率60hz,扫描完一帧的时钟频率。其后面表示的时钟都是以mhz为单位,其表示扫描一个像素点的时钟频率。表示扫描一个像素点时间1/(60*800*525),扫描像素点的频率为:60*800*525=25.2mhz。

forum.jpg

设计系统架构

1:如何产生行脉冲信号?

我们如何确定扫描完一行,每一行包含了800个像素点,那么其对应的就是扫描时钟经过800个时钟周期,产生一个列计数器cnt_hs,列计数器的变化范围在0到799,可以根据列计数器产生行脉冲信号,cnt_hs 小于96时行脉冲信号为低电平,其他值时为高电平。

2:如何产生场脉冲信号?

扫描完所有像素点只会产生一次,扫描完所有行就可以表示将所有像素点扫描完,可以产生一个行计数器cnt_vs,行计数器变化一次的条件为:列计数器计数到最大值。表示所有的像素点扫描完:列计数器cnt_hs等于最大值且行计数器cnt_vs等于最大值。可以根据行计数器产生场脉冲信号,cnt_vs 小于2时场脉冲信号为低电平,其他值时为高电平。

3: 我们如何划分显示区域?

forum.jpg

划分显示区域

当列计数器cnt_hs < 784且cnt_hs > 143时,同时行计数器cnt_vs>34且cnt_vs< 515时,就表示显示区域。

forum.jpg

时序设计

驱动电路的端口信息:

行列脉冲信号以及像素点数据信号都是我们驱动电路产生给到vga接口的,那么就说明vga_hs,vga_vs,vga_rgb[7:0]是我们驱动电路的输出。

输入信号:系统时钟,系统复位。

下午练习:

以显示标准800*600*60为标准,将显示屏幕的范围划分为多个部分,每一个部分显示不同的颜色。

forum.jpg

行代码

forum.jpg

控制模块

forum.jpg

仿真波形