]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
Discovery start
authorMichael Boehmer <mboehmer@ph.tum.de>
Fri, 11 Nov 2022 17:26:05 +0000 (18:26 +0100)
committerMichael Boehmer <mboehmer@ph.tum.de>
Fri, 11 Nov 2022 17:26:05 +0000 (18:26 +0100)
13 files changed:
gbe_trb/base/gbe_frame_receiver.vhd
gbe_trb/base/gbe_logic_wrapper.vhd
gbe_trb/base/gbe_main_control.vhd
gbe_trb/base/gbe_protocol_selector.vhd
gbe_trb/base/gbe_protocols.vhd
gbe_trb/base/gbe_receive_control.vhd
gbe_trb/base/gbe_wrapper_fifo.vhd
gbe_trb/protocols/gbe_response_constructor_ARP.vhd
gbe_trb/protocols/gbe_response_constructor_DHCP.vhd
gbe_trb/protocols/gbe_response_constructor_Discovery.vhd [new file with mode: 0644]
gbe_trb/protocols/gbe_response_constructor_Forward.vhd
gbe_trb/protocols/gbe_response_constructor_Ping.vhd
gbe_trb/protocols/gbe_response_constructor_SCTRL.vhd

index 3caef2658c14d746f254c364caabfa2accbb6861..2f530821f721d1c34d784555293e83e7f845732e 100644 (file)
@@ -29,15 +29,12 @@ entity gbe_frame_receiver is
     FR_FRAME_VALID_OUT      : out std_logic; -- interconnect to gbe_receive_control\r
     FR_GET_FRAME_IN         : in  std_logic; -- interconnect to gbe_receive_control\r
     FR_FRAME_SIZE_OUT       : out std_logic_vector(15 downto 0); -- interconnect to gbe_receive_control\r
-    FR_PS_OUT               : out std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);\r
-    FR_INFO_OUT             : out std_logic_vector(7 downto 0);\r
+    FR_PS_OUT               : out std_logic_vector(7 downto 0);\r
+    FR_FRAME_INFO_OUT       : out std_logic_vector(7 downto 0);\r
   --\r
     FR_SRC_MAC_ADDRESS_OUT  : out std_logic_vector(47 downto 0);\r
-    FR_DEST_MAC_ADDRESS_OUT : out std_logic_vector(47 downto 0);\r
     FR_SRC_IP_ADDRESS_OUT   : out std_logic_vector(31 downto 0);\r
-    FR_DEST_IP_ADDRESS_OUT  : out std_logic_vector(31 downto 0);\r
     FR_SRC_UDP_PORT_OUT     : out std_logic_vector(15 downto 0);\r
-    FR_DEST_UDP_PORT_OUT    : out std_logic_vector(15 downto 0);\r
   --\r
     OOB_REGISTER_0_OUT      : out std_logic_vector(31 downto 0);\r
     OOB_REGISTER_1_OUT      : out std_logic_vector(31 downto 0);\r
@@ -74,6 +71,7 @@ architecture gbe_frame_receiver_arch of gbe_frame_receiver is
   signal is_icmp_x                           : std_logic; -- ICMP detected\r
   signal is_dhcp_x                           : std_logic; -- DHCP detected\r
   signal is_sctrl_x                          : std_logic; -- SCTRL detected\r
+  signal is_discovery_x                      : std_logic; -- DISCOVERY detected\r
   signal is_my_ip_x                          : std_logic; -- IP match, no broadcast\r
   signal is_broadcast_ip_x                   : std_logic; -- broadcast IP detected\r
   signal is_empty_payload_x                  : std_logic; -- empty payload detected (for frames stored!)\r
@@ -104,15 +102,12 @@ architecture gbe_frame_receiver_arch of gbe_frame_receiver is
   signal mon_rec_bytes                       : unsigned(31 downto 0);\r
 \r
   signal fr_src_ip                           : std_logic_vector(31 downto 0);\r
-  signal fr_dest_ip                          : std_logic_vector(31 downto 0);\r
-  signal fr_dest_udp                         : std_logic_vector(15 downto 0);\r
   signal fr_src_udp                          : std_logic_vector(15 downto 0);\r
   signal fr_frame_size                       : std_logic_vector(15 downto 0);\r
-  signal fr_dest_mac                         : std_logic_vector(47 downto 0);\r
   signal fr_src_mac                          : std_logic_vector(47 downto 0);\r
   signal fr_ps                               : std_logic_vector(7 downto 0);\r
   signal fr_q                                : std_logic_vector(8 downto 0);\r
-  signal fr_info                             : std_logic_vector(7 downto 0);
+  signal fr_info                             : std_logic_vector(7 downto 0);\r
 \r
   signal oob_register_0_int                  : std_logic_vector(31 downto 0);\r
   signal oob_register_1_int                  : std_logic_vector(31 downto 0);\r
@@ -212,37 +207,40 @@ begin
               -- correct IPv4 header\r
               if( (is_udp_x = '1') ) then\r
                 -- UDP header\r
---                if   ( (is_dhcp_x = '1') or (is_sctrl_x = '1') ) then\r
---                  -- DHCP, SCTRL\r
---                  if( (mac_rx_eof_q = '0') ) then\r
---                    -- payload available\r
---                    DECODE_NS <= STORE_FRAME;\r
---                  else\r
---                    -- empty payload, store raw frame, check that later?\r
---                    DECODE_NS <= LAST_BYTE;\r
---                    fifo_hd_wr_x <= '1';\r
---                  end if;\r
---                end if;\r
-                if( (is_dhcp_x = '1') ) then
-                  -- DHCP
-                  if( (mac_rx_eof_q = '0') ) then
-                    -- payload available
-                    DECODE_NS <= STORE_FRAME;
-                  else
-                    -- empty payload, must never happen with DHCP, so we drop it
-                    DECODE_NS <= LAST_BYTE;
-                  end if;
-                end if;
-                if( (is_sctrl_x = '1') ) then
-                  -- SCTRL
-                  if( (mac_rx_eof_q = '0') ) then
-                    -- payload available
-                    DECODE_NS <= STORE_FRAME;
-                  else
-                    -- empty payload, must never happen with SCTRL, so we drop it
-                    DECODE_NS <= LAST_BYTE;
-                  end if;
-                end if;
+----------------------------------------------------------------------------------\r
+                if( (is_dhcp_x = '1') ) then\r
+                  -- DHCP\r
+                  if( (mac_rx_eof_q = '0') ) then\r
+                    -- payload available\r
+                    DECODE_NS <= STORE_FRAME;\r
+                  else\r
+                    -- empty payload, must never happen with DHCP, so we drop it\r
+                    DECODE_NS <= LAST_BYTE;\r
+                  end if;\r
+                end if;\r
+----------------------------------------------------------------------------------\r
+                if( (is_sctrl_x = '1') ) then\r
+                  -- SCTRL\r
+                  if( (mac_rx_eof_q = '0') ) then\r
+                    -- payload available\r
+                    DECODE_NS <= STORE_FRAME;\r
+                  else\r
+                    -- empty payload, must never happen with SCTRL, so we drop it\r
+                    DECODE_NS <= LAST_BYTE;\r
+                  end if;\r
+                end if;\r
+----------------------------------------------------------------------------------\r
+                if( (is_discovery_x = '1') ) then\r
+                  -- DISCOVERY\r
+                  if( (mac_rx_eof_q = '0') ) then\r
+                    -- payload available\r
+                    DECODE_NS <= STORE_FRAME;\r
+                  else\r
+                    -- empty payload, must never happen with DISCOVERY, so we drop it\r
+                    DECODE_NS <= LAST_BYTE;\r
+                  end if;\r
+                end if;\r
+----------------------------------------------------------------------------------\r
               end if;\r
             end if;\r
 \r
@@ -419,6 +417,7 @@ begin
   is_icmp_x          <= '1' when (stored_protocol = x"01") else '0';\r
   is_dhcp_x          <= '1' when (stored_dst_port = x"0044") else '0';\r
   is_sctrl_x         <= '1' when (stored_dst_port = x"6590") else '0';\r
+  is_discovery_x     <= '1' when (stored_dst_port = x"d903") else '0';\r
   is_my_ip_x         <= '1' when (stored_dst_ip = MY_IP_IN) else '0';\r
   is_broadcast_ip_x  <= '1' when (stored_dst_ip = x"ffffffff") else '0';\r
   is_empty_payload_x <= '1' when (rx_bytes_ctr = 0) else '0';\r
@@ -428,10 +427,10 @@ begin
   begin\r
     if( rising_edge(CLK) ) then\r
       protocol_select(7) <= '0';\r
-      protocol_select(6) <= '0';\r
-      protocol_select(5) <= '0';\r
+      protocol_select(6) <= is_discovery_x;\r
+      protocol_select(5) <= '0'; -- reserved for FORWARDER\r
       protocol_select(4) <= is_icmp_x;\r
-      protocol_select(3) <= '0';\r
+      protocol_select(3) <= '0'; -- reserved for legacy TRBnet IPU channel\r
       protocol_select(2) <= is_sctrl_x;\r
       protocol_select(1) <= is_dhcp_x;\r
       protocol_select(0) <= is_arp_x;\r
@@ -471,15 +470,8 @@ begin
   -- CAVEAT: writing to FIFO and reading needs some clock cycles?\r
   -- Three is fine, two fails - data arrives late.\r
   -- Happens when main control tries to read a frame directly when it was written.\r
-\r
-  -- OPTIMIZE: two 512x72 instead of three.\r
-  -- to be removed: dst port\r
-  -- to be reduced: dst mac -> 2bit (is_my_mac_x, is_broadcast_x)\r
-  --                dst ip  -> 2bit (is_my_ip_x, is_ip_broadcast_x)\r
-  -- to be used:    proto sel -> 8bit\r
-\r
---------------------------------------------------------------------------------------------\r
---------------------------------------------------------------------------------------------\r
+  -- OBSELETE. New FIFOs used.\r
+  \r
   -- FIFO for header information\r
   THE_FIFO_ONE: entity work.fifo_512x72_s\r
   port map(\r
@@ -505,10 +497,10 @@ begin
     Data(57)            => is_broadcast_x,\r
     Data(58)            => is_my_ip_x,\r
     Data(59)            => is_broadcast_ip_x,\r
-    Data(60)            => is_empty_payload_x,
-    Data(61)            => '0', -- reserved
-    Data(62)            => '0', -- reserved
-    Data(63)            => '0', -- reserved
+    Data(60)            => is_empty_payload_x,\r
+    Data(61)            => '0', -- reserved\r
+    Data(62)            => '0', -- reserved\r
+    Data(63)            => '0', -- reserved\r
     Data(71 downto 64)  => (others => '0'),\r
     Clock               => CLK,\r
     WrEn                => fifo_hd_wr_q,\r
@@ -519,84 +511,24 @@ begin
     Full                => open -- BUG\r
   );\r
 \r
-  -- decode fifo_one_q and fifo_two_q
-  fr_dest_mac   <= (others => '0');\r
+  -- decode fifo_one_q and fifo_two_q\r
   fr_src_mac    <= fifo_one_q(47 downto 0);\r
-  fr_dest_ip    <= (others => '0');\r
   fr_src_ip     <= fifo_two_q(31 downto 0);\r
-  fr_dest_udp   <= (others => '0');\r
   fr_src_udp    <= fifo_one_q(63 downto 48);\r
   fr_frame_size <= fifo_two_q(47 downto 32);\r
   fr_ps         <= fifo_two_q(55 downto 48);\r
   fr_info       <= fifo_two_q(63 downto 56);\r
 \r
-\r
---------------------------------------------------------------------------------------------\r
---------------------------------------------------------------------------------------------\r
---  -- FIFO for header information\r
---  THE_FIRST_FIFO: entity work.fifo_512x72_s\r
---  port map(\r
---    Data(47 downto 0)   => stored_src_mac,\r
---    Data(63 downto 48)  => stored_src_port,\r
---    Data(71 downto 64)  => std_logic_vector(rx_bytes_ctr(7 downto 0)),\r
---    Clock               => CLK,\r
---    WrEn                => fifo_hd_wr_q,\r
---    RdEn                => FR_GET_FRAME_IN,\r
---    Reset               => RESET,\r
---    Q(47 downto 0)      => fr_src_mac,\r
---    Q(63 downto 48)     => fr_src_udp,\r
---    Q(71 downto 64)     => fr_frame_size(7 downto 0),\r
---    Empty               => open, -- BUG\r
---    Full                => open -- BUG\r
---  );\r
---\r
---  -- FIFO for header information\r
---  THE_SECOND_FIFO: entity work.fifo_512x72_s\r
---  port map(\r
---    Data(47 downto 0)   => stored_dst_mac,\r
---    Data(63 downto 48)  => stored_dst_port,\r
---    Data(71 downto 64)  => protocol_select,\r
---    Clock               => CLK,\r
---    WrEn                => fifo_hd_wr_q,\r
---    RdEn                => FR_GET_FRAME_IN,\r
---    Reset               => RESET,\r
---    Q(47 downto 0)      => fr_dest_mac,\r
---    Q(63 downto 48)     => fr_dest_udp,\r
---    Q(71 downto 64)     => fr_ps,\r
---    Empty               => open, -- BUG\r
---    Full                => open -- BUG\r
---  );\r
---\r
---  -- FIFO for header information\r
---  THE_THIRD_FIFO: entity work.fifo_512x72_s\r
---  port map(\r
---    Data(31 downto 0)   => stored_src_ip,\r
---    Data(63 downto 32)  => stored_dst_ip,\r
---    Data(71 downto 64)  => std_logic_vector(rx_bytes_ctr(15 downto 8)),\r
---    Clock               => CLK,\r
---    WrEn                => fifo_hd_wr_q,\r
---    RdEn                => FR_GET_FRAME_IN,\r
---    Reset               => RESET,\r
---    Q(31 downto 0)      => fr_src_ip,\r
---    Q(63 downto 32)     => fr_dest_ip,\r
---    Q(71 downto 64)     => fr_frame_size(15 downto 8),\r
---    Empty               => open, -- BUG\r
---    Full                => open -- BUG\r
---  );\r
-\r
   PROC_OUT_SYNC: process( CLK )\r
   begin\r
     if( rising_edge(CLK) ) then\r
       FR_SRC_IP_ADDRESS_OUT   <= fr_src_ip;\r
-      FR_DEST_IP_ADDRESS_OUT  <= fr_dest_ip;\r
-      FR_DEST_UDP_PORT_OUT    <= fr_dest_udp;\r
-      FR_DEST_MAC_ADDRESS_OUT <= fr_dest_mac;\r
       FR_SRC_MAC_ADDRESS_OUT  <= fr_src_mac;\r
       FR_SRC_UDP_PORT_OUT     <= fr_src_udp;\r
       FR_FRAME_SIZE_OUT       <= fr_frame_size;\r
       FR_Q_OUT                <= fr_q;\r
-      FR_PS_OUT               <= fr_ps(c_MAX_PROTOCOLS - 1 downto 0);\r
-      FR_INFO_OUT             <= fr_info;\r
+      FR_PS_OUT               <= fr_ps;\r
+      FR_FRAME_INFO_OUT       <= fr_info;\r
     end if;\r
   end process PROC_OUT_SYNC;\r
 \r
index 783ad37c6aeb2c27c868a6be6df5fbabf8363c03..c2c6aad6a3022464fcb370e581941bb59b17be47 100644 (file)
-library ieee;
-  use ieee.std_logic_1164.all;
-  use ieee.numeric_std.all;
-
-library work;
-  use work.gbe_protocols.all;
-
-entity gbe_logic_wrapper is
-  generic(
-    INCLUDE_SLOWCTRL          : std_logic             := '0';
-    INCLUDE_DHCP              : std_logic             := '0';
-    INCLUDE_ARP               : std_logic             := '0';
-    INCLUDE_PING              : std_logic             := '0';
-    INCLUDE_FWD               : std_logic             := '0';
-    SLOWCTRL_BUFFER_SIZE      : integer range 1 to 4  := 1
-  );
-  port(
-    CLK_125_IN               : in  std_logic;
-    RESET                    : 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;
-    -- connection to MAC (link handling)
-    LINK_ACTIVE_IN           : in  std_logic;
-    -- TSMAC RX stuff
-    MAC_RX_DATA_IN           : in  std_logic_vector(7 downto 0);
-    MAC_RX_WRITE_IN          : in  std_logic;
-    MAC_RX_EOF_IN            : in  std_logic;
-    MAC_RX_ERROR_IN          : in  std_logic;
-    -- FIFO TX stuff
-    FT_TX_DATA_OUT           : out std_logic_vector(8 downto 0);
-    FT_TX_WR_OUT             : out std_logic;
-    FT_TX_FIFOFULL_IN        : in  std_logic;
-    -- SlowControl
-    GSC_CLK_IN               : in  std_logic;
-    GSC_INIT_DATAREADY_OUT   : out std_logic;
-    GSC_INIT_DATA_OUT        : out std_logic_vector(15 downto 0);
-    GSC_INIT_PACKET_NUM_OUT  : out std_logic_vector(2 downto 0);
-    GSC_INIT_READ_IN         : in  std_logic;
-    GSC_REPLY_DATAREADY_IN   : in  std_logic;
-    GSC_REPLY_DATA_IN        : in  std_logic_vector(15 downto 0);
-    GSC_REPLY_PACKET_NUM_IN  : in  std_logic_vector(2 downto 0);
-    GSC_REPLY_READ_OUT       : out std_logic;
-    GSC_BUSY_IN              : in  std_logic;
-    --
-    CFG_MAX_REPLY_SIZE_IN    : in  std_logic_vector(31 downto 0);
-    CFG_MAX_FRAME_IN         : in  std_logic_vector(15 downto 0);
-    CFG_ALLOW_RX_IN          : in  std_logic;
-    -- Forwarder
-    FWD_DST_MAC_IN           : in  std_logic_vector(47 downto 0);
-    FWD_DST_IP_IN            : in  std_logic_vector(31 downto 0);
-    FWD_DST_UDP_IN           : in  std_logic_vector(15 downto 0);
-    FWD_DATA_IN              : in  std_logic_vector(7 downto 0);
-    FWD_DATA_VALID_IN        : in  std_logic;
-    FWD_SOP_IN               : in  std_logic;
-    FWD_EOP_IN               : in  std_logic;
-    FWD_READY_OUT            : out std_logic;
-    FWD_FULL_OUT             : out std_logic;
-    --
-    OOB_REGISTER_0_OUT       : out std_logic_vector(31 downto 0);
-    OOB_REGISTER_1_OUT       : out std_logic_vector(31 downto 0);
-    OOB_REGISTER_2_OUT       : out std_logic_vector(31 downto 0);
-    OOB_REGISTER_3_OUT       : out std_logic_vector(31 downto 0);
-    -- Monitor
-    MONITOR_RX_BYTES_OUT     : out std_logic_vector(31 downto 0);
-    MONITOR_RX_FRAMES_OUT    : out std_logic_vector(31 downto 0);
-    MONITOR_TX_BYTES_OUT     : out std_logic_vector(31 downto 0);
-    MONITOR_TX_FRAMES_OUT    : out std_logic_vector(31 downto 0);
-    MONITOR_TX_PACKETS_OUT   : out std_logic_vector(31 downto 0);
-    MONITOR_DROPPED_OUT      : out std_logic_vector(31 downto 0);
-    MONITOR_GEN_DBG_OUT      : out std_logic_vector(2 * c_MAX_PROTOCOLS * 32 - 1 downto 0);
-    --
-    MAKE_RESET_OUT           : out std_logic;
-    DEBUG_OUT                : out std_logic_vector(31 downto 0)
-  );
-end entity gbe_logic_wrapper;
-
-architecture gbe_logic_wrapper_arch of gbe_logic_wrapper is
-
-  signal fr_q                   : std_logic_vector(8 downto 0);
-  signal fr_rd_en               : std_logic;
-  signal fr_frame_valid         : std_logic;
-  signal rc_rd_en               : std_logic;
-  signal rc_q                   : std_logic_vector(8 downto 0);
-  signal rc_frames_rec_ctr      : std_logic_vector(31 downto 0);
-  signal mc_data                : std_logic_vector(8 downto 0);
-  signal mc_wr_en               : std_logic;
-  signal fc_wr_en               : std_logic;
-  signal fc_data                : std_logic_vector(7 downto 0);
-  signal fc_ip_size             : std_logic_vector(15 downto 0);
-  signal fc_udp_size            : std_logic_vector(15 downto 0);
-  signal fc_ident               : std_logic_vector(15 downto 0);
-  signal fc_flags_offset        : std_logic_vector(15 downto 0);
-  signal fc_sod                 : std_logic;
-  signal fc_eod                 : std_logic;
-  signal fc_h_ready             : std_logic;
-  signal fc_ready               : std_logic;
-  signal rc_frame_ready         : std_logic;
-  signal fr_frame_size          : std_logic_vector(15 downto 0);
-  signal rc_frame_size          : std_logic_vector(15 downto 0);
-  signal mc_frame_size          : std_logic_vector(15 downto 0);
-  signal rc_bytes_rec           : std_logic_vector(31 downto 0);
-  signal mc_transmit_ctrl       : std_logic;
-  signal rc_loading_done        : std_logic;
-  signal fr_get_frame           : std_logic;
-  signal mc_transmit_done       : std_logic;
-
-  signal rc_frame_proto         : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-
-  signal mc_type                : std_logic_vector(15 downto 0);
-  signal fr_src_mac             : std_logic_vector(47 downto 0);
-  signal fr_dest_mac            : std_logic_vector(47 downto 0);
-  signal fr_src_ip              : std_logic_vector(31 downto 0);
-  signal fr_dest_ip             : std_logic_vector(31 downto 0);
-  signal fr_src_udp             : std_logic_vector(15 downto 0);
-  signal fr_dest_udp            : std_logic_vector(15 downto 0);
-  signal rc_src_mac             : std_logic_vector(47 downto 0);
-  signal rc_dest_mac            : std_logic_vector(47 downto 0);
-  signal rc_src_ip              : std_logic_vector(31 downto 0);
-  signal rc_dest_ip             : std_logic_vector(31 downto 0);
-  signal rc_src_udp             : std_logic_vector(15 downto 0);
-  signal rc_dest_udp            : std_logic_vector(15 downto 0);
-
-  signal mc_dest_mac            : std_logic_vector(47 downto 0);
-  signal mc_dest_ip             : std_logic_vector(31 downto 0);
-  signal mc_dest_udp            : std_logic_vector(15 downto 0);
-  signal mc_src_mac             : std_logic_vector(47 downto 0);
-  signal mc_src_ip              : std_logic_vector(31 downto 0);
-  signal mc_src_udp             : std_logic_vector(15 downto 0);
-
-  signal fc_dest_mac            : std_logic_vector(47 downto 0);
-  signal fc_dest_ip             : std_logic_vector(31 downto 0);
-  signal fc_dest_udp            : std_logic_vector(15 downto 0);
-  signal fc_src_mac             : std_logic_vector(47 downto 0);
-  signal fc_src_ip              : std_logic_vector(31 downto 0);
-  signal fc_src_udp             : std_logic_vector(15 downto 0);
-  signal fc_type                : std_logic_vector(15 downto 0);
-  signal fc_protocol            : std_logic_vector(7 downto 0);
-
-  signal ft_data                : std_logic_vector(8 downto 0);
-  signal ft_tx_empty            : std_logic;
-  signal ft_start_of_packet     : std_logic;
-
-  signal mc_ip_proto            : std_logic_vector(7 downto 0);
-  signal mc_ident               : std_logic_vector(15 downto 0);
-  
-  signal link_ok                : std_logic;
+library ieee;\r
+  use ieee.std_logic_1164.all;\r
+  use ieee.numeric_std.all;\r
+\r
+library work;\r
+--  use work.gbe_protocols.all;\r
+\r
+entity gbe_logic_wrapper is\r
+  generic(\r
+    INCLUDE_SLOWCTRL          : std_logic             := '0';\r
+    INCLUDE_DHCP              : std_logic             := '0';\r
+    INCLUDE_ARP               : std_logic             := '0';\r
+    INCLUDE_PING              : std_logic             := '0';\r
+    INCLUDE_FWD               : std_logic             := '0';\r
+    INCLUDE_DISCOVERY         : std_logic             := '0';\r
+    SLOWCTRL_BUFFER_SIZE      : integer range 1 to 4  := 1\r
+  );\r
+  port(\r
+    CLK_125_IN               : in  std_logic;\r
+    RESET                    : in  std_logic;\r
+    MY_MAC_IN                : in  std_logic_vector(47 downto 0);\r
+    DHCP_DONE_OUT            : out std_logic;\r
+    MY_IP_OUT                : out std_logic_vector(31 downto 0);              \r
+    MY_TRBNET_ADDRESS_IN     : in  std_logic_vector(15 downto 0);\r
+    ISSUE_REBOOT_OUT         : out std_logic;\r
+    -- connection to MAC (link handling)\r
+    LINK_ACTIVE_IN           : in  std_logic;\r
+    -- TSMAC RX stuff\r
+    MAC_RX_DATA_IN           : in  std_logic_vector(7 downto 0);\r
+    MAC_RX_WRITE_IN          : in  std_logic;\r
+    MAC_RX_EOF_IN            : in  std_logic;\r
+    MAC_RX_ERROR_IN          : in  std_logic;\r
+    -- FIFO TX stuff\r
+    FT_TX_DATA_OUT           : out std_logic_vector(8 downto 0);\r
+    FT_TX_WR_OUT             : out std_logic;\r
+    FT_TX_FIFOFULL_IN        : in  std_logic;\r
+    -- SlowControl\r
+    GSC_CLK_IN               : in  std_logic;\r
+    GSC_INIT_DATAREADY_OUT   : out std_logic;\r
+    GSC_INIT_DATA_OUT        : out std_logic_vector(15 downto 0);\r
+    GSC_INIT_PACKET_NUM_OUT  : out std_logic_vector(2 downto 0);\r
+    GSC_INIT_READ_IN         : in  std_logic;\r
+    GSC_REPLY_DATAREADY_IN   : in  std_logic;\r
+    GSC_REPLY_DATA_IN        : in  std_logic_vector(15 downto 0);\r
+    GSC_REPLY_PACKET_NUM_IN  : in  std_logic_vector(2 downto 0);\r
+    GSC_REPLY_READ_OUT       : out std_logic;\r
+    GSC_BUSY_IN              : in  std_logic;\r
+    --\r
+    CFG_MAX_REPLY_SIZE_IN    : in  std_logic_vector(31 downto 0);\r
+    CFG_MAX_FRAME_IN         : in  std_logic_vector(15 downto 0);\r
+    CFG_ALLOW_RX_IN          : in  std_logic;\r
+    -- Forwarder\r
+    FWD_DST_MAC_IN           : in  std_logic_vector(47 downto 0);\r
+    FWD_DST_IP_IN            : in  std_logic_vector(31 downto 0);\r
+    FWD_DST_UDP_IN           : in  std_logic_vector(15 downto 0);\r
+    FWD_DATA_IN              : in  std_logic_vector(7 downto 0);\r
+    FWD_DATA_VALID_IN        : in  std_logic;\r
+    FWD_SOP_IN               : in  std_logic;\r
+    FWD_EOP_IN               : in  std_logic;\r
+    FWD_READY_OUT            : out std_logic;\r
+    FWD_FULL_OUT             : out std_logic;\r
+    --\r
+    OOB_REGISTER_0_OUT       : out std_logic_vector(31 downto 0);\r
+    OOB_REGISTER_1_OUT       : out std_logic_vector(31 downto 0);\r
+    OOB_REGISTER_2_OUT       : out std_logic_vector(31 downto 0);\r
+    OOB_REGISTER_3_OUT       : out std_logic_vector(31 downto 0);\r
+    -- Monitor\r
+    MONITOR_RX_BYTES_OUT     : out std_logic_vector(31 downto 0);\r
+    MONITOR_RX_FRAMES_OUT    : out std_logic_vector(31 downto 0);\r
+    MONITOR_TX_BYTES_OUT     : out std_logic_vector(31 downto 0);\r
+    MONITOR_TX_FRAMES_OUT    : out std_logic_vector(31 downto 0);\r
+    MONITOR_TX_PACKETS_OUT   : out std_logic_vector(31 downto 0);\r
+    MONITOR_DROPPED_OUT      : out std_logic_vector(31 downto 0);\r
+    MONITOR_GEN_DBG_OUT      : out std_logic_vector(2 * 8 * 32 - 1 downto 0);\r
+    --\r
+    MAKE_RESET_OUT           : out std_logic;\r
+    DEBUG_OUT                : out std_logic_vector(31 downto 0)\r
+  );\r
+end entity gbe_logic_wrapper;\r
+\r
+architecture gbe_logic_wrapper_arch of gbe_logic_wrapper is\r
+\r
+  signal fr_q                   : std_logic_vector(8 downto 0);\r
+  signal fr_rd_en               : std_logic;\r
+  signal fr_frame_valid         : std_logic;\r
+  signal rc_rd_en               : std_logic;\r
+  signal rc_q                   : std_logic_vector(8 downto 0);\r
+  signal rc_frames_rec_ctr      : std_logic_vector(31 downto 0);\r
+  signal mc_data                : std_logic_vector(8 downto 0);\r
+  signal mc_wr_en               : std_logic;\r
+  signal fc_wr_en               : std_logic;\r
+  signal fc_data                : std_logic_vector(7 downto 0);\r
+  signal fc_ip_size             : std_logic_vector(15 downto 0);\r
+  signal fc_udp_size            : std_logic_vector(15 downto 0);\r
+  signal fc_ident               : std_logic_vector(15 downto 0);\r
+  signal fc_flags_offset        : std_logic_vector(15 downto 0);\r
+  signal fc_sod                 : std_logic;\r
+  signal fc_eod                 : std_logic;\r
+  signal fc_h_ready             : std_logic;\r
+  signal fc_ready               : std_logic;\r
+  signal rc_frame_ready         : std_logic;\r
+  signal fr_frame_size          : std_logic_vector(15 downto 0);\r
+  signal rc_frame_size          : std_logic_vector(15 downto 0);\r
+  signal mc_frame_size          : std_logic_vector(15 downto 0);\r
+  signal rc_bytes_rec           : std_logic_vector(31 downto 0);\r
+  signal mc_transmit_ctrl       : std_logic;\r
+  signal rc_loading_done        : std_logic;\r
+  signal fr_get_frame           : std_logic;\r
+  signal mc_transmit_done       : std_logic;\r
+\r
+  signal rc_frame_proto         : std_logic_vector(7 downto 0);\r
+\r
+  signal mc_type                : std_logic_vector(15 downto 0);\r
+  signal fr_src_mac             : std_logic_vector(47 downto 0);\r
+  signal fr_src_ip              : std_logic_vector(31 downto 0);\r
+  signal fr_src_udp             : std_logic_vector(15 downto 0);\r
+  signal rc_src_mac             : std_logic_vector(47 downto 0);\r
+  signal rc_src_ip              : std_logic_vector(31 downto 0);\r
+  signal rc_src_udp             : std_logic_vector(15 downto 0);\r
+\r
+  signal mc_dest_mac            : std_logic_vector(47 downto 0);\r
+  signal mc_dest_ip             : std_logic_vector(31 downto 0);\r
+  signal mc_dest_udp            : std_logic_vector(15 downto 0);\r
+  signal mc_src_mac             : std_logic_vector(47 downto 0);\r
+  signal mc_src_ip              : std_logic_vector(31 downto 0);\r
+  signal mc_src_udp             : std_logic_vector(15 downto 0);\r
+\r
+  signal fc_dest_mac            : std_logic_vector(47 downto 0);\r
+  signal fc_dest_ip             : std_logic_vector(31 downto 0);\r
+  signal fc_dest_udp            : std_logic_vector(15 downto 0);\r
+  signal fc_src_mac             : std_logic_vector(47 downto 0);\r
+  signal fc_src_ip              : std_logic_vector(31 downto 0);\r
+  signal fc_src_udp             : std_logic_vector(15 downto 0);\r
+  signal fc_type                : std_logic_vector(15 downto 0);\r
+  signal fc_protocol            : std_logic_vector(7 downto 0);\r
+\r
+  signal ft_data                : std_logic_vector(8 downto 0);\r
+  signal ft_tx_empty            : std_logic;\r
+  signal ft_start_of_packet     : std_logic;\r
+\r
+  signal mc_ip_proto            : std_logic_vector(7 downto 0);\r
+  signal mc_ident               : std_logic_vector(15 downto 0);\r
+  \r
+  signal link_ok                : std_logic;\r
   signal dhcp_done              : std_logic;\r
