1 ------------------------------------------------------------------------------- 2 -- File : ClockManager7.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2014-10-28 5 -- Last update: 2016-08-24 6 ------------------------------------------------------------------------------- 7 -- Description: A wrapper over MMCM/PLL to avoid coregen use. 8 ------------------------------------------------------------------------------- 9 -- This file is part of 'SLAC Firmware Standard Library'. 10 -- It is subject to the license terms in the LICENSE.txt file found in the 11 -- top-level directory of this distribution and at: 12 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 13 -- No part of 'SLAC Firmware Standard Library', including this file, 14 -- may be copied, modified, propagated, or distributed except according to 15 -- the terms contained in the LICENSE.txt file. 16 ------------------------------------------------------------------------------- 19 use ieee.std_logic_1164.
all;
20 use ieee.std_logic_unsigned.
all;
21 use ieee.std_logic_arith.
all;
25 use unisim.vcomponents.
all;
31 --! @ingroup xilinx_7Series_general 35 TYPE_G : := "MMCM";
-- or "PLL" 97 end entity ClockManager7;
105 constant RST_POLARITY_C : slv(0 to 6) := ( 112 signal rstInLoc : sl;
113 signal clkInLoc : sl;
114 signal lockedLoc : sl;
115 signal clkOutMmcm : slv(6 downto 0);
116 signal clkOutLoc : slv(6 downto 0);
117 signal clkFbOut : sl;
123 signal drpAddr : slv(6 downto 0);
124 signal drpDi : slv(15 downto 0);
125 signal drpDo : slv(15 downto 0);
127 attribute keep_hierarchy : ;
128 attribute keep_hierarchy of rtl : architecture is "yes";
133 report "ClockManager7: Cannot have 7 clocks if TYPE_G is PLL" severity failure;
136 report "ClockManger7: TYPE_G must be either MMCM or PLL" severity failure;
167 MmcmGen : if (TYPE_G = "MMCM") generate 171 CLKOUT4_CASCADE => false,
172 STARTUP_WAIT => false,
175 CLKFBOUT_MULT_F => CLKFBOUT_MULT_F_C,
176 CLKOUT0_DIVIDE_F => CLKOUT0_DIVIDE_F_C,
213 CLKFBOUT => clkFbOut,
216 CLKOUT0 => clkOutMmcm
(0),
217 CLKOUT1 => clkOutMmcm
(1),
218 CLKOUT2 => clkOutMmcm
(2),
219 CLKOUT3 => clkOutMmcm
(3),
220 CLKOUT4 => clkOutMmcm
(4),
221 CLKOUT5 => clkOutMmcm
(5),
222 CLKOUT6 => clkOutMmcm
(6));
223 end generate MmcmGen;
225 PllGen : if (TYPE_G = "PLL") generate 263 CLKFBOUT => clkFbOut,
266 CLKOUT0 => clkOutMmcm
(0),
267 CLKOUT1 => clkOutMmcm
(1),
268 CLKOUT2 => clkOutMmcm
(2),
269 CLKOUT3 => clkOutMmcm
(3),
270 CLKOUT4 => clkOutMmcm
(4),
271 CLKOUT5 => clkOutMmcm
(5));
302 clkOut(i) <= clkOutLoc(i);
304 end generate OutBufgGen;
307 clkOutLoc <= clkOutMmcm;
309 end generate NoOutBufgGen;
314 RstSync_1 :
entity work.
RstSync 327 end architecture rtl;
ADDR_WIDTH_Gpositive range 1 to 32:= 16
CLKOUT0_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT3_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT2_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
CLKOUT3_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT1_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT0_DIVIDE_Ginteger range 1 to 128:= 1
out drpAddrslv( ADDR_WIDTH_G- 1 downto 0)
CLKOUT2_DIVIDE_Ginteger range 1 to 128:= 1
out axilReadSlaveAxiLiteReadSlaveType
CLKOUT1_PHASE_Greal range - 360.0 to 360.0:= 0.0
EN_ARBITRATION_Gboolean := false
CLKOUT5_PHASE_Greal range - 360.0 to 360.0:= 0.0
DATA_WIDTH_Gpositive range 1 to 32:= 16
out axilReadSlaveAxiLiteReadSlaveType
in drpDoslv( DATA_WIDTH_G- 1 downto 0)
COMMON_CLK_Gboolean := false
CLKIN_PERIOD_Greal := 10.0
CLKOUT6_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT0_RST_POLARITY_Gsl := '1'
RST_IN_POLARITY_Gsl := '1'
CLKOUT5_RST_HOLD_Ginteger range 3 to positive'high:= 3
out rstOutslv( NUM_CLOCKS_G- 1 downto 0)
CLKOUT2_RST_POLARITY_Gsl := '1'
out axilWriteSlaveAxiLiteWriteSlaveType
CLKOUT0_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
INPUT_BUFG_Gboolean := true
out axilWriteSlaveAxiLiteWriteSlaveType
BYPASS_SYNC_Gboolean := false
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
CLKOUT6_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
RELEASE_DELAY_Ginteger range 3 to positive'high:= 3
CLKOUT1_RST_POLARITY_Gsl := '1'
CLKOUT2_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT4_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
slv( 1 downto 0) := "11" AXI_RESP_DECERR_C
CLKOUT1_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
CLKFBOUT_MULT_Ginteger range 2 to 64:= 5
in axilReadMasterAxiLiteReadMasterType
in axilWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
BANDWIDTH_Gstring := "OPTIMIZED"
CLKOUT5_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
CLKOUT1_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT4_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT3_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT4_RST_POLARITY_Gsl := '1'
CLKFBOUT_MULT_F_Greal range 1.0 to 64.0:= 1.0
CLKOUT5_DIVIDE_Ginteger range 1 to 128:= 1
DIVCLK_DIVIDE_Ginteger range 1 to 106:= 1
CLKOUT0_RST_HOLD_Ginteger range 3 to positive'high:= 3
TIMEOUT_Gpositive := 4096
out clkOutslv( NUM_CLOCKS_G- 1 downto 0)
CLKOUT6_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT6_PHASE_Greal range - 360.0 to 360.0:= 0.0
AxiLiteReadMasterType :=(araddr =>( others => '0'),arprot =>( others => '0'),arvalid => '0',rready => '1') AXI_LITE_READ_MASTER_INIT_C
CLKOUT0_DIVIDE_F_Greal range 1.0 to 128.0:= 1.0
in axilWriteMasterAxiLiteWriteMasterType
AxiLiteWriteMasterType :=(awaddr =>( others => '0'),awprot =>( others => '0'),awvalid => '0',wdata =>( others => '0'),wstrb =>( others => '1'),wvalid => '0',bready => '1') AXI_LITE_WRITE_MASTER_INIT_C
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
CLKOUT6_RST_POLARITY_Gsl := '1'
CLKOUT5_RST_POLARITY_Gsl := '1'
CLKOUT4_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT3_RST_POLARITY_Gsl := '1'
OUTPUT_BUFG_Gboolean := true
CLKOUT4_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT3_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
in axilReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
array(natural range <> ) of integer IntegerArray
out drpDislv( DATA_WIDTH_G- 1 downto 0)
NUM_CLOCKS_Ginteger range 1 to 7
CLKOUT2_PHASE_Greal range - 360.0 to 360.0:= 0.0