基于FPGA的视频缩放设计与实现

2017-09-09 10:30吴以凯喻金华肖铁军
软件导刊 2017年8期
关键词:乘法器流水线

吴以凯+喻金华+肖铁军

摘 要:视频缩放是视频处理领域的关键问题,可以分为硬件实现和软件实现。以FPGA作为处理芯片,按照SMPTE协议设计了一种视频缩放方法。设计采用模块化思想对系统进行了自上而下的划分,采用XILINX公司提供的Spartan6系列芯片XC6SLX45T,并使用Verilog HDL语言实现了各模块功能。该算法使用流水线结构,实验结果表明,该算法能够在FPGA上稳定运行,实现了视频缩放的效果。和原有方法相比,该设计方法减少了5个乘法器的使用,节约了系统资源。

关键词:FPGA;视频缩放;流水线;DDR3 SDRAM;乘法器

DOIDOI:10.11907/rjdk.171287

中图分类号:TP319

文献标识码:A 文章编号文章编号:1672-7800(2017)008-0083-03

0 引言

实时视频图像处理是图像处理领域的研究热点之一,广泛应用于监控、医疗、通信领域等。基于单片机的方案对于高分辨率视频数据的处理无法满足实时性要求,近年来现场可编程门阵列(FPGA)由于其自身优势得到了快速发展,在实时图像处理中的应用也越来越广泛。一些FPGA器件不仅提供了丰富的逻辑资源,还提供了RAM块、乘法器、锁相环、时钟资源等,为实现高性能的数字信号处理提供了便利。目前,市场上的数字视频处理芯片大多是从欧美、日、韩等地的公司进口的,也有一些来自中国台湾,但这些芯片主要适用于一些高度复杂的系统,不适用于单纯进行视频处理的场合。

图像插值是图像处理的基本问题之一。随着显示器的分辨率越来越高,原有的视频源制式越来越跟不上显示器的发展速度,故需要采用相应的视频缩放方法将输入的视频信号转变为可以在显示器中实现点对点显示的视频制式。为了实现视频缩放,以及视频信号的良好显示,需要对视频信号进行插值处理。本文设计了一种基于FPGA的视频缩放算法,并对算法进行了优化。该算法可占用更少的逻辑资源,且易于硬件实现。

1 算法原理

1.1 常用缩放算法

常用的线性视频缩放算法有最邻近插值、双线性插值、双三次插值[1]。对3种插值方式采用MATLAB进行检测的结果如图1所示,其中原图是一幅512*384的图像,分别用3种插值方法对原图进行4*4倍缩小,再进行4*4倍放大得出的图像如图1(b)~(d)所示。无论是采用PSNR[2]方法还是人眼观察,最终的实现效果都为:双三次插值>双线性插值>最邻近插值。最简单的插值方式为最邻近插值,但其实现的效果最差,边缘容易产生锯齿现象;双线性插值具有低通滤波器特性,会使高频信息受损,边缘处的过渡比较平滑,计算量比最邻近插值大;双三次插值能够保持较好的图像细节,精度较高,但其计算量最大。权衡FPGA的逻辑资源与显示效果,本设计采用双线性插值算法实现。

1.2 双线性插值算法描述

双线性插值采用可分离的线性插值将4个最近的像素组合起来:

I[x,y]=I[xi,yi]*(1-xf)*(1-yf)+I[xi+1,yi]*xf*(1-yf)+I[xi,yi+1]*(1-xf)*yf+I[xi+1,yi+1]*xf*yf(1)

圖2(a) 为插值的坐标定义,下标i和f表示各自坐标的整数部分和小数部分,图2(b)给了式(1)另外一种解释。每个像素的位置用一个方框表示,其权值由期望的输出像素和可用输入像素之间重叠的面积给出。公式(1)需要8个乘法运算,但对其进行因式分解后,能将乘法运算减少到3个,如式(2)所示:

I[x,yi]=I[xi,yi]+xf*(I[xi+1,yi]-I[xi,yi])

I[x,yi+1]=I[xi,yi+1]+xf*(I[xi+1,yi+1]-I[xi,yi+1])

I[x,y]=Iyi+yf*(Iyi+1-Iyi) (2)

2 实现方案

本设计主要包含DDR3 SDRAM缓存模块、视频缩放模块、输出显示模块和时钟生成模块等,如图3所示。

2.1 缓存模块

本设计采用两片片外存储器DDR3 SDRAM作为帧缓存,型号为MT41J64M16,工作频率可达到200MHz,数据传输速度达到800Mb/s,吞吐量可达12.8Gb/s,可以满足设计要求,而且具有成本低、功耗小的特点,但是DDR3 SDRAM的设计非常复杂,不仅时钟频率很高,而且还需要定时刷新。XILINX公司提供了一个可以用来控制DDR3 SDRAM的IP核MIG[3],不仅可使设计复杂度大为降低,而且缩短了设计时间。由于DDR3与数字视频流工作在不同的时钟域,需要解决跨时钟域处理问题。由于处理的数据位数为多位,故采用异步FIFO来解决,缓存模块如图4所示。

2.2 缩放模块

将视频数据中的视频数据以行的形式在vid_clk时钟下分别送入RAM0和RAM1中,然后分别从RAM0和RAM1中以148.5MHz的时钟频率将用到的第一行和紧邻的第二行数据取出,再分别从两行数据中以scl_clk的时钟频率分别取出待使用的两个紧邻像素点,共计4个像素点,如图5所示。