-       signal my_ip                  : std_logic_vector(31 downto 0);
-  
-  signal make_reset             : std_logic;
-  signal frame_pause            : std_logic_vector(31 downto 0);
-
-  signal fr_ps                  : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-  signal fr_frame_info          : std_logic_vector(7 downto 0);
-  signal rc_frame_info          : std_logic_vector(7 downto 0);
-
-  signal debug_main             : std_logic_vector(63 downto 0);
-  signal debug_fr               : std_logic_vector(31 downto 0);
-  signal debug_rc               : std_logic_vector(31 downto 0);
-
-  begin
-
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
-----  DEBUG_OUT(31 downto 0)  <= (others => '0');
---  DEBUG_OUT(31 downto 28) <= debug_fr(31 downto 28); -- frame receiver state
---  DEBUG_OUT(27 downto 24) <= debug_rc(3 downto 0); -- receive control state
---  DEBUG_OUT(23 downto 20) <= debug_main(23 downto 20); -- redirect state
---  DEBUG_OUT(19 downto 16) <= fr_ps(3 downto 0); --debug_main(27 downto 24); -- link state
---  DEBUG_OUT(15)           <= rc_loading_done;
---  DEBUG_OUT(14)           <= rc_frame_ready;
---  DEBUG_OUT(13)           <= fr_ps(4); --rc_frame_proto(4); -- ICMP
---  DEBUG_OUT(12)           <= fr_ps(1); --rc_frame_proto(1); -- DHCP
---  DEBUG_OUT(11)           <= fr_ps(0); --rc_frame_proto(0); -- ARP
---  DEBUG_OUT(10)           <= fr_get_frame;
---  DEBUG_OUT(9)            <= fr_frame_valid;
---  DEBUG_OUT(8)            <= fr_rd_en;
---  DEBUG_OUT(7 downto 0)   <= rc_q(7 downto 0);
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
---  DEBUG_OUT(31 downto 28)  <= debug_fr(31 downto 28); 
---  DEBUG_OUT(27 downto 0)   <= debug_main(27 downto 0);
-  DEBUG_OUT(31 downto 0)   <= debug_main(31 downto 0);
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
-
+       signal my_ip                  : std_logic_vector(31 downto 0);\r
+  \r
+  signal make_reset             : std_logic;\r
+  signal frame_pause            : std_logic_vector(31 downto 0);\r
+\r
+  signal fr_ps                  : std_logic_vector(7 downto 0);\r
+  signal fr_frame_info          : std_logic_vector(7 downto 0);\r
+  signal rc_frame_info          : std_logic_vector(7 downto 0);\r
+\r
+  signal debug_main             : std_logic_vector(63 downto 0);\r
+  signal debug_fr               : std_logic_vector(31 downto 0);\r
+  signal debug_rc               : std_logic_vector(31 downto 0);\r
+\r
+  begin\r
+\r
+---------------------------------------------------------------------------------------------------\r
+---------------------------------------------------------------------------------------------------\r
+----  DEBUG_OUT(31 downto 0)  <= (others => '0');\r
+--  DEBUG_OUT(31 downto 28) <= debug_fr(31 downto 28); -- frame receiver state\r
+--  DEBUG_OUT(27 downto 24) <= debug_rc(3 downto 0); -- receive control state\r
+--  DEBUG_OUT(23 downto 20) <= debug_main(23 downto 20); -- redirect state\r
+--  DEBUG_OUT(19 downto 16) <= fr_ps(3 downto 0); --debug_main(27 downto 24); -- link state\r
+--  DEBUG_OUT(15)           <= rc_loading_done;\r
+--  DEBUG_OUT(14)           <= rc_frame_ready;\r
+--  DEBUG_OUT(13)           <= fr_ps(4); --rc_frame_proto(4); -- ICMP\r
+--  DEBUG_OUT(12)           <= fr_ps(1); --rc_frame_proto(1); -- DHCP\r
+--  DEBUG_OUT(11)           <= fr_ps(0); --rc_frame_proto(0); -- ARP\r
+--  DEBUG_OUT(10)           <= fr_get_frame;\r
+--  DEBUG_OUT(9)            <= fr_frame_valid;\r
+--  DEBUG_OUT(8)            <= fr_rd_en;\r
+--  DEBUG_OUT(7 downto 0)   <= rc_q(7 downto 0);\r
+---------------------------------------------------------------------------------------------------\r
+---------------------------------------------------------------------------------------------------\r
+--  DEBUG_OUT(31 downto 28)  <= debug_fr(31 downto 28); \r
+--  DEBUG_OUT(27 downto 0)   <= debug_main(27 downto 0);\r
+  DEBUG_OUT(31 downto 0)   <= debug_main(31 downto 0);\r
+---------------------------------------------------------------------------------------------------\r
+---------------------------------------------------------------------------------------------------\r
+\r
   DHCP_DONE_OUT <= dhcp_done;\r
