VGA(Video Graphics Array,视频图形阵列),是IBM 于1987年提出的一个使用类比讯号的电脑显示标准。VGA 是最多制造商所共同支持的一个低标准,个人电脑在加载自己的独特驱动程式之前,都必须支持 VGA 的标准。 今天我们就来学习一下这个接口的驱动时序,让我们的设计从此色彩纷呈。首先我们看一下VGA接口的电路原理图 由电路图可以看出,我们的VGA并没有特殊的外部芯片,也就是说,我们唯一要关注的可能就是它的显示原理和时序了。那么接下来我们具体来看一下VGA的扫描原理是什么。 VGA扫描方式 显示器扫描方式分为逐行扫描和隔行扫描:逐行扫描是扫描从屏幕左上角一 点开始,从左向右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起 始位置,在这期间,CRT 对电子束进行消隐,每行结束时,用行同步信号进行同 步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。隔行扫描是指电子束扫描时每隔一行扫一线,扫完一屏后再返回来扫描剩下的线,隔行扫描的显示器闪烁快速,可能会使使用者眼睛疲劳(本实验采用逐行扫描的方式) 扫描原理清楚以后,紧接着大家再来看看VGA的行、列同步时序
列同步时序 行同步时序 VGA 中定义行时序和列时序都需要同步脉冲(a 段),显示后沿(b 段)、显示时序段(c 段)和显示前沿(d 段)四部分。VGA 工业标准显示模式要求:行同步、列同步都为负极性,即同步脉冲要求是负脉冲。 由 VGA 行时序可知:每一行都有一个负极性行同步脉冲(a 段),是数据行的结束标志,同时也是下一行的开始标志。在同步脉冲之后为显示后沿(b段),在显示时序段(c 段)显示器为亮的过程,RGB 数据驱动一行上的每一个像素点,从而显示一行。在一行的最后为显示前沿(d 段)。在显示时间段之外没有图像投射到屏幕,而是插入消隐信号。同步脉冲、显示后沿和显示前沿都是在行消隐间隔内,当消隐有效时,RGB 信号无效,屏幕不显示数据。 VGA 的列时序与行时序分析基本一致。
VGA也有许多的显示标准,接下来我们通过表格来一探究竟。 以本实验的显示标准 800*600*60Hz 为例。(800 为列数,600 为行数,60Hz为刷新一屏的频率) 行时序:屏幕对应的行数为 628(a+b+c+d=e 段),其中 600(c 段)为显示行;每行均有行同步信号(a 段),为4 个行周期的低电平; 列时序:每个显示行包括800列(a+b+c+d=e段),其中640(c段)为有效显示区,每列均有列同步信号(a段),为96个行周期的低电平。 扫描时钟频率:40MHZ
原理清楚以后,接下来我们设计系统模块图如下: 模块说明: (1)时钟分频模块 我们开发板上使用的晶振为50MHZ,由于我们的显示标准为800*600*60HZ,所以我们需要分频输出40MHZ的系统时钟。时钟分频模块,我们可以通过调用锁相环来实现。 (2)VGA行列同步控制模块 VGA显示标准需要设定行列同步信号,标定出有效显示区域,这也是整个VGA驱动模块的核心部分 (3)VGA色彩显示控制模块 在图像有效显示区域内,输出控制颜色的r、g、b信号 接下来我们学习每个功能模块的具体代码实现,由于分频模块我们采用的是锁相环,而之前的章节中,我们对锁相环的使用有专门的论述,所以此处我们不再赘述。
VGA行列同步控制模块具体代码如下:
VGA色彩显示控制模块具体代码如下: 编写完成各子模块以后,为了将所有模块连接起来,我们需要建立顶层文件如下:
综合编译以后,我们可以查看RTL视图,查看电路综合结果和预想是否一致,调用RTL视图如下: 由此可以,电路模块综合结果和我们预先设定相同。接下来我们编写测试代码如下,用来验证我们设计的正确性 查看仿真波形 如图可以看出,当en有效时,vga_r输出3’b111,说明设计正确。
将代码下载到开发板,运行效果图如下:
|