摘要 构建了以FPGA为核心芯片的高速图像采集与处理系统,图形采集频率可达13.5 MHz在该系统中,采用了视频A/D芯片SAA7111A将电视信号转换成数字信号,并由FPGA作为控制器将数字信号存入SRAM中,以便进行处理,提取有用数据;系统还采用了EZUSB2131Q芯片来进行处理后的数据与PC机的传输.
关键词 视频图像;信号处理;FPGA;VHDL;EZUSB;视频A/D
传统的基于ISA,PCI等总线的图像采集卡已经应用非常广泛,但速度慢、处理功能简单,对于特殊要求往往需要后续处理部分 因此,本文构建了一种高速图像采集系统它主要由FPGA(field programmable gate array)、视频A/D芯片SAA7111A以及USB总线构成.该系统可以根据需要进行现场可编程,具有通用性好、成本低等优点.在FPGA中利用硬件描述语言VHDL编程实现FPGA可以在数据采集系统中取代单片机和DSP对数据采集过程进行控制.
PHILIP公司的视频A/D芯片SAA7111A具有四路视频输入,抗混滤波、梳状滤波都被集成到芯片内部,带来了极大的方便,但系统内部锁相环技术的集成使得可靠性和设计复杂度都有极大的降低.
CYPRESS的EZUSB2131QC芯片是针对USB 1.1协议开发的,兼容全速和低速传输,功能高度集成化.该芯片集成了一个增强型8051处理器、一个“智能型”串行接口引擎(SIE)、一个USB收发器、集成I2C总线控制器、片上RAM和FIFO.
1 图像采集与处理系统设计
系统由视频A/D芯片、FPGA控制模块、数据存储模块SRAM、EZUSB接口模块和PC机应用程序组成.FPGA程序用VHDL语言编写.整体框图如图1所示.
2 视频信号的A/D转换
SAA7111A提供了 4个模拟输入通道,可以编程选择使用其中的一个或多个通道视频信号输入芯片后,一路经过缓冲器从AOUT引脚输出,这个信号作为视频监控信号,以检测是否有视频信号输入;另外一路信号经过模/数转换后产生数字色度信号和亮度信号,分别进行亮度信号处理和色度信号处理.亮度信号处理的结果,一路送到色度信号处理器,以进行综合处理,产生灰度信号Y和UV信号,格式化后从数据线VPO[15:00]输出,其中高8位为Y、低8位为UV;另一路进入同步分离器,经过PLL产生相应的行同步信号HS和场同步信号VS,同时数字PLL驱动时钟发生器模块,从而产生视频信号上作频率为27MHz的LLC和13.5MHz的LLC2时钟信号.SAA7111A正常工作需要对内部32个寄存器正确配置,通过I2C总线由EZUSB AN2131Q写入SAA7lllA的内部寄存器.
3 FPGA控制模块
经过对系统功能的分析和划分,可以将设计划分为若干个子模块.每个子模块通过内部握手信号相互关联并完成相对独立的功能.最后将子模块组合起来就能得到系统级的功能芯片.将FPGA划分为以下几个功能子模块:输入信号缓冲模块、消除抖动模块、SAA7111A接口模块、SRAM接口模块、实时插入结束标识模块、缓冲模块FIF0、多路选择器DATA-MUX、数据处理模块DATA_Proc等几个部分,如图2所示模块之间通过中间信号进行通讯,从而实现数据的传输和控制.
3.1 SAA-INTERFACE模块
SAA_INTERFACE模块的主要功能是接收来自SAA7111A的数据信号和状态信号,实现FPGA与视频A/D芯片SAA7111A的接口,并根据这些信号产生相应像素灰度信息的存储地址,在时钟信号LLC2的控制下,完成数据在SRAM中的存储写入地址和读出地址及对两片SRAM进行乒乓操作的指示信号的生成.
分析SAA7111A输出的状态信号的时序图,可以分析得到以下结论:
(1)每行图像共有864个像素,其中0~719为有效像素、720~863为水平消隐阶段,在消隐期间的像素为无效像素.
(2)每行图像起始条件是:场参考信号VREF为逻辑‘1’时,HREF产生一个上升沿.每行图像结束条件是:HREF信号的出现下降沿当VREF为逻辑‘0’状态时,处于场消隐阶段,此时为无效图像.
(3)每帧图像起始的条件是:RTS0为逻辑‘l’期间,VREF产生一个上升沿.而每帧图像结束的条件是:RTS0为逻辑‘O’期间,VREF产生一个下降沿.
由于复合视频信号CVBS是由隔行扫描的方式得到的,而计算机显示器是逐行扫描来显示图像的,所以写入SRAM的数据必须隔行写入,而读山SRAM的数据必须逐行读出.读取SRAM时,由于奇偶场已经“隔行”写入SRAM中,所以只需要逐行顺序读取即可.
3.2 SRAM_INTERFACE模块
接口模块SRAM_INTERFACE的主要功能是完成与SRAM存储器的接口工作.由于采用了两片SRAM,所以FPGA中的SRAM接口模块也应该有两个,该模块根据当前状态做出判断,从而对SRAM发出相应的控制信号和地址信号,完成数据的写入和读出工作.
3.3 INSERT_FLAGS模块
为了在上位机显示所采集到的图像,除了需要相应的像素信息外,还必须提供行同步信号和、场同步信号本系统没有另外提供专门的行同步信号、帧同步信号,而是通过在恰当的时刻插入标识数据的方法来代替视频流的行同步信号和帧同步信号.
INSERT_FLAGS模块将在行结束时,将自定义的行结束标识插入到数据流中;在帧结束时,将帧结束标识插入到视频流中,从而为上位机实现对图像信息的再现和处理创造了方便条件.
3.4 DATA_MUX模块
DATA_MUX模块实现了对数据的流向的控制和数据处理工作.它接收来自SAA71llA的原始数据VPO和实时插入的行、帧结束标识信号VP()_FLAGS,并产生最终的连续的含有场、帧结束标识的数据流VPO_ALL,并控制VPO_ALL的流向.当WRlRD2为逻辑‘1’时,VPO_ALL写入SRAMl,同时将已经存储到SRAM2的数据读出到DATA_Proc模块中;当WRlRD2为逻辑‘0’时,VPO_ALL的数据写入SRAM2中,同时将SRAM1的数据读出到DATA_Proc模块中.
3.5 DATA_Proc数据处理模块
DATA_Proc模块用于对采集的数据进行处理,根据项目要求,其上作主要是对信号进行滤波和边缘提取,从而提取有效数据,减少数据的传输量.为了减少工作量,采用了Xilinx公司的SystemGenerator软件来设计这部分模块.
System(Ceneratcor是Xilinx公司和Mathworks合作开发的FPGA辅助设计工具,只需在simulink中完成模型的搭建,启动SystemGenerator,就能自动生成VHDL源程序及其他一些工程文件,并将系统模型映射到目标器件FPGA上进行硬件实现.
3.6 FIFO模块
视频信号进入FPGA的时钟为13.5 MHz,而USB接口芯片的时钟为12MHz,两者时钟速率不匹配.这就出现了异步时序设计问题.由于需要进行跨时钟领域的数据传输,必须在FPGA和EZ_USB之间加入缓冲数据单元.这个缓冲器一般由异步First-In-First-Out(FIFO)实现.异步FIFO在每个写时钟时写入数据,而用每一个读时钟时读出数据,这两个时钟是异步的.
FIFO的工作原理是:在写时钟的上升沿,当写允许有效时,将写数据总线上的数据写入双口RAM中写地址对应的存储单元中;而始终将读地址对应的双口RAM中的数据输出到读数据总线上,在读允许有效时,输出数据.
4 EZUSB模块
在系统中,EZUSB2131主要完成两方面的工作:完成对SAA7111A的配置和基于快速同步传输方式的数据传输.
为了使视频解码芯片SAA7111A正常工作,必须通过I2C总线对其内部的寄存器进行正确的配置,当通过I2C配置SAA7111A时,写入数据格式为:首先为起始信号,然后是7位的从机地址和方向位(‘0’表示写入SAA7111A寄存器,‘l’表示读出相应寄存器)共8位数据,此时从机应该向主机发送一位响应信号.然后是从机中被写入的寄存器的地址和从机的响应信号,然后才是要写入子地址寄存器的的数据,最后是结束信号.
USB总线支持4种数据传输方式:控制传输、中断传输、等时传输和块传输.EZUSB系列的2131Q支持快速等时传输方式,为了提高数据传输的速度,应用这种方式进行数据传输,能够使FPGA内部的FIFO模块直接与EZUSB内部的数据总线通讯.
为了使用快速同步方式传输数据,需对2131进行如下设置:
(1)能使SOF中断,使51内核能接受SOF中断,从而保证1 ms传输一桢数据.
(2)本系统使用了等时传输IN8端点,所以须设置INISOVAL为“00000001”.
(3)设置IN8端点将使用的等时FIFO的大小为了加快数据传输的速度,这里设置该FIFO的大小为1024.
(4)设置寄存器PORTACFG,设置PA口第4位和第5位复用功能.其复用功能是快速等时传输的FRD和FWR信号.
(5)设置寄存器FASTXFR,使能快速等时传输方式,设置nFRD低电平有效,并且设置了nFRD的宽度和相位.
为了响应SOF中断,需要在中断响应函数ISR_Sof()中编写数据处理程序,将数据传送到内部寄存器IN8DATA,另一方面清SOF中断请求和USB中断请求,以便程序能对下一个SOF做出正确的响应.
5 PC机应用程序
EZUSB通用驱动程序GPD(general purposedriver)用来和EZUSB外设接口的通用设备驱动程序,为应用程序访问EZUSB硬件提供了途径.EZUSB开发包提供了默认的驱动程序文件:EZUSB.SYS. 对于应用程序而言,调用CreateFile()来打开设备并取得访问设备驱动程序的句柄.用户程序使用函数DeviceIoControl()来提交控制码,并为CreateFile()函数返回的设备句柄设置I/O缓冲区.
连接到主机的EZUSB设备,GPD为其创建一个链接符.一个链接符.调用函数CreateFile(),实质上就是获取驱动程序产生的目标设备句柄.EZIU3SHW 开发包中提供了 I/O控制码,使用这些I/O控制码能非常方便地实USB通讯当使用快速传输方式时,需要将IOCTL_EZUSB_START_ISO_STREAM,IOCTL_EZUSB_READ_ISO_BUFFER,IOCTL_EZUSB_STOP_ISO_STREAM等控制码提供给函数DcviceIoControl(),从而实现开启等时传输、读取等时传输数据、停止等时传输等功能.
6 结论
系统采用FPGA作为采集处理部分,可以提高系统处理的速度,大大增强系统的灵活性和适应性,具体表现为:
(1)系统性能得到大大提高.由于采用双SRAM作为数据交换区,FPGA采用乒乓技术传输数据,提高了传输的速度.
(2)系统的适应性与灵活性强由于采用FPGA可编程逻辑器件采集与处理数据,对于不同的视频图像信号,只要对FPGA逻辑稍作修改,便可实现信号采集.
(3)设计结构简单,调试方便.FPGA的外围硬件电路简单,在硬件设计中,可以大大地减小硬件设计的复杂程度.
FPGA技术和USB的组合,数据处理能力得到了极大的提高,且有利于系统升级.本设计用于传输当前处理后的数据量已经足够,采用EZUSB2131芯片已经可以完成.如果需要传输更大数据量,可以采用CPYRESS公司USB2.0芯片cy7c68013代替.该实例还可应用于实时数据采集、音频及压缩视频数据传输等领域.