00001 --**************************************************************
00002 --* *
00003 --* The source code for the ATLAS BCM "AAA" FPGA is made *
00004 --* available via the GNU General Public License (GPL) *
00005 --* unless otherwise stated below. *
00006 --* *
00007 --* In case of problems/questions/bug reports etc. please *
00008 --* contact michael.niegl@cern.ch *
00009 --* *
00010 --**************************************************************
00011
00012 --**************************************************************
00013 --* *
00014 --* $Source: /local/reps/bcmfpga/bcm_aaa/bcm_aaa/rio/rio_rxtx.vhd,v $ *
00015 --* $Revision: 1.12.2.7 $ *
00016 --* $Name: dev $ *
00017 --* $Author: mniegl $ *
00018 --* $Date: 2008/11/03 17:57:48 $ *
00019
00020
00021 --* *
00022 --**************************************************************
00023
00024 library ieee;
00025
00026 use ieee.std_logic_1164.all;
00027
00028 use ieee.std_logic_arith.all;
00029
00030 use ieee.std_logic_unsigned.all;
00031 use ieee.std_logic_signed.all;
00032
00033 use ieee.numeric_std.all;
00034 library WORK;
00035 use work.daq_header.all;
00036
00037 library unisim;
00038
00039 use unisim.vcomponents.all;
00040
00041
00042
00043
00044
00045 entity rio_rxtx is
00046 generic
00047 (
00048 USE_CHIPSCOPE : := 0;
00049 BOARD : := "SMall";
00050 SIMULATION_P : := 0; -- Set to 1 when using module in simulation
00051 XOR_PATTERN : (31 downto 0) := "11110000111100001111000011110000"
00052 );
00053 port
00054 (
00055 SET_SHIFT : in (7 downto 0);
00056 CALIB : in ;
00057 CAL1 : in ;
00058 CAL2 : in ;
00059 CHECK_OUT_1 : out ;
00060 CHECK_OUT_2 : out ;
00061 REFCLK : in ;
00062 PARCLK : in ;
00063 TX_SYSTEM_RESET_IN : in ;
00064 RX_SYSTEM_RESET_IN : in ;
00065 MGT0_RXLOCK_OUT : out ;
00066 MGT0_TXLOCK_OUT : out ;
00067 MGT1_RXLOCK_OUT : out ;
00068 MGT1_TXLOCK_OUT : out ;
00069 RX1N_IN_1 : in ;
00070 RX1P_IN_1 : in ;
00071 RX1N_IN_2 : in ;
00072 RX1P_IN_2 : in ;
00073 TX1N_OUT_1 : out ;
00074 TX1P_OUT_1 : out ;
00075 TX1N_OUT_2 : out ;
00076 TX1P_OUT_2 : out ;
00077 RXRECCLK1_OUT : out ;
00078 RX_READY_FLAG : out ;
00079 TX_READY_FLAG : out ;
00080 BC_2X : out ;
00081 RX_DATA_OUT_1 : out (31 downto 0);
00082 RX_DATA_OUT_2 : out (31 downto 0);
00083 MASK1 : out ;
00084 MASK2 : out ;
00085 VALID : out
00086 );
00087 end rio_rxtx;
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 architecture rio_rxtx_arc of rio_rxtx is
00101
00102 --*************************** Signal Declarations *****************************
00103
00104 signal SHIFT1 : range 0 to 7 := 0;
00105 signal SHIFT2 : range 0 to 7 := 0;
00106 signal valid1 : := '0';
00107 signal valid2 : := '0';
00108 signal data_out_1 : (31 downto 0) := (others => '0');
00109 signal data_out_2 : (31 downto 0) := (others => '0');
00110 ----------------------- Clock Signals ---------------------------
00111 signal refclk1_i : ;
00112 signal pulse_clk_p : ;
00113 signal usr_clk2_i : ;
00114 signal mgt0_usr_clk2_i : ;
00115 signal mgt1_usr_clk2_i : ;
00116 signal drp_clk_in_i : ;
00117 ------------------------- MGT Wrapper Signals -----------------------------
00118 -------------------------- Calibration Block Ports -------------------------
00119 signal mgt0_active_i : ;
00120 signal mgt1_active_i : ;
00121 ---------------------------------- PLL Lock --------------------------------
00122 signal mgt0_rxlock_i : ;
00123 signal mgt0_txlock_i : ;
00124 signal mgt1_rxlock_i : ;
00125 signal mgt1_txlock_i : ;
00126 -- -------------------- Receive Data Path and Control Ports -------------------
00127 signal mgt0_rxdata_i : (31 downto 0);
00128 signal mgt1_rxdata_i : (31 downto 0);
00129 -- signal mgt0_rxdata_irec : std_logic_vector(31 downto 0);
00130 -- signal mgt1_rxdata_irec : std_logic_vector(31 downto 0);
00131 signal mgt0_rxdata_iout : (31 downto 0);
00132 signal mgt1_rxdata_iout : (31 downto 0);
00133 -- signal mgt0_rxdata_p : std_logic_vector(31 downto 0);
00134 -- signal mgt1_rxdata_p : std_logic_vector(31 downto 0);
00135 -- signal mgt0_rxdata_n : std_logic_vector(31 downto 0);
00136 -- signal mgt1_rxdata_n : std_logic_vector(31 downto 0);
00137 -- signal mgt0_rxdata_mux : std_logic_vector(31 downto 0);
00138 -- signal mgt1_rxdata_mux : std_logic_vector(31 downto 0);
00139 -- -------------------------------- Serial Ports ------------------------------
00140 signal mgt0_rx1n_i : ;
00141 signal mgt0_rx1p_i : ;
00142 signal mgt0_tx1n_i : ;
00143 signal mgt0_tx1p_i : ;
00144 signal mgt1_rx1n_i : ;
00145 signal mgt1_rx1p_i : ;
00146 signal mgt1_tx1n_i : ;
00147 signal mgt1_tx1p_i : ;
00148 ----------------------------------- Status ---------------------------------
00149 signal mgt0_rxstatus_i : (5 downto 0);
00150 signal mgt1_rxstatus_i : (5 downto 0);
00151 -------------------- Transmit Data Path and Control Ports ------------------
00152 signal mgt0_txdata_i : (31 downto 0);
00153 signal mgt1_txdata_i : (31 downto 0);
00154 signal xor_tx_rx : (31 downto 0);
00155 signal xor_tx_rx1 : (31 downto 0);
00156 signal xor_tx_rx2 : (31 downto 0);
00157 -------------------------------- User Clocks -------------------------------
00158 signal mgt0_rxrecclk1_i : ;
00159 signal mgt0_rxrecclk2_i : ;
00160 signal mgt0_txoutclk1_i : ;
00161 signal mgt0_txoutclk2_i : ;
00162 signal mgt1_rxrecclk1_i : ;
00163 signal mgt1_rxrecclk2_i : ;
00164 signal mgt1_txoutclk1_i : ;
00165 signal mgt1_txoutclk2_i : ;
00166 signal mgt1_txusrclk2_i : ;
00167 ------------------------------- Global Signals -----------------------------
00168 signal debounce_tx_system_reset_r : (0 to 3);
00169 signal debounce_rx_system_reset_r : (0 to 3);
00170 signal rxbuferr_i : ;
00171 signal rxlock_i : ;
00172 signal rx_pmareset_c : ;
00173 signal rx_system_ready_i : ;
00174 signal rx_sync_i : ;
00175 signal rxreset_c : ;
00176 signal rx_system_reset_c : ;
00177 signal rx_system_reset_in_i : ;
00178 signal rx_usrclks_stable_i : ;
00179 signal rx_user_logic_reset_c : ;
00180 signal txbuferr_i : ;
00181 signal tx_pmareset_c : ;
00182 signal tx_post_sync_reset_i : ;
00183 signal txreset_c : ;
00184 signal tx_system_reset_c : ;
00185 signal tx_system_reset_in_i : ;
00186 signal tx_system_ready_i : ;
00187 signal tied_to_ground_i : ;
00188 signal tied_to_ground_vec_i : (63 downto 0);
00189 signal tied_to_vcc_i : ;
00190 signal txlock_i : ;
00191 signal tx_sync_i : ;
00192 signal tx_usrclks_stable_i : ;
00193 signal drp_reset_i : ;
00194 signal ch1 : ;
00195 signal ch2 : ;
00196 signal tgff1 : ;
00197 signal tgff2 : ;
00198 signal recclklatch0 : ;
00199 signal recclklatch1 : ;
00200 -------------------------------- Combus signals ----------------------------
00201 signal tile0_combusout_a_i : (15 downto 0);
00202 signal tile0_combusout_b_i : (15 downto 0);
00203
00204
00205 --************************** Component Declarations ***************************
00206
00207
00208 component rio
00209 generic
00210 (
00211 SIMULATION_P : := 0;
00212 TX_FD_MIN_P : (10 downto 0) := "00000011101";
00213 TX_FD_EN_P : := '1';
00214 RX_FD_MIN_P : (10 downto 0) := "00000011101";
00215 RX_FD_EN_P : := '1';
00216 TX_FD_WIDTH_P : := 11;
00217 RX_FD_WIDTH_P : := 11;
00218 MGT0_GT11_MODE_P : := "B";
00219 MGT0_MGT_ID_P : := 1
00220 );
00221 port
00222 (
00223 --__________________________________________________________________________
00224 --__________________________________________________________________________
00225 --MGT0 (X1Y0)
00226 -------------------------- Calibration Block Ports -------------------------
00227 MGT0_ACTIVE_OUT : out ;
00228 MGT0_DISABLE_IN : in ;
00229 MGT0_DRP_RESET_IN : in ;
00230 MGT0_RX_SIGNAL_DETECT_IN : in ;
00231 MGT0_TX_SIGNAL_DETECT_IN : in ;
00232 --------------------- Dynamic Reconfiguration Port (DRP) -------------------
00233 MGT0_DCLK_IN : in ;
00234 -------------------------------- Global Ports ------------------------------
00235 MGT0_POWERDOWN_IN : in ;
00236 MGT0_TXINHIBIT_IN : in ;
00237 ---------------------------------- PLL Lock --------------------------------
00238 MGT0_RXLOCK_OUT : out ;
00239 MGT0_TXLOCK_OUT : out ;
00240 --------------------------- Polarity Control Ports -------------------------
00241 MGT0_RXPOLARITY_IN : in ;
00242 MGT0_TXPOLARITY_IN : in ;
00243 ---------------------------- Ports for Simulation --------------------------
00244 MGT0_COMBUSIN_IN : in (15 downto 0);
00245 MGT0_COMBUSOUT_OUT : out (15 downto 0);
00246 -------------------- Receive Data Path and Control Ports -------------------
00247 MGT0_RXDATA_OUT : out (31 downto 0);
00248 ------------------------------ Reference Clocks ----------------------------
00249 MGT0_REFCLK1_IN : in ;
00250 ----------------------------------- Resets ---------------------------------
00251 MGT0_RXPMARESET_IN : in ;
00252 MGT0_RXRESET_IN : in ;
00253 MGT0_TXPMARESET_IN : in ;
00254 MGT0_TXRESET_IN : in ;
00255 -------------------------------- Serial Ports ------------------------------
00256 MGT0_RX1N_IN : in ;
00257 MGT0_RX1P_IN : in ;
00258 MGT0_TX1N_OUT : out ;
00259 MGT0_TX1P_OUT : out ;
00260 ----------------------------------- Status ---------------------------------
00261 MGT0_RXSTATUS_OUT : out (5 downto 0);
00262 ------------------------------ Synchronization -----------------------------
00263 MGT0_RXSYNC_IN : in ;
00264 MGT0_TXSYNC_IN : in ;
00265 -------------------- Transmit Data Path and Control Ports ------------------
00266 MGT0_TXDATA_IN : in (31 downto 0);
00267 -------------------------------- User Clocks -------------------------------
00268 MGT0_RXRECCLK1_OUT : out ;
00269 MGT0_RXRECCLK2_OUT : out ;
00270 MGT0_RXUSRCLK2_IN : in ;
00271 MGT0_TXOUTCLK1_OUT : out ;
00272 MGT0_TXOUTCLK2_OUT : out ;
00273 MGT0_TXUSRCLK2_IN : in
00274 );
00275 end component;
00276
00277
00278 component GT11_INIT_TX
00279 generic
00280 (
00281 C_SIMULATION : := 0
00282 );
00283 port
00284 (
00285 CLK : in ;
00286 START_INIT : in ;
00287 LOCK : in ;
00288 USRCLK_STABLE : in ;
00289 PCS_ERROR : in ;
00290 PMA_RESET : out ;
00291 SYNC : out ;
00292 PCS_RESET : out ;
00293 READY : out
00294
00295 );
00296 end component;
00297
00298
00299 component GT11_INIT_RX
00300 generic
00301 (
00302 C_SIMULATION : := 0
00303 );
00304 port
00305 (
00306 CLK : in ;
00307 START_INIT : in ;
00308 LOCK : in ;
00309 USRCLK_STABLE : in ;
00310 PCS_ERROR : in ;
00311 PMA_RESET : out ;
00312 SYNC : out ;
00313 PCS_RESET : out ;
00314 READY : out
00315 );
00316 end component;
00317
00318
00319 --*************************************************************************
00320 -- main code
00321 --*************************************************************************
00322
00323 begin
00324
00325 -- Static signal Assignments
00326 tied_to_ground_i <= '0';
00327 tied_to_ground_vec_i <= (others => '0');
00328 tied_to_vcc_i <= '1';
00329 -- Output Assignments
00330 MGT0_TXLOCK_OUT <= mgt0_txlock_i;
00331 MGT0_RXLOCK_OUT <= mgt0_rxlock_i;
00332 MGT1_TXLOCK_OUT <= mgt1_txlock_i;
00333 MGT1_RXLOCK_OUT <= mgt1_rxlock_i;
00334 TX_READY_FLAG <= tx_system_ready_i;
00335 RX_READY_FLAG <= rx_system_ready_i;
00336 RXRECCLK1_OUT <= mgt0_rxrecclk1_i;
00337 TX1N_OUT_1 <= mgt0_tx1n_i;
00338 TX1P_OUT_1 <= mgt0_tx1p_i;
00339 TX1N_OUT_2 <= mgt1_tx1n_i;
00340 TX1P_OUT_2 <= mgt1_tx1p_i;
00341 BC_2X <= usr_clk2_i;
00342 RX_DATA_OUT_1 <= data_out_1;
00343 RX_DATA_OUT_2 <= data_out_2;
00344 CHECK_OUT_1 <= or_check(data_out_1);
00345 CHECK_OUT_2 <= or_check(data_out_2);
00346 -- Input Assignments
00347 refclk1_i <= REFCLK;
00348 usr_clk2_i <= PARCLK;
00349 rx_system_reset_in_i <= RX_SYSTEM_RESET_IN;
00350 tx_system_reset_in_i <= TX_SYSTEM_RESET_IN;
00351 mgt0_rx1n_i <= RX1N_IN_1;
00352 mgt0_rx1p_i <= RX1P_IN_1;
00353 mgt1_rx1n_i <= RX1N_IN_2;
00354 mgt1_rx1p_i <= RX1P_IN_2;
00355 mgt0_txdata_i <= XOR_PATTERN;
00356 mgt1_txdata_i <= XOR_PATTERN;
00357
00358 -- man_pattern_adj_small : if BOARD = "SMall" generate
00359 --
00360 -- -- internal XOR to remove transitions
00361 -- man_shift_set : process(usr_clk2_i,SET_SHIFT)
00362 -- begin
00363 -- if usr_clk2_i'event and usr_clk2_i = '1' then
00364 -- for i in 0 to 7 loop
00365 -- if SET_SHIFT(i) = '1' then
00366 -- SHIFT <= i;
00367 -- end if;
00368 -- end loop;
00369 -- end if;
00370 -- end process man_shift_set;
00371 --
00372 -- xor_tx_rx <= xrol(mgt0_txdata_i,SHIFT);
00373 -- data_out_1 <= mgt0_rxdata_i xor xor_tx_rx when rising_edge(usr_clk2_i);
00374 -- data_out_2 <= mgt1_rxdata_i xor xor_tx_rx when rising_edge(usr_clk2_i);
00375 --
00376 -- MASK1 <= '1';
00377 -- MASK2 <= '1';
00378 -- VALID <= '1';
00379 --
00380 -- end generate man_pattern_adj_small;
00381
00382 -- auto_pattern_adj_big : if BOARD = "BIG" generate
00383
00384
00385 auto_shift_set1 : process(mgt0_usr_clk2_i)
00386 begin
00387 if mgt0_usr_clk2_i'event and mgt0_usr_clk2_i = '1' then
00388 if (TX_SYSTEM_RESET_IN or RX_SYSTEM_RESET_IN) = '1' then
00389 valid1 <= '0';
00390 SHIFT1 <= 0;
00391 tgff1 <= '0';
00392 MASK1 <= '0';
00393 xor_tx_rx1 <= mgt0_txdata_i;
00394 else
00395 if (CALIB or CAL1) = '1' then
00396 if valid1 = '0' then
00397 if ch1 = '1' then
00398 if tgff1 = '0' then
00399 tgff1 <= '1';
00400 xor_tx_rx1 <= xor_tx_rx1(30 downto 0) & xor_tx_rx1(31);
00401 --SHIFT1 <= SHIFT1 + 1;
00402 else
00403 tgff1 <= '0';
00404 end if;
00405 else
00406 --SHIFT1 <= SHIFT1;
00407 valid1 <= '1';
00408 MASK1 <= '1';
00409 end if;
00410 end if;
00411 end if;
00412 end if;
00413 end if;
00414 end process auto_shift_set1;
00415
00416
00417 auto_shift_set2 : process(mgt1_usr_clk2_i)
00418 begin
00419 if mgt1_usr_clk2_i'event and mgt1_usr_clk2_i = '1' then
00420 if (TX_SYSTEM_RESET_IN or RX_SYSTEM_RESET_IN) = '1' then
00421 valid2 <= '0';
00422 SHIFT2 <= 0;
00423 tgff2 <= '0';
00424 MASK2 <= '0';
00425 xor_tx_rx2 <= mgt1_txdata_i;
00426 else
00427 if (CALIB or CAL2) = '1' then
00428 if valid2 = '0' then
00429 if ch2 = '1' then
00430 if tgff2 = '0' then
00431 tgff2 <= '1';
00432 xor_tx_rx2 <= xor_tx_rx2(30 downto 0) & xor_tx_rx2(31);
00433 --SHIFT2 <= SHIFT2 + 1;
00434 else
00435 tgff2 <= '0';
00436 end if;
00437 else
00438 --SHIFT2 <= SHIFT2;
00439 valid2 <= '1';
00440 MASK2 <= '1';
00441 end if;
00442 end if;
00443 end if;
00444 end if;
00445 end if;
00446 end process auto_shift_set2;
00447
00448 VALID <= valid1 and valid2;
00449
00450 -- mgt0_txdata_i_bit <= to_bitvector(mgt0_txdata_i);
00451 -- mgt1_txdata_i_bit <= to_bitvector(mgt1_txdata_i);
00452
00453 -- xor_tx_rx1 <= to_stdlogicvector(mgt0_txdata_i_bit rol SHIFT1) when rising_edge(usr_clk2_i);--xrol(mgt0_txdata_i,SHIFT1);
00454 -- xor_tx_rx2 <= to_stdlogicvector(mgt1_txdata_i_bit rol SHIFT2) when rising_edge(usr_clk2_i);--xrol(mgt1_txdata_i,SHIFT2);
00455 -- valid1 <= '1' when or_check(data_out_1) = '1' else '0';
00456 -- valid2 <= '1' when or_check(data_out_2) = '1' else '0';
00457 ch1 <= or_check(data_out_1) when rising_edge(mgt0_usr_clk2_i);
00458 ch2 <= or_check(data_out_2) when rising_edge(mgt1_usr_clk2_i);
00459 data_out_1 <= mgt0_rxdata_iout xor xor_tx_rx1;
00460 data_out_2 <= mgt1_rxdata_iout xor xor_tx_rx2;
00461
00462 -- end generate auto_pattern_adj_big;
00463
00464 mgt0_rxdata_iout <= mgt0_rxdata_i when rising_edge(mgt0_rxrecclk1_i); -- in flop
00465 mgt1_rxdata_iout <= mgt1_rxdata_i when rising_edge(mgt1_rxrecclk1_i); -- in flop
00466 -- mgt0_rxdata_irec <= mgt0_rxdata_i when rising_edge(mgt0_rxrecclk1_i); -- in flop
00467 -- mgt1_rxdata_irec <= mgt1_rxdata_i when rising_edge(mgt1_rxrecclk1_i); -- in flop
00468
00469 -- recclklatch0 <= mgt0_rxrecclk1_i when rising_edge(mgt0_usr_clk2_i); -- latch rx clk
00470 -- recclklatch1 <= mgt1_rxrecclk1_i when rising_edge(mgt1_usr_clk2_i);
00471
00472 -- mgt0_rxdata_p <= mgt0_rxdata_irec when rising_edge(mgt0_usr_clk2_i); -- latch data on ris edge
00473 -- mgt1_rxdata_p <= mgt1_rxdata_irec when rising_edge(mgt1_usr_clk2_i);
00474
00475 -- mgt0_rxdata_n <= mgt0_rxdata_irec when falling_edge(mgt0_usr_clk2_i); -- latch data on fal edge
00476 -- mgt1_rxdata_n <= mgt1_rxdata_irec when falling_edge(mgt1_usr_clk2_i);
00477
00478 -- mgt0_rxdata_mux <= mgt0_rxdata_p when recclklatch0 = '0' else mgt0_rxdata_n; -- mux ris & fal edge
00479 -- mgt1_rxdata_mux <= mgt1_rxdata_p when recclklatch1 = '0' else mgt1_rxdata_n;
00480
00481 -- mgt0_rxdata_iout <= mgt0_rxdata_mux when rising_edge(mgt0_usr_clk2_i); --out flop
00482 -- mgt1_rxdata_iout <= mgt1_rxdata_mux when rising_edge(mgt1_usr_clk2_i);
00483
00484
00485 MGT0_USRCLK2_BUF : BUFR
00486 port map (
00487 CLR => '0' ,
00488 CE => '1' ,
00489 O => mgt0_usr_clk2_i,
00490 I => mgt0_txoutclk1_i
00491 );
00492
00493
00494 MGT1_USRCLK2_BUF : BUFR
00495 port map (
00496 CLR => '0' ,
00497 CE => '1' ,
00498 O => mgt1_usr_clk2_i,
00499 I => mgt1_txoutclk1_i
00500 );
00501
00502 drp_clk_in_i <= usr_clk2_i;
00503
00504 -- -- Buffer the DRP Clock
00505 -- drp_clk_in_bufg_i : BUFG
00506 -- port map
00507 -- (
00508 -- I => usr_clk2_i,
00509 -- O => drp_clk_in_i
00510 -- );
00511
00512
00513 tx_res : process(drp_clk_in_i)
00514 begin
00515 if(drp_clk_in_i'event and drp_clk_in_i = '1') then
00516 debounce_tx_system_reset_r <= tx_system_reset_in_i & debounce_tx_system_reset_r(0 to 2);
00517 end if;
00518 end process tx_res;
00519
00520 tx_system_reset_c <= debounce_tx_system_reset_r(0) and
00521 debounce_tx_system_reset_r(1) and
00522 debounce_tx_system_reset_r(2) and
00523 debounce_tx_system_reset_r(3);
00524
00525
00526 rx_res : process(drp_clk_in_i)
00527 begin
00528 if(drp_clk_in_i'event and drp_clk_in_i = '1') then
00529 debounce_rx_system_reset_r <= rx_system_reset_in_i & debounce_rx_system_reset_r(0 to 2);
00530 end if;
00531 end process rx_res;
00532
00533 rx_system_reset_c <= debounce_rx_system_reset_r(0) and
00534 debounce_rx_system_reset_r(1) and
00535 debounce_rx_system_reset_r(2) and
00536 debounce_rx_system_reset_r(3);
00537
00538 -- AND all the txlock signals together as an input to the GT11_INIT module
00539 txlock_i <= mgt0_txlock_i; -- and mgt1_txlock_i;
00540 txbuferr_i <= tied_to_ground_i;
00541
00542
00543 -- AND all the rxlock signals together as an input to the GT11_INIT module
00544 rxlock_i <= mgt0_rxlock_i; -- and mgt1_rxlock_i;
00545 rxbuferr_i <= tied_to_ground_i;
00546
00547 -- tx_user_logic_reset_c signal for resetting the tx user logic
00548 --tx_user_logic_reset_c <= not tx_system_ready_i;
00549 tx_usrclks_stable_i <= tied_to_vcc_i;
00550
00551
00552 -- rx_user_logic_reset_c signal for resetting the tx user logic
00553 --rx_user_logic_reset_c <= not rx_system_ready_i;
00554 rx_usrclks_stable_i <= tied_to_vcc_i;
00555
00556 ----------------------- Instantiate an GT11_INIT module -------------------
00557
00558
00559 gt11_init_tx_i : GT11_INIT_TX
00560 generic map
00561 (
00562 C_SIMULATION => SIMULATION_P
00563 )
00564 port map
00565 (
00566 CLK => drp_clk_in_i,
00567 START_INIT => tx_system_reset_c ,
00568 USRCLK_STABLE => tx_usrclks_stable_i,
00569 LOCK => txlock_i,
00570 PCS_ERROR => txbuferr_i,
00571 PMA_RESET => tx_pmareset_c,
00572 PCS_RESET => txreset_c,
00573 SYNC => tx_sync_i,
00574 READY => tx_system_ready_i
00575 );
00576
00577
00578
00579 gt11_init_rx_i : GT11_INIT_RX
00580 generic map
00581 (
00582 C_SIMULATION => 0
00583 )
00584 port map
00585 (
00586 CLK => drp_clk_in_i,
00587 START_INIT => rx_system_reset_c ,
00588 USRCLK_STABLE => rx_usrclks_stable_i,
00589 LOCK => rxlock_i,
00590 PCS_ERROR => rxbuferr_i,
00591 PMA_RESET => rx_pmareset_c,
00592 PCS_RESET => rxreset_c,
00593 SYNC => rx_sync_i,
00594 READY => rx_system_ready_i
00595 );
00596
00597 drp_reset_i <= tx_system_reset_in_i or rx_system_reset_in_i;
00598
00599 --*************************** Active MGT Instantiation ************************
00600
00601
00602 rio1 : rio
00603 generic map
00604 (
00605 SIMULATION_P => SIMULATION_P,
00606 MGT0_GT11_MODE_P => "A",
00607 MGT0_MGT_ID_P => 0
00608 )
00609 port map
00610 (
00611 --_____________________________________________________________________
00612 --_____________________________________________________________________
00613 --MGT0 (X1Y0)
00614 -------------------------- Calibration Block Ports -------------------------
00615 MGT0_ACTIVE_OUT => mgt0_active_i,
00616 MGT0_DISABLE_IN => tied_to_ground_i,
00617 MGT0_DRP_RESET_IN => drp_reset_i,
00618 MGT0_RX_SIGNAL_DETECT_IN => tied_to_vcc_i,
00619 MGT0_TX_SIGNAL_DETECT_IN => tied_to_vcc_i,
00620 --------------------- Dynamic Reconfiguration Port (DRP) -------------------
00621 MGT0_DCLK_IN => drp_clk_in_i,
00622 -------------------------------- Global Ports ------------------------------
00623 MGT0_POWERDOWN_IN => tied_to_ground_i,
00624 MGT0_TXINHIBIT_IN => tied_to_ground_i,
00625 ---------------------------------- PLL Lock --------------------------------
00626 MGT0_RXLOCK_OUT => mgt0_rxlock_i,
00627 MGT0_TXLOCK_OUT => mgt0_txlock_i,
00628 --------------------------- Polarity Control Ports -------------------------
00629 MGT0_RXPOLARITY_IN => tied_to_ground_i,
00630 MGT0_TXPOLARITY_IN => tied_to_ground_i,
00631 ---------------------------- Ports for Simulation --------------------------
00632 MGT0_COMBUSIN_IN => tile0_combusout_a_i,
00633 MGT0_COMBUSOUT_OUT => tile0_combusout_b_i,
00634 -------------------- Receive Data Path and Control Ports -------------------
00635 MGT0_RXDATA_OUT => mgt0_rxdata_i, --RX_DATA_OUT,
00636 ------------------------------ Reference Clocks ----------------------------
00637 MGT0_REFCLK1_IN => refclk1_i,
00638 ----------------------------------- Resets ---------------------------------
00639 MGT0_RXPMARESET_IN => rx_pmareset_c,
00640 MGT0_RXRESET_IN => rxreset_c,
00641 MGT0_TXPMARESET_IN => tx_pmareset_c,
00642 MGT0_TXRESET_IN => txreset_c,
00643 -------------------------------- Serial Ports ------------------------------
00644 MGT0_RX1N_IN => mgt0_rx1n_i,
00645 MGT0_RX1P_IN => mgt0_rx1p_i,
00646 MGT0_TX1N_OUT => mgt0_tx1n_i,
00647 MGT0_TX1P_OUT => mgt0_tx1p_i,
00648 ----------------------------------- Status ---------------------------------
00649 MGT0_RXSTATUS_OUT => mgt0_rxstatus_i,
00650 ------------------------------ Synchronization -----------------------------
00651 MGT0_RXSYNC_IN => rx_sync_i,
00652 MGT0_TXSYNC_IN => tx_sync_i,
00653 -------------------- Transmit Data Path and Control Ports ------------------
00654 MGT0_TXDATA_IN => mgt0_txdata_i,
00655 -------------------------------- User Clocks -------------------------------
00656 MGT0_RXRECCLK1_OUT => mgt0_rxrecclk1_i,
00657 MGT0_RXRECCLK2_OUT => mgt0_rxrecclk2_i,
00658 MGT0_RXUSRCLK2_IN => mgt0_usr_clk2_i,
00659 MGT0_TXOUTCLK1_OUT => mgt0_txoutclk1_i,
00660 MGT0_TXOUTCLK2_OUT => mgt0_txoutclk2_i,
00661 MGT0_TXUSRCLK2_IN => mgt0_usr_clk2_i
00662 );
00663
00664
00665 rio2 : rio
00666 generic map
00667 (
00668 SIMULATION_P => SIMULATION_P,
00669 MGT0_GT11_MODE_P => "B",
00670 MGT0_MGT_ID_P => 1
00671 )
00672 port map
00673 (
00674 --_____________________________________________________________________
00675 --_____________________________________________________________________
00676 --MGT0 (X1Y0)
00677 -------------------------- Calibration Block Ports -------------------------
00678 MGT0_ACTIVE_OUT => mgt1_active_i,
00679 MGT0_DISABLE_IN => tied_to_ground_i,
00680 MGT0_DRP_RESET_IN => drp_reset_i,
00681 MGT0_RX_SIGNAL_DETECT_IN => tied_to_vcc_i,
00682 MGT0_TX_SIGNAL_DETECT_IN => tied_to_vcc_i,
00683 --------------------- Dynamic Reconfiguration Port (DRP) -------------------
00684 MGT0_DCLK_IN => drp_clk_in_i,
00685 -------------------------------- Global Ports ------------------------------
00686 MGT0_POWERDOWN_IN => tied_to_ground_i,
00687 MGT0_TXINHIBIT_IN => tied_to_ground_i,
00688 ---------------------------------- PLL Lock --------------------------------
00689 MGT0_RXLOCK_OUT => mgt1_rxlock_i,
00690 MGT0_TXLOCK_OUT => mgt1_txlock_i,
00691 --------------------------- Polarity Control Ports -------------------------
00692 MGT0_RXPOLARITY_IN => tied_to_ground_i,
00693 MGT0_TXPOLARITY_IN => tied_to_ground_i,
00694 ---------------------------- Ports for Simulation --------------------------
00695 MGT0_COMBUSIN_IN => tile0_combusout_b_i,
00696 MGT0_COMBUSOUT_OUT => tile0_combusout_a_i,
00697 -------------------- Receive Data Path and Control Ports -------------------
00698 MGT0_RXDATA_OUT => mgt1_rxdata_i, --RX_DATA_OUT,
00699 ------------------------------ Reference Clocks ----------------------------
00700 MGT0_REFCLK1_IN => refclk1_i,
00701 ----------------------------------- Resets ---------------------------------
00702 MGT0_RXPMARESET_IN => rx_pmareset_c,
00703 MGT0_RXRESET_IN => rxreset_c,
00704 MGT0_TXPMARESET_IN => tx_pmareset_c,
00705 MGT0_TXRESET_IN => txreset_c,
00706 -------------------------------- Serial Ports ------------------------------
00707 MGT0_RX1N_IN => mgt1_rx1n_i,
00708 MGT0_RX1P_IN => mgt1_rx1p_i,
00709 MGT0_TX1N_OUT => mgt1_tx1n_i,
00710 MGT0_TX1P_OUT => mgt1_tx1p_i,
00711 ----------------------------------- Status ---------------------------------
00712 MGT0_RXSTATUS_OUT => mgt1_rxstatus_i,
00713 ------------------------------ Synchronization -----------------------------
00714 MGT0_RXSYNC_IN => rx_sync_i,
00715 MGT0_TXSYNC_IN => tx_sync_i,
00716 -------------------- Transmit Data Path and Control Ports ------------------
00717 MGT0_TXDATA_IN => mgt1_txdata_i,
00718 -------------------------------- User Clocks -------------------------------
00719 MGT0_RXRECCLK1_OUT => mgt1_rxrecclk1_i,
00720 MGT0_RXRECCLK2_OUT => mgt1_rxrecclk2_i,
00721 MGT0_RXUSRCLK2_IN => mgt1_usr_clk2_i,
00722 MGT0_TXOUTCLK1_OUT => mgt1_txoutclk1_i,
00723 MGT0_TXOUTCLK2_OUT => mgt1_txoutclk2_i,
00724 MGT0_TXUSRCLK2_IN => mgt1_usr_clk2_i
00725 );
00726
00727 end rio_rxtx_arc;