打印
[FPGA]

用mig生成DDR3控制器,运行example design 跑仿真出错,求助!

[复制链接]
7156|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近在用VC707的板子 在研究DDR3 ,我通过利用生成的IP核的example design 文件中的SIM文件 在modelsim 中仿真时出现如下警告,并且仿真图形也不对,困扰了我很久,请求帮助,我用的是modelsim10.1

* Warning: (vsim-3015) mig_7series_v1_7/example_design/sim/sim_tb_top.v(895): [PCDPC] - Port size (2 or 2) does not match connection size (1) for port 'dm_tdqs'. The port definition is at: mig_7series_v1_7/example_design/sim/ddr3_model.v(93).
#
#         Region: /sim_tb_top/mem_rnk[0]/gen_mem[5]/u_comp_ddr3
# ** Warning: (vsim-3015) mig_7series_v1_7/example_design/sim/sim_tb_top.v(895): [PCDPC] - Port size (13 or 13) does not match connection size (14) for port 'addr'. The port definition is at: mig_7series_v1_7/example_design/sim/ddr3_model.v(95).
#
#         Region: /sim_tb_top/mem_rnk[0]/gen_mem[5]/u_comp_ddr3
# ** Warning: (vsim-3015) mig_7series_v1_7/example_design/sim/sim_tb_top.v(895): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'dq'. The port definition is at: mig_7series_v1_7/example_design/sim/ddr3_model.v(96).
#
#         Region: /sim_tb_top/mem_rnk[0]/gen_mem[5]/u_comp_ddr3
# ** Warning: (vsim-3015) mig_7series_v1_7/example_design/sim/sim_tb_top.v(895): [PCDPC] - Port size (2 or 2) does not match connection size (1) for port 'dqs'. The port definition is at: mig_7series_v1_7/example_design/sim/ddr3_model.v(97).
#
#         Region: /sim_tb_top/mem_rnk[0]/gen_mem[5]/u_comp_ddr3
# ** Warning: (vsim-3015) mig_7series_v1_7/example_design/sim/sim_tb_top.v(895): [PCDPC] - Port size (2 or 2) does not match connection size (1) for port 'dqs_n'. The port definition is at: mig_7series_v1_7/example_design/sim/ddr3_model.v(98).
#

# sim_tb_top.mem_rnk[0].gen_mem[0].u_comp_ddr3.reset at time 842600.0 ps WARNING: 200 us is required before RST_N goes inactive.
# sim_tb_top.mem_rnk[0].gen_mem[0].u_comp_ddr3.cmd_task at time 875203.0 ps WARNING: 500 us is required after RST_N goes inactive before CKE goes active.

相关帖子

沙发
haitaox| | 2013-10-12 11:07 | 只看该作者
#         Region: /sim_tb_top/mem_rnk[0]/gen_mem[5]/u_comp_ddr3
# ** Warning: (vsim-3015) mig_7series_v1_7/example_design/sim/sim_tb_top.v(895): [PCDPC] - Port size (13 or 13) does not match connection size (14) for port 'addr'. The port definition is at: mig_7series_v1_7/example_design/sim/ddr3_model.v(95).
端口长度不一致,有的是13个信号,而你在例化的时候用了14个信号,sim_tb_top.v文件的895行就是出错的地方

使用特权

评论回复
板凳
asdf012| | 2013-10-14 11:11 | 只看该作者
haitaox 发表于 2013-10-12 11:07
#         Region: /sim_tb_top/mem_rnk[0]/gen_mem[5]/u_comp_ddr3
# ** Warning: (vsim-3015) mig_7serie ...

我也碰到这个问题了。
这个我看的addr定义的是14位位宽,用的时候是13为,这样会有影响不。

最后一行提示不到500us,CKE为高,无法初始化,这种问题一般是怎么回事。是控制器出问题,还是生成的model模拟ddr3出问题了呢?

使用特权

评论回复
地板
haitaox| | 2013-10-14 12:30 | 只看该作者
asdf012 发表于 2013-10-14 11:11
我也碰到这个问题了。
这个我看的addr定义的是14位位宽,用的时候是13为,这样会有影响不。

