基于FPGA的一种DDR4存储模块设计

网络与存储   作者:谢晨,卓敏(安徽财经大学,安徽 蚌埠 233030) 时间:2021-08-30来源:电子产品世界

编者按:5G通信的主要特征包括“高速率、大带宽”,为了满足高速率、大带宽数据的传输要求,需要一种存储技术对数据进行存储。本文就存储技术结合DDR4协议,设计了一种DDR4传输机制,本研究采用高性能的XCVU9P系列的FPGA芯片作为控制芯片,使用其内部自带的DDR4 SDRAM(MIG)IP核进行例化核设计。经过验证,实现在250 MHz时钟下对DDR4 SDRAM的读/写操作,数据无丢失,能够保证高速率、大带宽数据正常传输,该传输机制具有良好的可靠性、适用性及有效性。

0   引言

随着通信技术的不断发展,5G 技术作为当前新一代通信的热点技术将面临很多研究课题,除了要传输低速率、小带宽数据外,还需要分析高速率、大带宽数据,分析带宽从100 MHz 提高到1 GHz,甚至更高带宽。当前最大的难题就是5G 高速率的传输将会导致信号的带宽变大,因此对这些高速率的数据流进行实时处理将变得更加困难[1]。伴随着数字化的高速发展,目前存储是大容量数据存储系统的核心部分,甚至会影响到系统的性能。DDR最大的特点就是传输速率是时钟的两倍,数据同时在上升沿和下降沿同时采样[2]。本文提出一种基于DDR4 SDRAM 的高速数据缓存技术,主控器选用Xilinx 公司XCVU9P 系列FPGA 芯片,数据缓存器选用MT40A512M16HA-083E,通过对DDR4 SDRAM 的存储寻址原理及DDR4 IP 核的读写控制逻辑的研究,实现了在250 MHz 的时钟下,DDR4SDRAM 能够正常进行读写操作。经过测试验证,读写数据正常,无数据丢失。

1   整体设计方案

整体设计方案使用模块化,主要包括光口传输模块、DDR4 存储模块、SRIO 接口模块。本设计主要对控制芯片FPGA 内部逻辑进行了优化设计,其中包括DDR4控制器、不同时钟域之间的数据缓存FIFO。整体方案传输流程如图1 所示。

image.png

●   光口模块:主要是接收采集模块传输过来的数据。

●   DDR4 存储模块:用于缓存数据,由于SRIO 接口的数据传输速率慢,需要通过DDR4 存储模块先将高速数据存储到DDR4 中,然后再通过SRIO 的时钟将数据传输给SRIO 接口模块。

●   SRIO 接口模块:接收DDR4 读出来的数据,然后传输给上位机进行测试分析。

2   DDR4 SDRAM内部结构

DDR4 SDRAM 是一种内部可配置高速动态随机存储器,其内部由多个Bank 组成,Bank 又是由很多行和列构成[3],DDR4 的寻址操作就是对行列地址进行操作。DDR4存储器有几个重要概念,即Bank、Bank Group及Page, 例如512Mx16 的8 Gb 容量的DDR4, 内部主要包括2 个Bank Group,每个Bank Group 包括4 个Bank[3]。每个Bank 是由多个Page 组成的,通过多Page地址去选择相应的Page。

3   DDR4控制器模块设计

DDR4 控制器模块设计如图2 所示,将控制器分为IDLE、WR-DELAY、DDR-WR_s、RD_DELAY 和DDR_RD_s 五个模块。

1630308264616878.png

●   IDLE:初始化状态。主要对DDR4 内部的信号进行初始化。当收到rd_en_reg 和rd_dat_s_reg 信号同时有效时,将进入RD_DELAY 状态;当收到wr_en_reg 信号有效时,进入WR_DELAY 状态;如果在该状态下没有收到相应的有效信号将继续保持该状态。

●   WR-DELAY:写等待状态。当在此状态下收到rd_en_reg 有效时将会跳到IDLE 状态;在没有收到rd_en_reg 有效时,根据条件app_bl_cnt >= WR_BURST_CNT 来判断是否已经写到规定的数据量,如果已经写到规定的数据量,将继续保持在该状态,等待其他有效信号的到来,如果没有写到规定的数据量,判断写FIFO的wr_prog_empty 信号,如果wr_prog_empt 无效则跳转到DDR_WR_S状态,反之wr_prog_empt 有效, 则继续在该状态下等待有效信号到来。

