1 ------------------------------------------------------------------------------- 2 -- File : ClockManagerUltraScale.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2015-07-09 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;
24 use unisim.vcomponents.
all;
30 --! @ingroup xilinx_UltraScale_general 34 TYPE_G : := "MMCM";
-- or "PLL" 95 end entity ClockManagerUltraScale;
103 constant RST_POLARITY_C : slv(0 to 6) := ( 110 signal rstInLoc : sl;
111 signal clkInLoc : sl;
112 signal lockedLoc : sl;
113 signal clkOutMmcm : slv(6 downto 0);
114 signal clkOutLoc : slv(6 downto 0);
115 signal clkFbOut : sl;
121 signal drpAddr : slv(6 downto 0);
122 signal drpDi : slv(15 downto 0);
123 signal drpDo : slv(15 downto 0);
125 attribute keep_hierarchy : ;
126 attribute keep_hierarchy of rtl : architecture is "yes";
131 report "ClockManager7: Cannot have 2 clocks if TYPE_G is PLL" severity failure;
134 report "ClockManger7: TYPE_G must be either MMCM or PLL" severity failure;
165 MmcmGen : if (TYPE_G = "MMCM") generate 169 CLKOUT4_CASCADE =>
"FALSE",
170 STARTUP_WAIT =>
"FALSE",
173 CLKFBOUT_MULT_F => CLKFBOUT_MULT_F_C,
174 CLKOUT0_DIVIDE_F => CLKOUT0_DIVIDE_F_C,
212 CLKFBOUT => clkFbOut,
215 CLKOUT0 => clkOutMmcm
(0),
216 CLKOUT1 => clkOutMmcm
(1),
217 CLKOUT2 => clkOutMmcm
(2),
218 CLKOUT3 => clkOutMmcm
(3),
219 CLKOUT4 => clkOutMmcm
(4),
220 CLKOUT5 => clkOutMmcm
(5),
221 CLKOUT6 => clkOutMmcm
(6));
222 end generate MmcmGen;
224 PllGen : if (TYPE_G = "PLL") generate 227 STARTUP_WAIT =>
"FALSE",
249 CLKFBOUT => clkFbOut,
252 CLKOUT0 => clkOutMmcm
(0),
253 CLKOUT1 => clkOutMmcm
(1));
283 clkOut(i) <= clkOutLoc(i);
289 RstSync_1 :
entity work.
RstSync 302 end architecture rtl;
ADDR_WIDTH_Gpositive range 1 to 32:= 16
CLKOUT4_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT4_DIVIDE_Ginteger range 1 to 128:= 1
CLKFBOUT_MULT_F_Greal range 1.0 to 64.0:= 1.0
out drpAddrslv( ADDR_WIDTH_G- 1 downto 0)
CLKOUT5_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT3_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT5_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT2_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT6_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
EN_ARBITRATION_Gboolean := false
DATA_WIDTH_Gpositive range 1 to 32:= 16
out axilReadSlaveAxiLiteReadSlaveType
INPUT_BUFG_Gboolean := true
NUM_CLOCKS_Ginteger range 1 to 7
DIVCLK_DIVIDE_Ginteger range 1 to 106:= 1
in drpDoslv( DATA_WIDTH_G- 1 downto 0)
COMMON_CLK_Gboolean := false
in axilReadMasterAxiLiteReadMasterType := AXI_LITE_READ_MASTER_INIT_C
CLKOUT2_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
CLKOUT6_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT1_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT2_RST_POLARITY_Gsl := '1'
out clkOutslv( NUM_CLOCKS_G- 1 downto 0)
CLKOUT0_DIVIDE_F_Greal range 1.0 to 128.0:= 1.0
out axilWriteSlaveAxiLiteWriteSlaveType
RST_IN_POLARITY_Gsl := '1'
BANDWIDTH_Gstring := "OPTIMIZED"
CLKOUT0_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKFBOUT_MULT_Ginteger range 2 to 64:= 5
CLKOUT1_RST_POLARITY_Gsl := '1'
BYPASS_SYNC_Gboolean := false
CLKOUT6_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT0_RST_POLARITY_Gsl := '1'
CLKIN_PERIOD_Greal := 10.0
RELEASE_DELAY_Ginteger range 3 to positive'high:= 3
CLKOUT4_RST_POLARITY_Gsl := '1'
slv( 1 downto 0) := "11" AXI_RESP_DECERR_C
CLKOUT6_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT3_PHASE_Greal range - 360.0 to 360.0:= 0.0
in axilReadMasterAxiLiteReadMasterType
CLKOUT0_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
CLKOUT6_RST_POLARITY_Gsl := '1'
CLKOUT5_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
CLKOUT3_RST_HOLD_Ginteger range 3 to positive'high:= 3
TIMEOUT_Gpositive := 4096
out axilWriteSlaveAxiLiteWriteSlaveType
CLKOUT5_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT2_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT3_RST_POLARITY_Gsl := '1'
AxiLiteReadMasterType :=(araddr =>( others => '0'),arprot =>( others => '0'),arvalid => '0',rready => '1') AXI_LITE_READ_MASTER_INIT_C
out axilReadSlaveAxiLiteReadSlaveType
CLKOUT4_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
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
CLKOUT1_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT0_RST_HOLD_Ginteger range 3 to positive'high:= 3
CLKOUT1_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT5_RST_POLARITY_Gsl := '1'
CLKOUT2_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT0_DIVIDE_Ginteger range 1 to 128:= 1
CLKOUT1_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5
array(natural range <> ) of integer IntegerArray
in axilWriteMasterAxiLiteWriteMasterType := AXI_LITE_WRITE_MASTER_INIT_C
out drpDislv( DATA_WIDTH_G- 1 downto 0)
AXI_ERROR_RESP_Gslv( 1 downto 0) := AXI_RESP_DECERR_C
out rstOutslv( NUM_CLOCKS_G- 1 downto 0)
CLKOUT4_PHASE_Greal range - 360.0 to 360.0:= 0.0
CLKOUT3_DUTY_CYCLE_Greal range 0.01 to 0.99:= 0.5