From: Jan Michel Date: Sat, 22 Aug 2020 17:34:10 +0000 (+0200) Subject: Add register for IP address readback X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=05e9f2b10647ab983182000e7448573c57cb564a;p=trbnet.git Add register for IP address readback --- diff --git a/gbe_trb/base/gbe_logic_wrapper.vhd b/gbe_trb/base/gbe_logic_wrapper.vhd index ce14692..98bca31 100644 --- a/gbe_trb/base/gbe_logic_wrapper.vhd +++ b/gbe_trb/base/gbe_logic_wrapper.vhd @@ -41,6 +41,7 @@ entity gbe_logic_wrapper is 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; @@ -303,6 +304,7 @@ begin 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, diff --git a/gbe_trb/base/gbe_wrapper.vhd b/gbe_trb/base/gbe_wrapper.vhd index b86208b..1f432a0 100644 --- a/gbe_trb/base/gbe_wrapper.vhd +++ b/gbe_trb/base/gbe_wrapper.vhd @@ -206,7 +206,7 @@ architecture RTL of gbe_wrapper is 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"; @@ -302,6 +302,7 @@ begin 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), @@ -452,6 +453,7 @@ begin 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), @@ -602,6 +604,7 @@ FWD_FULL_OUT => FWD_FULL_OUT(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), @@ -753,6 +756,7 @@ FWD_FULL_OUT => FWD_FULL_OUT(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), @@ -1110,7 +1114,7 @@ FWD_FULL_OUT => FWD_FULL_OUT(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, diff --git a/gbe_trb/base/trb_net16_gbe_ipu_interface.vhd b/gbe_trb/base/trb_net16_gbe_ipu_interface.vhd index fdc4463..50651df 100644 --- a/gbe_trb/base/trb_net16_gbe_ipu_interface.vhd +++ b/gbe_trb/base/trb_net16_gbe_ipu_interface.vhd @@ -72,7 +72,7 @@ end entity trb_net16_gbe_ipu_interface; 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"; @@ -119,6 +119,8 @@ architecture RTL of trb_net16_gbe_ipu_interface is 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 @@ -214,8 +216,17 @@ 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 @@ -392,16 +403,34 @@ begin 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; diff --git a/gbe_trb/base/trb_net16_gbe_main_control.vhd b/gbe_trb/base/trb_net16_gbe_main_control.vhd index d36ccf3..75a90d5 100644 --- a/gbe_trb/base/trb_net16_gbe_main_control.vhd +++ b/gbe_trb/base/trb_net16_gbe_main_control.vhd @@ -42,6 +42,7 @@ entity trb_net16_gbe_main_control is 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; @@ -319,7 +320,7 @@ begin 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, @@ -1001,4 +1002,4 @@ begin end if; end process; -end trb_net16_gbe_main_control; \ No newline at end of file +end trb_net16_gbe_main_control; diff --git a/gbe_trb/base/trb_net16_gbe_protocol_selector.vhd b/gbe_trb/base/trb_net16_gbe_protocol_selector.vhd index 737ad7d..24e2a7b 100644 --- a/gbe_trb/base/trb_net16_gbe_protocol_selector.vhd +++ b/gbe_trb/base/trb_net16_gbe_protocol_selector.vhd @@ -215,6 +215,7 @@ architecture trb_net16_gbe_protocol_selector of trb_net16_gbe_protocol_selector begin zeros <= (others => '0'); + MY_IP_OUT <= my_ip; arp_gen : if INCLUDE_ARP = '1' generate -- protocol Nr. 1 ARP diff --git a/gbe_trb/base/trb_net16_gbe_setup.vhd b/gbe_trb/base/trb_net16_gbe_setup.vhd index 95a23cf..811e458 100644 --- a/gbe_trb/base/trb_net16_gbe_setup.vhd +++ b/gbe_trb/base/trb_net16_gbe_setup.vhd @@ -63,7 +63,7 @@ port( 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; @@ -248,7 +248,6 @@ begin 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'; @@ -379,14 +378,24 @@ begin 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; @@ -406,41 +415,41 @@ begin 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 => @@ -456,4 +465,4 @@ begin end if; end process READ_PROC; -end architecture; \ No newline at end of file +end architecture; diff --git a/gbe_trb/base/trb_net_gbe_components.vhd b/gbe_trb/base/trb_net_gbe_components.vhd index 26449bf..d4d2297 100644 --- a/gbe_trb/base/trb_net_gbe_components.vhd +++ b/gbe_trb/base/trb_net_gbe_components.vhd @@ -486,6 +486,7 @@ port ( 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 @@ -1032,7 +1033,7 @@ port( 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; @@ -1351,4 +1352,4 @@ port ( ); end component; -end package; \ No newline at end of file +end package;