diff --git a/libraries/base/dp/tb/vhdl/tb_dp_offload_rx_filter.vhd b/libraries/base/dp/tb/vhdl/tb_dp_offload_rx_filter.vhd
new file mode 100644
index 0000000000000000000000000000000000000000..6af05f8fd88208c5b982a5f766069eef5cce1190
--- /dev/null
+++ b/libraries/base/dp/tb/vhdl/tb_dp_offload_rx_filter.vhd
@@ -0,0 +1,219 @@
+-------------------------------------------------------------------------------
+--
+-- Copyright (C) 2010
+-- ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
+-- JIVE (Joint Institute for VLBI in Europe) <http://www.jive.nl/>
+-- P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-------------------------------------------------------------------------------
+
+-- Purpose:
+--   Test bench for mms_dp_fifo_fill
+-- Description:
+--   The tb creates a data stream and checks if the register can be readline
+--   The value that is read via MM should be checked in the wave window. 
+--
+-- Remark:
+--   It is not possible to check if the wr_full bit is set. That is because of the 
+--   assert in de common_fifo_sc definition. 
+-- 
+-- Usage:
+-- > as 10
+-- > run -all
+-- . signal tb_end will stop the simulation by stopping the clk
+-- 
+LIBRARY IEEE, common_lib;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+USE common_lib.common_pkg.ALL;
+USE common_lib.common_lfsr_sequences_pkg.ALL;
+USE common_lib.tb_common_pkg.ALL;
+USE common_lib.common_mem_pkg.ALL;
+USE common_lib.tb_common_mem_pkg.ALL; 
+USE common_lib.common_field_pkg.ALL;
+USE work.dp_stream_pkg.ALL;
+USE work.tb_dp_pkg.ALL;
+
+ENTITY tb_dp_offload_rx_filter IS
+END tb_dp_offload_rx_filter;
+
+
+ARCHITECTURE tb OF tb_dp_offload_rx_filter IS
+
+  CONSTANT c_nof_stream     : NATURAL := 1; 
+  CONSTANT c_data_w				  : NATURAL := 64; 
+  
+  CONSTANT c_correct_mac    : STD_LOGIC_VECTOR(47 DOWNTO 0) := x"FFABCDABCDFF";
+  CONSTANT c_correct_ip     : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"12345678";
+  CONSTANT c_correct_length : NATURAL := 50;
+  CONSTANT c_correct_port   : NATURAL := 4000;
+  
+  CONSTANT c_wrong_mac      : STD_LOGIC_VECTOR(47 DOWNTO 0) := x"BBBBBBBBBBBB";
+  CONSTANT c_wrong_ip       : STD_LOGIC_VECTOR(31 DOWNTO 0) := x"AAAAAAAA";
+  CONSTANT c_wrong_length   : NATURAL := 60;
+  CONSTANT c_wrong_port     : NATURAL := 4001;
+  
+  CONSTANT c_nof_packets		: NATURAL := 5;
+  
+  CONSTANT c_nof_hdr_fields : NATURAL := 3+12+4+9+1;
+  CONSTANT c_hdr_field_arr  : t_common_field_arr(c_nof_hdr_fields-1 DOWNTO 0) := ( ( field_name_pad("eth_dst_mac"        ), "  ", 48, field_default(0) ),
+                                                                                   ( field_name_pad("eth_src_mac"        ), "  ", 48, field_default(0) ),
+                                                                                   ( field_name_pad("eth_type"           ), "  ", 16, field_default(x"0800") ),
+                                                                                   ( field_name_pad("ip_version"         ), "  ",  4, field_default(4) ),
+                                                                                   ( field_name_pad("ip_header_length"   ), "  ",  4, field_default(5) ),
+                                                                                   ( field_name_pad("ip_services"        ), "  ",  8, field_default(0) ),
+                                                                                   ( field_name_pad("ip_total_length"    ), "  ", 16, field_default(0) ),        
+                                                                                   ( field_name_pad("ip_identification"  ), "  ", 16, field_default(0) ),
+                                                                                   ( field_name_pad("ip_flags"           ), "  ",  3, field_default(2) ),
+                                                                                   ( field_name_pad("ip_fragment_offset" ), "  ", 13, field_default(0) ),
+                                                                                   ( field_name_pad("ip_time_to_live"    ), "  ",  8, field_default(127) ),
+                                                                                   ( field_name_pad("ip_protocol"        ), "  ",  8, field_default(17) ),
+                                                                                   ( field_name_pad("ip_header_checksum" ), "  ", 16, field_default(0) ),
+                                                                                   ( field_name_pad("ip_src_addr"        ), "  ", 32, field_default(0) ),
+                                                                                   ( field_name_pad("ip_dst_addr"        ), "  ", 32, field_default(0) ),
+                                                                                   ( field_name_pad("udp_src_port"       ), "  ", 16, field_default(0) ), 
+                                                                                   ( field_name_pad("udp_dst_port"       ), "  ", 16, field_default(0) ), 
+                                                                                   ( field_name_pad("udp_total_length"   ), "  ", 16, field_default(0) ),         
+                                                                                   ( field_name_pad("udp_checksum"       ), "  ", 16, field_default(0) ),
+                                                                                   ( field_name_pad("usr_sync"           ), "  ",  1, field_default(1) ),
+                                                                                   ( field_name_pad("usr_bsn"            ), "  ", 60, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_0"    ), "  ",  7, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_1"    ), "  ",  9, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_2"    ), "  ", 10, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_3"    ), "  ", 33, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_4"    ), "  ",  5, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_5"    ), "  ",  8, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_field_6"    ), "  ", 27, field_default(0) ),
+                                                                                   ( field_name_pad("usr_hdr_word_align" ), "  ", 16, field_default(0) ) ); 
+  
+  ----------------------------------------------------------------------------
+  -- Clocks and resets
+  ----------------------------------------------------------------------------   
+  CONSTANT c_dp_clk_period : TIME := 5 ns;
+  CONSTANT c_nof_streams   : POSITIVE := 1;
+  CONSTANT hdr_fields_rst	 : t_slv_1024_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=>(OTHERS=>'0'));                         
+  SIGNAL dp_rst            : STD_LOGIC;
+  SIGNAL dp_clk            : STD_LOGIC := '0';
+                           
+  SIGNAL tb_end            : STD_LOGIC := '0';
+  SIGNAL toggle						 : BOOLEAN := FALSE;
+  SIGNAL counter					 : NATURAL := 0;
+  
+  SIGNAL in_sosi					 : t_dp_sosi := c_dp_sosi_rst;                         
+  SIGNAL snk_in_arr        : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_sosi_rst);
+  SIGNAL snk_out_arr       : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0);
+  SIGNAL src_in_arr        : t_dp_siso_arr(c_nof_streams-1 DOWNTO 0) := (OTHERS=> c_dp_siso_rdy);
+  SIGNAL src_out_arr       : t_dp_sosi_arr(c_nof_streams-1 DOWNTO 0);
+  
+  SIGNAL hdr_fields_in_arr : t_slv_1024_arr(c_nof_streams-1 DOWNTO 0);    
+  SIGNAL hdr_fields_out_arr: t_slv_1024_arr(c_nof_streams-1 DOWNTO 0);
+  
+  SIGNAL hdr_fields_wrong_arr : t_slv_1024_arr(c_nof_streams-1 DOWNTO 0);
+  
+BEGIN
+
+  ----------------------------------------------------------------------------
+  -- Clock and reset generation
+  ----------------------------------------------------------------------------
+
+  dp_clk <= NOT dp_clk OR tb_end AFTER c_dp_clk_period/2;
+  dp_rst <= '1', '0' AFTER c_dp_clk_period*5;  
+  
+  gen_hdr_in : FOR i IN 0 TO c_nof_streams-1 GENERATE    
+    hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "eth_dst_mac"       ) DOWNTO field_lo(c_hdr_field_arr, "eth_dst_mac"        )) <= c_correct_mac;   
+    hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "ip_dst_addr"       ) DOWNTO field_lo(c_hdr_field_arr, "ip_dst_addr"        )) <= c_correct_ip;
+    hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "udp_dst_port"      ) DOWNTO field_lo(c_hdr_field_arr, "udp_dst_port"       )) <= TO_UVEC(c_correct_port, 16); 
+    hdr_fields_in_arr(i)(field_hi(c_hdr_field_arr, "ip_total_length"   ) DOWNTO field_lo(c_hdr_field_arr, "ip_total_length"    )) <= TO_UVEC(c_correct_length, 16); 
+  END GENERATE;
+  
+  gen_hdr_wrong : FOR i IN 0 TO c_nof_streams-1 GENERATE
+    hdr_fields_wrong_arr(i)(field_hi(c_hdr_field_arr, "eth_dst_mac"       ) DOWNTO field_lo(c_hdr_field_arr, "eth_dst_mac"        )) <= c_wrong_mac;                 
+    hdr_fields_wrong_arr(i)(field_hi(c_hdr_field_arr, "ip_dst_addr"       ) DOWNTO field_lo(c_hdr_field_arr, "ip_dst_addr"        )) <= c_wrong_ip;                  
+    hdr_fields_wrong_arr(i)(field_hi(c_hdr_field_arr, "udp_dst_port"      ) DOWNTO field_lo(c_hdr_field_arr, "udp_dst_port"       )) <= TO_UVEC(c_wrong_port, 16);   
+    hdr_fields_wrong_arr(i)(field_hi(c_hdr_field_arr, "ip_total_length"   ) DOWNTO field_lo(c_hdr_field_arr, "ip_total_length"    )) <= TO_UVEC(c_wrong_length, 16); 
+  END GENERATE;
+                  
+    
+    
+  p_stimuli : PROCESS
+  BEGIN
+    proc_common_wait_some_cycles(dp_clk, 10);
+    -- Generate a datastream. 
+    WHILE tb_end = '0' LOOP
+      in_sosi.valid <= '1';
+      in_sosi.sop <= '1';                       
+      proc_common_wait_some_cycles(dp_clk, 1);
+      in_sosi.sop <= '0';
+      proc_common_wait_some_cycles(dp_clk, 63);                 
+      in_sosi.eop <= '1';                 
+      proc_common_wait_some_cycles(dp_clk, 1);
+      in_sosi.eop <= '0';
+      in_sosi.valid <= '0';
+      proc_common_wait_some_cycles(dp_clk, 1);    
+    END LOOP; 
+  END PROCESS;   
+
+  gen_connect : FOR I IN 0 TO c_nof_streams-1 GENERATE 
+    snk_in_arr(I)  <= in_sosi;
+  END GENERATE; 
+
+  p_special_stimuli : PROCESS(in_sosi.sop)
+  BEGIN    	
+  	IF in_sosi.sop = '1' THEN
+  		counter <= counter +1;
+    	IF toggle THEN    		
+    		hdr_fields_out_arr <= hdr_fields_in_arr;
+    	ELSE
+    		hdr_fields_out_arr <= hdr_fields_wrong_arr;
+    	END IF;
+    	toggle <= NOT toggle;
+    ELSE
+    	hdr_fields_out_arr <= hdr_fields_rst;
+    END IF;
+    
+		IF c_nof_packets+1 <= counter THEN
+    	tb_end <= '1';
+    END IF;
+    
+  END PROCESS;
+  
+  
+  dut : ENTITY work.dp_offload_rx_filter
+  GENERIC MAP(
+    g_nof_streams         => c_nof_streams,     --: POSITIVE;
+    g_data_w              => c_data_w,          --: NATURAL; 
+    g_hdr_field_arr       => c_hdr_field_arr,   --: t_common_field_arr;
+    g_eth_dst_mac_ena     => TRUE,              --: BOOLEAN;
+    g_ip_dst_addr_ena     => TRUE,              --: BOOLEAN;
+    g_ip_total_length_ena => TRUE,              --: BOOLEAN;
+    g_udp_dst_port_ena    => TRUE               --: BOOLEAN     
+  ) 
+  PORT MAP(
+    
+    dp_rst             => dp_rst,                         
+    dp_clk             => dp_clk,                         
+                                               
+    snk_in_arr         => snk_in_arr,  
+    snk_out_arr        => snk_out_arr,   
+
+    src_out_arr        => src_out_arr,       
+    src_in_arr         => src_in_arr,         
+
+    hdr_fields_out_arr => hdr_fields_out_arr,             
+    hdr_fields_in_arr  => hdr_fields_in_arr            
+  );
+
+END tb;