我此前发了一个帖子,得到了斑竹的热力支持,心中大喜!现在又有麻烦了!呵呵!
我使用的是spartanII芯片,这里不像更高端的芯片有DCM核,这里的DLL需要例化。但是具体怎么例化还不是太清楚。我照着xilinx给出的标准模式写了一个DLL模块,程序如下:
module DLL (CLKIN, RESET, CLK0, CLKDV, LOCKED);
input CLKIN, RESET;
output CLK0, CLKDV, LOCKED;
wire CLKIN_w, RESET_w, CLK0_dll, CLKDV_dll, LOCKED_dll;
IBUFG clkpad (.I(CLKIN), .O(CLKIN_w));
IBUF rstpad (.I(RESET), .O(RESET_w));
CLKDLL dll (.CLKIN(CLKIN_w), .CLKFB(CLK0), .RST(RESET_w),
.CLK0(CLK0_dll), .CLK90(), .CLK180(), .CLK270(),
.CLK2X(), .CLKDV(CLKDV_dll), .LOCKED(LOCKED_dll));
BUFG clkg (.I(CLK0_dll), .O(CLK0));
BUFG clkdv (.I(CLKDV_dll), .O(CLKDV));
OBUF lckpad (.I(LOCKED_dll), .O(LOCKED));
endmodule 这个程序的功能就是3分频,不知道这样写是否正确,因为我不知道怎么例化,我照着ISE提供的模版在顶层文件中加入如下:
CLKDLL #( .CLKDV_DIVIDE(3.0), // Divide by: 1.5,2.0,2.5,3.0,4.0,5.0,8.0 or 16.0 .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE .FACTORY_JF(16'hC080), // FACTORY JF Values .STARTUP_WAIT("FALSE") // Delay config DONE until DLL LOCK, TRUE/FALSE ) CLKDLL_inst ( .CLK0(CLK0), // 0 degree DLL CLK ouptput .CLK180(CLK180), // 180 degree DLL CLK output .CLK270(CLK270), // 270 degree DLL CLK output .CLK2X(CLK2X), // 2X DLL CLK output .CLK90(CLK90), // 90 degree DLL CLK output .CLKDV(CLKDV), // Divided DLL CLK out (CLKDV_DIVIDE) .LOCKED(LOCKED), // DLL LOCK status output .CLKFB(CLKFB), // DLL clock feedback .CLKIN(CLKIN), // Clock input (from IBUFG, BUFG or DLL) .RST(RST) // DLL asynchronous reset input );
不知道这个3.0是不是就是代表了3分频?还有其他药设置的地方吗?我又听说DLL只需要例化就行了,不需要写模块,那我到底该怎么做?还有就是我是否一定要reset脚,如果不需要是不是就可以不写在模块里或者在例化的时候右边的括号里为空?
再次感谢! |