-       MY_IP_OUT     <= my_ip;
-
-  THE_GBE_MAIN_CONTROL: entity work.gbe_main_control
-    generic map(
-      INCLUDE_SLOWCTRL     => INCLUDE_SLOWCTRL,
-      INCLUDE_DHCP         => INCLUDE_DHCP,
-      INCLUDE_ARP          => INCLUDE_ARP,
-      INCLUDE_PING         => INCLUDE_PING,
-      INCLUDE_FWD          => INCLUDE_FWD,
-      SLOWCTRL_BUFFER_SIZE => SLOWCTRL_BUFFER_SIZE
-    )
-    port map(
-      CLK                           => CLK_125_IN,
-      CLK_125                       => CLK_125_IN,
-      RESET                         => RESET,
-      MC_LINK_OK_OUT                => link_ok,
-      MC_DHCP_DONE_OUT              => dhcp_done,
-      MY_IP_OUT                     => my_ip, --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,
-      -- signals to/from receive controller
-      RC_FRAME_WAITING_IN           => rc_frame_ready,
-      RC_LOADING_DONE_OUT           => rc_loading_done,
-      RC_DATA_IN                    => rc_q,
-      RC_RD_EN_OUT                  => rc_rd_en,
-      RC_FRAME_SIZE_IN              => rc_frame_size,
+       MY_IP_OUT     <= my_ip;\r
+\r
+  THE_GBE_MAIN_CONTROL: entity work.gbe_main_control\r
+    generic map(\r
+      INCLUDE_SLOWCTRL     => INCLUDE_SLOWCTRL,\r
+      INCLUDE_DHCP         => INCLUDE_DHCP,\r
+      INCLUDE_ARP          => INCLUDE_ARP,\r
+      INCLUDE_PING         => INCLUDE_PING,\r
+      INCLUDE_FWD          => INCLUDE_FWD,\r
+      INCLUDE_DISCOVERY    => INCLUDE_DISCOVERY,\r
+      SLOWCTRL_BUFFER_SIZE => SLOWCTRL_BUFFER_SIZE\r
+    )\r
+    port map(\r
+      CLK                           => CLK_125_IN,\r
+      CLK_125                       => CLK_125_IN,\r
+      RESET                         => RESET,\r
+      MC_LINK_OK_OUT                => link_ok,\r
+      MC_DHCP_DONE_OUT              => dhcp_done,\r
+      MY_IP_OUT                     => my_ip,\r
+      MC_MY_MAC_IN                  => MY_MAC_IN,\r
+      MY_TRBNET_ADDRESS_IN          => MY_TRBNET_ADDRESS_IN,\r
+      ISSUE_REBOOT_OUT              => open, --ISSUE_REBOOT_OUT,\r
+      -- signals to/from receive controller\r
+      RC_FRAME_WAITING_IN           => rc_frame_ready,\r
+      RC_LOADING_DONE_OUT           => rc_loading_done,\r
+      RC_DATA_IN                    => rc_q,\r
+      RC_RD_EN_OUT                  => rc_rd_en,\r
+      RC_FRAME_SIZE_IN              => rc_frame_size,\r
       RC_FRAME_PROTO_IN             => rc_frame_proto,\r
-                       RC_FRAME_INFO_IN              => rc_frame_info,
-      RC_SRC_MAC_ADDRESS_IN         => rc_src_mac,
-      RC_DEST_MAC_ADDRESS_IN        => rc_dest_mac,
-      RC_SRC_IP_ADDRESS_IN          => rc_src_ip,
-      RC_DEST_IP_ADDRESS_IN         => rc_dest_ip,
-      RC_SRC_UDP_PORT_IN            => rc_src_udp,
-      RC_DEST_UDP_PORT_IN           => rc_dest_udp,
-      -- signals to/from transmit controller
-      TC_TRANSMIT_CTRL_OUT          => mc_transmit_ctrl,
-      TC_DATA_OUT                   => mc_data,
-      TC_RD_EN_IN                   => mc_wr_en,
-      TC_FRAME_SIZE_OUT             => mc_frame_size,
-      TC_FRAME_TYPE_OUT             => mc_type,
-      TC_IP_PROTOCOL_OUT            => mc_ip_proto,
-      TC_IDENT_OUT                  => mc_ident,
-      TC_DEST_MAC_OUT               => mc_dest_mac,
-      TC_DEST_IP_OUT                => mc_dest_ip,
-      TC_DEST_UDP_OUT               => mc_dest_udp,
-      TC_SRC_MAC_OUT                => mc_src_mac,
-      TC_SRC_IP_OUT                 => mc_src_ip,
-      TC_SRC_UDP_OUT                => mc_src_udp,
-      TC_TRANSMIT_DONE_IN           => mc_transmit_done,
-      -- signals to/from media interface
-      LINK_ACTIVE_IN                => LINK_ACTIVE_IN,
-      -- signals to/from hub
-      GSC_CLK_IN                    => GSC_CLK_IN,
-      GSC_INIT_DATAREADY_OUT        => GSC_INIT_DATAREADY_OUT,
-      GSC_INIT_DATA_OUT             => GSC_INIT_DATA_OUT,
-      GSC_INIT_PACKET_NUM_OUT       => GSC_INIT_PACKET_NUM_OUT,
-      GSC_INIT_READ_IN              => GSC_INIT_READ_IN,
-      GSC_REPLY_DATAREADY_IN        => GSC_REPLY_DATAREADY_IN,
-      GSC_REPLY_DATA_IN             => GSC_REPLY_DATA_IN,
-      GSC_REPLY_PACKET_NUM_IN       => GSC_REPLY_PACKET_NUM_IN,
-      GSC_REPLY_READ_OUT            => GSC_REPLY_READ_OUT,
-      GSC_BUSY_IN                   => GSC_BUSY_IN,
-      CFG_MAX_REPLY_SIZE_IN         => CFG_MAX_REPLY_SIZE_IN,
-      --
-      RESET_TRBNET_IN               => '0',
-      RESET_SCTRL_IN                => '0',
-      MAKE_RESET_OUT                => make_reset,
-      --
-      FWD_DST_MAC_IN                => FWD_DST_MAC_IN,
-      FWD_DST_IP_IN                 => FWD_DST_IP_IN,
-      FWD_DST_UDP_IN                => FWD_DST_UDP_IN,
-      FWD_DATA_IN                   => FWD_DATA_IN,
-      FWD_DATA_VALID_IN             => FWD_DATA_VALID_IN,
-      FWD_SOP_IN                    => FWD_SOP_IN,
-      FWD_EOP_IN                    => FWD_EOP_IN,
-      FWD_READY_OUT                 => FWD_READY_OUT,
-      FWD_FULL_OUT                  => FWD_FULL_OUT,
-      --
-      DEBUG_OUT                     => debug_main --open
-    );
-
-  MAKE_RESET_OUT <= make_reset;
-  
-  THE_TRANSMIT_CONTROL: entity work.gbe_transmit_control
-    port map(
-      CLK                      => CLK_125_IN,
-      RESET                    => RESET,
-      -- signal to/from main controller
-      TC_DATAREADY_IN          => mc_transmit_ctrl,
-      TC_RD_EN_OUT             => mc_wr_en,
-      TC_DATA_IN               => mc_data(7 downto 0),
-      TC_FRAME_SIZE_IN         => mc_frame_size,
-      TC_FRAME_TYPE_IN         => mc_type,
-      TC_IP_PROTOCOL_IN        => mc_ip_proto,
-      TC_DEST_MAC_IN           => mc_dest_mac,
-      TC_DEST_IP_IN            => mc_dest_ip,
-      TC_DEST_UDP_IN           => mc_dest_udp,
-      TC_SRC_MAC_IN            => mc_src_mac,
-      TC_SRC_IP_IN             => mc_src_ip,
-      TC_SRC_UDP_IN            => mc_src_udp,
-      TC_TRANSMISSION_DONE_OUT => mc_transmit_done,
-      TC_IDENT_IN              => mc_ident,
-      TC_MAX_FRAME_IN          => CFG_MAX_FRAME_IN,
-      -- signal to/from frame constructor
-      FC_DATA_OUT              => fc_data,
-      FC_WR_EN_OUT             => fc_wr_en,
-      FC_READY_IN              => fc_ready,
-      FC_H_READY_IN            => fc_h_ready,
-      FC_FRAME_TYPE_OUT        => fc_type,
-      FC_IP_SIZE_OUT           => fc_ip_size,
-      FC_UDP_SIZE_OUT          => fc_udp_size,
-      FC_IDENT_OUT             => fc_ident,
-      FC_FLAGS_OFFSET_OUT      => fc_flags_offset,
-      FC_SOD_OUT               => fc_sod,
-      FC_EOD_OUT               => fc_eod,
-      FC_IP_PROTOCOL_OUT       => fc_protocol,
-      DEST_MAC_ADDRESS_OUT     => fc_dest_mac,
-      DEST_IP_ADDRESS_OUT      => fc_dest_ip,
-      DEST_UDP_PORT_OUT        => fc_dest_udp,
-      SRC_MAC_ADDRESS_OUT      => fc_src_mac,
-      SRC_IP_ADDRESS_OUT       => fc_src_ip,
-      SRC_UDP_PORT_OUT         => fc_src_udp,
-      MONITOR_TX_PACKETS_OUT   => MONITOR_TX_PACKETS_OUT
-    );
-
-  THE_FRAME_CONSTR: entity work.gbe_frame_constr
-    port map(
-      RESET                   => RESET,
-      CLK                     => CLK_125_IN,
-      LINK_OK_IN              => LINK_ACTIVE_IN,
-      WR_EN_IN                => fc_wr_en,
-      DATA_IN                 => fc_data,
-      START_OF_DATA_IN        => fc_sod,
-      END_OF_DATA_IN          => fc_eod,
-      IP_F_SIZE_IN            => fc_ip_size,
-      UDP_P_SIZE_IN           => fc_udp_size,
-      HEADERS_READY_OUT       => fc_h_ready,
-      READY_OUT               => fc_ready,
-      DEST_MAC_ADDRESS_IN     => fc_dest_mac,
-      DEST_IP_ADDRESS_IN      => fc_dest_ip,
-      DEST_UDP_PORT_IN        => fc_dest_udp,
-      SRC_MAC_ADDRESS_IN      => fc_src_mac,
-      SRC_IP_ADDRESS_IN       => fc_src_ip,
-      SRC_UDP_PORT_IN         => fc_src_udp,
-      FRAME_TYPE_IN           => fc_type,
-      IHL_VERSION_IN          => x"45",
-      TOS_IN                  => x"10",
-      IDENTIFICATION_IN       => fc_ident,
-      FLAGS_OFFSET_IN         => fc_flags_offset,
-      TTL_IN                  => x"ff",
-      PROTOCOL_IN             => fc_protocol,
-      FRAME_DELAY_IN          => frame_pause,
-      FT_TX_DATA_OUT          => FT_TX_DATA_OUT,
-      FT_TX_WR_OUT            => FT_TX_WR_OUT,
-      FT_TX_FIFOFULL_IN       => FT_TX_FIFOFULL_IN,
-      MONITOR_TX_BYTES_OUT    => MONITOR_TX_BYTES_OUT,
-      MONITOR_TX_FRAMES_OUT   => MONITOR_TX_FRAMES_OUT
-    );
-    
-  frame_pause <= x"0000" & x"0000"; -- TAKE CARE!!!
-
-  THE_RECEIVE_CONTROL: entity work.gbe_receive_control
-    port map(
-      CLK                     => CLK_125_IN,
-      RESET                   => RESET,
-      -- signals to/from frame_receiver
-      RC_DATA_IN              => fr_q,
-      FR_RD_EN_OUT            => fr_rd_en,
-      FR_FRAME_VALID_IN       => fr_frame_valid,
-      FR_GET_FRAME_OUT        => fr_get_frame,
-      FR_FRAME_SIZE_IN        => fr_frame_size,
+      RC_FRAME_INFO_IN              => rc_frame_info,\r
+      RC_SRC_MAC_ADDRESS_IN         => rc_src_mac,\r
+      RC_SRC_IP_ADDRESS_IN          => rc_src_ip,\r
+      RC_SRC_UDP_PORT_IN            => rc_src_udp,\r
+      -- signals to/from transmit controller\r
+      TC_TRANSMIT_CTRL_OUT          => mc_transmit_ctrl,\r
+      TC_DATA_OUT                   => mc_data,\r
+      TC_RD_EN_IN                   => mc_wr_en,\r
+      TC_FRAME_SIZE_OUT             => mc_frame_size,\r
+      TC_FRAME_TYPE_OUT             => mc_type,\r
+      TC_IP_PROTOCOL_OUT            => mc_ip_proto,\r
+      TC_IDENT_OUT                  => mc_ident,\r
+      TC_DEST_MAC_OUT               => mc_dest_mac,\r
+      TC_DEST_IP_OUT                => mc_dest_ip,\r
+      TC_DEST_UDP_OUT               => mc_dest_udp,\r
+      TC_SRC_MAC_OUT                => mc_src_mac,\r
+      TC_SRC_IP_OUT                 => mc_src_ip,\r
+      TC_SRC_UDP_OUT                => mc_src_udp,\r
+      TC_TRANSMIT_DONE_IN           => mc_transmit_done,\r
+      -- signals to/from media interface\r
+      LINK_ACTIVE_IN                => LINK_ACTIVE_IN,\r
+      -- signals to/from hub\r
+      GSC_CLK_IN                    => GSC_CLK_IN,\r
+      GSC_INIT_DATAREADY_OUT        => GSC_INIT_DATAREADY_OUT,\r
+      GSC_INIT_DATA_OUT             => GSC_INIT_DATA_OUT,\r
+      GSC_INIT_PACKET_NUM_OUT       => GSC_INIT_PACKET_NUM_OUT,\r
+      GSC_INIT_READ_IN              => GSC_INIT_READ_IN,\r
+      GSC_REPLY_DATAREADY_IN        => GSC_REPLY_DATAREADY_IN,\r
+      GSC_REPLY_DATA_IN             => GSC_REPLY_DATA_IN,\r
+      GSC_REPLY_PACKET_NUM_IN       => GSC_REPLY_PACKET_NUM_IN,\r
+      GSC_REPLY_READ_OUT            => GSC_REPLY_READ_OUT,\r
+      GSC_BUSY_IN                   => GSC_BUSY_IN,\r
+      CFG_MAX_REPLY_SIZE_IN         => CFG_MAX_REPLY_SIZE_IN,\r
+      --\r
+      RESET_TRBNET_IN               => '0',\r
+      RESET_SCTRL_IN                => '0',\r
+      MAKE_RESET_OUT                => make_reset,\r
+      --\r
+      FWD_DST_MAC_IN                => FWD_DST_MAC_IN,\r
+      FWD_DST_IP_IN                 => FWD_DST_IP_IN,\r
+      FWD_DST_UDP_IN                => FWD_DST_UDP_IN,\r
+      FWD_DATA_IN                   => FWD_DATA_IN,\r
+      FWD_DATA_VALID_IN             => FWD_DATA_VALID_IN,\r
+      FWD_SOP_IN                    => FWD_SOP_IN,\r
+      FWD_EOP_IN                    => FWD_EOP_IN,\r
+      FWD_READY_OUT                 => FWD_READY_OUT,\r
+      FWD_FULL_OUT                  => FWD_FULL_OUT,\r
+      --\r
+      DEBUG_OUT                     => debug_main --open\r
+    );\r
+\r
+  MAKE_RESET_OUT <= make_reset;\r
+  \r
+  THE_TRANSMIT_CONTROL: entity work.gbe_transmit_control\r
+    port map(\r
+      CLK                      => CLK_125_IN,\r
+      RESET                    => RESET,\r
+      -- signal to/from main controller\r
+      TC_DATAREADY_IN          => mc_transmit_ctrl,\r
+      TC_RD_EN_OUT             => mc_wr_en,\r
+      TC_DATA_IN               => mc_data(7 downto 0),\r
+      TC_FRAME_SIZE_IN         => mc_frame_size,\r
+      TC_FRAME_TYPE_IN         => mc_type,\r
+      TC_IP_PROTOCOL_IN        => mc_ip_proto,\r
+      TC_DEST_MAC_IN           => mc_dest_mac,\r
+      TC_DEST_IP_IN            => mc_dest_ip,\r
+      TC_DEST_UDP_IN           => mc_dest_udp,\r
+      TC_SRC_MAC_IN            => mc_src_mac,\r
+      TC_SRC_IP_IN             => mc_src_ip,\r
+      TC_SRC_UDP_IN            => mc_src_udp,\r
+      TC_TRANSMISSION_DONE_OUT => mc_transmit_done,\r
+      TC_IDENT_IN              => mc_ident,\r
+      TC_MAX_FRAME_IN          => CFG_MAX_FRAME_IN,\r
+      -- signal to/from frame constructor\r
+      FC_DATA_OUT              => fc_data,\r
+      FC_WR_EN_OUT             => fc_wr_en,\r
+      FC_READY_IN              => fc_ready,\r
+      FC_H_READY_IN            => fc_h_ready,\r
+      FC_FRAME_TYPE_OUT        => fc_type,\r
+      FC_IP_SIZE_OUT           => fc_ip_size,\r
+      FC_UDP_SIZE_OUT          => fc_udp_size,\r
+      FC_IDENT_OUT             => fc_ident,\r
+      FC_FLAGS_OFFSET_OUT      => fc_flags_offset,\r
+      FC_SOD_OUT               => fc_sod,\r
+      FC_EOD_OUT               => fc_eod,\r
+      FC_IP_PROTOCOL_OUT       => fc_protocol,\r
+      DEST_MAC_ADDRESS_OUT     => fc_dest_mac,\r
+      DEST_IP_ADDRESS_OUT      => fc_dest_ip,\r
+      DEST_UDP_PORT_OUT        => fc_dest_udp,\r
+      SRC_MAC_ADDRESS_OUT      => fc_src_mac,\r
+      SRC_IP_ADDRESS_OUT       => fc_src_ip,\r
+      SRC_UDP_PORT_OUT         => fc_src_udp,\r
+      MONITOR_TX_PACKETS_OUT   => MONITOR_TX_PACKETS_OUT\r
+    );\r
+\r
+  THE_FRAME_CONSTR: entity work.gbe_frame_constr\r
+    port map(\r
+      RESET                   => RESET,\r
+      CLK                     => CLK_125_IN,\r
+      LINK_OK_IN              => LINK_ACTIVE_IN,\r
+      WR_EN_IN                => fc_wr_en,\r
+      DATA_IN                 => fc_data,\r
+      START_OF_DATA_IN        => fc_sod,\r
+      END_OF_DATA_IN          => fc_eod,\r
+      IP_F_SIZE_IN            => fc_ip_size,\r
+      UDP_P_SIZE_IN           => fc_udp_size,\r
+      HEADERS_READY_OUT       => fc_h_ready,\r
+      READY_OUT               => fc_ready,\r
+      DEST_MAC_ADDRESS_IN     => fc_dest_mac,\r
+      DEST_IP_ADDRESS_IN      => fc_dest_ip,\r
+      DEST_UDP_PORT_IN        => fc_dest_udp,\r
+      SRC_MAC_ADDRESS_IN      => fc_src_mac,\r
+      SRC_IP_ADDRESS_IN       => fc_src_ip,\r
+      SRC_UDP_PORT_IN         => fc_src_udp,\r
+      FRAME_TYPE_IN           => fc_type,\r
+      IHL_VERSION_IN          => x"45",\r
+      TOS_IN                  => x"10",\r
+      IDENTIFICATION_IN       => fc_ident,\r
+      FLAGS_OFFSET_IN         => fc_flags_offset,\r
+      TTL_IN                  => x"ff",\r
+      PROTOCOL_IN             => fc_protocol,\r
+      FRAME_DELAY_IN          => frame_pause,\r
+      FT_TX_DATA_OUT          => FT_TX_DATA_OUT,\r
+      FT_TX_WR_OUT            => FT_TX_WR_OUT,\r
+      FT_TX_FIFOFULL_IN       => FT_TX_FIFOFULL_IN,\r
+      MONITOR_TX_BYTES_OUT    => MONITOR_TX_BYTES_OUT,\r
+      MONITOR_TX_FRAMES_OUT   => MONITOR_TX_FRAMES_OUT\r
+    );\r
+    \r
+  frame_pause <= x"0000" & x"0000"; -- TAKE CARE!!!\r
+\r
+  THE_RECEIVE_CONTROL: entity work.gbe_receive_control\r
+    port map(\r
+      CLK                     => CLK_125_IN,\r
+      RESET                   => RESET,\r
+      -- signals to/from frame_receiver\r
+      RC_DATA_IN              => fr_q,\r
+      FR_RD_EN_OUT            => fr_rd_en,\r
+      FR_FRAME_VALID_IN       => fr_frame_valid,\r
+      FR_GET_FRAME_OUT        => fr_get_frame,\r
+      FR_FRAME_SIZE_IN        => fr_frame_size,\r
       FR_PS_IN                => fr_ps,\r
-                       FR_INFO_IN              => fr_frame_info,
-      FR_SRC_MAC_ADDRESS_IN   => fr_src_mac,
-      FR_DEST_MAC_ADDRESS_IN  => fr_dest_mac,
-      FR_SRC_IP_ADDRESS_IN    => fr_src_ip,
-      FR_DEST_IP_ADDRESS_IN   => fr_dest_ip,
-      FR_SRC_UDP_PORT_IN      => fr_src_udp,
-      FR_DEST_UDP_PORT_IN     => fr_dest_udp,
-      -- signals to/from main controller
-      RC_RD_EN_IN             => rc_rd_en,
-      RC_Q_OUT                => rc_q,
-      RC_FRAME_WAITING_OUT    => rc_frame_ready,
-      RC_LOADING_DONE_IN      => rc_loading_done,
-      RC_FRAME_SIZE_OUT       => rc_frame_size,
-      RC_FRAME_PROTO_OUT      => rc_frame_proto,
-      RC_SRC_MAC_ADDRESS_OUT  => rc_src_mac,
-      RC_DEST_MAC_ADDRESS_OUT => rc_dest_mac,
-      RC_SRC_IP_ADDRESS_OUT   => rc_src_ip,
-      RC_DEST_IP_ADDRESS_OUT  => rc_dest_ip,
-      RC_SRC_UDP_PORT_OUT     => rc_src_udp,
-      RC_DEST_UDP_PORT_OUT    => rc_dest_udp,\r
-                       RC_INFO_OUT             => rc_frame_info,
-      -- statistics
-      FRAMES_RECEIVED_OUT     => rc_frames_rec_ctr,
-      BYTES_RECEIVED_OUT      => rc_bytes_rec,
-      DEBUG_OUT               => debug_rc
-    );
-    
-  THE_FRAME_RECEIVER: entity work.gbe_frame_receiver
-    port map(
-      CLK                     => CLK_125_IN,
-      RESET                   => RESET,
-      LINK_OK_IN              => LINK_ACTIVE_IN,
-      ALLOW_RX_IN             => CFG_ALLOW_RX_IN,
+      FR_FRAME_INFO_IN        => fr_frame_info,\r
+      FR_SRC_MAC_ADDRESS_IN   => fr_src_mac,\r
+      FR_SRC_IP_ADDRESS_IN    => fr_src_ip,\r
+      FR_SRC_UDP_PORT_IN      => fr_src_udp,\r
+      -- signals to/from main controller\r
+      RC_RD_EN_IN             => rc_rd_en,\r
+      RC_Q_OUT                => rc_q,\r
+      RC_FRAME_WAITING_OUT    => rc_frame_ready,\r
+      RC_LOADING_DONE_IN      => rc_loading_done,\r
+      RC_FRAME_SIZE_OUT       => rc_frame_size,\r
+      RC_FRAME_PROTO_OUT      => rc_frame_proto,\r
+      RC_SRC_MAC_ADDRESS_OUT  => rc_src_mac,\r
+      RC_SRC_IP_ADDRESS_OUT   => rc_src_ip,\r
+      RC_SRC_UDP_PORT_OUT     => rc_src_udp,\r
+      RC_FRAME_INFO_OUT       => rc_frame_info,\r
+      -- statistics\r
+      FRAMES_RECEIVED_OUT     => rc_frames_rec_ctr,\r
+      BYTES_RECEIVED_OUT      => rc_bytes_rec,\r
+      DEBUG_OUT               => debug_rc\r
+    );\r
+    \r
+  THE_FRAME_RECEIVER: entity work.gbe_frame_receiver\r
+    port map(\r
+      CLK                     => CLK_125_IN,\r
+      RESET                   => RESET,\r
+      LINK_OK_IN              => LINK_ACTIVE_IN,\r
+      ALLOW_RX_IN             => CFG_ALLOW_RX_IN,\r
       MY_MAC_IN               => MY_MAC_IN,\r
-                       MY_IP_IN                => my_ip,
-      --
-      MY_TRBNET_ADDRESS_IN    => MY_TRBNET_ADDRESS_IN,
-      ISSUE_REBOOT_OUT        => ISSUE_REBOOT_OUT,
-      -- input signals from TS_MAC
-      MAC_RX_EOF_IN           => MAC_RX_EOF_IN,
-      MAC_RX_ER_IN            => MAC_RX_ERROR_IN,
-      MAC_RXD_IN              => MAC_RX_DATA_IN,
-      MAC_RX_EN_IN            => MAC_RX_WRITE_IN,
-      -- output signal to control logic
-      FR_Q_OUT                => fr_q,
-      FR_RD_EN_IN             => fr_rd_en,
-      FR_FRAME_VALID_OUT      => fr_frame_valid,
-      FR_GET_FRAME_IN         => fr_get_frame,
-      FR_FRAME_SIZE_OUT       => fr_frame_size,
-      FR_PS_OUT               => fr_ps,
-      FR_INFO_OUT             => fr_frame_info,
-      --
-      FR_SRC_MAC_ADDRESS_OUT  => fr_src_mac,
-      FR_DEST_MAC_ADDRESS_OUT => fr_dest_mac,
-      FR_SRC_IP_ADDRESS_OUT   => fr_src_ip,
-      FR_DEST_IP_ADDRESS_OUT  => fr_dest_ip,
-      FR_SRC_UDP_PORT_OUT     => fr_src_udp,
-      FR_DEST_UDP_PORT_OUT    => fr_dest_udp,
-      --
-      OOB_REGISTER_0_OUT      => OOB_REGISTER_0_OUT,
-      OOB_REGISTER_1_OUT      => OOB_REGISTER_1_OUT,
-      OOB_REGISTER_2_OUT      => OOB_REGISTER_2_OUT,
-      OOB_REGISTER_3_OUT      => OOB_REGISTER_3_OUT,
-      --
-      MONITOR_RX_BYTES_OUT    => MONITOR_RX_BYTES_OUT,
-      MONITOR_RX_FRAMES_OUT   => MONITOR_RX_FRAMES_OUT,
-      MONITOR_DROPPED_OUT     => MONITOR_DROPPED_OUT,
-      --
-      DEBUG_OUT               => debug_fr
-    );
-
-end architecture gbe_logic_wrapper_arch;
+      MY_IP_IN                => my_ip,\r
+      --\r
+      MY_TRBNET_ADDRESS_IN    => MY_TRBNET_ADDRESS_IN,\r
+      ISSUE_REBOOT_OUT        => ISSUE_REBOOT_OUT,\r
+      -- input signals from TS_MAC\r
+      MAC_RX_EOF_IN           => MAC_RX_EOF_IN,\r
+      MAC_RX_ER_IN            => MAC_RX_ERROR_IN,\r
+      MAC_RXD_IN              => MAC_RX_DATA_IN,\r
+      MAC_RX_EN_IN            => MAC_RX_WRITE_IN,\r
+      -- output signal to control logic\r
+      FR_Q_OUT                => fr_q,\r
+      FR_RD_EN_IN             => fr_rd_en,\r
+      FR_FRAME_VALID_OUT      => fr_frame_valid,\r
+      FR_GET_FRAME_IN         => fr_get_frame,\r
+      FR_FRAME_SIZE_OUT       => fr_frame_size,\r
+      FR_PS_OUT               => fr_ps,\r
+      FR_FRAME_INFO_OUT       => fr_frame_info,\r
+      --\r
+      FR_SRC_MAC_ADDRESS_OUT  => fr_src_mac,\r
+      FR_SRC_IP_ADDRESS_OUT   => fr_src_ip,\r
+      FR_SRC_UDP_PORT_OUT     => fr_src_udp,\r
+      --\r
+      OOB_REGISTER_0_OUT      => OOB_REGISTER_0_OUT,\r
+      OOB_REGISTER_1_OUT      => OOB_REGISTER_1_OUT,\r
+      OOB_REGISTER_2_OUT      => OOB_REGISTER_2_OUT,\r
+      OOB_REGISTER_3_OUT      => OOB_REGISTER_3_OUT,\r
+      --\r
+      MONITOR_RX_BYTES_OUT    => MONITOR_RX_BYTES_OUT,\r
+      MONITOR_RX_FRAMES_OUT   => MONITOR_RX_FRAMES_OUT,\r
+      MONITOR_DROPPED_OUT     => MONITOR_DROPPED_OUT,\r
+      --\r
+      DEBUG_OUT               => debug_fr\r
+    );\r
+\r
+end architecture gbe_logic_wrapper_arch;\r
index 8e7bc1d7b738a675eb184173882d9480bb8b81e5..12043cbd92752f0c19fcc63ef39ae3f810f78f16 100644 (file)
@@ -13,6 +13,7 @@ entity gbe_main_control is
     INCLUDE_ARP          : std_logic := '0';\r
     INCLUDE_PING         : std_logic := '0';\r
     INCLUDE_FWD          : std_logic := '0';\r
+    INCLUDE_DISCOVERY    : std_logic := '0';\r
     --\r
     SLOWCTRL_BUFFER_SIZE : integer range 1 to 4 := 1\r
   );\r
@@ -33,15 +34,12 @@ entity gbe_main_control is
     RC_DATA_IN                    : in  std_logic_vector(8 downto 0);\r
     RC_RD_EN_OUT                  : out std_logic;\r
     RC_FRAME_SIZE_IN              : in  std_logic_vector(15 downto 0);\r
-    RC_FRAME_PROTO_IN             : in  std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);\r
-    RC_FRAME_INFO_IN              : in  std_logic_vector(7 downto 0);
+    RC_FRAME_PROTO_IN             : in  std_logic_vector(7 downto 0);\r
+    RC_FRAME_INFO_IN              : in  std_logic_vector(7 downto 0);\r
     --\r
     RC_SRC_MAC_ADDRESS_IN         : in  std_logic_vector(47 downto 0);\r
-    RC_DEST_MAC_ADDRESS_IN        : in  std_logic_vector(47 downto 0);\r
     RC_SRC_IP_ADDRESS_IN          : in  std_logic_vector(31 downto 0);\r
-    RC_DEST_IP_ADDRESS_IN         : in  std_logic_vector(31 downto 0);\r
     RC_SRC_UDP_PORT_IN            : in  std_logic_vector(15 downto 0);\r
-    RC_DEST_UDP_PORT_IN           : in  std_logic_vector(15 downto 0);\r
     -- signals to/from transmit controller\r
     TC_TRANSMIT_CTRL_OUT          : out std_logic;\r
     TC_DATA_OUT                   : out std_logic_vector(8 downto 0);\r
@@ -87,10 +85,10 @@ entity gbe_main_control is
     FWD_READY_OUT                 : out std_logic;\r
     FWD_FULL_OUT                  : out std_logic;\r
     --\r
-    MONITOR_SELECT_REC_OUT        : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);\r
-    MONITOR_SELECT_REC_BYTES_OUT  : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);\r
-    MONITOR_SELECT_SENT_BYTES_OUT : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);\r
-    MONITOR_SELECT_SENT_OUT       : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);\r
+    MONITOR_SELECT_REC_OUT        : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    MONITOR_SELECT_REC_BYTES_OUT  : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    MONITOR_SELECT_SENT_BYTES_OUT : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    MONITOR_SELECT_SENT_OUT       : out std_logic_vector(8 * 32 - 1 downto 0);\r
     --\r
     DEBUG_OUT                     : out std_logic_vector(63 downto 0)\r
   );\r
@@ -127,7 +125,7 @@ architecture gbe_main_control_arch of gbe_main_control is
 \r
   signal ps_wr_en            : std_logic;\r
   signal ps_response_ready   : std_logic;\r
-  signal ps_busy             : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);\r
+  signal ps_busy             : std_logic_vector(8 - 1 downto 0);\r
   signal loaded_bytes_ctr    : unsigned(15 downto 0);\r
 \r
   signal rc_data_local       : std_logic_vector(8 downto 0);\r
@@ -407,6 +405,7 @@ begin
       INCLUDE_ARP          => INCLUDE_ARP,\r
       INCLUDE_PING         => INCLUDE_PING,\r
       INCLUDE_FWD          => INCLUDE_FWD,\r
