GSR_N : in std_logic;
MY_MAC_IN : in std_logic_vector(47 downto 0);
DHCP_DONE_OUT : out std_logic;
+ MY_IP_OUT : out std_logic_vector(31 downto 0);
MY_TRBNET_ADDRESS_IN : in std_logic_vector(15 downto 0);
ISSUE_REBOOT_OUT : out std_logic;
MC_RESET_LINK_IN => global_reset,
MC_IDLE_TOO_LONG_OUT => open,
MC_DHCP_DONE_OUT => dhcp_done,
+ MY_IP_OUT => MY_IP_OUT,
MC_MY_MAC_IN => MY_MAC_IN,
MY_TRBNET_ADDRESS_IN => MY_TRBNET_ADDRESS_IN,
ISSUE_REBOOT_OUT => open, --ISSUE_REBOOT_OUT,
signal cfg_throttle_pause : std_logic_vector(15 downto 0);
signal issue_reboot : std_logic_vector(3 downto 0);
-
+ signal my_ip : std_logic_vector(127 downto 0);
begin
mac_impl_gen : if DO_SIMULATION = 0 generate
mac_0 <= MC_UNIQUE_ID_IN(15 downto 8) & MC_UNIQUE_ID_IN(23 downto 16) & MC_UNIQUE_ID_IN(31 downto 24) & x"0" & MC_UNIQUE_ID_IN(35 downto 32) & x"7ada";
GSR_N => GSR_N,
MY_MAC_IN => mac_3,
DHCP_DONE_OUT => dhcp_done(3),
+ MY_IP_OUT => my_ip(127 downto 96),
MY_TRBNET_ADDRESS_IN => MY_TRBNET_ADDRESS_IN,
ISSUE_REBOOT_OUT => issue_reboot(3),
MAC_READY_CONF_IN => mac_ready_conf(3),
GSR_N => GSR_N,
MY_MAC_IN => mac_2,
DHCP_DONE_OUT => dhcp_done(2),
+ MY_IP_OUT => my_ip(95 downto 64),
MY_TRBNET_ADDRESS_IN => MY_TRBNET_ADDRESS_IN,
ISSUE_REBOOT_OUT => issue_reboot(2),
MAC_READY_CONF_IN => mac_ready_conf(2),
GSR_N => GSR_N,
MY_MAC_IN => mac_1,
DHCP_DONE_OUT => dhcp_done(1),
+ MY_IP_OUT => my_ip(63 downto 32),
MY_TRBNET_ADDRESS_IN => MY_TRBNET_ADDRESS_IN,
ISSUE_REBOOT_OUT => issue_reboot(1),
MAC_READY_CONF_IN => mac_ready_conf(1),
GSR_N => GSR_N,
MY_MAC_IN => mac_0,
DHCP_DONE_OUT => dhcp_done(0),
+ MY_IP_OUT => my_ip(31 downto 0),
MY_TRBNET_ADDRESS_IN => MY_TRBNET_ADDRESS_IN,
ISSUE_REBOOT_OUT => issue_reboot(0),
MAC_READY_CONF_IN => mac_ready_conf(0),
MONITOR_SELECT_DROP_IN_IN => (others => '0'), --dbg_select_drop_in,
MONITOR_SELECT_DROP_OUT_IN => (others => '0'), --dbg_select_drop_out,
MONITOR_SELECT_GEN_DBG_IN => monitor_gen_dbg, --dbg_select_gen,
-
+ MONITOR_IP_IN => my_ip,
DUMMY_EVENT_SIZE_OUT => dummy_event,
DUMMY_TRIGGERED_MODE_OUT => dummy_mode,
DATA_HIST_IN => (others => (others => '0')), --dbg_hist,
architecture RTL of trb_net16_gbe_ipu_interface is
attribute syn_encoding : string;
- type saveStates is (IDLE, SAVE_EVT_ADDR, WAIT_FOR_DATA, PRE_SAVE_DATA, SAVE_PRE_DATA, SAVE_DATA, ADD_SUBSUB1, ADD_SUBSUB2, ADD_SUBSUB3, ADD_SUBSUB4, TERMINATE, SEND_TERM_PULSE, CLOSE, CLEANUP);
+ type saveStates is (IDLE, SAVE_EVT_ADDR, WAIT_FOR_DATA, PRE_SAVE_DATA, SAVE_PRE_DATA, SAVE_DATA, ADD_SUBSUB1, ADD_SUBSUB2, ADD_SUBSUB3, ADD_SUBSUB4, TERMINATE, SEND_TERM_PULSE, CLOSE, CLEANUP, WAIT_FOR_SENDING_RESPONSE);
signal save_current_state, save_next_state : saveStates;
attribute syn_encoding of save_current_state : signal is "onehot";
signal temp_data_store : std_logic_vector(8 * 16 - 1 downto 0) := (others => '0');
signal local_read, local_read_q, local_read_qq, local_read_qqq, local_read_qqqq, local_read_qqqqq, local_read_qqqqqq, local_read_qqqqqqq, local_read_qqqqqqqq, local_read_qqqqqqqqq : std_logic := '0';
+ signal did_send_cts_response : std_logic := '0';
+
signal fee_t_type : std_logic_vector(3 downto 0);
begin
when ADD_SUBSUB4 =>
rec_state <= x"a";
- save_next_state <= CLEANUP;
-
+ if did_send_cts_response = '1' then
+ save_next_state <= CLEANUP;
+ else
+ save_next_state <= WAIT_FOR_SENDING_RESPONSE;
+ end if;
+
+ when WAIT_FOR_SENDING_RESPONSE =>
+ if did_send_cts_response = '1' then
+ save_next_state <= CLEANUP;
+ end if;
+
when CLEANUP =>
rec_state <= x"c";
if (CTS_START_READOUT_IN = '0') then
end if;
end process SAVED_EVENTS_CTR_PROC;
+-- CTS_DATAREADY_PROC : process(CLK_IPU)
+-- begin
+-- if rising_edge(CLK_IPU) then
+-- if (save_current_state = SAVE_DATA and FEE_BUSY_IN = '0') then
+-- CTS_DATAREADY_OUT <= '1';
+-- elsif (save_current_state = TERMINATE) then
+-- CTS_DATAREADY_OUT <= '1';
+-- else
+-- CTS_DATAREADY_OUT <= '0';
+-- end if;
+-- end if;
+-- end process CTS_DATAREADY_PROC;
+
CTS_DATAREADY_PROC : process(CLK_IPU)
begin
if rising_edge(CLK_IPU) then
- if (save_current_state = SAVE_DATA and FEE_BUSY_IN = '0') then
+ if did_send_cts_response = '0' and CTS_READ_IN = '1' and CTS_DATAREADY_OUT = '1' then
+ did_send_cts_response <= '1';
+ CTS_DATAREADY_OUT <= '0';
+-- CTS_READOUT_FINISHED_OUT <= '1';
+ elsif save_current_state = SAVE_DATA and did_send_cts_response = '0' then
CTS_DATAREADY_OUT <= '1';
- elsif (save_current_state = TERMINATE) then
- CTS_DATAREADY_OUT <= '1';
- else
- CTS_DATAREADY_OUT <= '0';
- end if;
+-- CTS_READOUT_FINISHED_OUT <= '0';
+ elsif save_current_state = IDLE then
+ did_send_cts_response <= '0';
+ CTS_DATAREADY_OUT <= '0';
+-- CTS_READOUT_FINISHED_OUT <= '0';
+ end if;
end if;
end process CTS_DATAREADY_PROC;
MC_RESET_LINK_IN : in std_logic;
MC_IDLE_TOO_LONG_OUT : out std_logic;
MC_DHCP_DONE_OUT : out std_logic;
+ MY_IP_OUT : out std_logic_vector(31 downto 0);
MC_MY_MAC_IN : in std_logic_vector(47 downto 0);
MY_TRBNET_ADDRESS_IN : in std_logic_vector(15 downto 0);
ISSUE_REBOOT_OUT : out std_logic;
TC_SRC_UDP_OUT => TC_SRC_UDP_OUT,
MC_BUSY_IN => mc_busy,
MY_MAC_IN => MC_MY_MAC_IN,
- MY_IP_OUT => open,
+ MY_IP_OUT => MY_IP_OUT,
DHCP_START_IN => dhcp_start,
DHCP_DONE_OUT => dhcp_done,
GSC_CLK_IN => GSC_CLK_IN,
end if;
end process;
-end trb_net16_gbe_main_control;
\ No newline at end of file
+end trb_net16_gbe_main_control;
begin
zeros <= (others => '0');
+ MY_IP_OUT <= my_ip;
arp_gen : if INCLUDE_ARP = '1' generate
-- protocol Nr. 1 ARP
MONITOR_SELECT_DROP_IN_IN : in std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
MONITOR_SELECT_DROP_OUT_IN : in std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
MONITOR_SELECT_GEN_DBG_IN : in std_logic_vector(2*c_MAX_PROTOCOLS * 32 - 1 downto 0);
-
+ MONITOR_IP_IN : in std_logic_vector(127 downto 0);
DUMMY_EVENT_SIZE_OUT : out std_logic_vector(15 downto 0);
DUMMY_TRIGGERED_MODE_OUT : out std_logic;
autothrottle <= BUS_DATA_IN(0);
throttle_pause <= BUS_DATA_IN(31 downto 16);
-
when x"ff" =>
if (BUS_DATA_IN = x"ffff_ffff") then
reset_values <= '0';
data_out(0) <= autothrottle;
data_out(31 downto 16) <= throttle_pause;
- -- Histogram of sctrl data sizes
- when 96 to 127 =>
- data_out <= SCTRL_HIST_IN(address - 96);
-
- -- Histogram of TrbNetData data sizes
- when 128 to 159 =>
- data_out <= DATA_HIST_IN(address - 128);
-
+-- -- Histogram of sctrl data sizes
+-- when 96 to 127 =>
+-- data_out <= SCTRL_HIST_IN(address - 96);
+--
+-- -- Histogram of TrbNetData data sizes
+-- when 128 to 159 =>
+-- data_out <= DATA_HIST_IN(address - 128);
+
+ when 192 =>
+ data_out <= MONITOR_IP_IN(31 downto 0);
+ when 193 =>
+ data_out <= MONITOR_IP_IN(63 downto 32);
+ when 194 =>
+ data_out <= MONITOR_IP_IN(95 downto 64);
+ when 195 =>
+ data_out <= MONITOR_IP_IN(127 downto 96);
+
+
-- General statistics
when 224 =>
data_out <= MONITOR_RX_BYTES_IN;
when 229 =>
data_out <= MONITOR_DROPPED_IN;
- -- Sctrl
- when 160 =>
- data_out <= MONITOR_SELECT_REC_IN(3 * 32 - 1 downto 2 * 32);
- when 161 =>
- data_out <= MONITOR_SELECT_REC_BYTES_IN(3 * 32 - 1 downto 2 * 32);
- when 162 =>
- data_out <= MONITOR_SELECT_SENT_IN(3 * 32 - 1 downto 2 * 32);
- when 163 =>
- data_out <= MONITOR_SELECT_SENT_BYTES_IN(3 * 32 - 1 downto 2 * 32);
- when 164 =>
- data_out <= MONITOR_SELECT_GEN_DBG_IN(3 * 64 - 1 - 32 downto 2 * 64);
- when 165 =>
- data_out <= MONITOR_SELECT_GEN_DBG_IN(3 * 64 - 1 downto 2 * 64 + 32);
- when 166 =>
- data_out <= MONITOR_SELECT_DROP_IN_IN(3 * 32 - 1 downto 2 * 32);
- when 167 =>
- data_out <= MONITOR_SELECT_DROP_OUT_IN(3 * 32 - 1 downto 2 * 32);
-
- -- TrbnetData
- when 176 =>
- data_out <= MONITOR_SELECT_REC_IN(4 * 32 - 1 downto 3 * 32);
- when 177 =>
- data_out <= MONITOR_SELECT_REC_BYTES_IN(4 * 32 - 1 downto 3 * 32);
- when 178 =>
- data_out <= MONITOR_SELECT_SENT_IN(4 * 32 - 1 downto 3 * 32);
- when 179 =>
- data_out <= MONITOR_SELECT_SENT_BYTES_IN(4 * 32 - 1 downto 3 * 32);
- when 180 =>
- data_out <= MONITOR_SELECT_GEN_DBG_IN(4 * 64 - 1 - 32 downto 3 * 64);
- when 181 =>
- data_out <= MONITOR_SELECT_GEN_DBG_IN(4 * 64 - 1 downto 3 * 64 + 32);
- when 182 =>
- data_out <= MONITOR_SELECT_DROP_IN_IN(4 * 32 - 1 downto 3 * 32);
- when 183 =>
- data_out <= MONITOR_SELECT_DROP_OUT_IN(4 * 32 - 1 downto 3 * 32);
+-- -- Sctrl
+-- when 160 =>
+-- data_out <= MONITOR_SELECT_REC_IN(3 * 32 - 1 downto 2 * 32);
+-- when 161 =>
+-- data_out <= MONITOR_SELECT_REC_BYTES_IN(3 * 32 - 1 downto 2 * 32);
+-- when 162 =>
+-- data_out <= MONITOR_SELECT_SENT_IN(3 * 32 - 1 downto 2 * 32);
+-- when 163 =>
+-- data_out <= MONITOR_SELECT_SENT_BYTES_IN(3 * 32 - 1 downto 2 * 32);
+-- when 164 =>
+-- data_out <= MONITOR_SELECT_GEN_DBG_IN(3 * 64 - 1 - 32 downto 2 * 64);
+-- when 165 =>
+-- data_out <= MONITOR_SELECT_GEN_DBG_IN(3 * 64 - 1 downto 2 * 64 + 32);
+-- when 166 =>
+-- data_out <= MONITOR_SELECT_DROP_IN_IN(3 * 32 - 1 downto 2 * 32);
+-- when 167 =>
+-- data_out <= MONITOR_SELECT_DROP_OUT_IN(3 * 32 - 1 downto 2 * 32);
+--
+-- -- TrbnetData
+-- when 176 =>
+-- data_out <= MONITOR_SELECT_REC_IN(4 * 32 - 1 downto 3 * 32);
+-- when 177 =>
+-- data_out <= MONITOR_SELECT_REC_BYTES_IN(4 * 32 - 1 downto 3 * 32);
+-- when 178 =>
+-- data_out <= MONITOR_SELECT_SENT_IN(4 * 32 - 1 downto 3 * 32);
+-- when 179 =>
+-- data_out <= MONITOR_SELECT_SENT_BYTES_IN(4 * 32 - 1 downto 3 * 32);
+-- when 180 =>
+-- data_out <= MONITOR_SELECT_GEN_DBG_IN(4 * 64 - 1 - 32 downto 3 * 64);
+-- when 181 =>
+-- data_out <= MONITOR_SELECT_GEN_DBG_IN(4 * 64 - 1 downto 3 * 64 + 32);
+-- when 182 =>
+-- data_out <= MONITOR_SELECT_DROP_IN_IN(4 * 32 - 1 downto 3 * 32);
+-- when 183 =>
+-- data_out <= MONITOR_SELECT_DROP_OUT_IN(4 * 32 - 1 downto 3 * 32);
-- for older network monitors
when 243 =>
end if;
end process READ_PROC;
-end architecture;
\ No newline at end of file
+end architecture;
MC_RESET_LINK_IN : in std_logic;
MC_IDLE_TOO_LONG_OUT : out std_logic;
MC_DHCP_DONE_OUT : out std_logic;
+ MY_IP_OUT : out std_logic_vector(31 downto 0);
MC_MY_MAC_IN : in std_logic_vector(47 downto 0);
-- signals to/from receive controller
MONITOR_SELECT_DROP_IN_IN : in std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
MONITOR_SELECT_DROP_OUT_IN : in std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
MONITOR_SELECT_GEN_DBG_IN : in std_logic_vector(2*c_MAX_PROTOCOLS * 32 - 1 downto 0);
-
+ MONITOR_IP_IN : in std_logic_vector(127 downto 0);
DUMMY_EVENT_SIZE_OUT : out std_logic_vector(15 downto 0);
DUMMY_TRIGGERED_MODE_OUT : out std_logic;
);
end component;
-end package;
\ No newline at end of file
+end package;