首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA的DDR3 SDRAM控制器设计及实现

基于FPGA的DDR3 SDRAM控制器设计及实现

DDR3 SDRAM是第二代双倍数据传输速率同步动态随机存储器, 以其大容量、高速率和良好的兼容性得到 了广泛应用。 文中介绍了DDR3的特点和操作原理, 以及利用 MIG 软件工具在 Virtex-6列 FPGA中实现 DDR3 SDRAM控制器的设计方法,并进行硬件测试。验证了DDR3 控制器的可行性,其工作稳定, 占用资源少,可植性强等。
DDR3 SDRAM 是从 DDR、 DDR2 发展而来的一种高 速同步动态随机访问存储器。 由于DDR3 SDRAM 可以 在脉冲的上升和下降沿都传输数据, 因此传输数据的等 效频率是工作频率的两倍。 与 DDR2 相比, DDR3 主要 有以下优势: (1) DDR3采用8-bit预取技术, 解决了 外部数据传输率与核心频率之间的矛盾, 保证了数据 传输率的持续增长, 同时增加了带宽。 (2) DDR3 的核 心电压为 1.5V, 增加异步重置与 ZQ校准功能, 功耗 比DDR2降低了25% 。(3)DDR3存储器模块的地址、 命令、 控制信号和时钟采用了 “ fly-by” 的拓扑结构, 大幅减轻了地址/命令/控制与数据总线的负载, 提高 了信号的完整性[2]。
本文介绍了DDR3的特点和操作原理, 利用 MIG 软 件工具在 Virtex-6系列FPGA 中实现DDR3 SDRAM控制器的设计,并给出了硬件测试的结果。
1 DDR3 的操作原理
DDR3 SDRAM加电后 必 须 按 照 规 定 的 步 骤 完 成 初始化。 在初始化的过程中应注意对模式寄存器和扩 展模式寄 存 器 的 配 置。 通 过 初 始 化 可 以 完 成 对 CAS延迟, 突发长度, 突发类型,输出驱动能力,片上端接电 阻(ODT) 的值, 伴随 CAS 的附加延迟, 片外驱动器校 准等配置[3-4] 。 初始化完成后, DR3 SDRAM 进入正常 工作状态,此时可以对其进行寻址和读写操作。
1、1 预充命令
预充命令用于释放已经打开的Bank和已经打开的行或者打开新的Bank和新的行。 发送预充命令后, 要经过tRPC(Row Precharge command Period,行预充电 有效周期)个时钟发送行有效命令。 如果超过了这个延迟, 那么Bank就会进入空闲状态。地址线的 A10用于决定 是 对 一 个 还 是 所 有 的Bank进 行 预 充。一 个Bank 被预充之后, 进入空闲状态, 等待接收激活命令。

1、2 激活命令
在任何读写命令被发送到DDR3 SDRAM存储器的行上之 前, Bank中 的 行 必 须 使 用 激 活 命 令 进 行 激 活。与激活命令一起被触发的地址用来选择将要存取 的Bank和行, 与读或写命令一起触发的地址位用来选 择突发存取的起始列单元。

1、3 读命令
读命令用来启动一个突发的存储器读操作, 以访 问一个激活的行。BA0~BA2 用来选择 存 储 体Bank地址,A0~Ai 提供的输 入 地 址 用 来 选 择 开 始 列 位 置。 在读操作完成之后, 这个行在随后的访问中仍是活跃, 直到该行被预充命令关闭。 随着数据一起传送的还包 括一 个 双 向 的 数 据 选 通 信 号DQS, 在 读 周 期 中,DQS由DDR 存 储 器 产 生, 它 与 数 据 时 边 沿 对 齐, 其 读 时 序[2]如图 1 所示。


1、4 写命令
写命令 用 来 启 动 一 个 突 发 的 存 储 器 写 操 作, 由FPGA 向DDR3 SDRAM写 入 数 据, 只 需 按 照DDR3 SDRAM 的工作要求发出相应的指令即可。 BA0~BA2 用来选择存储体Bank地址,A0~Ai 提供的输入地址用 来选择开始列位置。 在写周期中,DQS 由 DDR3 控制 器产 生, 它 与 数 据 时 中 心 对 齐, 其 写 时 序[2] 如 图 2所示。


1、5 刷新命令
DDR3 是动态存储器, 必须要定期进行刷 新才能维持其存储的内容。 刷新间隔和DDR3存储器芯片的 温度有关。 刷新方式分为两 种: 自动刷 新和自刷新。 自动刷新用于正常操作模式,在自动刷新时,其他命令 无法 操 作。 自刷新主要用于低功耗状态下的数据保存。

2 DDR3 SDRAM 控制器的总体设计
DDR3 SDRAM 控制器可以采用 Xilinx Virtex-6系 列 FPGA提供的免费IP核MIG3.9来设计,这样可以 缩短开发周期, 减少设计人员的工作量, 简化了系统设 计。用户只需在MIG的GUI 图形界面选择对应的芯片型号, 总线宽度和速度级别, 并设置CAS 延迟、 突发 长度、 引脚分配等参数, 即可生成DDR3 SDRAM控制 器, 包括HDL 代码和UCF约束文件。Xilinx Virtex-6系列的 FPGA内存接口解决方案如图3所示, 该解决方案屏蔽了内存底层操作的一些细节。 用户设计模块 可以通过用户接口模块直接操纵内存控制器。


