SURF  1.0
TenGigEthGth7Clk.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : TenGigEthGth7Clk.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-03-30
5 -- Last update: 2016-05-19
6 -------------------------------------------------------------------------------
7 -- Description: 10GBASE-R Ethernet's Clock Module
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 -------------------------------------------------------------------------------
17 
18 library ieee;
19 use ieee.std_logic_1164.all;
20 
21 use work.StdRtlPkg.all;
22 
23 library unisim;
24 use unisim.vcomponents.all;
25 
26 --! @see entity
27  --! @ingroup ethernet_TenGigEthCore_gth7
29  generic (
30  TPD_G : time := 1 ns;
31  USE_GTREFCLK_G : boolean := false; -- FALSE: gtClkP/N, TRUE: gtRefClk
32  REFCLK_DIV2_G : boolean := false; -- FALSE: gtClkP/N = 156.25 MHz, TRUE: gtClkP/N = 312.5 MHz
33  QPLL_REFCLK_SEL_G : bit_vector := "001");
34  port (
35  -- Clocks and Resets
36  extRst : in sl; -- async reset
37  phyClk : out sl;
38  phyRst : out sl;
39  -- MGT Clock Port (156.25 MHz or 312.5 MHz)
40  gtRefClk : in sl := '0'; -- 156.25 MHz only
41  gtClkP : in sl := '1';
42  gtClkN : in sl := '0';
43  -- Quad PLL Ports
44  qplllock : out sl;
45  qplloutclk : out sl;
47  qpllRst : in sl);
48 end TenGigEthGth7Clk;
49 
50 architecture mapping of TenGigEthGth7Clk is
51 
52  constant QPLL_REFCLK_SEL_C : bit_vector := ite(USE_GTREFCLK_G, "111", QPLL_REFCLK_SEL_G);
53 
54  signal refClockDiv2 : sl := '0';
55  signal refClock : sl := '0';
56  signal refClk : sl := '0';
57  signal phyClock : sl := '0';
58  signal phyReset : sl := '1';
59  signal pwrUpRst : sl := '1';
60  signal qpllReset : sl := '1';
61 
62 begin
63 
64  phyClk <= phyClock;
65  phyRst <= phyReset;
66 
68 
69  PwrUpRst_Inst : entity work.PwrUpRst
70  generic map (
71  TPD_G => TPD_G,
72  DURATION_G => 15625000) -- 100 ms
73  port map (
74  arst => extRst,
75  clk => phyClock,
76  rstOut => pwrUpRst);
77 
78  Synchronizer_0 : entity work.Synchronizer
79  generic map(
80  TPD_G => TPD_G,
81  RST_ASYNC_G => true,
82  RST_POLARITY_G => '1',
83  STAGES_G => 4,
84  INIT_G => "1111")
85  port map (
86  clk => phyClock,
87  rst => extRst,
88  dataIn => '0',
89  dataOut => phyReset);
90 
91  GEN_IBUFDS_GTE2 : if (USE_GTREFCLK_G = false) generate
92  IBUFDS_GTE2_Inst : IBUFDS_GTE2
93  port map (
94  I => gtClkP,
95  IB => gtClkN,
96  CEB => '0',
97  ODIV2 => refClockDiv2,
98  O => refClock);
99  end generate;
100 
102 
103  CLK156_BUFG : BUFG
104  port map (
105  I => refClk,
106  O => phyClock);
107 
108  Gth7QuadPll_Inst : entity work.Gth7QuadPll
109  generic map (
110  TPD_G => TPD_G,
111  SIM_RESET_SPEEDUP_G => "FALSE", --Does not affect hardware
112  SIM_VERSION_G => "2.0",
113  QPLL_CFG_G => x"04801C7",
115  QPLL_FBDIV_G => "0101000000", -- 64B/66B Encoding
116  QPLL_FBDIV_RATIO_G => '0', -- 64B/66B Encoding
117  QPLL_REFCLK_DIV_G => 1)
118  port map (
119  qPllRefClk => refClk, -- 156.25 MHz
120  qPllOutClk => qPllOutClk,
121  qPllOutRefClk => qPllOutRefClk,
122  qPllLock => qPllLock,
123  qPllLockDetClk => '0', -- IP Core ties this to GND (see note below)
124  qPllRefClkLost => open,
125  qPllPowerDown => '0',
126  qPllReset => qpllReset);
127  ---------------------------------------------------------------------------------------------
128  -- Note: GTXE2_COMMON pin gtxe2_common_0_i.QPLLLOCKDETCLK cannot be driven by a clock derived
129  -- from the same clock used as the reference clock for the QPLL, including TXOUTCLK*,
130  -- RXOUTCLK*, the output from the IBUFDS_GTE2 providing the reference clock, and any
131  -- buffered or multiplied/divided versions of these clock outputs. Please see UG476 for
132  -- more information. Source, through a clock buffer, is the same as the GT cell
133  -- reference clock.
134  ---------------------------------------------------------------------------------------------
135 
136 end mapping;
QPLL_REFCLK_SEL_Gbit_vector := "001"
Definition: Gth7QuadPll.vhd:37
INIT_Gslv := "0"
USE_GTREFCLK_Gboolean := false
out qPllOutRefClksl
Definition: Gth7QuadPll.vhd:44
in qPllRefClksl
Definition: Gth7QuadPll.vhd:42
out rstOutsl
Definition: PwrUpRst.vhd:39
TPD_Gtime := 1 ns
Definition: PwrUpRst.vhd:30
QPLL_REFCLK_DIV_Ginteger := 1
Definition: Gth7QuadPll.vhd:40
out qPllRefClkLostsl
Definition: Gth7QuadPll.vhd:47
std_logic sl
Definition: StdRtlPkg.vhd:28
in rstsl :=not RST_POLARITY_G
QPLL_CFG_Gbit_vector := x"04801C7"
Definition: Gth7QuadPll.vhd:36
QPLL_REFCLK_SEL_Gbit_vector := "001"
STAGES_Gpositive := 2
TPD_Gtime := 1 ns
Definition: Gth7QuadPll.vhd:32
out qPllLocksl
Definition: Gth7QuadPll.vhd:45
out qPllOutClksl
Definition: Gth7QuadPll.vhd:43
RST_POLARITY_Gsl := '1'
_library_ ieeeieee
SIM_RESET_SPEEDUP_Gstring := "TRUE"
Definition: Gth7QuadPll.vhd:34
out dataOutsl
REFCLK_DIV2_Gboolean := false
in arstsl :=not IN_POLARITY_G
Definition: PwrUpRst.vhd:37
QPLL_FBDIV_RATIO_Gbit := '1'
Definition: Gth7QuadPll.vhd:39
in qPllResetsl
Definition: Gth7QuadPll.vhd:49
SIM_VERSION_Gstring := "2.0"
Definition: Gth7QuadPll.vhd:35
TPD_Gtime := 1 ns
in qPllPowerDownsl := '0'
Definition: Gth7QuadPll.vhd:48
in clksl
Definition: PwrUpRst.vhd:38
DURATION_Gnatural range 0 to (( 2** 30)- 1):= 156250000
Definition: PwrUpRst.vhd:35
in qPllLockDetClksl
Definition: Gth7QuadPll.vhd:46
QPLL_FBDIV_Gbit_vector := "0100100000"
Definition: Gth7QuadPll.vhd:38
RST_ASYNC_Gboolean := false
in gtRefClksl := '0'
bit_vector := ite( USE_GTREFCLK_G, "111", QPLL_REFCLK_SEL_G) QPLL_REFCLK_SEL_C