1 ------------------------------------------------------------------------------- 2 -- File : Pgp2bTxPhy.vhd 3 -- Company : SLAC National Accelerator Laboratory 4 -- Created : 2009-05-27 5 -- Last update: 2017-03-28 6 ------------------------------------------------------------------------------- 8 -- Physical interface receive module for the Pretty Good Protocol version 2 core. 9 ------------------------------------------------------------------------------- 10 -- This file is part of 'SLAC Firmware Standard Library'. 11 -- It is subject to the license terms in the LICENSE.txt file found in the 12 -- top-level directory of this distribution and at: 13 -- https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 14 -- No part of 'SLAC Firmware Standard Library', including this file, 15 -- may be copied, modified, propagated, or distributed except according to 16 -- the terms contained in the LICENSE.txt file. 17 ------------------------------------------------------------------------------- 20 use ieee.std_logic_1164.
all;
21 use ieee.std_logic_arith.
all;
22 use ieee.std_logic_unsigned.
all;
27 --! @ingroup protocols_pgp_pgp2b_core 31 TX_LANE_CNT_G : range 1 to 2 := 1 -- Number of receive lanes, 1-2 35 -- System clock, reset & control 43 -- Opcode Transmit Interface 51 -- Cell Transmit Interface 59 -- Physical Interface Signals 68 -- Define architecture 101 -- Physical Link State 119 -- State transition sync logic. 156 -- Link control state machine 162 -- Wait for lock state 170 -- Transmit SKIP word A 178 -- Transmit SKIP word B 186 -- Transmit Align word A 194 -- Transmit Align word B 202 -- Transmit Link Training word A 210 -- Transmit Link Training word B 218 -- Transmit Cell Data 232 -- Empty location, used to re-adjust delay pipeline 238 -- After enough cells send alignment word 285 -- Link Training Word A 291 -- Link Training Word B 300 -- Cell Data, lower byte 308 -- Cell Data, upper byte 311 -- Cell Data, lower control 315 -- Cell Data, upper control 320 -- Delay chain select, used when an opcode is transmitted. 321 -- opcode will overwrite current position and delay chain will 322 -- be selected until an EOC is transmitted. At that time the 323 -- non-delayed chain will be select. An empty position is inserted 324 -- after EOC so that valid opcodes are not lost. 331 -- Choose delay chain when opcode is transmitted 335 -- Reset delay chain when delayed EOC is transmitted 340 -- Delayed copy of EOC 358 -- Delayed copy of data 368 -- Delayed data, opcode transmission is not allowed until delay line resets
slv( TX_LANE_CNT_G* 16- 1 downto 0) ltsBData
slv( TX_LANE_CNT_G* 2- 1 downto 0) nxtTxDataK
slv( 7 downto 0) intTxOpCode
slv( 7 downto 0) := "11111011" K_SOC_C
slv( 3 downto 0) := "1000" ST_EMPTY_C
slv( TX_LANE_CNT_G* 16- 1 downto 0) dlyTxData
in cellTxDataslv( TX_LANE_CNT_G* 16- 1 downto 0)
slv( 7 downto 0) := "11111101" K_EOF_C
slv( TX_LANE_CNT_G* 16- 1 downto 0) nxtTxData
slv( 3 downto 0) curState
slv( 7 downto 0) := "01011100" K_EOC_C
slv( TX_LANE_CNT_G* 16- 1 downto 0) skpAData
in pgpTxOpCodeslv( 7 downto 0)
slv( TX_LANE_CNT_G* 16- 1 downto 0) intTxData
slv( 7 downto 0) := "00111100" K_LTS_C
slv( 7 downto 0) := "01111100" K_OTS_C
slv( 3 downto 0) := "0110" ST_ALN_B_C
slv( 3 downto 0) := "0011" ST_LTS_A_C
slv( TX_LANE_CNT_G* 16- 1 downto 0) alnAData
slv( TX_LANE_CNT_G* 2- 1 downto 0) dlyTxDataK
slv( 3 downto 0) := "0101" ST_ALN_A_C
slv( 7 downto 0) := "11110111" K_SOF_C
slv( TX_LANE_CNT_G* 2- 1 downto 0) skpBDataK
slv( TX_LANE_CNT_G* 2- 1 downto 0) skpADataK
slv( 7 downto 0) := "11111110" K_EOFE_C
TX_LANE_CNT_Ginteger range 1 to 2:= 1
slv( TX_LANE_CNT_G* 16- 1 downto 0) alnBData
slv( 3 downto 0) := "0001" ST_SKP_A_C
slv( 7 downto 0) := "10111100" K_COM_C
out phyTxDataKslv( TX_LANE_CNT_G* 2- 1 downto 0)
slv( TX_LANE_CNT_G* 16- 1 downto 0) ltsAData
slv( 7 downto 0) := "01001010" D_102_C
slv( TX_LANE_CNT_G* 16- 1 downto 0) cellData
slv( TX_LANE_CNT_G* 2- 1 downto 0) alnBDataK
slv( TX_LANE_CNT_G* 2- 1 downto 0) alnADataK
slv( 7 downto 0) := "11011100" K_ALN_C
slv( TX_LANE_CNT_G* 16- 1 downto 0) skpBData
in pgpLocDataslv( 7 downto 0)
slv( TX_LANE_CNT_G* 2- 1 downto 0) cellDataK
slv( 7 downto 0) := "00011100" K_SKP_C
slv( TX_LANE_CNT_G* 2- 1 downto 0) ltsBDataK
slv( 3 downto 0) := "0111" ST_CELL_C
slv( 3 downto 0) nxtState
out phyTxDataslv( TX_LANE_CNT_G* 16- 1 downto 0)
slv( 3 downto 0) := "0000" ST_LOCK_C
slv( 3 downto 0) := "0100" ST_LTS_B_C
slv( 3 downto 0) := "0101" PGP2B_ID_C
slv( TX_LANE_CNT_G* 2- 1 downto 0) intTxDataK
slv( TX_LANE_CNT_G* 2- 1 downto 0) ltsADataK
slv( 3 downto 0) := "0010" ST_SKP_B_C