摘要: 基于AXI4Stream总线协议,在Xilinx公司提供的FPGA上实现了一个具有缺陷像素校正、色彩滤波阵列插值、图像降噪实时图像采集与显示功能的视频系统。AXI4Stream总线协议由ARM公司提出,该协议专门针对视频、音频、数组等数据在片内通信设计。利用IP核进行嵌入式系统开发具有简化设计、缩短开发周期等明显优势。设计结果显示,基于AXI4Stream总线的视频系统具有通用性强、独立、简洁易维护等优势。
引言
随着科技的发展,实时视频处理技术作为数字信号处理领域最活跃的研究方向之一得到了普遍的研究关注,并在通信、航空航天、雷达、遥测遥感和多媒体等行业中广泛应用。与用分离元器件构建电路的模式相比,基于现场可编程门阵列(FPGA)技术的新型视频采集系统在处理速度、可靠性、成本、扩展能力和开发周期等方面具有明显的优势。
近年来,基于FPGA的视频采集系统得到了充分的研究[1,2,3,4],但鉴于此类研究对图像数据未做通用的格式处理,使得系统过于集成,模块间过于依赖,降低了系统通用性。AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bust Architecutre)协议中重要部分,是一种面向高性能、高带宽、低延迟的片内总线。AXI4于2010年由ARM公司发布,其中AXI4Stream属于AXI4的子类,特别适宜流媒体数据的传输[5]。本文以一种专门针对视频数据传输的总线,即AXI4Stream总线,对整个视频采集系统进行重新研究。在保证高集成度的情况下,通过简化模块间通信接口大大提高了系统的通用性,具备良好的实用性和可扩展性。
1 AXI4Stream总线介绍
AXI4Stream总线主要应用于数字信息单向传递的系统中。经过采样的物理量,例如图像像素点数据、音频采样数据和经过离散数字信号系统处理的数据等,尤其适用于此总线协议。AXI4Stream 是一种单向的,由主机(master)到从机(slave)的基于握手信号传递数据的总线。系统采用的AXI4Stream总线是基于ARM公司发布的AMBA4 AXI4Stream Protocol v1.0参考手册[6],该标准已广泛应用在主流市场上的嵌入式系统当中。在保证功能完整的情况下,设计仅采用了部分信号线进行数据传输。相关信号线名称和功能解释图略——编者注。
2 系统结构简介
系统基于AXIStream总线,以FPGA为主控芯片,由DDR2缓存图像数据,从CMOS图像传感器读取数据并处理后,送入视频编码芯片,最终通过DVI接口输出,实现了一个实时图像采集与显示的视频系统。该系统硬件框图如图1所示。
图1 系统硬件结构框图
系统选用芯片组分别为:CMOS图像传感器选用Aptina公司的MT9V022,有效分辨率为752H×481V,该芯片广泛应用于视频监控、机器视觉等系统中;FPGA主控芯片选用Xilinx公司的Spartan6LX16,该芯片采用45 nm低功耗工艺技术,提供多达15 000个逻辑单元,满足了低成本、大容量应用的市场要求,并极大地降低了总功耗;DDR缓存芯片选用Micro公司提供的MT47H64M16HR25E,存储容量为1 Gb;视频编码芯片选用Chrontel公司提供的CH7301芯片,该芯片已广泛应用于显示接口电路中。
由于主控芯片选用Xilinx公司生产的FPGA,所以开发软件采用由该公司提供的ISE(Integrated Software Environment) Design Suit套件。
系统功能模块结构图如图2所示,所有模块均采用硬件描述语言Verilog HDL在ISE内实现。
图2 系统功能模块结构框图
对于图1中所示功能模块主要考虑以下几点:
① CMOS图像传感器芯片和视频编码芯片与主控FPGA芯片通信采用的是I2 C协议,所以加入了专门的I2C通信模块。
② 由CMOS图像传感器送出的图像数据并非基于AXI4Stream总线,引入了一个通用视频数据转AXI4Stream模块对数据进行AXI4Stream格式化处理。
③ 图像传感器存在缺陷像素(Defective Pixel),需要算法进行去除,所以数据需经过缺陷像素校正(Defective Pixel Correction)模块处理。
④ 从图像传感器获取来的像素数据是Bayer格式(Bayer Patten)的,需要转换为RGB格式,引入了色彩滤波阵列插值(Color Filter Array Interpolation)模块。
⑤ 经过格式转换后的原始数据噪点较多,需要引入图像降噪(Image Noise Reduction)模块。
⑥ 图像数据量庞大,而FPGA有限的存储空间不能满足数据吞吐需求,为了解决这个问题本文引入了外部存储芯片DDR2,并采用专用的内存接口管理(Memory Interface Controller)模块进行管理。
⑦ 图像数据需要匹配相应的时序信号进行输出,所以系统内设计了一个视频时序信号控制(Video Timing Controller)模块解决这个问题。
⑧ 送入视频编码芯片的数据格式基于AXI4Stream协议,需要引入AXI4Stream转视频数据模块将图像数据和视频时序控制信号进行整合,转换为编码芯片可直接利用的数据格式。
3 功能实现模块
3.1 I2C总线通信模块
I2C总线协议有以下几种不同的传输编码,按顺序依次为:开始位(start bit)、从设备地址(slave device address)、应答位(acknowledge bit)、数据信息(data message),以及停止位(stop bit)。一个典型的I2C总线读、写时序如图3所示。其中SCK为时钟信号线,SDA为数据信号线。空闲状态下SCK和SDA都为高电平,读写开始的标志是SDA信号线拉低电平,生成一个开始位,随后主设备送出8位从设备地址信号。从设备地址的最后一位决定了此次操作的读写性质,低电平表示写操作,高电平表示读操作。从设备随后拉低SDA信号线以应答。主设备随后以8位为单位进行读或写操作,并在应答后拉高SDA信号线表示停止位,回到空闲状态。
图3 I2C总线时序传输图
3.2 视频数据转AXI4Stream模块
由CMOS图像传感器MT9V022输出的时序如图4所示,其中LINE_VALID表示行数据有效,FRAME_VALID表示帧数据有效。本模块通过侦测FRAME_VALID和LINE_VALID信号的上升和下降沿,以判断图像中每一行数据的开始和结束,通过结合并行传输的10位像素点信息,对AXI4Stream接口信号进行匹配。该模块以主模式(master mode)接口输出,接口信号包含:tdata表示像素点数据;TVALID和tready表示握手信号;tuser表示一帧图像第一行第一个像素点;tlast表示每一行最后一个像素点。
该模块在ModelSim软件中的功能仿真图略——编者注。经验证,该模块可实现数据格式转换功能。
3.3 缺陷像素校正模块
由于生产制造上的缺陷、日常操作中的故障,或是基于温度或曝光差异等引起像素点电压变化,从图像传感器获取来的数据存在一定数目的缺陷像素数据。这些缺陷像素的特征大体可概括为以下几个方面:失活(总为低),活跃(总为高),粘连(固定值)。这些异常可以进一步表征为静态的(总是存在的)或动态的(作为曝光量或温度的函数)。
模块核心代码采用Xilinx公司提供的IP核——Defective Pixel Correction IP Core[7],其编程接口如图5所示。
图5 缺陷像素校正模块编程接口
对于图像中较大的固定区域,此模块需要去判断该区域是图像里静止的部分还是奇异点,也就是有缺陷的像素。由于处理的数据是原始的Bayer格式,此模块将对一个像素点相邻且相同格式(例如同为绿色分量)的像素点进行追踪比对,并将差值超过阈值的像素点间的信息记录下来。
模块里预先设定好阈值和连续比对帧数,当像素点差异在连续若干帧内都超出预定的阈值时,即可定为缺陷像素点。对于缺陷像素点,本模块通过内插的方式将相邻格式像素数据替换过来。
3.4 色彩滤波阵列插值模块
由于多数图像传感芯片有一层色彩滤波阵列,所输出的图像数据是Bayer格式的,每个像素点只含有红、绿或者蓝中的一种颜色分量。要生成一幅彩色图像,每个像素点都需要的三原色信息:红、绿、蓝。为了获得每一个像素点的其他颜色分量,需要用该像素点相邻区域像素的数据近似计算出其他两种颜色分量。本模块中采用线性插值法实现对每一个像素点的R、G、B分量的获取。
本模块核心代码采用Xilinx公司提供的IP核:Color Filter Array Interpolation IP Core[8],模块编程接口与缺陷像素校正模块编程接口相同,所以没有给出编程接口示意图。模块基本原理如下:以蓝色分量这一行(BG行)的插值为例,BG行的蓝色像素点的RGB分量值计算如式(1)所示,BG行的绿色像素点的RGB分量值计算如式(2)所示。
3.5 图像降噪模块
噪声是干扰图像质量的重要因素。一副图像在实际应用中可能存在各种各样的噪声,这些噪声可能在传输中产生,也可能在量化等处理过程中产生。此模块核心代码利用了Xilinx公司所提供的3个IP核,分别是:RGB to YCrCb ColorSpace Converter[9]、Image Noise Reduction[10]和YCrCb to RGB ColorSpace Converter[11]。3个IP间的结构原理如图6所示。
图像降噪模块降噪核心采用平滑滤波器对图像进行降噪处理。基本原理图略——编者注。
3.6 内存接口管理模块
本系统采用的FPGA芯片内部已经集成了MCB(Memory Controlling Block)硬核,并支持大部分厂家的存储芯片[12]。MCB硬核能够进行误码校验和偏移时钟校验。另外,Xilinx提供的原语PLL_ADV工作比较稳定,而且精度较高,这些特点保证了研发产品的质量。
MIG是一种用来生成DDR2控制器IP核的软件工具。该DDR2控制器模块包含可修改的HDL源代码以及相关的引脚约束和时序约束文件。用户可以在MIG的图形界面中选择存储器芯片、总线位宽,并设置CAS延迟、突发长度、引脚分配等参数。经验证,只需在ISE软件内配置好相关参数,并在接口编写好简单的读写控制模块,便可实现对DDR的读写。
理想情况下CMOS图像传感器输入数据速率和视频编码芯片输出数据速率相同。但CMOS图像传感器需要根据光线、场景等变化实时调整曝光时长,这样便引起了两者数据间时序上的位移,即时序无法得到实时匹配。为了解决这个问题,在本系统中,通过内存接口管理模块先缓存3幅图像数据。当CMOS图像传感器和视频编码芯片吞吐速率相等时,内存里数据保持动态平衡。当CMOS图像传感器输入速率小于视频数据输出速率时,内存里的数据面临被读空的风险,这时该模块会提前进行判断,以决定是否将上一幅图像数据重读一遍。由于CMOS图像传感器的时钟速率和视频编码芯片的时钟速率相等,故不会出现CMOS图像数据速率超出编码芯片数据速率(即数据溢出)的情况。
3.7 视频时序信号控制模块
所有的视频显示系统需要时序信号进行控制,一般包含了5根信号线:数据有效(data_valid),行空白(horizontal_blank),行同步(horizontal_sync),场空白(vertical_blank),场同步(vertical_sync)。所有这些信号结合起来就能让一幅幅图像在显示终端连续的显示出来。
本模块采用有效分辨率为640×480的时序控制信号,参照视频电子标准协会(VESA, Video Electronics Standards Association)显示器时序标准设定参数指标。该模块在ModelSim仿真软件环境下的功能仿真图略——编者注。该模块可按照设计要求正常工作。
3.8 AXI4Stream转视频数据模块
该模块将AXI4Stream数据和视频时序控制信号整合,使图像中每个像素的数据按照标准的视频时序输出。该模块核心代码使用了Xilinx公司提供的IP核——AXI4Stream to Video Out IP Core[13],该模块一般与视频时序信号控制模块(Video Timing Controller)结合起来使用,其功能原理框图略——编者注。该框图中有3个主要部分:流数据联结器(Stream Coupler)、数据格式化器(Data Formatter)和输出同步器(Output Synchronizer)。
流数据联结器主要由异步读写FIFO(Async FIFO)和写逻辑块(Write Logic)组成,对该FIFO的读写由输出同步器控制。该FIFO有两个主要功能:不同主频时钟间缓冲,即跨时钟域缓冲;在AXI4Stream数据和输出处视频信号间缓存数据,即数据缓存。数据格式化器接收来自流数据联结器的数据和视频信号控制模块输出的控制信号,并由此控制输出同步器。
AXI4Stream数据并无一定的周期性,数据间隔时钟周期多数没有规律。输出同步器作为主设备通过控制视频信号控制模块,使AXI4Stream数据和控制信号达到同步,同时送入数据格式化器,最终通过视频信号输出接口输出。
4 系统验证与分析
基于FPGA视频系统的PCB板已经制作完成,并通过了板级实验验证。系统图像分辨率采用标准的640×480,CMOS图像传感器和视频编码芯片工作频率为25 MHz,主控芯片主频为100 MHz,DDR内存芯片工作频率为200 MHz。使用硬件描述语言Verilog HDL编写好所有的程序代码,并进行代码综合、布局布线、最后下载到Spartan6芯片内部。系统首先通过I2C通信模块配置好CMOS图像传感器芯片和视频编码芯片,然后以末向始的顺序重置所有模块,握手信号由后一个模块依次向前传递,当位于最开始的视频数据转AXI4Stream模块收到后置模块tready的信号后,系统开始正常工作。
系统工作效果如图7所示,测试结果可以看到,系统实时图像显示清晰、画面稳定、功能符合设计要求。但视频图像显示效果并非为彩色,经过分析,原因是采用的图像传感器MT9V022并不支持彩色模式。接下来的工作就是改进CMOS图像传感器,采用分辨率较高且支持彩色模式的传感器。
图7 系统工作效果图
结语
利用FPGA进行嵌入式系统开发具有设计方法灵活高效、易于实现、可移植性强、通用性强等优势。利用多个成熟IP核进行系统开发,不仅大大减轻了设计人员的工作量,提高了工作效率,还使得个人完成大型复杂嵌入式系统变得现实可行。本文充分利用了Xilinx公司提供的IP核,系统结构清晰简洁,各个模块既独立又通用,从而使得整个系统更加易于维护和升级。AXI4Stream总线协议为系统模块间通信提供了方便。利用该总线协议不仅简化了系统内部开发,还使得该系统与其他系统对接变得更为便利。受篇幅所限,本文仅就功能框架进行了描述,并对各个模块进行简要介绍。本文介绍的实例开发与设计思路具有较好的工程应用与参考价值。
评论
查看更多