AMC13
Firmwares for the different applications of the AMC13 uTCA board made at Boston University
 All Classes Files Variables
XGMII_serdes_wapper.vhd
1 ----------------------------------------------------------------------------------
2 -- Company:
3 -- Engineer:
4 --
5 -- Create Date: 14:05:44 12/07/2015
6 -- Design Name:
7 -- Module Name: XGMII_serdes_wapper - Behavioral
8 -- Project Name:
9 -- Target Devices:
10 -- Tool versions:
11 -- Description:
12 --
13 -- Dependencies:
14 --
15 -- Revision:
16 -- Revision 0.01 - File Created
17 -- Additional Comments:
18 --
19 ----------------------------------------------------------------------------------
20 library IEEE;
21 use IEEE.STD_LOGIC_1164.ALL;
22 use IEEE.STD_LOGIC_ARITH.ALL;
23 use IEEE.STD_LOGIC_UNSIGNED.ALL;
24 use IEEE.std_logic_misc.all;
25 use work.amc13_pack.all;
26 
27 -- Uncomment the following library declaration if using
28 -- arithmetic functions with Signed or Unsigned values
29 --use IEEE.NUMERIC_STD.ALL;
30 
31 -- Uncomment the following library declaration if instantiating
32 -- any Xilinx primitives in this code.
33 library UNISIM;
34 use UNISIM.VComponents.all;
35 
36 entity XGMII_serdes_wapper is
37  generic(N_SFP : integer := 3);
38  Port (
39  DRPclk : in STD_LOGIC;
40  reset : in STD_LOGIC;
41  gtx_reset : in STD_LOGIC;
42 -- SFP ports
43  SFP0_RXN : in STD_LOGIC;
44  SFP0_RXP : in STD_LOGIC;
45  SFP1_RXN : in STD_LOGIC;
46  SFP1_RXP : in STD_LOGIC;
47  SFP2_RXN : in STD_LOGIC;
48  SFP2_RXP : in STD_LOGIC;
49  SFP0_TXN : out STD_LOGIC;
50  SFP0_TXP : out STD_LOGIC;
51  SFP1_TXN : out STD_LOGIC;
52  SFP1_TXP : out STD_LOGIC;
53  SFP2_TXN : out STD_LOGIC;
54  SFP2_TXP : out STD_LOGIC;
55  SFP_REFCLK_P : in STD_LOGIC;
56  SFP_REFCLK_N : in STD_LOGIC;
57  clk156 : out STD_LOGIC;
58  PCS_lock : out STD_LOGIC_VECTOR(2 downto 0);
59  gtx_rxresetdone : out STD_LOGIC_VECTOR(2 downto 0);
60  xgmii_txd : in array3x64;
61  xgmii_txc : in array3x8;
62  xgmii_rxd : out array3x64;
63  xgmii_rxc : out array3x8);
64 end XGMII_serdes_wapper;
65 
66 architecture Behavioral of XGMII_serdes_wapper is
67 COMPONENT XGbEPCS32
68  PORT(
69  reset : IN std_logic;
70  clk2x : IN std_logic;
71  clk : IN std_logic;
72  TXUSRCLK : IN std_logic;
73  TX_high : IN std_logic;
74  RXUSRCLK : IN std_logic;
75  RXRESETDONE : IN std_logic;
76  inh_TX : IN std_logic;
77  RESET_TXSync : IN std_logic;
78  GTX_TXD : OUT std_logic_vector(31 downto 0);
79  GTX_TXHEADER : OUT std_logic_vector(1 downto 0);
80  GTX_TX_PAUSE : IN std_logic;
81  GTX_RXD : IN std_logic_vector(31 downto 0);
82  GTX_RXDVLD : IN std_logic;
83  GTX_RXHEADER : IN std_logic_vector(1 downto 0);
84  GTX_RXHEADERVLD : IN std_logic;
85  GTX_RXGOOD : OUT std_logic;
86  GTX_RXGEARBOXSLIP_OUT : OUT std_logic;
87  EmacPhyTxC : IN std_logic_vector(3 downto 0);
88  EmacPhyTxD : IN std_logic_vector(31 downto 0);
89  PhyEmacRxC : OUT std_logic_vector(3 downto 0);
90  PhyEmacRxD : OUT std_logic_vector(31 downto 0)
91  );
92 END COMPONENT;
93 component SFP3_v2_7_init
94 generic
95 (
96  N_SFP : integer := 3;
97  EXAMPLE_SIM_GTRESET_SPEEDUP : string := "TRUE"; -- simulation setting for GT SecureIP model
98  EXAMPLE_SIMULATION : integer := 0; -- Set to 1 for simulation
99  STABLE_CLOCK_PERIOD : integer := 20; --Period of the stable clock driving this state-machine, unit is [ns]
100  EXAMPLE_USE_CHIPSCOPE : integer := 0 -- Set to 1 to use Chipscope to drive resets
101 
102 );
103 port
104 (
105  SYSCLK_IN : in std_logic;
106  SOFT_RESET_IN : in std_logic;
107  DONT_RESET_ON_DATA_ERROR_IN : in std_logic;
108  GT0_TX_FSM_RESET_DONE_OUT : out std_logic;
109  GT0_RX_FSM_RESET_DONE_OUT : out std_logic;
110  GT0_DATA_VALID_IN : in std_logic;
111  GT1_TX_FSM_RESET_DONE_OUT : out std_logic;
112  GT1_RX_FSM_RESET_DONE_OUT : out std_logic;
113  GT1_DATA_VALID_IN : in std_logic;
114  GT2_TX_FSM_RESET_DONE_OUT : out std_logic;
115  GT2_RX_FSM_RESET_DONE_OUT : out std_logic;
116  GT2_DATA_VALID_IN : in std_logic;
117 
118  --_________________________________________________________________________
119  --GT0 (X1Y12)
120  --____________________________CHANNEL PORTS________________________________
121  ---------------------------- Channel - DRP Ports --------------------------
122  GT0_DRPADDR_IN : in std_logic_vector(8 downto 0);
123  GT0_DRPCLK_IN : in std_logic;
124  GT0_DRPDI_IN : in std_logic_vector(15 downto 0);
125  GT0_DRPDO_OUT : out std_logic_vector(15 downto 0);
126  GT0_DRPEN_IN : in std_logic;
127  GT0_DRPRDY_OUT : out std_logic;
128  GT0_DRPWE_IN : in std_logic;
129  ------------------------------- Loopback Ports -----------------------------
130  GT0_LOOPBACK_IN : in std_logic_vector(2 downto 0);
131  ------------------------------ Power-Down Ports ----------------------------
132  GT0_RXPD_IN : in std_logic_vector(1 downto 0);
133  GT0_TXPD_IN : in std_logic_vector(1 downto 0);
134  --------------------- RX Initialization and Reset Ports --------------------
135  GT0_RXUSERRDY_IN : in std_logic;
136  -------------------------- RX Margin Analysis Ports ------------------------
137  GT0_EYESCANDATAERROR_OUT : out std_logic;
138  ------------------------- Receive Ports - CDR Ports ------------------------
139  GT0_RXCDRLOCK_OUT : out std_logic;
140  ------------------ Receive Ports - FPGA RX Interface Ports -----------------
141  GT0_RXUSRCLK_IN : in std_logic;
142  GT0_RXUSRCLK2_IN : in std_logic;
143  ------------------ Receive Ports - FPGA RX interface Ports -----------------
144  GT0_RXDATA_OUT : out std_logic_vector(31 downto 0);
145  ------------------- Receive Ports - Pattern Checker Ports ------------------
146  GT0_RXPRBSERR_OUT : out std_logic;
147  GT0_RXPRBSSEL_IN : in std_logic_vector(2 downto 0);
148  ------------------- Receive Ports - Pattern Checker ports ------------------
149  GT0_RXPRBSCNTRESET_IN : in std_logic;
150  --------------------------- Receive Ports - RX AFE -------------------------
151  GT0_GTXRXP_IN : in std_logic;
152  ------------------------ Receive Ports - RX AFE Ports ----------------------
153  GT0_GTXRXN_IN : in std_logic;
154  ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
155  GT0_RXBUFRESET_IN : in std_logic;
156  GT0_RXBUFSTATUS_OUT : out std_logic_vector(2 downto 0);
157  --------------- Receive Ports - RX Fabric Output Control Ports -------------
158  GT0_RXOUTCLK_OUT : out std_logic;
159  ---------------------- Receive Ports - RX Gearbox Ports --------------------
160  GT0_RXDATAVALID_OUT : out std_logic;
161  GT0_RXHEADER_OUT : out std_logic_vector(1 downto 0);
162  GT0_RXHEADERVALID_OUT : out std_logic;
163  --------------------- Receive Ports - RX Gearbox Ports --------------------
164  GT0_RXGEARBOXSLIP_IN : in std_logic;
165  ------------- Receive Ports - RX Initialization and Reset Ports ------------
166  GT0_GTRXRESET_IN : in std_logic;
167  GT0_RXPMARESET_IN : in std_logic;
168  ------------------ Receive Ports - RX Margin Analysis ports ----------------
169  GT0_RXLPMEN_IN : in std_logic;
170  -------------- Receive Ports -RX Initialization and Reset Ports ------------
171  GT0_RXRESETDONE_OUT : out std_logic;
172  --------------------- TX Initialization and Reset Ports --------------------
173  GT0_GTTXRESET_IN : in std_logic;
174  GT0_TXUSERRDY_IN : in std_logic;
175  ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
176  GT0_TXUSRCLK_IN : in std_logic;
177  GT0_TXUSRCLK2_IN : in std_logic;
178  --------------- Transmit Ports - TX Configurable Driver Ports --------------
179  GT0_TXDIFFCTRL_IN : in std_logic_vector(3 downto 0);
180  GT0_TXINHIBIT_IN : in std_logic;
181  GT0_TXMAINCURSOR_IN : in std_logic_vector(6 downto 0);
182  ------------------ Transmit Ports - TX Data Path interface -----------------
183  GT0_TXDATA_IN : in std_logic_vector(31 downto 0);
184  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
185  GT0_GTXTXN_OUT : out std_logic;
186  GT0_GTXTXP_OUT : out std_logic;
187  ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
188  GT0_TXOUTCLK_OUT : out std_logic;
189  GT0_TXOUTCLKFABRIC_OUT : out std_logic;
190  GT0_TXOUTCLKPCS_OUT : out std_logic;
191  --------------------- Transmit Ports - TX Gearbox Ports --------------------
192  GT0_TXHEADER_IN : in std_logic_vector(1 downto 0);
193  GT0_TXSEQUENCE_IN : in std_logic_vector(6 downto 0);
194  ------------- Transmit Ports - TX Initialization and Reset Ports -----------
195  GT0_TXRESETDONE_OUT : out std_logic;
196  ------------------ Transmit Ports - pattern Generator Ports ----------------
197  GT0_TXPRBSSEL_IN : in std_logic_vector(2 downto 0);
198 
199  --GT1 (X1Y13)
200  --____________________________CHANNEL PORTS________________________________
201  ---------------------------- Channel - DRP Ports --------------------------
202  GT1_DRPADDR_IN : in std_logic_vector(8 downto 0);
203  GT1_DRPCLK_IN : in std_logic;
204  GT1_DRPDI_IN : in std_logic_vector(15 downto 0);
205  GT1_DRPDO_OUT : out std_logic_vector(15 downto 0);
206  GT1_DRPEN_IN : in std_logic;
207  GT1_DRPRDY_OUT : out std_logic;
208  GT1_DRPWE_IN : in std_logic;
209  ------------------------------- Loopback Ports -----------------------------
210  GT1_LOOPBACK_IN : in std_logic_vector(2 downto 0);
211  ------------------------------ Power-Down Ports ----------------------------
212  GT1_RXPD_IN : in std_logic_vector(1 downto 0);
213  GT1_TXPD_IN : in std_logic_vector(1 downto 0);
214  --------------------- RX Initialization and Reset Ports --------------------
215  GT1_RXUSERRDY_IN : in std_logic;
216  -------------------------- RX Margin Analysis Ports ------------------------
217  GT1_EYESCANDATAERROR_OUT : out std_logic;
218  ------------------------- Receive Ports - CDR Ports ------------------------
219  GT1_RXCDRLOCK_OUT : out std_logic;
220  ------------------ Receive Ports - FPGA RX Interface Ports -----------------
221  GT1_RXUSRCLK_IN : in std_logic;
222  GT1_RXUSRCLK2_IN : in std_logic;
223  ------------------ Receive Ports - FPGA RX interface Ports -----------------
224  GT1_RXDATA_OUT : out std_logic_vector(31 downto 0);
225  ------------------- Receive Ports - Pattern Checker Ports ------------------
226  GT1_RXPRBSERR_OUT : out std_logic;
227  GT1_RXPRBSSEL_IN : in std_logic_vector(2 downto 0);
228  ------------------- Receive Ports - Pattern Checker ports ------------------
229  GT1_RXPRBSCNTRESET_IN : in std_logic;
230  --------------------------- Receive Ports - RX AFE -------------------------
231  GT1_GTXRXP_IN : in std_logic;
232  ------------------------ Receive Ports - RX AFE Ports ----------------------
233  GT1_GTXRXN_IN : in std_logic;
234  ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
235  GT1_RXBUFRESET_IN : in std_logic;
236  GT1_RXBUFSTATUS_OUT : out std_logic_vector(2 downto 0);
237  --------------- Receive Ports - RX Fabric Output Control Ports -------------
238  GT1_RXOUTCLK_OUT : out std_logic;
239  ---------------------- Receive Ports - RX Gearbox Ports --------------------
240  GT1_RXDATAVALID_OUT : out std_logic;
241  GT1_RXHEADER_OUT : out std_logic_vector(1 downto 0);
242  GT1_RXHEADERVALID_OUT : out std_logic;
243  --------------------- Receive Ports - RX Gearbox Ports --------------------
244  GT1_RXGEARBOXSLIP_IN : in std_logic;
245  ------------- Receive Ports - RX Initialization and Reset Ports ------------
246  GT1_GTRXRESET_IN : in std_logic;
247  GT1_RXPMARESET_IN : in std_logic;
248  ------------------ Receive Ports - RX Margin Analysis ports ----------------
249  GT1_RXLPMEN_IN : in std_logic;
250  -------------- Receive Ports -RX Initialization and Reset Ports ------------
251  GT1_RXRESETDONE_OUT : out std_logic;
252  --------------------- TX Initialization and Reset Ports --------------------
253  GT1_GTTXRESET_IN : in std_logic;
254  GT1_TXUSERRDY_IN : in std_logic;
255  ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
256  GT1_TXUSRCLK_IN : in std_logic;
257  GT1_TXUSRCLK2_IN : in std_logic;
258  --------------- Transmit Ports - TX Configurable Driver Ports --------------
259  GT1_TXDIFFCTRL_IN : in std_logic_vector(3 downto 0);
260  GT1_TXINHIBIT_IN : in std_logic;
261  GT1_TXMAINCURSOR_IN : in std_logic_vector(6 downto 0);
262  ------------------ Transmit Ports - TX Data Path interface -----------------
263  GT1_TXDATA_IN : in std_logic_vector(31 downto 0);
264  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
265  GT1_GTXTXN_OUT : out std_logic;
266  GT1_GTXTXP_OUT : out std_logic;
267  ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
268  GT1_TXOUTCLK_OUT : out std_logic;
269  GT1_TXOUTCLKFABRIC_OUT : out std_logic;
270  GT1_TXOUTCLKPCS_OUT : out std_logic;
271  --------------------- Transmit Ports - TX Gearbox Ports --------------------
272  GT1_TXHEADER_IN : in std_logic_vector(1 downto 0);
273  GT1_TXSEQUENCE_IN : in std_logic_vector(6 downto 0);
274  ------------- Transmit Ports - TX Initialization and Reset Ports -----------
275  GT1_TXRESETDONE_OUT : out std_logic;
276  ------------------ Transmit Ports - pattern Generator Ports ----------------
277  GT1_TXPRBSSEL_IN : in std_logic_vector(2 downto 0);
278 
279  --GT2 (X1Y14)
280  --____________________________CHANNEL PORTS________________________________
281  ---------------------------- Channel - DRP Ports --------------------------
282  GT2_DRPADDR_IN : in std_logic_vector(8 downto 0);
283  GT2_DRPCLK_IN : in std_logic;
284  GT2_DRPDI_IN : in std_logic_vector(15 downto 0);
285  GT2_DRPDO_OUT : out std_logic_vector(15 downto 0);
286  GT2_DRPEN_IN : in std_logic;
287  GT2_DRPRDY_OUT : out std_logic;
288  GT2_DRPWE_IN : in std_logic;
289  ------------------------------- Loopback Ports -----------------------------
290  GT2_LOOPBACK_IN : in std_logic_vector(2 downto 0);
291  ------------------------------ Power-Down Ports ----------------------------
292  GT2_RXPD_IN : in std_logic_vector(1 downto 0);
293  GT2_TXPD_IN : in std_logic_vector(1 downto 0);
294  --------------------- RX Initialization and Reset Ports --------------------
295  GT2_RXUSERRDY_IN : in std_logic;
296  -------------------------- RX Margin Analysis Ports ------------------------
297  GT2_EYESCANDATAERROR_OUT : out std_logic;
298  ------------------------- Receive Ports - CDR Ports ------------------------
299  GT2_RXCDRLOCK_OUT : out std_logic;
300  ------------------ Receive Ports - FPGA RX Interface Ports -----------------
301  GT2_RXUSRCLK_IN : in std_logic;
302  GT2_RXUSRCLK2_IN : in std_logic;
303  ------------------ Receive Ports - FPGA RX interface Ports -----------------
304  GT2_RXDATA_OUT : out std_logic_vector(31 downto 0);
305  ------------------- Receive Ports - Pattern Checker Ports ------------------
306  GT2_RXPRBSERR_OUT : out std_logic;
307  GT2_RXPRBSSEL_IN : in std_logic_vector(2 downto 0);
308  ------------------- Receive Ports - Pattern Checker ports ------------------
309  GT2_RXPRBSCNTRESET_IN : in std_logic;
310  --------------------------- Receive Ports - RX AFE -------------------------
311  GT2_GTXRXP_IN : in std_logic;
312  ------------------------ Receive Ports - RX AFE Ports ----------------------
313  GT2_GTXRXN_IN : in std_logic;
314  ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
315  GT2_RXBUFRESET_IN : in std_logic;
316  GT2_RXBUFSTATUS_OUT : out std_logic_vector(2 downto 0);
317  --------------- Receive Ports - RX Fabric Output Control Ports -------------
318  GT2_RXOUTCLK_OUT : out std_logic;
319  ---------------------- Receive Ports - RX Gearbox Ports --------------------
320  GT2_RXDATAVALID_OUT : out std_logic;
321  GT2_RXHEADER_OUT : out std_logic_vector(1 downto 0);
322  GT2_RXHEADERVALID_OUT : out std_logic;
323  --------------------- Receive Ports - RX Gearbox Ports --------------------
324  GT2_RXGEARBOXSLIP_IN : in std_logic;
325  ------------- Receive Ports - RX Initialization and Reset Ports ------------
326  GT2_GTRXRESET_IN : in std_logic;
327  GT2_RXPMARESET_IN : in std_logic;
328  ------------------ Receive Ports - RX Margin Analysis ports ----------------
329  GT2_RXLPMEN_IN : in std_logic;
330  -------------- Receive Ports -RX Initialization and Reset Ports ------------
331  GT2_RXRESETDONE_OUT : out std_logic;
332  --------------------- TX Initialization and Reset Ports --------------------
333  GT2_GTTXRESET_IN : in std_logic;
334  GT2_TXUSERRDY_IN : in std_logic;
335  ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
336  GT2_TXUSRCLK_IN : in std_logic;
337  GT2_TXUSRCLK2_IN : in std_logic;
338  --------------- Transmit Ports - TX Configurable Driver Ports --------------
339  GT2_TXDIFFCTRL_IN : in std_logic_vector(3 downto 0);
340  GT2_TXINHIBIT_IN : in std_logic;
341  GT2_TXMAINCURSOR_IN : in std_logic_vector(6 downto 0);
342  ------------------ Transmit Ports - TX Data Path interface -----------------
343  GT2_TXDATA_IN : in std_logic_vector(31 downto 0);
344  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
345  GT2_GTXTXN_OUT : out std_logic;
346  GT2_GTXTXP_OUT : out std_logic;
347  ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
348  GT2_TXOUTCLK_OUT : out std_logic;
349  GT2_TXOUTCLKFABRIC_OUT : out std_logic;
350  GT2_TXOUTCLKPCS_OUT : out std_logic;
351  --------------------- Transmit Ports - TX Gearbox Ports --------------------
352  GT2_TXHEADER_IN : in std_logic_vector(1 downto 0);
353  GT2_TXSEQUENCE_IN : in std_logic_vector(6 downto 0);
354  ------------- Transmit Ports - TX Initialization and Reset Ports -----------
355  GT2_TXRESETDONE_OUT : out std_logic;
356  ------------------ Transmit Ports - pattern Generator Ports ----------------
357  GT2_TXPRBSSEL_IN : in std_logic_vector(2 downto 0);
358 
359 
360  --____________________________COMMON PORTS________________________________
361  ---------------------- Common Block - Ref Clock Ports ---------------------
362  GT0_GTREFCLK0_COMMON_IN : in std_logic;
363  ------------------------- Common Block - QPLL Ports ------------------------
364  GT0_QPLLLOCK_OUT : out std_logic;
365  GT0_QPLLLOCKDETCLK_IN : in std_logic;
366  GT0_QPLLRESET_IN : in std_logic
367 
368 
369 );
370 end component;
371 signal gtx_resetSyncRegs : std_logic_vector(2 downto 0) := (others => '0');
372 signal SFP_REFCLK : std_logic := '0';
373 signal REFCLK2XPLLRST : std_logic := '0';
374 signal refclk2x_in : std_logic := '0';
375 signal ClientClk2x_dcm : std_logic := '0';
376 signal ClientClk2x : std_logic := '0';
377 signal ClientClk_dcm : std_logic := '0';
378 signal ClientClk : std_logic := '0';
379 signal ClientClk_lock : std_logic := '0';
380 signal txusrclk : std_logic := '0';
381 signal TX_high : std_logic := '0';
382 signal qplllock : std_logic := '0';
383 signal qpllreset : std_logic := '0';
384 signal TXSEQ_cntr : std_logic_vector(6 downto 0) := (others => '0');
385 signal inh_TX : std_logic_vector(2 downto 0) := (others => '0');
386 signal inh_TX_q : std_logic_vector(2 downto 0) := (others => '0');
387 signal reset_TXSyncRegs : std_logic_vector(2 downto 0) := (others => '0');
388 signal ClientClkToggle : std_logic := '0';
389 signal ClientClkToggle_q : std_logic := '0';
390 signal SFP_TXOUTCLK : std_logic_vector(2 downto 0) := (others => '0');
391 signal SFP_TXSEQUENCE : array3X7 := (others => (others => '0'));
392 signal SFP_rxoutclk : std_logic_vector(2 downto 0) := (others => '0');
393 signal SFP_rxusrclk : std_logic_vector(2 downto 0) := (others => '0');
394 signal SFP_txresetdone : std_logic_vector(2 downto 0) := (others => '0');
395 signal SFP_gttxreset : std_logic_vector(2 downto 0) := (others => '0');
396 signal SFP_txuserrdy : std_logic_vector(2 downto 0) := (others => '0');
397 signal SFP_rxresetdone : std_logic_vector(2 downto 0) := (others => '0');
398 signal SFP_gtrxreset : std_logic_vector(2 downto 0) := (others => '0');
399 signal SFP_rxuserrdy : std_logic_vector(2 downto 0) := (others => '0');
400 signal SFP_drprdy : std_logic_vector(2 downto 0) := (others => '0');
401 signal SFP_drpen : std_logic_vector(2 downto 0) := (others => '0');
402 signal SFP_drpwe : std_logic_vector(2 downto 0) := (others => '0');
403 signal SFP_rxdfeagchold : std_logic_vector(2 downto 0) := (others => '0');
404 signal SFP_adapt_done : std_logic_vector(2 downto 0) := (others => '0');
405 signal SFP_rxmonitor : array3X7 := (others => (others => '0'));
406 signal SFP_drpdo : array3X16 := (others => (others => '0'));
407 signal SFP_rxmonitorsel : array3X2 := (others => (others => '0'));
408 signal SFP_drpaddr : array3X9 := (others => (others => '0'));
409 signal SFP_drpdi : array3X16 := (others => (others => '0'));
410 signal GTX_TX_PAUSE : std_logic := '0';
411 signal SFP_LOOPBACK_IN : array3X3 := (others => (others => '0'));
412 signal SFP_pd : array3X2 := (others => (others => '0'));
413 signal SFP_RX_FSM_RESET_DONE : std_logic_vector(2 downto 0) := (others => '0');
414 signal SFP_TX_FSM_RESET_DONE : std_logic_vector(2 downto 0) := (others => '0');
415 signal SFP_RXDVLD : std_logic_vector(2 downto 0) := (others => '0');
416 signal SFP_RXHEADERVLD : std_logic_vector(2 downto 0) := (others => '0');
417 signal SFP_RXGEARBOXSLIP : std_logic_vector(2 downto 0) := (others => '0');
418 signal SFP_RXPRBSERR_OUT : std_logic_vector(2 downto 0) := (others => '0');
419 signal SFP_RXPRBSSEL_IN : array3X3 := (others => (others => '0'));
420 signal SFP_TXPRBSSEL_IN : array3X3 := (others => (others => '0'));
421 signal SFP_EYESCANDATAERROR_OUT : std_logic_vector(2 downto 0) := (others => '0');
422 signal SFP_RXGOOD : std_logic_vector(2 downto 0) := (others => '0');
423 signal SFP_TXD : array3X32 := (others => (others => '0'));
424 signal SFP_TXD_inv : array3X32 := (others => (others => '0'));
425 signal SFP_TXHEADER : array3X2 := (others => (others => '0'));
426 signal SFP_RXD : array3X32 := (others => (others => '0'));
427 signal SFP_RXD_inv : array3X32 := (others => (others => '0'));
428 signal SFP_RXHEADER : array3X2 := (others => (others => '0'));
429 signal SFP_EmacPhyTxD : array3X32 := (others => (others => '0'));
430 signal SFP_EmacPhyTxC : array3X4 := (others => (others => '0'));
431 signal SFP_PhyEmacRxD : array3X32 := (others => (others => '0'));
432 signal SFP_PhyEmacRxC : array3X4 := (others => (others => '0'));
433 signal SFP_PhyEmacRxD_q : array3X32 := (others => (others => '0'));
434 signal SFP_PhyEmacRxC_q : array3X4 := (others => (others => '0'));
435 signal EmacPhyTxD : array3X32 := (others => (others => '0'));
436 signal EmacPhyTxC : array3X4 := (others => (others => '0'));
437 signal PhyEmacRxD : array3X32 := (others => (others => '0'));
438 signal PhyEmacRxC : array3X4 := (others => (others => '0'));
439 
440 begin
441 clk156 <= ClientClk;
442 gtx_rxresetdone <= SFP_RXRESETDONE;
443 process(ClientClk,gtx_reset,ClientClk_lock)
444 begin
445  if(gtx_reset = '1' or ClientClk_lock = '0')then
446  gtx_resetSyncRegs <= (others => '1');
447  elsif(ClientClk'event and ClientClk = '1')then
448  gtx_resetSyncRegs <= gtx_resetSyncRegs(1 downto 0) & '0';
449  end if;
450 end process;
451 process(txusrclk)
452 begin
453  if(txusrclk'event and txusrclk = '1')then
454  if(TXSEQ_cntr = "1000001")then
455  TXSEQ_cntr <= (others => '0');
456  else
457  TXSEQ_cntr <= TXSEQ_cntr + 1;
458  end if;
459  if(TXSEQ_cntr(0) = '1')then
460  GTX_TX_PAUSE <= and_reduce(TXSEQ_cntr(5 downto 1));
461  end if;
462  if(inh_TX(0) = '1')then
463  SFP_TXSEQUENCE(0) <= (others => '0');
464  elsif(TXSEQ_cntr(0) = '1')then
465  SFP_TXSEQUENCE(0) <= '0' & TXSEQ_cntr(6 downto 1);
466  end if;
467  if(inh_TX(1) = '1')then
468  SFP_TXSEQUENCE(1) <= (others => '0');
469  elsif(TXSEQ_cntr(0) = '1')then
470  SFP_TXSEQUENCE(1) <= '0' & TXSEQ_cntr(6 downto 1);
471  end if;
472  if(inh_TX(2) = '1')then
473  SFP_TXSEQUENCE(2) <= (others => '0');
474  elsif(TXSEQ_cntr(0) = '1')then
475  SFP_TXSEQUENCE(2) <= '0' & TXSEQ_cntr(6 downto 1);
476  end if;
477  end if;
478 end process;
479 process(TXUSRCLK,gtx_reset)
480 begin
481  if(gtx_reset = '1')then
482  reset_TXSyncRegs <= (others => '1');
483  elsif(TXUSRCLK'event and TXUSRCLK = '1')then
484  reset_TXSyncRegs <= reset_TXSyncRegs(1 downto 0) & '0';
485  end if;
486 end process;
487 process(TXUSRCLK,SFP_TX_FSM_RESET_DONE(0))
488 begin
489  if(SFP_TX_FSM_RESET_DONE(0) = '0')then
490  inh_TX(0) <= '1';
491  inh_TX_q(0) <= '1';
492  elsif(TXUSRCLK'event and TXUSRCLK = '1')then
493  if(TXSEQ_cntr(0) = '1' and TXSEQ_cntr(6) = '1')then
494  inh_TX(0) <= '0';
495  end if;
496  inh_TX_q(0) <= inh_TX(0);
497  end if;
498 end process;
499 process(TXUSRCLK,SFP_TX_FSM_RESET_DONE(1))
500 begin
501  if(SFP_TX_FSM_RESET_DONE(1) = '0')then
502  inh_TX(1) <= '1';
503  inh_TX_q(1) <= '1';
504  elsif(TXUSRCLK'event and TXUSRCLK = '1')then
505  if(TXSEQ_cntr(0) = '1' and TXSEQ_cntr(6) = '1')then
506  inh_TX(1) <= '0';
507  end if;
508  inh_TX_q(1) <= inh_TX(1);
509  end if;
510 end process;
511 process(TXUSRCLK,SFP_TX_FSM_RESET_DONE(2))
512 begin
513  if(SFP_TX_FSM_RESET_DONE(2) = '0')then
514  inh_TX(2) <= '1';
515  inh_TX_q(2) <= '1';
516  elsif(TXUSRCLK'event and TXUSRCLK = '1')then
517  if(TXSEQ_cntr(0) = '1' and TXSEQ_cntr(6) = '1')then
518  inh_TX(2) <= '0';
519  end if;
520  inh_TX_q(2) <= inh_TX(2);
521  end if;
522 end process;
523 g_XGbEPCS : for i in 0 to 2 generate
524  i_XGbEPCS: XGbEPCS32 PORT MAP (
525  reset => gtx_resetSyncRegs (2),
526  clk2x => ClientClk2X,
527  clk => ClientClk ,
528  TXUSRCLK => txusrclk,
529  TX_high => TX_high,
530  RXUSRCLK => SFP_RXUSRCLK(i),
531  RXRESETDONE => SFP_RXRESETDONE (i),
532  inh_TX => inh_TX(i),
533  RESET_TXSync => reset_TXSyncRegs (2),
534  GTX_RXGEARBOXSLIP_OUT => SFP_RXGEARBOXSLIP (i),
535  GTX_TXD => SFP_TXD(i),
536  GTX_TXHEADER => SFP_TXHEADER (i),
537  GTX_TX_PAUSE => GTX_TX_PAUSE ,
538  GTX_RXD => SFP_RXD(i),
539  GTX_RXDVLD => SFP_RXDVLD(i),
540  GTX_RXHEADER => SFP_RXHEADER (i),
541  GTX_RXHEADERVLD => SFP_RXHEADERVLD (i),
542  GTX_RXGOOD => SFP_RXGOOD(i),
543  EmacPhyTxC => SFP_EmacPhyTxc(i),
544  EmacPhyTxD => SFP_EmacPhyTxd(i),
545  PhyEmacRxC => SFP_PhyEmacRxC(i),
546  PhyEmacRxD => SFP_PhyEmacRxD(i)
547  );
548 end generate;
549 process(ClientClk)
550 begin
551  if(ClientClk'event and ClientClk = '1')then
552  ClientClkToggle <= not ClientClkToggle;
553  for i in 0 to 2 loop
554  xgmii_rxd(i) <= SFP_PhyEmacRxd(i) & SFP_PhyEmacRxd_q(i);
555  xgmii_rxc(i) <= SFP_PhyEmacRxc(i) & SFP_PhyEmacRxc_q(i);
556  end loop;
557  end if;
558 end process;
559 process(ClientClk2X)
560 begin
561  if(ClientClk2X'event and ClientClk2X = '1')then
562  ClientClkToggle_q <= ClientClkToggle;
563  SFP_PhyEmacRxd_q <= SFP_PhyEmacRxd;
564  SFP_PhyEmacRxc_q <= SFP_PhyEmacRxc;
565  TX_high <= ClientClkToggle_q xnor ClientClkToggle;
566  for i in 0 to 2 loop
567  if(TX_high = '1')then
568  SFP_EmacPhyTxd(i) <= xgmii_txd(i)(31 downto 0);
569  SFP_EmacPhyTxc(i) <= xgmii_txc(i)(3 downto 0);
570  else
571  SFP_EmacPhyTxd(i) <= xgmii_txd(i)(63 downto 32);
572  SFP_EmacPhyTxc(i) <= xgmii_txc(i)(7 downto 4);
573  end if;
574  end loop;
575  end if;
576 end process;
577 SFP_gttxreset <= "111" when gtx_reset = '1' else "000";
578 SFP_gtrxreset <= "111" when gtx_reset = '1' else "000";
579 i_SFP3_init : SFP3_v2_7_init
580  generic map(N_SFP => N_SFP)
581  port map
582  (
583  SYSCLK_IN => DRPclk,
584  SOFT_RESET_IN => '0',
585  DONT_RESET_ON_DATA_ERROR_IN => '0',
586  GT0_TX_FSM_RESET_DONE_OUT => SFP_TX_FSM_RESET_DONE (0),
587  GT0_RX_FSM_RESET_DONE_OUT => PCS_lock(0),
588  GT0_DATA_VALID_IN => SFP_RXGOOD(0),
589  GT1_TX_FSM_RESET_DONE_OUT => SFP_TX_FSM_RESET_DONE (1),
590  GT1_RX_FSM_RESET_DONE_OUT => PCS_lock(1),
591  GT1_DATA_VALID_IN => SFP_RXGOOD(1),
592  GT2_TX_FSM_RESET_DONE_OUT => SFP_TX_FSM_RESET_DONE (2),
593  GT2_RX_FSM_RESET_DONE_OUT => PCS_lock(2),
594  GT2_DATA_VALID_IN => SFP_RXGOOD(2),
595 
596 
597 
598 
599 
600  --_____________________________________________________________________
601  --_____________________________________________________________________
602  --GT0 (X1Y12)
603 
604  ---------------------------- Channel - DRP Ports --------------------------
605  GT0_DRPADDR_IN => SFP_drpaddr(0),
606  GT0_DRPCLK_IN => DRPclk,
607  GT0_DRPDI_IN => SFP_drpdi(0),
608  GT0_DRPDO_OUT => SFP_drpdo(0),
609  GT0_DRPEN_IN => SFP_drpen(0),
610  GT0_DRPRDY_OUT => SFP_drprdy(0),
611  GT0_DRPWE_IN => SFP_drpwe(0),
612  ------------------------------- Loopback Ports -----------------------------
613  GT0_LOOPBACK_IN => SFP_LOOPBACK_IN(0),
614  ------------------------------ Power-Down Ports ----------------------------
615  GT0_RXPD_IN => SFP_pd(0),
616  GT0_TXPD_IN => SFP_pd(0),
617  --------------------- RX Initialization and Reset Ports --------------------
618  GT0_RXUSERRDY_IN => SFP_rxuserrdy(0),
619  -------------------------- RX Margin Analysis Ports ------------------------
620  GT0_EYESCANDATAERROR_OUT => SFP_EYESCANDATAERROR_OUT (0),
621  ------------------------- Receive Ports - CDR Ports ------------------------
622  GT0_RXCDRLOCK_OUT => open,
623  ------------------ Receive Ports - FPGA RX Interface Ports -----------------
624  GT0_RXUSRCLK_IN => SFP_RXUSRCLK(0),
625  GT0_RXUSRCLK2_IN => SFP_RXUSRCLK(0),
626  ------------------ Receive Ports - FPGA RX interface Ports -----------------
627  GT0_RXDATA_OUT => SFP_RXD_inv(0),
628  ------------------- Receive Ports - Pattern Checker Ports ------------------
629  GT0_RXPRBSERR_OUT => SFP_RXPRBSERR_OUT (0),
630  GT0_RXPRBSSEL_IN => SFP_RXPRBSSEL_IN (0),
631  ------------------- Receive Ports - Pattern Checker ports ------------------
632  GT0_RXPRBSCNTRESET_IN => '0',
633  --------------------------- Receive Ports - RX AFE -------------------------
634  GT0_GTXRXP_IN => SFP0_RXP,
635  ------------------------ Receive Ports - RX AFE Ports ----------------------
636  GT0_GTXRXN_IN => SFP0_RXN,
637  ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
638  GT0_RXBUFRESET_IN => '0',
639  GT0_RXBUFSTATUS_OUT => open,
640  --------------- Receive Ports - RX Fabric Output Control Ports -------------
641  GT0_RXOUTCLK_OUT => SFP_rxoutclk(0),
642  ---------------------- Receive Ports - RX Gearbox Ports --------------------
643  GT0_RXDATAVALID_OUT => SFP_RXDVLD(0),
644  GT0_RXHEADER_OUT => SFP_RXHEADER(0),
645  GT0_RXHEADERVALID_OUT => SFP_RXHEADERVLD (0),
646  --------------------- Receive Ports - RX Gearbox Ports --------------------
647  GT0_RXGEARBOXSLIP_IN => SFP_RXGEARBOXSLIP (0),
648  ------------- Receive Ports - RX Initialization and Reset Ports ------------
649  GT0_GTRXRESET_IN => SFP_gtrxreset(0),
650  GT0_RXPMARESET_IN => '0',
651  ------------------ Receive Ports - RX Margin Analysis ports ----------------
652  GT0_RXLPMEN_IN => '0',
653  -------------- Receive Ports -RX Initialization and Reset Ports ------------
654  GT0_RXRESETDONE_OUT => SFP_rxresetdone(0),
655  --------------------- TX Initialization and Reset Ports --------------------
656  GT0_GTTXRESET_IN => SFP_gttxreset (0),
657  GT0_TXUSERRDY_IN => SFP_txuserrdy(0),
658  ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
659  GT0_TXUSRCLK_IN => txusrclk,
660  GT0_TXUSRCLK2_IN => txusrclk,
661  --------------- Transmit Ports - TX Configurable Driver Ports --------------
662  GT0_TXDIFFCTRL_IN => "1110",
663  GT0_TXINHIBIT_IN => '0',
664  GT0_TXMAINCURSOR_IN => (others => '0'),
665  ------------------ Transmit Ports - TX Data Path interface -----------------
666  GT0_TXDATA_IN => SFP_TXD_inv(0),
667  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
668  GT0_GTXTXN_OUT => SFP0_TXN,
669  GT0_GTXTXP_OUT => SFP0_TXP,
670  ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
671  GT0_TXOUTCLK_OUT => SFP_TXOUTCLK(0),
672  GT0_TXOUTCLKFABRIC_OUT => open,
673  GT0_TXOUTCLKPCS_OUT => open,
674  --------------------- Transmit Ports - TX Gearbox Ports --------------------
675  GT0_TXHEADER_IN => SFP_TXHEADER(0),
676  GT0_TXSEQUENCE_IN => SFP_TXSEQUENCE(0),
677  ------------- Transmit Ports - TX Initialization and Reset Ports -----------
678  GT0_TXRESETDONE_OUT => SFP_txresetdone(0),
679  ------------------ Transmit Ports - pattern Generator Ports ----------------
680  GT0_TXPRBSSEL_IN => SFP_TXPRBSSEL_IN (0),
681 
682 
683 
684 
685 
686 
687  --_____________________________________________________________________
688  --_____________________________________________________________________
689  --GT1 (X1Y13)
690 
691  ---------------------------- Channel - DRP Ports --------------------------
692  GT1_DRPADDR_IN => SFP_drpaddr(1),
693  GT1_DRPCLK_IN => DRPclk,
694  GT1_DRPDI_IN => SFP_drpdi(1),
695  GT1_DRPDO_OUT => SFP_drpdo(1),
696  GT1_DRPEN_IN => SFP_drpen(1),
697  GT1_DRPRDY_OUT => SFP_drprdy(1),
698  GT1_DRPWE_IN => SFP_drpwe(1),
699  ------------------------------- Loopback Ports -----------------------------
700  GT1_LOOPBACK_IN => SFP_LOOPBACK_IN(1),
701  ------------------------------ Power-Down Ports ----------------------------
702  GT1_RXPD_IN => SFP_pd(1),
703  GT1_TXPD_IN => SFP_pd(1),
704  --------------------- RX Initialization and Reset Ports --------------------
705  GT1_RXUSERRDY_IN => SFP_rxuserrdy(1),
706  -------------------------- RX Margin Analysis Ports ------------------------
707  GT1_EYESCANDATAERROR_OUT => SFP_EYESCANDATAERROR_OUT (1),
708  ------------------------- Receive Ports - CDR Ports ------------------------
709  GT1_RXCDRLOCK_OUT => open,
710  ------------------ Receive Ports - FPGA RX Interface Ports -----------------
711  GT1_RXUSRCLK_IN => SFP_RXUSRCLK(1),
712  GT1_RXUSRCLK2_IN => SFP_RXUSRCLK(1),
713  ------------------ Receive Ports - FPGA RX interface Ports -----------------
714  GT1_RXDATA_OUT => SFP_RXD_inv(1),
715  ------------------- Receive Ports - Pattern Checker Ports ------------------
716  GT1_RXPRBSERR_OUT => SFP_RXPRBSERR_OUT (1),
717  GT1_RXPRBSSEL_IN => SFP_RXPRBSSEL_IN (1),
718  ------------------- Receive Ports - Pattern Checker ports ------------------
719  GT1_RXPRBSCNTRESET_IN => '0',
720  --------------------------- Receive Ports - RX AFE -------------------------
721  GT1_GTXRXP_IN => SFP1_RXP,
722  ------------------------ Receive Ports - RX AFE Ports ----------------------
723  GT1_GTXRXN_IN => SFP1_RXN,
724  ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
725  GT1_RXBUFRESET_IN => '0',
726  GT1_RXBUFSTATUS_OUT => open,
727  --------------- Receive Ports - RX Fabric Output Control Ports -------------
728  GT1_RXOUTCLK_OUT => SFP_rxoutclk(1),
729  ---------------------- Receive Ports - RX Gearbox Ports --------------------
730  GT1_RXDATAVALID_OUT => SFP_RXDVLD(1),
731  GT1_RXHEADER_OUT => SFP_RXHEADER(1),
732  GT1_RXHEADERVALID_OUT => SFP_RXHEADERVLD (1),
733  --------------------- Receive Ports - RX Gearbox Ports --------------------
734  GT1_RXGEARBOXSLIP_IN => SFP_RXGEARBOXSLIP (1),
735  ------------- Receive Ports - RX Initialization and Reset Ports ------------
736  GT1_GTRXRESET_IN => SFP_gtrxreset(1),
737  GT1_RXPMARESET_IN => '0',
738  ------------------ Receive Ports - RX Margin Analysis ports ----------------
739  GT1_RXLPMEN_IN => '0',
740  -------------- Receive Ports -RX Initialization and Reset Ports ------------
741  GT1_RXRESETDONE_OUT => SFP_rxresetdone(1),
742  --------------------- TX Initialization and Reset Ports --------------------
743  GT1_GTTXRESET_IN => SFP_gttxreset (1),
744  GT1_TXUSERRDY_IN => SFP_txuserrdy(1),
745  ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
746  GT1_TXUSRCLK_IN => txusrclk,
747  GT1_TXUSRCLK2_IN => txusrclk,
748  --------------- Transmit Ports - TX Configurable Driver Ports --------------
749  GT1_TXDIFFCTRL_IN => "1110",
750  GT1_TXINHIBIT_IN => '0',
751  GT1_TXMAINCURSOR_IN => (others => '0'),
752  ------------------ Transmit Ports - TX Data Path interface -----------------
753  GT1_TXDATA_IN => SFP_TXD_inv(1),
754  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
755  GT1_GTXTXN_OUT => SFP1_TXN,
756  GT1_GTXTXP_OUT => SFP1_TXP,
757  ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
758  GT1_TXOUTCLK_OUT => open,
759  GT1_TXOUTCLKFABRIC_OUT => open,
760  GT1_TXOUTCLKPCS_OUT => open,
761  --------------------- Transmit Ports - TX Gearbox Ports --------------------
762  GT1_TXHEADER_IN => SFP_TXHEADER(1),
763  GT1_TXSEQUENCE_IN => SFP_TXSEQUENCE(1),
764  ------------- Transmit Ports - TX Initialization and Reset Ports -----------
765  GT1_TXRESETDONE_OUT => SFP_txresetdone(1),
766  ------------------ Transmit Ports - pattern Generator Ports ----------------
767  GT1_TXPRBSSEL_IN => SFP_TXPRBSSEL_IN (1),
768 
769 
770  --_____________________________________________________________________
771  --_____________________________________________________________________
772  --GT2 (X1Y14)
773 
774  ---------------------------- Channel - DRP Ports --------------------------
775  GT2_DRPADDR_IN => SFP_drpaddr(2),
776  GT2_DRPCLK_IN => DRPclk,
777  GT2_DRPDI_IN => SFP_drpdi(2),
778  GT2_DRPDO_OUT => SFP_drpdo(2),
779  GT2_DRPEN_IN => SFP_drpen(2),
780  GT2_DRPRDY_OUT => SFP_drprdy(2),
781  GT2_DRPWE_IN => SFP_drpwe(2),
782  ------------------------------- Loopback Ports -----------------------------
783  GT2_LOOPBACK_IN => SFP_LOOPBACK_IN(2),
784  ------------------------------ Power-Down Ports ----------------------------
785  GT2_RXPD_IN => SFP_pd(2),
786  GT2_TXPD_IN => SFP_pd(2),
787  --------------------- RX Initialization and Reset Ports --------------------
788  GT2_RXUSERRDY_IN => SFP_rxuserrdy(2),
789  -------------------------- RX Margin Analysis Ports ------------------------
790  GT2_EYESCANDATAERROR_OUT => SFP_EYESCANDATAERROR_OUT (2),
791  ------------------------- Receive Ports - CDR Ports ------------------------
792  GT2_RXCDRLOCK_OUT => open,
793  ------------------ Receive Ports - FPGA RX Interface Ports -----------------
794  GT2_RXUSRCLK_IN => SFP_RXUSRCLK(2),
795  GT2_RXUSRCLK2_IN => SFP_RXUSRCLK(2),
796  ------------------ Receive Ports - FPGA RX interface Ports -----------------
797  GT2_RXDATA_OUT => SFP_RXD_inv(2),
798  ------------------- Receive Ports - Pattern Checker Ports ------------------
799  GT2_RXPRBSERR_OUT => SFP_RXPRBSERR_OUT (2),
800  GT2_RXPRBSSEL_IN => SFP_RXPRBSSEL_IN (2),
801  ------------------- Receive Ports - Pattern Checker ports ------------------
802  GT2_RXPRBSCNTRESET_IN => '0',
803  --------------------------- Receive Ports - RX AFE -------------------------
804  GT2_GTXRXP_IN => SFP2_RXP,
805  ------------------------ Receive Ports - RX AFE Ports ----------------------
806  GT2_GTXRXN_IN => SFP2_RXN,
807  ------------------- Receive Ports - RX Buffer Bypass Ports -----------------
808  GT2_RXBUFRESET_IN => '0',
809  GT2_RXBUFSTATUS_OUT => open,
810  --------------- Receive Ports - RX Fabric Output Control Ports -------------
811  GT2_RXOUTCLK_OUT => SFP_rxoutclk(2),
812  ---------------------- Receive Ports - RX Gearbox Ports --------------------
813  GT2_RXDATAVALID_OUT => SFP_RXDVLD(2),
814  GT2_RXHEADER_OUT => SFP_RXHEADER(2),
815  GT2_RXHEADERVALID_OUT => SFP_RXHEADERVLD (2),
816  --------------------- Receive Ports - RX Gearbox Ports --------------------
817  GT2_RXGEARBOXSLIP_IN => SFP_RXGEARBOXSLIP (2),
818  ------------- Receive Ports - RX Initialization and Reset Ports ------------
819  GT2_GTRXRESET_IN => SFP_gtrxreset(2),
820  GT2_RXPMARESET_IN => '0',
821  ------------------ Receive Ports - RX Margin Analysis ports ----------------
822  GT2_RXLPMEN_IN => '0',
823  -------------- Receive Ports -RX Initialization and Reset Ports ------------
824  GT2_RXRESETDONE_OUT => SFP_rxresetdone(2),
825  --------------------- TX Initialization and Reset Ports --------------------
826  GT2_GTTXRESET_IN => SFP_gttxreset (2),
827  GT2_TXUSERRDY_IN => SFP_txuserrdy(2),
828  ------------------ Transmit Ports - FPGA TX Interface Ports ----------------
829  GT2_TXUSRCLK_IN => txusrclk,
830  GT2_TXUSRCLK2_IN => txusrclk,
831  --------------- Transmit Ports - TX Configurable Driver Ports --------------
832  GT2_TXDIFFCTRL_IN => "1110",
833  GT2_TXINHIBIT_IN => '0',
834  GT2_TXMAINCURSOR_IN => (others => '0'),
835  ------------------ Transmit Ports - TX Data Path interface -----------------
836  GT2_TXDATA_IN => SFP_TXD_inv(2),
837  ---------------- Transmit Ports - TX Driver and OOB signaling --------------
838  GT2_GTXTXN_OUT => SFP2_TXN,
839  GT2_GTXTXP_OUT => SFP2_TXP,
840  ----------- Transmit Ports - TX Fabric Clock Output Control Ports ----------
841  GT2_TXOUTCLK_OUT => open,
842  GT2_TXOUTCLKFABRIC_OUT => open,
843  GT2_TXOUTCLKPCS_OUT => open,
844  --------------------- Transmit Ports - TX Gearbox Ports --------------------
845  GT2_TXHEADER_IN => SFP_TXHEADER(2),
846  GT2_TXSEQUENCE_IN => SFP_TXSEQUENCE(2),
847  ------------- Transmit Ports - TX Initialization and Reset Ports -----------
848  GT2_TXRESETDONE_OUT => SFP_txresetdone(2),
849  ------------------ Transmit Ports - pattern Generator Ports ----------------
850  GT2_TXPRBSSEL_IN => SFP_TXPRBSSEL_IN (2),
851 
852 
853  --____________________________COMMON PORTS________________________________
854  ---------------------- Common Block - Ref Clock Ports ---------------------
855  GT0_GTREFCLK0_COMMON_IN => SFP_REFCLK,
856  ------------------------- Common Block - QPLL Ports ------------------------
857  GT0_QPLLLOCK_OUT => qplllock,
858  GT0_QPLLLOCKDETCLK_IN => DRPclk,
859  GT0_QPLLRESET_IN => qpllreset
860 
861  );
862 process(SFP_TXD,SFP_RXD,SFP_RXD_inv)
863  begin
864  for j in 0 to 2 loop
865  for i in 0 to 31 loop
866  SFP_TXD_inv(j)(i) <= SFP_TXD(j)(31-i);
867  SFP_RXD(j)(i) <= SFP_RXD_inv(j)(31-i);
868  end loop;
869  end loop;
870 end process;
871 i_REFCLK : IBUFDS_GTE2 port map(O => SFP_REFCLK, ODIV2 => open, CEB => '0', I => SFP_REFCLK_P, IB => SFP_REFCLK_N);
872 i_txusrclk : BUFG port map (I => SFP_TXOUTCLK(0), O => txusrclk);
873 g_SFP_rxusrclk : for i in 0 to 2 generate
874  i_SFP_rxusrclk : BUFG port map (I => SFP_RXOUTCLK(i), O => SFP_rxusrclk(i));
875 end generate;
876 i_REFCLK2X_in: bufg port map(i => SFP_REFCLK, o => REFCLK2X_in);
877 i_ClientClk2X : BUFG port map (I => ClientClk2X_dcm, O => ClientClk2X);
878 i_ClientClk : BUFG port map (I => ClientClk_dcm, O => ClientClk);
879 i_REFCLK2XPLLRST : SRL16 generic map(INIT => x"ffff" )
880  port map (
881  Q => REFCLK2XPLLRST, -- SRL data output
882  A0 => '1', -- Select[0] input
883  A1 => '1', -- Select[1] input
884  A2 => '1', -- Select[2] input
885  A3 => '1', -- Select[3] input
886  CLK => REFCLK2X_in, -- Clock input
887  D => '0' -- SRL data input
888  );
889 i_REFCLK2XPLL : PLLE2_BASE
890  generic map (
891  BANDWIDTH => "OPTIMIZED", -- OPTIMIZED, HIGH, LOW
892  CLKFBOUT_MULT => 8, -- Multiply value for all CLKOUT, (2-64)
893  CLKFBOUT_PHASE => 0.0, -- Phase offset in degrees of CLKFB, (-360.000-360.000).
894  CLKIN1_PERIOD => 6.4, -- Input clock period in ns to ps resolution (i.e. 33.333 is 30 MHz).
895  -- CLKOUT0_DIVIDE - CLKOUT5_DIVIDE: Divide amount for each CLKOUT (1-128)
896  CLKOUT0_DIVIDE => 4,
897  DIVCLK_DIVIDE => 1, -- Master division value, (1-56)
898  REF_JITTER1 => 0.0, -- Reference input jitter in UI, (0.000-0.999).
899  STARTUP_WAIT => "FALSE" -- Delay DONE until PLL Locks, ("TRUE"/"FALSE")
900  )
901  port map (
902  -- Clock Outputs: 1-bit (each) output: User configurable clock outputs
903  CLKOUT0 => ClientClk2X_dcm ,
904  -- Feedback Clocks: 1-bit (each) output: Clock feedback ports
905  CLKFBOUT => ClientClk_dcm, -- 1-bit output: Feedback clock
906  -- Status Port: 1-bit (each) output: PLL status ports
907  LOCKED => ClientClk_lock, -- 1-bit output: LOCK
908  -- Clock Input: 1-bit (each) input: Clock input
909  CLKIN1 => REFCLK2X_in, -- 1-bit input: Input clock
910  -- Control Ports: 1-bit (each) input: PLL control ports
911  PWRDWN => '0', -- 1-bit input: Power-down
912  RST => REFCLK2XPLLRST, -- 1-bit input: Reset
913  -- Feedback Clocks: 1-bit (each) input: Clock feedback ports
914  CLKFBIN => ClientClk -- 1-bit input: Feedback clock
915  );
916 
917 
918 end Behavioral;
919