我觉得是xilinx的example design的书写错误,端口映射搞错了,这个可以手动修改。我在ise中跑的时候,这里只是报了warning,并没有error,应该说是可以使用的。
你说的500us问题,应该是ddr3_model模块报的warning。按照JEDEC的规范,SDRAM上电之后,reset#要保持200us的复位时间,之后CKE还要经过500us的时间才能有效。在这500us的时间里,SDRAM在进行内部初始化。
如果是仿真的话,200us的复位时间和500us的初始化时间应该是可以忽略的。

使用特权

评论回复
5
dingning123|  楼主 | 2013-10-14 20:47 | 只看该作者
非常感谢你们的回复,这些警告主要围绕sim_tb_top里面的这段程序:
genvar r,i;
  generate
    for (r = 0; r < CS_WIDTH; r = r + 1) begin: mem_rnk
      for (i = 0; i < NUM_COMP; i = i + 1) begin: gen_mem
        ddr3_model u_comp_ddr3
          (
           .rst_n   (ddr3_reset_n),
           .ck      (ddr3_ck_p_sdram[(i*MEMORY_WIDTH)/72]),
           .ck_n    (ddr3_ck_n_sdram[(i*MEMORY_WIDTH)/72]),
           .cke     (ddr3_cke_sdram[((i*MEMORY_WIDTH)/72)+(nCS_PER_RANK*r)]),
           .cs_n    (ddr3_cs_n_sdram[((i*MEMORY_WIDTH)/72)+(nCS_PER_RANK*r)]),
           .ras_n   (ddr3_ras_n_sdram),
           .cas_n   (ddr3_cas_n_sdram),
           .we_n    (ddr3_we_n_sdram),
           .dm_tdqs (ddr3_dm_sdram[i]),
           .ba      (ddr3_ba_sdram[r]),
           .addr    (ddr3_addr_sdram[r]),
           .dq      (ddr3_dq_sdram[MEMORY_WIDTH*(i+1)-1:MEMORY_WIDTH*(i)]),
           .dqs     (ddr3_dqs_p_sdram[i]),
           .dqs_n   (ddr3_dqs_n_sdram[i]),
           .tdqs_n  (),
           .odt     (ddr3_odt_sdram[((i*MEMORY_WIDTH)/72)+(nCS_PER_RANK*r)])
           ); #这是第895行
      end
    end
  endgenerate
对应着我找到了ddr3_model.v里面的这段程序
  inout   [DM_BITS-1:0]   dm_tdqs;
    input   [BA_BITS-1:0]   ba;
    input   [ADDR_BITS-1:0] addr;
    inout   [DQ_BITS-1:0]   dq;
    inout   [DQS_BITS-1:0]  dqs;
    inout   [DQS_BITS-1:0]  dqs_n;
    output  [DQS_BITS-1:0]  tdqs_n;
    input   odt;
我按着警告把ddr3_model_parameters.vh里面的以下部分给改了
`else `define x16
      parameter DM_BITS          =       2; // Set this parameter to control how many Data Mask bits are used
      parameter ADDR_BITS        =      13; // MAX Address Bits
      parameter ROW_BITS         =      13; // Set this parameter to control how many Address bits are used
      parameter COL_BITS         =      10; // Set this parameter to control how many Column bits are used
      parameter DQ_BITS          =      16; // Set this parameter to control how many Data bits are used       **Same as part bit width**
      parameter DQS_BITS         =       2; // Set this parameter to control how many Dqs bits are used


DM_BITS 改成了1, ADDR_BITS改成14,DQ_BITS改成了8,DQS_BITS改成了1,警告没了,但是波形还是和原来一样,难道是我改错了?

tu1.png (42.15 KB )

tu1.png

使用特权

评论回复
6
asdf012| | 2013-10-15 10:08 | 只看该作者
dingning123 发表于 2013-10-14 20:47
非常感谢你们的回复,这些警告主要围绕sim_tb_top里面的这段程序:对应着我找到了ddr3_model.v里面的这段程 ...

这个位宽应该是没影响的,只是warning。
我之前根据cke的变化,追查到sim模块的物理层,但看不出来名堂,cke 800多ns时就变高了,按楼上说的可能是model模块有问题。model模块我之前也看了一部分,不到500us 初始化没正常完成,会给一个$stop,提示出错,

