]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
*** empty log message ***
authorhadeshyp <hadeshyp>
Wed, 23 May 2012 10:51:33 +0000 (10:51 +0000)
committerhadeshyp <hadeshyp>
Wed, 23 May 2012 10:51:33 +0000 (10:51 +0000)
13 files changed:
gbe2_ecp3/tb_frame_receiver.vhd
gbe2_ecp3/trb_net16_gbe_buf.vhd
gbe2_ecp3/trb_net16_gbe_frame_constr.vhd
gbe2_ecp3/trb_net16_gbe_main_control.vhd
gbe2_ecp3/trb_net16_gbe_protocol_selector.vhd
gbe2_ecp3/trb_net16_gbe_response_constructor_ARP.vhd
gbe2_ecp3/trb_net16_gbe_response_constructor_DHCP.vhd
gbe2_ecp3/trb_net16_gbe_response_constructor_Ping.vhd
gbe2_ecp3/trb_net16_gbe_response_constructor_SCTRL.vhd
gbe2_ecp3/trb_net16_gbe_response_constructor_Stat.vhd
gbe2_ecp3/trb_net16_gbe_transmit_control.vhd
gbe2_ecp3/trb_net_gbe_components.vhd
gbe2_ecp3/trb_net_gbe_protocols.vhd

index ca330e211efdb771150e4c5328b1bbda98019da9..5e13920c11d32207abbf247590d442d87b79caa8 100644 (file)
@@ -220,6 +220,7 @@ signal gsc_reply_read, gsc_reply_dataready : std_logic;
 signal gsc_reply_data, gsc_init_data : std_logic_vector(15 downto 0);
 signal gsc_busy : std_logic;
 signal gsc_init_packet_num, gsc_reply_packet_num : std_logic_vector(2 downto 0);
+signal mc_flags, mc_ip_size, mc_udp_size : std_logic_vector(15 downto 0);
 
 begin
 
