Вечер добрый. Возникла необходимость написать проект для Spartan-3 (xc3s1500-4fg676). Как всегда неожиданно и срочно ((. В проекте необходимо подстроить фазу входного сигнала под данные. Стандартное решение - DCM. Но что то забуксовал. Для частот ниже 120 МГц все работает. Вижу выходную частоту равную входной и с изменяемым фазовым сдвигом. А вот для частоты 150 МГц проблема - нет выходного сигнала (причем на симуляторе тоже).
В тоже время в проекте для 6-го spartana все ок.
Ниже код (собственно задание DCM):
`timescale 1ns / 1ps module dcm_proba ( input tx_in_clk, output tx_out_clk
);
//--------------------------------------------------------------------------// //------------------------- Буфер входной частоты. -------------------------// //--------------------------------------------------------------------------// wire w_tx_in_clk;
BUFG BUFG_tx_in_clk ( .I (tx_in_clk), .O (w_tx_in_clk) );
//--------------------------------------------------------------------------// //----------------------- DCM модуль сдвига частоты. -----------------------// //--------------------------------------------------------------------------// wire w_clk0_out; wire bufg_clk0_out;
DCM #( .CLKDV_DIVIDE (2.0), .CLKFX_DIVIDE (2), .CLKFX_MULTIPLY (2), .CLKIN_DIVIDE_BY_2 ("FALSE"), .CLKIN_PERIOD (6.7), .CLKOUT_PHASE_SHIFT ("FIXED"), .CLK_FEEDBACK ("1X"), .DESKEW_ADJUST ("SYSTEM_SYNCHRONOUS"), .DLL_FREQUENCY_MODE ("LOW"), .DUTY_CYCLE_CORRECTION ("TRUE"), .PHASE_SHIFT (-90), .STARTUP_WAIT ("FALSE") ) DCM_SP_Clk_118_shift ( .CLK0 (bufg_clk0_out), .CLK180 (), .CLK270 (), .CLK2X (), .CLK2X180 (), .CLK90 (), .CLKDV (), .CLKFX (), .CLKFX180 (), .LOCKED (), .PSDONE (), .STATUS (), .CLKFB (w_clk0_out), .CLKIN (w_tx_in_clk), .PSCLK (), .PSEN (1'b0), .DSSEN (), .PSINCDEC (), .RST (1'b0) );
BUFG BUFG_118_shist ( .I (bufg_clk0_out), .O (w_clk0_out) );
wire w_tx_out_clk;
//spartan 3
OFDDRCPE OFDDRCPE_out ( .Q (w_tx_out_clk), .C0 (w_clk0_out), .C1 (~w_clk0_out), .CE (1'b1), .CLR (1'b0), .D0 (1'b1), .D1 (1'b0), .PRE (1'b0) );
/* // spartan 6 ODDR2 #( .DDR_ALIGNMENT ("NONE"), .INIT (1'b0), .SRTYPE ("SYNC") ) ODDR2_inst ( .Q (w_tx_out_clk), .C0 (w_clk0_out), .C1 (~w_clk0_out), .CE (1'b1), .D0 (1'b1), .D1 (1'b0), .R (1'b0), .S (1'b0) ); */
assign tx_out_clk = w_tx_out_clk;
endmodule
В констрейнах прописываю лишь:
NET "tx_in_clk" CLOCK_DEDICATED_ROUTE = FALSE;
Гуру по 3-им спартанам не подскажите в чем загвоздка??
|