其他分享
首页 > 其他分享> > Xilinx DDR3 —— MIG IP核的配置(APP接口)

Xilinx DDR3 —— MIG IP核的配置(APP接口)

作者:互联网

1. 打开IP Catalog然后搜索mig,如下图所示:

在这里插入图片描述

2. 如下图所示,首先是确认工程的信息,主要是芯片信息和编译环境的信息,如果没什么问题,直接点击“Next”。

在这里插入图片描述
3. 如下图所示,选择“Create Design”,在“Component Name”一栏设置该 IP 元件的名称,这里取默认软件的名称,再往下选择控制器数量,默认为“1”即可。最后关于 AXI4 接口,因为本工程不去使用AXI4 接口,所以不勾选。配置完成点击“Next”。

在这里插入图片描述
4. 如下图所示,该页主要是选择可以兼容的芯片,本工程默认不勾选,即不需要兼容其他的 FPGA芯片。配置完成点击“Next”。

在这里插入图片描述

5. 如下图所示,因为我们要用 DDR3 芯片,所以选择第一个选项“DDR3 SDRAM”,配置完成后点击“Next”。

在这里插入图片描述

6. 如下图所示,从这页开始,就开始正式配置MIG IP 核的各个参数了。
在这里插入图片描述

  1. Clock Period:DDR3 物理芯片使用的运行时钟,ddr芯片会以这个时钟采数据。这个参数的范围和 FPGA 的芯片类型以及具体类型的速度等级有关。我这里选择2500ps,对应 400M。注意这个时钟是 MIG IP 核产生,并输出给 DDR3物理芯片使用的,该时钟与DDR3 芯片具体的运行带宽相关。若DDR3 芯片的数据位宽总共为16位,则由于双沿触发的影响,运行带宽可达到12.8Gb/s(800M*16bit)。
  2. PHY to Controller Clock Ratio: DDR3 物理芯片运行时钟和 MIG IP核产生的用户端时钟(ui_clk)之比, 可以理解为(ddr3的工作时钟频率:用户时钟频率) = (4:1),一般有 4:1 和 2:1 两个选项。由于 DDR 芯片的运行时钟是400Mhz,因此 MIG IP 核的用户时钟(ui_clk)就是 100Mhz。一般来说高速传输的场合选择4:1,要求低延时的场合选择 2:1。只有当 DDR3 时钟低于 350M 才有 4:1 和 2:1 两个选项,否则默认为4:1。
  3. VCCAUX_IO: FPGA 高性能 bank(High Performance bank)的供电电压。它的设置取决于 MIG控制器运行的周期/频率。当用户让控制器工作在最快频率的时候,系统会默认为 1.8V。
  4. Memory Type: DDR3 储存器类型选择。默认选择 Component。
  5. Memory Part: DDR3 芯片的具体型号。本次选择 MT41J128M16XX-125,这个型号其实和实际硬件原理图上的型号可以不同的,只要用户的 DDR3 芯片容量和位宽一致即可。以上为例代表这一片ddr的位宽为16,总容量为128Mb x 16bit =256MB。
  6. Memory Voltage:DDR3 芯片的电压选择,由芯片决定,芯片手册上有。
  7. Data Width: 数据位宽选择,这里选择 16。
  8. ECC: ECC 校验使能,数据位宽为 72 位的时候才能使用。
  9. Data Mask: 数据屏蔽管脚使能。勾选它才会产生屏蔽信号。
  10. Number of Bank Machines: Bank Machine 的数量是用来对具体的每个或某几个来单独控制的,选择多了控制效率就会高,相应的占用的资源也多。若DDR3 芯片是八个 bank,这里选择 4 个,则平均一个 Bank Machine 控制两个BANK。
  11. ORDERING: 该信号用来决定 MIG 控制器是否可以对它收到的指令进行重新排序,选择 Normal 则允许,Strict 则禁止。本实验选择 Normal,从而获得更高效率。

7.上面的配置好之后,点击“NEXT”按钮,进入如下界面:

在这里插入图片描述

  1. Input Clock Period: MIG IP 核的系统输入时钟周期,该输入时钟是由 FPGA 内部产生的,即MIG IP 核的工作时钟。
  2. Read Burst Type and Length: 突发类型选择,突发类型有顺序突发和交叉突发两种,本次选择顺序突发(Sequential),其突发长度固定为 8。
  3. Output Driver Impdance Control: 输出阻抗控制。本次选择 RZQ/7。
  4. RTT: 终结电阻,可进行动态控制。本次选择 RZQ/4。
  5. Controller Chip Select Pin: 片选管脚引出使能。本实验选择 enable,表示把片选信号cs#引出来,由外部控制。
  6. BANK_ROW_COLUMN: 寻址方式选择。本实验选择第二种,即 BANK-ROW-COLUMN 的形式,这是一种最常规的 DDR3寻址方式,即要指定某个地址,先指定 bank,再指定行,最后指定列,这样就确定了一个具体地址。一般来说这样寻址方式有利于降低功耗,但是读写性能(效率)上不如“ROW_BANK_COLUMN”。

