基于FPGA的双端口视频缓冲器设计

2014-02-02 08:45
液晶与显示 2014年4期
关键词:缓冲器时钟仲裁

唐 斌

(贵州财经大学 信息学院,贵州 贵阳 550025)

1 引 言

在多数的基于FPGA(Field Programmable Gate Arrays)的视频处理系统中,通常需要使用片外大容量存储器SDRAM(Synchronous Dynamic Random Access Memory)缓存海量视频资料[1-2]。同时为了确保视频流的流畅性,甚至使用多块SDRAM内存和大容量的FIFO(First In First Out)实现乒乓操作以提高读写速度[3]。为了节省内存资源和提高系统的数据带宽,本文设计了一种基于FPGA的视频缓冲器,系统使用FPGA片内4块小容量的FIFO构成双端口缓冲器,在仲裁器合理的调度下,采用单块SDRAM实现了视频数据的实时采集和输出。

2 系统结构和工作原理

本文的双端口视频缓冲器采用FPGA和SDRAM构成,系统的结构如图1所示。由于系统的输入视频和输出视频像素时钟可能不同,需要使用FPGA片内存储资源构建FIFO完成跨时钟域视频数据的采集和输出。由于FPGA片内存储器资源有限,为了确保视频流的流畅性,还需要借助片外存储器与FPGA构建视频缓冲器。本系统采用SDRAM暂存采集的海量视频数据,并将其内存储单元分成两块分别缓存两帧不同视频数据,以乒乓方式完成一帧数据的输入和一帧数据的输出。

图1 系统方框图Fig.1 Block diagram of video processing system

在本系统中,所采集的视频数据来源于摄像头OV7670,其时钟频率为25 MHz,视频数据采用RGB565格式,因此采集模块的数据带宽为400 Mbit/s;而显示模块VGA的数据带宽则是400 Mbit/s (16 bits×25 MHz)。SDRAM的工作时钟频率选择为100 MHz,其数据带宽为1 600 Mbit/s (16 bits×100 MHz),因此在理论上整个系统可以使用单存储器实现一路视频数据的实时采集和显示。由于SDRAM不支持同时读写功能,而整个系统可能会同时存在读、写和刷新3种操作请求,因此还需要仲裁器分配SDRAM的总线使用权。

3 模块设计

3.1 SDRAM控制器设计

SDRAM存储器具有高速度、大容量和高性价比等优点,广泛应用于数据采集和处理系统中[1]。尽管SDRAM具有高速度优点,但其实际带宽往往低于其理论带宽。原因有两个:一是SDRAM是利用电容存取电荷的原理保存信息,由于电容介质存在漏电现象,因此需要周期刷新保持数据,而在刷新周期中不允许读写SDRAM,因此刷新会降低其实际带宽;二是因为SDRAM的行列地址线采用复用方式,每次读写数据操作都分为行地址准备和数据操作两个阶段,分别消耗时间长度为TREADY和TOPERATE。在列地址准备阶段,需要发出激活命令,提供读写单元的行地址,等待TRCD时间后进入数据操作阶段[1]。对于写操作,数据操作阶段发出写命令,同时提供读写单元的列地址和待写入的数据;对于读操作则需要在发出第一个读命令和列地址后等待TCAS时间才能读取数据。因此SDRAM的实际带宽为:

(1)

SDRAM的读写机制比较复杂,支持激活和预充电等诸多操作命令[1]。为了简化SDRAM的操作,本系统的SDRAM控制器只选取了激活、预充电、自刷新、空闲、模式寄存器配置、读和写等7条指令。为了简化SDRAM的读写操作,SDRAM的操作时序封装在控制器中,外设只需提高读写数据的起始地址和读写使能信号就能读写SDRAM存储器。同时为了提高SDRAM的实际带宽,控制器采用分块连续读写方式增大操作时间TOPERATE。SDRAM控制器由外设接口电路、初始化状态机、地址计数器、命令字解析电路和SDRAM物理接口电路构成。其工作时序如图2所示,具体工作机制为:在SDRAM初始化时,将其猝发长度设置为1,对于读写数据长度为N的数据都分解为N次猝发长度设置为1的读写操作。当外设提出读写请求时,只需提供一帧视频数据的起始地址,命令字解析电路(使用状态机实现)发出行激活命令后给出两条空操作命令,在T4周期启动地址计数器准备读写数据的列地址并给出第一个读或写命令,N个数据读或写命令完成后,发出预充电命令关闭当前行完成一次数据块的连续读写,因此一次数据块的读写时间固定为(N+4)/Tsclk。(Tsclk为SDRAM控制器时钟周期)。为了降低地址计数器和命令字解析电路的复杂度,数据长度N和SDRAM行长度L须设置为L=K×N(K为整数),以防出现跨行读写现象。

图2 读写时序图Fig.2 Diagram of reading or writing timing

3.2 FIFO设计