DDR3 SDRAM控制器的主要功能是完成对DDR3 SDRAM的初始化, 将DDR3 SDRAM 复杂的读写时序 转化为用户简单的读写时序, 以及将DDR3 SDRAM接 口的双时钟数据转换为用户的单时钟沿数据, 使用户 像操作普通 RAM 一样控制 DDR3 SDRAM; 同时, 控制 器还要产生周期性的刷新命令来维持DDR3 SDRAM内的数据不需要用户的干 预[5] 。DDR3 SDRAM控 制 器的总体框图[1] 如图4所示, 物理层模块的右侧信号 端口连接DDR3 SDRAM 的物理 引 脚。 其 主 要 包 括 4 部分: 基础模块 (Infrastructure)用 户 界 面 模 块 (User Interface) 、 物理层模块(Physical Layer) 和存储器控制 模块(Memory Controller) 。


基础模块主要用来接收通过FPGA全局时钟网络 的外部200MHZ 的差分时钟, 然后通过数字时钟管理 器(DCM) 产生用户接口时钟、 控制模块使用的时钟和 DDR3 存储器的时钟, 同时产生一个复位信号对整个IP 核进行全局复位。 该模块还包括一个延时控制 单 元,用来同步校准设计中的延时单元以减少功耗。
用户接口模块主要控制命令和数据连续的输入和 输出, 用来接收和存储用户的数据, 命令和地址等信 息, 起到缓冲和同步数据的作用。
物理层模块直接与DDR3 SDRAM通信, 其主要功 能是 捕 获 DDR3 SDRAM 发 出 的 数 据, 产 生DDR3 SDRAM 所需要的控制指令信号, 并通过输入输出缓存 发送所有DDR3 SDRAM的控制信号、 地址信号以及数 据信号, 同时保 证指令与地址,数据的同步和信号的维持[6]。
控制模块主要实现对DDR3的初始化和命令的操 作, 故其由初始化和命令控制两部分组成。DDR3上 电后经过200μs 的稳定期, 再等待500μs 把时钟使能 信号CKE拉高, 保持至少10ns 后开始ODT 过程, 然 后对扩展模式寄存器和模式寄存器进行配 置, 使能 DLL并对DLL 复位, 校准结束, 信 号phy_initial_done拉高则表示初始化完成。 初始化完成后, 控制模块自 动产生命令和控制信号并按照DDR3的读写时序要求 送给 DDR3,命令发送完毕后提供给用户一个命令应答信号, 设计者根据这一信号判断是否可以发送下一 个命令。 整个过程用户完全不用干涉存储器的自动刷 新、 激活和预充电过程, 这些控制命令和过程都会有控 制器自动发出和完成。
通常情况下,DDR3 SDRAM存储器仅用作数据的 缓存, 因此可以将 2GB 的DDR3 SDRAM封装成一个 虚拟的FIFO, 如图 5 所示, 并将这个虚拟的 FIFO划分 为上行FIFO 和下行FIFO 两部分。


3        实验结果
为验证DDR3控制器IP核的正确性, 将生成的代 码添加到ISE工程前对采用 MIG自动生成的测试模 块在 Xilinx ISE14.2编程环境下进行功能仿真 验证。该模块可以向存储器发出一系列读写命令,并对写人 的数据和读回的数据进行比较,从而验证控制器的正确性, 仿真结果如图6所示。 从图 6 可以看到phy_init_done信号置1 表 明 初 始 化 完 成, 否 则 为 0。 只 有 当app_en=1 和app_rdy=1, app_cmd和app_addr才能写人成功。 当 app_cmd=000 时, 当前为写操作; 当 app_cmd =001 时, 当前为读操作。 突发长度BL 的值设置 为8, 地址位每增加64, 数据端口同时写人两个256位 的数据, 可以通过error这个比较信号验证 DDR3控制 器正确与否, 在检测出读写数据项的同时该信号输出 低电平。 从仿真结果可以看出比较信号 error 输出始 终为低电平, 说明写人和读取的数据相同, 所以该测试 模块仿真通过。


为确保设计的可行性和可靠性, 对设计的控制器 进行约束和综合实现, 将产生的 bit 文件下载到FPGA 进行硬 件 测 试。 硬 件 测 试 过 程 采 用 Xilinx公 司 的 XC6SLX240T FPGA以及Micron的容量为1GB、 数据位 宽 64bit、 含 10 位列地址线、14 位行地址线和3 位 Bank地址线的MT4JSF12864HZ 芯片。 Xilinx 提供了一个集 成于ISE 软件中的FPGA片上调试工具Chipscope,它 可以捕获和显示实时信号, 观察在系统设计中的硬件 和软件之间的相互作用。 其原理是设定采样点数, 实 时采用数据并存储到FPGA片内的RAM中, 然后通过JTAG 接口传送到 ISE来显示。 由于RAM 容量有限, 一次采样到的数据也有限, 因此在硬件测试时, 以循环 读写的方式进行读写数据指令的执行, 以便在逻辑分 析仪中捕获到数据。 对写人数据和读回数据进行比较 时, 用户可以通过 error 这个比较信号验证DDR3控制 器的正确与否, 在检测出读写数据项同时该信号输出 低电平。 用调试工具 Chipscope 捕获到的数据以及指 示和相关控制信号如图7所示, 读写比较信号error输出始终为低电平, 说明写人和读取的数据相同, 硬件验证通过。


4        结束语
通过对DDR3 操作原理的分析, 给出了DDR3控 制器的设计及实现。 将DDR3 控制器在 Xilinx公司的 Virtex-6系列 FPGA 芯片上实现, 在板卡上能够控制 Micron公司的DDR3芯片稳定地读写数据。 经测试验 证该DDR3控制器的可行性, 其工作稳定可靠, 占用逻 辑资源较少, 且具有较高的可移植性以及简单的用户 接口, 在此基 础 上进行系统开 发, 将缩短系统开发周 期,同时也降低了系统成本。

作者:张        刚,贾建超, 赵龙 来源:电子科技2014 年 第 27卷 第1 期
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表