基于FPGA的虚拟FIFO改进设计*
2016-07-08张玉平叶圣江
张玉平, 叶圣江
(1. 成都工业学院 通信工程学院, 成都 611730; 2. 成都盟升科技有限公司 遥感事业部, 成都 611731)
基于FPGA的虚拟FIFO改进设计*
张玉平1, 叶圣江2
(1. 成都工业学院 通信工程学院, 成都 611730; 2. 成都盟升科技有限公司 遥感事业部, 成都 611731)
为了降低网络接口缓存设计的开发难度和复杂度,对现有基于FPGA的DDR2虚拟FIFO设计进行了改进.提出了以FPGA(EP4CGX150F672)为核心、DDR2(MT47H128M16RT-25E)为数据缓存、采用Qsys系统互联及IPCORE辅助搭建设计的改进方案,实现了DVB-IP分组TS流的快速缓存,平滑IP网络抖动,避免了数据码流丢失和延迟过大的问题.该设计方案在降低传统设计难度和复杂度的背景下,具有良好的存储器兼容性,同时具有系统资源丰富、容量大、成本低和开发周期短等优点,在众多DVB行业的设备中使用后效果良好.
现场可编程门阵列; 双倍速率; 先入先出队列; 系统互联; 知识产权核; 网络抖动; 码流; 节目参考时钟
目前,在DVB业界中的网关、加扰机、编码机及调制解调设备等采用千兆级以太网作为交互接口,要完成大容量数据简单方便的缓存,大多采用板载FIFO、SRAM、SDRAM或DDR颗粒芯片的方案[1-3],而在一些对存储资源要求不高但是对存储响应速度要求高的应用中[4],大多使用FPGA内部的存储器资源.这些方案都有一个共同点,即存储容量有限,在大容量实时数据缓存的实际应用中,其往往会成为制约性能提高的因素.以Cypress推出的板载FIFO颗粒芯片为例,现阶段单颗芯片的容量仅为72 Mb,而Micron推出的SDRAM颗粒芯片容量也仅能做到512 Mb[5].若采用容量大、成本低廉的DDR2方案,使用传统的设计方法不仅开发周期长,而且会增加设计难度与复杂度,从而不能使研发产品尽快推向并占有市场.现阶段Micron推出的DDR2颗粒芯片容量最大能做到4 Gb,若采用一种相对于传统设计较简便的方法,便可以更快速地将DDR2应用在DVB业界的各类产品中,将在很大程度上增强该类产品在行业中的竞争力与生命力.因此,本文提出了一种基于FPGA Qsys的DDR2虚拟FIFO的改进设计方案,不仅降低了设计的难度和复杂度,而且大大缩短了设计开发周期,实际应用效果好.
1 系统改进基本原理
传统设计方法框图如图1所示,通常采用Altmemphy控制器IPcore驱动片外存储芯片,数据存取协调模块直接与Altmemphy控制器IPcore用户接口交互的设计方法.
图1 传统DDR2虚拟FIFO的设计方法框图
图1中系统结构框图从左往右依次包括n通道的数据输入缓存FIFO IPcore、数据存取协调及n通道的数据输出缓存FIFO IPcore,在数据存取协调模块上方是Altmemphy控制器IPcore[5-6].该种设计方法的难点主要在Altmemphy控制器IP和数据存取协调模块的设计,Altmemphy控制器IPcore完成片外存储芯片接口到相对简单的用户接口的转换,数据存取协调模块完成数据输入、输出缓存FIFO接口与Altmemphy控制器IPcore用户接口间数据的协调存取.对于虚拟FIFO设计的外部接口包括专用存储器IPcore接口、标准读或写FIFO数据操作接口,因此用户或开发者完全可将其当作FIFO来进行数据缓存使用.
由以上分析可知,虽然设计难度相对较小,但是当外部的存储芯片发生替换后,设计也会随之大做改动,包括用户端接口和数据存取协调模块都要做更改,兼容性与可重用性差.对传统DDR2虚拟FIFO的改进设计如图2所示.
图2 DDR2虚拟FIFO的改进设计方法框图
该方法较传统设计的不同之处在于Altmemphy控制器IPcore的接口设计在Qsys环境中完成[7].对于其余类型的存储芯片只需更换不同存储器控制器IPcore即可,在Qsys中完成简单的互联操作,也即是地址映射,而不对数据存取协调模块进行代码级的更改,仅仅根据不同存储器的位宽、容量进行参数化的匹配设置即可,体现了该设计方法强大的存储兼容性.对于前级数据发送模块和后级数据接收模块而言,该设计的对外用户接口仅为通用FIFO接口,完全屏蔽了复杂、多变的外部存储器芯片接口.
Altmemphy控制器IPcore、主动写IPcore、主动读IPcore的互联在Qsys中完成,针对不同的存储器芯片配合相应的Altmemphy控制器IPcore,主动写IPcore、主动读IPcore能很好地兼容同一用户接口,且在Qsys中完成Altmemphy控制器IPcore与主动写IPcore、主动读IPcore的互联,仅仅需要在配置界面简单配置参数、连线即可[7].
对于数据输入、输出的处理,采用FPGA硬件存储器资源完成FIFO的功能,解决了前级数据发送模块、后级数据接收模块与数据存取协调模块间跨时钟域的问题.FPGA内部的FIFO完全可由用户参数实例化,接口简洁、通用,用户可以配置最适合的接口用于设计,很大程度上降低了设计的复杂度[8].
2 系统改进设计分析
图3为改进设计关键部分框图,结合系统改进设计原理可知,关键的模块是Qsys中的Altmemphy控制器IPcore、主动写IPcore、主动读IPcore和数据存取协调的相互配合设计,其中Clk和Reset模块为Qsys系统互联设计提供必要的时钟和复位信号.相对于传统的设计方法,该设计的优越性体现在采用了Qsys提供的强大系统互联架构,一方面,该架构将很大程度上简化Altmemphy控制器IPcore用户接口与数据存取协调模块的互联,采用了Qsys提供的avalon-MM Master IPcore完成Altmemphy控制器IPcore与存取协调模块的桥接;另一方面,该架构中采用avalon-MM Master IPcore具备强大的系统兼容性,用户只需考虑IPcore与外设接口的设计以及存取协调模块的参数化配置.该改进设计方法可轻松移植到其他类似存储器的设计中,例如PCI、PCIe、SRIO、SDRAM、SRAM及DDR等[7,9-10].
由于采用了Qsys强大的系统互联架构[7],很大程度上增强了设计的兼容性优势,结合采用参数化设计描述数据存取的协调模块,当外部的存储器芯片发生替换后,则只需考虑Qsys中avalon-MM Master IPcore和数据存取协调模块的参数化
图3 DDR2虚拟FIFO的改进设计关键部分框图
配置,且Qsys能提供功能强大、简明的用户界面,很方便用户使用.相对于传统设计方法,减少了用户对代码的修改,保持了优越的设计兼容性.
由以上设计系统分析可知,采用改进的设计方法可获得优越的设计兼容性,设计方法简便、先进.改进设计方法的重点在于Qsys中系统互联和参数化数据存取协调模块的设计.
3 系统改进设计实现
在Qsys设计中会用到Controller with ALTMEMPHY IPcore和avalon-MM Master IPcore,由于Controller with ALTMEMPHY IP针对不同的片外存储器芯片(本设计针对DDR2,因此采用DDR2 SDRAM Controller with ALTMEMPHY IPcore)会使用不同的IPcore进行设计,没有针对性,因此,重点对avalon-MM Master IPcore的Read Master做介绍说明,Write Master类同.
avalon-MM Master IPcore的主要功能是将各类Controller with ALTMEMPHY IPcore的用户接口统一为相对固定的读写控制和读写FIFO接口,这样可以保持用户逻辑接口的兼容性.将用户关心的设计集中在用户逻辑和Controller with ALTMEMPHY IPcore的设计上,图4为avalon-MM Master IPcore的Read Master功能框图.
Read Master的配置如图5所示,该IPcore只需配置7个参数,图5右侧自上而下依次是:Master Direction(对IPcore的读、写工作模式进行配置)、Data Width(对IPcore的数据位宽进行设置)、Address Width(对IP的地址位宽进行设置)、Burst Capable(对IPcore的突发传输能力进行设置)、Maximum Burst Count(对IPcore的突发传输数据量进行设置)、FIFO Depth(对IPcore的FIFO深度进行设置)、Memory based FIFO(对IPcore的FIFO基于FPGA存储器资源构成的类型进行设置),图5中的参数值为本设计中所采用的配置值.同理,Write Master功能模式的配置也大致相同.Qsys系统互联界面简洁直观,极大简化了设计的复杂度,设计者只需在Qsys的引导下完成各模块间的互联即可.
图4 Read Master功能框图
图5 avalon-MM Read Master配置界面
其次的关键是对数据协调模块的设计,设计中推荐采用参数化的设计方法,本设计的可配置参数如下:
USER_DATA_CHANNEL_AMOUNT_SQRT=3,USER_DATA_CHANNEL_AMOUNT=2**USER_DATA_CHANNEL_AMOUNT_SQRT,//数据流通道数8;
USER_FIFO_INNER_DEPTH_SQRT=8,USER_FIFO_INNER_DEPTH=2**USER_FIFO_INNER_DEPTH_SQRT,//FIFO对内接口的数据位宽为256;
LOCAL_ADDR_WIDTH=24,//Qsys系统模块地址宽度;
LOCAL_DATA_WIDTH_SQRT=6,
LOCAL_DATA_WIDTH=2**LOCAL_DATA_WIDTH_SQRT,//Qsys系统模块数据宽度;
LOCAL_ADDR_INCREASE=2**(LOCAL_ADDR_WIDTH-USER_DATA_CHANNEL_AMOUNT_SQRT),
DDR2_REFRESH_COUNTER=10′d780,//DDR2刷新周期数;
当片外存储器芯片发生替换时,只需根据Qsys系统互联架构设计进行改动,更改Qsys系统模块地址宽度和Qsys系统模块数据宽度,不会发生大部分的代码修改即可完成兼容性设计,大大提高了设计的可重用性.
数据协调模块的设计推荐采用状态机来描述,本设计的状态机状态转换图如图6所示.由设计思路结合上图中状态间衔接关系可知,状态S0为初始状态,主要完成各寄存器的初始化;状态S1~S6完成数据输入通道数据的缓存;状态S7~S10主要完成已缓存数据的读取输出,各状态间相互配合、衔接共同完成数据协调模块的功能.
图6 数据协调模块的状态机状态转换图
4 测试及结果分析
Quartus Ⅱ中SignalTap Ⅱ Logic Analyzer抓取数据存取协调模块与输入、输出缓存FIFO接口及Altmemphy控制器接口进行数据存取交互的在线时序图如图7所示.由图可知,不同通道的测试数据不断地向虚拟FIFO通道遍历写入数据,然后数据存取协调模块将各通道的数据流通过Qsys互联和Altmemphy控制器IPcore向板载DDR2存储颗粒写入、缓存并读出,将读出的数据与写入的数据做对比,根据对比结果来判断设计的正确性.对比结果可通过监测verify_ok信号的状态,若在整个存取过程中verify_ok信号为高电平,即可判断整个设计的正确性,反之则为出现了数据存取错误的情况.利用Quartus Ⅱ SignalTap Ⅱ Logic Analyzer的单次条件触发功能,可通过监测该信号对设计进行长时间测试,图中verify_ok信号在写入与读出的数据过程中一直为高电平.
图7 抓取数据存取过程的时序概括图
图7(图8、9同)中信号定义自上而下依次是:输入FIFO读请求、输入FIFO读数据、本地端写请求、本地端写数据请求、本地端写数据、本地端读请求、本地端读数据有效、本地端读数据、本地端地址、输出FIFO写请求、输出FIFO写数据、状态跳转和校验信号.
图8、9为写入与读出数据局部时序图,为将写入与读出的数据做对比,可写入一个数据为64′h474619C5474619C4,读出数据也为该数据,可证明数据的准确性.
图8 写入数据局部时序图
图9 读出数据局部时序图
图10、11为采用该设计平滑IP网络抖动前后的实测对比图,图10为未采用数据缓存,经ETHERNET传入的DVB-IP分组TS流数据的实测截图以及PCR抖动直方图,图11为采用了设计缓存,输入的TS流数据的实测截图以及PCR
图10 未采用缓存的截图和直方图
图11 采用缓存的截图和直方图
抖动直方图.按照对应的码流速率经码流分析仪播放进行对比,很明显可见图10的图像清晰度和PCR抖动分布均相对于图11较差,图10存在图像重叠现象,而图11无明显不清晰的情况.图10 PCR抖动分布较图11分散,且图11以平均PCR精度-2优于图10平均精度37,在同一精度的最大IP包数中,图11以9 114包多于图10的6 820包.
由此可知,基于FPGA的DDR2虚拟FIFO改进设计方法的正确性和合理性.基于目前DDR2存储技术早已普及,所能提供的存储容量能满足绝大部分需大容量缓存项目的需要,因此将这种设计方法使用在DVB行业的众多设备中,其强大的设计兼容性会得到众多用户、开发者和可编程逻辑设计师的青睐.
5 结 论
综上所述,随着FPGA在实际工程应用中的大力普及,用户和开发者可以选择多种解决技术问题的途径.基于FPGA的DDR2虚拟FIFO改进设计方法就是在FPGA中利用Qsys强大的系统互联功能,对传统的DDR2虚拟FIFO设计方法的改进.该改进设计方法的可行性、兼容性相比于传统的设计方法均有很大程度的提高,达到了预期的改进设计要求,降低了整个系统开发的难度.
[1]庾志衡,叶俊明,邓迪文.基于FPGA与DDR2 SDRAM的大容量异步FIFO缓存设计 [J].微型机与应用,2011,30(4):34-36.
(YU Zhi-heng,YE Jun-ming,DENG Di-wen.A design of high speed and deep asynchronous FIFO based on FPGA and DDR2 SDRAM [J].Microcomputer & Its Applications,2011,30(4):34-36.)
[2]徐欣,周舟,李楠,等.基于DDR2 SDRAM的高速大容量异步FIFO的设计与实现 [J].中国测试,2009,35(6):34-37.
(XU Xin,ZHOU Zhou,LI Nan,et al.Design and realization of high speed and deep asynchronous FIFO based on DDR2 SDRAM [J].China Measurement & Test,2009,35(6):34-37.)
[3]万鹏,杨大伟.基于FPGA的视频叠加融合系统设计与实现 [J].电子技术应用,2013,39(9):44-46.
(WAN Peng,YANG Da-wei.Design and implementation of video image superimposed fusion system based on FPGA [J].Application of Electronic Technique,2013,39(9):44-46.)
[4]常丽,许会,孙明杰.光栅信号单谱线细分算法实现 [J].沈阳工业大学学报,2013,35(3):323-328.
(CHANG Li,XU Hui,SUN Ming-jie.Implentation of subdivision algorithm of single spectral line for grating signal [J].Journal of Shenyang University of Technology,2013,35(3):323-328.)
[5]房国志,王康.高速视频系统中一种异步FIFO缓存设计 [J].哈尔滨理工大学学报,2012,17(6):102-105.
(FANG Guo-zhi,WANG Kang.A kind of asynchronous FIFO buffer of high speed video system [J].Journal of Harbin University of Science and Technology,2012,17(6):102-105.)
[6]张奇山,刘安芝,刘希顺.基于FPGA的FIFO设计和应用 [J].现代科学技术,2009,18(1):50-52.
(ZHANG Qi-shan,LIU An-zhi,LIU Xi-shun.Design of application of FIFO based on FPGA [J].Modern Electronics Technique,2009,18(1):50-52.)
[7]AET.全方位解析Qsys系统集成工具——帮您解决三大尖锐问题 [J].电子技术应用,2012,38(5):6.
(AET.Comprehensive analytical Qsys system integration tool:help you to solve the three tough problems [J].Application of Electronic Technique,2012,38(5):6.)
[8]刘少华,陈明义.基于FPGA的高速海量FIFO的设计 [J].信息技术,2009,33(9):95-97.
(LIU Shao-hua,CHEN Ming-yi.Design of high speed and great capacity FIFO based on FPGA [J].Information Technology,2009,33(9):95-97.)
[9]向兴富,袁玉群,谭亚军.基于FPGA的DDR2 SDRAM数据存储研究 [J].贵州大学学报(自然科学版),2010,27(2):70-73.
(XIANG Xing-fu,YUAN Yu-qun,TAN Ya-jun.A design of data storage research base on FPGA DDR2 SDRAM. [J].Journal of Guizhou University(Natural Sciences),2010,27(2):70-73.)
[10]吕卫,葛长宽,宋垣.基于FPGA的数字电视广播IP网关设计 [J].电视技术,2013,37(22):37-39.
(LÜ Wei,GE Chang-kuan,SONG Yuan.Design of IP gateway for digital TV broadcasting based on FPGA platform [J].Video Engineering,2013,37(22):37-39.)
(责任编辑:景勇英文审校:尹淑英)
Improved design of virtual FIFO based on FPGA
ZHANG Yu-ping1, YE Sheng-jiang2
(1. School of Communication Engineering, Chengdu Technological University, Chengdu 611730, China; 2. Remote Sensing Department, M&S Technology Co. Ltd., Chengdu 611731, China)
In order to reduce the development difficulty and complexity of network interface buffer design, the design of DDR2 virtual FIFO based on FPGA was improved. An improved scheme, which taking FPGA (EP4CGX150F672) as the core and DDR2 (MT47H128M16RT-25E) as the data cache, and adopting Qsys system interconnection and IPCORE auxiliary building design, was proposed. The fast cache of DVB-IP packet TS flow is realized, and the IP network jitter is smoothed. In addition, the loss of data code flow and the problem of too large delay can be avoided. Under the background of reducing the difficulty and complexity of traditional design, the proposed design scheme has good memory compatibility, possesses such advantages as rich system resources, large capacity, low cost and short development cycle, and exhibits good effect after being used for the numerous equipment in DVB industry.
field programmable gate array (FPGA); double data rate 2(DDR2); first input first output (FIFO); system interconnection; intellectual property core; network jitter; code stream; program clock reference (PCR)
2015-06-19.
四川省教育厅基金资助项目(14ZA0288).
张玉平(1976-),男,四川成都人,副教授,主要从事FPGA的数字信号处理及通信系统工程实践等方面的研究.
10.7688/j.issn.1000-1646.2016.03.11
TN 914
A
1000-1646(2016)03-0298-06
*本文已于2015-12-07 16∶18在中国知网优先数字出版. 网络出版地址: http:∥www.cnki.net/kcms/detail/21.1189.T.20151207.1618.034.html