在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7466|回复: 15

DCM使用求助

[复制链接]
发表于 2009-7-1 10:54:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
如下是一个DCM核的wrapper文件内容。




  1. module DCMsfc(CLKIN_IN,
  2. RST_IN,
  3. CLKDV_OUT,
  4. CLKFX_OUT,
  5. CLKFX180_OUT,
  6. CLKIN_IBUFG_OUT,
  7. CLK0_OUT,
  8. CLK2X_OUT,
  9. CLK2X180_OUT,
  10. CLK90_OUT,
  11. CLK180_OUT,
  12. CLK270_OUT,
  13. DO_OUT,
  14. LOCKED_OUT);

  15. input CLKIN_IN;
  16. input RST_IN;
  17. output CLKDV_OUT;
  18. output CLKFX_OUT;
  19. output CLKFX180_OUT;
  20. output CLKIN_IBUFG_OUT;
  21. output CLK0_OUT;
  22. output CLK2X_OUT;
  23. output CLK2X180_OUT;
  24. output CLK90_OUT;
  25. output CLK180_OUT;
  26. output CLK270_OUT;
  27. output [15:0] DO_OUT;
  28. output LOCKED_OUT;

  29. wire CLKDV_BUF;
  30. wire CLKFB_IN;
  31. wire CLKFX_BUF;
  32. wire CLKFX180_BUF;
  33. wire CLKIN_IBUFG;
  34. wire CLK0_BUF;
  35. wire CLK2X_BUF;
  36. wire CLK2X180_BUF;
  37. wire CLK90_BUF;
  38. wire CLK180_BUF;
  39. wire CLK270_BUF;
  40. wire GND_BIT;
  41. wire [6:0] GND_BUS_7;
  42. wire [15:0] GND_BUS_16;

  43. assign GND_BIT = 0;
  44. assign GND_BUS_7 = 7'b0000000;
  45. assign GND_BUS_16 = 16'b0000000000000000;
  46. assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;
  47. assign CLK0_OUT = CLKFB_IN;

  48. BUFG CLKDV_BUFG_INST (.I(CLKDV_BUF), .O(CLKDV_OUT));
  49. BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF), .O(CLKFX_OUT));
  50. BUFG CLKFX180_BUFG_INST (.I(CLKFX180_BUF), .O(CLKFX180_OUT));
  51. IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN), .O(CLKIN_IBUFG));
  52. BUFG CLK0_BUFG_INST (.I(CLK0_BUF), .O(CLKFB_IN));
  53. BUFG CLK2X_BUFG_INST (.I(CLK2X_BUF), .O(CLK2X_OUT));
  54. BUFG CLK2X180_BUFG_INST (.I(CLK2X180_BUF), .O(CLK2X180_OUT));
  55. BUFG CLK90_BUFG_INST (.I(CLK90_BUF), .O(CLK90_OUT));
  56. BUFG CLK180_BUFG_INST (.I(CLK180_BUF), .O(CLK180_OUT));
  57. BUFG CLK270_BUFG_INST (.I(CLK270_BUF), .O(CLK270_OUT));

  58. DCM_ADV DCM_ADV_INST (.CLKFB(CLKFB_IN),
  59. .CLKIN(CLKIN_IBUFG),
  60. .DADDR(GND_BUS_7[6:0]),
  61. .DCLK(GND_BIT),
  62. .DEN(GND_BIT),
  63. .DI(GND_BUS_16[15:0]),
  64. .DWE(GND_BIT),
  65. .PSCLK(GND_BIT),
  66. .PSEN(GND_BIT),
  67. .PSINCDEC(GND_BIT),
  68. .RST(RST_IN),
  69. .CLKDV(CLKDV_BUF),
  70. .CLKFX(CLKFX_BUF),
  71. .CLKFX180(CLKFX180_BUF),
  72. .CLK0(CLK0_BUF),
  73. .CLK2X(CLK2X_BUF),
  74. .CLK2X180(CLK2X180_BUF),
  75. .CLK90(CLK90_BUF),
  76. .CLK180(CLK180_BUF),
  77. .CLK270(CLK270_BUF),
  78. .DO(DO_OUT[15:0]),
  79. .DRDY(),
  80. .LOCKED(LOCKED_OUT),
  81. .PSDONE());
  82. defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";
  83. defparam DCM_ADV_INST.CLKDV_DIVIDE = 5.0;
  84. defparam DCM_ADV_INST.CLKFX_DIVIDE = 2;
  85. defparam DCM_ADV_INST.CLKFX_MULTIPLY = 2;
  86. defparam DCM_ADV_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
  87. defparam DCM_ADV_INST.CLKIN_PERIOD = 5.000;
  88. defparam DCM_ADV_INST.CLKOUT_PHASE_SHIFT = "NONE";
  89. defparam DCM_ADV_INST.DCM_AUTOCALIBRATION = "TRUE";
  90. defparam DCM_ADV_INST.DCM_PERFORMANCE_MODE = "MAX_SPEED";
  91. defparam DCM_ADV_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
  92. defparam DCM_ADV_INST.DFS_FREQUENCY_MODE = "HIGH";
  93. defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "HIGH";
  94. defparam DCM_ADV_INST.DUTY_CYCLE_CORRECTION = "TRUE";
  95. defparam DCM_ADV_INST.FACTORY_JF = 16'hF0F0;
  96. defparam DCM_ADV_INST.PHASE_SHIFT = 0;
  97. defparam DCM_ADV_INST.STARTUP_WAIT = "FALSE";
  98. defparam DCM_ADV_INST.SIM_DEVICE = "VIRTEX5";
  99. endmodule


