Я пытался найти ответ на этот вопрос, но безрезультатно. У меня возникают проблемы, когда я повторно синтезирую свой код, и я подозреваю, что это связано с проблемами с часами.
Я использую DCM для умножения внешнего кварцевого генератора с 25 МГц на 50 МГц. Однако я думаю, что инструмент не будет знать, какой на самом деле является частота кварцевого генератора, поскольку он является внешним физическим компонентом. Мой код ниже:
//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 как 50 МГц?
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