Compare commits

...

2 Commits

Author SHA1 Message Date
3240f363ba arp: Reformat code 2022-10-29 19:19:16 +02:00
a5d5ca280d arp: Add timeout 2022-10-29 19:18:51 +02:00
2 changed files with 41 additions and 13 deletions

View File

@ -215,9 +215,13 @@ architecture eth of top_hwitl is
signal arp_in : arp_in_t;
begin
trashernet_arp_inst : entity trashernet.trashernet_arp
generic map(
TIMEOUT_TICK_FREQ => F_CLK
)
port map(
clk => clk,
rst => rst,
timeout_tick => '1',
mac_config => ETH_CONFIG,
ip_config => IP_CONFIG,
arp_out => arp_out,

View File

@ -16,10 +16,14 @@ use ieee.numeric_std.all;
use work.trashernet_pkg.all;
entity trashernet_arp is
generic(
TIMEOUT_TICK_FREQ : integer
);
port(
-- Global
clk : in std_logic; -- Global clock
rst : in std_logic; -- Asynchronous reset
timeout_tick : in std_logic; -- Global timeout tick strobe
-- Configuration
mac_config : in configuration_t; -- Trashernet MAC configuration
@ -43,6 +47,8 @@ architecture rtl of trashernet_arp is
constant OPER_REQUEST : byte_vector := (x"00", x"01");
constant OPER_REPLY : byte_vector := (x"00", x"02");
constant ARP_TIMEOUT : time := 1 sec;
signal arp_tx_reply_rq : std_logic; -- Request to transmit an ARP reply
signal arp_tx_reply_tha : mac_addr_t; -- Target MAC to use in reply (SHA in received packet)
signal arp_tx_reply_tpa : ip_addr_t; -- Target IP to use in reply (SPA in received packet)
@ -55,6 +61,7 @@ architecture rtl of trashernet_arp is
signal arp_rx_reply_stb : std_logic; -- An ARP reply was received (strobe)
signal arp_rx_sha : mac_addr_t; -- The MAC address of the reply sender, valid with arp_rx_reply
signal arp_rx_spa : ip_addr_t; -- The IP address of the reply sender, valid with arp_rx_reply
begin
resolver : block
type resolver_state_t is (IDLE, QUERY_MAC);
@ -111,8 +118,25 @@ begin
end if;
end process arp_resolver_main;
query_mac_found <= '1' when (arp_tx_request_tpa = replied_ip) else '0';
arp_out.arp_mac <= replied_mac;
arp_tx_request_tpa <= arp_in.arp_ip;
timeout_timer_inst : entity work.timer
generic map(
F_TICK => TIMEOUT_TICK_FREQ,
DURATION => ARP_TIMEOUT,
AUTOSTART => false
)
port map(
clk => clk,
rst => rst,
tick => timeout_tick,
start => arp_tx_request_rq,
expired => query_timeout,
expired_stb => open
);
end block resolver;
rx : block