本系统使用两块小容量的异步FIFO和同步FIFO串联实现跨时钟域视频数据的传输,FIFO由FPGA中免费的IP核生成。对于写缓存器而言,异步FIFO与视频采集模块连接,其写端口的时钟与视频采集模块的像素时钟相同,读端口的时钟与SDRAM的工作时钟相同,其主要功能是实现跨时钟域数据的缓冲[4];同步FIFO与SDRAM控制器直接连接,工作时钟与异步FIFO的读端口时钟一致,为了支持SDRAM控制器的分块读写机制,将其深度和宽度设置成数据块的规格,待传输的数据将被切成固定大小的数据块。为确保数据块的大小固定不变,禁止对同步FIFO进行同时读写操作。

读缓存器的设计与写缓存器稍有不同,同步FIFO连接的是显示模块,其工作时钟与显示模块相同,主要功能是预存待显示的视频数据。异步FIFO 则与SDRAM控制器相连,读端口采用显示模块的工作时钟,为确保写端口数据有足够的建立时间和保持时间[5],工作时钟频率SDRAM工作时钟相同,但相位相差180°。同样为了支持SDRAM控制器的分块读写机制,将其宽度设置成数据块的大小,但深度设置为数据块深度的2倍。异步FIFO的主要功能是实现跨时钟域视频数据的缓冲。在同步FIFO未写满的情况下,异步FIFO中的数据直通同步FIFO。

3.3 仲裁器设计

由于SDRAM的总线采用分时复用方式,不支持同时读、写和刷新功能,为了确保视频流的流畅性,需要合理分配SDRAM的总线使用权。常用的仲裁方法有固定优先级、随机争用和优先级循环等算法[5]。如果采用固定优先级算法时可能会出现读请求长时间占用总线风险而导致写缓存溢出,或是写请求长时间占用总线风险而导致读缓存无数据可读。而采用优先级循环算法可能导致刷新命令不能及时得到响应造成数据丢失。综上考虑后,本系统采用固定优先级算法和优先级循环算法相结合的混合算法,该算法可以实现读请求、写请求优先级循环变换,刷新请求优先级设置为最高。

图3 仲裁器电路图Fig.3 Diagram of arbitrator circuit

视频缓冲器可以结合行、场同步信号的特点使用。同步信号的周期一般由同步头、消隐前肩、有效显示时间和消隐后肩等4部分构成[6]。场同步头可以用来启动新一帧视频数据的采集和输出并复位视频缓冲器。在整个行同步的周期内,只要异步FIFO读空,便产生读请求信号;写缓冲器则在行同步和场同步信号均有效期间采集外设数据,写缓冲器的同步FIFO写满时,将产生写请求信号;而刷新请求信号则由计数器产生,由于在读写数据期间不能响应刷新请求信号。为了解决这个问题,本系统采用了两种方法:一是将刷新请求优先级设置成最高,读和写请求优先级设置成相等。二是将刷新周期缩短(N+10)×Tsclk时间,缩短的时间可以确保完成读或写任务后再执行刷新操作而不造成数据丢失。

仲裁器电路如图3所示,当有刷新请求时关闭两个与门屏蔽掉读、写请求,因此刷新请求优先级最高。控制器的功能之一是实现数据选择器轮流查询3个请求信号;之二是在某个请求获得使用SDRAM总线的使用权时,禁止其他信号的请求(即不支持中断),读、写任务或刷新任务执行过程中控制器关闭数据选择器。任务完成后释放总线,然后控制器打开数据选择器查询下一个请求信号,如果请求有效,对其授权总线使用权,否则继续查询下一个请求信号。

3.4 设计仿真

为了防止视频缓冲器出现读空和写满错误,在设计电路时需要对视频的流畅性分析以选定合适的参数。影响视频流畅性的因素有:

(1)读缓冲器的时钟周期Trclk、写缓冲器时钟周期Twclk和SDRAM系统时钟周期Tsclk。三者的时钟周期必须确保SDRAM带宽大于读写缓冲器带宽之和。

(2)仲裁器的切换时间。尽量压缩仲裁器的切换时间,本系统仲裁器的切换时间为3个时钟周期。

(3)行同步信号的消隐前肩和后肩。视频数据的采集和输出一般在行同步信号的有效显示期间,但读缓冲器可以充分利用额外的行消隐前肩和后肩时间预读取视频数据,而写缓冲器可以利用额外的行消隐前肩和后肩时间保存数据。

(4)读缓冲器的同步FIFO的容量和写缓冲器中异步FIFO的容量。两个FIFO容量的选取须考虑最坏情况。以写缓冲的异步FIFO为例,如果同时存在读、写和刷新请求,但写请求优先级最低,此时异步FIFO 需要缓存数据以等待SDRAM完成刷新和写任务,容量必须大于(N+18)Tsclk/Twclk。写缓冲获得总线后,由于本系统不支持同步FIFO同时读写,此时异步FIFO容量应大于(2N+25)Tsclk/Twclk。写操作结束后释放总线等待读任务执行,此时容量应该大于(2N+25)Tsclk/Twclk+ (N+7)Tsclk/Trclk-N。

