1、引言
高速视频图像的采集、存储以及处理被越来越广泛的应用于国民经济的各个部门,特别是嵌入式图像处理系统在工业控制、智能交通管理、安检等领域有着广泛的应用。其中采用FPGA作为视频图像采集及处理系统的控制芯片,并采用高速数字信号处理芯片DSP作为运算核心并辅助以存储芯片的系统是一种典型的设计方式。一个稳定、实时、高速的前端图像采集及存储模块是这种图像处理系统的一个重要的组成部分。本文将重点描述图像采集模块的设计与实现。在设计中广泛采用了FPGA设计中的乒乓转换思想,保证了高速信号流的不间断传输,同时充分利用同步有限状态机(FSM)产生精确的时序,控制系统内部各个操作过程。
2、系统设计思想
基于FPGA芯片的高速、高集成度、编程灵活等优点,采用硬件描述语言VerilogHDL[5]进行编程设计,可以方便的实现数据流的不间断采集;同时将所需要的图像数据进行存储,并辅助DSP芯片将图像数据传输至DSP进行算法级处理,根据不同的需要在DSP内移植不同的算法,可以灵活的实现各种图像识别、处理等功能。本嵌入式系统采用Altera Cyclone FPGA器件作为控制核心[2],对实时的视频图像进行捕捉,提取其有限帧图像作为处理对象进行存储及处理,整个系统的设计框图如图1。
图1 系统设计框图
系统共有4个部分组成:1.A/D转换部分2.图像存储部分,采用双SRAM作为存储器件3.系统控制部分,采用Cyclone系列FPGA作为控制核心4.图像处理部分,采用双DSP作为图像数据处理核心。其中前三部分是本论文重点描述部分。A/D转换部分作为前端负责图像数据采集及模数变换,本系统采用PHILIPS公司的视频解码芯片SAA7113H来完成。存储部分采用高速SRAM,其读写周期可达到10ns[4]。考虑到外部视频数据的高速及不间断性,采用双SRAM作为存储器件,并采用乒乓控制的思想,通过FPGA的编程控制,使其进行交替的数据读写,保证数据的完整性和不间断性。图像数据处理的核心采用TI公司的TMS320C6000系列DSP芯片,通过移植不同的算法,实现对不同图像数据的处理。具有很大的灵活性和可操作性。系统的控制部分负责整个系统的数据分配、控制信号的建立与数据传输等工作,本模块与其它四个模块相连接,控制前端的数据采集,将数据进行存储,同时响应DSP的读写信号,将数据传输至DSP进行后期处理,在处理完毕以后将所期望的结果数据传输至终端PC从而完成整个操作过程。本系统采用AlteraCyclone系列FPGA。设计过程中主要采用乒乓控制思想来完成数据流不间断的采集与传输。
3、FPGA控制模块的设计与实现
根据系统所要实现的功能以及系统的运行过程,并考虑到本系统涉及众多芯片的协调工作,在设计过程中将FPGA控制模块分为5个部分,其编程结构如图2所示.这5个部分分别是1.AD接口部分A/D Interface 2.数据暂存部分FIFO 3.DSP接口部分DSP Interface 4.核心控制部分ControlCore 5.负责发送处理结果部分UART。
图2 FPGA编程结构框图
3.1 A/D Interface.
A/D Interface模块是用来和外部视频解码芯片SAA7113H相连,其输入信号是SAA7113H芯片输出的场同步信号VS、行同步信号HS、8位数字图像信号VPO、数据同步时钟LLCLK[5]。此模块根据输入的行场同步信号,对有效视频图像数据进行采集。其中A/D芯片SAA7113H输出数据,每采集一帧图像都是分两场采集,采用VRLN=1模式,第一场的有效数据是从第23行开始到第309行结束。第二场有效数据从第336行开始到622行结束[5]。采用全彩色图像信号每行数据容量1440x8bit。当行参考信号和场参考信号同时处于有效状态时,数据线将在LLCLK的同步下传入8位图像数据[5],在输入数据有效阶段此模块输出FIFO写控制信号WrP;在行消隐以及场消隐期间,禁止数据写入FIFO。
3.2 FIFO
在系统运行过程中,前端数据的采集需要跨越两个时钟域,一个是外部的视频图像数据同步时钟LLCLK在本系统中是27MHZ,另一个时钟是FPGA的运行时钟可达到100MHZ以上,所以我们设计了两个FIFO作为数据的缓存。这两个FIFO有以下几个作用:一是数据缓存.二是时钟隔离,因为数据跨越时钟域进行传输的时候会出现亚稳态[7],因此用双时钟异步FIFO将数据进行读写隔离,保证数据的稳定性。三是双FIFO可以实现乒乓操作,保证数据不间断的进行采集。FIFO输出空满信号给内部控制模块,内部控制模块根据这两个信号对两个FIFO进行读取操作。
3.3 DSP Interface
系统采用TI公司的TMS320C6000系列DSP作为图像处理芯片,其中利用DSP的EMIF(External Memory Interface)接口[3],将FPGA以及SRAM配置为SBSRAM(Synchronous Burst Static RAM),FPGA通过读取DSP EMIF接口的nSSADS nSSOE nSSWE EA[N+2:2] ED[31:0] 等信号,根据DSP内部的时序关系,获取DSP的读写使能信号,同时对读写地址进行适当的编码,将数据有效的写入DSP以及从DSP中读出所需要的运算结果。DSP Interface模块主要完成以下工作(1)接收SRAM满标志信号sramWrFinish,判断SRAM的控制权是否处于无效状态,即SRAM没有被控制模块所操作。然后向DSP发出中断信号dspInt,通知DSP可以进行读操作。(2)对EMIF接口信号进行采样并判断是否有读使能信号的启动。在判断DSP开始对外部数据进行读操作时将读地址输出到所要操作的SRAM地址口,同时给出SRAM的读使能信号nCE nOE,将数据从SRAM里面读出并送入DSP。(3)根据SBSRAM Write Burst by C62xx/C67xx DSP时序图,接收DSP写使能信号dspWrCmd,根据接口时序将数据从DSP读出,并进行进一步的处理。
3.4 ControlCore
ControlCore模块是编程结构中最重要的一个控制部分,其主要负责协调输入数据的存储,以及将存储数据传输至DSP进行处理。因为涉及众多芯片的协调工作,此模块采用有限状态机(FSM)进行乒乓控制[5],其同步时钟是FPGA的运行时钟fpgaClk。与FIFO相连接的部分输入信号是FIFO的满/空信号fullp,emptyp.输出FIFO的读使能信号rdp。在此接口使用乒乓控制,如果一个FIFO写满,外部的saaInterface模块放弃这个FIFO的控制权,交由FPGA的ControlCore来进行控制,然后ControlCore对这个已经写满的FIFO进行读操作,直至这个FIFO出现空信号emptyp;如此交替操作实现输入数据的控制[7]。
在控制FIFO的同时,此控制模块要将读出数据写入SRAM中去。因为PAL制式信号属于隔行扫描,输出数据并不是连续的图像数据,而是第一场输出奇数行数据,第二场输出偶数行数据,因此要对接收的数据进行有效的地址编码,将它们重新整合成一幅完整的图像数据。对双SRAM的控制如同双FIFO控制一样,通过获取与释放SRAM的控制权,与DSP进行交替控制SRAM。当一个SRAM写完一帧图像的时候,转而向第二个SRAM写入数据,同时向dspInterface发出满标志信号,并释放已经写满数据的SRAM的控制权,交由dspInterface模块控制。
3.5 UART
UART 为通用异步接收/发送装置,在设计模块中用来负责和外部终端如PC进行连接,将系统处理结果等信息输出至外部设备,完成整个嵌入式系统最后一部分工作。本系统在UART接口方面采用RS232-C串口通信标准,通过FPGA内部编程,实现与PC之间通信的串口电路。另外在模块设计中,我们调用了QuartusII的Megafunction的ALTPLL模块作为单时钟输入以后的倍频以及分频器。
4、系统仿真结果
整个编程结构在进行编译以后,共使用LE为570,占用端口114个。通过QuartusII的RTL Viewer可以观察其内部的模块分布情况,如图3所示
图3 FPGA编程结构RTL视图
鉴于整个系统接口复杂,在系统方针过程中首先是对各个模块进行功能仿真,功能仿真无误后,然后再对各模块进行联合仿真其中包括功能仿真、综合后仿真和时序仿真。通过QuartusII的SignalTapII以及SignalProbe[2]进行测试程序能够在电路中稳定准确的运行。图4和图5分别是乒乓控制数据流向的仿真图,图6是整个编程系统的功能仿真图。
图4 乒乓控制数据流向(1)
图5 乒乓控制数据流向 (2)
图6 系统仿真图
5、结论
系统设计过程中采用了Altera Cyclone系列的FPGA来控制系统的运行,使得系统设计便捷,整体电路时序精确,运行速度高,具有很好的实时性。在系统设计过程中还可以进一步提高FPGA内部LE的利用率,以便能够增加更加复杂的控制程序并可以增加部分图像初期处理模块,提高整个系统的运行速度。 |