Опитах се да потърся отговора на това, но безуспешно. Получавам проблеми, когато повторно синтезирам кода си и подозирам, че това се дължи на проблеми с часовника.
Използвам DCM за умножаване на външен кристален осцилатор от 25MHz до 50MHz. Мисля обаче, че инструментът няма да знае каква честота всъщност е кристалният осцилатор, тъй като е външен физически компонент. Моят код е по-долу:
//since our crystal oscillator is only 25Mhz, we use a DCM to multiply it by two since the desired is 50Mhz
DCM #(
.CLKFX_DIVIDE (2),
.CLKFX_MULTIPLY (4)
) dcm_master (
.CLKFB (CLK_FB),
.CLKIN (CLK_crystal),
.RST (DcmReset),
.CLK0 (MasterClk0Unbuf),
.CLK90 (),
.CLK180 (),
.CLK270 (),
.CLK2X (),
.CLK2X180 (),
.CLKFX (MasterClkFxUnBuf),
.CLKFX180 (),
.CLKDV (),
.LOCKED (DcmLocked),
.STATUS (),
.PSCLK (1'b0),
.PSEN (1'b0),
.PSINCDEC (1'b0),
.PSDONE ()
);
//we provide feedback to the DCM's phase input (possibly not neccessary)
BUFG bufg_master_dcm_clk_0 ( .I(MasterClk0Unbuf), .O(CLK_FB) );
BUFG bufg_master_dcm_clk_fx ( .I(MasterClkFxUnBuf), .O(CLK_FX) );
//code taken from xilinx. We toggle using a bufgmux between the onboard and external clock
// BUFGMUX: Global Clock Buffer 2-to-1 MUX
// Spartan-3
// Xilinx HDL Libraries Guide, version 13.2
BUFGMUX BUFGMUX_inst (
.O(CLK), // Clock MUX output
.I0(CLK_FX), // Clock0 input
.I1(CLK_local), // Clock1 input
.S(sw[6]) // Clock select input
);
Този код в ucf ще принуди ли инструмента да разпознае изхода на моя DCM като 50MHz?
PIN "bufg_master_dcm_clk_fx.O" TNM_NET = CLK50;
TIMESPEC TS_CLKBuf = PERIOD "CLK50" 100 MHz HIGH 50%;
Освен това, правилно ли използвам BUFG? Xilinx казва, че трябва да използвам IBUFG, за да свържа външния часовник към моя DCM, и получавам грешки, че моите BUFG могат да адресират само половината чип (което си представям, че ще стане обезпокоително).
Благодаря,
Нейтън
always @ (posedge CLK or negedge CLK)
? - person N8TRO   schedule 19.03.2013