宋长骏汤勇明
(东南大学显示技术研究中心,江苏 南京 210096)
随着高清显示器的普及,全景显示、视频融合、画中画等显示应用越来越多。这类视频拼接或视频融合的设计中都有多路视频同时输入后的处理问题[1]。
本文依托FPGA 硬件平台,在多视频输入情况下,规划对应的多时钟域处理方案,建立通用的视频缓冲控制模式,为后续实现视频缩放拼接、画中画显示等功能提供解决方案。
本文工作分为两个部分:第一,规划了多视频输入处理方案,设计多视频源的时序缓冲控制机制,利用全局缓冲减少关键时钟信号的传播延时,使用FIFO 实现跨时钟域信号同步,并设计仲裁策略使多路视频流共享存储资源。第二,在FPGA 硬件验证平台上实现缓冲控制机制。基于FPGA 平台和硬件编程设计实现之前的多视频输入缓冲控制模式。借助于多路视频缓冲模式实现了四进一出的视频拼接、画中画叠加等显示功能,在12.5 GB/s 存储带宽条件下支持了4 路1080P60 帧的视频输入和1 路输出。
因为FPGA 片上存储资源十分有限,视频处理系统对视频数据流输入的缓冲,主要是依托外部存储器[2]。多视频输入缓冲机制设计,按照视频处理的流程分阶段讨论,视频缓冲处理过程可划分为如下四个阶段:预处理阶段,时钟域转换阶段,存储器写阶段和存储器读阶段。
在预处理阶段,完成对输入时钟的缓冲处理和视频图像的缩放预处理。时钟信号具有高扇出的特点,采用FPGA 全局时钟资源驱动高扇出的时钟信号。对于每路视频流,可以在各自的时钟域内执行缩放预处理,缩放处理主要指缩小,图像的缩小操作不需借助外部存储器,可以用降采样的方式简单实现[3],从而可以降低对存储器的带宽需求。
图1 多视频输入处理机制
第二个阶段是时钟域转换阶段。各路视频流有着独立的像素时钟,需要将信号从输入视频流时钟域同步到系统工作时钟域。对于单比特信号的跨时钟同步,可使用打拍法实现,将两个或多个触发器串联。在大多数多时钟域设计里,两级的同步电路足以避免亚稳态的出现[4]。多比特的信号跨时钟同步多使用握手法和异步FIFO 法,相比于握手法,异步FIFO 法用更多的资源换取更高的传输速度[5]。
之后是存储器写和存储器读阶段。在存储器写阶段,系统将输入数据写入存储器。写入的数据在读阶段读出,交付给后续的算法处理和显示输出。在写和读阶段,需要实现存储器读写逻辑。本文设计使用DDR3 作为存储芯片。多路视频流需要访问存储器,而存储器是单端口的,所以设计一个多路复用器是有必要的。多路仲裁策略包括先到先得服务调度,优先级调度,和轮询调度策略[6]。为了保证视频数据的连续性,使用了乒乓缓存策略[7],在存储器开辟两块缓冲区域,一个写入数据,一个数据被读出用以后续处理。通过一对2-1 选择器,每次处理完成后交换功能。以扫描显示为例,使用两个帧缓存,当一个在扫描输出的时候,另一个在改写数据.到下一个周期改写好数据的一帧作扫描输出,而另一个帧缓存改写数据.总之是一个在接收数据一个在处理,处理完后两个再交换。从最后的输出来看,保证了数据的连续性。
图2 乒乓缓存策略
系统使用Xilinx 的XC7K325T FPGA 芯片,硬件板卡搭载了4 对HDMI 编解码芯片,编码芯片型号为ADV7511,解码芯片型号为ADV7611,存储芯片使用MT8KTF51264-DDR3 芯片[8]。编解码芯片支持1920×1080P 60Hz 的HDMI 视频编解码,系统只需要处理RGB 行场信号。DDR3 芯片提供了12.5 GB/s 的带宽资源。
图3 硬件平台架构布局
缓冲控制模式围绕着存储器进行设计。Xilinx公司已提供DDR3 控制器IP[9]。IP 支持上电后对DDR3 控制寄存器做预配置操作,在使用DDR3 执行读写操作过程中可自动进行预充电以及自刷新等操作而无需用户单独控制,使用该控制器只需按照接口协议发送控制信号和读写数据即可。可直接集成到本系统中使用[10]。
DDR3 存储器位宽为64 bit,数据读写速率设置为1 200 MB/s,设置8 突发写长度(burst lenth),一次读写操作存储512 bit 的数据。用户时钟接口速率为150 MHz,每个时钟节拍有512 bit 数据被写入或读出DDR3。由于该用户时钟与模块外部逻辑时钟为异步时钟,因此需要对数据做跨时钟域同步。DDR3 读写电路架构如图4 所示。
图4 DDR3 读写电路架构图
多路输入数据通道读写需要对DDR3 存储资源分时复用,因此需要设计状态机切换数据通道。全局状态机为多通道数据仲裁器,实现数据通道调度切换,局部状态机为读写控制器,负责生成DDR3 控制IP 的读写信号。
当不同触发器之间时钟信号延迟越小,其电路最大运行频率越高[11]。Xilinx 7 series FPGA 设置有多种针对时钟信号传输的专用路径。
全局时钟缓冲器(Global Clock Buffers,BUFG)输入端为时钟信号,输出端为全局时钟网络。BUFG可以驱动FPGA 所有逻辑资源、RAM 资源和DSP 资源,亦可驱动其他时钟电路结构。由于BUFG 驱动端到达FPGA 任意一处资源的路径通道经过专门设计,因此经过BUFG 时钟网络的时钟信号到达不同驱动端的时钟抖动(clock jitter)和时钟偏移(clock skew)极小[12]。
系统输入时钟包括200 MHz 差分时钟sysclk 和各路HDMI 解码后的148.5 MHz 像素时钟pixel_clk_ci(i取0,1,2,3)。200 MHz 差分时钟用于DDR3 IP 控制器,通过PLL 电路生成600 MHz 的DDR3 运行时钟ddr3_clk 和150 MHz 用户接口时钟ui_clk,像素时钟用于实时处理视频流数据,像素时钟的引入同样经过一级PLL 电路用于稳定时钟信号,生成新的稳定像素时钟ci_clk。因为系统占用逻辑资源分布遍及整个FPGA,因此为避免时钟偏移问题,所有经过PLL 后生成的时钟信号都要经过BUFG 结构[13]。图5 描述了本系统的时钟树设计。
图5 系统时钟树
通过在xdc 文件中添加时序约束语句可令软件在综合电路的时候优化结构设计,避免时序逻辑电路内组合逻辑链过长导致时序逻辑电路不满足建立时间和保持时间,约束语句如下:
高扇出信号是指的某一信号被过多的逻辑资源同时使用,信号到达不同逻辑块的时间不同可能导致时序不收敛问题,因此需要对此类信号做单独处理。
本文设计中的高扇出信号主要为时钟信号,对于高扇出信号可利用BUFG 驱动,Xilinx 原语声明使用BUFG 驱动信号方式如图6 所示。
图6 BUFG 例化
系统中有多个异步时钟域,包括以HDMI 接口输入的像素时钟为源的时钟域和以系统200 MHz差分时钟输入为源的时钟域。不同时钟域之间的信号交互必须同步,否则会导致出现亚稳态问题。对于多位数据,通过异步FIFO 进行数据同步。比如DDR 接口和外部数据通过异步FIFO 进行数据交互;对于单比特信号,如复位信号和控制信号,可以通过打拍法来进行,Xilinx 提供单bit 异步信号同步化原语[14-15],用法如图7 所示。
图7 使用XPM 原语例化同步器
综合后电路如图8 所示。
图8 单比特同步器电路
本系统支持4 路全高清视频输入和1 路输出。系统采用高清网络机顶盒作为视频源,该视频源可以提供1920×1080@60 Hz 的视频数据输出。通过1 进4 出的HDMI 矩阵输出为4 路独立的视频源,将这4 路视频数据接入本文设计的多视频源处理系统,系统输出的视频连接显示器进行显示。具体连接情况如图9 所示。
图9 测试平台示意图
本系统在DDR3 芯片提供的12.5 GB/s 存储带宽条件下,接收4 路1920×1080@60 Hz 视频输入,输出1 路视频。实现了视频拼接与叠加等显示功能。
图10 系统功能测试
系统对FPGA 资源占用不多,仅使用了7K325芯片内部6.09%的LUT、2.28%的FlipFlop 和6.18%的BRAM,表1 具体给出了系统资源使用。
表1 系统资源使用
本文依托FPGA 硬件平台,在多路高清视频输入情况下,提出了通用的视频缓冲控制设计,为后续实现视频缩放拼接、画中画显示等功能提供解决方案。
本文工作分为两个部分:第一,规划了多视频输入处理方案,针对视频输入处理流程,设计通用视频缓冲控制机制。包括在预处理阶段全局缓冲时钟信号,在视频时钟域内执行缩放预处理;在跨时钟同步阶段利用同步器和异步FIFO 传递信号;在存储器写入读出阶段,设计多路调度机制和使用乒乓缓存策略。第二,基于FPGA 平台硬件实现本文的多视频输入缓冲控制模式,并进行时序电路优化。实现四进一出的视频拼接,画中画叠加显示功能,在12.5 GB/s存储带宽条件下,支持4 路1080P 60 帧的视频输入和1 路输出。
本文将多视频应用中的多输入视频缓冲处理这一部分单独做研究,探讨缓冲控制机制的实现,提出的电路设计可应用在诸多应用中,具备实用性与通用性。