sata_GT11_INIT_RX.rtl Architecture Reference

RIO-RX initializer. More...

Inheritance diagram for sata_GT11_INIT_RX.rtl:

Inheritance graph
[legend]
Collaboration diagram for sata_GT11_INIT_RX.rtl:

Collaboration graph
[legend]

List of all members.


Functions

string  ExtendString ( string_in: in string , string_len: in integer )
 extend a string

Processes

PROCESS_362  ( CLK , START_INIT )
 Synchronize Reset.
PROCESS_363  ( CLK )
 Synchronize LOCK.
PROCESS_364  ( CLK )
 Synchronize PCS_ERROR and generate a pulse when PCS_ERROR is high.
PROCESS_365  ( CLK )
 Counter for holding PMA reset for an amount of C_DELAY_PMA_RESET.
PROCESS_366  ( CLK )
PROCESS_367  ( CLK )
 Counter for holding SYNC for an amount of C_DELAY_SYNC.
PROCESS_368  ( CLK )
 Counter for holding PCS reset for an amount of C_DELAY_PCS_RESET.
PROCESS_369  ( CLK )
 Counter for waiting C_DELAY_WAIT_PCS after de-assertion of PCS reset.
PROCESS_370  ( CLK )
 Counter for PCS error.
PROCESS_371  ( CLK )
 Counter for the READY signal.
PROCESS_372  ( CLK )
 GT11 Initialization FSM.
PROCESS_373  ( reset_r(0) , pma_reset_done_i , init_fsm_wait_lock_check , lock_r , sync_done_i , pcs_reset_done_i , wait_pcs_done_i , pcs_error_r1 , pcs_error_count_done_i , wait_ready_done_i )

Components

FDE 
 component FDE
SRL16E 
 component SRL16
FDRE 
 component FDRE

Constants

C_DELAY_PMA_RESET  unsigned ( 2 downto 0 ) := " 011 "
C_DELAY_SYNC  unsigned ( 7 downto 0 ) := " 01000000 "
C_DELAY_PCS_RESET  unsigned ( 2 downto 0 ) := " 011 "
C_DELAY_LOCK  unsigned ( 4 downto 0 ) := " 10000 "
C_DELAY_WAIT_PCS  unsigned ( 3 downto 0 ) := " 0101 "
C_DELAY_WAIT_READY  unsigned ( 7 downto 0 ) := " 01000000 "
C_PCS_ERROR_COUNT  unsigned ( 4 downto 0 ) := " 10000 "
C_RESET  unsigned ( 7 downto 0 ) := " 00000001 "
 GT11 Initialization FSM.
C_PMA_RESET  unsigned ( 7 downto 0 ) := " 00000010 "
 GT11 Initialization FSM.
C_WAIT_LOCK  unsigned ( 7 downto 0 ) := " 00000100 "
 GT11 Initialization FSM.
C_SYNC  unsigned ( 7 downto 0 ) := " 00001000 "
 GT11 Initialization FSM.
C_PCS_RESET  unsigned ( 7 downto 0 ) := " 00010000 "
 GT11 Initialization FSM.
C_WAIT_PCS  unsigned ( 7 downto 0 ) := " 00100000 "
 GT11 Initialization FSM.
C_ALMOST_READY  unsigned ( 7 downto 0 ) := " 01000000 "
 GT11 Initialization FSM.
C_READY  unsigned ( 7 downto 0 ) := " 10000000 "
 GT11 Initialization FSM.

Signals

reset_r  unsigned ( 1 downto 0 )
lock_r  std_logic
lock_r2  std_logic
pcs_error_r1  std_logic
pcs_error_r2  std_logic
pma_reset_count_r  unsigned ( 2 downto 0 )
sync_count_r  unsigned ( 7 downto 0 )
pcs_reset_count_r  unsigned ( 2 downto 0 )
wait_pcs_count_r  unsigned ( 3 downto 0 )
pcs_error_count_r  unsigned ( 4 downto 0 )
wait_ready_count_r  unsigned ( 7 downto 0 )
init_state_r  unsigned ( 7 downto 0 )
init_next_state_r  unsigned ( 7 downto 0 )
init_fsm_name  unsigned ( 40 *7 downto 0 )
init_fsm_wait_lock_check  std_logic
pma_reset_done_i  std_logic
lock_pulse_i  std_logic
stage_1_enable_i  std_logic
stage_2_enable_i  std_logic
stage_3_enable_i  std_logic
lockupdate_ready_i  std_logic
shift_register_1_enable_i  std_logic
shift_register_2_enable_i  std_logic
shift_register_3_enable_i  std_logic
shift_register_0_d_i  std_logic
shift_register_1_d_i  std_logic
shift_register_2_d_i  std_logic
shift_register_3_d_i  std_logic
shift_register_0_q_i  std_logic
shift_register_1_q_i  std_logic
shift_register_2_q_i  std_logic
shift_register_3_q_i  std_logic
sync_done_i  std_logic
pcs_reset_done_i  std_logic
wait_pcs_done_i  std_logic
pcs_error_count_done_i  std_logic
wait_ready_done_i  std_logic
tied_to_ground_i  std_logic
tied_to_vcc_i  std_logic
not_lock_i  std_logic

