21use ieee.std_logic_1164.
all;
53 constant f_vcomin_pll
: integer := 800;
54 constant f_vcomax_pll
: integer := 1600;
55 constant f_pdmin_pll
: integer := 19;
56 constant f_pdmax_pll
: integer := 450;
58 constant f_vcomin_mmcm
: integer := 600;
59 constant f_vcomax_mmcm
: integer := 1200;
60 constant f_pdmin_mmcm
: integer := 10;
61 constant f_pdmax_mmcm
: integer := 450;
63 variable t_vco : Delay_length := 0 ns;
64 variable t_vcomin : Delay_length := 0 ns;
65 variable t_vcomax : Delay_length := 0 ns;
66 variable t_pd : Delay_length := 0 ns;
67 variable t_pdmin : Delay_length := 0 ns;
68 variable t_pdmax : Delay_length := 0 ns;
74 report "assert(GEN_TYPE='PLL' or GEN_TYPE='MMCM')"
89 "assert(VCO_DIVIDE in 1:56 VCO_MULTIPLY in 2:64 OUTx_DIVIDE in 1:128)"
93 t_vcomin := (1000 ns / f_vcomax_pll) - 1 ps;
94 t_vcomax := (1000 ns / f_vcomin_pll) + 1 ps;
95 t_pdmin := (1000 ns / f_pdmax_pll) - 1 ps;
96 t_pdmax := (1000 ns / f_pdmin_pll) + 1 ps;
108 "assert(VCO_DIVIDE in 1:106 VCO_MULTIPLY in 2:64 OUTx_DIVIDE in 1:128)"
112 t_vcomin := (1000 ns / f_vcomax_mmcm) - 1 ps;
113 t_vcomax := (1000 ns / f_vcomin_mmcm) + 1 ps;
114 t_pdmin := (1000 ns / f_pdmax_mmcm) - 1 ps;
115 t_pdmax := (1000 ns / f_pdmin_mmcm) + 1 ps;
123 if t_vco<t_vcomin or t_vco>t_vcomax then
124 report "assert(VCO frequency out of range)"
128 if t_pd<t_pdmin or t_pd>t_pdmax then
129 report "assert(PD frequency out of range)"
136 end process proc_init;
CLKIN_PERIOD real := 10.0
OUT1_DIVIDE positive := 1
CLKIN_JITTER real := 0.01
OUT0_DIVIDE positive := 1
STARTUP_WAIT boolean := false
VCO_MULTIPLY positive := 1
VCO_MULTIPLY positive := 1