modelsim ddr3仿真lattice diamond
转载大部分https://www.cnblogs.com/fhyfhy/p/5224208.html并对其中某些地方就行了改进
自己使用平台:lattice diamond 3.5
ddr3 ip版本1.5
modelsim 10.1c(据说6.6以下仿真有问题)
改进地方:在testbench中加入扩展文件,红色字体已标注
一、 DDR3 的IP 核的生成
1、 选择DDR IP核的生成路径、名字以及哪种语言之后就可以设置DDR IP 的参数了。
2、选择存储大小,可以选择1G、2G、4G或custom。 操作时钟选择(如果速度等级为8,则就没得选择只有跑到300M)。
Memory Type 选择on_board_memory,就是焊接在板子上的DDR 芯片。memory data bus size 定义了数据总线的宽度。
configuration 定义了数据配置的方式,有x16,x8,x4等等,具体的可以参考datasheet.
需要注意的是:1、在两个ddr在扩展位宽使用的时候,要选择2T模式。
2T MODE
This option allows the user to enable or disable the 2T timing for command signals when Dual Rank DIMM or 2
Chip select is selected. This option is not available for SingleRank DIMM or 1 Chip select setting.
2、在和Frame IP 核一起使用的时候,data_rdy to write data delay 的参数要选择为2.
3、选择行和列的宽度,burst Length 的长度。
4、选择DDRIP 生成在左边还是在右边。左右不同,clk_in pin不同,em_ddr_clk的位置不同,DQS也不相同。
5、生成ip核之后,就是将文件加入到工程中,以便使用和仿真。
首先将蓝色方框内的任一个(.ipx或.ipc)加入到工程里,用于综合;将_beh.v文件也加入到工程中,用于仿真。
6、在生成的IP核内的以下路径内找到ecp3的文件夹内的DDR IP 内的顶层文件加入到工程里。
7、在IP核内的以下路径找到以下文件,将除了pmi_开头的其他文件都加入到工程里,用于生成DDR所需的时钟。
8、最后加入完之后,基本就是下面的样子 (注,这里没加入_beh.v文件,如果加入的话,将他设置为仅仅仿真即可)。
如果需要则加入其他的文件和驱动文件即可做设计了。
二 、仿真的建立:
1、在IP核内的以下路径找到以下三个文件加入并设置为仅仅仿真。这三个文件的作用是作为外部监视和仿真头文件(test_mem_ctrl).
2、在IP核内部的以下路径内将以下两个文件加入到工程里,设置为仅仅仿真。这两个文件的作用是模拟外部DDR器件,并存储数据。
、
3、加入之后,基本就是下图这样的了。
4、然后建立仿真工程。并调用Modelsim仿真.在Modelsim里第一次自动运行仿真的时候,会出现下面的错误。双击错误的信息,会弹出
错误文件的错误提示。基本都是找不到参数文件,只要把参数文件copy到testbench的工程里就可以了。
5、在IP核的以下路径内找到ddr3_sdram_mem_params.v文件,copy到testbench的工程下。
还有就是以下三个文件都要copy到testbench的工程目录下,如果是单独仿真,那么就放在modelsim仿真工程下。
还有个是模拟外部DDR的参数,否则ddr3.v和ddr3_dimm_16.v就会出现错误。
接着打开modelsim内的ddr3_dimm_16.v文件,在顶部加入下面两个参数声明(原来是没有这连个参数声明的)。
最好在DIamond的软件的工程内也把这个文件修改了,这样下次再使用这些文件建立新的仿真的时候就不需要加入这个参数声明了。在MYDDR3_beh.v中添加`include "ddr3_sdram_mem_params.v"
在没有加入“tb_config_params.v”的声明的时候,ddr3_dimm_16.v文件会出现下面的报错。这是因为蓝色方框内的参数都在“tb_config_params.v
内声明的。
最后,可以再次在MODELSIM中编译一下全部文件,如果没有错误,则就出现下面的提示,如果有错误,则需再次修改。
在顶层文件test_mem_ctrl.v文件的底部还包括了下面两个我们已经加入的文件。这两个是任务声明文件。
包括了仿真步骤和仿真任务的产生。
testecase里面是仿真的步骤:
1)、先是IP核的设置。可以看到都是用了任务名。比如:reset、init、self_ref等等。而这些任务的具体操作步骤都可以在cmd_gen.v的文件内找到。
2)、设置MR0(只是设置了MR0),然后就会读写数据。具体参数含义还是要看cmd_gen.v文件。
3)、改变突发长度只需要设置MR0即可。
4)、设置为OTF模式,突发长度由otf_bit参数决定。
5)、设置为OTF模式并且burst_cnt可以改变。
6、运行仿真头文件 test_mem_ctrl,加载ecp3库文件,并且将仿真进行到自动停止。观察仿真波形。
1)、初始化完成
2)、设置IP核。
3)当cmd==2 的时候开始写数据。cmd_rdy = 1,则命令被接受。
写入的第一个数据'Hd82d5c69ea418124,然后在数据线上四位一个数据,从低位向高位写起。'h8124,'hea41,'h5c69,'hd82d.依次被写入到DDR芯片内的
第一个地址、第二个地址、、、等。
burst_length 为4, burst_count 为15的情况。
2)、读取数据的操作的情况。
3)、读取数据操作和写入数据操作的区分可以是:em_ddr_dqs信号。在写操作时,em_ddr_dqs先变为11,再变为00,当再次变为11时就开始了
写入第一个数据。当读取操作时,em_ddr_dqs先是变为00,然后再保持一个时钟,然后变为11,开始读取第一个数据。所以根据这可以判断出下图
左边是读取操作,右边是写入操作。
4)、下图是burst_length = 4,brust_count = 15的情况下读数据操作的波形图。
值得注意的是:;::DDR IP核可以记忆若干读写操作,然后按顺序执行读写操作而不会混乱,这样可以大大节约DDR的操作时间。在进行读写操作的时候依然可以处理ddr的命令。
modelsim ddr3仿真lattice diamond相关推荐
- Lattice Diamond与modelsim联合仿真环境设置
Lattice FPGA开发环境在仿真时可以使用modelsim,相比于Diamond自带的Active-HDL仿真工具,具有更好的交互性以及更便捷的可操作性.与其他FPGA的开发环境一样,需要设置联 ...
- Lattice Diamond用Active-HDL实现仿真
license同lattice Diamond,如果不可以用,重新加载下并检查环境变量. 转载于:https://www.cnblogs.com/agllero/p/5284738.html
- Lattice Diamond关于原语的使用
Lattice Diamond关于原语的使用 前言 一.原语基本概念 (一)简介 (二)常用原语 1.时钟相关原语 2.差分输入/输出原语 3.接口相关原语 二.Lattice原语 (一)原语使用 ( ...
- 搭建Modelsim SE仿真环境-使用do文件仿真
本章我们介绍仿真环境搭建是基于Modelsim SE的.Modelsim有很多版本,比如说Modelsim-Altera,但是笔者还是建议大家使用Modelsim-SE,Modelsim-Altera ...
- Lattice Diamond 和 ispLEVER 的不同之处
Lattice Diamond 和 ispLEVER.有一些不同,尤其是如何管理工程的不同,包括以下几点: 1.ispLEVER 有多种工程类型,不同的程序文件类型需要不同的类型的工程:但是Diamo ...
- ISE和Modelsim联合仿真
相信很多人会遇到过这个问题,不知如何让ISE调用Modelsim进行仿真.我也迷糊了不少时间,查查找找,终于弄明白了,所以有了本文,和大家分享一下.我尽量讲得详细点儿,多多上图. 我的环境:Windo ...
- modelsim中仿真波形设置的保存
为了方便以后察看仿真结果,可以将仿真波形保存在.Wlf文件中: 一.保存过程: 1.完成仿真波形 2.切换到sim视窗 3.点击保存图标,可以直接保存为.wlf文件 二.打开过程 1.打开models ...
- Lattice diamond IPexpress 例子 - PLL
[小脚丫STEP-MXO2]学习3 -PLL使用(IPexpress) http://jingyan.eeboard.com/article/75672 小脚丫玩了也快两个星期了,这次写关于板上芯片P ...
- Quartus II调用modelsim无缝仿真
本篇文章为转载,写的不错,最近在学modelsim仿真,网上的教程很乱,把自己认为不错的整理贴出来,后面有机会会写个详细点的. Quartus 中调用modelsim的流程 1. 设定仿真工具 as ...
最新文章
- python调用webservice接口实例_python发布webservice接口
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 2744 养鱼喂妹纸
- 内核同步机制——信号量
- 使用Retrofit时,对参数进行加密
- 工具推荐:22款最流行的计算机取证工具【2017年更新版】
- 10个CSS和jQuery的加载中(loading)动画效果实现
- Kafka基本知识整理
- 《MySQL——主备一致性六问六答》
- udt编写高性能服务器,基于UDT协议的Oracle数据库远程备份的设计和实现
- 吃瓜笔记 | 旷视研究院解读Light-Head R-CNN:平衡精准度和速度
- 网站开发综合技术 一 JavaScript简介 二JavaScript语法
- 画对数幅频曲线_耳机频响曲线如何看(中)--耳机和音箱对频响和失真的要求的差异...
- 利用python编写一个猜数游戏程序。由系统随机产成一个0~100之间的整数,玩家可以进行5次竞猜。如果猜对了,则提示“恭喜你,猜对了“,并结束游戏;如果猜错了,提示玩家一个方向提示,告诉玩家大了小了
- AspectJ+AJDT+用Ant管理AspectJ项目+AspectJ教程
- h5 字体加粗_html、css文字加粗方法
- Visual Studio Coded的安装以及中文化
- 项目管理六大制约因素_项目管理有哪些主要风险及如何控制
- Python 元组大全
- java宠物商店管理系统_Java实现宠物商店管理系统
热门文章
- split在python中什么意思_python 正则表达式 split(python里split什么意思)
- 【目标检测】MMDetection的安装与基础使用
- objc系列译文(9.2):玩转字符串
- First-chance exception at 0x774CEB23 (ntdll.dll) in XXX.exe: 0xC0000005: Access violation writing
- Windows10清理预留存储
- MongoDB复制集原理和配置
- delphi百度人脸搜索(支持人脸搜索、人脸库新增修改删除查询)
- android 虚拟器版本,安卓虚拟机Android-X86更新至4.4版本
- 【NOIP2017】Day4
- c语言编写十六进制编辑器,什么是十六进制编辑器?