Component Instantiations

shift_register_0 SRL16E
 SRL16 Stage Zero - First stage of shifting.
flop_stage_0 FDE
 extra FF, last stage
shift_register_1 SRL16E
 SRL16 Stage One - Second stage of shifting.
flop_stage_1 FDE
 extra FF, last stage
shift_register_2 SRL16E
 SRL16 Stage Two - Third stage of shifting.
flop_stage_2 FDE
 extra FF, last stage
shift_register_3 SRL16E
flop_stage_3 FDRE
 extra FF, last stage


Detailed Description

RIO-RX initializer.

this entity produces signal sequences for initializing rio rx

Definition at line 79 of file sata_gt11_init_rx.vhd.


Member Function Documentation

[Function]
string ExtendString ( string_in in string ,
string_len in integer )

extend a string

Definition at line 208 of file sata_gt11_init_rx.vhd.

00208   function ExtendString (string_in  : string;
00209                          string_len : integer) 
00210     return string is
00211     variable string_out : string(1 to string_len) := (others => ' ');
00212   begin
00213     if string_in'length > string_len then
00214       string_out := string_in(1 to string_len);
00215     else
00216       string_out(1 to string_in'length) := string_in;
00217     end if;
00218     return string_out;
00219   end ExtendString;

[Process]
PROCESS_362 ( CLK ,
START_INIT )

Synchronize Reset.

Definition at line 231 of file sata_gt11_init_rx.vhd.

00231   process (CLK, START_INIT)
00232   begin
00233     if (START_INIT = '1') then
00234       reset_r <= "11";
00235     elsif (rising_edge(CLK)) then
00236       reset_r <= '0' & reset_r(1);
00237     end if;
00238   end process;

[Process]
PROCESS_363 ( CLK )

Synchronize LOCK.

Definition at line 241 of file sata_gt11_init_rx.vhd.

00241   process(CLK)
00242   begin
00243     if(CLK'event and CLK = '1') then
00244       if (reset_r(0) = '1') then
00245         lock_r <= '0';
00246       else
00247         lock_r <= LOCK;
00248       end if;
00249     end if;
00250   end process;

[Process]
PROCESS_364 ( CLK )

Synchronize PCS_ERROR and generate a pulse when PCS_ERROR is high.

Definition at line 253 of file sata_gt11_init_rx.vhd.

00253   process(CLK)
00254   begin
00255     if(CLK'event and CLK = '1') then
00256       if(reset_r(0) = '1') then
00257         pcs_error_r1 <= '0';
00258       else
00259         pcs_error_r1 <= PCS_ERROR;
00260       end if;
00261     end if;
00262   end process;

[Process]
PROCESS_365 ( CLK )

Counter for holding PMA reset for an amount of C_DELAY_PMA_RESET.

Definition at line 273 of file sata_gt11_init_rx.vhd.

00273   process(CLK)
00274   begin
00275     if(CLK'event and CLK = '1') then
00276       if(init_state_r /= C_PMA_RESET) then
00277         pma_reset_count_r <= C_DELAY_PMA_RESET;
00278       else
00279         pma_reset_count_r <= pma_reset_count_r - 1;
00280       end if;
00281     end if;
00282   end process;

[Process]
PROCESS_366 ( CLK )

Counter for the LOCKUPDATE cycles for RXLOCK: This is built with SRL16s. Currently, we need to wait for 16 LOCKUPDATE cycles to qualify the RXLOCK signal. Each LOCKUPDATE = 1024 REFCLK cycles. In this module, we assume 1 REFCLK = 1 USRCLK (please adjust the address of the fourth SRL16 stage as neccessary). The whole four stages give 16,304 cycles of delay (16 * 16 * 16 * 4); note that the last stage has an extra FF at the end. Create a pulse from RXLOCK to initialize SRL16's. Need to register the LOCK signal from the GT11 twice since the LOCK is based on REFCLK

Definition at line 303 of file sata_gt11_init_rx.vhd.

00303     process(CLK)
00304     begin
00305       if(CLK'event and CLK = '1') then
00306         if (reset_r(0) = '1') then
00307           lock_r2 <= '0';
00308         else
00309           lock_r2 <= lock_r;
00310         end if;
00311       end if;
00312     end process;

[Process]
PROCESS_367 ( CLK )

Counter for holding SYNC for an amount of C_DELAY_SYNC.

Definition at line 440 of file sata_gt11_init_rx.vhd.

00440   process(CLK)
00441   begin
00442     if(CLK'event and CLK = '1') then
00443       if(init_state_r /= C_SYNC) then
00444         sync_count_r <= C_DELAY_SYNC;
00445       else
00446         sync_count_r <= sync_count_r - 1;
00447       end if;
00448     end if;
00449   end process;

[Process]
PROCESS_368 ( CLK )

Counter for holding PCS reset for an amount of C_DELAY_PCS_RESET.

Definition at line 454 of file sata_gt11_init_rx.vhd.

00454   process(CLK)
00455   begin
00456     if(CLK'event and CLK = '1') then
00457       if(init_state_r /= C_PCS_RESET) then
00458         pcs_reset_count_r <= C_DELAY_PCS_RESET;
00459       else
00460         pcs_reset_count_r <= pcs_reset_count_r - 1;
00461       end if;
00462     end if;
00463   end process;

[Process]
PROCESS_369 ( CLK )

Counter for waiting C_DELAY_WAIT_PCS after de-assertion of PCS reset.

Definition at line 468 of file sata_gt11_init_rx.vhd.

00468   process(CLK)
00469   begin
00470     if(CLK'event and CLK = '1') then
00471       if(init_state_r /= C_WAIT_PCS) then
00472         wait_pcs_count_r <= C_DELAY_WAIT_PCS;
00473       else
00474         wait_pcs_count_r <= wait_pcs_count_r - 1;
00475       end if;
00476     end if;
00477   end process;

[Process]
PROCESS_370 ( CLK )

Counter for PCS error.

Definition at line 482 of file sata_gt11_init_rx.vhd.

00482   process(CLK)
00483   begin
00484     if(CLK'event and CLK = '1') then
00485       if(init_state_r = C_PMA_RESET) then
00486         pcs_error_count_r <= C_PCS_ERROR_COUNT;
00487       elsif (((init_state_r = C_ALMOST_READY) or (init_state_r = C_READY)) and (pcs_error_r1 and lock_r) = '1') then
00488         pcs_error_count_r <= pcs_error_count_r - 1;
00489       end if;
00490     end if;
00491   end process;

[Process]
PROCESS_371 ( CLK )

Counter for the READY signal.

Definition at line 496 of file sata_gt11_init_rx.vhd.

00496   process(CLK)
00497   begin
00498     if(CLK'event and CLK = '1') then
00499       if((init_state_r /= C_ALMOST_READY) or (pcs_error_r1 = '1')) then
00500         wait_ready_count_r <= C_DELAY_WAIT_READY;
00501       elsif(pcs_error_r1 = '0') then
00502         wait_ready_count_r <= wait_ready_count_r - 1;
00503       end if;
00504     end if;
00505   end process;

[Process]
PROCESS_372 ( CLK )

GT11 Initialization FSM.

Definition at line 510 of file sata_gt11_init_rx.vhd.

00510   process (CLK)
00511   begin
00512     if (rising_edge(CLK)) then
00513       if (reset_r(0) = '1') then
00514         init_state_r <= C_RESET;
00515       else
00516         init_state_r <= init_next_state_r;
00517       end if;
00518     end if;
00519   end process;

[Process]
PROCESS_373 ( reset_r(0) ,
pma_reset_done_i ,
init_fsm_wait_lock_check ,
lock_r ,
sync_done_i ,
pcs_reset_done_i ,
wait_pcs_done_i ,
pcs_error_r1 ,
pcs_error_count_done_i ,
wait_ready_done_i )

GT11 Initialization FSM - This FSM is used to initialize the GT11 block asserting the PMA and PCS reset in sequence. It also takes into account of any error that may happen during initialization. The block uses USRCLK as reference for the delay. DO NOT use the output of the GT11 clocks for this reset module, as the output clocks may change when reset is applied to the GT11. Use a system clock, and make sure that the wait time for each state equals the specified number of USRCLK cycles.

The following steps are applied:

  1. C_RESET: Upon system reset of this block, PMA reset will be asserted
  2. C_PMA_RESET: PMA reset is held for 3 USRCLK cycles
  3. C_WAIT_LOCK: Wait for LOCK. After LOCK is asserted, wait for 16 LOCKUPDATE cycles and wait for the USRCLK of the GT11s to be stabled before going to the next state to assert the PCS reset. If LOCK gets de-asserted, we reset the counter and wait for LOCK again.
  4. C_SYNC: Assert SYNG for 64 SYNC cycles. If LOCK gets de-asserted, we go back to Step 3.
  5. C_PCS_RESET: Assert PCS reset for 3 USRCLK cycles. If LOCK gets de-asserted, we go back to Step 3.
  6. C_WAIT_PCS: After de-assertion of PCS reset, wait 5 USRCLK cycles. If LOCK gets de-asserted, we go back to Step 3.
  7. C_ALMOST_READY: Go to the Almost Ready state. If LOCK gets de-asserted, we go back to Step 3. If there is a PCS error (i.e. buffer error) detected while LOCK is high, we go back to Step 4. If we cycle PCS reset for an N number of C_PCS_ERROR_COUNT, we go back to Step 1 to do a PMA reset.
  8. C_READY: Go to the Ready state. We reach this state after waiting 64 USRCLK cycles without any PCS errors. We assert the READY signal to denote that this block finishes initializing the GT11. If there is a PCS error during this state, we go back to Step 4. If LOCK is lost, we go back to Step 3.

Definition at line 554 of file sata_gt11_init_rx.vhd.

00554   process (reset_r(0), pma_reset_done_i, init_fsm_wait_lock_check, lock_r,
00555            sync_done_i, pcs_reset_done_i, wait_pcs_done_i, pcs_error_r1,
00556            pcs_error_count_done_i, wait_ready_done_i)
00557     variable init_fsm_name : string(1 to 25);
00558   begin
00559     case init_state_r is
00560       
00561       when C_RESET =>
00562         
00563         if (reset_r(0) = '1') then
00564           init_next_state_r <= C_RESET;
00565         else
00566           init_next_state_r <= C_PMA_RESET;
00567         end if;
00568         init_fsm_name := ExtendString("C_RESET", 25);
00569 
00570       when C_PMA_RESET =>
00571 
00572         if (pma_reset_done_i = '1') then
00573           init_next_state_r <= C_WAIT_LOCK;
00574         else
00575           init_next_state_r <= C_PMA_RESET;
00576         end if;
00577         init_fsm_name := ExtendString("C_PMA_RESET", 25);
00578 
00579       when C_WAIT_LOCK =>
00580         
00581         if(init_fsm_wait_lock_check = '1') then
00582           init_next_state_r <= C_SYNC;
00583         else
00584           init_next_state_r <= C_WAIT_LOCK;
00585         end if;
00586         init_fsm_name := ExtendString("C_WAIT_LOCK", 25);
00587 
00588       when C_SYNC =>
00589         if (lock_r = '1') then
00590           if (sync_done_i = '1') then
00591             init_next_state_r <= C_PCS_RESET;
00592           else
00593             init_next_state_r <= C_SYNC;
00594           end if;
00595         else
00596           init_next_state_r <= C_PMA_RESET;  --C_WAIT_LOCK;
00597         end if;
00598         init_fsm_name := ExtendString("C_SYNC", 25);
00599 
00600       when C_PCS_RESET =>
00601         if (lock_r = '1') then
00602           if (pcs_reset_done_i = '1') then
00603             init_next_state_r <= C_WAIT_PCS;
00604           else
00605             init_next_state_r <= C_PCS_RESET;
00606           end if;
00607         else
00608           init_next_state_r <= C_PMA_RESET;  --C_WAIT_LOCK;
00609         end if;
00610         init_fsm_name := ExtendString("C_PCS_RESET", 25);
00611 
00612       when C_WAIT_PCS =>
00613         if (lock_r = '1') then
00614           if (wait_pcs_done_i = '1') then
00615             init_next_state_r <= C_ALMOST_READY;
00616           else
00617             init_next_state_r <= C_WAIT_PCS;
00618           end if;
00619         else
00620           init_next_state_r <= C_PMA_RESET;  --C_WAIT_LOCK;
00621         end if;
00622         init_fsm_name := ExtendString("C_WAIT_PCS", 25);
00623 
00624       when C_ALMOST_READY =>
00625         if (lock_r = '0') then
00626           init_next_state_r <= C_PMA_RESET;  --C_WAIT_LOCK;
00627         elsif ((pcs_error_r1 = '1') and (pcs_error_count_done_i = '0')) then
00628           init_next_state_r <= C_SYNC;
00629         elsif ((pcs_error_r1 = '1') and (pcs_error_count_done_i = '1')) then
00630           init_next_state_r <= C_PMA_RESET;
00631         elsif (wait_ready_done_i = '1') then
00632           init_next_state_r <= C_READY;
00633         else
00634           init_next_state_r <= C_ALMOST_READY;
00635         end if;
00636         init_fsm_name := ExtendString("C_ALMOST_READY", 25);
00637 
00638       when C_READY =>
00639         if ((lock_r = '1') and (pcs_error_r1 = '0')) then
00640           init_next_state_r <= C_READY;
00641         elsif ((lock_r = '1') and (pcs_error_r1 = '1')) then
00642           init_next_state_r <= C_PCS_RESET;
00643         else
00644           init_next_state_r <= C_PMA_RESET;  --C_WAIT_LOCK;
00645         end if;
00646         init_fsm_name := ExtendString("C_READY", 25);
00647 
00648       when others =>
00649         init_next_state_r <= C_RESET;
00650         init_fsm_name     := ExtendString("C_RESET", 25);
00651 
00652     end case;
00653   end process;


Member Data Documentation

C_ALMOST_READY unsigned ( 7 downto 0 ) := " 01000000 " [Constant]

GT11 Initialization FSM.

Definition at line 108 of file sata_gt11_init_rx.vhd.

C_PCS_RESET unsigned ( 7 downto 0 ) := " 00010000 " [Constant]

GT11 Initialization FSM.

Definition at line 104 of file sata_gt11_init_rx.vhd.

C_PMA_RESET unsigned ( 7 downto 0 ) := " 00000010 " [Constant]

GT11 Initialization FSM.

Definition at line 98 of file sata_gt11_init_rx.vhd.

C_READY unsigned ( 7 downto 0 ) := " 10000000 " [Constant]

GT11 Initialization FSM.

Definition at line 110 of file sata_gt11_init_rx.vhd.

C_RESET unsigned ( 7 downto 0 ) := " 00000001 " [Constant]

GT11 Initialization FSM.

Definition at line 96 of file sata_gt11_init_rx.vhd.

C_SYNC unsigned ( 7 downto 0 ) := " 00001000 " [Constant]

GT11 Initialization FSM.

Definition at line 102 of file sata_gt11_init_rx.vhd.

C_WAIT_LOCK unsigned ( 7 downto 0 ) := " 00000100 " [Constant]

GT11 Initialization FSM.

Definition at line 100 of file sata_gt11_init_rx.vhd.

C_WAIT_PCS unsigned ( 7 downto 0 ) := " 00100000 " [Constant]

GT11 Initialization FSM.

Definition at line 106 of file sata_gt11_init_rx.vhd.

FDE [Component]

component FDE

Definition at line 157 of file sata_gt11_init_rx.vhd.

FDRE [Component]

component FDRE

Definition at line 191 of file sata_gt11_init_rx.vhd.

flop_stage_0 FDE [Component Instantiation]

extra FF, last stage

Definition at line 333 of file sata_gt11_init_rx.vhd.

flop_stage_1 FDE [Component Instantiation]

extra FF, last stage

Definition at line 361 of file sata_gt11_init_rx.vhd.

flop_stage_2 FDE [Component Instantiation]

extra FF, last stage

Definition at line 392 of file sata_gt11_init_rx.vhd.

flop_stage_3 FDRE [Component Instantiation]

extra FF, last stage

Definition at line 428 of file sata_gt11_init_rx.vhd.

shift_register_0 SRL16E [Component Instantiation]

SRL16 Stage Zero - First stage of shifting.

Definition at line 319 of file sata_gt11_init_rx.vhd.

shift_register_1 SRL16E [Component Instantiation]

SRL16 Stage One - Second stage of shifting.

Definition at line 347 of file sata_gt11_init_rx.vhd.

shift_register_2 SRL16E [Component Instantiation]

SRL16 Stage Two - Third stage of shifting.

Definition at line 378 of file sata_gt11_init_rx.vhd.

shift_register_3 SRL16E [Component Instantiation]

SRL16 Stage Three - Fourth stage of shifting LOCKUPDATE ready is redundant here in resetting the SRL16 since the flop is already reset by RXLOCK from the MGT

Definition at line 412 of file sata_gt11_init_rx.vhd.

SRL16E [Component]

component SRL16

Definition at line 172 of file sata_gt11_init_rx.vhd.


The documentation for this class was generated from the following file:

Author: M.Niegl
Generated on Tue Nov 4 01:00:05 2008 for BCM-AAA by doxygen 1.5.7.1-20081012