最后本文根据上述分析对相关参数进行设置,并对设计的视频缓冲器进行了仿真。仿真软件采用的是XILINX[7]的ISE12.4,片外存储器SDRAM的仿真模型选用的是MT48LC8-M16A2,其工作时钟频率根据初步选择为100 MHz,FPGA采用的是SPARTAN3系列中的XC3S1200E芯片。数据块设置为固定的64×16 bit格式,在仿真的过程中FIFO的宽度固定为16位,写缓冲器的同步FIFO容量与数据块相同,读缓冲器的异步FIFO容量设定为数据块的两倍。其余FIFO的容量根据实验结果调整为数据块的整数倍。摄像头OV7670和VGA分别作为输入和输出模块,工作时钟频率都选择为25 MHz,视频数据采用640×480格式。最后实验仿真结果如表1所示。

仿真结果表明:对于写缓冲器而言,使用两个容量为128字节的FIFO就足够保证采集的视频数据传输无丢失错误,增加异步FIFO的容量不能继续提高系统的带宽;对于读缓冲而言,影响其性能的主要部件是同步FIFO的容量,适当地增加器其容量可以降低SDRAM工作时钟的频率。当读写缓冲器的容量为640字节时,SDRAM工作频率须大于110 MHz;当读写缓冲器的容量为768字节时,SDRAM工作频率只需大于71 MHz。用户可以根据实际需要在系统稳定性和FPGA片内存储器资源之间选择。

表1 仿真结果表

4 结 论

使用FPGA 2块片内同步FIFO和2块异步FIFO结合片外存储器SDRAM构成了一个双端口视频缓冲器。利用FIFO传输跨时钟域数据的传输,并将数据切成固定大小的数据块以支持SDRAM的分块读写数据机制,在仲裁器的合理调度下,使用单块存储器SDRAM实现了视频数据的实时采集和输出。同时本系统的设计和调试简单,用户在保证视频流的流畅性的前提下可以通过提高系统的工作时钟减少异步FIFO容量,降低FPGA片上存储资源的使用量;或是在增加FIFO的容量可以降低SDRAM的工作时钟而提高系统的稳定性。因此本设计具有一定的灵活性和高效率,在视频图像处理工程中具有一定的参考价值。

[1] 王骞,丁铁夫.高速图像存储系统中SDRAM控制器的实现[J].液晶与显示,2006,21(1):48-51.

Wang Q,Ding T F. Realization of SDRAM controller in high-speed image storing system [J].ChineseJournalofLiquidCrystalsandDisplays,2006,21(1):48-51.( in Chinese)

[2] 吉倩倩,苏光大,向守兵.嵌入式邻域图像并行处理机的液晶显示系统设计[J].液晶与显示,2011,26(6):768-773.

Ji Q Q,Su G D,Xiang S B. Design of LCD display system of embedded neighborhood image parallel computer[J].ChineseJournalofLiquidCrystalsandDisplays,2011,26(6):768-773. (in Chinese)

[3] 吕耀文,王建立,曹景太,等.移动便携图像存储系统的设计[J].液晶与显示,2012,27(5):697-702.

Lv Y W,Wang J L,Cao J T,etal. Design of portable image storage system [J].ChineseJournalofLiquidCrystalsandDisplays,2012,27(5):697-702. (in Chinese)

[4] 刘少华,陈明义. 基于FPGA的高速海量FIFO的设计[J].信息技术,2009,33(9):52-54.

Liu S H,Chen M Y. Design of high speed and great capacity FIFO based on FPGA [J].InformationTechnology,2009,33(9):52-54.(in Chinese)

[5] 李耀荣,王兴军,梁利平.SOC总线仲裁算法的研究[J].微计算机信息,2007,6(2):113-115.

Li Y R,Wang X J,Liang L P. Researchon SOC bus arbitration algorithm [J].MicrocomputerInformation,2007,6(2):113-115. (in Chinese)

[6] 王鸣浩,吴小霞.基于FPGA的通用液晶显示控制器的设计与实现[J].液晶与显示,2012,27(1):87-88.

Wang M H,Wu X X.Design and realization of general LCD controller base on FPGA [J].ChineseJournalofLiquidCrystalsandDisplays,2012,27(1):87-88. (in Chinese)

[7] 田耕,徐文波,胡彬. Xilinx ISE Design Suite 10.X FPGA开发指南[M].北京:人民邮电出版社,2008.

Tian G,Xu W B,Hu B.XilinxISEdesignsuite10.XFPGAdevelopmentguide[M]. Beijing:Post &Telecom Press,2008.

猜你喜欢
缓冲器时钟仲裁
更正
别样的“时钟”
重载货车用缓冲器选型的研究及分析
古代的时钟
对不属于仲裁委员会管辖范围的仲裁申请如何处理?
电梯对重缓冲器永久性标识确定方法探讨
一种多通道共享读写SDRAM的仲裁方法
有趣的时钟
起重机检验中缓冲器选型问题的分析和探讨
时钟会开“花”