复制代码

问题1. 我看到很多人在使用DCM的时候都要把输入和输出使用BUFG。但是从wapper文件里不是可以看到它已经使用了BUFG了么,为什么还要再用?
问题2.defparam用法,如果我在代码中写如下语句:
          defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";
          defparam DCM_ADV_INST.CLKDV_DIVIDE = 3.0;
          defparam DCM_ADV_INST.CLKFX_DIVIDE = 4;
          defparam DCM_ADV_INST.CLKFX_MULTIPLY = 8;
然后调用该DCM核,是不是会把wapper文件中对应的参数的值更改了?

我在ISE中做了实验,发现写了
          defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";
          defparam DCM_ADV_INST.CLKDV_DIVIDE = 3.0;
          defparam DCM_ADV_INST.CLKFX_DIVIDE = 4;
          defparam DCM_ADV_INST.CLKFX_MULTIPLY = 8;
在功能仿真的时候发现以上语句并没有起作用,参数仍然使用的是旧值。
但是综合时候不会报错,看了综合报告,综合的时候明明已经改变的参数的值。

问题是到底参数的值变了么~~

谢谢各位大侠~~~~
发表于 2009-7-1 14:51:25 | 显示全部楼层
Wrapper 里若包了就不用再用了
发表于 2009-7-1 14:59:29 | 显示全部楼层
可以试试改用以下参数设定方式(verilog 2001)


DCM_ADV


#(


.CLK_FEEDBACK(CLK_FEEDBACK),


.CLKDV_DIVIDE(CLKDV_DIVIDE),


.CLKFX_DIVIDE(1),


.CLKFX_MULTIPLY(2),



.CLKIN_DIVIDE_BY_2(CLKIN_DIVIDE_BY_2),


.CLKIN_PERIOD(51.44),


.CLKOUT_PHASE_SHIFT(CLKOUT_PHASE_SHIFT),


.DCM_AUTOCALIBRATION("TRUE"),// DCM calibration circuitry "TRUE"/"FALSE"


.DCM_PERFORMANCE_MODE("MAX_SPEED"),// Can be MAX_SPEED or MAX_RANGE


.DESKEW_ADJUST(DESKEW_ADJUST),


.DFS_FREQUENCY_MODE("LOW"),


.DLL_FREQUENCY_MODE(DLL_FREQUENCY_MODE),


.DUTY_CYCLE_CORRECTION(DUTY_CYCLE_CORRECTION),


.FACTORY_JF(16'hF0F0),


.PHASE_SHIFT(PHASE_SHIFT),

//
.SIM_DEVICE("VIRTEX5"),// Set target device, "VIRTEX4" or "VIRTEX5"


.STARTUP_WAIT("FALSE")


)


clk_x2_dcm


