]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
Add register for IP address readback
authorJan Michel <j.michel@gsi.de>
Sat, 22 Aug 2020 17:34:10 +0000 (19:34 +0200)
committerJan Michel <j.michel@gsi.de>
Sat, 22 Aug 2020 17:34:10 +0000 (19:34 +0200)
gbe_trb/base/gbe_logic_wrapper.vhd
gbe_trb/base/gbe_wrapper.vhd
gbe_trb/base/trb_net16_gbe_ipu_interface.vhd
gbe_trb/base/trb_net16_gbe_main_control.vhd
gbe_trb/base/trb_net16_gbe_protocol_selector.vhd
gbe_trb/base/trb_net16_gbe_setup.vhd
gbe_trb/base/trb_net_gbe_components.vhd

index ce14692da2d8c3626592966fa0c671f4046d3627..98bca315afa337ca3756ce32e3c45cfae592591f 100644 (file)
@@ -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,
index b86208b650a8ce5b19ca0fe5e60a7bfa22985105..1f432a05289f876608a98d4b89e8749cc59951fc 100644 (file)
@@ -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,
index fdc4463ee70f6f9e0609102304b5f93ae99050e3..50651df7a809970da317e976802aa46b870f7f8d 100644 (file)
@@ -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;
 
index d36ccf35033b8008df8cc1a0334126bb7516067c..75a90d5f45b4fb6d8704af9859f28f2eee19b709 100644 (file)
@@ -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;
index 737ad7db11cb86284a750f58e8f02237ef84f70f..24e2a7b05531abaa9d854f68da2b03bd415e0360 100644 (file)
@@ -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
index 95a23cf31233b8ba452176f11bdbe2291386eec6..811e458e38be49100ccddeaa6543fb780ac198e2 100644 (file)
@@ -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;
index 26449bfef921b4e132db8cde528dffc8698ff53a..d4d229736debf4c75d26527d7c0b17f71ac8b55a 100644 (file)
@@ -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;