From 381c1d333284aefd8f1b68c2ad7d8b9510ddc921 Mon Sep 17 00:00:00 2001 From: hadeshyp Date: Wed, 23 May 2012 10:51:33 +0000 Subject: [PATCH] *** empty log message *** --- gbe2_ecp3/tb_frame_receiver.vhd | 23 ++- gbe2_ecp3/trb_net16_gbe_buf.vhd | 14 ++ gbe2_ecp3/trb_net16_gbe_frame_constr.vhd | 3 +- gbe2_ecp3/trb_net16_gbe_main_control.vhd | 12 ++ gbe2_ecp3/trb_net16_gbe_protocol_selector.vhd | 42 ++++ ...trb_net16_gbe_response_constructor_ARP.vhd | 9 +- ...rb_net16_gbe_response_constructor_DHCP.vhd | 9 +- ...rb_net16_gbe_response_constructor_Ping.vhd | 9 +- ...b_net16_gbe_response_constructor_SCTRL.vhd | 193 ++++++++++++++++-- ...rb_net16_gbe_response_constructor_Stat.vhd | 8 + gbe2_ecp3/trb_net16_gbe_transmit_control.vhd | 19 +- gbe2_ecp3/trb_net_gbe_components.vhd | 35 +++- gbe2_ecp3/trb_net_gbe_protocols.vhd | 22 +- 13 files changed, 367 insertions(+), 31 deletions(-) diff --git a/gbe2_ecp3/tb_frame_receiver.vhd b/gbe2_ecp3/tb_frame_receiver.vhd index ca330e2..5e13920 100644 --- a/gbe2_ecp3/tb_frame_receiver.vhd +++ b/gbe2_ecp3/tb_frame_receiver.vhd @@ -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"; diff --git a/gbe2_ecp3/trb_net16_gbe_buf.vhd b/gbe2_ecp3/trb_net16_gbe_buf.vhd index a21b213..13c691c 100755 --- a/gbe2_ecp3/trb_net16_gbe_buf.vhd +++ b/gbe2_ecp3/trb_net16_gbe_buf.vhd @@ -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, diff --git a/gbe2_ecp3/trb_net16_gbe_frame_constr.vhd b/gbe2_ecp3/trb_net16_gbe_frame_constr.vhd index 6b88e61..3e6c836 100755 --- a/gbe2_ecp3/trb_net16_gbe_frame_constr.vhd +++ b/gbe2_ecp3/trb_net16_gbe_frame_constr.vhd @@ -245,7 +245,8 @@ begin when SRC_MAC_ADDR => constructNextState <= FRAME_TYPE_S; when FRAME_TYPE_S => - if (DEST_IP_ADDRESS_IN /= x"0000_0000") then -- in case of ip frame continue with ip/udp headers + --if (DEST_IP_ADDRESS_IN /= x"0000_0000") then -- in case of ip frame continue with ip/udp headers + if (FRAME_TYPE_IN = x"0008") then constructNextState <= VERSION; else -- otherwise transmit data as pure ethernet frame constructNextState <= SAVE_DATA; diff --git a/gbe2_ecp3/trb_net16_gbe_main_control.vhd b/gbe2_ecp3/trb_net16_gbe_main_control.vhd index 659c6fd..8f248e5 100644 --- a/gbe2_ecp3/trb_net16_gbe_main_control.vhd +++ b/gbe2_ecp3/trb_net16_gbe_main_control.vhd @@ -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, diff --git a/gbe2_ecp3/trb_net16_gbe_protocol_selector.vhd b/gbe2_ecp3/trb_net16_gbe_protocol_selector.vhd index 571fed2..4ce6d0c 100644 --- a/gbe2_ecp3/trb_net16_gbe_protocol_selector.vhd +++ b/gbe2_ecp3/trb_net16_gbe_protocol_selector.vhd @@ -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; diff --git a/gbe2_ecp3/trb_net16_gbe_response_constructor_ARP.vhd b/gbe2_ecp3/trb_net16_gbe_response_constructor_ARP.vhd index 4acdfdf..c818698 100644 --- a/gbe2_ecp3/trb_net16_gbe_response_constructor_ARP.vhd +++ b/gbe2_ecp3/trb_net16_gbe_response_constructor_ARP.vhd @@ -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) diff --git a/gbe2_ecp3/trb_net16_gbe_response_constructor_DHCP.vhd b/gbe2_ecp3/trb_net16_gbe_response_constructor_DHCP.vhd index 6be4402..62928ad 100644 --- a/gbe2_ecp3/trb_net16_gbe_response_constructor_DHCP.vhd +++ b/gbe2_ecp3/trb_net16_gbe_response_constructor_DHCP.vhd @@ -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) diff --git a/gbe2_ecp3/trb_net16_gbe_response_constructor_Ping.vhd b/gbe2_ecp3/trb_net16_gbe_response_constructor_Ping.vhd index 8cd7407..cc21aed 100644 --- a/gbe2_ecp3/trb_net16_gbe_response_constructor_Ping.vhd +++ b/gbe2_ecp3/trb_net16_gbe_response_constructor_Ping.vhd @@ -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 diff --git a/gbe2_ecp3/trb_net16_gbe_response_constructor_SCTRL.vhd b/gbe2_ecp3/trb_net16_gbe_response_constructor_SCTRL.vhd index 90d1691..021a34b 100644 --- a/gbe2_ecp3/trb_net16_gbe_response_constructor_SCTRL.vhd +++ b/gbe2_ecp3/trb_net16_gbe_response_constructor_SCTRL.vhd @@ -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 diff --git a/gbe2_ecp3/trb_net16_gbe_response_constructor_Stat.vhd b/gbe2_ecp3/trb_net16_gbe_response_constructor_Stat.vhd index cc5f13e..476b879 100644 --- a/gbe2_ecp3/trb_net16_gbe_response_constructor_Stat.vhd +++ b/gbe2_ecp3/trb_net16_gbe_response_constructor_Stat.vhd @@ -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; diff --git a/gbe2_ecp3/trb_net16_gbe_transmit_control.vhd b/gbe2_ecp3/trb_net16_gbe_transmit_control.vhd index a24592d..f14ba49 100644 --- a/gbe2_ecp3/trb_net16_gbe_transmit_control.vhd +++ b/gbe2_ecp3/trb_net16_gbe_transmit_control.vhd @@ -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 => diff --git a/gbe2_ecp3/trb_net_gbe_components.vhd b/gbe2_ecp3/trb_net_gbe_components.vhd index a140e4a..5bbb2d9 100644 --- a/gbe2_ecp3/trb_net_gbe_components.vhd +++ b/gbe2_ecp3/trb_net_gbe_components.vhd @@ -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); diff --git a/gbe2_ecp3/trb_net_gbe_protocols.vhd b/gbe2_ecp3/trb_net_gbe_protocols.vhd index 8cbbb11..eb840ca 100644 --- a/gbe2_ecp3/trb_net_gbe_protocols.vhd +++ b/gbe2_ecp3/trb_net_gbe_protocols.vhd @@ -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); -- 2.43.0