\r
architecture ip_configurator of ip_configurator is\r
\r
+-- -- Placer Directives\r
+-- attribute HGROUP : string;\r
+-- -- for whole architecture\r
+-- attribute HGROUP of ip_configurator : architecture is "GBE_conf_group";\r
+\r
type STATES is (IDLE, LOAD_REG, DELAY0, DELAY1, DELAY2, LOAD_DONE);\r
signal CURRENT_STATE, NEXT_STATE : STATES;\r
signal bsm : std_logic_vector(3 downto 0);\r
signal monitor_hr : std_logic_vector(31 downto 0);
signal monitor_fifos : std_logic_vector(31 downto 0);
signal monitor_fifos_q : std_logic_vector(31 downto 0);
+signal monitor_discfrm : std_logic_vector(31 downto 0);
+-- gk 02.08.10
+signal discfrm_ctr : std_logic_vector(31 downto 0);
begin
MONITOR_LR_IN => monitor_lr,
MONITOR_HDR_IN => monitor_hr,
MONITOR_FIFOS_IN => monitor_fifos_q,
+ MONITOR_DISCFRM_IN => monitor_discfrm,
-- gk 01.06.10
DBG_IPU2GBE1_IN => dbg_ipu2gbe1,
DBG_IPU2GBE2_IN => dbg_ipu2gbe2,
STAT => open
);
-
-- First stage: get data from IPU channel, buffer it and terminate the IPU transmission to CTS
THE_IPU_INTERFACE: trb_net16_ipu2gbe
port map(
FT_TX_RD_EN_IN => mac_tx_read,
FT_START_OF_PACKET_OUT => ft_start_of_packet,
FT_TX_DONE_IN => mac_tx_done,
+ FT_TX_DISCFRM_IN => mac_tx_discfrm,
-- debug ports
BSM_CONSTR_OUT => fc_bsm_constr,
BSM_TRANS_OUT => fc_bsm_trans,
TX_FIFOEOF_OUT => mac_fifoeof,
TX_FIFOEMPTY_OUT => mac_fifoempty,
TX_DONE_IN => mac_tx_done,
+ TX_DISCFRM_IN => mac_tx_discfrm,
-- Debug
BSM_INIT_OUT => ft_bsm_init,
BSM_MAC_OUT => ft_bsm_mac,
end if;
end process BYTES_SENT_CTR_PROC;
+-- gk 02.08.10
+DISCFRM_PROC : process(serdes_clk_125)
+begin
+ if rising_edge(serdes_clk_125) then
+ if (RESET = '1') then
+ discfrm_ctr <= (others => '0');
+ elsif (mac_tx_discfrm = '1') then
+ discfrm_ctr <= discfrm_ctr + x"1";
+ end if;
+ end if;
+end process DISCFRM_PROC;
+
+discfrm_sync : signal_sync
+ generic map(
+ DEPTH => 2,
+ WIDTH => 32
+ )
+ port map(
+ RESET => RESET,
+ D_IN => discfrm_ctr,
+ CLK0 => serdes_clk_125,
+ CLK1 => CLK,
+ D_OUT => monitor_discfrm
+ );
+
-- reset_fifo <= '1' when RESET = '1' or pc_sos = '1' else '0';
--
FT_TX_RD_EN_IN : in std_logic;\r
FT_START_OF_PACKET_OUT : out std_logic;\r
FT_TX_DONE_IN : in std_logic;\r
+ FT_TX_DISCFRM_IN : in std_logic;\r
-- debug ports\r
BSM_CONSTR_OUT : out std_logic_vector(7 downto 0);\r
BSM_TRANS_OUT : out std_logic_vector(3 downto 0);\r
end if;\r
end process transmitMachineProc;\r
\r
-transmitMachine: process( transmitCurrentState, fpf_q, FT_TX_DONE_IN, sent_frames_ctr, ready_frames_ctr_q )\r
+transmitMachine: process( transmitCurrentState, fpf_q, FT_TX_DONE_IN, sent_frames_ctr, ready_frames_ctr_q, FT_TX_DISCFRM_IN )\r
begin\r
case transmitCurrentState is\r
when T_IDLE =>\r
when T_TRANSMIT =>\r
bsm_trans <= x"2";\r
-- gk 03.08.10\r
- if (LINK_OK_IN = '1') and (ft_tx_done_in = '1') then\r
+ if (LINK_OK_IN = '1') and ((ft_tx_done_in = '1') or (FT_TX_DISCFRM_IN = '1'))then\r
transmitNextState <= T_CLEANUP;\r
elsif (LINK_OK_IN = '0') then\r
transmitNextState <= T_PAUSE;\r
if ( RESET = '1' ) then\r
sent_frames_ctr <= (others => '0');\r
-- gk 03.08.10\r
- elsif( ft_tx_done_in = '1' ) or (transmitCurrentState = T_PAUSE) then\r
+ elsif( ft_tx_done_in = '1' ) or (transmitCurrentState = T_PAUSE) or (FT_TX_DISCFRM_IN = '1') then\r
sent_frames_ctr <= sent_frames_ctr + 1;\r
end if;\r
end if;\r
TX_FIFOEOF_OUT : out std_logic;\r
TX_FIFOEMPTY_OUT : out std_logic;\r
TX_DONE_IN : in std_logic;\r
+ TX_DISCFRM_IN : in std_logic;\r
-- Debug\r
BSM_INIT_OUT : out std_logic_vector(3 downto 0);\r
BSM_MAC_OUT : out std_logic_vector(3 downto 0);\r
end if;\r
when T_WAITFORFIFO =>\r
bsm_trans <= x"2";\r
- if (TX_DONE_IN = '1') or (LINK_OK_IN = '0') then -- gk 03.08.10\r
+ if (TX_DONE_IN = '1') or (LINK_OK_IN = '0') or (TX_DISCFRM_IN = '1') then -- gk 03.08.10\r
transmitNextState <= T_IDLE;\r
else\r
transmitNextState <= T_WAITFORFIFO;\r
MONITOR_DROPPED_IN : in std_logic_vector(31 downto 0);
MONITOR_SM_IN : in std_logic_vector(31 downto 0);
MONITOR_LR_IN : in std_logic_vector(31 downto 0);
- MONITOR_HDR_IN : in std_logic_vector(31 downto 0);
+ MONITOR_HDR_IN : in std_logic_vector(31 downto 0);
+ MONITOR_FIFOS_IN : in std_logic_vector(31 downto 0);
+ MONITOR_DISCFRM_IN : in std_logic_vector(31 downto 0);
-- gk 01.06.10
DBG_IPU2GBE1_IN : in std_logic_vector(31 downto 0);
DBG_IPU2GBE2_IN : in std_logic_vector(31 downto 0);
-- -- Placer Directives
-- attribute HGROUP : string;
-- -- for whole architecture
--- attribute HGROUP of gbe_setup : architecture is "GBE_setup_group";
+-- attribute HGROUP of gbe_setup : architecture is "GBE_conf_group";
signal reset_values : std_logic;
max_packet <= x"0000_fde8"; -- 65k --x"0000_fde8"; -- tester
min_packet <= x"0000_0008"; -- gk 20.07.10
max_frame <= x"0578";
- use_gbe <= '1';
+ use_gbe <= '0'; --'1'; -- gk 27.08.10 -- blocks the transmission until gbe gets configured
use_trbnet <= '0';
use_multievents <= '0';
reset_values <= '0';
when x"f8" =>
data_out <= MONITOR_HDR_IN;
+ when x"f9" =>
+ data_out <= MONITOR_FIFOS_IN;
+
+ when x"fa" =>
+ data_out <= MONITOR_DISCFRM_IN;
+
when others =>
data_out <= (others => '0');
end case;
CLK_125_OUT : out std_logic;\r
CLK_125_IN : in std_logic; -- gk 28.04.10 used when intclk\r
--SGMII connection to frame transmitter (tsmac)\r
- FT_TX_CLK_EN_OUT : out std_logic;\r
- FT_RX_CLK_EN_OUT : out std_logic;\r
+ FT_TX_CLK_EN_OUT : out std_logic;\r
+ FT_RX_CLK_EN_OUT : out std_logic;\r
FT_COL_OUT : out std_logic;\r
FT_CRS_OUT : out std_logic;\r
FT_TXD_IN : in std_logic_vector(7 downto 0);\r
--SFP Connection\r
SD_RXD_P_IN : in std_logic;\r
SD_RXD_N_IN : in std_logic;\r
- SD_TXD_P_OUT : out std_logic;\r
- SD_TXD_N_OUT : out std_logic;\r
- SD_REFCLK_P_IN : in std_logic;\r
- SD_REFCLK_N_IN : in std_logic;\r
- SD_PRSNT_N_IN : in std_logic; -- SFP Present ('0' = SFP in place, '1' = no SFP mounted)\r
+ SD_TXD_P_OUT : out std_logic;\r
+ SD_TXD_N_OUT : out std_logic;\r
+ SD_REFCLK_P_IN : in std_logic;\r
+ SD_REFCLK_N_IN : in std_logic;\r
+ SD_PRSNT_N_IN : in std_logic; -- SFP Present ('0' = SFP in place, '1' = no SFP mounted)\r
SD_LOS_IN : in std_logic; -- SFP Loss Of Signal ('0' = OK, '1' = no signal)\r
- SD_TXDIS_OUT : out std_logic; -- SFP disable\r
+ SD_TXDIS_OUT : out std_logic; -- SFP disable\r
-- Autonegotiation stuff \r
MR_RESET_IN : in std_logic;\r
MR_MODE_IN : in std_logic;\r
- MR_ADV_ABILITY_IN : in std_logic_vector(15 downto 0); -- should be x"0020\r
- MR_AN_LP_ABILITY_OUT : out std_logic_vector(15 downto 0); -- advert page from link partner\r
- MR_AN_PAGE_RX_OUT : out std_logic;\r
- MR_AN_COMPLETE_OUT : out std_logic; \r
- MR_AN_ENABLE_IN : in std_logic;\r
- MR_RESTART_AN_IN : in std_logic;\r
+ MR_ADV_ABILITY_IN : in std_logic_vector(15 downto 0); -- should be x"0020\r
+ MR_AN_LP_ABILITY_OUT : out std_logic_vector(15 downto 0); -- advert page from link partner\r
+ MR_AN_PAGE_RX_OUT : out std_logic;\r
+ MR_AN_COMPLETE_OUT : out std_logic; \r
+ MR_AN_ENABLE_IN : in std_logic;\r
+ MR_RESTART_AN_IN : in std_logic;\r
-- Status and control port\r
STAT_OP : out std_logic_vector (15 downto 0);\r
CTRL_OP : in std_logic_vector (15 downto 0);\r
THE_RESET_STATEMACHINE: trb_net16_lsm_sfp_gbe\r
port map(\r
SYSCLK => refclkcore,\r
- RESET => '0', -- really?\r
- CLEAR => RESET, -- from 100MHz PLL, includes async part\r
+ RESET => '0', -- really?\r
+ CLEAR => RESET, -- from 100MHz PLL, includes async part\r
-- status signals\r
- SFP_MISSING_IN => SD_PRSNT_N_IN,\r
+ SFP_MISSING_IN => SD_PRSNT_N_IN,\r
SFP_LOS_IN => SD_LOS_IN,\r
SD_LINK_OK_IN => '1', -- not used\r
- SD_LOS_IN => '0', -- not used\r
- SD_TXCLK_BAD_IN => sd_link_error(2), -- plol\r
- SD_RXCLK_BAD_IN => sd_link_error(1), -- rlol\r
+ SD_LOS_IN => '0', -- not used\r
+ SD_TXCLK_BAD_IN => sd_link_error(2), -- plol\r
+ SD_RXCLK_BAD_IN => sd_link_error(1), -- rlol\r
-- control signals\r
- FULL_RESET_OUT => quad_rst,\r
- LANE_RESET_OUT => lane_rst,\r
- USER_RESET_OUT => user_rst,\r
+ FULL_RESET_OUT => quad_rst,\r
+ LANE_RESET_OUT => lane_rst,\r
+ USER_RESET_OUT => user_rst,\r
-- debug signals\r
- TIMING_CTR_OUT => open,\r
+ TIMING_CTR_OUT => open,\r
BSM_OUT => reset_bsm,\r
- DEBUG_OUT => reset_debug\r
+ DEBUG_OUT => reset_debug\r
);\r
\r
-- gk 28.04.10\r
FT_TX_RD_EN_IN : in std_logic;
FT_START_OF_PACKET_OUT : out std_logic;
FT_TX_DONE_IN : in std_logic;
+ FT_TX_DISCFRM_IN : in std_logic;
-- debug ports
BSM_CONSTR_OUT : out std_logic_vector(7 downto 0);
BSM_TRANS_OUT : out std_logic_vector(3 downto 0);
TX_FIFOEOF_OUT : out std_logic;
TX_FIFOEMPTY_OUT : out std_logic;
TX_DONE_IN : in std_logic;
+ TX_DISCFRM_IN : in std_logic;
-- Debug
BSM_INIT_OUT : out std_logic_vector(3 downto 0);
BSM_MAC_OUT : out std_logic_vector(3 downto 0);
MONITOR_LR_IN : in std_logic_vector(31 downto 0);
MONITOR_HDR_IN : in std_logic_vector(31 downto 0);
MONITOR_FIFOS_IN : in std_logic_vector(31 downto 0);
+ MONITOR_DISCFRM_IN : in std_logic_vector(31 downto 0);
-- gk 01.06.10
DBG_IPU2GBE1_IN : in std_logic_vector(31 downto 0);
DBG_IPU2GBE2_IN : in std_logic_vector(31 downto 0);