diff --git a/modules/wrsw_rtu/rtu_match.vhd b/modules/wrsw_rtu/rtu_match.vhd index 834a52017c8b3fe978407dc5f9b810523a85f8d6..f9060b69a7b5394a9b5f43d598f570ce5e594682 100644 --- a/modules/wrsw_rtu/rtu_match.vhd +++ b/modules/wrsw_rtu/rtu_match.vhd @@ -364,7 +364,7 @@ begin -- ML (11/04/2013) : to prevent broadcasting of unrecognized frames to CPU s_urec_broadcast_mask(g_num_ports-1 downto 0) <= (others =>'1'); - s_urec_broadcast_mask(c_RTU_MAX_PORTS-1 downto g_num_ports) <= (others =>'1') when (rtu_b_unrec_fw_cpu_i = '1') + s_urec_broadcast_mask(c_RTU_MAX_PORTS-1 downto g_num_ports) <= (others =>'1') when (rtu_b_unrec_fw_cpu_i = '1') else (others =>'0'); zeros <= (others =>'0'); @@ -709,7 +709,7 @@ begin -- ML (24/03/2013): aging bugfix : update aging only for source found -- update aging aram (in any case that entry was found, -- even if dropped later, we update aging aram - s_aram_main_data_o <= rtu_aram_main_data_i or f_onehot_encode(to_integer(unsigned(s_aram_bitsel_msb & htab_entry_i.bucket_entry)), 32); + s_aram_main_data_o <= rtu_aram_main_data_i or f_onehot_encode(to_integer(unsigned(std_logic_vector'(s_aram_bitsel_msb & htab_entry_i.bucket_entry))), 32); s_aram_main_wr <= '1'; ------------------------------------------- diff --git a/modules/wrsw_rtu/xwrsw_rtu_new.vhd b/modules/wrsw_rtu/xwrsw_rtu_new.vhd index 6095bc199e31d1c789f6559a2093601018db4989..b3aed7a9dbd0eaa55c10d7beb112be4c970f8210 100644 --- a/modules/wrsw_rtu/xwrsw_rtu_new.vhd +++ b/modules/wrsw_rtu/xwrsw_rtu_new.vhd @@ -138,7 +138,7 @@ entity xwrsw_rtu_new is g_handle_only_single_req_per_port : boolean := FALSE; g_prio_num : integer; g_num_ports : integer; - g_cpu_port_num : integer := -1; + g_cpu_port_num : integer := -1; --TODO: get rid of this g_match_req_fifo_size : integer := 32; g_port_mask_bits : integer; g_rmon_events_bits_pp : integer := 8); -- rmon events num ber per port @@ -265,6 +265,8 @@ architecture behavioral of xwrsw_rtu_new is signal cpu_port_mask : std_logic_vector(c_rtu_max_ports - 1 downto 0); signal rsp : t_rtu_response_array(g_num_ports-1 downto 0); + signal htab_port : std_logic_vector(g_num_ports - 1 downto 0); + signal htab_src_dst : std_logic; begin zeros <= (others => '0'); @@ -507,6 +509,8 @@ begin htab_fid_o => htab_fid, htab_drdy_i => htab_drdy, htab_entry_i => htab_entry, + htab_port_o => htab_port, -- ML (24/03/2013): aging bugfix + htab_src_dst_o => htab_src_dst, -- ML (24/03/2013): aging bugfix rtu_ufifo_wr_req_o => regs_towb.ufifo_wr_req_i, rtu_ufifo_wr_full_i => regs_fromwb.ufifo_wr_full_o, @@ -546,6 +550,8 @@ begin mfifo_trigger <= regs_fromwb.gcr_mfifotrig_o and regs_fromwb.gcr_mfifotrig_load_o; U_Lookup : rtu_lookup_engine + generic map ( + g_num_ports => g_num_ports) port map ( clk_sys_i => clk_sys_i, clk_match_i => clk_sys_i, @@ -565,6 +571,8 @@ begin mac_i => htab_mac, fid_i => htab_fid, drdy_o => htab_drdy, + port_i => htab_port, -- ML (24/03/2013): aging bugfix + src_dst_i => htab_src_dst, -- ML (24/03/2013): aging bugfix entry_o => htab_entry ); diff --git a/testbench/scb_top/main.sv b/testbench/scb_top/main.sv index f592cd8cb7dc98c5234a9a19b2f7ebda12037e10..2f4f6cd81290d8ba4207effb75d7c1375285fd7d 100644 --- a/testbench/scb_top/main.sv +++ b/testbench/scb_top/main.sv @@ -2005,10 +2005,10 @@ module main; rtu.enable(); $display(">>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"); ///TRU - tru = new(cpu_acc, 'h57000,g_num_ports,1); + tru = new(cpu_acc, 'h58000,g_num_ports,1); init_tru(tru); - tatsu=new(cpu_acc, 'h58000); + tatsu=new(cpu_acc, 'h59000); if(g_tatsu_config == 1) tatsu.drop_at_HP_enable(); fork