XILINX K7 DDR3引脚验证总结

最近做了一个FPGA引脚验证,搞的很不顺利,各种坑人的问题,在这里分享一下遇到的问题和解决方法;希望能帮到大家。如果有问题欢迎交流,QQ1823167315

先介绍背景

XILINX FPGA型号:xc7k325t  ffg900-2

工具版本:vivado 2016.4

DDR3:芯片数据位宽16bit,DDR工作频率533M;

需求是例化两个DDR3的控制器;每个控制器的数据位宽32bit,

1)  问题描述:

例化1个DDR3控制器,然后在顶层调用两次使用;在编译时报错如下:

[DRC 23-20] Rule violation (PLIDC-3)IDELAYCTRLs in same group have conflicting connections - IDELAYCTRLcells'u0_ddr_arbitrage/u0_ddr3_core/u_ddr3_core_mig/u_iodelay_ctrl/u_idelayctrl_200'and 'u1_ddr_arbitrage/u0_ddr3_core/u_ddr3_core_mig/u_iodelay_ctrl/u_idelayctrl_200'

have same IODELAY_GROUP'DDR3_CORE_IODELAY_MIG0' but their REFCLK signals are different

或此以下报错

[DRC 23-20] Rule violation (PLIDC-3)IDELAYCTRLs in same group have conflicting connections - IDELAYCTRL cells'u0_ddr_arbitrage/u0_ddr3_core/u_ddr3_core_mig/u_iodelay_ctrl/idelayctrl_gen_1.u_idelayctrl_300_400'and 'u1_ddr_arbitrage/u0_ddr3_core/u_ddr3_core_mig/u_iodelay_ctrl/idelayctrl_gen_1.u_idelayctrl_300_400'have same IODELAY_GROUP 'DDR3_CORE_IODELAY_MIG1' but their REFCLK signals aredifferent

 

问题原因:

2个DDR3控制器是重复调用,在每次调用时都会例化一次IODELAY_GROUP,但只有1个IODELAY_GROUP可供使用,故在编译时会爆冲突;

解决方法:

在例化DDR3控制器IP时,直接选择一次例化两个控制器,这样例化的话,工具就会自动只例化一个IODELAY_GROUP,两个DDR控制器共用;

如果只例化1个DDR3 控制器,想调用两次,也可以通过修改DDR的代码,把其中一个IODELAY_GROUP注销,把控制器的ready信号直接引入使用;

         注意此问题同样会出现在FPGA的节温控制模块调用;也需要做相同的修改才能不报错;

 

2)  这个型号的FPGA,DDR3的数据速率最高是1600M,但只能在HP BANK布线,就是FPGA的bank32、bank33和bank34;而使用HR BANK,数据速率最高只有1066M,在bank12、bank13、bank14、bank15、bank16、bank17和bank18;

3)  以下的编译报错:

[DRC 23-20] Rule violation (RTSTAT-1) Unrouted net - 22net(s) are unrouted. The problem bus(es) and/or net(s) areu_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_0.u_ddr_phy_4lanes/ddr_byte_lane_A.ddr_byte_lane_A/dq_gen_40.if_post_fifo_gen.if_empty_r_reg[3]_0,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_0.u_ddr_phy_4lanes/ddr_byte_lane_B.ddr_byte_lane_B/dq_gen_40.if_post_fifo_gen.if_empty_r_reg[3]_0,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_0.u_ddr_phy_4lanes/ddr_byte_lane_C.ddr_byte_lane_C/dq_gen_40.if_post_fifo_gen.if_empty_r_reg[3]_0,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_0.u_ddr_phy_4lanes/ddr_byte_lane_D.ddr_byte_lane_D/dq_gen_40.if_post_fifo_gen.if_empty_r_reg[3]_0,u_ddr3_core/u_ddr3_core_mig/c1_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_0.u_ddr_phy_4lanes/ddr_byte_lane_A.ddr_byte_lane_A/dq_gen_40.if_post_fifo_gen.if_empty_r_reg[3]_0,u_ddr3_core/u_ddr3_core_mig/c1_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_0.u_ddr_phy_4lanes/ddr_byte_lane_B.ddr_byte_lane_B/dq_gen_40.if_post_fifo_gen.if_empty_r_reg[3]_0,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/gen_dqs_iobuf_HP.gen_dqs_iobuf[1].gen_dqs_diff.u_iobuf_dqs/o,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/gen_dqs_iobuf_HP.gen_dqs_iobuf[0].gen_dqs_diff.u_iobuf_dqs/o,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/gen_dqs_iobuf_HP.gen_dqs_iobuf[2].gen_dqs_diff.u_iobuf_dqs/o,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/gen_dqs_iobuf_HP.gen_dqs_iobuf[3].gen_dqs_diff.u_iobuf_dqs/o,u_ddr3_core/u_ddr3_core_mig/c1_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/gen_dqs_iobuf_HR.gen_dqs_iobuf[3].gen_dqs_diff.u_iobuf_dqs/o,u_ddr3_core/u_ddr3_core_mig/c0_u_memc_ui_top_std/mem_intfc0/ddr_phy_top0/u_ddr_mc_phy_wrapper/u_ddr_mc_phy/ddr_phy_4lanes_1.u_ddr_phy_4lanes/ddr_byte_lane_D.ddr_byte_lane_D/oserdes_clk

        

是使用xdc文件中的lane约束不正确造成,需要根据实际使用情况进行修改。

 

4)  在编译报错时,一度怀疑是vivado2016.4对K7系列支持的不好,还专门把工具换成ISE14.7重新做工程,引脚分配,编译仍然报错,而且还没有vivado工具对问题描述的好,所以建议工具使用,一定还是要使用最新版本的;

5)  需注意在生成DDR IP时,IP会自动生成XDC约束文件,在编译过程中,vivado会调用此xdc文件进行布局布线;如果在工程使用的xdc文件中,对DDR相同的管脚进行约束,有时候会爆冲突的错误,或在生成bit文件时,爆出几个引脚无法分配,但实际是这几个管脚已经正确分配并布线完成。

 

你可能感兴趣的:(XILINX K7 DDR3引脚验证总结)