- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
YUV分离的两种FPGA实现
摘要:速度与面积的互换一直是基于FPGA设计中的一个不变的主题,在此介绍了两种YUV分离的FPGA的实现方式:基于面积的实现和基于速度的实现。前者仅用一片双口RAM串行,实现了YUV分离数据的输出;后者利用流水线的思想,基于两片双口RAM之间的乒乓操作,完成了模块的设计。通过Verilog HDL对两种方法进行了实现,并利用ModelSim完成了模块仿真。通过对比发现,二者各有优势:前者消耗硬件资源与面积较后者有很大改进;后者对提高整体系统实时性具有重大意义。因此,两种实现方式从两个角度为YUV的分离存储提供了可行的解决方案。
关键词:FPGA;YUV分离;双口RAM;流水线
0 引言
随着视频采集、压缩技术以及无线传输技术的飞速发展,基于FPGA的设计被广泛应用到各个领域,尤其在嵌入式系统。传统的视频技术解决方案(如采用CPLD+CPU的结构进行的设计)已经不能满足人们对于集成度与实时性的要求,而FPGA恰逢其时的出现,以其高度集成,并行处理和丰富的片上资源,同时随着FPGA自身性能的不断提高,各个FPGA厂商为视频处理提供了越来越多的高性能解决方案,使得FPGA在视频采集压缩以及无线传输领域的应用越来越广泛。
本文的研究是基于FPGA的实时视频无线传输系统的一部分。在进入视频压缩编码器之前,需要完成视频的采集,模/数转换,预处理,读/写SDRAM等操作,本文针对预处理过程中数字视频的分离存储进行了研究.即YUV的分离存储,并采用了两种方法实现了YUV的分离存储;一种是基于面积考虑的只用一片双端口存储器的实现;另外一种是基于速度考虑的用两片双端口处理器的实现。
1 基于FPGA的实时视频无线传输系统
本文的系统主要由视频采集、视频压缩、无线传输3大部分组成。系统结构如图1所示。在视频数据进入视频压缩编码器之前,视频需要经过CCD视频采集、TVP5146视频解码、有效数据抽取、预处理、SDRAM存储等操作。这些操作均属于视频采集前端系统。其中,CCD完成模拟视频的采集,TVP5146完成对输入模拟视频到数字视频的转换,而这里需要对TVP5146进行内部寄存器设置,设置通过I2C总线来完成。有效
数据抽取模块完成对有效视频数据的抽取,1帧视频数据由625行分属于奇偶场的视频组成,而系统所需要的是1帧视频的576行有效数据中的特定像素,而这个工作就是由有效视频抽取模块完成;预处理模块则是完成数字视频的串/并转换,即8位到16位的转换以及YUV的分离,这也是本文所做的工作,下面将做详细介绍;然后将视频存储在SDRAM中,实现了为H.264编码器提供稳定的视频流供压缩;3G模块将压缩模块
送出的视频流进行RTP封装,然后发送到远端接收系统。
本文所做的研究是基于YUV分离开展的,前面已经提过面积与速度是FPGA设计不变的主题。二者也是一对矛盾体,不可能同时兼顾,在系统设计中只能通过速度和面积的互换来使二者有机的统一起来。其中,基于面积的设计是利用一片双端口RAM,利用FPGA与SDRAM之间的频率差异来实现的,选定的FPGA的工作频率为48 MHz,SDRAM的工作频率为100 MHz,这样就实现了再一行视频数据的有效期完成对双端口RAM的写,然后利用一行视频数据的行消隐期,完成对双口RAM的读出操作,进而实现了YUV分离输出;而另一种实现是基于速度的实现,利用两片双端口RAM进行乒乓操作,完成了数据的无缝缓存和处理。本文通过Verilog实现了两种方法设计。通过对比仿真结果,均达到了预期结果。
[p]
2 基于面积的实现
面积通常可以通过一个工程运行所消耗的触发器(FF)和查找表(LUT)数量已经等效门数量来衡量,即所消耗的资源来衡量。本文基于面积的设计,充分考虑到用户对集成度和智能化的要求。对于集成度和智能化的提高,应该着眼于每一部分的优化,才能获得整个系统集成度和智能化的提高,因此,本文对YUV分离这个模块进行了研究优化。
该模块基于面积的设计采用一片双口RAM进行模块结构图如图2所示。有效数据抽取模块与控制器和双口RAM的输入时钟应与FPGA工作时钟保持一致。有效数据抽取为双口RAM提供写使能,每行提供的有效视频数据为704个像素,等到该模块检测到有效视频数据的时候,对双口RAM发出读使能,然后接下来利用704个CLK完成对双口RAM的写操作,等到写完毕时向SDRAM发出满信号,在SDRAM收到该信号后,产生读使能,以便对双口RAM构成的读操作。该模块的设计思想是基于FPGA与SDRAM频率差异进行设计的。一帧视频数据由625行视频组成,分奇、偶两场,每一帧都是由有效视频数据和场消隐数据组成的。其中23~310和336~623为有效视频数据,共576行。其余49行为场消隐数据,每一行同样分为行有效数据和行消隐数据。如果FPGA的工作频率与SDRAM的频率满足一定的差异(本文采用的FPGA频率为48 MHz,而SDRAM采用100 MHz的时钟频率),那么在一行视频数据的有效期完成对双口RAM的写入后,在该行视频数据的行消隐期内,可以通过输入100 MHz的时钟来完成对双口RAM的读操作。该模块完成对有效视频数据的写入需要1 408个CLK,而完成存储数据的读取需要704个CLK_R,所需时间为1 408×10-8+704×(1/48000000)。因为读/写是串行执行的,故以后每一行有效视频的写入/读出均需要相同的时间,一行数据读出完毕的仿真如图3所示。
[p]
3 基于速度的实现
前面提到了FPGA设计中面积与速度不断变换的原则,基于面积的实现方式只用到了一片双口RAM,在一定程度上达到了面积优化的目标,但是也看到读/写是串行执行的,在系统运行速度上确实有一定的缺陷,无法满足系统对实时性的要求,同时系统需要两个不同频率的时钟,容易引起亚稳态。下面将介绍一种基于速度的实现方式。
3.1 乒乓操作
乒乓操作是一个用于数据流控制的处理技巧,本文利用了两片双口RAM来作为乒乓操作的数据缓冲区,乒乓操作如图4所示。外部视频数据在输入数据选择控制模块和输出数据选择控制模块的控制下,完成缓冲区的选择和视频数据的输入/输出,并将经过缓冲的数据流不停顿地送到下一模块进行运算或处理。它适合于对数据流进行流水线式处理,能高效地完成大量实时视频数据的无缝缓冲和处理。在第一个缓存周期,也称之为双口RAM0的写周期。视频数据在双口RAM控制器控制下选择将视频数据输入到双口RAM0;在下一个周期,输入控制模块将视频数据输入到双口RAM1,同时输出控制模块输出双口RAM0的视频数据到后续模块进行处理;在第三个周期时,在输入控制模块的控制下,将输入视频数据输入到双口RAM0,同时在输出控制模块控制下,将双口RAM1中存储数据输出到后续模块,如此不断循环。
3.2 模块设计与仿真
该模块利用了两片双口RAM在不同的缓冲周期内分别进行读/写。该模块主要由有效数据抽取、双口RAM控制器、两片双口RAM组成,模块结构如图5所示。该模块在控制器控制下视频数据经有效数据抽取模块抽取后进入双口RAM,控制器为双口RAM提供读/写使能,通过写使能控制数据写入是否有效,data_valid是有效数据抽取模块,用来标识有效视频数据的信号,由它为模块提供写使能,等到写操作完成后向SDR AM控制器发送满信号,此时读使能r_en由SDRAM控制器提供。通过控制器提供的读/写使能完成两片双口RAM的读写切换。该模块利用了两片双口RAM之间的乒乓操作,流水地实现了YUV分离的并行处理。
[p]
工作流程如下:首先对双口RAM0进行写操作,写操作完成后经过316个CLK,开始对双口RAM1进行写操作。对双口RAM0进行读操作时,因为读操作只用到704个CLK,而写操作需要1 408个CLK,当对双口RAM0读完时,还需继续对双口RAM1进行写操作,等到双口RAM1输出ramfull高电平时进入下一个缓冲周期,此时对双口RAM0进行写操作,对双口RAM1进行读操作,如此循环,则实现了视频处理的流水操作。完成第一行数据的YUV分离输出所需要的1 408+316+704个CLK后,各行数据的输出则只需要1 408+316个CLK。于此同时基于速度的实现方式从提高系统工作时所能达到的最高时钟频率为出发点,利用了流水线的设计,提供了系统的频率,如果系统的工作频率是100 MHz,那么实际输出YUV分离视频数据所需要的时间仅为(1 408+316)×10-8。模块仿真如图6所示。
4 性能分析
4.1 操作时间
前面已经叙述过基于面积实现方式,完成一行视频数据的YUV分离输出需要1 408+704个CLK,而由于需要充分利用行消隐期来完成数据的分离输出,因此FPGA与SDRAM之间的频率必须满足一定的差异,这就使得该方式不能获得较高的系统最高工作频率。假设FPGA的工作频率为48 MHz,SDRAM的工作频率为100 MHz,那么实际完成一行视频数据的分离传输需要的时间为1 408×10-8+704×(1/48 000 000),而基于速度的实现方式,由于采用了两片双口RAM,因此可以在同一缓冲周期分别进行读/写操作,而下一缓冲周期两片双口RAM的操作方式切换,进而完成了数据的无缝缓存与处理,利用流水线的方式使YUV分离数据的输出速度得到了很大的提高,并且使得该模块的系统最高工作频率得到了很大的提高。完成一行视频数据的分离输出需要的CLK个数为1 408+316+704个。假设该模块的工作频率为100 MHz,那么实际完成一行分离数据输出所需的时间为(1 408+316+704)×10-8,通过对比可以发现,基于速度的实现使得系统可以在较高工作频率下运行,利用流水操作,进而实现了速度上的提升。
4.2 硬件资源
由上述可知,基于面积的实现方式只用到了一片双口RAM,而基于速度的实现方式用到了两片双口RAM,且用到了一个二选一多路选择器,同时后者的控制信号明显多于前者,不仅增加了寄存器开销,同时也增加了输入/输出端口的数量。通过对比可以发现,前者在面积上比后者确实有了较大优势。表1为2种实现方式的资源消耗列表。
5 结语
本文提出了YUV分离的两种FPGA实现方法,基于面积的实现利用了一片双口RAM,而基于速度的实现方式利用了两片双口RAM。通过对比发现,前者在消耗资源上获得了较大的改进,对整个系统的集成化有重大作用;而后者采用了两片双端口RAM的乒乓操作流水,实现了视频数据的输出,对提高整个系统的实时性意义重大。无论从面积还是速度为出发点,二种方案对整个系统性能的提高都意义重大。
射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...
天线设计工程师培训课程套装,资深专家授课,让天线设计不再难...
上一篇:几种抗扰度试验标准
下一篇:开关电源电磁干扰机理及新的抑制方法介绍