+      INCLUDE_DISCOVERY    => INCLUDE_DISCOVERY,\r
       SLOWCTRL_BUFFER_SIZE => SLOWCTRL_BUFFER_SIZE\r
     )\r
     port map(\r
@@ -420,11 +419,8 @@ begin
       PS_FRAME_INFO_IN              => RC_FRAME_INFO_IN,\r
       PS_RESPONSE_READY_OUT         => ps_response_ready,\r
       PS_SRC_MAC_ADDRESS_IN         => RC_SRC_MAC_ADDRESS_IN,\r
-      PS_DEST_MAC_ADDRESS_IN        => RC_DEST_MAC_ADDRESS_IN,\r
       PS_SRC_IP_ADDRESS_IN          => RC_SRC_IP_ADDRESS_IN,\r
-      PS_DEST_IP_ADDRESS_IN         => RC_DEST_IP_ADDRESS_IN,\r
       PS_SRC_UDP_PORT_IN            => RC_SRC_UDP_PORT_IN,\r
-      PS_DEST_UDP_PORT_IN           => RC_DEST_UDP_PORT_IN,\r
       TC_DATA_OUT                   => tc_data,\r
       TC_RD_EN_IN                   => TC_RD_EN_IN,\r
       TC_FRAME_SIZE_OUT             => TC_FRAME_SIZE_OUT,\r
index 27fc4f8385eeba7cca76642939b88f0b7d803fef..24ec501e2052ce267136cc63e38b6448f94fd3ec 100644 (file)
-library ieee;
-  use ieee.std_logic_1164.all;
-  use ieee.numeric_std.all;
-
-library work;
-  use work.gbe_protocols.all;
-
-entity gbe_protocol_selector is
-  generic(
-    INCLUDE_SLOWCTRL     : std_logic := '0';
-    INCLUDE_DHCP         : std_logic := '0';
-    INCLUDE_ARP          : std_logic := '0';
-    INCLUDE_PING         : std_logic := '0';
-    INCLUDE_FWD          : std_logic := '0';
-    SLOWCTRL_BUFFER_SIZE : integer range 1 to 4
-  );
-  port(
-    CLK                           : in  std_logic; -- system clock
-    RESET                         : in  std_logic;
-    -- signals to/from main controller
-    PS_DATA_IN                    : in  std_logic_vector(8 downto 0);
-    PS_WR_EN_IN                   : in  std_logic;
-    PS_PROTO_SELECT_IN            : in  std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-    PS_BUSY_OUT                   : out std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
+library ieee;\r
+  use ieee.std_logic_1164.all;\r
+  use ieee.numeric_std.all;\r
+\r
+library work;\r
+  use work.gbe_protocols.all;\r
+\r
+entity gbe_protocol_selector is\r
+  generic(\r
+    INCLUDE_SLOWCTRL     : std_logic := '0';\r
+    INCLUDE_DHCP         : std_logic := '0';\r
+    INCLUDE_ARP          : std_logic := '0';\r
+    INCLUDE_PING         : std_logic := '0';\r
+    INCLUDE_FWD          : std_logic := '0';\r
+    INCLUDE_DISCOVERY    : std_logic := '0';\r
+    SLOWCTRL_BUFFER_SIZE : integer range 1 to 4\r
+  );\r
+  port(\r
+    CLK                           : in  std_logic; -- system clock\r
+    RESET                         : in  std_logic;\r
+    -- signals to/from main controller\r
+    PS_DATA_IN                    : in  std_logic_vector(8 downto 0);\r
+    PS_WR_EN_IN                   : in  std_logic;\r
+    PS_PROTO_SELECT_IN            : in  std_logic_vector(7 downto 0);\r
+    PS_BUSY_OUT                   : out std_logic_vector(7 downto 0);\r
     PS_FRAME_SIZE_IN              : in  std_logic_vector(15 downto 0);\r
-    PS_FRAME_INFO_IN              : in  std_logic_vector(7 downto 0);
-    PS_RESPONSE_READY_OUT         : out std_logic;
-    PS_SRC_MAC_ADDRESS_IN         : in  std_logic_vector(47 downto 0);
-    PS_DEST_MAC_ADDRESS_IN        : in  std_logic_vector(47 downto 0);
-    PS_SRC_IP_ADDRESS_IN          : in  std_logic_vector(31 downto 0);
-    PS_DEST_IP_ADDRESS_IN         : in  std_logic_vector(31 downto 0);
-    PS_SRC_UDP_PORT_IN            : in  std_logic_vector(15 downto 0);
-    PS_DEST_UDP_PORT_IN           : in  std_logic_vector(15 downto 0);
-    -- signals to/from transmit controller with constructed response
-    TC_DATA_OUT                   : out std_logic_vector(8 downto 0);
-    TC_RD_EN_IN                   : in  std_logic;
-    TC_FRAME_SIZE_OUT             : out std_logic_vector(15 downto 0);
-    TC_FRAME_TYPE_OUT             : out std_logic_vector(15 downto 0);
-    TC_IP_PROTOCOL_OUT            : out std_logic_vector(7 downto 0);
-    TC_IDENT_OUT                  : out std_logic_vector(15 downto 0);
-    TC_DEST_MAC_OUT               : out std_logic_vector(47 downto 0);
-    TC_DEST_IP_OUT                : out std_logic_vector(31 downto 0);
-    TC_DEST_UDP_OUT               : out std_logic_vector(15 downto 0);
-    TC_SRC_MAC_OUT                : out std_logic_vector(47 downto 0);
-    TC_SRC_IP_OUT                 : out std_logic_vector(31 downto 0);
-    TC_SRC_UDP_OUT                : out std_logic_vector(15 downto 0);
-    MC_BUSY_IN                    : in  std_logic;
-    -- misc signals for response constructors
-    MY_MAC_IN                     : in  std_logic_vector(47 downto 0);
-    MY_IP_OUT                     : out std_logic_vector(31 downto 0);
-    DHCP_START_IN                 : in  std_logic;
-    DHCP_DONE_OUT                 : out std_logic;
-    GSC_CLK_IN                    : in  std_logic;
-    GSC_INIT_DATAREADY_OUT        : out std_logic;
-    GSC_INIT_DATA_OUT             : out std_logic_vector(15 downto 0);
-    GSC_INIT_PACKET_NUM_OUT       : out std_logic_vector(2 downto 0);
-    GSC_INIT_READ_IN              : in  std_logic;
-    GSC_REPLY_DATAREADY_IN        : in  std_logic;
-    GSC_REPLY_DATA_IN             : in  std_logic_vector(15 downto 0);
-    GSC_REPLY_PACKET_NUM_IN       : in  std_logic_vector(2 downto 0);
-    GSC_REPLY_READ_OUT            : out std_logic;
-    GSC_BUSY_IN                   : in  std_logic;
-    CFG_MAX_REPLY_SIZE_IN         : in  std_logic_vector(31 downto 0);    -- USED IN SCTRL
-    MAKE_RESET_OUT                : out std_logic;
-    MY_TRBNET_ADDRESS_IN          : in  std_logic_vector(15 downto 0);
-    ISSUE_REBOOT_OUT              : out std_logic;
-    -- Forwarder
-    FWD_DST_MAC_IN                : in  std_logic_vector(47 downto 0);
-    FWD_DST_IP_IN                 : in  std_logic_vector(31 downto 0);
-    FWD_DST_UDP_IN                : in  std_logic_vector(15 downto 0);
-    FWD_DATA_IN                   : in  std_logic_vector(7 downto 0);
-    FWD_DATA_VALID_IN             : in  std_logic;
-    FWD_SOP_IN                    : in  std_logic;
-    FWD_EOP_IN                    : in  std_logic;
-    FWD_READY_OUT                 : out std_logic;
-    FWD_FULL_OUT                  : out std_logic;
-    -- input for statistics from outside
-    MONITOR_SELECT_REC_OUT        : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
-    MONITOR_SELECT_REC_BYTES_OUT  : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
-    MONITOR_SELECT_SENT_BYTES_OUT : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
-    MONITOR_SELECT_SENT_OUT       : out std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
-    DEBUG_OUT                     : out std_logic_vector(63 downto 0)
-  );
-end gbe_protocol_selector;
-
-architecture gbe_protocol_selector_arch of gbe_protocol_selector is
-
-  attribute syn_encoding : string;
-
-  signal rd_en             : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-  signal resp_ready        : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-  signal tc_wr             : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-  signal tc_data           : std_logic_vector(c_MAX_PROTOCOLS * 9 - 1 downto 0);
-  signal tc_size           : std_logic_vector(c_MAX_PROTOCOLS * 16 - 1 downto 0);
-  signal tc_type           : std_logic_vector(c_MAX_PROTOCOLS * 16 - 1 downto 0);
-  signal busy              : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-  signal selected          : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-  signal tc_mac            : std_logic_vector(c_MAX_PROTOCOLS * 48 - 1 downto 0);
-  signal tc_ip             : std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
-  signal tc_udp            : std_logic_vector(c_MAX_PROTOCOLS * 16 - 1 downto 0);
-  signal tc_src_mac        : std_logic_vector(c_MAX_PROTOCOLS * 48 - 1 downto 0);
-  signal tc_src_ip         : std_logic_vector(c_MAX_PROTOCOLS * 32 - 1 downto 0);
-  signal tc_src_udp        : std_logic_vector(c_MAX_PROTOCOLS * 16 - 1 downto 0);
-  signal tc_ip_proto       : std_logic_vector(c_MAX_PROTOCOLS * 8 - 1 downto 0);
-
-  type select_states is (IDLE, LOOP_OVER, SELECT_ONE, PROCESS_REQUEST, CLEANUP);
-  signal select_current_state, select_next_state : select_states;
-  attribute syn_encoding of select_current_state : signal is "onehot";
-
-  signal state : std_logic_vector(3 downto 0);
-  signal index : integer range 0 to c_MAX_PROTOCOLS - 1;
-
-  signal mult : std_logic;
-
-  signal tc_ident : std_logic_vector(c_MAX_PROTOCOLS * 16 - 1 downto 0);
-  signal zeros    : std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-
-  attribute syn_preserve : boolean;
-  attribute syn_keep : boolean;
-  attribute syn_keep of state, mult : signal is true;
-  attribute syn_preserve of state, mult : signal is true;
-
-  signal my_ip        : std_logic_vector(31 downto 0);
-  signal select_state : std_logic_vector(3 downto 0);
-
-  signal debug_arp           : std_logic_vector(63 downto 0);
-  signal debug_dhcp          : std_logic_vector(63 downto 0);
-  signal debug_ping          : std_logic_vector(63 downto 0);
-  signal debug_sctrl         : std_logic_vector(63 downto 0);
-  signal debug_forward       : std_logic_vector(63 downto 0);
-
-begin
-  zeros <= (others => '0');
-  MY_IP_OUT <= my_ip;
-
-  -- Debug lines
---  DEBUG_OUT(63 downto 16) <= (others => '0');
---  DEBUG_OUT(15 downto 12) <= state; -- selector state
---  DEBUG_OUT(11 downto 0)  <= debug_dhcp(11 downto 0); -- FSM states DHCP
-  DEBUG_OUT(63 downto 32) <= (others => '0');
-  DEBUG_OUT(31 downto 0)  <= debug_sctrl(31 downto 0);
-
-  ARP_GEN: if( INCLUDE_ARP = '1' ) generate
-    -- protocol Nr. 1 ARP
-    THE_ARP: entity work.gbe_response_constructor_ARP
-      port map(
-        CLK                    => CLK,
-        RESET                  => RESET,
-        -- INTERFACE
-        MY_MAC_IN              => MY_MAC_IN,
-        MY_IP_IN               => my_ip,
-        PS_DATA_IN             => PS_DATA_IN,
-        PS_WR_EN_IN            => PS_WR_EN_IN,
-        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(0),
-        PS_RESPONSE_READY_OUT  => resp_ready(0),
-        PS_BUSY_OUT            => busy(0),
-        PS_SELECTED_IN         => selected(0),
-        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,
-        PS_DEST_MAC_ADDRESS_IN => PS_DEST_MAC_ADDRESS_IN,
-        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,
-        PS_DEST_IP_ADDRESS_IN  => PS_DEST_IP_ADDRESS_IN,
-        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,
-        PS_DEST_UDP_PORT_IN    => PS_DEST_UDP_PORT_IN,
-        TC_RD_EN_IN            => TC_RD_EN_IN,
-        TC_DATA_OUT            => tc_data(1 * 9 - 1 downto 0 * 9),
-        TC_FRAME_SIZE_OUT      => tc_size(1 * 16 - 1 downto 0 * 16),
-        TC_FRAME_TYPE_OUT      => tc_type(1 * 16 - 1 downto 0 * 16),
-        TC_IP_PROTOCOL_OUT     => tc_ip_proto(1 * 8 - 1 downto 0 * 8),
-        TC_IDENT_OUT           => tc_ident(1 * 16 - 1 downto 0 * 16),
-        TC_DEST_MAC_OUT        => tc_mac(1 * 48 - 1 downto 0 * 48),
-        TC_DEST_IP_OUT         => tc_ip(1 * 32 - 1 downto 0 * 32),
-        TC_DEST_UDP_OUT        => tc_udp(1 * 16 - 1 downto 0 * 16),
-        TC_SRC_MAC_OUT         => tc_src_mac(1 * 48 - 1 downto 0 * 48),
-        TC_SRC_IP_OUT          => tc_src_ip(1 * 32 - 1 downto 0 * 32),
-        TC_SRC_UDP_OUT         => tc_src_udp(1 * 16 - 1 downto 0 * 16),
-        DEBUG_OUT              => debug_arp
-      -- END OF INTERFACE
-      );
-  end generate ARP_GEN;
-
-  NO_ARP_GEN: if( INCLUDE_ARP = '0' ) generate
-    resp_ready(0) <= '0';
-    busy(0)       <= '0';
-  end generate NO_ARP_GEN;
-
-  DHCP_GEN: if( INCLUDE_DHCP = '1' ) generate
-    -- protocol No. 2 DHCP
-    THE_DHCP: entity work.gbe_response_constructor_DHCP
-      port map(
-        CLK                    => CLK,
-        RESET                  => RESET,
-        -- INTERFACE
-        MY_MAC_IN              => MY_MAC_IN,
-        MY_IP_IN               => my_ip,
-        PS_DATA_IN             => PS_DATA_IN,
-        PS_WR_EN_IN            => PS_WR_EN_IN,
-        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(1),
-        PS_RESPONSE_READY_OUT  => resp_ready(1),
-        PS_BUSY_OUT            => busy(1),
-        PS_SELECTED_IN         => selected(1),
-        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,
-        PS_DEST_MAC_ADDRESS_IN => PS_DEST_MAC_ADDRESS_IN,
-        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,
-        PS_DEST_IP_ADDRESS_IN  => PS_DEST_IP_ADDRESS_IN,
-        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,
-        PS_DEST_UDP_PORT_IN    => PS_DEST_UDP_PORT_IN,\r
-        PS_FRAME_INFO_IN       => PS_FRAME_INFO_IN,
-        TC_RD_EN_IN            => TC_RD_EN_IN,
-        TC_DATA_OUT            => tc_data(2 * 9 - 1 downto 1 * 9),
-        TC_FRAME_SIZE_OUT      => tc_size(2 * 16 - 1 downto 1 * 16),
-        TC_FRAME_TYPE_OUT      => tc_type(2 * 16 - 1 downto 1 * 16),
-        TC_IP_PROTOCOL_OUT     => tc_ip_proto(2 * 8 - 1 downto 1 * 8),
-        TC_IDENT_OUT           => tc_ident(2 * 16 - 1 downto 1 * 16),
-        TC_DEST_MAC_OUT        => tc_mac(2 * 48 - 1 downto 1 * 48),
-        TC_DEST_IP_OUT         => tc_ip(2 * 32 - 1 downto 1 * 32),
-        TC_DEST_UDP_OUT        => tc_udp(2 * 16 - 1 downto 1 * 16),
-        TC_SRC_MAC_OUT         => tc_src_mac(2 * 48 - 1 downto 1 * 48),
-        TC_SRC_IP_OUT          => tc_src_ip(2 * 32 - 1 downto 1 * 32),
-        TC_SRC_UDP_OUT         => tc_src_udp(2 * 16 - 1 downto 1 * 16),
-        -- END OF INTERFACE
-        MY_IP_OUT              => my_ip,
-        DHCP_START_IN          => DHCP_START_IN,
-        DHCP_DONE_OUT          => DHCP_DONE_OUT,
-        DEBUG_OUT              => debug_dhcp
-      );
-  end generate DHCP_GEN;
-
-  NO_DHCP_GEN: if( INCLUDE_DHCP = '0' ) generate
-    resp_ready(1) <= '0';
-    busy(1)       <= '0';
-  end generate NO_DHCP_GEN;
-
-  PING_GEN: if( INCLUDE_PING = '1' ) generate
-    --protocol No. 3 Ping
-    THE_PING: entity work.gbe_response_constructor_Ping
-      port map(
-        CLK                    => CLK,
-        RESET                  => RESET,
-        ---- INTERFACE
-        MY_MAC_IN              => MY_MAC_IN,
-        MY_IP_IN               => my_ip,
-        PS_DATA_IN             => PS_DATA_IN,
-        PS_WR_EN_IN            => PS_WR_EN_IN,
-        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(4),
-        PS_RESPONSE_READY_OUT  => resp_ready(4),
-        PS_BUSY_OUT            => busy(4),
-        PS_SELECTED_IN         => selected(4),
-        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,
-        PS_DEST_MAC_ADDRESS_IN => PS_DEST_MAC_ADDRESS_IN,
-        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,
-        PS_DEST_IP_ADDRESS_IN  => PS_DEST_IP_ADDRESS_IN,
-        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,
-        PS_DEST_UDP_PORT_IN    => PS_DEST_UDP_PORT_IN,
-        TC_RD_EN_IN            => TC_RD_EN_IN,
-        TC_DATA_OUT            => tc_data(5 * 9 - 1 downto 4 * 9),
-        TC_FRAME_SIZE_OUT      => tc_size(5 * 16 - 1 downto 4 * 16),
-        TC_FRAME_TYPE_OUT      => tc_type(5 * 16 - 1 downto 4 * 16),
-        TC_IP_PROTOCOL_OUT     => tc_ip_proto(5 * 8 - 1 downto 4 * 8),
-        TC_IDENT_OUT           => tc_ident(5 * 16 - 1 downto 4 * 16),
-        TC_DEST_MAC_OUT        => tc_mac(5 * 48 - 1 downto 4 * 48),
-        TC_DEST_IP_OUT         => tc_ip(5 * 32 - 1 downto 4 * 32),
-        TC_DEST_UDP_OUT        => tc_udp(5 * 16 - 1 downto 4 * 16),
-        TC_SRC_MAC_OUT         => tc_src_mac(5 * 48 - 1 downto 4 * 48),
-        TC_SRC_IP_OUT          => tc_src_ip(5 * 32 - 1 downto 4 * 32),
-        TC_SRC_UDP_OUT         => tc_src_udp(5 * 16 - 1 downto 4 * 16),
-        DEBUG_OUT              => debug_ping
-      -- END OF INTERFACE
-      );
-  end generate PING_GEN;
-
-  NO_PING_GEN: if( INCLUDE_PING = '0' ) generate
-    resp_ready(4) <= '0';
-    busy(4)       <= '0';
-  end generate NO_PING_GEN;
-
-  SCTRL_GEN: if( INCLUDE_SLOWCTRL = '1' ) generate
-    THE_SCTRL: entity work.gbe_response_constructor_SCTRL
-      generic map(
-        SLOWCTRL_BUFFER_SIZE => SLOWCTRL_BUFFER_SIZE
-      )
-      port map(
-        CLK                           => CLK,
-        RESET                         => RESET,
-        -- INTERFACE
-        MY_MAC_IN                     => MY_MAC_IN,
-        MY_IP_IN                      => my_ip,
-        PS_DATA_IN                    => PS_DATA_IN,
-        PS_WR_EN_IN                   => PS_WR_EN_IN,
-        PS_ACTIVATE_IN                => PS_PROTO_SELECT_IN(2),
-        PS_RESPONSE_READY_OUT         => resp_ready(2),
-        PS_BUSY_OUT                   => busy(2),
-        PS_SELECTED_IN                => selected(2),
-        PS_SRC_MAC_ADDRESS_IN         => PS_SRC_MAC_ADDRESS_IN,
-        PS_DEST_MAC_ADDRESS_IN        => PS_DEST_MAC_ADDRESS_IN,
-        PS_SRC_IP_ADDRESS_IN          => PS_SRC_IP_ADDRESS_IN,
-        PS_DEST_IP_ADDRESS_IN         => PS_DEST_IP_ADDRESS_IN,
-        PS_SRC_UDP_PORT_IN            => PS_SRC_UDP_PORT_IN,
-        PS_DEST_UDP_PORT_IN           => PS_DEST_UDP_PORT_IN,
-        TC_RD_EN_IN                   => TC_RD_EN_IN,
-        TC_DATA_OUT                   => tc_data(3 * 9 - 1 downto 2 * 9),
-        TC_FRAME_SIZE_OUT             => tc_size(3 * 16 - 1 downto 2 * 16),
-        TC_FRAME_TYPE_OUT             => tc_type(3 * 16 - 1 downto 2 * 16),
-        TC_IP_PROTOCOL_OUT            => tc_ip_proto(3 * 8 - 1 downto 2 * 8),
-        TC_IDENT_OUT                  => tc_ident(3 * 16 - 1 downto 2 * 16),
-        TC_DEST_MAC_OUT               => tc_mac(3 * 48 - 1 downto 2 * 48),
-        TC_DEST_IP_OUT                => tc_ip(3 * 32 - 1 downto 2 * 32),
-        TC_DEST_UDP_OUT               => tc_udp(3 * 16 - 1 downto 2 * 16),
-        TC_SRC_MAC_OUT                => tc_src_mac(3 * 48 - 1 downto 2 * 48),
-        TC_SRC_IP_OUT                 => tc_src_ip(3 * 32 - 1 downto 2 * 32),
-        TC_SRC_UDP_OUT                => tc_src_udp(3 * 16 - 1 downto 2 * 16),
-        DEBUG_OUT                     => debug_sctrl,
-        -- END OF INTERFACE
-        GSC_CLK_IN                    => GSC_CLK_IN,
-        GSC_INIT_DATAREADY_OUT        => GSC_INIT_DATAREADY_OUT,
-        GSC_INIT_DATA_OUT             => GSC_INIT_DATA_OUT,
-        GSC_INIT_PACKET_NUM_OUT       => GSC_INIT_PACKET_NUM_OUT,
-        GSC_INIT_READ_IN              => GSC_INIT_READ_IN,
-        GSC_REPLY_DATAREADY_IN        => GSC_REPLY_DATAREADY_IN,
-        GSC_REPLY_DATA_IN             => GSC_REPLY_DATA_IN,
-        GSC_REPLY_PACKET_NUM_IN       => GSC_REPLY_PACKET_NUM_IN,
-        GSC_REPLY_READ_OUT            => GSC_REPLY_READ_OUT,
-        GSC_BUSY_IN                   => GSC_BUSY_IN,
-        CFG_MAX_REPLY_SIZE_IN         => CFG_MAX_REPLY_SIZE_IN,
-        MAKE_RESET_OUT                => MAKE_RESET_OUT,
-        MONITOR_SELECT_REC_OUT        => MONITOR_SELECT_REC_OUT(3 * 32 - 1 downto 2 * 32),
-        MONITOR_SELECT_REC_BYTES_OUT  => MONITOR_SELECT_REC_BYTES_OUT(3 * 32 - 1 downto 2 * 32),
-        MONITOR_SELECT_SENT_BYTES_OUT => MONITOR_SELECT_SENT_BYTES_OUT(3 * 32 - 1 downto 2 * 32),
-        MONITOR_SELECT_SENT_OUT       => MONITOR_SELECT_SENT_OUT(3 * 32 - 1 downto 2 * 32)
-      );
-  end generate SCTRL_GEN;
-
-  NO_SCTRL_GEN: if( INCLUDE_SLOWCTRL = '0' ) generate
-    resp_ready(2)  <= '0';
-    busy(2)        <= '0';
-    MAKE_RESET_OUT <= '0';
-
-    GSC_INIT_DATAREADY_OUT  <= '0';
-    GSC_INIT_DATA_OUT       <= (others => '0');
-    GSC_INIT_PACKET_NUM_OUT <= (others => '0');
-    GSC_REPLY_READ_OUT      <= '1';
-  end generate NO_SCTRL_GEN;
-
-  ---------------------------------------------------------------------------------------
-  -- once upon a time, this was "READOUT"
-  resp_ready(3)            <= '0';
-  busy(3)                  <= '0';
-  ---------------------------------------------------------------------------------------
-
-  FWD_GEN: if( INCLUDE_FWD = '1' ) generate
-
-    THE_FORWARD: entity work.gbe_response_constructor_Forward
-      port map(
-        CLK                    => CLK,
-        RESET                  => RESET,
-        ---- INTERFACE
-        MY_MAC_IN              => MY_MAC_IN,
-        MY_IP_IN               => my_ip,
-        PS_DATA_IN             => PS_DATA_IN,
-        PS_WR_EN_IN            => PS_WR_EN_IN,
-        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(5),
-        PS_RESPONSE_READY_OUT  => resp_ready(5),
-        PS_BUSY_OUT            => busy(5),
-        PS_SELECTED_IN         => selected(5),
-        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,
-        PS_DEST_MAC_ADDRESS_IN => PS_DEST_MAC_ADDRESS_IN,
-        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,
-        PS_DEST_IP_ADDRESS_IN  => PS_DEST_IP_ADDRESS_IN,
-        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,
-        PS_DEST_UDP_PORT_IN    => PS_DEST_UDP_PORT_IN,
-        TC_RD_EN_IN            => TC_RD_EN_IN,
-        TC_DATA_OUT            => tc_data(6 * 9 - 1 downto 5 * 9),
-        TC_FRAME_SIZE_OUT      => tc_size(6 * 16 - 1 downto 5 * 16),
-        TC_FRAME_TYPE_OUT      => tc_type(6 * 16 - 1 downto 5 * 16),
-        TC_IP_PROTOCOL_OUT     => tc_ip_proto(6 * 8 - 1 downto 5 * 8),
-        TC_IDENT_OUT           => tc_ident(6 * 16 - 1 downto 5 * 16),
-        TC_DEST_MAC_OUT        => tc_mac(6 * 48 - 1 downto 5 * 48),
-        TC_DEST_IP_OUT         => tc_ip(6 * 32 - 1 downto 5 * 32),
-        TC_DEST_UDP_OUT        => tc_udp(6 * 16 - 1 downto 5 * 16),
-        TC_SRC_MAC_OUT         => tc_src_mac(6 * 48 - 1 downto 5 * 48),
-        TC_SRC_IP_OUT          => tc_src_ip(6 * 32 - 1 downto 5 * 32),
-        TC_SRC_UDP_OUT         => tc_src_udp(6 * 16 - 1 downto 5 * 16),
-        RECEIVED_FRAMES_OUT    => open,
-        SENT_FRAMES_OUT        => open,
-        FWD_DST_MAC_IN         => FWD_DST_MAC_IN,
-        FWD_DST_IP_IN          => FWD_DST_IP_IN,
-        FWD_DST_UDP_IN         => FWD_DST_UDP_IN,
-        FWD_DATA_IN            => FWD_DATA_IN,
-        FWD_DATA_VALID_IN      => FWD_DATA_VALID_IN,
-        FWD_SOP_IN             => FWD_SOP_IN,
-        FWD_EOP_IN             => FWD_EOP_IN,
-        FWD_READY_OUT          => FWD_READY_OUT,
-        FWD_FULL_OUT           => FWD_FULL_OUT,
-        DEBUG_OUT              => debug_forward
-      -- END OF INTERFACE
-      );
-
-  end generate FWD_GEN;
-
-  NO_FWD_GEN: if( INCLUDE_FWD = '0' ) generate
-    resp_ready(5) <= '0';
-    busy(5) <= '0';
-  end generate NO_FWD_GEN;
-
-  PS_BUSY_OUT <= busy;
-
-  PROC_SELECT_MACHINE: process( CLK, RESET )
-  begin
-    if   ( RESET = '1' ) then
-      select_current_state <= IDLE;
-    elsif( rising_edge(CLK) ) then
-      select_current_state <= select_next_state;
-    end if;
-  end process PROC_SELECT_MACHINE;
-
-  PROC_SELECT_TRANSITIONS: process(select_current_state, MC_BUSY_IN, resp_ready, index, zeros, busy)
-  begin
-    select_state <= x"0";
-
-    case (select_current_state) is
-      when IDLE =>
-        select_state <= x"1";
-        if (MC_BUSY_IN = '0') then
-          select_next_state <= LOOP_OVER;
-        else
-          select_next_state <= IDLE;
-        end if;
-
-      when LOOP_OVER =>
-        select_state <= x"2";
-        if (resp_ready /= zeros) then
-          if (resp_ready(index) = '1') then
-            select_next_state <= SELECT_ONE;
-          elsif (index = c_MAX_PROTOCOLS) then
-            select_next_state <= CLEANUP;
-          else
-            select_next_state <= LOOP_OVER;
-          end if;
-        else
-          select_next_state <= CLEANUP;
-        end if;
-
-      when SELECT_ONE =>
-        select_state <= x"3";
-        if (MC_BUSY_IN = '1') then
-          select_next_state <= PROCESS_REQUEST;
-        else
-          select_next_state <= SELECT_ONE;
-        end if;
-
-      when PROCESS_REQUEST =>
-        select_state <= x"4";
-        if (busy(index) = '0') then
-          select_next_state <= CLEANUP;
-        else
-          select_next_state <= PROCESS_REQUEST;
-        end if;
-
-      when CLEANUP =>
-        select_state      <= x"5";
-        select_next_state <= IDLE;
-
-      when others => select_next_state <= IDLE;
-
-    end case;
-  end process PROC_SELECT_TRANSITIONS;
-
-  PROC_INDEX: process( CLK )
-  begin
-    if( rising_edge(CLK) ) then
-      if   ( select_current_state = IDLE ) then
-        index <= 0;
-      elsif( select_current_state = LOOP_OVER and resp_ready(index) = '0' ) then
-        index <= index + 1;
-      end if;
-    end if;
-  end process PROC_INDEX;
-
-  PROC_SELECTOR: process( CLK )
-  begin
-    if( rising_edge(CLK) ) then
-      if( select_current_state = SELECT_ONE or select_current_state = PROCESS_REQUEST ) then
-        TC_DATA_OUT        <= tc_data((index + 1) * 9 - 1 downto index * 9);
-        TC_FRAME_SIZE_OUT  <= tc_size((index + 1) * 16 - 1 downto index * 16);
-        TC_FRAME_TYPE_OUT  <= tc_type((index + 1) * 16 - 1 downto index * 16);
-        TC_DEST_MAC_OUT    <= tc_mac((index + 1) * 48 - 1 downto index * 48);
-        TC_DEST_IP_OUT     <= tc_ip((index + 1) * 32 - 1 downto index * 32);
-        TC_DEST_UDP_OUT    <= tc_udp((index + 1) * 16 - 1 downto index * 16);
-        TC_SRC_MAC_OUT     <= tc_src_mac((index + 1) * 48 - 1 downto index * 48);
-        TC_SRC_IP_OUT      <= tc_src_ip((index + 1) * 32 - 1 downto index * 32);
-        TC_SRC_UDP_OUT     <= tc_src_udp((index + 1) * 16 - 1 downto index * 16);
-        TC_IP_PROTOCOL_OUT <= tc_ip_proto((index + 1) * 8 - 1 downto index * 8);
-        TC_IDENT_OUT       <= tc_ident((index + 1) * 16 - 1 downto index * 16);
-        if( select_current_state = SELECT_ONE ) then
-          PS_RESPONSE_READY_OUT <= '1';
-          selected(index)       <= '0';
-        else
-          PS_RESPONSE_READY_OUT <= '0';
-          selected(index)       <= '1';
-        end if;
-      else
-        TC_DATA_OUT           <= (others => '0');
-        TC_FRAME_SIZE_OUT     <= (others => '0');
-        TC_FRAME_TYPE_OUT     <= (others => '0');
-        TC_DEST_MAC_OUT       <= (others => '0');
-        TC_DEST_IP_OUT        <= (others => '0');
-        TC_DEST_UDP_OUT       <= (others => '0');
-        TC_SRC_MAC_OUT        <= (others => '0');
-        TC_SRC_IP_OUT         <= (others => '0');
-        TC_SRC_UDP_OUT        <= (others => '0');
-        TC_IP_PROTOCOL_OUT    <= (others => '0');
-        TC_IDENT_OUT          <= (others => '0');
-        PS_RESPONSE_READY_OUT <= '0';
-        selected              <= (others => '0');
-      end if;
-    end if;
-  end process PROC_SELECTOR;
-
-end gbe_protocol_selector_arch;
+    PS_FRAME_INFO_IN              : in  std_logic_vector(7 downto 0);\r
+    PS_RESPONSE_READY_OUT         : out std_logic;\r
+    PS_SRC_MAC_ADDRESS_IN         : in  std_logic_vector(47 downto 0);\r
+    PS_SRC_IP_ADDRESS_IN          : in  std_logic_vector(31 downto 0);\r
+    PS_SRC_UDP_PORT_IN            : in  std_logic_vector(15 downto 0);\r
+    -- signals to/from transmit controller with constructed response\r
+    TC_DATA_OUT                   : out std_logic_vector(8 downto 0);\r
+    TC_RD_EN_IN                   : in  std_logic;\r
+    TC_FRAME_SIZE_OUT             : out std_logic_vector(15 downto 0);\r
+    TC_FRAME_TYPE_OUT             : out std_logic_vector(15 downto 0);\r
+    TC_IP_PROTOCOL_OUT            : out std_logic_vector(7 downto 0);\r
+    TC_IDENT_OUT                  : out std_logic_vector(15 downto 0);\r
+    TC_DEST_MAC_OUT               : out std_logic_vector(47 downto 0);\r
+    TC_DEST_IP_OUT                : out std_logic_vector(31 downto 0);\r
+    TC_DEST_UDP_OUT               : out std_logic_vector(15 downto 0);\r
+    TC_SRC_MAC_OUT                : out std_logic_vector(47 downto 0);\r
+    TC_SRC_IP_OUT                 : out std_logic_vector(31 downto 0);\r
+    TC_SRC_UDP_OUT                : out std_logic_vector(15 downto 0);\r
+    MC_BUSY_IN                    : in  std_logic;\r
+    -- misc signals for response constructors\r
+    MY_MAC_IN                     : in  std_logic_vector(47 downto 0);\r
+    MY_IP_OUT                     : out std_logic_vector(31 downto 0);\r
+    DHCP_START_IN                 : in  std_logic;\r
+    DHCP_DONE_OUT                 : out std_logic;\r
+    GSC_CLK_IN                    : in  std_logic;\r
+    GSC_INIT_DATAREADY_OUT        : out std_logic;\r
+    GSC_INIT_DATA_OUT             : out std_logic_vector(15 downto 0);\r
+    GSC_INIT_PACKET_NUM_OUT       : out std_logic_vector(2 downto 0);\r
+    GSC_INIT_READ_IN              : in  std_logic;\r
+    GSC_REPLY_DATAREADY_IN        : in  std_logic;\r
+    GSC_REPLY_DATA_IN             : in  std_logic_vector(15 downto 0);\r
+    GSC_REPLY_PACKET_NUM_IN       : in  std_logic_vector(2 downto 0);\r
+    GSC_REPLY_READ_OUT            : out std_logic;\r
+    GSC_BUSY_IN                   : in  std_logic;\r
+    CFG_MAX_REPLY_SIZE_IN         : in  std_logic_vector(31 downto 0);    -- USED IN SCTRL\r
+    MAKE_RESET_OUT                : out std_logic;\r
+    MY_TRBNET_ADDRESS_IN          : in  std_logic_vector(15 downto 0);\r
+    ISSUE_REBOOT_OUT              : out std_logic;\r
+    -- Forwarder\r
+    FWD_DST_MAC_IN                : in  std_logic_vector(47 downto 0);\r
+    FWD_DST_IP_IN                 : in  std_logic_vector(31 downto 0);\r
+    FWD_DST_UDP_IN                : in  std_logic_vector(15 downto 0);\r
+    FWD_DATA_IN                   : in  std_logic_vector(7 downto 0);\r
+    FWD_DATA_VALID_IN             : in  std_logic;\r
+    FWD_SOP_IN                    : in  std_logic;\r
+    FWD_EOP_IN                    : in  std_logic;\r
+    FWD_READY_OUT                 : out std_logic;\r
+    FWD_FULL_OUT                  : out std_logic;\r
+    -- input for statistics from outside\r
+    MONITOR_SELECT_REC_OUT        : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    MONITOR_SELECT_REC_BYTES_OUT  : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    MONITOR_SELECT_SENT_BYTES_OUT : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    MONITOR_SELECT_SENT_OUT       : out std_logic_vector(8 * 32 - 1 downto 0);\r
+    DEBUG_OUT                     : out std_logic_vector(63 downto 0)\r
+  );\r
+end gbe_protocol_selector;\r
+\r
+architecture gbe_protocol_selector_arch of gbe_protocol_selector is\r
+\r
+  attribute syn_encoding : string;\r
+\r
+  signal rd_en             : std_logic_vector(8 - 1 downto 0);\r
+  signal resp_ready        : std_logic_vector(8 - 1 downto 0);\r
+  signal tc_wr             : std_logic_vector(8 - 1 downto 0);\r
+  signal tc_data           : std_logic_vector(8 * 9 - 1 downto 0);\r
+  signal tc_size           : std_logic_vector(8 * 16 - 1 downto 0);\r
+  signal tc_type           : std_logic_vector(8 * 16 - 1 downto 0);\r
+  signal busy              : std_logic_vector(8 - 1 downto 0);\r
+  signal selected          : std_logic_vector(8 - 1 downto 0);\r
+  signal tc_mac            : std_logic_vector(8 * 48 - 1 downto 0);\r
+  signal tc_ip             : std_logic_vector(8 * 32 - 1 downto 0);\r
+  signal tc_udp            : std_logic_vector(8 * 16 - 1 downto 0);\r
+  signal tc_src_mac        : std_logic_vector(8 * 48 - 1 downto 0);\r
+  signal tc_src_ip         : std_logic_vector(8 * 32 - 1 downto 0);\r
+  signal tc_src_udp        : std_logic_vector(8 * 16 - 1 downto 0);\r
+  signal tc_ip_proto       : std_logic_vector(8 * 8 - 1 downto 0);\r
+\r
+  type select_states is (IDLE, LOOP_OVER, SELECT_ONE, PROCESS_REQUEST, CLEANUP);\r
+  signal select_current_state, select_next_state : select_states;\r
+  attribute syn_encoding of select_current_state : signal is "onehot";\r
+\r
+  signal state : std_logic_vector(3 downto 0);\r
+  signal index : integer range 0 to 7;\r
+\r
+  signal mult : std_logic;\r
+\r
+  signal tc_ident : std_logic_vector(8 * 16 - 1 downto 0);\r
+  signal zeros    : std_logic_vector(8 - 1 downto 0);\r
+\r
+  attribute syn_preserve : boolean;\r
+  attribute syn_keep : boolean;\r
+  attribute syn_keep of state, mult : signal is true;\r
+  attribute syn_preserve of state, mult : signal is true;\r
+\r
+  signal my_ip        : std_logic_vector(31 downto 0);\r
+  signal select_state : std_logic_vector(3 downto 0);\r
+\r
+  signal debug_arp           : std_logic_vector(63 downto 0);\r
+  signal debug_dhcp          : std_logic_vector(63 downto 0);\r
+  signal debug_ping          : std_logic_vector(63 downto 0);\r
+  signal debug_sctrl         : std_logic_vector(63 downto 0);\r
+  signal debug_forward       : std_logic_vector(63 downto 0);\r
+  signal debug_discovery     : std_logic_vector(63 downto 0);\r
+\r
+begin\r
+  zeros <= (others => '0');\r
+  MY_IP_OUT <= my_ip;\r
+\r
+  -- Debug lines\r
+--  DEBUG_OUT(63 downto 16) <= (others => '0');\r
+--  DEBUG_OUT(15 downto 12) <= state; -- selector state\r
+--  DEBUG_OUT(11 downto 0)  <= debug_dhcp(11 downto 0); -- FSM states DHCP\r
+  DEBUG_OUT(63 downto 32) <= (others => '0');\r
+  DEBUG_OUT(31 downto 0)  <= debug_discovery(31 downto 0);\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  ARP_GEN: if( INCLUDE_ARP = '1' ) generate\r
+    --\r
+    THE_ARP: entity work.gbe_response_constructor_ARP\r
+      port map(\r
+        CLK                    => CLK,\r
+        RESET                  => RESET,\r
+        -- INTERFACE\r
+        MY_MAC_IN              => MY_MAC_IN,\r
+        MY_IP_IN               => my_ip,\r
+        PS_DATA_IN             => PS_DATA_IN,\r
+        PS_WR_EN_IN            => PS_WR_EN_IN,\r
+        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(0),\r
+        PS_RESPONSE_READY_OUT  => resp_ready(0),\r
+        PS_BUSY_OUT            => busy(0),\r
+        PS_SELECTED_IN         => selected(0),\r
+        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,\r
+        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,\r
+        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,\r
+        TC_RD_EN_IN            => TC_RD_EN_IN,\r
+        TC_DATA_OUT            => tc_data(1 * 9 - 1 downto 0 * 9),\r
+        TC_FRAME_SIZE_OUT      => tc_size(1 * 16 - 1 downto 0 * 16),\r
+        TC_FRAME_TYPE_OUT      => tc_type(1 * 16 - 1 downto 0 * 16),\r
+        TC_IP_PROTOCOL_OUT     => tc_ip_proto(1 * 8 - 1 downto 0 * 8),\r
+        TC_IDENT_OUT           => tc_ident(1 * 16 - 1 downto 0 * 16),\r
+        TC_DEST_MAC_OUT        => tc_mac(1 * 48 - 1 downto 0 * 48),\r
+        TC_DEST_IP_OUT         => tc_ip(1 * 32 - 1 downto 0 * 32),\r
+        TC_DEST_UDP_OUT        => tc_udp(1 * 16 - 1 downto 0 * 16),\r
+        TC_SRC_MAC_OUT         => tc_src_mac(1 * 48 - 1 downto 0 * 48),\r
+        TC_SRC_IP_OUT          => tc_src_ip(1 * 32 - 1 downto 0 * 32),\r
+        TC_SRC_UDP_OUT         => tc_src_udp(1 * 16 - 1 downto 0 * 16),\r
+        DEBUG_OUT              => debug_arp\r
+      -- END OF INTERFACE\r
+      );\r
+  end generate ARP_GEN;\r
+\r
+  NO_ARP_GEN: if( INCLUDE_ARP = '0' ) generate\r
+    resp_ready(0) <= '0';\r
+    busy(0)       <= '0';\r
+  end generate NO_ARP_GEN;\r
+  ---------------------------------------------------------------------------------------\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  DHCP_GEN: if( INCLUDE_DHCP = '1' ) generate\r
+    --\r
+    THE_DHCP: entity work.gbe_response_constructor_DHCP\r
+      port map(\r
+        CLK                    => CLK,\r
+        RESET                  => RESET,\r
+        -- INTERFACE\r
+        MY_MAC_IN              => MY_MAC_IN,\r
+        MY_IP_IN               => my_ip,\r
+        PS_DATA_IN             => PS_DATA_IN,\r
+        PS_WR_EN_IN            => PS_WR_EN_IN,\r
+        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(1),\r
+        PS_RESPONSE_READY_OUT  => resp_ready(1),\r
+        PS_BUSY_OUT            => busy(1),\r
+        PS_SELECTED_IN         => selected(1),\r
+        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,\r
+        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,\r
+        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,\r
+        PS_FRAME_INFO_IN       => PS_FRAME_INFO_IN,\r
+        TC_RD_EN_IN            => TC_RD_EN_IN,\r
+        TC_DATA_OUT            => tc_data(2 * 9 - 1 downto 1 * 9),\r
+        TC_FRAME_SIZE_OUT      => tc_size(2 * 16 - 1 downto 1 * 16),\r
+        TC_FRAME_TYPE_OUT      => tc_type(2 * 16 - 1 downto 1 * 16),\r
+        TC_IP_PROTOCOL_OUT     => tc_ip_proto(2 * 8 - 1 downto 1 * 8),\r
+        TC_IDENT_OUT           => tc_ident(2 * 16 - 1 downto 1 * 16),\r
+        TC_DEST_MAC_OUT        => tc_mac(2 * 48 - 1 downto 1 * 48),\r
+        TC_DEST_IP_OUT         => tc_ip(2 * 32 - 1 downto 1 * 32),\r
+        TC_DEST_UDP_OUT        => tc_udp(2 * 16 - 1 downto 1 * 16),\r
+        TC_SRC_MAC_OUT         => tc_src_mac(2 * 48 - 1 downto 1 * 48),\r
+        TC_SRC_IP_OUT          => tc_src_ip(2 * 32 - 1 downto 1 * 32),\r
+        TC_SRC_UDP_OUT         => tc_src_udp(2 * 16 - 1 downto 1 * 16),\r
+        -- END OF INTERFACE\r
+        MY_IP_OUT              => my_ip,\r
+        DHCP_START_IN          => DHCP_START_IN,\r
+        DHCP_DONE_OUT          => DHCP_DONE_OUT,\r
+        DEBUG_OUT              => debug_dhcp\r
+      );\r
+  end generate DHCP_GEN;\r
+\r
+  NO_DHCP_GEN: if( INCLUDE_DHCP = '0' ) generate\r
+    resp_ready(1) <= '0';\r
+    busy(1)       <= '0';\r
+  end generate NO_DHCP_GEN;\r
+  ---------------------------------------------------------------------------------------\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  SCTRL_GEN: if( INCLUDE_SLOWCTRL = '1' ) generate\r
+    --\r
+    THE_SCTRL: entity work.gbe_response_constructor_SCTRL\r
+      generic map(\r
+        SLOWCTRL_BUFFER_SIZE => SLOWCTRL_BUFFER_SIZE\r
+      )\r
+      port map(\r
+        CLK                           => CLK,\r
+        RESET                         => RESET,\r
+        -- INTERFACE\r
+        MY_MAC_IN                     => MY_MAC_IN,\r
+        MY_IP_IN                      => my_ip,\r
+        PS_DATA_IN                    => PS_DATA_IN,\r
+        PS_WR_EN_IN                   => PS_WR_EN_IN,\r
+        PS_ACTIVATE_IN                => PS_PROTO_SELECT_IN(2),\r
+        PS_RESPONSE_READY_OUT         => resp_ready(2),\r
+        PS_BUSY_OUT                   => busy(2),\r
+        PS_SELECTED_IN                => selected(2),\r
+        PS_SRC_MAC_ADDRESS_IN         => PS_SRC_MAC_ADDRESS_IN,\r
+        PS_SRC_IP_ADDRESS_IN          => PS_SRC_IP_ADDRESS_IN,\r
+        PS_SRC_UDP_PORT_IN            => PS_SRC_UDP_PORT_IN,\r
+        TC_RD_EN_IN                   => TC_RD_EN_IN,\r
+        TC_DATA_OUT                   => tc_data(3 * 9 - 1 downto 2 * 9),\r
+        TC_FRAME_SIZE_OUT             => tc_size(3 * 16 - 1 downto 2 * 16),\r
+        TC_FRAME_TYPE_OUT             => tc_type(3 * 16 - 1 downto 2 * 16),\r
+        TC_IP_PROTOCOL_OUT            => tc_ip_proto(3 * 8 - 1 downto 2 * 8),\r
+        TC_IDENT_OUT                  => tc_ident(3 * 16 - 1 downto 2 * 16),\r
+        TC_DEST_MAC_OUT               => tc_mac(3 * 48 - 1 downto 2 * 48),\r
+        TC_DEST_IP_OUT                => tc_ip(3 * 32 - 1 downto 2 * 32),\r
+        TC_DEST_UDP_OUT               => tc_udp(3 * 16 - 1 downto 2 * 16),\r
+        TC_SRC_MAC_OUT                => tc_src_mac(3 * 48 - 1 downto 2 * 48),\r
+        TC_SRC_IP_OUT                 => tc_src_ip(3 * 32 - 1 downto 2 * 32),\r
+        TC_SRC_UDP_OUT                => tc_src_udp(3 * 16 - 1 downto 2 * 16),\r
+        DEBUG_OUT                     => debug_sctrl,\r
+        -- END OF INTERFACE\r
+        GSC_CLK_IN                    => GSC_CLK_IN,\r
+        GSC_INIT_DATAREADY_OUT        => GSC_INIT_DATAREADY_OUT,\r
+        GSC_INIT_DATA_OUT             => GSC_INIT_DATA_OUT,\r
+        GSC_INIT_PACKET_NUM_OUT       => GSC_INIT_PACKET_NUM_OUT,\r
+        GSC_INIT_READ_IN              => GSC_INIT_READ_IN,\r
+        GSC_REPLY_DATAREADY_IN        => GSC_REPLY_DATAREADY_IN,\r
+        GSC_REPLY_DATA_IN             => GSC_REPLY_DATA_IN,\r
+        GSC_REPLY_PACKET_NUM_IN       => GSC_REPLY_PACKET_NUM_IN,\r
+        GSC_REPLY_READ_OUT            => GSC_REPLY_READ_OUT,\r
+        GSC_BUSY_IN                   => GSC_BUSY_IN,\r
+        CFG_MAX_REPLY_SIZE_IN         => CFG_MAX_REPLY_SIZE_IN,\r
+        MAKE_RESET_OUT                => MAKE_RESET_OUT,\r
+        MONITOR_SELECT_REC_OUT        => MONITOR_SELECT_REC_OUT(3 * 32 - 1 downto 2 * 32),\r
+        MONITOR_SELECT_REC_BYTES_OUT  => MONITOR_SELECT_REC_BYTES_OUT(3 * 32 - 1 downto 2 * 32),\r
+        MONITOR_SELECT_SENT_BYTES_OUT => MONITOR_SELECT_SENT_BYTES_OUT(3 * 32 - 1 downto 2 * 32),\r
+        MONITOR_SELECT_SENT_OUT       => MONITOR_SELECT_SENT_OUT(3 * 32 - 1 downto 2 * 32)\r
+      );\r
+  end generate SCTRL_GEN;\r
+\r
+  NO_SCTRL_GEN: if( INCLUDE_SLOWCTRL = '0' ) generate\r
+    resp_ready(2)  <= '0';\r
+    busy(2)        <= '0';\r
+    MAKE_RESET_OUT <= '0';\r
+\r
+    GSC_INIT_DATAREADY_OUT  <= '0';\r
+    GSC_INIT_DATA_OUT       <= (others => '0');\r
+    GSC_INIT_PACKET_NUM_OUT <= (others => '0');\r
+    GSC_REPLY_READ_OUT      <= '1';\r
+  end generate NO_SCTRL_GEN;\r
+  ---------------------------------------------------------------------------------------\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  -- once upon a time, this was "READOUT"\r
+  resp_ready(3)            <= '0';\r
+  busy(3)                  <= '0';\r
+  ---------------------------------------------------------------------------------------\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  PING_GEN: if( INCLUDE_PING = '1' ) generate\r
+    --\r
+    THE_PING: entity work.gbe_response_constructor_Ping\r
+      port map(\r
+        CLK                    => CLK,\r
+        RESET                  => RESET,\r
+        ---- INTERFACE\r
+        MY_MAC_IN              => MY_MAC_IN,\r
+        MY_IP_IN               => my_ip,\r
+        PS_DATA_IN             => PS_DATA_IN,\r
+        PS_WR_EN_IN            => PS_WR_EN_IN,\r
+        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(4),\r
+        PS_RESPONSE_READY_OUT  => resp_ready(4),\r
+        PS_BUSY_OUT            => busy(4),\r
+        PS_SELECTED_IN         => selected(4),\r
+        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,\r
+        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,\r
+        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,\r
+        TC_RD_EN_IN            => TC_RD_EN_IN,\r
+        TC_DATA_OUT            => tc_data(5 * 9 - 1 downto 4 * 9),\r
+        TC_FRAME_SIZE_OUT      => tc_size(5 * 16 - 1 downto 4 * 16),\r
+        TC_FRAME_TYPE_OUT      => tc_type(5 * 16 - 1 downto 4 * 16),\r
+        TC_IP_PROTOCOL_OUT     => tc_ip_proto(5 * 8 - 1 downto 4 * 8),\r
+        TC_IDENT_OUT           => tc_ident(5 * 16 - 1 downto 4 * 16),\r
+        TC_DEST_MAC_OUT        => tc_mac(5 * 48 - 1 downto 4 * 48),\r
+        TC_DEST_IP_OUT         => tc_ip(5 * 32 - 1 downto 4 * 32),\r
+        TC_DEST_UDP_OUT        => tc_udp(5 * 16 - 1 downto 4 * 16),\r
+        TC_SRC_MAC_OUT         => tc_src_mac(5 * 48 - 1 downto 4 * 48),\r
+        TC_SRC_IP_OUT          => tc_src_ip(5 * 32 - 1 downto 4 * 32),\r
+        TC_SRC_UDP_OUT         => tc_src_udp(5 * 16 - 1 downto 4 * 16),\r
+        DEBUG_OUT              => debug_ping\r
+      -- END OF INTERFACE\r
+      );\r
+  end generate PING_GEN;\r
+\r
+  NO_PING_GEN: if( INCLUDE_PING = '0' ) generate\r
+    resp_ready(4) <= '0';\r
+    busy(4)       <= '0';\r
+  end generate NO_PING_GEN;\r
+  ---------------------------------------------------------------------------------------\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  FWD_GEN: if( INCLUDE_FWD = '1' ) generate\r
+    --\r
+    THE_FORWARD: entity work.gbe_response_constructor_Forward\r
+      port map(\r
+        CLK                    => CLK,\r
+        RESET                  => RESET,\r
+        ---- INTERFACE\r
+        MY_MAC_IN              => MY_MAC_IN,\r
+        MY_IP_IN               => my_ip,\r
+        PS_DATA_IN             => PS_DATA_IN,\r
+        PS_WR_EN_IN            => PS_WR_EN_IN,\r
+        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(5),\r
+        PS_RESPONSE_READY_OUT  => resp_ready(5),\r
+        PS_BUSY_OUT            => busy(5),\r
+        PS_SELECTED_IN         => selected(5),\r
+        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,\r
+        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,\r
+        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,\r
+        TC_RD_EN_IN            => TC_RD_EN_IN,\r
+        TC_DATA_OUT            => tc_data(6 * 9 - 1 downto 5 * 9),\r
+        TC_FRAME_SIZE_OUT      => tc_size(6 * 16 - 1 downto 5 * 16),\r
+        TC_FRAME_TYPE_OUT      => tc_type(6 * 16 - 1 downto 5 * 16),\r
+        TC_IP_PROTOCOL_OUT     => tc_ip_proto(6 * 8 - 1 downto 5 * 8),\r
+        TC_IDENT_OUT           => tc_ident(6 * 16 - 1 downto 5 * 16),\r
+        TC_DEST_MAC_OUT        => tc_mac(6 * 48 - 1 downto 5 * 48),\r
+        TC_DEST_IP_OUT         => tc_ip(6 * 32 - 1 downto 5 * 32),\r
+        TC_DEST_UDP_OUT        => tc_udp(6 * 16 - 1 downto 5 * 16),\r
+        TC_SRC_MAC_OUT         => tc_src_mac(6 * 48 - 1 downto 5 * 48),\r
+        TC_SRC_IP_OUT          => tc_src_ip(6 * 32 - 1 downto 5 * 32),\r
+        TC_SRC_UDP_OUT         => tc_src_udp(6 * 16 - 1 downto 5 * 16),\r
+        RECEIVED_FRAMES_OUT    => open,\r
+        SENT_FRAMES_OUT        => open,\r
+        FWD_DST_MAC_IN         => FWD_DST_MAC_IN,\r
+        FWD_DST_IP_IN          => FWD_DST_IP_IN,\r
+        FWD_DST_UDP_IN         => FWD_DST_UDP_IN,\r
+        FWD_DATA_IN            => FWD_DATA_IN,\r
+        FWD_DATA_VALID_IN      => FWD_DATA_VALID_IN,\r
+        FWD_SOP_IN             => FWD_SOP_IN,\r
+        FWD_EOP_IN             => FWD_EOP_IN,\r
+        FWD_READY_OUT          => FWD_READY_OUT,\r
+        FWD_FULL_OUT           => FWD_FULL_OUT,\r
+        DEBUG_OUT              => debug_forward\r
+      -- END OF INTERFACE\r
+      );\r
+  end generate FWD_GEN;\r
+\r
+  NO_FWD_GEN: if( INCLUDE_FWD = '0' ) generate\r
+    resp_ready(5) <= '0';\r
+    busy(5) <= '0';\r
+  end generate NO_FWD_GEN;\r
+  ---------------------------------------------------------------------------------------\r
+\r
+  ---------------------------------------------------------------------------------------\r
+  DISCOVERY_GEN: if( INCLUDE_DISCOVERY = '1' ) generate\r
+    --\r
+    THE_DISCOVERY: entity gbe_response_constructor_Discovery\r
+      port map(\r
+        CLK                    => CLK,\r
+        RESET                  => RESET,\r
+        MY_MAC_IN              => MY_MAC_IN,\r
+        MY_IP_IN               => my_ip,\r
+        PS_DATA_IN             => PS_DATA_IN,\r
+        PS_WR_EN_IN            => PS_WR_EN_IN,\r
+        PS_ACTIVATE_IN         => PS_PROTO_SELECT_IN(6),\r
+        PS_RESPONSE_READY_OUT  => resp_ready(6),\r
+        PS_BUSY_OUT            => busy(6),\r
+        PS_SELECTED_IN         => selected(6),\r
+        PS_SRC_MAC_ADDRESS_IN  => PS_SRC_MAC_ADDRESS_IN,\r
+        PS_SRC_IP_ADDRESS_IN   => PS_SRC_IP_ADDRESS_IN,\r
+        PS_SRC_UDP_PORT_IN     => PS_SRC_UDP_PORT_IN,\r
+        PS_FRAME_INFO_IN       => PS_FRAME_INFO_IN,\r
+        TC_RD_EN_IN            => TC_RD_EN_IN,\r
+        TC_DATA_OUT            => tc_data(7 * 9 - 1 downto 6 * 9),\r
+        TC_FRAME_SIZE_OUT      => tc_size(7 * 16 - 1 downto 6 * 16),\r
+        TC_FRAME_TYPE_OUT      => tc_type(7 * 16 - 1 downto 6 * 16),\r
+        TC_IP_PROTOCOL_OUT     => tc_ip_proto(7 * 8 - 1 downto 6 * 8),\r
+        TC_IDENT_OUT           => tc_ident(7 * 16 - 1 downto 6 * 16),\r
+        TC_DEST_MAC_OUT        => tc_mac(7 * 48 - 1 downto 6 * 48),\r
+        TC_DEST_IP_OUT         => tc_ip(7 * 32 - 1 downto 6 * 32),\r
+        TC_DEST_UDP_OUT        => tc_udp(7 * 16 - 1 downto 6 * 16),\r
+        TC_SRC_MAC_OUT         => tc_src_mac(7 * 48 - 1 downto 6 * 48),\r
+        TC_SRC_IP_OUT          => tc_src_ip(7 * 32 - 1 downto 6 * 32),\r
+        TC_SRC_UDP_OUT         => tc_src_udp(7 * 16 - 1 downto 6 * 16),\r
+        DEBUG_OUT              => debug_discovery\r
+      );\r
+  end generate DISCOVERY_GEN;\r
+\r
+  NO_DISCOVERY_GEN: if( INCLUDE_DISCOVERY = '0' ) generate\r
+    resp_ready(6) <= '0';\r
+    busy(6)       <= '0';\r
+  end generate NO_DISCOVERY_GEN;\r
+  ---------------------------------------------------------------------------------------\r
+  \r
+  ---------------------------------------------------------------------------------------\r
+  -- reserved\r
+  resp_ready(7)            <= '0';\r
+  busy(7)                  <= '0';\r
+  ---------------------------------------------------------------------------------------\r
+  \r
+  PS_BUSY_OUT <= busy;\r
+\r
+  PROC_SELECT_MACHINE: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      select_current_state <= IDLE;\r
+    elsif( rising_edge(CLK) ) then\r
+      select_current_state <= select_next_state;\r
+    end if;\r
+  end process PROC_SELECT_MACHINE;\r
+\r
+  PROC_SELECT_TRANSITIONS: process(select_current_state, MC_BUSY_IN, resp_ready, index, zeros, busy)\r
+  begin\r
+    select_state <= x"0";\r
+\r
+    case (select_current_state) is\r
+      when IDLE =>\r
+        select_state <= x"1";\r
+        if (MC_BUSY_IN = '0') then\r
+          select_next_state <= LOOP_OVER;\r
+        else\r
+          select_next_state <= IDLE;\r
+        end if;\r
+\r
+      when LOOP_OVER =>\r
+        select_state <= x"2";\r
+        if (resp_ready /= zeros) then\r
+          if (resp_ready(index) = '1') then\r
+            select_next_state <= SELECT_ONE;\r
+          elsif (index = 8) then\r
+            select_next_state <= CLEANUP;\r
+          else\r
+            select_next_state <= LOOP_OVER;\r
+          end if;\r
+        else\r
+          select_next_state <= CLEANUP;\r
+        end if;\r
+\r
+      when SELECT_ONE =>\r
+        select_state <= x"3";\r
+        if (MC_BUSY_IN = '1') then\r
+          select_next_state <= PROCESS_REQUEST;\r
+        else\r
+          select_next_state <= SELECT_ONE;\r
+        end if;\r
+\r
+      when PROCESS_REQUEST =>\r
+        select_state <= x"4";\r
+        if (busy(index) = '0') then\r
+          select_next_state <= CLEANUP;\r
+        else\r
+          select_next_state <= PROCESS_REQUEST;\r
+        end if;\r
+\r
+      when CLEANUP =>\r
+        select_state      <= x"5";\r
+        select_next_state <= IDLE;\r
+\r
+      when others => select_next_state <= IDLE;\r
+\r
+    end case;\r
+  end process PROC_SELECT_TRANSITIONS;\r
+\r
+  PROC_INDEX: process( CLK )\r
+  begin\r
+    if( rising_edge(CLK) ) then\r
+      if   ( select_current_state = IDLE ) then\r
+        index <= 0;\r
+      elsif( select_current_state = LOOP_OVER and resp_ready(index) = '0' ) then\r
+        index <= index + 1;\r
+      end if;\r
+    end if;\r
+  end process PROC_INDEX;\r
+\r
+  PROC_SELECTOR: process( CLK )\r
+  begin\r
+    if( rising_edge(CLK) ) then\r
+      if( select_current_state = SELECT_ONE or select_current_state = PROCESS_REQUEST ) then\r
+        TC_DATA_OUT        <= tc_data((index + 1) * 9 - 1 downto index * 9);\r
+        TC_FRAME_SIZE_OUT  <= tc_size((index + 1) * 16 - 1 downto index * 16);\r
+        TC_FRAME_TYPE_OUT  <= tc_type((index + 1) * 16 - 1 downto index * 16);\r
+        TC_DEST_MAC_OUT    <= tc_mac((index + 1) * 48 - 1 downto index * 48);\r
+        TC_DEST_IP_OUT     <= tc_ip((index + 1) * 32 - 1 downto index * 32);\r
+        TC_DEST_UDP_OUT    <= tc_udp((index + 1) * 16 - 1 downto index * 16);\r
+        TC_SRC_MAC_OUT     <= tc_src_mac((index + 1) * 48 - 1 downto index * 48);\r
+        TC_SRC_IP_OUT      <= tc_src_ip((index + 1) * 32 - 1 downto index * 32);\r
+        TC_SRC_UDP_OUT     <= tc_src_udp((index + 1) * 16 - 1 downto index * 16);\r
+        TC_IP_PROTOCOL_OUT <= tc_ip_proto((index + 1) * 8 - 1 downto index * 8);\r
+        TC_IDENT_OUT       <= tc_ident((index + 1) * 16 - 1 downto index * 16);\r
+        if( select_current_state = SELECT_ONE ) then\r
+          PS_RESPONSE_READY_OUT <= '1';\r
+          selected(index)       <= '0';\r
+        else\r
+          PS_RESPONSE_READY_OUT <= '0';\r
+          selected(index)       <= '1';\r
+        end if;\r
+      else\r
+        TC_DATA_OUT           <= (others => '0');\r
+        TC_FRAME_SIZE_OUT     <= (others => '0');\r
+        TC_FRAME_TYPE_OUT     <= (others => '0');\r
+        TC_DEST_MAC_OUT       <= (others => '0');\r
+        TC_DEST_IP_OUT        <= (others => '0');\r
+        TC_DEST_UDP_OUT       <= (others => '0');\r
+        TC_SRC_MAC_OUT        <= (others => '0');\r
+        TC_SRC_IP_OUT         <= (others => '0');\r
+        TC_SRC_UDP_OUT        <= (others => '0');\r
+        TC_IP_PROTOCOL_OUT    <= (others => '0');\r
+        TC_IDENT_OUT          <= (others => '0');\r
+        PS_RESPONSE_READY_OUT <= '0';\r
+        selected              <= (others => '0');\r
+      end if;\r
+    end if;\r
+  end process PROC_SELECTOR;\r
+\r
+end gbe_protocol_selector_arch;\r
index f515102273e10215242f9354f3086386612b0053..d9761496cb767f27c19730fa5c941b98173c7a87 100644 (file)
@@ -3,6 +3,8 @@ use ieee.std_logic_1164.all;
 USE IEEE.numeric_std.ALL;
 USE IEEE.std_logic_UNSIGNED.ALL;
 
+-- OBSELETE
+
 package gbe_protocols is
   type hist_array is array (31 downto 0) of std_logic_vector(31 downto 0);
 
@@ -21,9 +23,9 @@ package gbe_protocols is
   -- UDP, ICMP
 
   -- this are the destination ports of the incoming packet
-  constant c_MAX_UDP_PROTOCOLS : integer range 1 to 16 := 4;
+  constant c_MAX_UDP_PROTOCOLS : integer range 1 to 16 := 3;
   type udp_protos_a is array (c_MAX_UDP_PROTOCOLS - 1 downto 0) of std_logic_vector(15 downto 0);
-  constant UDP_PROTOCOLS : udp_protos_a := (x"0044", x"6590", x"7530", x"7531");
-  -- DHCP client, SCTRL, STATs
+  constant UDP_PROTOCOLS : udp_protos_a := (x"0044", x"6590", x"d903");
+  -- DHCP client, SCTRL, Discovery
 
 end package;
index 04b86a5cb9dd195186d3d163fd080d8f4568f3cb..5fbb6fddf0a6268191159e035168f894fb827357 100644 (file)
@@ -20,28 +20,22 @@ entity gbe_receive_control is
     FR_FRAME_VALID_IN        : in  std_logic;\r
     FR_GET_FRAME_OUT         : out std_logic;\r
     FR_FRAME_SIZE_IN         : in  std_logic_vector(15 downto 0);\r
-    FR_PS_IN                 : in  std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);
-    FR_INFO_IN               : in  std_logic_vector(7 downto 0);
+    FR_PS_IN                 : in  std_logic_vector(7 downto 0);\r
+    FR_FRAME_INFO_IN         : in  std_logic_vector(7 downto 0);\r
     FR_SRC_MAC_ADDRESS_IN    : in  std_logic_vector(47 downto 0);\r
