作者:张凤麒,张延彬,王忠勇;2018年电子技术应用第7期
摘要: 为了解决期货行情数据加速处理中多个通道同时访问DDR3时出现的数据读写冲突问题,实现了一种基于FPGA的DDR3六通道读写防冲突设计,完成了对单片DDR3内存条的多通道实时访问控制需求。通过ChipScope工具采样结果证明了设计的可行性,提高了并行处理的速度,极大程度地降低了期货行情数据处理中行情计算的时间开销,最高通道速率可达5.0 GB/s以上,带宽利用率可达80%以上,在多通道数据读写应用中具有很高的实用价值。
0 引言
基于FPGA的期货行情数据加速处理过程中,不同的消息类型采用并行处理的方式,并且每一次的处理结果需要使用内存来缓存一次行情数据信息。行情数据信息容量巨大,片上存储难以满足需求,采用DDR3 SDRAM成为首选方法[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的复杂度,降低了在期货行情数据处理过程中的延迟,提高了并行处理速度。
文章转载自:电子技术应用