你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

基于FPGA的DDR3六通道读写防冲突设计

发布者:jackzhang 时间:2018-07-31 16:28:21

作者:张凤麒,张延彬,王忠勇;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的复杂度,降低了在期货行情数据处理过程中的延迟,提高了并行处理速度。

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了