在判断待使用的像素点坐标时,水平方向上,利用缩放前和缩放后的相对步长判断待使用的像素点坐标,提取有效像素点提供给待插值点使用,如图6所示。

在权值计算过程中可以使用x轴方向和y轴方向系数值相乘的方法,但是该做法特别浪费资源。因此,将乘法计算改为采用LUT[4]的方法,事先将4个待插值点围成的正方形分为8×8=64个方格,计算每个方格的权重值,存入查找表中。优点是运行时不需要进行复杂的计算,从而减少占用资源,提高了系统运行速度,如图7所示。

2.3 时钟模块

利用Xilinx公司提供的PLL IP核,为了提高时钟驱动能力,将时钟信号输入IBUFG(Input Buffer Global)[2],然后再直接驱动全局缓冲BUFG(Buffer Global)[5],在缩放模块中实现4种制式的视频切换。148.5MHz、74.25MHz、27MHz、13.5MHz四个时钟的比例为11∶5.5∶2∶1,四个时钟的切换可以通过PLL倍频和分频得到,DDR3中需要的200MHz时钟可以通过晶振的100MHz二倍频得到。在上述对系统能正常工作所需的全局时钟设计过程中,用到的IBUFG和BUFG都为本设计中使用的FPGA原语库,通过原语例化[6]的方式加入设计中使用,所需的IP核由工具CORE Generator生成。仿真图如图8所示。endprint

2.4 输出显示模块

根据SMPTE协议[7-8],显示器正常工作需要相应的行场信号进行同步。在不同的视频制式下,该模块产生不同的start_hcnt、start_vcnt控制缩放模块何时开始缩放,以及产生缩放之后的行同步信号scl_hs、场同步信号scl_vs和数据有效信号de,所需时钟由时钟模块提供。

3 实验结果

本设计在公司数字视频信号处理芯片中加以应用,采用Verilog编程语言对算法进行描述,并使用Xilinx公司提供的可编程逻辑器件开发环境ISE Design Suite14.4进行编译和实现。同时,使用视频播放盒输出的HDMI视频信号,作为公司产品寻像器式监视器1090H的信号源进行验证,1090H搭载了一片Xilinx公司推出的Spartan6系列XC6SLX45T芯片。本设计实现了两种功能:

(1)实现几种常见视频制式之间的相互转换。以1 080p和720p之间的转换为例,使用在线逻辑分析仪Chipscope对该模块进行采点测试,无论是放大还是缩小都能满足要求。当输入视频源为720p时,缩放模块系统将其转换为1 080p。由于720p工作在74.25MHz,而采样的时钟信号为148.5MHz,所以当输入为720p时,捕捉到的有效像素个数为1 280*2=2 560个。输出制式为1 080p,输出的像素数据个数为1 920个。当输入视频源为1 080p时,缩放系统将其转换为720p。

(2)实现了视频画面的放大显示。本设计实现了两种视频放大比例,“放大1”可实现4/3*4/3倍中间画面的实时放大,“放大2”可实现2*2倍中间画面的實时放大。以1 080p为例,原始视频数据如图9所示,将视频有效区域vid_hcnt 240~1680,vid_vcnt 135~945的数据进行放大,得到“放大1”,如图10所示。将视频有效区域vid_hcnt 480~1 440,vid_vcnt 270~810的数据进行放大,得到“放大2”,如图11所示。

4 结语

本文采用先垂直缩放、再水平缩放的双线性插值算法很好地实现了视频缩放的要求,迎合了当前高清晰度视频图像的发展趋势。本文对视频缩放算法进行了相应优化,采用流水线的设计思想,以及适当使用查找表的方法得到了一种复杂度更小、占用逻辑资源更少的设计方法,提高了图像处理运算速度,满足了图像处理对系统实时性的要求。该技术在视频图像实时处理中具有广阔的应用前景。但是本文设计的方法只能实现几种视频制式之间的转换,而不能实现任意比例的实时转换,需要在后续工作中进一步完善。

参考文献:

[1] 李益.视频信号处理芯片中图像缩放模块的设计[D].广州:华南理工大学,2011.

[2] 苏延平.视频图像缩放的FPGA设计与实现[D].西安:西安电子科技大学,2014.

[3] 肖文娟.基于FPGA的多格式视频信号转换系统[D].太原:太原理工大学,2010.

[4] 朱艳亮.实时视频缩放算法及FPGA实现[D].长沙:中南大学,2009.

[5] 李晓明.基于FPGA的多通道视频缩放研究与设计[D].哈尔滨:哈尔滨工程大学,2013.

[6] 谢敏.任意比例实时图像缩放IP核的FPGA设计与实现[D].南京:南京理工大学,2012.

[7] 电影电视工程师协会.SMPTE 296M-2001[Z].2001.

[8] 电影电视工程师协会.SMPTE 274M-2008[Z].2008.endprint

猜你喜欢
乘法器流水线
Gen Z Migrant Workers Are Leaving the Assembly Line
一种低开销的近似乘法器设计
流水线
基于FPGA的流水线单精度浮点数乘法器设计*
报废汽车拆解半自动流水线研究
SIMATIC IPC3000 SMART在汽车流水线领域的应用
乘法器模块在FPGA中的实现
20×18位符号定点乘法器的FPGA实现