初晓慧,盛琳阳
(哈尔滨师范大学)
星敏感器图像显示验证VGA接口设计*
初晓慧,盛琳阳
(哈尔滨师范大学)
设计了星敏感器图像验证VGA显示接口,采用单片FPGA实现了输入图像数据处理、VGA时序产生等功能.实验仿真表明,该系统逻辑时序设计正确,能很好地完成对星敏感器星点定位、星图识别等功能测试的监视工作.
VGA;嵌入式系统;FPGA
星敏感器是天文导航系统的主要设备,是一种高精度、高可靠性的姿态测量部件.星敏感器的工作原理是以天空中的恒星作为参照物,利用CCD相机某一时刻拍摄到的某一幅星图,进行星点提取、星图识别、姿态计算等处理,最后给出航天器三轴姿态[1].
在星敏感器投入使用前,必须进行一系列的地面功能测试,用以检验其各部分功能的有效性和可靠性.通常的地面功能测试方法主要有两种[2]:一种是借助星场模拟器来进行功能测试,其基本方法是用星场模拟器模拟无穷远的星空,星敏感器通过观测模拟的星空图像进行识别和姿态计算.该方法的缺点在于星场模拟器价格昂贵;另一种是外场观星测试,即在实际星空下进行测试,该方法简单易行,但是受天气等因素影响较大,无法保证随时测试的需求,也无法模拟星敏感器的在轨状态.
随着电子技术的不断进步,目前星敏感器常采用FPGA实现星图的预处理[3],此时可以在同一片FPGA内设计一个星图模拟器,从而简单方便地实现设计调试阶段对星敏感器星点定位、星图识别等功能的测试.因该星图模拟器仅在设计调试阶段用于模拟生成CCD相机信号,本身不具备显示图像功能,为实现在半物理仿真试验和实际观星试验时监测星图情况,需要在星图模拟器后设计一个VGA接口.由于CCD相机特殊的信号时序以及数据跨时钟域传输引起的亚稳态问题,决定了该VGA接口不能采用普通PC机显示卡上VGA接口的设计方法.
该文使用FPGA设计了星图模拟器后的VGA接口IP核,针对CCD相机特殊的信号时序设计了相应的输入数据处理模块,采用异步FIFO解决了数据跨时钟域传输引起的亚稳态问题,实验证明,采用该接口连接显示器,能很好地完成设计调试阶段对星敏感器星点定位、星图识别等功能测试的监视工作.
显示系统总体结构图如图1所示.
相机数据既可以是来自CCD相机的真实图像数据,也可以是来自星图模拟器的模拟图像数据.该数据经FPGA处理后,以图像像素点灰度值的形式存入异步FIFO中缓存.每帧图像由768行构成,每行1024点像素.显示缓存器SRAM中保存一帧图像信息,在行扫描期间,FPGA控制逻辑输出场扫描和行扫描控制信号,同时从SRAM中依次取出数据,送D/A转换器
转换成模拟RGB信号,从VGA接口输出.在行扫描回扫期和场扫描回扫期期间,FPGA控制逻辑将FIFO中的数据移入显示缓存器SRAM中,进行数据更新.
FPGA选用Xilinx的XC2S200-5PQ208C.控制逻辑分为三个模块:相机数据处理缓存模块,显示缓存管理模块,VGA时序生成模块.
图1 显示系统总体结构图
来自线阵CCD相机的图像数据包括时钟、门控和图像数据.时钟频率40MHz,门控低电平有效.线阵CCD的图像数据位宽为10位,数据传输通道均采用5位并行输出.门控有效期间,先发送32个辅助数据,然后是12000个图像数据.图像数据中,前2048个数据每两个组成一个10bit的图像像素点灰度值,像素的高5位在前,低5位在后;共1024个像素点构成一帧图像的一行,其余数据舍弃.这样的输入数据时序决定了系统无法将输入数据不经处理直接传送至显示缓冲器中.另一方面,由于输入数据与处理模块处于不同的时钟域,会产生所谓亚稳态问题[4],为此,在输入数据与显示缓冲器之间,增加了一个FIFO存储器,作为数据输入缓存.在FPGA设计中,设计了一个相机数据处理缓存模块.该模块先搜索门控信号的下降沿,找到后开始计数.先计满32个脉冲,然后开始每个脉冲读取一个5bit的数据,每两个数据组合成一个10 bit的图像点像素灰度值存入FIFO中.
FIFO选用美国IDT公司生产的高速大容量先进先出存储器IDT72V2113.该器件最高工作频率为133 MHz,容量为512 K字节,可以通过引脚方便地将容量设置成512 K×9 bit或者256 K×18 bit两种方式.此处由于每个像素点为10 bit信息,故设置为256 K×18 bit方式,这样,每个存储单元的低10位存储一个像素点的灰度值,高8位数据线不用.芯片提供全满、半满、全空、将满及将空等五种标志信号.FPGA的相机数据处理缓存模块要根据FIFO的写入时序设计相应的控制逻辑.
VGA显示接口是视频图形阵列(Video Graphics Array)接口的简称.原来是微机系统使用的显示接口,因为使用广泛,现在绝大部分的显示设备都带有VGA显示接口.在VGA接口协议框架中,根据不同的分辨率和刷新频率,又分为不同的显视模式:VGA(640×480)、SVGA(800×600)和XGA(1024×768)等.VGA显示接口总共有15条线,为显示器提供两类信号,一类是数据信号,一类是控制信号.数据信号包括红(Red)、绿(Green)、蓝 (Blue)信号三色模拟信号,简称RGB信号,控制信号包括行同步信号(Horizon Synchronizing,HS)和场同步信号(Vertical Synchronizing,VS),控制了VGA的显示时序.输出不同分辨率时,行同步信号和场同步信号的频率也不同.
常见的CRT彩色显示器,其彩色显像管屏幕上的每一个像素点都由红、绿、蓝三种涂料组合而成,由RGB三束电子束分别激活这三种颜色的磷光涂料,以不同强度的电子束调节三种颜色的明暗程度就可得到所需的颜色.VGA显示接口采用的是光栅逐行扫描的方法来显示图像.显示一帧图像的过程是电子束从屏幕的左上角开始向右扫描一行,扫描到屏幕最右端后关闭电子束(水平消隐),迅速回到最左端,然后从下一行开始继续扫描下一行图像,这样从左至右,从上至下,扫描正程显示图像,扫描回程消隐,直到扫描完整幅图像,关闭电子束(垂直消隐),迅速返回到屏幕的左上角开始扫描下一帧图像.
设计VGA控制器主要任务是时序的驱动,也即是对5 个信号(Red,Blue,Green,HS,VS)的时序驱动,这是完成设计的关键.时序稍有偏差.显示必然不正常.甚至会损坏彩色显示器.图2为VGA行扫描时序图.图3为VGA场扫描时序图.
图2 VGA行扫描时序图
图3 VGA场扫描时序图
由于VGA是模拟接口,只能接收模拟的图像信号,因此,必须将数字图像信号进行数模转换.这里使用的是一块高速DAC芯片ADV7123.ADV 7123是美国AD公司生产的三路高速、10位输入的视频DA转换器,具有330 MHz的最大采样速度.由于本系统要显示的图像为灰度图像,而对于VGA显示器而言,当输入的R、G、B信号相等时显示图像为灰度图像,因此,本系统将处理后的亮度数字信号同时输出给ADV7123的R、G和B接口,同时送出HS和VS同步信号,即可在显示器上显示出灰度图像.
显示缓存中需要存储一帧CCD相机拍摄的待显示的图像数据.存储方式为每个存储单元存储一个像素点的10bit亮度信息,由地址为全零的单元开始依次存入一帧图像第一行的第1列到第1024列,接着存入第二行的第1列到第1024列……,如此一直存完所有768行.
实际上可以选用的器件有多种,如DRAM、SDRAM及SRAM等.DRAM、SDRAM属于动态存储器,容量大、价格便宜但速度较慢,且在使用中需要定时刷新,对于基于FPGA的视频显示系统,需要设计专用的刷新电路,增加了系统设计的复杂程度.而SRAM速度高、接口简单、容量较小.随着集成电路技术的不断发展,容量不断增大,价格也不断下降,在需要高速实时显示的视频处理系统中的使用越来越普遍.因此在本系统中,使用了Cypress公司的CY7C1061AV33型号的SRAM,它的容量是1M×16bit,速度是10 ns,根据上面的分析,完全可以保证快速地读出和写入图像数据.
FPGA与SRAM之间的连接比较简单,只需分别将SRAM的数据线、地址线、输出使能信号(OE)、写(WE)和片选信号(CE)与FPGA相连即可.而要完成对显示缓存的控制管理,则需要按使用要求编写软件实现控制时序.
对显示缓存的控制操作主要有两部分内容:一是在行扫描有效同时场扫描也有效期间,要依次从SRAM中读取图像亮度数据,送ADV7123以产生图像的模拟信号.二是在一场的行扫描和场扫描消隐期间,要完成图像的更新.
图像的更新操作主要任务是把相机新产生的存于FIFO中的数据及时传送到显示缓存中,以便在下一帧显示扫描时能把新数据及时显示出来.在这同时又不能影响正在进行的显示扫描.由相机输入时序可以计算出,在完成扫描显示一帧图像的周期内,相机产生的数据量约为19行,远远不够一帧图像.为了既能及时更新数据,又在视觉上有一定的舒适感,设计上使新数据覆盖上一帧图像中最先显示的部分.显示时则通过修改读取数据地址指针将新数据接到上一帧图像的底部.这样在视觉上使人感到图像在缓慢向上滚动.为不影响显示扫描,数据的传送选在行消隐和场消隐期间进行.由相机输入时序可以计算出,在一帧的行消隐和场消隐期间,完全可以把新产生的数据全部传送到显示缓存中.
读取图像的操作从场消隐脉冲结束时开始.在场消隐期间对读取操作进行初始化,包括把下一帧的起始地址置入读取数据地址指针等操作.CY7C1061AV33有20根地址线,其中低10位作为列地址,可寻址1024列;高10位作为行地址.当场消隐结束,第一个行扫描脉冲开始有效后,列地址置为全零,行地址则要在上一帧扫描结束地址的基础上加上消隐期间新存入的行数,这样就确定了下一帧显示的起始地址.若此时行地址为n,则从第n行读取第一个像素点显示.然后列地址加1,读取第n行的第二个像素点……,这样,每读取一个数据,列地址加1,直到第n行第1024个像素点读取完毕,列地址回到0,行地址加1,然后开始读取第n+1行数据.若n+1=768,则将n置为0.这样依次读取每一行数据显示,直到读完一帧,则完成了一帧图像的显示,开始场消隐.
图4截取了在ModelSim SE 5.7环境下对本系统的时序仿真波形.ModelSim是Mentor Graphics公司开发的目前业界最通用的专业化仿真、调试工具之一.设计取XGA显示模式,分辨率为1024 ×768,帧频率 75Hz,像素频率约82 MHz.图中mclk信号为像素时钟,hs2信号为水平同步信号,vs2信号为垂直同步信号,vs和hs信号相与产生复合消隐信号.仿真期间复位信号mreset无效(置高).
图4 仿真结果
仿真结果表明,采用该文提出的方法可以正确地生成VGA同步时序信号.实际调试中,使用此VGA接口连接CRT显示器或液晶显示器,都能正确显示CCD相机输入的图像数据.
设计的图像显示验证VGA接口,通过使用FIFO缓存、采用行消隐和场消隐期间更新图像数据到显示缓存等措施,解决了CCD相机图像数据特殊的时序难以在普通VGA接口上显示的问题及数据跨时钟域引起的亚稳态问题.目前本系统已经在实际星敏感器的设计调试中应用,使用效果良好.进一步的研究将考虑使系统具有能够对图像进行抽点全景显示和不抽点局部显示、在图像实时显示的同时能够报告丢行信息、实时显示时能够通过硬盘记录全部原始数据等功能.
[1]岳蕊,周国辉.Tycho-2星表文件格式数据的读取[J].哈尔滨师范大学自然科学学报,2010,26(4):42-44.
[2]魏新国,张广军,樊巧云,江洁.利用仿真星图的星敏感器地面功能测试方法.红外与激光工程[J],2008,37(6):1087-1091.
[3]杨清珍,陈朝阳,等.用FPGA实现星图目标的质心提取.计算机与数字工程[J],2005,33(10):63-65.
[4]黄忠朝,赵于前.一种实现高速异步FIFO的FPGA方法[J].计算机工程与应用,2010,46(3):13-15.
VGA Interface Design Verified by Star Sensor Image Display
Chu Xiaohui,Sheng Linyang
(Harbin Normal University)
In this paper,VGA interface designs are verified by the star sensor image display.Some functions such as input image data processing and produce VGA time order are realized by single FPGA.Experiment results show that logic time order of this system is right,and it could complete function test monitoring work of star point positioning,star graph identify of star sensor.
VGA;Embedded system;FPGA
2010-08-08
*黑龙江省教育厅科学技术研究项目(11541104)
(责任编辑:季春阳)