前言

当需要大容量数据存储及处理的时候,FPGA内部自带的存储资源是远远不够的,所以问题来了,怎么使用外带的DDR3?

首要问题在于DDR3是什么?有没有协议?当然只是需要用Xilinx MIG IP去配置使用的话,DDR3内部信号变化关系不需要太明了,当然明了会更佳,有时间可以看看底层内部架构,只是使用MIG IP去配置DDR3的话不需要像写一个DDR3控制器那么明白。

所需要预先储备的知识:

(1)阅读JEDEC  DDR3 SDRAM STANDARD (标准协议)(有空的童鞋可以阅读);

(2)阅读ug586_7Series_MIS.pdf (XIlinx MIG核配置文档)(必须的);

(3)百度文库中的高富帅教程,百度一下就可以知道(推荐阅读);

Xiinx MIG IP为开发者提供了用户接口,极大的降低了开发者控制DDR3的难度,提升开发效率(然并卵)。

///////////////////////

1.看完上述文章后,你就想着怎么在vivado中生成MIG IP呢?

本次配置以NEXYS4开发板作为配置平台;Xilinx vivado 2016.1

NEXY4开发板上自带的DDR为DDR2 型号为MT47H64M16HR-25;

配置DDR3和DDR2基本上是类似的;

(1)打开IP配置界面,搜索MIG:

(2)配置,next:

(3)当然是创建新设计,例化IP的名字修改,由于已经生成好的,所以显示为灰色。

然后选择一个控制器。。。next:

(4)器件引脚适配性选择,目前不需要,next:

(5)选择DDR2类型,next:

(6)clock period表示的是MIG IP的工作时钟,而DDR是双倍率,则对外接口部分的接口速率为X2,不同的器件可选择的范围是不一致的,如果选择为400M,那么接口速率为800M。

PHY to controller clock ratio:工作时钟和用户接口部分的时钟比,本质体现为ui_clk时钟。可能2:1是不可选的,下图中的4:1就表示clock period :ui_clk = 4:1;

然后选择数据位宽,本次选择为16bit则每次打出的数据为16bit,突发8的话,则rd和wr的data宽度为16*8=128bit。

本DDR2有数据掩模,选上,虽然目前没用到,next:

(7)选择input clock period,这是什么意思呢,如果简单起见,选择为200M,后面会有惊喜,推荐200M。你可以使用晶振的时钟或者内部时钟,后面得相关配置才能用。

选择ODT,板子文档说是50ohms,则选择此项。然后是地址映射,选择bank+row+column的方式,next:

(8)系统时钟与参考时钟的极性选择,如果想用内部的时钟作为系统时钟和参考时钟,那么就选择no buffer选项,如果前面选择了200M系统时钟输入,那么参考时钟会多一个use system clock 的选项,也就是少给一个时钟,不然前面选择的不是200M时钟的话,参考时钟就会贴心的问你要200M时钟。想用PLL的输出作为system clk输入,那么选择no buffer项。参考时钟用use system clock。毕竟对于只有一个外部晶振的话,单独给mig ip就完犊子了,别的时钟不能再使用这个晶振时钟,为了多几个时钟使用,还是用PLL。况且有的板子晶振只有20M的话,你就没得选了,必须用PLL倍频灌入时钟。

debug信号不使用,内部参考引脚做普通输入脚使用,xdc啥的关掉。

(9)如果有DDR2的引脚分配的,就选择Fixed Pin Out,开发板之类的一般带,自己画的板子就得照着原理图一个个分了,可能会瞎眼。

(10)选择你的引脚约束文件,导入并检查合理性,通过则next:

然后一路next,就可以生成MIG IP了。

/////////////////////////

2.怎么用IP自带的仿真呢?

(1)现在我们就有了如下图所示的IP文件架构,右键IP选择打开IP example design,为了仿真使用。

在你的example设计中会有仿真顶层,在哪呢,我的在这,下面是ddr3举例:
E:\kingstacker\project_2018\date_7_23\dev\mig_7series_0_example\mig_7series_0_example.srcs\sim_1\imports\sim

这个目录下有什么文件呢:

ddr3_model.sv:DDR3的总线功能模型,相当于个ddr3芯片。

ddr3_model_parameters.vh:一堆模型的相关参数。

sim.do:modalism可用的do文件,不过不能直接使用得修改。

sim_tb_top.v:仿真顶层文件。

wiredly.v:仿真需要用的文件。

其他就没啥卵用了。

打开sim.do文件应该是下面这个样子,这放到modelsim仿真绝对是会出错的,所以需要修改相关路径。

设置一下相关v文件的绝对路径:

修正glbl.v文件的路径,我这里用ISE的glbl文件也没问题。然后修正wiredly.v、sim_tb_top.v、ddr3_model.sv路径。

