SURF  1.0
TenGigEthGtx7Clk.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : TenGigEthGtx7Clk.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_gtx7
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  gtClk : out sl;
44  -- Quad PLL Ports
45  qplllock : out sl;
46  qplloutclk : out sl;
48  qpllRst : in sl);
49 end TenGigEthGtx7Clk;
50 
51 architecture mapping of TenGigEthGtx7Clk is
52 
53  constant QPLL_REFCLK_SEL_C : bit_vector := ite(USE_GTREFCLK_G, "111", QPLL_REFCLK_SEL_G);
54 
55  signal refClockDiv2 : sl;
56  signal refClock : sl;
57  signal refClk : sl;
58  signal phyClock : sl;
59  signal phyReset : sl;
60  signal pwrUpRst : sl;
61  signal qpllReset : sl;
62 
63 begin
64 
65  gtClk <= refClk;
66  phyClk <= phyClock;
67  phyRst <= phyReset;
68 
70 
71  PwrUpRst_Inst : entity work.PwrUpRst
72  generic map (
73  TPD_G => TPD_G,
74  DURATION_G => 15625000) -- 100 ms
75  port map (
76  arst => extRst,
77  clk => phyClock,
78  rstOut => pwrUpRst);
79 
80  Synchronizer_0 : entity work.Synchronizer
81  generic map(
82  TPD_G => TPD_G,
83  RST_ASYNC_G => true,
84  RST_POLARITY_G => '1',
85  STAGES_G => 4,
86  INIT_G => "1111")
87  port map (
88  clk => phyClock,
89  rst => extRst,
90  dataIn => '0',
91  dataOut => phyReset);
92 
93  IBUFDS_GTE2_Inst : IBUFDS_GTE2
94  port map (
95  I => gtClkP,
96  IB => gtClkN,
97  CEB => '0',
98  ODIV2 => refClockDiv2,
99  O => refClock);
100 
102 
103  CLK156_BUFG : BUFG
104  port map (
105  I => refClk,
106  O => phyClock);
107 
108  Gtx7QuadPll_Inst : entity work.Gtx7QuadPll
109  generic map (
110  TPD_G => TPD_G,
111  SIM_RESET_SPEEDUP_G => "TRUE", --Does not affect hardware
112  SIM_VERSION_G => "4.0",
113  QPLL_CFG_G => x"0680181",
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;
USE_GTREFCLK_Gboolean := false
INIT_Gslv := "0"
QPLL_FBDIV_Gbit_vector := "0100100000"
Definition: Gtx7QuadPll.vhd:38
out rstOutsl
Definition: PwrUpRst.vhd:39
TPD_Gtime := 1 ns
Definition: PwrUpRst.vhd:30
std_logic sl
Definition: StdRtlPkg.vhd:28
in rstsl :=not RST_POLARITY_G
QPLL_REFCLK_SEL_Gbit_vector := "001"
STAGES_Gpositive := 2
RST_POLARITY_Gsl := '1'
QPLL_CFG_Gbit_vector := x"0680181"
Definition: Gtx7QuadPll.vhd:36
out dataOutsl
REFCLK_DIV2_Gboolean := false
out qPllRefClkLostsl
Definition: Gtx7QuadPll.vhd:47
in arstsl :=not IN_POLARITY_G
Definition: PwrUpRst.vhd:37
_library_ ieeeieee
TPD_Gtime := 1 ns
Definition: Gtx7QuadPll.vhd:32
SIM_RESET_SPEEDUP_Gstring := "TRUE"
Definition: Gtx7QuadPll.vhd:34
TPD_Gtime := 1 ns
in clksl
Definition: PwrUpRst.vhd:38
DURATION_Gnatural range 0 to (( 2** 30)- 1):= 156250000
Definition: PwrUpRst.vhd:35
out qPllOutRefClksl
Definition: Gtx7QuadPll.vhd:44
SIM_VERSION_Gstring := "4.0"
Definition: Gtx7QuadPll.vhd:35
QPLL_REFCLK_DIV_Ginteger := 1
Definition: Gtx7QuadPll.vhd:40
QPLL_REFCLK_SEL_Gbit_vector := "001"
Definition: Gtx7QuadPll.vhd:37
in qPllResetsl
Definition: Gtx7QuadPll.vhd:49
in gtRefClksl := '0'
in qPllRefClksl
Definition: Gtx7QuadPll.vhd:42
QPLL_FBDIV_RATIO_Gbit := '1'
Definition: Gtx7QuadPll.vhd:39
RST_ASYNC_Gboolean := false
bit_vector := ite( USE_GTREFCLK_G, "111", QPLL_REFCLK_SEL_G) QPLL_REFCLK_SEL_C
in qPllPowerDownsl := '0'
Definition: Gtx7QuadPll.vhd:48
out qPllLocksl
Definition: Gtx7QuadPll.vhd:45
out qPllOutClksl
Definition: Gtx7QuadPll.vhd:43
in qPllLockDetClksl
Definition: Gtx7QuadPll.vhd:46