原创 【博客大赛】小梅哥FPGA学习笔记之Quartus II 15.0中仿真DDR2 IP核

2015-6-20 13:06 12917 20 28 分类: FPGA/CPLD 文集: FPGA深入学习

小梅哥FPGA学习笔记之Quartus II 15.0中仿真DDR2 IP

虽然近期用不上DDR2的控制器,但是昨天成功仿真Altera 三速以太网IP核又确实让我兴奋了一把,趁着这个兴奋劲儿,再一举拿下DDR2IP核仿真。

 

仿真还是在Altera 最新的开发套件Quartus II 15.0中进行。首先创建工程,我将工程命名为DDR2_SIM,器件选择我比较熟悉的EP4CE10F17C8,仿真工具选择modelsim – altera ,语言为Verilog。最后,整个工程建立完毕后的Summary如下图所示:

20150620130250953001.jpg

工程创建好后,在右侧的IPCatlog中,搜索栏处输入DDR2,然后在搜索结果中选择DDR2 SDRAM Controller with ALTMEMPHY,如下图所示:

20150620130256498002.jpg

双击DDR2 SDRAM Controller with ALTMEMPHY,会弹出如下所示的对话框:

20150620130303686003.png

将该IP命名为DDR2,语言选择Verilog,然后点击OK,就会开始加载参数设置对话框,整个加载过程大约需要等待2030秒左右才会弹出GUI界面,请大家耐心等待。弹出的GUI 界面如下所示:

20150620130309414004.jpg

很遗憾,整个界面还是显示不全,上半部分无法看到,也无法拖动窗口,原本右下侧的finishcancel按钮也没有显露出来,这个问题我从使用Quartus II11.0的时候就发现了(没有用过10.x版本,据说是从10.x版本开始出现这个问题的),到了Quartus II 15.0中这个问题依然没有得到解决,还是希望Altera能够尽快修复这个Bug

虽然界面默认没有完全显示,但是我们还是有办法来让他显示的。如果你不需要移动这个配置窗口的位置,或者说对界面最上方未显示的部分内容已知或者不关心(实际我们也真的不用去关心)那么简单的解决方法就是单击系统右下角的显示桌面按钮(win7),然后再在任务栏中点击该配置界面,就能够成功加载右下角的finishcancel按钮了,但是界面上半部分依旧无法看到。如下图所示:

20150620130316509005.jpg

但是此时依旧无法看到上半部分,终极解决方案就是,

第一步:打开这个配置界面的GUI

第二步:设置电脑屏幕分辨率为最小值(我是这么做的,不清楚设置其他分辨率是否也能奏效)

第三步:将屏幕分辨率修改回正常值。这时候再看,整个界面就能够正常显示了,如下图:

20150620130322553006.jpg

拖着右侧的进度条往下划就能看到finishcancel按钮了。同时页面最上方的内容也能看到了。

这里我们在Memory选项卡中,设置速度等级(Speed Grade)为8,与实际芯片保持一致。Memory Presets为“Micron MT47H32M16-5E “,如下图所示:

20150620130331483007.jpg

此页中其他选项保持默认,接下来的若干项均保持默认即可,直到切换到EDA选项卡处,勾选Generate Simulation model,这里是为了仿真时生成仿真模型,以配合modelsim进行仿真。

20150620130339757008.jpg

点击右下角的finish,软件则开始生成IP核控制器的相关文件和示例内容。生成完毕大约2分钟。

生成完毕后,设置DDR2.qip为设计顶层模块,然后执行分析和综合(快捷键是Ctrl + K)。

分析和综合完成后,整个IP核占用资源如下图所示:

20150620130345321009.png

话说这个控制器还是挺耗费资源的啊。

接下来设置仿真,有了昨天仿真TSE时遇到testbench文件名与文件中实体名不一致的经历,这次我又首先去查看了下testbench,这次还好,testbench文件名和文件中的实体名是一致的。不过一个疑问就是,为什么testbench的名字是叫做DDR2_example_top_tb.v而不是DDR2_ tb.v?仔细一查看这个文件才发现testbench文件中例化的设计名字居然是DDR2_example_top而不是我想当然的DDR2。也就是说,这个设计是将控制器和例子独立开来了,这一点和昨天仿真的TSE不同,TSE的仿真文件中直接以IP核为设计顶层,而DDR2中确是另外做了一个DDR2_example_top文件来作为例子的顶层。查看DDR2_example_top文件,其中例化了DDR2控制器和一个DDR2_example_driver文件。于是我回到Quartus II中,手动添加DDR2_example_top.VDDR2_example_driver.V文件到工程中来,并更改DDR2_example_top.V为设计顶层文件,然后分析和综合。

20150620130352229010.png

接下来设置NativeLink以将设计工程和Modelsim-altera关联起来。

设置testbench为这里具体怎么添加文件我就不多说了,详细请参考我仿真三速以太网时的介绍。

需要添加的testbench文件有两个,位于testbench文件夹下,分别为DDR2_example_top_tb.vDDR2_mem_model.V。其中DDR2_mem_model.V是一个DDR2的仿真模型,该模型直接用行为语言描述了一个虚拟的DDR2器件,这样,通过DDR2控制器来操作这个虚拟的器件,就能够保证控制器得到正常的操作相应,从而使仿真正常的进行下去。