-    FR_DEST_MAC_ADDRESS_IN   : in  std_logic_vector(47 downto 0);\r
     FR_SRC_IP_ADDRESS_IN     : in  std_logic_vector(31 downto 0);\r
-    FR_DEST_IP_ADDRESS_IN    : in  std_logic_vector(31 downto 0);\r
     FR_SRC_UDP_PORT_IN       : in  std_logic_vector(15 downto 0);\r
-    FR_DEST_UDP_PORT_IN      : in  std_logic_vector(15 downto 0);\r
     -- signals to/from main controller\r
     RC_RD_EN_IN              : in  std_logic;\r
     RC_Q_OUT                 : out std_logic_vector(8 downto 0);\r
     RC_FRAME_WAITING_OUT     : out std_logic;\r
     RC_LOADING_DONE_IN       : in  std_logic;\r
     RC_FRAME_SIZE_OUT        : out std_logic_vector(15 downto 0);\r
-    RC_FRAME_PROTO_OUT       : out std_logic_vector(c_MAX_PROTOCOLS - 1 downto 0);\r
+    RC_FRAME_PROTO_OUT       : out std_logic_vector(7 downto 0);\r
     RC_SRC_MAC_ADDRESS_OUT   : out std_logic_vector(47 downto 0);\r
-    RC_DEST_MAC_ADDRESS_OUT  : out std_logic_vector(47 downto 0);\r
     RC_SRC_IP_ADDRESS_OUT    : out std_logic_vector(31 downto 0);\r
