CLKINTFB : out std_logic );
end component;
+ signal clkos : std_ulogic;
signal clkop : std_logic;
signal lock : std_logic;
- -- PLL constants based on prjtrellis example
- constant PLL_IN : natural := 2000000;
- constant PLL_OUT : natural := 600000000;
+ -- PLL constants
+ -- According to the datasheet, PLL_IN needs to be between 10 and 400 MHz
+ -- PLL_OUT needs to be between 400 and 800 MHz
+ -- PLL_IN is chosen based on 12 and 48 MHz being common values
+ -- for the reference clock.
+ constant PLL_IN : natural := 12000000;
+ constant PLL_OUT : natural := 480000000;
-- Configration for ECP5 PLL
constant PLL_CLKOP_DIV : natural := PLL_OUT/CLK_OUTPUT_HZ;
- constant PLL_CLKFB_DIV : natural := CLK_OUTPUT_HZ/PLL_IN;
+ constant PLL_CLKOS_DIV : natural := 2;
+ constant PLL_CLKFB_DIV : natural := PLL_OUT/PLL_CLKOS_DIV/PLL_IN;
constant PLL_CLKI_DIV : natural := CLK_INPUT_HZ/PLL_IN;
begin
pll_clk_out <= clkop;
- pll_locked_out <= not lock; -- FIXME: EHXPLLL lock signal active low?!?
+ pll_locked_out <= lock;
clkgen: EHXPLLL
generic map(
- CLKOP_CPHASE => 11, -- FIXME: Copied from prjtrells.
CLKOP_DIV => PLL_CLKOP_DIV,
+ CLKOS_ENABLE => "ENABLED",
+ CLKOS_DIV => PLL_CLKOS_DIV,
CLKFB_DIV => PLL_CLKFB_DIV,
- CLKI_DIV => PLL_CLKI_DIV
+ CLKI_DIV => PLL_CLKI_DIV,
+ FEEDBK_PATH => "CLKOS"
)
port map (
CLKI => ext_clk,
CLKOP => clkop,
- CLKFB => clkop,
+ CLKOS => clkos,
+ CLKFB => clkos,
LOCK => lock,
RST => pll_rst_in,
PHASESEL1 => '0',
PHASELOADREG => '0',
STDBY => '0',
PLLWAKESYNC => '0',
- ENCLKOP => '0',
- ENCLKOS => '0',
+ ENCLKOP => '1',
+ ENCLKOS => '1',
ENCLKOS2 => '0',
ENCLKOS3 => '0'
);