Вот пример. Клок сначала разгоняется DCM-ом, а затем PLLится.
Код
DCM_CLKGEN_inst4 : DCM_CLKGEN
generic map
(
CLKFXDV_DIVIDE => 2, -- CLKFXDV divide value (2, 4, 8, 16, 32)
CLKFX_DIVIDE => 27, -- Divide value - D - (1-256)
CLKFX_MD_MAX => 0.0, -- Specify maximum M/D ratio for timing anlysis
CLKFX_MULTIPLY => 50, -- Multiply value - M - (2-256)
CLKIN_PERIOD => 37.0, -- Input clock period specified in nS
SPREAD_SPECTRUM => "NONE", -- Spread Spectrum mode "NONE", "CENTER_LOW_SPREAD", "CENTER_HIGH_SPREAD",
-- "VIDEO_LINK_M0", "VIDEO_LINK_M1" or "VIDEO_LINK_M2"
STARTUP_WAIT => FALSE -- Delay config DONE until DCM_CLKGEN LOCKED (TRUE/FALSE)
)
port map
(
CLKFX => clk_DCM4p, -- 1-bit output: Generated clock output
CLKFX180 => clk_DCM4n, -- 1-bit output: Generated clock output 180 degree out of phase from CLKFX.
CLKFXDV => open, -- 1-bit output: Divided clock output
LOCKED => open, -- 1-bit output: Locked output
PROGDONE => open, -- 1-bit output: Active high output to indicate the successful re-programming
STATUS => open, -- 2-bit output: DCM_CLKGEN status
CLKIN => clk_27MHz, -- 1-bit input: Input clock
FREEZEDCM => '0', -- 1-bit input: Prevents frequency adjustments to input clock
PROGCLK => '0', -- 1-bit input: Clock input for M/D reconfiguration
PROGDATA => '0', -- 1-bit input: Serial data input for M/D reconfiguration
PROGEN => '0', -- 1-bit input: Active high program enable
RST => '0' -- 1-bit input: Reset input pin
);
ODDR2_inst4: ODDR2
generic map
(
DDR_ALIGNMENT => "NONE", -- Sets output alignment to "NONE", "C0", "C1"
INIT => '0', -- Sets initial state of the Q output to '0' or '1'
SRTYPE => "SYNC" -- Specifies "SYNC" or "ASYNC" set/reset
)
port map
(
Q => clk4, -- 1-bit output data
C0 => clk_DCM4p, -- 1-bit clock input
C1 => clk_DCM4n, -- 1-bit clock input
CE => '1', -- 1-bit clock enable input
D0 => '1', -- 1-bit data input (associated with C0)
D1 => '0', -- 1-bit data input (associated with C1)
R => '0', -- 1-bit reset input
S => '0' -- 1-bit set input
);
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
PLL_BASE_inst : PLL_BASE
generic map
(
BANDWIDTH => "OPTIMIZED", -- "HIGH", "LOW" or "OPTIMIZED"
CLKFBOUT_MULT => 2, -- Multiply value for all CLKOUT clock outputs (1-64)
CLKFBOUT_PHASE => 0.0, -- Phase offset in degrees of the clock feedback output (0.0-360.0).
CLKIN_PERIOD => 20.0, -- Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz).
-- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for CLKOUT# clock output (1-128)
CLKOUT0_DIVIDE => 1,
CLKOUT1_DIVIDE => 1,
CLKOUT2_DIVIDE => 1,
CLKOUT3_DIVIDE => 1,
CLKOUT4_DIVIDE => 1,
CLKOUT5_DIVIDE => 1,
-- CLKOUT0_DUTY_CYCLE - CLKOUT5_DUTY_CYCLE: Duty cycle for CLKOUT# clock output (0.01-0.99).
CLKOUT0_DUTY_CYCLE => 0.5,
CLKOUT1_DUTY_CYCLE => 0.5,
CLKOUT2_DUTY_CYCLE => 0.5,
CLKOUT3_DUTY_CYCLE => 0.5,
CLKOUT4_DUTY_CYCLE => 0.5,
CLKOUT5_DUTY_CYCLE => 0.5,
-- CLKOUT0_PHASE - CLKOUT5_PHASE: Output phase relationship for CLKOUT# clock output (-360.0-360.0).
CLKOUT0_PHASE => 0.0,
CLKOUT1_PHASE => 45.0,
CLKOUT2_PHASE => 90.0,
CLKOUT3_PHASE => 180.0,
CLKOUT4_PHASE => 0.0,
CLKOUT5_PHASE => 0.0,
CLK_FEEDBACK => "CLKFBOUT", -- Clock source to drive CLKFBIN ("CLKFBOUT" or "CLKOUT0")
COMPENSATION => "SYSTEM_SYNCHRONOUS", -- "SYSTEM_SYNCHRONOUS", "SOURCE_SYNCHRONOUS", "EXTERNAL"
DIVCLK_DIVIDE => 1, -- Division value for all output clocks (1-52)
REF_JITTER => 0.1, -- Reference Clock Jitter in UI (0.000-0.999).
RESET_ON_LOSS_OF_LOCK => FALSE -- Must be set to FALSE
)
port map
(
CLKFBOUT => pll_fb, -- 1-bit output: PLL_BASE feedback output
CLKOUT0 => pll_clkout,
CLKOUT1 => open,
CLKOUT2 => open,
CLKOUT3 => open,
CLKOUT4 => open,
CLKOUT5 => open,
LOCKED => open, -- 1-bit output: PLL_BASE lock status output
CLKFBIN => pll_fb, -- 1-bit input: Feedback clock input
CLKIN => clk_DCM4p, -- 1-bit input: Clock input
RST => '0' -- 1-bit input: Reset input
);