@@ -474,6 +475,10 @@ port map (
        TC_SRC_IP_OUT           => mc_src_ip,
        TC_SRC_UDP_OUT          => mc_src_udp,
        
+       TC_IP_SIZE_OUT          => mc_ip_size,
+       TC_UDP_SIZE_OUT         => mc_udp_size,
+       TC_FLAGS_OFFSET_OUT     => mc_flags,
+
        TC_BUSY_IN              => MC_BUSY_IN,
        TC_TRANSMIT_DONE_IN     => MC_TRANSMIT_DONE_IN,
 
@@ -507,6 +512,8 @@ port map (
        TSM_HREAD_N_OUT         => open,
        TSM_HREADY_N_IN         => '0',
        TSM_HDATA_EN_N_IN       => '1',
+       TSM_RX_STAT_VEC_IN  => (others => '0'),
+       TSM_RX_STAT_EN_IN   => '0',
 
        DEBUG_OUT               => open
 );
@@ -553,6 +560,10 @@ port map(
        MC_SRC_IP_IN            => mc_src_ip,
        MC_SRC_UDP_IN           => mc_src_udp,
        
+       MC_IP_SIZE_IN           => mc_ip_size,
+       MC_UDP_SIZE_IN          => mc_udp_size,
+       MC_FLAGS_OFFSET_IN      => mc_flags,
+       
        MC_BUSY_OUT             => MC_BUSY_IN,
        MC_TRANSMIT_DONE_OUT    => MC_TRANSMIT_DONE_IN,
 
@@ -689,17 +700,17 @@ begin
        wait until rising_edge(RX_MAC_CLK);
        MAC_RX_EN_IN <= '1';
 -- dest mac
-       MAC_RXD_IN              <= x"00";
+       MAC_RXD_IN              <= x"ff";
        wait until rising_edge(RX_MAC_CLK);
-       MAC_RXD_IN              <= x"00";
+       MAC_RXD_IN              <= x"ff";
        wait until rising_edge(RX_MAC_CLK);
-       MAC_RXD_IN              <= x"be";
+       MAC_RXD_IN              <= x"ff";
        wait until rising_edge(RX_MAC_CLK);
-       MAC_RXD_IN              <= x"ef";
+       MAC_RXD_IN              <= x"ff";
        wait until rising_edge(RX_MAC_CLK);
-       MAC_RXD_IN              <= x"be";
+       MAC_RXD_IN              <= x"ff";
        wait until rising_edge(RX_MAC_CLK);
-       MAC_RXD_IN              <= x"ef";
+       MAC_RXD_IN              <= x"ff";
        wait until rising_edge(RX_MAC_CLK);
 -- src mac
        MAC_RXD_IN              <= x"00";
index a21b213dad8d1698ef780ebfb61ea73afbf32ca5..13c691c95eb5bafeeaa4d1cb46be727061e84b14 100755 (executable)
@@ -97,6 +97,8 @@ port(
        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;
+       
+       MAKE_RESET_OUT           : out std_logic;
 
        -- for simulation of receiving part only
        MAC_RX_EOF_IN           : in    std_logic;
@@ -594,6 +596,8 @@ signal pcs_tx_en_q, pcs_tx_er_q, pcs_rx_en_q, pcs_rx_er_q, mac_col_q, mac_crs_q
 signal pcs_txd_qq, pcs_rxd_qq : std_logic_vector(7 downto 0);
 signal pcs_tx_en_qq, pcs_tx_er_qq, pcs_rx_en_qq, pcs_rx_er_qq, mac_col_qq, mac_crs_qq : std_logic;
 
+signal mc_ip_size, mc_udp_size, mc_flags : std_logic_vector(15 downto 0);
+
 begin
 
 --my_mac <= x"efbeefbe0000";  -- temporary
@@ -652,6 +656,10 @@ MAIN_CONTROL : trb_net16_gbe_main_control
          TC_SRC_IP_OUT         => mc_src_ip,
          TC_SRC_UDP_OUT        => mc_src_udp,
          
+         TC_IP_SIZE_OUT                => mc_ip_size,
+         TC_UDP_SIZE_OUT               => mc_udp_size,
+         TC_FLAGS_OFFSET_OUT   => mc_flags,
+         
          TC_BUSY_IN            => mc_busy,
          TC_TRANSMIT_DONE_IN   => mc_transmit_done,
 
@@ -676,6 +684,8 @@ MAIN_CONTROL : trb_net16_gbe_main_control
        GSC_REPLY_READ_OUT       => GSC_REPLY_READ_OUT,
        GSC_BUSY_IN              => GSC_BUSY_IN,
 
+       MAKE_RESET_OUT           => MAKE_RESET_OUT,
+
   -- signal to/from Host interface of TriSpeed MAC
          TSM_HADDR_OUT         => mac_haddr,
          TSM_HDATA_OUT         => mac_hdataout,
@@ -736,6 +746,10 @@ port map(
        MC_SRC_MAC_IN           => mc_src_mac,
        MC_SRC_IP_IN            => mc_src_ip,
        MC_SRC_UDP_IN           => mc_src_udp,
+       
+       MC_IP_SIZE_IN           => mc_ip_size,
+       MC_UDP_SIZE_IN          => mc_udp_size,
+       MC_FLAGS_OFFSET_IN      => mc_flags,
                
        MC_BUSY_OUT             => mc_busy,
        MC_TRANSMIT_DONE_OUT    => mc_transmit_done,
index 6b88e61e6cfedb133737f0e192b760333103c0c0..3e6c8365e2bd433376be9d4664346be648fb6513 100755 (executable)
@@ -245,7 +245,8 @@ begin
                        when SRC_MAC_ADDR =>\r
                                constructNextState <= FRAME_TYPE_S;\r
                        when FRAME_TYPE_S =>\r
-                               if (DEST_IP_ADDRESS_IN /= x"0000_0000") then -- in case of ip frame continue with ip/udp headers \r
+                               --if (DEST_IP_ADDRESS_IN /= x"0000_0000") then -- in case of ip frame continue with ip/udp headers\r
+                               if (FRAME_TYPE_IN = x"0008") then \r
                                        constructNextState <= VERSION;\r
                                else  -- otherwise transmit data as pure ethernet frame\r
                                        constructNextState <= SAVE_DATA;\r
index 659c6fd1dc991d8781b79540164141a3e608aec3..8f248e523c064ee800e9a7e645abe07a44edbf20 100644 (file)
@@ -57,6 +57,10 @@ port (
        TC_SRC_IP_OUT           : out   std_logic_vector(31 downto 0);
        TC_SRC_UDP_OUT          : out   std_logic_vector(15 downto 0);
        
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
+       
        TC_IP_PROTOCOL_OUT      : out   std_logic_vector(7 downto 0);
        
        TC_BUSY_IN              : in    std_logic;
@@ -83,6 +87,8 @@ port (
        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;
+       
+       MAKE_RESET_OUT           : out std_logic;
 
 -- signal to/from Host interface of TriSpeed MAC
        TSM_HADDR_OUT           : out   std_logic_vector(7 downto 0);
@@ -218,6 +224,10 @@ port map(
        TC_SRC_IP_OUT           => TC_SRC_IP_OUT,
        TC_SRC_UDP_OUT          => TC_SRC_UDP_OUT,
        
+       TC_IP_SIZE_OUT          => TC_IP_SIZE_OUT,
+       TC_UDP_SIZE_OUT         => TC_UDP_SIZE_OUT,
+       TC_FLAGS_OFFSET_OUT     => TC_FLAGS_OFFSET_OUT,
+       
        TC_BUSY_IN              => TC_BUSY_IN,
        
        RECEIVED_FRAMES_OUT     => SELECT_REC_FRAMES_OUT,
@@ -237,6 +247,8 @@ port map(
        GSC_REPLY_PACKET_NUM_IN  => GSC_REPLY_PACKET_NUM_IN,
        GSC_REPLY_READ_OUT       => GSC_REPLY_READ_OUT,
        GSC_BUSY_IN              => GSC_BUSY_IN,
+               
+       MAKE_RESET_OUT           => MAKE_RESET_OUT,
        
        -- input for statistics from outside
        STAT_DATA_IN       => stat_data,
index 571fed2c7332a71f6e77ff1fca038090e332403b..4ce6d0cde6fb335494fb769c21de34386d379bf7 100644 (file)
@@ -51,6 +51,10 @@ port (
        TC_SRC_IP_OUT           : out   std_logic_vector(31 downto 0);
        TC_SRC_UDP_OUT          : out   std_logic_vector(15 downto 0);
        
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
+       
        TC_BUSY_IN              : in    std_logic;
        
        -- counters from response constructors
@@ -72,6 +76,8 @@ port (
        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;
+       
+       MAKE_RESET_OUT           : out std_logic;
 
        -- input for statistics from outside    
        STAT_DATA_IN             : in std_logic_vector(31 downto 0);
@@ -109,6 +115,9 @@ signal stat_data                : std_logic_vector((c_MAX_PROTOCOLS + 1) * 32 -
 signal stat_addr                : std_logic_vector((c_MAX_PROTOCOLS + 1) * 8 - 1 downto 0);
 signal stat_rdy                 : std_logic_vector((c_MAX_PROTOCOLS + 1) - 1 downto 0);
 signal stat_ack                 : std_logic_vector((c_MAX_PROTOCOLS + 1) - 1 downto 0);
+signal tc_ip_size               : std_logic_vector((c_MAX_PROTOCOLS + 1) * 16 - 1 downto 0);
+signal tc_udp_size              : std_logic_vector((c_MAX_PROTOCOLS + 1) * 16 - 1 downto 0);
+signal tc_flags_size            : std_logic_vector((c_MAX_PROTOCOLS + 1) * 16 - 1 downto 0);
 
 begin
 
@@ -148,6 +157,10 @@ port map (
        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),
        
+       TC_IP_SIZE_OUT          => tc_ip_size(1 * 16 - 1 downto 0 * 16),
+       TC_UDP_SIZE_OUT         => tc_udp_size(1 * 16 - 1 downto 0 * 16),
+       TC_FLAGS_OFFSET_OUT     => tc_flags_size(1 * 16 - 1 downto 0 * 16),
+       
        TC_BUSY_IN              => TC_BUSY_IN,
        
        STAT_DATA_OUT => stat_data(1 * 32 - 1 downto 0 * 32),
@@ -195,6 +208,10 @@ port map (
        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),
+       
+       TC_IP_SIZE_OUT          => tc_ip_size(2 * 16 - 1 downto 1 * 16),
+       TC_UDP_SIZE_OUT         => tc_udp_size(2 * 16 - 1 downto 1 * 16),
+       TC_FLAGS_OFFSET_OUT     => tc_flags_size(2 * 16 - 1 downto 1 * 16),
         
        TC_BUSY_IN              => TC_BUSY_IN,
        
@@ -248,6 +265,10 @@ port map (
        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),
        
+       TC_IP_SIZE_OUT          => tc_ip_size(3 * 16 - 1 downto 2 * 16),
+       TC_UDP_SIZE_OUT         => tc_udp_size(3 * 16 - 1 downto 2 * 16),
+       TC_FLAGS_OFFSET_OUT     => tc_flags_size(3 * 16 - 1 downto 2 * 16),
+       
        TC_BUSY_IN              => TC_BUSY_IN,
        
        STAT_DATA_OUT => stat_data(3 * 32 - 1 downto 2 * 32),
@@ -295,6 +316,10 @@ port map (
        TC_SRC_IP_OUT           => tc_src_ip(4 * 32 - 1 downto 3 * 32),
        TC_SRC_UDP_OUT          => tc_src_udp(4 * 16 - 1 downto 3 * 16),
        
+       TC_IP_SIZE_OUT          => tc_ip_size(4 * 16 - 1 downto 3 * 16),
+       TC_UDP_SIZE_OUT         => tc_udp_size(4 * 16 - 1 downto 3 * 16),
+       TC_FLAGS_OFFSET_OUT     => tc_flags_size(4 * 16 - 1 downto 3 * 16),
+       
        TC_BUSY_IN              => TC_BUSY_IN,
        
        STAT_DATA_OUT => stat_data(4 * 32 - 1 downto 3 * 32),
@@ -316,10 +341,13 @@ port map (
        GSC_REPLY_READ_OUT       => GSC_REPLY_READ_OUT,
        GSC_BUSY_IN              => GSC_BUSY_IN,
        
+       MAKE_RESET_OUT           => MAKE_RESET_OUT,
+       
        
        DEBUG_OUT               => PROTOS_DEBUG_OUT(4 * 32 - 1 downto 3 * 32)
 );
 
+--stat_gen : if g_SIMULATE = 0 generate
 Stat : trb_net16_gbe_response_constructor_Stat
 generic map( STAT_ADDRESS_BASE => 10
 )
@@ -355,6 +383,10 @@ port map (
        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),
        
+       TC_IP_SIZE_OUT          => tc_ip_size(5 * 16 - 1 downto 4 * 16),
+       TC_UDP_SIZE_OUT         => tc_udp_size(5 * 16 - 1 downto 4 * 16),
+       TC_FLAGS_OFFSET_OUT     => tc_flags_size(5 * 16 - 1 downto 4 * 16),
+       
        TC_BUSY_IN              => TC_BUSY_IN,
        
        STAT_DATA_OUT => stat_data(5 * 32 - 1 downto 4 * 32),
@@ -371,6 +403,7 @@ port map (
        STAT_DATA_RDY_IN => stat_rdy,
        STAT_DATA_ACK_OUT  => stat_ack
 );
+--end generate;
 
 --***************
 -- DO NOT TOUCH,  response selection logic
@@ -401,6 +434,9 @@ begin
                        TC_SRC_IP_OUT         <= (others => '0');
                        TC_SRC_UDP_OUT        <= (others => '0');
                        TC_IP_PROTOCOL_OUT    <= (others => '0');
+                       TC_IP_SIZE_OUT        <= (others => '0');
+                       TC_UDP_SIZE_OUT       <= (others => '0');
+                       TC_FLAGS_OFFSET_OUT   <= (others => '0');
                        PS_RESPONSE_READY_OUT <= '0';
                        selected              <= (others => '0');
                        found := false;
@@ -418,6 +454,9 @@ begin
                                                TC_SRC_IP_OUT         <= tc_src_ip((i + 1) * 32 - 1 downto i * 32);
                                                TC_SRC_UDP_OUT        <= tc_src_udp((i + 1) * 16 - 1 downto i * 16);
                                                TC_IP_PROTOCOL_OUT    <= tc_ip_proto((i + 1) * 8 - 1 downto i * 8);
+                                               TC_IP_SIZE_OUT        <= tc_ip_size((i + 1) * 16 - 1 downto i * 16);
+                                               TC_UDP_SIZE_OUT       <= tc_udp_size((i + 1) * 16 - 1 downto i * 16);
+                                               TC_FLAGS_OFFSET_OUT   <= tc_flags_size((i + 1) * 16 - 1 downto i * 16);
                                                PS_RESPONSE_READY_OUT <= '1';
                                                selected(i)           <= '1';
                                                found := true;
@@ -437,6 +476,9 @@ begin
                                TC_SRC_IP_OUT         <= (others => '0');
                                TC_SRC_UDP_OUT        <= (others => '0');
                                TC_IP_PROTOCOL_OUT    <= (others => '0');
+                               TC_IP_SIZE_OUT        <= (others => '0');
+                               TC_UDP_SIZE_OUT       <= (others => '0');
+                               TC_FLAGS_OFFSET_OUT   <= (others => '0');
                                PS_RESPONSE_READY_OUT <= '0';
                                found := false;
                        end if;
index 4acdfdf12c39747a1b22a1b75a32b2b7d6178293..c818698ff7d5176e349f7f217879e9dc2fe9b994 100644 (file)
@@ -46,7 +46,10 @@ port (
        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);
-       
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
+               
        TC_BUSY_IN              : in    std_logic;
        
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);
@@ -258,6 +261,10 @@ TC_SRC_MAC_OUT    <= g_MY_MAC;
 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_IP_SIZE_OUT    <= (others => '0');  -- doesn't matter
+TC_UDP_SIZE_OUT   <= (others => '0'); -- doesn't matter
+TC_FLAGS_OFFSET_OUT <= (others => '0');  -- doesn't matter
+
 
 -- **** statistice
 REC_FRAMES_PROC : process(CLK)
index 6be440258dda34547deee02f02f11356a6e71d14..62928ad18acd9c28746c47e53c3624fb06721b69 100644 (file)
@@ -46,6 +46,9 @@ port (
        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);
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
        
        TC_BUSY_IN              : in    std_logic;
        
@@ -619,8 +622,12 @@ PS_RESPONSE_READY_OUT <= '0' when (construct_current_state = IDLE) else '1';
 
 -- fixed sizes for discover and request messages
 TC_FRAME_SIZE_OUT <= x"0103" when (main_current_state = SENDING_DISCOVER) else x"0109";
+TC_IP_SIZE_OUT <= x"0103" when (main_current_state = SENDING_DISCOVER) else x"0109";
+TC_UDP_SIZE_OUT <=  x"0103" when (main_current_state = SENDING_DISCOVER) else x"0109";
 
-TC_FRAME_TYPE_OUT <= x"0008";  -- frame type: ip 
+TC_FRAME_TYPE_OUT <= x"0008";  -- frame type: ip
+
+TC_FLAGS_OFFSET_OUT <= (others => '0');  -- doesn't matter 
 
 -- **** statistics
 REC_FRAMES_PROC : process(CLK)
index 8cd7407cc03a06d8f6f1e5dd83098de17060c3c2..cc21aedf92b7dcd760dd3e66d829cc787ea9b939 100644 (file)
@@ -47,8 +47,12 @@ port (
        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);
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
        
        TC_BUSY_IN              : in    std_logic;
+       
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);
        STAT_ADDR_OUT : out std_logic_vector(7 downto 0);
        STAT_DATA_RDY_OUT : out std_logic;
@@ -287,6 +291,8 @@ PS_BUSY_OUT <= '0' when (dissect_current_state = IDLE) else '1';
 PS_RESPONSE_READY_OUT <= '1' when (dissect_current_state = WAIT_FOR_LOAD or dissect_current_state = LOAD_FRAME or dissect_current_state = CLEANUP) else '0';
 
 TC_FRAME_SIZE_OUT <= std_logic_vector(to_unsigned(data_length, 16));
+TC_IP_SIZE_OUT    <= std_logic_vector(to_unsigned(data_length, 16));
+TC_UDP_SIZE_OUT   <= std_logic_vector(to_unsigned(data_length, 16));
 
 TC_FRAME_TYPE_OUT <= x"0008";
 TC_DEST_UDP_OUT   <= x"0000";  -- not used
@@ -294,6 +300,7 @@ TC_SRC_MAC_OUT    <= g_MY_MAC;
 TC_SRC_IP_OUT     <= g_MY_IP;
 TC_SRC_UDP_OUT    <= x"0000";  -- not used
 TC_IP_PROTOCOL_OUT <= X"01"; -- ICMP
+TC_FLAGS_OFFSET_OUT <= (others => '0');  -- doesn't matter
 
 ADDR_PROC : process(CLK)
 begin
@@ -345,7 +352,7 @@ begin
        end if;
 end process STATS_MACHINE_PROC;
 
-STATS_MACHINE : process(stats_current_state, PS_WR_EN_IN, PS_ACTIVATE_IN, STAT_DATA_ACK_IN, PS_DATA_IN,dissect_current_state, dissect_current_state)
+STATS_MACHINE : process(stats_current_state, PS_WR_EN_IN, PS_ACTIVATE_IN, STAT_DATA_ACK_IN, PS_DATA_IN, dissect_current_state)
 begin
 
        case (stats_current_state) is
index 90d1691f6d9f13866cde17da5cafdfd9b153cb4a..021a34b1210688f019d76a2f4ee048fcb817a2e2 100644 (file)
@@ -44,6 +44,9 @@ generic ( STAT_ADDRESS_BASE : integer := 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);
+               TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+               TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+               TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
                
                TC_BUSY_IN              : in    std_logic;
 
@@ -67,6 +70,7 @@ generic ( STAT_ADDRESS_BASE : integer := 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;
+               MAKE_RESET_OUT           : out std_logic;
        -- end of protocol specific ports
        
        -- debug
@@ -78,7 +82,7 @@ architecture RTL of trb_net16_gbe_response_constructor_SCTRL is
 
 attribute syn_encoding : string;
 
-type dissect_states is (IDLE, READ_FRAME, WAIT_FOR_HUB, LOAD_TO_HUB, WAIT_FOR_RESPONSE, SAVE_RESPONSE, LOAD_FRAME, WAIT_FOR_LOAD, CLEANUP);
+type dissect_states is (IDLE, READ_FRAME, WAIT_FOR_HUB, LOAD_TO_HUB, WAIT_FOR_RESPONSE, SAVE_RESPONSE, LOAD_FRAME, DIVIDE, WAIT_FOR_LOAD, CLEANUP, WAIT_FOR_LOAD_ACK, LOAD_ACK);
 signal dissect_current_state, dissect_next_state : dissect_states;
 attribute syn_encoding of dissect_current_state: signal is "safe,gray";
 
@@ -105,6 +109,7 @@ signal gsc_init_dataready       : std_logic;
 
 signal tx_data_ctr              : std_logic_vector(15 downto 0);
 signal tx_loaded_ctr            : std_logic_vector(15 downto 0);
+signal tx_frame_loaded          : std_logic_vector(15 downto 0);
 
 signal packet_num               : std_logic_vector(2 downto 0);
 
@@ -113,9 +118,15 @@ signal rx_empty, tx_empty       : std_logic;
 
 signal rx_full, tx_full         : std_logic;
 
+signal size_left                : std_logic_vector(15 downto 0);
+
+signal make_reset               : std_logic;
+
        
 begin
 
+make_reset <= '0';
+
 receive_fifo : fifo_2048x8x16
   PORT map(
     Reset            => RESET,
@@ -143,7 +154,7 @@ gsc_init_dataready <= '1' when (GSC_INIT_READ_IN = '1' and dissect_current_state
                                                                (dissect_current_state = WAIT_FOR_HUB) else '0';
 GSC_INIT_DATAREADY_OUT  <= gsc_init_dataready;
 
-transmit_fifo : fifo_1024x16x8
+transmit_fifo : fifo_65536x18x9  --fifo_1024x16x8
   PORT map(
     Reset             => RESET,
        RPReset           => RESET,
@@ -163,11 +174,32 @@ transmit_fifo : fifo_1024x16x8
 tx_fifo_wr              <= '1' when GSC_REPLY_DATAREADY_IN = '1' and gsc_reply_read = '1' else '0';
 tx_fifo_rd              <= '1' when TC_RD_EN_IN = '1' and dissect_current_state = LOAD_FRAME else '0';
 
-TC_DATA_OUT(7 downto 0) <= tx_fifo_q(7 downto 0) when dissect_current_state = LOAD_FRAME else (others => '0');
-TC_DATA_OUT(8)          <= '1' when tx_loaded_ctr = tx_data_ctr and dissect_current_state = LOAD_FRAME else '0';
+TC_DATA_PROC : process(dissect_current_state, tx_loaded_ctr, tx_data_ctr)
+begin
+       if (dissect_current_state = LOAD_FRAME) then
+               TC_DATA_OUT(7 downto 0) <= tx_fifo_q(7 downto 0);
+               if (tx_loaded_ctr = tx_data_ctr or tx_frame_loaded = g_MAX_FRAME_SIZE - x"1") then
+                       TC_DATA_OUT(8) <= '1';
+               else
+                       TC_DATA_OUT(8) <= '0';
+               end if;
+       elsif (dissect_current_state = LOAD_ACK) then
+               TC_DATA_OUT(7 downto 0) <= tx_loaded_ctr(7 downto 0);
+               if (tx_loaded_ctr = x"0010" - x"1") then
+                       TC_DATA_OUT(8) <= '1';
+               else
+                       TC_DATA_OUT(8) <= '0';
+               end if;
+       else
+               TC_DATA_OUT <= (others => '0');
+       end if;
+end process TC_DATA_PROC;
+--TC_DATA_OUT(7 downto 0) <= tx_fifo_q(7 downto 0) when dissect_current_state = LOAD_FRAME else (others => '0');
+--TC_DATA_OUT(8)          <= '1' when ((tx_loaded_ctr = tx_data_ctr or tx_frame_loaded = g_MAX_FRAME_SIZE - x"1") and dissect_current_state = LOAD_FRAME) else '0';
 GSC_REPLY_READ_OUT      <= gsc_reply_read;
 gsc_reply_read          <= '1' when dissect_current_state = WAIT_FOR_RESPONSE or dissect_current_state = SAVE_RESPONSE else '0';
 
+-- counter of data received from TRBNet hub
 TX_DATA_CTR_PROC : process(CLK)
 begin
        if rising_edge(CLK) then
@@ -179,31 +211,101 @@ begin
        end if;
 end process TX_DATA_CTR_PROC;
 
+-- total counter of data transported to frame constructor
 TX_LOADED_CTR_PROC : process(CLK)
 begin
        if rising_edge(CLK) then
-               if (RESET = '1' or dissect_current_state = IDLE) then
+               if (RESET = '1' or dissect_current_state = IDLE or dissect_current_state = WAIT_FOR_HUB) then
                        tx_loaded_ctr <= (others => '0');
                elsif (dissect_current_state = LOAD_FRAME and TC_RD_EN_IN = '1' and PS_SELECTED_IN = '1') then
                        tx_loaded_ctr <= tx_loaded_ctr + x"1";
+               elsif (dissect_current_state = LOAD_ACK and TC_RD_EN_IN = '1' and PS_SELECTED_IN = '1') then
+                       tx_loaded_ctr <= tx_loaded_ctr + x"1";
                end if;
        end if;
 end process TX_LOADED_CTR_PROC;
 
 PS_BUSY_OUT <= '0' when (dissect_current_state = IDLE) else '1';
 
-PS_RESPONSE_READY_OUT <= '1' when (dissect_current_state = WAIT_FOR_LOAD or dissect_current_state = LOAD_FRAME or dissect_current_state = CLEANUP) else '0';
+PS_RESPONSE_READY_OUT <= '1' when (dissect_current_state = WAIT_FOR_LOAD or dissect_current_state = LOAD_FRAME or 
+                                                                       dissect_current_state = CLEANUP or dissect_current_state = WAIT_FOR_LOAD_ACK or
+                                                                       dissect_current_state = LOAD_ACK or dissect_current_state = DIVIDE)
+                                               else '0';
+--PS_RESPONSE_READY_OUT <= '1' when (dissect_current_state = WAIT_FOR_LOAD or dissect_current_state = LOAD_FRAME or 
+--                                                                     dissect_current_state = CLEANUP or dissect_current_state = DIVIDE)
+--                                             else '0';
 
-TC_FRAME_SIZE_OUT  <= tx_data_ctr;
+--TC_FRAME_SIZE_OUT  <= tx_data_ctr;
 
 TC_FRAME_TYPE_OUT  <= x"0008";
 TC_DEST_MAC_OUT    <= PS_SRC_MAC_ADDRESS_IN;
 TC_DEST_IP_OUT     <= PS_SRC_IP_ADDRESS_IN;
-TC_DEST_UDP_OUT    <= PS_SRC_UDP_PORT_IN; --x"a861";
+TC_DEST_UDP_OUT    <= x"a861";
 TC_SRC_MAC_OUT     <= g_MY_MAC;
 TC_SRC_IP_OUT      <= g_MY_IP;
 TC_SRC_UDP_OUT     <= x"a861";
-TC_IP_PROTOCOL_OUT <= X"11";
+TC_IP_PROTOCOL_OUT <= x"11";
+
+FRAME_SIZE_PROC : process(CLK)
+begin
+       if rising_edge(CLK) then
+               if (RESET = '1') then
+                       TC_FRAME_SIZE_OUT <= (others => '0');
+               elsif (dissect_current_state = WAIT_FOR_LOAD or dissect_current_state = DIVIDE) then
+                       if  (size_left >= g_MAX_FRAME_SIZE) then
+                               TC_FRAME_SIZE_OUT <= g_MAX_FRAME_SIZE;
+                       else
+                               TC_FRAME_SIZE_OUT <= size_left;
+                       end if;
+               elsif (dissect_current_state = WAIT_FOR_LOAD_ACK) then
+                       TC_FRAME_SIZE_OUT <= x"0010";
+               end if;
+       end if;
+end process FRAME_SIZE_PROC;
+
+IP_SIZE_PROC : process(CLK)
+begin
+       if rising_edge(CLK) then
+               if (RESET= '1') then
+                       TC_IP_SIZE_OUT <= (others => '0');
+               elsif ((dissect_current_state = DIVIDE and TC_RD_EN_IN = '1' and PS_SELECTED_IN = '1') or (dissect_current_state = WAIT_FOR_LOAD)) then
+                       if (size_left >= g_MAX_FRAME_SIZE) then
+                               TC_IP_SIZE_OUT <= g_MAX_FRAME_SIZE;
+                       else
+                               TC_IP_SIZE_OUT <= size_left(15 downto 0);
+                       end if;
+               end if;
+       end if;
+end process IP_SIZE_PROC;
+TC_UDP_SIZE_OUT     <= tx_data_ctr;
+
+
+TC_FLAGS_OFFSET_OUT(15 downto 14) <= "00";
+MORE_FRAGMENTS_PROC : process(CLK)
+begin
+       if rising_edge(CLK) then
+               if (RESET = '1') or (dissect_current_state = IDLE) or (dissect_current_state = CLEANUP) then
+                       TC_FLAGS_OFFSET_OUT(13) <= '0';
+               elsif ((dissect_current_state = DIVIDE and TC_BUSY_IN = '0' and PS_SELECTED_IN = '1') or (dissect_current_state = WAIT_FOR_LOAD)) then
+                       if ((tx_data_ctr - tx_loaded_ctr) < g_MAX_FRAME_SIZE) then
+                               TC_FLAGS_OFFSET_OUT(13) <= '0';  -- no more fragments
+                       else
+                               TC_FLAGS_OFFSET_OUT(13) <= '1';  -- more fragments
+                       end if;
+               end if;
+       end if;
+end process MORE_FRAGMENTS_PROC;
+
+OFFSET_PROC : process(CLK)
+begin
+       if rising_edge(CLK) then
+               if (RESET = '1') or (dissect_current_state = IDLE) or (dissect_current_state = CLEANUP) then
+                       TC_FLAGS_OFFSET_OUT(12 downto 0) <= (others => '0');
+               elsif (dissect_current_state = DIVIDE and TC_BUSY_IN = '0' and PS_SELECTED_IN = '1') then
+                       TC_FLAGS_OFFSET_OUT(12 downto 0) <= tx_loaded_ctr(15 downto 3);
+               end if;
+       end if;
+end process OFFSET_PROC;
 
 
 PACKET_NUM_PROC : process(CLK)
@@ -224,14 +326,18 @@ DISSECT_MACHINE_PROC : process(CLK)
 begin
        if rising_edge(CLK) then
                if (RESET = '1') then
-                       dissect_current_state <= IDLE;
+                       if (g_SIMULATE = 0) then
+                               dissect_current_state <= IDLE;
+                       else
+                               dissect_current_state <= WAIT_FOR_RESPONSE;
+                       end if;
                else
                        dissect_current_state <= dissect_next_state;
                end if;
        end if;
 end process DISSECT_MACHINE_PROC;
 
-DISSECT_MACHINE : process(dissect_current_state, PS_WR_EN_IN, PS_ACTIVATE_IN, PS_DATA_IN, TC_BUSY_IN, data_ctr, PS_SELECTED_IN, GSC_INIT_READ_IN, GSC_REPLY_DATAREADY_IN, tx_loaded_ctr, tx_data_ctr, rx_fifo_q, GSC_BUSY_IN)
+DISSECT_MACHINE : process(dissect_current_state, make_reset, PS_WR_EN_IN, PS_ACTIVATE_IN, PS_DATA_IN, TC_BUSY_IN, data_ctr, PS_SELECTED_IN, GSC_INIT_READ_IN, GSC_REPLY_DATAREADY_IN, tx_loaded_ctr, tx_data_ctr, rx_fifo_q, GSC_BUSY_IN, tx_frame_loaded, g_MAX_FRAME_SIZE)
 begin
        case dissect_current_state is
        
@@ -246,11 +352,31 @@ begin
                when READ_FRAME =>
                        state <= x"2";
                        if (PS_DATA_IN(8) = '1') then
-                               dissect_next_state <= WAIT_FOR_HUB;
+                               if (make_reset = '1') then  -- send ack only if reset command came
+                                       dissect_next_state <= WAIT_FOR_LOAD_ACK;
+                               else
+                                       dissect_next_state <= WAIT_FOR_HUB;
+                               end if;
                        else
                                dissect_next_state <= READ_FRAME;
                        end if;
                        
+               when WAIT_FOR_LOAD_ACK =>
+                       state <= x"a";
+                       if (TC_BUSY_IN = '0' and PS_SELECTED_IN = '1') then
+                               dissect_next_state <= LOAD_ACK;
+                       else
+                               dissect_next_state <= WAIT_FOR_LOAD_ACK;
+                       end if;
+                       
+               when LOAD_ACK =>
+                       state <= x"b";
+                       if (tx_loaded_ctr = x"0010") then
+                               dissect_next_state <= WAIT_FOR_HUB;
+                       else
+                               dissect_next_state <= LOAD_ACK;
+                       end if;
+                       
                when WAIT_FOR_HUB =>
                        state <= x"3";
                        if (GSC_INIT_READ_IN = '1') then
@@ -295,9 +421,19 @@ begin
                        state <= x"8";
                        if (tx_loaded_ctr = tx_data_ctr) then
                                dissect_next_state <= CLEANUP;
+                       elsif (tx_frame_loaded = g_MAX_FRAME_SIZE - x"1") then
+                               dissect_next_state <= DIVIDE;
                        else
                                dissect_next_state <= LOAD_FRAME;
                        end if;
+
+               when DIVIDE =>
+                       state <= x"c";
+                       if (TC_BUSY_IN = '0' and PS_SELECTED_IN = '1') then
+                               dissect_next_state <= LOAD_FRAME;
+                       else
+                               dissect_next_state <= DIVIDE;
+                       end if;
                
                when CLEANUP =>
                        state <= x"9";
@@ -306,6 +442,39 @@ begin
        end case;
 end process DISSECT_MACHINE;
 
+-- counter of bytes of currently constructed frame
+FRAME_LOADED_PROC : process(CLK)
+begin
+       if rising_edge(CLK) then
+               if (RESET = '1' or dissect_current_state = DIVIDE or dissect_current_state = IDLE) then
+                       tx_frame_loaded <= (others => '0');
+               elsif (dissect_current_state = LOAD_FRAME and TC_RD_EN_IN = '1' and PS_SELECTED_IN = '1') then
+                       tx_frame_loaded <= tx_frame_loaded + x"1";
+               end if;
+       end if;
+end process FRAME_LOADED_PROC;
+
+-- counter down to 0 of bytes that have to be transmitted for a given packet
+SIZE_LEFT_PROC : process(CLK)
+begin
+       if rising_edge(CLK) then
+               if (RESET = '1' or dissect_current_state = SAVE_RESPONSE) then
+                       size_left <= (others => '0');
+               elsif (dissect_current_state = WAIT_FOR_LOAD) then
+                       size_left <= tx_data_ctr;
+               elsif (dissect_current_state = LOAD_FRAME and TC_RD_EN_IN = '1' and PS_SELECTED_IN = '1') then
+                       size_left <= size_left - x"1";
+               end if;
+       end if;
+end process SIZE_LEFT_PROC;
+
+
+
+
+
+
+
+
 
 
 -- statistics
index cc5f13ec519cbab566b94c245a9f35a01354338c..476b8799941fcc16b90a1200c70cde96f8d8c2cb 100644 (file)
@@ -63,6 +63,10 @@ port (
        TC_SRC_IP_OUT           : out   std_logic_vector(31 downto 0);
        TC_SRC_UDP_OUT          : out   std_logic_vector(15 downto 0);
        
+       TC_IP_SIZE_OUT      : out       std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT     : out       std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT : out       std_logic_vector(15 downto 0);
+       
        TC_BUSY_IN              : in    std_logic;
        
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);
@@ -294,5 +298,9 @@ TC_SRC_IP_OUT   <= g_MY_IP;
 TC_SRC_UDP_OUT  <= x"51c3";
 TC_IP_PROTOCOL_OUT <= x"11"; -- udp
 
+TC_IP_SIZE_OUT    <= x"0100";
+TC_UDP_SIZE_OUT   <= x"0100";
+TC_FLAGS_OFFSET_OUT <= (others => '0');
+
 end Behavioral;
 
index a24592d7db1dd7931e7072ed89a57198471382a1..f14ba49806d5471b05f32471768640c33490f091 100644 (file)
@@ -55,6 +55,10 @@ port (
        
        MC_IP_PROTOCOL_IN       : in    std_logic_vector(7 downto 0);
        
+       MC_IP_SIZE_IN           : in    std_logic_vector(15 downto 0);
+       MC_UDP_SIZE_IN          : in    std_logic_vector(15 downto 0);
+       MC_FLAGS_OFFSET_IN      : in    std_logic_vector(15 downto 0);
+       
        MC_BUSY_OUT             : out   std_logic;
        MC_TRANSMIT_DONE_OUT    : out   std_logic;
 
@@ -223,10 +227,15 @@ begin
          FC_EOD_OUT        <= '0';
        end if;
 
+       if (MC_FRAME_TYPE_IN = x"0008") then  -- in case of ip
+               FC_IP_SIZE_OUT <= MC_IP_SIZE_IN;
+               FC_UDP_SIZE_OUT <= MC_UDP_SIZE_IN;
+       else
+               FC_IP_SIZE_OUT <= MC_FRAME_SIZE_IN;
+               FC_UDP_SIZE_OUT <= MC_FRAME_SIZE_IN;
+       end if;
        
-       FC_IP_SIZE_OUT      <= MC_FRAME_SIZE_IN;
-       FC_UDP_SIZE_OUT     <= MC_FRAME_SIZE_IN;
-       FC_FLAGS_OFFSET_OUT <= (others => '0'); -- fixed to one-frame packets
+       FC_FLAGS_OFFSET_OUT <= MC_FLAGS_OFFSET_IN; --(others => '0'); -- fixed to one-frame packets
 
        if (ctrl_construct_current_state = WAIT_FOR_FC) and (FC_H_READY_IN = '1') then
          MC_RD_EN_OUT  <= '1';
@@ -312,9 +321,9 @@ begin
     when LOAD_DATA =>
       state2 <= x"3";
       if (sent_bytes_ctr = MC_FRAME_SIZE_IN - x"1") then
-       ctrl_construct_next_state <= CLOSE;
+                       ctrl_construct_next_state <= CLOSE;
       else
-       ctrl_construct_next_state <= LOAD_DATA; 
+                       ctrl_construct_next_state <= LOAD_DATA; 
       end if;
 
     when CLOSE =>
index a140e4ad0ae97eb1bd3b1a984c19955fdbafacdc..5bbb2d9a05856227569cfeb53792522a73e3bffd 100644 (file)
@@ -95,6 +95,8 @@ port(
        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;
+       
+       MAKE_RESET_OUT           : out std_logic;
 
        -- for simulation of receiving part only
        MAC_RX_EOF_IN           : in    std_logic;
@@ -176,6 +178,10 @@ port (
        TC_SRC_IP_OUT           : out   std_logic_vector(31 downto 0);
        TC_SRC_UDP_OUT          : out   std_logic_vector(15 downto 0);
        
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
+       
        TC_BUSY_IN              : in    std_logic;
        
        -- counters from response constructors
@@ -198,6 +204,8 @@ port (
        GSC_REPLY_READ_OUT       : out std_logic;
        GSC_BUSY_IN              : in std_logic;
        
+       MAKE_RESET_OUT           : out std_logic;
+       
        -- input for statistics from outside    
        STAT_DATA_IN             : in std_logic_vector(31 downto 0);
        STAT_ADDR_IN             : in std_logic_vector(7 downto 0);
@@ -273,7 +281,11 @@ port (
        TC_SRC_IP_OUT           : out   std_logic_vector(31 downto 0);
        TC_SRC_UDP_OUT          : out   std_logic_vector(15 downto 0);
 
-       TC_IP_PROTOCOL_OUT      : out   std_logic_vector(7 downto 0);   
+       TC_IP_PROTOCOL_OUT      : out   std_logic_vector(7 downto 0);
+       
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);  
        
        TC_BUSY_IN              : in    std_logic;
        TC_TRANSMIT_DONE_IN     : in    std_logic;
@@ -300,6 +312,8 @@ port (
        GSC_REPLY_READ_OUT       : out std_logic;
        GSC_BUSY_IN              : in std_logic;
        
+       MAKE_RESET_OUT           : out std_logic;
+       
 -- signal to/from Host interface of TriSpeed MAC
        TSM_HADDR_OUT           : out   std_logic_vector(7 downto 0);
        TSM_HDATA_OUT           : out   std_logic_vector(7 downto 0);
@@ -363,6 +377,10 @@ port (
        
        MC_IP_PROTOCOL_IN       : in    std_logic_vector(7 downto 0);
        
+       MC_IP_SIZE_IN           : in    std_logic_vector(15 downto 0);
+       MC_UDP_SIZE_IN          : in    std_logic_vector(15 downto 0);
+       MC_FLAGS_OFFSET_IN      : in    std_logic_vector(15 downto 0);
+       
        MC_BUSY_OUT             : out   std_logic;
        MC_TRANSMIT_DONE_OUT    : out   std_logic;
 
@@ -893,6 +911,21 @@ port(
 );
 end component;
 
+component fifo_65536x18x9 is
+port( 
+       Data    : in    std_logic_vector(17 downto 0);
+       WrClock : in    std_logic;
+       RdClock : in    std_logic;
+       WrEn    : in    std_logic;
+       RdEn    : in    std_logic;
+       Reset   : in    std_logic;
+       RPReset : in    std_logic;
+       Q       : out   std_logic_vector(8 downto 0);
+       Empty   : out   std_logic;
+       Full    : out   std_logic
+);
+end component;
+
 component fifo_2048x8x16 is
 port( 
        Data    : in    std_logic_vector(8 downto 0);
index 8cbbb11f2764ddf2f724d7f1a57f18917a60769e..eb840ca22f9c6a5ca3879b10b34551bf550f995a 100644 (file)
@@ -14,6 +14,9 @@ signal g_MY_IP                : std_logic_vector(31 downto 0);
 -- g_MY_MAC is being set by Main Controller
 signal g_MY_MAC               : std_logic_vector(47 downto 0);
 
+-- size of ethernet frame use for fragmentation of outgoing packets
+signal g_MAX_FRAME_SIZE       : std_logic_vector(15 downto 0) := x"0578";
+
 constant c_MAX_FRAME_TYPES    : integer range 1 to 16 := 2;
 constant c_MAX_PROTOCOLS      : integer range 1 to 16 := 5;
 constant c_MAX_IP_PROTOCOLS   : integer range 1 to 16 := 2;
@@ -105,6 +108,9 @@ port (
        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);
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
        TC_BUSY_IN              : in    std_logic;
        
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);
@@ -235,6 +241,9 @@ port (
        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);
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
        TC_BUSY_IN              : in    std_logic;
        
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);
@@ -285,7 +294,9 @@ port (
        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);
-       
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
        TC_BUSY_IN              : in    std_logic;
        
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);
@@ -376,7 +387,9 @@ generic ( STAT_ADDRESS_BASE : integer := 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);
-               
+               TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+               TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+               TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
                TC_BUSY_IN              : in    std_logic;
                
                STAT_DATA_OUT : out std_logic_vector(31 downto 0);
@@ -399,6 +412,7 @@ generic ( STAT_ADDRESS_BASE : integer := 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;
+               MAKE_RESET_OUT           : out std_logic;
        -- end of protocol specific ports
        
        -- debug
@@ -438,7 +452,9 @@ port (
        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);
-       
+       TC_IP_SIZE_OUT          : out   std_logic_vector(15 downto 0);
+       TC_UDP_SIZE_OUT         : out   std_logic_vector(15 downto 0);
+       TC_FLAGS_OFFSET_OUT     : out   std_logic_vector(15 downto 0);
        TC_BUSY_IN              : in    std_logic;
        
        STAT_DATA_OUT : out std_logic_vector(31 downto 0);