(


.CLK0(),


 楼主| 发表于 2009-7-1 15:10:11 | 显示全部楼层
非常感谢您~~~~~~
发表于 2009-7-1 16:40:38 | 显示全部楼层
verilog 不是特别熟悉,
发表于 2009-7-8 21:20:04 | 显示全部楼层
建议你做一个DCM的IP core,用生成器生成,然后参考这个代码。
希望对你有帮助。
发表于 2009-8-1 16:40:26 | 显示全部楼层
同意三楼的说话
发表于 2010-9-26 13:55:47 | 显示全部楼层
同意三楼的说话
发表于 2010-9-26 16:42:21 | 显示全部楼层
module dcm(CLKIN_IN,
           RST_IN,
           CLKIN_IBUFG_OUT,
           CLK0_OUT,
           CLK0_OUT1,
           LOCKED_OUT);

    input CLKIN_IN;
    input RST_IN;
   output CLKIN_IBUFG_OUT;
   output CLK0_OUT;
   output CLK0_OUT1;
   output LOCKED_OUT;
   
   wire CLKFB_IN;
   wire CLKIN_IBUFG;
   wire CLK0_BUF;
   wire GND_BIT;
   wire [6:0] GND_BUS_7;
   wire [15:0] GND_BUS_16;
   
   assign GND_BIT = 0;
   assign GND_BUS_7 = 7'b0000000;
   assign GND_BUS_16 = 16'b0000000000000000;
   assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;
   assign CLK0_OUT = CLKFB_IN;
   IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),
                           .O(CLKIN_IBUFG));
   BUFG CLK0_BUFG_INST (.I(CLK0_BUF),
                        .O(CLKFB_IN));
   BUFG CLK0_BUFG_INST1 (.I(CLK0_BUF),
                         .O(CLK0_OUT1));
   DCM_ADV DCM_ADV_INST (.CLKFB(CLKFB_IN),
                         .CLKIN(CLKIN_IBUFG),
                         .DADDR(GND_BUS_7[6:0]),
                         .DCLK(GND_BIT),
                         .DEN(GND_BIT),
                         .DI(GND_BUS_16[15:0]),
                         .DWE(GND_BIT),
                         .PSCLK(GND_BIT),
                         .PSEN(GND_BIT),
                         .PSINCDEC(GND_BIT),
                         .RST(RST_IN),
                         .CLKDV(),
                         .CLKFX(),
                         .CLKFX180(),
                         .CLK0(CLK0_BUF),
                         .CLK2X(),
                         .CLK2X180(),
                         .CLK90(),
                         .CLK180(),
                         .CLK270(),
                         .DO(),
                         .DRDY(),
                         .LOCKED(LOCKED_OUT),
                         .PSDONE());
   defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";
   defparam DCM_ADV_INST.CLKDV_DIVIDE = 2.0;
   defparam DCM_ADV_INST.CLKFX_DIVIDE = 1;
   defparam DCM_ADV_INST.CLKFX_MULTIPLY = 4;
   defparam DCM_ADV_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
   defparam DCM_ADV_INST.CLKIN_PERIOD = 18.519;
   defparam DCM_ADV_INST.CLKOUT_PHASE_SHIFT = "NONE";
   defparam DCM_ADV_INST.DCM_AUTOCALIBRATION = "TRUE";
   defparam DCM_ADV_INST.DCM_PERFORMANCE_MODE = "MAX_SPEED";
   defparam DCM_ADV_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
   defparam DCM_ADV_INST.DFS_FREQUENCY_MODE = "LOW";
   defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "LOW";
   defparam DCM_ADV_INST.DUTY_CYCLE_CORRECTION = "TRUE";
   defparam DCM_ADV_INST.FACTORY_JF = 16'hF0F0;
   defparam DCM_ADV_INST.PHASE_SHIFT = 0;
   defparam DCM_ADV_INST.STARTUP_WAIT = "FALSE";
   defparam DCM_ADV_INST.SIM_DEVICE = "VIRTEX5";
endmodule
发表于 2010-9-26 16:47:55 | 显示全部楼层
回复 1# ineedpower

wrapper里面用了bufg,后面就可以不用了。

关于defparam,你在这里面修改的只是HDL 模型的参数,你要知道综合和仿真的时候用的不是这个东西,而是dcm.xaw文件,这个文件你是该不了的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-9 12:21 , Processed in 0.023830 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表