基于DSP和FPGA的实时图像压缩系统设计
时间:11-09
来源:互联网
点击:
3 DSP程序设计
TI公司的TMS320DM642芯片是一款高性能视频处理器,其主频可以高达600 MHz,数字处理能力可以达到4 800 MI/ps。
DSP工作流程图如图5所示,DSP在相关外设与EDMA相关寄存器初始化完成后,才开始响应中断事件触发EDMA传输,在本系统中由EXITUINT4中断上升沿触发EDMA进行传输。在接收到FPGA发送的中断信号后,开始进行EDMA传输,整个EDMA传输的过程需要10 ms左右,传输完成后触发EDMA中断,在中断服务函数中触发1个软中断,在软中断服务函数中进行图像数据的压缩。
3.1 EDMA乒乓程序设计
在整个DSP的工作流程中,要实现图像数据采集、压缩、传输同时进行,则在DSP程序中需要1个双缓冲buffer,在向buf1中采集图像信号的时候,DSP可以对buf2中的数据进行压缩,而在对buf2中进行采集的时候,DSP可以对buf1中的数据进行压缩。
实现这个功能的方法是采用EDMA ping_pong方式。在DSP中使用hEdmaPing和hEdmaPong双通道EDMA并建立PingBuffer和PongBuffer两个数据存储区。 当写完1帧图像后,FPGA发送EXTINT4中断信号启动hEdmaPing将数据搬移到PingBuffer,同时将通道链接至hEdmaPong。在下一个中断事件发生时将数据搬移到PongBuffer中,CPU在hEdmaPong通道完成中断服务程序中链接hEdmaPing通道。如此往复,使系统数据搬移和处理连续进行。
3.2 DSP/BIOS调度程序设计
仅仅采用EDMA乒乓方式进行EDMA数据传输还是不够的,不能实现数据的采集和压缩同时进行,还需要DSP/BIOS调度程序。在任务、硬件中断、软件中断中进行调度,在软中断服务函数中进行图像压缩任务。
DSP/BIOS是TI公司所设计开发的、尺寸可裁剪的实时多任务操作系统内核,通过使用DSP/BIOS提供的丰富的内核服务,开发者能快速地创建满足实时性能要求的精细复杂的多任务应用程序。
DSP/BIOS程序编写过程如下:
(1)在DSP/BIOS配置面板中添加1个软中断jpeg_swi,并将该软中断的服务函数设置为jpeg。
(2)添加软中断服务函数jpeg();代码如下:
void jpeg(void)
{
Uint32 i;
if(pingpong)
bitstream_length=my_jpegenc->fxns->encode(my_jpegenc,(XDAS_Int8**)buf0,output_bitstream_buffer);
else
bitstream_length=my_jpegenc->fxns->encode(my_jpegenc,(XDAS_Int8 **)buf1,output_bitstream_buffer);
submit_qdma();
while(!(EDMA_getPriQStatus()&EDMA_OPT_PRI_HIGH));
}
(3)在EDMA中断服务函数中添加如下代码:
SWI_post(&jpeg_swi);
该函数的作用是触发jpeg_swi软中断。
4 系统关键技术
4.1 时钟
在使用内部生成的时钟过程中,可能引起设计上的功能和时限问题。组合逻辑产生的时钟会引入毛刺,造成功能问题,而引入的延迟则可能会导致时限问题。
本设计中用到很多全局时钟的整数倍分频,且由于分频的整数倍较大,如果利用FPGA中自带的DCM模块很难实现这样的功能。因此,采用同步计数器的分频方法,并且在各个时钟信号输出之前,再加一级寄存器输出,这样的操作就避免了组合逻辑生成的毛刺被阻挡在寄存器的数据输入端口上。
4.2 DSP与FPGA数据交换
由于压缩算法采用MECOSO公司的JPEG压缩算法,经过优化和处理后,压缩1幅图像仅需要4 ms。所以影响整个系统能否实现高频帧的关键技术是EDMA向SDRAM中搬移数据的速度,在本设计中设帧图像的大小为600×480=288 KB,传输1幅图像所需的时间需要10 ms。影响其速度主要有2个因素:EMIF所使用的ECLOCK和EMIF相关设置的寄存器。
在本系统中,ECLOCK采用了DSP的CPU4分频,使EMIF的CLOCK工作在150 MHz,大大提高了搬移速度。由于SRAM映射在DSP的CE2空间,考虑到读取数据需要建立(setup)、选通(Strobe)和保持(Hold)3个步骤,故将CE2相关寄存器的建立时间和选通时间选择为1个clk,经Hold时间设置为0。这样设置后EMIF总线的数据吞吐量为:
本文设计的图像压缩系统实现了分辨率为600×480、帧频率为100帧/s的视频信号输入的图像采集,并能够进行实时的JPEG压缩。系统采用DSP+FPGA的方案,虽然是一种较常用的组织方式,但在该系统中解决了一些关键的问题,大大提高了图像压缩速度及系统的灵活性。本系统已经应用于航天领域某监测系统,效果良好,运行稳定。
TI公司的TMS320DM642芯片是一款高性能视频处理器,其主频可以高达600 MHz,数字处理能力可以达到4 800 MI/ps。
DSP工作流程图如图5所示,DSP在相关外设与EDMA相关寄存器初始化完成后,才开始响应中断事件触发EDMA传输,在本系统中由EXITUINT4中断上升沿触发EDMA进行传输。在接收到FPGA发送的中断信号后,开始进行EDMA传输,整个EDMA传输的过程需要10 ms左右,传输完成后触发EDMA中断,在中断服务函数中触发1个软中断,在软中断服务函数中进行图像数据的压缩。
3.1 EDMA乒乓程序设计
在整个DSP的工作流程中,要实现图像数据采集、压缩、传输同时进行,则在DSP程序中需要1个双缓冲buffer,在向buf1中采集图像信号的时候,DSP可以对buf2中的数据进行压缩,而在对buf2中进行采集的时候,DSP可以对buf1中的数据进行压缩。
实现这个功能的方法是采用EDMA ping_pong方式。在DSP中使用hEdmaPing和hEdmaPong双通道EDMA并建立PingBuffer和PongBuffer两个数据存储区。 当写完1帧图像后,FPGA发送EXTINT4中断信号启动hEdmaPing将数据搬移到PingBuffer,同时将通道链接至hEdmaPong。在下一个中断事件发生时将数据搬移到PongBuffer中,CPU在hEdmaPong通道完成中断服务程序中链接hEdmaPing通道。如此往复,使系统数据搬移和处理连续进行。
3.2 DSP/BIOS调度程序设计
仅仅采用EDMA乒乓方式进行EDMA数据传输还是不够的,不能实现数据的采集和压缩同时进行,还需要DSP/BIOS调度程序。在任务、硬件中断、软件中断中进行调度,在软中断服务函数中进行图像压缩任务。
DSP/BIOS是TI公司所设计开发的、尺寸可裁剪的实时多任务操作系统内核,通过使用DSP/BIOS提供的丰富的内核服务,开发者能快速地创建满足实时性能要求的精细复杂的多任务应用程序。
DSP/BIOS程序编写过程如下:
(1)在DSP/BIOS配置面板中添加1个软中断jpeg_swi,并将该软中断的服务函数设置为jpeg。
(2)添加软中断服务函数jpeg();代码如下:
void jpeg(void)
{
Uint32 i;
if(pingpong)
bitstream_length=my_jpegenc->fxns->encode(my_jpegenc,(XDAS_Int8**)buf0,output_bitstream_buffer);
else
bitstream_length=my_jpegenc->fxns->encode(my_jpegenc,(XDAS_Int8 **)buf1,output_bitstream_buffer);
submit_qdma();
while(!(EDMA_getPriQStatus()&EDMA_OPT_PRI_HIGH));
}
(3)在EDMA中断服务函数中添加如下代码:
SWI_post(&jpeg_swi);
该函数的作用是触发jpeg_swi软中断。
4 系统关键技术
4.1 时钟
在使用内部生成的时钟过程中,可能引起设计上的功能和时限问题。组合逻辑产生的时钟会引入毛刺,造成功能问题,而引入的延迟则可能会导致时限问题。
本设计中用到很多全局时钟的整数倍分频,且由于分频的整数倍较大,如果利用FPGA中自带的DCM模块很难实现这样的功能。因此,采用同步计数器的分频方法,并且在各个时钟信号输出之前,再加一级寄存器输出,这样的操作就避免了组合逻辑生成的毛刺被阻挡在寄存器的数据输入端口上。
4.2 DSP与FPGA数据交换
由于压缩算法采用MECOSO公司的JPEG压缩算法,经过优化和处理后,压缩1幅图像仅需要4 ms。所以影响整个系统能否实现高频帧的关键技术是EDMA向SDRAM中搬移数据的速度,在本设计中设帧图像的大小为600×480=288 KB,传输1幅图像所需的时间需要10 ms。影响其速度主要有2个因素:EMIF所使用的ECLOCK和EMIF相关设置的寄存器。
在本系统中,ECLOCK采用了DSP的CPU4分频,使EMIF的CLOCK工作在150 MHz,大大提高了搬移速度。由于SRAM映射在DSP的CE2空间,考虑到读取数据需要建立(setup)、选通(Strobe)和保持(Hold)3个步骤,故将CE2相关寄存器的建立时间和选通时间选择为1个clk,经Hold时间设置为0。这样设置后EMIF总线的数据吞吐量为:
本文设计的图像压缩系统实现了分辨率为600×480、帧频率为100帧/s的视频信号输入的图像采集,并能够进行实时的JPEG压缩。系统采用DSP+FPGA的方案,虽然是一种较常用的组织方式,但在该系统中解决了一些关键的问题,大大提高了图像压缩速度及系统的灵活性。本系统已经应用于航天领域某监测系统,效果良好,运行稳定。
- 基于FPGA的高速图像采集系统设计(03-30)
- 在单个FPGA平台上采用多种工业以太网标准进行设计(03-13)
- 基于CPLD的CCD信号发生器的研究(04-08)
- 在嵌入式设计中降低CPLD的功耗(04-30)
- Xilinx FPGA的功耗优化设计(04-08)
- 基于太空级Virtex FPGA的灵活高性能计算平台(04-08)