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

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

  1. Clock PeriodDDR3 物理芯片使用的运行时钟,ddr芯片会以这个时钟采数据。这个参数的范围和 FPGA 的芯片类型以及具体类型的速度等级有关。我这里选择2500ps,对应 400M,因为双沿采样,所以为800M数据速率。注意这个时钟是 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。按上图模式选择的话用户时钟为100Mhz。
  3. VCCAUX_IO: FPGA 高性能 bank(High Performance bank)的供电电压。它的设置取决于 MIG控制器运行的周期/频率。当用户让控制器工作在最快频率的时候,系统会默认为 1.8V。
  4. Memory Type: DDR3 储存器类型选择。默认选择 Component,即贴片式的DDR。SODIMM为笔记本的DDR,RDIMM为服务器的DDR,UDIMM是台式机用的DDR。
  5. Memory Part: DDR3 芯片的具体型号。本次选择 MT41J128M16XX-125,这个型号其实和实际硬件原理图上的型号可以不同的,只要用户的 DDR3 芯片容量和位宽一致即可。以上为例代表这一片ddr的位宽为16,总容量为128Mb x 16bit =256MB。
  6. Memory Voltage:DDR3 芯片的电压选择,由芯片决定,芯片手册上有。
  7. Data Width: 数据位宽选择,这里选择 16。此处为物理位宽,并不是用户数据位宽。用户数据位宽为:Data Width×PHY to Controller Clock Ratio×2=16×4×2=128bit
  8. ECC: ECC 校验使能,数据位宽为 72 位的时候才能使用。
  9. Data Mask: 数据屏蔽管脚使能。勾选它才会产生屏蔽信号。如果使用的内存条存在数据屏蔽接口,则需要拉高该信号,并且后续分配管脚,否则DDR初始化可能不成功。
  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 核的工作时钟,建议选择200mhz
  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。当选择“No Buffer”后,IBUF原语不会被例化。
  2. Reference Clock: MIG IP 核参考时钟。同样选择“No Buffer”,将由时钟模块生成。当Input Clock Period选择200mhz时,该模块还可选择use system clock选项,此时Reference Clock与System Clock相同。
  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)拉高,为高表明此时数据总线上的数据是有效的返回数据。通常在发出读命令一段时间后,有效读数据才能读出,如图中蓝线所示。

  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: MIG IP核是指Memory Interface Generator IP核,在Zynq系列芯片中使用。它是提供给开发者的一种IP核设计资源,用于生成具有高性能和可靠性的存储器接口MIG IP核可以帮助开发者更轻松地设计和实现与DDR3、DDR4等标准存储器接口的连接。 MIG IP核具有可配置性,可以根据需求进行灵活的配置。它提供了一系列的参数选项,例如存储器接口的宽度、时序和通讯协议等,并且可以进行调整和优化,以适应设计需求。开发者可以根据实际应用场景的需要选择合适的配置参数,从而得到性能达到最佳的接口设计。 使用MIG IP核可以减少设计时间和复杂性。开发者无需从头开始设计存储器接口电路,可以直接使用MIG IP核生成所需的接口电路。此外,MIG IP核还提供了一套完整的验证工具和文档,可帮助开发者进行验证和调试。 如果开发者对MIG IP核配置和使用不熟悉,还可以参考Xilinx官方提供的相关文档和实例代码。这些资源可以帮助开发者快速上手,并进行更深入的学习和应用。 综上所述,MIG IP核是Zynq系列芯片中一种用于生成高性能存储器接口IP核。它具有可配置性和易用性,可帮助开发者更快速、更方便地设计和实现存储器接口。 ### 回答2: MIG IP核是一种用于Xilinx Zynq系列器件的内存控制器IP核。Zynq是一种集成了处理器系统和可编程逻辑的SoC(系统级芯片),它具有FPGA(现场可编程门阵列)和ARM Cortex-A9处理器的组合。MIG IP核是Zynq器件中处理器系统连接外部DDR(双数据速率)SDRAM(同步动态随机存取存储器)所必需的关键组件。 MIG IP核提供了与DDR SDRAM的接口,以实现高速数据读写。它通过提供包括时钟、地址、数据等接口信号,并控制DDR SDRAM的访问,实现了高效的数据交换。此外,MIG IP核还负责初始化DDR SDRAM,并进行校准和调整以确保数据的可靠性和一致性。 使用MIG IP核开发人员可以轻松地构建高性能、低延迟的内存系统,以满足复杂的应用需求。通过调整MIG IP核的参数,可以适应不同类型和规格的DDR SDRAM,以及不同的性能和功耗要求。此外,MIG IP核还支持各种高级功能,如ECC(纠错码)校验和ECC错误处理,以提高数据的可靠性和完整性。 总而言之,MIG IP核是在Zynq系列器件中使用的关键IP核之一,用于实现与外部DDR SDRAM的高速数据交换。它为开发人员提供了灵活性和性能优化的选项,并确保数据的可靠性和一致性。使用MIG IP核开发人员可以更轻松地设计出高性能、低延迟的嵌入式系统。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值