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

[复制链接]
8307|16
 楼主| dingning123 发表于 2013-10-12 09:39 | 显示全部楼层 |阅读模式
最近在用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的初始化时间应该是可以忽略的。
 楼主| dingning123 发表于 2013-10-14 20:47 | 显示全部楼层
非常感谢你们的回复,这些警告主要围绕sim_tb_top里面的这段程序:
  1. genvar r,i;
  2.   generate
  3.     for (r = 0; r < CS_WIDTH; r = r + 1) begin: mem_rnk
  4.       for (i = 0; i < NUM_COMP; i = i + 1) begin: gen_mem
  5.         ddr3_model u_comp_ddr3
  6.           (
  7.            .rst_n   (ddr3_reset_n),
  8.            .ck      (ddr3_ck_p_sdram[(i*MEMORY_WIDTH)/72]),
  9.            .ck_n    (ddr3_ck_n_sdram[(i*MEMORY_WIDTH)/72]),
  10.            .cke     (ddr3_cke_sdram[((i*MEMORY_WIDTH)/72)+(nCS_PER_RANK*r)]),
  11.            .cs_n    (ddr3_cs_n_sdram[((i*MEMORY_WIDTH)/72)+(nCS_PER_RANK*r)]),
  12.            .ras_n   (ddr3_ras_n_sdram),
  13.            .cas_n   (ddr3_cas_n_sdram),
  14.            .we_n    (ddr3_we_n_sdram),
  15.            .dm_tdqs (ddr3_dm_sdram[i]),
  16.            .ba      (ddr3_ba_sdram[r]),
  17.            .addr    (ddr3_addr_sdram[r]),
  18.            .dq      (ddr3_dq_sdram[MEMORY_WIDTH*(i+1)-1:MEMORY_WIDTH*(i)]),
  19.            .dqs     (ddr3_dqs_p_sdram[i]),
  20.            .dqs_n   (ddr3_dqs_n_sdram[i]),
  21.            .tdqs_n  (),
  22.            .odt     (ddr3_odt_sdram[((i*MEMORY_WIDTH)/72)+(nCS_PER_RANK*r)])
  23.            ); #这是第895行
  24.       end
  25.     end
  26.   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,警告没了,但是波形还是和原来一样,难道是我改错了?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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,提示出错,
 楼主| dingning123 发表于 2013-10-15 15:52 | 显示全部楼层
我是自己建立的工程,按照prj里面的文件,把程序一个一个添加到工程里面的,如下面所示,然后调用的modelsim,难道不能这么跑仿真,例子设计里面的程序应该不会有错吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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.
 楼主| 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不承认我的改动。
 楼主| dingning123 发表于 2013-10-15 20:38 | 显示全部楼层
难道是我跑例子仿真的方法不对?求帮助
haitaox 发表于 2013-10-16 12:10 | 显示全部楼层
你用modelsim 直接运行 sim.do,这个我试过了,没问题
 楼主| dingning123 发表于 2013-10-16 15:26 | 显示全部楼层
太谢谢你了,我终于看到波形了,困扰了我将近半个月!
haitaox 发表于 2013-10-16 20:43 | 显示全部楼层
dingning123 发表于 2013-10-16 15:26
太谢谢你了,我终于看到波形了,困扰了我将近半个月!

恭喜恭喜
xilinx的很多ip都是带有仿真文件的,一般情况下,都会有modelsim的do文件。其实是学习do文件很好的素材。
干吧得 发表于 2013-12-21 22:29 | 显示全部楼层
haitaox 发表于 2013-10-16 20:43
恭喜恭喜
xilinx的很多ip都是带有仿真文件的,一般情况下,都会有modelsim的do文件。其实是学习do文件很 ...

我也是因为用xilinx的ip,才开始学习do文件,现在基本上会用了。
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?
gs862906973 发表于 2014-11-20 09:21 | 显示全部楼层
学习了
habc987 发表于 2014-11-24 20:53 | 显示全部楼层
不错,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

48

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部