-    RC_DEST_IP_ADDRESS_OUT   : out std_logic_vector(31 downto 0);\r
     RC_SRC_UDP_PORT_OUT      : out std_logic_vector(15 downto 0);\r
-    RC_DEST_UDP_PORT_OUT     : out std_logic_vector(15 downto 0);\r
-    RC_INFO_OUT              : out std_logic_vector(7 downto 0);
+    RC_FRAME_INFO_OUT        : out std_logic_vector(7 downto 0);\r
     -- statistics\r
     FRAMES_RECEIVED_OUT      : out std_logic_vector(31 downto 0);\r
     BYTES_RECEIVED_OUT       : out std_logic_vector(31 downto 0);\r
@@ -73,12 +67,9 @@ begin
   RC_Q_OUT                <= RC_DATA_IN;\r
   RC_FRAME_SIZE_OUT       <= FR_FRAME_SIZE_IN;\r
   RC_SRC_MAC_ADDRESS_OUT  <= FR_SRC_MAC_ADDRESS_IN;\r
-  RC_DEST_MAC_ADDRESS_OUT <= FR_DEST_MAC_ADDRESS_IN;\r
   RC_SRC_IP_ADDRESS_OUT   <= FR_SRC_IP_ADDRESS_IN;\r
-  RC_DEST_IP_ADDRESS_OUT  <= FR_DEST_IP_ADDRESS_IN;\r
   RC_SRC_UDP_PORT_OUT     <= FR_SRC_UDP_PORT_IN;\r
-  RC_DEST_UDP_PORT_OUT    <= FR_DEST_UDP_PORT_IN;\r
-  RC_INFO_OUT             <= FR_INFO_IN;\r
+  RC_FRAME_INFO_OUT       <= FR_FRAME_INFO_IN;\r
   RC_FRAME_PROTO_OUT      <= FR_PS_IN when (load_current_state /= IDLE) else (others => '0');\r
 \r
   LOAD_MACHINE_PROC: process( CLK, RESET )\r
index 569a6edcc2d88c77d90bc938b2af5e8f73598044..ae56c10aa04f519590348320e49cbca844ac96ba 100644 (file)
@@ -11,7 +11,8 @@ entity gbe_wrapper_fifo is
     LINK_HAS_ARP       : std_logic := '1';
     LINK_HAS_DHCP      : std_logic := '1';
     LINK_HAS_SLOWCTRL  : std_logic := '1';
