1 --////////////////////////////////////////////////////////////////////////////////     4 --// /___/  \  /    Vendor: Xilinx      5 --// \   \   \/     Version : 2.2     6 --//  \   \         Application : 7 Series FPGAs Transceivers Wizard      7 --//  /   /         Filename :Gth7TxRst.vhd    13 --  Description :     This module performs TX reset and initialization.    18 -- Generated by Xilinx 7 Series FPGAs Transceivers Wizard    21 -- (c) Copyright 2010-2012 Xilinx, Inc. All rights reserved.    23 -- This file contains confidential and proprietary information    24 -- of Xilinx, Inc. and is protected under U.S. and    25 -- international copyright and other intellectual property    29 -- This disclaimer is not a license and does not grant any    30 -- rights to the materials distributed herewith. Except as    31 -- otherwise provided in a valid license issued to you by    32 -- Xilinx, and to the maximum extent permitted by applicable    33 -- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND    34 -- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES    35 -- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING    36 -- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-    37 -- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and    38 -- (2) Xilinx shall not be liable (whether in contract or tort,    39 -- including negligence, or under any other theory of    40 -- liability) for any loss or damage of any kind or nature    41 -- related to, arising under or in connection with these    42 -- materials, including for any direct, or any indirect,    43 -- special, incidental, or consequential loss or damage    44 -- (including loss of data, profits, goodwill, or any type of    45 -- loss or damage suffered as a result of any action brought    46 -- by a third party) even if such damage or loss was    47 -- reasonably foreseeable or Xilinx had been advised of the    48 -- possibility of the same.    50 -- CRITICAL APPLICATIONS    51 -- Xilinx products are not designed or intended to be fail-    52 -- safe, or for use in any application requiring fail-safe    53 -- performance, such as life-support or safety devices or    54 -- systems, Class III medical devices, nuclear facilities,    55 -- applications related to the deployment of airbags, or any    56 -- other applications that could lead to death, personal    57 -- injury, or severe property or environmental damage    58 -- (individually and collectively, "Critical    59 -- Applications"). Customer assumes the sole risk and    60 -- liability of any use of Xilinx products in Critical    61 -- Applications, subject only to applicable laws and    62 -- regulations governing limitations on product liability.    64 -- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS    65 -- PART OF THIS FILE AT ALL TIMES.     68 --*****************************************************************************    71 use IEEE.STD_LOGIC_1164.
all;
    75  --! @ingroup xilinx_7Series_gth7    80       STABLE_CLOCK_PERIOD    :  range 4 to 20 := 8;
  --Period of the stable clock driving this state-machine, unit is [ns]    84       STABLE_CLOCK      : in  ;
  --Stable Clock, either a stable clock from the PCB    85                                           --or reference-clock present at startup.    89       PLLLOCK           : in  ;
  --Lock Detect from the PLL of the GT   102                                         -- Retries it took to get the transceiver up and running   107 -- * Timing depends on the frequency of the stable clock. Hence counters-sizes   108 --   are calculated at design-time based on the Generics   110 -- * if either of PLLs is reset during TX-startup, it does not need to be reset again by RX   111 --   => signal which PLL has been reset   119       INIT, ASSERT_ALL_RESETS, RELEASE_PLL_RESET,   120       RELEASE_MMCM_RESET, WAIT_RESET_DONE, DO_PHASE_ALIGNMENT,   126    constant STARTUP_DELAY     :  := 500;
  --AR43482: Transceiver needs to wait for 500 ns after configuration   152    signal time_out_2ms   :  := '0';
  --\Flags that the various time-out points    163    constant MAX_WAIT_BYPASS       :    := 110000;
  --110000 TXUSRCLK cycles is the max time for Multi lane designs   173       Synchronizer_run_phase_alignment,   174       Synchronizer_fsm_reset_done,   175       Synchronizer_SOFT_RESET,   176       Synchronizer_TXRESETDONE,   177       Synchronizer_time_out_wait_bypass,   178       Synchronizer_mmcm_lock_reclocked,   179       Synchronizer_PLLLOCK : label is "TRUE";
   183    --Alias section, signals used within this module mapped to output ports:   191          -- The counter starts running when configuration has finished and    192          -- the clock is stable. When its maximum count-value has been reached,   193          -- the 500 ns from Answer Record 43482 have been passed.   206          -- One common large counter for generating three time-out signals.   207          -- Intermediate time-outs are derived from calculated values, based   208          -- on the period of the provided clock.   247    -- Clock Domain Crossing   248    Synchronizer_run_phase_alignment : 
