24use ieee.std_logic_1164.
all;
52 constant f_vcomin_pll
: integer := 800;
53 constant f_vcomax_pll
: integer := 1600;
54 constant f_pdmin_pll
: integer := 19;
55 constant f_pdmax_pll
: integer := 450;
57 constant f_vcomin_mmcm
: integer := 600;
58 constant f_vcomax_mmcm
: integer := 1200;
59 constant f_pdmin_mmcm
: integer := 10;
60 constant f_pdmax_mmcm
: integer := 450;
62 variable t_vco : Delay_length := 0 ns;
63 variable t_vcomin : Delay_length := 0 ns;
64 variable t_vcomax : Delay_length := 0 ns;
65 variable t_pd : Delay_length := 0 ns;
66 variable t_pdmin : Delay_length := 0 ns;
67 variable t_pdmax : Delay_length := 0 ns;
73 report "assert(GEN_TYPE='PLL' or GEN_TYPE='MMCM')"
86 "assert(VCO_DIVIDE in 1:56 VCO_MULTIPLY in 2:64 OUT_DIVIDE in 1:128)"
90 t_vcomin := (1000 ns / f_vcomax_pll) - 1 ps;
91 t_vcomax := (1000 ns / f_vcomin_pll) + 1 ps;
92 t_pdmin := (1000 ns / f_pdmax_pll) - 1 ps;
93 t_pdmax := (1000 ns / f_pdmin_pll) + 1 ps;
104 "assert(VCO_DIVIDE in 1:106 VCO_MULTIPLY in 2:64 OUT_DIVIDE in 1:128)"
108 t_vcomin := (1000 ns / f_vcomax_mmcm) - 1 ps;
109 t_vcomax := (1000 ns / f_vcomin_mmcm) + 1 ps;
110 t_pdmin := (1000 ns / f_pdmax_mmcm) - 1 ps;
111 t_pdmax := (1000 ns / f_pdmin_mmcm) + 1 ps;
119 if t_vco<t_vcomin or t_vco>t_vcomax then
120 report "assert(VCO frequency out of range)"
124 if t_pd<t_pdmin or t_pd>t_pdmax then
125 report "assert(PD frequency out of range)"
132 end process proc_init;
CLKIN_PERIOD real := 10.0
CLKIN_JITTER real := 0.01
STARTUP_WAIT boolean := false
VCO_MULTIPLY positive := 1
VCO_MULTIPLY positive := 1