在高性能计算和存储应用中,DDR3内存接口是FPGA设计中不可或缺的一部分。

Xilinx FPGA提供了一种MIG(Memory Interface Generator)的IP核,用于简化DDR3的设计。

本文将详细介绍Xilinx FPGA平台上的MIG IP核,包括MIG结构、读写时序等。

一、MIG IP核介绍

MIG是Xilinx FPGA中一个功能强大的内存接口IP,通过图形化配置流程可以自动生成DDR3控制器,从而简化了DDR3内存的设计。

通过使用MIG,FPGA开发者可以专注于实现应用逻辑,而无需担心底层的硬件接口细节。

MIG的主要优点是它可以大大减少设计时间,因为它自动处理了许多复杂的设计任务,如电源管理、信号完整性分析和时序控制。

二、MIG IP核接口

1、MIG IP结构图

MIG IP 主要结构如下图所示,由 User Interface Block, Memory Controller 和 Physical Layer三部分组成。

这个IP 最底层是连接 DDR3 的物理接口(Physical Interface),最上层是用户逻辑控制接口(User FPGA Logic)。

FPGA DDR Design

我们控制ddr3的读写,主要是控制UI端的各个接口信号,这需要完全掌握mig的读写时序。

2、用户UI接口

(1)app_addr

表示当前正在提交给用户界面的请求的地址。 这里包含了整个DDR SDRAM 的所有地址字段。

(2)app_cmd

读写控制命令,读数据用001表示,写数据用000表示。

(3)app_en

表示当前命令是否有效,与app_addr ,app_cmd 和 app_hi_pri等信号同步,告诉UI当前命令有效。

(4)app_hi_pri

表示当前请求是高优先级。

(5)app_wdf_data

表示写入ddr的数据。

(6)app_wdf_end

表示当前写入突发的最后一个数据标志位,与app_wdf_wren保持一致即可。

(7)app_wdf_wren

表示 app_wdf_data 总线上的数据有效。

(8)app_rd_data

表示从ddr中读取出来数据。

(9)app_rd_data_end

表示当前读取突发的最后一个数据标志位。

(10)app_rd_data_valid

表示app_rd_data 总线上读取出来的数据有效。

(11)app_rdy

表示当前UI中的状态,1表示已准备好接受请求,0表示UI正忙。

(12)app_wdf_rdy

表示UI中写入数据fifo是否准备好接收数据,1表示fifo未满,0表示写入fifo已满。

(13)app_wdf_mask

表示app_wdf_data 的哪些位被写入外部存储器,哪些位保持不变。

(14)ui_clk和ui_clk_sync_rst

UI 输出时钟和复位信号。

(15)init_calib_complete

表示ddr是否校准完成。

三、MIG读写时序

1、读写命令与地址

FPGA DDR Design

上图中时序图,只有③时刻 app_en 和 app_rdy 同时为高电平,输入的 app_cmd(命令)和app_addr(地址)才有效。

app_rdy信号为高电平时表示MIG UI处于空闲状态可以接收命令和地址,这时将app_en拉高,输入的读写命令和地址才会传入MIG UI。

2、写数据时序

FPGA DDR Design

​ ​

写数据时序如上图,主要是“写控制命令(app_cmd,app_addr,app_rdy,app_en)”与“写数据命令(app_wdf_rdy, app_wdf_wren, app_wdf_end,app_wdf_data )”前后的关系,有三种写数据逻辑可选。

  1. 表示写操作命令与写数据命令同时有效。
  2. 表示写操作命令比写数据命令要晚几个周期,这里就是先将数据先写入MIG中的输入数据fifo,再发送写地址和写命令。
  3. 表示写操作命令比写数据命令要早几个周期,最多两个用户时钟周期。

这里需要注意的是写数据命令,当app_wdf_rdy为高电平时,表示输入数据fifo未满,可写入数据。

3、读数据时序

FPGA DDR Design

​​

读数据时序如上图,主要包括“读控制命令(app_cmd,app_addr,app_rdy,app_en)”与“读数据通道(app_rd_data_valid, app_rd_data)”。

读数据时序很简单,当app_rdy为高电平,发送读地址和读命令后,即可等待接收数据即可。