作者:侯絮絮,马松龄,孙 晨,郭子靖
摘 要: 针对CMOS图像传感器输出的LVDS串行数据在传输过程中因数据无法对齐引起误码率升高,图像分辨率降低问题,提出一种基于现场可编程门阵列FPGA的CMOS相机实时数据处理研究方案。采用VHDL硬件语言,对数据处理进行模块化设计,确保高速数据的正确采样,减少误码产生。经软件仿真及实测表明:该方案设计合理,系统运行稳定可靠,解决了高分辨率图像在高速传输中的数据校正问题,输出的图像轮廓清晰、无斑点。
关键词: CMOS图像传感器;FPGA;数据校正;高分辨率
中图分类号: TN919.3
文献标识码: A
DOI:10.16157/j.issn.0258-7998.2017.07.009
中文引用格式: 侯絮絮,马松龄,孙晨,等. 基于FPGA的CMOS相机实时数据处理设计[J].电子技术应用,2017,43(7):36-39.
英文引用格式: Hou Xuxu,Ma Songling,Sun Chen,et al. Real-time data processing design of CMOS camera based on FPGA[J].Application of Electronic Technique,2017,43(7):36-39.
0 引言
工业相机常用的图像传感器有CMOS及CCD[1-2]两种,CMOS图像传感器因其驱动灵活、编程简单、功耗低、成本低等优势已广泛应用到各种图像采集系统中[3-5]。由于高速传输中采集的图像数据量较大,易产生误码,若不及时校正,将严重影响图像质量,阻碍CMOS相机的普及应用。
本次相机系统开发采用CMV2000图像传感器,理论图像分辨率可达到2 048×1 088[6]。但开发过程中发现,误码问题未得到很好地解决,致使成像模糊,图像最高分辨率仅为1 088×768,远不能满足高分辨率的技术要求。
1 图像传输过程中存在的问题
相机控制系统功能框图如图1所示。系统采用FPGA[7-9],外部晶振向FPGA输入时钟信号,均为固定频率,再转换成驱动CMV2000图像传感器、采集像素数据及格式编排的时钟,同时为各单元提供异步复位信号;RS422作为系统通讯协议,将收到的串行数据转换为并行信号发送给CMV2000的驱动单元[10];FPGA通过SPI接口对CMV2000进行自动曝光、采样模式、复位等工作参数配置。
由于传输的数据是经压缩算法去除了图像中大部分内在相关性的已编码数据,即使相对轻微的误码,对解码图像数据也会有严重的影响。编码图像序列的一帧之内,若一个码字出错,将会对后面整个编码序列解码错误,导致误码扩散。
CMV2000图像传感器输出的16通道数据及1通道输出时钟的相对位置并未完全对齐,若用时钟直接采样会出现误码现象,致使数据传输错误。基于CMV2000的相机是高速高分辨率相机,传输的数据速率高达480 Mb/s,传输过程中若数据校正问题没有得到解决必会引起误码概率增加。从相机开发过程中发现,误码对实时传输的图像分辨率影响最大。图2(a)是数据传输错误图例,图2(b)是截取其局部图像进行3:1放大,图中出现许多白色的小雪花状斑点,而且各个楼层的棱角模糊不清,其中某楼层的右下角处图像不完整,如箭头所示。图像分辨率仅为:1 088×768。
因此,对16通道数据进行位和字的校正调整,将乱序数据及时校正是降低误码率、提高图像分辨率的基本保障,也是数据处理的核心内容。
2 数据处理单元设计
数据处理单元是驱动控制系统的核心部分,在FPGA内部完成,主要实现LVDS图像数据的串并转换、乱序数据之间的顺序调整、高速数据的乒乓缓存及Camera Link传输协议进行格式编码后发送4项功能。整个数据处理过程实现了图像数据的实时传输。
2.1 串并转换
数据在进行串并转换时,经时钟倍频后,在其下降沿开始采集数据。图像数据及同步数据存储时选用17个10位移位寄存器。当同步数据有效时,若16路并行图像数据也有效,则对其进行存储。图3是CMV2000一行数据的输出格式。每5个数据时钟周期中,FPGA接收的16路10 bit数据并非顺序输出,务必加大数据排序和存储的难度。每10个时钟周期内,FPGA接收到32路10 bit数据是连续的,可将连续的8个数据合并为1个数据后再进行数据存储。因此,仅需4个时钟周期就可以储存32个数据。由于数据传输芯片TLK2711需要接收16 bit的并行数据,所以FPGA在存储数据前将每个数据高6位补0,并将8个16 bit数据合并成一个128 bit数据进行存储。若不补0或少补0,则会导致大量数据相继错位,数据传输错误,严重影响输出图像质量。
2.2 位对齐和字对齐
常用的方法是使用有限状态机对数据位、字进行校正设计,但该方法代码冗长,过程中会产生大量剩余状态。若不及时处理,状态机可能进入不可预测的状态,会出现短暂失控;若对其进行处理又会耗用更多的逻辑资源;此外,在对时序进行仿真时,时钟有效边沿的输出端会产生许多毛刺;若加一个寄存器在输出端,虽可消除毛刺保证输出信号的稳定性,但输出会延迟一个周期,可能导致误码概率增加。
从节省逻辑资源、减少毛刺、降低误码率方面考虑,本次设计舍弃状态机,利用FPGA自身性能,采用VHDL硬件语言对每条通道中的乱序数据进行位、字校正调整编程设计。
数据校正流程如图4所示,在training模式下,经异步复位rstin后,数据全部清零(BitCunt<=0),进入眼图采样状态,要实现采样时钟恰好在眼图的中心位置,需通过FPGA的选型,对数据传输通道进行延时控制;然后将输出的并行10位数据与上次接收数据进行比较,若数据发生变化,则表明采样点不在眼图的中央位置,记录此时的延迟拍数,找到延迟边缘的中间点即为最佳采样位置,将采样点移到眼图中间即完成位对齐。位对齐完成后,进入图像字对齐(Align_Image Bit),为确保每个通道在同一时钟沿上采集到第一个字节,在传感器training模式下,发送相应的训练字节,接收模块解串后,通过旋转解串后的字节,让其与训练字节匹配,若采集到的10 bit字节与所期望的字节不匹配,则返回到Make_CtrlAlign操作,使控制进程重新对齐,如此反复,直到并行数据与训练字匹配为止,从而实现字对齐。
2.3 乒乓缓存
该模块的设计是为获得传感器最快的输出模式,将CMV2000的输出模式配置成16通道,但Camera Link接口标准在Base配置模式下仅有8通道,因此将两路图像数据转换成一路图像数据。实现与Camera Link协议Base模式下8个PORT映射对接[11]。因此,本次设计利用XC6SLX150内部IP核创建2个容量为256×128 bit的双口RAM进行乒乓缓存;然后将读出的图像数据宽度设定为16 bit,读出时钟采用较高频率。这种在双RAM中同时进行写入和读取操作的方法提高了数据之间的存储速度。
2.4 格式编码
Camera Link协议中,其接口芯片同时接收28 bit TTL/CMOS信号:24 bit数据信号、4 bit帧有效FVAL信号及行有效LVAL信号。FPGA仅接收数据信号,因此,异步FIFO(First In First Out)要在控制图像数据时序的同时,生成FVAL和LVAL两个同步控制信号。当前较常用的FIFO器件很难满足系统要求,本次采用VHDL硬件语言设计了一种既提供数据缓存,又匹配Camera Link接口标准的异步FIFO。整个系统使用3个FIFO,分别用于帧号、行号及图像数据的储存。在发送的每行图像数据前加8 bit辅助数据后,按照规定的列数和行数有序地选择FIFO并读取数据。此外,在每行、每帧之间的空闲状态,向TLK2711发送一个16 bit空闲码,保证TLK2711发送端串行数据的同步。
3 试验结果
根据以上软件设计,结合硬件设计,采用ISE14.3软件中自带的在线逻辑分析仪ChipScope,对本次设计进行板级图像数据和时序抓拍分析,图5为读取一行的像素数据,依次读取0~7通道,ch_id为相应通道号。图6为通道6采样的具体数据读取,addr为相应的地址,其中高低位像素做了重置。由ChipScope捕捉的时序图可以看出,该系统成功采集到了经过数据处理后的图像数据。
为了验证本次设计数据处理后的成像效果,采用频率为48 MHz的主时钟,数据传输速率为480 Mb/s,图7(a)为数据校正后的图片,选取相同图像部分进行3:1放大后对比发现,图7(b)中每幢楼层的棱角清晰,颜色分明,除此之外,楼层右下角可以清楚地看到几颗大树的树顶。整体图像无斑点、无错误区域,图像质量明显提高,分辨率达到2 048×1 088。
4 结论
通过深入分析图像数据传输过程中影响成像质量的原因,采用VHDL硬件语言,设计基于FPGA的数据处理程序,既充分利用FPGA内部逻辑资源,避免使用状态机处理数据校正时过度占用FPGA资源、产生大量毛刺和剩余状态问题,又能很好地解决误码问题。实验证明经过本数据处理环节后,数据传输中误码率降至5%,解决了高速传输过程中的数据校正问题,使最终显示到计算机上的图像质量高、无错误区域,分辨率达到2 048×1 088,满足预期的技术要求。
本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念
本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“
课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了
@2003-2020 中国电子顶级开发网