添加完成后,设置Test bench nametop level module in test bench DDR2_example_top_tb。然后一路点击OK下去,直到设置完毕。 如下图所示:

20150620130359113011.png

接下来,就可以直接点击RTL Simulation按钮执行仿真了:

20150620130406278012.png

一切,本以为一气呵成,没想到在运行仿真的时候具体弹出下面这个错误,我改了好久都搞不定,不知道是我操作有问题还是软件Bug,或者Quartus II15.0与我使用的modelsim不兼容(我使用的是Quartus II13.0配套的modelsim – altera来仿真的,有可能是兼容性问题,但是我后来换成modelsim se 10.4d也还是不行),总之很郁闷,我使用的是骏龙科技FAE赠送的60天全功能License,因此应该也不是License的问题。再查看rpt文件,也没有找到任何的线索。

20150620130413693013.png

无奈之下,只得回到Quartus II 13.0的软件中,重复整个过程,结果顺利完成(Quartus II 13.0中添加DDR2 IP核是在MegaWizard Plug-In Manager中这一点与Quartus II 15.0中不同,其他均完全一致)。仿真结果如下图所示(具体分析波形的结果本文就不介绍了,留到后面哪一天需要用到DDR2的时候在来弄,精力有限啊):

20150620130418106014.jpg

20150620130424440015.jpg

20150620130430144016.jpg

20150620130437887017.png

20150620130443144018.png

20150620130448949019.png

另外,谁要是使用Quartus II15.0能够仿真成功,或者解决了我遇到的问题,也希望阁下不吝赐教。

 

小梅哥

2015620日于北京至芯科技

PARTNER CONTENT

文章评论8条评论)

登录后参与讨论

用户1822651 2016-6-3 11:46

我在用cyclone V生成ddr2 uniphy ip核的时候,最后显示“生成失败”,error:simulation model generation failed,请问是什么原因呢?

用户377235 2015-12-7 15:30

小梅哥,你的那个计算器的引脚是怎么分配得啊?求分享

用户377235 2015-11-2 14:41

怎么添加图片?

用户436812 2015-9-2 16:54

仿真模型文件,求分享啊

用户1845900 2015-7-21 14:21

rpt报错的内容有哪些?

用户431679 2015-6-30 11:27

点赞,小梅哥很用心。

用户377235 2015-6-29 10:30

写的很好。图文并茂,逻辑清晰。

用户602479 2015-6-25 09:13

不错,很好,值得学习
相关推荐阅读
小梅哥 2019-09-04 22:10
小梅哥FPGA时序分析笔记(6.2)深入现象看本质——庖丁解牛之FPGA内数据传输模型
通过上一节,我们了解了FPGA内部数据的传输形式,接下来我们就可以根据上一节的内容来总结一下FPGA内部的数据传输模型了。 时钟和数据传输路径 通过上一节内容中,我绘制的那个FPGA内部数据在逻辑...
小梅哥 2019-09-01 21:28
小梅哥FPGA时序分析笔记(6.1)深入现象看本质——庖丁解牛之FPGA可编程原理
上一次发博客,已经是2个月前了,这中间两个月,干了件很有意义的事情,尤其是对于自己来说,感觉学到了非常多的知识和经验,每天都很忙,忙到没时间逛网站博客,终于忙完闲下来了,连载的事情可不能忘,终于可以书...
小梅哥 2019-07-02 08:57
小梅哥FPGA时序分析笔记(五)I/O约束显神威——深入龙潭
大家一定对我上一节的突然结尾表示一脸茫然:我是来学习时序约束的,然后你告诉我时序约束里面IO约束很重要,然我又跟着你的文章继续往下看,本以为你就要讲如何进行IO约束了,结果呢,你一个取反时钟就把我们打...
小梅哥 2019-06-30 11:07
小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
小梅哥FPGA时序分析从遥望到领悟系列没有遇见过I/O时序问题,没有通过I/O约束方式实际解决过I/O时序问题,就很难明白I/O约束的重要性,也很难相信各种EDA软件真的有那么的傻白甜。 我遇到的最...
小梅哥 2019-06-22 10:32
小梅哥FPGA时序分析笔记(三)时钟约束真重要——事实说话
小梅哥FPGA时序分析从遥望到领悟系列以前,那是在以前,经常有网友(原谅我行文动不动就是网友说,网友问,毕竟我是卖开发板的,正面接触学FPGA的网友相对多一些,所以这些也都是事实存在的事情)问我:小梅...
小梅哥 2019-06-21 10:33
小梅哥FPGA时序分析笔记(二)时钟质量是生命——初遇时序
小梅哥FPGA时序分析从遥望到领悟系列第一次遇到时序问题并通过相应的手段解决问题,算是2年前做百兆以太网图像传输的时候了吧。当时遇到的问题为:同一个工程,每次编译结果的效果都不一样,有的时候编译了,下...
EE直播间
更多
我要评论
8
20
关闭 站长推荐上一条 /3 下一条