From daedbde4a8c25fd52e8a3db69b5dda7f8bdc9c8a Mon Sep 17 00:00:00 2001
From: Grzegorz Daniluk <grzegorz.daniluk@cern.ch>
Date: Fri, 3 Jul 2015 16:04:44 +0200
Subject: [PATCH] testbench: adding 8p testbench with helped me debug the
 swcore

---
 testbench/scb_top_8p/Manifest.py            |  14 +
 testbench/scb_top_8p/alloc.svh              | 317 ++++++++
 testbench/scb_top_8p/main.sv                | 856 ++++++++++++++++++++
 testbench/scb_top_8p/run.do                 |  14 +
 testbench/scb_top_8p/scb_top_sim_svwrap.svh | 329 ++++++++
 testbench/scb_top_8p/simdrv_wr_endpoint.svh | 250 ++++++
 testbench/scb_top_8p/wave.do                | 216 +++++
 7 files changed, 1996 insertions(+)
 create mode 100644 testbench/scb_top_8p/Manifest.py
 create mode 100644 testbench/scb_top_8p/alloc.svh
 create mode 100644 testbench/scb_top_8p/main.sv
 create mode 100644 testbench/scb_top_8p/run.do
 create mode 100644 testbench/scb_top_8p/scb_top_sim_svwrap.svh
 create mode 100644 testbench/scb_top_8p/simdrv_wr_endpoint.svh
 create mode 100644 testbench/scb_top_8p/wave.do

