SURF  1.0
Gth7Core.vhd
Go to the documentation of this file.
1 -------------------------------------------------------------------------------
2 -- File : Gth7Core.vhd
3 -- Company : SLAC National Accelerator Laboratory
4 -- Created : 2015-04-01
5 -- Last update: 2015-04-01
6 -------------------------------------------------------------------------------
7 -- Description: Wrapper for Xilinx 7-series GTH primitive
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 xilinx_7Series_gth7
28 entity Gth7Core is
29  generic (
30  TPD_G : time := 1 ns;
31  -- Sim Generics --
32  SIM_GTRESET_SPEEDUP_G : string := "FALSE";
33  SIM_VERSION_G : string := "2.0";
34  SIMULATION_G : boolean := false;
35  STABLE_CLOCK_PERIOD_G : real := 4.0E-9; --units of seconds
36  -- CPLL Settings --
37  CPLL_REFCLK_SEL_G : bit_vector := "001";
38  CPLL_FBDIV_G : integer := 4;
39  CPLL_FBDIV_45_G : integer := 5;
40  CPLL_REFCLK_DIV_G : integer := 1;
41  RXOUT_DIV_G : integer := 2;
42  TXOUT_DIV_G : integer := 2;
43  RX_CLK25_DIV_G : integer := 5; -- Set by wizard
44  TX_CLK25_DIV_G : integer := 5; -- Set by wizard
45  PMA_RSV_G : bit_vector := X"00000080"; -- For GTH Transceiver: The default value is 32'h0000080
46  RX_OS_CFG_G : bit_vector := "0000010000000"; -- Set by wizard
47  RXCDR_CFG_G : bit_vector := x"0002007FE1000C2200018"; -- Set by wizard
48  -- Configure PLL sources
49  TX_PLL_G : string := "CPLL";
50  RX_PLL_G : string := "CPLL";
51  -- Configure Data widths
52  TX_EXT_DATA_WIDTH_G : integer := 16;
53  TX_INT_DATA_WIDTH_G : integer := 20;
54  TX_8B10B_EN_G : boolean := true;
55  RX_EXT_DATA_WIDTH_G : integer := 16;
56  RX_INT_DATA_WIDTH_G : integer := 20;
57  RX_8B10B_EN_G : boolean := true;
58  -- Configure Buffer usage
59  TX_BUF_EN_G : boolean := true;
60  TX_OUTCLK_SRC_G : string := "PLLREFCLK"; -- or "OUTCLKPMA" when bypassing buffer
61  TX_DLY_BYPASS_G : sl := '1'; -- 1 for bypass, 0 for delay
62  TX_PHASE_ALIGN_G : string := "AUTO"; -- Or "MANUAL" or "NONE"
63  TX_BUF_ADDR_MODE_G : string := "FAST"; -- Or "FULL"
64  RX_BUF_EN_G : boolean := true;
65  RX_OUTCLK_SRC_G : string := "PLLREFCLK"; -- or "OUTCLKPMA" when bypassing buffer
66  RX_USRCLK_SRC_G : string := "RXOUTCLK"; -- or "TXOUTCLK"
67  RX_DLY_BYPASS_G : sl := '1'; -- 1 for bypass, 0 for delay
68  RX_DDIEN_G : sl := '0'; -- Supposed to be '1' when bypassing rx buffer
69  RX_BUF_ADDR_MODE_G : string := "FAST";
70  -- Configure RX comma alignment
71  RX_ALIGN_MODE_G : string := "GT"; -- Or "FIXED_LAT" or "NONE"
72  ALIGN_COMMA_DOUBLE_G : string := "FALSE";
73  ALIGN_COMMA_ENABLE_G : bit_vector := "1111111111";
74  ALIGN_COMMA_WORD_G : integer := 2;
75  ALIGN_MCOMMA_DET_G : string := "FALSE";
76  ALIGN_MCOMMA_VALUE_G : bit_vector := "1010000011";
78  ALIGN_PCOMMA_DET_G : string := "FALSE";
79  ALIGN_PCOMMA_VALUE_G : bit_vector := "0101111100";
81  SHOW_REALIGN_COMMA_G : string := "FALSE";
82  RXSLIDE_MODE_G : string := "PCS"; -- Set to PMA for fixed latency operation
83  -- Fixed Latency comma alignment (If RX_ALIGN_MODE_G = "FIXED_LAT")
84  FIXED_COMMA_EN_G : slv(3 downto 0) := "0011";
85  FIXED_ALIGN_COMMA_0_G : slv := "----------0101111100";
86  FIXED_ALIGN_COMMA_1_G : slv := "----------1010000011";
87  FIXED_ALIGN_COMMA_2_G : slv := "XXXXXXXXXXXXXXXXXXXX";
88  FIXED_ALIGN_COMMA_3_G : slv := "XXXXXXXXXXXXXXXXXXXX";
89  -- Configure RX 8B10B decoding (If RX_8B10B_EN_G = true)
90  RX_DISPERR_SEQ_MATCH_G : string := "TRUE";
91  DEC_MCOMMA_DETECT_G : string := "TRUE";
92  DEC_PCOMMA_DETECT_G : string := "TRUE";
93  DEC_VALID_COMMA_ONLY_G : string := "FALSE";
94  -- Configure Clock Correction
95  CBCC_DATA_SOURCE_SEL_G : string := "DECODED";
96  CLK_COR_SEQ_2_USE_G : string := "FALSE";
97  CLK_COR_KEEP_IDLE_G : string := "FALSE";
98  CLK_COR_MAX_LAT_G : integer := 9;
99  CLK_COR_MIN_LAT_G : integer := 7;
100  CLK_COR_PRECEDENCE_G : string := "TRUE";
101  CLK_COR_REPEAT_WAIT_G : integer := 0;
102  CLK_COR_SEQ_LEN_G : integer := 1;
103  CLK_COR_SEQ_1_ENABLE_G : bit_vector := "1111";
104  CLK_COR_SEQ_1_1_G : bit_vector := "0100000000"; -- UG476 pg 249
105  CLK_COR_SEQ_1_2_G : bit_vector := "0000000000";
106  CLK_COR_SEQ_1_3_G : bit_vector := "0000000000";
107  CLK_COR_SEQ_1_4_G : bit_vector := "0000000000";
108  CLK_CORRECT_USE_G : string := "FALSE";
109  CLK_COR_SEQ_2_ENABLE_G : bit_vector := "0000";
110  CLK_COR_SEQ_2_1_G : bit_vector := "0100000000"; -- UG476 pg 249
111  CLK_COR_SEQ_2_2_G : bit_vector := "0000000000";
112  CLK_COR_SEQ_2_3_G : bit_vector := "0000000000";
113  CLK_COR_SEQ_2_4_G : bit_vector := "0000000000";
114  -- Configure Channel Bonding
115  RX_CHAN_BOND_EN_G : boolean := false;
116  RX_CHAN_BOND_MASTER_G : boolean := false; --True: Master, False: Slave
117  CHAN_BOND_KEEP_ALIGN_G : string := "FALSE";
118  CHAN_BOND_MAX_SKEW_G : integer := 1;
119  CHAN_BOND_SEQ_LEN_G : integer := 1;
120  CHAN_BOND_SEQ_1_1_G : bit_vector := "0000000000";
121  CHAN_BOND_SEQ_1_2_G : bit_vector := "0000000000";
122  CHAN_BOND_SEQ_1_3_G : bit_vector := "0000000000";
123  CHAN_BOND_SEQ_1_4_G : bit_vector := "0000000000";
124  CHAN_BOND_SEQ_1_ENABLE_G : bit_vector := "1111";
125  CHAN_BOND_SEQ_2_1_G : bit_vector := "0000000000";
126  CHAN_BOND_SEQ_2_2_G : bit_vector := "0000000000";
127  CHAN_BOND_SEQ_2_3_G : bit_vector := "0000000000";
128  CHAN_BOND_SEQ_2_4_G : bit_vector := "0000000000";
129  CHAN_BOND_SEQ_2_ENABLE_G : bit_vector := "0000";
130  CHAN_BOND_SEQ_2_USE_G : string := "FALSE";
131  FTS_DESKEW_SEQ_ENABLE_G : bit_vector := "1111";
132  FTS_LANE_DESKEW_CFG_G : bit_vector := "1111";
133  FTS_LANE_DESKEW_EN_G : string := "FALSE";
134  -- RX Equalizer Attributes--------------------------
135  RX_EQUALIZER_G : string := "LPM"; -- "DFE" or "LPM"
136  RX_CM_TRIM_G : bit_vector := "1000";
137  RX_DFE_LPM_CFG_G : bit_vector := x"0080";
138  RXDFELFOVRDEN_G : sl := '0';
139  RXDFEXYDEN_G : sl := '1'); -- This should always be 1
140  port (
141  stableClkIn : in sl; -- Free running clock needed to drive reset logic and DRP interface
142  cPllRefClkIn : in sl := '0'; -- Drives CPLL if used
144  qPllRefClkIn : in sl := '0'; -- Signals from QPLL if used
145  qPllClkIn : in sl := '0';
146  qPllLockIn : in sl := '0';
147  qPllRefClkLostIn : in sl := '0';
149  gtRxRefClkBufg : in sl := '0'; -- In fixed latency mode, need BUF'd version of gt rx reference clock to check if recovered clock is stable
150  -- Serial IO
151  gtTxP : out sl;
152  gtTxN : out sl;
153  gtRxP : in sl;
154  gtRxN : in sl;
155  -- Rx Clock related signals
161  rxMmcmLockedIn : in sl := '1';
162  -- Rx User Reset Signals
165  -- Manual Comma Align signals
166  rxDataValidIn : in sl := '1';
167  rxSlideIn : in sl := '0';
168  -- Rx Data and decode signals
169  rxDataOut : out slv(RX_EXT_DATA_WIDTH_G-1 downto 0);
170  rxCharIsKOut : out slv((RX_EXT_DATA_WIDTH_G/8)-1 downto 0); -- If WIDTH not mult of 8 then
171  rxDecErrOut : out slv((RX_EXT_DATA_WIDTH_G/8)-1 downto 0); -- not using 8b10b and these dont matter
172  rxDispErrOut : out slv((RX_EXT_DATA_WIDTH_G/8)-1 downto 0);
173  rxPolarityIn : in sl := '0';
174  rxBufStatusOut : out slv(2 downto 0);
175  -- Rx Channel Bonding
176  rxChBondLevelIn : in slv(2 downto 0) := "000";
177  rxChBondIn : in slv(4 downto 0) := "00000";
178  rxChBondOut : out slv(4 downto 0);
179  -- Tx Clock Related Signals
183  txUserRdyOut : out sl; -- txOutClk is valid
185  txMmcmLockedIn : in sl := '1';
186  -- Tx User Reset signals
189  -- Tx Data
190  txDataIn : in slv(TX_EXT_DATA_WIDTH_G-1 downto 0);
191  txCharIsKIn : in slv((TX_EXT_DATA_WIDTH_G/8)-1 downto 0);
192  txBufStatusOut : out slv(1 downto 0);
193  txPolarityIn : in sl := '0';
194  -- Debug Interface
195  txPowerDown : in slv(1 downto 0) := "00";
196  rxPowerDown : in slv(1 downto 0) := "00";
197  loopbackIn : in slv(2 downto 0) := "000";
198  txPreCursor : in slv(4 downto 0) := (others => '0');
199  txPostCursor : in slv(4 downto 0) := (others => '0');
200  txDiffCtrl : in slv(3 downto 0) := "1000";
201  -- DRP Interface (stableClkIn Domain)
202  drpGnt : out sl;
203  drpRdy : out sl;
204  drpEn : in sl := '0';
205  drpWe : in sl := '0';
206  drpAddr : in slv(8 downto 0) := "000000000";
207  drpDi : in slv(15 downto 0) := X"0000";
208  drpDo : out slv(15 downto 0));
209 end entity Gth7Core;
210 
211 architecture rtl of Gth7Core is
212 
213  function getOutClkSelVal (OUT_CLK_SRC : string) return bit_vector is
214  begin
215  if (OUT_CLK_SRC = "PLLREFCLK") then
216  return "011";
217  elsif (OUT_CLK_SRC = "OUTCLKPMA") then
218  return "010";
219  elsif (OUT_CLK_SRC = "PLLDV2CLK") then
220  return "100";
221  else
222  return "000";
223  end if;
224  end function getOutClkSelVal;
225 
226  function getDataWidth (USE_8B10B : boolean; EXT_DATA_WIDTH : integer) return integer is
227  begin
228  if (USE_8B10B = false) then
229  return EXT_DATA_WIDTH;
230  else
231  return (EXT_DATA_WIDTH / 8) * 10;
232  end if;
233  end function;
234 
235  --------------------------------------------------------------------------------------------------
236  -- Constants
237  --------------------------------------------------------------------------------------------------
238  constant RX_SYSCLK_SEL_C : slv := ite(RX_PLL_G = "CPLL", "00", "11");
239  constant TX_SYSCLK_SEL_C : slv := ite(TX_PLL_G = "CPLL", "00", "11");
240 
241  constant RX_XCLK_SEL_C : string := ite(RX_BUF_EN_G, "RXREC", "RXUSR");
242  constant TX_XCLK_SEL_C : string := ite(TX_BUF_EN_G, "TXOUT", "TXUSR");
243 
244  constant RX_OUTCLK_SEL_C : bit_vector := getOutClkSelVal(RX_OUTCLK_SRC_G);
245  constant TX_OUTCLK_SEL_C : bit_vector := getOutClkSelVal(TX_OUTCLK_SRC_G);
246 
247  constant RX_DATA_WIDTH_C : integer := getDataWidth(RX_8B10B_EN_G, RX_EXT_DATA_WIDTH_G);
248  constant TX_DATA_WIDTH_C : integer := getDataWidth(TX_8B10B_EN_G, TX_EXT_DATA_WIDTH_G);
249 
250  constant WAIT_TIME_CDRLOCK_C : integer := ite(SIM_GTRESET_SPEEDUP_G = "TRUE", 16, 65520);
251 
252  constant RX_INT_DATAWIDTH_C : integer := (RX_INT_DATA_WIDTH_G/32);
253  constant TX_INT_DATAWIDTH_C : integer := (TX_INT_DATA_WIDTH_G/32);
254 
255  --------------------------------------------------------------------------------------------------
256  -- Signals
257  --------------------------------------------------------------------------------------------------
258 
259  -- CPll Reset
260  signal cPllLock : sl;
261  signal cPllReset : sl;
262  signal cPllRefClkLost : sl;
263 
264  -- Gtx CPLL Input Clocks
265  signal gtGRefClk : sl;
266  signal gtNorthRefClk0 : sl;
267  signal gtNorthRefClk1 : sl;
268  signal gtRefClk0 : sl;
269  signal gtRefClk1 : sl;
270  signal gtSouthRefClk0 : sl;
271  signal gtSouthRefClk1 : sl;
272 
273  ----------------------------
274  -- Rx Signals
275  signal rxOutClk : sl;
276  signal rxOutClkBufg : sl;
277 
278  signal rxPllLock : sl;
279  signal rxPllReset : sl;
280  signal rxPllRefClkLost : sl;
281 
282  signal gtRxReset : sl; -- GT GTRXRESET
283  signal rxResetDone : sl; -- GT RXRESETDONE
284  signal rxUserRdyInt : sl; -- GT RXUSERRDY
285 
286  signal rxUserResetInt : sl;
287  signal rxFsmResetDone : sl;
288  signal rxRstTxUserRdy : sl;
289  signal rxPmaResetDone : sl;
290 
291  signal rxRecClkStable : sl;
292  signal rxRecClkMonitorRestart : sl;
293  signal rxCdrLockCnt : integer range 0 to WAIT_TIME_CDRLOCK_C := 0;
294 
295  signal rxRunPhAlignment : sl;
296  signal rxPhaseAlignmentDone : sl;
297  signal rxAlignReset : sl;
298  signal rxDlySReset : sl; -- GT RXDLYSRESET
299  signal rxDlySResetDone : sl; -- GT RXDLYSRESETDONE
300  signal rxPhAlignDone : sl; -- GT RXPHALIGNDONE
301  signal rxSlide : sl; -- GT RXSLIDE
302  signal rxCdrLock : sl; -- GT RXCDRLOCK
303 
304  signal rxDfeAgcHold : sl;
305  signal rxDfeLfHold : sl;
306  signal rxLpmLfHold : sl;
307  signal rxLpmHfHold : sl;
308 
309  -- Rx Data
310  signal rxDataInt : slv(RX_EXT_DATA_WIDTH_G-1 downto 0);
311  signal rxDataFull : slv(63 downto 0); -- GT RXDATA
312  signal rxCharIsKFull : slv(7 downto 0); -- GT RXCHARISK
313  signal rxDispErrFull : slv(7 downto 0); -- GT RXDISPERR
314  signal rxDecErrFull : slv(7 downto 0);
315 
316 
317  ----------------------------
318  -- Tx Signals
319  signal txPllLock : sl;
320  signal txPllReset : sl;
321  signal txPllRefClkLost : sl;
322 
323  signal gtTxReset : sl; -- GT GTTXRESET
324  signal txResetDone : sl; -- GT TXRESETDONE
325  signal txUserRdyInt : sl; -- GT TXUSERRDY
326 
327  signal txFsmResetDone : sl;
328 
329  signal txResetPhAlignment : sl;
330  signal txRunPhAlignment : sl;
331  signal txPhaseAlignmentDone : sl;
332  signal txPhAlignEn : sl; -- GT TXPHALIGNEN
333  signal txDlySReset : sl; -- GT TXDLYSRESET
334  signal txDlySResetDone : sl; -- GT TXDLYSRESETDONE
335  signal txPhInit : sl; -- GT TXPHINIT
336  signal txPhInitDone : sl; -- GT TXPHINITDONE
337  signal txPhAlign : sl; -- GT TXPHALIGN
338  signal txPhAlignDone : sl; -- GT TXPHALIGNDONE
339  signal txDlyEn : sl; -- GT TXDLYEN
340 
341  -- Tx Data Signals
342  signal txDataFull : slv(63 downto 0) := (others => '0');
343  signal txCharIsKFull,
344  txCharDispMode,
345  txCharDispVal : slv(7 downto 0) := (others => '0');
346 
347  -- DRP Signals
348  signal drpMuxAddr : slv(8 downto 0);
349  signal drpMuxDo : slv(15 downto 0);
350  signal drpMuxDi : slv(15 downto 0);
351  signal drpMuxRdy : sl;
352  signal drpMuxEn : sl;
353  signal drpMuxWe : sl;
354  signal drpRstAddr : slv(8 downto 0);
355  signal drpRstDo : slv(15 downto 0);
356  signal drpRstDi : slv(15 downto 0);
357  signal drpRstRdy : sl;
358  signal drpRstEn : sl;
359  signal drpRstWe : sl;
360  signal drpRstDone : sl;
361  signal gtRxRst : sl;
362 
363 begin
364 
365  rxOutClkOut <= rxOutClkBufg;
366 
367  cPllLockOut <= cPllLock;
368 
369  --------------------------------------------------------------------------------------------------
370  -- PLL Resets. Driven from TX Rst if both use same PLL
371  --------------------------------------------------------------------------------------------------
372  cPllReset <= txPllReset when (TX_PLL_G = "CPLL") else rxPllReset when (RX_PLL_G = "CPLL") else '0';
373  qPllResetOut <= txPllReset when (TX_PLL_G = "QPLL") else rxPllReset when (RX_PLL_G = "QPLL") else '0';
374 
375  --------------------------------------------------------------------------------------------------
376  -- CPLL clock select. Only ever use 1 clock to drive cpll. Never switch clocks.
377  -- This may be unnecessary. Vivado does this for you now.
378  --------------------------------------------------------------------------------------------------
379  gtRefClk0 <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "001" else '0';
380  gtRefClk1 <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "010" else '0';
381  gtNorthRefClk0 <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "011" else '0';
382  gtNorthRefClk1 <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "100" else '0';
383  gtSouthRefClk0 <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "101" else '0';
384  gtSouthRefClk1 <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "110" else '0';
385  gtGRefClk <= cPllRefClkIn when CPLL_REFCLK_SEL_G = "111" else '0';
386 
387  --------------------------------------------------------------------------------------------------
388  -- Rx Logic
389  --------------------------------------------------------------------------------------------------
390  -- Fit GTX port sizes to selected rx external interface size
391  rxDataOut <= rxDataInt;
392  RX_DATA_8B10B_GLUE : process (rxCharIsKFull, rxDataFull, rxDecErrFull, rxDispErrFull) is
393  begin
394  if (RX_8B10B_EN_G) then
395  rxDataInt <= rxDataFull(RX_EXT_DATA_WIDTH_G-1 downto 0);
396  rxCharIsKOut <= rxCharIsKFull((RX_EXT_DATA_WIDTH_G/8)-1 downto 0);
397  rxDispErrOut <= rxDispErrFull((RX_EXT_DATA_WIDTH_G/8)-1 downto 0);
398  rxDecErrOut <= rxDecErrFull((RX_EXT_DATA_WIDTH_G/8)-1 downto 0);
399  else
400  for i in RX_EXT_DATA_WIDTH_G-1 downto 0 loop
401  if ((i-9) mod 10 = 0) then
402  rxDataInt(i) <= rxDispErrFull((i-9)/10);
403  elsif ((i-8) mod 10 = 0) then
404  rxDataInt(i) <= rxCharIsKFull((i-8)/10);
405  else
406  rxDataInt(i) <= rxDataFull(i-2*(i/10));
407  end if;
408  end loop;
409  rxCharIsKOut <= (others => '0');
410  rxDispErrOut <= (others => '0');
411  rxDecErrOut <= (others => '0');
412  end if;
413  end process RX_DATA_8B10B_GLUE;
414 
415  -- Mux proper PLL Lock signal onto rxPllLock
416  rxPllLock <= cPllLock when (RX_PLL_G = "CPLL") else qPllLockIn when (RX_PLL_G = "QPLL") else '0';
417 
418  -- Mux proper PLL RefClkLost signal on rxPllRefClkLost
419  rxPllRefClkLost <= cPllRefClkLost when (RX_PLL_G = "CPLL") else qPllRefClkLostIn when (RX_PLL_G = "QPLL") else '0';
420 
421  rxAlignReset <= '0'; -- Unused?!?
422  rxUserResetInt <= rxUserResetIn or rxAlignReset;
423  rxRstTxUserRdy <= txUserRdyInt when RX_USRCLK_SRC_G = "TXOUTCLK" else '1';
424 
425  -- Drive outputs that have internal use
426  rxUserRdyOut <= rxUserRdyInt;
427 
428  --------------------------------------------------------------------------------------------------
429  -- Rx Reset Module
430  -- 1. Reset RX PLL,
431  -- 2. Wait PLL Lock
432  -- 3. Wait recclk_stable
433  -- 4. Reset MMCM
434  -- 5. Wait MMCM Lock
435  -- 6. Assert gtRxUserRdy (gtRxUsrClk now usable)
436  -- 7. Wait gtRxResetDone
437  -- 8. Do phase alignment if necessary
438  -- 9. Wait DATA_VALID (aligned) - 100 us
439  --10. Wait 1 us, Set rxFsmResetDone.
440  --------------------------------------------------------------------------------------------------
441  Gth7RxRst_Inst : entity work.Gth7RxRst
442  generic map (
443  TPD_G => TPD_G,
444  EXAMPLE_SIMULATION => 0,
445  GT_TYPE => "GTX",
447  STABLE_CLOCK_PERIOD => getTimeRatio(STABLE_CLOCK_PERIOD_G, 1.0E-9),
449  port map (
452  SOFT_RESET => rxUserResetInt,
453  PLLREFCLKLOST => rxPllRefClkLost,
454  PLLLOCK => rxPllLock,
455  RXRESETDONE => rxResetDone, -- From GT
457  RECCLK_STABLE => rxRecClkStable, -- Asserted after 50,000 UI as per DS183
458  RECCLK_MONITOR_RESTART => rxRecClkMonitorRestart,
459  DATA_VALID => rxDataValidIn, -- From external decoder if used
460  TXUSERRDY => rxRstTxUserRdy, -- Need to know when txUserRdy
461  GTRXRESET => gtRxReset, -- To GT
463  PLL_RESET => rxPllReset,
464  RX_FSM_RESET_DONE => rxFsmResetDone,
465  RXUSERRDY => rxUserRdyInt, -- To GT
466  RUN_PHALIGNMENT => rxRunPhAlignment, -- To Phase Alignment module
467  PHALIGNMENT_DONE => rxPhaseAlignmentDone, -- From Phase Alignment module
468  RESET_PHALIGNMENT => open, -- For manual phase align
469  RXDFEAGCHOLD => rxDfeAgcHold, -- Explore using these later
470  RXDFELFHOLD => rxDfeLfHold,
471  RXLPMLFHOLD => rxLpmLfHold,
472  RXLPMHFHOLD => rxLpmHfHold,
473  RETRY_COUNTER => open);
474 
475  --------------------------------------------------------------------------------------------------
476  -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic.
477  --------------------------------------------------------------------------------------------------
478  RstSync_RxResetDone : entity work.RstSync
479  generic map (
480  TPD_G => TPD_G,
481  IN_POLARITY_G => '0',
482  OUT_POLARITY_G => '0')
483  port map (
484  clk => rxUsrClkIn,
485  asyncRst => rxFsmResetDone,
486  syncRst => rxResetDoneOut); -- Output
487 
488  -------------------------------------------------------------------------------------------------
489  -- Recovered clock monitor
490  -------------------------------------------------------------------------------------------------
491  BUFG_RX_OUT_CLK : BUFG
492  port map (
493  I => rxOutClk,
494  O => rxOutClkBufg);
495 
496  GTX7_RX_REC_CLK_MONITOR_GEN : if (RX_BUF_EN_G = false) generate
497  Gth7RecClkMonitor_Inst : entity work.Gth7RecClkMonitor
498  generic map (
499  COUNTER_UPPER_VALUE => 15,
501  CLOCK_PULSES => 164,
502  EXAMPLE_SIMULATION => ite(SIMULATION_G, 1, 0))
503  port map (
504  GT_RST => gtRxReset,
506  RX_REC_CLK0 => rxOutClkBufg, -- Only works if rxOutClkOut fed back on rxUsrClkIn through bufg
508  PLL_LK_DET => rxPllLock,
509  RECCLK_STABLE => rxRecClkStable,
510  EXEC_RESTART => rxRecClkMonitorRestart);
511  end generate;
512 
513  RX_NO_RECCLK_MON_GEN : if (RX_BUF_EN_G) generate
514  rxRecClkMonitorRestart <= '0';
515  process(stableClkIn)
516  begin
517  if rising_edge(stableClkIn) then
518  if gtRxReset = '1' then
519  rxRecClkStable <= '0' after TPD_G;
520  rxCdrLockCnt <= 0 after TPD_G;
521  elsif rxRecClkStable = '0' then
522  if rxCdrLockCnt = WAIT_TIME_CDRLOCK_C then
523  rxRecClkStable <= '1' after TPD_G;
524  rxCdrLockCnt <= rxCdrLockCnt after TPD_G;
525  else
526  rxCdrLockCnt <= rxCdrLockCnt + 1 after TPD_G;
527  end if;
528  end if;
529  end if;
530  end process;
531  end generate RX_NO_RECCLK_MON_GEN;
532 
533  -------------------------------------------------------------------------------------------------
534  -- Phase alignment needed when rx buffer is disabled
535  -- Use normal Auto Phase Align module when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=false
536  -- Use special fixed latency aligner when RX_BUF_EN_G=false and RX_ALIGN_FIXED_LAT_G=true
537  -------------------------------------------------------------------------------------------------
538  RX_AUTO_ALIGN_GEN : if (RX_BUF_EN_G = false and RX_ALIGN_MODE_G = "GT") generate
539  Gth7AutoPhaseAligner_Rx : entity work.Gth7AutoPhaseAligner
540  generic map (
541  GT_TYPE => "GTX")
542  port map (
544  RUN_PHALIGNMENT => rxRunPhAlignment, -- From RxRst
545  PHASE_ALIGNMENT_DONE => rxPhaseAlignmentDone, -- To RxRst
546  PHALIGNDONE => rxPhAlignDone, -- From gt
547  DLYSRESET => rxDlySReset, -- To gt
548  DLYSRESETDONE => rxDlySResetDone, -- From gt
549  RECCLKSTABLE => rxRecClkStable);
550  rxSlide <= rxSlideIn; -- User controlled rxSlide
551  end generate;
552 
553  RX_FIX_LAT_ALIGN_GEN : if (RX_BUF_EN_G = false and RX_ALIGN_MODE_G = "FIXED_LAT") generate
554  Gth7RxFixedLatPhaseAligner_Inst : entity work.Gth7RxFixedLatPhaseAligner
555  generic map (
556  TPD_G => TPD_G,
563  port map (
564  rxUsrClk => rxUsrClkIn,
565  rxRunPhAlignment => rxRunPhAlignment,
566  rxData => rxDataInt,
567  rxReset => rxAlignReset,
568  rxSlide => rxSlide,
569  rxPhaseAlignmentDone => rxPhaseAlignmentDone);
570  rxDlySReset <= '0';
571  end generate;
572 
573  RX_NO_ALIGN_GEN : if (RX_BUF_EN_G = true or RX_ALIGN_MODE_G = "NONE") generate
574  rxPhaseAlignmentDone <= '1';
575  rxSlide <= rxSlideIn;
576  rxDlySReset <= '0';
577  end generate;
578 
579  --------------------------------------------------------------------------------------------------
580  -- Tx Logic
581  --------------------------------------------------------------------------------------------------
582 
583  TX_DATA_8B10B_GLUE : process (txCharIsKIn, txDataIn) is
584  begin
585  if (TX_8B10B_EN_G) then
586  txDataFull <= (others => '0');
587  txDataFull(TX_EXT_DATA_WIDTH_G-1 downto 0) <= txDataIn;
588  txCharIsKFull <= (others => '0');
589  txCharIsKFull((TX_EXT_DATA_WIDTH_G/8)-1 downto 0) <= txCharIsKIn;
590  txCharDispMode <= (others => '0');
591  txCharDispVal <= (others => '0');
592  else
593  for i in TX_EXT_DATA_WIDTH_G-1 downto 0 loop
594  if ((i-9) mod 10 = 0) then
595  txCharDispMode((i-9)/10) <= txDataIn(i);
596  elsif ((i-8) mod 10 = 0) then
597  txCharDispVal((i-8)/10) <= txDataIn(i);
598  else
599  txDataFull(i-2*(i/10)) <= txDataIn(i);
600  end if;
601  end loop;
602  txCharIsKFull <= (others => '0');
603  end if;
604  end process TX_DATA_8B10B_GLUE;
605 
606  -- Mux proper PLL Lock signal onto txPllLock
607  txPllLock <= cPllLock when (TX_PLL_G = "CPLL") else qPllLockIn when (TX_PLL_G = "QPLL") else '0';
608 
609  -- Mux proper PLL RefClkLost signal on txPllRefClkLost
610  txPllRefClkLost <= cPllRefClkLost when (TX_PLL_G = "CPLL") else qPllRefClkLostIn when (TX_PLL_G = "QPLL") else '0';
611 
612  -- Drive outputs that have internal use
613  txUserRdyOut <= txUserRdyInt;
614 
615  --------------------------------------------------------------------------------------------------
616  -- Tx Reset Module
617  --------------------------------------------------------------------------------------------------
618  Gth7TxRst_Inst : entity work.Gth7TxRst
619  generic map (
620  TPD_G => TPD_G,
621  GT_TYPE => "GTX",
622  STABLE_CLOCK_PERIOD => getTimeRatio(STABLE_CLOCK_PERIOD_G, 1.0E-9),
624  port map (
628  PLLREFCLKLOST => txPllRefClkLost,
629  PLLLOCK => txPllLock,
630  TXRESETDONE => txResetDone, -- From GT
632  GTTXRESET => gtTxReset,
634  PLL_RESET => txPllReset,
635  TX_FSM_RESET_DONE => txFsmResetDone,
636  TXUSERRDY => txUserRdyInt,
637  RUN_PHALIGNMENT => txRunPhAlignment,
638  RESET_PHALIGNMENT => txResetPhAlignment, -- Used for manual alignment
639  PHALIGNMENT_DONE => txPhaseAlignmentDone,
640  RETRY_COUNTER => open); -- Might be interesting to look at
641 
642  --------------------------------------------------------------------------------------------------
643  -- Synchronize rxFsmResetDone to rxUsrClk to use as reset for external logic.
644  --------------------------------------------------------------------------------------------------
645  RstSync_Tx : entity work.RstSync
646  generic map (
647  TPD_G => TPD_G,
648  IN_POLARITY_G => '0',
649  OUT_POLARITY_G => '0')
650  port map (
651  clk => txUsrClkIn,
652  asyncRst => txFsmResetDone,
653  syncRst => txResetDoneOut); -- Output
654 
655  -------------------------------------------------------------------------------------------------
656  -- Tx Phase aligner
657  -- Only used when bypassing buffer
658  -------------------------------------------------------------------------------------------------
659  TxAutoPhaseAlignGen : if (TX_BUF_EN_G = false and TX_PHASE_ALIGN_G = "AUTO") generate
660 
661  PhaseAlign_Tx : entity work.Gth7AutoPhaseAligner
662  generic map (
663  GT_TYPE => "GTX")
664  port map (
666  RUN_PHALIGNMENT => txRunPhAlignment,
667  PHASE_ALIGNMENT_DONE => txPhaseAlignmentDone,
668  PHALIGNDONE => txPhAlignDone,
669  DLYSRESET => txDlySReset,
670  DLYSRESETDONE => txDlySResetDone,
671  RECCLKSTABLE => '1');
672  txPhAlignEn <= '0'; -- Auto Mode
673  txPhInit <= '0';
674  txPhAlign <= '0';
675  txDlyEn <= '0';
676  end generate TxAutoPhaseAlignGen;
677 
678  TxManualPhaseAlignGen : if (TX_BUF_EN_G = false and TX_PHASE_ALIGN_G = "MANUAL") generate
679  Gth7TxManualPhaseAligner_1 : entity work.Gth7TxManualPhaseAligner
680  generic map (
681  TPD_G => TPD_G)
682  port map (
684  resetPhAlignment => txResetPhAlignment,
685  runPhAlignment => txRunPhAlignment,
686  phaseAlignmentDone => txPhaseAlignmentDone,
687  gtTxDlySReset => txDlySReset,
688  gtTxDlySResetDone => txDlySResetDone,
689  gtTxPhInit => txPhInit,
690  gtTxPhInitDone => txPhInitDone,
691  gtTxPhAlign => txPhAlign,
692  gtTxPhAlignDone => txPhAlignDone,
693  gtTxDlyEn => txDlyEn);
694  txPhAlignEn <= '1';
695  end generate TxManualPhaseAlignGen;
696 
697  NoTxPhaseAlignGen : if (TX_BUF_EN_G = true or TX_PHASE_ALIGN_G = "NONE") generate
698  txPhaseAlignmentDone <= '1';
699  txDlySReset <= '0';
700  txPhInit <= '0';
701  txPhAlign <= '0';
702  txDlyEn <= '0';
703  txPhAlignEn <= '0';
704  end generate NoTxPhaseAlignGen;
705 
706  --------------------------------------------------------------------------------------------------
707  -- GTX Instantiation
708  --------------------------------------------------------------------------------------------------
709  gthe2_i : GTHE2_CHANNEL
710  generic map(
711  --_______________________ Simulation-Only Attributes ___________________
712  SIM_RECEIVER_DETECT_PASS => ("TRUE"),
713  SIM_RESET_SPEEDUP => (SIM_GTRESET_SPEEDUP_G),
714  SIM_TX_EIDLE_DRIVE_LEVEL => ("X"),
715  SIM_CPLLREFCLK_SEL => (CPLL_REFCLK_SEL_G), --("001"), -- GTPREFCLK0
716  SIM_VERSION => (SIM_VERSION_G),
717  ------------------RX Byte and Word Alignment Attributes---------------
718  ALIGN_COMMA_DOUBLE => ALIGN_COMMA_DOUBLE_G,
719  ALIGN_COMMA_ENABLE => ALIGN_COMMA_ENABLE_G,
720  ALIGN_COMMA_WORD => ALIGN_COMMA_WORD_G,
721  ALIGN_MCOMMA_DET => ALIGN_MCOMMA_DET_G,
722  ALIGN_MCOMMA_VALUE => ALIGN_MCOMMA_VALUE_G,
723  ALIGN_PCOMMA_DET => ALIGN_PCOMMA_DET_G,
724  ALIGN_PCOMMA_VALUE => ALIGN_PCOMMA_VALUE_G,
725  SHOW_REALIGN_COMMA => SHOW_REALIGN_COMMA_G,
726  RXSLIDE_AUTO_WAIT => 7,
727  RXSLIDE_MODE => RXSLIDE_MODE_G,
728  RX_SIG_VALID_DLY => 10,
729  ------------------RX 8B/10B Decoder Attributes---------------
730  -- These don't really matter since RX 8B10B is disabled
731  RX_DISPERR_SEQ_MATCH => RX_DISPERR_SEQ_MATCH_G,
732  DEC_MCOMMA_DETECT => DEC_MCOMMA_DETECT_G,
733  DEC_PCOMMA_DETECT => DEC_PCOMMA_DETECT_G,
734  DEC_VALID_COMMA_ONLY => DEC_VALID_COMMA_ONLY_G,
735  ------------------------RX Clock Correction Attributes----------------------
736  CBCC_DATA_SOURCE_SEL => CBCC_DATA_SOURCE_SEL_G,
737  CLK_COR_SEQ_2_USE => CLK_COR_SEQ_2_USE_G,
738  CLK_COR_KEEP_IDLE => CLK_COR_KEEP_IDLE_G,
739  CLK_COR_MAX_LAT => CLK_COR_MAX_LAT_G,
740  CLK_COR_MIN_LAT => CLK_COR_MIN_LAT_G,
741  CLK_COR_PRECEDENCE => CLK_COR_PRECEDENCE_G,
742  CLK_COR_REPEAT_WAIT => CLK_COR_REPEAT_WAIT_G,
743  CLK_COR_SEQ_LEN => CLK_COR_SEQ_LEN_G,
744  CLK_COR_SEQ_1_ENABLE => CLK_COR_SEQ_1_ENABLE_G,
745  CLK_COR_SEQ_1_1 => CLK_COR_SEQ_1_1_G, -- UG476 pg 249
746  CLK_COR_SEQ_1_2 => CLK_COR_SEQ_1_2_G,
747  CLK_COR_SEQ_1_3 => CLK_COR_SEQ_1_3_G,
748  CLK_COR_SEQ_1_4 => CLK_COR_SEQ_1_4_G,
749  CLK_CORRECT_USE => CLK_CORRECT_USE_G,
750  CLK_COR_SEQ_2_ENABLE => CLK_COR_SEQ_2_ENABLE_G,
751  CLK_COR_SEQ_2_1 => CLK_COR_SEQ_2_1_G, -- UG476 pg 249
752  CLK_COR_SEQ_2_2 => CLK_COR_SEQ_2_2_G,
753  CLK_COR_SEQ_2_3 => CLK_COR_SEQ_2_3_G,
754  CLK_COR_SEQ_2_4 => CLK_COR_SEQ_2_4_G,
755  ------------------------RX Channel Bonding Attributes----------------------
756  CHAN_BOND_KEEP_ALIGN => CHAN_BOND_KEEP_ALIGN_G,
757  CHAN_BOND_MAX_SKEW => CHAN_BOND_MAX_SKEW_G,
758  CHAN_BOND_SEQ_LEN => CHAN_BOND_SEQ_LEN_G,
759  CHAN_BOND_SEQ_1_1 => CHAN_BOND_SEQ_1_1_G,
760  CHAN_BOND_SEQ_1_2 => CHAN_BOND_SEQ_1_2_G,
761  CHAN_BOND_SEQ_1_3 => CHAN_BOND_SEQ_1_3_G,
762  CHAN_BOND_SEQ_1_4 => CHAN_BOND_SEQ_1_4_G,
763  CHAN_BOND_SEQ_1_ENABLE => CHAN_BOND_SEQ_1_ENABLE_G,
764  CHAN_BOND_SEQ_2_1 => CHAN_BOND_SEQ_2_1_G,
765  CHAN_BOND_SEQ_2_2 => CHAN_BOND_SEQ_2_2_G,
766  CHAN_BOND_SEQ_2_3 => CHAN_BOND_SEQ_2_3_G,
767  CHAN_BOND_SEQ_2_4 => CHAN_BOND_SEQ_2_4_G,
768  CHAN_BOND_SEQ_2_ENABLE => CHAN_BOND_SEQ_2_ENABLE_G,
769  CHAN_BOND_SEQ_2_USE => CHAN_BOND_SEQ_2_USE_G,
770  FTS_DESKEW_SEQ_ENABLE => FTS_DESKEW_SEQ_ENABLE_G,
771  FTS_LANE_DESKEW_CFG => FTS_LANE_DESKEW_CFG_G,
772  FTS_LANE_DESKEW_EN => FTS_LANE_DESKEW_EN_G,
773  ---------------------------RX Margin Analysis Attributes----------------------------
774  ES_CONTROL => ("000000"),
775  ES_ERRDET_EN => ("FALSE"),
776  ES_EYE_SCAN_EN => ("TRUE"),
777  ES_HORZ_OFFSET => (x"000"),
778  ES_PMA_CFG => ("0000000000"),
779  ES_PRESCALE => ("00000"),
780  ES_QUALIFIER => (x"00000000000000000000"),
781  ES_QUAL_MASK => (x"00000000000000000000"),
782  ES_SDATA_MASK => (x"00000000000000000000"),
783  ES_VERT_OFFSET => ("000000000"),
784  -------------------------FPGA RX Interface Attributes-------------------------
785  RX_DATA_WIDTH => (RX_DATA_WIDTH_C),
786  ---------------------------PMA Attributes----------------------------
787  OUTREFCLK_SEL_INV => ("11"), -- ??
788  PMA_RSV => PMA_RSV_G, --
789  PMA_RSV2 => (x"1C00000A"),
790  PMA_RSV3 => ("00"),
791  PMA_RSV4 => (x"0008"),
792  RX_BIAS_CFG => ("000011000000000000010000"),
793  DMONITOR_CFG => (x"000A00"),
794  RX_CM_SEL => ("11"),
795  RX_CM_TRIM => RX_CM_TRIM_G,
796  RX_DEBUG_CFG => ("00000000000000"),
797  RX_OS_CFG => RX_OS_CFG_G,
798  TERM_RCAL_CFG => ("100001000010000"),
799  TERM_RCAL_OVRD => ("000"),
800  TST_RSV => (x"00000000"),
801  RX_CLK25_DIV => RX_CLK25_DIV_G, --(5),
802  TX_CLK25_DIV => TX_CLK25_DIV_G, --(5),
803  UCODEER_CLR => ('0'),
804  ---------------------------PCI Express Attributes----------------------------
805  PCS_PCIE_EN => ("FALSE"),
806  ---------------------------PCS Attributes----------------------------
807  PCS_RSVD_ATTR => ite(RX_ALIGN_MODE_G = "FIXED_LAT", X"000000000002", X"000000000000"), --UG476 pg 241
808  -------------RX Buffer Attributes------------
809  RXBUF_ADDR_MODE => RX_BUF_ADDR_MODE_G,
810  RXBUF_EIDLE_HI_CNT => ("1000"),
811  RXBUF_EIDLE_LO_CNT => ("0000"),
812  RXBUF_EN => toString(RX_BUF_EN_G),
813  RX_BUFFER_CFG => ("000000"),
814  RXBUF_RESET_ON_CB_CHANGE => ("TRUE"),
815  RXBUF_RESET_ON_COMMAALIGN => ("FALSE"),
816  RXBUF_RESET_ON_EIDLE => ("FALSE"),
817  RXBUF_RESET_ON_RATE_CHANGE => ("TRUE"),
818  RXBUFRESET_TIME => ("00001"),
819  RXBUF_THRESH_OVFLW => (61),
820  RXBUF_THRESH_OVRD => ("FALSE"),
821  RXBUF_THRESH_UNDFLW => (4),
822  RXDLY_CFG => (x"001F"),
823  RXDLY_LCFG => (x"030"),
824  RXDLY_TAP_CFG => (x"0000"),
825  RXPH_CFG => (x"000000"),
826  RXPHDLY_CFG => (x"084020"),
827  RXPH_MONITOR_SEL => ("00000"),
828  RX_XCLK_SEL => RX_XCLK_SEL_C,
829  RX_DDI_SEL => ("000000"),
830  RX_DEFER_RESET_BUF_EN => ("TRUE"),
831  -----------------------CDR Attributes-------------------------
832  RXCDR_CFG => RXCDR_CFG_G,
833  RXCDR_FR_RESET_ON_EIDLE => ('0'),
834  RXCDR_HOLD_DURING_EIDLE => ('0'),
835  RXCDR_PH_RESET_ON_EIDLE => ('0'),
836  RXCDR_LOCK_CFG => ("010101"),
837  -------------------RX Initialization and Reset Attributes-------------------
838  RXCDRFREQRESET_TIME => ("00001"),
839  RXCDRPHRESET_TIME => ("00001"),
840  RXISCANRESET_TIME => ("00001"),
841  RXPCSRESET_TIME => ("00001"),
842  RXPMARESET_TIME => ("00011"), -- ! Check this
843  -------------------RX OOB Signaling Attributes-------------------
844  RXOOB_CFG => ("0000110"),
845  -------------------------RX Gearbox Attributes---------------------------
846  RXGEARBOX_EN => ("FALSE"),
847  GEARBOX_MODE => ("000"),
848  -------------------------PRBS Detection Attribute-----------------------
849  RXPRBS_ERR_LOOPBACK => ('0'),
850  -------------Power-Down Attributes----------
851  PD_TRANS_TIME_FROM_P2 => (x"03c"),
852  PD_TRANS_TIME_NONE_P2 => (x"3c"),
853  PD_TRANS_TIME_TO_P2 => (x"64"),
854  -------------RX OOB Signaling Attributes----------
855  SAS_MAX_COM => (64),
856  SAS_MIN_COM => (36),
857  SATA_BURST_SEQ_LEN => ("1111"),
858  SATA_BURST_VAL => ("100"),
859  SATA_EIDLE_VAL => ("100"),
860  SATA_MAX_BURST => (8),
861  SATA_MAX_INIT => (21),
862  SATA_MAX_WAKE => (7),
863  SATA_MIN_BURST => (4),
864  SATA_MIN_INIT => (12),
865  SATA_MIN_WAKE => (4),
866  -------------RX Fabric Clock Output Control Attributes----------
867  TRANS_TIME_RATE => (x"0E"),
868  --------------TX Buffer Attributes----------------
869  TXBUF_EN => toString(TX_BUF_EN_G),
870  TXBUF_RESET_ON_RATE_CHANGE => ("TRUE"),
871  TXDLY_CFG => (x"001F"),
872  TXDLY_LCFG => (x"030"),
873  TXDLY_TAP_CFG => (x"0000"),
874  TXPH_CFG => (x"0780"),
875  TXPHDLY_CFG => (x"084020"),
876  TXPH_MONITOR_SEL => ("00000"),
877  TX_XCLK_SEL => TX_XCLK_SEL_C,
878  -------------------------FPGA TX Interface Attributes-------------------------
879  TX_DATA_WIDTH => (TX_DATA_WIDTH_C),
880  -------------------------TX Configurable Driver Attributes-------------------------
881  TX_DEEMPH0 => ("00000"),
882  TX_DEEMPH1 => ("00000"),
883  TX_EIDLE_ASSERT_DELAY => ("110"),
884  TX_EIDLE_DEASSERT_DELAY => ("100"),
885  TX_LOOPBACK_DRIVE_HIZ => ("FALSE"),
886  TX_MAINCURSOR_SEL => ('0'),
887  TX_DRIVE_MODE => ("DIRECT"),
888  TX_MARGIN_FULL_0 => ("1001110"),
889  TX_MARGIN_FULL_1 => ("1001001"),
890  TX_MARGIN_FULL_2 => ("1000101"),
891  TX_MARGIN_FULL_3 => ("1000010"),
892  TX_MARGIN_FULL_4 => ("1000000"),
893  TX_MARGIN_LOW_0 => ("1000110"),
894  TX_MARGIN_LOW_1 => ("1000100"),
895  TX_MARGIN_LOW_2 => ("1000010"),
896  TX_MARGIN_LOW_3 => ("1000000"),
897  TX_MARGIN_LOW_4 => ("1000000"),
898  -------------------------TX Gearbox Attributes--------------------------
899  TXGEARBOX_EN => ("FALSE"),
900  -------------------------TX Initialization and Reset Attributes--------------------------
901  TXPCSRESET_TIME => ("00001"),
902  TXPMARESET_TIME => ("00001"),
903  -------------------------TX Receiver Detection Attributes--------------------------
904  TX_RXDETECT_CFG => (x"1832"),
905  TX_RXDETECT_REF => ("100"),
906  ----------------------------CPLL Attributes----------------------------
907  CPLL_CFG => (x"00BC07DC"),
908  CPLL_FBDIV => (CPLL_FBDIV_G), -- 4
909  CPLL_FBDIV_45 => (CPLL_FBDIV_45_G), -- 5
910  CPLL_INIT_CFG => (x"00001E"),
911  CPLL_LOCK_CFG => (x"01E8"),
912  CPLL_REFCLK_DIV => (CPLL_REFCLK_DIV_G), -- 1
913  RXOUT_DIV => (RXOUT_DIV_G), -- 2
914  TXOUT_DIV => (TXOUT_DIV_G), -- 2
915  SATA_CPLL_CFG => ("VCO_3000MHZ"),
916  --------------RX Initialization and Reset Attributes-------------
917  RXDFELPMRESET_TIME => ("0001111"),
918  --------------RX Equalizer Attributes-------------
919  RXLPM_HF_CFG => ("00001000000000"),
920  RXLPM_LF_CFG => ("001001000000000000"),
921  RX_DFE_GAIN_CFG => (x"0020C0"),
922  RX_DFE_H2_CFG => ("000000000000"),
923  RX_DFE_H3_CFG => ("000001000000"),
924  RX_DFE_H4_CFG => ("00011100000"),
925  RX_DFE_H5_CFG => ("00011100000"),
926  RX_DFE_KL_CFG => ("001000001000000000000001100010000"),
927  RX_DFE_LPM_CFG => RX_DFE_LPM_CFG_G,
928  RX_DFE_LPM_HOLD_DURING_EIDLE => ('0'),
929  RX_DFE_UT_CFG => ("00011100000000000"),
930  RX_DFE_VP_CFG => ("00011101010100011"),
931  -------------------------Power-Down Attributes-------------------------
932  RX_CLKMUX_PD => ('1'),
933  TX_CLKMUX_PD => ('1'),
934  -------------------------FPGA RX Interface Attribute-------------------------
935  RX_INT_DATAWIDTH => RX_INT_DATAWIDTH_C,
936  -------------------------FPGA TX Interface Attribute-------------------------
937  TX_INT_DATAWIDTH => TX_INT_DATAWIDTH_C,
938  ------------------TX Configurable Driver Attributes---------------
939  TX_QPI_STATUS_EN => ('0'),
940  ------------------ JTAG Attributes ---------------
941  ACJTAG_DEBUG_MODE => ('0'),
942  ACJTAG_MODE => ('0'),
943  ACJTAG_RESET => ('0'),
944  ADAPT_CFG0 => (x"00C10"),
945  CFOK_CFG => (x"24800040E80"),
946  CFOK_CFG2 => (x"20"),
947  CFOK_CFG3 => (x"20"),
948  ES_CLK_PHASE_SEL => ('0'),
949  PMA_RSV5 => (x"0"),
950  RESET_POWERSAVE_DISABLE => ('0'),
951  USE_PCS_CLK_PHASE_SEL => ('0'),
952  A_RXOSCALRESET => ('0'),
953  ------------------ RX Phase Interpolator Attributes---------------
954  RXPI_CFG0 => ("00"),
955  RXPI_CFG1 => ("00"),
956  RXPI_CFG2 => ("00"),
957  RXPI_CFG3 => ("11"),
958  RXPI_CFG4 => ('1'),
959  RXPI_CFG5 => ('1'),
960  RXPI_CFG6 => ("001"),
961  --------------RX Decision Feedback Equalizer(DFE)-------------
962  RX_DFELPM_CFG0 => ("0110"),
963  RX_DFELPM_CFG1 => ('0'),
964  RX_DFELPM_KLKH_AGC_STUP_EN => ('1'),
965  RX_DFE_AGC_CFG0 => ("00"),
966  RX_DFE_AGC_CFG1 => ("100"),
967  RX_DFE_AGC_CFG2 => ("0000"),
968  RX_DFE_AGC_OVRDEN => ('1'),
969  RX_DFE_H6_CFG => (x"020"),
970  RX_DFE_H7_CFG => (x"020"),
971  RX_DFE_KL_LPM_KH_CFG0 => ("01"),
972  RX_DFE_KL_LPM_KH_CFG1 => ("010"),
973  RX_DFE_KL_LPM_KH_CFG2 => ("0010"),
974  RX_DFE_KL_LPM_KH_OVRDEN => ('1'),
975  RX_DFE_KL_LPM_KL_CFG0 => ("10"),
976  RX_DFE_KL_LPM_KL_CFG1 => ("010"),
977  RX_DFE_KL_LPM_KL_CFG2 => ("0010"),
978  RX_DFE_KL_LPM_KL_OVRDEN => ('1'),
979  RX_DFE_ST_CFG => (x"00E100000C003F"),
980  ------------------ TX Phase Interpolator Attributes---------------
981  TXPI_CFG0 => ("00"),
982  TXPI_CFG1 => ("00"),
983  TXPI_CFG2 => ("00"),
984  TXPI_CFG3 => ('0'),
985  TXPI_CFG4 => ('0'),
986  TXPI_CFG5 => ("100"),
987  TXPI_GREY_SEL => ('0'),
988  TXPI_INVSTROBE_SEL => ('0'),
989  TXPI_PPMCLK_SEL => ("TXUSRCLK2"),
990  TXPI_PPM_CFG => (x"00"),
991  TXPI_SYNFREQ_PPM => ("000"),
992  TX_RXDETECT_PRECHARGE_TIME => (x"155CC"),
993  ------------------ LOOPBACK Attributes---------------
994  LOOPBACK_CFG => ('0'),
995  ------------------RX OOB Signalling Attributes---------------
996  RXOOB_CLK_CFG => ("PMA"),
997  ------------------ CDR Attributes ---------------
998  RXOSCALRESET_TIME => ("00011"),
999  RXOSCALRESET_TIMEOUT => ("00000"),
1000  ------------------TX OOB Signalling Attributes---------------
1001  TXOOB_CFG => '0',
1002  ------------------RX Buffer Attributes---------------
1003  RXSYNC_MULTILANE => '0',
1004  RXSYNC_OVRD => '0',
1005  RXSYNC_SKIP_DA => '0',
1006  ------------------TX Buffer Attributes---------------
1007  TXSYNC_MULTILANE => '0',
1008  TXSYNC_OVRD => '0',
1009  TXSYNC_SKIP_DA => '0')
1010  port map(
1011  ---------------------------------- Channel ---------------------------------
1012  CFGRESET => '0',
1013  DMONITOROUT => open,
1014  GTRESETSEL => '0', -- Sequential Mode
1015  GTRSVD => "0000000000000000",
1016  QPLLCLK => qPllClkIn,
1017  QPLLREFCLK => qPllRefClkIn,
1018  RESETOVRD => '0',
1019  ---------------- Channel - Dynamic Reconfiguration Port (DRP) --------------
1020  DRPADDR => drpMuxAddr,
1021  DRPCLK => stableClkIn,
1022  DRPDI => drpMuxDi,
1023  DRPDO => drpMuxDo,
1024  DRPEN => drpMuxEn,
1025  DRPRDY => drpMuxRdy,
1026  DRPWE => drpMuxWe,
1027  ------------------------- Channel - Ref Clock Ports ------------------------
1028  GTGREFCLK => gtGRefClk,
1029  GTNORTHREFCLK0 => gtNorthRefClk0,
1030  GTNORTHREFCLK1 => gtNorthRefClk1,
1031  GTREFCLK0 => gtRefClk0,
1032  GTREFCLK1 => gtRefClk1,
1033  GTREFCLKMONITOR => open,
1034  GTSOUTHREFCLK0 => gtSouthRefClk0,
1035  GTSOUTHREFCLK1 => gtSouthRefClk1,
1036  -------------------------------- Channel PLL -------------------------------
1037  CPLLFBCLKLOST => open,
1038  CPLLLOCK => cPllLock,
1039  CPLLLOCKDETCLK => stableClkIn,
1040  CPLLLOCKEN => '1',
1041  CPLLPD => '0',
1042  CPLLREFCLKLOST => cPllRefClkLost,
1043  CPLLREFCLKSEL => to_stdlogicvector(CPLL_REFCLK_SEL_G),
1044  CPLLRESET => cPllReset,
1045  ------------------------------- Eye Scan Ports -----------------------------
1046  EYESCANDATAERROR => open,
1047  EYESCANMODE => '0',
1048  EYESCANRESET => '0',
1049  EYESCANTRIGGER => '0',
1050  ------------------------ Loopback and Powerdown Ports ----------------------
1051  LOOPBACK => loopbackIn,
1052  RXPD => rxPowerDown,
1053  TXPD => txPowerDown,
1054  ----------------------------- PCS Reserved Ports ---------------------------
1055  PCSRSVDIN => "0000000000000000",
1056  PCSRSVDIN2 => "00000",
1057  PCSRSVDOUT => open,
1058  ----------------------------- PMA Reserved Ports ---------------------------
1059  PMARSVDIN => "00000",
1060  ------------------------------- Receive Ports ------------------------------
1061  RXQPIEN => '0',
1062  RXQPISENN => open,
1063  RXQPISENP => open,
1064  RXSYSCLKSEL => RX_SYSCLK_SEL_C,
1065  RXUSERRDY => rxUserRdyInt,
1066  CLKRSVD0 => '0',
1067  CLKRSVD1 => '0',
1068  DMONFIFORESET => '0',
1069  DMONITORCLK => '0',
1070  RXPMARESETDONE => rxPmaResetDone,
1071  RXRATEMODE => '0',
1072  SIGVALIDCLK => '0',
1073  -------------- Receive Ports - 64b66b and 64b67b Gearbox Ports -------------
1074  RXDATAVALID => open,
1075  RXGEARBOXSLIP => '0',
1076  RXHEADER => open,
1077  RXHEADERVALID => open,
1078  RXSTARTOFSEQ => open,
1079  ----------------------- Receive Ports - 8b10b Decoder ----------------------
1080  RX8B10BEN => toSl(RX_8B10B_EN_G),
1081  RXCHARISCOMMA => open,
1082  RXCHARISK => rxCharIsKFull,
1083  RXDISPERR => rxDispErrFull,
1084  RXNOTINTABLE => rxDecErrFull,
1085  ------------------- Receive Ports - Channel Bonding Ports ------------------
1086  RXCHANBONDSEQ => open,
1087  RXCHBONDEN => toSl(RX_CHAN_BOND_EN_G),
1088  RXCHBONDI => rxChBondIn, --"00000",
1089  RXCHBONDLEVEL => rxChBondLevelIn, --"000",
1090  RXCHBONDMASTER => toSl(RX_CHAN_BOND_MASTER_G),
1091  RXCHBONDO => rxChBondOut,
1092  RXCHBONDSLAVE => toSl(RX_CHAN_BOND_MASTER_G = false),
1093  ------------------- Receive Ports - Channel Bonding Ports -----------------
1094  RXCHANISALIGNED => open,
1095  RXCHANREALIGN => open,
1096  ------------------- Receive Ports - Clock Correction Ports -----------------
1097  RXCLKCORCNT => open,
1098  --------------- Receive Ports - Comma Detection and Alignment --------------
1099  RXBYTEISALIGNED => open,
1100  RXBYTEREALIGN => open,
1101  RXCOMMADET => open,
1102  RXCOMMADETEN => toSl(RX_ALIGN_MODE_G /= "NONE"), -- Enables RXSLIDE
1103  RXMCOMMAALIGNEN => toSl(ALIGN_MCOMMA_EN_G = '1' and (RX_ALIGN_MODE_G = "GT")),
1104  RXPCOMMAALIGNEN => toSl(ALIGN_PCOMMA_EN_G = '1' and (RX_ALIGN_MODE_G = "GT")),
1105  RXSLIDE => rxSlide,
1106  ----------------------- Receive Ports - PRBS Detection ---------------------
1107  RXPRBSCNTRESET => '0',
1108  RXPRBSERR => open,
1109  RXPRBSSEL => "000",
1110  ------------------- Receive Ports - RX Data Path interface -----------------
1111  GTRXRESET => gtRxReset,
1112  RXDATA => rxDataFull,
1113  RXOUTCLK => rxOutClk,
1114  RXOUTCLKFABRIC => open,
1115  RXOUTCLKPCS => open,
1116  RXOUTCLKSEL => to_stdlogicvector(RX_OUTCLK_SEL_C), -- Selects rx recovered clk for rxoutclk
1117  RXPCSRESET => '0', -- Don't bother with component level resets
1118  RXPMARESET => '0',
1119  RXUSRCLK => rxUsrClkIn,
1120  RXUSRCLK2 => rxUsrClk2In,
1121  --------------------- Receive Ports - RX Equalizer Ports -------------------
1122  RXDFESLIDETAPSTARTED => open,
1123  RXDFESLIDETAPSTROBEDONE => open,
1124  RXDFESLIDETAPSTROBESTARTED => open,
1125  ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) -----------
1126  RXADAPTSELTEST => (others => '0'),
1127  RXDFEAGCHOLD => rxDfeAgcHold,
1128  RXDFEAGCOVRDEN => '0',
1129  RXDFEAGCTRL => "01000",
1130  RXDFECM1EN => '0',
1131  RXDFELFHOLD => rxDfeLfHold,
1132  RXDFELFOVRDEN => RXDFELFOVRDEN_G,
1133  RXDFELPMRESET => '0',
1134  RXDFESLIDETAP => "00000",
1135  RXDFESLIDETAPADAPTEN => '0',
1136  RXDFESLIDETAPHOLD => '0',
1137  RXDFESLIDETAPID => "000000",
1138  RXDFESLIDETAPINITOVRDEN => '0',
1139  RXDFESLIDETAPONLYADAPTEN => '0',
1140  RXDFESLIDETAPSTROBE => '0',
1141  RXDFESTADAPTDONE => open,
1142  RXDFETAP2HOLD => '0',
1143  RXDFETAP2OVRDEN => '0',
1144  RXDFETAP3HOLD => '0',
1145  RXDFETAP3OVRDEN => '0',
1146  RXDFETAP4HOLD => '0',
1147  RXDFETAP4OVRDEN => '0',
1148  RXDFETAP5HOLD => '0',
1149  RXDFETAP5OVRDEN => '0',
1150  RXDFETAP6HOLD => '0',
1151  RXDFETAP6OVRDEN => '0',
1152  RXDFETAP7HOLD => '0',
1153  RXDFETAP7OVRDEN => '0',
1154  RXDFEUTHOLD => '0',
1155  RXDFEUTOVRDEN => '0',
1156  RXDFEVPHOLD => '0',
1157  RXDFEVPOVRDEN => '0',
1158  RXDFEVSEN => '0',
1159  RXDFEXYDEN => RXDFEXYDEN_G,
1160  RXMONITOROUT => open,
1161  RXMONITORSEL => "00",
1162  RXOSHOLD => '0',
1163  RXOSINTCFG => "0110",
1164  RXOSINTEN => '1',
1165  RXOSINTHOLD => '0',
1166  RXOSINTID0 => "0000",
1167  RXOSINTNTRLEN => '0',
1168  RXOSINTOVRDEN => '0',
1169  RXOSINTSTARTED => open,
1170  RXOSINTSTROBE => '0',
1171  RXOSINTSTROBEDONE => open,
1172  RXOSINTSTROBESTARTED => open,
1173  RXOSINTTESTOVRDEN => '0',
1174  RXOSOVRDEN => '0',
1175  ------- Receive Ports - RX Driver,OOB signalling,Coupling and Eq.,CDR ------
1176  GTHRXN => gtRxN,
1177  GTHRXP => gtRxP,
1178  RXCDRFREQRESET => '0',
1179  RXCDRHOLD => '0',
1180  RXCDRLOCK => rxCdrLock,
1181  RXCDROVRDEN => '0',
1182  RXCDRRESET => '0',
1183  RXCDRRESETRSV => '0',
1184  RXELECIDLE => open,
1185  RXELECIDLEMODE => "11",
1186  RXLPMEN => ite(RX_EQUALIZER_G = "LPM", '1', '0'),
1187  RXLPMHFHOLD => rxLpmHfHold,
1188  RXLPMHFOVRDEN => '0',
1189  RXLPMLFHOLD => rxLpmLfHold,
1190  RXLPMLFKLOVRDEN => '0',
1191  RXOOBRESET => '0',
1192  ------------ Receive Ports - RX Decision Feedback Equalizer(DFE) -----------
1193  RSOSINTDONE => open,
1194  RXDFESLIDETAPOVRDEN => '0',
1195  RXOSCALRESET => '0',
1196  -------- Receive Ports - RX Elastic Buffer and Phase Alignment Ports -------
1197  RXBUFRESET => '0',
1198  RXBUFSTATUS => rxBufStatusOut,
1199  RXDDIEN => RX_DDIEN_G, -- Don't insert delay in deserializer. Might be wrong.
1200  RXDLYBYPASS => RX_DLY_BYPASS_G,
1201  RXDLYEN => '0', -- Used for manual phase align
1202  RXDLYOVRDEN => '0',
1203  RXDLYSRESET => rxDlySReset,
1204  RXDLYSRESETDONE => rxDlySResetDone,
1205  RXPHALIGN => '0',
1206  RXPHALIGNDONE => rxPhAlignDone,
1207  RXPHALIGNEN => '0',
1208  RXPHDLYPD => '0',
1209  RXPHDLYRESET => '0',
1210  RXPHMONITOR => open,
1211  RXPHOVRDEN => '0',
1212  RXPHSLIPMONITOR => open,
1213  RXSTATUS => open,
1214  RXSYNCALLIN => '0',
1215  RXSYNCDONE => open,
1216  RXSYNCIN => '0',
1217  RXSYNCMODE => '0',
1218  RXSYNCOUT => open,
1219  ------------------------ Receive Ports - RX PLL Ports ----------------------
1220  RXRATE => "000",
1221  RXRATEDONE => open,
1222  RXRESETDONE => rxResetDone,
1223  -------------- Receive Ports - RX Pipe Control for PCI Express -------------
1224  PHYSTATUS => open,
1225  RXVALID => open,
1226  ----------------- Receive Ports - RX Polarity Control Ports ----------------
1227  RXPOLARITY => rxPolarityIn,
1228  --------------------- Receive Ports - RX Ports for SATA --------------------
1229  RXCOMINITDET => open,
1230  RXCOMSASDET => open,
1231  RXCOMWAKEDET => open,
1232  ------------------------------- Transmit Ports -----------------------------
1233  SETERRSTATUS => '0',
1234  TSTIN => "11111111111111111111",
1235  TXPHDLYTSTCLK => '0',
1236  TXPOSTCURSOR => txPostCursor,
1237  TXPOSTCURSORINV => '0',
1238  TXPRECURSOR => txPreCursor,
1239  TXPRECURSORINV => '0',
1240  TXQPIBIASEN => '0',
1241  TXQPISENN => open,
1242  TXQPISENP => open,
1243  TXQPISTRONGPDOWN => '0',
1244  TXQPIWEAKPUP => '0',
1245  TXSYSCLKSEL => TX_SYSCLK_SEL_C,
1246  TXUSERRDY => txUserRdyInt,
1247  TXRATEMODE => '0',
1248  TXPMARESETDONE => open,
1249  ----------------- TX Phase Interpolator PPM Controller Ports ---------------
1250  TXPIPPMEN => '0',
1251  TXPIPPMOVRDEN => '0',
1252  TXPIPPMPD => '0',
1253  TXPIPPMSEL => '1',
1254  TXPIPPMSTEPSIZE => "00000",
1255  -------------- Transmit Ports - 64b66b and 64b67b Gearbox Ports ------------
1256  TXGEARBOXREADY => open,
1257  TXHEADER => "000",
1258  TXSEQUENCE => "0000000",
1259  TXSTARTSEQ => '0',
1260  ---------------- Transmit Ports - 8b10b Encoder Control Ports --------------
1261  TX8B10BBYPASS => X"00",
1262  TX8B10BEN => toSl(TX_8B10B_EN_G),
1263  TXCHARDISPMODE => txCharDispMode,
1264  TXCHARDISPVAL => txCharDispVal,
1265  TXCHARISK => txCharIsKFull,
1266  ------------ Transmit Ports - TX Buffer and Phase Alignment Ports ----------
1267  TXBUFSTATUS => txBufStatusOut,
1268  TXDLYBYPASS => TX_DLY_BYPASS_G, -- Use the tx delay alignment circuit
1269  TXDLYEN => txDlyEn, -- Manual Align
1270  TXDLYHOLD => '0',
1271  TXDLYOVRDEN => '0',
1272  TXDLYSRESET => txDlySReset,
1273  TXDLYSRESETDONE => txDlySResetDone,
1274  TXDLYUPDOWN => '0',
1275  TXPHALIGN => txPhAlign, -- Manual Align
1276  TXPHALIGNDONE => txPhAlignDone,
1277  TXPHALIGNEN => txPhAlignEn, -- Enables manual align
1278  TXPHDLYPD => '0',
1279  TXPHDLYRESET => '0', -- Use SReset instead
1280  TXPHINIT => txPhInit, -- Manual Align
1281  TXPHINITDONE => txPhInitDone,
1282  TXPHOVRDEN => '0',
1283  TXSYNCALLIN => '0',
1284  TXSYNCDONE => open,
1285  TXSYNCIN => '0',
1286  TXSYNCMODE => '0',
1287  TXSYNCOUT => open,
1288  ------------------ Transmit Ports - TX Data Path interface -----------------
1289  GTTXRESET => gtTxReset,
1290  TXDATA => txDataFull,
1291  TXOUTCLK => txOutClkOut,
1292  TXOUTCLKFABRIC => open, --txGtRefClk,
1293  TXOUTCLKPCS => open, --txOutClkPcsOut,
1294  TXOUTCLKSEL => to_stdlogicvector(TX_OUTCLK_SEL_C),
1295  TXPCSRESET => '0', -- Don't bother with individual resets
1296  TXPMARESET => '0',
1297  TXUSRCLK => txUsrClkIn,
1298  TXUSRCLK2 => txUsrClk2In,
1299  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
1300  GTHTXN => gtTxN,
1301  GTHTXP => gtTxP,
1302  TXBUFDIFFCTRL => "100",
1303  TXDIFFCTRL => txDiffCtrl,
1304  TXDIFFPD => '0',
1305  TXINHIBIT => '0',
1306  TXMAINCURSOR => "0000000",
1307  TXPDELECIDLEMODE => '0',
1308  TXPISOPD => '0',
1309  ----------------------- Transmit Ports - TX PLL Ports ----------------------
1310  TXRATE => "000",
1311  TXRATEDONE => open,
1312  TXRESETDONE => txResetDone,
1313  --------------------- Transmit Ports - TX PRBS Generator -------------------
1314  TXPRBSFORCEERR => '0',
1315  TXPRBSSEL => "000",
1316  -------------------- Transmit Ports - TX Polarity Control ------------------
1317  TXPOLARITY => txPolarityIn,
1318  ----------------- Transmit Ports - TX Ports for PCI Express ----------------
1319  TXDEEMPH => '0',
1320  TXDETECTRX => '0',
1321  TXELECIDLE => '0',
1322  TXMARGIN => "000",
1323  TXSWING => '0',
1324  --------------------- Transmit Ports - TX Ports for SATA -------------------
1325  TXCOMFINISH => open,
1326  TXCOMINIT => '0',
1327  TXCOMSAS => '0',
1328  TXCOMWAKE => '0');
1329 
1330  ------------------------- Soft Fix for Production Silicon----------------------
1331  Gth7RxRstSeq_Inst : entity work.Gth7RxRstSeq
1332  port map(
1333  RST_IN => rxUserResetIn,
1334  GTRXRESET_IN => gtRxReset,
1335  RXPMARESETDONE => rxPmaResetDone,
1336  GTRXRESET_OUT => gtRxRst,
1337  DRP_OP_DONE => drpRstDone,
1338  DRPCLK => stableClkIn,
1339  DRPEN => drpRstEn,
1340  DRPADDR => drpRstAddr,
1341  DRPWE => drpRstWe,
1342  DRPDO => drpRstDo,
1343  DRPDI => drpRstDi,
1344  DRPRDY => drpRstRdy);
1345 
1346  drpGnt <= drpRstDone;
1347  drpRstRdy <= drpMuxRdy when(drpRstDone = '0') else '0';
1348  drpRdy <= drpMuxRdy when(drpRstDone = '1') else '0';
1349  drpMuxEn <= drpEn when(drpRstDone = '1') else drpRstEn;
1350  drpMuxWe <= drpWe when(drpRstDone = '1') else drpRstWe;
1351  drpMuxAddr <= drpAddr when(drpRstDone = '1') else drpRstAddr;
1352  drpMuxDi <= drpDi when(drpRstDone = '1') else drpRstDi;
1353  drpRstDo <= drpMuxDo;
1354  drpDo <= drpMuxDo;
1355 
1356 end architecture rtl;
RX_OS_CFG_Gbit_vector := "0000010000000"
Definition: Gth7Core.vhd:46
CHAN_BOND_SEQ_1_4_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:123
CHAN_BOND_SEQ_2_1_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:125
FTS_DESKEW_SEQ_ENABLE_Gbit_vector := "1111"
Definition: Gth7Core.vhd:131
RX_BUF_EN_Gboolean := true
Definition: Gth7Core.vhd:64
STABLE_CLOCK_PERIOD_Greal := 4.0E-9
Definition: Gth7Core.vhd:35
out rxResetDoneOutsl
Definition: Gth7Core.vhd:164
in qPllLockInsl := '0'
Definition: Gth7Core.vhd:146
out rxMmcmResetOutsl
Definition: Gth7Core.vhd:160
CHAN_BOND_SEQ_2_3_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:127
in rxUsrClk2Insl
Definition: Gth7Core.vhd:158
out PHASE_ALIGNMENT_DONESTD_LOGIC := '0'
CBCC_DATA_SOURCE_SEL_Gstring := "DECODED"
Definition: Gth7Core.vhd:95
ALIGN_MCOMMA_VALUE_Gbit_vector := "1010000011"
Definition: Gth7Core.vhd:76
RX_CHAN_BOND_EN_Gboolean := false
Definition: Gth7Core.vhd:115
out rxDecErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
Definition: Gth7Core.vhd:171
out txOutClkOutsl
Definition: Gth7Core.vhd:180
CLK_COR_KEEP_IDLE_Gstring := "FALSE"
Definition: Gth7Core.vhd:97
CHAN_BOND_SEQ_1_1_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:120
out syncRstsl
Definition: RstSync.vhd:36
CLK_COR_SEQ_2_USE_Gstring := "FALSE"
Definition: Gth7Core.vhd:96
FTS_LANE_DESKEW_EN_Gstring := "FALSE"
Definition: Gth7Core.vhd:133
in RX_REC_CLK0std_logic
IN_POLARITY_Gsl := '1'
Definition: RstSync.vhd:28
in DRPRDYstd_logic
out rxUserRdyOutsl
Definition: Gth7Core.vhd:159
TX_8B10B_EN_Gboolean := true
Definition: Gth7Core.vhd:54
out GTTXRESETstd_logic := '0'
Definition: Gth7TxRst.vhd:92
in rxMmcmLockedInsl := '1'
Definition: Gth7Core.vhd:161
CLK_COR_MAX_LAT_Ginteger := 9
Definition: Gth7Core.vhd:98
std_logic sl
Definition: StdRtlPkg.vhd:28
out qPllResetOutsl
Definition: Gth7Core.vhd:148
CHAN_BOND_SEQ_2_2_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:126
RX_DFE_LPM_CFG_Gbit_vector := x"0080"
Definition: Gth7Core.vhd:137
TX_BUF_EN_Gboolean := true
Definition: Gth7Core.vhd:59
out PLL_RESETstd_logic := '0'
Definition: Gth7RxRst.vhd:102
out RXDFELFHOLDstd_logic
Definition: Gth7RxRst.vhd:109
out PLL_RESETstd_logic := '0'
Definition: Gth7TxRst.vhd:94
out RUN_PHALIGNMENTstd_logic := '0'
Definition: Gth7TxRst.vhd:97
RX_CLK25_DIV_Ginteger := 5
Definition: Gth7Core.vhd:43
TXOUT_DIV_Ginteger := 2
Definition: Gth7Core.vhd:42
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
Definition: Gth7TxRst.vhd:80
STABLE_CLOCK_PERIODinteger range 4 to 20:= 8
Definition: Gth7RxRst.vhd:84
TX_PHASE_ALIGN_Gstring := "AUTO"
Definition: Gth7Core.vhd:62
out GTRXRESET_OUTstd_logic
in gtRxNsl
Definition: Gth7Core.vhd:154
in stableClkInsl
Definition: Gth7Core.vhd:141
CLK_CORRECT_USE_Gstring := "FALSE"
Definition: Gth7Core.vhd:108
RX_CHAN_BOND_MASTER_Gboolean := false
Definition: Gth7Core.vhd:116
ALIGN_PCOMMA_EN_Gsl := '0'
Definition: Gth7Core.vhd:80
FIXED_ALIGN_COMMA_0_Gslv := "----------0101111100"
Definition: Gth7Core.vhd:85
CPLL_FBDIV_Ginteger := 4
Definition: Gth7Core.vhd:38
COMMA_EN_Gslv( 3 downto 0) := "0011"
out RX_FSM_RESET_DONEstd_logic
Definition: Gth7RxRst.vhd:103
in PLLLOCKstd_logic
Definition: Gth7RxRst.vhd:93
in gtRxPsl
Definition: Gth7Core.vhd:153
in PLLLOCKstd_logic
Definition: Gth7TxRst.vhd:89
out RXDFEAGCHOLDstd_logic
Definition: Gth7RxRst.vhd:108
in drpDislv( 15 downto 0) := X"0000"
Definition: Gth7Core.vhd:207
ALIGN_COMMA_DOUBLE_Gstring := "FALSE"
Definition: Gth7Core.vhd:72
out DRPENstd_logic
in txCharIsKInslv(( TX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
Definition: Gth7Core.vhd:191
out txUserRdyOutsl
Definition: Gth7Core.vhd:183
in SOFT_RESETstd_logic
Definition: Gth7TxRst.vhd:87
RX_EQUALIZER_Gstring := "LPM"
Definition: Gth7Core.vhd:135
in SOFT_RESETstd_logic
Definition: Gth7RxRst.vhd:91
out RESET_PHALIGNMENTstd_logic := '0'
Definition: Gth7TxRst.vhd:98
out RESET_PHALIGNMENTstd_logic := '0'
Definition: Gth7RxRst.vhd:107
TX_INT_DATA_WIDTH_Ginteger := 20
Definition: Gth7Core.vhd:53
RX_DLY_BYPASS_Gsl := '1'
Definition: Gth7Core.vhd:67
in rxChBondLevelInslv( 2 downto 0) := "000"
Definition: Gth7Core.vhd:176
in qPllRefClkLostInsl := '0'
Definition: Gth7Core.vhd:147
out gtTxNsl
Definition: Gth7Core.vhd:152
COUNTER_UPPER_VALUEinteger := 20
RX_OUTCLK_SRC_Gstring := "PLLREFCLK"
Definition: Gth7Core.vhd:65
out rxBufStatusOutslv( 2 downto 0)
Definition: Gth7Core.vhd:174
in RST_INstd_logic
SIM_GTRESET_SPEEDUP_Gstring := "FALSE"
Definition: Gth7Core.vhd:32
out txBufStatusOutslv( 1 downto 0)
Definition: Gth7Core.vhd:192
GT_TYPEstring := "GTX"
Definition: Gth7RxRst.vhd:82
ALIGN_COMMA_WORD_Ginteger := 2
Definition: Gth7Core.vhd:74
in asyncRstsl
Definition: RstSync.vhd:35
COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
GT_TYPEstring := "GTX"
Definition: Gth7TxRst.vhd:79
RX_BUF_ADDR_MODE_Gstring := "FAST"
Definition: Gth7Core.vhd:69
in txUserResetInsl
Definition: Gth7Core.vhd:187
TX_DLY_BYPASS_Gsl := '1'
Definition: Gth7Core.vhd:61
in rxChBondInslv( 4 downto 0) := "00000"
Definition: Gth7Core.vhd:177
in TXUSERRDYstd_logic
Definition: Gth7RxRst.vhd:99
RX_8B10B_EN_Gboolean := true
Definition: Gth7Core.vhd:57
in PLLREFCLKLOSTstd_logic
Definition: Gth7RxRst.vhd:92
in PLLREFCLKLOSTstd_logic
Definition: Gth7TxRst.vhd:88
TPD_Gtime := 1 ns
Definition: Gth7TxRst.vhd:78
RXDFEXYDEN_Gsl := '1'
Definition: Gth7Core.vhd:139
in clksl
Definition: RstSync.vhd:34
TPD_Gtime := 1 ns
Definition: Gth7RxRst.vhd:80
out drpGntsl
Definition: Gth7Core.vhd:202
in rxSlideInsl := '0'
Definition: Gth7Core.vhd:167
in MMCM_LOCKstd_logic
Definition: Gth7RxRst.vhd:95
OUT_POLARITY_Gsl := '1'
Definition: RstSync.vhd:29
in rxUsrClkInsl
Definition: Gth7Core.vhd:157
in MMCM_LOCKstd_logic
Definition: Gth7TxRst.vhd:91
in RXRESETDONEstd_logic
Definition: Gth7RxRst.vhd:94
SIM_VERSION_Gstring := "2.0"
Definition: Gth7Core.vhd:33
out RXUSERRDYstd_logic := '0'
Definition: Gth7RxRst.vhd:104
CLK_COR_SEQ_2_3_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:112
in txPostCursorslv( 4 downto 0) :=( others => '0')
Definition: Gth7Core.vhd:199
in DRPCLKstd_logic
CLOCK_PULSESinteger := 5000
CPLL_REFCLK_SEL_Gbit_vector := "001"
Definition: Gth7Core.vhd:37
CLK_COR_REPEAT_WAIT_Ginteger := 0
Definition: Gth7Core.vhd:101
in TXUSERCLKstd_logic
Definition: Gth7TxRst.vhd:86
SIMULATION_Gboolean := false
Definition: Gth7Core.vhd:34
out EXEC_RESTARTstd_logic
TX_EXT_DATA_WIDTH_Ginteger := 16
Definition: Gth7Core.vhd:52
in txMmcmLockedInsl := '1'
Definition: Gth7Core.vhd:185
DEC_VALID_COMMA_ONLY_Gstring := "FALSE"
Definition: Gth7Core.vhd:93
TPD_Gtime := 1 ns
Definition: Gth7Core.vhd:30
RX_EXT_DATA_WIDTH_Ginteger := 16
Definition: Gth7Core.vhd:55
CHAN_BOND_MAX_SKEW_Ginteger := 1
Definition: Gth7Core.vhd:118
RXOUT_DIV_Ginteger := 2
Definition: Gth7Core.vhd:41
in drpEnsl := '0'
Definition: Gth7Core.vhd:204
COMMA_1_Gslv := "----------1010000011"
out DRPADDRstd_logic_vector( 8 downto 0)
out rxCharIsKOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
Definition: Gth7Core.vhd:170
gthe2_channel gthe2_igthe2_i
Definition: Gth7Core.vhd:1328
RX_CM_TRIM_Gbit_vector := "1000"
Definition: Gth7Core.vhd:136
CHAN_BOND_SEQ_1_3_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:122
in rxUserResetInsl
Definition: Gth7Core.vhd:163
in txPowerDownslv( 1 downto 0) := "00"
Definition: Gth7Core.vhd:195
in RECCLK_MONITOR_RESTARTstd_logic := '0'
Definition: Gth7RxRst.vhd:97
FIXED_ALIGN_COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
Definition: Gth7Core.vhd:87
out rxDataOutslv( RX_EXT_DATA_WIDTH_G- 1 downto 0)
Definition: Gth7Core.vhd:169
in txDiffCtrlslv( 3 downto 0) := "1000"
Definition: Gth7Core.vhd:200
CPLL_REFCLK_DIV_Ginteger := 1
Definition: Gth7Core.vhd:40
in txPolarityInsl := '0'
Definition: Gth7Core.vhd:193
COMMA_2_Gslv := "XXXXXXXXXXXXXXXXXXXX"
CHAN_BOND_SEQ_1_2_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:121
ALIGN_COMMA_ENABLE_Gbit_vector := "1111111111"
Definition: Gth7Core.vhd:73
in qPllRefClkInsl := '0'
Definition: Gth7Core.vhd:144
in rxDataslv( WORD_SIZE_G- 1 downto 0)
out TXUSERRDYstd_logic := '0'
Definition: Gth7TxRst.vhd:96
out DRP_OP_DONEstd_logic
out rxDispErrOutslv(( RX_EXT_DATA_WIDTH_G/ 8)- 1 downto 0)
Definition: Gth7Core.vhd:172
in cPllRefClkInsl := '0'
Definition: Gth7Core.vhd:142
CLK_COR_SEQ_1_4_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:107
in RXPMARESETDONEstd_logic
in drpAddrslv( 8 downto 0) := "000000000"
Definition: Gth7Core.vhd:206
TPD_Gtime := 1 ns
Definition: RstSync.vhd:27
out RXLPMLFHOLDstd_logic
Definition: Gth7RxRst.vhd:110
in rxPowerDownslv( 1 downto 0) := "00"
Definition: Gth7Core.vhd:196
TX_PLL_Gstring := "CPLL"
Definition: Gth7Core.vhd:49
CLK_COR_PRECEDENCE_Gstring := "TRUE"
Definition: Gth7Core.vhd:100
in rxPolarityInsl := '0'
Definition: Gth7Core.vhd:173
out drpRdysl
Definition: Gth7Core.vhd:203
in qPllClkInsl := '0'
Definition: Gth7Core.vhd:145
DEC_PCOMMA_DETECT_Gstring := "TRUE"
Definition: Gth7Core.vhd:92
EQ_MODEstring := "DFE"
Definition: Gth7RxRst.vhd:83
PMA_RSV_Gbit_vector := X"00000080"
Definition: Gth7Core.vhd:45
RXCDR_CFG_Gbit_vector := x"0002007FE1000C2200018"
Definition: Gth7Core.vhd:47
CLK_COR_SEQ_1_1_Gbit_vector := "0100000000"
Definition: Gth7Core.vhd:104
EXAMPLE_SIMULATIONinteger := 0
out TX_FSM_RESET_DONEstd_logic
Definition: Gth7TxRst.vhd:95
in txUsrClk2Insl
Definition: Gth7Core.vhd:182
COMMA_0_Gslv := "----------0101111100"
in rxDataValidInsl := '1'
Definition: Gth7Core.vhd:166
RXDFELFOVRDEN_Gsl := '0'
Definition: Gth7Core.vhd:138
CLK_COR_SEQ_1_2_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:105
CLK_COR_SEQ_2_2_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:111
CLK_COR_SEQ_2_1_Gbit_vector := "0100000000"
Definition: Gth7Core.vhd:110
in loopbackInslv( 2 downto 0) := "000"
Definition: Gth7Core.vhd:197
DEC_MCOMMA_DETECT_Gstring := "TRUE"
Definition: Gth7Core.vhd:91
RXSLIDE_MODE_Gstring := "PCS"
Definition: Gth7Core.vhd:82
CHAN_BOND_SEQ_2_ENABLE_Gbit_vector := "0000"
Definition: Gth7Core.vhd:129
out RECCLK_STABLEstd_logic
out MMCM_RESETstd_logic := '1'
Definition: Gth7RxRst.vhd:101
CHAN_BOND_SEQ_LEN_Ginteger := 1
Definition: Gth7Core.vhd:119
out MMCM_RESETstd_logic := '1'
Definition: Gth7TxRst.vhd:93
out cPllLockOutsl
Definition: Gth7Core.vhd:143
in RECCLK_STABLEstd_logic
Definition: Gth7RxRst.vhd:96
RX_DDIEN_Gsl := '0'
Definition: Gth7Core.vhd:68
CLK_COR_SEQ_2_4_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:113
in DRPDOstd_logic_vector( 15 downto 0)
in txDataInslv( TX_EXT_DATA_WIDTH_G- 1 downto 0)
Definition: Gth7Core.vhd:190
CHAN_BOND_SEQ_1_ENABLE_Gbit_vector := "1111"
Definition: Gth7Core.vhd:124
out gtTxPsl
Definition: Gth7Core.vhd:151
in DATA_VALIDstd_logic
Definition: Gth7RxRst.vhd:98
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
Definition: Gth7TxRst.vhd:82
out RXLPMHFHOLDstd_logic
Definition: Gth7RxRst.vhd:111
RETRY_COUNTER_BITWIDTHinteger range 2 to 8:= 8
Definition: Gth7RxRst.vhd:86
out DRPWEstd_logic
CLK_COR_SEQ_LEN_Ginteger := 1
Definition: Gth7Core.vhd:102
out drpDoslv( 15 downto 0)
Definition: Gth7Core.vhd:208
out rxOutClkOutsl
Definition: Gth7Core.vhd:156
CHAN_BOND_SEQ_2_USE_Gstring := "FALSE"
Definition: Gth7Core.vhd:130
RX_USRCLK_SRC_Gstring := "RXOUTCLK"
Definition: Gth7Core.vhd:66
RX_PLL_Gstring := "CPLL"
Definition: Gth7Core.vhd:50
out txResetDoneOutsl
Definition: Gth7Core.vhd:188
TX_BUF_ADDR_MODE_Gstring := "FAST"
Definition: Gth7Core.vhd:63
ALIGN_PCOMMA_DET_Gstring := "FALSE"
Definition: Gth7Core.vhd:78
out DRPDIstd_logic_vector( 15 downto 0)
out GTRXRESETstd_logic := '0'
Definition: Gth7RxRst.vhd:100
in txPreCursorslv( 4 downto 0) :=( others => '0')
Definition: Gth7Core.vhd:198
EXAMPLE_SIMULATIONinteger := 0
Definition: Gth7RxRst.vhd:81
out rxChBondOutslv( 4 downto 0)
Definition: Gth7Core.vhd:178
TX_CLK25_DIV_Ginteger := 5
Definition: Gth7Core.vhd:44
ALIGN_MCOMMA_DET_Gstring := "FALSE"
Definition: Gth7Core.vhd:75
in drpWesl := '0'
Definition: Gth7Core.vhd:205
in GTRXRESET_INstd_logic
out RUN_PHALIGNMENTstd_logic
Definition: Gth7RxRst.vhd:105
in txUsrClkInsl
Definition: Gth7Core.vhd:181
CPLL_FBDIV_45_Ginteger := 5
Definition: Gth7Core.vhd:39
ALIGN_PCOMMA_VALUE_Gbit_vector := "0101111100"
Definition: Gth7Core.vhd:79
CLK_COR_SEQ_2_ENABLE_Gbit_vector := "0000"
Definition: Gth7Core.vhd:109
in TXRESETDONEstd_logic
Definition: Gth7TxRst.vhd:90
CHAN_BOND_KEEP_ALIGN_Gstring := "FALSE"
Definition: Gth7Core.vhd:117
in STABLE_CLOCKstd_logic
Definition: Gth7TxRst.vhd:84
CLK_COR_SEQ_1_3_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:106
in STABLE_CLOCKstd_logic
Definition: Gth7RxRst.vhd:88
CLK_COR_SEQ_1_ENABLE_Gbit_vector := "1111"
Definition: Gth7Core.vhd:103
FIXED_COMMA_EN_Gslv( 3 downto 0) := "0011"
Definition: Gth7Core.vhd:84
RX_INT_DATA_WIDTH_Ginteger := 20
Definition: Gth7Core.vhd:56
CHAN_BOND_SEQ_2_4_Gbit_vector := "0000000000"
Definition: Gth7Core.vhd:128
in gtRxRefClkBufgsl := '0'
Definition: Gth7Core.vhd:149
GCLK_COUNTER_UPPER_VALUEinteger := 20
FTS_LANE_DESKEW_CFG_Gbit_vector := "1111"
Definition: Gth7Core.vhd:132
out txMmcmResetOutsl
Definition: Gth7Core.vhd:184
FIXED_ALIGN_COMMA_3_Gslv := "XXXXXXXXXXXXXXXXXXXX"
Definition: Gth7Core.vhd:88
out RETRY_COUNTERstd_logic_vector( RETRY_COUNTER_BITWIDTH- 1 downto 0) :=( others => '0')
Definition: Gth7TxRst.vhd:103
SHOW_REALIGN_COMMA_Gstring := "FALSE"
Definition: Gth7Core.vhd:81
out RETRY_COUNTERstd_logic_vector( RETRY_COUNTER_BITWIDTH- 1 downto 0) :=( others => '0')
Definition: Gth7RxRst.vhd:115
TX_OUTCLK_SRC_Gstring := "PLLREFCLK"
Definition: Gth7Core.vhd:60
RX_ALIGN_MODE_Gstring := "GT"
Definition: Gth7Core.vhd:71
CLK_COR_MIN_LAT_Ginteger := 7
Definition: Gth7Core.vhd:99
std_logic_vector slv
Definition: StdRtlPkg.vhd:29
in PHALIGNMENT_DONEstd_logic
Definition: Gth7RxRst.vhd:106
in PHALIGNMENT_DONEstd_logic
Definition: Gth7TxRst.vhd:99
RX_DISPERR_SEQ_MATCH_Gstring := "TRUE"
Definition: Gth7Core.vhd:90
ALIGN_MCOMMA_EN_Gsl := '0'
Definition: Gth7Core.vhd:77
FIXED_ALIGN_COMMA_1_Gslv := "----------1010000011"
Definition: Gth7Core.vhd:86
in RXUSERCLKstd_logic
Definition: Gth7RxRst.vhd:90