● DDR_WR_s:写状态。此状态主要是往DDR4 里写数据,由于DDR4 IP 核内的Burst Length 设为了8[4],所以根据条件ddr_cnt ==WR_BURST_NUM 来判断,当ddr_cnt 计数到了WR_BURST_NUM 的值时,会跳转到WR-DELAY 状态,如果没有计数到WR_BURST_NUM 的值,则继续保持在该状态。

● RD_DELAY:读等待状态。当在此状态下收到wr_en_reg 有效时将会跳转到IDLE 状态;在没有收到wr_en_reg 有效时,根据读FIFO 的rd_prog_full 信号来判断,如果rd_prog_full 有效时则继续在该状态下等待,若无效则根据条件app_bl_cnt >= RD_BURST_CNT 来判断,如果计数达到了设定的读数据量,则会跳转到IDLE 状态,若没有到达设定的读数据量,则跳转到DDR_RD_s 状态。

● DDR_RD_s:读状态。此状态主要是将DDR4里的数据往外读,根据条件ddr_cnt >= RD_BURST_CNT 来判断,当计数达到设定的读数据量时则会跳转到IDLE 状态,如果没有达到设定的读数据量,且读FIFO 的rd_prog_full 信号有效,则会继续在该状态下读取DDR4 里的数据。

4   仿真验证

采用Vivado 2018.3 软件,其中FPGA 芯片型号为XCVU9P-flga2104-1-i,进行开发板上验证。在光口模块产生一组递增数,通过光口将数据发送给DDR4 存储模块。通过在ILA 抓取相应的信号来观察DDR4。图3 是通过ILA 抓取的DDR4 内部信号状态图[5]

1630308386472987.png

图3 DDR4写状态1

通过图3 可以看出,一开始DDR4 处于初始化状态,当wr_en_reg 变成高电平时,state 跳转到WR_DELAY状态;当wr_prog_empty 变成低电平时,state 跳转到DDR_WR_s 状态。之后,当app_bl_cnt 计数到96250时,state 跳转到WR_DELAY;如果对写数据部分放大,可以看出数据是递增数;当rd_en_reg 和rd_dat_s_reg同时有效时,state 从IDLE 状态跳转到RD_DELAY 状态,当rd_prog_full 为低电平时,且app_bl_cnt 未计数到RD_BURST_CNT, 这个state 从RD_DELAY 状态跳转到DDR_RD_s 状态;当ddr_cnt 计数到768000 时,state 从DDR_RD_s 状态跳转到IDLE 状态;图4 是对读数据部分放大,可以看出数据是正整数。

1630308438104193.png

图4 DDR4读状态3

5   结束语

本研究在Xilinx 公司的XCVU9P 系列FPGA 芯片上完成了DDR4 存储模块的读写状态机的设计、代码编写以及验证。使用其内部自带的DDR4 SDRAM(MIG)IP 核进行例化核设计。经过开发板上验证,实现在250 MHz 时钟下对DDR4 SDRAM 的读/ 写操作,数据无丢失,能够保证高速率、大带宽数据正常传输,该传输机制具有良好的可靠性、适用性及有效性。

参考文献:

[1] 袁行猛,陈亮,徐兰天.基于CPRI协议的5G基带数据传输技术的研究与实现[J].电子产品世界,2019,26(04):41-45+61.

[2] 张亚军.实时频谱仪的数字中频处理设计与实现[D].成都:电子科技大学,2017.

[3] 汪继友.一种特殊应用场景下的DDR4写缓冲设计与验证[D].合肥:安徽大学,2019.

[4] 苏健渊.基于ARM+FPGA的多屏图像显示系统研究[D].西安:西安电子科技大学,2014.

[ 5 ] 武春锋. 基于DDR4 SDRAM的光电图像实时存储技术研究[D].北京:中国科学院大学,2018.

(本文来源于必威娱乐平台 杂志2021年8月期)

关键词: DDR4 高速率 大带宽 FPGA 202108

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版