DCM使用求助
- module DCMsfc(CLKIN_IN,
- RST_IN,
- CLKDV_OUT,
- CLKFX_OUT,
- CLKFX180_OUT,
- CLKIN_IBUFG_OUT,
- CLK0_OUT,
- CLK2X_OUT,
- CLK2X180_OUT,
- CLK90_OUT,
- CLK180_OUT,
- CLK270_OUT,
- DO_OUT,
- LOCKED_OUT);
- input CLKIN_IN;
- input RST_IN;
- output CLKDV_OUT;
- output CLKFX_OUT;
- output CLKFX180_OUT;
- output CLKIN_IBUFG_OUT;
- output CLK0_OUT;
- output CLK2X_OUT;
- output CLK2X180_OUT;
- output CLK90_OUT;
- output CLK180_OUT;
- output CLK270_OUT;
- output [15:0] DO_OUT;
- output LOCKED_OUT;
- wire CLKDV_BUF;
- wire CLKFB_IN;
- wire CLKFX_BUF;
- wire CLKFX180_BUF;
- wire CLKIN_IBUFG;
- wire CLK0_BUF;
- wire CLK2X_BUF;
- wire CLK2X180_BUF;
- wire CLK90_BUF;
- wire CLK180_BUF;
- wire CLK270_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;
- BUFG CLKDV_BUFG_INST (.I(CLKDV_BUF), .O(CLKDV_OUT));
- BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF), .O(CLKFX_OUT));
- BUFG CLKFX180_BUFG_INST (.I(CLKFX180_BUF), .O(CLKFX180_OUT));
- IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN), .O(CLKIN_IBUFG));
- BUFG CLK0_BUFG_INST (.I(CLK0_BUF), .O(CLKFB_IN));
- BUFG CLK2X_BUFG_INST (.I(CLK2X_BUF), .O(CLK2X_OUT));
- BUFG CLK2X180_BUFG_INST (.I(CLK2X180_BUF), .O(CLK2X180_OUT));
- BUFG CLK90_BUFG_INST (.I(CLK90_BUF), .O(CLK90_OUT));
- BUFG CLK180_BUFG_INST (.I(CLK180_BUF), .O(CLK180_OUT));
- BUFG CLK270_BUFG_INST (.I(CLK270_BUF), .O(CLK270_OUT));
- 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(CLKDV_BUF),
- .CLKFX(CLKFX_BUF),
- .CLKFX180(CLKFX180_BUF),
- .CLK0(CLK0_BUF),
- .CLK2X(CLK2X_BUF),
- .CLK2X180(CLK2X180_BUF),
- .CLK90(CLK90_BUF),
- .CLK180(CLK180_BUF),
- .CLK270(CLK270_BUF),
- .DO(DO_OUT[15:0]),
- .DRDY(),
- .LOCKED(LOCKED_OUT),
- .PSDONE());
- defparam DCM_ADV_INST.CLK_FEEDBACK = "1X";
- defparam DCM_ADV_INST.CLKDV_divIDE = 5.0;
- defparam DCM_ADV_INST.CLKFX_divIDE = 2;
- defparam DCM_ADV_INST.CLKFX_MULTIPLY = 2;
- defparam DCM_ADV_INST.CLKIN_divIDE_BY_2 = "FALSE";
- defparam DCM_ADV_INST.CLKIN_PERIOD = 5.000;
- 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 = "HIGH";
- defparam DCM_ADV_INST.DLL_FREQUENCY_MODE = "HIGH";
- 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
问题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;
在功能仿真的时候发现以上语句并没有起作用,参数仍然使用的是旧值。
但是综合时候不会报错,看了综合报告,综合的时候明明已经改变的参数的值。
问题是到底参数的值变了么
谢谢各位大侠
Wrapper 里若包了就不用再用了
可以试试改用以下参数设定方式(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(),
…
非常感谢您
verilog 不是特别熟悉,
建议你做一个DCM的IP core,用生成器生成,然后参考这个代码。
希望对你有帮助。
同意三楼的说话
同意三楼的说话
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
wrapper里面用了bufg,后面就可以不用了。
关于defparam,你在这里面修改的只是HDL 模型的参数,你要知道综合和仿真的时候用的不是这个东西,而是dcm.xaw文件,这个文件你是该不了的。
ps:你对defparam的使用没有问题
支持,我也正研究这方面
貌似这方面资料不太好找
同意
看DCM IP核的datasheet,有DCM的结构,看看就知道了
学习下,