8.上面的配置好之后,点击“NEXT”按钮,进入如下界面:

在这里插入图片描述

  1. System Clock: MIG IP核的输入时钟。本次选择“No Buffer”, 是因为IP核的输入系统时钟是单端时钟,是由内部的MMCM产生的,MMCM所产生的时钟默认添加了buffer。
  2. Reference Clock: MIG IP 核参考时钟。同样选择“No Buffer”,将由时钟模块生成。
  3. System Reset Polarity: 复位有效电平选择。本次选择“ACTIVE LOW”低电平有效。
  4. Debug Signals Control: 该选项用于控制 MIG IP 核是否把一些调试信号引出来,它会自动添加到 ILA,这些信号包括一些 DDR3 芯片的校准状态信息。本实验选择选择“OFF”,不需要让 IP 核生产各种调试信号。
  5. Sample Data Depth: 采样深度选择。当“Debug Signals Control”选择“OFF”时,所有采样深度是不可选的。
  6. Internal Vref: 内部参考管脚,表示将某些参考管脚当成普通的输入管脚来用。若 IO资源较为紧张,可以选择“ON”,把参考管脚当做普通的输入管脚来用。
  7. IO Power Reduction: IO 管脚节省功耗设置。本次选择“ON”,即开启。
  8. XADC Instantiation: XADC 模块例化。使用 MIG IP 核运行的时候需要进行温度补偿,可以直接选择XADC模块的温度数据引到 MIG IP 核来使用,否则需要额外提供温度数据,所以本实验选择“Enable”。

9.继续点击“NEXT”按钮,界面如下图所示。

在这里插入图片描述
10.以上是高性能 bank 端接匹配阻抗的设置,这里不去改它,默认 50 欧姆即可。接下来点击“NEXT”按钮,界面如下图所示。

在这里插入图片描述
这里第一个选项是系统分配它认为的最合适的管脚(如果只是仿真,可以选择这个),第二个选项是由用户自己分配管脚。我这里只看仿真,固选择了第一个。

11.接下来一直点击next即可。

在这里插入图片描述
12.点击next即可。

在这里插入图片描述
13.点击next即可。

在这里插入图片描述

14.先点击accept,再点击next即可。

在这里插入图片描述
15.点击next即可。

在这里插入图片描述
16.点击generate即可。

在这里插入图片描述
17.点击generate生成MIG IP核。

在这里插入图片描述
18.等待综合完成后,如下图所示,右键选择Open IP Example Design,即可打开Xilinx官方提供的MIG IP核读写例程。

在这里插入图片描述
19.紧接着选择MIG IP核读写例程的存放路径 ,点击OK。

在这里插入图片描述
20.下图即为Xilinx官方提供的MIG IP核读写例程 ,点击Run Simulation进行仿真。

在这里插入图片描述
21.下图即为MIG IP仿真波形。(建议用modelsim仿真,vivado的仿真速度是真的慢)

在这里插入图片描述
22.我们只需关注UI端的这些信号。

在这里插入图片描述
23.首先观察写数据时的时序。

在这里插入图片描述

在init_calib_complete拉高后,即DDR初始化完成后,在第一根蓝线处,app_rdy为高,表示MIG IP核接收读写命令的准备完成,可以接收读写命令。此时app_en为高,app_cmd=0,app_addr=0表示写命令和地址被写入。与此同时app_wdf_rdy为高表明此时 IP 核数据接收处于准备完成状态,可以接收用户发过来的数据,在当前时钟拉高写使能(app_wdf_wren),给出写数据(app_wdf_data)。这样就可以成功向 IP 核写数据。这里有一个信号 app_wdf_mask,该信号用来屏蔽写入数据的,该信号为高则屏蔽相应的字节,该信号为 0 默认不屏蔽任何字节。
24.然后观察读数据时的时序。

在这里插入图片描述
在黄线处,app_rdy为高,表示MIG IP核接收读写命令的准备完成,可以接收读写命令。此时app_en为高,app_cmd=1表示读命令和读地址被写入。发出读命令后,只需等待数据有效信号(app_rd_data_valid)拉高,为高表明此时数据总线上的数据是有效的返回数据。通常在发出读命令一段时间后,有效读数据才能读出,如图中蓝线所示。

标签:芯片,DDR3,APP,MIG,选择,IP,时钟
来源: https://blog.csdn.net/weixin_43872190/article/details/122990129