entity work.
Synchronizer   288    Synchronizer_time_out_wait_bypass : 
entity work.
Synchronizer   298    Synchronizer_mmcm_lock_reclocked : 
entity work.
Synchronizer   334    --FSM for resetting the GTX/GTH/GTP in the 7-series.    335    --~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   337    -- Following steps are performed:   338    -- 1) Only for GTX - After configuration wait for approximately 500 ns as specified in    339    --    answer-record 43482   340    -- 2) Assert all resets on the GT and on an MMCM potentially connected.    341    --    After that wait until a reference-clock has been detected.   342    -- 3) Release the reset to the GT and wait until the GT-PLL has locked.   343    -- 4) Release the MMCM-reset and wait until the MMCM has signalled lock.   344    --    Also signal to the RX-side which PLL has been reset.   345    -- 5) Wait for the RESET_DONE-signal from the GT.   346    -- 6) Signal to start the phase-alignment procedure and wait for it to    348    -- 7) Reset-sequence has successfully run through. Signal this to the    349    --    rest of the design by asserting TX_FSM_RESET_DONE.   371                   --Initial state after configuration. This state will be left after   372                   --approx. 500 ns and not be re-entered.    378                when ASSERT_ALL_RESETS =>   379                   --This is the state into which the FSM will always jump back if any   380                   --time-outs will occur.    381                   --The number of retries is reported on the output RETRY_COUNTER. In    382                   --case the transceiver never comes up for some reason, this machine    383                   --will still continue its best and rerun until the FPGA is turned off   384                   --or the transceivers come up correctly.   404                when RELEASE_PLL_RESET =>   405                   --PLL-Reset of the GTX gets released and the time-out counter   416                         -- If too many retries are performed compared to what is specified in    417                         -- the generic, the counter simply wraps around.   425                when RELEASE_MMCM_RESET =>   428                   --Release of the MMCM-reset. Waiting for the MMCM to lock.   437                         -- If too many retries are performed compared to what is specified in    438                         -- the generic, the counter simply wraps around.   446                when WAIT_RESET_DONE =>   456                         -- If too many retries are performed compared to what is specified in    457                         -- the generic, the counter simply wraps around.   465                when DO_PHASE_ALIGNMENT =>   466                   --The direct handling of the signals for the Phase Alignment is done outside   467                   --this state-machine.    478                         -- If too many retries are performed compared to what is specified in    479                         -- the generic, the counter simply wraps around.   487                when RESET_FSM_DONE => 
integer   range  0 to    MMCM_LOCK_CNT_MAX- 1:= 0 mmcm_lock_count
 
std_logic  := '0' time_tlock_max
 
std_logic  := '0' pll_reset_asserted
 
std_logic  := '0' time_out_wait_bypass_s3
 
std_logic  := '0' txresetdone_s3
 
integer  := 500 STARTUP_DELAY
 
integer  := 110000 MAX_WAIT_BYPASS
 
out GTTXRESETstd_logic  := '0'
 
std_logic  := '0' tx_fsm_reset_done_int
 
std_logic  := '0' init_wait_done
 
out PLL_RESETstd_logic  := '0'
 
out RUN_PHALIGNMENTstd_logic  := '0'
 
tx_rst_fsm_type  :=   INIT tx_state
 
STABLE_CLOCK_PERIODinteger   range  4 to  20:= 8
 
std_logic  := '0' reset_time_out
 
std_logic  := '0' plllock_sync
 
(INIT,ASSERT_ALL_RESETS,RELEASE_PLL_RESET,RELEASE_MMCM_RESET,WAIT_RESET_DONE,DO_PHASE_ALIGNMENT,RESET_FSM_DONE) tx_rst_fsm_type
 
out RESET_PHALIGNMENTstd_logic  := '0'
 
std_logic  := '0' time_out_2ms
 
std_logic  := '0' run_phase_alignment_int_s3
 
integer  :=   STARTUP_DELAY/   STABLE_CLOCK_PERIOD WAIT_CYCLES
 
in PLLREFCLKLOSTstd_logic  
 
integer  := 500000/   STABLE_CLOCK_PERIOD WAIT_TIMEOUT_500us
 
integer   range  0 to    MAX_WAIT_BYPASS- 1 wait_bypass_count
 
std_logic   soft_reset_fall
 
integer  := 2**   RETRY_COUNTER_BITWIDTH- 1 MAX_RETRIES
 
std_logic   soft_reset_rise
 
std_logic_vector( 3 downto  0)  :=( others => '0') mmcm_lock_reclocked
 
std_logic  := '0' time_out_500us
 
out TXUSERRDYstd_logic  := '0'
 
integer  := 100000/   STABLE_CLOCK_PERIOD WAIT_TLOCK_MAX
 
integer   range  0 to    WAIT_MAX:= 0 init_wait_count
 
integer  :=   WAIT_CYCLES+ 10 WAIT_MAX
 
out TX_FSM_RESET_DONEstd_logic  
 
integer   range  0 to    MAX_RETRIES retry_counter_int
 
out MMCM_RESETstd_logic  := '1'
 
RETRY_COUNTER_BITWIDTHinteger   range  2 to  8:= 8
 
std_logic  := '0' time_out_wait_bypass
 
integer  := 1024 MMCM_LOCK_CNT_MAX
 
std_logic   soft_reset_sync
 
std_logic  := '0' tx_fsm_reset_done_int_s3
 
integer  := 2000000/   STABLE_CLOCK_PERIOD WAIT_TIMEOUT_2ms
 
std_logic  := '0' mmcm_lock_int
 
integer   range  0 to    WAIT_TIMEOUT_2ms:= 0 time_out_counter
 
out RETRY_COUNTERstd_logic_vector(   RETRY_COUNTER_BITWIDTH- 1 downto  0)  :=( others => '0')
 
std_logic  := '0' run_phase_alignment_int
 
in PHALIGNMENT_DONEstd_logic