-    LINK_HAS_FWD       : std_logic := '1'
+    LINK_HAS_FWD       : std_logic := '1';
+    LINK_HAS_DISCOVERY : std_logic := '1'
   );
   port(
     CLK_125_IN                : in  std_logic;
@@ -154,6 +155,7 @@ begin
     INCLUDE_ARP              => LINK_HAS_ARP,
     INCLUDE_PING             => LINK_HAS_PING,
     INCLUDE_FWD              => LINK_HAS_FWD,
+    INCLUDE_DISCOVERY        => LINK_HAS_DISCOVERY,
     SLOWCTRL_BUFFER_SIZE     => 2
   )
   port map(
index 6372d4e5c46747025ebc2134f5d2d59ccf580ada..d30abef0f2b085feac99ee4f603d7bde78bca26f 100644 (file)
-library ieee;
-  use ieee.std_logic_1164.all;
-  use ieee.numeric_std.all;
-
-library work;
-  use work.gbe_protocols.all;
-
--- BUG: doesnt use FRAME_SIZE, but fixed length.
-
--- BUG: check (length == 28) for correct request.
-
--- BUG: check request type at all.
-
-entity gbe_response_constructor_ARP is
-  port (
-    CLK                    : in  std_logic;  -- system clock
-    RESET                  : in  std_logic;
-    MY_MAC_IN              : in  std_logic_vector(47 downto 0);
-    MY_IP_IN               : in  std_logic_vector(31 downto 0);
-    PS_DATA_IN             : in  std_logic_vector(8 downto 0);
-    PS_WR_EN_IN            : in  std_logic;
-    PS_ACTIVATE_IN         : in  std_logic;
-    PS_RESPONSE_READY_OUT  : out std_logic;
-    PS_BUSY_OUT            : out std_logic;
-    PS_SELECTED_IN         : in  std_logic;
-    PS_SRC_MAC_ADDRESS_IN  : in  std_logic_vector(47 downto 0);
-    PS_DEST_MAC_ADDRESS_IN : in  std_logic_vector(47 downto 0);
-    PS_SRC_IP_ADDRESS_IN   : in  std_logic_vector(31 downto 0);
-    PS_DEST_IP_ADDRESS_IN  : in  std_logic_vector(31 downto 0);
-    PS_SRC_UDP_PORT_IN     : in  std_logic_vector(15 downto 0);
-    PS_DEST_UDP_PORT_IN    : in  std_logic_vector(15 downto 0);
-    TC_RD_EN_IN            : in  std_logic;
-    TC_DATA_OUT            : out std_logic_vector(8 downto 0);
-    TC_FRAME_SIZE_OUT      : out std_logic_vector(15 downto 0);
-    TC_FRAME_TYPE_OUT      : out std_logic_vector(15 downto 0);
-    TC_IP_PROTOCOL_OUT     : out std_logic_vector(7 downto 0);
-    TC_IDENT_OUT           : out std_logic_vector(15 downto 0);
-    TC_DEST_MAC_OUT        : out std_logic_vector(47 downto 0);
-    TC_DEST_IP_OUT         : out std_logic_vector(31 downto 0);
-    TC_DEST_UDP_OUT        : out std_logic_vector(15 downto 0);
-    TC_SRC_MAC_OUT         : out std_logic_vector(47 downto 0);
-    TC_SRC_IP_OUT          : out std_logic_vector(31 downto 0);
-    TC_SRC_UDP_OUT         : out std_logic_vector(15 downto 0);
-    DEBUG_OUT              : out std_logic_vector(63 downto 0)
-  );
-end gbe_response_constructor_ARP;
-
-architecture gbe_response_constructor_ARP_arch of gbe_response_constructor_ARP is
-
-  attribute syn_encoding: string;
-
-  type DISSECT_STATES is (IDLE, READ_FRAME, DELAY, DECIDE, LOAD_FRAME, WAIT_FOR_LOAD, CLEANUP);
-  signal DISSECT_CS, DISSECT_NS : DISSECT_STATES;
-  attribute syn_encoding of DISSECT_CS: signal is "onehot";
-
-  type stats_states is (IDLE, LOAD_SENT, LOAD_RECEIVED, CLEANUP);
-  signal stats_current_state, stats_next_state : stats_states;
-  attribute syn_encoding of stats_current_state : signal is "onehot";
-
-  signal saved_opcode             : std_logic_vector(15 downto 0);
-  signal saved_sender_ip          : std_logic_vector(31 downto 0);
-  signal saved_target_ip          : std_logic_vector(31 downto 0);
-  signal tc_data                  : std_logic_vector(8 downto 0);
+library ieee;\r
+  use ieee.std_logic_1164.all;\r
+  use ieee.numeric_std.all;\r
+\r
+library work;\r
+  use work.gbe_protocols.all;\r
+\r
+-- BUG: doesnt use FRAME_SIZE, but fixed length.\r
+\r
+-- BUG: check (length == 28) for correct request.\r
+\r
+-- BUG: check request type at all.\r
+\r
+entity gbe_response_constructor_ARP is\r
+  port (\r
+    CLK                    : in  std_logic;  -- system clock\r
+    RESET                  : in  std_logic;\r
+    MY_MAC_IN              : in  std_logic_vector(47 downto 0);\r
+    MY_IP_IN               : in  std_logic_vector(31 downto 0);\r
+    PS_DATA_IN             : in  std_logic_vector(8 downto 0);\r
+    PS_WR_EN_IN            : in  std_logic;\r
+    PS_ACTIVATE_IN         : in  std_logic;\r
+    PS_RESPONSE_READY_OUT  : out std_logic;\r
+    PS_BUSY_OUT            : out std_logic;\r
+    PS_SELECTED_IN         : in  std_logic;\r
+    PS_SRC_MAC_ADDRESS_IN  : in  std_logic_vector(47 downto 0);\r
+    PS_SRC_IP_ADDRESS_IN   : in  std_logic_vector(31 downto 0);\r
+    PS_SRC_UDP_PORT_IN     : in  std_logic_vector(15 downto 0);\r
+    TC_RD_EN_IN            : in  std_logic;\r
+    TC_DATA_OUT            : out std_logic_vector(8 downto 0);\r
+    TC_FRAME_SIZE_OUT      : out std_logic_vector(15 downto 0);\r
+    TC_FRAME_TYPE_OUT      : out std_logic_vector(15 downto 0);\r
+    TC_IP_PROTOCOL_OUT     : out std_logic_vector(7 downto 0);\r
+    TC_IDENT_OUT           : out std_logic_vector(15 downto 0);\r
+    TC_DEST_MAC_OUT        : out std_logic_vector(47 downto 0);\r
+    TC_DEST_IP_OUT         : out std_logic_vector(31 downto 0);\r
+    TC_DEST_UDP_OUT        : out std_logic_vector(15 downto 0);\r
+    TC_SRC_MAC_OUT         : out std_logic_vector(47 downto 0);\r
+    TC_SRC_IP_OUT          : out std_logic_vector(31 downto 0);\r
+    TC_SRC_UDP_OUT         : out std_logic_vector(15 downto 0);\r
+    DEBUG_OUT              : out std_logic_vector(63 downto 0)\r
+  );\r
+end gbe_response_constructor_ARP;\r
+\r
+architecture gbe_response_constructor_ARP_arch of gbe_response_constructor_ARP is\r
+\r
+  attribute syn_encoding: string;\r
+\r
+  type DISSECT_STATES is (IDLE, READ_FRAME, DELAY, DECIDE, LOAD_FRAME, WAIT_FOR_LOAD, CLEANUP);\r
+  signal DISSECT_CS, DISSECT_NS : DISSECT_STATES;\r
+  attribute syn_encoding of DISSECT_CS: signal is "onehot";\r
+\r
+  type stats_states is (IDLE, LOAD_SENT, LOAD_RECEIVED, CLEANUP);\r
+  signal stats_current_state, stats_next_state : stats_states;\r
+  attribute syn_encoding of stats_current_state : signal is "onehot";\r
+\r
+  signal saved_opcode             : std_logic_vector(15 downto 0); -- NOT USED\r
+  signal saved_sender_ip          : std_logic_vector(31 downto 0);\r
+  signal saved_target_ip          : std_logic_vector(31 downto 0);\r
+  signal tc_data                  : std_logic_vector(8 downto 0);\r
   signal dissect_ctr              : unsigned(7 downto 0);\r
-
-  signal state                    : std_logic_vector(3 downto 0);
-
-  attribute syn_preserve : boolean;
-  attribute syn_keep : boolean;
-  attribute syn_keep of state : signal is true;
-  attribute syn_preserve of state : signal is true;
-
-begin
-
-  PROC_DISSECT_FSM: process( CLK, RESET )
-  begin
-    if   ( RESET = '1' ) then
-      DISSECT_CS <= IDLE;
-    elsif( rising_edge(CLK) ) then
-      DISSECT_CS <= DISSECT_NS;
-    end if;
-  end process PROC_DISSECT_FSM;
-
-  PROC_DISSECT_TRANSITIONS : process( DISSECT_CS, MY_IP_IN, PS_WR_EN_IN, PS_ACTIVATE_IN,
-                                      PS_DATA_IN, dissect_ctr, PS_SELECTED_IN, saved_target_ip )
-  begin
-    case DISSECT_CS is
-
-      when IDLE =>
-        state <= x"1";
-        if( (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then
-          DISSECT_NS <= READ_FRAME;
-        else
-          DISSECT_NS <= IDLE;
-        end if;
-
-      when READ_FRAME =>
-        state <= x"2";
-        -- BUG: fails on empty payload
-        if( PS_DATA_IN(8) = '1' ) then
-          DISSECT_NS <= DELAY;
-        else
-          DISSECT_NS <= READ_FRAME;
-        end if;
+\r
+  signal state                    : std_logic_vector(3 downto 0);\r
+\r
+  attribute syn_preserve : boolean;\r
+  attribute syn_keep : boolean;\r
+  attribute syn_keep of state : signal is true;\r
+  attribute syn_preserve of state : signal is true;\r
+\r
+begin\r
+\r
+  PROC_DISSECT_FSM: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      DISSECT_CS <= IDLE;\r
+    elsif( rising_edge(CLK) ) then\r
+      DISSECT_CS <= DISSECT_NS;\r
+    end if;\r
+  end process PROC_DISSECT_FSM;\r
+\r
+  PROC_DISSECT_TRANSITIONS : process( DISSECT_CS, MY_IP_IN, PS_WR_EN_IN, PS_ACTIVATE_IN,\r
+                                      PS_DATA_IN, dissect_ctr, PS_SELECTED_IN, saved_target_ip )\r
+  begin\r
+    case DISSECT_CS is\r
+\r
+      when IDLE =>\r
+        state <= x"1";\r
+        if( (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then\r
+          DISSECT_NS <= READ_FRAME;\r
+        else\r
+          DISSECT_NS <= IDLE;\r
+        end if;\r
+\r
+      when READ_FRAME =>\r
+        state <= x"2";\r
+        -- BUG: fails on empty payload\r
+        if( PS_DATA_IN(8) = '1' ) then\r
+          DISSECT_NS <= DELAY;\r
+        else\r
+          DISSECT_NS <= READ_FRAME;\r
+        end if;\r
 \r
       when DELAY =>\r
         DISSECT_NS <= DECIDE;\r
-
-      when DECIDE =>
-        state <= x"3";
-        if( saved_target_ip = MY_IP_IN ) then
-          DISSECT_NS <= WAIT_FOR_LOAD;
-          -- in case the request is not for me, drop it
-        else
-          DISSECT_NS <= IDLE;
-        end if;
-
-      when WAIT_FOR_LOAD =>
-        state <= x"4";
-        if( PS_SELECTED_IN = '1' ) then
-          DISSECT_NS <= LOAD_FRAME;
-        else
-          DISSECT_NS <= WAIT_FOR_LOAD;
-        end if;
-
-      when LOAD_FRAME =>
-        state <= x"5";
-        if( dissect_ctr = x"1c" ) then
-          DISSECT_NS <= CLEANUP;
-        else
-          DISSECT_NS <= LOAD_FRAME;
-        end if;
-
-      when CLEANUP =>
-        state <= x"e";
-        DISSECT_NS <= IDLE;
-
-    end case;
-  end process PROC_DISSECT_TRANSITIONS;
-
-  PROC_DISSEC_CTR: process( CLK, RESET )
-  begin
-    if   ( RESET = '1' ) then
-      dissect_ctr <= (others => '0');
-    elsif( rising_edge(CLK) ) then
-      if   ( (DISSECT_CS = IDLE) and (PS_WR_EN_IN = '0') ) then
-        dissect_ctr <= (others => '0');
-      elsif( (DISSECT_CS = DECIDE) ) then
-        dissect_ctr <= (others => '0');
-      elsif( (DISSECT_CS = IDLE) and (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then
-        dissect_ctr <= dissect_ctr + 1;
-      elsif( (DISSECT_CS = READ_FRAME) and (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then  -- in case of saving data from incoming frame
-        dissect_ctr <= dissect_ctr + 1;
-      elsif( (DISSECT_CS = LOAD_FRAME) and (PS_SELECTED_IN = '1') and (TC_RD_EN_IN = '1') ) then  -- in case of constructing response
-        dissect_ctr <= dissect_ctr + 1;
-      end if;
-    end if;
-  end process PROC_DISSEC_CTR;
-
-  PROC_SAVE_VALUES: process( CLK, RESET )
-  begin
-    if   ( RESET = '1' ) then
-      saved_opcode    <= (others => '0');
-      saved_sender_ip <= (others => '0');
-      saved_target_ip <= (others => '0');
-    elsif( rising_edge(CLK) ) then
-      if( DISSECT_CS = READ_FRAME ) then
-        case dissect_ctr is
-
-          when x"06" =>
-           saved_opcode(7 downto 0)       <= PS_DATA_IN(7 downto 0);
-          when x"07" =>
-            saved_opcode(15 downto 8)     <= PS_DATA_IN(7 downto 0);
-          when x"0e" =>
-            saved_sender_ip(7 downto 0)   <= PS_DATA_IN(7 downto 0);
-          when x"0f" =>
-            saved_sender_ip(15 downto 8)  <= PS_DATA_IN(7 downto 0);
-          when x"10" =>
-            saved_sender_ip(23 downto 16) <= PS_DATA_IN(7 downto 0);
-          when x"11" =>
-            saved_sender_ip(31 downto 24) <= PS_DATA_IN(7 downto 0);
-          when x"18" =>
-            saved_target_ip(7 downto 0)   <= PS_DATA_IN(7 downto 0);
-          when x"19" =>
-            saved_target_ip(15 downto 8)  <= PS_DATA_IN(7 downto 0);
-          when x"1a" =>
-            saved_target_ip(23 downto 16) <= PS_DATA_IN(7 downto 0);
-          when x"1b" =>
-            saved_target_ip(31 downto 24) <= PS_DATA_IN(7 downto 0);
-
-          when others => null;
-        end case;
-      end if;
-    end if;
-  end process PROC_SAVE_VALUES;
-
-  PROC_TC_DATA: process( CLK )
-  begin
+\r
+      when DECIDE =>\r
+        state <= x"3";\r
+        if( saved_target_ip = MY_IP_IN ) then\r
+          DISSECT_NS <= WAIT_FOR_LOAD;\r
+          -- in case the request is not for me, drop it\r
+        else\r
+          DISSECT_NS <= IDLE;\r
+        end if;\r
+\r
+      when WAIT_FOR_LOAD =>\r
+        state <= x"4";\r
+        if( PS_SELECTED_IN = '1' ) then\r
+          DISSECT_NS <= LOAD_FRAME;\r
+        else\r
+          DISSECT_NS <= WAIT_FOR_LOAD;\r
+        end if;\r
+\r
+      when LOAD_FRAME =>\r
+        state <= x"5";\r
+        if( dissect_ctr = x"1c" ) then\r
+          DISSECT_NS <= CLEANUP;\r
+        else\r
+          DISSECT_NS <= LOAD_FRAME;\r
+        end if;\r
+\r
+      when CLEANUP =>\r
+        state <= x"e";\r
+        DISSECT_NS <= IDLE;\r
+\r
+    end case;\r
+  end process PROC_DISSECT_TRANSITIONS;\r
+\r
+  PROC_DISSEC_CTR: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      dissect_ctr <= (others => '0');\r
+    elsif( rising_edge(CLK) ) then\r
+      if   ( (DISSECT_CS = IDLE) and (PS_WR_EN_IN = '0') ) then\r
+        dissect_ctr <= (others => '0');\r
+      elsif( (DISSECT_CS = DECIDE) ) then\r
+        dissect_ctr <= (others => '0');\r
+      elsif( (DISSECT_CS = IDLE) and (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then\r
+        dissect_ctr <= dissect_ctr + 1;\r
+      elsif( (DISSECT_CS = READ_FRAME) and (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then  -- in case of saving data from incoming frame\r
+        dissect_ctr <= dissect_ctr + 1;\r
+      elsif( (DISSECT_CS = LOAD_FRAME) and (PS_SELECTED_IN = '1') and (TC_RD_EN_IN = '1') ) then  -- in case of constructing response\r
+        dissect_ctr <= dissect_ctr + 1;\r
+      end if;\r
+    end if;\r
+  end process PROC_DISSEC_CTR;\r
+\r
+  PROC_SAVE_VALUES: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      saved_opcode    <= (others => '0');\r
+      saved_sender_ip <= (others => '0');\r
+      saved_target_ip <= (others => '0');\r
+    elsif( rising_edge(CLK) ) then\r
+      if( DISSECT_CS = READ_FRAME ) then\r
+        case dissect_ctr is\r
+\r
+          when x"06" =>\r
+           saved_opcode(7 downto 0)       <= PS_DATA_IN(7 downto 0);\r
+          when x"07" =>\r
+            saved_opcode(15 downto 8)     <= PS_DATA_IN(7 downto 0);\r
+          when x"0e" =>\r
+            saved_sender_ip(7 downto 0)   <= PS_DATA_IN(7 downto 0);\r
+          when x"0f" =>\r
+            saved_sender_ip(15 downto 8)  <= PS_DATA_IN(7 downto 0);\r
+          when x"10" =>\r
+            saved_sender_ip(23 downto 16) <= PS_DATA_IN(7 downto 0);\r
+          when x"11" =>\r
+            saved_sender_ip(31 downto 24) <= PS_DATA_IN(7 downto 0);\r
+          when x"18" =>\r
+            saved_target_ip(7 downto 0)   <= PS_DATA_IN(7 downto 0);\r
+          when x"19" =>\r
+            saved_target_ip(15 downto 8)  <= PS_DATA_IN(7 downto 0);\r
+          when x"1a" =>\r
+            saved_target_ip(23 downto 16) <= PS_DATA_IN(7 downto 0);\r
+          when x"1b" =>\r
+            saved_target_ip(31 downto 24) <= PS_DATA_IN(7 downto 0);\r
+\r
+          when others => null;\r
+        end case;\r
+      end if;\r
+    end if;\r
+  end process PROC_SAVE_VALUES;\r
+\r
+  PROC_TC_DATA: process( CLK )\r
+  begin\r
     if( rising_edge(CLK) ) then\r
       tc_data(8) <= '0';\r
-      tc_data(7 downto 0) <= x"00";
-      if( DISSECT_CS = LOAD_FRAME ) then
+      tc_data(7 downto 0) <= x"00";\r
+      if( DISSECT_CS = LOAD_FRAME ) then\r
         case dissect_ctr is\r
           when x"00" => tc_data(7 downto 0) <= x"00"; -- HWTYPE\r
-          when x"01" => tc_data(7 downto 0) <= x"01";
-          when x"02" => tc_data(7 downto 0) <= x"08"; -- PTYPE
-          when x"03" => tc_data(7 downto 0) <= x"00";
-          when x"04" => tc_data(7 downto 0) <= x"06"; -- HLEN
-          when x"05" => tc_data(7 downto 0) <= x"04"; -- PLEN
-          when x"06" => tc_data(7 downto 0) <= x"00"; -- OPER
-          when x"07" => tc_data(7 downto 0) <= x"02";
-          when x"08" => tc_data(7 downto 0) <= MY_MAC_IN(7 downto 0); -- SHA
-          when x"09" => tc_data(7 downto 0) <= MY_MAC_IN(15 downto 8);
-          when x"0a" => tc_data(7 downto 0) <= MY_MAC_IN(23 downto 16);
-          when x"0b" => tc_data(7 downto 0) <= MY_MAC_IN(31 downto 24);
-          when x"0c" => tc_data(7 downto 0) <= MY_MAC_IN(39 downto 32);
-          when x"0d" => tc_data(7 downto 0) <= MY_MAC_IN(47 downto 40);
-          when x"0e" => tc_data(7 downto 0) <= MY_IP_IN(7 downto 0); -- SPA
-          when x"0f" => tc_data(7 downto 0) <= MY_IP_IN(15 downto 8);
-          when x"10" => tc_data(7 downto 0) <= MY_IP_IN(23 downto 16);
-          when x"11" => tc_data(7 downto 0) <= MY_IP_IN(31 downto 24);
-          when x"12" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(7 downto 0); -- THA
-          when x"13" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(15 downto 8);
-          when x"14" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(23 downto 16);
-          when x"15" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(31 downto 24);
-          when x"16" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(39 downto 32);
-          when x"17" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(47 downto 40);
-          when x"18" => tc_data(7 downto 0) <= saved_sender_ip(7 downto 0); -- TPA
-          when x"19" => tc_data(7 downto 0) <= saved_sender_ip(15 downto 8);
-          when x"1a" => tc_data(7 downto 0) <= saved_sender_ip(23 downto 16);
-          when x"1b" => tc_data(7 downto 0) <= saved_sender_ip(31 downto 24); tc_data(8) <= '1';
+          when x"01" => tc_data(7 downto 0) <= x"01";\r
+          when x"02" => tc_data(7 downto 0) <= x"08"; -- PTYPE\r
+          when x"03" => tc_data(7 downto 0) <= x"00";\r
+          when x"04" => tc_data(7 downto 0) <= x"06"; -- HLEN\r
+          when x"05" => tc_data(7 downto 0) <= x"04"; -- PLEN\r
+          when x"06" => tc_data(7 downto 0) <= x"00"; -- OPER\r
+          when x"07" => tc_data(7 downto 0) <= x"02";\r
+          when x"08" => tc_data(7 downto 0) <= MY_MAC_IN(7 downto 0); -- SHA\r
+          when x"09" => tc_data(7 downto 0) <= MY_MAC_IN(15 downto 8);\r
+          when x"0a" => tc_data(7 downto 0) <= MY_MAC_IN(23 downto 16);\r
+          when x"0b" => tc_data(7 downto 0) <= MY_MAC_IN(31 downto 24);\r
+          when x"0c" => tc_data(7 downto 0) <= MY_MAC_IN(39 downto 32);\r
+          when x"0d" => tc_data(7 downto 0) <= MY_MAC_IN(47 downto 40);\r
+          when x"0e" => tc_data(7 downto 0) <= MY_IP_IN(7 downto 0); -- SPA\r
+          when x"0f" => tc_data(7 downto 0) <= MY_IP_IN(15 downto 8);\r
+          when x"10" => tc_data(7 downto 0) <= MY_IP_IN(23 downto 16);\r
+          when x"11" => tc_data(7 downto 0) <= MY_IP_IN(31 downto 24);\r
+          when x"12" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(7 downto 0); -- THA\r
+          when x"13" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(15 downto 8);\r
+          when x"14" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(23 downto 16);\r
+          when x"15" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(31 downto 24);\r
+          when x"16" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(39 downto 32);\r
+          when x"17" => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(47 downto 40);\r
+          when x"18" => tc_data(7 downto 0) <= saved_sender_ip(7 downto 0); -- TPA\r
+          when x"19" => tc_data(7 downto 0) <= saved_sender_ip(15 downto 8);\r
+          when x"1a" => tc_data(7 downto 0) <= saved_sender_ip(23 downto 16);\r
+          when x"1b" => tc_data(7 downto 0) <= saved_sender_ip(31 downto 24); tc_data(8) <= '1';\r
           when others => tc_data(7 downto 0) <= x"00";\r
         end case;\r
         TC_DATA_OUT <= tc_data; -- delay once clock cycle\r
-      end if;
-    end if;
-  end process PROC_TC_DATA;
-
-  PROC_PS_RESPONSE_SYNC: process( CLK )
-  begin
-    if( rising_edge(CLK) ) then
-      if( (DISSECT_CS = WAIT_FOR_LOAD) or (DISSECT_CS = LOAD_FRAME) or (DISSECT_CS = CLEANUP) ) then
-        PS_RESPONSE_READY_OUT <= '1';
-      else
-        PS_RESPONSE_READY_OUT <= '0';
-      end if;
-
-      if( DISSECT_CS = IDLE ) then
-        PS_BUSY_OUT <= '0';
-      else
-        PS_BUSY_OUT <= '1';
-      end if;
-    end if;
-  end process PROC_PS_RESPONSE_SYNC;
-
-  TC_FRAME_SIZE_OUT   <= x"001c";  -- fixed frame size
-  TC_FRAME_TYPE_OUT   <= x"0608";
-  TC_DEST_MAC_OUT     <= PS_SRC_MAC_ADDRESS_IN;
-  TC_DEST_IP_OUT      <= x"00000000";  -- doesnt matter
-  TC_DEST_UDP_OUT     <= x"0000";  -- doesnt matter
-  TC_SRC_MAC_OUT      <= MY_MAC_IN;
-  TC_SRC_IP_OUT       <= x"00000000";  -- doesnt matter
-  TC_SRC_UDP_OUT      <= x"0000";  -- doesnt matter
-  TC_IP_PROTOCOL_OUT  <= x"00"; -- doesnt matter
-  TC_IDENT_OUT        <= (others => '0');  -- doesn't matter
-
-end gbe_response_constructor_ARP_arch;
+      end if;\r
+    end if;\r
+  end process PROC_TC_DATA;\r
+\r
+  PROC_PS_RESPONSE_SYNC: process( CLK )\r
+  begin\r
+    if( rising_edge(CLK) ) then\r
+      if( (DISSECT_CS = WAIT_FOR_LOAD) or (DISSECT_CS = LOAD_FRAME) or (DISSECT_CS = CLEANUP) ) then\r
+        PS_RESPONSE_READY_OUT <= '1';\r
+      else\r
+        PS_RESPONSE_READY_OUT <= '0';\r
+      end if;\r
+\r
+      if( DISSECT_CS = IDLE ) then\r
+        PS_BUSY_OUT <= '0';\r
+      else\r
+        PS_BUSY_OUT <= '1';\r
+      end if;\r
+    end if;\r
+  end process PROC_PS_RESPONSE_SYNC;\r
+\r
+  TC_FRAME_SIZE_OUT   <= x"001c";  -- fixed frame size\r
+  TC_FRAME_TYPE_OUT   <= x"0608";\r
+  TC_DEST_MAC_OUT     <= PS_SRC_MAC_ADDRESS_IN;\r
+  TC_DEST_IP_OUT      <= x"00000000";  -- doesnt matter\r
+  TC_DEST_UDP_OUT     <= x"0000";  -- doesnt matter\r
+  TC_SRC_MAC_OUT      <= MY_MAC_IN;\r
+  TC_SRC_IP_OUT       <= x"00000000";  -- doesnt matter\r
+  TC_SRC_UDP_OUT      <= x"0000";  -- doesnt matter\r
+  TC_IP_PROTOCOL_OUT  <= x"00"; -- doesnt matter\r
+  TC_IDENT_OUT        <= (others => '0');  -- doesn't matter\r
+\r
+end gbe_response_constructor_ARP_arch;\r
index 526696fa95ee4b77453cc28c5fd4ef76a0e749cc..bd8df5f703b9101a68813ede48e5e5f596aee9ff 100644 (file)
@@ -19,11 +19,8 @@ entity gbe_response_constructor_DHCP is
     PS_BUSY_OUT            : out std_logic;\r
     PS_SELECTED_IN         : in  std_logic;\r
     PS_SRC_MAC_ADDRESS_IN  : in  std_logic_vector(47 downto 0);\r
-    PS_DEST_MAC_ADDRESS_IN : in  std_logic_vector(47 downto 0);\r
     PS_SRC_IP_ADDRESS_IN   : in  std_logic_vector(31 downto 0);\r
-    PS_DEST_IP_ADDRESS_IN  : in  std_logic_vector(31 downto 0);\r
     PS_SRC_UDP_PORT_IN     : in  std_logic_vector(15 downto 0);\r
-    PS_DEST_UDP_PORT_IN    : in  std_logic_vector(15 downto 0);\r
     PS_FRAME_INFO_IN       : in  std_logic_vector(7 downto 0);\r
   --\r
     TC_RD_EN_IN            : in  std_logic;\r
@@ -109,7 +106,7 @@ begin
   DEBUG_OUT(31 downto 28) <= main_state;\r
   DEBUG_OUT(27 downto 24) <= recv_state;\r
   DEBUG_OUT(23 downto 20) <= cons_state;\r
-  DEBUG_OUT(19 downto 12) <= PS_DEST_MAC_ADDRESS_IN(7 downto 0);\r
+  DEBUG_OUT(19 downto 12) <= (others => '0');\r
   DEBUG_OUT(11)           <= '0';\r
   DEBUG_OUT(10)           <= PS_WR_EN_IN;\r
   DEBUG_OUT(9)            <= PS_ACTIVATE_IN;\r
@@ -117,11 +114,11 @@ begin
 \r
   -- ****\r
   -- fixing the constant values for DHCP request headers\r
-  TC_DEST_MAC_OUT               <= x"ffffffffffff" when (MAIN_CS = BOOTING or MAIN_CS = SENDING_DISCOVER) else saved_server_mac;\r
-  TC_DEST_IP_OUT                <= x"ffffffff" when (MAIN_CS = BOOTING or MAIN_CS = SENDING_DISCOVER) else saved_server_ip;\r
+  TC_DEST_MAC_OUT               <= x"ffffffffffff" when ((MAIN_CS = BOOTING) or (MAIN_CS = SENDING_DISCOVER)) else saved_server_mac;\r
+  TC_DEST_IP_OUT                <= x"ffffffff" when ((MAIN_CS = BOOTING) or (MAIN_CS = SENDING_DISCOVER)) else saved_server_ip;\r
   TC_DEST_UDP_OUT               <= x"4300";\r
   TC_SRC_MAC_OUT                <= MY_MAC_IN;\r
-  TC_SRC_IP_OUT                 <= x"00000000" when (MAIN_CS = BOOTING or MAIN_CS = SENDING_DISCOVER) else saved_proposed_ip;\r
+  TC_SRC_IP_OUT                 <= x"00000000" when ((MAIN_CS = BOOTING) or (MAIN_CS = SENDING_DISCOVER)) else saved_proposed_ip;\r
   TC_SRC_UDP_OUT                <= x"4400";\r
   TC_IP_PROTOCOL_OUT            <= x"11"; -- udp\r
   bootp_hdr(7 downto 0)         <= x"01";  -- message type(request)\r
@@ -132,12 +129,12 @@ begin
   bootp_hdr(95 downto 64)       <= x"0000_0000";  -- seconds elapsed/flags\r
   transaction_id                <= x"cefa" & MY_MAC_IN(47 downto 40) & MY_MAC_IN(23 downto 16);\r
   vendor_values(31 downto 0)    <= x"63538263"; -- magic cookie (dhcp message)\r
-  vendor_values(55 downto 32)   <= x"010135" when (MAIN_CS = BOOTING or MAIN_CS = SENDING_DISCOVER) else x"030135"; -- dhcp discover, then dhcp request\r
+  vendor_values(55 downto 32)   <= x"010135" when ((MAIN_CS = BOOTING) or (MAIN_CS = SENDING_DISCOVER)) else x"030135"; -- dhcp discover, then dhcp request\r
   vendor_values(79 downto 56)   <= x"01073d"; -- client identifier\r
   vendor_values(127 downto 80)  <= MY_MAC_IN;  -- client identifier\r
   vendor_values(143 downto 128) <= x"040c";  -- client name\r
-  vendor_values(175 downto 144) <= x"33425254";  -- client name (TRB3)\r
-  --vendor_values(175 downto 144) <= x"6f72694b";  -- client name (Kiro)\r
+  --vendor_values(175 downto 144) <= x"33425254";  -- client name (TRB3)\r
+  vendor_values(175 downto 144) <= x"6f72694b";  -- client name (Kiro)\r
   vendor_values2(15 downto 0)   <= x"0436";  -- server identifier\r
   vendor_values2(47 downto 16)  <= saved_server_ip;\r
 \r
@@ -270,7 +267,7 @@ begin
   end process PROC_RECEIVE_FSM;\r
 \r
   PROC_RECEIVE_TRANSITIONS: process( RECEIVE_CS, MAIN_CS, bootp_hdr, saved_dhcp_type, saved_transaction_id, PS_FRAME_INFO_IN,\r
-                                     PS_DATA_IN, PS_DEST_MAC_ADDRESS_IN, MY_MAC_IN, PS_ACTIVATE_IN, PS_WR_EN_IN, save_ctr )\r
+                                     PS_DATA_IN, MY_MAC_IN, PS_ACTIVATE_IN, PS_WR_EN_IN, save_ctr )\r
   begin\r
     recv_state <= x"0";\r
 \r
@@ -280,8 +277,7 @@ begin
         recv_state <= x"1";\r
         if( (PS_ACTIVATE_IN = '1') and (PS_WR_EN_IN = '1') ) then\r
           if( (MAIN_CS = WAITING_FOR_OFFER) or (MAIN_CS = WAITING_FOR_ACK) ) then  -- ready to receive dhcp frame\r
---            if( PS_DEST_MAC_ADDRESS_IN = MY_MAC_IN ) then -- check if i'm the addressee (discards broadcasts also)
-            if( PS_FRAME_INFO_IN(0) = '1' ) then -- check if i'm the addressee (discards broadcasts also)
+            if( PS_FRAME_INFO_IN(0) = '1' ) then -- check if i'm the addressee (discards broadcasts also)\r
               RECEIVE_NS <= SAVE_VALUES;\r
             else\r
               RECEIVE_NS <= DISCARD;  -- discard if the frame is not for me\r
diff --git a/gbe_trb/protocols/gbe_response_constructor_Discovery.vhd b/gbe_trb/protocols/gbe_response_constructor_Discovery.vhd
new file mode 100644 (file)
index 0000000..0371d02
--- /dev/null
@@ -0,0 +1,279 @@
+library ieee;\r
+  use ieee.std_logic_1164.all;\r
+  use ieee.numeric_std.all;\r
+\r
+library work;\r
+  use work.gbe_protocols.all;\r
+\r
+-- New protocol: will drop received frames and not send back yet\r
+   \r
+entity gbe_response_constructor_Discovery is\r
+  port(\r
+    CLK                    : in  std_logic;  -- system clock\r
+    RESET                  : in  std_logic;\r
+    MY_MAC_IN              : in  std_logic_vector(47 downto 0);\r
+    MY_IP_IN               : in  std_logic_vector(31 downto 0);\r
+    PS_DATA_IN             : in  std_logic_vector(8 downto 0);\r
+    PS_WR_EN_IN            : in  std_logic;\r
+    PS_ACTIVATE_IN         : in  std_logic;\r
+    PS_RESPONSE_READY_OUT  : out std_logic;\r
+    PS_BUSY_OUT            : out std_logic;\r
+    PS_SELECTED_IN         : in  std_logic;\r
+    PS_SRC_MAC_ADDRESS_IN  : in  std_logic_vector(47 downto 0);\r
+    PS_SRC_IP_ADDRESS_IN   : in  std_logic_vector(31 downto 0);\r
+    PS_SRC_UDP_PORT_IN     : in  std_logic_vector(15 downto 0);\r
+    PS_FRAME_INFO_IN       : in  std_logic_vector(7 downto 0);\r
+    TC_RD_EN_IN            : in  std_logic;\r
+    TC_DATA_OUT            : out std_logic_vector(8 downto 0);\r
+    TC_FRAME_SIZE_OUT      : out std_logic_vector(15 downto 0);\r
+    TC_FRAME_TYPE_OUT      : out std_logic_vector(15 downto 0);\r
+    TC_IP_PROTOCOL_OUT     : out std_logic_vector(7 downto 0);\r
+    TC_IDENT_OUT           : out std_logic_vector(15 downto 0);\r
+    TC_DEST_MAC_OUT        : out std_logic_vector(47 downto 0);\r
+    TC_DEST_IP_OUT         : out std_logic_vector(31 downto 0);\r
+    TC_DEST_UDP_OUT        : out std_logic_vector(15 downto 0);\r
+    TC_SRC_MAC_OUT         : out std_logic_vector(47 downto 0);\r
+    TC_SRC_IP_OUT          : out std_logic_vector(31 downto 0);\r
+    TC_SRC_UDP_OUT         : out std_logic_vector(15 downto 0);\r
+    DEBUG_OUT              : out std_logic_vector(63 downto 0)\r
+  );\r
+end gbe_response_constructor_Discovery;\r
+\r
+architecture gbe_response_constructor_Discovery_arch of gbe_response_constructor_Discovery is\r
+\r
+  attribute syn_encoding: string;\r
+\r
+  type DISSECT_STATES is (IDLE, READ_FRAME, DELAY, DECIDE, LOAD_FRAME, WAIT_FOR_LOAD, CLEANUP);\r
+  signal DISSECT_CS, DISSECT_NS : DISSECT_STATES;\r
+  attribute syn_encoding of DISSECT_CS: signal is "onehot";\r
+\r
+  type stats_states is (IDLE, LOAD_SENT, LOAD_RECEIVED, CLEANUP);\r
+  signal stats_current_state, stats_next_state : stats_states;\r
+  attribute syn_encoding of stats_current_state : signal is "onehot";\r
+\r
+  signal saved_opcode             : std_logic_vector(15 downto 0); -- NOT USED\r
+  signal saved_sender_ip          : std_logic_vector(31 downto 0);\r
+  signal saved_target_ip          : std_logic_vector(31 downto 0);\r
+  signal tc_data                  : std_logic_vector(8 downto 0);\r
+  signal dissect_ctr              : unsigned(7 downto 0);\r
+\r
+  signal state                    : std_logic_vector(3 downto 0);\r
+\r
+  signal test_ff                  : std_logic;\r
+  \r
+  attribute syn_preserve : boolean;\r
+  attribute syn_keep : boolean;\r
+  attribute syn_keep of state : signal is true;\r
+  attribute syn_preserve of state : signal is true;\r
+\r
+begin\r
+\r
+  DEBUG_OUT(63 downto 32) <= (others => '0');\r
+  DEBUG_OUT(31)           <= test_ff;\r
+  DEBUG_OUT(30 downto 4)  <= (others => '0');\r
+  DEBUG_OUT(3 downto 0)   <= state;\r
+\r
+  PROC_TEST_FF: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      test_ff <= '0';\r
+    elsif( rising_edge(CLK) ) then\r
+      if( DISSECT_CS = DELAY ) then\r
+        test_ff <= not test_ff;\r
+      end if;\r
+    end if;\r
+  end process PROC_TEST_FF;\r
+\r
+  PROC_DISSECT_FSM: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      DISSECT_CS <= IDLE;\r
+    elsif( rising_edge(CLK) ) then\r
+      DISSECT_CS <= DISSECT_NS;\r
+    end if;\r
+  end process PROC_DISSECT_FSM;\r
+\r
+  PROC_DISSECT_TRANSITIONS : process( DISSECT_CS, MY_IP_IN, PS_WR_EN_IN, PS_ACTIVATE_IN,\r
+                                      PS_DATA_IN, dissect_ctr, PS_SELECTED_IN, saved_target_ip )\r
+  begin\r
+    case DISSECT_CS is\r
+\r
+      when IDLE =>\r
+        state <= x"1";\r
+        if( (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then\r
+          DISSECT_NS <= READ_FRAME;\r
+        else\r
+          DISSECT_NS <= IDLE;\r
+        end if;\r
+\r
+      when READ_FRAME =>\r
+        state <= x"2";\r
+        -- BUG: fails on empty payload\r
+        if( PS_DATA_IN(8) = '1' ) then\r
+          DISSECT_NS <= DELAY;\r
+        else\r
+          DISSECT_NS <= READ_FRAME;\r
+        end if;\r
+\r
+      when DELAY =>\r
+        DISSECT_NS <= DECIDE;\r
+\r
+      when DECIDE =>\r
+        state <= x"3";\r
+--        if( saved_target_ip = MY_IP_IN ) then\r
+--          DISSECT_NS <= WAIT_FOR_LOAD;\r
+--          -- in case the request is not for me, drop it\r
+--        else\r
+          DISSECT_NS <= IDLE;\r
+--        end if;\r
+\r
+      when WAIT_FOR_LOAD =>\r
+        state <= x"4";\r
+        if( PS_SELECTED_IN = '1' ) then\r
+          DISSECT_NS <= LOAD_FRAME;\r
+        else\r
+          DISSECT_NS <= WAIT_FOR_LOAD;\r
+        end if;\r
+\r
+      when LOAD_FRAME =>\r
+        state <= x"5";\r
+        if( dissect_ctr = x"1c" ) then\r
+          DISSECT_NS <= CLEANUP;\r
+        else\r
+          DISSECT_NS <= LOAD_FRAME;\r
+        end if;\r
+\r
+      when CLEANUP =>\r
+        state <= x"e";\r
+        DISSECT_NS <= IDLE;\r
+\r
+    end case;\r
+  end process PROC_DISSECT_TRANSITIONS;\r
+\r
+  PROC_DISSEC_CTR: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      dissect_ctr <= (others => '0');\r
+    elsif( rising_edge(CLK) ) then\r
+      if   ( (DISSECT_CS = IDLE) and (PS_WR_EN_IN = '0') ) then\r
+        dissect_ctr <= (others => '0');\r
+      elsif( (DISSECT_CS = DECIDE) ) then\r
+        dissect_ctr <= (others => '0');\r
+      elsif( (DISSECT_CS = IDLE) and (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then\r
+        dissect_ctr <= dissect_ctr + 1;\r
+      elsif( (DISSECT_CS = READ_FRAME) and (PS_WR_EN_IN = '1') and (PS_ACTIVATE_IN = '1') ) then  -- in case of saving data from incoming frame\r
+        dissect_ctr <= dissect_ctr + 1;\r
+      elsif( (DISSECT_CS = LOAD_FRAME) and (PS_SELECTED_IN = '1') and (TC_RD_EN_IN = '1') ) then  -- in case of constructing response\r
+        dissect_ctr <= dissect_ctr + 1;\r
+      end if;\r
+    end if;\r
+  end process PROC_DISSEC_CTR;\r
+\r
+  PROC_SAVE_VALUES: process( CLK, RESET )\r
+  begin\r
+    if   ( RESET = '1' ) then\r
+      saved_opcode    <= (others => '0');\r
+      saved_sender_ip <= (others => '0');\r
+      saved_target_ip <= (others => '0');\r
+    elsif( rising_edge(CLK) ) then\r
+      if( DISSECT_CS = READ_FRAME ) then\r
+        case dissect_ctr is\r
+\r
+          when x"06" =>\r
+           saved_opcode(7 downto 0)       <= PS_DATA_IN(7 downto 0);\r
+          when x"07" =>\r
+            saved_opcode(15 downto 8)     <= PS_DATA_IN(7 downto 0);\r
+          when x"0e" =>\r
+            saved_sender_ip(7 downto 0)   <= PS_DATA_IN(7 downto 0);\r
+          when x"0f" =>\r
+            saved_sender_ip(15 downto 8)  <= PS_DATA_IN(7 downto 0);\r
+          when x"10" =>\r
+            saved_sender_ip(23 downto 16) <= PS_DATA_IN(7 downto 0);\r
+          when x"11" =>\r
+            saved_sender_ip(31 downto 24) <= PS_DATA_IN(7 downto 0);\r
+          when x"18" =>\r
+            saved_target_ip(7 downto 0)   <= PS_DATA_IN(7 downto 0);\r
+          when x"19" =>\r
+            saved_target_ip(15 downto 8)  <= PS_DATA_IN(7 downto 0);\r
+          when x"1a" =>\r
+            saved_target_ip(23 downto 16) <= PS_DATA_IN(7 downto 0);\r
+          when x"1b" =>\r
+            saved_target_ip(31 downto 24) <= PS_DATA_IN(7 downto 0);\r
+\r
+          when others => null;\r
+        end case;\r
+      end if;\r
+    end if;\r
+  end process PROC_SAVE_VALUES;\r
+\r
+  PROC_TC_DATA: process( CLK )\r
+  begin\r
+    if( rising_edge(CLK) ) then\r
+      tc_data(8) <= '0';\r
+      tc_data(7 downto 0) <= x"00";\r
+      if( DISSECT_CS = LOAD_FRAME ) then\r
+        case dissect_ctr is\r
+          when x"00"  => tc_data(7 downto 0) <= x"00"; -- HWTYPE\r
+          when x"01"  => tc_data(7 downto 0) <= x"01";\r
+          when x"02"  => tc_data(7 downto 0) <= x"08"; -- PTYPE\r
+          when x"03"  => tc_data(7 downto 0) <= x"00";\r
+          when x"04"  => tc_data(7 downto 0) <= x"06"; -- HLEN\r
+          when x"05"  => tc_data(7 downto 0) <= x"04"; -- PLEN\r
+          when x"06"  => tc_data(7 downto 0) <= x"00"; -- OPER\r
+          when x"07"  => tc_data(7 downto 0) <= x"02";\r
+          when x"08"  => tc_data(7 downto 0) <= MY_MAC_IN(7 downto 0); -- SHA\r
+          when x"09"  => tc_data(7 downto 0) <= MY_MAC_IN(15 downto 8);\r
+          when x"0a"  => tc_data(7 downto 0) <= MY_MAC_IN(23 downto 16);\r
+          when x"0b"  => tc_data(7 downto 0) <= MY_MAC_IN(31 downto 24);\r
+          when x"0c"  => tc_data(7 downto 0) <= MY_MAC_IN(39 downto 32);\r
+          when x"0d"  => tc_data(7 downto 0) <= MY_MAC_IN(47 downto 40);\r
+          when x"0e"  => tc_data(7 downto 0) <= MY_IP_IN(7 downto 0); -- SPA\r
+          when x"0f"  => tc_data(7 downto 0) <= MY_IP_IN(15 downto 8);\r
+          when x"10"  => tc_data(7 downto 0) <= MY_IP_IN(23 downto 16);\r
+          when x"11"  => tc_data(7 downto 0) <= MY_IP_IN(31 downto 24);\r
+          when x"12"  => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(7 downto 0); -- THA\r
+          when x"13"  => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(15 downto 8);\r
+          when x"14"  => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(23 downto 16);\r
+          when x"15"  => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(31 downto 24);\r
+          when x"16"  => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(39 downto 32);\r
+          when x"17"  => tc_data(7 downto 0) <= PS_SRC_MAC_ADDRESS_IN(47 downto 40);\r
+          when x"18"  => tc_data(7 downto 0) <= saved_sender_ip(7 downto 0); -- TPA\r
+          when x"19"  => tc_data(7 downto 0) <= saved_sender_ip(15 downto 8);\r
+          when x"1a"  => tc_data(7 downto 0) <= saved_sender_ip(23 downto 16);\r
+          when x"1b"  => tc_data(7 downto 0) <= saved_sender_ip(31 downto 24); tc_data(8) <= '1';\r
+          when others => tc_data(7 downto 0) <= x"00";\r
+        end case;\r
+        TC_DATA_OUT <= tc_data; -- delay once clock cycle\r
+      end if;\r
+    end if;\r
+  end process PROC_TC_DATA;\r
+\r
+  PROC_PS_RESPONSE_SYNC: process( CLK )\r
+  begin\r
+    if( rising_edge(CLK) ) then\r
+      if( (DISSECT_CS = WAIT_FOR_LOAD) or (DISSECT_CS = LOAD_FRAME) or (DISSECT_CS = CLEANUP) ) then\r
+        PS_RESPONSE_READY_OUT <= '1';\r
+      else\r
+        PS_RESPONSE_READY_OUT <= '0';\r
+      end if;\r
+\r
+      if( DISSECT_CS = IDLE ) then\r
+        PS_BUSY_OUT <= '0';\r
+      else\r
+        PS_BUSY_OUT <= '1';\r
+      end if;\r
+    end if;\r
+  end process PROC_PS_RESPONSE_SYNC;\r
+\r
+  TC_FRAME_SIZE_OUT   <= x"001c";  -- fixed frame size\r
+  TC_FRAME_TYPE_OUT   <= x"0608";\r
+  TC_DEST_MAC_OUT     <= PS_SRC_MAC_ADDRESS_IN;\r
+  TC_DEST_IP_OUT      <= x"00000000";  -- doesnt matter\r
+  TC_DEST_UDP_OUT     <= x"0000";  -- doesnt matter\r
+  TC_SRC_MAC_OUT      <= MY_MAC_IN;\r
+  TC_SRC_IP_OUT       <= x"00000000";  -- doesnt matter\r
+  TC_SRC_UDP_OUT      <= x"0000";  -- doesnt matter\r
+  TC_IP_PROTOCOL_OUT  <= x"00"; -- doesnt matter\r
+  TC_IDENT_OUT        <= (others => '0');  -- doesn't matter\r
+\r
+end gbe_response_constructor_Discovery_arch;\r
index 1110fb42f7b4e322dc506e8eeb4f8a655e2dcce5..83b723b452e972e06c6ef6c6a5b5259075b49de9 100644 (file)
@@ -25,11 +25,8 @@ entity gbe_response_constructor_Forward is
     PS_BUSY_OUT             : out std_logic;
     PS_SELECTED_IN          : in  std_logic;
     PS_SRC_MAC_ADDRESS_IN   : in  std_logic_vector(47 downto 0);
-    PS_DEST_MAC_ADDRESS_IN  : in  std_logic_vector(47 downto 0);
     PS_SRC_IP_ADDRESS_IN    : in  std_logic_vector(31 downto 0);
-    PS_DEST_IP_ADDRESS_IN   : in  std_logic_vector(31 downto 0);
     PS_SRC_UDP_PORT_IN      : in  std_logic_vector(15 downto 0);
-    PS_DEST_UDP_PORT_IN     : in  std_logic_vector(15 downto 0);
     --
     TC_RD_EN_IN             : in  std_logic;
     TC_DATA_OUT             : out std_logic_vector(8 downto 0);
index 4b603bde7c2a1236bab13d6cb5e61f1b4b86d5e1..01c63181e2392b1cd4d7e5daab52d9012508fba5 100644 (file)
@@ -19,11 +19,8 @@ entity gbe_response_constructor_Ping is
     PS_BUSY_OUT            : out std_logic;
     PS_SELECTED_IN         : in  std_logic;
     PS_SRC_MAC_ADDRESS_IN  : in  std_logic_vector(47 downto 0);
-    PS_DEST_MAC_ADDRESS_IN : in  std_logic_vector(47 downto 0);
     PS_SRC_IP_ADDRESS_IN   : in  std_logic_vector(31 downto 0);
-    PS_DEST_IP_ADDRESS_IN  : in  std_logic_vector(31 downto 0);
     PS_SRC_UDP_PORT_IN     : in  std_logic_vector(15 downto 0);
-    PS_DEST_UDP_PORT_IN    : in  std_logic_vector(15 downto 0);
   --
     TC_RD_EN_IN            : in  std_logic;
     TC_DATA_OUT            : out std_logic_vector(8 downto 0);
index 6608027a6a532ac82cf23334b1e10fecd922139c..39e80a0bcf627fd208b103d8958da78d9b739878 100644 (file)
@@ -23,11 +23,8 @@ entity gbe_response_constructor_SCTRL is
     PS_BUSY_OUT                   : out std_logic;\r
     PS_SELECTED_IN                : in  std_logic;\r
     PS_SRC_MAC_ADDRESS_IN         : in  std_logic_vector(47 downto 0);\r
-    PS_DEST_MAC_ADDRESS_IN        : in  std_logic_vector(47 downto 0);\r
     PS_SRC_IP_ADDRESS_IN          : in  std_logic_vector(31 downto 0);\r
-    PS_DEST_IP_ADDRESS_IN         : in  std_logic_vector(31 downto 0);\r
     PS_SRC_UDP_PORT_IN            : in  std_logic_vector(15 downto 0);\r
-    PS_DEST_UDP_PORT_IN           : in  std_logic_vector(15 downto 0);\r
 --\r
     TC_RD_EN_IN                   : in  std_logic;\r
     TC_DATA_OUT                   : out std_logic_vector(8 downto 0);\r