微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > modelsim仿真ddr2问题

modelsim仿真ddr2问题

时间:10-02 整理:3721RD 点击:
请问各位,我从美光的网站上下载了DDR2仿真模型,那个ddr2_parameters.vh的定义文件需要放进project中吗?好像我放进去就报错,不放进去吧,ddr2.v和ddr2_module.v等用到它的文件就缺少定义,总是有警告。
求助各位,应该怎样做呢?

亲,恭喜你,终于快搞定了~!
那个ddr2_parameters.vh文件不需要放进工程中,不要编译,只编译ddr2.v 和ddr2_module.v。
ddr2.v,ddr2_module.v和ddr2_parameters.vh 三个文件的路径最简单的是放到你的仿真目录下,和work一个目录里面。
如果你想放到别的文件夹,那么分别打开ddr2.v 和ddr2_module.v文件,里面有一行:
`include "ddr2_parameters.vh"
这个就是ddr2_parameters.vh相对于 仿真目录(simulation) 和 ddr2.v, ddr2_module.v的路径了, 你可以自己改。
我的目录结构是这样的,你参考下:
**/simulation/work
**/simulation/sim.do
**/simulation/modelsim.ini
**/simulation/micron_ddr2/ddr2.v
**/simulation/micron_ddr2/ddr2_module.v.v
**/simulation/micron_ddr2/ddr2_parameters.vh
..........
于是我就把这条include 语句改成了:
`include "micron_ddr/ddr2_parameters.vh"
记住编译ddr2_module.v的时候要加参数哦。看看那个美光readme。把我的脚本这段贴给你参考:
------------------------------------------------------------
vlog  ../verilog/ddr2_ip_phy_alt_mem_phy_seq_wrapper.vo
vlog +define+sg25 +define+x8 +define+SODIMM +define-GMEM_BITS=6 micron_ddr/ddr2.v micron_ddr/ddr2_module.v
vlog  ../verilog/*.v
vsim -t ps -l log.txt work.ddr2_ip_example_top_tb
log -r /*
run -all
--------------------------------------------------------------
我用的是DDR2 sodimm 封装,速度等级是25, 内存条上一个8个颗粒。 你如果不是sodim,可以根据美光那个readme里面的介绍改相应的参数。
然后-GMEM_BITS 这个参数,是灵活配置你仿真的时候需要访问多大内存空间的,你访问的内存空间大小等于2^GMEM_BITS。建议这个参数配得小一点。因为仿真的时候,仿真的内存模型会映射到你系统的内存里面,模型空间越大,占用的系统内存就越大。小一点,跑仿真的时候电脑就没那么卡,太大了,modelsim会crash的。


       感谢catcat_2的热情帮助,终于看到波形了跟你当时发在Altera上的帖子一样,内牛满面啊呵呵~
不过现在貌似有个新问题,其他信号都挺正常的,只有ready信号没有输出。这是肿么回事呢?
    [attach]431953[/attach]
[attach]431952[/attach]


刚才的图片没有上传成功,再试试看。
   




额。 这个要看看别的信号了,烦劳从你的modelsim里面找到下面两个信号的波形,看看是什么情况:
1. cmd_gen_full :
/ddr2_ip_example_top_tb/dut/ddr2_ip_inst/ddr2_ip_controller_phy_inst/ddr2_ip_alt_mem_ddrx_controller_top_inst/controller_inst/controller_inst/input_if_inst/cmd_gen_full
2. wr_data_mem_full :
/ddr2_ip_example_top_tb/dut/ddr2_ip_inst/ddr2_ip_controller_phy_inst/ddr2_ip_alt_mem_ddrx_controller_top_inst/controller_inst/controller_inst/input_if_inst/wr_data_mem_full



    只找到了input_if_inst这个文件,但是里面没有你说的那两个cmd_gen_full和wr_data_mem_full信号噢。
有一个叫什么ready_from_cmd_gen的信号倒是有,不知道与ready信号是否相关呢?


你的ddr2 controller可能跟我的不太一样。 你的quartus ii是什么版本的? 生成core 的时候,你选的是high performance controller 还是 high performance controller ii ?
这个ready 信号要顺着模块一级一级查下去,看看是什么情况。


         用的是10.0生成的,选择的是HPCII。已经在逐步查看波形了,但是文件好多喔,找到头都大了,呵呵~不知道有没有更便捷的方法呢?

没有便捷的办法额,只能一步一步对着代码往下找,看看驱动这个ready信号的那些信号有没有输出。看看哪个模块出了问题。我估计问题不大,就是比较难找。没办法,ddr2的debug就是这样的,so many文件,我都晕过很多次了,反复晕,习惯了就好了。
我的也是HPC II的,不过我的是11.1的,为什么我有的信号你没有呢? 你不会是少编译了几个模块吧?你用的是VHDL还是verilog ? 我的是verilog的。



    我的也是Verilog,可能不同版本生成的不一样,至少从模块上看是不一样的,不知道这两者之间的区别。我已经装上11.0的软件了,实在不行,我重新生成一次看看,呵呵。这个仿真已经我折腾了快两个星期了,总有问题,郁闷坏了。

你的内存颗粒什么型号的? 我生成一个看看。 可能是我的是SODIMM封装的,你的是component,估计不一样。

确实是我的封装跟你的不一样。我重新生成了一个component的。
从6楼你发的这个ready_from_cmd_gen来看,应该是OK的哦。你是不是enable 了half rate bridge ?
你看看这个模块:
/ddr2_ip_example_top_tb/dut/ddr2_ip_inst/ddr2_ip_controller_phy_inst/ddr2_ip_alt_mem_ddrx_controller_top_inst/controller_inst/controller_inst/avalon_if_inst
有两个信号check一下,internal_ready 和 local_ready。



    由于设计的需要,我现在选择了enable half rate bridge,编译什么的都通过,ready信号很快就变高了,但是仿真过程中,报了很多错,然后就自动停止了。这是肿么回事呢?



    报错是
# top_testbench.U_top.b2v_ddr2.cmd_task: at time 3907905.0 ps ERROR: Precharge All Failure.  Auto Precharge is scheduled.

这种情况没有碰到过啊。 怀疑仿真的时候,访问到ddr2 sdram 的参数MEM_BITS设置范围之外的内存空间了。你check一下。



    果然是大牛啊!问题跟你说的一样。现在已经搞定了,enable half rate birdge后一样能够仿真。我重新复制了一下ddr2控制器的.v文件就可以了,可能是文件加载过程中出错了。后来,能够跑以后,也报了说MEM_BITS太小的错误,把参数从6改到16,一切OK。现在能够正常使用了,谢谢大牛哦~

建议这个参数设小一点,这样跑起来不吃内存。 越大越吃内存。16也是可以的。


您好!最近一直在调ddr2仿真模型,一直调不通,我自己根据控制器新建的一个工程,控制器中的sim文件包含ddr2_model.v、ddr2_model_parameters.vh、sim.do、sim_tb_top.v和wiredly.v四个文件,请问如何对工程进行仿真?还请前辈多指教!弄了好久,一直调不通!谢谢!


把ddr_module.v这个文件当成一个模块,加入到你的程序中就可以仿真了。那个sim.do文件是modelsim的一个运行文件,输入 do sim.do就可以帮你省了很多步骤。sim_tb_top.v应该是一个仿真例子,你可以参考一下。wiredly.v,这个我也不知道啥东东……读读看吧。
PS:刚开始折腾这个是比较烦的,我也弄了很多,各种问题啊。希望你一切顺利,尽量搞定吧。



    谢谢!


ddr_module.v这个文件作为一个模块加入到工程里面了,并且也对在工程文件中进行了例化,但是工程综合时ddr_module.v综合不了啊,还有请问仿真文件是自己编写的还是用的其他的什么?谢谢!

设置成MAX_MEM, 在仿真的时候就 提示 “ERROR: failed to open /../tmp/ddr3.open_bank_file.0.” , 什么原因?

function integer open_bank_file( input integer bank );
        integer fd;
        reg [2048:1] filename;
        begin
            $sformat( filename, "%0s/%m.%0d", tmp_model_dir, bank );
            fd = $fopen(filename, "w+");
            if (fd == 0)
            begin
                $display("%m: at time %0t ERROR: failed to open %0s.", $time, filename);
                $finish;
            end
            else
            begin
                if (DEBUG) $display("%m: at time %0t INFO: opening %0s.", $time, filename);
                open_bank_file = fd;
            end
        end
    endfunction
是不是模型里面 fd = $fopen(filename, "w+"); 没建立并打开文件啊?

问一下,怎么从美光的网站上下载ddr2的模型呢?



    小编,问一下,这个ddr2模型是从网站的哪个位置上下的呢?谢谢!



    我知道如何下了,还是谢谢你!


你好,我是直接在IP核中生成的DDR2 Controller,然后在modelsim中仿真,每次运行到Compiling module ddr2_model时,就不动了,这个怎么回事呢



    你好,我是直接在IP核中生成的DDR2 Controller,然后在modelsim中仿真,每次运行到Compiling module ddr2_model时,就不动了,这个怎么回事呢

请问如何获得信元

这个太有用了,学习收藏

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top