一、前言

由于DDR3的控制时序相当复杂,为了方便用户开发DDR3的读写应用程序,Xilinx官方就提供了一个MIG(Memory Interface Generator) IP核,它可以为用户生成一个DDR3控制器。该控制器结构如下:


它提供了用户接口(左侧),内部会将用户接口接收到的时序转换成DDR3所需的真正时序,并通过物理端(右侧)的接口连接到DDR3。由于用户接口的时序比较简单,因此该控制器就隐藏了极其复杂的DDR3的控制时序,让用户只需要按照用户端的时序来操作就可以对DDR3进行相应的读写。

二、MIG IP核配置

1、第一步:查找IP核
2、第二步:
  • ① 创建一个设计
  • ② IP核命名
  • ③ MIG 中控制器的个数,取决于你想控制几个存储器,它生成多组接口用于控制不同的存储器。我们只需要控制一个DDR3,所以这里选择选择 1 即可。
  • ④ 是否启用AXI4接口,默认是使用的app接口。

3、第三步:选择以下器件型号,就代表生成的IP不止支持之前已经选择的器件型号,还兼容下面选择的器件型号。

4、第四步:选择内存类型为DDR3

5、第五步:DDR3控制器选项设置
  • ① 时钟频率,即ddr3的工作频率,由MIG提供给ddr3,也即第一张图中的ddr_ck的频率。
  • ② MIG会在用户端提供一个ui_clk(第一张图左端的clk信号,用户发送和接收数据等操作都是在该时钟域下进行的)供用户使用,这里的4:1指的就是①中设置的时钟频率:ui_clk的频率,所以此时ui_clk的频率是200MHZ。
  • ③ 选择DDR3存储器的型号。
  • ④ DDR3的工作电压。
  • ⑤ DDR3的数据位宽。
  • ⑥ 选择是否使用数据掩码。
  • ⑦ 选择Normal时,允许内存控制器将命令重新排序到内存,以获得尽可能高的效率。选择Strict则强制控制器按照收到的确切顺序执行命令。


6、第六步:DDR3选项设置
  • ① 选择输入给MIG的时钟频率,该时钟是MIG的源时钟,也是有了它才能生成上面说的DDR3的工作时钟ddr_ck和用户时钟ui_clk。我给MIG输入的时钟是开发板上的板载差分时钟,频率是200MHZ,所以这里选择5000ps。
  • ② 读突发类型选择为连续模式。
  • ③ 内存地址映射类型,正常使用选择第二个即可。

7、第七步:
  • ① 选择提供给MIG的输入时钟的类型,这里选择是差分类型,因为前面提到我输入给MIG的时钟是板载的差分时钟信号。
  • ② 参考时钟选择使用系统时钟,也即200MHZ的差分时钟。在MIG中使用了idealy,odelay,idelayctrl原句,idelayctrl原句需要提供一个ref_clk作为基准。
  • ③ 系统复位极性选择低电平有效。
8、第八步:选择终端电阻的阻抗为50欧姆,这是由核心板的硬件设计决定的

9、第九步:引脚分配

对DDR控制器进行管脚分配,在这里我们选择 Fixed Pine Out,通过读取XDC文件中的引脚分配信息给DDR3分配引脚。

在这一界面中,选择 Read XDC/UCF为控制器分配引脚,在弹出界面选择我们为用户提供的引脚分配的XDC文件。读取完XDC文件后,点击Validate就可以验证管脚分配是否合理。

接下来后面一路点击OK或者Next就可以生成所需的IP核了。

三、引脚说明

生成的IP核DDR3_CONTROL会有两组接口:

  • 一组是Memory interface ports ,它连接到DDR3,无需用户来操作,只需要连接好就行;
  • 另一组是Application interface ports,它是用户端的接口,供用户直接操作的。

前面说过,MIG会将从Application interface ports接收到的信号在内部进行时序转换,变成直接控制DDR的时序,由Memory interface ports 输出给DDR3,这个逻辑一定要清楚。

下面打开IP核DDR3_CONTROL的例化模板,介绍下各个端口的作用:



想必大家都看到了有以下两个端口,这就对应了我们在第七步①中设置的MIG IP核的输入时钟为差分信号。

.sys_clk_p                       (sys_clk_p),//系统的差分时钟
.sys_clk_n                       (sys_clk_n),

各个端口具体是啥意思,已经在注释中写清楚了,至于更加详细的时序,之后有机会再说吧!!!

四、总结

注意上面有四处黄色高亮的内容,分别是涉及到的四种不同的时钟信号,一定要区分开这几个时钟。

1、关于DDR3的介绍可以参考下面的文章:

  • DDR3详解
  • DDR3知识大全

2、关于使用MIG IP核对DDR3进行读写的案例,以及用户端读写时序的分析,可以参考以下几篇文章:

  • Xilinx VIVADO中DDR3 IP核的使用(1)
  • Xilinx VIVADO中DDR3 IP核的使用(2)
  • Xilinx VIVADO中DDR3 IP核的使用(3)