使用特权

评论回复
7
dingning123|  楼主 | 2013-10-15 15:52 | 只看该作者
我是自己建立的工程,按照prj里面的文件,把程序一个一个添加到工程里面的,如下面所示,然后调用的modelsim,难道不能这么跑仿真,例子设计里面的程序应该不会有错吧

DDR3.png (16.37 KB )

DDR3.png

使用特权

评论回复
8
haitaox| | 2013-10-15 16:09 | 只看该作者
你不要修改ddr3_model_parameters.vh里面的内容,它里面有很多宏定义,根据你选择的ddr3芯片选择你的宏定义就可以了啊。在modelsim中直接用ip核提供的sim.do文件,仿真就能出来了啊。
vlog  +incdir+. +define+x1Gb +define+sg187E +define+x16 ddr3_model_c3.v
这就话摘自sim.do文件,定义了SDRAM的容量是1Gbit 速度是187E 位宽是16.

使用特权

评论回复
9
dingning123|  楼主 | 2013-10-15 20:37 | 只看该作者
麻烦哪位大侠帮我看一看我上面上传的波形,不管我怎么改,怎么弄都是上面这个波形,例子设计的程序我没有做任何修改,添加完了,就点击ISE里面的simulate behavioral model,出现上面的波形和警告,这个问题我都快解决半个月了,连最起码的例子我都跑不起来,上火啊。可不可以告诉我在用例子仿真的时候应该注意些什么?还有我吧do文件用txt打开了,并且对vlog  +incdir+. +define+x1Gb +define+sg187E +define+x16 ddr3_model_c3.v其进行了改动,但是不管怎么改例子仿真的警告都是一样的,甚至我把ddr3_model_c3.v这个文件的名字改了,结果都是一样,貌似modelsim不承认我的改动。

使用特权

评论回复
10
dingning123|  楼主 | 2013-10-15 20:38 | 只看该作者
难道是我跑例子仿真的方法不对?求帮助

使用特权

评论回复
11
haitaox| | 2013-10-16 12:10 | 只看该作者
你用modelsim 直接运行 sim.do,这个我试过了,没问题

使用特权

评论回复
12
dingning123|  楼主 | 2013-10-16 15:26 | 只看该作者
太谢谢你了,我终于看到波形了,困扰了我将近半个月!

使用特权

评论回复
13
haitaox| | 2013-10-16 20:43 | 只看该作者
dingning123 发表于 2013-10-16 15:26
太谢谢你了,我终于看到波形了,困扰了我将近半个月!

恭喜恭喜
xilinx的很多ip都是带有仿真文件的,一般情况下,都会有modelsim的do文件。其实是学习do文件很好的素材。

使用特权

评论回复
14
干吧得| | 2013-12-21 22:29 | 只看该作者
haitaox 发表于 2013-10-16 20:43
恭喜恭喜
xilinx的很多ip都是带有仿真文件的,一般情况下,都会有modelsim的do文件。其实是学习do文件很 ...

我也是因为用xilinx的ip,才开始学习do文件,现在基本上会用了。

使用特权

评论回复
15
gnr_zhao| | 2013-12-23 23:59 | 只看该作者
借这个地方问一个kintex7上实现ddr2的问题
我用ise14.6生成的工程,用sim.do文件在modelsim6.5里面对example_design进行仿真
不做任何修改,生成的工程仿真报错,user_design下面一个文件在always出存在语法错误
这个在工程综合时候都没有报错,为什么会在仿真这里报错呢,是因为我modelsim6.5的版本太低了吗??
另外,看了两天了,感觉k7和s6的ddr2的实现差不少,我是用vhdl的,对k7只能生成verilog工程感觉有点不知所措
请有经验的帮忙指点一下,如何最方便的借用s6已经调通的程序在k7上实现ddr2?

使用特权

评论回复
16
gs862906973| | 2014-11-20 09:21 | 只看该作者
学习了

使用特权

评论回复
17
habc987| | 2014-11-24 20:53 | 只看该作者
不错,感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

48

帖子

1

粉丝