fpga挂一片ddr2_FPGA上外挂DDR2DDR3MIG IP的使用记录
前言
当需要大容量数据存储及处理的时候,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.MIG核顶层文件调用:
生成IP后,我们所关心的就是整个IP的TOP层,下图中为mig_7series_0.v。打开它就可以看到相关的信号了。
fpga挂一片ddr2_FPGA上外挂DDR2DDR3MIG IP的使用记录相关推荐
- fpga挂一片ddr2_FPGA的DDR2 SDRAM IP核的使用
DDR2 SDRAM 作为高速大容量存储器件,非常普遍的应用在我们的工程中.在FPGA外挂DDR2 SDRAM,如果我们直接编写驱动逻辑,是非常麻烦而且耗时的事情,但是Altera在开发环境中给我们提 ...
- fpga挂一片ddr2_FPGA的外部存储器接口DDR2(7)_CYCLONE IV与DDR2相关的引脚
ALTERA公司的CYCLONE V 已经发布,样片已经有了,接下来就会量产,明年就会出现基于CYCON V的开发板.自己关注这个芯片已经有些日子了,现在的资料虽然不是很多,但也正好提前了解一下这个芯 ...
- fpga挂一片ddr2_FPGA片外存储器之DDR2控制器2
这次的主要内容是仿真. 我相信看我文章的人,都是第一次接手这一块,手上也都是别人做好的开发板.这种情况下,如果你用ip直接生成的例子去仿真如果没有成功的话.大概有这么几个原因: 1,仿真库,没有加全. ...
- fpga挂一片ddr2_FPGA控制DDR2 Verilog HDL程序代码
//--------------------------------------------------------------------------- //-- 文件名 ...
- EtherCAT 总线主站 FPGA 挂百兆网口串接伺服 ethercat 主站 FPGA verilog 代码 全部在 FPGA上实现,纯 Verilog 实现,无软核
EtherCAT 总线 demo 板介绍 一.测试架构介绍 总线部分包括 EtherCAT 协议.Canopen 协议.1588 同步协议,全部在 FPGA上实现,纯 Verilog 实现,无软核,时 ...
- emc文件存储服务器,emc存储怎么挂在linux服务器上
emc存储怎么挂在linux服务器上 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...
- 群晖nas 文件服务器,群晖nas挂到云服务器上
群晖nas挂到云服务器上 内容精选 换一换 在公有云上部署SAP HANA所需要的云服务如下. 无法直接从云备份控制台查看备份中的数据,您可以通过以下几种方式进行查看:云服务器备份使用云服务器备份创建 ...
- 千牛文件已上传服务器,千牛怎样挂在云服务器上
千牛怎样挂在云服务器上 内容精选 换一换 本节为您介绍如何通过控制台提供的远程登录功能(即VNC方式)登录到弹性云服务器上.如果您的弹性云服务器是采用密钥方式鉴权,请在登录前先使用密钥文件解析登录密码 ...
- 千牛传文件在服务器哪里,千牛怎样挂在云服务器上
千牛怎样挂在云服务器上 内容精选 换一换 云耀云服务器(Halo Elastic Cloud Server,HECS)是可以快速搭建简单应用的新一代云服务器,具备独立.完整的操作系统和网络功能.提供快 ...
最新文章
- [Python设计模式] 第21章 计划生育——单例模式
- 《Arduino实战》——第1章 你好Arduino
- 谷歌发布:2021年度最受欢迎的开源Chrome插件!
- jquery 沟选项获取点击添加和删除的数据
- Spring中Bean的后置处理器
- GitHub#java#:设计模式
- 解决IntelliJ IDEA在笔记本屏幕中部分界面显示不全被遮挡的问题
- 同时安装 Python 2 和 Python 3环境下 pip 的使用
- 小姐姐把信息撤了后如何查看?Python百行代码分秒恢复!
- IoT 物联网卡行业骗局大揭秘
- Greenplum 安装部署 单机版安装(Linux)
- 天泉证道四句教与价值观
- oracle清除temp表空间,Temp表空间占用长时间不释放,是谁惹的祸
- vps和云主机哪个好
- 图像和像素(Images and Pixels)
- 古代情感诗词top100
- C++11\14\17\20 新特性整理
- Android 触摸事件机制(三) View中触摸事件详解
- Provides transitive vulnerable dependency org.yaml:snakeyaml:1.33
- 带负荷测试要求二次最小电流_带负荷测试的判别
热门文章
- 年度Java技术盘点,懂这些技术的程序员2019年薪资翻倍!
- 峰哥教你如何在B站学大数据(建议收藏)
- C++设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,根据坐标能计算矩形的面积。
- 中国式智慧:古人为何乐意露破绽给皇帝?
- @Configuration(proxyBeanMethods = false) 设置这个为false有啥用
- 小程序学习:电影周周看
- Android 入门第二讲03-约束布局ConstraintLayout(可视化介绍,Chains链,MATCH_CONSTRAIN,百分比布局,圆形定位,Guideline,Barrier)
- “希希敬敬对”团队作业——敏捷冲刺6
- discuzx update sitekey.php,Discuz如何清除应用中心密码附加工具
- 智能优化算法之松鼠算法(Squirrel search algorithm)