基于FPGA的高清视频采集与显示系统

本文介绍了一种基于fpga的视频采集与显示系统的设计。系统以fpga为核心,配合高分辨率ccd图像传感器、adc模数转换、视频编码器等,实现了高清视频实时采集与显示。详细阐述了色彩插值与色彩空间转换算法和burst传输的fpga硬件实现。测试表明,该系统运行良好,能够满足高清视频实时监控要求。
近年来,高清网络摄像机席卷视频监控市场,传统的模拟摄像机也在寻找新的出路提升图像质量,采用非压缩方案的高清模拟摄像机成为首选。一般来说,非压缩方案的硬件平台有dsp或asic或fpga。它们各有优缺点,fpga是现场可编程门阵列,兼顾了实时性与灵活性,而且还可以内嵌cpu,因此适合用来做图像处理。fpga的最大缺点是功耗太大,但本文设计的不是便携式消费电子,功耗问题可以不考虑。
本文在数据传输方式上进行了创新,一般的视频采集与显示方案均需要使用2个dma通道和2片sdram做缓存,本文采用自行编写的burst模块传输,仅需要一片sdram,节省硬件开销的同时降低了pcb板的复杂度。
系统总体设计
fpga是整个系统的核心,本文采用的fpga是cyclone系列的ep3c16,它内部集成了15408个逻辑单元,56个18×18乘法器,4个锁相环,ccd是sony的icx274,其有效分辨率是1600×1200,像素时钟是36mhz,并且逐行扫描。sdram是micron的mt48lc2m32b2,容量是2m×32bit,完全满足本设计的需要。
首先adc驱动ccd,ccd输出模拟视频,经过adc转换成数字图像数据,然后通过fpga内部的burst传输写到sdram,在sdram内部开辟三段数据空间。其中code区域存放nios软件代码,buffera和bufferb作为图像数据缓存,当图像数据写入buffera时,可以读bufferb用于显示,当一帧数据采集完后,切换burst传输地址,写入bufferb,此时读buffera用于显示,这样数据可以不间断地采集和显示,这就是所谓乒乓操作。fpga输出的视频数据经过编码器编码后形成串行码流,即sdi数据,然后经过同轴电缆线传输到具有sdi接口的显示器显示。其中,flash用来保存nios软件和fpga硬件配置信息。
在fpga内部实现的模块中,videoip是根据avalon总线规范编写的用户自定义模块,其余的模块均是altera提供的标准模块,只需要在sopcbuilder中调用即可,因此本系统的设计主要是videoip的设计。
硬件模块设计
硬件模块也就是videoip模块,主要由色彩插值、色彩空间转换、fifo三部分构成。基于成本与工程复杂度的考虑,本系统为单ccd系统,在ccd表面覆盖一层色彩滤波阵列(cfa),该滤波阵列采用bayer格式,每个像素点只有一个颜色通道,为了实现彩色显示,每个像素点必须要有rgb3个通道,要通过色彩插值才能获得其余两个通道。本文处理的视频数据都是ycbcr格式,因此还需要经过色彩空间转换将rgb格式转换成ycbcr格式。由于nios处理器的位宽是32bit,而ycbcr(4:2:2)是16bit,所以ycbcr必须经过fifo,当fifo半满时,通过burst传输写数据到sdram。值得注意的是:写入fifo之前,ycbcr的格式是4:4:4,为了方便显示,必须转换成4:2:2,本设计采取了最简单的处理方式,就是cb和cr间隔采样。实验表明,这种处理不影响显示效果。
色彩差值算法
考虑到本文设计的系统主要用于视频监控,因此采用最简单的插值算法,即双线性正交法。该算法的原理是在每个像素的领域取8个像素构成3×3阵列,该阵列中心的像素为待插值像素,其中一个色彩通道直接使用该像素的数据,另外两个色彩通道通过计算领域的2个或4个像素的平均值获得。不同位置的像素四周情况不同,根据待插值像素所处位置总结出4种情况(设待插值像素坐标为(x,y))。
(a)r(x,y)=[r(x,y-1)+r(x,y+1)]/2;
g(x,y)=g(x,y);
b(x,y)=[b(x-1,y)+b(x+1,y)]/2;
(b)r(x,y)=[r(x-1,y-1)+r(x+1,y-1)+r(x-1,
y+1)+r(x+1,y+1)]/4;
g(x,y)=[g(x-1,y)+g(x,y-1)+g(x+1,y)+
g(x,y+1)]/4;
b(x,y)=b(x,y);
(c)r(x,y)=r(x,y);
g(x,y)=[g(x-1,y)+g(x,y-1)+g(x+1,y)+
g(x,y+1)]/4;
b(x,y)=[b(x-1,y-1)+b(x+1,y-1)+
b(x-1,y+1)+b(x+1,y+1)]/4;
(d)r(x,y)=[r(x-1,y)+r(x+1,y)]/2;
g(x,y)=g(x,y);
b(x,y)=[b(x,y-1)+b(x,y+1)]/2
由于要形成3×3阵列,因此fpga硬件实现时,为色彩插值模块,采用3个双口ram分别保存3行数据,其中a、b、c、d、e、f表示寄存器,ccd的数据是在行场同步控制下从左到右、从上到下输出,在行场同步下先把第一行数据写到ram1,写完第一行再切换到第二行,写完第二行再写第三行,第三行写完第3个数据即可读出ram和各寄存器的数据做色彩插值,当第三行写完以后,第四行数据再写到ram1,以此类推,一直循环直到一帧数据处理结束。值得注意的是:3×3阵列各行的数据是循环切换的,当ram1保存的是3×3阵列的第一行数据时,3×3阵列第一行数据从左到右依次为b、a、ram1,第二行数据从左到右依次d、c、ram2,第三行数据从左到右依次为f、e、ram3;当ram2保存第一行数据时,第一行是d、c、ram2,以后各行循环切换,不再赘述。
3×3阵列的数据进入多路选择器,根据当前的位置以及所需的颜色通道选出4个像素进行相加求和运算。4个像素的获得方法是:当是1个像素时,复制3次;得到4个像素,当是2个像素求平均时,每个像素各复制1次;当是4个像素求平均时,不用复制。
本文采用的ccd为sony的icx274,其有效分辨率为1600×1200,而用于显示的分辨率为1280×720(720p),因此需要截取1600×1200为1282×722进行插值,增加两行两列是为了做边界处理。
色彩空间转换
本文采用的转换关系如下:
y=0.257×r+0.504×g+0.098×b+16
cb=-0.148×r-0.291×g+0.439×b+128
cr=0.439×r-0.368×g-0.071×b+128
在fpga实现时,以上转换关系要调用乘加单元。其中为了保持数据的稳定,增加处理速度,增加了三级流水线,由于系数为小数,因此先左移8位,取整数后分别与r、g、b相乘,再右移8位输出,最后与整数相加输出ycbcr格式数据。
突发传输模块
经过上述两步处理以后的视频数据即可用于显示,本文采用突发传输方案。视频数据首先经过fifo缓冲,然后经过突发传输写到sdram,数据从sdram读出也是采用突发传输,读出的数据再经过另外的fifo缓冲以后即可用于显示。突发(burst)传输一次进行多个数据单元的传输,而不仅仅是把每个数据单元作为一次单独的传输。这样便提高了从端口的数据吞吐量,在主端口一次处理多个数据单元时,可以达到极高的效率。要使用突发传输就必须严格按照突发传输的规范设计avalon总线接口。限于篇幅,本文不再详述avalon总线接口。
测试结果
本系统使用了48%的逻辑单元和40%的存储器,还有剩余的资源可以给系统增加更多的功能。该系统运行良好。本文设计的基于fpga的高清视频处理系统,能在fpga硬件设备中高速、高质量地对ccd传感器采集的bayer图像进行色彩插值和色彩空间转换,经过sdi编码后能够实时显示。在本设计的基础上可以增加更多的功能以改变图像质量,例如3a算法(自动曝光,自动白平衡,自动聚焦)。

扫地机器人市场降温,机器人企业该何去何从
美国移民局使用亚马逊的Rekognition人脸识别工具对移民进行监视
pmd和莱卡完美契合开发3D传感摄像头
漫谈数字卫星接收机的软件界面设计风
台积电病毒事件敲响产业链上下游警钟
基于FPGA的高清视频采集与显示系统
一文告诉你智能制造的基石是什么
反激电源MOS D-S之间电压波形产生的原因
普强深思智舱大模型全面助力客户驾驭智慧之车
德州仪器(TI)推出高集成可配置数字电源管理控制器
什么是张量处理单元(TPU)
直流转换无电感器-DC/DC Conversion with
国际15号卫星参数表
三星电子和SK海力士暂停向华为供货
人民日报点评:扫码点餐是可选项 不应是唯一选择
如何宅家拥有室内好空气,新风系统必不可少
用石墨烯造出纳米级磁铁可用于医疗电子领域
CAN总线如何防雷?
物联网电流检测:电梯物联网电流传感器
红米Note7Pro评测 相当典型的红米水桶机型