修改仿真精度fs为ps,加快仿真速度。修改相关库挂载,根据编译的名字修改。

然后就可以切换到sim.do文件所在的路径,do sim.do即可。

3.怎么自己用激励进行仿真呢?

FPGA上外挂DDR2&DDR3&MIG IP的使用记录的更多相关文章

  1. MIG IP控制DDR3读写测试

    本文设计思想采用明德扬至简设计法.在高速信号处理场合下,很短时间内就要缓存大量的数据,这时片内存储资源已经远远不够了.DDR SDRAM因其极高的性价比几乎是每一款中高档FPGA开发板的首选外部存储芯 ...

  2. Xilinx 7系列例化MIG IP core DDR3读写

    昨晚找了一下,发现DDR3读写在工程上多是通过例化MIG,调用生成IPcore的HDL Functional Model.我说嘛,自己哪能写出那么繁琐的,不过DDR读写数据可以用到状态机,后期再添砖加 ...

  3. 基于MIG IP核的DDR3控制器(一)

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

  4. 基于MIG IP核的DDR3控制器(二)

    上一节中,记录到了ddr控制器的整体架构,在本节中,准备把ddr控制器的各个模块完善一下. 可以看到上一节中介绍了DDR控制器的整体架构,因为这几周事情多,又要课设什么的麻烦,今天抽点时间把这个记录完 ...

  5. 如何区分DDR1 DDR2 DDR3内存条

    DDR1,DDR2,DDR3内存条(DDR是Double Data Rate双倍速率同步动态随机存储器的英文缩写)就是俗称的一二三代内存条.这三种内存条工艺不同,接口不同,性能不同,互不兼容.要区分它 ...

  6. PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植

    PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植 一:前言 这段时间有个朋友加微信请求帮忙调试一块PCIe采集卡.该采集卡使用xilinx xc ...

  7. 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用

    十.MC8051软核在FPGA上的使用 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣.本实验重 ...

  8. 基于dsp_builder的算法在FPGA上的实现

    基于dsp_builder的算法在FPGA上的实现   一.摘要 结合dsp_builder.matlab.modelsim和quartus ii等软件完成算法的FPGA实现. 二.实验平台 硬件平台 ...

  9. 在Linux系统上限制远程登录的IP

    在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则  先allow 后deny.

随机推荐

  1. Spring为什么@Autowired注入的是接口

    1.Spring怎么知道注入哪个实现? As long as there is only a single implementation of the interface and that imple ...

  2. ps 快捷键大全

    一.工具箱(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取)矩形.椭圆选框工具 [M]移动工具 [V]套索.多边形套索.磁性套索 [L]魔棒工具 [W]裁剪工具 [C]切片工具.切片选择 ...

  3. NewLife.XCode 上手指南

    想了解什么是XCode 在这里我不对XCode做过多介绍,XCode曾经是一个轻量级ORM组件,现在是一个重量级数据映射框架,支持实体对象数据到不同媒体的数据映射,提供面向对象的方式操作数据库,解决9 ...

  4. 安装git和关联gitlab拉取代码步骤

    1.双击 “Git-2.9.2-64-bit.exe”文件,一路next安装git程序 2.为github帐号添加SSH keys 3.使用git clone命令从GitLab上同步代码库时,如果使用 ...

  5. (五)Centos之目录处理命令

    一.目录处理命令 linux中 关于目录 有几个重要概念:一个是 / 根目录  还有一个当前用户的家目录 比如 root用户的家目录是 /root  ,普通用户的家目录是/home/xxx 下,如下图 ...

  6. 【C# 开发技巧】在VS程序如何取消.vshost的进程

    我们在双击执行一个EXE程序,会有两个进程,程序关闭之后,貌似只能关闭你的程序,附加的vshost.exe仍然存在.如下图 解决方案: 1.在调试页面,改成release,同时取消最后一项启用承载进程 ...

  7. 基于MSP430F2618的程控电压源

    基于MSP430F2618的程控电压源 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路设计 ...

  8. AOP实践—ASP.NET MVC5 使用Filter过滤Action参数防止sql注入,让你代码安全简洁

    在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检 ...

  9. cocos creator 实现打字机的效果

    作为一个萌新,我只想说我是没有感情的粘贴工具! let richText = this.viewNode.getChildByName('richText').getComponent(cc.Rich ...

  10. VMware中 CentOs虚拟机的安装教程

    首先点击创建新的虚拟机 选择典型安装,点击下一步 这里我们选择稍后安装操作系统,然后点击下一步 这里我们操作系统选择Linux操作系统,版本选择CentOs 7 64位,然后点击下一步 这里我们可以修 ...