刘 宏,符意德
(南京理工大学计算机科学与工程学院,江苏 南京 210094)
图像处理系统的处理过程可以划分为前端、中端和后端3 个处理阶段,前端包括图像采集、存储等;中端是利用各种图像处理算法(如图像预处理、特征提取等)进行图像处理;后端包括传输和显示等。目前图像处理系统中的核心芯片主要有专用集成芯片(ASIC,Application Specific Integrated Circuit)、数字信号处理器(DSP,Digital Signal Process)、现场可编程门阵列(FPGA,Field Programmable Gate Array)和通用处理器(如ARM)等芯片[1]。基于ASIC 的系统灵活性和可更改性差,不适合图像处理原型系统的开发。DSP 内部采用了5 种技术[2]:哈佛结构体系、流水线技术、硬件乘法器、多处理单元和特殊的DSP 指令,在图像的中端处理中有着明显的优势,但是难以扩展和设计为多任务的复杂图像处理系统平台。FPGA具有灵活的开发方式,便于实现硬件的并行性和逻辑接口的设计,适合完成大数据量的简单处理,但是不擅长复杂的算法处理和逻辑控制[3]。通用处理器(如ARM)可以借助其工具软件或者支持的操作系统进行多种应用的扩展[4],但是在图像处理系统中所有的前端图像采集、中端和后端处理都是由通用处理器核来控制完成,不可避免地会造成系统功能瓶颈。
Xilinx 公司推出的Zynq-7000 系列全可编程片上系统(SoC,System on a Chip)采用了微处理器加可编程逻辑的结构[5],集成ARM Cortex A9 双核(PS,Processing System)以及最多可达相当于500 多万个逻辑门可编程逻辑(PL,Programmable Logic)单元,能够灵活地用于各种目的的应用。本系统采用ARM +FPGA 架构的Zynq 芯片,以ARM 处理器为中心,FPGA可编程逻辑部分为扩展子系统,它们之间通过高效的AXI(Advanced eXtensible Interface)总线实现有机的连接,通过PS 和PL 软硬件协同实现图像的高速采集、存储、传输和显示。
图1 系统结构原理框图
系统平台主要实现采集、存储、传输和显示4 部分功能。系统结构原理如图1 所示。图1 中左上方矩形为Zynq 芯片的PS 部分,阴影区为PL 部分。根据软硬件协同设计方法[6]的软硬件划分3 原则[7]:高速、低功耗由硬件实现;多品种、小批量由软件对应;处理器和专用硬件用以提高处理速度和降低功耗。系统软硬件划分为:
1)采集部分,Zynq 芯片的PS 通过软件模拟SCCB(Serial Camera Control Bus)协议配置OV7620 摄像头,PL 中使用Verilog HDL 描述OV7620 采集控制模块完成采集,将采集到的图像数据写入存储器部分的双端口RAM 和单端口RAM。
2)存储部分,PL 中使用Verilog HDL 将块存储器(BRAM,Block RAM)例化为一个同步读的双端口RAM 和一个单端口RAM,用来存储采集到的图像数据。
3)传输部分,在PL 中实现DMA Engine 使用AXI-DMA[8]将采集到的图像传输到DDR 中,在PS中配置AXI-DMA 的控制寄存器和利用DDR 控制器控制数据的传输。
4)显示部分,PL 中使用Verilog HDL 描述VGA控制模块从双端口RAM 中读取采集到的数据实现控制显示。
在本设计中使用OV7620 图像采集芯片。设置的图像窗口像素大小为320 ×240、VGA 模式、逐行扫描、16 位YUV(取其8 位Y 输出)。这些都是由PS的I/O 接口MIO14 和MIO15 对应为SCL 和SDA 通过软件模拟SCCB 协议设置完成。
当通过PS 软件模拟SCCB 协议设置完成后,根据OV7620 的采集时序图[9],可以确定OV7620 的单帧数据采集流程如图2 所示。采集图像数据的具体流程为:当VSYNC(场同步信号)为上升沿时,准备开始这帧的图像数据的采集;HREF(行同步信号)是上升沿时开始采集图像数据;之后每个PCLK(像素同步信号)时钟周期给地址计数器加1,同时当列计数器小于320 时列计数器加1,如果列计数器大于320则行计数器加1,同时列计数器清零;直到行计数器大于240 时这一帧的图像数据采集完成[10]。其中存储数据时双端口RAM 的a 端口地址addr_a=行计数×320 +列计数。并在PL 中根据采集流程使用Verilog HDL 描述OV7620 采集控制模块完成图像的高速采集。
图2 单帧采集数据流程图
目前大多数FPGA 器件都包含专用的嵌入式存储单元。随着EDA 工具的不断发展,FPGA 内部存储资源使用起来也非常方便,不仅可以根据需求来定制RAM/ROM/FIFO,而且所定制的存储器的容量、位宽等参数都可以编程设置[11]。在Zynq 系列的Z-7020芯片的PL 中包含有一块560 kB 的RAMB36E1,完全满足设计的需求。
本设计中,PL 中使用Verilog HDL 将BRAM 例化为一个同步读的双端口RAM 和一个单端口RAM,用来存储采集到的图像。其中端口a 用来向双端口RAM 中写采集到的数据,端口b 用来从双端口RAM中读取采集到的数据,以便于将采集到的图像数据传送至VGA 显示或进行中端图像处理的FPGA 加速。而单端口RAM 中的采集数据通过DMA Engine 传输到DDR 中,以便于后续的处理。例化的同步读的双端口RAM 如图3 所示。
图3 同步读双端口RAM 模块顶视图
对双端口RAM 的设定为:位宽8 位,容量76800,a 口写,b 口读。写数据时向addr_a 送入写地址并向din_a 送入要写的数据,当we=1 有效时数据写入RAM;读数据时只要向addr_b 送入要读的地址,在下一个时钟RAM 就会将数据送入dout_b 端口。当使用Xilinx ISE 中的ISim 对例化的双端口RAM 进行读写仿真得到如图4 所示的读写仿真波形。
图4 双端口RAM 读写仿真波形图
系统在PL 中设计一个顶层模块,其总线类型为AXI-Stream[12]型,以便于和DMA Engine(axi_dma)连接。在这个顶层模块中包含了采集模块、存储模块(例化的RAM)和VGA 显示模块。在顶层模块中,由于BRAM 的存储容量有限,需要将采集到的大量图像数据传输到DDR 中。因此在PL 中实现DMA Engine,使用AXI-DMA 将采集到的图像传输到DDR,同时PS 中DDR 控制器对数据的传输起控制作用,图5 为系统的数据传输控制结构框图。
图5 数据传输控制结构框图
系统中有2 个AXI-Interconnect[13]互联矩阵作为PL 和PS 接口,一个连接到AXI_GP[13]端口,一个连接到AXI_HP[13]端口。
连接到AXI_HP 接口的互联矩阵AXI-Interconnect_1 同时与外设的主从设备(axi_dma_0)相连,实现大数据量的传输,并且通过AXI_HP 访问存储器设备(DDR)。
连接到AXI_GP 接口的互联矩阵AXI-Interconnect_2 通过AXI Lite 连接到外设(axi_dma_0),主要是作为ARM 处理器访问外设寄存器的通道,数据量不大,因此采用PS 部分的AXI_GP 端口。
AXI-DMA 构建了从PS 内存到PL 的高速传输通道,同时完成高速通道中AXI-HP <--->AXI-Stream的转换。其中M_AXI_MM2S 是从内存中接收数据,M_AXI_S2MM 是向内存中发送数据。M_AXIS_MM2S 和M_AXIS_S2MM 分别是向一个接口类型为AXI-Stream 的设备(top_stream_ip)发送和接收数据。
上面的总线AXI-DMA 是完成总线协议转换,如果需要做更多的处理(OV7620 控制、双端口RAM 控制、VGA 显示控制),则需要生成一个自定义Stream类型的IP 核,与上面AXI-DMA 的Stream 接口连接起来,实现处理完成后的数据输入输出。中端图像处理算法的硬件加速也在自定义Stream 类型IP 核(top_stream_ip)中实现。
要实现数据的传输,除了需要接口和总线之外,还需要在自定义Stream 类型IP 核中遵守传输的协议。在此主要使用到的协议是AXI(Advanced eXtensible Interface)协议[12]。AXI 协议主要描述的是主设备和从设备之间的数据传输方式。
一幅图像在VGA 接口的显示器上显示,主要需要5 种信号:行同步信号、场同步信号和RGB 三原色信号。VGA 接口是图像信号的接口。计算机内部存储的图像信息,被VGA 控制模块转变为R、G、B 三原色信号,同时VGA 控制模块产生行同步信号和场同步信号,这些信号通过电缆传输到显示器完成显示。
在本设计中选择的显示模式为XGA(800 ×600),对应的水平时序和垂直时序中的帧长分别为1040 和666。在PL 中使用Verilog HDL 描述VGA 控制模块产生行同步信号(vga_hsync)和场同步信号(vga_vsync),并根据要显示的像素点产生对应像素的地址。依据双端口RAM 的同步读时序将对应像素的地址输入到端口b 的地址端,dout_b 将会输出该点需要显示的像素值。再将像素值对应为相应的R、G、B 颜色信号传输到显示器实现显示。具体的显示控制流程[14]如图6 所示。
图6 VGA 控制模块流程图
系统平台运行测试,通过OV7620 摄像头采集一幅320 ×240 的图像到BRAM 中,再将其传输到DDR中,并通过VGA 接口的显示器显示结果,图7 为整个系统的实物图及运行结果。
1)前端采集存储。
图7 系统平台实物图
采集部分,在构造的同一平台下分别用单纯ARM 的图像采集系统和软硬件协同设计实现的ARM+FPGA 的图像采集系统做了对比。单纯ARM的图像采集系统,是在采集时通过PS 软件模拟SCCB协议配置OV7620,并在配置完成后同样利用PS 的中断系统和GPIO 根据采集时序得到图像数据,而没有用到PL。
采集一幅320 ×240 的灰度图像,单纯ARM 的采集系统完成采集需要的时间为708612 μs,而软硬件协同设计实现的ARM +FPGA 的图像采集系统完成采集需要的时间为3022 μs。显然通过软硬件协同设计实现的图像采集系统较单纯ARM 的采集系统速度提高了234 倍。
存储部分,将PL 中BRAM 例化为双端口RAM,比起在FPGA 中直接使用reg 寄存器存储采集到的数据资源利用更加合理,并且在开发过程中综合实现的时间明显缩短。
2)中端内部传输和中端图像硬件加速处理。
传输部分,使用AXI-DMA,可以将采集到的图像数据传输到DDR,使得中端处理运用复杂的图像处理算法通过ARM 进行图像处理变得方便。同时还可以使用AXI-DMA,将处理中的图像数据从DDR 中传送到PL 中,从而实现中端图像处理算法的FPGA 硬件加速。
在本系统的中端图像处理中,测试了一些典型的图像处理算法,分别与利用单纯ARM(只用Zynq 芯片的PS 部分)的处理在处理效果和速度方面做了比较。图8 为采集的一幅320 ×240 的原始灰度图像,图9 是使用直方图均衡化算法进行图像增强,图10为利用Sobel 算子进行边缘检测,图11 是运用3 ×3大小窗口完成中值滤波。图9~图11 的左侧图像为本系统通过FPGA 硬件加速的处理结果,右侧图像为单纯使用ARM 的处理结果。
图8 采集的原始灰度图像
图9 直方图均衡化后的图像
图10 Sobel 算子边缘检测后的图像
图11 3 ×3 中值滤波后的图像
从图9~图11 可以看出ARM +FPGA 的图像处理和单纯使用ARM 纯软件的处理效果基本一致。但是由表1 所示的速度对比可以看出,基于Zynq 的ARM+FPGA 硬件加速图像中端处理明显比单纯使用ARM 纯软件的方案速度高。
表1 ARM+FPGA 和单纯ARM 图像中端处理速度对比
3)后端图像显示。
显示部分,能够清晰地显示采集到的图像,并且能够满足不同分辨率的图像显示,为直观地观察图像处理的结果提供了方便。
运行及测试结果表明,本文设计的基于Zynq 芯片的图像处理系统平台实现了完整的图像高速采集、存储、传输和VGA 显示功能。该系统明显提高了采集速度,使得Zynq 芯片的PS 有所解脱去完成控制和更复杂图像处理算法。图像数据传输到PS 之前,可以利用PL 对图像数据进行预处理、特征提取等,也可以通过DMA Engine 将DDR 中的数据传输到PL中,既为图像处理系统提供了可扩展的FPGA 硬件加速通道,也通过一些典型的图像处理算法验证了其可行高效。采集到的数据直接显示,不用通过串口等传输到后台的PC 机,这有别于传统的图像处理系统的设计[9,15]。系统平台易于扩展,资源利用合理,为更复杂的图像处理应用系统提供了可扩展的基础平台。
[1]郑容.基于FPGA 的图像采集与预处理系统设计[D].武汉:武汉理工大学,2009.
[2]胡汉梅,程妮,李海军.基于DSP 图形液晶显示器接口及程序设计[J].液晶与显示,2007,22(5):623-628.
[3]李佩斌,黄莹,赵誉婷.基于DSP+FPGA 的嵌入式图像处理系统设计[J].现代电子技术,2014,37(20):95-98.
[4]孙咏.基于ARM 和DSP 的嵌入式实时图像处理系统设计与研究[D].杭州:浙江大学,2005.
[5]杨晓安,罗杰,苏豪,等.基于Zynq-7000 高速图像采集与实时处理系统[J].电子科技,2014,27(7):151-154.
[6]陆佳华,江舟,马岷.嵌入式系统软硬件协同设计实战指南-基于Xilinx Zynq[M].北京:机械工业出版社,2012:152-165.
[7]张燕,胡桂.SOC 设计中的核心技术[J].微计算机信息,2007(29):110-112.
[8]Xilinx Inc..AXI DMA v7.1 LogiCORE IP Product Guide[EB/OL].http://www.xilinx.com/support/documentation/ip_documentation/axi_dma/v7_1/pg021_axi_dma.pdf,2014-04-01.
[9]雷霏霖,梁志毅.基于CMOS 传感器OV7620 采集系统设计[J].电子测量技术,2008,31(12):110-112.
[10]宋海吒,唐立军,谢新辉.基于FPGA 和OV7620 的图像采集及VGA 显示[J].电视技术,2011,35(5):45-47.
[11]赵吉成,王智勇.Xilinx FPGA 设计与实践教程[M].西安:西安电子科技大学出版社,2014:292-299.
[12]Xilinx Inc..AXI Reference Guide v14.3[EB/OL].http://www.xilinx.com/support/documentation/ip_documentation/axi_ref_guide/latest/ug761_axi_reference_guide.pdf,2012-11-15.
[13]何宾.Xilinx All Programmable Zynq-7000 SoC 设计指南[M].北京:清华大学出版社,2013:70-81.
[14]朱奕丹,方怡冰.基于FPGA 的图像采集与VGA 显示系统[J].计算机应用,2011,31(5):1258-1264.
[15]乔永征,梁志毅,朱毖微.基于OV7620 和FPGA 的图像采集系统设计[J].计算机测量与控制,2009,17(9):1857-1859.