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