diff --git a/libraries/technology/eth_10g/tb_tb_tech_eth_10g.vhd b/libraries/technology/eth_10g/tb_tb_tech_eth_10g.vhd
index e100696557f4bbb7aa5da95aec0ca0cb0c5cc7d4..74fa70275e4d4644894b7e09cba48dc021147c1b 100644
--- a/libraries/technology/eth_10g/tb_tb_tech_eth_10g.vhd
+++ b/libraries/technology/eth_10g/tb_tb_tech_eth_10g.vhd
@@ -43,9 +43,13 @@ ARCHITECTURE tb OF tb_tb_tech_eth_10g IS
   CONSTANT c_156       : TIME := 6.4 ns;
   CONSTANT c_data_type : NATURAL := c_tb_tech_mac_10g_data_type_symbols;
   
+  CONSTANT c_tb_end_vec : STD_LOGIC_VECTOR(1 DOWNTO 0) := (OTHERS=>'1');
+  SIGNAL   tb_end_vec   : STD_LOGIC_VECTOR(1 DOWNTO 0) := c_tb_end_vec;  -- sufficiently long to fit all tb instances
+  
 BEGIN
 
 -- g_technology              : NATURAL := c_tech_select_default;
+-- g_tb_end                  : BOOLEAN := TRUE;   -- when TRUE then tb_end ends this simulation, else a higher multi-testbench will end the simulation
 -- g_sim_level               : NATURAL := 0;     -- 0 = use IP; 1 = use fast serdes model
 -- g_ref_clk_644_period      : TIME := tech_pll_clk_644_period;  -- for 10GBASE-R
 -- g_ref_clk_156_period      : TIME := 6.4 ns;                   -- for XAUI
@@ -54,7 +58,13 @@ BEGIN
 -- g_link_status_check       : STD_LOGIC_VECTOR(c_tech_mac_10g_link_status_w-1 DOWNTO 0) := "11";
 -- g_use_serial_rx_in        : BOOLEAN := FALSE 
 
-  u_tech_eth_10g : ENTITY work.tb_tech_eth_10g GENERIC MAP (c_tech_select_default, 0, c_644, c_156, c_data_type, TRUE, "11", FALSE);
-  u_sim_eth_10g  : ENTITY work.tb_tech_eth_10g GENERIC MAP (c_tech_select_default, 1, c_644, c_156, c_data_type, TRUE, "11", FALSE);
+  u_tech_eth_10g : ENTITY work.tb_tech_eth_10g GENERIC MAP (c_tech_select_default, FALSE, 0, c_644, c_156, c_data_type, TRUE, "11", FALSE) PORT MAP (tb_end_vec(0));
+  u_sim_eth_10g  : ENTITY work.tb_tech_eth_10g GENERIC MAP (c_tech_select_default, FALSE, 1, c_644, c_156, c_data_type, TRUE, "11", FALSE) PORT MAP (tb_end_vec(1));
   
+  p_tb_end : PROCESS
+  BEGIN
+    WAIT UNTIL tb_end_vec=c_tb_end_vec;
+    REPORT "Multi tb simulation finished." SEVERITY FAILURE;
+    WAIT;
+  END PROCESS;
 END tb;
diff --git a/libraries/technology/eth_10g/tb_tech_eth_10g.vhd b/libraries/technology/eth_10g/tb_tech_eth_10g.vhd
index ae6403f530c16b68d675e5706d74112ea85348e6..0108639b0aea81736561e234a392b7eea26433e7 100644
--- a/libraries/technology/eth_10g/tb_tech_eth_10g.vhd
+++ b/libraries/technology/eth_10g/tb_tech_eth_10g.vhd
@@ -47,7 +47,8 @@ ENTITY tb_tech_eth_10g IS
   -- Test bench control parameters
   GENERIC (
     g_technology              : NATURAL := c_tech_select_default;
-    g_sim_level               : NATURAL := 0;     -- 0 = use IP; 1 = use fast serdes model
+    g_tb_end                  : BOOLEAN := TRUE;   -- when TRUE then tb_end ends this simulation, else a higher multi-testbench will end the simulation
+    g_sim_level               : NATURAL := 1;     -- 0 = use IP; 1 = use fast serdes model
     g_ref_clk_644_period      : TIME := tech_pll_clk_644_period;  -- for 10GBASE-R
     g_ref_clk_156_period      : TIME := 6.4 ns;                   -- for XAUI
     g_data_type               : NATURAL := c_tb_tech_mac_10g_data_type_symbols;
@@ -56,6 +57,7 @@ ENTITY tb_tech_eth_10g IS
     g_use_serial_rx_in        : BOOLEAN := FALSE 
   );
   PORT (
+    tb_end          : OUT STD_LOGIC;
     -- PHY 10gbase_r
     serial_tx_out   : OUT STD_LOGIC;                                       -- 1 lane
     serial_rx_in    : IN  STD_LOGIC := 'X';
@@ -97,7 +99,6 @@ ARCHITECTURE tb OF tb_tech_eth_10g IS
   
   -- Clocks and reset
   SIGNAL rx_end            : STD_LOGIC := '0';
-  SIGNAL tb_end            : STD_LOGIC := '0';
   SIGNAL mm_clk            : STD_LOGIC := '0';  -- memory-mapped bus clock
   SIGNAL mm_rst            : STD_LOGIC;         -- reset synchronous with mm_clk
   
@@ -186,7 +187,7 @@ BEGIN
     g_src_mac       => c_src_mac
   )
   PORT MAP (
-    tb_end    => tb_end,
+    tb_end    => rx_end,
     mm_clk    => mm_clk,
     mm_rst    => mm_rst,
     mm_init   => mm_init,
@@ -379,13 +380,18 @@ BEGIN
   
   p_tb_end : PROCESS  
   BEGIN
+    tb_end <= '0';
     WAIT UNTIL rx_end='1';
     proc_common_wait_some_cycles(tb_tx_clk, 100);
     --proc_common_wait_some_cycles(tb_tx_clk, 10000);  -- uncomment to simulate somewhat longer without tx packet data
     
     -- Stop the simulation
     tb_end <= '1';
-    ASSERT FALSE REPORT "Simulation finished." SEVERITY FAILURE;
+    IF g_tb_end=FALSE THEN
+      REPORT "Tb Simulation finished." SEVERITY NOTE;
+    ELSE
+      REPORT "Tb Simulation finished." SEVERITY FAILURE;
+    END IF;
     WAIT;
   END PROCESS;