基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL)相关推荐

  1. 基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

    一.前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文 ...

  2. vfifo控制mig_基于MIG IP核的DDR3控制器(一)

    最近学习了DDR3控制器的使用,也用着DDR完成了一些简单工作,想着以后一段可能只用封装过后的IP核,可能会忘记DDR3控制器的一些内容,想着把这个DDR控制器的编写过程记录下来,便于我自己以后查看吧 ...

  3. 基于vivado DDS ip核的DDS信号发生器(可调频调相)

    基于Vivado DDS ip核的DDS信号发生器: 在Vivado软件中调出DDS ip核进行设置,很多参数可以参考xilinx官方手册,比较重要的是System Clock系统时钟和Phase W ...

  4. 弟中弟级,基于Vivado的IP核封装以及仿真调用,FPGA入门小玩

    弟中弟级,基于Vivado的IP核封装以及仿真调用,FPGA入门小玩 IP核:知识产权核,指某一方提供的.形式为逻辑单元的可重用模块.IP核通常已经通过了设计验证,设计人员以IP核为基础进行设计,可以 ...

  5. 快速上手Xilinx DDR3 IP核(4)----把MIG IP核封装成一个FIFO(下)(Native接口)

    写在前面 本文将把Xilinx的MIG IP核DDR3的Native接口进行二次封装,将其封装成一个类似FIFO的接口,使其应用起来更加方便简单. 本文为下篇,建议与上篇一起阅读,有利于理解: 快速上 ...

  6. 快速上手Xilinx DDR3 IP核(3)----把MIG IP核封装成一个FIFO(上)(Native接口)

    写在前面 本文将把Xilinx的MIG IP核DDR3的Native接口进行二次封装,将其封装成一个类似FIFO的接口,使其应用起来更加方便简单. DDR3系列文章: 快速上手Xilinx DDR3 ...

  7. 【DDR3 控制器设计】(1)MIG IP 核的详解与配置

    写在前面 本系列为 DDR3 控制器设计总结,此系列包含 DDR3 控制器相关设计:认识 MIG.初始化.读写操作.FIFO 接口等.通过此系列的学习可以加深对 DDR3 读写时序的理解以及 FIFO ...

  8. XIlinx MIG 控制DDR3 SO-DIMM内存条(二):MIG IP核学习

    目录 1 简介 2 IP核自定义 2.1 设置IP核参数 2.1.1 Pin Compatible FPGAs 2.1.2 Memory Selection 2.1.3 Controller Opti ...

  9. Xilinx FPGA平台DDR3设计保姆式教程(3)MIG IP核使用教程及DDR读写时序

    干货来了,用DDR搬砖,只需要会用IP就好,Xilinx官方YYDS! ---------------------------------------------------------------- ...

最新文章

  1. kubernetes相关概念
  2. Android跳转intent简单教程
  3. isotope == parallax 例子
  4. opencv 学习笔记6:通道的拆分与合并
  5. Mybatis sql注入问题
  6. SQL Server2000 “mcc 无法创建管理单元”
  7. Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring 构造
  8. jboss7 关闭日志打印_使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句
  9. 教你如何使用FusionInsight SqoopShell
  10. Leetcode每日一题:463.island-perimeter(岛屿的周长)
  11. AutoPlay Media Studio光盘开发利器
  12. Ajax请求中的Redirect()
  13. 【JSP开发】response重定向和resquest转发
  14. Linux直接复制eclipse也可以使用
  15. c#如何调用php接口方法参数类型,c# – .NET:使用通用接口参数调用Assembly obj的GetInterface方法...
  16. 计算机精品在线开放课程申报书,精品在线开放课程申报书.doc
  17. ExpandableListView
  18. java坦克大战爆炸效果_用java做坦克大战--主要类和基本功能实现
  19. java http 401_java HttpClient模拟登陆一直401
  20. 【期末复习】2021-2022南邮网络管理理论与实践复习题

热门文章

  1. [416]. 分割等和子集
  2. 在win10上配置apache、php、mysql、phpmyadmin
  3. Linux进中国,十年之回顾
  4. 凡客诚品,缺钱你就喊出来
  5. 计算机什么应用函数计算,计算机应用基础Excel函数计算
  6. API网关之Kong网关简介
  7. 基于安卓AndroidStudio智慧医疗医院预约挂号app设计
  8. Linux系统学习方法——写给小白 每个人都有心中向往的一些事情,而我,刚进实验室,看到师兄师姐在电脑前面噼里啪啦的敲代码,真的好羡慕,看着他们实现一个又一个的功能满心欢喜,我也很想尝试。后来了解到师
  9. React组件通信(父传子,子传父) - 前端
  10. Liunx系统工作命令篇