本文基于DSP Builder的VGA接口设计方法,对VGA接口时序和系统设计需求进行了介绍,并在硬件平台下实现一维与二维信号的显示。
VGA接口标准
VGA显像原理
显示器通过光栅扫描的方式,电子束在显示屏幕上有规律地从左到右、从上到下扫描。在扫描过程中,受行同步信号控制,逐点往右扫,完成一行扫描的时间倒数为行频;同时又在行同步脉冲期内回到屏幕的左端,从上往下形成一帧,在垂直方向上受场同步信号控制,完成一帧的时间倒数为场频。图像的显示过程即为在电子束扫描过程中,将地址与图像的像素依次对应,每一个被寻址的像素只获得其自身的控制信息,而与周围的像素不发生干扰,从而可以显示稳定的图像。
VGA接口是显示卡上输出模拟信号的接口,也叫D-Sub接口。这种接口上面共有15个针孔,分成3排,每排5个,通过模拟VGA接口显示图像的工作原理,将计算机内部以数字方式生成的显示图像信息,通过显卡中的ADC转变为R、G、B三基色信号和行、场同步信号,通过电缆传输到显示设备中。
VGA时序
VGA的时序包括水平时序和垂直时序,且两者都包含的时序参数有:水平(垂直)同步脉冲、水平(垂直)同步脉冲结束到有效显示数据区开始之间的宽度(后沿)、有效显示区宽度、有效数据显示区结束到水平(垂直)同步脉冲宽度开始之间的宽度(前沿)。水平有效显示区宽度与垂直有效显示区宽度逻辑与的区域为可视区域,其他区域为消隐区。
一行或一场的时序信息如图1所示。
图1 行/场时序图
根据目前的显示器性能参数,以LG 505E为例,其最大分辨率已可达到1024×768@60Hz,水平扫描频率30kHz"54kHz ,垂直扫描频率50Hz"120Hz,带宽75MHz。
基于DSP Builder的VGA接口设计方法
本设计需要完成的功能包括产生VGA时序以及基于VGA接口的信号显示。设计符合VGA接口标准的接口系统,在该系统下可显示一维矢量信号与二维图像信号,并体现系统的可集成性,将该接口集成到SOPC系统中。
系统时钟确定
根据系统时钟计算公式:
时钟频率=(行像素数+行消隐点数)×(一场行数+消隐行数)×刷新率。
对于标准的VGA接口时序640×480@60Hz而言,时钟频率为800×525×60=25.175MHz。
在本设计中我们采用1024×768@60Hz的XGA显示方式,因此系统的时钟频率PixelClk=1344×806×60=64.99MHz。
状态机设计
由VGA时序可设计有限状态机来完成时序信号,以本设计1024×768@60Hz为例,对于行同步信号设计四个状态,即行同步脉冲信号区(horsync)、后沿区(backporch)、数据区(video)以及前沿区(frontporch)。用计数器hcnt的值来区分各阶段信号,最大记数值为1344。场同步信号也设计成如上四个状态,当完成一行的扫描后场计数器vcnt开始计数,因此一场可以有多行。
VGA DAC芯片及相应信号的生成
一般的VGA DAC芯片需要输入相应的驱动信号才能工作,包括时钟信号、同步信号、有效显示区信号等。系统所用DAC芯片为FMS3818,其信号包括时钟与数据信号(RGB)输入、控制信号输入(sync与blankn)以及RGB信号DA输出。行同步与场同步信号与经VGA DAC产生的RGB数据信号一并输出到VGA接口,驱动CRT显示。在本设计中时钟信号65MHz、同步信号为horsync与versync相与产生,有效显示区信号为行与场的有效数据区信号相与产生。
一维矢量信号显示方式
在二维的空间中显示一维矢量信号,常规显示方法可以是将一维信号从左至右显示,如图2(a)所示,就如在普通的示波器上观察到的一样。这样,在VGA显示时,一行扫过多个采样点,需把要显示的采样点位置计算出来,当行信号扫过时,把采样点的值赋给像素点,就完成了信号的显示。而对于连续的一维信号,因为行频比场频高,图2(b)的显示方法更加合理。为此,将一维信号的时间轴映射到垂直方向上,幅值映射到水平方向上,当行扫描信号扫过一行时,映射一维信号的一个采样点,即一行信号对应一个像素,当完成一行信号后接着回扫,开始扫下一行。一般情况下,场频确定后,就可以根据一维信号的频率确定出一场可以显示的周期数,当完成一场信号后,在屏幕上就显示一帧图像。
在具体实现时,需要对一维正弦波信号的参数作两点控制:控制正弦波的频率,保证一行扫描对应一个采样点;控制正弦波的幅度,将其控制在1024×768的有效显示区域中。
对正弦波频率来说,如果频率太高,一行会扫到多个采样点;如果频率太低,一整屏无法显示一个完整周期的信号。在本设计中,用一个较低的采样时钟控制正弦波的采样,正弦波存放在一个查找表中。如果要在一屏中显示n个周期的正弦信号,那么需要的采样频率fs=刷新率×n×查找表中一个周期的点数。
控制正弦波幅度即让正弦波的最大值不能超出屏幕的显示区。VGA有效显示宽度为1024,则屏幕两端的空闲部分宽度(图2(a)和(c))都为100。
(a) (b)
图2 一维正弦波VGA显示示意图
二维图像信号的显示方式
二维图像的显示过程较一维信号容易实现。对二维图像,可以将二维图像信号转变成一维像素序列。在屏幕显示区域内,当行与场同步信号扫过时,将该像素点对应的RGB值进行赋值,就可以完成二维图像的显示。对于本设计,VGA时序为1024×768模式,图像的像素数在这个范围内可以完全在屏幕上显示,不会发生像素丢失。如果图像比较小,还可以将图像控制在屏幕的任意区域内。由于图像大小受存储空间限制,如果想要实现更高像素点的图像,就必须借用外部的SRAM或SDRAM来做图像缓存。
Avalon MM接口控制
在DSP Builder中,Altera提供了本设计与SOPC的接口——Avalon MM接口。
Avalon MM接口定义的接口信号主要有片选、读使能、写使能、地址,以及数据等。根据外设的逻辑,选用不同的接口定义信号,通过这些信号Avalon主端(CPU)可以向挂在Avalon总线上的从端外设写地址与数据信号,Avalon主端外设也可以主动去获取Avalon总线上的SRAM或SDRAM中的数据。不管是主传输还是从传输,都需要符合Avalon总线的读写时序才能发起一次正确的数据传输。可以利用Avalon MM接口将DSP Builder中设计的模块做成自定义外设。NiosⅡ CPU就可以利用Avalon总线与DSP Builder中产生的自定义外设进行通信,在本设计中对集成到SOPC系统上的VGA接口的地址赋值为0x1后,数据写入0x1,VGA接口控制器接收到数据,就会根据设计产生VGA时序信息及RGB信号,在屏幕上显示图像。图3为整个一维信号VGA显示系统的结构图。
图3 系统结构图
仿真与硬件验证
本设计在2C70 DSP硬件开发平台下验证。
借助于DSP Builder中的Signal Complier模块,可以容易地将设计完成的系统直接转化成RTL级的硬件描述语言,在QuartusⅡ下完成VGA时序的验证与正弦波信号的下载与显示。
从显示器上硬件仿真结果来看,正弦波的幅度在有效的显示区域内呈周期性变化,因此当显示器与VGA口的J21相连时,屏幕上正弦波幅度在设计的范围内显示,一幅屏幕所显示的周期数和DSP Builder中所设定的一致。在此基础上还可以调整正弦波的采样频率,控制正弦波的显示频率与幅度大小,实现示波器的功能,观察FPGA内部的信号。
结语
随着VGA接口的广泛使用,这种结合FPGA与DSP Builder的系统级设计方法已经展现优势。从整个设计流程来看,系统的灵活性强,可靠性高,设计周期大大缩减,成本降低,且系统的可扩展性强。未来,VGA接口的图像与视频监控系统应用将会很有市场。