快速上手Xilinx DDR3 IP核(1)——MIG IP核的介绍及配置(Native接口)

作者:孤独的单刀,文章来源:CSDN博客

1、前言
DDR3 SDRAM 简称 DDR3,是当今较为常见的一种储存器,在计算机及嵌入式产品中得到广泛应用, 特别是应用在涉及到大量数据交互的场合,比如电脑的内存条。DDR3的时序相当复杂,对DDR3 的读写操作大都借助 IP 核来完成。

2、MIG DDR3 IP核的介绍
MIG(Memory Interface Generators) IP 核是 Xilinx 公司针对 DDR 存储器开发的 IP,里面集成存储器控制模块,实现 DDR 读写操作的 控制流程,下图是 7 系列的 MIG IP 核结构框图。MIG IP 核对外分出了两组接口。左侧是用户接口,就是 用户(FPGA)同 MIG 交互的接口,用户只有充分掌握了这些接口才能操作 MIG。右侧为 DDR 物理芯片 接口,负责产生具体的操作时序,并直接操作芯片管脚。这一侧用户只负责分配正确的管脚,其他不用关心。

在有了这个IP核后,我们就无需对复杂的DDR3进行操作,只需要根据用户侧的时序逻辑来进行操作即可。

下面是用户侧的信号接口及说明:


将其中比较常用的与不常用的分开,如下图:

其中的输入/输出是相对于MIG IP核来说的,例如ui_clk就是output给用户侧的用户时钟。

DDR3 的读或者写都包含写命令操作,其中写操作命令(app_cmd)的值等于 0,读操作 app_cmd 的值 等于 1。首先来看写命令时序,如下图所示。首先检查 app_rdy,为高则表明此时 IP 核命令接收处于准备好 状态,可以接收用户命令,在当前时钟拉高 app_en,同时发送命令(app_cmd)和地址(app_addr),此时命令和地址被写入。

写数据的时序,如下图所示:

写数据的情况有3种:

1. 写命令与写数据发生在同一时钟周期
2. 写数据先于写命令发生(不一定是图上的一个时钟周期,因为数据是先写到了FIFO)发生在同一时钟周期
3. 写数据落后于写命令发生,但不能超过两个时钟周期

结合上图,写时序总结如下:首先需要检查 app_wdf_rdy,该信号为高表明此时 IP 核数据接收处于准备完成状态,可以接收用户发过来的数据,在当前时钟拉高写使能(app_wdf_wren),给出写数据 (app_wdf_data)。这样加上发起的写命令操作就可以成功向 IP 核写数据。

接着来看读数据,如下图所示:

读时序比较简单,发出读命令后,用户只需等待数据有效信号(app_rd_data_valid)拉高,为高表明此 时数据总线上的数据是有效的返回数据。需要注意的是,在发出读命令后,有效读数据要晚若干周期才出现在数据总线上 (延迟的时间不定)。

3、MIG DDR3 IP核的配置
打开 IP Catalog 在搜索栏输入 mig(Memory Interface Generator),双击直接打开

下图是确认工程信息,主要是芯片信息与编译环境以及目标语言,点击 next

如下图所示,这一页选择“Create Design”,在“Component Name”一栏设置该 IP 元件的名称,再往下选择控制器数量,默认为“1”即可。AXI4 接口不勾选。配置完成点击“Next”。

如下图所示,这一页主要是让用户选择可以兼容的芯片,本工程默认不勾选,即不需要兼容其他的 FPGA 芯片。配置完成点击“Next”。

如下图所示,这一页选择第一个选项“DDR3 SDRAM”

如下图所示:

Clock Period:DDR3 芯片运行时钟周期,这里选400M,实际传输频率800M(上下沿双触发)

PHY to Controller Clock Ratio:一般有 4:1 和 2:1 两个选项,当DDR3 芯片运行频率高于350M时,默认选为4:1

VCCAUX_IO:这是 FPGA 高性能 bank(High Performance bank)的供电电压。它的 设置取决于 MIG 控制器运行的周期/频率。当用户让控制器工作在最快频率的时候,系统 会默认为 1.8V

Memory Type: DDR3 储存器类型选择。选择 Component。

Memory Part: DDR3 芯片的具体型号,我这里选择选择 MT41J128M16XX-125

Memory Voltage:是 DDR3 芯片的电压选择,选 1.5v。

Data Width:数据位宽选择,这里选择 16。

ECC:ECC 校验使能,数据位宽为 72 位的时候才能使用

Data Mask:数据屏蔽管脚使能。勾选它才会产生屏蔽信号,这里勾上

Number of Bank Machines:Bank Machine 的数量是用来对具体的每个或某几个来单独控制的,选择多了控制效率就会高,相应的占用的资源也多,选择 4 个

ORDERING:该信号用来决定 MIG 控制器是否可以对它收到的指令进行重新排序,选择 Normal 则允 许,Strict 则禁止。本实验选择 Normal,从而获得更高效率。


如下图所示:

Input Clock Period:MIG IP 核的系统输入时钟周期,该输入时钟是由 FPGA 内部产生的,MIG内部有一个MMCM资源,用来生成用户时钟及DDR3时钟。这个时钟就是输入个MMCM用的

Read Burst Type and Length:突发类型选择,突发类型有顺序突发和交叉突发两种,选择顺序 突发(Sequential),其突发长度固定为 8。

Output Driver Impdance Control:输出阻抗控制。选择 RZQ/7。

RTT:终结电阻,可进行动态控制。选择 RZQ/4。

Controller Chip Select Pin:片选管脚引出使能。选择 enable,表示把片选信号 cs#引出来,由外部控制

BANK_ROW_COLUMN:寻址方式选择。选择第二种,即 BANK-ROW-COLUMN的形式

如下图所示:

System Clock:MIG IP 核输入时钟。选择“No Buffer”,因为 IP 核的输入系统 时钟是单端时钟,是由内部的 MMCM 产生的,MMCM 所产生的时钟默认添加了 buffer。

Reference Clock:MIG IP 核参考时钟。同样选择“No Buffer”,将由时钟模块生成。

System Reset Polarity:复位有效电平选择。选择“ACTIVE LOW”低电平有效。

Debug Signals Control:该选项用于控制 MIG IP 核是否把一些调试信号引出来,它会自动添加到 ILA,这些信号包括一些 DDR3 芯片的校准状态信息。选择 “OFF”,不需要让 IP 核生产各种调试信号

Sample Data Depth:采样深度选择。当“Debug Signals Control”选择“OFF”时,所 有采样深度是不可选的

Internal Vref:内部参考管脚,表示将某些参考管脚当成普通的输入管脚来用。不勾选

IO Power Reduction:IO 管脚节省功耗设置。选择“ON”

XADC Instantiation:XADC补偿使能

继续点击“NEXT”按钮,界面如下图所示,选择默认阻抗。


选择第二个,直接读取DDR3的引脚,这样就不用进行配置了。

选择“Read XDC/UCF”,直接导入管脚分配文件

如下图所示,这里软件默认设置,直接点击“Next”

接下来的都是一些信息确认选项,直接点击“Next”,直到最后点击“Generate”生成IP核

最新文章