文献标识码:A
DOI:10.16157/j.issn.0258-7998.175167
中文引用格式:张凤麒,张延彬,王忠勇. 基于FPGA的DDR3六通道读写防冲突设计[J].电子技术应用,2018,44(7):68-71,80.
英文引用格式:Zhang Fengqi,Zhang Yanbin,Wang Zhongyong. Anti-conflict design for reading and writing of DDR3 six channels based on FPGA[J]. Application of Electronic Technique,2018,44(7):68-71,80.
0 引言
基于FPGA的期货行情数据加速处理过程中,不同的消息类型采用并行处理的方式,并且每一次的处理结果需要使用内存来缓存一次行情数据信息。行情数据信息容量巨大,片上存储难以满足需求,采用DDR3SDRAM成为首选方法[1]。但由于DDR3只有一套数据访问通道,不能满足多个通道同时访问的需求[2]。此前的对于SDRAM的多通道解决方案中,比如曹一江[3]等设计的基于NPI总线的片外存储器,最大带宽可达743 Mb/s;樊博[4]等使用UI接口,DDR3通信的最大带宽可达3.8 Gb/s;张宇嘉[5]等设计的基于AXI4的DDR3多端口方案虽然传输速率有所提高,但由于AXI4协议本身的复杂性增加了开发使用的难度。本文实现并验证了期货行情数据加速处理中基于FPGA的DDR3六通道UI接口读写防冲突设计,简化了DDR3多通道读写的复杂度,随着有效数据周期的提升,最高端口速率可达5.0 GB/s以上,带宽利用率可达80%以上。
1 总体设计架构
本文所设计的六通道读写防冲突总体架构如图1所示,主要包括通道判优仲裁模块、读写逻辑控制模块和DDR3存储器控制模块。
DDR3存储控制器模块采用Xilinx公司的MIG核,用户只需要通过IP核的GUI选择内存芯片并进行相关参数设置,即可完成DDR3的配置工作[6]。
通道判优仲裁模块将对六路通道进行仲裁,对于同一时刻有读写请求的不同通道,该模块按照优先级的高低判定访问DDR3的顺序,利用中断思想解决多通道读写的冲突问题。
读写逻辑控制模块控制DDR3的接口生成,根据不同操作完成对应接口的时序控制[7],进而实现对DDR3的正确读写访问。
2 DDR3存储器控制模块设计
DDR3 IP核生成的控制器逻辑框图如图2所示,采用UI接口的方式相比于AXI4接口,不需要自己组织数据,容易操作,大大简化了DDR3的使用复杂度,为DDR3的扩展使用带来了方便[8]。
2.1 存储控制模块写操作
DDR3写操作接口信号如表1所示。
写操作过程:当app_rdy和app_wdf_rdy同时为高的情况下,写入DDR3的地址app_addr与app_cmd绑定对齐,写入DDR3的数据app_wdf_data与数据掩码app_wdf_mask绑定对齐,app_cmd置为3′b000,与此同时app_en、app_wdf_wren、app_wdf_end置高,即可将数据写到对应的地址中。
因为DDR3的写时序不只一种,为了简化系统设计,本文设计的用户接口写操作时序为地址和数据完全对齐,便于理解和操作[9]。
2.2 存储控制模块读操作
DDR3的读操作接口信号如表2所示。
读操作过程:在app_rdy为高时,用户发送读命令并同时将app_en置高,则读命令和读地址会写到DDR3中,DDR3会返回数据和有效指示信号,两者共同决定返回的数据是否有效。
通常情况下,DDR3的读请求结束之后不会马上返回数据,需要延迟一定的时钟周期。
3 通道判优仲裁模块设计
通常情况下,由于DDR3只有一组控制、地址和数据总线,因此同一时刻只能有一个通道在访问。根据期货交易的处理规则,优先级由高到低的顺序依次为合约信息消息、市场状态消息、品种交易状态消息、成交统计行情消息、多档定单簿行情消息、多档成交量统计行情消息。在通道判优的过程中,首先将6种不同的消息经封装后分别寄存到相应的消息缓存中,每一通道写入消息缓存中的数据格式,从高到低位依次为写使能、读使能、写数据、写地址、读地址;然后首先判断合约信息消息缓存是否为空,如果不为空,则证明当前有合约信息消息的请求发生,此时状态机会跳转到合约信息消息处理状态;待合约信息消息的缓存全部读取完毕之后,再次按优先级顺序判断其他消息缓存是否为空,状态机随即做相应的跳转,完成不同通道之间的切换,如图3所示。
对于不同的消息类型,对应着不同的消息处理单元,目的是增加系统的并行处理操作,降低处理延迟。
4 读写逻辑控制模块
读写逻辑控制模块主要对不同类型消息做并行化处理,生成DDR3的接口信号,每个消息的处理流程如图4所示。
对于期货交易中的各种合约行情,种类多,但占用空间小,通常DDR3中一个地址就可完成一个行情的存储,在行情的还原、计算、发布中,需要读取多个行情。由于DDR3的突发长度为8,为了便于对行情的准确存取,6个通道的数据位宽均设定为DDR3位宽的1/8,即一次只存取一个地址的数据。
对于通道判优仲裁模块输出的数据,写使能与读使能均为1 bit位宽,高电平表示请求发生;写数据为64 bit位宽;写地址和读地址为28 bit位宽,DDR3的数据位宽在IP核中配置为512 bit,地址位宽为28 bit。因写数据位宽与DDR3数据位宽不匹配,所以DDR3的写操作需要掩码配合共同完成。
处理过程如下:首先进行读写判断,若写使能置高,则跳转到写操作状态;若读使能置高,则跳转到读操作状态,若无读写操作,处于等待状态。(期货行情消息处理中不会出现同一通道读写同时进行的情况,因此同一通道读写使能同为高电平的情况不会出现。)
如果是写操作,一方面生成写入DDR3的地址和命令,另一方面将写数据封装成512 bit位宽。其中写入DDR3的地址app_addr为{写地址[27:3],3′d0},写入的数据app_wdf_data和掩码app_wdf_mask由写地址[2:0]确定。数据地址命令控制模块也会相应的产生app_en、app_wdf_wren、app_wdf_end控制信号,这些信号共同作用关于DDR3 SDRAM存储器,配合完成DDR3的写入操作,如图5所示。
如果是读操作,地址命令选择模块将读地址[27:3]赋值给app_addr作为写入DDR3的基地址,同时将读地址[2:0]作为写入DDR3的偏移地址存入对应通道的偏移地址缓存中,在数据地址命令控制模块生成其他的控制信号传送给DDR3 SDRAM存储器。DDR3 SDRAM根据地址返回相应的512 bit位宽的数据。在返回数据的同时读取对应通道偏移地址缓存中的偏移地址,并根据此偏移提取对应的64 bit数据从而完成DDR3的一次读取操作,如图6所示。
5 实验结果与分析
5.1 实验结果
本文以Xilinx公司的Kintex-7系列XC7K325T FPGA芯片和Micron公司的JBF9C256x72AKZ DDR3芯片为硬件平台,并以此来验证本文设计的正确性,分析其性能。
测试方法:六通道在同一时刻发起DDR3的读写请求,其中1~4通道进行DDR3的写请求,5、6通道进行DDR3的读请求,状态机按照消息优先级的顺序依次进行状态跳转完成处理,最后将数据分别返回到相应通道中,ChipScope结果如图7所示。
5.2 实验分析
为了更好描述设计的性能,本文引入以下参数。仲裁时间:请求信号发生到通道开始处理的时间间隔;IP核处理时间:DDR3 IP核从接收指令到返回数据的时间;有效提取时间:从512 bit的DDR3返回数据中提取对应的64 bit的时间间隔;有效数据时间:数据有效的维持时间;总时间:消息请求到数据返回的时间,即仲裁时间、IP核处理时间与有效数据时间之和。因此:
在本设计中,实测仲裁时间为3个时钟周期,IP核处理时间为22个时钟周期,有效提取时间2个时钟周期,如图8所示。
每个通道的有效数据时间不相同,性能也不相同,具体测试结果如表3所示。
测试结果表明,本设计能稳定高效地完成多通道对DDR3的访问,随着有效数据周期的提升,通道速率可达5 GB/s以上,带宽利用率可达80%以上,能够满足期货行情数据处理过程中的实时性要求。
6 结论
本文设计并实现了基于FPGA的DDR3六通道读写防冲突设计,能有效地解决在期货行情数据处理中多通道同时访问DDR3的冲突问题,在现有的Kintex-7系列FPGA平台期货行情数据处理系统中取得了良好的应用效果。测试结果表明该防冲突设计能高效正确地完成多通道对DDR3的访问,具有稳定性好、仲裁时间固定、效率高等特点。本文设计的DDR3多通道读写防冲突设计简化了多通道读写DDR3的复杂度,降低了在期货行情数据处理过程中的延迟,提高了并行处理速度。
参考文献
[1] 旷立强.基于FPGA的DDR3设计与实现[D].长沙:国防科学技术大学,2014.
[2] 吴连慧.基于FPGA的DDR3多端口读写存储管理设计[J].单片机与嵌入式系统应用,2015,14(11):71-74.
[3] 曹一江,马宁,王建民.MPMC高速存储器接口IP核设计[J].哈尔滨理工大学学报,2012,17(6):75-80.
[4] 樊博,王延东,孙宏海,等.FPGA实现高速实时多端口SDRAM控制器的研究[J].计算机工程与应用,2013,49(12):60-64.
[5] 张宇嘉,杨晓非,姚行中.基于AXI4的卫星接收机DDR3多端口存储的设计[J].电子器件,2016,39(3):74-78.
[6] 梁晨,赵邦信.基于FPGA和DDR3 SDRAM的大规模查找表设计与实现[J].电子器件,2017,40(4):849-855.
[7] 宋明,赵英潇,林钱强.基于FPGA的DDR3 SDRAM控制器的设计与优化[J].电子科技,2016,29(11):47-50.
[8] 姜文博,陈维蛇,司蓉蓉.Xilinx系列FPGA对DDR3的访问接口设计[J].通讯世界,2016,15(5):243-247.
[9] 潘一飞,余海.基于FPGA的DDR3用户接口设计[J].电子制作,2013,24(15):9-13.
作者信息:
张凤麒,张延彬,王忠勇
(郑州大学 产业技术研究院,河南 郑州450000)