diff --git a/testbench/scb_top_8p/Manifest.py b/testbench/scb_top_8p/Manifest.py
new file mode 100644
index 00000000..2a2ae0be
--- /dev/null
+++ b/testbench/scb_top_8p/Manifest.py
@@ -0,0 +1,14 @@
+target = "xilinx"
+action = "simulation"
+syn_device = "XC6VLX130T"
+fetchto = "../../ip_cores"
+vlog_opt = "+incdir+../../sim +incdir+../../sim/wr-hdl"
+
+files = [ "main.sv" ]
+
+modules = { "local" : ["../../top/bare_top",
+                       "../../ip_cores/general-cores",
+                       "../../ip_cores/wr-cores"] }
+					
+
+					
diff --git a/testbench/scb_top_8p/alloc.svh b/testbench/scb_top_8p/alloc.svh
new file mode 100644
index 00000000..2758051f
--- /dev/null
+++ b/testbench/scb_top_8p/alloc.svh
@@ -0,0 +1,317 @@
+
+typedef enum 
+             {
+              ALLOC,
+              FREE,
+              FORCE_FREE,
+              SET_USECOUNT
+              } alloc_req_type_t ;
+
+typedef struct {
+   int        is_allocated;
+   int        last_page_freed;
+   int        usecnt;
+   int        free_cnt; //for 3 resoruces
+   int        force_free_cnt; // 3 resoruces
+   int        alloc_port_vec;
+   int        free_port_vec;
+   int        f_free_port_vec;
+} alloc_page_instance_t;
+
+
+
+`define g_alloc_pages    1024
+`define g_usecnt_width   5
+`define g_pg_addr_width  10
+`define g_num_ports      19
+`define g_res_num_width  2
+`define g_alloc_inst_num 100
+
+typedef struct {
+   int                   alloc_cnt; // number of allocations of that page
+   alloc_page_instance_t alloc_inst[`g_alloc_inst_num];
+} alloc_page_t;
+
+
+alloc_page_t alloc_tab[`g_alloc_pages];
+int    pre_s_alloc_tab[`g_alloc_pages]; // pre-allocated start page
+int    pre_i_alloc_tab[`g_alloc_pages]; // pre-allocated inter page
+
+function init_alloc_tab();
+    int i;
+    for(i=0;i<`g_alloc_pages;i++) begin
+      alloc_tab[i].alloc_cnt = -1;
+      pre_s_alloc_tab[i]     =  0;
+      pre_i_alloc_tab[i]     =  0;
+    end
+endfunction;
+
+function automatic alloc_check(
+         input bit alloc_done,
+         input bit set_usecnt,
+         input bit free,
+         input bit force_free,
+         input bit [`g_usecnt_width -1:0] usecnt_alloc,
+         input bit [`g_usecnt_width -1:0] usecnt_set,
+         input bit [`g_pg_addr_width-1:0] pga_f, //page address freed
+         input bit [`g_pg_addr_width-1:0] pga_u, //page address usecnt
+         input bit [`g_pg_addr_width-1:0] pga_a, //page address allocated
+         input bit [`g_num_ports    -1:0] req_vec
+   );
+     int cnt=0;
+     if(alloc_done) begin
+       cnt = ++alloc_tab[pga_a].alloc_cnt;
+       if(cnt >= `g_alloc_inst_num) $fatal("not enough alloc instances [see define g_alloc_inst_num in alloc.svh]");
+       alloc_tab[pga_a].alloc_inst[cnt].is_allocated   = 1;
+       alloc_tab[pga_a].alloc_inst[cnt].usecnt         = usecnt_alloc;
+       alloc_tab[pga_a].alloc_inst[cnt].free_cnt       = 0;
+       alloc_tab[pga_a].alloc_inst[cnt].force_free_cnt = 0;
+       alloc_tab[pga_a].alloc_inst[cnt].alloc_port_vec = req_vec;
+       alloc_tab[pga_a].alloc_inst[cnt].free_port_vec  = 0;
+       alloc_tab[pga_a].alloc_inst[cnt].f_free_port_vec= 0;       
+     end
+     if(set_usecnt) begin
+       cnt = alloc_tab[pga_u].alloc_cnt;
+       alloc_tab[pga_u].alloc_inst[cnt].usecnt                   = usecnt_set;
+     end
+     if(free) begin
+       cnt = alloc_tab[pga_f].alloc_cnt;
+       alloc_tab[pga_f].alloc_inst[cnt].free_cnt++;
+       alloc_tab[pga_f].alloc_inst[cnt].free_port_vec = req_vec | alloc_tab[pga_f].alloc_inst[cnt].free_port_vec;
+     end
+
+     if(force_free) begin
+       cnt = alloc_tab[pga_f].alloc_cnt;
+       alloc_tab[pga_f].alloc_inst[cnt].force_free_cnt++;
+       alloc_tab[pga_f].alloc_inst[cnt].f_free_port_vec = req_vec | alloc_tab[pga_f].alloc_inst[cnt].f_free_port_vec;
+     end
+endfunction // first_free
+
+
+function automatic int check_if_prealloc(
+        input bit [`g_pg_addr_width*`g_num_ports-1:0] pckstart_pageaddr,
+        input bit [`g_pg_addr_width*`g_num_ports-1:0] pckinter_pageaddr,
+        input int pageaddr);
+   int i; 
+   int tab_s[19];
+   int tab_i[19];
+
+   tab_s[ 0] = pckstart_pageaddr[(( 0+1)*`g_pg_addr_width-1):( 0*`g_pg_addr_width)];
+   tab_s[ 1] = pckstart_pageaddr[(( 1+1)*`g_pg_addr_width-1):( 1*`g_pg_addr_width)];
+   tab_s[ 2] = pckstart_pageaddr[(( 2+1)*`g_pg_addr_width-1):( 2*`g_pg_addr_width)];
+   tab_s[ 3] = pckstart_pageaddr[(( 3+1)*`g_pg_addr_width-1):( 3*`g_pg_addr_width)];
+   tab_s[ 4] = pckstart_pageaddr[(( 4+1)*`g_pg_addr_width-1):( 4*`g_pg_addr_width)];
+   tab_s[ 5] = pckstart_pageaddr[(( 5+1)*`g_pg_addr_width-1):( 5*`g_pg_addr_width)];
+   tab_s[ 6] = pckstart_pageaddr[(( 6+1)*`g_pg_addr_width-1):( 6*`g_pg_addr_width)];
+   tab_s[ 7] = pckstart_pageaddr[(( 7+1)*`g_pg_addr_width-1):( 7*`g_pg_addr_width)];
+   tab_s[ 8] = pckstart_pageaddr[(( 8+1)*`g_pg_addr_width-1):( 8*`g_pg_addr_width)];
+   tab_s[ 9] = pckstart_pageaddr[(( 9+1)*`g_pg_addr_width-1):( 9*`g_pg_addr_width)];
+   tab_s[10] = pckstart_pageaddr[((10+1)*`g_pg_addr_width-1):(10*`g_pg_addr_width)];
+   tab_s[11] = pckstart_pageaddr[((11+1)*`g_pg_addr_width-1):(11*`g_pg_addr_width)];
+   tab_s[12] = pckstart_pageaddr[((12+1)*`g_pg_addr_width-1):(12*`g_pg_addr_width)];
+   tab_s[13] = pckstart_pageaddr[((13+1)*`g_pg_addr_width-1):(13*`g_pg_addr_width)];
+   tab_s[14] = pckstart_pageaddr[((14+1)*`g_pg_addr_width-1):(14*`g_pg_addr_width)];
+   tab_s[15] = pckstart_pageaddr[((15+1)*`g_pg_addr_width-1):(15*`g_pg_addr_width)];
+   tab_s[16] = pckstart_pageaddr[((16+1)*`g_pg_addr_width-1):(16*`g_pg_addr_width)];
+   tab_s[17] = pckstart_pageaddr[((17+1)*`g_pg_addr_width-1):(17*`g_pg_addr_width)];
+   tab_s[18] = pckstart_pageaddr[((18+1)*`g_pg_addr_width-1):(18*`g_pg_addr_width)];
+   
+   tab_i[ 0] = pckinter_pageaddr[(( 0+1)*`g_pg_addr_width-1):( 0*`g_pg_addr_width)];
+   tab_i[ 1] = pckinter_pageaddr[(( 1+1)*`g_pg_addr_width-1):( 1*`g_pg_addr_width)];
+   tab_i[ 2] = pckinter_pageaddr[(( 2+1)*`g_pg_addr_width-1):( 2*`g_pg_addr_width)];
+   tab_i[ 3] = pckinter_pageaddr[(( 3+1)*`g_pg_addr_width-1):( 3*`g_pg_addr_width)];
+   tab_i[ 4] = pckinter_pageaddr[(( 4+1)*`g_pg_addr_width-1):( 4*`g_pg_addr_width)];
+   tab_i[ 5] = pckinter_pageaddr[(( 5+1)*`g_pg_addr_width-1):( 5*`g_pg_addr_width)];
+   tab_i[ 6] = pckinter_pageaddr[(( 6+1)*`g_pg_addr_width-1):( 6*`g_pg_addr_width)];
+   tab_i[ 7] = pckinter_pageaddr[(( 7+1)*`g_pg_addr_width-1):( 7*`g_pg_addr_width)];
+   tab_i[ 8] = pckinter_pageaddr[(( 8+1)*`g_pg_addr_width-1):( 8*`g_pg_addr_width)];
+   tab_i[ 9] = pckinter_pageaddr[(( 9+1)*`g_pg_addr_width-1):( 9*`g_pg_addr_width)];
+   tab_i[10] = pckinter_pageaddr[((10+1)*`g_pg_addr_width-1):(10*`g_pg_addr_width)];
+   tab_i[11] = pckinter_pageaddr[((11+1)*`g_pg_addr_width-1):(11*`g_pg_addr_width)];
+   tab_i[12] = pckinter_pageaddr[((12+1)*`g_pg_addr_width-1):(12*`g_pg_addr_width)];
+   tab_i[13] = pckinter_pageaddr[((13+1)*`g_pg_addr_width-1):(13*`g_pg_addr_width)];
+   tab_i[14] = pckinter_pageaddr[((14+1)*`g_pg_addr_width-1):(14*`g_pg_addr_width)];
+   tab_i[15] = pckinter_pageaddr[((15+1)*`g_pg_addr_width-1):(15*`g_pg_addr_width)];
+   tab_i[16] = pckinter_pageaddr[((16+1)*`g_pg_addr_width-1):(16*`g_pg_addr_width)];
+   tab_i[17] = pckinter_pageaddr[((17+1)*`g_pg_addr_width-1):(17*`g_pg_addr_width)];
+   tab_i[18] = pckinter_pageaddr[((18+1)*`g_pg_addr_width-1):(18*`g_pg_addr_width)];
+   
+   for(i=0;i<19;i++) begin
+     if(tab_s[i] == pageaddr) begin
+       pre_s_alloc_tab[i]++;
+//        $display("start pck pre-alloc page: pageaddr=%3d | %3d [port=%2d | vector: %p]", pageaddr,tab_s[i],i, pckstart_pageaddr);
+       return i;     
+     end
+     if(tab_i[i] == pageaddr) begin
+       pre_i_alloc_tab[i]++;
+//        $display("inter pck pre-alloc page: pageaddr=%3d | %3d [port=%2d | vector: %p]", pageaddr,tab_i[i],i, pckstart_pageaddr);
+       return i;     
+     end
+   end
+   
+//    if(pckstart_pageaddr[(( 0+1)*`g_pg_addr_width-1):( 0*`g_pg_addr_width)] == pageaddr) return 0;
+//    if(pckstart_pageaddr[(( 1+1)*`g_pg_addr_width-1):( 1*`g_pg_addr_width)] == pageaddr) return 1;
+//    if(pckstart_pageaddr[(( 2+1)*`g_pg_addr_width-1):( 2*`g_pg_addr_width)] == pageaddr) return 2;
+//    if(pckstart_pageaddr[(( 3+1)*`g_pg_addr_width-1):( 3*`g_pg_addr_width)] == pageaddr) return 3;
+//    if(pckstart_pageaddr[(( 4+1)*`g_pg_addr_width-1):( 4*`g_pg_addr_width)] == pageaddr) return 4;
+//    if(pckstart_pageaddr[(( 5+1)*`g_pg_addr_width-1):( 5*`g_pg_addr_width)] == pageaddr) return 5;
+//    if(pckstart_pageaddr[(( 6+1)*`g_pg_addr_width-1):( 6*`g_pg_addr_width)] == pageaddr) return 6;
+//    if(pckstart_pageaddr[(( 7+1)*`g_pg_addr_width-1):( 7*`g_pg_addr_width)] == pageaddr) return 7;
+//    if(pckstart_pageaddr[(( 8+1)*`g_pg_addr_width-1):( 8*`g_pg_addr_width)] == pageaddr) return 8;
+//    if(pckstart_pageaddr[(( 9+1)*`g_pg_addr_width-1):( 9*`g_pg_addr_width)] == pageaddr) return 9;
+//    if(pckstart_pageaddr[((10+1)*`g_pg_addr_width-1):(10*`g_pg_addr_width)] == pageaddr) return 0;
+//    if(pckstart_pageaddr[((11+1)*`g_pg_addr_width-1):(11*`g_pg_addr_width)] == pageaddr) return 11;
+//    if(pckstart_pageaddr[((12+1)*`g_pg_addr_width-1):(12*`g_pg_addr_width)] == pageaddr) return 12;
+//    if(pckstart_pageaddr[((13+1)*`g_pg_addr_width-1):(13*`g_pg_addr_width)] == pageaddr) return 13;
+//    if(pckstart_pageaddr[((14+1)*`g_pg_addr_width-1):(14*`g_pg_addr_width)] == pageaddr) return 14;
+//    if(pckstart_pageaddr[((15+1)*`g_pg_addr_width-1):(15*`g_pg_addr_width)] == pageaddr) return 15;
+//    if(pckstart_pageaddr[((16+1)*`g_pg_addr_width-1):(16*`g_pg_addr_width)] == pageaddr) return 16;
+//    if(pckstart_pageaddr[((17+1)*`g_pg_addr_width-1):(17*`g_pg_addr_width)] == pageaddr) return 17;
+//    if(pckstart_pageaddr[((18+1)*`g_pg_addr_width-1):(18*`g_pg_addr_width)] == pageaddr) return 18;
+// 
+//    if(pckinter_pageaddr[(( 0+1)*`g_pg_addr_width-1):( 0*`g_pg_addr_width)] == pageaddr) return 0;
+//    if(pckinter_pageaddr[(( 1+1)*`g_pg_addr_width-1):( 1*`g_pg_addr_width)] == pageaddr) return 1;
+//    if(pckinter_pageaddr[(( 2+1)*`g_pg_addr_width-1):( 2*`g_pg_addr_width)] == pageaddr) return 2;
+//    if(pckinter_pageaddr[(( 3+1)*`g_pg_addr_width-1):( 3*`g_pg_addr_width)] == pageaddr) return 3;
+//    if(pckinter_pageaddr[(( 4+1)*`g_pg_addr_width-1):( 4*`g_pg_addr_width)] == pageaddr) return 4;
+//    if(pckinter_pageaddr[(( 5+1)*`g_pg_addr_width-1):( 5*`g_pg_addr_width)] == pageaddr) return 5;
+//    if(pckinter_pageaddr[(( 6+1)*`g_pg_addr_width-1):( 6*`g_pg_addr_width)] == pageaddr) return 6;
+//    if(pckinter_pageaddr[(( 7+1)*`g_pg_addr_width-1):( 7*`g_pg_addr_width)] == pageaddr) return 7;
+//    if(pckinter_pageaddr[(( 8+1)*`g_pg_addr_width-1):( 8*`g_pg_addr_width)] == pageaddr) return 8;
+//    if(pckinter_pageaddr[(( 9+1)*`g_pg_addr_width-1):( 9*`g_pg_addr_width)] == pageaddr) return 9;
+//    if(pckinter_pageaddr[((10+1)*`g_pg_addr_width-1):(10*`g_pg_addr_width)] == pageaddr) return 10;
+//    if(pckinter_pageaddr[((11+1)*`g_pg_addr_width-1):(11*`g_pg_addr_width)] == pageaddr) return 11;
+//    if(pckinter_pageaddr[((12+1)*`g_pg_addr_width-1):(12*`g_pg_addr_width)] == pageaddr) return 12;
+//    if(pckinter_pageaddr[((13+1)*`g_pg_addr_width-1):(13*`g_pg_addr_width)] == pageaddr) return 13;
+//    if(pckinter_pageaddr[((14+1)*`g_pg_addr_width-1):(14*`g_pg_addr_width)] == pageaddr) return 14;
+//    if(pckinter_pageaddr[((15+1)*`g_pg_addr_width-1):(15*`g_pg_addr_width)] == pageaddr) return 15;
+//    if(pckinter_pageaddr[((16+1)*`g_pg_addr_width-1):(16*`g_pg_addr_width)] == pageaddr) return 16;
+//    if(pckinter_pageaddr[((17+1)*`g_pg_addr_width-1):(17*`g_pg_addr_width)] == pageaddr) return 17;
+//    if(pckinter_pageaddr[((18+1)*`g_pg_addr_width-1):(18*`g_pg_addr_width)] == pageaddr) return 18;
+
+//    for(i=0;i<`g_num_ports;i++) begin
+//      pg_s = pckstart_pageaddr[((i+1)*`g_pg_addr_width):(i*`g_pg_addr_width)];
+//      pg_i = pckinter_pageaddr[((i+1)*`g_pg_addr_width):(i*`g_pg_addr_width)];
+//      $display("checking pre-alloc: pg_s =0x%4x | pg_s =0x%4x | pg =0x%4x",pg_s,pg_i, pageaddr);
+//      if(pg_s == pageaddr && pg_i == pageaddr ) return 1;
+//    end
+   return -1;
+endfunction
+
+function automatic dump_results(
+        input bit [`g_pg_addr_width*`g_num_ports-1:0] pckstart_pageaddr,
+        input bit [`g_pg_addr_width*`g_num_ports-1:0] pckinter_pageaddr
+   );
+   
+
+   int i   = 0;
+   int j   = 0;
+   int chk = 0;
+   int per_alloc_cnt =0;
+   int pg_pre_alloc = 0;
+   $display("--------------------------------- dumping resutls -------------------------------------");
+   while(alloc_tab[i].alloc_cnt >=0)
+   begin
+     for(j=0;j<=alloc_tab[i].alloc_cnt;j++)
+     begin
+       chk = alloc_tab[i].alloc_inst[j].usecnt - alloc_tab[i].alloc_inst[j].free_cnt;
+       if((chk != 0 || alloc_tab[i].alloc_inst[j].usecnt == 0) &&
+           alloc_tab[i].alloc_inst[j].is_allocated       == 1 &&   // allocated and
+           alloc_tab[i].alloc_cnt                        == j)   // last usage and 
+         pg_pre_alloc = check_if_prealloc(pckstart_pageaddr,pckinter_pageaddr,i);
+       else
+         pg_pre_alloc = -1;
+
+       if(chk == 0 && alloc_tab[i].alloc_inst[j].usecnt != 0)
+         $display("[p=%4d|u=%2d] alloc=%1d | usecnt=%2d | f_cnt=%2d | ff_cnt=%2d | a_v=0x%20x | f_v=0x%20x | ff_v=0x%20x | OK",
+         i, j, 
+         alloc_tab[i].alloc_inst[j].is_allocated,
+         alloc_tab[i].alloc_inst[j].usecnt,
+         alloc_tab[i].alloc_inst[j].free_cnt,
+         alloc_tab[i].alloc_inst[j].force_free_cnt,
+         alloc_tab[i].alloc_inst[j].alloc_port_vec,
+         alloc_tab[i].alloc_inst[j].free_port_vec,
+         alloc_tab[i].alloc_inst[j].f_free_port_vec);
+       else if(pg_pre_alloc > -1) // one of pre-allocated
+         begin
+         $display("[p=%4d|u=%2d] alloc=%1d | usecnt=%2d | f_cnt=%2d | ff_cnt=%2d | a_v=0x%20x | f_v=0x%20x | ff_v=0x%20x | pre-alloc-ed page for port %2d",
+         i, j, 
+         alloc_tab[i].alloc_inst[j].is_allocated,
+         alloc_tab[i].alloc_inst[j].usecnt,
+         alloc_tab[i].alloc_inst[j].free_cnt,
+         alloc_tab[i].alloc_inst[j].force_free_cnt,
+         alloc_tab[i].alloc_inst[j].alloc_port_vec,
+         alloc_tab[i].alloc_inst[j].free_port_vec,
+         alloc_tab[i].alloc_inst[j].f_free_port_vec,
+         pg_pre_alloc);
+         per_alloc_cnt++;
+         end
+//        else if(chk                    == 1 &&   //possible candidate for pre-allocated page 
+//                alloc_tab[i].alloc_cnt == j &&   // needs to be the last usage
+//                check_if_prealloc(pckstart_pageaddr,pckinter_pageaddr,i) > -1) // needs to be preallocated in one of ports 
+//          begin
+//          $display("[p=%4d|u=%2d] alloc=%1d | usecnt=%2d | f_cnt=%2d | ff_cnt=%2d | a_v=0x%20x | f_v=0x%20x | ff_v=0x%20x | pre-alloc-ed page %2d",
+//          i, j, 
+//          alloc_tab[i].alloc_inst[j].is_allocated,
+//          alloc_tab[i].alloc_inst[j].usecnt,
+//          alloc_tab[i].alloc_inst[j].free_cnt,
+//          alloc_tab[i].alloc_inst[j].force_free_cnt,
+//          alloc_tab[i].alloc_inst[j].alloc_port_vec,
+//          alloc_tab[i].alloc_inst[j].free_port_vec,
+//          alloc_tab[i].alloc_inst[j].f_free_port_vec,
+//          check_if_prealloc(pckstart_pageaddr,pckinter_pageaddr,i));
+//          per_alloc_cnt++;
+//          end
+//        else if(alloc_tab[i].alloc_inst[j].is_allocated    == 1 &&   //allocated but...
+//                alloc_tab[i].alloc_inst[j].usecnt          == 0 &&   // no usecnt set and
+//                alloc_tab[i].alloc_inst[j].free_cnt        == 0 &&   // neither freed ...
+//                alloc_tab[i].alloc_inst[j].force_free_cnt  == 0 &&   // nor force-freed and
+//                alloc_tab[i].alloc_cnt                     == j &&   // needs to be the last usage
+//                check_if_prealloc(pckstart_pageaddr,pckinter_pageaddr,i) >-1) // needs to be preallocated in one of ports 
+//          begin
+//          $display("[p=%4d|u=%2d] alloc=%1d | usecnt=%2d | f_cnt=%2d | ff_cnt=%2d | a_v=0x%20x | f_v=0x%20x | ff_v=0x%20x | pre-alloc-ed page %2d",
+//          i, j, 
+//          alloc_tab[i].alloc_inst[j].is_allocated,
+//          alloc_tab[i].alloc_inst[j].usecnt,
+//          alloc_tab[i].alloc_inst[j].free_cnt,
+//          alloc_tab[i].alloc_inst[j].force_free_cnt,
+//          alloc_tab[i].alloc_inst[j].alloc_port_vec,
+//          alloc_tab[i].alloc_inst[j].free_port_vec,
+//          alloc_tab[i].alloc_inst[j].f_free_port_vec,
+//          check_if_prealloc(pckstart_pageaddr,pckinter_pageaddr,i));
+//          per_alloc_cnt++;
+//          end
+       else if(alloc_tab[i].alloc_inst[j].force_free_cnt)
+         $display("[p=%4d|u=%2d] alloc=%1d | usecnt=%2d | f_cnt=%2d | ff_cnt=%2d | a_v=0x%20x | f_v=0x%20x | ff_v=0x%20x | Force Free",
+         i, j, 
+         alloc_tab[i].alloc_inst[j].is_allocated,
+         alloc_tab[i].alloc_inst[j].usecnt,
+         alloc_tab[i].alloc_inst[j].free_cnt,
+         alloc_tab[i].alloc_inst[j].force_free_cnt,
+         alloc_tab[i].alloc_inst[j].alloc_port_vec,
+         alloc_tab[i].alloc_inst[j].free_port_vec,
+         alloc_tab[i].alloc_inst[j].f_free_port_vec);
+       else 
+         $display("[p=%4d|u=%2d] alloc=%1d | usecnt=%2d | f_cnt=%2d | ff_cnt=%2d | a_v=0x%20x | f_v=0x%20x | ff_v=0x%20x | check this one",
+         i, j, 
+         alloc_tab[i].alloc_inst[j].is_allocated,
+         alloc_tab[i].alloc_inst[j].usecnt,
+         alloc_tab[i].alloc_inst[j].free_cnt,
+         alloc_tab[i].alloc_inst[j].force_free_cnt,
+         alloc_tab[i].alloc_inst[j].alloc_port_vec,
+         alloc_tab[i].alloc_inst[j].free_port_vec,
+         alloc_tab[i].alloc_inst[j].f_free_port_vec);
+     end //for 
+     i++;
+   end //while
+   $display("--------------------------------- --------------- -------------------------------------");
+   $display("pre-alloc pages: %3d",per_alloc_cnt);
+   for(i=0;i<`g_num_ports;i++) begin
+     if(pre_s_alloc_tab[i] != 1 || pre_i_alloc_tab[i] != 1)
+       $display("something wrong....: port %2d pre-allocation skrewed: start cnt=%2d | inter cnt = %2d",i, pre_s_alloc_tab[i], pre_i_alloc_tab[i]);
+   end
+   
+endfunction
+
+
+
diff --git a/testbench/scb_top_8p/main.sv b/testbench/scb_top_8p/main.sv
new file mode 100644
index 00000000..96dcb627
--- /dev/null
+++ b/testbench/scb_top_8p/main.sv
@@ -0,0 +1,856 @@
+`timescale 1ns/1ps
+
+`include "tbi_utils.sv"
+`include "simdrv_wrsw_nic.svh"
+`include "simdrv_rtu.sv"
+`include "simdrv_txtsu.svh"
+`include "simdrv_hwdu.svh"
+`include "simdrv_wdog.svh"
+`include "endpoint_regs.v"
+`include "endpoint_mdio.v"
+`include "if_wb_master.svh"
+`include "if_wb_slave.svh"
+`include "wb_packet_source.svh"
+`include "wb_packet_sink.svh"
+`include "scb_top_sim_svwrap.svh"
+`include "pfilter.svh"
+`include "alloc.svh"
+
+module main;
+
+   reg clk_ref=0;
+   reg clk_sys=0;
+   reg clk_swc_mpm_core=0;
+   reg rst_n=0;
+   parameter g_max_ports = 8;   
+   parameter g_num_ports = 8;
+   parameter g_mvlan     = 9; //max simulation vlans
+
+    typedef struct { 
+       integer     tx;
+       integer     rx;
+       integer     op;
+    }  t_trans_path;
+
+   typedef struct{
+       rtu_vlan_entry_t vlan_entry;
+       integer          vlan_id;
+       bit              valid;
+   } t_sim_vlan_entry;
+
+   typedef struct {
+      CSimDrv_WR_Endpoint ep;
+      EthPacketSource send;
+      EthPacketSink recv;
+   } port_t;
+   
+   typedef struct{
+       int               qmode; 
+       int               fix_prio;
+       int               prio_val;
+       int               pvid;
+   } t_vlan_port_config;
+   
+   int mmu_alloc_cnt[g_num_ports+1];
+   int mmu_usecnt_cnt[g_num_ports+1];
+   int mmu_free_cnt[g_num_ports+1];
+   int mmu_f_free_cnt[g_num_ports+1];
+   int tx_done = 0;
+   int rx_done = 0;
+   reg [g_num_ports-1:0] txrx_done = 0;
+   int tb_wrd_cnt = 0;
+   int tb_forced = 0;
+   int tb_got_cyc = 0;
+   int tb_rtu_cnt = 0;
+   int tb_rtu_fsm = 0;
+   
+   port_t ports[$];
+   CSimDrv_NIC nic;
+   CRTUSimDriver rtu;
+   CSimDrv_TXTSU txtsu;
+   CSimDrv_HWDU hwdu;
+   CSimDrv_WDOG wdog;
+   
+   reg [g_num_ports-1:0] ep_ctrl;
+   reg [15:0]            ep_failure_type = 'h00;
+   
+   /** ***************************   basic conf  ************************************* **/ 
+   integer g_enable_pck_gaps                  = 1;   // 1=TRUE, 0=FALSE
+   integer g_min_pck_gap                      = 300; // cycles
+   integer g_max_pck_gap                      = 300; // cycles
+   integer g_force_payload_size               = 0; // if 0, then opt is used
+   integer g_payload_range_min                = 63;
+   integer g_payload_range_max                = 257;
+   integer g_active_port                      = 0;
+   integer g_backup_port                      = 1;
+   integer g_is_qvlan                         = 1;  // has vlan header
+   integer g_pfilter_enabled                  = 0;
+   integer g_limit_config_to_port_num         = g_num_ports;
+
+   t_trans_path trans_paths[g_max_ports]      ='{'{0  ,7 , 0 }, // port 0: 
+                                                 '{1  ,6 , 0 }, // port 1
+                                                 '{2  ,5 , 0 }, // port 2
+                                                 '{3  ,4 , 0 }, // port 3
+                                                 '{4  ,3 , 0 }, // port 4
+                                                 '{5  ,2 , 0 }, // port 5
+                                                 '{6  ,1 , 0 }, // port 6
+                                                 '{7  ,0 , 0 }}; // port 7
+                                         //index: 1,2,3,4,5,6,7,8,9, ....
+   integer start_send_init_delay[g_max_ports] = '{0,0,0,0,0,0,0,0};
+   //mask with ports we want to use, port number:  18 ...............0
+   reg [g_max_ports-1:0] portUnderTest        = 8'b11111111; //
+   reg [g_max_ports-1:0] portRtuEnabled       = 8'b11111111; //
+   integer repeat_number                      = 20;
+   integer tries_number                       = 3;
+   integer vid_init_for_inc                   = 0; // with opt 666  and 668
+//    reg [31:0] vlan_port_mask                  = 32'hFFFFFFFF;
+   reg [31:0] mirror_src_mask                 = 'h00000002;
+   reg [31:0] mirror_dst_mask                 = 'h00000080;
+   reg [7 :0] hp_prio_mask                    ='b10000001;
+   bit mr_rx                                  = 1;
+   bit mr_tx                                  = 1;
+   bit mr                                     = 0;
+   bit mac_ptp                                = 0;
+   bit mac_ll                                 = 0;
+   bit mac_single                             = 0;
+   bit mac_range                              = 0;
+   bit mac_br                                 = 0;
+   bit hp_fw_cpu                              = 0;
+   bit rx_forward_on_fmatch_full              = 0;                 
+   bit unrec_fw_cpu                           = 0;
+   bit rtu_dbg_f_fast_match                   = 0;
+   bit rtu_dbg_f_full_match                   = 0;
+   bit g_ignore_rx_test_check                 = 0;
+   
+   // vlans
+   int prio_map[8]                         = '{0, // Class of Service masked into prioTag 0
+                                               1, // Class of Service masked into prioTag 1
+                                               2, // Class of Service masked into prioTag 2
+                                               3, // Class of Service masked into prioTag 3
+                                               4, // Class of Service masked into prioTag 4
+                                               5, // Class of Service masked into prioTag 5
+                                               6, // Class of Service masked into prioTag 6
+                                               7};// Class of Service masked into prioTag 7 
+   int qmode                              = 2; //VLAN tagging/untagging disabled- pass as is
+   //0: ACCESS port      - tags untagged received packets with VID from RX_VID field. Drops all tagged packets not belonging to RX_VID VLAN
+   //1: TRUNK port       - passes only tagged VLAN packets. Drops all untagged packets.
+   //3: unqualified port - passes all traffic regardless of VLAN configuration 
+   
+   int fix_prio                           = 0;
+   int prio_val                           = 0; 
+   int pvid                               = 0; 
+                                             //      mask     , fid , prio,has_p,overr, drop   , vid, valid
+   t_sim_vlan_entry sim_vlan_tab[g_mvlan] = '{'{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 0,  1'b1 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 1,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 2,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 3,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 4,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 5,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 6,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 7,  1'b0 },
+                                              '{'{32'hFFFFFFFF, 8'h0, 3'h0, 1'b0, 1'b0, 1'b0}, 8,  1'b0 }};
+   PFilterMicrocode mc                    = new;
+
+
+                                           //qmode, fix_prio, prio_val, pvid   
+   t_vlan_port_config ep_vlan_conf[]      ='{'{  0,        0,        0,   1 }, //port =  0
+                                             '{  0,        0,        0,   1 }, //port =  1
+                                             '{  0,        0,        0,   2 }, //port =  2
+                                             '{  0,        0,        0,   2 }, //port =  3
+                                             '{  0,        0,        0,   3 }, //port =  4
+                                             '{  0,        0,        0,   3 }, //port =  5
+                                             '{  0,        0,        0,   4 }, //port =  6
+                                             '{  0,        0,        0,   4 }, //port =  7
+                                             '{  0,        0,        0,   5 }, //port =  8
+                                             '{  0,        0,        0,   5 }, //port =  9
+                                             '{  0,        0,        0,   6 }, //port =  10
+                                             '{  0,        0,        0,   6 }, //port =  11
+                                             '{  0,        0,        0,   7 }, //port =  12
+                                             '{  0,        0,        0,   7 }, //port =  13
+                                             '{  0,        0,        0,   8 }, //port =  14
+                                             '{  0,        0,        0,   8 }, //port =  15
+                                             '{  0,        0,        0,   9 }, //port =  16
+                                             '{  0,        0,        0,   9 }};//port =  17
+
+   integer g_do_vlan_config                 = 1;
+
+   integer g_set_untagging                  = 0;
+   int lacp_df_hp_id                        = 0;
+   int lacp_df_br_id                        = 2;
+   int lacp_df_un_id                        = 1;
+   int g_simple_allocator_unicast_check     = 0;
+
+ /** ***************************   test scenario 62  ************************************* **/ 
+  /*
+   * test 100% (high) load for 2 streams of small frames
+   **/
+  //GD
+  
+  initial begin
+    portUnderTest        = 8'b00000001;    
+    g_enable_pck_gaps    = 0;
+    g_min_pck_gap        = 0; //10;
+    g_max_pck_gap        = 0; //10;
+    repeat_number        = 20; //1000; //3000; //500000;
+    tries_number         = 1;  
+    g_force_payload_size = 1517; //696; //1517; //682; //46;  
+
+    g_is_qvlan           = 0;
+                         // tx  ,rx ,opt
+    trans_paths[0]      = '{0  ,7 ,1};
+    trans_paths[7]      = '{7  ,0 ,1};
+
+    trans_paths[1]      = '{1  ,6 ,1};
+    trans_paths[6]      = '{6  ,1 ,1};
+
+    trans_paths[2]      = '{2  ,5 ,1};
+    trans_paths[5]      = '{5  ,2 ,1};
+
+    trans_paths[3]      = '{3  ,4 ,1};
+    trans_paths[4]      = '{4  ,3 ,1};
+
+  end
+
+  /* check state machines of the swcore */
+  //always @(posedge clk_sys) begin
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.trans_FSM == 4'h9)
+  //    $warning("ll_FSM 0");
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[1].INPUT_BLOCK.trans_FSM == 4'h9)
+  //    $warning("ll_FSM 1");
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[6].INPUT_BLOCK.trans_FSM == 4'h9)
+  //    $warning("ll_FSM 6");
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[7].INPUT_BLOCK.trans_FSM == 4'h9)
+  //    $warning("ll_FSM 7");
+  //end
+
+  //always @(negedge clk_sys) begin
+  //  if (tb_forced==1) begin
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_stb_int = 0;
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_cyc_int = 0;
+  //    //force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_cyc_d0 = 1;
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.in_pck_err = 0;
+  //    //tb_forced = 2;
+  //  end
+  //  //else if (tb_forced==2) begin
+  //  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_cyc_d0 = 0;
+  //  //end
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.endpoint_src_out[0].cyc == 0 && tb_forced>0) begin
+  //    release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_stb_int;
+  //    release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_cyc_int;
+  //    //release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_cyc_d0;
+  //    release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_ack_int;
+  //    tb_forced = 0;
+  //  end
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_cyc_int == 1'h0 && tb_wrd_cnt==3) begin
+  //    tb_wrd_cnt = 0;
+  //    release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.in_pck_err;
+  //  end
+  //  else begin
+  //    //we are inside the frame
+  //    if(tb_wrd_cnt<3 && DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.page_word_cnt == 64)
+  //      tb_wrd_cnt = tb_wrd_cnt + 1;
+  //    if(tb_wrd_cnt == 3 && DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.page_word_cnt == 63) begin
+  //    //if(tb_wrd_cnt == 3 && DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.page_word_cnt == 53) begin
+  //      force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.in_pck_err = 1;
+  //      force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.snk_ack_int= 1;
+  //      tb_forced = 1;
+  //    end
+  //  end
+  //end
+
+  /////////////////////////////////////////////////////////////////////////
+
+  //always @(negedge clk_sys) begin
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.endpoint_src_out[0].cyc == 1 && tb_got_cyc == 0) begin
+  //    tb_got_cyc = 1;
+  //    tb_wrd_cnt = 0;
+  //  end
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.endpoint_src_out[0].cyc == 0 && tb_got_cyc==1) begin
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.gen_endpoints_and_phys[0].U_Endpoint_X.U_Wrapped_Endpoint.src_in.stall = 1;
+  //    tb_wrd_cnt = tb_wrd_cnt + 1;
+  //    if(tb_wrd_cnt == 365) begin
+  //      force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.gen_endpoints_and_phys[0].U_Endpoint_X.U_Wrapped_Endpoint.src_in.stall = 0;
+  //      release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.gen_endpoints_and_phys[0].U_Endpoint_X.U_Wrapped_Endpoint.src_in.stall;
+  //      tb_got_cyc = 2;
+  //    end
+  //  end
+
+
+  //  if (tb_rtu_fsm == 3)
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rtu_rsp_valid_i = 0;
+  //  if (tb_rtu_fsm == 2) begin
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rtu_rsp_valid_i = 1;
+  //    if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rtu_rsp_ack_o == 1)
+  //      tb_rtu_fsm = 3;
+  //  end
+  //  else if (tb_rtu_cnt > 1) begin
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rtu_dst_port_mask_i = 0;
+  //    force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rtu_rsp_valid_i = 0;
+  //    if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rcv_p_FSM == 1)
+  //      tb_rtu_fsm = 1;
+  //    if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rcv_p_FSM == 3)
+  //      tb_rtu_fsm = 2;
+  //  end
+
+  //  if (DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.rtu_rsp_ack)
+  //    tb_rtu_cnt = tb_rtu_cnt + 1;
+  //end
+
+  //initial begin
+  //  //#67608ns
+  //  //#66616ns
+  //  #66632ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.mmu_page_alloc_done_i = 0;
+  //  #944ns
+  //  //#1000ns --> check this as well !!
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.mmu_page_alloc_done_i = 1;
+  //  #16ns
+  //  release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.gen_blocks[0].INPUT_BLOCK.mmu_page_alloc_done_i;
+  //end
+
+  //addition
+  //initial begin
+  //  #125us;
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.PCK_PAGES_FREEEING_MODULE.lpd_gen[0].LPD.dbg_sv_force = 1;
+  //  #335us;
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.PCK_PAGES_FREEEING_MODULE.lpd_gen[0].LPD.dbg_sv_force = 0;
+  //end
+
+  /////////////////////////////////////////////////////////////////////////
+
+  // Trying to reproduce RTU hanging bug
+  //initial begin
+  //  #1ns  //shift because SV code is executed before VHDL so I need to make sure that whatever I force here
+  //        //will be visible for VHDL on next clk cycle.
+  //  #51832ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 0;
+  //  //RTU req
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rq_i.valid = 1;
+  //  #16ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rq_i.valid = 0;
+  //  release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rq_i.valid;
+  //  #240ns
+  //  //#208ns
+  //  //RTU req
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rq_i.valid = 1;
+  //  #16ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rq_i.valid = 0;
+  //  release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rq_i.valid;
+  //  //66072
+  //  //finally let's ack
+  //  #13968ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 1;
+  //  #16ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 0;
+
+  //  //ack
+  //  #64ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 1;
+  //  #16ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 0;
+
+  //  //ack
+  //  #64ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 1;
+  //  #16ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i = 0;
+
+  //  release DUT.WRS_Top.U_Wrapped_SCBCore.gen_network_stuff.U_RTU.ports[0].U_PortX.rtu_rsp_ack_i;
+  //end
+
+  /////////////////////////////////////////////////////////////////////////
+
+  // Trying with the watchdog reset
+  //initial begin
+  //  //#203247ns
+  //  //force DUT.WRS_Top.U_Wrapped_SCBCore.reset_mode = 1;
+  //  //force DUT.WRS_Top.U_Wrapped_SCBCore.reset_mode2 = 1;
+  //  //#100ns
+  //  //force DUT.WRS_Top.U_Wrapped_SCBCore.reset_mode = 0;
+  //  //#40us
+  //  //force DUT.WRS_Top.U_Wrapped_SCBCore.reset_mode2 = 0;
+  //  //release DUT.WRS_Top.U_Wrapped_SCBCore.reset_mode;
+  //  //release DUT.WRS_Top.U_Wrapped_SCBCore.reset_mode2;
+
+  //  #203247ns
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gpio_out_1 = 1;
+  //  #40us
+  //  force DUT.WRS_Top.U_Wrapped_SCBCore.gpio_out_1 = 0;
+  //  release DUT.WRS_Top.U_Wrapped_SCBCore.gpio_out_1;
+  //end
+
+  initial begin
+    #104us;
+    //$display("---------------------------");
+    //wdog.print_fsms(0);
+    //$display("---------------------------");
+    //wdog.print_fsms(0);
+    //#10us;
+    //$display("---------------------------");
+    //wdog.print_fsms(0);
+    #19us;
+    wdog.force_reset();
+  end
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+  always #2.66ns clk_swc_mpm_core <=~clk_swc_mpm_core;
+//   always #3.11ns clk_swc_mpm_core <=~clk_swc_mpm_core;
+//    always #4.2ns clk_swc_mpm_core <=~clk_swc_mpm_core;
+   always #8ns clk_sys <= ~clk_sys;
+   always #8ns clk_ref <= ~clk_ref;
+   
+   initial begin
+      repeat(100) @(posedge clk_sys);
+      rst_n <= 1;
+   end
+/*
+ *  wait ncycles
+ */
+    task automatic wait_cycles;
+       input [31:0] ncycles;
+       begin : wait_body
+	  integer i;
+ 
+	  for(i=0;i<ncycles;i=i+1) @(posedge clk_sys);
+ 
+       end
+    endtask // wait_cycles   
+    
+   task automatic tx_test(ref int seed, input  int n_tries, input int is_q,input int unvid, ref EthPacketSource src, ref EthPacketSink sink, input int srcPort, input int dstPort, input int opt=0);
+      EthPacketGenerator gen = new;
+      EthPacket pkt, tmpl, pkt2;
+      EthPacket arr[];
+      integer pck_gap = 0;
+      integer dmac_dist = 0;
+      
+      if(g_enable_pck_gaps == 1) 
+        if(g_min_pck_gap == g_max_pck_gap)
+          pck_gap = g_min_pck_gap;
+        else
+          pck_gap = $dist_uniform(seed,g_min_pck_gap,g_max_pck_gap);
+
+      arr            = new[n_tries](arr);
+      if(opt !=3 && opt != 4)
+        gen.set_seed(seed);
+  
+      tmpl           = new;
+
+      if(opt == 0 || opt == 200 || opt == 201 || opt == 666 || opt == 667 || opt == 1000 || opt == 2000)
+        tmpl.src       = '{srcPort, 2,3,4,5,6};
+      else if(opt == 101 | opt == 102)
+        tmpl.src       = '{0,0,0,0,0,0};
+      else if(opt > 2 )
+        tmpl.src       = '{0,2,3,4,5,6};
+      else
+        tmpl.src       = '{srcPort, 2,3,4,5,6};
+
+      if(opt==0 || opt == 200 || opt == 202 || opt == 1000 || opt == 2000)
+        tmpl.dst       = '{dstPort, 'h50, 'hca, 'hfe, 'hba, 'hbe};
+      else if(opt==1)
+        tmpl.dst       = '{'hFF, 'hFF, 'hFF, 'hFF, 'hFF, 'hFF};      
+      else
+        tmpl.dst       = '{'h00, 'h00, 'h00, 'h00, 'h00, 'h00}; // link-limited
+
+        
+      tmpl.has_smac  = 1;
+      tmpl.pcp    = 0;  //priority
+      tmpl.is_q      = is_q;
+      tmpl.vid     = 0;
+      tmpl.ethertype = 'h88f7;
+
+      gen.set_randomization(EthPacketGenerator::SEQ_PAYLOAD  | EthPacketGenerator::SEQ_ID);
+      gen.set_template(tmpl);
+      if(g_force_payload_size >= 1520) // more than max
+        gen.set_size(64, 1500);
+      else if(g_force_payload_size < 42)
+        gen.set_size(g_payload_range_min, g_payload_range_max);
+      else
+        gen.set_size(g_force_payload_size, g_force_payload_size+1); // setting the precise size below
+      
+      fork
+        begin // fork 1
+          integer vid_cnt=0;
+          for(int i=0;i<n_tries;i++) begin
+            pkt  = gen.gen();
+
+            if(g_force_payload_size >= 1520) // more than max
+              $faltal("wrong g_force_payload_size with wrong opt param");
+            else if(g_force_payload_size >= 42) // min size of frame is 64, 
+              pkt.set_size(g_force_payload_size);
+
+            pkt.oob = TX_FID;
+            $display("|=> TX: port = %2d, pck_i = %4d (opt=%1d, pck_gap=%3d, size=%2d, n=%d)" , srcPort, i,opt,pck_gap,  pkt.payload.size, i);
+            src.send(pkt);
+            arr[i]  = pkt;
+            //if(pck_gap)
+            //  wait_cycles(pck_gap); 
+          end
+          tx_done = 1;
+        end   // fork 1
+
+        begin // fork 2
+          if(g_ignore_rx_test_check == 0) begin
+            //for(int j=0;j<n_tries;j++)
+            while(1) begin
+              sink.recv(pkt2);
+              $display("|<= RX: port = %2d (size=%2d)" , dstPort, pkt2.payload.size);
+              //$display("|<= RX: port = %2d, pck_i = %4d (size=%2d)" , dstPort, j,  pkt2.payload.size);
+              //if(unvid)
+              //  arr[j].is_q  = 0;
+              //if((arr[j].payload.size != pkt2.payload.size) || !arr[j].equal(pkt2)) begin
+              //  $display("Fault at %d", j);
+              //  $display("Should be: ");
+              //  arr[j].dump();
+              //  $display("Is: ");
+              //  pkt2.dump();
+              //end
+            end // for (i=0;i<n_tries;i++)
+            rx_done = 1;
+          end
+        end // fork 2
+      join
+      seed = gen.get_seed();
+      
+   endtask // tx_test
+
+   
+  ///////////////////////////////////////////////////////
+  ////////////////// DUT  ///////////////////////////////
+  ///////////////////////////////////////////////////////
+  scb_top_sim_svwrap #(
+    .g_num_ports  (g_num_ports),
+    .g_with_TRU   (0),
+    .g_with_TATSU (0))
+    DUT (
+    .clk_sys_i(clk_sys),
+    .clk_ref_i(clk_ref),
+    .rst_n_i(rst_n),
+    .cpu_irq(cpu_irq),
+    .clk_swc_mpm_core_i(clk_swc_mpm_core),
+    .ep_ctrl_i(ep_ctrl),
+    .ep_failure_type(ep_failure_type)
+  );
+  ///////////////////////////////////////////////////////
+  ///////////////////////////////////////////////////////
+  ///////////////////////////////////////////////////////
+  
+
+
+   task automatic init_ports(ref port_t p[$], ref CWishboneAccessor wb);
+      int i,j;
+      
+      for(i=0;i<g_num_ports;i++)
+        begin
+           port_t tmp;
+           CSimDrv_WR_Endpoint ep;
+           ep = new(wb, 'h30000 + i * 'h400);
+           ep.init(i);
+           if(g_do_vlan_config == 2 & i < g_limit_config_to_port_num )
+             ep.vlan_config(ep_vlan_conf[i].qmode, ep_vlan_conf[i].fix_prio, ep_vlan_conf[i].prio_val, ep_vlan_conf[i].pvid, prio_map);
+           else if(g_do_vlan_config == 1 & i < g_limit_config_to_port_num )
+             ep.vlan_config(qmode, fix_prio, prio_val, pvid, prio_map);
+           else
+             ep.vlan_config(2, 0, 0, 0, '{0,1,2,3,4,5,6,7});//default
+
+           if(g_pfilter_enabled == 1 & i < g_limit_config_to_port_num )
+           begin
+             ep.pfilter_load_microcode(mc.assemble());
+             ep.pfilter_enable(1);             
+           end
+
+           if(g_set_untagging == 1)
+           begin
+             for(j=0;j<g_limit_config_to_port_num; j++)
+               ep.vlan_egress_untag(j /*vlan*/ ,1);
+           end
+           else if(g_set_untagging == 2)
+           begin
+             for(j=0;j<g_limit_config_to_port_num; j++)
+               ep.vlan_egress_untag(ep_vlan_conf[j].pvid /*vlan*/ ,1);
+           end
+           else if(g_set_untagging == 3)
+           begin
+               ep.vlan_egress_untag_direct('hFFFF /*vlan*/ ,0);
+               ep.vlan_egress_untag_direct('hFFFF /*vlan*/ ,1);
+           end
+           tmp.ep = ep;
+           tmp.send = EthPacketSource'(DUT.to_port[i]);
+           tmp.recv = EthPacketSink'(DUT.from_port[i]);
+           p.push_back(tmp);
+        end
+   endtask // init_endpoints
+   
+   task automatic init_nic(ref port_t p[$],ref CWishboneAccessor wb);
+      NICPacketSource nic_src;
+      NICPacketSink nic_snk;
+      port_t tmp;
+      
+      nic = new(wb, 'h20000);
+      $display("NICInit");
+      nic.init();
+      $display("Done");
+      
+      nic_src = new (nic);
+      nic_snk = new (nic);
+      $display("Src: %x\n",nic_src);
+      
+      tmp.send = EthPacketSource'(nic_src);
+      tmp.recv = EthPacketSink'(nic_snk);
+      p.push_back(tmp);
+      
+   endtask // init_nic
+   
+   
+   initial begin
+      uint64_t msr;
+      int seed;
+      rtu_vlan_entry_t def_vlan;
+      int q;
+      int z;
+      
+      CWishboneAccessor cpu_acc = DUT.cpu.get_accessor();
+      
+      for(int gg=0;gg<g_num_ports;gg++) 
+      begin 
+        ep_ctrl[gg] = 'b1; 
+      end
+      repeat(200) @(posedge clk_sys);
+
+      $display("Startup!");
+      cpu_acc.set_mode(PIPELINED);
+      cpu_acc.write('h10304, (1<<3));
+      
+      init_ports(ports, cpu_acc);
+
+      $display("InitNIC");
+      init_nic(ports, cpu_acc);
+
+      $display("InitTXTS");
+      txtsu = new (cpu_acc, 'h51000);
+      txtsu.init();
+      
+      $display("Initialization done");
+
+      rtu = new;
+      rtu.set_bus(cpu_acc, 'h60000);
+      for (int dd=0;dd<g_num_ports;dd++)
+        begin
+        rtu.set_port_config(dd /*port ID*/, portRtuEnabled[dd] /*pass_all*/, 0 /*pass_bpdu*/, 1 /*learn_en*/);
+      end
+        
+      rtu.set_port_config(g_num_ports, 1, 0, 0); // for NIC
+      
+      rtu.add_static_rule('{'h01, 'h80, 'hc2, 'h00, 'h00, 'h00}, (1<<18));
+      rtu.add_static_rule('{'h01, 'h80, 'hc2, 'h00, 'h00, 'h01}, (1<<18));
+      rtu.add_static_rule('{'h01, 'h80, 'hc2, 'h00, 'h00, 'h02}, (1<<18));
+      
+      rtu.add_static_rule('{'hFF, 'hFF, 'hFF, 'hFF, 'hFF, 'hFF}, 'hFFFFFFFF /*mask*/, 0 /*FID*/);
+      
+      //GD if(portUnderTest[0])  rtu.add_static_rule('{7, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<7));
+      //GD if(portUnderTest[1])  rtu.add_static_rule('{6, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<6));
+      if(portUnderTest[2])  rtu.add_static_rule('{5, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<5));
+      if(portUnderTest[3])  rtu.add_static_rule('{4, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<4));
+      if(portUnderTest[4])  rtu.add_static_rule('{3, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<3));
+      if(portUnderTest[5])  rtu.add_static_rule('{2, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<2));
+      //GD if(portUnderTest[6])  rtu.add_static_rule('{1, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<1));
+      //GD if(portUnderTest[7])  rtu.add_static_rule('{10, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<10));
+      //if(portUnderTest[8])  rtu.add_static_rule('{ 9, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<9 ));
+      //if(portUnderTest[9])  rtu.add_static_rule('{ 8, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<8 ));
+      //if(portUnderTest[10]) rtu.add_static_rule('{ 7, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<7 ));
+      //if(portUnderTest[11]) rtu.add_static_rule('{ 6, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<6 ));
+      //if(portUnderTest[12]) rtu.add_static_rule('{ 5, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<5 ));
+      //if(portUnderTest[13]) rtu.add_static_rule('{ 4, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<4 ));
+      //if(portUnderTest[14]) rtu.add_static_rule('{ 3, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<3 ));
+      //if(portUnderTest[15]) rtu.add_static_rule('{ 2, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<2 ));
+      //if(portUnderTest[16]) rtu.add_static_rule('{ 1, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<1 ));
+      //GD if(portUnderTest[17]) rtu.add_static_rule('{ 0, 'h50, 'hca, 'hfe, 'hba, 'hbe}, (1<<0  ));
+
+      $display(">>>>>>>>>>>>>>>>>>> RTU initialization  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
+      for(int dd=0;dd<g_mvlan;dd++)
+        begin
+        def_vlan.port_mask      = sim_vlan_tab[dd].vlan_entry.port_mask;
+        def_vlan.fid            = sim_vlan_tab[dd].vlan_entry.fid;
+        def_vlan.drop           = sim_vlan_tab[dd].vlan_entry.drop;
+        def_vlan.prio           = sim_vlan_tab[dd].vlan_entry.prio;
+        def_vlan.has_prio       = sim_vlan_tab[dd].vlan_entry.has_prio;
+        def_vlan.prio_override  = sim_vlan_tab[dd].vlan_entry.prio_override;
+        if(sim_vlan_tab[dd].valid == 1)
+          rtu.add_vlan_entry(sim_vlan_tab[dd].vlan_id, def_vlan);
+      end
+
+      ///////////////////////////   RTU extension settings:  ////////////////////////////////
+      
+      rtu.rx_add_ff_mac_single(0/*ID*/,1/*valid*/,'h1150cafebabe /*MAC*/);
+      rtu.rx_add_ff_mac_single(1/*ID*/,1/*valid*/,'h111111111111 /*MAC*/);
+      rtu.rx_add_ff_mac_single(2/*ID*/,1/*valid*/,'h0150cafebabe /*MAC*/);
+      rtu.rx_add_ff_mac_single(3/*ID*/,1/*valid*/,'h0050cafebabe /*MAC*/);
+      rtu.rx_add_ff_mac_range (0/*ID*/,1/*valid*/,'h0050cafebabe /*MAC_lower*/,'h0850cafebabe/*MAC_upper*/);
+      rtu.rx_set_port_mirror  (mirror_src_mask, mirror_dst_mask,mr_rx, mr_tx);
+      rtu.rx_set_hp_prio_mask (hp_prio_mask /*hp prio mask*/);
+      rtu.rx_read_cpu_port(); 
+      if(rx_forward_on_fmatch_full)
+        rtu.rx_forward_on_fmatch_full();
+      else
+        rtu.rx_drop_on_fmatch_full();
+      rtu.rx_feature_ctrl(mr, mac_ptp , mac_ll, mac_single, mac_range, mac_br);
+      rtu.rx_fw_to_CPU(hp_fw_cpu,unrec_fw_cpu);
+      rtu.rx_feature_dbg(rtu_dbg_f_fast_match, rtu_dbg_f_full_match);
+      
+      ////////////////////////////////////////////////////////////////////////////////////////
+
+      rtu.enable();
+      $display(">>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
+      
+      hwdu=new(cpu_acc, 'h59000);
+      hwdu.dump_mpm_page_utilization(1);
+
+      wdog = new(cpu_acc, 'h5a000);
+
+      ////////////// sending packest on all the ports (16) according to the portUnderTest mask.///////
+      for(q=0; q<g_max_ports; q++)
+        fork
+          automatic int qq=q;
+          begin
+          if(portUnderTest[qq]) 
+            begin 
+              wait_cycles(start_send_init_delay[qq]);
+              for(int g=0;g<tries_number;g++)
+                begin
+                  //$display("Try port_%d:%d", qq, g);
+                  tx_test(seed                          /* seed    */, 
+                          repeat_number                 /* n_tries */, 
+                          g_is_qvlan                    /* is_q    */, 
+                          0                             /* unvid   */, 
+                          ports[trans_paths[qq].tx].send /* src     */, 
+                          ports[trans_paths[qq].rx].recv /* sink    */,  
+                          trans_paths[qq].tx             /* srcPort */ , 
+                          trans_paths[qq].rx             /* dstPort */, 
+                          trans_paths[qq].op             /*option=4 */);
+                end  //for
+                txrx_done[qq]=1;
+             end   //if
+             
+          end  //thread
+       join_none;//fork
+      
+      fork
+         forever begin
+            nic.update(DUT.WRS_Top.U_Wrapped_SCBCore.vic_irqs[0]);
+            @(posedge clk_sys);
+         end
+         forever begin
+            txtsu.update(DUT.WRS_Top.U_Wrapped_SCBCore.vic_irqs[1]);
+            @(posedge clk_sys);
+         end
+      join_none
+
+   end 
+
+  /* ***************************************************************************************
+   *           Page allocator and resource manager debugging
+   * ***************************************************************************************
+   * this stuff is used to debug allocator and resource manager - it is very slow and has 
+   * static tables which causes simulation to crash if we run it tooo long 
+   * uncomment only if debugging allocator
+   * ***************************************************************************************
+     
+   initial begin
+     int q =0;
+     while(!rst_n) @(posedge clk_sys);
+     
+     if(g_simple_allocator_unicast_check) 
+     forever begin      
+       for(q=0;q<g_max_ports;q++) begin
+         if(portUnderTest[q]) begin 
+           if(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.alloc_done_o[q])
+             mmu_alloc_cnt[q]++;
+           if(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.set_usecnt_done_o[q])
+             mmu_usecnt_cnt[q]++;              
+           if(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.free_done_o[q])
+             mmu_free_cnt[q]++; 
+           if(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.force_free_done_o[q])
+             mmu_f_free_cnt[q]++;
+         end //if
+       end // for
+       @(posedge clk_sys);
+     end //forever
+   end //initial begin
+        
+
+   initial begin 
+     int l = 0;
+     int pg_cnt =0;
+     while(!rst_n) @(posedge clk_sys);
+     while(txrx_done != portUnderTest || g_transition_scenario != 0) @(posedge clk_sys);
+     wait_cycles(100);
+     while(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.free_pages < 985) @(posedge clk_sys);
+     $display("free pages: %4d",DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.free_pages);
+     if(!g_simple_allocator_unicast_check) 
+     begin
+       wait_cycles(2000);// wait so we can do other stuff (i.e. display the other alloc check
+       $stop; //$finish; // finish sim
+     end
+     if(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.g_with_RESOURCE_MGR) begin
+       $display("unknown: %4d",DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.dbg_o[9 : 0]);
+       $display("special: %4d",DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.dbg_o[19:10]);
+       $display("normal : %4d",DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.dbg_o[29:20]);
+     end
+     $display("------------------- this check works only for unicast traffic ------------------------");
+     for(l=0;l<g_max_ports+1;l++) 
+       begin
+         pg_cnt = mmu_alloc_cnt[trans_paths[l].tx]-mmu_f_free_cnt[trans_paths[l].tx]-mmu_free_cnt[trans_paths[l].rx];
+         if(pg_cnt == 2) // very simple sanity check
+           $display("CNT: tx_port=%2d: alloc=%3d; usecnt=%3d; force free=%3d | rx_port=%2d: free=%3d [OK]",trans_paths[l].tx, mmu_alloc_cnt[trans_paths[l].tx], mmu_usecnt_cnt[trans_paths[l].tx],mmu_f_free_cnt[trans_paths[l].tx], trans_paths[l].rx, mmu_free_cnt[trans_paths[l].rx]);         
+         else
+           $display("CNT: tx_port=%2d: alloc=%3d; usecnt=%3d; force free=%3d | rx_port=%2d: free=%3d [--]",trans_paths[l].tx, mmu_alloc_cnt[trans_paths[l].tx], mmu_usecnt_cnt[trans_paths[l].tx],mmu_f_free_cnt[trans_paths[l].tx], trans_paths[l].rx, mmu_free_cnt[trans_paths[l].rx]);         
+       end//if
+     $display("------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ------------------------");
+   end //initla begin
+
+
+   initial begin 
+     int l = 0;
+     int pg_cnt =0;
+     init_alloc_tab();
+     while(!rst_n) @(posedge clk_sys);    
+     forever begin
+     alloc_check(
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.done_alloc_o,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.done_usecnt_o,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.done_free_o,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.done_force_free_o,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.alloc_req_d1.usecnt_alloc,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.alloc_req_d1.usecnt_set,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.alloc_req_d1.pgaddr_free,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.alloc_req_d1.pgaddr_usecnt,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.pgaddr_o,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.rsp_vec_o
+                );
+     @(posedge clk_sys);    
+     end
+   end //initla begin
+
+   initial begin 
+     int l = 0;
+     int pg_cnt =0;
+     init_alloc_tab();
+     while(!rst_n) @(posedge clk_sys);    
+     while(txrx_done != portUnderTest || g_transition_scenario != 0) @(posedge clk_sys);
+     wait_cycles(1000);
+     while(DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.MEMORY_MANAGEMENT_UNIT.ALLOC_CORE.free_pages < 985) @(posedge clk_sys);
+     wait_cycles(1000);
+     dump_results(
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.dbg_pckstart_pageaddr,
+                DUT.U_Top.U_Wrapped_SCBCore.gen_network_stuff.U_Swcore.dbg_pckinter_pageaddr);     
+
+     $stop;  
+   end //initla begin
+   */
+
+endmodule // main
+
diff --git a/testbench/scb_top_8p/run.do b/testbench/scb_top_8p/run.do
new file mode 100644
index 00000000..86fd7475
--- /dev/null
+++ b/testbench/scb_top_8p/run.do
@@ -0,0 +1,14 @@
+make -f Makefile
+#vlog +incdir+../../sim +incdir+../../ip_cores/wr-cores/sim main.sv
+vsim -L secureip -L unisim -t 10fs work.main -voptargs="+acc" +nowarn8684 +nowarn8683
+set StdArithNoWarnings 1
+set NumericStdNoWarnings 1
+ do wave.do
+#do wave_new.do
+#do wave-master.do
+#do wave-allports.do
+radix -hexadecimal
+run 39000us
+#run 100us
+wave zoomfull
+radix -hexadecimal
diff --git a/testbench/scb_top_8p/scb_top_sim_svwrap.svh b/testbench/scb_top_8p/scb_top_sim_svwrap.svh
new file mode 100644
index 00000000..2c48a7ba
--- /dev/null
+++ b/testbench/scb_top_8p/scb_top_sim_svwrap.svh
@@ -0,0 +1,329 @@
+`timescale 1ns/1ps
+
+`include "simdrv_defs.svh"
+`include "simdrv_wr_endpoint.svh"
+`include "if_wb_master.svh"
+`include "if_wb_slave.svh"
+
+
+function automatic bit f_next_8b10b_disparity8(bit cur_disp, bit k, bit [7:0] data);
+   const bit[0:31] c_disPar_6b = 32'b11101000100000011000000110010111;
+   const bit [0:7] c_disPar_4b  = 8'b10001001;
+   bit             dp4bit, dp6bit, new_disp;
+
+   dp4bit = c_disPar_4b[data[7:5]];
+   dp6bit = c_disPar_6b[data[4:0]];
+   new_disp = cur_disp;
+
+   
+   case (cur_disp) 
+     1'b0: if (k ^ dp6bit ^ dp4bit)
+       new_disp = 1;
+     1'b1: if (k ^ dp6bit ^ dp4bit)
+       new_disp = 0;
+   endcase // case (cur_disp)
+
+   if ( data[1:0] != 2'b0 && k) 
+     new_disp = cur_disp;
+   
+   return new_disp;
+endfunction // f_next_8b10b_disparity8
+
+function automatic bit f_next_8b10b_disparity16(bit cur_disp,bit[1:0] k, bit[15:0] data);
+   bit             tmp;
+   bit [7:0]       msb;
+
+   msb = data[15:0];
+   tmp = f_next_8b10b_disparity8(cur_disp, k[1], msb);
+   tmp = f_next_8b10b_disparity8(tmp, k[0], data[7:0]);
+   return tmp;
+endfunction // f_next_8b10b_disparity16
+
+
+
+module scb_top_sim_svwrap
+(
+  clk_sys_i,
+  clk_ref_i,
+  rst_n_i,
+  cpu_irq,
+  clk_swc_mpm_core_i,
+  ep_ctrl_i,
+  ep_failure_type
+);
+
+  parameter g_num_ports  = 8;
+  parameter g_with_TRU   = 1;
+  parameter g_with_TATSU = 1;
+  parameter g_with_HWIU  = 1;
+   
+  input clk_sys_i, clk_ref_i,rst_n_i,clk_swc_mpm_core_i;
+  input bit[g_num_ports-1:0] ep_ctrl_i;
+  output cpu_irq;
+  input [15:0] ep_failure_type;
+
+  reg [15:0] tx_data_invalid[g_num_ports];
+  reg [ 1:0] tx_k_invalid[g_num_ports];
+  reg [g_num_ports-1:0] phys_rdy;
+   
+  wire [g_num_ports-1:0] rbclk;
+  wire [18 * g_num_ports - 1:0] td, rd;
+
+  typedef struct { 
+    logic        rst;
+    logic        loopen;
+    logic        enable;
+    logic        syncen;
+    logic [15:0] tx_data;
+    logic [1:0]  tx_k;
+  } t_phyif_output;
+   
+  typedef struct {
+    logic       ref_clk;
+    logic       tx_disparity;
+    logic       tx_enc_err;
+    logic [15:0]rx_data;
+    logic       rx_clk;
+    logic [1:0] rx_k;
+    logic       rx_enc_err;
+    logic       rx_bitslide;
+  } t_phyif_input;
+
+  t_phyif_output phys_out[g_num_ports];
+  t_phyif_input  phys_in[g_num_ports];
+
+  WBPacketSource to_port[g_num_ports];
+  WBPacketSink   from_port[g_num_ports];
+
+  IWishboneMaster #(32, 32) cpu(clk_sys_i, rst_n_i);
+
+  initial begin
+    cpu.settings.cyc_on_stall = 1;
+    cpu.settings.addr_gran = BYTE;
+  end
+   
+  reg [g_num_ports-1:0] clk_ref_phys = 0; 
+  time  periods[g_num_ports];
+   
+
+  generate 
+    genvar    i;
+      
+    for(i=0; i<g_num_ports; i++) begin
+      initial forever #(periods[i]) clk_ref_phys[i] <= ~clk_ref_phys[i];
+      initial periods[i] = 8ns;
+           
+      IWishboneMaster U_ep_wb (clk_sys_i, rst_n_i) ;
+      IWishboneMaster #(2,16) U_ep_src (clk_sys_i, rst_n_i) ;
+      IWishboneSlave #(2,16) U_ep_snk (clk_sys_i, rst_n_i) ;
+        
+      wr_endpoint #(
+        .g_simulation     (1),
+        .g_pcs_16bit      (1),
+        .g_rx_buffer_size (1024),
+        .g_with_rx_buffer (0),
+        .g_with_timestamper (1),
+        .g_with_dpi_classifier (1),
+        .g_with_vlans (1),
+        .g_with_rtu   (0))
+      DUT (
+        .clk_ref_i (clk_ref_phys[i]),
+        .clk_sys_i (clk_sys_i),
+        .clk_dmtd_i (clk_ref_i),
+        .rst_n_i  (rst_n_i),
+        .pps_csync_p1_i (1'b0),
+
+        .phy_rst_o   (phys_out[i].rst),
+        .phy_loopen_o (),
+        .phy_enable_o (),
+        .phy_syncen_o (),
+        .phy_rdy_i    (phys_rdy[i]),
+
+        .phy_ref_clk_i      (phys_in[i].ref_clk),
+        .phy_tx_data_o      (phys_out[i].tx_data),
+        .phy_tx_k_o         (phys_out[i].tx_k),
+        .phy_tx_disparity_i (phys_in[i].tx_disparity),
+        .phy_tx_enc_err_i   (phys_in[i].tx_enc_err),
+
+        .phy_rx_data_i     (phys_in[i].rx_data),
+        .phy_rx_clk_i      (phys_in[i].rx_clk),
+        .phy_rx_k_i        (phys_in[i].rx_k),
+        .phy_rx_enc_err_i  (phys_in[i].rx_enc_err),
+        .phy_rx_bitslide_i (5'b0),
+
+        .src_dat_o   (U_ep_snk.slave.dat_i),
+        .src_adr_o   (U_ep_snk.slave.adr),
+        .src_sel_o   (U_ep_snk.slave.sel),
+        .src_cyc_o   (U_ep_snk.slave.cyc),
+        .src_stb_o   (U_ep_snk.slave.stb),
+        .src_we_o    (U_ep_snk.slave.we),
+        .src_stall_i (U_ep_snk.slave.stall),
+        .src_ack_i   (U_ep_snk.slave.ack),
+        .src_err_i(1'b0),
+
+        .snk_dat_i   (U_ep_src.master.dat_o[15:0]),
+        .snk_adr_i   (U_ep_src.master.adr[1:0]),
+        .snk_sel_i   (U_ep_src.master.sel[1:0]),
+        .snk_cyc_i   (U_ep_src.master.cyc),
+        .snk_stb_i   (U_ep_src.master.stb),
+        .snk_we_i    (U_ep_src.master.we),
+        .snk_stall_o (U_ep_src.master.stall),
+        .snk_ack_o   (U_ep_src.master.ack),
+        .snk_err_o   (U_ep_src.master.err),
+        .snk_rty_o   (U_ep_src.master.rty),
+        
+        .txtsu_ack_i (1'b1),
+        .rtu_full_i (1'b0),
+
+        .wb_cyc_i(U_ep_wb.master.cyc),
+        .wb_stb_i(U_ep_wb.master.stb),
+        .wb_we_i (U_ep_wb.master.we),
+        .wb_sel_i(U_ep_wb.master.sel),
+        .wb_adr_i(U_ep_wb.master.adr[7:0]),
+        .wb_dat_i(U_ep_wb.master.dat_o),
+        .wb_dat_o(U_ep_wb.master.dat_i),
+        .wb_ack_o (U_ep_wb.master.ack),
+
+         // new stuff
+        .pfilter_pclass_o    (), 
+        .pfilter_drop_o      (), 
+        .pfilter_done_o      (), 
+        .fc_tx_pause_req_i      (1'b0), 
+        .fc_tx_pause_delay_i    (16'b0), 
+        .fc_tx_pause_ready_o    (), 
+        .inject_req_i        (1'b0), 
+        .inject_ready_o      (), 
+        .inject_packet_sel_i (3'b0), 
+        .inject_user_value_i (16'b0), 
+        .led_link_o          (), 
+        .led_act_o           (), 
+        .link_kill_i         ((~ep_ctrl_i[i])), 
+        .link_up_o           () 
+      );
+
+      initial begin
+        CWishboneAccessor ep_acc;
+        CSimDrv_WR_Endpoint ep_drv;
+
+        U_ep_src.settings.gen_random_throttling = 0;
+        U_ep_snk.settings.gen_random_stalls = 0;
+              
+        @(posedge rst_n_i);
+        repeat(100) @(posedge clk_sys_i);
+
+        ep_acc = U_ep_wb.get_accessor();
+        ep_drv = new (ep_acc, 0);
+        ep_drv.init(0);
+
+        from_port[i] = new (U_ep_snk.get_accessor());
+        to_port[i] = new (U_ep_src.get_accessor());
+      end
+    end // for (i=0; i<g_num_ports; i++)
+  endgenerate
+
+  generate
+    genvar j;
+
+    for(j=0;j<g_num_ports;j++) begin
+      assign rbclk[j] = clk_ref_phys[j];
+         
+      ///////////////// nasty hack by Maciej /////////////////
+      // causing sync error in the Switch 
+//    assign td[18 * j + 15 : 18 * j]      = ep_ctrl_i[j] ? phys_out[j].tx_data :  'h00BC;
+//    assign td[18 * j + 17 : 18 * j + 16] = ep_ctrl_i[j] ? phys_out[j].tx_k    : 2'b01;
+      assign td[18 * j + 15 : 18 * j]      = ep_ctrl_i[j] ? phys_out[j].tx_data : tx_data_invalid[j];
+      assign td[18 * j + 17 : 18 * j + 16] = ep_ctrl_i[j] ? phys_out[j].tx_k    : tx_k_invalid[j];
+         
+      // causing transmission error in the driving simulation
+      assign phys_in[j].tx_enc_err         = ~ep_ctrl_i[j];
+      ///////////////////////////////////////////////////////
+
+      assign phys_in[j].ref_clk    = clk_ref_phys[j];
+      assign phys_in[j].rx_data    = rd[18 * j + 15 : 18 * j];
+      assign phys_in[j].rx_k       = rd[18 * j + 17 : 18 * j + 16];
+      assign phys_in[j].rx_clk     = clk_ref_i;
+//    assign phys_in[j].tx_enc_err = 0;
+      assign phys_in[j].rx_enc_err = 0;
+ 
+      always@(posedge clk_ref_i) begin : gen_disparity
+        if(phys_out[j].rst)
+          phys_in[j].tx_disparity = 0;
+        else
+          phys_in[j].tx_disparity = f_next_8b10b_disparity16 (
+                                          phys_in[j].tx_disparity, 
+                                          phys_out[j].tx_k, 
+                                          phys_out[j].tx_data);
+      end
+         
+      always@(posedge clk_sys_i) begin
+        integer jj;
+        if(ep_ctrl_i[j] == 1) begin 
+          tx_data_invalid[j] = 'h00BC;
+          tx_k_invalid[j]    = 2'b01 ;  
+          jj = 0;               
+        end
+        else begin
+          if(ep_failure_type == 1) begin
+            $display("Link failure type: 1 [generate some random noise, starting with data='h00BC, k = 'b01]");
+            while(jj++<100) begin
+              tx_data_invalid[j] = 'h00BC + jj;
+              tx_k_invalid[j]    = 2'b01 & jj;
+              @(posedge clk_sys_i);
+            end
+          tx_data_invalid[j] = 'h00BC;
+          tx_k_invalid[j]    = 2'b01 ;              
+          end
+          else begin //including 0
+            $display("Link failure type: 0 [simply off the link: data='h00BC, k = 'b01]");
+            tx_data_invalid[j] = 'h00BC;
+            tx_k_invalid[j]    = 2'b01 ;
+          end
+        end;
+      end;
+
+    end //for loop
+
+  endgenerate
+
+  // generate phys_rdy (fifo reset signal)
+  initial begin
+    phys_rdy = 8'hff;
+    @(posedge rst_n_i);
+    repeat(20) @(posedge clk_sys_i);
+    phys_rdy = 8'h00;
+    repeat(20) @(posedge clk_sys_i);
+    phys_rdy = 8'hff;
+  end
+   
+  scb_top_sim #(
+    .g_num_ports  (g_num_ports),
+    .g_with_TRU   (g_with_TRU),
+    .g_with_TATSU (g_with_TATSU),
+    .g_with_HWIU  (g_with_HWIU))
+    WRS_Top (
+    .sys_rst_n_i   (rst_n_i),
+    .clk_startup_i (clk_sys_i),
+    .clk_ref_i     (clk_ref_i),
+    .clk_dmtd_i    (clk_ref_i),
+//    .clk_sys_i     (clk_sys_i),
+    .clk_aux_i     (clk_swc_mpm_core_i),
+    .wb_adr_i      (cpu.master.adr),
+    .wb_dat_i      (cpu.master.dat_o),
+    .wb_dat_o      (cpu.master.dat_i),
+    .wb_cyc_i      (cpu.master.cyc),
+    .wb_sel_i      (cpu.master.sel),
+    .wb_stb_i      (cpu.master.stb),
+    .wb_we_i       (cpu.master.we),
+    .wb_ack_o      (cpu.master.ack),
+    .wb_stall_o    (cpu.master.stall),
+    .wb_irq_o      (cpu_irq ),
+    .pps_i         (1'b0 ),
+    .td_o          (rd),
+    .rd_i          (td),
+    .rbclk_i       (rbclk),
+    .phys_rdy_i    (phys_rdy)
+  );
+   
+      
+endmodule // scb_top_sim_svwrap
+
diff --git a/testbench/scb_top_8p/simdrv_wr_endpoint.svh b/testbench/scb_top_8p/simdrv_wr_endpoint.svh
new file mode 100644
index 00000000..f1ef42eb
--- /dev/null
+++ b/testbench/scb_top_8p/simdrv_wr_endpoint.svh
@@ -0,0 +1,250 @@
+`ifndef __SIMDRV_WR_ENDPOINT_SVH
+`define __SIMDRV_WR_ENDPOINT_SVH 1
+`timescale 1ns/1ps
+
+`include "simdrv_defs.svh"
+`include "endpoint_regs.v"
+
+class CSimDrv_WR_Endpoint;
+
+   protected CBusAccessor m_acc;
+   protected uint64_t m_base;
+   protected uint16_t untag_tab[256];
+   
+   function new(CBusAccessor acc, uint64_t base);     
+      int i;
+      m_acc   = acc;
+      m_base  = base;
+//       for(i=0;i<10;i++)
+//         untag_tab[i]=0;
+   endfunction // new
+
+   task vlan_egress_untag(int vid, int untag);
+      uint64_t wval=0;
+      if(untag>0)
+        untag_tab[(vid>>4)] = untag_tab[(vid>>4)] |  (1<<('h000F & vid));
+      else
+        untag_tab[(vid>>4)] = untag_tab[(vid>>4)] & ! (1<<('h000F & vid));
+      
+      wval = (untag_tab[(vid>>4)] << 10) | ('h000003FF & (vid>>4));
+      
+      $display("[vlan_egress_untag], write offset: %d, data: 0x%x (val=0x%x)", 
+      (vid>>4),untag_tab[(vid>>4)], wval);      
+      m_acc.write(m_base + `ADDR_EP_VCR1, wval);
+      
+   //   m_acc.write(m_base + `ADDR_EP_VCR1, vid | ((untag ? 1: 0) << 12));
+   endtask // vlan_egress_untag
+
+   task vlan_egress_untag_direct(uint16_t mask, uint16_t addr);
+      uint64_t wval=0;
+      wval = (mask << 10) | ('h000003FF & addr);
+      $display("[vlan_egress_untag], write offset: %d, data: 0x%x ", addr,wval);      
+      m_acc.write(m_base + `ADDR_EP_VCR1, wval);
+   endtask // vlan_egress_untag
+
+   task vcr1_buffer_write(int is_vlan, int addr, uint64_t data);
+//       $display("addr=0x%x , data=0x%x",addr,data);
+      m_acc.write(m_base + `ADDR_EP_VCR1, 
+                 (((is_vlan ? 0 : 'h200) + addr) << `EP_VCR1_OFFSET_OFFSET)
+                  | (data << `EP_VCR1_DATA_OFFSET));
+   endtask // vlan_buffer_write
+
+   task write_template(int slot, byte data[], int user_offset=-1);
+      int i;
+
+      if(data.size() & 1)
+        $fatal("CSimDrv_WR_Endpoint::write_template(): data size must be even");
+      
+      if(user_offset >= data.size()-2)
+        $fatal("CSimDrv_WR_Endpoint::write_template(): user_offset cannot be set to the last word of the template");
+
+      if(user_offset & 1)
+        $fatal("CSimDrv_WR_Endpoint::write_template(): user_offset must be even");
+
+     
+      $display("write_template: size %d", data.size());
+      
+      for(i=0;i<data.size();i+=2)
+        begin
+           uint64_t v = 0; 
+
+           v = ((data[i] << 8) | data[i+1]) & 64'h0000FFFF;
+           if(i == 0)
+             v |= (1<<16); // start of template
+           if(i == data.size() - 2)
+             v |= (1<<16); // end of template
+
+           if(i == user_offset)
+             v |= (1<<17);
+
+           vcr1_buffer_write(0, slot * 64 + i/2, v);
+        end
+   endtask // write_template
+
+   task write_inj_gen_frame(byte header[], int frame_size);
+      int i;
+      int slot = 0;
+
+      if(header.size() & 1)
+        $fatal("CSimDrv_WR_Endpoint::write_inj_gen_frame(): header size must be even");
+      if(frame_size < 64)
+        $fatal("CSimDrv_WR_Endpoint::write_inj_gen_frame(): frame size needs to be greater than 64");
+      if(frame_size > 1024)
+        $fatal("CSimDrv_WR_Endpoint::write_inj_gen_frame(): frame size needs to be less than 1024 (to be modified)");
+
+      $display("write_template: size %d",frame_size);
+      
+      frame_size = frame_size -4;//CRC which is automaticly suffixed
+      for(i=0;i<frame_size;i+=2)
+        begin
+           uint64_t v = 0; 
+           if(i < header.size())
+             v = ((header[i] << 8) | header[i+1]) & 64'h0000FFFF;
+           else
+             v = 0;
+           
+           if(i == 0)
+             v |= (1<<16); // start of template
+
+           if((frame_size & 1) && (i == (frame_size - 1))) // end of template with odd size
+             v |= (1<<16) | (1<<17);
+           else if(i == (frame_size - 2)) // end of template with even size
+             v |= (1<<16);
+           
+           if(i == header.size())
+             v |= (1<<17); // place for frame ID
+
+           vcr1_buffer_write(0, slot * 64 + i/2, v);
+        end
+   endtask // write_template
+
+   task pfilter_load_microcode(uint64_t mcode[]);
+      int i;
+
+      for(i=0;i<mcode.size();i++)
+        begin
+           m_acc.write(m_base + `ADDR_EP_PFCR1, (mcode[i] & 'hfff) << `EP_PFCR1_MM_DATA_LSB_OFFSET);
+           
+           m_acc.write(m_base + `ADDR_EP_PFCR0, 
+                       (i << `EP_PFCR0_MM_ADDR_OFFSET) | 
+                       (((mcode[i] >> 12) & 'hffffff) << `EP_PFCR0_MM_DATA_MSB_OFFSET) |
+                       `EP_PFCR0_MM_WRITE);
+                       
+           $display("code_pos=%2d : PFCR0=0x%4x PFCR1=0x%4x ",i, 
+                    ((i << `EP_PFCR0_MM_ADDR_OFFSET) | 
+                       (((mcode[i] >> 12) & 'hffffff) << `EP_PFCR0_MM_DATA_MSB_OFFSET) |
+                       `EP_PFCR0_MM_WRITE ),
+                       ((mcode[i] & 'hfff) << `EP_PFCR1_MM_DATA_LSB_OFFSET));
+        end
+           $display("pfilter: loaded code [size=%d] ",mcode.size());
+   endtask // pfilter_load_microcde
+
+   task pfilter_enable(int enable);
+      m_acc.write(m_base + `ADDR_EP_PFCR0, enable ? `EP_PFCR0_ENABLE: 0);
+   endtask // pfilter_enable
+
+`define EP_QMODE_VLAN_DISABLED 2
+   
+   task init(int port_id);
+      m_acc.write(m_base + `ADDR_EP_ECR, `EP_ECR_TX_EN | `EP_ECR_RX_EN | (port_id << `EP_ECR_PORTID_OFFSET)) ;
+      m_acc.write(m_base + `ADDR_EP_RFCR, 1518 << `EP_RFCR_MRU_OFFSET);
+      m_acc.write(m_base + `ADDR_EP_VCR0, `EP_QMODE_VLAN_DISABLED << `EP_VCR0_QMODE_OFFSET);
+      m_acc.write(m_base + `ADDR_EP_TSCR, `EP_TSCR_EN_RXTS | `EP_TSCR_EN_TXTS);
+   endtask // init
+
+   task automatic mdio_read(int addr, output int val);
+      uint64_t rval;
+
+      m_acc.write(m_base + `ADDR_EP_MDIO_CR, (addr>>2) << 16, 4);
+      while(1)begin
+	 m_acc.read(m_base + `ADDR_EP_MDIO_ASR, rval, 4);
+	 if(rval & 'h80000000) begin
+	    val  = rval & 'hffff;
+	    return;
+	 end
+	 
+      end
+   endtask // mdio_read
+
+   task automatic mdio_write(int addr,int val);
+      uint64_t rval;
+
+      m_acc.write(m_base+`ADDR_EP_MDIO_CR, ((addr>>2) << 16) | `EP_MDIO_CR_RW | val);
+      while(1)begin
+	 #8ns;
+	 m_acc.read(m_base+`ADDR_EP_MDIO_ASR, rval);
+	 if(rval & 'h80000000)
+	   return;
+      end
+   endtask // automatic
+
+   task automatic check_link(ref int up);
+      reg[31:0] rval;
+      mdio_read(m_base + `ADDR_MDIO_MSR, rval);
+      up= (rval & `MDIO_MSR_LSTATUS) ? 1 : 0;
+   endtask // check_link
+   
+   task automatic vlan_config(int qmode,int fix_prio, int prio_val, int pvid, int prio_map[]);
+      uint64_t wval;
+      int i;
+      wval = (qmode    << `EP_VCR0_QMODE_OFFSET    ) & `EP_VCR0_QMODE    |
+             (fix_prio << `EP_VCR0_FIX_PRIO_OFFSET ) & `EP_VCR0_FIX_PRIO |
+             (prio_val << `EP_VCR0_PRIO_VAL_OFFSET ) & `EP_VCR0_PRIO_VAL |
+             (pvid     << `EP_VCR0_PVID_OFFSET     ) & `EP_VCR0_PVID;
+      
+      m_acc.write(m_base + `ADDR_EP_VCR0, wval);
+      wval = 0;
+      for(i=0;i<8;i++)
+        wval = ('h7 & prio_map[i]) << (i*3) | wval;
+      
+      m_acc.write(m_base + `ADDR_EP_TCAR, `EP_TCAR_PCP_MAP & (wval << `EP_TCAR_PCP_MAP_OFFSET));
+ 
+      $display("VLAN cofig: qmode=%1d, fix_prio=%1d, prio_val=%1d, pvid=%1d, prio_map=%1d-%1d-%1d-%1d-%1d-%1d-%1d-%1d",
+                qmode,fix_prio, prio_val, pvid, prio_map[7],prio_map[6],prio_map[5],prio_map[4],
+                prio_map[3],prio_map[2],prio_map[1],prio_map[0]);
+   endtask // automatic
+
+   task automatic pause_config(int txpause_802_3,int rxpause_802_3, int txpause_802_1q, int rxpause_802_1q);
+     uint64_t wval;
+     wval  = (txpause_802_1q << `EP_FCR_TXPAUSE_802_1Q_OFFSET) & `EP_FCR_TXPAUSE_802_1Q | // Tx
+             (rxpause_802_1q << `EP_FCR_RXPAUSE_802_1Q_OFFSET) & `EP_FCR_RXPAUSE_802_1Q | // Rx
+             (txpause_802_3  << `EP_FCR_TXPAUSE_OFFSET )       & `EP_FCR_TXPAUSE  | // Tx
+             (rxpause_802_3  << `EP_FCR_RXPAUSE_OFFSET )       & `EP_FCR_RXPAUSE;             // Rx
+     m_acc.write(m_base + `ADDR_EP_FCR, wval);
+     $display("PAUSE cofig: tx_802.3 en=%1d, rx_802.3 en=%1d, tx_801.2Q (prio-based)=%1d, rx_802.1Q (prio-based)=%1d",
+              txpause_802_3, rxpause_802_3, txpause_802_1q, rxpause_802_1q);     
+   endtask // automatic
+
+   task automatic inject_gen_ctrl_config(int interframe_gap, int sel_id, int mode);
+     uint64_t wval = 0;
+     wval  = (interframe_gap << `EP_INJ_CTRL_PIC_CONF_IFG_OFFSET) & `EP_INJ_CTRL_PIC_CONF_IFG | 
+             (sel_id         << `EP_INJ_CTRL_PIC_CONF_SEL_OFFSET) & `EP_INJ_CTRL_PIC_CONF_SEL |
+             (mode           << `EP_INJ_CTRL_PIC_MODE_ID_OFFSET ) & `EP_INJ_CTRL_PIC_MODE_ID_OFFSET  |
+              `EP_INJ_CTRL_PIC_CONF_VALID | `EP_INJ_CTRL_PIC_MODE_VALID;
+     m_acc.write(m_base + `ADDR_EP_INJ_CTRL, wval);
+     $display("INJ ctrl cofig: interframe gap=%1d, pattern sel id=%1d, mode = %1d",interframe_gap,sel_id, mode);     
+   endtask // automatic
+   task automatic inject_gen_ctrl_enable();
+     uint64_t wval = 0;
+     wval  = `EP_INJ_CTRL_PIC_ENA;
+     m_acc.write(m_base + `ADDR_EP_INJ_CTRL, wval);
+     $display("INJ ctrl cofig: enabled");     
+   endtask // automatic
+   task automatic inject_gen_ctrl_disable();
+     uint64_t wval = 0;
+     m_acc.write(m_base + `ADDR_EP_INJ_CTRL, wval);
+     $display("INJ ctrl cofig: disabled");     
+   endtask // automatic
+
+   task automatic inject_gen_ctrl_mode(int mode );
+     uint64_t wval = 0;
+     wval  = (mode           << `EP_INJ_CTRL_PIC_MODE_ID_OFFSET ) & `EP_INJ_CTRL_PIC_MODE_ID  |
+              `EP_INJ_CTRL_PIC_MODE_VALID | `EP_INJ_CTRL_PIC_ENA;
+     m_acc.write(m_base + `ADDR_EP_INJ_CTRL, wval);
+     $display("INJ ctrl cofig: mode = %1d",mode);     
+   endtask // automatic
+
+
+endclass // CSimDrv_WR_Endpoint
+
+`endif //  `ifndef __SIMDRV_WR_ENDPOINT_SVH
diff --git a/testbench/scb_top_8p/wave.do b/testbench/scb_top_8p/wave.do
new file mode 100644
index 00000000..95d7edd9
--- /dev/null
+++ b/testbench/scb_top_8p/wave.do
@@ -0,0 +1,216 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate /main/DUT/rst_n_i
+add wave -noupdate /main/DUT/phys_rdy
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_dat_i}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_adr_i}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_sel_i}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_cyc_i}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_stb_i}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_we_i}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_stall_o}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_ack_o}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_err_o}
+add wave -noupdate -group TB_EP -expand -group EP0 {/main/DUT/genblk1[0]/DUT/snk_rty_o}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_dat_i}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_adr_i}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_sel_i}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_cyc_i}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_stb_i}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_we_i}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_stall_o}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_ack_o}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_err_o}
+add wave -noupdate -group TB_EP -expand -group EP1 {/main/DUT/genblk1[1]/DUT/snk_rty_o}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_dat_i}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_adr_i}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_sel_i}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_cyc_i}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_stb_i}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_we_i}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_stall_o}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_ack_o}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_err_o}
+add wave -noupdate -group TB_EP -expand -group EP6 {/main/DUT/genblk1[6]/DUT/snk_rty_o}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_dat_i}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_adr_i}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_sel_i}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_cyc_i}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_stb_i}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_we_i}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_stall_o}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_ack_o}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_err_o}
+add wave -noupdate -group TB_EP -expand -group EP7 {/main/DUT/genblk1[7]/DUT/snk_rty_o}
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/dbg_rtu_bug(0)
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/rtu_req(0).valid
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/rtu_rsp_ack(0)
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/rxbuf_full
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/fab_pipe
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/dreq_pipe
+add wave -noupdate -expand -group EP0 -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/U_RX_Wishbone_Master/state
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/U_RX_Wishbone_Master/sof_reg
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/U_RX_Wishbone_Master/snk_fab_i.sof
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/U_Rx_Path/U_RX_Wishbone_Master/snk_dreq_o
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/U_Wrapped_Endpoint/src_in.stall
+add wave -noupdate -expand -group EP0 -expand /main/DUT/WRS_Top/U_Wrapped_SCBCore/endpoint_src_out(0)
+add wave -noupdate -expand -group EP0 -expand /main/DUT/WRS_Top/U_Wrapped_SCBCore/endpoint_src_in(0)
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/endpoint_snk_in(0)
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/endpoint_snk_out(0)
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_full_i
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_almost_full_i
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_strobe_p1_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_abort_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_smac_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_dmac_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_vid_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_has_vid_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_prio_o
+add wave -noupdate -expand -group EP0 -expand -group rtu_req(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/gen_endpoints_and_phys(0)/U_Endpoint_X/rtu_rq_has_prio_o
+add wave -noupdate -expand -group EP0 -expand /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/rsp(0)
+add wave -noupdate -expand -group EP0 /main/clk_sys
+add wave -noupdate -expand -group EP0 -group RTU_port -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/port_state
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/rtu_str_config_i.dop_on_fmatch_full
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/drop
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/dbg_fwd_mask
+add wave -noupdate -expand -group EP0 -group RTU_port -expand /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/nice_dbg_o
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/full_match_aboard
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/full_match_aboard_d
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/fast_valid_reg
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/full_valid_reg
+add wave -noupdate -expand -group EP0 -group RTU_port -group FULL_MATCH /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/U_Full_Match/rsp_fifo_write_o
+add wave -noupdate -expand -group EP0 -group RTU_port -group FULL_MATCH -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/U_Full_Match/mstate
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/full_match_in.valid
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/rq_rsp_cnt
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/full_match_req_in_progress
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/delayed_full_match_wr_req
+add wave -noupdate -expand -group EP0 -group RTU_port -expand /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/rtu_rsp_o
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/rtu_rsp_ack_i
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/fast_match
+add wave -noupdate -expand -group EP0 -group RTU_port /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_RTU/ports(0)/U_PortX/full_match
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/nomem_cnt
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/nomem_trig
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/reset_mode
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/rst_cnt
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/rst_trig
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/rst_trig_d0
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/swcrst_n_o
+add wave -noupdate -expand -group EP0 -expand -group Watchdog /main/DUT/WRS_Top/U_Wrapped_SCBCore/GEN_SWC_RST/WDOG/wb_regs_out.cr_port_load_o
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/nomem_o
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/res_full_o
+add wave -noupdate -expand -group EP0 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/res_almost_full_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/dbg_rtu_cnt(0)
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/swc_dbg.ib(0).sof_cnt
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -radix unsigned /main/DUT/WRS_Top/U_Wrapped_SCBCore/dbg_cnt_eq(0)
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -radix unsigned /main/DUT/WRS_Top/U_Wrapped_SCBCore/dbg_cnt_dif(0)
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/dbg_rtu_bug(0)
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/hwiu_dbg1
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/hwiu_dbg2
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/hwiu_val1
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/hwiu_val2
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/snk_cyc_int
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/snk_cyc_d0
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/snk_stb_int
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/snk_o.stall
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/snk_stall_force_h
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/snk_stall_force_l
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/lw_sync_first_stage
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/lw_sync_second_stage
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/lw_sync_2nd_stage_chk
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckstart_page_in_advance
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckinter_page_in_advance
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/tp_ff_done_reg
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ffree_mask
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ffree_pre_mask
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mmu_force_free_req
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mmu_force_free_addr
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mmu_force_free_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mmu_force_free_done_i
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/current_pckstart_pageaddr
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rp_ll_entry_addr
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckstart_pageaddr
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckinter_pageaddr
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rtu_rsp_valid_i
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rtu_dst_port_mask_i
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rtu_rsp_ack_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rcv_pckstart_new
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pcknew_reg
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/s_page_alloc
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/s_rcv_pck
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/s_transfer_pck
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/s_ll_write
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/new_pck_first_page
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/new_pck_first_page_ack
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/new_pck_first_page_p1
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/lw_pckstart_pg_clred
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckstart_pg_clred
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rp_rcv_first_page
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckstart_pageaddr_clred
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/current_pckstart_pageaddr
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/current_pckstart_ll_stored
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/dbg_last_ffreed_pg
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/finish_rcv_pck
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ll_wr_req
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ll_wr_done_i
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -childformat {{/main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ll_entry.size -radix unsigned}} -expand -subitemconfig {/main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ll_entry.size {-radix unsigned}} /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/ll_entry
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mpm_dvalid_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mpm_pg_addr_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mpm_data_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_dat
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_dat_d0
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mpm_dlast
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mpm_pg_req_i
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input -radix unsigned /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/page_word_cnt
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_sof
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_sof_reg
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_sof_reg_ack
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_eof
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/in_pck_err
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/rp_in_pck_error
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/nice_dbg_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mmu_page_alloc_req_o
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/mmu_page_alloc_done_i
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckstart_page_alloc_req
+add wave -noupdate -expand -group EP0 -expand -group SWC_Input /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(0)/INPUT_BLOCK/pckinter_page_alloc_req
+add wave -noupdate /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/pg_nomem
+add wave -noupdate /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/alloc_i
+add wave -noupdate /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/alloc_done_o
+add wave -noupdate /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ports(0)
+add wave -noupdate /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/gen_blocks(8)/INPUT_BLOCK/clk_i
+add wave -noupdate /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/grant_ib_d0
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/initializing
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/done_o
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/q_write_p1
+add wave -noupdate -group PAGE_ALLOC -radix unsigned /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/free_pages
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/alloc_i
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/alloc_req_d0.alloc
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/dbg_alloc_done
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/q_read_p0
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/out_nomem
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/out_nomem_d0
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/out_nomem_d1
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/pg_adv_valid
+add wave -noupdate -group PAGE_ALLOC /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/MEMORY_MANAGEMENT_UNIT/ALLOC_CORE/rd_ptr_p0
+add wave -noupdate -expand -group FREE(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/PCK_PAGES_FREEEING_MODULE/lpd_gen(0)/LPD/ib_force_free_i
+add wave -noupdate -expand -group FREE(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/PCK_PAGES_FREEEING_MODULE/lpd_gen(0)/LPD/ib_force_free_done_o
+add wave -noupdate -expand -group FREE(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/PCK_PAGES_FREEEING_MODULE/lpd_gen(0)/LPD/ib_force_free_pgaddr_i
+add wave -noupdate -expand -group FREE(0) -height 16 /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/PCK_PAGES_FREEEING_MODULE/lpd_gen(0)/LPD/state
+add wave -noupdate -expand -group FREE(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/PCK_PAGES_FREEEING_MODULE/lpd_gen(0)/LPD/fifo_full
+add wave -noupdate -expand -group FREE(0) /main/DUT/WRS_Top/U_Wrapped_SCBCore/gen_network_stuff/U_Swcore/PCK_PAGES_FREEEING_MODULE/lpd_gen(0)/LPD/fifo_clean
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {104100070290 fs} 1} {{Cursor 2} {115415611850 fs} 1}
+configure wave -namecolwidth 264
+configure wave -valuecolwidth 40
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+configure wave -timelineunits ns
+update
+WaveRestoreZoom {0 fs} {166723200 ps}
-- 
GitLab