diff --git a/verilog/rtl/BrqRV_EB1/configs/brqrv.config b/verilog/rtl/BrqRV_EB1/configs/brqrv.config
deleted file mode 100755
index 78952ff..0000000
--- a/verilog/rtl/BrqRV_EB1/configs/brqrv.config
+++ /dev/null
@@ -1,2609 +0,0 @@
-#! /usr/bin/env perl
-
-use strict;   # Do not turn this off or else
-use Data::Dumper;
-use Getopt::Long;
-#use Bit::Vector;
-use lib "$ENV{RV_ROOT}/tools";
-use JSON;
-
-my ($self) = $0 =~ m/.*\/(\w+)/o;
-my @argv_orig = @ARGV;
-
-
-# Master configuration file
-#
-# Configuration is perl hash
-# Output are define files for various flows
-#   Verilog (`defines common to RTL/TB)
-#   Software (#defines)
-#   Whisper (JSON/#defines)
-#
-#   Default values and valid ranges should be specified
-#   Can be overridden via the cmd line (-set=name=value-string)
-#
-#  Format of the hash is
-#    name => VALUE | LIST | HASH
-#
-#    Special name "inside" followed by list .. values must be one of provided list
-#    Special name "derive" followed by equation to derive
-#
-
-# Dump verilog/assembly macros in upper case
-my $defines_case = "U";
-
-# Include these macros in verilog (pattern matched)
-my @verilog_vars = qw (xlen config_key reset_vec tec_rv_icg numiregs nmi_vec target protection.* testbench.* dccm.* retstack core.* iccm.* btb.* bht.* icache.* pic.* regwidth memmap bus.*);
-
-# Include these macros in assembly (pattern matched)
-my @asm_vars = qw (xlen reset_vec nmi_vec target dccm.* iccm.* pic.* memmap  testbench.* protection.* core.*);
-my @asm_overridable = qw (reset_vec nmi_vec) ;
-
-# Include these macros in PD (pattern matched)
-my @pd_vars = qw (physical retstack target btb.* bht.* dccm.* iccm.* icache.* pic.* bus.* reset_vec nmi_vec build_ahb_lite datawidth );
-
-# Dump non-derived/settable vars/values for these vars in stdout :
-my @dvars = qw(retstack btb bht core dccm iccm icache pic protection memmap bus);
-
-# Prefix all macros with
-my $prefix = "RV_";
-# No prefix if keyword has
-my $no_prefix = 'RV|TOP|tec_rv_icg|regwidth|clock_period|^datawidth|verilator|SDVT_AHB';
-
-my $vlog_use__wh = 1;
-
-my %regions_used = ();
-
-# Cmd Line options#{{{
-our %sets;
-our %unsets;
-my $help;
-my @sets = ();
-my @unsets = ();
-
-#Configurations may be changed via the -set option
-#
-#  -set=name=value        : Change the default config parameter value (lowercase)\n";
-#  -unset=name            : Remove the default config parameter (lowercase)\n";
-#                         : Do not prepend RV_ prefex to -set/-unset variables\n";
-#                         : multiple -set/-unset options accepted\n\n";
-#
-
-my $helpusage = "
-
-Main configuration database for brqrv
-
-This script documents, and generates the {`#} define/include files for verilog/assembly/backend flows
-
-It is run by vsim (with defaults) every time the file changes, or when -config_set=VAR=value options are passed to vsim
-
-This script can be run stand-alone by processes not running vsim
-
-User options:
-
-     -target = {default, default_ahb, high_perf, typical_pd}
-        use default settings for one of the targets
-
-     -set=var=value
-        set arbitrary variable(parameter) to a value
-     -unset=var
-        unset any definitions for var
-     -snapshot=name
-        name the configuration (only if no -target specified)
-
-Parameters that can be set by the end user:
-
-     -set=ret_stack_size =      {2, 3, 4, ... 8}
-          size of return stack
-     -set=btb_enable = {0,1}
-          BTB enabled
-     -set=btb_fullya = {0,1}
-          BTB Fully set-associative
-     -set=btb_size =      { 8, 16, 32, 64, 128, 256, 512 }
-          size of branch target buffer
-     -set=bht_size =  {32, 64, 128, 256, 512, 1024, 2048}
-          size of branch history buffer
-     -set=div_bit = {1,2,3,4}
-          number of bits to process each cycle
-     -set=div_new = {0,1}
-          new div algorithm
-     -set=dccm_enable = {0,1}
-          DCCM enabled
-     -set=dccm_num_banks = {2, 4}
-          DCCM number of banks
-     -set=dccm_region =   { 0x0, 0x1, ... 0xf }
-          number of 256Mb memory region containig DCCM
-     -set=dccm_offset =   hexadecimal
-          offset (in bytes) of DCCM witin dccm_region
-          dccm address will be: 256M * dccm_region + dccm_offset\", and that must be aligned
-          to the dccm size or the next larger power of 2 if size is not a power of 2
-     -set=dccm_size   =   { 4, 8, 16, 32, 48, 64, 128, 256, 512 } kB
-          size of DCCM
-     -set=dma_buf_depth = {2,4,5}
-          DMA buffer depth
-     -set=fast_interrupt_redirect =  {0, 1}
-          Fast interrupt redirect mechanism
-     -set=iccm_enable =   { 0, 1 }
-          whether or not ICCM is enabled
-     -set=icache_enable = { 0, 1 }
-          whether or not icache is enabled
-     -set=icache_waypack = { 0, 1 }
-          whether or not icache packing is enabled
-     -set=icache_ecc = { 0, 1 }
-          whether or not icache has ecc - EXPENSIVE 30% sram growth
-          default: icache_ecc==0 (parity)
-     -set=icache_size =   { 8, 16, 32, 64, 128, 256 } kB
-          size of icache
-     -set=icache_2banks = {0,1}
-          Enable 2 banks for icache
-     -set=icache_num_ways { 2,4}
-          Number of ways in icache
-     -set=icache_bypass_enable = {0,1}
-          Enable Icache data bypass buffer
-     -set=icache_num_bypass = {1..8}
-          Number of entries in bypass buffer
-     -set=icache_num_tag_bypass = {1..8}
-          Number of entries in bypass buffer
-     -set=icache_tag_bypass_enable = {0,1}
-          Enable icache tag bypass buffer
-     -set=iccm_region =   { 0x0, 0x1, ... 0xf  }
-          number of 256Mb memory region containing ICCM
-     -set=iccm_offset =   hexadecimal
-          offcet (in bytes) of ICCM within iccm_region
-          iccm address will be: \"256M * iccm_region + iccm_offset\", and that must be aligned
-          to the iccm size or the next larger power of 2 if size is not a power of 2
-     -set=iccm_size   =   { 4 , 8 , 16 , 32, 64, 128, 256, 512 } kB
-          size of ICCM
-     -set=iccm_num_banks = {2,4,8,16}
-          Number of ICCM banks
-     -set=lsu_stbuf_depth = {2,4,8 }
-          LSU stbuf depth
-     -set=lsu_num_nbload = {2,4,8 }
-          LSU number of outstanding Non Blocking loads
-     -set=load_to_use_plus1 = {0 1}
-          Load to use latency (fast or +1cycle)
-     -set=pic_2cycle  =   { 0, 1 }
-          whether or not 2-cycle PIC is enabled (2 cycle pic may result
-          in an overall smaller cycle time)
-     -set=pic_region =    { 0x0, 0x1, ... 0xf  }
-           number of 256Mb memory region containing PIC memory-mapped registers
-     -set=pic_offset =    hexadecial
-          offset (in bytes) of PIC within pic_region
-          pic address will be: \"256M * pic_region + pic_offset\", and that must be aligned
-          to the pic size or the next larger power of 2 if size is not a power of 2
-     -set=pic_size   =    { 32, 64, 128, 256 } kB
-          size of PIC
-     -set=pic_total_int = { 1, 2, 3, ..., 255 }
-          number of interrupt sources in PIC
-     -set=dma_buf_depth = {2,4,5}
-          DMA buffer depth
-     -set=timer_legal_en = {0,1}
-          Internal timers legal/enabled
-     -set=bitmanip_zba = {0,1}
-          Bit manipulation extension ZBa enabled/legal
-     -set=bitmanip_zbb = {0,1}
-          Bit manipulation extension ZBb enabled/legal
-     -set=bitmanip_zbc = {0,1}
-          Bit manipulation extension ZBc enabled/legal
-     -set=bitmanip_zbe = {0,1}
-          Bit manipulation extension ZBe enabled/legal
-     -set=bitmanip_zbf = {0,1}
-          Bit manipulation extension ZBf enabled/legal
-     -set=bitmanip_zbp = {0,1}
-          Bit manipulation extension ZBp enabled/legal
-     -set=bitmanip_zbr = {0,1}
-          Bit manipulation extension ZBr enabled/legal
-     -set=bitmanip_zbs = {0,1}
-          Bit manipulation extension ZBs enabled/legal
-     -fpga_optimize =   { 0, 1 }
-          if 1, minimize clock-gating to facilitate FPGA builds
-     -text_in_iccm = {0, 1}
-          Don't add ICCM preload code in generated link.ld
-
-
-Additionally the following may be set for bus masters and slaves using the -set=var=value option:
-
-        {inst|data}_access_enable[0-7] : default 0
-        {inst|data}_access_addr[0-7] : default 0x00000000
-        {inst|data}_access_mask[0-7] : default 0xffffffff
-";
-
-
-my $ret_stack_size;
-my $btb_size;
-my $bht_size;
-my $btb_fullya;
-my $btb_toffset_size;
-my $dccm_region;
-my $dccm_offset;
-my $dccm_size;
-my $iccm_enable;
-my $icache_enable;
-my $icache_waypack;
-my $icache_num_ways;
-my $icache_banks_way;
-my $icache_ln_sz;
-my $icache_bank_width;
-my $icache_ecc;
-my $iccm_region;
-my $iccm_offset;
-my $iccm_size;
-my $icache_size;
-my $pic_2cycle;
-my $pic_region;
-my $pic_offset;
-my $pic_size;
-my $pic_total_int;
-
-my $top_align_iccm = 0;
-
-my $target = "default";
-my $snapshot ;
-my $build_path ;
-my $verbose;
-my $load_to_use_plus1;
-my $btb_enable;
-my $dccm_enable;
-my $icache_2banks;
-my $lsu_stbuf_depth;
-my $dma_buf_depth;
-my $lsu_num_nbload;
-my $dccm_num_banks;
-my $iccm_num_banks;
-my $verilator;
-my $icache_bypass_enable=1;
-my $icache_num_bypass=2;
-my $icache_num_bypass_width;
-my $icache_tag_bypass_enable=1;
-my $icache_tag_num_bypass=2;
-my $icache_tag_num_bypass_width;
-
-my $fast_interrupt_redirect = 1;                        # ON by default
-my $lsu_num_nbload=4;
-my $ahb = 0;
-my $axi = 1;
-my $text_in_iccm = 1;
-
-my $lsu2dma = 0;
-
-
-$ret_stack_size=8;
-$btb_enable=1;
-$btb_fullya=0;
-$btb_toffset_size=12;
-$btb_size=256;
-$bht_size=256;
-$dccm_enable=1;
-$dccm_region="0xf";
-$dccm_offset="0x40000"; #1*256*1024
-$dccm_size=4;
-$dccm_num_banks=4;
-$iccm_enable=1;
-$iccm_region="0xe";
-$top_align_iccm = 1;
-$iccm_offset="0xe000000"; #0x380*256*1024
-$iccm_size=4;
-$iccm_num_banks=4;
-$icache_enable=0;
-$icache_waypack=1;
-$icache_num_ways=2;
-$icache_banks_way=2;
-$icache_2banks=1;
-$icache_bank_width=8;
-$icache_ln_sz=64;
-$icache_ecc=1;
-$icache_size=16;
-$pic_2cycle=0;
-$pic_region="0xf";
-$pic_offset="0xc0000"; # 3*256*1024
-$pic_size=32;
-$pic_total_int=31;
-$load_to_use_plus1=0;
-$lsu_stbuf_depth=4;
-$dma_buf_depth=5;
-
-my $div_bit=3;       # number of bits to process each cycle for div
-my $div_new=1;       # old or new div algorithm
-
-my $fpga_optimize = 1;
-
-# Default bitmanip options
-my $bitmanip_zba = 0;
-my $bitmanip_zbb = 0;
-my $bitmanip_zbc = 0;
-my $bitmanip_zbe = 0;
-my $bitmanip_zbf = 0;
-my $bitmanip_zbp = 0;
-my $bitmanip_zbr = 0;
-my $bitmanip_zbs = 0;
-
-GetOptions(
-    "help"                => \$help,
-    "target=s"            => \$target,
-    "snapshot=s"          => \$snapshot,
-    "verbose"             => \$verbose,
-    "load_to_use_plus1"   => \$load_to_use_plus1,
-    "ret_stack_size=s"    => \$ret_stack_size,
-    "btb_fullya"          => \$btb_fullya,
-    "btb_enable=s"        => \$btb_enable,
-    "btb_size=s"          => \$btb_size,
-    "bht_size=s"          => \$bht_size,
-    "dccm_enable=s"       => \$dccm_enable,
-    "dccm_region=s"       => \$dccm_region,
-    "dccm_offset=s"       => \$dccm_offset,
-    "dccm_size=s"         => \$dccm_size,
-    "dma_buf_depth"       => \$dma_buf_depth,
-    "iccm_enable=s"       => \$iccm_enable,
-    "icache_enable=s"     => \$icache_enable,
-    "icache_waypack=s"    => \$icache_waypack,
-    "icache_num_ways=s"   => \$icache_num_ways,
-    "icache_ln_sz=s"      => \$icache_ln_sz,
-    "icache_ecc=s"        => \$icache_ecc,
-    "icache_2banks=s"     => \$icache_2banks,
-    "iccm_region=s"       => \$iccm_region,
-    "iccm_offset=s"       => \$iccm_offset,
-    "iccm_size=s"         => \$iccm_size,
-    "lsu_stbuf_depth"     => \$lsu_stbuf_depth,
-    "lsu_num_nbload"      => \$lsu_num_nbload,
-    "pic_2cycle=s"        => \$pic_2cycle,
-    "pic_region=s"        => \$pic_region,
-    "pic_offset=s"        => \$pic_offset,
-    "pic_size=s"          => \$pic_size,
-    "pic_total_int=s"     => \$pic_total_int,
-    "icache_size=s"       => \$icache_size,
-    "set=s@"              => \@sets,
-    "unset=s@"            => \@unsets,
-    "fpga_optimize=s"     => \$fpga_optimize,
-    "text_in_iccm"        => \$text_in_iccm,
-) || die("$helpusage");
-
-if ($help) {
-   print "$helpusage\n";
-   exit;
-}
-
-if (!defined $snapshot ) {
-    $snapshot = $target;
-}
-
-if (!defined $ENV{BUILD_PATH}) {
-    $build_path = "$ENV{PWD}/snapshots/$snapshot" ;
-} else {
-    $build_path = $ENV{BUILD_PATH};
-}
-
-if (! -d "$build_path") {
-    system ("mkdir -p $build_path");
-}
-
-# Parameter file
-my $tdfile = "$build_path/eb1_pdef.vh";
-my $paramfile = "$build_path/eb1_param.vh";
-
-# Verilog defines file path
-my $vlogfile = "$build_path/common_defines.vh";
-
-# Assembly defines file path
-my $asmfile = "$build_path/defines.h";
-
-# PD defines file path
-my $pdfile = "$build_path/pd_defines.vh";
-
-# Whisper config file path
-my $whisperfile = "$build_path/whisper.json";
-#
-# Default linker file
-my $linkerfile = "$build_path/link.ld";
-
-
-# Perl defines file path
-my $perlfile = "$build_path/perl_configs.pl";
-
-my $opensource=0;
-
-
-
-# IDEA: is ghr at 5b the right size for eb1 core
-
-if ($target eq "default") { }
-elsif ($target eq "lsu2dma_axi") {
-    $lsu2dma = 1;
-    $iccm_enable = 1;
-}
-elsif ($target eq "typical_pd") {
-    print "$self: Using target \"typical_pd\"\n";
-    $fpga_optimize = 0;
-    $ret_stack_size=2;
-    $btb_size=32;
-    $bht_size=128;
-    $dccm_size=16;
-    $dccm_num_banks=2;
-    $iccm_enable=0;
-}
-elsif ($target eq "high_perf") {
-    print "$self: Using target \"high_perf\"\n";
-    $btb_size=512;
-    $bht_size=2048;
-}
-elsif ($target eq "default_ahb") {
-    print "$self: Using target \"default_ahb\"\n";
-    $axi = 0;
-    $ahb = 1;
-}
-else {
-    die "$self: ERROR! Unsupported target \"$target\". Supported are 'default', 'default_ahb', 'typical_pd', 'high_perf', 'lsu2dma_axi\n" ;
-}
-
-
-
-# Configure triggers
-our @triggers = (#{{{
-    {
-        "reset"         => ["0x23e00000", "0x00000000", "0x00000000"],
-        "mask"          => ["0x081818c7", "0xffffffff", "0x00000000"],
-        "poke_mask"     => ["0x081818c7", "0xffffffff", "0x00000000"]
-    },
-    {
-        "reset"         => ["0x23e00000", "0x00000000", "0x00000000"],
-        "mask"          => ["0x081810c7", "0xffffffff", "0x00000000"],
-        "poke_mask"     => ["0x081810c7", "0xffffffff", "0x00000000"]
-    },
-    {
-        "reset"         => ["0x23e00000", "0x00000000", "0x00000000"],
-        "mask"          => ["0x081818c7", "0xffffffff", "0x00000000"],
-        "poke_mask"     => ["0x081818c7", "0xffffffff", "0x00000000"]
-    },
-    {
-        "reset"         => ["0x23e00000", "0x00000000", "0x00000000"],
-        "mask"          => ["0x081810c7", "0xffffffff", "0x00000000"],
-        "poke_mask"     => ["0x081810c7", "0xffffffff", "0x00000000"]
-    },
- );#}}}
-
-
-# Configure CSRs
-our %csr = (#{{{
-    "mstatus" => {
-       "reset"         => "0x1800", # MPP bits hard wired to binrary 11.
-       "mask"          => "0x88",   # Only mpie(7) & mie(3) bits writeable
-       "exists"        => "true",
-    },
-    "mie" => {
-        "reset"         => "0x0",
-        # Only external, timer, local, and software writeable
-        "mask"          => "0x70000888",
-        "exists"        => "true",
-    },
-    "mip" => {
-        "reset"         => "0x0",
-        # None of the bits are writeable using CSR instructions
-        "mask"          => "0x0",
-        # Bits corresponding to error overflow, external, timer and stoftware
-        # interrupts are modifiable
-        "poke_mask"     => "0x70000888",
-        "exists"        => "true",
-    },
-   "mcountinhibit" => {
-       "commnet"       => "Performance counter inhibit. One bit per counter.",
-       "reset"         => "0x0",
-       "mask"          => "0x7d",
-       "poke_mask"          => "0x7d",
-       "exists"        => "true",
-   },
-   "mcounteren" => {
-        "exists"       => "false",
-   },
-   "mvendorid" => {
-       "reset"         => "0x45",
-       "mask"          => "0x0",
-       "exists"        => "true",
-   },
-   "marchid" => {
-       "reset"         => "0x00000010",
-       "mask"          => "0x0",
-       "exists"        => "true",
-   },
-   "mimpid" => {
-       "reset"         => "0x3",
-       "mask"          => "0x0",
-       "exists"        => "true",
-   },
-   "misa" => {
-       "reset"         => "0x40001104",
-       "mask"          => "0x0",
-       "exists"        => "true",
-   },
-   "tselect" => {
-       "reset"         => "0x0",
-       "mask"          => "0x3",    # Four triggers
-       "exists"        => "true",
-   },
-   "mhartid" => {
-       "reset"         => "0x0",
-       "mask"          => "0x0",
-       "poke_mask"     => "0xfffffff0",
-       "exists"        => "true",
-   },
-   "dcsr" => {
-       "reset"         => "0x40000003",
-       "mask"          => "0x00008c04",
-       "poke_mask"     => "0x00008dcc",  # cause field modifiable, nmip modifiable
-       "exists"        => "true",
-       "debug"         => "true",
-    },
-    "cycle" => {
-        "exists"       => "false",
-    },
-    "time" => {
-        "exists"       => "false",
-    },
-    "instret" => {
-        "exists"       => "false",
-    },
-    "mhpmcounter3" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter4" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter5" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter6" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter3h" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter4h" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter5h" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmcounter6h" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmevent3" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmevent4" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmevent5" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mhpmevent6" => {
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-# Remaining CSRs are non-standard. These are specific to brqrv
-    "dicawics" => {
-       "number"        => "0x7c8",
-       "reset"         => "0x0",
-       "mask"          => "0x0130fffc",
-       "exists"        => "true",
-    },
-    "dicad0" => {
-       "number"        => "0x7c9",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "dicad1" => {
-       "number"        => "0x7ca",
-       "reset"         => "0x0",
-       "mask"          => "0x3",
-       "exists"        => "true",
-    },
-    "dicago" => {
-       "number"        => "0x7cb",
-       "reset"         => "0x0",
-       "mask"          => "0x0",
-       "exists"        => "true",
-    },
-    "mitcnt0" => {
-       "number"        => "0x7d2",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mitbnd0" => {
-       "number"        => "0x7d3",
-       "reset"         => "0xffffffff",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mitctl0" => {
-       "number"        => "0x7d4",
-       "reset"         => "0x1",
-       "mask"          => "0x00000007",
-       "exists"        => "true",
-    },
-    "mitcnt1" => {
-       "number"        => "0x7d5",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mitbnd1" => {
-       "number"        => "0x7d6",
-       "reset"         => "0xffffffff",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mitctl1" => {
-       "number"        => "0x7d7",
-       "reset"         => "0x1",
-       "mask"          => "0x0000000f",
-       "exists"        => "true",
-    },
-    "mcpc" => {
-       "comment"       => "Core pause",
-       "number"        => "0x7c2",
-       "reset"         => "0x0",
-       "mask"          => "0x0",
-       "exists"        => "true",
-    },
-    "mpmc" => {
-       "number"        => "0x7c6",
-       "reset"         => "0x2",
-       "mask"          => "0x2",
-       "exists"        => "true",
-    },
-    "micect" => {
-       "number"        => "0x7f0",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "miccmect" => {
-       "number"        => "0x7f1",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mdccmect" => {
-       "number"        => "0x7f2",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-    },
-    "mcgc" => {
-       "number"        => "0x7f8",
-       "reset"         => "0x200",
-       "mask"          => "0x000003ff",
-       "poke_mask"     => "0x000003ff",
-       "exists"        => "true",
-    },
-    "mfdc" => {
-       "number"        => "0x7f9",
-       "reset"         => "0x00070000",
-       "mask"          => "0x00071fff",
-       "exists"        => "true",
-    },
-    "mrac" => {
-       "comment"       => "Memory region io and cache control.",
-       "number"        => "0x7c0",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-       "shared"        => "true",
-    },
-    "dmst" => {
-       "comment"       => "Memory synch trigger: Flush caches in debug mode.",
-       "number"        => "0x7c4",
-       "reset"         => "0x0",
-       "mask"          => "0x0",
-       "exists"        => "true",
-       "debug"         => "true",
-    },
-    "dicawics" => {
-       "comment"       => "Cache diagnostics.",
-       "number"        => "0x7c8",
-       "reset"         => "0x0",
-       "mask"          => "0x0130fffc",
-       "exists"        => "true",
-       "debug"         => "true",
-    },
-    "dicad0" => {
-       "comment"       => "Cache diagnostics.",
-       "number"        => "0x7c9",
-       "reset"         => "0x0",
-       "mask"          => "0xffffffff",
-       "exists"        => "true",
-       "debug"         => "true",
-    },
-    "dicad1" => {
-       "comment"       => "Cache diagnostics.",
-       "number"        => "0x7ca",
-       "reset"         => "0x0",
-       "mask"          => "0x3",
-       "exists"        => "true",
-       "debug"         => "true",
-    },
-    "dicago" => {
-       "comment"       => "Cache diagnostics.",
-       "number"        => "0x7cb",
-       "reset"         => "0x0",
-       "mask"          => "0x0",
-       "exists"        => "true",
-       "debug"         => "true",
-    },
-    "meipt" => {
-       "comment"       => "External interrupt priority threshold.",
-       "number"        => "0xbc9",
-       "reset"         => "0x0",
-       "mask"          => "0xf",
-       "exists"        => "true",
-    },
-    "meicpct" => {
-       "comment"       => "External claim id/priority capture.",
-       "number"        => "0xbca",
-       "reset"         => "0x0",
-       "mask"          => "0x0",
-       "exists"        => "true",
-    },
-    "meicidpl" => {
-       "comment"       => "External interrupt claim id priority level.",
-       "number"        => "0xbcb",
-       "reset"         => "0x0",
-       "mask"          => "0xf",
-       "exists"        => "true",
-    },
-    "meicurpl" => {
-       "comment"       => "External interrupt current priority level.",
-       "number"        => "0xbcc",
-       "reset"         => "0x0",
-       "mask"          => "0xf",
-       "exists"        => "true",
-    },
-    "mfdht" => {
-        "comment"      => "Force Debug Halt Threshold",
-        "number"       => "0x7ce",
-        "reset"        => "0x0",
-        "mask"         => "0x0000003f",
-        "exists"       => "true",
-        "shared"       => "true",
-    },
-    "mfdhs" => {
-        "comment"      => "Force Debug Halt Status",
-        "number"       => "0x7cf",
-        "reset"        => "0x0",
-        "mask"         => "0x00000003",
-        "exists"       => "true",
-    },
-    "mscause" => {
-        "number"       => "0x7ff",
-        "reset"        => "0x0",
-        "mask"         => "0x0000000f",
-        "exists"       => "true",
-    },
-
-);#}}}
-
-
-# These are the peformance counters events implemented for eb1s. An
-# event number from outside this list will be replaced by zero if
-# written to an MHPMEVENT CSR.
-my @perf_events = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-                   17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30,
-                   31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
-                   45, 46, 47, 48, 49, 50, 54, 55, 56,
-                   512, 513, 514, 515, 516);
-
-foreach my $i (0 .. 3) {
-    $csr{"pmpcfg$i"} = { "exists" => "false" };
-}
-
-foreach my $i (0 .. 15) {
-    $csr{"pmpaddr$i"} = { "exists" => "false" };
-}
-
-# }}}
-# Main config hash, with default values
-#
-# Hash can be hierarchical with arbitrary levels
-# Hexadecimal values are prefixed with 0x
-#
-# For verilog, if bit width is expected, add to %width hash below
-#
-# NOTE: params/keys marked 'derived' are not settable via cmd line, unless they ALSO have the 'overridable' tag
-#
-our %config = (#{{{
-    "harts"                 => "1",
-    "xlen"                  => "32",                                # Testbench, Do Not Override
-    "numiregs"              => "32",                                # Testbench, Do Not Override
-    "regwidth"              => "32",                                # Testbench, Do Not Override
-    "reset_vec"             => "0xaffff000",                        # Testbench, Overridable
-    "nmi_vec"               => "0x11110000",                        # Testbench, Overridable
-    "physical"              => "1",
-    "num_mmode_perf_regs"   => "4",                                 # Whisper only
-    "max_mmode_perf_event"  => "516",                               # Whisper only: performance counters event ids will be clamped to this
-    "target"                => $target,                             # Flow Infrastructure
-    "config_key"            => "derived",
-    "tec_rv_icg"            => "clockhdr",
-
-    "retstack" => {
-         "ret_stack_size"    => "$ret_stack_size",                  # Design Parm, Overridable
-    },
-
-    "btb"  => {
-         "btb_enable"       => "$btb_enable",                       # Design Parm, Overridable
-         "btb_fullya"       => "$btb_fullya",                       # Design Parm, Overridable
-         "btb_toffset_size" => "$btb_toffset_size",                 # Constant
-         "btb_size"         => "$btb_size",                         # Design Parm, Overridable
-         "btb_index1_hi"    => "derived",
-         "btb_index1_lo"    => "2",                                 # Constant, Do Not Override
-         "btb_index2_hi"    => "derived",
-         "btb_index2_lo"    => "derived",
-         "btb_index3_hi"    => "derived",
-         "btb_index3_lo"    => "derived",
-         "btb_addr_hi"      => "derived",
-         "btb_array_depth"  => "derived",
-         "btb_addr_lo"      => "2",                                 # Constant, Do Not Override
-         "btb_btag_size"    => "derived",
-         "btb_btag_fold"    => "derived",
-         "btb_fold2_index_hash" => "derived",
-    },
-    "bht"  => {
-         "bht_size"         => "$bht_size",                         # Design Parm, Overridable
-         "bht_addr_hi"      => "derived",
-         "bht_addr_lo"      => "2",                                 # Constant, Do Not Override
-         "bht_array_depth"  => "derived",
-         "bht_ghr_size"     => "derived",
-         "bht_ghr_range"    => "derived",
-         "bht_hash_string"  => "derived",
-         "bht_ghr_hash_1"   => "derived",
-    },
-
-    "core" => {
-        "div_bit"            => "$div_bit",                             # Design Parm, Overridable
-        "div_new"            => "$div_new",                             # Design Parm, Overridable
-        "lsu_stbuf_depth"    => "$lsu_stbuf_depth",                     # Design Parm, Overridable
-        "dma_buf_depth"      => "$dma_buf_depth",                       # Design Parm, Overridable
-        "lsu_num_nbload"     => "$lsu_num_nbload",                      # Design Parm, Overridable
-        "opensource"         => "$opensource",                          # Flow Infrastructure
-        "verilator"          => "$verilator",                           # Flow Infrastructure
-        "load_to_use_plus1"  => "$load_to_use_plus1",                   # Design Parm, Overridable
-        "iccm_icache"        => 'derived',                              # Used by design
-        "iccm_only"          => 'derived',                              # Used by design
-        "icache_only"        => 'derived',                              # Used by design
-        "no_iccm_no_icache"  => 'derived',                              # Used by design
-        "timer_legal_en"          => '1',                               # Design Parm, Overridable
-        "bitmanip_zba"             => $bitmanip_zba,                    # Design Parm, Overridable
-        "bitmanip_zbb"             => $bitmanip_zbb,                    # Design Parm, Overridable
-        "bitmanip_zbc"             => $bitmanip_zbc,                    # Design Parm, Overridable
-        "bitmanip_zbe"             => $bitmanip_zbe,                    # Design Parm, Overridable
-        "bitmanip_zbf"             => $bitmanip_zbf,                    # Design Parm, Overridable
-        "bitmanip_zbp"             => $bitmanip_zbp,                    # Design Parm, Overridable
-        "bitmanip_zbr"             => $bitmanip_zbr,                    # Design Parm, Overridable
-        "bitmanip_zbs"             => $bitmanip_zbs,                    # Design Parm, Overridable
-        "fast_interrupt_redirect"  => "$fast_interrupt_redirect",       # Design Parm, Overridable
-        "lsu2dma"            => $lsu2dma,                               # used by design/TB for LSU to DMA bridge
-        "fpga_optimize"      => $fpga_optimize                          # Optimize fpga speed by removing clock gating
-    },
-
-    "dccm" => {
-        "dccm_enable"       => "$dccm_enable",                          # Design Parm, Overridable
-        "dccm_region"       => "$dccm_region",                          # Design Parm, Overridable
-        "dccm_offset"       => "$dccm_offset",                          # Design Parm, Overridable
-        "dccm_size"         => "$dccm_size",                            # Design Parm, Overridable
-        "dccm_num_banks"    => "$dccm_num_banks",                       # Design Parm, Overridable
-        "dccm_sadr"         => 'derived',
-        "dccm_eadr"         => 'derived',
-        "dccm_bits"         => 'derived',
-        "dccm_bank_bits"    => 'derived',
-        "dccm_data_width"   => 'derived',
-        "dccm_fdata_width"  => 'derived',
-        "dccm_byte_width"   => 'derived',
-        "dccm_width_bits"   => 'derived',
-        "dccm_index_bits"   => 'derived',
-        "dccm_ecc_width"    => 'derived',
-        "lsu_sb_bits"       => 'derived',
-        "dccm_data_cell"    => 'derived',
-        "dccm_rows"         => 'derived',
-        "dccm_reserved"     => 'derived',                               # Testbench use only : reserve dccm space for SW/stack - no random r/w
-    },
-
-
-    "iccm" => {
-        "iccm_enable"       => "$iccm_enable",                          # Design Parm, Overridable
-        "iccm_region"       => "$iccm_region",                          # Design Parm, Overridable
-        "iccm_offset"       => "$iccm_offset",                          # Design Parm, Overridable
-        "iccm_size"         => "$iccm_size",                            # Design Parm, Overridable
-        "iccm_num_banks"    => "$iccm_num_banks",                       # Design Parm, Overridable
-        "iccm_bank_bits"    => 'derived',
-        "iccm_index_bits"   => 'derived',
-        "iccm_rows"         => 'derived',
-        "iccm_data_cell"    => 'derived',
-        "iccm_sadr"         => 'derived',
-        "iccm_eadr"         => 'derived',
-        "iccm_reserved"     => 'derived',                               # Testbench use only : reserve iccm space for SW/handlers - no random r/w
-        "iccm_bank_hi"      => 'derived',
-        "iccm_bank_index_lo"      => 'derived',
-    },
-    "icache" => {
-        "icache_enable"      => "$icache_enable",                        # Design Parm, Overridable
-        "icache_waypack"     => "$icache_waypack",                       # Design Parm, Overridable
-        "icache_num_ways"    => "$icache_num_ways",                      # Design Parm, Overridable
-        "icache_banks_way"   => "2",                                     # Design Parm, Constant
-        "icache_bank_width"  => "8",                                     # Design Parm, Constant
-        "icache_ln_sz"       => "$icache_ln_sz",                         # Design Parm, Overridable
-        "icache_size"        => "$icache_size",                          # Design Parm, Overridable
-        "icache_bypass_enable"      => "$icache_bypass_enable",          # Design Parm, Overridable
-        "icache_num_bypass"         => "$icache_num_bypass",             # Design Parm, Overridable
-        "icache_num_bypass_width"   => 'derived',
-        "icache_tag_bypass_enable"      => "$icache_tag_bypass_enable",  # Design Parm, Overridable
-        "icache_tag_num_bypass"         => "$icache_tag_num_bypass",     # Design Parm, Overridable
-        "icache_tag_num_bypass_width"   => 'derived',
-        "icache_bank_hi"    => 'derived',
-        "icache_bank_lo"    => 'derived',
-        "icache_data_cell"  => 'derived',
-        "icache_tag_cell"   => 'derived',
-        "icache_tag_depth"  => 'derived',
-        "icache_data_depth"  => 'derived',
-        "icache_num_lines"   => 'derived',
-        "icache_num_lines_bank"  => 'derived',
-        "icache_num_lines_way"  => 'derived',
-        "icache_data_depth"         => 'derived',
-        "icache_tag_lo"          => 'derived',
-        "icache_index_hi"        => 'derived',
-        "icache_data_index_lo"   => 'derived',
-        "icache_data_width"      => 'derived',
-        "icache_fdata_width"     => 'derived',
-        "icache_tag_index_lo"    => 'derived',
-        "icache_ecc"             => "$icache_ecc",                      # Design Parm, Overridable
-        "icache_2banks"          => "$icache_2banks",                   # Design Parm, Overridable
-        "icache_bank_bits"       => "derived",
-        "icache_status_bits"     => "derived",
-        "icache_num_beats"       => "derived",
-        "icache_beat_bits"       => "derived",
-        "icache_scnd_last"       => "derived",
-        "icache_beat_addr_hi"    => "derived",
-    },
-    "pic" => {
-        "pic_2cycle"         => "$pic_2cycle",                          # Design Parm, Overridable
-        "pic_region"         => "$pic_region",                          # Design Parm, Overridable
-        "pic_offset"         => "$pic_offset",                          # Design Parm, Overridable
-        "pic_size"           => "$pic_size",                            # Design Parm, Overridable
-        "pic_base_addr"      => 'derived',
-        "pic_total_int_plus1"      => 'derived',                        # pic_total_int + 1
-        "pic_total_int"      => "$pic_total_int",                       # Design Parm, Overridable
-        "pic_int_words"      => 'derived',                              # number of 32 bit words for packed registers (Xmax)
-        "pic_bits"           => 'derived',                              # of bits needs to address the PICM
-        "pic_meipl_offset"   => '0x0000',                               # Testbench only: Offset of meipl relative to pic_base_addr
-        "pic_meip_offset"    => '0x1000',                               # Testbench only: Offset of meip relative to pic_base_addr
-        "pic_meie_offset"    => '0x2000',                               # Testbench only: Offset of meie relative to pic_base_addr
-        "pic_mpiccfg_offset" => '0x3000',                               # Testbench only: Offset of mpiccfg relative to pic_base_addr
-        "pic_meipt_offset"   => '0x3004',                               # Testbench only: Offset of meipt relative to pic_base_addr -- deprecated
-        "pic_meigwctrl_offset" => '0x4000',                             # Testbench only: gateway control regs relative to pic_base_addr
-        "pic_meigwclr_offset"  => '0x5000',                             # Testbench only: gateway clear regs relative to pic_base_addr
-
-        "pic_meipl_mask"     => '0xf',                                  # Whisper only
-        "pic_meip_mask"      => '0x0',
-        "pic_meie_mask"      => '0x1',
-        "pic_mpiccfg_mask"   => '0x1',
-        "pic_meipt_mask"     => '0x0',
-        "pic_meigwctrl_mask" => '0x3',
-        "pic_meigwclr_mask"  => '0x0',
-
-        "pic_meipl_count"     => 'derived',
-        "pic_meip_count"      => 'derived',
-        "pic_meie_count"      => 'derived',
-        "pic_mpiccfg_count"   => 1,
-        "pic_meipt_count"     => 'derived',
-        "pic_meigwctrl_count" => 'derived',
-        "pic_meigwclr_count"  => 'derived',
-    },
-    "testbench" => {                                                    # Testbench only
-        "TOP"               => "tb_top",
-        "RV_TOP"            => "`TOP.rvtop",
-        "CPU_TOP"           => "`RV_TOP.brqrv",
-        "clock_period"      => "100",
-        "build_ahb_lite"    => "$ahb",
-        "build_axi4"        => "$axi",
-        "build_axi_native"  => "1",
-        "assert_on"         => "",
-        "ext_datawidth"     => "64",
-        "ext_addrwidth"     => "32",
-        "sterr_rollback"    => "0",
-        "lderr_rollback"    => "1",
-        "SDVT_AHB"          => "$ahb",
-    },
-    "protection" => {                                                   # Design parms, Overridable - static MPU
-        "inst_access_enable0" => "0x0",
-        "inst_access_addr0"   => "0x00000000",
-        "inst_access_mask0"   => "0xffffffff",
-        "inst_access_enable1" => "0x0",
-        "inst_access_addr1"   => "0x00000000",
-        "inst_access_mask1"   => "0xffffffff",
-        "inst_access_enable2" => "0x0",
-        "inst_access_addr2"   => "0x00000000",
-        "inst_access_mask2"   => "0xffffffff",
-        "inst_access_enable3" => "0x0",
-        "inst_access_addr3"   => "0x00000000",
-        "inst_access_mask3"   => "0xffffffff",
-        "inst_access_enable4" => "0x0",
-        "inst_access_addr4"   => "0x00000000",
-        "inst_access_mask4"   => "0xffffffff",
-        "inst_access_enable5" => "0x0",
-        "inst_access_addr5"   => "0x00000000",
-        "inst_access_mask5"   => "0xffffffff",
-        "inst_access_enable6" => "0x0",
-        "inst_access_addr6"   => "0x00000000",
-        "inst_access_mask6"   => "0xffffffff",
-        "inst_access_enable7" => "0x0",
-        "inst_access_addr7"   => "0x00000000",
-        "inst_access_mask7"   => "0xffffffff",
-        "data_access_enable0" => "0x0",
-        "data_access_addr0"   => "0x00000000",
-        "data_access_mask0"   => "0xffffffff",
-        "data_access_enable1" => "0x0",
-        "data_access_addr1"   => "0x00000000",
-        "data_access_mask1"   => "0xffffffff",
-        "data_access_enable2" => "0x0",
-        "data_access_addr2"   => "0x00000000",
-        "data_access_mask2"   => "0xffffffff",
-        "data_access_enable3" => "0x0",
-        "data_access_addr3"   => "0x00000000",
-        "data_access_mask3"   => "0xffffffff",
-        "data_access_enable4" => "0x0",
-        "data_access_addr4"   => "0x00000000",
-        "data_access_mask4"   => "0xffffffff",
-        "data_access_enable5" => "0x0",
-        "data_access_addr5"   => "0x00000000",
-        "data_access_mask5"   => "0xffffffff",
-        "data_access_enable6" => "0x0",
-        "data_access_addr6"   => "0x00000000",
-        "data_access_mask6"   => "0xffffffff",
-        "data_access_enable7" => "0x0",
-        "data_access_addr7"   => "0x00000000",
-        "data_access_mask7"   => "0xffffffff",
-     },
-    "memmap" => {                                                       # Testbench only
-        "serialio"          => 'derived, overridable',                  # Testbench only
-        "external_data"     => 'derived, overridable',                  # Testbench only
-        "debug_sb_mem"      => 'derived, overridable',                  # Testbench only
-        "external_data_1"   => 'derived, overridable',                  # Testbench only
-        "external_mem_hole" => 'default disabled',                      # Testbench only
-#       "consoleio"         => 'derived',   # Part of serial io.
-    },
-    "bus" => {
-        "lsu_bus_tag"      => 'derived',
-        "lsu_bus_id"       => '1',
-        "lsu_bus_prty"     => '2',
-        "dma_bus_tag"      => '1',
-        "dma_bus_id"       => '1',
-        "dma_bus_prty"     => '2',
-        "sb_bus_tag"       => '1',
-        "sb_bus_id"        => '1',
-        "sb_bus_prty"      => '2',
-        "ifu_bus_tag"      => 'derived',
-        "ifu_bus_id"       => '1',
-        "ifu_bus_prty"     => '2',
-        "bus_prty_default" => '3',
-    },
-    "triggers" => \@triggers,                                           # Whisper only
-    "csr" => \%csr,                                                     # Whisper only
-    "perf_events" => \@perf_events,                                     # Whisper only
-    "even_odd_trigger_chains" => "true",                                # Whisper only
-);
-
-
-# These parms are used in the Verilog and will be part of global parm structure
-# need to have this be width in binary
-# for now autosize to the data
-our %verilog_parms = (
-        "lsu2dma"                 => '1',
-        "timer_legal_en"          => '1',
-        "bitmanip_zbb"            => '1',
-        "bitmanip_zbs"            => '1',
-        "bitmanip_zba"            => '1',
-        "bitmanip_zbc"            => '1',
-        "bitmanip_zbe"            => '1',
-        "bitmanip_zbf"            => '1',
-        "bitmanip_zbp"            => '1',
-        "bitmanip_zbr"            => '1',
-        "fast_interrupt_redirect" => '1',
-
-        "inst_access_enable0" => '1',
-        "inst_access_addr0"   => '32',
-        "inst_access_mask0"   => '32',
-        "inst_access_enable1" => '1',
-        "inst_access_addr1"   => '32',
-        "inst_access_mask1"   => '32',
-        "inst_access_enable2" => '1',
-        "inst_access_addr2"   => '32',
-        "inst_access_mask2"   => '32',
-        "inst_access_enable3" => '1',
-        "inst_access_addr3"   => '32',
-        "inst_access_mask3"   => '32',
-        "inst_access_enable4" => '1',
-        "inst_access_addr4"   => '32',
-        "inst_access_mask4"   => '32',
-        "inst_access_enable5" => '1',
-        "inst_access_addr5"   => '32',
-        "inst_access_mask5"   => '32',
-        "inst_access_enable6" => '1',
-        "inst_access_addr6"   => '32',
-        "inst_access_mask6"   => '32',
-        "inst_access_enable7" => '1',
-        "inst_access_addr7"   => '32',
-        "inst_access_mask7"   => '32',
-        "data_access_enable0" => '1',
-        "data_access_addr0"   => '32',
-        "data_access_mask0"   => '32',
-        "data_access_enable1" => '1',
-        "data_access_addr1"   => '32',
-        "data_access_mask1"   => '32',
-        "data_access_enable2" => '1',
-        "data_access_addr2"   => '32',
-        "data_access_mask2"   => '32',
-        "data_access_enable3" => '1',
-        "data_access_addr3"   => '32',
-        "data_access_mask3"   => '32',
-        "data_access_enable4" => '1',
-        "data_access_addr4"   => '32',
-        "data_access_mask4"   => '32',
-        "data_access_enable5" => '1',
-        "data_access_addr5"   => '32',
-        "data_access_mask5"   => '32',
-        "data_access_enable6" => '1',
-        "data_access_addr6"   => '32',
-        "data_access_mask6"   => '32',
-        "data_access_enable7" => '1',
-        "data_access_addr7"   => '32',
-        "data_access_mask7"   => '32',
-        "iccm_bits"              => '5',
-        "iccm_bank_hi"           => '5',
-        "iccm_bank_index_lo"     => '5',
-        "icache_bank_bits"       => '3',
-        "icache_status_bits"     => '3',
-        "icache_num_beats"       => '4',
-        "icache_beat_bits"       => '4',
-        "icache_scnd_last"       => '4',
-        "icache_beat_addr_hi"    => '4',
-        "icache_bypass_enable"   => '1',
-        "icache_num_bypass"      => '4',
-        "icache_num_bypass_width"    => '4',
-        "icache_tag_bypass_enable"   => '1',
-        "icache_tag_num_bypass"      => '4',
-        "icache_tag_num_bypass_width"    => '4',
-        "iccm_icache"        => '1',
-        "iccm_only"          => '1',
-        "icache_only"        => '1',
-        "no_iccm_no_icache"  => '1',
-         "build_axi4" => '1',
-         "build_ahb_lite" => '1',
-         "build_axi_native" => '1',
-         "lsu_num_nbload_width" => '3',
-         "lsu_num_nbload"    => '5',
-         "ret_stack_size"   => '4',
-         "btb_fullya"       => '1',
-         "btb_toffset_size" => '5',
-         "btb_enable"       => '1',
-         "btb_size"         => '10',
-         "btb_index1_hi"    => '5',
-         "btb_index1_lo"    => '5',
-         "btb_index2_hi"    => '5',
-         "btb_index2_lo"    => '5',
-         "btb_index3_hi"    => '5',
-         "btb_index3_lo"    => '5',
-         "btb_addr_hi"      => '5',
-         "btb_array_depth"  => '9',
-         "btb_addr_lo"      => '2',
-         "btb_btag_size"    => '5',
-         "btb_btag_fold"    => '1',
-         "btb_fold2_index_hash" => '1',
-         "bht_size"         => '12',
-         "bht_addr_hi"      => '4',
-         "bht_addr_lo"      => '2',
-         "bht_array_depth"  => '11',
-         "bht_ghr_size"     => '4',
-         "bht_ghr_hash_1"   => '1',
-        "div_bit"                 => '3',
-        "div_new"                 => '1',
-        "lsu_stbuf_depth"   => '4',
-        "dma_buf_depth"     => '3',
-        "load_to_use_plus1"        => '1',
-        "dccm_enable"       => '1',
-        "dccm_region"       => '4',
-        "dccm_size"         => '10',
-        "dccm_num_banks"    => '5',
-        "dccm_sadr"         => '32',
-        "dccm_bits"         => '5',
-        "dccm_bank_bits"    => '3',
-        "dccm_data_width"   => '6',
-        "dccm_fdata_width"  => '6',
-        "dccm_byte_width"   => '3',
-        "dccm_width_bits"   => '2',
-        "dccm_index_bits"   => '4',
-        "dccm_ecc_width"    => '3',
-        "lsu_sb_bits"       => '5',
-        "iccm_enable"       => '1',
-        "iccm_region"       => '4',
-        "iccm_size"         => '10',
-        "iccm_num_banks"    => '5',
-        "iccm_bank_bits"    => '3',
-        "iccm_index_bits"   => '4',
-        "iccm_sadr"         => '32',
-        "icache_enable"     => '1',
-        "icache_waypack"    => '1',
-        "icache_num_ways"   => '3',
-        "icache_banks_way"  => '3',
-        "icache_bank_width" => '4',
-        "icache_ln_sz"      => '7',
-        "icache_size"       => '9',
-        "icache_bank_hi"    => '3',
-        "icache_bank_lo"    => '2',
-        "icache_tag_depth"  => '13',
-        "icache_data_depth"      => '14',
-        "icache_tag_lo"          => '5',
-        "icache_index_hi"        => '5',
-        "icache_data_index_lo"   => '3',
-        "icache_data_width"      => '7',
-        "icache_fdata_width"     => '7',
-        "icache_tag_index_lo"    => '3',
-        "icache_ecc"             => '1',
-        "icache_2banks"          => '1',
-        "pic_2cycle"         => '1',
-        "pic_region"         => '4',
-        "pic_size"           => '9',
-        "pic_base_addr"      => '32',
-        "pic_total_int_plus1"  => '9',
-        "pic_total_int"      => '8',
-        "pic_int_words"      => '4',
-        "pic_bits"           => '5',
-        "lsu_bus_tag"      => '4',
-        "lsu_bus_id"       => '1',
-        "lsu_bus_prty"     => '2',
-        "dma_bus_tag"      => '4',
-        "dma_bus_id"       => '5',
-        "dma_bus_prty"     => '2',
-        "sb_bus_tag"       => '4',
-        "sb_bus_id"        => '1',
-        "sb_bus_prty"      => '2',
-        "ifu_bus_tag"      => '4',
-        "ifu_bus_id"       => '1',
-        "ifu_bus_prty"     => '2',
-        "bus_prty_default" => '2',
-);
-
-# to make sure parameter math works properly add 4 to each key of %verilog_parms - was an issue in btb calculations
-my $key;
-foreach $key (keys %verilog_parms) {
-    $verilog_parms{$key} += 4;
-}
-
-
-# need to figure out what to do here
-# for now none of these can be parameters
-
-
-# move deletes lower
-
-# Perform any overrides first before derived values
-#
-map_set_unset();
-
-gen_define("","", \%config,"",[]);
-
-# perform final checks
-my $c;
-$c=$config{retstack}{ret_stack_size}; if (!($c >=2 && $c <=8))                                 { die("$helpusage\n\nFAIL: ret_stack_size == $c;   ILLEGAL !!!\n\n"); }
-$c=$config{btb}{btb_size};            if (!($c==8||$c==16||$c==32||$c==64||$c==128||$c==256||$c==512))        { die("$helpusage\n\nFAIL: btb_size == $c;         ILLEGAL !!!\n\n"); }
-$c=$config{btb}{btb_size};            if (($c==64||$c==128||$c==256||$c==512) && $config{btb}{btb_fullya})        { die("$helpusage\n\nFAIL: btb_size == $c; btb_fullya=1        ILLEGAL !!!\n\n"); }
-$c=$config{iccm}{iccm_region};        if (!($c>=0 && $c<16))                                   { die("$helpusage\n\nFAIL: iccm_region == $c       ILLEGAL !!!\n\n"); }
-$c=$config{iccm}{iccm_offset};        if (!($c>=0  && $c<256*1024*1024 && ($c&0xfff)==0))      { die("$helpusage\n\nFAIL: iccm_offset == $c       ILLEGAL !!!\n\n"); }
-$c=$config{iccm}{iccm_size};          if (!($c==2||$c==4||$c==8||$c==16||$c==32||$c==64||$c==128||$c==256||$c==512)) { die("$helpusage\n\nFAIL: iccm_size == $c         ILLEGAL !!!\n\n"); }
-$c=$config{iccm}{iccm_num_banks};     if (!($c==2 || $c==4 || ($c==8  && $config{iccm}{iccm_size} != 2) || ($c==16 && $config{iccm}{iccm_size} > 4)))    { die("$helpusage\n\nFAIL: iccm_num_banks == $c    ILLEGAL !!!\n\n"); }
-$c=$config{iccm}{iccm_enable};        if (!($c==0  || $c==1))                                  { die("$helpusage\n\nFAIL: iccm_enable == $c       ILLEGAL !!!\n\n"); }
-$c=$config{dccm}{dccm_region};        if (!($c>=0  && $c<16))                                  { die("$helpusage\n\nFAIL: dccm_region == $c       ILLEGAL !!!\n\n"); }
-$c=$config{dccm}{dccm_num_banks};     if (!(($c==2 && $config{dccm}{dccm_size} != 48) || $c==4 || ($c==8 && $config{dccm}{dccm_size} != 48) || ($c==16 && $config{dccm}{dccm_size} != 4 && $config{dccm}{dccm_size} != 48)))
-                                                                                               { die("$helpusage\n\nFAIL: dccm_num_banks == $c    ILLEGAL !!!\n\n"); }
-$c=$config{dccm}{dccm_offset};         if (!($c>=0  && $c<256*1024*1024 && ($c&0xfff)==0))      { die("$helpusage\n\nFAIL: dccm_offset == $c       ILLEGAL !!!\n\n"); }
-$c=$config{dccm}{dccm_size};           if (!($c==4||$c==8||$c==16||$c==32||$c==48||$c==64||$c==128||$c==256||$c==512))        { die("$helpusage\n\nFAIL: dccm_size == $c         ILLEGAL !!!\n\n"); }
-$c=$config{pic}{pic_2cycle};           if (!($c==0  || $c==1))                                  { die("$helpusage\n\nFAIL: pic_2cycle == $c        ILLEGAL !!!\n\n"); }
-$c=$config{pic}{pic_region};           if (!($c>=0 && $c<16))                                   { die("$helpusage\n\nFAIL: pic_region == $c        ILLEGAL !!!\n\n"); }
-$c=$config{pic}{pic_offset};           if (!($c>=0  && $c<256*1024*1024 && ($c&0xfff)==0))      { die("$helpusage\n\nFAIL: pic_offset == $c        ILLEGAL !!!\n\n"); }
-$c=$config{pic}{pic_size};             if (!($c==32 || $c==64 || $c==128 || $c==256))           { die("$helpusage\n\nFAIL: pic_size == $c          ILLEGAL !!!\n\n"); }
-$c=$config{pic}{pic_total_int};        if (  $c<1 || $c>255)                                    { die("$helpusage\n\nFAIL: pic_total_int == $c     ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_num_bypass}; if ($c<1 || $c>8)                                        { die("$helpusage\n\nFAIL: icache_num_bypass == $c       ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_bypass_enable};     if (!($c==0 || $c==1))                            { die("$helpusage\n\nFAIL: icache_bypass_enable == $c     ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_tag_num_bypass}; if ($c<1 || $c>8)                                        { die("$helpusage\n\nFAIL: icache_tag_num_bypass == $c       ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_tag_bypass_enable};     if (!($c==0 || $c==1))                            { die("$helpusage\n\nFAIL: icache_tag_bypass_enable == $c     ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_enable};     if (!($c==0 || $c==1))                                   { die("$helpusage\n\nFAIL: icache_enable == $c     ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_waypack};    if (!($c==0 || $c==1))                                   { die("$helpusage\n\nFAIL: icache_waypack == $c     ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_num_ways};   if (!($c==2 || $c==4))                                   { die("$helpusage\n\nFAIL: icache_num_ways == $c   ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_ln_sz};      if (!($c==32 || $c==64))                                 { die("$helpusage\n\nFAIL: icache_ln_sz == $c   ILLEGAL !!!\n\n"); }
-$c=$config{icache}{icache_size};       if (!($c==8 || $c==16 || $c==32 || $c==64 || $c==128 || $c==256)) { die("$helpusage\n\nFAIL: icache_size == $c       ILLEGAL !!!\n\n"); }
-$c=$config{core}{div_bit};             if (!($c==1 || $c==2 || $c==3 || $c==4  ))               { die("$helpusage\n\nFAIL: div_bit == $c   ILLEGAL !!!\n\n"); }
-$c=$config{core}{div_new};             if (!($c==0 || $c==1))                                   { die("$helpusage\n\nFAIL: div_new == $c    ILLEGAL !!!\n\n"); }
-$c=$config{core}{lsu_stbuf_depth};     if (!($c==2 || $c==4 || $c==8))                          { die("$helpusage\n\nFAIL: lsu_stbuf_depth == $c   ILLEGAL !!!\n\n"); }
-$c=$config{core}{dma_buf_depth};       if (!($c==2 || $c==4 || $c==5))                          { die("$helpusage\n\nFAIL: dma_buf_depth == $c     ILLEGAL !!!\n\n"); }
-$c=$config{core}{lsu_num_nbload};      if (!($c==2 || $c==4 || $c==8))                          { die("$helpusage\n\nFAIL: lsu_num_nbload == $c   ILLEGAL !!!\n\n"); }
-
-
-# force div_bit to be 1 for old div algorithm
-if ($config{core}{div_new}==0 && $config{core}{div_bit}!=1) {
-    die("$helpusage\n\nFAIL: div_new=0 requires div_bit=1   ILLEGAL !!!\n\n");
-}
-
-$c=$config{protection}{inst_access_addr0}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr0 lower 6b must be 0s $c !!!\n\n"); }
-$c=$config{protection}{inst_access_addr1}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr1 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_addr2}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr2 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_addr3}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr3 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_addr4}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr4 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_addr5}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr5 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_addr6}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr6 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_addr7}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: inst_access_addr7 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{inst_access_mask0}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask0 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask1}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask1 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask2}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask2 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask3}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask3 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask4}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask4 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask5}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask5 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask6}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask6 invalid !!!\n\n"); }
-$c=$config{protection}{inst_access_mask7}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: inst_access_mask7 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_addr0}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr0 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr1}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr1 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr2}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr2 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr3}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr3 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr4}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr4 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr5}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr5 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr6}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr6 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_addr7}; if ((hex($c)&0x3f) != 0)                                { die("$helpusage\n\nFAIL: data_access_addr7 lower 6b must be 0s !!!\n\n"); }
-$c=$config{protection}{data_access_mask0}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask0 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask1}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask1 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask2}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask2 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask3}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask3 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask4}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask4 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask5}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask5 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask6}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask6 invalid !!!\n\n"); }
-$c=$config{protection}{data_access_mask7}; if ((hex($c)&0x3f) != 63  || invalid_mask($c))                               { die("$helpusage\n\nFAIL: data_access_mask7 invalid !!!\n\n"); }
-
-if ((hex($config{protection}{inst_access_addr0}) & hex($config{protection}{inst_access_mask0}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr0 and inst_access_mask0 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr1}) & hex($config{protection}{inst_access_mask1}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr1 and inst_access_mask1 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr2}) & hex($config{protection}{inst_access_mask2}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr2 and inst_access_mask2 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr3}) & hex($config{protection}{inst_access_mask3}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr3 and inst_access_mask3 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr4}) & hex($config{protection}{inst_access_mask4}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr4 and inst_access_mask4 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr5}) & hex($config{protection}{inst_access_mask5}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr5 and inst_access_mask5 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr6}) & hex($config{protection}{inst_access_mask6}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr6 and inst_access_mask6 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{inst_access_addr7}) & hex($config{protection}{inst_access_mask7}))!=0)    { die("$helpusage\n\nFAIL: inst_access_addr7 and inst_access_mask7 must be orthogonal!!!\n\n"); }
-
-if ((hex($config{protection}{data_access_addr0}) & hex($config{protection}{data_access_mask0}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr0 and data_access_mask0 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr1}) & hex($config{protection}{data_access_mask1}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr1 and data_access_mask1 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr2}) & hex($config{protection}{data_access_mask2}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr2 and data_access_mask2 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr3}) & hex($config{protection}{data_access_mask3}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr3 and data_access_mask3 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr4}) & hex($config{protection}{data_access_mask4}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr4 and data_access_mask4 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr5}) & hex($config{protection}{data_access_mask5}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr5 and data_access_mask5 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr6}) & hex($config{protection}{data_access_mask6}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr6 and data_access_mask6 must be orthogonal!!!\n\n"); }
-if ((hex($config{protection}{data_access_addr7}) & hex($config{protection}{data_access_mask7}))!=0)    { die("$helpusage\n\nFAIL: data_access_addr7 and data_access_mask7 must be orthogonal!!!\n\n"); }
-
-
-# Fill in derived configuration entries.
-
-if (($config{icache}{icache_enable}==0 || grep(/icache_enable/, @unsets)) && $config{iccm}{iccm_enable}==0) {
-    $config{core}{no_iccm_no_icache}=1;
-}
-elsif (($config{icache}{icache_enable}==0 || grep(/icache_enable/, @unsets)) && $config{iccm}{iccm_enable}==1) {
-    $config{core}{iccm_only}=1;
-}
-elsif ($config{icache}{icache_enable}==1 && $config{iccm}{iccm_enable}==0) {
-    $config{core}{icache_only}=1;
-}
-elsif ($config{icache}{icache_enable}==1 && $config{iccm}{iccm_enable}==1) {
-    $config{core}{iccm_icache}=1;
-}
-
-if (!$config{dccm}{dccm_enable}) {
-    $config{core}{fast_interrupt_redirect} = 0;
-    print "$self: Disabling fast_interrupt_redirect because DCCM not enabled\n";
-}
-
-
-
-$config{btb}{btb_btag_fold} = 0;
-$config{btb}{btb_fold2_index_hash} = 0;
-$config{btb}{btb_btag_size} = 31;
-
-if($config{btb}{btb_size}==512){
-    $config{btb}{btb_index1_hi} = 9;
-    $config{btb}{btb_index2_hi} = 17;
-    $config{btb}{btb_index3_hi} = 25;
-    $config{btb}{btb_array_depth}= 256;
-    $config{btb}{btb_btag_size} = 5;
-} elsif($config{btb}{btb_size}==256){
-    $config{btb}{btb_index1_hi} = 8;
-    $config{btb}{btb_index2_hi} = 15;
-    $config{btb}{btb_index3_hi} = 22;
-    $config{btb}{btb_array_depth}= 128;
-    $config{btb}{btb_btag_size} = 6;
-} elsif($config{btb}{btb_size}==128){
-    $config{btb}{btb_index1_hi} = 7;
-    $config{btb}{btb_index2_hi} = 13;
-    $config{btb}{btb_index3_hi} = 19;
-    $config{btb}{btb_array_depth}= 64;
-    $config{btb}{btb_btag_size} = 7;
-} elsif($config{btb}{btb_size}==64){
-    $config{btb}{btb_index1_hi} = 6;
-    $config{btb}{btb_index2_hi} = 11;
-    $config{btb}{btb_index3_hi} = 16;
-    $config{btb}{btb_array_depth}= 32;
-    $config{btb}{btb_btag_size} = 8;
-} elsif($config{btb}{btb_size}==32){
-    $config{btb}{btb_index1_hi} = 5;
-    $config{btb}{btb_index2_hi} = 9;
-    $config{btb}{btb_index3_hi} = 13;
-    $config{btb}{btb_array_depth}= 16;
-    $config{btb}{btb_btag_size} = 9 unless $config{btb}{btb_fullya};
-    $config{btb}{btb_btag_fold} = 1;
-} elsif($config{btb}{btb_size}<32){
-    #verif issues require these even though they are not needed
-    $config{btb}{btb_index1_hi} = 5;
-    $config{btb}{btb_index2_hi} = 8;
-    $config{btb}{btb_index3_hi} = 11;
-    $config{btb}{btb_fullya} = 1;
-}
-
-$config{btb}{btb_index2_lo} = $config{btb}{btb_index1_hi}+1;
-$config{btb}{btb_index3_lo} = $config{btb}{btb_index2_hi}+1;
-$config{btb}{btb_addr_hi}   = $config{btb}{btb_index1_hi};
-
-if($config{bht}{bht_size}==2048){
-    $config{bht}{bht_ghr_size}= 10;
-    $config{bht}{bht_ghr_range}= "9:0";
-    $config{bht}{bht_array_depth}= 1024;
-    $config{bht}{bht_addr_hi}= 11;
-} elsif($config{bht}{bht_size}==1024){
-    $config{bht}{bht_ghr_size}= 9;
-    $config{bht}{bht_ghr_range}= "8:0";
-    $config{bht}{bht_array_depth}= 512;
-    $config{bht}{bht_addr_hi}= 10;
-} elsif($config{bht}{bht_size}==512){
-    $config{bht}{bht_ghr_size}= 8;
-    $config{bht}{bht_ghr_range}= "7:0";
-    $config{bht}{bht_array_depth}= 256;
-    $config{bht}{bht_addr_hi}= 9;
-} elsif($config{bht}{bht_size}==256){
-    $config{bht}{bht_ghr_size}= 7;
-    $config{bht}{bht_ghr_range}= "6:0";
-    $config{bht}{bht_addr_hi} = 8;
-    $config{bht}{bht_array_depth}= 128;
-} elsif($config{bht}{bht_size}==128){
-    $config{bht}{bht_ghr_size}= 6;
-    $config{bht}{bht_ghr_range}= "5:0";
-    $config{bht}{bht_addr_hi} = 7;
-    $config{bht}{bht_array_depth}= 64;
-} elsif($config{bht}{bht_size}==64){
-    $config{bht}{bht_ghr_size}= 5;
-    $config{bht}{bht_ghr_range}= "4:0";
-    $config{bht}{bht_addr_hi} = 6;
-    $config{bht}{bht_array_depth}= 32;
-} elsif($config{bht}{bht_size}==32){
-    $config{bht}{bht_ghr_size}= 4;
-    $config{bht}{bht_ghr_range}= "3:0";
-    $config{bht}{bht_addr_hi} = 5;
-    $config{bht}{bht_array_depth}= 16;
-}
-$config{bht}{bht_ghr_hash_1} = ($config{bht}{bht_ghr_size} > ($config{btb}{btb_index1_hi}-1));
-
-$config{bht}{bht_hash_string} = &ghrhash($config{btb}{btb_index1_hi}, $config{bht}{bht_ghr_size});
-
-
-
-
-# PIC derived
-$config{pic}{pic_base_addr} = (hex($config{pic}{pic_region})<<28) +
-    (hex($config{pic}{pic_offset}));
-$config{pic}{pic_base_addr} = sprintf("0x%x", $config{pic}{pic_base_addr});
-
-$config{pic}{pic_int_words} = int($config{pic}{pic_total_int}/32 +0.9);
-$config{pic}{pic_bits} = 10 + log2($config{pic}{pic_size});
-
-$config{pic}{pic_total_int_plus1} = $config{pic}{pic_total_int} + 1;
-$config{pic}{pic_meipl_count} = $config{pic}{pic_total_int};
-$config{pic}{pic_meip_count} = $config{pic}{pic_int_words};
-$config{pic}{pic_meie_count} = $config{pic}{pic_total_int};
-$config{pic}{pic_meipt_count} = $config{pic}{pic_total_int};
-$config{pic}{pic_meigwctrl_count} = $config{pic}{pic_total_int};
-$config{pic}{pic_meigwclr_count} = $config{pic}{pic_total_int};
-
-$config{icache}{icache_num_bypass_width}     = int(log2($config{icache}{icache_num_bypass})) + 1;
-$config{icache}{icache_tag_num_bypass_width} = int(log2($config{icache}{icache_tag_num_bypass})) + 1;
-
-$config{core}{lsu_num_nbload_width} = log2($config{core}{lsu_num_nbload});
-
-$config{bus}{lsu_bus_tag} = log2($config{core}{lsu_num_nbload}) + 1;
-
-$config{bus}{ifu_bus_tag} = log2($config{icache}{icache_ln_sz}/8);
-
-$config{dccm}{dccm_sadr} = (hex($config{dccm}{dccm_region})<<28) +
-    (hex($config{dccm}{dccm_offset}));
-$config{dccm}{dccm_sadr} = sprintf("0x%x", $config{dccm}{dccm_sadr});
-
-$config{dccm}{dccm_eadr} = (hex($config{dccm}{dccm_region})<<28) +
-    (hex($config{dccm}{dccm_offset})) + size($config{dccm}{dccm_size})-1;
-$config{dccm}{dccm_eadr} = sprintf("0x%x", $config{dccm}{dccm_eadr});
-
-$config{dccm}{dccm_reserved} = sprintf("0x%x", ($config{dccm}{dccm_size}>=16)? 5120 : ($config{dccm}{dccm_size}*1024)/4);
-
-$config{dccm}{dccm_bits} =  ($config{dccm}{dccm_size}==48 ) ? 16 : 10 + log2($config{dccm}{dccm_size});
-
-$config{dccm}{dccm_bank_bits} = log2($config{dccm}{dccm_num_banks});
-$config{dccm}{dccm_data_width} = 32;
-$config{dccm}{dccm_fdata_width} = $config{dccm}{dccm_data_width} + log2($config{dccm}{dccm_data_width}) + 2;
-$config{dccm}{dccm_byte_width} = $config{dccm}{dccm_data_width}/8;
-
-$config{dccm}{dccm_width_bits} = log2($config{dccm}{dccm_byte_width});
-$config{dccm}{dccm_index_bits} = $config{dccm}{dccm_bits} - $config{dccm}{dccm_bank_bits} - $config{dccm}{dccm_width_bits};
-
-$config{dccm}{dccm_ecc_width} = log2($config{dccm}{dccm_data_width}) + 2;
-$config{dccm}{lsu_sb_bits}    = $config{dccm}{dccm_bits};
-$config{dccm}{dccm_rows}      = ($config{dccm}{dccm_size}==48 ) ? (2**($config{dccm}{dccm_index_bits}-1) +  2**$config{dccm}{dccm_index_bits})/2   : 2**$config{dccm}{dccm_index_bits};
-$config{dccm}{dccm_data_cell} = "ram_$config{dccm}{dccm_rows}x39";
-
-
-$config{icache}{icache_num_lines}      = $config{icache}{icache_size}*1024/$config{icache}{icache_ln_sz};
-$config{icache}{icache_num_lines_way}  = $config{icache}{icache_num_lines}/$config{icache}{icache_num_ways};
-$config{icache}{icache_num_lines_bank} = $config{icache}{icache_num_lines}/($config{icache}{icache_num_ways} * $config{icache}{icache_banks_way});
-$config{icache}{icache_data_depth}        = $config{icache}{icache_num_lines_bank} * $config{icache}{icache_ln_sz} /$config{icache}{icache_bank_width};
-$config{icache}{icache_data_index_lo}  = log2($config{icache}{icache_bank_width}) + log2($config{icache}{icache_banks_way});
-$config{icache}{icache_index_hi}       = $config{icache}{icache_data_index_lo} + log2($config{icache}{icache_data_depth}) -1;
-$config{icache}{icache_bank_hi}        = $config{icache}{icache_data_index_lo}  - 1;
-$config{icache}{icache_bank_lo}        = log2($config{icache}{icache_bank_width});
-$config{icache}{icache_tag_index_lo}   = log2($config{icache}{icache_ln_sz});
-$config{icache}{icache_tag_lo}         = log2($config{icache}{icache_num_lines_way}) + $config{icache}{icache_tag_index_lo};
-$config{icache}{icache_tag_depth}      = $config{icache}{icache_num_lines}/$config{icache}{icache_num_ways};
-$config{icache}{icache_data_width}     = 8*$config{icache}{icache_bank_width};
-
-$config{icache}{icache_bank_bits}     = 1+$config{icache}{icache_bank_hi}-$config{icache}{icache_bank_lo};
-$config{icache}{icache_status_bits}   =  $config{icache}{icache_num_ways}-1;
-$config{icache}{icache_num_beats}     = ($config{icache}{icache_ln_sz}==64) ? 8 : 4;
-$config{icache}{icache_beat_bits}     = ($config{icache}{icache_ln_sz}==64) ? 3 : 2;
-$config{icache}{icache_scnd_last}     = ($config{icache}{icache_ln_sz}==64) ? 6 : 2;
-$config{icache}{icache_beat_addr_hi}  = ($config{icache}{icache_ln_sz}==64) ? 5 : 4;
-
-
-if (($config{icache}{icache_ecc})) {
-$config{icache}{icache_fdata_width} = $config{icache}{icache_data_width} + 7;
-$config{icache}{icache_data_cell}   = "ram_$config{icache}{icache_data_depth}x$config{icache}{icache_fdata_width}";
-$config{icache}{icache_tag_cell}    = ($config{icache}{icache_tag_depth} == 32) ? "ram_$config{icache}{icache_tag_depth}x26" : "ram_$config{icache}{icache_tag_depth}x25";
-
-}
-else {
-$config{icache}{icache_fdata_width} = $config{icache}{icache_data_width} + 4;
-$config{icache}{icache_data_cell}   = "ram_$config{icache}{icache_data_depth}x$config{icache}{icache_fdata_width}";
-$config{icache}{icache_tag_cell}    = "ram_$config{icache}{icache_tag_depth}x21";
-}
-$config{pic}{pic_total_int_plus1} = $config{pic}{pic_total_int} + 1;
-# Defines with explicit values in the macro name
-$config{dccm}{"dccm_num_banks_$config{dccm}{dccm_num_banks}"} = "";
-$config{dccm}{"dccm_size_$config{dccm}{dccm_size}"} = "";
-
-# If ICCM offset not explicitly provided, align to TOP of the region
-if ($top_align_iccm && ($config{iccm}{iccm_offset} eq $iccm_offset) && ($config{iccm}{iccm_size} < 32)) {
-    $config{iccm}{iccm_region} = "0xa";
-    print "$self: Setting default iccm region to region $config{iccm}{iccm_region}\n";
-    $config{iccm}{iccm_offset} = sprintf("0x%08x",256*1024*1024-size($config{iccm}{iccm_size}));
-    print "$self: Aligning default iccm offset to top of region @ $config{iccm}{iccm_offset}\n";
-}
-$config{iccm}{iccm_sadr} = (hex($config{iccm}{iccm_region})<<28) +
-                           (hex($config{iccm}{iccm_offset}));
-$config{iccm}{iccm_sadr} = sprintf("0x%08x", $config{iccm}{iccm_sadr});
-
-$config{iccm}{iccm_eadr} = (hex($config{iccm}{iccm_region})<<28) +
-                           (hex($config{iccm}{iccm_offset})) + size($config{iccm}{iccm_size})-1;
-$config{iccm}{iccm_eadr} = sprintf("0x%08x", $config{iccm}{iccm_eadr});
-
-$config{iccm}{iccm_reserved} = sprintf("0x%x", ($config{iccm}{iccm_size}>30)? 4096 : ($config{iccm}{iccm_size}*1024)/4);
-
-$config{iccm}{iccm_bits}       = 10 + log2($config{iccm}{iccm_size});
-$config{iccm}{iccm_bank_bits}  = log2($config{iccm}{iccm_num_banks});  //-1;
-$config{iccm}{iccm_index_bits} = $config{iccm}{iccm_bits} - $config{iccm}{iccm_bank_bits} - 2;   # always 4 bytes
-$config{iccm}{iccm_rows}       = 2**$config{iccm}{iccm_index_bits};
-$config{iccm}{iccm_data_cell}  = "ram_$config{iccm}{iccm_rows}x39";
-
-$config{iccm}{iccm_bank_hi}        = 2+$config{iccm}{iccm_bank_bits}-1;
-$config{iccm}{iccm_bank_index_lo}  = 1+$config{iccm}{iccm_bank_hi};
-
-# Defines with explicit values in the macro name
-$config{iccm}{"iccm_num_banks_$config{iccm}{iccm_num_banks}"} = "";
-$config{iccm}{"iccm_size_$config{iccm}{iccm_size}"} = "";
-
-# Track used regions
-
-$regions_used{hex($config{iccm}{iccm_region})} = 1;
-$regions_used{hex($config{dccm}{dccm_region})} = 1;
-$regions_used{hex($config{pic}{pic_region})} = 1;
-$regions_used{hex($config{reset_vec})>>28} = 1;
-
-# Find an unused region for serial IO
-for (my $rgn = 15;$rgn >= 0; $rgn--) {
-    if (($rgn != hex($config{iccm}{iccm_region})) &&
-        ($rgn != hex($config{dccm}{dccm_region})) &&
-        ($rgn != (hex($config{pic}{pic_region})))) {
-        $config{memmap}{serialio} = ($rgn << 28) + (22<<18);
-        $regions_used{$rgn} = 1;
-        last;
-    }
-}
-
-$config{memmap}{serialio} = sprintf("0x%08x", $config{memmap}{serialio});
-
-# Find an unused region for external data
-for (my $rgn = 15;$rgn >= 0; $rgn--) {
-    if (($rgn != hex($config{iccm}{iccm_region})) &&
-        ($rgn != hex($config{dccm}{dccm_region})) &&
-        ($rgn != (hex($config{memmap}{serialio})>>28)) &&
-        ($rgn != (hex($config{pic}{pic_region})))) {
-        $config{memmap}{external_data} = ($rgn << 28) + (22<<18);
-        $regions_used{$rgn} = 1;
-        last;
-    }
-}
-$config{memmap}{external_data} = sprintf("0x%08x", $config{memmap}{external_data});
-#
-
-# Unused region for second data
-for (my $rgn = 15;$rgn >= 0; $rgn--) {
-    if (($rgn != hex($config{iccm}{iccm_region})) &&
-        ($rgn != hex($config{dccm}{dccm_region})) &&
-        ($rgn != (hex($config{memmap}{serialio})>>28)) &&
-        ($rgn != (hex($config{memmap}{external_data})>>28)) &&
-        ($rgn != (hex($config{pic}{pic_region})))) {
-        $config{memmap}{external_data_1} = ($rgn << 28);
-        $regions_used{$rgn} = 1;
-        last;
-    }
-}
-$config{memmap}{external_data_1} = sprintf("0x%08x", $config{memmap}{external_data_1});
-
-
-#$config{memmap}{consoleio} = hex($config{memmap}{serialio}) + 0x100;
-#$config{memmap}{consoleio} = sprintf("0x%x", $config{memmap}{consoleio});
-
-# Find an unused region for debug_sb_memory data
-for (my $rgn = 15;$rgn >= 0; $rgn--) {
-    if (($rgn != hex($config{iccm}{iccm_region})) &&
-        ($rgn != hex($config{dccm}{dccm_region})) &&
-        ($rgn != (hex($config{memmap}{serialio})>>28)) &&
-        ($rgn != (hex($config{memmap}{external_data})>>28)) &&
-        ($rgn != (hex($config{memmap}{external_data_1})>>28)) &&
-        ($rgn != (hex($config{pic}{pic_region})))) {
-        $config{memmap}{debug_sb_mem} = ($rgn << 28) + (22<<18);
-        $regions_used{$rgn} = 1;
-        last;
-    }
-}
-$config{memmap}{debug_sb_mem} = sprintf("0x%08x", $config{memmap}{debug_sb_mem});
-
-
-# Create the memory map hole for random testing
-# Only do this if masks are not enabled already
-if (hex($config{protection}{data_access_enable0}) > 0 ||
-    hex($config{protection}{data_access_enable1}) > 0 ||
-    hex($config{protection}{data_access_enable2}) > 0 ||
-    hex($config{protection}{data_access_enable3}) > 0 ||
-    hex($config{protection}{data_access_enable4}) > 0 ||
-    hex($config{protection}{data_access_enable5}) > 0 ||
-    hex($config{protection}{data_access_enable6}) > 0 ||
-    hex($config{protection}{data_access_enable7}) > 0 ||
-    hex($config{protection}{inst_access_enable0}) > 0 ||
-    hex($config{protection}{inst_access_enable1}) > 0 ||
-    hex($config{protection}{inst_access_enable2}) > 0 ||
-    hex($config{protection}{inst_access_enable3}) > 0 ||
-    hex($config{protection}{inst_access_enable4}) > 0 ||
-    hex($config{protection}{inst_access_enable5}) > 0 ||
-    hex($config{protection}{inst_access_enable6}) > 0 ||
-    hex($config{protection}{inst_access_enable7}) > 0 ||
-    $config{memmap}{external_mem_hole} eq "default disabled"){
-    delete($config{memmap}{external_mem_hole}) ;
-} else {
-    # Unused region to create a memory map hole, if not already specified
-    if ($config{memmap}{external_mem_hole} eq 'derived, overridable') {
-        for (my $rgn = 15;$rgn >= 0; $rgn--) {
-            if (!defined($regions_used{$rgn})) {
-                $config{memmap}{external_mem_hole} = ($rgn << 28);
-                $regions_used{$rgn} = 1;
-                last;
-            }
-        }
-    } else {
-        my $rgn = hex($config{memmap}{external_mem_hole})>>28;
-        $config{memmap}{external_mem_hole} = ($rgn << 28);
-        $regions_used{$rgn} =1;
-    }
-    my $hreg = $config{memmap}{external_mem_hole}>>28;
-    $config{protection}{data_access_addr0} = sprintf("0x%x", (($hreg^8)&8)<<28);
-    $config{protection}{data_access_mask0} = "0x7fffffff";
-    $config{protection}{data_access_addr1} = sprintf("0x%x", ($hreg&8) << 28 |(($hreg^4)&4)<<28);
-    $config{protection}{data_access_mask1} = "0x3fffffff";
-    $config{protection}{data_access_addr2} = sprintf("0x%x", ($hreg&12) <<28 | (($hreg^2)&2) <<28);
-    $config{protection}{data_access_mask2} = "0x1fffffff";
-    $config{protection}{data_access_addr3} = sprintf("0x%x", ($hreg&14) << 28 |(($hreg^1)&1)<<28);
-    $config{protection}{data_access_mask3} = "0x0fffffff";
-    $config{protection}{data_access_enable0} = "1";
-    $config{protection}{data_access_enable1} = "1";
-    $config{protection}{data_access_enable2} = "1";
-    $config{protection}{data_access_enable3} = "1";
-    $config{protection}{inst_access_addr0} = sprintf("0x%x", (($hreg^8)&8)<<28);
-    $config{protection}{inst_access_mask0} = "0x7fffffff";
-    $config{protection}{inst_access_addr1} = sprintf("0x%x", ($hreg&8) << 28 |(($hreg^4)&4)<<28);
-    $config{protection}{inst_access_mask1} = "0x3fffffff";
-    $config{protection}{inst_access_addr2} = sprintf("0x%x", ($hreg&12) <<28 | (($hreg^2)&2) <<28);
-    $config{protection}{inst_access_mask2} = "0x1fffffff";
-    $config{protection}{inst_access_addr3} = sprintf("0x%x", ($hreg&14) << 28 |(($hreg^1)&1)<<28);
-    $config{protection}{inst_access_mask3} = "0x0fffffff";
-    $config{protection}{inst_access_enable0} = "1";
-    $config{protection}{inst_access_enable1} = "1";
-    $config{protection}{inst_access_enable2} = "1";
-    $config{protection}{inst_access_enable3} = "1";
-
-    $config{memmap}{external_mem_hole} = sprintf("0x%08x", $config{memmap}{external_mem_hole});
-}
-
-#Define 5 unused regions for used in TG
-
-my $unrg = 0;
-foreach my $unr (reverse(0 .. 15)) {
-    if (!defined($regions_used{$unr})) {
-        $config{memmap}{"unused_region$unrg"} = sprintf("0x%08x",($unr << 28));
-        $regions_used{$unr} = 1;
-        $unrg++;
-    }
-}
-
-if ($target eq "baseline") {
-    $config{reset_vec} = $config{iccm}{iccm_sadr};
-    $config{testbench}{magellan} = 1;
-    print "$self: Setting reset_vec = ICCM start address for Baseline\n";
-}
-
-
-# Output bit-width specifiers for these variables
-our %widths = (
-        "dccm_region"   => "4",
-        "dccm_offset"   => "28",
-        "dccm_sadr"     => "32",
-        "dccm_eadr"     => "32",
-        "pic_region"    => "4",
-        "pic_offset"    => "10",
-        "pic_base_addr" => "32",
-        "iccm_region"   => "4",
-        "iccm_offset"   => "10",
-        "iccm_sadr"     => "32",
-        "iccm_eadr"     => "32",
-        "bus_prty_default" => "2",
-        "inst_access_enable0" => "1",
-        "inst_access_enable1" => "1",
-        "inst_access_enable2" => "1",
-        "inst_access_enable3" => "1",
-        "inst_access_enable4" => "1",
-        "inst_access_enable5" => "1",
-        "inst_access_enable6" => "1",
-        "inst_access_enable7" => "1",
-        "data_access_enable0" => "1",
-        "data_access_enable1" => "1",
-        "data_access_enable2" => "1",
-        "data_access_enable3" => "1",
-        "data_access_enable4" => "1",
-        "data_access_enable5" => "1",
-        "data_access_enable6" => "1",
-        "data_access_enable7" => "1",
-);
-#}}}
-
-print "\nbrqrv configuration for target=$target\n\n";
-dump_define("","", \%config,[]);
-
-
-#print Dumper(\%config);
-#print Dumper(\%width);
-
-#print Dumper(\%sets);
-#print Dumper(\%unsets);
-
-# Sanity checks
-check_addr_align("dccm", hex($config{dccm}{dccm_sadr}), $config{dccm}{dccm_size}*1024);
-check_addr_align("iccm", hex($config{iccm}{iccm_sadr}), $config{iccm}{iccm_size}*1024);
-check_addr_align("pic", hex($config{pic}{pic_base_addr}), $config{pic}{pic_size}*1024);
-
-#   Prevent overlap of internal memories
-if ((hex($config{pic}{pic_region}) == hex($config{iccm}{iccm_region})) && (hex($config{pic}{pic_offset}) == hex($config{iccm}{iccm_offset}))) {
-    die "$self: ERROR! PIC and ICCM blocks collide (region $config{iccm}{iccm_region}, offset $config{pic}{pic_offset})!\n";
-}
-if ((hex($config{pic}{pic_region}) == hex($config{dccm}{dccm_region})) && (hex($config{pic}{pic_offset}) == hex($config{dccm}{dccm_offset}))) {
-    die "$self: ERROR! PIC and DCCM blocks collide (region $config{dccm}{dccm_region}, offset $config{pic}{pic_offset})!\n";
-}
-if ((hex($config{iccm}{iccm_region}) == hex($config{dccm}{dccm_region})) && (hex($config{iccm}{iccm_offset}) == hex($config{dccm}{dccm_offset}))) {
-    die "$self: ERROR! ICCM and DCCM blocks collide (region $config{iccm}{iccm_region}, offset $config{dccm}{dccm_offset})!\n";
-}
-
-#printf( "axi4 %s\n",$config{"testbench"}{"build_axi4"});
-#printf( "ahb_lite %s\n",$config{"testbench"}{"build_ahb_lite"});
-#printf( "axi_native %s\n",$config{"testbench"}{"build_axi_native"});
-
-if( $target eq "eb1_formal_axi" ) {
-    $config{testbench}{build_axi_native} = 1;
-    $config{testbench}{build_axi4} = 1;
-    print( "\$config{testbench}{build_axi_native} = $config{testbench}{build_axi_native} \n" );
-    print( "\$config{testbench}{build_axi4      } = $config{testbench}{build_axi4      } \n" );
-}
-
-
-if (($config{testbench}{build_ahb_lite} == 1)) {
-    delete $config{testbench}{build_axi4};
-    $config{testbench}{build_axi_native}=1;
-    $verilog_parms{build_axi4} = 0;
-}
-elsif (($config{testbench}{build_axi4} == 1)) {
-    $config{testbench}{build_axi_native}=1;
-    delete $config{testbench}{build_ahb_lite};
-    $verilog_parms{build_ahb_lite} = 0;
-}
-elsif (($config{testbench}{build_axi_native} == 1)) {
-    die("illegal to set build_axi_native w/out build_axi4");
-}
-
-#printf( "axi4 %s\n",$config{"testbench"}{"build_axi4"});
-#printf( "ahb_lite %s\n",$config{"testbench"}{"build_ahb_lite"});
-#printf( "axi_native %s\n",$config{"testbench"}{"build_axi_native"});
-
-
-# Over-ride MFDC reset value for AXI.
-# Disable Bus barrier and 64b for AXI
-if (defined($config{"testbench"}{"build_axi_native"}) && ($config{"testbench"}{"build_axi_native"} ne "0")) {
-    if (! (defined($config{testbench}{build_ahb_lite}) && $config{testbench}{build_ahb_lite} ne "0")) {
-        $config{csr}{mfdc}{reset} = "0x00070040" if exists $config{csr}{mfdc};
-    }
-
-}
-
-
-
-# parm processing before any values are deleted from the hash
-
-delete $config{core}{fpga_optimize} if ($config{core}{fpga_optimize} == 0);
-
-
-print "$self: Writing $tdfile\n";
-print "$self: Writing $paramfile\n";
-open (FILE1, ">$tdfile") || die "Cannot open $tdfile for writing $!\n";
-open (FILE2, ">$paramfile") || die "Cannot open $paramfile for writing $!\n";
-print_header("//");
-gen_define("","`", \%config, \%verilog_parms, \@verilog_vars);
-dump_parms(\%verilog_parms);
-close FILE1;
-close FILE2;
-
-$config{config_key}="32'hdeadbeef";
-
-# end parms
-
-# deletes
-if (($load_to_use_plus1==0) && !grep(/load_to_use_plus1/, @sets)) { delete $config{"core"}{"load_to_use_plus1"}; }
-if (($iccm_enable==0) && !grep(/iccm_enable/, @sets))             { delete $config{"iccm"}{"iccm_enable"}; }
-
-
-# new code to handle the -set=parm=0 value correctly for common_defines.vh
-$c=$config{core}{load_to_use_plus1}; if ($c==0 && !grep(/load_to_use_plus1=1/, @sets))    { delete $config{"core"}{"load_to_use_plus1"}; }
-$c=$config{core}{opensource};        if ($c==0 && !grep(/opensource=1/, @sets))           { delete $config{"core"}{"opensource"}; }
-$c=$config{core}{verilator};         if ($c==0 && !grep(/verilator=1/, @sets))            { delete $config{"core"}{"verilator"}; }
-$c=$config{core}{div_new};           if ($c==0 && !grep(/div_new=1/, @sets))              { delete $config{"core"}{"div_new"}; }
-# not needed
-#$c=$config{core}{div_bit};           if ($c==0 && !grep(/div_bit=1/, @sets))              { delete $config{"core"}{"div_bit"}; }
-$c=$config{iccm}{iccm_enable};       if ($c==0 && !grep(/iccm_enable=1/, @sets))          { delete $config{"iccm"}{"iccm_enable"}; }
-$c=$config{btb}{btb_enable};         if ($c==0 && !grep(/btb_enable=1/, @sets))           { delete $config{"btb"}{"btb_enable"}; }
-$c=$config{dccm}{dccm_enable};       if ($c==0 && !grep(/dccm_enable=1/, @sets))          { delete $config{"dccm"}{"dccm_enable"}; }
-$c=$config{icache}{icache_waypack};  if ($c==0 && !grep(/icache_waypack=1/, @sets))       { delete $config{"icache"}{"icache_waypack"}; }
-$c=$config{icache}{icache_enable};   if ($c==0 && !grep(/icache_enable=1/, @sets))        { delete $config{"icache"}{"icache_enable"}; }
-
-$c=$config{icache}{icache_2banks};   if ($c==0 && !grep(/icache_2banks=1/, @sets))        { delete $config{"icache"}{"icache_2banks"}; }
-$c=$config{pic}{pic_2cycle};         if ($c==0 && !grep(/pic_2cycle=1/, @sets))           { delete $config{"pic"}{"pic_2cycle"}; }
-
-$c=$config{btb}{btb_fullya};         if ($c==0 && !grep(/btb_fullya=1/, @sets))           { delete $config{"btb"}{"btb_fullya"}; }
-
-
-
-if ($target eq "default") {
-}
-elsif (($config{"testbench"}{"build_axi4"} == 1)) {
-    delete $config{"testbench"}{"build_ahb_lite"};
-    delete $config{"testbench"}{"build_axi_native_ahb"};
-}
-elsif (($config{"testbench"}{"build_ahb_lite"} == 1)) {
-    delete $config{"testbench"}{"build_axi4"};
-    delete $config{"testbench"}{"build_axi_native"};
-    delete $config{"testbench"}{"build_axi_native_ahb"};
-}
-elsif (($config{"testbench"}{"build_axi_native_ahb"} == 1)) {
-    delete $config{"testbench"}{"build_axi4"};
-    delete $config{"testbench"}{"build_axi_native_ahb"};
-}
-elsif (($config{"testbench"}{"build_axi_native"} == 1)) {
-    die("illegal to set build_axi_native w/out build_axi4");
-}
-else {
-    delete $config{"testbench"}{"build_ahb_lite"};
-    delete $config{"testbench"}{"build_axi4"};
-    delete $config{"testbench"}{"build_axi_native"};
-    delete $config{"testbench"}{"build_axi_native_ahb"};
-}
-
-
-
-
-
-
-##################### Add dumper routines here ##########################
-
-
-#
-# Dump Verilog $RV_ROOT/configs/common_defines.vh
-print "$self: Writing $vlogfile\n";
-open (FILE, ">$vlogfile") || die "Cannot open $vlogfile for writing $!\n";
-print_header("//");
-print FILE "`define RV_ROOT \"".$ENV{RV_ROOT}."\"\n";
-gen_define("","`", \%config, "", \@verilog_vars);
-close FILE;
-
-print "$self: Writing $asmfile\n";
-open (FILE, ">$asmfile") || die "Cannot open $asmfile for writing $!\n";
-# Dump ASM/C   $RV_ROOT/diags/env/defines.h
-print_header("//");
-gen_define("","#", \%config, "", \@asm_vars, \@asm_overridable);
-close FILE;
-
-# add `define PHYSICAL 1
-# remove `undef RV_ICCM_ENABLE
-
-my $pddata='
-`include "common_defines.vh"
-`undef RV_ASSERT_ON
-`undef TEC_RV_ICG
-`define TEC_RV_ICG sky130_fd_sc_hd__dlclkp_1
-`define RV_PHYSICAL 1
-';
-
-
-print "$self: Writing $pdfile\n";
-open (FILE, ">$pdfile") || die "Cannot open $pdfile for writing $!\n";
-# Dump PD   $RV_ROOT/$RV_ROOT/configs/pd_defines.vh
-print_header("//");
-printf (FILE "$pddata");
-close FILE;
-
-print "$self: Writing $whisperfile\n";
-dump_whisper_config(\%config, $whisperfile);
-
-
-# PIC address map based on config
-`$ENV{RV_ROOT}/tools/picmap -t $config{pic}{pic_total_int} > $build_path/pic_map_auto.h`;
-
-# Perl vars for use by scripts
-print "$self: Writing $perlfile\n";
-open (FILE, ">$perlfile") || die "Cannot open $perlfile for writing $!\n";
-print_header("# ");
-print FILE "# To use this in a perf script, use 'require \$RV_ROOT/configs/config.pl'\n";
-print FILE "# Reference the hash via \$config{name}..\n\n\n";
-print FILE Data::Dumper->Dump([\%config], [ qw(*config) ]);
-print FILE "1;\n";
-close FILE;
-
-
-# Default linker script
-gen_default_linker_script();
-
-# Done ##################################################################
-#
-exit(0);
-
-# ######################   Helper subroutines ##########################{{{
-# Convert size in kilobytes to real value
-
-sub size {#{{{
-    my $ksize = shift;
-    my $size = sprintf("%d",$ksize*1024);
-    return $size;
-}#}}}
-
-# Print the defines with prefix
-sub print_define {#{{{
-    my ($sym, $key,$value, $override) = @_;
-    my $lprefix = $prefix if ($key !~ /$no_prefix/);
-    if ($sym eq "`") {
-        if (defined($widths{$key})) {
-            $value =~ s/^(0x)*/$widths{$key}'h/;
-        } else {
-            $value =~ s/^0x/'h/;
-        }
-    }
-    if ($defines_case eq "U") {
-        print FILE "${sym}ifndef \U$lprefix$key\E\n" if ($override);
-        print FILE "${sym}define \U$lprefix$key\E $value\n";
-        print FILE "${sym}endif\n" if ($override);
-    } else {
-        print FILE "${sym}ifndef $lprefix$key\n" if ($override);
-        print FILE "${sym}define $lprefix$key $value\n";
-        print FILE "${sym}endif\n" if ($override);
-    }
-}#}}}
-
-# print header
-sub print_header {#{{{
-    my $cs = shift;
-    print FILE "$cs NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE\n";
-    print FILE "$cs This is an automatically generated file by $ENV{USER} on ",`date`;
-    print FILE "$cs\n$cs cmd:    $self @argv_orig \n";
-    print FILE "$cs\n";
-}#}}}
-
-# evaluate derivations
-sub derive {#{{{
-    my $eqn = shift;
-    return sprintf("0x%x", eval($eqn));
-}#}}}
-
-# traverse the database and extract the key/value pair
-sub gen_define {#{{{
-    my $matched = shift;
-    my $prefix = shift;
-    my $hash = @_[0];
-    my $parms = @_[1];
-    my @printvars = @{@_[2]};
-    my @overridable = @{@_[3]} if defined @_[3];
-    my $re = join("|",@printvars);
-    $re = qr/($re)/;
-    #print Dumper($hash);
-    foreach my $key (keys %$hash) {
-        next if $key eq "csr";
-        #print "looking at $key:$matched ($re)\n";
-        if (defined($unsets{$key})) {
-            print "$self:unsetting $key\n";
-            delete($config{$key});
-            if ($parms and defined($parms->{$key})) {
-                $parms->{$key} = 0;
-            }
-            next
-        }
-        if (defined($sets{$key}) && $sets{$key} ne $$hash{$key}) {
-            if (($$hash{$key} =~ /derived/i) && ($$hash{$key} !~ /overridable/i)) {
-                die ("$self: ERROR! $key is a derived and non-overridable parameter!\n");
-            } else {
-                print "$self: Overriding $key value $$hash{$key} with $sets{$key}\n";
-                $$hash{$key} = $sets{$key};
-            }
-        }
-        my $value = $$hash{$key};
-        if (ref($value) eq "HASH") {
-            if ($key =~ /$re/) {
-                $matched = 1;
-            }
-            gen_define($matched,$prefix, $value, $parms, \@printvars, \@overridable);
-            $matched = 0;
-        } elsif (ref($value) eq "ARRAY") {
-            # print "$key : @{$value}\n";
-             $matched = 0;
-        } else {
-            if ($matched eq "1" || $key =~ /$re/) {
-                if($value =~ /derive\(.*\)/o) {
-                    $value = eval($value);
-                }
-                my $override = grep(/^$key$/, @overridable);
-                print_define($prefix, $key, $value, $override) if ($value !~ /derived/);
-                #printf("$key = $value\n");
-                if ($parms and defined($parms->{$key})) {
-                    $value=decimal($value);
-                    #printf("verilog parm $key = $value %s\n",$parms->{$key});
-                    $value=d2b($key,$value,$parms->{$key});
-                    #printf("verilog parm $key = $value\n");
-                    $parms->{$key}=$value;
-                }
-            }
-        }
-    }
-}#}}}
-
-sub dump_define {#{{{
-    my $matched = shift;
-    my $prefix = shift;
-    my $hash = @_[0];
-    my @printvars = @{@_[1]};
-    my @overridable = @{@_[2]} if defined @_[2];
-    my $re = join("|",@printvars);
-    $re = qr/($re)/;
-    #print Dumper($hash);
-    foreach my $key (keys %$hash) {
-        next if $key eq "csr";
-        next unless $matched || grep(/^$key$/,@dvars);
-        #print "looking at $key:$matched ($re)\n";
-        if (defined($unsets{$key})) {
-            print "$self:unsetting $key\n";
-            delete($config{$key});
-            next
-        }
-        if (defined($sets{$key}) && $sets{$key} ne $$hash{$key}) {
-            if (($$hash{$key} =~ /derived/i) && ($$hash{$key} !~ /overridable/i)) {
-                die ("$self: ERROR! $key is a derived and non-overridable parameter!\n");
-            } else {
-                print "$self: Overriding $key value $$hash{$key} with $sets{$key}\n";
-                $$hash{$key} = $sets{$key};
-            }
-        }
-        my $value = $$hash{$key};
-        if (ref($value) eq "HASH") {
-            if ($key =~ /$re/) {
-                $matched = 1;
-            }
-            dump_define($matched,$prefix, $value, \@printvars, \@overridable);
-            $matched = 0;
-        } elsif (ref($value) eq "ARRAY") {
-            # print "$key : @{$value}\n";
-             $matched = 0;
-        } else {
-            if ($matched eq "1" || $key =~ /$re/) {
-                if($value =~ /derive\(.*\)/o) {
-                    $value = eval($value);
-                }
-                printf ("brqrv: %-30s = $value\n",$key) if ($value !~ /derived/);
-            }
-        }
-    }
-}#}}}
-
-# Perform cmd line set/unset ############################################{{{
-sub map_set_unset {
-    if (scalar(@sets)) {
-        print "$self: Set(s) requested : @sets\n";
-        foreach (@sets) {
-            my ($key,$value) = m/(\w+)=*(\w+)*/o;
-            $value = 1 if (!defined($value));
-            $sets{$key} = $value;
-        }
-    }
-    if (scalar(@unsets)) {
-        print "$self: Unset(s) requested : @unsets\n";
-        foreach (@unsets) {
-            $unsets{$_} = 1;
-        }
-    }
-} #}}}
-#}}}
-
-
-# If arg looks like a hexadecimal string, then convert it to decimal.#{{{
-# Otherwise, return arg.
-sub decimal {
-    my ($x) = @_;
-    return hex($x)  if $x =~ /^0x/o;
-    return $x;
-}#}}}
-
-
-# Collect memory protection specs (array of address pairs) in the given
-# resutls array. Tag is either "data" or "inst".
-sub collect_mem_protection {#{{{
-    my ($tag, $config, $results) = @_;
-    return unless exists $config{protection};
-
-    my $prot = $config{protection};
-
-    my $enable_tag = $tag . "_access_enable";
-    my $addr_tag = $tag . "_access_addr";
-    my $mask_tag = $tag . "_access_mask";
-
-    foreach my $key (keys %{$prot}) {
-        next unless $key =~ /^$enable_tag(\d+)$/;
-        my $ix = $1;
-
-        my $enable = $prot->{$key};
-        if ($enable !~ /[01]$/) {
-            warn("Invalid value for protection entry $key: $enable\n");
-            next;
-        }
-
-        next unless ($enable eq "1" or $enable eq "1'b1");
-
-        if (! exists $prot->{"$addr_tag$ix"}) {
-            warn("Missing $addr_tag$ix\n");
-            next;
-        }
-
-        if (! exists $prot->{"$mask_tag$ix"}) {
-            warn("Missing $mask_tag$ix\n");
-            next;
-        }
-
-        my $addr = $prot->{"$addr_tag$ix"};
-        my $mask = $prot->{"$mask_tag$ix"};
-
-        if ($addr !~ /^0x[0-9a-fA-F]+$/) {
-            warn("Invalid $addr_tag$ix: $addr\n");
-            next;
-        }
-
-        if ($mask !~ /^0x[0-9a-fA-F]+$/) {
-            warn("Invalid $mask_tag$ix: $mask\n");
-            next;
-        }
-
-        if ((hex($addr) & hex($mask)) != 0) {
-            warn("Protection mask bits overlap address bits in $tag mask $mask and addr $addr\n");
-        }
-
-        if ($mask !~ /^0x0*[137]?f*$/) {
-            warn("Protection  $tag mask ($mask) must have all its one bits to the right of its zero bits\n");
-            next;
-        }
-
-        my $start = hex($addr) & ~hex($mask) & 0xffffffff;
-        my $end = (hex($addr) | hex($mask)) & 0xffffffff;
-
-        $start = sprintf("0x%08x", $start);
-        $end = sprintf("0x%08x", $end);
-
-        push(@{$results}, [ $start, $end ]);
-    }
-}#}}}
-
-
-# Collect the memory mapped registers associated with the pic (platform
-# interrup controller) to include in the whisper.json file.
-sub collect_mem_mapped_regs {#{{{
-    my ($pic, $results) = @_;
-    my $default_mask = 0;
-    $results->{default_mask} = $default_mask;
-    my $addr = hex($pic->{pic_region})*256*1024*1024 + hex($pic->{pic_offset});
-    $results->{address} = sprintf("0x%x", $addr);
-    $results->{size} = sprintf("0x%x", $pic->{pic_size}*1024);
-
-    my @names = qw ( mpiccfg meipl meip meie meigwctrl meigwclr meidels );
-    $results->{registers} = {};
-    foreach my $name (@names) {
-        my $tag = "pic_${name}_offset";
-        next unless exists $pic->{$tag};
-        my %item;
-        my $offset = hex($pic->{$tag});
-        $offset += 4  if ($name ne 'mpiccfg' and $name ne 'meip');
-        $item{address} = sprintf("0x%x", $addr + $offset);
-        $item{mask} = $pic->{"pic_${name}_mask"};
-        $item{count} = $pic->{"pic_${name}_count"};
-        $results->{registers}{$name} = \%item;
-    }
-}#}}}
-
-
-sub dump_whisper_config{#{{{
-    my ($config, $path) = @_;
-
-    open(my $fh, ">", "$path") or die ("Failed to open $path for writing: $!\n");
-
-    # Put the configuration parameters relevant to whisper into a hash
-    # in preparation for a JSON dump.
-    my %jh; # Json hash
-
-    # Collect top-level integer entries.
-    foreach my $tag (qw( harts xlen )) {
-        $jh{$tag} = $config{$tag} + 0 if exists $config{$tag};
-    }
-
-    # Collect top-level string/hex entries.
-    foreach my $tag (qw ( reset_vec nmi_vec num_mmode_perf_regs max_mmode_perf_event
-                     even_odd_trigger_chains)) {
-        $jh{$tag} = $config{$tag} if exists $config{$tag};
-    }
-
-    # Collect memory map configs.
-    my (@inst_mem_prot, @data_mem_prot);
-    collect_mem_protection("inst", $config, \@inst_mem_prot);
-    collect_mem_protection("data", $config, \@data_mem_prot);
-    $jh{memmap}{inst} = [@inst_mem_prot] if @inst_mem_prot;
-    $jh{memmap}{data} = [@data_mem_prot] if @data_mem_prot;
-    $config{memmap}{consoleio} = $config{memmap}{serialio} if exists $config{memmap}{serialio};
-    foreach my $tag (qw ( size page_size serialio consoleio)) {
-        $jh{memmap}{$tag} = $config{memmap}{$tag} if exists $config{memmap}{$tag};
-    }
-
-    # Collect load/store-error rollback parameter.
-    if (exists $config{testbench} and exists $config{testbench}{sterr_rollback}) {
-        $jh{store_error_rollback} = $config{testbench}{sterr_rollback};
-    }
-    if (exists $config{testbench} and exists $config{testbench}{lderr_rollback}) {
-        $jh{load_error_rollback} = $config{testbench}{lderr_rollback};
-    }
-
-    # Collect dccm configs
-    if (exists $config{dccm} and $config{dccm}{dccm_enable}) {
-        $jh{dccm}{region} = $config{dccm}{dccm_region};
-        $jh{dccm}{size} = 1024*decimal($config{dccm}{dccm_size}); # From 1k to bytes
-        $jh{dccm}{offset} = $config{dccm}{dccm_offset};
-
-        $jh{dccm}{size} = sprintf("0x%x", $jh{dccm}{size});
-    }
-
-    # Collect icccm configs.
-    if (exists $config{iccm} and $config{iccm}{iccm_enable}) {
-        $jh{iccm}{region} = $config{iccm}{iccm_region};
-        $jh{iccm}{size} = 1024*decimal($config{iccm}{iccm_size}); # From 1k to bytes
-        $jh{iccm}{offset} = $config{iccm}{iccm_offset};
-
-        $jh{iccm}{size} = sprintf("0x%x", $jh{iccm}{size});
-    }
-
-    # Collect CSRs
-    $jh{csr} = $config{csr} if exists $config{csr};
-
-    # Collect CSRs not included in verilog.
-    my @removed_csrs;
-    if (! $config{core}{timer_legal_en}) {
-        push(@removed_csrs, $_) for qw (mitcnt0 mitbnd0 mitctl0
-                                        mitcnt1 mitbnd1 mitctl1);
-    }
-
-    # Collect fast interrupt enable.
-    if (exists $config{core}{fast_interrupt_redirect}) {
-        $jh{fast_interrupt_redirect} = $config{core}{fast_interrupt_redirect};
-        # meicpct CSR is not built if fast interrupt.
-        push(@removed_csrs, 'meicpct') if $jh{fast_interrupt_redirect};
-    }
-
-    # Remove CSRs not configured into verilog.
-    delete $jh{csr}{$_} foreach @removed_csrs;
-
-    # Collect zb extension configs
-    $jh{enable_zbb} = $config{core}{bitmanip_zbb};
-    $jh{enable_zbs} = $config{core}{bitmanip_zbs};
-    $jh{enable_zba} = $config{core}{bitmanip_zba};
-    $jh{enable_zbc} = $config{core}{bitmanip_zbc};
-    $jh{enable_zbe} = $config{core}{bitmanip_zbe};
-    $jh{enable_zbf} = $config{core}{bitmanip_zbf};
-    $jh{enable_zbp} = $config{core}{bitmanip_zbp};
-    $jh{enable_zbr} = $config{core}{bitmanip_zbr};
-
-    # Collect pic configs.
-    if (exists $config{pic}) {
-        my %mem_mapped;
-        collect_mem_mapped_regs($config{pic}, \%mem_mapped);
-        $jh{'memory_mapped_registers'} = \%mem_mapped;
-    }
-
-    # Collect performance events. Uncomment when RTL ready.
-    if (exists $config{perf_events}) {
-        $jh{mmode_perf_events} = $config{perf_events};
-    }
-
-    # Make atomic instructions illegal outside of DCCM.
-    $jh{amo_illegal_outside_dccm} = "true";
-
-    # Make ld/st instructions trigger misaligned exceptions if base
-    # address (value in rs1) and effective address refer to regions of
-    # different types.
-    $jh{effective_address_compatible_with_base} = "true";
-
-    # Collect triggers.
-    $jh{triggers} = $config{triggers} if exists $config{triggers};
-
-    # Dump JSON config file.
-    my $json = JSON->new->allow_nonref;
-    my $text = $json->pretty->encode(\%jh);
-    print($fh $text);
-
-    close $fh;
-}#}}}
-
-
-# Checker for iccm/dccm/pic sub-region address alignment. Address must be a multiple
-# of size  or next higher power of 2 if size is not a power of 2.
-sub check_addr_align {#{{{
-    my ($section, $addr, $size) = @_;
-
-    die("Invalid $section size: $size\n")  if $size <= 0;
-
-    my $log_size = log2($size);
-    my $p2 = 1 << $log_size;
-    $size = 2*$p2  if $size != $p2;
-
-    if (($addr % $size) != 0) {
-        printf("Address of $section area(0x%x) is not a multiple of its size (0x%x)\n",
-               $addr, $size);
-        exit(1);
-    }
-}#}}}
-
-sub log2 {#{{{
-    my ($n) = @_;
-    return log($n)/log(2);
-}#}}}
-
-sub b2d {#{{{
-    my ($v) = @_;
-
-    $v = oct("0b" . $v);
-
-    return($v);
-}#}}}
-
-sub d2b {#{{{
-    my ($key,$v,$LEN) = @_;
-
-    my $repeat;
-
-    $v = sprintf "%b",$v;
-    if (length($v)<$LEN) {
-        $repeat=$LEN-length($v);
-        $v="0"x$repeat.$v;
-    }
-    elsif (length($v)>$LEN) {
-        die("d2b: parm $key value $v > len $LEN");
-    }
-
-    return($v);
-}#}}}
-
-
-sub invalid_mask {#{{{
-    my ($m) = @_;
-
-    if ($m =~ /^0x(0)*([137]?f+)$/) { return(0); }
-
-    return(1);
-}#}}}
-
-
-sub b2h {#{{{
-    my ($bin) = @_;
-
-    # Make input bit string a multiple of 4
-    $bin = substr("0000",length($bin)%4) . $bin if length($bin)%4;
-
-    my ($hex, $nybble) = ("");
-    while (length($bin)) {
-        ($nybble,$bin) = (substr($bin,0,4), substr($bin,4));
-        $nybble = eval "0b$nybble";
-        $hex .= substr("0123456789ABCDEF", $nybble, 1);
-    }
-    return $hex;
-}#}}}
-
-# BHT index is a hash of the GHR and PC_HASH
-sub ghrhash{#{{{
-    my($btb_index_hi,$ghr_size) = @_;
-
-    $btb_size = $btb_index_hi - 1;
-
-    my $ghr_hi = $ghr_size - 1;
-    my $ghr_lo = $btb_size;
-
-    my $ghr_start = "{";
-    if($ghr_size > $btb_size){
-        return  "{ghr[$ghr_hi:$ghr_lo], hashin[$btb_index_hi:2]^ghr[$ghr_lo-1:0]} // cf1";
-    }
-    else {
-        return "{hashin[$ghr_size+1:2]^ghr[$ghr_size-1:0]}// cf2";
-    }
-}#}}}
-
-sub dump_parms {#{{{
-    my ($hash) = @_;
-
-    my ($bvalue, $blen, $upper);
-    printf(FILE1 "typedef struct packed {\n");
-    foreach my $key (sort keys %$hash) {
-        $bvalue=$hash->{$key};
-        $blen=length($bvalue);
-        $upper=$key;
-        $upper=~ tr/a-z/A-Z/;
-        if ($blen==1) {
-            printf(FILE1 "\tbit %-10s $upper;\n");
-        }
-        else {
-            printf(FILE1 "\tbit %-10s $upper;\n",sprintf("[%d:0]",$blen-1));
-        }
-    }
-   printf(FILE1 "} eb1_param_t;\n\n");
-
-    my $bcat="";
-    my $parmcnt=0;
-    foreach my $key (sort keys %$hash) {
-        #printf("// $key = %s\n",$verilog_parms{$key});
-        $bcat.=$hash->{$key};
-        $parmcnt++;
-    }
-
-    my $bvalue="";
-    my $pcnt=0;
-    my $delim=",";
-    my $msb;
-    printf(FILE2 "parameter eb1_param_t pt = '{\n");
-    foreach my $key (sort keys %$hash) {
-        $upper=$key;
-        $upper=~ tr/a-z/A-Z/;
-        $pcnt++;
-        if ($pcnt==$parmcnt) { undef $delim; }
-        if ($hash->{$key} eq "0") { $hash->{$key}="0000"; }
-        $msb=substr($hash->{$key},0,4);  # require upper 4b to be 0
-        if ($msb ne "0000") { die("parameter $upper upper 4b must be 0"); }
-        printf(FILE2 "\t%-22s : %d\'h%-10s $delim\n",$upper,length($hash->{$key}),b2h($hash->{$key}));
-    }
-    printf(FILE2 "}\n");
-
-    printf(FILE2 "// parameter eb1_param_t pt = %d'h%s\n",length($bcat),b2h($bcat));
-
-}#}}}
-
-sub gen_default_linker_script {#{{{
-
-    open (FILE, ">$linkerfile") || die "Cannot open $linkerfile for writing $!\n";
-    print "$self: Writing $linkerfile\n";
-    print FILE "/*\n";
-    print_header();
-
-    my $io = "0xd0580000";
-    $io = $config{memmap}{serialio} if exists $config{memmap}{serialio};
-
-    my $iccm = ""; my $iccm_ctl = "";
-    if (exists $config{iccm} and $config{iccm}{iccm_enable} and $text_in_iccm) {
-        my $sa = $config{iccm}{iccm_sadr}; my $ea = $config{iccm}{iccm_eadr};
-        $iccm = " . = $sa ;";
-        $iccm_ctl = "  . = 0xfffffff0; .iccm.ctl . : { LONG($sa); LONG($ea) }" ;
-    }
-
-    my $sa = $config{memmap}{external_data}; my $dccm_ctl = "";
-    if (exists $config{dccm} and $config{dccm}{dccm_enable}) {
-        $sa = $config{dccm}{dccm_sadr};
-        $dccm_ctl = "  . = 0xfffffff8; .data.ctl : { LONG($sa); LONG(STACK) }" ;
-    }
-    my $data_loc = "  . = $sa ;";
-
-    print FILE "*/\n";
-    print FILE  <<"EOF";
-
-OUTPUT_ARCH( "riscv" )
-ENTRY(_start)
-
-SECTIONS
-{
-  . = $config{reset_vec};
-  .text.init .  : { *(.text.init) }
-  $iccm
-  .text . : { *(.text) }
-  _end = .;
-  . = $io;
-  .data.io .  : { *(.data.io) }
-  $data_loc
-  .data  :  ALIGN(0x100) { *(.*data) *(.rodata*) STACK = ALIGN(16) + 0x0fff; }
-  .bss : { *(.bss) }
-  $iccm_ctl
-  $dccm_ctl
-}
-
-EOF
-    close FILE;
-} #}}}
-
-
diff --git a/verilog/rtl/BrqRV_EB1/configs/brqrv_config_gen.py b/verilog/rtl/BrqRV_EB1/configs/brqrv_config_gen.py
deleted file mode 100644
index 23a8461..0000000
--- a/verilog/rtl/BrqRV_EB1/configs/brqrv_config_gen.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python3
-from fusesoc.capi2.generator import Generator
-import os
-import shutil
-import subprocess
-import sys
-import tempfile
-if sys.version[0] == '2':
-    devnull = open(os.devnull, 'w')
-else:
-    from subprocess import DEVNULL as devnull
-
-class brqrvConfigGenerator(Generator):
-    def run(self):
-        script_root = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..'))
-        files = [
-            {"configs/snapshots/default/common_defines.vh" : {
-                "copyto"    : "config/common_defines.vh",
-                "file_type" : "systemVerilogSource"}},
-            {"configs/snapshots/default/eb1_pdef.vh" : {
-                "copyto" : "config/eb1_pdef.vh",
-                "file_type" : "systemVerilogSource"}},
-            {"configs/snapshots/default/eb1_param.vh" : {
-                "is_include_file" : True,
-                "file_type" : "systemVerilogSource"}},
-            {"configs/snapshots/default/pic_map_auto.h" : {
-                "is_include_file" : True,
-                "file_type" : "systemVerilogSource"}}]
-
-        tmp_dir = os.path.join(tempfile.mkdtemp(), 'core')
-        shutil.copytree(script_root, tmp_dir)
-
-        cwd = tmp_dir
-
-        env = os.environ.copy()
-        env['RV_ROOT'] = tmp_dir
-        args = ['configs/brqrv.config'] + self.config.get('args', [])
-        rc = subprocess.call(args, cwd=cwd, env=env, stdout=devnull)
-        if rc:
-            exit(1)
-
-        filenames = []
-        for f in files:
-            for k in f:
-                filenames.append(k)
-
-        for f in filenames:
-            d = os.path.dirname(f)
-            if d and not os.path.exists(d):
-                os.makedirs(d)
-            shutil.copy2(os.path.join(cwd, f),f)
-
-        self.add_files(files)
-
-g = brqrvConfigGenerator()
-g.run()
-g.write()
diff --git a/verilog/rtl/BrqRV_EB1/design/BrqRV_EB1.sv b/verilog/rtl/BrqRV_EB1/design/BrqRV_EB1.sv
deleted file mode 100644
index 321d707..0000000
--- a/verilog/rtl/BrqRV_EB1/design/BrqRV_EB1.sv
+++ /dev/null
@@ -1,31597 +0,0 @@
-// performance monitor stuff
-//`ifndef eb1_DEF_SV
-//`define eb1_DEF_SV
-package eb1_pkg;
-
-typedef struct packed {
-                       logic  trace_rv_i_valid_ip;
-                       logic [31:0] trace_rv_i_insn_ip;
-                       logic [31:0] trace_rv_i_address_ip;
-                       logic  trace_rv_i_exception_ip;
-                       logic [4:0] trace_rv_i_ecause_ip;
-                       logic  trace_rv_i_interrupt_ip;
-                       logic [31:0] trace_rv_i_tval_ip;
-                       } eb1_trace_pkt_t;
-
-
-typedef enum logic [3:0] {
-                          NULL     = 4'b0000,
-                          MUL      = 4'b0001,
-                          LOAD     = 4'b0010,
-                          STORE    = 4'b0011,
-                          ALU      = 4'b0100,
-                          CSRREAD  = 4'b0101,
-                          CSRWRITE = 4'b0110,
-                          CSRRW    = 4'b0111,
-                          EBREAK   = 4'b1000,
-                          ECALL    = 4'b1001,
-                          FENCE    = 4'b1010,
-                          FENCEI   = 4'b1011,
-                          MRET     = 4'b1100,
-                          CONDBR   = 4'b1101,
-                          JAL      = 4'b1110,
-                          BITMANIPU = 4'b1111
-                          } eb1_inst_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic wb;
-                       logic [2:0] tag;
-                       logic [4:0] rd;
-                       } eb1_load_cam_pkt_t;
-
-typedef struct packed {
-                       logic pc0_call;
-                       logic pc0_ret;
-                       logic pc0_pc4;
-                       } eb1_rets_pkt_t;
-typedef struct packed {
-                       logic valid;
-                       logic [11:0] toffset;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic  bank;
-                       logic [31:1] prett;  // predicted ret target
-                       logic way;
-                       logic ret;
-                       } eb1_br_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic way;
-                       logic middle;
-                       } eb1_br_tlu_pkt_t;
-
-typedef struct packed {
-                       logic misp;
-                       logic ataken;
-                       logic boffset;
-                       logic pc4;
-                       logic [1:0] hist;
-                       logic [11:0] toffset;
-                       logic valid;
-                       logic br_error;
-                       logic br_start_error;
-                       logic pcall;
-                       logic pja;
-                       logic way;
-                       logic pret;
-                       // for power use the pret bit to clock the prett field
-                       logic [31:1] prett;
-                       } eb1_predict_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic icaf;
-                       logic icaf_second;
-                       logic [1:0] icaf_type;
-                       logic fence_i;
-                       logic [3:0] i0trigger;
-                       logic pmu_i0_br_unpred;     // pmu
-                       logic pmu_divide;
-                       // likely to change
-                       logic legal;
-                       logic pmu_lsu_misaligned;
-                       eb1_inst_pkt_t pmu_i0_itype;        // pmu - instruction type
-                       } eb1_trap_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic i0div;
-                       logic csrwen;
-                       logic csrwonly;
-                       logic [11:0] csrwaddr;
-                       // likely to change
-                       logic [4:0] i0rd;
-                       logic i0load;
-                       logic i0store;
-                       logic i0v;
-                       logic i0valid;
-                       } eb1_dest_pkt_t;
-
-typedef struct packed {
-                       logic mul;
-                       logic load;
-                       logic alu;
-                       } eb1_class_pkt_t;
-
-typedef struct packed {
-                       logic [4:0] rs1;
-                       logic [4:0] rs2;
-                       logic [4:0] rd;
-                       } eb1_reg_pkt_t;
-
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic srl;
-                       logic sra;
-                       logic beq;
-                       logic bne;
-                       logic blt;
-                       logic bge;
-                       logic add;
-                       logic sub;
-                       logic slt;
-                       logic unsign;
-                       logic jal;
-                       logic predict_t;
-                       logic predict_nt;
-                       logic csr_write;
-                       logic csr_imm;
-                       } eb1_alu_pkt_t;
-
-typedef struct packed {
-                       logic fast_int;
-/* verilator lint_off SYMRSVDWORD */
-                       logic stack;
-/* verilator lint_on SYMRSVDWORD */
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic dword;  // for dma
-                       logic load;
-                       logic store;
-                       logic unsign;
-                       logic dma;    // dma pkt
-                       logic store_data_bypass_d;
-                       logic load_ldst_bypass_d;
-                       logic store_data_bypass_m;
-                       logic valid;
-                       } eb1_lsu_pkt_t;
-
-typedef struct packed {
-                      logic inst_type;   //0: Load, 1: Store
-                      //logic dma_valid;
-                      logic exc_type;    //0: MisAligned, 1: Access Fault
-                      logic [3:0] mscause;
-                      logic [31:0] addr;
-                      logic single_ecc_error;
-                      logic exc_valid;
-                      } eb1_lsu_error_pkt_t;
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic zbs;
-                       logic bext;
-                       logic bdep;
-                       logic zbe;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic zbc;
-                       logic shfl;
-                       logic unshfl;
-                       logic zbp;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic zbr;
-                       logic bfp;
-                       logic zbf;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic alu;
-                       logic rs1;
-                       logic rs2;
-                       logic imm12;
-                       logic rd;
-                       logic shimm5;
-                       logic imm20;
-                       logic pc;
-                       logic load;
-                       logic store;
-                       logic lsu;
-                       logic add;
-                       logic sub;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic sra;
-                       logic srl;
-                       logic slt;
-                       logic unsign;
-                       logic condbr;
-                       logic beq;
-                       logic bne;
-                       logic bge;
-                       logic blt;
-                       logic jal;
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic csr_read;
-                       logic csr_clr;
-                       logic csr_set;
-                       logic csr_write;
-                       logic csr_imm;
-                       logic presync;
-                       logic postsync;
-                       logic ebreak;
-                       logic ecall;
-                       logic mret;
-                       logic mul;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic div;
-                       logic rem;
-                       logic fence;
-                       logic fence_i;
-                       logic pm_alu;
-                       logic legal;
-                       } eb1_dec_pkt_t;
-
-
-typedef struct packed {
-                       logic valid;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic bext;
-                       logic bdep;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic grev;
-                       logic gorc;
-                       logic shfl;
-                       logic unshfl;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic bfp;
-                       } eb1_mul_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic unsign;
-                       logic rem;
-                       } eb1_div_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ccm_ext_in_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_dccm_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_data_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_tag_ext_in_pkt_t;
-
-
-
-typedef struct packed {
-                        logic        select;
-                        logic        match;
-                        logic        store;
-                        logic        load;
-                        logic        execute;
-                        logic        m;
-                        logic [31:0] tdata2;
-            } eb1_trigger_pkt_t;
-
-
-typedef struct packed {
-                        logic [70:0]  icache_wrdata; // {dicad1[1:0], dicad0h[31:0], dicad0[31:0]}
-                        logic [16:0]  icache_dicawics; // Arraysel:24, Waysel:21:20, Index:16:3
-                        logic         icache_rd_valid;
-                        logic         icache_wr_valid;
-            } eb1_cache_debug_pkt_t;
-//`endif
-typedef struct packed {
-	bit [7:0]      BHT_ADDR_HI;
-	bit [5:0]      BHT_ADDR_LO;
-	bit [14:0]     BHT_ARRAY_DEPTH;
-	bit [4:0]      BHT_GHR_HASH_1;
-	bit [7:0]      BHT_GHR_SIZE;
-	bit [15:0]     BHT_SIZE;
-	bit [4:0]      BITMANIP_ZBA;
-	bit [4:0]      BITMANIP_ZBB;
-	bit [4:0]      BITMANIP_ZBC;
-	bit [4:0]      BITMANIP_ZBE;
-	bit [4:0]      BITMANIP_ZBF;
-	bit [4:0]      BITMANIP_ZBP;
-	bit [4:0]      BITMANIP_ZBR;
-	bit [4:0]      BITMANIP_ZBS;
-	bit [8:0]      BTB_ADDR_HI;
-	bit [5:0]      BTB_ADDR_LO;
-	bit [12:0]     BTB_ARRAY_DEPTH;
-	bit [4:0]      BTB_BTAG_FOLD;
-	bit [8:0]      BTB_BTAG_SIZE;
-	bit [4:0]      BTB_ENABLE;
-	bit [4:0]      BTB_FOLD2_INDEX_HASH;
-	bit [4:0]      BTB_FULLYA;
-	bit [8:0]      BTB_INDEX1_HI;
-	bit [8:0]      BTB_INDEX1_LO;
-	bit [8:0]      BTB_INDEX2_HI;
-	bit [8:0]      BTB_INDEX2_LO;
-	bit [8:0]      BTB_INDEX3_HI;
-	bit [8:0]      BTB_INDEX3_LO;
-	bit [13:0]     BTB_SIZE;
-	bit [8:0]      BTB_TOFFSET_SIZE;
-	bit            BUILD_AHB_LITE;
-	bit [4:0]      BUILD_AXI4;
-	bit [4:0]      BUILD_AXI_NATIVE;
-	bit [5:0]      BUS_PRTY_DEFAULT;
-	bit [35:0]     DATA_ACCESS_ADDR0;
-	bit [35:0]     DATA_ACCESS_ADDR1;
-	bit [35:0]     DATA_ACCESS_ADDR2;
-	bit [35:0]     DATA_ACCESS_ADDR3;
-	bit [35:0]     DATA_ACCESS_ADDR4;
-	bit [35:0]     DATA_ACCESS_ADDR5;
-	bit [35:0]     DATA_ACCESS_ADDR6;
-	bit [35:0]     DATA_ACCESS_ADDR7;
-	bit [4:0]      DATA_ACCESS_ENABLE0;
-	bit [4:0]      DATA_ACCESS_ENABLE1;
-	bit [4:0]      DATA_ACCESS_ENABLE2;
-	bit [4:0]      DATA_ACCESS_ENABLE3;
-	bit [4:0]      DATA_ACCESS_ENABLE4;
-	bit [4:0]      DATA_ACCESS_ENABLE5;
-	bit [4:0]      DATA_ACCESS_ENABLE6;
-	bit [4:0]      DATA_ACCESS_ENABLE7;
-	bit [35:0]     DATA_ACCESS_MASK0;
-	bit [35:0]     DATA_ACCESS_MASK1;
-	bit [35:0]     DATA_ACCESS_MASK2;
-	bit [35:0]     DATA_ACCESS_MASK3;
-	bit [35:0]     DATA_ACCESS_MASK4;
-	bit [35:0]     DATA_ACCESS_MASK5;
-	bit [35:0]     DATA_ACCESS_MASK6;
-	bit [35:0]     DATA_ACCESS_MASK7;
-	bit [6:0]      DCCM_BANK_BITS;
-	bit [8:0]      DCCM_BITS;
-	bit [6:0]      DCCM_BYTE_WIDTH;
-	bit [9:0]      DCCM_DATA_WIDTH;
-	bit [6:0]      DCCM_ECC_WIDTH;
-	bit [4:0]      DCCM_ENABLE;
-	bit [9:0]      DCCM_FDATA_WIDTH;
-	bit [7:0]      DCCM_INDEX_BITS;
-	bit [8:0]      DCCM_NUM_BANKS;
-	bit [7:0]      DCCM_REGION;
-	bit [35:0]     DCCM_SADR;
-	bit [13:0]     DCCM_SIZE;
-	bit [5:0]      DCCM_WIDTH_BITS;
-	bit [6:0]      DIV_BIT;
-	bit [4:0]      DIV_NEW;
-	bit [6:0]      DMA_BUF_DEPTH;
-	bit [8:0]      DMA_BUS_ID;
-	bit [5:0]      DMA_BUS_PRTY;
-	bit [7:0]      DMA_BUS_TAG;
-	bit [4:0]      FAST_INTERRUPT_REDIRECT;
-	bit [4:0]      ICACHE_2BANKS;
-	bit [6:0]      ICACHE_BANK_BITS;
-	bit [6:0]      ICACHE_BANK_HI;
-	bit [5:0]      ICACHE_BANK_LO;
-	bit [7:0]      ICACHE_BANK_WIDTH;
-	bit [6:0]      ICACHE_BANKS_WAY;
-	bit [7:0]      ICACHE_BEAT_ADDR_HI;
-	bit [7:0]      ICACHE_BEAT_BITS;
-	bit [4:0]      ICACHE_BYPASS_ENABLE;
-	bit [17:0]     ICACHE_DATA_DEPTH;
-	bit [6:0]      ICACHE_DATA_INDEX_LO;
-	bit [10:0]     ICACHE_DATA_WIDTH;
-	bit [4:0]      ICACHE_ECC;
-	bit [4:0]      ICACHE_ENABLE;
-	bit [10:0]     ICACHE_FDATA_WIDTH;
-	bit [8:0]      ICACHE_INDEX_HI;
-	bit [10:0]     ICACHE_LN_SZ;
-	bit [7:0]      ICACHE_NUM_BEATS;
-	bit [7:0]      ICACHE_NUM_BYPASS;
-	bit [7:0]      ICACHE_NUM_BYPASS_WIDTH;
-	bit [6:0]      ICACHE_NUM_WAYS;
-	bit [4:0]      ICACHE_ONLY;
-	bit [7:0]      ICACHE_SCND_LAST;
-	bit [12:0]     ICACHE_SIZE;
-	bit [6:0]      ICACHE_STATUS_BITS;
-	bit [4:0]      ICACHE_TAG_BYPASS_ENABLE;
-	bit [16:0]     ICACHE_TAG_DEPTH;
-	bit [6:0]      ICACHE_TAG_INDEX_LO;
-	bit [8:0]      ICACHE_TAG_LO;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS_WIDTH;
-	bit [4:0]      ICACHE_WAYPACK;
-	bit [6:0]      ICCM_BANK_BITS;
-	bit [8:0]      ICCM_BANK_HI;
-	bit [8:0]      ICCM_BANK_INDEX_LO;
-	bit [8:0]      ICCM_BITS;
-	bit [4:0]      ICCM_ENABLE;
-	bit [4:0]      ICCM_ICACHE;
-	bit [7:0]      ICCM_INDEX_BITS;
-	bit [8:0]      ICCM_NUM_BANKS;
-	bit [4:0]      ICCM_ONLY;
-	bit [7:0]      ICCM_REGION;
-	bit [35:0]     ICCM_SADR;
-	bit [13:0]     ICCM_SIZE;
-	bit [4:0]      IFU_BUS_ID;
-	bit [5:0]      IFU_BUS_PRTY;
-	bit [7:0]      IFU_BUS_TAG;
-	bit [35:0]     INST_ACCESS_ADDR0;
-	bit [35:0]     INST_ACCESS_ADDR1;
-	bit [35:0]     INST_ACCESS_ADDR2;
-	bit [35:0]     INST_ACCESS_ADDR3;
-	bit [35:0]     INST_ACCESS_ADDR4;
-	bit [35:0]     INST_ACCESS_ADDR5;
-	bit [35:0]     INST_ACCESS_ADDR6;
-	bit [35:0]     INST_ACCESS_ADDR7;
-	bit [4:0]      INST_ACCESS_ENABLE0;
-	bit [4:0]      INST_ACCESS_ENABLE1;
-	bit [4:0]      INST_ACCESS_ENABLE2;
-	bit [4:0]      INST_ACCESS_ENABLE3;
-	bit [4:0]      INST_ACCESS_ENABLE4;
-	bit [4:0]      INST_ACCESS_ENABLE5;
-	bit [4:0]      INST_ACCESS_ENABLE6;
-	bit [4:0]      INST_ACCESS_ENABLE7;
-	bit [35:0]     INST_ACCESS_MASK0;
-	bit [35:0]     INST_ACCESS_MASK1;
-	bit [35:0]     INST_ACCESS_MASK2;
-	bit [35:0]     INST_ACCESS_MASK3;
-	bit [35:0]     INST_ACCESS_MASK4;
-	bit [35:0]     INST_ACCESS_MASK5;
-	bit [35:0]     INST_ACCESS_MASK6;
-	bit [35:0]     INST_ACCESS_MASK7;
-	bit [4:0]      LOAD_TO_USE_PLUS1;
-	bit [4:0]      LSU2DMA;
-	bit [4:0]      LSU_BUS_ID;
-	bit [5:0]      LSU_BUS_PRTY;
-	bit [7:0]      LSU_BUS_TAG;
-	bit [8:0]      LSU_NUM_NBLOAD;
-	bit [6:0]      LSU_NUM_NBLOAD_WIDTH;
-	bit [8:0]      LSU_SB_BITS;
-	bit [7:0]      LSU_STBUF_DEPTH;
-	bit [4:0]      NO_ICCM_NO_ICACHE;
-	bit [4:0]      PIC_2CYCLE;
-	bit [35:0]     PIC_BASE_ADDR;
-	bit [8:0]      PIC_BITS;
-	bit [7:0]      PIC_INT_WORDS;
-	bit [7:0]      PIC_REGION;
-	bit [12:0]     PIC_SIZE;
-	bit [11:0]     PIC_TOTAL_INT;
-	bit [12:0]     PIC_TOTAL_INT_PLUS1;
-	bit [7:0]      RET_STACK_SIZE;
-	bit [4:0]      SB_BUS_ID;
-	bit [5:0]      SB_BUS_PRTY;
-	bit [7:0]      SB_BUS_TAG;
-	bit [4:0]      TIMER_LEGAL_EN;
-} eb1_param_t;
-
-
-endpackage // eb1_pkg
-
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-};
-
-parameter [2270:0] pt = 2271'h0404020000E0200000000000008081000030400040081E090B040100060210C00000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC103020401C213840103C3C01000000040818428042010840830C2010281840200081002008E0C0801004040800C01002100400606810104100C080C080200810A0AFFFF00000102101800000000000000000000000000000000000000000000000000000000000000000000000000000000007FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF8001080C080818080007806000003C043C04003E02008084021;
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-`define RV_ROOT "/home/hshabbir/caravel_BrqRV_EB1/verilog/rtl/BrqRV_EB1"
-`define RV_RET_STACK_SIZE 8
-`define RV_EXT_ADDRWIDTH 32
-`define RV_STERR_ROLLBACK 0
-`define SDVT_AHB 0
-`define RV_EXT_DATAWIDTH 64
-`define RV_LDERR_ROLLBACK 1
-`define CLOCK_PERIOD 100
-`define RV_ASSERT_ON 
-`define RV_BUILD_AXI4 1
-`define TOP tb_top
-`define RV_BUILD_AXI_NATIVE 1
-`define CPU_TOP `RV_TOP.brqrv
-`define RV_TOP `TOP.rvtop
-`define RV_UNUSED_REGION2 'h70000000
-`define RV_EXTERNAL_DATA 'hd0580000
-`define RV_SERIALIO 'he0580000
-`define RV_UNUSED_REGION7 'h20000000
-`define RV_UNUSED_REGION5 'h40000000
-`define RV_DEBUG_SB_MEM 'hb0580000
-`define RV_EXTERNAL_DATA_1 'hc0000000
-`define RV_UNUSED_REGION0 'h90000000
-`define RV_UNUSED_REGION3 'h60000000
-`define RV_UNUSED_REGION9 'h00000000
-`define RV_UNUSED_REGION8 'h10000000
-`define RV_UNUSED_REGION6 'h30000000
-`define RV_UNUSED_REGION1 'h80000000
-`define RV_UNUSED_REGION4 'h50000000
-`define RV_BHT_ADDR_LO 2
-`define RV_BHT_SIZE 256
-`define RV_BHT_GHR_HASH_1 
-`define RV_BHT_GHR_SIZE 7
-`define RV_BHT_ADDR_HI 8
-`define RV_BHT_HASH_STRING {hashin[7+1:2]^ghr[7-1:0]}// cf2
-`define RV_BHT_ARRAY_DEPTH 128
-`define RV_BHT_GHR_RANGE 6:0
-`define RV_INST_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK3 'hffffffff
-`define RV_INST_ACCESS_MASK7 'hffffffff
-`define RV_DATA_ACCESS_MASK0 'hffffffff
-`define RV_INST_ACCESS_ADDR6 'h00000000
-`define RV_INST_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_ENABLE6 1'h0
-`define RV_INST_ACCESS_ENABLE5 1'h0
-`define RV_DATA_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ENABLE1 1'h0
-`define RV_DATA_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_ADDR3 'h00000000
-`define RV_INST_ACCESS_ADDR7 'h00000000
-`define RV_INST_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_MASK2 'hffffffff
-`define RV_INST_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_ADDR2 'h00000000
-`define RV_INST_ACCESS_ENABLE2 1'h0
-`define RV_INST_ACCESS_ADDR1 'h00000000
-`define RV_INST_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ADDR6 'h00000000
-`define RV_DATA_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK0 'hffffffff
-`define RV_DATA_ACCESS_MASK7 'hffffffff
-`define RV_INST_ACCESS_MASK3 'hffffffff
-`define RV_DATA_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_ADDR3 'h00000000
-`define RV_DATA_ACCESS_ADDR7 'h00000000
-`define RV_DATA_ACCESS_ENABLE5 1'h0
-`define RV_INST_ACCESS_ENABLE6 1'h0
-`define RV_DATA_ACCESS_ENABLE1 1'h0
-`define RV_INST_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_MASK2 'hffffffff
-`define RV_DATA_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR2 'h00000000
-`define RV_DATA_ACCESS_ADDR1 'h00000000
-`define RV_DATA_ACCESS_ENABLE2 1'h0
-`define RV_ICCM_BITS 12
-`define RV_ICCM_OFFSET 10'h0ffff000
-`define RV_ICCM_SIZE_4 
-`define RV_ICCM_BANK_BITS 2
-`define RV_ICCM_ENABLE 1
-`define RV_ICCM_SADR 32'haffff000
-`define RV_ICCM_DATA_CELL ram_256x39
-`define RV_ICCM_EADR 32'hafffffff
-`define RV_ICCM_RESERVED 'h400
-`define RV_ICCM_REGION 4'ha
-`define RV_ICCM_SIZE 4
-`define RV_ICCM_BANK_HI 3
-`define RV_ICCM_BANK_INDEX_LO 4
-`define RV_ICCM_ROWS 256
-`define RV_ICCM_INDEX_BITS 8
-`define RV_ICCM_NUM_BANKS 4
-`define RV_ICCM_NUM_BANKS_4 
-`define RV_LSU2DMA 0
-`define RV_LSU_NUM_NBLOAD_WIDTH 2
-`define RV_ICCM_ONLY 1
-`define RV_BITMANIP_ZBC 0
-`define RV_BITMANIP_ZBS 0
-`define RV_FPGA_OPTIMIZE 0
-`define RV_LSU_NUM_NBLOAD 4
-`define RV_DIV_BIT 3
-`define RV_DIV_NEW 1
-`define RV_DMA_BUF_DEPTH 5
-`define RV_FAST_INTERRUPT_REDIRECT 1
-`define RV_BITMANIP_ZBP 0
-`define RV_BITMANIP_ZBA 0
-`define RV_LSU_STBUF_DEPTH 4
-`define RV_BITMANIP_ZBB 0
-`define RV_BITMANIP_ZBR 0
-`define RV_BITMANIP_ZBE 0
-`define RV_TIMER_LEGAL_EN 1
-`define RV_BITMANIP_ZBF 0
-`define REGWIDTH 32
-`define RV_CONFIG_KEY 32'hdeadbeef
-`define RV_BTB_INDEX1_HI 8
-`define RV_BTB_SIZE 256
-`define RV_BTB_BTAG_SIZE 6
-`define RV_BTB_FOLD2_INDEX_HASH 0
-`define RV_BTB_INDEX3_LO 16
-`define RV_BTB_INDEX2_HI 15
-`define RV_BTB_ARRAY_DEPTH 128
-`define RV_BTB_INDEX1_LO 2
-`define RV_BTB_ADDR_LO 2
-`define RV_BTB_INDEX3_HI 22
-`define RV_BTB_ADDR_HI 8
-`define RV_BTB_TOFFSET_SIZE 12
-`define RV_BTB_INDEX2_LO 9
-`define RV_BTB_BTAG_FOLD 0
-`define RV_BTB_ENABLE 1
-`define RV_XLEN 32
-`define RV_IFU_BUS_TAG 3
-`define RV_LSU_BUS_ID 1
-`define RV_IFU_BUS_PRTY 2
-`define RV_LSU_BUS_TAG 3
-`define RV_IFU_BUS_ID 1
-`define RV_SB_BUS_PRTY 2
-`define RV_LSU_BUS_PRTY 2
-`define RV_DMA_BUS_ID 1
-`define RV_SB_BUS_ID 1
-`define RV_BUS_PRTY_DEFAULT 2'h3
-`define RV_DMA_BUS_PRTY 2
-`define RV_SB_BUS_TAG 1
-`define RV_DMA_BUS_TAG 1
-`define RV_ICACHE_TAG_NUM_BYPASS 2
-`define RV_ICACHE_STATUS_BITS 1
-`define RV_ICACHE_BEAT_ADDR_HI 5
-`define RV_ICACHE_SCND_LAST 6
-`define RV_ICACHE_TAG_LO 13
-`define RV_ICACHE_BANK_WIDTH 8
-`define RV_ICACHE_DATA_CELL ram_512x71
-`define RV_ICACHE_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_WAYPACK 1
-`define RV_ICACHE_LN_SZ 64
-`define RV_ICACHE_NUM_BEATS 8
-`define RV_ICACHE_NUM_LINES_WAY 128
-`define RV_ICACHE_NUM_LINES_BANK 64
-`define RV_ICACHE_TAG_DEPTH 128
-`define RV_ICACHE_DATA_DEPTH 512
-`define RV_ICACHE_DATA_WIDTH 64
-`define RV_ICACHE_TAG_CELL ram_128x25
-`define RV_ICACHE_NUM_BYPASS 2
-`define RV_ICACHE_FDATA_WIDTH 71
-`define RV_ICACHE_NUM_LINES 256
-`define RV_ICACHE_DATA_INDEX_LO 4
-`define RV_ICACHE_BANK_BITS 1
-`define RV_ICACHE_TAG_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_2BANKS 1
-`define RV_ICACHE_BANKS_WAY 2
-`define RV_ICACHE_BANK_LO 3
-`define RV_ICACHE_ECC 1
-`define RV_ICACHE_INDEX_HI 12
-`define RV_ICACHE_TAG_INDEX_LO 6
-`define RV_ICACHE_TAG_BYPASS_ENABLE 1
-`define RV_ICACHE_BANK_HI 3
-`define RV_ICACHE_BEAT_BITS 3
-`define RV_ICACHE_BYPASS_ENABLE 1
-`define RV_ICACHE_NUM_WAYS 2
-`define RV_ICACHE_SIZE 16
-`define RV_NMI_VEC 'h11110000
-`define RV_DCCM_EADR 32'hf0040fff
-`define RV_DCCM_SIZE 4
-`define RV_DCCM_REGION 4'hf
-`define RV_DCCM_RESERVED 'h400
-`define RV_DCCM_INDEX_BITS 8
-`define RV_DCCM_ROWS 256
-`define RV_DCCM_FDATA_WIDTH 39
-`define RV_DCCM_NUM_BANKS_4 
-`define RV_DCCM_NUM_BANKS 4
-`define RV_DCCM_BITS 12
-`define RV_DCCM_DATA_WIDTH 32
-`define RV_DCCM_SIZE_4 
-`define RV_DCCM_OFFSET 28'h40000
-`define RV_DCCM_WIDTH_BITS 2
-`define RV_DCCM_BYTE_WIDTH 4
-`define RV_DCCM_ENABLE 1
-`define RV_DCCM_ECC_WIDTH 7
-`define RV_DCCM_BANK_BITS 2
-`define RV_DCCM_DATA_CELL ram_256x39
-`define RV_DCCM_SADR 32'hf0040000
-`define RV_LSU_SB_BITS 12
-`define RV_RESET_VEC 'haffff000
-`define RV_PIC_BITS 15
-`define RV_PIC_MEIGWCTRL_OFFSET 'h4000
-`define RV_PIC_MEIGWCTRL_MASK 'h3
-`define RV_PIC_MEIGWCLR_OFFSET 'h5000
-`define RV_PIC_MEIE_MASK 'h1
-`define RV_PIC_MEIP_MASK 'h0
-`define RV_PIC_MEIPT_COUNT 31
-`define RV_PIC_MEIPL_COUNT 31
-`define RV_PIC_MEIPT_MASK 'h0
-`define RV_PIC_BASE_ADDR 32'hf00c0000
-`define RV_PIC_MEIPL_MASK 'hf
-`define RV_PIC_INT_WORDS 1
-`define RV_PIC_MPICCFG_MASK 'h1
-`define RV_PIC_MEIPT_OFFSET 'h3004
-`define RV_PIC_TOTAL_INT_PLUS1 32
-`define RV_PIC_MEIPL_OFFSET 'h0000
-`define RV_PIC_MEIE_COUNT 31
-`define RV_PIC_MEIGWCTRL_COUNT 31
-`define RV_PIC_REGION 4'hf
-`define RV_PIC_MEIGWCLR_MASK 'h0
-`define RV_PIC_SIZE 32
-`define RV_PIC_MEIE_OFFSET 'h2000
-`define RV_PIC_MPICCFG_OFFSET 'h3000
-`define RV_PIC_MPICCFG_COUNT 1
-`define RV_PIC_MEIP_OFFSET 'h1000
-`define RV_PIC_TOTAL_INT 31
-`define RV_PIC_OFFSET 10'hc0000
-`define RV_PIC_MEIGWCLR_COUNT 31
-`define RV_PIC_MEIP_COUNT 1
-`define RV_TARGET default
-`define RV_NUMIREGS 32
-`undef RV_ASSERT_ON
-
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-
-//// `include "common_defines.vh"
-`undef RV_ASSERT_ON
-`define TEC_RV_ICG sky130_fd_sc_hd__dlclkp_1
-`define RV_PHYSICAL 1
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top wrapper file with eb1_brqrv/mem instantiated inside
-// Comments:
-//
-//********************************************************************************
-module eb1_brqrv_wrapper
-import eb1_pkg::*;
- #(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-   input logic			             vccd1,
-   input logic				     vssd1,
-   input logic                             clk,
-   input logic                             rst_l,
-   input logic                             dbg_rst_l,
-   input logic [31:1]                      rst_vec,
-   input logic                             nmi_int,
-   input logic [31:1]                      nmi_vec,
-   input logic [31:1]                      jtag_id,
-   input 				     uart_rx,
-
-
-   output logic [31:0]                     trace_rv_i_insn_ip,
-   output logic [31:0]                     trace_rv_i_address_ip,
-   output logic                            trace_rv_i_valid_ip,
-   output logic                            trace_rv_i_exception_ip,
-   output logic [4:0]                      trace_rv_i_ecause_ip,
-   output logic                            trace_rv_i_interrupt_ip,
-   output logic [31:0]                     trace_rv_i_tval_ip,
-
-   // Bus signals
-`ifdef RV_BUILD_AXI4
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   input  logic                            ifu_axi_awready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   input  logic                            ifu_axi_wready,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   input  logic                            ifu_axi_bvalid,
-   output logic                            ifu_axi_bready,
-   input  logic [1:0]                      ifu_axi_bresp,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-   input  logic                            ifu_axi_rlast,
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            sb_axi_awvalid,
-   input  logic                            sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_awid,
-   output logic [31:0]                     sb_axi_awaddr,
-   output logic [3:0]                      sb_axi_awregion,
-   output logic [7:0]                      sb_axi_awlen,
-   output logic [2:0]                      sb_axi_awsize,
-   output logic [1:0]                      sb_axi_awburst,
-   output logic                            sb_axi_awlock,
-   output logic [3:0]                      sb_axi_awcache,
-   output logic [2:0]                      sb_axi_awprot,
-   output logic [3:0]                      sb_axi_awqos,
-
-   output logic                            sb_axi_wvalid,
-   input  logic                            sb_axi_wready,
-   output logic [63:0]                     sb_axi_wdata,
-   output logic [7:0]                      sb_axi_wstrb,
-   output logic                            sb_axi_wlast,
-
-   input  logic                            sb_axi_bvalid,
-   output logic                            sb_axi_bready,
-   input  logic [1:0]                      sb_axi_bresp,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_bid,
-
-   // AXI Read Channels
-   output logic                            sb_axi_arvalid,
-   input  logic                            sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_arid,
-   output logic [31:0]                     sb_axi_araddr,
-   output logic [3:0]                      sb_axi_arregion,
-   output logic [7:0]                      sb_axi_arlen,
-   output logic [2:0]                      sb_axi_arsize,
-   output logic [1:0]                      sb_axi_arburst,
-   output logic                            sb_axi_arlock,
-   output logic [3:0]                      sb_axi_arcache,
-   output logic [2:0]                      sb_axi_arprot,
-   output logic [3:0]                      sb_axi_arqos,
-
-   input  logic                            sb_axi_rvalid,
-   output logic                            sb_axi_rready,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_rid,
-   input  logic [63:0]                     sb_axi_rdata,
-   input  logic [1:0]                      sb_axi_rresp,
-   input  logic                            sb_axi_rlast,
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   input  logic                            dma_axi_awvalid,
-   output logic                            dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]       dma_axi_awid,
-   input  logic [31:0]                     dma_axi_awaddr,
-   input  logic [2:0]                      dma_axi_awsize,
-   input  logic [2:0]                      dma_axi_awprot,
-   input  logic [7:0]                      dma_axi_awlen,
-   input  logic [1:0]                      dma_axi_awburst,
-
-
-   input  logic                            dma_axi_wvalid,
-   output logic                            dma_axi_wready,
-   input  logic [63:0]                     dma_axi_wdata,
-   input  logic [7:0]                      dma_axi_wstrb,
-   input  logic                            dma_axi_wlast,
-
-   output logic                            dma_axi_bvalid,
-   input  logic                            dma_axi_bready,
-   output logic [1:0]                      dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]       dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                            dma_axi_arvalid,
-   output logic                            dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]       dma_axi_arid,
-   input  logic [31:0]                     dma_axi_araddr,
-   input  logic [2:0]                      dma_axi_arsize,
-   input  logic [2:0]                      dma_axi_arprot,
-   input  logic [7:0]                      dma_axi_arlen,
-   input  logic [1:0]                      dma_axi_arburst,
-
-   output logic                            dma_axi_rvalid,
-   input  logic                            dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]       dma_axi_rid,
-   output logic [63:0]                     dma_axi_rdata,
-   output logic [1:0]                      dma_axi_rresp,
-   output logic                            dma_axi_rlast,
-`endif
-
-`ifdef RV_BUILD_AHB_LITE
- //// AHB LITE BUS
-   output logic [31:0]                     haddr,
-   output logic [2:0]                      hburst,
-   output logic                            hmastlock,
-   output logic [3:0]                      hprot,
-   output logic [2:0]                      hsize,
-   output logic [1:0]                      htrans,
-   output logic                            hwrite,
-
-   input logic [63:0]                      hrdata,
-   input logic                             hready,
-   input logic                             hresp,
-
-   // LSU AHB Master
-   output logic [31:0]                     lsu_haddr,
-   output logic [2:0]                      lsu_hburst,
-   output logic                            lsu_hmastlock,
-   output logic [3:0]                      lsu_hprot,
-   output logic [2:0]                      lsu_hsize,
-   output logic [1:0]                      lsu_htrans,
-   output logic                            lsu_hwrite,
-   output logic [63:0]                     lsu_hwdata,
-
-   input logic [63:0]                      lsu_hrdata,
-   input logic                             lsu_hready,
-   input logic                             lsu_hresp,
-   // Debug Syster Bus AHB
-   output logic [31:0]                     sb_haddr,
-   output logic [2:0]                      sb_hburst,
-   output logic                            sb_hmastlock,
-   output logic [3:0]                      sb_hprot,
-   output logic [2:0]                      sb_hsize,
-   output logic [1:0]                      sb_htrans,
-   output logic                            sb_hwrite,
-   output logic [63:0]                     sb_hwdata,
-
-   input  logic [63:0]                     sb_hrdata,
-   input  logic                            sb_hready,
-   input  logic                            sb_hresp,
-
-   // DMA Slave
-   input logic                             dma_hsel,
-   input logic [31:0]                      dma_haddr,
-   input logic [2:0]                       dma_hburst,
-   input logic                             dma_hmastlock,
-   input logic [3:0]                       dma_hprot,
-   input logic [2:0]                       dma_hsize,
-   input logic [1:0]                       dma_htrans,
-   input logic                             dma_hwrite,
-   input logic [63:0]                      dma_hwdata,
-   input logic                             dma_hreadyin,
-
-   output logic [63:0]                     dma_hrdata,
-   output logic                            dma_hreadyout,
-   output logic                            dma_hresp,
-`endif
-   // clk ratio signals
-   input logic                             lsu_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             ifu_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             dbg_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             dma_bus_clk_en, // Clock ratio b/w cpu core clk & AHB slave interface
-
- // all of these test inputs are brought to top-level; must be tied off based on usage by physical design (ie. icache or not, iccm or not, dccm or not)
-
-   input                                   eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
-   input                                   eb1_ccm_ext_in_pkt_t  [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,
-   input                                   eb1_ic_data_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,
-   input                                   eb1_ic_tag_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0] ic_tag_ext_in_pkt,
-
-   input logic                             timer_int,
-   input logic                             soft_int,
-   input logic [pt.PIC_TOTAL_INT:1]        extintsrc_req,
-
-   output logic                            dec_tlu_perfcnt0, // toggles when slot0 perf counter 0 has an event inc
-   output logic                            dec_tlu_perfcnt1,
-   output logic                            dec_tlu_perfcnt2,
-   output logic                            dec_tlu_perfcnt3,
-
-   // ports added by the soc team
-   input logic                             jtag_tck,    // JTAG clk
-   input logic                             jtag_tms,    // JTAG TMS
-   input logic                             jtag_tdi,    // JTAG tdi
-   input logic                             jtag_trst_n, // JTAG Reset
-   output logic                            jtag_tdo,    // JTAG TDO
-
-   input logic [31:4] core_id,
-
-   // external MPC halt/run interface
-   input logic                             mpc_debug_halt_req, // Async halt request
-   input logic                             mpc_debug_run_req,  // Async run request
-   input logic                             mpc_reset_run_req,  // Run/halt after reset
-   output logic                            mpc_debug_halt_ack, // Halt ack
-   output logic                            mpc_debug_run_ack,  // Run ack
-   output logic                            debug_brkpt_status, // debug breakpoint
-
-   input logic                             i_cpu_halt_req,      // Async halt req to CPU
-   output logic                            o_cpu_halt_ack,      // core response to halt
-   output logic                            o_cpu_halt_status,   // 1'b1 indicates core is halted
-   output logic                            o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-   input logic                             i_cpu_run_req, // Async restart req to CPU
-   output logic                            o_cpu_run_ack, // Core response to run req
-   input logic                             scan_mode,     // To enable scan mode
-   input logic                             mbist_mode,     // to enable mbist
-   input [15:0] 			    CLKS_PER_BIT
-);
-
-   logic                             active_l2clk;
-   logic                             free_l2clk;
-
-   // DCCM ports
-   logic         dccm_wren;
-   logic         dccm_rden;
-   logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo;
-   logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi;
-   logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo;
-   logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi;
-
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_lo;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_hi;
-
-   // PIC ports
-
-   // Icache & Itag ports
-   logic [31:1]  ic_rw_addr;
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_wr_en  ;     // Which way to write
-   logic         ic_rd_en ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_tag_valid;   // Valid from the I$ tag valid outside (in flops).
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_rd_hit;      // ic_rd_hit[3:0]
-   logic         ic_tag_perr;                       // Ic tag parity error
-
-   logic [pt.ICACHE_INDEX_HI:3]  ic_debug_addr;     // Read/Write addresss to the Icache.
-   logic         ic_debug_rd_en;                    // Icache debug rd
-   logic         ic_debug_wr_en;                    // Icache debug wr
-   logic         ic_debug_tag_array;                // Debug tag array
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_debug_way;   // Debug way. Rd or Wr.
-
-   logic [25:0]  ictag_debug_rd_data;               // Debug icache tag.
-   logic [pt.ICACHE_BANKS_WAY-1:0][70:0]  ic_wr_data;
-   logic [63:0]  ic_rd_data;
-   logic [70:0]  ic_debug_rd_data;                  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   logic [70:0]  ic_debug_wr_data;                  // Debug wr cache.
-
-   logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr;       // ecc error per bank
-   logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr;       // parity error per bank
-
-   logic [63:0]  ic_premux_data;
-   logic         ic_sel_premux_data;
-
-   // ICCM ports
-   logic [pt.ICCM_BITS-1:1]    iccm_rw_addr;
-   logic           iccm_wren;
-   logic           iccm_rden;
-   logic [2:0]     iccm_wr_size;
-   logic [77:0]    iccm_wr_data;
-   logic           iccm_buf_correct_ecc;
-   logic           iccm_correction_state;
-
-   logic [63:0]    iccm_rd_data;
-   logic [77:0]    iccm_rd_data_ecc;
- 
-   logic	 core_rst;
-   logic        core_rst_l;                         // Core reset including rst_l and dbg_rst_l
-   logic        jtag_tdoEn;
-
-   logic        dccm_clk_override;
-   logic        icm_clk_override;
-   logic        dec_tlu_core_ecc_disable;
-
-
-   // zero out the signals not presented at the wrapper instantiation level
-`ifdef RV_BUILD_AXI4
-
- //// AHB LITE BUS
-   logic [31:0]              haddr;
-   logic [2:0]               hburst;
-   logic                     hmastlock;
-   logic [3:0]               hprot;
-   logic [2:0]               hsize;
-   logic [1:0]               htrans;
-   logic                     hwrite;
-
-   logic [63:0]              hrdata;
-   logic                     hready;
-   logic                     hresp;
-
-   // LSU AHB Master
-   logic [31:0]              lsu_haddr;
-   logic [2:0]               lsu_hburst;
-   logic                     lsu_hmastlock;
-   logic [3:0]               lsu_hprot;
-   logic [2:0]               lsu_hsize;
-   logic [1:0]               lsu_htrans;
-   logic                     lsu_hwrite;
-   logic [63:0]              lsu_hwdata;
-
-   logic [63:0]              lsu_hrdata;
-   logic                     lsu_hready;
-   logic                     lsu_hresp;
-   // Debug Syster Bus AHB
-   logic [31:0]              sb_haddr;
-   logic [2:0]               sb_hburst;
-   logic                     sb_hmastlock;
-   logic [3:0]               sb_hprot;
-   logic [2:0]               sb_hsize;
-   logic [1:0]               sb_htrans;
-   logic                     sb_hwrite;
-   logic [63:0]              sb_hwdata;
-
-    logic [63:0]             sb_hrdata;
-    logic                    sb_hready;
-    logic                    sb_hresp;
-
-   // DMA Slave
-   logic                     dma_hsel;
-   logic [31:0]              dma_haddr;
-   logic [2:0]               dma_hburst;
-   logic                     dma_hmastlock;
-   logic [3:0]               dma_hprot;
-   logic [2:0]               dma_hsize;
-   logic [1:0]               dma_htrans;
-   logic                     dma_hwrite;
-   logic [63:0]              dma_hwdata;
-   logic                     dma_hreadyin;
-
-   logic [63:0]              dma_hrdata;
-   logic                     dma_hreadyout;
-   logic                     dma_hresp;
-
-
-
-   // AHB
-   assign  hrdata[63:0]                           = '0;
-   assign  hready                                 = '0;
-   assign  hresp                                  = '0;
-   // LSU
-   assign  lsu_hrdata[63:0]                       = '0;
-   assign  lsu_hready                             = '0;
-   assign  lsu_hresp                              = '0;
-   // Debu
-   assign  sb_hrdata[63:0]                        = '0;
-   assign  sb_hready                              = '0;
-   assign  sb_hresp                               = '0;
-
-   // DMA
-   assign  dma_hsel                               = '0;
-   assign  dma_haddr[31:0]                        = '0;
-   assign  dma_hburst[2:0]                        = '0;
-   assign  dma_hmastlock                          = '0;
-   assign  dma_hprot[3:0]                         = '0;
-   assign  dma_hsize[2:0]                         = '0;
-   assign  dma_htrans[1:0]                        = '0;
-   assign  dma_hwrite                             = '0;
-   assign  dma_hwdata[63:0]                       = '0;
-   assign  dma_hreadyin                           = '0;
-
-`endif //  `ifdef RV_BUILD_AXI4
-
-
-`ifdef RV_BUILD_AHB_LITE
-   wire                            lsu_axi_awvalid;
-   wire                            lsu_axi_awready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid;
-   wire [31:0]                     lsu_axi_awaddr;
-   wire [3:0]                      lsu_axi_awregion;
-   wire [7:0]                      lsu_axi_awlen;
-   wire [2:0]                      lsu_axi_awsize;
-   wire [1:0]                      lsu_axi_awburst;
-   wire                            lsu_axi_awlock;
-   wire [3:0]                      lsu_axi_awcache;
-   wire [2:0]                      lsu_axi_awprot;
-   wire [3:0]                      lsu_axi_awqos;
-
-   wire                            lsu_axi_wvalid;
-   wire                            lsu_axi_wready;
-   wire [63:0]                     lsu_axi_wdata;
-   wire [7:0]                      lsu_axi_wstrb;
-   wire                            lsu_axi_wlast;
-
-   wire                            lsu_axi_bvalid;
-   wire                            lsu_axi_bready;
-   wire [1:0]                      lsu_axi_bresp;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid;
-
-   // AXI Read Channels
-   wire                            lsu_axi_arvalid;
-   wire                            lsu_axi_arready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid;
-   wire [31:0]                     lsu_axi_araddr;
-   wire [3:0]                      lsu_axi_arregion;
-   wire [7:0]                      lsu_axi_arlen;
-   wire [2:0]                      lsu_axi_arsize;
-   wire [1:0]                      lsu_axi_arburst;
-   wire                            lsu_axi_arlock;
-   wire [3:0]                      lsu_axi_arcache;
-   wire [2:0]                      lsu_axi_arprot;
-   wire [3:0]                      lsu_axi_arqos;
-
-   wire                            lsu_axi_rvalid;
-   wire                            lsu_axi_rready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid;
-   wire [63:0]                     lsu_axi_rdata;
-   wire [1:0]                      lsu_axi_rresp;
-   wire                            lsu_axi_rlast;
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   wire                            ifu_axi_awvalid;
-   wire                            ifu_axi_awready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid;
-   wire [31:0]                     ifu_axi_awaddr;
-   wire [3:0]                      ifu_axi_awregion;
-   wire [7:0]                      ifu_axi_awlen;
-   wire [2:0]                      ifu_axi_awsize;
-   wire [1:0]                      ifu_axi_awburst;
-   wire                            ifu_axi_awlock;
-   wire [3:0]                      ifu_axi_awcache;
-   wire [2:0]                      ifu_axi_awprot;
-   wire [3:0]                      ifu_axi_awqos;
-
-   wire                            ifu_axi_wvalid;
-   wire                            ifu_axi_wready;
-   wire [63:0]                     ifu_axi_wdata;
-   wire [7:0]                      ifu_axi_wstrb;
-   wire                            ifu_axi_wlast;
-
-   wire                            ifu_axi_bvalid;
-   wire                            ifu_axi_bready;
-   wire [1:0]                      ifu_axi_bresp;
-   wire [pt.IFU_BUS_TAG-1:0]      ifu_axi_bid;
-
-   // AXI Read Channels
-   wire                            ifu_axi_arvalid;
-   wire                            ifu_axi_arready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid;
-   wire [31:0]                     ifu_axi_araddr;
-   wire [3:0]                      ifu_axi_arregion;
-   wire [7:0]                      ifu_axi_arlen;
-   wire [2:0]                      ifu_axi_arsize;
-   wire [1:0]                      ifu_axi_arburst;
-   wire                            ifu_axi_arlock;
-   wire [3:0]                      ifu_axi_arcache;
-   wire [2:0]                      ifu_axi_arprot;
-   wire [3:0]                      ifu_axi_arqos;
-
-   wire                            ifu_axi_rvalid;
-   wire                            ifu_axi_rready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid;
-   wire [63:0]                     ifu_axi_rdata;
-   wire [1:0]                      ifu_axi_rresp;
-   wire                            ifu_axi_rlast;
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   wire                            sb_axi_awvalid;
-   wire                            sb_axi_awready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_awid;
-   wire [31:0]                     sb_axi_awaddr;
-   wire [3:0]                      sb_axi_awregion;
-   wire [7:0]                      sb_axi_awlen;
-   wire [2:0]                      sb_axi_awsize;
-   wire [1:0]                      sb_axi_awburst;
-   wire                            sb_axi_awlock;
-   wire [3:0]                      sb_axi_awcache;
-   wire [2:0]                      sb_axi_awprot;
-   wire [3:0]                      sb_axi_awqos;
-
-   wire                            sb_axi_wvalid;
-   wire                            sb_axi_wready;
-   wire [63:0]                     sb_axi_wdata;
-   wire [7:0]                      sb_axi_wstrb;
-   wire                            sb_axi_wlast;
-
-   wire                            sb_axi_bvalid;
-   wire                            sb_axi_bready;
-   wire [1:0]                      sb_axi_bresp;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_bid;
-
-   // AXI Read Channels
-   wire                            sb_axi_arvalid;
-   wire                            sb_axi_arready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_arid;
-   wire [31:0]                     sb_axi_araddr;
-   wire [3:0]                      sb_axi_arregion;
-   wire [7:0]                      sb_axi_arlen;
-   wire [2:0]                      sb_axi_arsize;
-   wire [1:0]                      sb_axi_arburst;
-   wire                            sb_axi_arlock;
-   wire [3:0]                      sb_axi_arcache;
-   wire [2:0]                      sb_axi_arprot;
-   wire [3:0]                      sb_axi_arqos;
-
-   wire                            sb_axi_rvalid;
-   wire                            sb_axi_rready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_rid;
-   wire [63:0]                     sb_axi_rdata;
-   wire [1:0]                      sb_axi_rresp;
-   wire                            sb_axi_rlast;
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   wire                         dma_axi_awvalid;
-   wire                         dma_axi_awready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_awid;
-   wire [31:0]                  dma_axi_awaddr;
-   wire [2:0]                   dma_axi_awsize;
-   wire [2:0]                   dma_axi_awprot;
-   wire [7:0]                   dma_axi_awlen;
-   wire [1:0]                   dma_axi_awburst;
-
-
-   wire                         dma_axi_wvalid;
-   wire                         dma_axi_wready;
-   wire [63:0]                  dma_axi_wdata;
-   wire [7:0]                   dma_axi_wstrb;
-   wire                         dma_axi_wlast;
-
-   wire                         dma_axi_bvalid;
-   wire                         dma_axi_bready;
-   wire [1:0]                   dma_axi_bresp;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_bid;
-
-   // AXI Read Channels
-   wire                         dma_axi_arvalid;
-   wire                         dma_axi_arready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_arid;
-   wire [31:0]                  dma_axi_araddr;
-   wire [2:0]                   dma_axi_arsize;
-   wire [2:0]                   dma_axi_arprot;
-   wire [7:0]                   dma_axi_arlen;
-   wire [1:0]                   dma_axi_arburst;
-
-   wire                         dma_axi_rvalid;
-   wire                         dma_axi_rready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_rid;
-   wire [63:0]                  dma_axi_rdata;
-   wire [1:0]                   dma_axi_rresp;
-   wire                         dma_axi_rlast;
-
-   // AXI
-   assign ifu_axi_awready = 1'b1;
-   assign ifu_axi_wready = 1'b1;
-   assign ifu_axi_bvalid = '0;
-   assign ifu_axi_bresp[1:0] = '0;
-   assign ifu_axi_bid[pt.IFU_BUS_TAG-1:0] = '0;
-
-`endif //  `ifdef RV_BUILD_AHB_LITE
-
-   logic                   dmi_reg_en;
-   logic [6:0]             dmi_reg_addr;
-   logic                   dmi_reg_wr_en;
-   logic [31:0]            dmi_reg_wdata;
-   logic [31:0]            dmi_reg_rdata;
-   logic rx_dv_i;
-   logic [7:0] rx_byte_i;
-   logic iccm_instr_we;
-   logic [13:0] iccm_instr_addr;
-   logic [31:0] iccm_instr_wdata;
-   // UART Receiver
-
-
-   // Instantiate the eb1_brqrv core
-   eb1_brqrv #(.pt(pt)) brqrv (
-                                .clk(clk),
-                                .rst_l(core_rst),
-                                .*
-                                );
-
-   // Instantiate the mem
-   eb1_mem  #(.pt(pt)) mem (
-                             .clk(active_l2clk),
-                             .rst_l(rst_l),
-                             .iccm_rw_addr((core_rst) ? iccm_rw_addr : iccm_instr_addr[10:0]),
-                             .iccm_wren((core_rst) ? iccm_wren : iccm_instr_we),
-                             .iccm_wr_data((core_rst) ? iccm_wr_data : {7'h0,iccm_instr_wdata,7'h0,iccm_instr_wdata}),
-                             .iccm_wr_size((core_rst) ? iccm_wr_size : 3'b010),
-                             .*
-                             );
-   
-   eb1_iccm_controller iccm_controller(
-		.clk_i(clk),
-		.rst_ni(rst_l),
-		.rx_dv_i(rx_dv_i),
-		.rx_byte_i(rx_byte_i),
-		.we_o(iccm_instr_we),
-		.addr_o(iccm_instr_addr),
-		.wdata_o(iccm_instr_wdata),
-		.reset_o(core_rst)
-	);                          
-   eb1_uart_rx_prog uart_rx_m(
-		.i_Clock(clk),
-		.rst_ni(rst_l),
-		.i_Rx_Serial(uart_rx),
-		.CLKS_PER_BIT(CLKS_PER_BIT),
-		.o_Rx_DV(rx_dv_i),
-		.o_Rx_Byte(rx_byte_i)
-	);
- 
-
-   //  JTAG/DMI instance
-   dmi_wrapper  dmi_wrapper (
-    // JTAG signals
-    .trst_n      (jtag_trst_n),     // JTAG reset
-    .tck         (jtag_tck),        // JTAG clock
-    .tms         (jtag_tms),        // Test mode select
-    .tdi         (jtag_tdi),        // Test Data Input
-    .tdo         (jtag_tdo),        // Test Data Output
-    .tdoEnable   (),
-    // Processor Signals
-    .core_rst_n  (dbg_rst_l),       // Debug reset, active low
-    .core_clk    (clk),             // Core clock
-    .jtag_id     (jtag_id),         // JTAG ID
-    .rd_data     (dmi_reg_rdata),   // Read data from  Processor
-    .reg_wr_data (dmi_reg_wdata),   // Write data to Processor
-    .reg_wr_addr (dmi_reg_addr),    // Write address to Processor
-    .reg_en      (dmi_reg_en),      // Write interface bit to Processor
-    .reg_wr_en   (dmi_reg_wr_en),   // Write enable to Processor
-    .dmi_hard_reset   ()
-   );
-
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file
-// Comments:
-//
-//********************************************************************************
-module eb1_brqrv
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic                  clk,
-   input logic                  rst_l,
-   input logic                  dbg_rst_l,
-   input logic [31:1]           rst_vec,
-   input logic                  nmi_int,
-   input logic [31:1]           nmi_vec,
-   output logic                 core_rst_l,   // This is "rst_l | dbg_rst_l"
-
-   output logic                 active_l2clk,
-   output logic                 free_l2clk,
-
-   output logic [31:0] trace_rv_i_insn_ip,
-   output logic [31:0] trace_rv_i_address_ip,
-   output logic   trace_rv_i_valid_ip,
-   output logic   trace_rv_i_exception_ip,
-   output logic [4:0]  trace_rv_i_ecause_ip,
-   output logic   trace_rv_i_interrupt_ip,
-   output logic [31:0] trace_rv_i_tval_ip,
-
-
-   output logic                 dccm_clk_override,
-   output logic                 icm_clk_override,
-   output logic                 dec_tlu_core_ecc_disable,
-
-   // external halt/run interface
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-   output logic o_cpu_halt_ack,    // Core Acknowledge to Halt request
-   output logic o_cpu_halt_status, // 1'b1 indicates processor is halted
-   output logic o_cpu_run_ack,     // Core Acknowledge to run request
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic dec_tlu_perfcnt0, // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,
-   output logic dec_tlu_perfcnt2,
-   output logic dec_tlu_perfcnt3,
-
-   // DCCM ports
-   output logic                          dccm_wren,
-   output logic                          dccm_rden,
-   output logic [pt.DCCM_BITS-1:0]          dccm_wr_addr_lo,
-   output logic [pt.DCCM_BITS-1:0]          dccm_wr_addr_hi,
-   output logic [pt.DCCM_BITS-1:0]          dccm_rd_addr_lo,
-   output logic [pt.DCCM_BITS-1:0]          dccm_rd_addr_hi,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_wr_data_lo,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_wr_data_hi,
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]    dccm_rd_data_lo,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]    dccm_rd_data_hi,
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]           iccm_rw_addr,
-   output logic                  iccm_wren,
-   output logic                  iccm_rden,
-   output logic [2:0]            iccm_wr_size,
-   output logic [77:0]           iccm_wr_data,
-   output logic                  iccm_buf_correct_ecc,
-   output logic                  iccm_correction_state,
-
-   input  logic [63:0]          iccm_rd_data,
-   input  logic [77:0]           iccm_rd_data_ecc,
-
-   // ICache , ITAG  ports
-   output logic [31:1]           ic_rw_addr,
-   output logic [pt.ICACHE_NUM_WAYS-1:0]            ic_tag_valid,
-   output logic [pt.ICACHE_NUM_WAYS-1:0]            ic_wr_en,
-   output logic                  ic_rd_en,
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select premux data
-
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]            ic_rd_hit,
-   input  logic                  ic_tag_perr,        // Icache Tag parity error
-
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   input  logic                            ifu_axi_awready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   input  logic                            ifu_axi_wready,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   input  logic                            ifu_axi_bvalid,
-   output logic                            ifu_axi_bready,
-   input  logic [1:0]                      ifu_axi_bresp,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-   input  logic                            ifu_axi_rlast,
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            sb_axi_awvalid,
-   input  logic                            sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_awid,
-   output logic [31:0]                     sb_axi_awaddr,
-   output logic [3:0]                      sb_axi_awregion,
-   output logic [7:0]                      sb_axi_awlen,
-   output logic [2:0]                      sb_axi_awsize,
-   output logic [1:0]                      sb_axi_awburst,
-   output logic                            sb_axi_awlock,
-   output logic [3:0]                      sb_axi_awcache,
-   output logic [2:0]                      sb_axi_awprot,
-   output logic [3:0]                      sb_axi_awqos,
-
-   output logic                            sb_axi_wvalid,
-   input  logic                            sb_axi_wready,
-   output logic [63:0]                     sb_axi_wdata,
-   output logic [7:0]                      sb_axi_wstrb,
-   output logic                            sb_axi_wlast,
-
-   input  logic                            sb_axi_bvalid,
-   output logic                            sb_axi_bready,
-   input  logic [1:0]                      sb_axi_bresp,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_bid,
-
-   // AXI Read Channels
-   output logic                            sb_axi_arvalid,
-   input  logic                            sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_arid,
-   output logic [31:0]                     sb_axi_araddr,
-   output logic [3:0]                      sb_axi_arregion,
-   output logic [7:0]                      sb_axi_arlen,
-   output logic [2:0]                      sb_axi_arsize,
-   output logic [1:0]                      sb_axi_arburst,
-   output logic                            sb_axi_arlock,
-   output logic [3:0]                      sb_axi_arcache,
-   output logic [2:0]                      sb_axi_arprot,
-   output logic [3:0]                      sb_axi_arqos,
-
-   input  logic                            sb_axi_rvalid,
-   output logic                            sb_axi_rready,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_rid,
-   input  logic [63:0]                     sb_axi_rdata,
-   input  logic [1:0]                      sb_axi_rresp,
-   input  logic                            sb_axi_rlast,
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   input  logic                         dma_axi_awvalid,
-   output logic                         dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid,
-   input  logic [31:0]                  dma_axi_awaddr,
-   input  logic [2:0]                   dma_axi_awsize,
-   input  logic [2:0]                   dma_axi_awprot,
-   input  logic [7:0]                   dma_axi_awlen,
-   input  logic [1:0]                   dma_axi_awburst,
-
-
-   input  logic                         dma_axi_wvalid,
-   output logic                         dma_axi_wready,
-   input  logic [63:0]                  dma_axi_wdata,
-   input  logic [7:0]                   dma_axi_wstrb,
-   input  logic                         dma_axi_wlast,
-
-   output logic                         dma_axi_bvalid,
-   input  logic                         dma_axi_bready,
-   output logic [1:0]                   dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]    dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                         dma_axi_arvalid,
-   output logic                         dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid,
-   input  logic [31:0]                  dma_axi_araddr,
-   input  logic [2:0]                   dma_axi_arsize,
-   input  logic [2:0]                   dma_axi_arprot,
-   input  logic [7:0]                   dma_axi_arlen,
-   input  logic [1:0]                   dma_axi_arburst,
-
-   output logic                         dma_axi_rvalid,
-   input  logic                         dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]    dma_axi_rid,
-   output logic [63:0]                  dma_axi_rdata,
-   output logic [1:0]                   dma_axi_rresp,
-   output logic                         dma_axi_rlast,
-
-
- //// AHB LITE BUS
-   output logic [31:0]           haddr,
-   output logic [2:0]            hburst,
-   output logic                  hmastlock,
-   output logic [3:0]            hprot,
-   output logic [2:0]            hsize,
-   output logic [1:0]            htrans,
-   output logic                  hwrite,
-
-   input  logic [63:0]           hrdata,
-   input  logic                  hready,
-   input  logic                  hresp,
-
-   // LSU AHB Master
-   output logic [31:0]          lsu_haddr,
-   output logic [2:0]           lsu_hburst,
-   output logic                 lsu_hmastlock,
-   output logic [3:0]           lsu_hprot,
-   output logic [2:0]           lsu_hsize,
-   output logic [1:0]           lsu_htrans,
-   output logic                 lsu_hwrite,
-   output logic [63:0]          lsu_hwdata,
-
-   input  logic [63:0]          lsu_hrdata,
-   input  logic                 lsu_hready,
-   input  logic                 lsu_hresp,
-
-   //System Bus Debug Master
-   output logic [31:0]          sb_haddr,
-   output logic [2:0]           sb_hburst,
-   output logic                 sb_hmastlock,
-   output logic [3:0]           sb_hprot,
-   output logic [2:0]           sb_hsize,
-   output logic [1:0]           sb_htrans,
-   output logic                 sb_hwrite,
-   output logic [63:0]          sb_hwdata,
-
-   input  logic [63:0]          sb_hrdata,
-   input  logic                 sb_hready,
-   input  logic                 sb_hresp,
-
-   // DMA Slave
-   input logic                   dma_hsel,
-   input logic [31:0]            dma_haddr,
-   input logic [2:0]             dma_hburst,
-   input logic                   dma_hmastlock,
-   input logic [3:0]             dma_hprot,
-   input logic [2:0]             dma_hsize,
-   input logic [1:0]             dma_htrans,
-   input logic                   dma_hwrite,
-   input logic [63:0]            dma_hwdata,
-   input logic                   dma_hreadyin,
-
-   output  logic [63:0]          dma_hrdata,
-   output  logic                 dma_hreadyout,
-   output  logic                 dma_hresp,
-
-   input   logic                 lsu_bus_clk_en,
-   input   logic                 ifu_bus_clk_en,
-   input   logic                 dbg_bus_clk_en,
-   input   logic                 dma_bus_clk_en,
-
-   input logic                  dmi_reg_en,                // read or write
-   input logic [6:0]            dmi_reg_addr,              // address of DM register
-   input logic                  dmi_reg_wr_en,             // write instruction
-   input logic [31:0]           dmi_reg_wdata,             // write data
-   output logic [31:0]          dmi_reg_rdata,
-
-   input logic [pt.PIC_TOTAL_INT:1]           extintsrc_req,
-   input logic                   timer_int,
-   input logic                   soft_int,
-   input logic                   scan_mode
-);
-
-
-
-
-   logic [63:0]                  hwdata_nc;
-   //----------------------------------------------------------------------
-   //
-   //----------------------------------------------------------------------
-
-   logic                         ifu_pmu_instr_aligned;
-   logic                         ifu_ic_error_start;
-   logic                         ifu_iccm_rd_ecc_single_err;
-
-   logic                         lsu_axi_awready_ahb;
-   logic                         lsu_axi_wready_ahb;
-   logic                         lsu_axi_bvalid_ahb;
-   logic                         lsu_axi_bready_ahb;
-   logic [1:0]                   lsu_axi_bresp_ahb;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_bid_ahb;
-   logic                         lsu_axi_arready_ahb;
-   logic                         lsu_axi_rvalid_ahb;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_rid_ahb;
-   logic [63:0]                  lsu_axi_rdata_ahb;
-   logic [1:0]                   lsu_axi_rresp_ahb;
-   logic                         lsu_axi_rlast_ahb;
-
-   logic                         lsu_axi_awready_int;
-   logic                         lsu_axi_wready_int;
-   logic                         lsu_axi_bvalid_int;
-   logic                         lsu_axi_bready_int;
-   logic [1:0]                   lsu_axi_bresp_int;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_bid_int;
-   logic                         lsu_axi_arready_int;
-   logic                         lsu_axi_rvalid_int;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_rid_int;
-   logic [63:0]                  lsu_axi_rdata_int;
-   logic [1:0]                   lsu_axi_rresp_int;
-   logic                         lsu_axi_rlast_int;
-   
-   logic                         ifu_axi_awready_ahb;
-   logic                         ifu_axi_wready_ahb;
-   logic                         ifu_axi_bvalid_ahb;
-   logic                         ifu_axi_bready_ahb;
-   logic [1:0]                   ifu_axi_bresp_ahb;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_bid_ahb;
-   logic                         ifu_axi_arready_ahb;
-   logic                         ifu_axi_rvalid_ahb;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_rid_ahb;
-   logic [63:0]                  ifu_axi_rdata_ahb;
-   logic [1:0]                   ifu_axi_rresp_ahb;
-   logic                         ifu_axi_rlast_ahb;
-
-   logic                         ifu_axi_awready_int;
-   logic                         ifu_axi_wready_int;
-   logic                         ifu_axi_bvalid_int;
-   logic                         ifu_axi_bready_int;
-   logic [1:0]                   ifu_axi_bresp_int;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_bid_int;
-   logic                         ifu_axi_arready_int;
-   logic                         ifu_axi_rvalid_int;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_rid_int;
-   logic [63:0]                  ifu_axi_rdata_int;
-   logic [1:0]                   ifu_axi_rresp_int;
-   logic                         ifu_axi_rlast_int;
-
-   logic                         sb_axi_awready_ahb;
-   logic                         sb_axi_wready_ahb;
-   logic                         sb_axi_bvalid_ahb;
-   logic                         sb_axi_bready_ahb;
-   logic [1:0]                   sb_axi_bresp_ahb;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_bid_ahb;
-   logic                         sb_axi_arready_ahb;
-   logic                         sb_axi_rvalid_ahb;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_rid_ahb;
-   logic [63:0]                  sb_axi_rdata_ahb;
-   logic [1:0]                   sb_axi_rresp_ahb;
-   logic                         sb_axi_rlast_ahb;
-
-   logic                         sb_axi_awready_int;
-   logic                         sb_axi_wready_int;
-   logic                         sb_axi_bvalid_int;
-   logic                         sb_axi_bready_int;
-   logic [1:0]                   sb_axi_bresp_int;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_bid_int;
-   logic                         sb_axi_arready_int;
-   logic                         sb_axi_rvalid_int;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_rid_int;
-   logic [63:0]                  sb_axi_rdata_int;
-   logic [1:0]                   sb_axi_rresp_int;
-   logic                         sb_axi_rlast_int;
-
-   logic                         dma_axi_awvalid_ahb;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid_ahb;
-   logic [31:0]                  dma_axi_awaddr_ahb;
-   logic [2:0]                   dma_axi_awsize_ahb;
-   logic [2:0]                   dma_axi_awprot_ahb;
-   logic [7:0]                   dma_axi_awlen_ahb;
-   logic [1:0]                   dma_axi_awburst_ahb;
-   logic                         dma_axi_wvalid_ahb;
-   logic [63:0]                  dma_axi_wdata_ahb;
-   logic [7:0]                   dma_axi_wstrb_ahb;
-   logic                         dma_axi_wlast_ahb;
-   logic                         dma_axi_bready_ahb;
-   logic                         dma_axi_arvalid_ahb;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid_ahb;
-   logic [31:0]                  dma_axi_araddr_ahb;
-   logic [2:0]                   dma_axi_arsize_ahb;
-   logic [2:0]                   dma_axi_arprot_ahb;
-   logic [7:0]                   dma_axi_arlen_ahb;
-   logic [1:0]                   dma_axi_arburst_ahb;
-   logic                         dma_axi_rready_ahb;
-
-   logic                         dma_axi_awvalid_int;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid_int;
-   logic [31:0]                  dma_axi_awaddr_int;
-   logic [2:0]                   dma_axi_awsize_int;
-   logic [2:0]                   dma_axi_awprot_int;
-   logic [7:0]                   dma_axi_awlen_int;
-   logic [1:0]                   dma_axi_awburst_int;
-   logic                         dma_axi_wvalid_int;
-   logic [63:0]                  dma_axi_wdata_int;
-   logic [7:0]                   dma_axi_wstrb_int;
-   logic                         dma_axi_wlast_int;
-   logic                         dma_axi_bready_int;
-   logic                         dma_axi_arvalid_int;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid_int;
-   logic [31:0]                  dma_axi_araddr_int;
-   logic [2:0]                   dma_axi_arsize_int;
-   logic [2:0]                   dma_axi_arprot_int;
-   logic [7:0]                   dma_axi_arlen_int;
-   logic [1:0]                   dma_axi_arburst_int;
-   logic                         dma_axi_rready_int;
-
-
-// Icache debug
-   logic [70:0] ifu_ic_debug_rd_data; // diagnostic icache read data
-   logic ifu_ic_debug_rd_data_valid; // diagnostic icache read data valid
-   eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt; // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-   logic         dec_i0_rs1_en_d;
-   logic         dec_i0_rs2_en_d;
-   logic  [31:0] gpr_i0_rs1_d;
-   logic  [31:0] gpr_i0_rs2_d;
-
-   logic [31:0] dec_i0_result_r;
-   logic [31:0] exu_i0_result_x;
-   logic [31:1] exu_i0_pc_x;
-   logic [31:1] exu_npc_r;
-
-   eb1_alu_pkt_t  i0_ap;
-
-   // Trigger signals
-   eb1_trigger_pkt_t [3:0]     trigger_pkt_any;
-   logic [3:0]             lsu_trigger_match_m;
-
-
-   logic [31:0] dec_i0_immed_d;
-   logic [12:1] dec_i0_br_immed_d;
-   logic         dec_i0_select_pc_d;
-
-   logic [31:1] dec_i0_pc_d;
-   logic [3:0]  dec_i0_rs1_bypass_en_d;
-   logic [3:0]  dec_i0_rs2_bypass_en_d;
-
-   logic         dec_i0_alu_decode_d;
-   logic         dec_i0_branch_d;
-
-   logic         ifu_miss_state_idle;
-   logic         dec_tlu_flush_noredir_r;
-   logic         dec_tlu_flush_leak_one_r;
-   logic         dec_tlu_flush_err_r;
-   logic         ifu_i0_valid;
-   logic [31:0]  ifu_i0_instr;
-   logic [31:1]  ifu_i0_pc;
-
-   logic        exu_flush_final;
-
-   logic [31:1] exu_flush_path_final;
-
-   logic [31:0] exu_lsu_rs1_d;
-   logic [31:0] exu_lsu_rs2_d;
-
-
-   eb1_lsu_pkt_t    lsu_p;
-   logic             dec_qual_lsu_d;
-
-   logic        dec_lsu_valid_raw_d;
-   logic [11:0] dec_lsu_offset_d;
-
-   logic [31:0]  lsu_result_m;
-   logic [31:0]  lsu_result_corr_r;     // This is the ECC corrected data going to RF
-   logic         lsu_single_ecc_error_incr;     // Increment the ecc counter
-   eb1_lsu_error_pkt_t lsu_error_pkt_r;
-   logic         lsu_imprecise_error_load_any;
-   logic         lsu_imprecise_error_store_any;
-   logic [31:0]  lsu_imprecise_error_addr_any;
-   logic         lsu_load_stall_any;       // This is for blocking loads
-   logic         lsu_store_stall_any;      // This is for blocking stores
-   logic         lsu_idle_any;             // doesn't include DMA
-   logic         lsu_active;               // lsu is active. used for clock
-
-
-   logic [31:1]  lsu_fir_addr;        // fast interrupt address
-   logic [1:0]   lsu_fir_error;       // Error during fast interrupt lookup
-
-   // Non-blocking loads
-   logic                                 lsu_nonblock_load_valid_m;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_tag_m;
-   logic                                 lsu_nonblock_load_inv_r;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_inv_tag_r;
-   logic                                 lsu_nonblock_load_data_valid;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_data_tag;
-   logic [31:0]                          lsu_nonblock_load_data;
-
-   logic        dec_csr_ren_d;
-   logic [31:0] dec_csr_rddata_d;
-
-   logic [31:0] exu_csr_rs1_x;
-
-   logic        dec_tlu_i0_commit_cmt;
-   logic        dec_tlu_flush_lower_r;
-   logic        dec_tlu_flush_lower_wb;
-   logic        dec_tlu_i0_kill_writeb_r;     // I0 is flushed, don't writeback any results to arch state
-   logic        dec_tlu_fence_i_r;            // flush is a fence_i rfnpc, flush icache
-
-   logic [31:1] dec_tlu_flush_path_r;
-   logic [31:0] dec_tlu_mrac_ff;        // CSR for memory region control
-
-   logic        ifu_i0_pc4;
-
-   eb1_mul_pkt_t  mul_p;
-
-   eb1_div_pkt_t  div_p;
-   logic           dec_div_cancel;
-
-   logic [31:0] exu_div_result;
-   logic exu_div_wren;
-
-   logic dec_i0_decode_d;
-
-
-   logic [31:1] pred_correct_npc_x;
-
-   eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt;
-
-   eb1_predict_pkt_t  exu_mp_pkt;
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr;
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_index;
-   logic [pt.BTB_BTAG_SIZE-1:0]          exu_mp_btag;
-
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r;
-   logic [1:0]  exu_i0_br_hist_r;
-   logic        exu_i0_br_error_r;
-   logic        exu_i0_br_start_error_r;
-   logic        exu_i0_br_valid_r;
-   logic        exu_i0_br_mp_r;
-   logic        exu_i0_br_middle_r;
-
-   logic        exu_i0_br_way_r;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r;
-
-   logic        dma_dccm_req;
-   logic        dma_iccm_req;
-   logic [2:0]  dma_mem_tag;
-   logic [31:0] dma_mem_addr;
-   logic [2:0]  dma_mem_sz;
-   logic        dma_mem_write;
-   logic [63:0] dma_mem_wdata;
-
-   logic        dccm_dma_rvalid;
-   logic        dccm_dma_ecc_error;
-   logic [2:0]  dccm_dma_rtag;
-   logic [63:0] dccm_dma_rdata;
-   logic        iccm_dma_rvalid;
-   logic        iccm_dma_ecc_error;
-   logic [2:0]  iccm_dma_rtag;
-   logic [63:0] iccm_dma_rdata;
-
-   logic        dma_dccm_stall_any;       // Stall the ld/st in decode if asserted
-   logic        dma_iccm_stall_any;       // Stall the fetch
-   logic        dccm_ready;
-   logic        iccm_ready;
-
-   logic        dma_pmu_dccm_read;
-   logic        dma_pmu_dccm_write;
-   logic        dma_pmu_any_read;
-   logic        dma_pmu_any_write;
-
-   logic        ifu_i0_icaf;
-   logic [1:0]  ifu_i0_icaf_type;
-
-
-   logic        ifu_i0_icaf_second;
-   logic        ifu_i0_dbecc;
-   logic        iccm_dma_sb_error;
-
-   eb1_br_pkt_t i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag;
-
-   logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index; // Fully associative btb error index
-
-
-   eb1_predict_pkt_t dec_i0_predict_p_d;
-
-   logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d;                // DEC predict fghr
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d;     // DEC predict index
-   logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d;               // DEC predict branch tag
-
-   // PIC ports
-   logic                  picm_wren;
-   logic                  picm_rden;
-   logic                  picm_mken;
-   logic [31:0]           picm_rdaddr;
-   logic [31:0]           picm_wraddr;
-   logic [31:0]           picm_wr_data;
-   logic [31:0]           picm_rd_data;
-
-   // feature disable from mfdc
-   logic  dec_tlu_external_ldfwd_disable; // disable external load forwarding
-   logic  dec_tlu_bpred_disable;
-   logic  dec_tlu_wb_coalescing_disable;
-   logic  dec_tlu_sideeffect_posted_disable;
-   logic [2:0] dec_tlu_dma_qos_prty;         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   logic  dec_tlu_misc_clk_override;
-   logic  dec_tlu_ifu_clk_override;
-   logic  dec_tlu_lsu_clk_override;
-   logic  dec_tlu_bus_clk_override;
-   logic  dec_tlu_pic_clk_override;
-   logic  dec_tlu_dccm_clk_override;
-   logic  dec_tlu_icm_clk_override;
-
-   logic  dec_tlu_picio_clk_override;
-
-   assign        dccm_clk_override = dec_tlu_dccm_clk_override;   // dccm memory
-   assign        icm_clk_override = dec_tlu_icm_clk_override;    // icache/iccm memory
-
-   // -----------------------DEBUG  START -------------------------------
-
-   logic [31:0]            dbg_cmd_addr;              // the address of the debug command to used by the core
-   logic [31:0]            dbg_cmd_wrdata;            // If the debug command is a write command, this has the data to be written to the CSR/GPR
-   logic                   dbg_cmd_valid;             // commad is being driven by the dbg module. One pulse. Only dirven when core_halted has been seen
-   logic                   dbg_cmd_write;             // 1: write command; 0: read_command
-   logic [1:0]             dbg_cmd_type;              // 0:gpr 1:csr 2: memory
-   logic [1:0]             dbg_cmd_size;              // size of the abstract mem access debug command
-   logic                   dbg_halt_req;              // Sticky signal indicating that the debug module wants to start the entering of debug mode ( start the halting sequence )
-   logic                   dbg_resume_req;            // Sticky signal indicating that the debug module wants to resume from debug mode
-   logic                   dbg_core_rst_l;            // Core reset from DM
-
-   logic                   core_dbg_cmd_done;         // Final muxed cmd done to debug
-   logic                   core_dbg_cmd_fail;         // Final muxed cmd done to debug
-   logic [31:0]            core_dbg_rddata;           // Final muxed cmd done to debug
-
-   logic                   dma_dbg_cmd_done;          // Abstarct memory command sent to dma is done
-   logic                   dma_dbg_cmd_fail;          // Abstarct memory command sent to dma failed
-   logic [31:0]            dma_dbg_rddata;            // Read data for abstract memory access
-
-   logic                   dbg_dma_bubble;            // Debug needs a bubble to send a valid
-   logic                   dma_dbg_ready;             // DMA is ready to accept debug request
-
-   logic [31:0]            dec_dbg_rddata;            // The core drives this data ( intercepts the pipe and sends it here )
-   logic                   dec_dbg_cmd_done;          // This will be treated like a valid signal
-   logic                   dec_dbg_cmd_fail;          // Abstract command failed
-   logic                   dec_tlu_mpc_halted_only;   // Only halted due to MPC
-   logic                   dec_tlu_dbg_halted;        // The core has finished the queiscing sequence. Sticks this signal high
-   logic                   dec_tlu_resume_ack;
-   logic                   dec_tlu_debug_mode;        // Core is in debug mode
-   logic                   dec_debug_wdata_rs1_d;
-   logic                   dec_tlu_force_halt;        // halt has been forced
-
-   logic [1:0]             dec_data_en;
-   logic [1:0]             dec_ctl_en;
-
-   // PMU Signals
-   logic                   exu_pmu_i0_br_misp;
-   logic                   exu_pmu_i0_br_ataken;
-   logic                   exu_pmu_i0_pc4;
-
-   logic                   lsu_pmu_load_external_m;
-   logic                   lsu_pmu_store_external_m;
-   logic                   lsu_pmu_misaligned_m;
-   logic                   lsu_pmu_bus_trxn;
-   logic                   lsu_pmu_bus_misaligned;
-   logic                   lsu_pmu_bus_error;
-   logic                   lsu_pmu_bus_busy;
-
-   logic                   ifu_pmu_fetch_stall;
-   logic                   ifu_pmu_ic_miss;
-   logic                   ifu_pmu_ic_hit;
-   logic                   ifu_pmu_bus_error;
-   logic                   ifu_pmu_bus_busy;
-   logic                   ifu_pmu_bus_trxn;
-
-   logic                   active_state;
-   logic                   free_clk;
-   logic                   active_clk;
-   logic                   dec_pause_state_cg;
-
-   logic                   lsu_nonblock_load_data_error;
-
-   logic [15:0]            ifu_i0_cinst;
-
-// fast interrupt
-   logic [31:2]            dec_tlu_meihap;
-   logic                   dec_extint_stall;
-
-   eb1_trace_pkt_t  trace_rv_trace_pkt;
-
-
-   logic                   lsu_fastint_stall_any;
-
-   logic [7:0]  pic_claimid;
-   logic [3:0]  pic_pl, dec_tlu_meicurpl, dec_tlu_meipt;
-   logic        mexintpend;
-   logic        mhwakeup;
-
-   logic        dma_active;
-
-
-   logic        pause_state;
-   logic        halt_state;
-
-   logic        dec_tlu_core_empty;
-   
-
-   assign pause_state = dec_pause_state_cg & ~(dma_active | lsu_active) & dec_tlu_core_empty;
-
-   assign halt_state = o_cpu_halt_status & ~(dma_active | lsu_active);
-
-
-   assign active_state = (~(halt_state | pause_state) | dec_tlu_flush_lower_r | dec_tlu_flush_lower_wb)  | dec_tlu_misc_clk_override;
-
-   rvoclkhdr free_cg2   ( .clk(clk), .en(1'b1),         .l1clk(free_l2clk), .* );
-   rvoclkhdr active_cg2 ( .clk(clk), .en(active_state), .l1clk(active_l2clk), .* );
-
-// all other clock headers are 1st level
-   rvoclkhdr free_cg1   ( .clk(free_l2clk),     .en(1'b1), .l1clk(free_clk), .* );
-   rvoclkhdr active_cg1 ( .clk(active_l2clk),   .en(1'b1), .l1clk(active_clk), .* );
-
-
-   assign core_dbg_cmd_done = dma_dbg_cmd_done | dec_dbg_cmd_done;
-   assign core_dbg_cmd_fail = dma_dbg_cmd_fail | dec_dbg_cmd_fail;
-   assign core_dbg_rddata[31:0] = dma_dbg_cmd_done ? dma_dbg_rddata[31:0] : dec_dbg_rddata[31:0];
-
-   eb1_dbg #(.pt(pt)) dbg (
-      .rst_l(core_rst_l),
-      .clk(free_l2clk),
-      .clk_override(dec_tlu_misc_clk_override),
-
-      // AXI signals
-      .sb_axi_awready(sb_axi_awready_int),
-      .sb_axi_wready(sb_axi_wready_int),
-      .sb_axi_bvalid(sb_axi_bvalid_int),
-      .sb_axi_bresp(sb_axi_bresp_int[1:0]),
-
-      .sb_axi_arready(sb_axi_arready_int),
-      .sb_axi_rvalid(sb_axi_rvalid_int),
-      .sb_axi_rdata(sb_axi_rdata_int[63:0]),
-      .sb_axi_rresp(sb_axi_rresp_int[1:0]),
-      .*
-   );
-
-   // -----------------   DEBUG END -----------------------------
-
-   assign core_rst_l = rst_l & (dbg_core_rst_l | scan_mode);
-   // fetch
-   eb1_ifu #(.pt(pt)) ifu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .dec_tlu_flush_err_wb       (dec_tlu_flush_err_r      ),
-                            .dec_tlu_flush_noredir_wb   (dec_tlu_flush_noredir_r  ),
-                            .dec_tlu_fence_i_wb         (dec_tlu_fence_i_r        ),
-                            .dec_tlu_flush_leak_one_wb  (dec_tlu_flush_leak_one_r ),
-                            .dec_tlu_flush_lower_wb     (dec_tlu_flush_lower_r    ),
-
-                            // AXI signals
-                            .ifu_axi_arready(ifu_axi_arready_int),
-                            .ifu_axi_rvalid(ifu_axi_rvalid_int),
-                            .ifu_axi_rid(ifu_axi_rid_int[pt.IFU_BUS_TAG-1:0]),
-                            .ifu_axi_rdata(ifu_axi_rdata_int[63:0]),
-                            .ifu_axi_rresp(ifu_axi_rresp_int[1:0]),
-                            .exu_flush_final(exu_flush_final),
-
-                            .*
-                            );
-
-
-   eb1_dec #(.pt(pt)) dec (
-                            .clk(active_l2clk),
-                            .dbg_cmd_wrdata(dbg_cmd_wrdata[1:0]),
-                            .rst_l(core_rst_l),
-                            .i_cpu_halt_req(i_cpu_halt_req),
-                            .i_cpu_run_req(i_cpu_run_req),  
-                            .*
-                            );
-
-   eb1_exu #(.pt(pt)) exu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .*
-                            );
-
-   eb1_lsu #(.pt(pt)) lsu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .clk_override(dec_tlu_lsu_clk_override),
-                            .dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-
-                            // AXI signals
-                            .lsu_axi_awready(lsu_axi_awready_int),
-                            .lsu_axi_wready(lsu_axi_wready_int),
-                            .lsu_axi_bvalid(lsu_axi_bvalid_int),
-                            .lsu_axi_bid(lsu_axi_bid_int[pt.LSU_BUS_TAG-1:0]),
-                            .lsu_axi_bresp(lsu_axi_bresp_int[1:0]),
-
-                            .lsu_axi_arready(lsu_axi_arready_int),
-                            .lsu_axi_rvalid(lsu_axi_rvalid_int),
-                            .lsu_axi_rid(lsu_axi_rid_int[pt.LSU_BUS_TAG-1:0]),
-                            .lsu_axi_rdata(lsu_axi_rdata_int[63:0]),
-                            .lsu_axi_rresp(lsu_axi_rresp_int[1:0]),
-                            .lsu_axi_rlast(lsu_axi_rlast_int),
-
-                            .*
-
-                            );
-
-
-   eb1_pic_ctrl  #(.pt(pt)) pic_ctrl_inst (
-                                            .clk(free_l2clk),
-                                            .clk_override(dec_tlu_pic_clk_override),
-                                            .io_clk_override(dec_tlu_picio_clk_override),
-                                            .picm_mken (picm_mken),
-                                            .extintsrc_req({extintsrc_req[pt.PIC_TOTAL_INT:1],1'b0}),
-                                            .pl(pic_pl[3:0]),
-                                            .claimid(pic_claimid[7:0]),
-                                            .meicurpl(dec_tlu_meicurpl[3:0]),
-                                            .meipt(dec_tlu_meipt[3:0]),
-                                            .rst_l(core_rst_l),
-                                            .*);
-
-   eb1_dma_ctrl #(.pt(pt)) dma_ctrl (
-                                      .clk(free_l2clk),
-                                      .rst_l(core_rst_l),
-                                      .clk_override(dec_tlu_misc_clk_override),
-
-                                      // AXI signals
-                                      .dma_axi_awvalid(dma_axi_awvalid_int),
-                                      .dma_axi_awid(dma_axi_awid_int[pt.DMA_BUS_TAG-1:0]),
-                                      .dma_axi_awaddr(dma_axi_awaddr_int[31:0]),
-                                      .dma_axi_awsize(dma_axi_awsize_int[2:0]),
-                                      .dma_axi_wvalid(dma_axi_wvalid_int),
-                                      .dma_axi_wdata(dma_axi_wdata_int[63:0]),
-                                      .dma_axi_wstrb(dma_axi_wstrb_int[7:0]),
-                                      .dma_axi_bready(dma_axi_bready_int),
-
-                                      .dma_axi_arvalid(dma_axi_arvalid_int),
-                                      .dma_axi_arid(dma_axi_arid_int[pt.DMA_BUS_TAG-1:0]),
-                                      .dma_axi_araddr(dma_axi_araddr_int[31:0]),
-                                      .dma_axi_arsize(dma_axi_arsize_int[2:0]),
-                                      .dma_axi_rready(dma_axi_rready_int),
-
-                                      .*
-                                      );
-
-   if (pt.BUILD_AHB_LITE == 1) begin: Gen_AXI_To_AHB
-
-      // AXI4 -> AHB Gasket for LSU
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.LSU_BUS_TAG)) lsu_axi4_to_ahb (
-
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(lsu_bus_clk_en),
-         .dec_tlu_force_halt(dec_tlu_force_halt),
-
-         // AXI Write Channels
-         .axi_awvalid(lsu_axi_awvalid),
-         .axi_awready(lsu_axi_awready_ahb),
-         .axi_awid(lsu_axi_awid[pt.LSU_BUS_TAG-1:0]),
-         .axi_awaddr(lsu_axi_awaddr[31:0]),
-         .axi_awsize(lsu_axi_awsize[2:0]),
-         .axi_awprot(lsu_axi_awprot[2:0]),
-
-         .axi_wvalid(lsu_axi_wvalid),
-         .axi_wready(lsu_axi_wready_ahb),
-         .axi_wdata(lsu_axi_wdata[63:0]),
-         .axi_wstrb(lsu_axi_wstrb[7:0]),
-         .axi_wlast(lsu_axi_wlast),
-
-         .axi_bvalid(lsu_axi_bvalid_ahb),
-         .axi_bready(lsu_axi_bready),
-         .axi_bresp(lsu_axi_bresp_ahb[1:0]),
-         .axi_bid(lsu_axi_bid_ahb[pt.LSU_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(lsu_axi_arvalid),
-         .axi_arready(lsu_axi_arready_ahb),
-         .axi_arid(lsu_axi_arid[pt.LSU_BUS_TAG-1:0]),
-         .axi_araddr(lsu_axi_araddr[31:0]),
-         .axi_arsize(lsu_axi_arsize[2:0]),
-         .axi_arprot(lsu_axi_arprot[2:0]),
-
-         .axi_rvalid(lsu_axi_rvalid_ahb),
-         .axi_rready(lsu_axi_rready),
-         .axi_rid(lsu_axi_rid_ahb[pt.LSU_BUS_TAG-1:0]),
-         .axi_rdata(lsu_axi_rdata_ahb[63:0]),
-         .axi_rresp(lsu_axi_rresp_ahb[1:0]),
-         .axi_rlast(lsu_axi_rlast_ahb),
-
-         // AHB-LITE signals
-         .ahb_haddr(lsu_haddr[31:0]),
-         .ahb_hburst(lsu_hburst),
-         .ahb_hmastlock(lsu_hmastlock),
-         .ahb_hprot(lsu_hprot[3:0]),
-         .ahb_hsize(lsu_hsize[2:0]),
-         .ahb_htrans(lsu_htrans[1:0]),
-         .ahb_hwrite(lsu_hwrite),
-         .ahb_hwdata(lsu_hwdata[63:0]),
-
-         .ahb_hrdata(lsu_hrdata[63:0]),
-         .ahb_hready(lsu_hready),
-         .ahb_hresp(lsu_hresp),
-
-         .*
-      );
-
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.IFU_BUS_TAG)) ifu_axi4_to_ahb (
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(ifu_bus_clk_en),
-         .dec_tlu_force_halt(dec_tlu_force_halt),
-
-          // AHB-Lite signals
-         .ahb_haddr(haddr[31:0]),
-         .ahb_hburst(hburst),
-         .ahb_hmastlock(hmastlock),
-         .ahb_hprot(hprot[3:0]),
-         .ahb_hsize(hsize[2:0]),
-         .ahb_htrans(htrans[1:0]),
-         .ahb_hwrite(hwrite),
-         .ahb_hwdata(hwdata_nc[63:0]),
-
-         .ahb_hrdata(hrdata[63:0]),
-         .ahb_hready(hready),
-         .ahb_hresp(hresp),
-
-         // AXI Write Channels
-         .axi_awvalid(ifu_axi_awvalid),
-         .axi_awready(ifu_axi_awready_ahb),
-         .axi_awid(ifu_axi_awid[pt.IFU_BUS_TAG-1:0]),
-         .axi_awaddr(ifu_axi_awaddr[31:0]),
-         .axi_awsize(ifu_axi_awsize[2:0]),
-         .axi_awprot(ifu_axi_awprot[2:0]),
-
-         .axi_wvalid(ifu_axi_wvalid),
-         .axi_wready(ifu_axi_wready_ahb),
-         .axi_wdata(ifu_axi_wdata[63:0]),
-         .axi_wstrb(ifu_axi_wstrb[7:0]),
-         .axi_wlast(ifu_axi_wlast),
-
-         .axi_bvalid(ifu_axi_bvalid_ahb),
-         .axi_bready(1'b1),
-         .axi_bresp(ifu_axi_bresp_ahb[1:0]),
-         .axi_bid(ifu_axi_bid_ahb[pt.IFU_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(ifu_axi_arvalid),
-         .axi_arready(ifu_axi_arready_ahb),
-         .axi_arid(ifu_axi_arid[pt.IFU_BUS_TAG-1:0]),
-         .axi_araddr(ifu_axi_araddr[31:0]),
-         .axi_arsize(ifu_axi_arsize[2:0]),
-         .axi_arprot(ifu_axi_arprot[2:0]),
-
-         .axi_rvalid(ifu_axi_rvalid_ahb),
-         .axi_rready(ifu_axi_rready),
-         .axi_rid(ifu_axi_rid_ahb[pt.IFU_BUS_TAG-1:0]),
-         .axi_rdata(ifu_axi_rdata_ahb[63:0]),
-         .axi_rresp(ifu_axi_rresp_ahb[1:0]),
-         .axi_rlast(ifu_axi_rlast_ahb),
-         .*
-      );
-
-      // AXI4 -> AHB Gasket for System Bus
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.SB_BUS_TAG)) sb_axi4_to_ahb (
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(dbg_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(dbg_bus_clk_en),
-         .dec_tlu_force_halt(1'b0),
-
-         // AXI Write Channels
-         .axi_awvalid(sb_axi_awvalid),
-         .axi_awready(sb_axi_awready_ahb),
-         .axi_awid(sb_axi_awid[pt.SB_BUS_TAG-1:0]),
-         .axi_awaddr(sb_axi_awaddr[31:0]),
-         .axi_awsize(sb_axi_awsize[2:0]),
-         .axi_awprot(sb_axi_awprot[2:0]),
-
-         .axi_wvalid(sb_axi_wvalid),
-         .axi_wready(sb_axi_wready_ahb),
-         .axi_wdata(sb_axi_wdata[63:0]),
-         .axi_wstrb(sb_axi_wstrb[7:0]),
-         .axi_wlast(sb_axi_wlast),
-
-         .axi_bvalid(sb_axi_bvalid_ahb),
-         .axi_bready(sb_axi_bready),
-         .axi_bresp(sb_axi_bresp_ahb[1:0]),
-         .axi_bid(sb_axi_bid_ahb[pt.SB_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(sb_axi_arvalid),
-         .axi_arready(sb_axi_arready_ahb),
-         .axi_arid(sb_axi_arid[pt.SB_BUS_TAG-1:0]),
-         .axi_araddr(sb_axi_araddr[31:0]),
-         .axi_arsize(sb_axi_arsize[2:0]),
-         .axi_arprot(sb_axi_arprot[2:0]),
-
-         .axi_rvalid(sb_axi_rvalid_ahb),
-         .axi_rready(sb_axi_rready),
-         .axi_rid(sb_axi_rid_ahb[pt.SB_BUS_TAG-1:0]),
-         .axi_rdata(sb_axi_rdata_ahb[63:0]),
-         .axi_rresp(sb_axi_rresp_ahb[1:0]),
-         .axi_rlast(sb_axi_rlast_ahb),
-         // AHB-LITE signals
-         .ahb_haddr(sb_haddr[31:0]),
-         .ahb_hburst(sb_hburst),
-         .ahb_hmastlock(sb_hmastlock),
-         .ahb_hprot(sb_hprot[3:0]),
-         .ahb_hsize(sb_hsize[2:0]),
-         .ahb_htrans(sb_htrans[1:0]),
-         .ahb_hwrite(sb_hwrite),
-         .ahb_hwdata(sb_hwdata[63:0]),
-
-         .ahb_hrdata(sb_hrdata[63:0]),
-         .ahb_hready(sb_hready),
-         .ahb_hresp(sb_hresp),
-
-         .*
-      );
-
-      //AHB -> AXI4 Gasket for DMA
-      ahb_to_axi4 #(.pt(pt),
-                    .TAG(pt.DMA_BUS_TAG)) dma_ahb_to_axi4 (
-         .clk(free_l2clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(dma_bus_clk_en),
-
-         // AXI Write Channels
-         .axi_awvalid(dma_axi_awvalid_ahb),
-         .axi_awready(dma_axi_awready),
-         .axi_awid(dma_axi_awid_ahb[pt.DMA_BUS_TAG-1:0]),
-         .axi_awaddr(dma_axi_awaddr_ahb[31:0]),
-         .axi_awsize(dma_axi_awsize_ahb[2:0]),
-         .axi_awprot(dma_axi_awprot_ahb[2:0]),
-         .axi_awlen(dma_axi_awlen_ahb[7:0]),
-         .axi_awburst(dma_axi_awburst_ahb[1:0]),
-
-         .axi_wvalid(dma_axi_wvalid_ahb),
-         .axi_wready(dma_axi_wready),
-         .axi_wdata(dma_axi_wdata_ahb[63:0]),
-         .axi_wstrb(dma_axi_wstrb_ahb[7:0]),
-         .axi_wlast(dma_axi_wlast_ahb),
-
-         .axi_bvalid(dma_axi_bvalid),
-         .axi_bready(dma_axi_bready_ahb),
-         .axi_bresp(dma_axi_bresp[1:0]),
-         .axi_bid(dma_axi_bid[pt.DMA_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(dma_axi_arvalid_ahb),
-         .axi_arready(dma_axi_arready),
-         .axi_arid(dma_axi_arid_ahb[pt.DMA_BUS_TAG-1:0]),
-         .axi_araddr(dma_axi_araddr_ahb[31:0]),
-         .axi_arsize(dma_axi_arsize_ahb[2:0]),
-         .axi_arprot(dma_axi_arprot_ahb[2:0]),
-         .axi_arlen(dma_axi_arlen_ahb[7:0]),
-         .axi_arburst(dma_axi_arburst_ahb[1:0]),
-
-         .axi_rvalid(dma_axi_rvalid),
-         .axi_rready(dma_axi_rready_ahb),
-         .axi_rid(dma_axi_rid[pt.DMA_BUS_TAG-1:0]),
-         .axi_rdata(dma_axi_rdata[63:0]),
-         .axi_rresp(dma_axi_rresp[1:0]),
-
-          // AHB signals
-         .ahb_haddr(dma_haddr[31:0]),
-         .ahb_hburst(dma_hburst),
-         .ahb_hmastlock(dma_hmastlock),
-         .ahb_hprot(dma_hprot[3:0]),
-         .ahb_hsize(dma_hsize[2:0]),
-         .ahb_htrans(dma_htrans[1:0]),
-         .ahb_hwrite(dma_hwrite),
-         .ahb_hwdata(dma_hwdata[63:0]),
-
-         .ahb_hrdata(dma_hrdata[63:0]),
-         .ahb_hreadyout(dma_hreadyout),
-         .ahb_hresp(dma_hresp),
-         .ahb_hreadyin(dma_hreadyin),
-         .ahb_hsel(dma_hsel),
-         .*
-      );
-
-   end
-
-   // Drive the final AXI inputs
-   assign lsu_axi_awready_int                 = pt.BUILD_AHB_LITE ? lsu_axi_awready_ahb : lsu_axi_awready;
-   assign lsu_axi_wready_int                  = pt.BUILD_AHB_LITE ? lsu_axi_wready_ahb : lsu_axi_wready;
-   assign lsu_axi_bvalid_int                  = pt.BUILD_AHB_LITE ? lsu_axi_bvalid_ahb : lsu_axi_bvalid;
-   assign lsu_axi_bready_int                  = pt.BUILD_AHB_LITE ? lsu_axi_bready_ahb : lsu_axi_bready;
-   assign lsu_axi_bresp_int[1:0]              = pt.BUILD_AHB_LITE ? lsu_axi_bresp_ahb[1:0] : lsu_axi_bresp[1:0];
-   assign lsu_axi_bid_int[pt.LSU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? lsu_axi_bid_ahb[pt.LSU_BUS_TAG-1:0] : lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign lsu_axi_arready_int                 = pt.BUILD_AHB_LITE ? lsu_axi_arready_ahb : lsu_axi_arready;
-   assign lsu_axi_rvalid_int                  = pt.BUILD_AHB_LITE ? lsu_axi_rvalid_ahb : lsu_axi_rvalid;
-   assign lsu_axi_rid_int[pt.LSU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? lsu_axi_rid_ahb[pt.LSU_BUS_TAG-1:0] : lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign lsu_axi_rdata_int[63:0]             = pt.BUILD_AHB_LITE ? lsu_axi_rdata_ahb[63:0] : lsu_axi_rdata[63:0];
-   assign lsu_axi_rresp_int[1:0]              = pt.BUILD_AHB_LITE ? lsu_axi_rresp_ahb[1:0] : lsu_axi_rresp[1:0];
-   assign lsu_axi_rlast_int                   = pt.BUILD_AHB_LITE ? lsu_axi_rlast_ahb : lsu_axi_rlast;
-
-   assign ifu_axi_awready_int                 = pt.BUILD_AHB_LITE ? ifu_axi_awready_ahb : ifu_axi_awready;
-   assign ifu_axi_wready_int                  = pt.BUILD_AHB_LITE ? ifu_axi_wready_ahb : ifu_axi_wready;
-   assign ifu_axi_bvalid_int                  = pt.BUILD_AHB_LITE ? ifu_axi_bvalid_ahb : ifu_axi_bvalid;
-   assign ifu_axi_bready_int                  = pt.BUILD_AHB_LITE ? ifu_axi_bready_ahb : ifu_axi_bready;
-   assign ifu_axi_bresp_int[1:0]              = pt.BUILD_AHB_LITE ? ifu_axi_bresp_ahb[1:0] : ifu_axi_bresp[1:0];
-   assign ifu_axi_bid_int[pt.IFU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? ifu_axi_bid_ahb[pt.IFU_BUS_TAG-1:0] : ifu_axi_bid[pt.IFU_BUS_TAG-1:0];
-   assign ifu_axi_arready_int                 = pt.BUILD_AHB_LITE ? ifu_axi_arready_ahb : ifu_axi_arready;
-   assign ifu_axi_rvalid_int                  = pt.BUILD_AHB_LITE ? ifu_axi_rvalid_ahb : ifu_axi_rvalid;
-   assign ifu_axi_rid_int[pt.IFU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? ifu_axi_rid_ahb[pt.IFU_BUS_TAG-1:0] : ifu_axi_rid[pt.IFU_BUS_TAG-1:0];
-   assign ifu_axi_rdata_int[63:0]             = pt.BUILD_AHB_LITE ? ifu_axi_rdata_ahb[63:0] : ifu_axi_rdata[63:0];
-   assign ifu_axi_rresp_int[1:0]              = pt.BUILD_AHB_LITE ? ifu_axi_rresp_ahb[1:0] : ifu_axi_rresp[1:0];
-   assign ifu_axi_rlast_int                   = pt.BUILD_AHB_LITE ? ifu_axi_rlast_ahb : ifu_axi_rlast;
-
-   assign sb_axi_awready_int                  = pt.BUILD_AHB_LITE ? sb_axi_awready_ahb : sb_axi_awready;
-   assign sb_axi_wready_int                   = pt.BUILD_AHB_LITE ? sb_axi_wready_ahb : sb_axi_wready;
-   assign sb_axi_bvalid_int                   = pt.BUILD_AHB_LITE ? sb_axi_bvalid_ahb : sb_axi_bvalid;
-   assign sb_axi_bready_int                   = pt.BUILD_AHB_LITE ? sb_axi_bready_ahb : sb_axi_bready;
-   assign sb_axi_bresp_int[1:0]               = pt.BUILD_AHB_LITE ? sb_axi_bresp_ahb[1:0] : sb_axi_bresp[1:0];
-   assign sb_axi_bid_int[pt.SB_BUS_TAG-1:0]   = pt.BUILD_AHB_LITE ? sb_axi_bid_ahb[pt.SB_BUS_TAG-1:0] : sb_axi_bid[pt.SB_BUS_TAG-1:0];
-   assign sb_axi_arready_int                  = pt.BUILD_AHB_LITE ? sb_axi_arready_ahb : sb_axi_arready;
-   assign sb_axi_rvalid_int                   = pt.BUILD_AHB_LITE ? sb_axi_rvalid_ahb : sb_axi_rvalid;
-   assign sb_axi_rid_int[pt.SB_BUS_TAG-1:0]   = pt.BUILD_AHB_LITE ? sb_axi_rid_ahb[pt.SB_BUS_TAG-1:0] : sb_axi_rid[pt.SB_BUS_TAG-1:0];
-   assign sb_axi_rdata_int[63:0]              = pt.BUILD_AHB_LITE ? sb_axi_rdata_ahb[63:0] : sb_axi_rdata[63:0];
-   assign sb_axi_rresp_int[1:0]               = pt.BUILD_AHB_LITE ? sb_axi_rresp_ahb[1:0] : sb_axi_rresp[1:0];
-   assign sb_axi_rlast_int                    = pt.BUILD_AHB_LITE ? sb_axi_rlast_ahb : sb_axi_rlast;
-
-   assign dma_axi_awvalid_int                  = pt.BUILD_AHB_LITE ? dma_axi_awvalid_ahb : dma_axi_awvalid;
-   assign dma_axi_awid_int[pt.DMA_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? dma_axi_awid_ahb[pt.DMA_BUS_TAG-1:0] : dma_axi_awid[pt.DMA_BUS_TAG-1:0];
-   assign dma_axi_awaddr_int[31:0]             = pt.BUILD_AHB_LITE ? dma_axi_awaddr_ahb[31:0] : dma_axi_awaddr[31:0];
-   assign dma_axi_awsize_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_awsize_ahb[2:0] : dma_axi_awsize[2:0];
-   assign dma_axi_awprot_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_awprot_ahb[2:0] : dma_axi_awprot[2:0];
-   assign dma_axi_awlen_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_awlen_ahb[7:0] : dma_axi_awlen[7:0];
-   assign dma_axi_awburst_int[1:0]             = pt.BUILD_AHB_LITE ? dma_axi_awburst_ahb[1:0] : dma_axi_awburst[1:0];
-   assign dma_axi_wvalid_int                   = pt.BUILD_AHB_LITE ? dma_axi_wvalid_ahb : dma_axi_wvalid;
-   assign dma_axi_wdata_int[63:0]              = pt.BUILD_AHB_LITE ? dma_axi_wdata_ahb[63:0] : dma_axi_wdata;
-   assign dma_axi_wstrb_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_wstrb_ahb[7:0] : dma_axi_wstrb[7:0];
-   assign dma_axi_wlast_int                    = pt.BUILD_AHB_LITE ? dma_axi_wlast_ahb : dma_axi_wlast;
-   assign dma_axi_bready_int                   = pt.BUILD_AHB_LITE ? dma_axi_bready_ahb : dma_axi_bready;
-   assign dma_axi_arvalid_int                  = pt.BUILD_AHB_LITE ? dma_axi_arvalid_ahb : dma_axi_arvalid;
-   assign dma_axi_arid_int[pt.DMA_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? dma_axi_arid_ahb[pt.DMA_BUS_TAG-1:0] : dma_axi_arid[pt.DMA_BUS_TAG-1:0];
-   assign dma_axi_araddr_int[31:0]             = pt.BUILD_AHB_LITE ? dma_axi_araddr_ahb[31:0] : dma_axi_araddr[31:0];
-   assign dma_axi_arsize_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_arsize_ahb[2:0] : dma_axi_arsize[2:0];
-   assign dma_axi_arprot_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_arprot_ahb[2:0] : dma_axi_arprot[2:0];
-   assign dma_axi_arlen_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_arlen_ahb[7:0] : dma_axi_arlen[7:0];
-   assign dma_axi_arburst_int[1:0]             = pt.BUILD_AHB_LITE ? dma_axi_arburst_ahb[1:0] : dma_axi_arburst[1:0];
-   assign dma_axi_rready_int                   = pt.BUILD_AHB_LITE ? dma_axi_rready_ahb : dma_axi_rready;
-
- 
-if  (pt.BUILD_AHB_LITE == 1) begin
-
-   end // if (pt.BUILD_AHB_LITE == 1)
-
-
-      // unpack packet
-      // also need retires_p==3
-
-      assign trace_rv_i_insn_ip[31:0]     = trace_rv_trace_pkt.trace_rv_i_insn_ip[31:0];
-
-      assign trace_rv_i_address_ip[31:0]  = trace_rv_trace_pkt.trace_rv_i_address_ip[31:0];
-
-      assign trace_rv_i_valid_ip     = trace_rv_trace_pkt.trace_rv_i_valid_ip;
-
-      assign trace_rv_i_exception_ip = trace_rv_trace_pkt.trace_rv_i_exception_ip;
-
-      assign trace_rv_i_ecause_ip[4:0]    = trace_rv_trace_pkt.trace_rv_i_ecause_ip[4:0];
-
-      assign trace_rv_i_interrupt_ip = trace_rv_trace_pkt.trace_rv_i_interrupt_ip;
-
-      assign trace_rv_i_tval_ip[31:0]     = trace_rv_trace_pkt.trace_rv_i_tval_ip[31:0];
-			
-endmodule // eb1_brqrv
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2018
-//  Owner : Anusha Narayanamoorthy
-//  Description:  
-//                Wrapper module for JTAG_TAP and DMI synchronizer
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_wrapper(
-
-  // JTAG signals
-  input              trst_n,              // JTAG reset
-  input              tck,                 // JTAG clock
-  input              tms,                 // Test mode select   
-  input              tdi,                 // Test Data Input
-  output             tdo,                 // Test Data Output           
-  output             tdoEnable,           // Test Data Output enable             
-
-  // Processor Signals
-  input              core_rst_n,          // Core reset                  
-  input              core_clk,            // Core clock                  
-  input [31:1]       jtag_id,             // JTAG ID
-  input [31:0]       rd_data,             // 32 bit Read data from  Processor                       
-  output [31:0]      reg_wr_data,         // 32 bit Write data to Processor                      
-  output [6:0]       reg_wr_addr,         // 7 bit reg address to Processor                   
-  output             reg_en,              // 1 bit  Read enable to Processor                                    
-  output             reg_wr_en,           // 1 bit  Write enable to Processor 
-  output             dmi_hard_reset  
-);
-
-
-  
-
-
-  //Wire Declaration
-  wire                     rd_en;
-  wire                     wr_en;
-  wire                     dmireset;
-
- 
-  //jtag_tap instantiation
- rvjtag_tap i_jtag_tap(
-   .trst(trst_n),                      // dedicated JTAG TRST (active low) pad signal or asynchronous active low power on reset
-   .tck(tck),                          // dedicated JTAG TCK pad signal
-   .tms(tms),                          // dedicated JTAG TMS pad signal
-   .tdi(tdi),                          // dedicated JTAG TDI pad signal
-   .tdo(tdo),                          // dedicated JTAG TDO pad signal
-   .tdoEnable(tdoEnable),              // enable for TDO pad
-   .wr_data(reg_wr_data),              // 32 bit Write data
-   .wr_addr(reg_wr_addr),              // 7 bit Write address
-   .rd_en(rd_en),                      // 1 bit  read enable
-   .wr_en(wr_en),                      // 1 bit  Write enable
-   .rd_data(rd_data),                  // 32 bit Read data
-   .rd_status(2'b0),
-   .idle(3'h0),                         // no need to wait to sample data
-   .dmi_stat(2'b0),                     // no need to wait or error possible
-   .version(4'h1),                      // debug spec 0.13 compliant
-   .jtag_id(jtag_id),
-   .dmi_hard_reset(dmi_hard_reset),
-   .dmi_reset(dmireset)
-);
-
-
-  // dmi_jtag_to_core_sync instantiation
-  dmi_jtag_to_core_sync i_dmi_jtag_to_core_sync(
-    .wr_en(wr_en),                          // 1 bit  Write enable
-    .rd_en(rd_en),                          // 1 bit  Read enable
-
-    .rst_n(core_rst_n),
-    .clk(core_clk),
-    .reg_en(reg_en),                          // 1 bit  Write interface bit
-    .reg_wr_en(reg_wr_en)                          // 1 bit  Write enable
-  );
-
-endmodule
-
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-  
-module eb1_uart_rx_prog (
-   input         i_Clock,
-   input         rst_ni,
-   input         i_Rx_Serial,
-   input  [15:0] CLKS_PER_BIT,
-   output        o_Rx_DV,
-   output  [7:0] o_Rx_Byte
-   );
-    
-  parameter s_IDLE         = 3'b000;
-  parameter s_RX_START_BIT = 3'b001;
-  parameter s_RX_DATA_BITS = 3'b010;
-  parameter s_RX_STOP_BIT  = 3'b011;
-  parameter s_CLEANUP      = 3'b100;
-   
-  reg           r_Rx_Data_R;
-  reg           r_Rx_Data;
-   
-  reg [15:0]     r_Clock_Count;
-  reg [2:0]     r_Bit_Index; //8 bits total
-  reg [7:0]     r_Rx_Byte;
-  reg           r_Rx_DV;
-  reg [2:0]     r_SM_Main;
-   
-  // Purpose: Double-register the incoming data.
-  // This allows it to be used in the UART RX Clock Domain.
-  // (It removes problems caused by metastability)
-  always @(posedge i_Clock)
-    if(rst_ni == 1'b0) begin
-    	r_Rx_Data_R <= 1'b1;
-    	r_Rx_Data   <= 1'b1;
-    end
-    else begin
-      r_Rx_Data_R <= i_Rx_Serial;
-      r_Rx_Data   <= r_Rx_Data_R;
-    end
-   
-   
-  // Purpose: Control RX state machine
-  always @(posedge i_Clock or negedge rst_ni)
-    begin
-      if (rst_ni == 1'b0) begin
-        r_SM_Main <= s_IDLE;
-        r_Rx_DV       <= 1'b0;
-        r_Clock_Count <= 16'h0000;
-        r_Bit_Index   <= 3'b000;
-        r_Rx_Byte     <= 8'h00;
-      end else begin       
-      case (r_SM_Main)
-        s_IDLE :
-          begin
-            r_Rx_DV       <= 1'b0;
-            r_Clock_Count <= 0;
-            r_Bit_Index   <= 0;
-             
-            if (r_Rx_Data == 1'b0)          // Start bit detected
-              r_SM_Main <= s_RX_START_BIT;
-            else
-              r_SM_Main <= s_IDLE;
-          end
-         
-        // Check middle of start bit to make sure it's still low
-        s_RX_START_BIT :
-          begin
-            if (r_Clock_Count == ((CLKS_PER_BIT-1)>>1))
-              begin
-                if (r_Rx_Data == 1'b0)
-                  begin
-                    r_Clock_Count <= 0;  // reset counter, found the middle
-                    r_SM_Main     <= s_RX_DATA_BITS;
-                  end
-                else
-                  r_SM_Main <= s_IDLE;
-              end
-            else
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_START_BIT;
-              end
-          end // case: s_RX_START_BIT
-         
-         
-        // Wait CLKS_PER_BIT-1 clock cycles to sample serial data
-        s_RX_DATA_BITS :
-          begin
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_DATA_BITS;
-              end
-            else
-              begin
-                r_Clock_Count          <= 0;
-                r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
-                 
-                // Check if we have received all bits
-                if (r_Bit_Index < 7)
-                  begin
-                    r_Bit_Index <= r_Bit_Index + 1;
-                    r_SM_Main   <= s_RX_DATA_BITS;
-                  end
-                else
-                  begin
-                    r_Bit_Index <= 0;
-                    r_SM_Main   <= s_RX_STOP_BIT;
-                  end
-              end
-          end // case: s_RX_DATA_BITS
-     
-     
-        // Receive Stop bit.  Stop bit = 1
-        s_RX_STOP_BIT :
-          begin
-            // Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_STOP_BIT;
-              end
-            else
-              begin
-                r_Rx_DV       <= 1'b1;
-                r_Clock_Count <= 0;
-                r_SM_Main     <= s_CLEANUP;
-              end
-          end // case: s_RX_STOP_BIT
-     
-         
-        // Stay here 1 clock
-        s_CLEANUP :
-          begin
-            r_SM_Main <= s_IDLE;
-            r_Rx_DV   <= 1'b0;
-          end
-         
-         
-        default :
-          r_SM_Main <= s_IDLE;
-         
-      endcase
-      end
-    end   
-   
-  assign o_Rx_DV   = r_Rx_DV;
-  assign o_Rx_Byte = r_Rx_Byte;
-   
-endmodule // uart_rx
-
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-
-module eb1_iccm_controller (
-	clk_i,
-	rst_ni,
-	rx_dv_i,
-	rx_byte_i,
-	we_o,
-	addr_o,
-	wdata_o,
-	reset_o
-);
-	input wire clk_i;
-	input wire rst_ni;
-	input wire rx_dv_i;
-	input wire [7:0] rx_byte_i;
-	output wire we_o;
-	output wire [13:0] addr_o;
-	output wire [31:0] wdata_o;
-	output wire reset_o;
-	reg [1:0] ctrl_fsm_cs;
-	reg [1:0] ctrl_fsm_ns;
-	wire [7:0] rx_byte_d;
-	reg [7:0] rx_byte_q0;
-	reg [7:0] rx_byte_q1;
-	reg [7:0] rx_byte_q2;
-	reg [7:0] rx_byte_q3;
-	reg we_q;
-	reg we_d;
-	reg [13:0] addr_q;
-	reg [13:0] addr_d;
-	reg reset_q;
-	reg reset_d;
-	reg [1:0] byte_count;
-	localparam [1:0] DONE = 3;
-	localparam [1:0] LOAD = 1;
-	localparam [1:0] PROG = 2;
-	localparam [1:0] RESET = 0;
-	always @(*) begin
-		we_d = we_q;
-		addr_d = addr_q;
-		reset_d = reset_q;
-		ctrl_fsm_ns = ctrl_fsm_cs;
-		case (ctrl_fsm_cs)
-			RESET: begin
-				we_d = 1'b0;
-				reset_d = 1'b0;
-				if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = RESET;
-			end
-			LOAD:
-				if (((byte_count == 2'b11) && (rx_byte_q2 != 8'h0f)) && (rx_byte_d != 8'hff)) begin
-					we_d = 1'b1;
-					ctrl_fsm_ns = PROG;
-				end
-				else
-					ctrl_fsm_ns = DONE;
-			PROG: begin
-				we_d = 1'b0;
-				ctrl_fsm_ns = DONE;
-			end
-			DONE:
-				if (wdata_o == 32'h00000fff) begin
-					ctrl_fsm_ns = DONE;
-					reset_d = 1'b1;
-				end
-				else if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = DONE;
-			default: ctrl_fsm_ns = RESET;
-		endcase
-	end
-	assign rx_byte_d = rx_byte_i;
-	assign we_o = we_q;
-	assign addr_o = addr_q;
-	assign wdata_o = {rx_byte_q0, rx_byte_q1, rx_byte_q2, rx_byte_q3};
-	assign reset_o = reset_q;
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni) begin
-			we_q <= 1'b0;
-			addr_q <= 14'b00000000000000;
-			rx_byte_q0 <= 8'b00000000;
-			rx_byte_q1 <= 8'b00000000;
-			rx_byte_q2 <= 8'b00000000;
-			rx_byte_q3 <= 8'b00000000;
-			reset_q <= 1'b0;
-			byte_count <= 2'b00;
-			ctrl_fsm_cs <= RESET;
-		end
-		else begin
-			we_q <= we_d;
-			if (ctrl_fsm_cs == LOAD) begin
-				if (byte_count == 2'b00) begin
-					rx_byte_q0 <= rx_byte_d;
-					byte_count <= 2'b01;
-				end
-				else if (byte_count == 2'b01) begin
-					rx_byte_q1 <= rx_byte_d;
-					byte_count <= 2'b10;
-				end
-				else if (byte_count == 2'b10) begin
-					rx_byte_q2 <= rx_byte_d;
-					byte_count <= 2'b11;
-				end
-				else begin
-					rx_byte_q3 <= rx_byte_d;
-					byte_count <= 2'b00;
-				end
-				addr_q <= addr_d;
-			end
-			if (ctrl_fsm_cs == PROG)
-				addr_q <= addr_d + 2'h2;
-			reset_q <= reset_d;
-			ctrl_fsm_cs <= ctrl_fsm_ns;
-		end
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-module eb1_mem
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-
-   input logic         vccd1,
-   input logic		vssd1,
-   input logic         clk,
-   input logic         rst_l,
-   input logic         dccm_clk_override,
-   input logic         icm_clk_override,
-   input logic         dec_tlu_core_ecc_disable,
-
-   //DCCM ports
-   input logic         dccm_wren,
-   input logic         dccm_rden,
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,
-
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_lo,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_hi,
-
-//`ifdef pt.DCCM_ENABLE
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
-
-//`endif
-
-   //ICCM ports
-   input eb1_ccm_ext_in_pkt_t   [pt.ICCM_NUM_BANKS-1:0]  iccm_ext_in_pkt,
-
-   input logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,
-   input logic                                        iccm_buf_correct_ecc,                    // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM is doing a single bit error correct cycle
-   input logic         iccm_wren,
-   input logic         iccm_rden,
-   input logic [2:0]   iccm_wr_size,
-   input logic [77:0]  iccm_wr_data,
-
-   output logic [63:0] iccm_rd_data,
-   output logic [77:0] iccm_rd_data_ecc,
-
-   // Icache and Itag Ports
-
-   input  logic [31:1]  ic_rw_addr,
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]   ic_tag_valid,
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]   ic_wr_en,
-   input  logic         ic_rd_en,
-   input  logic [63:0] ic_premux_data,      // Premux data to be muxed with each way of the Icache.
-   input  logic         ic_sel_premux_data, // Premux data sel
-   input eb1_ic_data_ext_in_pkt_t   [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]         ic_data_ext_in_pkt,
-   input eb1_ic_tag_ext_in_pkt_t    [pt.ICACHE_NUM_WAYS-1:0]           ic_tag_ext_in_pkt,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-   output logic [70:0]               ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   input  logic                      ic_debug_rd_en,     // Icache debug rd
-   input  logic                      ic_debug_wr_en,     // Icache debug wr
-   input  logic                      ic_debug_tag_array, // Debug tag array
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-   output logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   output logic [25:0]               ictag_debug_rd_data,// Debug icache tag.
-
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    // ecc error per bank
-   output logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,          // parity error per bank
-   output logic [pt.ICACHE_NUM_WAYS-1:0]   ic_rd_hit,
-   output logic         ic_tag_perr,        // Icache Tag parity error
-
-
-   input  logic         scan_mode
-
-);
-
-   logic active_clk;
-   rvoclkhdr active_cg   ( .en(1'b1),         .l1clk(active_clk), .* );
-
-   // DCCM Instantiation
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      eb1_lsu_dccm_mem #(.pt(pt)) dccm (
-         .clk_override(dccm_clk_override),
-         .*
-      );
-   end else begin: Gen_dccm_disable
-      assign dccm_rd_data_lo = '0;
-      assign dccm_rd_data_hi = '0;
-   end
-
-if ( pt.ICACHE_ENABLE ) begin: icache
-   eb1_ifu_ic_mem #(.pt(pt)) icm  (
-      .clk_override(icm_clk_override),
-      .*
-   );
-end
-else  begin
-   assign   ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] = '0;
-   assign   ic_tag_perr    = '0 ;
-   assign   ic_rd_data  = '0 ;
-   assign   ictag_debug_rd_data  = '0 ;
-end // else: !if( pt.ICACHE_ENABLE )
-
-
-
-if (pt.ICCM_ENABLE) begin : iccm
-   eb1_ifu_iccm_mem  #(.pt(pt)) iccm (.*,
-                  .clk_override(icm_clk_override),
-                  .iccm_rw_addr(iccm_rw_addr[pt.ICCM_BITS-1:1]),
-                  .iccm_rd_data(iccm_rd_data[63:0])
-                   );
-end
-else  begin
-   assign  iccm_rd_data    = '0 ;
-   assign iccm_rd_data_ecc = '0 ;
-end
-
-
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Programmable Interrupt Controller
-// Comments:
-//********************************************************************************
-
-module eb1_pic_ctrl
-import eb1_pkg::*; 
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-                  (
-
-                     input  logic                   clk,                  // Core clock
-                     input  logic                   free_clk,             // free clock
-                     input  logic                   rst_l,                // Reset for all flops
-                     input  logic                   clk_override,         // Clock over-ride for gating
-                     input  logic                   io_clk_override,      // PIC IO  Clock over-ride for gating
-                     input  logic [pt.PIC_TOTAL_INT_PLUS1-1:0]   extintsrc_req,  // Interrupt requests
-                     input  logic [31:0]            picm_rdaddr,          // Address of the register
-                     input  logic [31:0]            picm_wraddr,          // Address of the register
-                     input  logic [31:0]            picm_wr_data,         // Data to be written to the register
-                     input  logic                   picm_wren,            // Write enable to the register
-                     input  logic                   picm_rden,            // Read enable for the register
-                     input  logic                   picm_mken,            // Read the Mask for the register
-                     input  logic [3:0]             meicurpl,             // Current Priority Level
-                     input  logic [3:0]             meipt,                // Current Priority Threshold
-
-                     output logic                   mexintpend,           // External Inerrupt request to the core
-                     output logic [7:0]             claimid,              // Claim Id of the requested interrupt
-                     output logic [3:0]             pl,                   // Priority level of the requested interrupt
-                     output logic [31:0]            picm_rd_data,         // Read data of the register
-                     output logic                   mhwakeup,             // Wake-up interrupt request
-                     input  logic                   scan_mode             // scan mode
-
-);
-
-localparam NUM_LEVELS            = $clog2(pt.PIC_TOTAL_INT_PLUS1);
-localparam INTPRIORITY_BASE_ADDR = pt.PIC_BASE_ADDR ;
-localparam INTPEND_BASE_ADDR     = pt.PIC_BASE_ADDR + 32'h00001000 ;
-localparam INTENABLE_BASE_ADDR   = pt.PIC_BASE_ADDR + 32'h00002000 ;
-localparam EXT_INTR_PIC_CONFIG   = pt.PIC_BASE_ADDR + 32'h00003000 ;
-localparam EXT_INTR_GW_CONFIG    = pt.PIC_BASE_ADDR + 32'h00004000 ;
-localparam EXT_INTR_GW_CLEAR     = pt.PIC_BASE_ADDR + 32'h00005000 ;
-
-
-localparam INTPEND_SIZE          = (pt.PIC_TOTAL_INT_PLUS1 < 32)  ? 32  :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 64)  ? 64  :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 128) ? 128 :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 256) ? 256 :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 512) ? 512 :  1024 ;
-
-localparam INT_GRPS              =   INTPEND_SIZE / 32 ;
-localparam INTPRIORITY_BITS      =  4 ;
-localparam ID_BITS               =  8 ;
-localparam int GW_CONFIG[pt.PIC_TOTAL_INT_PLUS1-1:0] = '{default:0} ;
-
-localparam INT_ENABLE_GRPS       =   (pt.PIC_TOTAL_INT_PLUS1 - 1)  / 4 ;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]           intenable_clk_enable ;
-logic [INT_ENABLE_GRPS:0]                    intenable_clk_enable_grp ;
-logic [INT_ENABLE_GRPS:0]                    gw_clk ;
-
-logic  addr_intpend_base_match;
-
-logic  raddr_config_pic_match ;
-logic  raddr_intenable_base_match;
-logic  raddr_intpriority_base_match;
-logic  raddr_config_gw_base_match ;
-
-logic  waddr_config_pic_match ;
-logic  waddr_intpriority_base_match;
-logic  waddr_intenable_base_match;
-logic  waddr_config_gw_base_match ;
-logic  addr_clear_gw_base_match ;
-
-logic  mexintpend_in;
-logic  mhwakeup_in ;
-logic  intpend_reg_read ;
-
-logic [31:0]                                 picm_rd_data_in, intpend_rd_out;
-logic                                        intenable_rd_out ;
-logic [INTPRIORITY_BITS-1:0]                 intpriority_rd_out;
-logic [1:0]                                  gw_config_rd_out;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpriority_reg;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpriority_reg_inv;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intpriority_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intpriority_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [1:0]                  gw_config_reg;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_config_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_config_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_clear_reg_we;
-
-logic [INTPEND_SIZE-1:0]                     intpend_reg_extended;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpend_w_prior_en;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [ID_BITS-1:0]          intpend_id;
-logic [INTPRIORITY_BITS-1:0]                 maxint;
-logic [INTPRIORITY_BITS-1:0]                 selected_int_priority;
-logic [INT_GRPS-1:0] [31:0]                  intpend_rd_part_out ;
-
-logic                                        config_reg;
-logic                                        intpriord;
-logic                                        config_reg_we ;
-logic                                        config_reg_re ;
-logic                                        config_reg_in ;
-logic                                        prithresh_reg_write , prithresh_reg_read;
-logic                                        intpriority_reg_read ;
-logic                                        intenable_reg_read   ;
-logic                                        gw_config_reg_read   ;
-logic                                        picm_wren_ff , picm_rden_ff ;
-logic [31:0]                                 picm_raddr_ff;
-logic [31:0]                                 picm_waddr_ff;
-logic [31:0]                                 picm_wr_data_ff;
-logic [3:0]                                  mask;
-logic                                        picm_mken_ff;
-logic [ID_BITS-1:0]                          claimid_in ;
-logic [INTPRIORITY_BITS-1:0]                 pl_in ;
-logic [INTPRIORITY_BITS-1:0]                 pl_in_q ;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        extintsrc_req_sync;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        extintsrc_req_gw;
-   logic                                                  picm_bypass_ff;
-
-// clkens
-   logic                                     pic_raddr_c1_clken;
-   logic                                     pic_waddr_c1_clken;
-   logic                                     pic_data_c1_clken;
-   logic                                     pic_pri_c1_clken;
-   logic                                     pic_int_c1_clken;
-   logic                                     gw_config_c1_clken;
-
-// clocks
-   logic                                     pic_raddr_c1_clk;
-   logic                                     pic_data_c1_clk;
-   logic                                     pic_pri_c1_clk;
-   logic                                     pic_int_c1_clk;
-   logic                                     gw_config_c1_clk;
-
-// ---- Clock gating section ------
-// c1 clock enables
-   assign pic_raddr_c1_clken  = picm_mken | picm_rden | clk_override;
-   assign pic_data_c1_clken   = picm_wren | clk_override;
-   assign pic_pri_c1_clken    = (waddr_intpriority_base_match & picm_wren_ff)  | (raddr_intpriority_base_match & picm_rden_ff) | clk_override;
-   assign pic_int_c1_clken    = (waddr_intenable_base_match   & picm_wren_ff)  | (raddr_intenable_base_match   & picm_rden_ff) | clk_override;
-   assign gw_config_c1_clken  = (waddr_config_gw_base_match   & picm_wren_ff)  | (raddr_config_gw_base_match   & picm_rden_ff) | clk_override;
-
-   // C1 - 1 clock pulse for data
-   rvoclkhdr pic_addr_c1_cgc   ( .en(pic_raddr_c1_clken),  .l1clk(pic_raddr_c1_clk), .* );
-   rvoclkhdr pic_data_c1_cgc   ( .en(pic_data_c1_clken),   .l1clk(pic_data_c1_clk), .* );
-   rvoclkhdr pic_pri_c1_cgc    ( .en(pic_pri_c1_clken),    .l1clk(pic_pri_c1_clk),  .* );
-   rvoclkhdr pic_int_c1_cgc    ( .en(pic_int_c1_clken),    .l1clk(pic_int_c1_clk),  .* );
-   rvoclkhdr gw_config_c1_cgc  ( .en(gw_config_c1_clken),  .l1clk(gw_config_c1_clk),  .* );
-
-// ------ end clock gating section ------------------------
-
-assign raddr_intenable_base_match   = (picm_raddr_ff[31:NUM_LEVELS+2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign raddr_intpriority_base_match = (picm_raddr_ff[31:NUM_LEVELS+2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign raddr_config_gw_base_match   = (picm_raddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS+2]) ;
-assign raddr_config_pic_match       = (picm_raddr_ff[31:0]            == EXT_INTR_PIC_CONFIG[31:0]) ;
-
-assign addr_intpend_base_match      = (picm_raddr_ff[31:6]            == INTPEND_BASE_ADDR[31:6]) ;
-
-assign waddr_config_pic_match       = (picm_waddr_ff[31:0]            == EXT_INTR_PIC_CONFIG[31:0]) ;
-assign addr_clear_gw_base_match     = (picm_waddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CLEAR[31:NUM_LEVELS+2]) ;
-assign waddr_intpriority_base_match = (picm_waddr_ff[31:NUM_LEVELS+2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign waddr_intenable_base_match   = (picm_waddr_ff[31:NUM_LEVELS+2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign waddr_config_gw_base_match   = (picm_waddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS+2]) ;
-
-   assign picm_bypass_ff = picm_rden_ff & picm_wren_ff & ( picm_raddr_ff[31:0] == picm_waddr_ff[31:0] );    // pic writes and reads to same address together
-
-
-rvdff #(32) picm_radd_flop  (.*, .din (picm_rdaddr),        .dout(picm_raddr_ff),         .clk(pic_raddr_c1_clk));
-rvdff #(32) picm_wadd_flop  (.*, .din (picm_wraddr),        .dout(picm_waddr_ff),         .clk(pic_data_c1_clk));
-rvdff  #(1) picm_wre_flop   (.*, .din (picm_wren),          .dout(picm_wren_ff),          .clk(free_clk));
-rvdff  #(1) picm_rde_flop   (.*, .din (picm_rden),          .dout(picm_rden_ff),          .clk(free_clk));
-rvdff  #(1) picm_mke_flop   (.*, .din (picm_mken),          .dout(picm_mken_ff),          .clk(free_clk));
-rvdff #(32) picm_dat_flop   (.*, .din (picm_wr_data[31:0]), .dout(picm_wr_data_ff[31:0]), .clk(pic_data_c1_clk));
-
-
-genvar p ;
-for (p=0; p<=INT_ENABLE_GRPS ; p++) begin  : IO_CLK_GRP
-   if (p==INT_ENABLE_GRPS) begin : LAST_GRP
-       assign intenable_clk_enable_grp[p] = |intenable_clk_enable[pt.PIC_TOTAL_INT_PLUS1-1 : p*4] | io_clk_override;
-       rvoclkhdr intenable_c1_cgc   ( .en(intenable_clk_enable_grp[p]),  .l1clk(gw_clk[p]), .* );
-   end else begin :  CLK_GRPS
-       assign intenable_clk_enable_grp[p] = |intenable_clk_enable[p*4+3 : p*4] | io_clk_override;
-       rvoclkhdr intenable_c1_cgc   ( .en(intenable_clk_enable_grp[p]),  .l1clk(gw_clk[p]), .* );
-   end
-end
-
-
-
-genvar i ;
-for (i=0; i<pt.PIC_TOTAL_INT_PLUS1 ; i++) begin  : SETREG
-
- if (i > 0 ) begin : NON_ZERO_INT
-     assign intpriority_reg_we[i] =  waddr_intpriority_base_match & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign intpriority_reg_re[i] =  raddr_intpriority_base_match & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign intenable_reg_we[i]   =  waddr_intenable_base_match   & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign intenable_reg_re[i]   =  raddr_intenable_base_match   & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign gw_config_reg_we[i]   =  waddr_config_gw_base_match   & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign gw_config_reg_re[i]   =  raddr_config_gw_base_match   & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign gw_clear_reg_we[i]    =  addr_clear_gw_base_match     & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff ;
-
-     rvdffs #(INTPRIORITY_BITS) intpriority_ff  (.*, .en( intpriority_reg_we[i]), .din (picm_wr_data_ff[INTPRIORITY_BITS-1:0]), .dout(intpriority_reg[i]), .clk(pic_pri_c1_clk));
-     rvdffs #(1)                 intenable_ff   (.*, .en( intenable_reg_we[i]),   .din (picm_wr_data_ff[0]),                    .dout(intenable_reg[i]),   .clk(pic_int_c1_clk));
-
-     assign intenable_clk_enable[i]  =  gw_config_reg[i][1] | intenable_reg_we[i] | intenable_reg[i] | gw_clear_reg_we[i] ;
-
-     rvsyncss_fpga  #(1) sync_inst
-     (
-      .gw_clk      (gw_clk[i/4]),
-      .rawclk      (clk),
-      .clken       (intenable_clk_enable_grp[i/4]),
-      .dout        (extintsrc_req_sync[i]),
-      .din         (extintsrc_req[i]),
-      .*) ;
-
-
-
-//     if (GW_CONFIG[i]) begin
-
-        rvdffs #(2)                 gw_config_ff   (.*, .en( gw_config_reg_we[i]),   .din (picm_wr_data_ff[1:0]),                  .dout(gw_config_reg[i]),   .clk(gw_config_c1_clk));
-
-        eb1_configurable_gw config_gw_inst(.*,
-                                            .gw_clk(gw_clk[i/4]),
-                                            .rawclk(clk),
-                                            .clken (intenable_clk_enable_grp[i/4]),
-                                            .extintsrc_req_sync(extintsrc_req_sync[i]) ,
-                                            .meigwctrl_polarity(gw_config_reg[i][0]) ,
-                                            .meigwctrl_type(gw_config_reg[i][1]) ,
-                                            .meigwclr(gw_clear_reg_we[i]) ,
-                                            .extintsrc_req_config(extintsrc_req_gw[i])
-                                            );
-
- end else begin : INT_ZERO
-     assign intpriority_reg_we[i] =  1'b0 ;
-     assign intpriority_reg_re[i] =  1'b0 ;
-     assign intenable_reg_we[i]   =  1'b0 ;
-     assign intenable_reg_re[i]   =  1'b0 ;
-
-     assign gw_config_reg_we[i]   =  1'b0 ;
-     assign gw_config_reg_re[i]   =  1'b0 ;
-     assign gw_clear_reg_we[i]    =  1'b0 ;
-
-     assign gw_config_reg[i]    = '0 ;
-
-     assign intpriority_reg[i] = {INTPRIORITY_BITS{1'b0}} ;
-     assign intenable_reg[i]   = 1'b0 ;
-     assign extintsrc_req_gw[i] = 1'b0 ;
-     assign extintsrc_req_sync[i]    = 1'b0 ;
-     assign intenable_clk_enable[i] = 1'b0;
- end
-
-
-    assign intpriority_reg_inv[i] =  intpriord ? ~intpriority_reg[i] : intpriority_reg[i] ;
-
-    assign intpend_w_prior_en[i]  =  {INTPRIORITY_BITS{(extintsrc_req_gw[i] & intenable_reg[i])}} & intpriority_reg_inv[i] ;
-    assign intpend_id[i]          =  i ;
-end
-
-
-        assign pl_in[INTPRIORITY_BITS-1:0]                  =      selected_int_priority[INTPRIORITY_BITS-1:0] ;
-
-
- genvar l, m , j, k;
-
-if (pt.PIC_2CYCLE == 1) begin : genblock
-        logic [NUM_LEVELS/2:0] [pt.PIC_TOTAL_INT_PLUS1+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en;
-        logic [NUM_LEVELS/2:0] [pt.PIC_TOTAL_INT_PLUS1+2:0] [ID_BITS-1:0]          level_intpend_id;
-        logic [NUM_LEVELS:NUM_LEVELS/2] [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] [INTPRIORITY_BITS-1:0] levelx_intpend_w_prior_en;
-        logic [NUM_LEVELS:NUM_LEVELS/2] [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] [ID_BITS-1:0]          levelx_intpend_id;
-
-        assign level_intpend_w_prior_en[0][pt.PIC_TOTAL_INT_PLUS1+2:0] = {4'b0,4'b0,4'b0,intpend_w_prior_en[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-        assign level_intpend_id[0][pt.PIC_TOTAL_INT_PLUS1+2:0]         = {8'b0,8'b0,8'b0,intpend_id[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-        logic [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0] [INTPRIORITY_BITS-1:0] l2_intpend_w_prior_en_ff;
-        logic [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0] [ID_BITS-1:0]          l2_intpend_id_ff;
-
-        assign levelx_intpend_w_prior_en[NUM_LEVELS/2][(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] = {{1*INTPRIORITY_BITS{1'b0}},l2_intpend_w_prior_en_ff[(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0]} ;
-        assign levelx_intpend_id[NUM_LEVELS/2][(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0]         = {{1*ID_BITS{1'b1}},l2_intpend_id_ff[(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0]} ;
-///  Do the prioritization of the interrupts here  ////////////
- for (l=0; l<NUM_LEVELS/2 ; l++) begin : TOP_LEVEL
-    for (m=0; m<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1)) ; m++) begin : COMPARE
-       if ( m == (pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1))) begin
-            assign level_intpend_w_prior_en[l+1][m+1] = '0 ;
-            assign level_intpend_id[l+1][m+1]         = '0 ;
-       end
-       eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l1 (
-                      .a_id(level_intpend_id[l][2*m]),
-                      .a_priority(level_intpend_w_prior_en[l][2*m]),
-                      .b_id(level_intpend_id[l][2*m+1]),
-                      .b_priority(level_intpend_w_prior_en[l][2*m+1]),
-                      .out_id(level_intpend_id[l+1][m]),
-                      .out_priority(level_intpend_w_prior_en[l+1][m])) ;
-
-    end
- end
-
-        for (i=0; i<=pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2) ; i++) begin : MIDDLE_FLOPS
-          rvdff #(INTPRIORITY_BITS) leveb1_intpend_prior_reg  (.*, .din (level_intpend_w_prior_en[NUM_LEVELS/2][i]), .dout(l2_intpend_w_prior_en_ff[i]),  .clk(free_clk));
-          rvdff #(ID_BITS)          leveb1_intpend_id_reg     (.*, .din (level_intpend_id[NUM_LEVELS/2][i]),         .dout(l2_intpend_id_ff[i]),          .clk(free_clk));
-        end
-
- for (j=NUM_LEVELS/2; j<NUM_LEVELS ; j++) begin : BOT_LEVELS
-    for (k=0; k<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(j+1)) ; k++) begin : COMPARE
-       if ( k == (pt.PIC_TOTAL_INT_PLUS1)/(2**(j+1))) begin
-            assign levelx_intpend_w_prior_en[j+1][k+1] = '0 ;
-            assign levelx_intpend_id[j+1][k+1]         = '0 ;
-       end
-            eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                        .INTPRIORITY_BITS(INTPRIORITY_BITS))
-                 cmp_l1 (
-                        .a_id(levelx_intpend_id[j][2*k]),
-                        .a_priority(levelx_intpend_w_prior_en[j][2*k]),
-                        .b_id(levelx_intpend_id[j][2*k+1]),
-                        .b_priority(levelx_intpend_w_prior_en[j][2*k+1]),
-                        .out_id(levelx_intpend_id[j+1][k]),
-                        .out_priority(levelx_intpend_w_prior_en[j+1][k])) ;
-    end
-  end
-        assign claimid_in[ID_BITS-1:0]                      =      levelx_intpend_id[NUM_LEVELS][0] ;   // This is the last level output
-        assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      levelx_intpend_w_prior_en[NUM_LEVELS][0] ;
-end
-else begin : genblock
-
-        logic [NUM_LEVELS:0] [pt.PIC_TOTAL_INT_PLUS1+1:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en;
-        logic [NUM_LEVELS:0] [pt.PIC_TOTAL_INT_PLUS1+1:0] [ID_BITS-1:0]          level_intpend_id;
-
-        assign level_intpend_w_prior_en[0][pt.PIC_TOTAL_INT_PLUS1+1:0] = {{2*INTPRIORITY_BITS{1'b0}},intpend_w_prior_en[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-        assign level_intpend_id[0][pt.PIC_TOTAL_INT_PLUS1+1:0] = {{2*ID_BITS{1'b1}},intpend_id[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-///  Do the prioritization of the interrupts here  ////////////
-// genvar l, m , j, k;  already declared outside ifdef
- for (l=0; l<NUM_LEVELS ; l++) begin : LEVEL
-    for (m=0; m<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1)) ; m++) begin : COMPARE
-       if ( m == (pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1))) begin
-            assign level_intpend_w_prior_en[l+1][m+1] = '0 ;
-            assign level_intpend_id[l+1][m+1]         = '0 ;
-       end
-       eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l1 (
-                      .a_id(level_intpend_id[l][2*m]),
-                      .a_priority(level_intpend_w_prior_en[l][2*m]),
-                      .b_id(level_intpend_id[l][2*m+1]),
-                      .b_priority(level_intpend_w_prior_en[l][2*m+1]),
-                      .out_id(level_intpend_id[l+1][m]),
-                      .out_priority(level_intpend_w_prior_en[l+1][m])) ;
-
-    end
- end
-        assign claimid_in[ID_BITS-1:0]                      =      level_intpend_id[NUM_LEVELS][0] ;   // This is the last level output
-        assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      level_intpend_w_prior_en[NUM_LEVELS][0] ;
-
-end
-
-
-
-///////////////////////////////////////////////////////////////////////
-// Config Reg`
-///////////////////////////////////////////////////////////////////////
-assign config_reg_we               =  waddr_config_pic_match & picm_wren_ff;
-assign config_reg_re               =  raddr_config_pic_match & picm_rden_ff;
-
-assign config_reg_in  =  picm_wr_data_ff[0] ;   //
-rvdffs #(1) config_reg_ff  (.*, .clk(free_clk), .en(config_reg_we), .din (config_reg_in), .dout(config_reg));
-
-assign intpriord  = config_reg ;
-
-
-
-//////////////////////////////////////////////////////////////////////////
-// Send the interrupt to the core if it is above the thresh-hold
-//////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/// ClaimId  Reg and Corresponding PL
-///////////////////////////////////////////////////////////
-//
-assign pl_in_q[INTPRIORITY_BITS-1:0] = intpriord ? ~pl_in : pl_in ;
-rvdff #(ID_BITS)          claimid_ff  (.*,  .din (claimid_in[ID_BITS-1:00]),     .dout(claimid[ID_BITS-1:00]),    .clk(free_clk));
-rvdff  #(INTPRIORITY_BITS) pl_ff      (.*, .din (pl_in_q[INTPRIORITY_BITS-1:0]), .dout(pl[INTPRIORITY_BITS-1:0]), .clk(free_clk));
-
-logic [INTPRIORITY_BITS-1:0] meipt_inv , meicurpl_inv ;
-assign meipt_inv[INTPRIORITY_BITS-1:0]    = intpriord ? ~meipt[INTPRIORITY_BITS-1:0]    : meipt[INTPRIORITY_BITS-1:0] ;
-assign meicurpl_inv[INTPRIORITY_BITS-1:0] = intpriord ? ~meicurpl[INTPRIORITY_BITS-1:0] : meicurpl[INTPRIORITY_BITS-1:0] ;
-assign mexintpend_in = (( selected_int_priority[INTPRIORITY_BITS-1:0] > meipt_inv[INTPRIORITY_BITS-1:0]) &
-                        ( selected_int_priority[INTPRIORITY_BITS-1:0] > meicurpl_inv[INTPRIORITY_BITS-1:0]) );
-rvdff #(1) mexintpend_ff  (.*, .clk(free_clk), .din (mexintpend_in), .dout(mexintpend));
-
-assign maxint[INTPRIORITY_BITS-1:0]      =  intpriord ? 0 : 15 ;
-assign mhwakeup_in = ( pl_in_q[INTPRIORITY_BITS-1:0] == maxint) ;
-rvdff #(1) wake_up_ff  (.*, .clk(free_clk), .din (mhwakeup_in), .dout(mhwakeup));
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////
-//  Reads of register.
-//  1- intpending
-//////////////////////////////////////////////////////////////////////////
-
-assign intpend_reg_read     =  addr_intpend_base_match      & picm_rden_ff ;
-assign intpriority_reg_read =  raddr_intpriority_base_match & picm_rden_ff;
-assign intenable_reg_read   =  raddr_intenable_base_match   & picm_rden_ff;
-assign gw_config_reg_read   =  raddr_config_gw_base_match   & picm_rden_ff;
-
-assign intpend_reg_extended[INTPEND_SIZE-1:0]  = {{INTPEND_SIZE-pt.PIC_TOTAL_INT_PLUS1{1'b0}},extintsrc_req_gw[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-   for (i=0; i<(INT_GRPS); i++) begin
-            assign intpend_rd_part_out[i] =  (({32{intpend_reg_read & picm_raddr_ff[5:2] == i}}) & intpend_reg_extended[((32*i)+31):(32*i)]) ;
-   end
-
-   always_comb begin : INTPEND_RD
-         intpend_rd_out =  '0 ;
-         for (int i=0; i<INT_GRPS; i++) begin
-               intpend_rd_out |=  intpend_rd_part_out[i] ;
-         end
-   end
-
-   always_comb begin : INTEN_RD
-         intenable_rd_out =  '0 ;
-         intpriority_rd_out =  '0 ;
-         gw_config_rd_out =  '0 ;
-         for (int i=0; i<pt.PIC_TOTAL_INT_PLUS1; i++) begin
-              if (intenable_reg_re[i]) begin
-               intenable_rd_out    =  intenable_reg[i]  ;
-              end
-              if (intpriority_reg_re[i]) begin
-               intpriority_rd_out  =  intpriority_reg[i] ;
-              end
-              if (gw_config_reg_re[i]) begin
-               gw_config_rd_out  =  gw_config_reg[i] ;
-              end
-         end
-   end
-
-
- assign picm_rd_data_in[31:0] = ({32{intpend_reg_read      }} &   intpend_rd_out                                                    ) |
-                                ({32{intpriority_reg_read  }} &  {{32-INTPRIORITY_BITS{1'b0}}, intpriority_rd_out                 } ) |
-                                ({32{intenable_reg_read    }} &  {31'b0 , intenable_rd_out                                        } ) |
-                                ({32{gw_config_reg_read    }} &  {30'b0 , gw_config_rd_out                                        } ) |
-                                ({32{config_reg_re         }} &  {31'b0 , config_reg                                              } ) |
-                                ({32{picm_mken_ff & mask[3]}} &  {30'b0 , 2'b11                                                   } ) |
-                                ({32{picm_mken_ff & mask[2]}} &  {31'b0 , 1'b1                                                    } ) |
-                                ({32{picm_mken_ff & mask[1]}} &  {28'b0 , 4'b1111                                                 } ) |
-                                ({32{picm_mken_ff & mask[0]}} &   32'b0                                                             ) ;
-
-
-assign picm_rd_data[31:0] = picm_bypass_ff ? picm_wr_data_ff[31:0] : picm_rd_data_in[31:0] ;
-
-logic [14:0] address;
-
-assign address[14:0] = picm_raddr_ff[14:0];
-
-// mask[3:0] = { 4'b1000 - 30b mask,4'b0100 - 31b mask, 4'b0010 - 28b mask, 4'b0001 - 32b mask }
-always_comb begin
-  case (address[14:0])
-    15'b011000000000000 : mask[3:0] = 4'b0100;
-    15'b100000000000100 : mask[3:0] = 4'b1000;
-    15'b100000000001000 : mask[3:0] = 4'b1000;
-    15'b100000000001100 : mask[3:0] = 4'b1000;
-    15'b100000000010000 : mask[3:0] = 4'b1000;
-    15'b100000000010100 : mask[3:0] = 4'b1000;
-    15'b100000000011000 : mask[3:0] = 4'b1000;
-    15'b100000000011100 : mask[3:0] = 4'b1000;
-    15'b100000000100000 : mask[3:0] = 4'b1000;
-    15'b100000000100100 : mask[3:0] = 4'b1000;
-    15'b100000000101000 : mask[3:0] = 4'b1000;
-    15'b100000000101100 : mask[3:0] = 4'b1000;
-    15'b100000000110000 : mask[3:0] = 4'b1000;
-    15'b100000000110100 : mask[3:0] = 4'b1000;
-    15'b100000000111000 : mask[3:0] = 4'b1000;
-    15'b100000000111100 : mask[3:0] = 4'b1000;
-    15'b100000001000000 : mask[3:0] = 4'b1000;
-    15'b100000001000100 : mask[3:0] = 4'b1000;
-    15'b100000001001000 : mask[3:0] = 4'b1000;
-    15'b100000001001100 : mask[3:0] = 4'b1000;
-    15'b100000001010000 : mask[3:0] = 4'b1000;
-    15'b100000001010100 : mask[3:0] = 4'b1000;
-    15'b100000001011000 : mask[3:0] = 4'b1000;
-    15'b100000001011100 : mask[3:0] = 4'b1000;
-    15'b100000001100000 : mask[3:0] = 4'b1000;
-    15'b100000001100100 : mask[3:0] = 4'b1000;
-    15'b100000001101000 : mask[3:0] = 4'b1000;
-    15'b100000001101100 : mask[3:0] = 4'b1000;
-    15'b100000001110000 : mask[3:0] = 4'b1000;
-    15'b100000001110100 : mask[3:0] = 4'b1000;
-    15'b100000001111000 : mask[3:0] = 4'b1000;
-    15'b100000001111100 : mask[3:0] = 4'b1000;
-    15'b010000000000100 : mask[3:0] = 4'b0100;
-    15'b010000000001000 : mask[3:0] = 4'b0100;
-    15'b010000000001100 : mask[3:0] = 4'b0100;
-    15'b010000000010000 : mask[3:0] = 4'b0100;
-    15'b010000000010100 : mask[3:0] = 4'b0100;
-    15'b010000000011000 : mask[3:0] = 4'b0100;
-    15'b010000000011100 : mask[3:0] = 4'b0100;
-    15'b010000000100000 : mask[3:0] = 4'b0100;
-    15'b010000000100100 : mask[3:0] = 4'b0100;
-    15'b010000000101000 : mask[3:0] = 4'b0100;
-    15'b010000000101100 : mask[3:0] = 4'b0100;
-    15'b010000000110000 : mask[3:0] = 4'b0100;
-    15'b010000000110100 : mask[3:0] = 4'b0100;
-    15'b010000000111000 : mask[3:0] = 4'b0100;
-    15'b010000000111100 : mask[3:0] = 4'b0100;
-    15'b010000001000000 : mask[3:0] = 4'b0100;
-    15'b010000001000100 : mask[3:0] = 4'b0100;
-    15'b010000001001000 : mask[3:0] = 4'b0100;
-    15'b010000001001100 : mask[3:0] = 4'b0100;
-    15'b010000001010000 : mask[3:0] = 4'b0100;
-    15'b010000001010100 : mask[3:0] = 4'b0100;
-    15'b010000001011000 : mask[3:0] = 4'b0100;
-    15'b010000001011100 : mask[3:0] = 4'b0100;
-    15'b010000001100000 : mask[3:0] = 4'b0100;
-    15'b010000001100100 : mask[3:0] = 4'b0100;
-    15'b010000001101000 : mask[3:0] = 4'b0100;
-    15'b010000001101100 : mask[3:0] = 4'b0100;
-    15'b010000001110000 : mask[3:0] = 4'b0100;
-    15'b010000001110100 : mask[3:0] = 4'b0100;
-    15'b010000001111000 : mask[3:0] = 4'b0100;
-    15'b010000001111100 : mask[3:0] = 4'b0100;
-    15'b000000000000100 : mask[3:0] = 4'b0010;
-    15'b000000000001000 : mask[3:0] = 4'b0010;
-    15'b000000000001100 : mask[3:0] = 4'b0010;
-    15'b000000000010000 : mask[3:0] = 4'b0010;
-    15'b000000000010100 : mask[3:0] = 4'b0010;
-    15'b000000000011000 : mask[3:0] = 4'b0010;
-    15'b000000000011100 : mask[3:0] = 4'b0010;
-    15'b000000000100000 : mask[3:0] = 4'b0010;
-    15'b000000000100100 : mask[3:0] = 4'b0010;
-    15'b000000000101000 : mask[3:0] = 4'b0010;
-    15'b000000000101100 : mask[3:0] = 4'b0010;
-    15'b000000000110000 : mask[3:0] = 4'b0010;
-    15'b000000000110100 : mask[3:0] = 4'b0010;
-    15'b000000000111000 : mask[3:0] = 4'b0010;
-    15'b000000000111100 : mask[3:0] = 4'b0010;
-    15'b000000001000000 : mask[3:0] = 4'b0010;
-    15'b000000001000100 : mask[3:0] = 4'b0010;
-    15'b000000001001000 : mask[3:0] = 4'b0010;
-    15'b000000001001100 : mask[3:0] = 4'b0010;
-    15'b000000001010000 : mask[3:0] = 4'b0010;
-    15'b000000001010100 : mask[3:0] = 4'b0010;
-    15'b000000001011000 : mask[3:0] = 4'b0010;
-    15'b000000001011100 : mask[3:0] = 4'b0010;
-    15'b000000001100000 : mask[3:0] = 4'b0010;
-    15'b000000001100100 : mask[3:0] = 4'b0010;
-    15'b000000001101000 : mask[3:0] = 4'b0010;
-    15'b000000001101100 : mask[3:0] = 4'b0010;
-    15'b000000001110000 : mask[3:0] = 4'b0010;
-    15'b000000001110100 : mask[3:0] = 4'b0010;
-    15'b000000001111000 : mask[3:0] = 4'b0010;
-    15'b000000001111100 : mask[3:0] = 4'b0010;
-    default           : mask[3:0] = 4'b0001;
-  endcase
-end
-
-endmodule
-
-
-module eb1_cmp_and_mux #(parameter ID_BITS=8,
-                               INTPRIORITY_BITS = 4)
-                    (
-                        input  logic [ID_BITS-1:0]       a_id,
-                        input  logic [INTPRIORITY_BITS-1:0] a_priority,
-
-                        input  logic [ID_BITS-1:0]       b_id,
-                        input  logic [INTPRIORITY_BITS-1:0] b_priority,
-
-                        output logic [ID_BITS-1:0]       out_id,
-                        output logic [INTPRIORITY_BITS-1:0] out_priority
-
-                    );
-
-logic   a_is_lt_b ;
-
-assign  a_is_lt_b  = ( a_priority[INTPRIORITY_BITS-1:0] < b_priority[INTPRIORITY_BITS-1:0] ) ;
-
-assign  out_id[ID_BITS-1:0]                = a_is_lt_b ? b_id[ID_BITS-1:0] :
-                                                         a_id[ID_BITS-1:0] ;
-assign  out_priority[INTPRIORITY_BITS-1:0] = a_is_lt_b ? b_priority[INTPRIORITY_BITS-1:0] :
-                                                         a_priority[INTPRIORITY_BITS-1:0] ;
-endmodule // cmp_and_mux
-
-
-module eb1_configurable_gw (
-                             input logic gw_clk,
-                             input logic rawclk,
-                             input logic clken,
-                             input logic rst_l,
-                             input logic extintsrc_req_sync ,
-                             input logic meigwctrl_polarity ,
-                             input logic meigwctrl_type ,
-                             input logic meigwclr ,
-
-                             output logic extintsrc_req_config
-                            );
-
-
-  logic  gw_int_pending_in , gw_int_pending ;
-
-  assign gw_int_pending_in =  (extintsrc_req_sync ^ meigwctrl_polarity) | (gw_int_pending & ~meigwclr) ;
-  rvdff_fpga #(1) int_pend_ff        (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (gw_int_pending_in),     .dout(gw_int_pending));
-
-
-  assign extintsrc_req_config =  meigwctrl_type ? ((extintsrc_req_sync ^  meigwctrl_polarity) | gw_int_pending) : (extintsrc_req_sync ^  meigwctrl_polarity) ;
-
-endmodule // configurable_gw
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AHB to AXI4 Bridge
-// Comments:
-//
-//********************************************************************************
-module ahb_to_axi4
-import eb1_pkg::*;
-#(
-   TAG = 1,
-   parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-//   ,TAG  = 1)
-(
-   input                   clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-
-   // AXI signals
-   // AXI Write Channels
-   output logic            axi_awvalid,
-   input  logic            axi_awready,
-   output logic [TAG-1:0]  axi_awid,
-   output logic [31:0]     axi_awaddr,
-   output logic [2:0]      axi_awsize,
-   output logic [2:0]      axi_awprot,
-   output logic [7:0]      axi_awlen,
-   output logic [1:0]      axi_awburst,
-
-   output logic            axi_wvalid,
-   input  logic            axi_wready,
-   output logic [63:0]     axi_wdata,
-   output logic [7:0]      axi_wstrb,
-   output logic            axi_wlast,
-
-   input  logic            axi_bvalid,
-   output logic            axi_bready,
-   input  logic [1:0]      axi_bresp,
-   input  logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   output logic            axi_arvalid,
-   input  logic            axi_arready,
-   output logic [TAG-1:0]  axi_arid,
-   output logic [31:0]     axi_araddr,
-   output logic [2:0]      axi_arsize,
-   output logic [2:0]      axi_arprot,
-   output logic [7:0]      axi_arlen,
-   output logic [1:0]      axi_arburst,
-
-   input  logic            axi_rvalid,
-   output logic            axi_rready,
-   input  logic [TAG-1:0]  axi_rid,
-   input  logic [63:0]     axi_rdata,
-   input  logic [1:0]      axi_rresp,
-
-   // AHB-Lite signals
-   input logic [31:0]      ahb_haddr,     // ahb bus address
-   input logic [2:0]       ahb_hburst,    // tied to 0
-   input logic             ahb_hmastlock, // tied to 0
-   input logic [3:0]       ahb_hprot,     // tied to 4'b0011
-   input logic [2:0]       ahb_hsize,     // size of bus transaction (possible values 0,1,2,3)
-   input logic [1:0]       ahb_htrans,    // Transaction type (possible values 0,2 only right now)
-   input logic             ahb_hwrite,    // ahb bus write
-   input logic [63:0]      ahb_hwdata,    // ahb bus write data
-   input logic             ahb_hsel,      // this slave was selected
-   input logic             ahb_hreadyin,  // previous hready was accepted or not
-
-   output logic [63:0]      ahb_hrdata,      // ahb bus read data
-   output logic             ahb_hreadyout,   // slave ready to accept transaction
-   output logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   logic [7:0]       master_wstrb;
-
- typedef enum logic [1:0] {   IDLE   = 2'b00,    // Nothing in the buffer. No commands yet recieved
-                              WR     = 2'b01,    // Write Command recieved
-                              RD     = 2'b10,    // Read Command recieved
-                              PEND   = 2'b11     // Waiting on Read Data from core
-                            } state_t;
-   state_t      buf_state, buf_nxtstate;
-   logic        buf_state_en;
-
-   // Buffer signals (one entry buffer)
-   logic                    buf_read_error_in, buf_read_error;
-   logic [63:0]             buf_rdata;
-
-   logic                    ahb_hready;
-   logic                    ahb_hready_q;
-   logic [1:0]              ahb_htrans_in, ahb_htrans_q;
-   logic [2:0]              ahb_hsize_q;
-   logic                    ahb_hwrite_q;
-   logic [31:0]             ahb_haddr_q;
-   logic [63:0]             ahb_hwdata_q;
-   logic                    ahb_hresp_q;
-
-    //Miscellaneous signals
-   logic                    ahb_addr_in_dccm, ahb_addr_in_iccm, ahb_addr_in_pic;
-   logic                    ahb_addr_in_dccm_region_nc, ahb_addr_in_iccm_region_nc, ahb_addr_in_pic_region_nc;
-   // signals needed for the read data coming back from the core and to block any further commands as AHB is a blocking bus
-   logic                    buf_rdata_en;
-
-   logic                    ahb_addr_clk_en, buf_rdata_clk_en;
-   logic                    bus_clk, ahb_addr_clk, buf_rdata_clk;
-   // Command buffer is the holding station where we convert to AXI and send to core
-   logic                    cmdbuf_wr_en, cmdbuf_rst;
-   logic                    cmdbuf_full;
-   logic                    cmdbuf_vld, cmdbuf_write;
-   logic [1:0]              cmdbuf_size;
-   logic [7:0]              cmdbuf_wstrb;
-   logic [31:0]             cmdbuf_addr;
-   logic [63:0]             cmdbuf_wdata;
-
-// FSM to control the bus states and when to block the hready and load the command buffer
-   always_comb begin
-      buf_nxtstate      = IDLE;
-      buf_state_en      = 1'b0;
-      buf_rdata_en      = 1'b0;              // signal to load the buffer when the core sends read data back
-      buf_read_error_in = 1'b0;              // signal indicating that an error came back with the read from the core
-      cmdbuf_wr_en      = 1'b0;              // all clear from the gasket to load the buffer with the command for reads, command/dat for writes
-      case (buf_state)
-         IDLE: begin  // No commands recieved
-                  buf_nxtstate      = ahb_hwrite ? WR : RD;
-                  buf_state_en      = ahb_hready & ahb_htrans[1] & ahb_hsel;                 // only transition on a valid hrtans
-          end
-         WR: begin // Write command recieved last cycle
-                  buf_nxtstate      = (ahb_hresp | (ahb_htrans[1:0] == 2'b0) | ~ahb_hsel) ? IDLE : ahb_hwrite  ? WR : RD;
-                  buf_state_en      = (~cmdbuf_full | ahb_hresp) ;
-                  cmdbuf_wr_en      = ~cmdbuf_full & ~(ahb_hresp | ((ahb_htrans[1:0] == 2'b01) & ahb_hsel));   // Dont send command to the buffer in case of an error or when the master is not ready with the data now.
-         end
-         RD: begin // Read command recieved last cycle.
-                 buf_nxtstate      = ahb_hresp ? IDLE :PEND;                                       // If error go to idle, else wait for read data
-                 buf_state_en      = (~cmdbuf_full | ahb_hresp);                                   // only when command can go, or if its an error
-                 cmdbuf_wr_en      = ~ahb_hresp & ~cmdbuf_full;                                    // send command only when no error
-         end
-         PEND: begin // Read Command has been sent. Waiting on Data.
-                 buf_nxtstate      = IDLE;                                                          // go back for next command and present data next cycle
-                 buf_state_en      = axi_rvalid & ~cmdbuf_write;                                    // read data is back
-                 buf_rdata_en      = buf_state_en;                                                  // buffer the read data coming back from core
-                 buf_read_error_in = buf_state_en & |axi_rresp[1:0];                                // buffer error flag if return has Error ( ECC )
-         end
-     endcase
-   end // always_comb begin
-
-    rvdffs_fpga #($bits(state_t)) state_reg (.*, .din(buf_nxtstate), .dout({buf_state}), .en(buf_state_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk));
-
-   assign master_wstrb[7:0]   = ({8{ahb_hsize_q[2:0] == 3'b0}}  & (8'b1    << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b1}}  & (8'b11   << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b10}} & (8'b1111 << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b11}} & 8'b1111_1111);
-
-   // AHB signals
-   assign ahb_hreadyout       = ahb_hresp ? (ahb_hresp_q & ~ahb_hready_q) :
-                                         ((~cmdbuf_full | (buf_state == IDLE)) & ~(buf_state == RD | buf_state == PEND)  & ~buf_read_error);
-
-   assign ahb_hready          = ahb_hreadyout & ahb_hreadyin;
-   assign ahb_htrans_in[1:0]  = {2{ahb_hsel}} & ahb_htrans[1:0];
-   assign ahb_hrdata[63:0]    = buf_rdata[63:0];
-   assign ahb_hresp        = ((ahb_htrans_q[1:0] != 2'b0) & (buf_state != IDLE)  &
-
-                             ((~(ahb_addr_in_dccm | ahb_addr_in_iccm)) |                                                                                   // request not for ICCM or DCCM
-                             ((ahb_addr_in_iccm | (ahb_addr_in_dccm &  ahb_hwrite_q)) & ~((ahb_hsize_q[1:0] == 2'b10) | (ahb_hsize_q[1:0] == 2'b11))) |    // ICCM Rd/Wr OR DCCM Wr not the right size
-                             ((ahb_hsize_q[2:0] == 3'h1) & ahb_haddr_q[0])   |                                                                             // HW size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h2) & (|ahb_haddr_q[1:0])) |                                                                          // W size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h3) & (|ahb_haddr_q[2:0])))) |                                                                        // DW size but unaligned
-                             buf_read_error |                                                                                                              // Read ECC error
-                             (ahb_hresp_q & ~ahb_hready_q);
-
-   // Buffer signals - needed for the read data and ECC error response
-   rvdff_fpga  #(.WIDTH(64)) buf_rdata_ff     (.din(axi_rdata[63:0]),   .dout(buf_rdata[63:0]), .clk(buf_rdata_clk), .clken(buf_rdata_clk_en), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))  buf_read_error_ff(.din(buf_read_error_in), .dout(buf_read_error),  .clk(bus_clk),       .clken(bus_clk_en),       .rawclk(clk), .*);          // buf_read_error will be high only one cycle
-
-   // All the Master signals are captured before presenting it to the command buffer. We check for Hresp before sending it to the cmd buffer.
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),          .dout(ahb_hresp_q),       .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),         .dout(ahb_hready_q),      .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans_in[1:0]), .dout(ahb_htrans_q[1:0]), .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(3))  hsize_ff  (.din(ahb_hsize[2:0]),     .dout(ahb_hsize_q[2:0]),  .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),         .dout(ahb_hwrite_q),      .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(32)) haddr_ff  (.din(ahb_haddr[31:0]),    .dout(ahb_haddr_q[31:0]), .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-
-   // Address check  dccm
-   rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                  .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_dccm),
-      .in_region(ahb_addr_in_dccm_region_nc)
-   );
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE == 1) begin: GenICCM
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(ahb_haddr_q[31:0]),
-         .in_range(ahb_addr_in_iccm),
-         .in_region(ahb_addr_in_iccm_region_nc)
-      );
-   end else begin: GenNoICCM
-      assign ahb_addr_in_iccm = '0;
-      assign ahb_addr_in_iccm_region_nc = '0;
-   end
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_pic),
-      .in_region(ahb_addr_in_pic_region_nc)
-   );
-
-   // Command Buffer - Holding for the commands to be sent for the AXI. It will be converted to the AXI signals.
-   assign cmdbuf_rst         = (((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)) & ~cmdbuf_wr_en) | (ahb_hresp & ~cmdbuf_write);
-   assign cmdbuf_full        = (cmdbuf_vld & ~((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)));
-
-   rvdffsc_fpga #(.WIDTH(1))  cmdbuf_vldff      (.din(1'b1),              .dout(cmdbuf_vld),         .en(cmdbuf_wr_en), .clear(cmdbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(1))  cmdbuf_writeff    (.din(ahb_hwrite_q),      .dout(cmdbuf_write),       .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(2))  cmdbuf_sizeff     (.din(ahb_hsize_q[1:0]),  .dout(cmdbuf_size[1:0]),   .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))  cmdbuf_wstrbff    (.din(master_wstrb[7:0]), .dout(cmdbuf_wstrb[7:0]),  .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32)) cmdbuf_addrff     (.din(ahb_haddr_q[31:0]), .dout(cmdbuf_addr[31:0]),  .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffe       #(.WIDTH(64)) cmdbuf_wdataff    (.din(ahb_hwdata[63:0]),  .dout(cmdbuf_wdata[63:0]), .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-
-   // AXI Write Command Channel
-   assign axi_awvalid           = cmdbuf_vld & cmdbuf_write;
-   assign axi_awid[TAG-1:0]     = '0;
-   assign axi_awaddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_awsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_awprot[2:0]       = 3'b0;
-   assign axi_awlen[7:0]        = '0;
-   assign axi_awburst[1:0]      = 2'b01;
-   // AXI Write Data Channel - This is tied to the command channel as we only write the command buffer once we have the data.
-   assign axi_wvalid            = cmdbuf_vld & cmdbuf_write;
-   assign axi_wdata[63:0]       = cmdbuf_wdata[63:0];
-   assign axi_wstrb[7:0]        = cmdbuf_wstrb[7:0];
-   assign axi_wlast             = 1'b1;
-  // AXI Write Response - Always ready. AHB does not require a write response.
-   assign axi_bready            = 1'b1;
-   // AXI Read Channels
-   assign axi_arvalid           = cmdbuf_vld & ~cmdbuf_write;
-   assign axi_arid[TAG-1:0]     = '0;
-   assign axi_araddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_arsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_arprot            = 3'b0;
-   assign axi_arlen[7:0]        = '0;
-   assign axi_arburst[1:0]      = 2'b01;
-   // AXI Read Response Channel - Always ready as AHB reads are blocking and the the buffer is available for the read coming back always.
-   assign axi_rready            = 1'b1;
-
-   // Clock header logic
-   assign ahb_addr_clk_en = bus_clk_en & (ahb_hready & ahb_htrans[1]);
-   assign buf_rdata_clk_en    = bus_clk_en & buf_rdata_en;
-
-   rvclkhdr bus_cgc       (.en(bus_clk_en),       .l1clk(bus_clk),       .*);
-   rvclkhdr ahb_addr_cgc  (.en(ahb_addr_clk_en),  .l1clk(ahb_addr_clk),  .*);
-   rvclkhdr buf_rdata_cgc (.en(buf_rdata_clk_en), .l1clk(buf_rdata_clk), .*);
-
-
-endmodule // ahb_to_axi4
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2019
-//  Owner : Alex Grobman
-//  Description:  
-//                This module Synchronizes the signals between JTAG (TCK) and
-//                processor (Core_clk)
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_jtag_to_core_sync (
-// JTAG signals
-input       rd_en,      // 1 bit  Read Enable from JTAG
-input       wr_en,      // 1 bit  Write enable from JTAG
-
-// Processor Signals
-input       rst_n,      // Core reset
-input       clk,        // Core clock
-
-output      reg_en,     // 1 bit  Write interface bit to Processor
-output      reg_wr_en   // 1 bit  Write enable to Processor
-);
-  
-wire        c_rd_en;
-wire        c_wr_en;
-reg [2:0]   rden, wren;
- 
-
-// Outputs
-assign reg_en    = c_wr_en | c_rd_en;
-assign reg_wr_en = c_wr_en;
-
-
-// synchronizers  
-always @ ( posedge clk or negedge rst_n) begin
-    if(!rst_n) begin
-        rden <= '0;
-        wren <= '0;
-    end
-    else begin
-        rden <= {rden[1:0], rd_en};
-        wren <= {wren[1:0], wr_en};
-    end
-end
-
-assign c_rd_en = rden[1] & ~rden[2];
-assign c_wr_en = wren[1] & ~wren[2];
- 
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AXI4 -> AHB Bridge
-// Comments:
-//
-//********************************************************************************
-module axi4_to_ahb
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-}
-,parameter TAG  = 1) (
-
-   input                   clk,
-   input                   free_clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-   input                   dec_tlu_force_halt,
-
-   // AXI signals
-   // AXI Write Channels
-   input  logic            axi_awvalid,
-   output logic            axi_awready,
-   input  logic [TAG-1:0]  axi_awid,
-   input  logic [31:0]     axi_awaddr,
-   input  logic [2:0]      axi_awsize,
-   input  logic [2:0]      axi_awprot,
-
-   input  logic            axi_wvalid,
-   output logic            axi_wready,
-   input  logic [63:0]     axi_wdata,
-   input  logic [7:0]      axi_wstrb,
-   input  logic            axi_wlast,
-
-   output logic            axi_bvalid,
-   input  logic            axi_bready,
-   output logic [1:0]      axi_bresp,
-   output logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   input  logic            axi_arvalid,
-   output logic            axi_arready,
-   input  logic [TAG-1:0]  axi_arid,
-   input  logic [31:0]     axi_araddr,
-   input  logic [2:0]      axi_arsize,
-   input  logic [2:0]      axi_arprot,
-
-   output logic            axi_rvalid,
-   input  logic            axi_rready,
-   output logic [TAG-1:0]  axi_rid,
-   output logic [63:0]     axi_rdata,
-   output logic [1:0]      axi_rresp,
-   output logic            axi_rlast,
-
-   // AHB-Lite signals
-   output logic [31:0]     ahb_haddr,       // ahb bus address
-   output logic [2:0]      ahb_hburst,      // tied to 0
-   output logic            ahb_hmastlock,   // tied to 0
-   output logic [3:0]      ahb_hprot,       // tied to 4'b0011
-   output logic [2:0]      ahb_hsize,       // size of bus transaction (possible values 0,1,2,3)
-   output logic [1:0]      ahb_htrans,      // Transaction type (possible values 0,2 only right now)
-   output logic            ahb_hwrite,      // ahb bus write
-   output logic [63:0]     ahb_hwdata,      // ahb bus write data
-
-   input logic [63:0]      ahb_hrdata,      // ahb bus read data
-   input logic             ahb_hready,      // slave ready to accept transaction
-   input logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   localparam ID   = 1;
-   localparam PRTY = 1;
-   typedef enum logic [2:0] {IDLE=3'b000, CMD_RD=3'b001, CMD_WR=3'b010, DATA_RD=3'b011, DATA_WR=3'b100, DONE=3'b101, STREAM_RD=3'b110, STREAM_ERR_RD=3'b111} state_t;
-   state_t buf_state, buf_nxtstate;
-
-   logic             slave_valid;
-   logic             slave_ready;
-   logic [TAG-1:0]   slave_tag;
-   logic [63:0]      slave_rdata;
-   logic [3:0]       slave_opc;
-
-   logic             wrbuf_en, wrbuf_data_en;
-   logic             wrbuf_cmd_sent, wrbuf_rst;
-   logic             wrbuf_vld;
-   logic             wrbuf_data_vld;
-   logic [TAG-1:0]   wrbuf_tag;
-   logic [2:0]       wrbuf_size;
-   logic [31:0]      wrbuf_addr;
-   logic [63:0]      wrbuf_data;
-   logic [7:0]       wrbuf_byteen;
-
-   logic             master_valid;
-   logic             master_ready;
-   logic [TAG-1:0]   master_tag;
-   logic [31:0]      master_addr;
-   logic [63:0]      master_wdata;
-   logic [2:0]       master_size;
-   logic [2:0]       master_opc;
-   logic [7:0]       master_byteen;
-
-   // Buffer signals (one entry buffer)
-   logic [31:0]                buf_addr;
-   logic [1:0]                 buf_size;
-   logic                       buf_write;
-   logic [7:0]                 buf_byteen;
-   logic                       buf_aligned;
-   logic [63:0]                buf_data;
-   logic [TAG-1:0]             buf_tag;
-
-   //Miscellaneous signals
-   logic                       buf_rst;
-   logic [TAG-1:0]             buf_tag_in;
-   logic [31:0]                buf_addr_in;
-   logic [7:0]                 buf_byteen_in;
-   logic [63:0]                buf_data_in;
-   logic                       buf_write_in;
-   logic                       buf_aligned_in;
-   logic [2:0]                 buf_size_in;
-
-   logic                       buf_state_en;
-   logic                       buf_wr_en;
-   logic                       buf_data_wr_en;
-   logic                       slvbuf_error_en;
-   logic                       wr_cmd_vld;
-
-   logic                       cmd_done_rst, cmd_done, cmd_doneQ;
-   logic                       trxn_done;
-   logic [2:0]                 buf_cmd_byte_ptr, buf_cmd_byte_ptrQ, buf_cmd_nxtbyte_ptr;
-   logic                       buf_cmd_byte_ptr_en;
-   logic                       found;
-
-   logic                       slave_valid_pre;
-   logic                       ahb_hready_q;
-   logic                       ahb_hresp_q;
-   logic [1:0]                 ahb_htrans_q;
-   logic                       ahb_hwrite_q;
-   logic [63:0]                ahb_hrdata_q;
-
-
-   logic                       slvbuf_write;
-   logic                       slvbuf_error;
-   logic [TAG-1:0]             slvbuf_tag;
-
-   logic                       slvbuf_error_in;
-   logic                       slvbuf_wr_en;
-   logic                       bypass_en;
-   logic                       rd_bypass_idle;
-
-   logic                       last_addr_en;
-   logic [31:0]                last_bus_addr;
-
-   // Clocks
-   logic                       buf_clken;
-   logic                       ahbm_data_clken;
-
-   logic                       buf_clk;
-   logic                       bus_clk;
-   logic                       ahbm_data_clk;
-
-   logic                       dec_tlu_force_halt_bus, dec_tlu_force_halt_bus_ns, dec_tlu_force_halt_bus_q;
-
-   // Function to get the length from byte enable
-   function automatic logic [1:0] get_write_size;
-      input logic [7:0] byteen;
-
-      logic [1:0]       size;
-
-      size[1:0] = (2'b11 & {2{(byteen[7:0] == 8'hff)}}) |
-                  (2'b10 & {2{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h0f))}}) |
-                  (2'b01 & {2{((byteen[7:0] == 8'hc0) | (byteen[7:0] == 8'h30) | (byteen[7:0] == 8'h0c) | (byteen[7:0] == 8'h03))}});
-
-      return size[1:0];
-   endfunction // get_write_size
-
-   // Function to get the length from byte enable
-   function automatic logic [2:0] get_write_addr;
-      input logic [7:0] byteen;
-
-      logic [2:0]       addr;
-
-      addr[2:0] = (3'h0 & {3{((byteen[7:0] == 8'hff) | (byteen[7:0] == 8'h0f) | (byteen[7:0] == 8'h03))}}) |
-                  (3'h2 & {3{(byteen[7:0] == 8'h0c)}})                                                     |
-                  (3'h4 & {3{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h03))}})                          |
-                  (3'h6 & {3{(byteen[7:0] == 8'hc0)}});
-
-      return addr[2:0];
-   endfunction // get_write_addr
-
-   // Function to get the next byte pointer
-   function automatic logic [2:0] get_nxtbyte_ptr (logic [2:0] current_byte_ptr, logic [7:0] byteen, logic get_next);
-      logic [2:0] start_ptr;
-      logic       found;
-      found = '0;
-      //get_nxtbyte_ptr[2:0] = current_byte_ptr[2:0];
-      start_ptr[2:0] = get_next ? (current_byte_ptr[2:0] + 3'b1) : current_byte_ptr[2:0];
-      for (int j=0; j<8; j++) begin
-         if (~found) begin
-            get_nxtbyte_ptr[2:0] = 3'(j);
-            found |= (byteen[j] & (3'(j) >= start_ptr[2:0])) ;
-         end
-      end
-   endfunction // get_nextbyte_ptr
-
-   // Create bus synchronized version of force halt
-   assign dec_tlu_force_halt_bus = dec_tlu_force_halt | dec_tlu_force_halt_bus_q;
-   assign dec_tlu_force_halt_bus_ns = ~bus_clk_en & dec_tlu_force_halt_bus;
-   rvdff  #(.WIDTH(1))   force_halt_busff(.din(dec_tlu_force_halt_bus_ns), .dout(dec_tlu_force_halt_bus_q), .clk(free_clk), .*);
-
-   // Write buffer
-   assign wrbuf_en       = axi_awvalid & axi_awready & master_ready;
-   assign wrbuf_data_en  = axi_wvalid & axi_wready & master_ready;
-   assign wrbuf_cmd_sent = master_valid & master_ready & (master_opc[2:1] == 2'b01);
-   assign wrbuf_rst      = (wrbuf_cmd_sent & ~wrbuf_en) | dec_tlu_force_halt_bus;
-
-   assign axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_arready = ~(wrbuf_vld & wrbuf_data_vld) & master_ready;
-   assign axi_rlast   = 1'b1;
-
-   assign wr_cmd_vld          = (wrbuf_vld & wrbuf_data_vld);
-   assign master_valid        = wr_cmd_vld | axi_arvalid;
-   assign master_tag[TAG-1:0] = wr_cmd_vld ? wrbuf_tag[TAG-1:0] : axi_arid[TAG-1:0];
-   assign master_opc[2:0]     = wr_cmd_vld ? 3'b011 : 3'b0;
-   assign master_addr[31:0]   = wr_cmd_vld ? wrbuf_addr[31:0] : axi_araddr[31:0];
-   assign master_size[2:0]    = wr_cmd_vld ? wrbuf_size[2:0] : axi_arsize[2:0];
-   assign master_byteen[7:0]  = wrbuf_byteen[7:0];
-   assign master_wdata[63:0]  = wrbuf_data[63:0];
-
-   // AXI response channel signals
-   assign axi_bvalid       = slave_valid & slave_ready & slave_opc[3];
-   assign axi_bresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_bid[TAG-1:0] = slave_tag[TAG-1:0];
-
-   assign axi_rvalid       = slave_valid & slave_ready & (slave_opc[3:2] == 2'b0);
-   assign axi_rresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_rid[TAG-1:0] = slave_tag[TAG-1:0];
-   assign axi_rdata[63:0]  = slave_rdata[63:0];
-   assign slave_ready        = axi_bready & axi_rready;
-
- // FIFO state machine
-   always_comb begin
-      buf_nxtstate   = IDLE;
-      buf_state_en   = 1'b0;
-      buf_wr_en      = 1'b0;
-      buf_data_wr_en = 1'b0;
-      slvbuf_error_in   = 1'b0;
-      slvbuf_error_en   = 1'b0;
-      buf_write_in   = 1'b0;
-      cmd_done       = 1'b0;
-      trxn_done      = 1'b0;
-      buf_cmd_byte_ptr_en = 1'b0;
-      buf_cmd_byte_ptr[2:0] = '0;
-      slave_valid_pre   = 1'b0;
-      master_ready   = 1'b0;
-      ahb_htrans[1:0]  = 2'b0;
-      slvbuf_wr_en     = 1'b0;
-      bypass_en        = 1'b0;
-      rd_bypass_idle   = 1'b0;
-
-      case (buf_state)
-         IDLE: begin
-                  master_ready   = 1'b1;
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_nxtstate = buf_write_in ? CMD_WR : CMD_RD;
-                  buf_state_en = master_valid & master_ready;
-                  buf_wr_en    = buf_state_en;
-                  buf_data_wr_en = buf_state_en & (buf_nxtstate == CMD_WR);
-                  buf_cmd_byte_ptr_en   = buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = buf_write_in ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) : master_addr[2:0];
-                  bypass_en       = buf_state_en;
-                  rd_bypass_idle  = bypass_en & (buf_nxtstate == CMD_RD);
-                  ahb_htrans[1:0] = {2{bypass_en}} & 2'b10;
-          end
-         CMD_RD: begin
-                  buf_nxtstate    = (master_valid & (master_opc[2:0] == 3'b000))? STREAM_RD : DATA_RD;
-                  buf_state_en    = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  cmd_done        = buf_state_en & ~master_valid;
-                  slvbuf_wr_en    = buf_state_en;
-                  master_ready  = buf_state_en & (buf_nxtstate == STREAM_RD);
-                  buf_wr_en       = master_ready;
-                  bypass_en       = master_ready & master_valid;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en | bypass_en}};
-         end
-         STREAM_RD: begin
-                  master_ready  =  (ahb_hready_q & ~ahb_hresp_q) & ~(master_valid & master_opc[2:1] == 2'b01);
-                  buf_wr_en       = (master_valid & master_ready & (master_opc[2:0] == 3'b000)); // update the fifo if we are streaming the read commands
-                  buf_nxtstate    = ahb_hresp_q ? STREAM_ERR_RD : (buf_wr_en ? STREAM_RD : DATA_RD);            // assuming that the master accpets the slave response right away.
-                  buf_state_en    = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en  = buf_state_en;
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-                  slave_valid_pre  = buf_state_en & ~ahb_hresp_q;             // send a response right away if we are not going through an error response.
-                  cmd_done        = buf_state_en & ~master_valid;                     // last one of the stream should not send a htrans
-                  bypass_en       = master_ready & master_valid & (buf_nxtstate == STREAM_RD) & buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~((buf_nxtstate != STREAM_RD) & buf_state_en)}};
-                  slvbuf_wr_en    = buf_wr_en;                                         // shifting the contents from the buf to slv_buf for streaming cases
-         end // case: STREAM_RD
-         STREAM_ERR_RD: begin
-                  buf_nxtstate = DATA_RD;
-                  buf_state_en = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  slave_valid_pre = buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;     // Overwrite slvbuf with buffer
-                  buf_cmd_byte_ptr[2:0] = buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en}};
-         end
-         DATA_RD: begin
-                  buf_nxtstate   = DONE;
-                  buf_state_en   = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en = buf_state_en;
-                  slvbuf_error_in= ahb_hresp_q;
-                  slvbuf_error_en= buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;
-
-         end
-         CMD_WR: begin
-                  buf_nxtstate = DATA_WR;
-                  trxn_done    = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_state_en = trxn_done;
-                  buf_cmd_byte_ptr_en = buf_state_en;
-                  slvbuf_wr_en    = buf_state_en;
-                  buf_cmd_byte_ptr    = trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-                  cmd_done            = trxn_done & (buf_aligned | (buf_cmd_byte_ptrQ == 3'b111) |
-                                                     (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0));
-                  ahb_htrans[1:0] = {2{~(cmd_done | cmd_doneQ)}} & 2'b10;
-         end
-         DATA_WR: begin
-                  buf_state_en = (cmd_doneQ & ahb_hready_q) | ahb_hresp_q;
-                  master_ready = buf_state_en & ~ahb_hresp_q & slave_ready;   // Ready to accept new command if current command done and no error
-                  buf_nxtstate = (ahb_hresp_q | ~slave_ready) ? DONE :
-                                  ((master_valid & master_ready) ? ((master_opc[2:1] == 2'b01) ? CMD_WR : CMD_RD) : IDLE);
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_wr_en = buf_state_en & ((buf_nxtstate == CMD_WR) | (buf_nxtstate == CMD_RD));
-                  buf_data_wr_en = buf_wr_en;
-
-                  cmd_done     = (ahb_hresp_q | (ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) &
-                                 ((buf_cmd_byte_ptrQ == 3'b111) | (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0))));
-                  bypass_en       = buf_state_en & buf_write_in & (buf_nxtstate == CMD_WR);   // Only bypass for writes for the time being
-                  ahb_htrans[1:0] = {2{(~(cmd_done | cmd_doneQ) | bypass_en)}} & 2'b10;
-                  slave_valid_pre  = buf_state_en & (buf_nxtstate != DONE);
-
-                  trxn_done = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_cmd_byte_ptr_en = trxn_done | bypass_en;
-                  buf_cmd_byte_ptr = bypass_en ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) :
-                                                 trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-            end
-         DONE: begin
-                  buf_nxtstate = IDLE;
-                  buf_state_en = slave_ready;
-                  slvbuf_error_en = 1'b1;
-                  slave_valid_pre = 1'b1;
-         end
-      endcase
-   end
-
-   assign buf_rst              = dec_tlu_force_halt_bus;
-   assign cmd_done_rst         = slave_valid_pre;
-   assign buf_addr_in[31:3]    = master_addr[31:3];
-   assign buf_addr_in[2:0]     = (buf_aligned_in & (master_opc[2:1] == 2'b01)) ? get_write_addr(master_byteen[7:0]) : master_addr[2:0];
-   assign buf_tag_in[TAG-1:0]  = master_tag[TAG-1:0];
-   assign buf_byteen_in[7:0]   = wrbuf_byteen[7:0];
-   assign buf_data_in[63:0]    = (buf_state == DATA_RD) ? ahb_hrdata_q[63:0] : master_wdata[63:0];
-   assign buf_size_in[1:0]     = (buf_aligned_in & (master_size[1:0] == 2'b11) & (master_opc[2:1] == 2'b01)) ? get_write_size(master_byteen[7:0]) : master_size[1:0];
-   assign buf_aligned_in       = (master_opc[2:0] == 3'b0)    |   // reads are always aligned since they are either DW or sideeffects
-                                 (master_size[1:0] == 2'b0) |  (master_size[1:0] == 2'b01) | (master_size[1:0] == 2'b10) | // Always aligned for Byte/HW/Word since they can be only for non-idempotent. IFU/SB are always aligned
-                                 ((master_size[1:0] == 2'b11) &
-                                  ((master_byteen[7:0] == 8'h3)  | (master_byteen[7:0] == 8'hc)   | (master_byteen[7:0] == 8'h30) | (master_byteen[7:0] == 8'hc0) |
-                                   (master_byteen[7:0] == 8'hf)  | (master_byteen[7:0] == 8'hf0)  | (master_byteen[7:0] == 8'hff)));
-
-   // Generate the ahb signals
-   assign ahb_haddr[31:3] = bypass_en ? master_addr[31:3]  : buf_addr[31:3];
-   assign ahb_haddr[2:0]  = {3{(ahb_htrans == 2'b10)}} & buf_cmd_byte_ptr[2:0];    // Trxn should be aligned during IDLE
-   assign ahb_hsize[2:0]  = bypass_en ? {1'b0, ({2{buf_aligned_in}} & buf_size_in[1:0])} :
-                                        {1'b0, ({2{buf_aligned}} & buf_size[1:0])};   // Send the full size for aligned trxn
-   assign ahb_hburst[2:0] = 3'b0;
-   assign ahb_hmastlock   = 1'b0;
-   assign ahb_hprot[3:0]  = {3'b001,~axi_arprot[2]};
-   assign ahb_hwrite      = bypass_en ? (master_opc[2:1] == 2'b01) : buf_write;
-   assign ahb_hwdata[63:0] = buf_data[63:0];
-
-   assign slave_valid          = slave_valid_pre;// & (~slvbuf_posted_write | slvbuf_error);
-   assign slave_opc[3:2]       = slvbuf_write ? 2'b11 : 2'b00;
-   assign slave_opc[1:0]       = {2{slvbuf_error}} & 2'b10;
-   assign slave_rdata[63:0]    = slvbuf_error ? {2{last_bus_addr[31:0]}} : ((buf_state == DONE) ? buf_data[63:0] : ahb_hrdata_q[63:0]);
-   assign slave_tag[TAG-1:0]   = slvbuf_tag[TAG-1:0];
-
-   assign last_addr_en = (ahb_htrans[1:0] != 2'b0) & ahb_hready & ahb_hwrite ;
-
-
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_vldff     (.din(1'b1),              .dout(wrbuf_vld),          .en(wrbuf_en),      .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_data_vldff(.din(1'b1),              .dout(wrbuf_data_vld),     .en(wrbuf_data_en), .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(TAG)) wrbuf_tagff     (.din(axi_awid[TAG-1:0]), .dout(wrbuf_tag[TAG-1:0]), .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(3))   wrbuf_sizeff    (.din(axi_awsize[2:0]),   .dout(wrbuf_size[2:0]),    .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))  wrbuf_addrff    (.din(axi_awaddr[31:0]),  .dout(wrbuf_addr[31:0]),   .en(wrbuf_en & bus_clk_en),            .clk(clk), .*);
-   rvdffe       #(.WIDTH(64))  wrbuf_dataff    (.din(axi_wdata[63:0]),   .dout(wrbuf_data[63:0]),   .en(wrbuf_data_en & bus_clk_en),       .clk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))   wrbuf_byteenff  (.din(axi_wstrb[7:0]),    .dout(wrbuf_byteen[7:0]),  .en(wrbuf_data_en),                    .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffs_fpga #(.WIDTH(32))   last_bus_addrff (.din(ahb_haddr[31:0]),   .dout(last_bus_addr[31:0]), .en(last_addr_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH($bits(state_t))) buf_state_ff  (.din(buf_nxtstate),        .dout({buf_state}),      .en(buf_state_en), .clear(buf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_writeff   (.din(buf_write_in),        .dout(buf_write),        .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG))             buf_tagff     (.din(buf_tag_in[TAG-1:0]), .dout(buf_tag[TAG-1:0]), .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(32))              buf_addrff    (.din(buf_addr_in[31:0]),   .dout(buf_addr[31:0]),   .en(buf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))               buf_sizeff    (.din(buf_size_in[1:0]),    .dout(buf_size[1:0]),    .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_alignedff (.din(buf_aligned_in),      .dout(buf_aligned),      .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))               buf_byteenff  (.din(buf_byteen_in[7:0]),  .dout(buf_byteen[7:0]),  .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))              buf_dataff    (.din(buf_data_in[63:0]),   .dout(buf_data[63:0]),   .en(buf_data_wr_en & bus_clk_en),   .clk(clk), .*);
-
-
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_writeff  (.din(buf_write),        .dout(slvbuf_write),        .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG)) slvbuf_tagff    (.din(buf_tag[TAG-1:0]), .dout(slvbuf_tag[TAG-1:0]), .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_errorff  (.din(slvbuf_error_in),  .dout(slvbuf_error),        .en(slvbuf_error_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH(1)) buf_cmd_doneff     (.din(1'b1),                  .dout(cmd_doneQ),              .en(cmd_done),            .clear(cmd_done_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(3))  buf_cmd_byte_ptrff (.din(buf_cmd_byte_ptr[2:0]), .dout(buf_cmd_byte_ptrQ[2:0]), .en(buf_cmd_byte_ptr_en),                       .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),       .dout(ahb_hready_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans[1:0]),  .dout(ahb_htrans_q[1:0]),  .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),       .dout(ahb_hwrite_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),        .dout(ahb_hresp_q),        .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(64)) hrdata_ff (.din(ahb_hrdata[63:0]), .dout(ahb_hrdata_q[63:0]), .clk(ahbm_data_clk), .clken(ahbm_data_clken), .rawclk(clk), .*);
-
-   // Clock headers
-   // clock enables for ahbm addr/data
-   assign buf_clken       = bus_clk_en & (buf_wr_en | slvbuf_wr_en | clk_override);
-   assign ahbm_data_clken = bus_clk_en & ((buf_state != IDLE) | clk_override);
-
-
-   rvclkhdr bus_cgc       (.en(bus_clk_en),      .l1clk(bus_clk),       .*);
-   rvclkhdr buf_cgc       (.en(buf_clken),       .l1clk(buf_clk), .*);
-   rvclkhdr ahbm_data_cgc (.en(ahbm_data_clken), .l1clk(ahbm_data_clk), .*);
-
-
-endmodule // axi4_to_ahb
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file to control the debug mode
-// Comments: Responsible to put the rest of the core in quiesce mode,
-//           Send the commands/address. sends WrData and Recieve read Data.
-//           And then Resume the core to do the normal mode
-// Author  :
-//********************************************************************************
-module eb1_dbg
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   // outputs to the core for command and data interface
-   output logic [31:0]                 dbg_cmd_addr,
-   output logic [31:0]                 dbg_cmd_wrdata,
-   output logic                        dbg_cmd_valid,
-   output logic                        dbg_cmd_write,             // 1: write command, 0: read_command
-   output logic [1:0]                  dbg_cmd_type,              // 0:gpr 1:csr 2: memory
-   output logic [1:0]                  dbg_cmd_size,              // size of the abstract mem access debug command
-   output logic                        dbg_core_rst_l,            // core reset from dm
-
-   // inputs back from the core/dec
-   input logic [31:0]                  core_dbg_rddata,
-   input logic                         core_dbg_cmd_done,         // This will be treated like a valid signal
-   input logic                         core_dbg_cmd_fail,         // Exception during command run
-
-   // Signals to dma to get a bubble
-   output logic                        dbg_dma_bubble,            // Debug needs a bubble to send a valid
-   input  logic                        dma_dbg_ready,             // DMA is ready to accept debug request
-
-   // interface with the rest of the core to halt/resume handshaking
-   output logic                        dbg_halt_req,              // This is a pulse
-   output logic                        dbg_resume_req,            // Debug sends a resume requests. Pulse
-   input  logic                        dec_tlu_debug_mode,        // Core is in debug mode
-   input  logic                        dec_tlu_dbg_halted,        // The core has finished the queiscing sequence. Core is halted now
-   input  logic                        dec_tlu_mpc_halted_only,   // Only halted due to MPC
-   input  logic                        dec_tlu_resume_ack,        // core sends back an ack for the resume (pulse)
-
-   // inputs from the JTAG
-   input logic                         dmi_reg_en,                // read or write
-   input logic [6:0]                   dmi_reg_addr,              // address of DM register
-   input logic                         dmi_reg_wr_en,             // write instruction
-   input logic [31:0]                  dmi_reg_wdata,             // write data
-
-   // output
-   output logic [31:0]                 dmi_reg_rdata,             // read data
-
-   // AXI Write Channels
-   output logic                        sb_axi_awvalid,
-   input  logic                        sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_awid,
-   output logic [31:0]                 sb_axi_awaddr,
-   output logic [3:0]                  sb_axi_awregion,
-   output logic [7:0]                  sb_axi_awlen,
-   output logic [2:0]                  sb_axi_awsize,
-   output logic [1:0]                  sb_axi_awburst,
-   output logic                        sb_axi_awlock,
-   output logic [3:0]                  sb_axi_awcache,
-   output logic [2:0]                  sb_axi_awprot,
-   output logic [3:0]                  sb_axi_awqos,
-
-   output logic                        sb_axi_wvalid,
-   input  logic                        sb_axi_wready,
-   output logic [63:0]                 sb_axi_wdata,
-   output logic [7:0]                  sb_axi_wstrb,
-   output logic                        sb_axi_wlast,
-
-   input  logic                        sb_axi_bvalid,
-   output logic                        sb_axi_bready,
-   input  logic [1:0]                  sb_axi_bresp,
-
-   // AXI Read Channels
-   output logic                        sb_axi_arvalid,
-   input  logic                        sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_arid,
-   output logic [31:0]                 sb_axi_araddr,
-   output logic [3:0]                  sb_axi_arregion,
-   output logic [7:0]                  sb_axi_arlen,
-   output logic [2:0]                  sb_axi_arsize,
-   output logic [1:0]                  sb_axi_arburst,
-   output logic                        sb_axi_arlock,
-   output logic [3:0]                  sb_axi_arcache,
-   output logic [2:0]                  sb_axi_arprot,
-   output logic [3:0]                  sb_axi_arqos,
-
-   input  logic                        sb_axi_rvalid,
-   output logic                        sb_axi_rready,
-   input  logic [63:0]                 sb_axi_rdata,
-   input  logic [1:0]                  sb_axi_rresp,
-
-   input logic                         dbg_bus_clk_en,
-
-   // general inputs
-   input logic                         clk,
-   input logic                         rst_l,        // This includes both top rst and debug rst
-   input logic                         dbg_rst_l,
-   input logic                         clk_override,
-   input logic                         scan_mode
-);
-
-
-   typedef enum logic [3:0] {IDLE=4'h0, HALTING=4'h1, HALTED=4'h2, CORE_CMD_START=4'h3, CORE_CMD_WAIT=4'h4, SB_CMD_START=4'h5, SB_CMD_SEND=4'h6, SB_CMD_RESP=4'h7, CMD_DONE=4'h8, RESUMING=4'h9} state_t;
-   typedef enum logic [3:0] {SBIDLE=4'h0, WAIT_RD=4'h1, WAIT_WR=4'h2, CMD_RD=4'h3, CMD_WR=4'h4, CMD_WR_ADDR=4'h5, CMD_WR_DATA=4'h6, RSP_RD=4'h7, RSP_WR=4'h8, DONE=4'h9} sb_state_t;
-
-   state_t       dbg_state;
-   state_t       dbg_nxtstate;
-   logic         dbg_state_en;
-   // these are the registers that the debug module implements
-   logic [31:0]  dmstatus_reg;        // [26:24]-dmerr, [17:16]-resume ack, [9:8]-halted, [3:0]-version
-   logic [31:0]  dmcontrol_reg;       // dmcontrol register has only 6 bits implemented. 31: haltreq, 30: resumereq, 29: haltreset, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   logic [31:0]  command_reg;
-   logic [31:0]  abstractcs_reg;      // bits implemted are [12] - busy and [10:8]= command error
-   logic [31:0]  haltsum0_reg;
-   logic [31:0]  data0_reg;
-   logic [31:0]  data1_reg;
-
-   // data 0
-   logic [31:0]  data0_din;
-   logic         data0_reg_wren, data0_reg_wren0, data0_reg_wren1, data0_reg_wren2;
-   // data 1
-   logic [31:0]  data1_din;
-   logic         data1_reg_wren, data1_reg_wren0, data1_reg_wren1;
-   // abstractcs
-   logic         abstractcs_busy_wren;
-   logic         abstractcs_busy_din;
-   logic [2:0]   abstractcs_error_din;
-   logic         abstractcs_error_sel0, abstractcs_error_sel1, abstractcs_error_seb1, abstractcs_error_sel3, abstractcs_error_sel4, abstractcs_error_sel5, abstractcs_error_sel6;
-   logic         dbg_sb_bus_error;
-   // abstractauto
-   logic         abstractauto_reg_wren;
-   logic [1:0]   abstractauto_reg;
-
-   // dmstatus
-   logic         dmstatus_resumeack_wren;
-   logic         dmstatus_resumeack_din;
-   logic         dmstatus_haveresetn_wren;
-   logic         dmstatus_resumeack;
-   logic         dmstatus_unavail;
-   logic         dmstatus_running;
-   logic         dmstatus_halted;
-   logic         dmstatus_havereset, dmstatus_haveresetn;
-
-   // dmcontrol
-   logic         resumereq;
-   logic         dmcontrol_wren, dmcontrol_wren_Q;
-   // command
-   logic         execute_command_ns, execute_command;
-   logic         command_wren, command_regno_wren;
-   logic         command_transfer_din;
-   logic         command_postexec_din;
-   logic [31:0]  command_din;
-   logic [3:0]   dbg_cmd_addr_incr;
-   logic [31:0]  dbg_cmd_curr_addr;
-   logic [31:0]  dbg_cmd_next_addr;
-
-   // needed to send the read data back for dmi reads
-   logic  [31:0] dmi_reg_rdata_din;
-
-   sb_state_t    sb_state;
-   sb_state_t    sb_nxtstate;
-   logic         sb_state_en;
-
-   //System bus section
-   logic              sbcs_wren;
-   logic              sbcs_sbbusy_wren;
-   logic              sbcs_sbbusy_din;
-   logic              sbcs_sbbusyerror_wren;
-   logic              sbcs_sbbusyerror_din;
-
-   logic              sbcs_sberror_wren;
-   logic [2:0]        sbcs_sberror_din;
-   logic              sbcs_unaligned;
-   logic              sbcs_illegal_size;
-   logic [19:15]      sbcs_reg_int;
-
-   // data
-   logic              sbdata0_reg_wren0;
-   logic              sbdata0_reg_wren1;
-   logic              sbdata0_reg_wren;
-   logic [31:0]       sbdata0_din;
-
-   logic              sbdata1_reg_wren0;
-   logic              sbdata1_reg_wren1;
-   logic              sbdata1_reg_wren;
-   logic [31:0]       sbdata1_din;
-
-   logic              sbaddress0_reg_wren0;
-   logic              sbaddress0_reg_wren1;
-   logic              sbaddress0_reg_wren;
-   logic [31:0]       sbaddress0_reg_din;
-   logic [3:0]        sbaddress0_incr;
-   logic              sbreadonaddr_access;
-   logic              sbreadondata_access;
-   logic              sbdata0wr_access;
-
-   logic              sb_abmem_cmd_done_in, sb_abmem_data_done_in;
-   logic              sb_abmem_cmd_done_en, sb_abmem_data_done_en;
-   logic              sb_abmem_cmd_done, sb_abmem_data_done;
-   logic [31:0]       abmem_addr;
-   logic              abmem_addr_in_dccm_region, abmem_addr_in_iccm_region, abmem_addr_in_pic_region;
-   logic              abmem_addr_core_local;
-   logic              abmem_addr_external;
-
-   logic              sb_cmd_pending, sb_abmem_cmd_pending;
-   logic              sb_abmem_cmd_write;
-   logic [2:0]        sb_abmem_cmd_size;
-   logic [31:0]       sb_abmem_cmd_addr;
-   logic [31:0]       sb_abmem_cmd_wdata;
-
-   logic [2:0]        sb_cmd_size;
-   logic [31:0]       sb_cmd_addr;
-   logic [63:0]       sb_cmd_wdata;
-
-   logic              sb_bus_cmd_read, sb_bus_cmd_write_addr, sb_bus_cmd_write_data;
-   logic              sb_bus_rsp_read, sb_bus_rsp_write;
-   logic              sb_bus_rsp_error;
-   logic [63:0]       sb_bus_rdata;
-
-   //registers
-   logic [31:0]       sbcs_reg;
-   logic [31:0]       sbaddress0_reg;
-   logic [31:0]       sbdata0_reg;
-   logic [31:0]       sbdata1_reg;
-
-   logic              sb_abmem_cmd_arvalid, sb_abmem_cmd_awvalid, sb_abmem_cmd_wvalid;
-   logic              sb_abmem_read_pend;
-   logic              sb_cmd_awvalid, sb_cmd_wvalid, sb_cmd_arvalid;
-   logic              sb_read_pend;
-   logic [31:0]       sb_axi_addr;
-   logic [63:0]       sb_axi_wrdata;
-   logic [2:0]        sb_axi_size;
-
-   logic              dbg_dm_rst_l;
-
-   //clken
-   logic              dbg_free_clken;
-   logic              dbg_free_clk;
-
-   logic              sb_free_clken;
-   logic              sb_free_clk;
-
-   // clocking
-   // used for the abstract commands.
-   assign dbg_free_clken  = dmi_reg_en | execute_command | (dbg_state != IDLE) | dbg_state_en | dec_tlu_dbg_halted | dec_tlu_mpc_halted_only | dec_tlu_debug_mode | dbg_halt_req | clk_override;
-
-   // used for the system bus
-   assign sb_free_clken = dmi_reg_en | execute_command | sb_state_en | (sb_state != SBIDLE) | clk_override;
-
-   rvoclkhdr dbg_free_cgc    (.en(dbg_free_clken), .l1clk(dbg_free_clk), .*);
-   rvoclkhdr sb_free_cgc     (.en(sb_free_clken), .l1clk(sb_free_clk), .*);
-
-   // end clocking section
-
-   // Reset logic
-   assign dbg_dm_rst_l = dbg_rst_l & (dmcontrol_reg[0] | scan_mode);
-   assign dbg_core_rst_l = ~dmcontrol_reg[1] | scan_mode;
-
-   // system bus register
-   // sbcs[31:29], sbcs - [22]:sbbusyerror, [21]: sbbusy, [20]:sbreadonaddr, [19:17]:sbaccess, [16]:sbautoincrement, [15]:sbreadondata, [14:12]:sberror, sbsize=32, 128=0, 64/32/16/8 are legal
-   assign        sbcs_reg[31:29] = 3'b1;
-   assign        sbcs_reg[28:23] = '0;
-   assign        sbcs_reg[19:15] = {sbcs_reg_int[19], ~sbcs_reg_int[18], sbcs_reg_int[17:15]};
-   assign        sbcs_reg[11:5]  = 7'h20;
-   assign        sbcs_reg[4:0]   = 5'b01111;
-   assign        sbcs_wren = (dmi_reg_addr ==  7'h38) & dmi_reg_en & dmi_reg_wr_en & (sb_state == SBIDLE);
-   assign        sbcs_sbbusyerror_wren = (sbcs_wren & dmi_reg_wdata[22]) |
-                                         (sbcs_reg[21] & dmi_reg_en & ((dmi_reg_wr_en & (dmi_reg_addr == 7'h39)) | (dmi_reg_addr == 7'h3c) | (dmi_reg_addr == 7'h3d)));
-   assign        sbcs_sbbusyerror_din = ~(sbcs_wren & dmi_reg_wdata[22]);   // Clear when writing one
-
-   rvdffs #(1) sbcs_sbbusyerror_reg  (.din(sbcs_sbbusyerror_din),  .dout(sbcs_reg[22]),    .en(sbcs_sbbusyerror_wren), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbbusy_reg       (.din(sbcs_sbbusy_din),       .dout(sbcs_reg[21]),    .en(sbcs_sbbusy_wren),      .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbreadonaddr_reg (.din(dmi_reg_wdata[20]),     .dout(sbcs_reg[20]),    .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(5) sbcs_misc_reg         (.din({dmi_reg_wdata[19],~dmi_reg_wdata[18],dmi_reg_wdata[17:15]}),
-                                      .dout(sbcs_reg_int[19:15]), .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(3) sbcs_error_reg        (.din(sbcs_sberror_din[2:0]), .dout(sbcs_reg[14:12]), .en(sbcs_sberror_wren),     .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sbcs_unaligned =    ((sbcs_reg[19:17] == 3'b001) &  sbaddress0_reg[0]) |
-                              ((sbcs_reg[19:17] == 3'b010) &  (|sbaddress0_reg[1:0])) |
-                              ((sbcs_reg[19:17] == 3'b011) &  (|sbaddress0_reg[2:0]));
-
-   assign sbcs_illegal_size = sbcs_reg[19];    // Anything bigger than 64 bits is illegal
-
-   assign sbaddress0_incr[3:0] = ({4{(sbcs_reg[19:17] == 3'h0)}} &  4'b0001) |
-                                 ({4{(sbcs_reg[19:17] == 3'h1)}} &  4'b0010) |
-                                 ({4{(sbcs_reg[19:17] == 3'h2)}} &  4'b0100) |
-                                 ({4{(sbcs_reg[19:17] == 3'h3)}} &  4'b1000);
-
-   // sbdata
-   assign        sbdata0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);   // write data only when single read is 0
-   assign        sbdata0_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata0_reg_wren    = sbdata0_reg_wren0 | sbdata0_reg_wren1;
-
-   assign        sbdata1_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3d);   // write data only when single read is 0;
-   assign        sbdata1_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata1_reg_wren    = sbdata1_reg_wren0 | sbdata1_reg_wren1;
-
-   assign        sbdata0_din[31:0]   = ({32{sbdata0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata0_reg_wren1}} & sb_bus_rdata[31:0]);
-   assign        sbdata1_din[31:0]   = ({32{sbdata1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata1_reg_wren1}} & sb_bus_rdata[63:32]);
-
-   rvdffe #(32)    dbg_sbdata0_reg    (.*, .din(sbdata0_din[31:0]), .dout(sbdata0_reg[31:0]), .en(sbdata0_reg_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(32)    dbg_sbdata1_reg    (.*, .din(sbdata1_din[31:0]), .dout(sbdata1_reg[31:0]), .en(sbdata1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-    // sbaddress
-   assign        sbaddress0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39);
-   assign        sbaddress0_reg_wren    = sbaddress0_reg_wren0 | sbaddress0_reg_wren1;
-   assign        sbaddress0_reg_din[31:0]= ({32{sbaddress0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                           ({32{sbaddress0_reg_wren1}} & (sbaddress0_reg[31:0] + {28'b0,sbaddress0_incr[3:0]}));
-   rvdffe #(32)    dbg_sbaddress0_reg    (.*, .din(sbaddress0_reg_din[31:0]), .dout(sbaddress0_reg[31:0]), .en(sbaddress0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   assign sbreadonaddr_access = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39) & sbcs_reg[20];   // if readonaddr is set the next command will start upon writing of addr0
-   assign sbreadondata_access = dmi_reg_en & ~dmi_reg_wr_en & (dmi_reg_addr == 7'h3c) & sbcs_reg[15];  // if readondata is set the next command will start upon reading of data0
-   assign sbdata0wr_access  = dmi_reg_en &  dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);                   // write to sbdata0 will start write command to system bus
-
-   // memory mapped registers
-   // dmcontrol register has only 5 bits implemented. 31: haltreq, 30: resumereq, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   // rest all the bits are zeroed out
-   // dmactive flop is reset based on core rst_l, all other flops use dm_rst_l
-   assign dmcontrol_wren      = (dmi_reg_addr ==  7'h10) & dmi_reg_en & dmi_reg_wr_en;
-   assign dmcontrol_reg[29]   = '0;
-   assign dmcontrol_reg[27:2] = '0;
-   assign resumereq           = dmcontrol_reg[30] & ~dmcontrol_reg[31] & dmcontrol_wren_Q;
-   rvdffs #(4) dmcontrolff (.din({dmi_reg_wdata[31:30],dmi_reg_wdata[28],dmi_reg_wdata[1]}), .dout({dmcontrol_reg[31:30], dmcontrol_reg[28], dmcontrol_reg[1]}), .en(dmcontrol_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs #(1) dmcontrol_dmactive_ff (.din(dmi_reg_wdata[0]), .dout(dmcontrol_reg[0]), .en(dmcontrol_wren), .rst_l(dbg_rst_l), .clk(dbg_free_clk));
-   rvdff  #(1) dmcontrol_wrenff(.din(dmcontrol_wren), .dout(dmcontrol_wren_Q), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // dmstatus register bits that are implemented
-   // [19:18]-havereset,[17:16]-resume ack, [9:8]-halted, [3:0]-version
-   // rest all the bits are zeroed out
-   //assign dmstatus_wren       = (dmi_reg_addr[31:0] ==  32'h11) & dmi_reg_en;
-   assign dmstatus_reg[31:20] = '0;
-   assign dmstatus_reg[19:18] = {2{dmstatus_havereset}};
-   assign dmstatus_reg[15:14] = '0;
-   assign dmstatus_reg[7]     = '1;
-   assign dmstatus_reg[6:4]   = '0;
-   assign dmstatus_reg[17:16] = {2{dmstatus_resumeack}};
-   assign dmstatus_reg[13:12] = {2{dmstatus_unavail}};
-   assign dmstatus_reg[11:10] = {2{dmstatus_running}};
-   assign dmstatus_reg[9:8]   = {2{dmstatus_halted}};
-   assign dmstatus_reg[3:0]   = 4'h2;
-
-   assign dmstatus_resumeack_wren = ((dbg_state == RESUMING) & dec_tlu_resume_ack) | (dmstatus_resumeack & resumereq & dmstatus_halted);
-   assign dmstatus_resumeack_din  = (dbg_state == RESUMING) & dec_tlu_resume_ack;
-
-   assign dmstatus_haveresetn_wren  = (dmi_reg_addr == 7'h10) & dmi_reg_wdata[28] & dmi_reg_en & dmi_reg_wr_en & dmcontrol_reg[0];   // clear the havereset
-   assign dmstatus_havereset        = ~dmstatus_haveresetn;
-
-   assign dmstatus_unavail = dmcontrol_reg[1] | ~rst_l;
-   assign dmstatus_running = ~(dmstatus_unavail | dmstatus_halted);
-
-   rvdffs  #(1) dmstatus_resumeack_reg  (.din(dmstatus_resumeack_din), .dout(dmstatus_resumeack), .en(dmstatus_resumeack_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff   #(1) dmstatus_halted_reg     (.din(dec_tlu_dbg_halted & ~dec_tlu_mpc_halted_only),     .dout(dmstatus_halted), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs  #(1) dmstatus_haveresetn_reg (.din(1'b1), .dout(dmstatus_haveresetn), .en(dmstatus_haveresetn_wren), .rst_l(rst_l), .clk(dbg_free_clk));
-
-   // haltsum0 register
-   assign haltsum0_reg[31:1] = '0;
-   assign haltsum0_reg[0]    = dmstatus_halted;
-
-   // abstractcs register
-   // bits implemted are [12] - busy and [10:8]= command error
-   assign        abstractcs_reg[31:13] = '0;
-   assign        abstractcs_reg[11]    = '0;
-   assign        abstractcs_reg[7:4]   = '0;
-   assign        abstractcs_reg[3:0]   = 4'h2;    // One data register
-
-   assign        abstractcs_error_sel0 = abstractcs_reg[12] & ~(|abstractcs_reg[10:8]) & dmi_reg_en & ((dmi_reg_wr_en & ((dmi_reg_addr == 7'h16) | (dmi_reg_addr == 7'h17)) | (dmi_reg_addr == 7'h18)) |
-                                                                                                       (dmi_reg_addr == 7'h4) | (dmi_reg_addr == 7'h5));
-   assign        abstractcs_error_sel1 = execute_command & ~(|abstractcs_reg[10:8]) &
-                                         ((~((command_reg[31:24] == 8'b0) | (command_reg[31:24] == 8'h2)))                      |   // Illegal command
-                                          (((command_reg[22:20] == 3'b011) | (command_reg[22])) & (command_reg[31:24] == 8'h2)) |   // Illegal abstract memory size (can't be DW or higher)
-                                          ((command_reg[22:20] != 3'b010) & ((command_reg[31:24] == 8'h0) & command_reg[17]))   |   // Illegal abstract reg size
-                                          ((command_reg[31:24] == 8'h0) & command_reg[18]));                                          //postexec for abstract register access
-   assign        abstractcs_error_seb1 = ((core_dbg_cmd_done & core_dbg_cmd_fail) |                   // exception from core
-                                          (execute_command & (command_reg[31:24] == 8'h0) &           // unimplemented regs
-                                                (((command_reg[15:12] == 4'h1) & (command_reg[11:5] != 0)) | (command_reg[15:13] != 0)))) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel3 = execute_command & (dbg_state != HALTED) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel4 = dbg_sb_bus_error & dbg_bus_clk_en & ~(|abstractcs_reg[10:8]);// sb bus error for abstract memory command
-   assign        abstractcs_error_sel5 = execute_command & (command_reg[31:24] == 8'h2) & ~(|abstractcs_reg[10:8]) &
-                                         (((command_reg[22:20] == 3'b001) & data1_reg[0]) | ((command_reg[22:20] == 3'b010) & (|data1_reg[1:0])));  //Unaligned address for abstract memory
-   assign        abstractcs_error_sel6 = (dmi_reg_addr ==  7'h16) & dmi_reg_en & dmi_reg_wr_en;
-
-   assign        abstractcs_error_din[2:0]  = abstractcs_error_sel0 ? 3'b001 :                  // writing command or abstractcs while a command was executing. Or accessing data0
-                                                 abstractcs_error_sel1 ? 3'b010 :               // writing a illegal command type to cmd field of command
-                                                    abstractcs_error_seb1 ? 3'b011 :            // exception while running command
-                                                       abstractcs_error_sel3 ? 3'b100 :         // writing a comnand when not in the halted state
-                                                          abstractcs_error_sel4 ? 3'b101 :      // Bus error
-                                                             abstractcs_error_sel5 ? 3'b111 :   // unaligned or illegal size abstract memory command
-                                                                abstractcs_error_sel6 ? (~dmi_reg_wdata[10:8] & abstractcs_reg[10:8]) :   //W1C
-                                                                                        abstractcs_reg[10:8];                             //hold
-
-   rvdffs #(1) dmabstractcs_busy_reg  (.din(abstractcs_busy_din), .dout(abstractcs_reg[12]), .en(abstractcs_busy_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff  #(3) dmabstractcs_error_reg (.din(abstractcs_error_din[2:0]), .dout(abstractcs_reg[10:8]), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-    // abstract auto reg
-   assign abstractauto_reg_wren  = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h18) & ~abstractcs_reg[12];
-   rvdffs #(2) dbg_abstractauto_reg (.*, .din(dmi_reg_wdata[1:0]), .dout(abstractauto_reg[1:0]), .en(abstractauto_reg_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // command register - implemented all the bits in this register
-   // command[16] = 1: write, 0: read
-   assign execute_command_ns = command_wren |
-                               (dmi_reg_en & ~abstractcs_reg[12] & (((dmi_reg_addr == 7'h4) & abstractauto_reg[0]) | ((dmi_reg_addr == 7'h5) & abstractauto_reg[1])));
-   assign command_wren = (dmi_reg_addr ==  7'h17) & dmi_reg_en & dmi_reg_wr_en;
-   assign command_regno_wren = command_wren | ((command_reg[31:24] == 8'h0) & command_reg[19] & (dbg_state == CMD_DONE) & ~(|abstractcs_reg[10:8]));  // aarpostincrement
-   assign command_postexec_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[18];
-   assign command_transfer_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[17];
-   assign command_din[31:16] = {dmi_reg_wdata[31:24],1'b0,dmi_reg_wdata[22:19],command_postexec_din,command_transfer_din, dmi_reg_wdata[16]};
-   assign command_din[15:0] =  command_wren ? dmi_reg_wdata[15:0] : dbg_cmd_next_addr[15:0];
-   rvdff  #(1)  execute_commandff   (.*, .din(execute_command_ns), .dout(execute_command), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_reg       (.*, .din(command_din[31:16]), .dout(command_reg[31:16]), .en(command_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_regno_reg (.*, .din(command_din[15:0]),  .dout(command_reg[15:0]),  .en(command_regno_wren), .rst_l(dbg_dm_rst_l));
-
-  // data0 reg
-   assign data0_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h4) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data0_reg_wren1   = core_dbg_cmd_done & (dbg_state == CORE_CMD_WAIT) & ~command_reg[16];
-   assign data0_reg_wren    = data0_reg_wren0 | data0_reg_wren1 | data0_reg_wren2;
-
-   assign data0_din[31:0]   = ({32{data0_reg_wren0}} & dmi_reg_wdata[31:0])   |
-                              ({32{data0_reg_wren1}} & core_dbg_rddata[31:0]) |
-                              ({32{data0_reg_wren2}} & sb_bus_rdata[31:0]);
-
-   rvdffe #(32) dbg_data0_reg (.*, .din(data0_din[31:0]), .dout(data0_reg[31:0]), .en(data0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   // data 1
-   assign data1_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h5) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data1_reg_wren1   = (dbg_state == CMD_DONE) & (command_reg[31:24] == 8'h2) & command_reg[19] & ~(|abstractcs_reg[10:8]);   // aampostincrement
-   assign data1_reg_wren    = data1_reg_wren0 | data1_reg_wren1;
-
-   assign data1_din[31:0]   = ({32{data1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                              ({32{data1_reg_wren1}} & dbg_cmd_next_addr[31:0]);
-
-   rvdffe #(32)    dbg_data1_reg    (.*, .din(data1_din[31:0]), .dout(data1_reg[31:0]), .en(data1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   rvdffs #(1) sb_abmem_cmd_doneff  (.din(sb_abmem_cmd_done_in),  .dout(sb_abmem_cmd_done),  .en(sb_abmem_cmd_done_en),  .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-   rvdffs #(1) sb_abmem_data_doneff (.din(sb_abmem_data_done_in), .dout(sb_abmem_data_done), .en(sb_abmem_data_done_en), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-
-   // FSM to control the debug mode entry, command send/recieve, and Resume flow.
-   always_comb begin
-      dbg_nxtstate            = IDLE;
-      dbg_state_en            = 1'b0;
-      abstractcs_busy_wren    = 1'b0;
-      abstractcs_busy_din     = 1'b0;
-      dbg_halt_req            = dmcontrol_wren_Q & dmcontrol_reg[31];      // single pulse output to the core. Need to drive every time this register is written since core might be halted due to MPC
-      dbg_resume_req          = 1'b0;                                      // single pulse output to the core
-      dbg_sb_bus_error        = 1'b0;
-      data0_reg_wren2         = 1'b0;
-      sb_abmem_cmd_done_in    = 1'b0;
-      sb_abmem_data_done_in   = 1'b0;
-      sb_abmem_cmd_done_en    = 1'b0;
-      sb_abmem_data_done_en   = 1'b0;
-
-       case (dbg_state)
-            IDLE: begin
-                     dbg_nxtstate         = (dmstatus_reg[9] | dec_tlu_mpc_halted_only) ? HALTED : HALTING;         // initiate the halt command to the core
-                     dbg_state_en         = dmcontrol_reg[31] | dmstatus_reg[9] | dec_tlu_mpc_halted_only;      // when the jtag writes the halt bit in the DM register, OR when the status indicates H
-                     dbg_halt_req         = dmcontrol_reg[31];               // only when jtag has written the halt_req bit in the control. Removed debug mode qualification during MPC changes
-            end
-            HALTING : begin
-                     dbg_nxtstate         = HALTED;                                 // Goto HALTED once the core sends an ACK
-                     dbg_state_en         = dmstatus_reg[9] | dec_tlu_mpc_halted_only;     // core indicates halted
-            end
-            HALTED: begin
-                     // wait for halted to go away before send to resume. Else start of new command
-                     dbg_nxtstate         = dmstatus_reg[9] ? (resumereq ? RESUMING : (((command_reg[31:24] == 8'h2) & abmem_addr_external) ? SB_CMD_START : CORE_CMD_START)) :
-                                                                                    (dmcontrol_reg[31] ? HALTING : IDLE);       // This is MPC halted case
-                     dbg_state_en         = (dmstatus_reg[9] & resumereq) | execute_command | ~(dmstatus_reg[9] | dec_tlu_mpc_halted_only);
-                     abstractcs_busy_wren = dbg_state_en & ((dbg_nxtstate == CORE_CMD_START) | (dbg_nxtstate == SB_CMD_START));                 // write busy when a new command was written by jtag
-                     abstractcs_busy_din  = 1'b1;
-                     dbg_resume_req       = dbg_state_en & (dbg_nxtstate == RESUMING);                       // single cycle pulse to core if resuming
-            end
-            CORE_CMD_START: begin
-                     // Don't execute the command if cmderror or transfer=0 for abstract register access
-                     dbg_nxtstate         = ((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17])) ? CMD_DONE : CORE_CMD_WAIT;     // new command sent to the core
-                     dbg_state_en         = dbg_cmd_valid | (|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]);
-            end
-            CORE_CMD_WAIT: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = core_dbg_cmd_done;                   // go to done state for one cycle after completing current command
-            end
-            SB_CMD_START: begin
-                     dbg_nxtstate         = (|abstractcs_reg[10:8]) ? CMD_DONE : SB_CMD_SEND;
-                     dbg_state_en         = (dbg_bus_clk_en & ~sb_cmd_pending) | (|abstractcs_reg[10:8]);
-            end
-            SB_CMD_SEND: begin
-                     sb_abmem_cmd_done_in = 1'b1;
-                     sb_abmem_data_done_in= 1'b1;
-                     sb_abmem_cmd_done_en = (sb_bus_cmd_read | sb_bus_cmd_write_addr) & dbg_bus_clk_en;
-                     sb_abmem_data_done_en= (sb_bus_cmd_read | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-                     dbg_nxtstate         = SB_CMD_RESP;
-                     dbg_state_en         = (sb_abmem_cmd_done | sb_abmem_cmd_done_en) & (sb_abmem_data_done | sb_abmem_data_done_en) & dbg_bus_clk_en;
-            end
-            SB_CMD_RESP: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = (sb_bus_rsp_read | sb_bus_rsp_write) & dbg_bus_clk_en;
-                     dbg_sb_bus_error     = (sb_bus_rsp_read | sb_bus_rsp_write) & sb_bus_rsp_error & dbg_bus_clk_en;
-                     data0_reg_wren2      = dbg_state_en & ~sb_abmem_cmd_write & ~dbg_sb_bus_error;
-            end
-            CMD_DONE: begin
-                     dbg_nxtstate         = HALTED;
-                     dbg_state_en         = 1'b1;
-                     abstractcs_busy_wren = dbg_state_en;                    // remove the busy bit from the abstracts ( bit 12 )
-                     abstractcs_busy_din  = 1'b0;
-                     sb_abmem_cmd_done_in = 1'b0;
-                     sb_abmem_data_done_in= 1'b0;
-                     sb_abmem_cmd_done_en = 1'b1;
-                     sb_abmem_data_done_en= 1'b1;
-            end
-            RESUMING : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = dmstatus_reg[17];             // resume ack has been updated in the dmstatus register
-           end
-           default : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = 1'b0;
-                     abstractcs_busy_wren    = 1'b0;
-                     abstractcs_busy_din     = 1'b0;
-                     dbg_halt_req            = 1'b0;         // single pulse output to the core
-                     dbg_resume_req          = 1'b0;         // single pulse output to the core
-                     dbg_sb_bus_error        = 1'b0;
-                     data0_reg_wren2         = 1'b0;
-                     sb_abmem_cmd_done_in    = 1'b0;
-                     sb_abmem_data_done_in   = 1'b0;
-                     sb_abmem_cmd_done_en    = 1'b0;
-                     sb_abmem_data_done_en   = 1'b0;
-          end
-         endcase
-   end // always_comb begin
-
-   assign dmi_reg_rdata_din[31:0] = ({32{dmi_reg_addr == 7'h4}}  & data0_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h5}}  & data1_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h10}} & {2'b0,dmcontrol_reg[29],1'b0,dmcontrol_reg[27:0]})  |  // Read0 to Write only bits
-                                    ({32{dmi_reg_addr == 7'h11}} & dmstatus_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h16}} & abstractcs_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h17}} & command_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h18}} & {30'h0,abstractauto_reg[1:0]})    |
-                                    ({32{dmi_reg_addr == 7'h40}} & haltsum0_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h38}} & sbcs_reg[31:0])       |
-                                    ({32{dmi_reg_addr == 7'h39}} & sbaddress0_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h3c}} & sbdata0_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h3d}} & sbdata1_reg[31:0]);
-
-
-   rvdffs #($bits(state_t)) dbg_state_reg    (.din(dbg_nxtstate), .dout({dbg_state}), .en(dbg_state_en), .rst_l(dbg_dm_rst_l & rst_l), .clk(dbg_free_clk));
-   rvdffe #(32)             dmi_rddata_reg   (.din(dmi_reg_rdata_din[31:0]), .dout(dmi_reg_rdata[31:0]), .en(dmi_reg_en), .rst_l(dbg_dm_rst_l), .clk(clk), .*);
-
-   assign abmem_addr[31:0]      = data1_reg[31:0];
-   assign abmem_addr_core_local = (abmem_addr_in_dccm_region | abmem_addr_in_iccm_region | abmem_addr_in_pic_region);
-   assign abmem_addr_external   = ~abmem_addr_core_local;
-
-   assign abmem_addr_in_dccm_region = (abmem_addr[31:28] == pt.DCCM_REGION) & pt.DCCM_ENABLE;
-   assign abmem_addr_in_iccm_region = (abmem_addr[31:28] == pt.ICCM_REGION) & pt.ICCM_ENABLE;
-   assign abmem_addr_in_pic_region  = (abmem_addr[31:28] == pt.PIC_REGION);
-
-   // interface for the core
-   assign dbg_cmd_addr[31:0]    = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {20'b0, command_reg[11:0]};
-   assign dbg_cmd_wrdata[31:0]  = data0_reg[31:0];
-   assign dbg_cmd_valid         = (dbg_state == CORE_CMD_START) & ~((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]) | ((command_reg[31:24] == 8'h2) & abmem_addr_external)) & dma_dbg_ready;
-   assign dbg_cmd_write         = command_reg[16];
-   assign dbg_cmd_type[1:0]     = (command_reg[31:24] == 8'h2) ? 2'b10 : {1'b0, (command_reg[15:12] == 4'b0)};
-   assign dbg_cmd_size[1:0]     = command_reg[21:20];
-
-   assign dbg_cmd_addr_incr[3:0]  = (command_reg[31:24] == 8'h2) ? (4'h1 << sb_abmem_cmd_size[1:0]) : 4'h1;
-   assign dbg_cmd_curr_addr[31:0] = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {16'b0, command_reg[15:0]};
-   assign dbg_cmd_next_addr[31:0] = dbg_cmd_curr_addr[31:0] + {28'h0,dbg_cmd_addr_incr[3:0]};
-
-   // Ask DMA to stop taking bus trxns since debug request is done
-   assign dbg_dma_bubble = ((dbg_state == CORE_CMD_START) & ~(|abstractcs_reg[10:8])) | (dbg_state == CORE_CMD_WAIT);
-
-   assign sb_cmd_pending       = (sb_state == CMD_RD) | (sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR) | (sb_state == CMD_WR_DATA) | (sb_state == RSP_RD) | (sb_state == RSP_WR);
-   assign sb_abmem_cmd_pending = (dbg_state == SB_CMD_START) | (dbg_state == SB_CMD_SEND) | (dbg_state== SB_CMD_RESP);
-
-
-  // system bus FSM
-  always_comb begin
-      sb_nxtstate            = SBIDLE;
-      sb_state_en            = 1'b0;
-      sbcs_sbbusy_wren       = 1'b0;
-      sbcs_sbbusy_din        = 1'b0;
-      sbcs_sberror_wren      = 1'b0;
-      sbcs_sberror_din[2:0]  = 3'b0;
-      sbaddress0_reg_wren1   = 1'b0;
-      case (sb_state)
-            SBIDLE: begin
-                     sb_nxtstate            = sbdata0wr_access ? WAIT_WR : WAIT_RD;
-                     sb_state_en            = (sbdata0wr_access | sbreadondata_access | sbreadonaddr_access) & ~(|sbcs_reg[14:12]) & ~sbcs_reg[22];
-                     sbcs_sbbusy_wren       = sb_state_en;                                                 // set the single read bit if it is a singlread command
-                     sbcs_sbbusy_din        = 1'b1;
-                     sbcs_sberror_wren      = sbcs_wren & (|dmi_reg_wdata[14:12]);                                            // write to clear the error bits
-                     sbcs_sberror_din[2:0]  = ~dmi_reg_wdata[14:12] & sbcs_reg[14:12];
-            end
-            WAIT_RD: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_RD;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            WAIT_WR: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_WR;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            CMD_RD : begin
-                     sb_nxtstate           = RSP_RD;
-                     sb_state_en           = sb_bus_cmd_read & dbg_bus_clk_en;
-            end
-            CMD_WR : begin
-                     sb_nxtstate           = (sb_bus_cmd_write_addr & sb_bus_cmd_write_data) ? RSP_WR : (sb_bus_cmd_write_data ? CMD_WR_ADDR : CMD_WR_DATA);
-                     sb_state_en           = (sb_bus_cmd_write_addr | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-            end
-            CMD_WR_ADDR : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_addr & dbg_bus_clk_en;
-            end
-            CMD_WR_DATA : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_data & dbg_bus_clk_en;
-            end
-            RSP_RD: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_read & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            RSP_WR: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_write & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            DONE: begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b1;
-                     sbcs_sbbusy_wren       = 1'b1;                           // reset the single read
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbaddress0_reg_wren1   = sbcs_reg[16] & (sbcs_reg[14:12] == 3'b0);    // auto increment was set and no error. Update to new address after completing the current command
-            end
-            default : begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b0;
-                     sbcs_sbbusy_wren       = 1'b0;
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbcs_sberror_wren      = 1'b0;
-                     sbcs_sberror_din[2:0]  = 3'b0;
-                     sbaddress0_reg_wren1   = 1'b0;
-           end
-         endcase
-   end // always_comb begin
-
-   rvdffs #($bits(sb_state_t)) sb_state_reg (.din(sb_nxtstate), .dout({sb_state}), .en(sb_state_en), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sb_abmem_cmd_write      = command_reg[16];
-   assign sb_abmem_cmd_size[2:0]  = {1'b0, command_reg[21:20]};
-   assign sb_abmem_cmd_addr[31:0] = abmem_addr[31:0];
-   assign sb_abmem_cmd_wdata[31:0] = data0_reg[31:0];
-
-   assign sb_cmd_size[2:0]   = sbcs_reg[19:17];
-   assign sb_cmd_wdata[63:0] = {sbdata1_reg[31:0], sbdata0_reg[31:0]};
-   assign sb_cmd_addr[31:0]  = sbaddress0_reg[31:0];
-
-   assign sb_abmem_cmd_awvalid    = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_cmd_done;
-   assign sb_abmem_cmd_wvalid     = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_data_done;
-   assign sb_abmem_cmd_arvalid    = (dbg_state == SB_CMD_SEND) & ~sb_abmem_cmd_write & ~sb_abmem_cmd_done & ~sb_abmem_data_done;
-   assign sb_abmem_read_pend      = (dbg_state == SB_CMD_RESP) & ~sb_abmem_cmd_write;
-
-   assign sb_cmd_awvalid     = ((sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR));
-   assign sb_cmd_wvalid      = ((sb_state == CMD_WR) | (sb_state == CMD_WR_DATA));
-   assign sb_cmd_arvalid     = (sb_state == CMD_RD);
-   assign sb_read_pend       = (sb_state == RSP_RD);
-
-   assign sb_axi_size[2:0]    = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_size[2:0] : sb_cmd_size[2:0];
-   assign sb_axi_addr[31:0]   = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_addr[31:0] : sb_cmd_addr[31:0];
-   assign sb_axi_wrdata[63:0] = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid) ? {2{sb_abmem_cmd_wdata[31:0]}} : sb_cmd_wdata[63:0];
-
-   // Generic bus response signals
-   assign sb_bus_cmd_read       = sb_axi_arvalid & sb_axi_arready;
-   assign sb_bus_cmd_write_addr = sb_axi_awvalid & sb_axi_awready;
-   assign sb_bus_cmd_write_data = sb_axi_wvalid  & sb_axi_wready;
-
-   assign sb_bus_rsp_read  = sb_axi_rvalid & sb_axi_rready;
-   assign sb_bus_rsp_write = sb_axi_bvalid & sb_axi_bready;
-   assign sb_bus_rsp_error = (sb_bus_rsp_read & (|(sb_axi_rresp[1:0]))) | (sb_bus_rsp_write & (|(sb_axi_bresp[1:0])));
-
-   // AXI Request signals
-   assign sb_axi_awvalid              = sb_abmem_cmd_awvalid | sb_cmd_awvalid;
-   assign sb_axi_awaddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_awid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_awsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_awprot[2:0]          = 3'b001;
-   assign sb_axi_awcache[3:0]         = 4'b1111;
-   assign sb_axi_awregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_awlen[7:0]           = '0;
-   assign sb_axi_awburst[1:0]         = 2'b01;
-   assign sb_axi_awqos[3:0]           = '0;
-   assign sb_axi_awlock               = '0;
-
-   assign sb_axi_wvalid       = sb_abmem_cmd_wvalid | sb_cmd_wvalid;
-   assign sb_axi_wdata[63:0]  = ({64{(sb_axi_size[2:0] == 3'h0)}} & {8{sb_axi_wrdata[7:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h1)}} & {4{sb_axi_wrdata[15:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h2)}} & {2{sb_axi_wrdata[31:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h3)}} & {sb_axi_wrdata[63:0]});
-   assign sb_axi_wstrb[7:0]   = ({8{(sb_axi_size[2:0] == 3'h0)}} & (8'h1 << sb_axi_addr[2:0])) |
-                                ({8{(sb_axi_size[2:0] == 3'h1)}} & (8'h3 << {sb_axi_addr[2:1],1'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h2)}} & (8'hf << {sb_axi_addr[2],2'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h3)}} & 8'hff);
-   assign sb_axi_wlast        = '1;
-
-   assign sb_axi_arvalid              = sb_abmem_cmd_arvalid | sb_cmd_arvalid;
-   assign sb_axi_araddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_arid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_arsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_arprot[2:0]          = 3'b001;
-   assign sb_axi_arcache[3:0]         = 4'b0;
-   assign sb_axi_arregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_arlen[7:0]           = '0;
-   assign sb_axi_arburst[1:0]         = 2'b01;
-   assign sb_axi_arqos[3:0]           = '0;
-   assign sb_axi_arlock               = '0;
-
-   // AXI Response signals
-   assign sb_axi_bready = 1'b1;
-
-   assign sb_axi_rready = 1'b1;
-   assign sb_bus_rdata[63:0] = ({64{sb_axi_size == 3'h0}} & ((sb_axi_rdata[63:0] >>  8*sb_axi_addr[2:0]) & 64'hff))       |
-                               ({64{sb_axi_size == 3'h1}} & ((sb_axi_rdata[63:0] >> 16*sb_axi_addr[2:1]) & 64'hffff))    |
-                               ({64{sb_axi_size == 3'h2}} & ((sb_axi_rdata[63:0] >> 32*sb_axi_addr[2]) & 64'hffff_ffff)) |
-                               ({64{sb_axi_size == 3'h3}} & sb_axi_rdata[63:0]);
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// dec: decode unit - decode, bypassing, ARF, interrupts
-//
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Decode
-// Comments: Decode, dependency scoreboard, ARF
-//
-//
-// A -> D -> EX1 ... WB
-//
-//********************************************************************************
-
-module eb1_dec
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_clk,                     // Clock always.                  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic lsu_fastint_stall_any,        // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-   output logic dec_extint_stall,            // Stall on external interrupt
-
-   output logic dec_i0_decode_d,             // Valid instruction at D-stage and not blocked
-   output logic dec_pause_state_cg,          // to top for active state clock gating
-
-   output logic dec_tlu_core_empty,
-
-   input logic rst_l,                        // reset, active low
-   input logic [31:1] rst_vec,               // reset vector, from core pins
-
-   input logic        nmi_int,               // NMI pin
-   input logic [31:1] nmi_vec,               // NMI vector, from pins
-
-   input logic  i_cpu_halt_req,              // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,               // Asynchronous Restart request to CPU
-
-   output logic o_cpu_halt_status,           // Halt status of core (pmu/fw)
-   output logic o_cpu_halt_ack,              // Halt request ack
-   output logic o_cpu_run_ack,               // Run request ack
-   output logic o_debug_mode_status,         // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id,               // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req,           // Async halt request
-   input logic mpc_debug_run_req,            // Async run request
-   input logic mpc_reset_run_req,            // Run/halt after reset
-   output logic mpc_debug_halt_ack,          // Halt ack
-   output logic mpc_debug_run_ack,           // Run ack
-   output logic debug_brkpt_status,          // debug breakpoint
-
-    input logic       exu_pmu_i0_br_misp,    // slot 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // slot 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // slot 0 4 byte branch
-
-
-   input logic                                lsu_nonblock_load_valid_m,      // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,        // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,        // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,    // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,   // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,   // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,     // -> corresponding tag
-   input logic [31:0]                         lsu_nonblock_load_data,         // nonblock load data
-
-   input logic       lsu_pmu_bus_trxn,           // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned,     // D side bus misaligned
-   input logic       lsu_pmu_bus_error,          // D side bus error
-   input logic       lsu_pmu_bus_busy,           // D side bus busy
-   input logic       lsu_pmu_misaligned_m,       // D side load or store misaligned
-   input logic       lsu_pmu_load_external_m,    // D side bus load
-   input logic       lsu_pmu_store_external_m,   // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr,          // Fast int address
-   input logic [1:0] lsu_fir_error,          // Fast int lookup error
-
-   input logic       ifu_pmu_instr_aligned,  // aligned instructions
-   input logic       ifu_pmu_fetch_stall,    // fetch unit stalled
-   input logic       ifu_pmu_ic_miss,        // icache miss
-   input logic       ifu_pmu_ic_hit,         // icache hit
-   input logic       ifu_pmu_bus_error,      // Instruction side bus error
-   input logic       ifu_pmu_bus_busy,       // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn,       // Instruction side bus transaction
-
-   input logic       ifu_ic_error_start,     // IC single bit error
-   input logic       ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-   input logic [3:0]  lsu_trigger_match_m,
-   input logic        dbg_cmd_valid,         // debugger abstract command valid
-   input logic        dbg_cmd_write,         // command is a write
-   input logic  [1:0] dbg_cmd_type,          // command type
-   input logic [31:0] dbg_cmd_addr,          // command address
-   input logic  [1:0] dbg_cmd_wrdata,        // command write data, for fence/fence_i
-
-
-   input logic        ifu_i0_icaf,           // icache access fault
-   input logic [1:0]  ifu_i0_icaf_type,      // icache access fault type
-
-   input logic   ifu_i0_icaf_second,         // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,               // icache/iccm double-bit error
-
-   input logic lsu_idle_any,                 // lsu idle for halting
-
-   input eb1_br_pkt_t i0_brp,                                  // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,            // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,           // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_lsu_error_pkt_t lsu_error_pkt_r,         // LSU exception/error packet
-   input logic         lsu_single_ecc_error_incr,      // LSU inc SB error counter
-
-   input logic         lsu_imprecise_error_load_any,   // LSU imprecise load bus error
-   input logic         lsu_imprecise_error_store_any,  // LSU imprecise store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any,   // LSU imprecise bus error address
-
-   input logic [31:0]  exu_div_result,      // final div result
-   input logic         exu_div_wren,        // Divide write enable to GPR
-
-   input logic [31:0] exu_csr_rs1_x,        // rs1 for csr instruction
-
-   input logic [31:0] lsu_result_m,         // load result
-   input logic [31:0] lsu_result_corr_r,    // load result - corrected load data
-
-   input logic        lsu_load_stall_any,   // This is for blocking loads
-   input logic        lsu_store_stall_any,  // This is for blocking stores
-   input logic        dma_dccm_stall_any,   // stall any load/store at decode, pmu event
-   input logic        dma_iccm_stall_any,   // iccm stalled, pmu event
-
-   input logic       iccm_dma_sb_error,     // ICCM DMA single bit error
-
-   input logic exu_flush_final,             // slot0 flush
-
-   input logic [31:1] exu_npc_r,            // next PC
-
-   input logic [31:0] exu_i0_result_x,      // alu result x
-
-
-   input logic         ifu_i0_valid,                  // fetch valids to instruction buffer
-   input logic [31:0]  ifu_i0_instr,                  // fetch inst's to instruction buffer
-   input logic [31:1]  ifu_i0_pc,                     // pc's for instruction buffer
-   input logic         ifu_i0_pc4,                    // indication of 4B or 2B for corresponding inst
-   input logic  [31:1] exu_i0_pc_x,                   // pc's for e1 from the alu's
-
-   input logic mexintpend,                            // External interrupt pending
-   input logic timer_int,                             // Timer interrupt pending (from pin)
-   input logic soft_int,                              // Software interrupt pending (from pin)
-
-   input logic [7:0] pic_claimid,                     // PIC claimid
-   input logic [3:0] pic_pl,                          // PIC priv level
-   input logic       mhwakeup,                        // High priority wakeup
-
-   output logic [3:0] dec_tlu_meicurpl,               // to PIC, Current priv level
-   output logic [3:0] dec_tlu_meipt,                  // to PIC
-
-   input logic [70:0] ifu_ic_debug_rd_data,           // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid,            // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-// Debug start
-   input logic dbg_halt_req,                 // DM requests a halt
-   input logic dbg_resume_req,               // DM requests a resume
-   input logic ifu_miss_state_idle,          // I-side miss buffer empty
-
-   output logic dec_tlu_dbg_halted,          // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode,          // Core is in debug mode
-   output logic dec_tlu_resume_ack,          // Resume acknowledge
-   output logic dec_tlu_flush_noredir_r,     // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only,     // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r,    // single step
-   output logic dec_tlu_flush_err_r,         // iside perr/ecc rfpc
-   output logic [31:2] dec_tlu_meihap,       // Fast ext int base
-
-   output logic dec_debug_wdata_rs1_d,       // insert debug write data into rs1 at decode
-
-   output logic [31:0] dec_dbg_rddata,       // debug command read data
-
-   output logic dec_dbg_cmd_done,            // abstract command is done
-   output logic dec_dbg_cmd_fail,            // abstract command failed (illegal reg address)
-
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // info needed by debug trigger blocks
-
-   output logic dec_tlu_force_halt,          // halt has been forced
-// Debug end
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r,             // history
-   input logic        exu_i0_br_error_r,            // error
-   input logic        exu_i0_br_start_error_r,      // start error
-   input logic        exu_i0_br_valid_r,            // valid
-   input logic        exu_i0_br_mp_r,               // mispredict
-   input logic        exu_i0_br_middle_r,           // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r,         // way hit or repl
-
-   output logic         dec_i0_rs1_en_d,            // Qualify GPR RS1 data
-   output logic         dec_i0_rs2_en_d,            // Qualify GPR RS2 data
-   output logic  [31:0] gpr_i0_rs1_d,               // gpr rs1 data
-   output logic  [31:0] gpr_i0_rs2_d,               // gpr rs2 data
-
-   output logic [31:0] dec_i0_immed_d,              // immediate data
-   output logic [12:1] dec_i0_br_immed_d,           // br immediate data
-
-   output        eb1_alu_pkt_t i0_ap,              // alu packet
-
-   output logic          dec_i0_alu_decode_d,       // schedule on D-stage alu
-   output logic          dec_i0_branch_d,           // Branch in D-stage
-
-   output logic          dec_i0_select_pc_d,        // select pc onto rs1 for jal's
-
-   output logic [31:1]  dec_i0_pc_d,                // pc's at decode
-   output logic [3:0]   dec_i0_rs1_bypass_en_d,     // rs1 bypass enable
-   output logic [3:0]   dec_i0_rs2_bypass_en_d,     // rs2 bypass enable
-
-   output logic [31:0]  dec_i0_result_r,            // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                  // lsu packet
-   output logic             dec_qual_lsu_d,         // LSU instruction at D.  Use to quiet LSU operands
-   output eb1_mul_pkt_t    mul_p,                  // mul packet
-   output eb1_div_pkt_t    div_p,                  // div packet
-   output logic             dec_div_cancel,         // cancel divide operation
-
-   output logic [11:0] dec_lsu_offset_d,            // 12b offset for load/store addresses
-
-   output logic        dec_csr_ren_d,               // CSR read enable
-   output logic [31:0] dec_csr_rddata_d,            // CSR read data
-
-   output logic        dec_tlu_flush_lower_r,       // tlu flush due to late mp, exception, rfpc, or int
-   output logic        dec_tlu_flush_lower_wb,
-   output logic [31:1] dec_tlu_flush_path_r,        // tlu flush target
-   output logic        dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic        dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-
-   output logic [31:1] pred_correct_npc_x,          // npc if prediction is correct at e2 stage
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt,      // slot 0 branch predictor update packet
-
-   output logic dec_tlu_perfcnt0,                   // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,                   // toggles when slot0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2,                   // toggles when slot0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3,                   // toggles when slot0 perf counter 3 has an event inc
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,                        // prediction packet to alus
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic dec_lsu_valid_raw_d,
-
-   output logic [31:0] dec_tlu_mrac_ff,              // CSR for memory region control
-
-   output logic [1:0] dec_data_en,                   // clock-gate control logic
-   output logic [1:0] dec_ctl_en,
-
-   input logic [15:0] ifu_i0_cinst,                  // 16b compressed instruction
-
-   output eb1_trace_pkt_t  trace_rv_trace_pkt,      // trace packet
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable,     // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable,           // disable core ECC
-   output logic  dec_tlu_bpred_disable,              // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,      // disable writebuffer coalescing
-   output logic [2:0]  dec_tlu_dma_qos_prty,         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override,          // override misc clock domain gating
-   output logic  dec_tlu_ifu_clk_override,           // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,           // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,           // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,           // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,         // override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override,          // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override,           // override ICCM clock domain gating
-
-   output logic  dec_tlu_i0_commit_cmt,              // committed i0 instruction
-   input  logic  scan_mode                           // Flop scan mode control
- 
-
-   );
-
-
-   logic  dec_tlu_dec_clk_override;      // to and from dec blocks
-   logic  clk_override;
-
-   logic               dec_ib0_valid_d;
-
-   logic               dec_pmu_instr_decoded;
-   logic               dec_pmu_decode_stall;
-   logic               dec_pmu_presync_stall;
-   logic               dec_pmu_postsync_stall;
-
-   logic dec_tlu_wr_pause_r;             // CSR write to pause reg is at R.
-
-   logic [4:0]  dec_i0_rs1_d;
-   logic [4:0]  dec_i0_rs2_d;
-
-   logic [31:0] dec_i0_instr_d;
-
-   logic  dec_tlu_trace_disable;
-   logic  dec_tlu_pipelining_disable;
-
-
-   logic [4:0]  dec_i0_waddr_r;
-   logic        dec_i0_wen_r;
-   logic [31:0] dec_i0_wdata_r;
-   logic        dec_csr_wen_r;           // csr write enable at wb
-   logic [11:0] dec_csr_wraddr_r;        // write address for csryes
-   logic [31:0] dec_csr_wrdata_r;        // csr write data at wb
-
-   logic [11:0] dec_csr_rdaddr_d;        // read address for csr
-   logic        dec_csr_legal_d;         // csr indicates legal operation
-
-   logic        dec_csr_wen_unq_d;       // valid csr with write - for csr legal
-   logic        dec_csr_any_unq_d;       // valid csr - for csr legal
-   logic        dec_csr_stall_int_ff;    // csr is mie/mstatus
-
-   eb1_trap_pkt_t dec_tlu_packet_r;
-
-   logic        dec_i0_pc4_d;
-   logic        dec_tlu_presync_d;
-   logic        dec_tlu_postsync_d;
-   logic        dec_tlu_debug_stall;
-
-   logic [31:0] dec_illegal_inst;
-
-   logic                      dec_i0_icaf_d;
-
-   logic                      dec_i0_dbecc_d;
-   logic                      dec_i0_icaf_second_d;
-   logic [3:0]                dec_i0_trigger_match_d;
-   logic                      dec_debug_fence_d;
-   logic                      dec_nonblock_load_wen;
-   logic [4:0]                dec_nonblock_load_waddr;
-   logic                      dec_tlu_flush_pause_r;
-   eb1_br_pkt_t                   dec_i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index;          // Fully associt btb index
-
-   logic [31:1]               dec_tlu_i0_pc_r;
-   logic                      dec_tlu_i0_kill_writeb_wb;
-   logic                      dec_tlu_i0_valid_r;
-
-   logic                      dec_pause_state;
-
-   logic [1:0]                dec_i0_icaf_type_d;   // i0 instruction access fault type
-
-   logic                      dec_tlu_flush_extint; // Fast ext int started
-
-   logic [31:0]               dec_i0_inst_wb;
-   logic [31:1]               dec_i0_pc_wb;
-   logic                      dec_tlu_i0_valid_wb1,  dec_tlu_int_valid_wb1;
-   logic [4:0]                dec_tlu_exc_cause_wb1;
-   logic [31:0]               dec_tlu_mtval_wb1;
-   logic                      dec_tlu_i0_exc_valid_wb1;
-
-   logic [4:0]                div_waddr_wb;
-   logic                      dec_div_active;
-
-   logic                      dec_debug_valid_d;
-
-
-// Adding signals for vector
-   
-   //logic stall_scalar;
-   
-   
-   
-   assign clk_override = dec_tlu_dec_clk_override;
-
-
-   assign dec_dbg_rddata[31:0] = dec_i0_wdata_r[31:0];
-
-
-   eb1_dec_ib_ctl #(.pt(pt)) instbuff (.*);
-
-
-   eb1_dec_decode_ctl #(.pt(pt)) decode (.*);
-
-
-   eb1_dec_tlu_ctl #(.pt(pt)) tlu (.*);
-
-
-   eb1_dec_gpr_ctl #(.pt(pt)) arf (.*,
-                    // inputs
-                    .raddr0(dec_i0_rs1_d[4:0]),
-                    .raddr1(dec_i0_rs2_d[4:0]),
-
-                    .wen0(dec_i0_wen_r),          .waddr0(dec_i0_waddr_r[4:0]),          .wd0(dec_i0_wdata_r[31:0]),
-                    .wen1(dec_nonblock_load_wen), .waddr1(dec_nonblock_load_waddr[4:0]), .wd1(lsu_nonblock_load_data[31:0]),
-                    .wen2(exu_div_wren),          .waddr2(div_waddr_wb),                 .wd2(exu_div_result[31:0]),
-
-                    // outputs
-                    .rd0(gpr_i0_rs1_d[31:0]), .rd1(gpr_i0_rs2_d[31:0])
-                    );
-
-
-// Trigger
-
-   eb1_dec_trigger #(.pt(pt)) dec_trigger (.*);
-
-
-
-
-// trace
-   assign trace_rv_trace_pkt.trace_rv_i_insn_ip      =   dec_i0_inst_wb[31:0];
-   assign trace_rv_trace_pkt.trace_rv_i_address_ip   = { dec_i0_pc_wb[31:1], 1'b0};
-
-   assign trace_rv_trace_pkt.trace_rv_i_valid_ip     = dec_tlu_int_valid_wb1 | dec_tlu_i0_valid_wb1 | dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_exception_ip = dec_tlu_int_valid_wb1 |  dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_ecause_ip    = dec_tlu_exc_cause_wb1[4:0];     // replicate across ports
-   assign trace_rv_trace_pkt.trace_rv_i_interrupt_ip = dec_tlu_int_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_tval_ip      = dec_tlu_mtval_wb1[31:0];        // replicate across ports
-
-
-
-// end trace
-
-
-endmodule // eb1_dec
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_dec_decode_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic dec_tlu_trace_disable,
-   input logic dec_debug_valid_d,
-
-   input logic dec_tlu_flush_extint,         // Flush external interrupt
-
-   input logic dec_tlu_force_halt,           // invalidate nonblock load cam on a force halt event
-
-   output logic dec_extint_stall,            // Stall from external interrupt
-
-   input  logic [15:0] ifu_i0_cinst,         // 16b compressed instruction
-   output logic [31:0] dec_i0_inst_wb,       // 32b instruction at wb+1 for trace encoder
-   output logic [31:1] dec_i0_pc_wb,         // 31b pc at wb+1 for trace encoder
-
-
-   input logic                                lsu_nonblock_load_valid_m,       // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,         // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,         // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,     // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,    // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,    // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,      // -> corresponding tag
-
-
-   input logic [3:0] dec_i0_trigger_match_d,          // i0 decode trigger matches
-
-   input logic dec_tlu_wr_pause_r,                    // pause instruction at r
-   input logic dec_tlu_pipelining_disable,            // pipeline disable - presync, i0 decode only
-
-   input logic [3:0]  lsu_trigger_match_m,            // lsu trigger matches
-
-   input logic lsu_pmu_misaligned_m,                  // perf mon: load/store misalign
-   input logic dec_tlu_debug_stall,                   // debug stall decode
-   input logic dec_tlu_flush_leak_one_r,              // leak1 instruction
-
-   input logic dec_debug_fence_d,                     // debug fence instruction
-
-   input logic [1:0] dbg_cmd_wrdata,                  // disambiguate fence, fence_i
-
-   input logic dec_i0_icaf_d,                         // icache access fault
-   input logic dec_i0_icaf_second_d,                  // i0 instruction access fault on second 2B of 4B inst
-   input logic [1:0] dec_i0_icaf_type_d,              // i0 instruction access fault type
-
-   input logic dec_i0_dbecc_d,                        // icache/iccm double-bit error
-
-   input eb1_br_pkt_t dec_i0_brp,                    // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   input logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,  // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag, // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   input logic lsu_idle_any,                          // lsu idle: if fence instr & ~lsu_idle then stall decode
-
-   input logic lsu_load_stall_any,                    // stall any load at decode
-   input logic lsu_store_stall_any,                   // stall any store at decode
-   input logic dma_dccm_stall_any,                    // stall any load/store at decode
-
-   input logic exu_div_wren,                          // nonblocking divide write enable to GPR.
-
-   input logic dec_tlu_i0_kill_writeb_wb,             // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_wb,                // trap lower flush
-   input logic dec_tlu_i0_kill_writeb_r,              // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_r,                 // trap lower flush
-   input logic dec_tlu_flush_pause_r,                 // don't clear pause state on initial lower flush
-   input logic dec_tlu_presync_d,                     // CSR read needs to be presync'd
-   input logic dec_tlu_postsync_d,                    // CSR ops that need to be postsync'd
-
-   input logic dec_i0_pc4_d,                          // inst is 4B inst else 2B
-
-   input logic [31:0] dec_csr_rddata_d,               // csr read data at wb
-   input logic dec_csr_legal_d,                       // csr indicates legal operation
-
-   input logic [31:0] exu_csr_rs1_x,                  // rs1 for csr instr
-
-   input logic [31:0] lsu_result_m,                   // load result
-   input logic [31:0] lsu_result_corr_r,              // load result - corrected data for writing gpr's, not for bypassing
-
-   input logic exu_flush_final,                       // lower flush or i0 flush at X or D
-
-   input logic [31:1] exu_i0_pc_x,                    // pcs at e1
-
-   input logic [31:0] dec_i0_instr_d,                 // inst at decode
-
-   input logic  dec_ib0_valid_d,                      // inst valid at decode
-
-   input logic [31:0] exu_i0_result_x,                // from primary alu's
-
-   input logic  clk,                                  // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic  active_clk,                           // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic  free_l2clk,                           // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic  clk_override,                         // Override non-functional clock gating
-   input logic  rst_l,                                // Flop reset
-
-
-
-   output logic        dec_i0_rs1_en_d,               // rs1 enable at decode
-   output logic        dec_i0_rs2_en_d,               // rs2 enable at decode
-
-   output logic [4:0]  dec_i0_rs1_d,                  // rs1 logical source
-   output logic [4:0]  dec_i0_rs2_d,                  // rs2 logical source
-
-   output logic [31:0] dec_i0_immed_d,                // 32b immediate data decode
-
-
-   output logic [12:1] dec_i0_br_immed_d,             // 12b branch immediate
-
-   output eb1_alu_pkt_t i0_ap,                       // alu packets
-
-   output logic        dec_i0_decode_d,               // i0 decode
-
-   output logic        dec_i0_alu_decode_d,           // decode to D-stage alu
-   output logic        dec_i0_branch_d,               // Branch in D-stage
-
-   output logic [4:0]  dec_i0_waddr_r,                // i0 logical source to write to gpr's
-   output logic        dec_i0_wen_r,                  // i0 write enable
-   output logic [31:0] dec_i0_wdata_r,                // i0 write data
-
-   output logic        dec_i0_select_pc_d,            // i0 select pc for rs1 - branches
-
-   output logic [3:0]    dec_i0_rs1_bypass_en_d,      // i0 rs1 bypass enable
-   output logic [3:0]    dec_i0_rs2_bypass_en_d,      // i0 rs2 bypass enable
-   output logic [31:0]   dec_i0_result_r,             // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                    // load/store packet
-   output logic             dec_qual_lsu_d,           // LSU instruction at D.  Use to quiet LSU operands
-
-   output eb1_mul_pkt_t    mul_p,                    // multiply packet
-
-   output eb1_div_pkt_t    div_p,                    // divide packet
-   output logic [4:0]       div_waddr_wb,             // DIV write address to GPR
-   output logic             dec_div_cancel,           // cancel the divide operation
-
-   output logic        dec_lsu_valid_raw_d,
-   output logic [11:0] dec_lsu_offset_d,
-
-   output logic        dec_csr_ren_d,                 // valid csr decode
-   output logic        dec_csr_wen_unq_d,             // valid csr with write - for csr legal
-   output logic        dec_csr_any_unq_d,             // valid csr - for csr legal
-   output logic [11:0] dec_csr_rdaddr_d,              // read address for csr
-   output logic        dec_csr_wen_r,                 // csr write enable at r
-   output logic [11:0] dec_csr_wraddr_r,              // write address for csr
-   output logic [31:0] dec_csr_wrdata_r,              // csr write data at r
-   output logic        dec_csr_stall_int_ff,          // csr is mie/mstatus
-
-   output              dec_tlu_i0_valid_r,            // i0 valid inst at c
-
-   output eb1_trap_pkt_t   dec_tlu_packet_r,              // trap packet
-
-   output logic [31:1] dec_tlu_i0_pc_r,               // i0 trap pc
-
-   output logic [31:0] dec_illegal_inst,              // illegal inst
-   output logic [31:1] pred_correct_npc_x,            // npc e2 if the prediction is correct
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,      // i0 predict packet decode
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d, // i0 predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d, // i0 predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d, // i0_predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic [1:0] dec_data_en,                    // clock-gating logic
-   output logic [1:0] dec_ctl_en,
-
-   output logic       dec_pmu_instr_decoded,          // number of instructions decode this cycle encoded
-   output logic       dec_pmu_decode_stall,           // decode is stalled
-   output logic       dec_pmu_presync_stall,          // decode has presync stall
-   output logic       dec_pmu_postsync_stall,         // decode has postsync stall
-
-   output logic       dec_nonblock_load_wen,          // write enable for nonblock load
-   output logic [4:0] dec_nonblock_load_waddr,        // logical write addr for nonblock load
-   output logic       dec_pause_state,                // core in pause state
-   output logic       dec_pause_state_cg,             // pause state for clock-gating
-
-   output logic       dec_div_active,                 // non-block divide is active
-
-   input  logic       scan_mode
-   
-   );
-
-
-
-
-   eb1_dec_pkt_t           i0_dp_raw, i0_dp;
-
-   logic [31:0]        i0;
-   logic               i0_valid_d;
-
-   logic [31:0]        i0_result_r;
-
-   logic [2:0]         i0_rs1bypass, i0_rs2bypass;
-
-   logic               i0_jalimm20;
-   logic               i0_uiimm20;
-
-   logic               lsu_decode_d;
-   logic [31:0]        i0_immed_d;
-   logic               i0_presync;
-   logic               i0_postsync;
-
-   logic               postsync_stall;
-   logic               ps_stall;
-
-   logic               prior_inflight, prior_inflight_wb;
-
-   logic               csr_clr_d, csr_set_d, csr_write_d;
-
-   logic               csr_clr_x,csr_set_x,csr_write_x,csr_imm_x;
-   logic [31:0]        csr_mask_x;
-   logic [31:0]        write_csr_data_x;
-   logic [31:0]        write_csr_data_in;
-   logic [31:0]        write_csr_data;
-   logic               csr_data_wen;
-
-   logic [4:0]         csrimm_x;
-
-   logic [31:0]        csr_rddata_x;
-
-   logic               mul_decode_d;
-   logic               div_decode_d;
-   logic               div_e1_to_r;
-   logic               div_flush;
-   logic               div_active_in;
-   logic               div_active;
-   logic               i0_nonblock_div_stall;
-   logic               i0_div_prior_div_stall;
-   logic               nonblock_div_cancel;
-
-   logic               i0_legal;
-   logic               shift_illegal;
-   logic               illegal_inst_en;
-   logic               illegal_lockout_in, illegal_lockout;
-   logic               i0_legal_decode_d;
-   logic               i0_exulegal_decode_d, i0_exudecode_d, i0_exublock_d;
-
-   logic [12:1]        last_br_immed_d;
-   logic               i0_rs1_depend_i0_x, i0_rs1_depend_i0_r;
-   logic               i0_rs2_depend_i0_x, i0_rs2_depend_i0_r;
-
-   logic               i0_div_decode_d;
-   logic               i0_load_block_d;
-   logic [1:0]         i0_rs1_depth_d, i0_rs2_depth_d;
-
-   logic               i0_load_stall_d;
-   logic               i0_store_stall_d;
-
-   logic               i0_predict_nt, i0_predict_t;
-
-   logic               i0_notbr_error, i0_br_toffset_error;
-   logic               i0_ret_error;
-   logic               i0_br_error;
-   logic               i0_br_error_all;
-   logic [11:0]        i0_br_offset;
-
-   logic [20:1]        i0_pcall_imm;                          // predicted jal's
-   logic               i0_pcall_12b_offset;
-   logic               i0_pcall_raw;
-   logic               i0_pcall_case;
-   logic               i0_pcall;
-
-   logic               i0_pja_raw;
-   logic               i0_pja_case;
-   logic               i0_pja;
-
-   logic               i0_pret_case;
-   logic               i0_pret_raw, i0_pret;
-
-   logic               i0_jal;                                // jal's that are not predicted
-
-
-   logic               i0_predict_br;
-
-   logic               store_data_bypass_d, store_data_bypass_m;
-
-   eb1_class_pkt_t         i0_rs1_class_d, i0_rs2_class_d;
-
-   eb1_class_pkt_t         i0_d_c, i0_x_c, i0_r_c;
-
-
-   logic               i0_ap_pc2, i0_ap_pc4;
-
-   logic               i0_rd_en_d;
-
-   logic               load_ldst_bypass_d;
-
-   logic               leak1_i0_stall_in, leak1_i0_stall;
-   logic               leak1_i1_stall_in, leak1_i1_stall;
-   logic               leak1_mode;
-
-   logic               i0_csr_write_only_d;
-
-   logic               prior_inflight_x, prior_inflight_eff;
-   logic               any_csr_d;
-
-   logic               prior_csr_write;
-
-   logic [3:0]        i0_pipe_en;
-   logic              i0_r_ctl_en,  i0_x_ctl_en,  i0_wb_ctl_en;
-   logic              i0_x_data_en, i0_r_data_en, i0_wb_data_en;
-
-   logic              debug_fence_i;
-   logic              debug_fence;
-
-   logic              i0_csr_write;
-   logic              presync_stall;
-
-   logic              i0_instr_error;
-   logic              i0_icaf_d;
-
-   logic              clear_pause;
-   logic              pause_state_in, pause_state;
-   logic              pause_stall;
-
-   logic              i0_brp_valid;
-   logic              nonblock_load_cancel;
-   logic              lsu_idle;
-   logic              lsu_pmu_misaligned_r;
-   logic              csr_ren_qual_d;
-   logic              csr_read_x;
-   logic              i0_block_d;
-   logic              i0_block_raw_d;  // This is use to create the raw valid
-   logic              ps_stall_in;
-   logic [31:0]       i0_result_x;
-
-   eb1_dest_pkt_t         d_d, x_d, r_d, wbd;
-   eb1_dest_pkt_t         x_d_in, r_d_in;
-
-   eb1_trap_pkt_t         d_t, x_t, x_t_in, r_t_in, r_t;
-
-   logic [3:0]        lsu_trigger_match_r;
-
-   logic [31:1]       dec_i0_pc_r;
-
-   logic csr_read, csr_write;
-   logic i0_br_unpred;
-
-   logic nonblock_load_valid_m_delay;
-   logic i0_wen_r;
-
-   logic tlu_wr_pause_r1;
-   logic tlu_wr_pause_r2;
-
-   logic flush_final_r;
-
-   logic bitmanip_zbb_legal;
-   logic bitmanip_zbs_legal;
-   logic bitmanip_zbe_legal;
-   logic bitmanip_zbc_legal;
-   logic bitmanip_zbp_legal;
-   logic bitmanip_zbr_legal;
-   logic bitmanip_zbf_legal;
-   logic bitmanip_zba_legal;
-   logic bitmanip_zbb_zbp_legal;
-   logic bitmanip_legal;
-
-   logic              data_gate_en;
-   logic              data_gate_clk;
-
-
-   localparam NBLOAD_SIZE     = pt.LSU_NUM_NBLOAD;
-   localparam NBLOAD_SIZE_MSB = int'(pt.LSU_NUM_NBLOAD)-1;
-   localparam NBLOAD_TAG_MSB  = pt.LSU_NUM_NBLOAD_WIDTH-1;
-
-
-   logic                     cam_write, cam_inv_reset, cam_data_reset;
-   logic [NBLOAD_TAG_MSB:0]  cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag;
-   logic [NBLOAD_SIZE_MSB:0] cam_wen;
-
-   logic [NBLOAD_TAG_MSB:0]  load_data_tag;
-   logic [NBLOAD_SIZE_MSB:0] nonblock_load_write;
-
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_raw;
-
-   logic [4:0] nonblock_load_rd;
-   logic i0_nonblock_load_stall;
-   logic i0_nonblock_boundary_stall;
-
-   logic i0_rs1_nonblock_load_bypass_en_d, i0_rs2_nonblock_load_bypass_en_d;
-
-   logic i0_load_kill_wen_r;
-
-   logic found;
-
-   logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val;
-
-   logic debug_fence_raw;
-
-   logic [31:0] i0_result_r_raw;
-   logic [31:0] i0_result_corr_r;
-
-   logic [12:1] last_br_immed_x;
-
-   logic [31:0]        i0_inst_d;
-   logic [31:0]        i0_inst_x;
-   logic [31:0]        i0_inst_r;
-   logic [31:0]        i0_inst_wb_in;
-   logic [31:0]        i0_inst_wb;
-
-   logic [31:1]        i0_pc_wb;
-
-   logic               i0_wb_en;
-
-   logic               trace_enable;
-
-   logic               debug_valid_x;
-
-   eb1_inst_pkt_t i0_itype;
-   eb1_reg_pkt_t i0r;
-   
-
-
-   rvdffie  #(8) misc1ff (.*,
-                          .clk(free_l2clk),
-                          .din( {leak1_i1_stall_in,leak1_i0_stall_in,dec_tlu_flush_extint,pause_state_in ,dec_tlu_wr_pause_r, tlu_wr_pause_r1,illegal_lockout_in,ps_stall_in}),
-                          .dout({leak1_i1_stall,   leak1_i0_stall,   dec_extint_stall,    pause_state,       tlu_wr_pause_r1,tlu_wr_pause_r2,illegal_lockout,   ps_stall   })
-                          );
-
-   rvdffie  #(8) misc2ff (.*,
-                          .clk(free_l2clk),
-                          .din( {lsu_trigger_match_m[3:0],lsu_pmu_misaligned_m,div_active_in,exu_flush_final,  dec_debug_valid_d}),
-                          .dout({lsu_trigger_match_r[3:0],lsu_pmu_misaligned_r,div_active,       flush_final_r,    debug_valid_x})
-                          );
-
-if(pt.BTB_ENABLE==1) begin
-// branch prediction
-
-
-   // in leak1_mode, ignore any predictions for i0, treat branch as if we haven't seen it before
-   // in leak1 mode, also ignore branch errors for i0
-   assign i0_brp_valid                        =  dec_i0_brp.valid & ~leak1_mode & ~i0_icaf_d;
-
-   assign dec_i0_predict_p_d.misp        =  '0;
-   assign dec_i0_predict_p_d.ataken      =  '0;
-   assign dec_i0_predict_p_d.boffset     =  '0;
-
-   assign dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-   assign dec_i0_predict_p_d.pja         =  i0_pja;
-   assign dec_i0_predict_p_d.pret        =  i0_pret;
-   assign dec_i0_predict_p_d.prett[31:1] =  dec_i0_brp.prett[31:1];
-   assign dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   assign dec_i0_predict_p_d.hist[1:0]   =  dec_i0_brp.hist[1:0];
-   assign dec_i0_predict_p_d.valid       =  i0_brp_valid & i0_legal_decode_d;
-   assign i0_notbr_error                 =  i0_brp_valid & ~(i0_dp_raw.condbr | i0_pcall_raw | i0_pja_raw | i0_pret_raw);
-
-   // no toffset error for a pret
-   assign i0_br_toffset_error                               =  i0_brp_valid & dec_i0_brp.hist[1] & (dec_i0_brp.toffset[11:0] != i0_br_offset[11:0]) & ~i0_pret_raw;
-   assign i0_ret_error                                      =  i0_brp_valid & (dec_i0_brp.ret ^ i0_pret_raw);
-   assign i0_br_error                                       =  dec_i0_brp.br_error | i0_notbr_error | i0_br_toffset_error | i0_ret_error;
-   assign dec_i0_predict_p_d.br_error                       =  i0_br_error & i0_legal_decode_d & ~leak1_mode;
-   assign dec_i0_predict_p_d.br_start_error                 =  dec_i0_brp.br_start_error & i0_legal_decode_d & ~leak1_mode;
-   assign i0_predict_index_d[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] =  dec_i0_bp_index;
-
-   assign i0_predict_btag_d[pt.BTB_BTAG_SIZE-1:0]           =  dec_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0];
-   assign i0_br_error_all                                   = (i0_br_error | dec_i0_brp.br_start_error) & ~leak1_mode;
-   assign dec_i0_predict_p_d.toffset[11:0]                  =  i0_br_offset[11:0];
-   assign i0_predict_fghr_d[pt.BHT_GHR_SIZE-1:0]            =  dec_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0];
-   assign dec_i0_predict_p_d.way                            =  dec_i0_brp.way;
-
-
-   if(pt.BTB_FULLYA) begin
-      logic btb_error_found, btb_error_found_f;
-      logic [$clog2(pt.BTB_SIZE)-1:0] fa_error_index_ns;
-
-      assign btb_error_found = (i0_br_error_all | btb_error_found_f) & ~dec_tlu_flush_lower_r;
-      assign fa_error_index_ns = (i0_br_error_all & ~btb_error_found_f) ? dec_i0_bp_fa_index : dec_fa_error_index;
-
-      rvdff #($clog2(pt.BTB_SIZE)+1) btberrorfa_f   (.*, .clk(active_clk),
-                                                         .din({btb_error_found,    fa_error_index_ns}),
-                                                         .dout({btb_error_found_f, dec_fa_error_index}));
-
-
-   end
-   else
-     assign dec_fa_error_index = 'b0;
-
-
-   //   end
-end // if (pt.BTB_ENABLE==1)
-else begin
-
-   always_comb begin
-      dec_i0_predict_p_d = '0;
-      dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-      dec_i0_predict_p_d.pja         =  i0_pja;
-      dec_i0_predict_p_d.pret        =  i0_pret;
-      dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   end
-
-   assign i0_br_error_all = '0;
-   assign i0_predict_index_d = '0;
-   assign i0_predict_btag_d = '0;
-   assign i0_predict_fghr_d = '0;
-   assign i0_brp_valid = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // on br error turn anything into a nop
-   // on i0 instruction fetch access fault turn anything into a nop
-   // nop =>   alu rs1 imm12 rd lor
-
-   assign i0_icaf_d = dec_i0_icaf_d | dec_i0_dbecc_d;
-
-   assign i0_instr_error = i0_icaf_d;
-
-   always_comb begin
-      i0_dp = i0_dp_raw;
-      if (i0_br_error_all | i0_instr_error) begin
-         i0_dp          =   '0;
-         i0_dp.alu      = 1'b1;
-         i0_dp.rs1      = 1'b1;
-         i0_dp.rs2      = 1'b1;
-         i0_dp.lor      = 1'b1;
-         i0_dp.legal    = 1'b1;
-         i0_dp.postsync = 1'b1;
-      end
-   end
-
-   assign i0[31:0] = dec_i0_instr_d[31:0];
-
-   assign dec_i0_select_pc_d = i0_dp.pc;
-
-   // branches that can be predicted
-
-   assign i0_predict_br =  i0_dp.condbr | i0_pcall | i0_pja | i0_pret;
-
-   assign i0_predict_nt = ~(dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-   assign i0_predict_t  =  (dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-
-   assign i0_ap.add     =  i0_dp.add;
-   assign i0_ap.sub     =  i0_dp.sub;
-   assign i0_ap.land    =  i0_dp.land;
-   assign i0_ap.lor     =  i0_dp.lor;
-   assign i0_ap.lxor    =  i0_dp.lxor;
-   assign i0_ap.sll     =  i0_dp.sll;
-   assign i0_ap.srl     =  i0_dp.srl;
-   assign i0_ap.sra     =  i0_dp.sra;
-   assign i0_ap.slt     =  i0_dp.slt;
-   assign i0_ap.unsign  =  i0_dp.unsign;
-   assign i0_ap.beq     =  i0_dp.beq;
-   assign i0_ap.bne     =  i0_dp.bne;
-   assign i0_ap.blt     =  i0_dp.blt;
-   assign i0_ap.bge     =  i0_dp.bge;
-
-   assign i0_ap.clz     =  i0_dp.clz;
-   assign i0_ap.ctz     =  i0_dp.ctz;
-   assign i0_ap.pcnt    =  i0_dp.pcnt;
-   assign i0_ap.sext_b  =  i0_dp.sext_b;
-   assign i0_ap.sext_h  =  i0_dp.sext_h;
-   assign i0_ap.sh1add  =  i0_dp.sh1add;
-   assign i0_ap.sh2add  =  i0_dp.sh2add;
-   assign i0_ap.sh3add  =  i0_dp.sh3add;
-   assign i0_ap.zba     =  i0_dp.zba;
-   assign i0_ap.slo     =  i0_dp.slo;
-   assign i0_ap.sro     =  i0_dp.sro;
-   assign i0_ap.min     =  i0_dp.min;
-   assign i0_ap.max     =  i0_dp.max;
-   assign i0_ap.pack    =  i0_dp.pack;
-   assign i0_ap.packu   =  i0_dp.packu;
-   assign i0_ap.packh   =  i0_dp.packh;
-   assign i0_ap.rol     =  i0_dp.rol;
-   assign i0_ap.ror     =  i0_dp.ror;
-   assign i0_ap.grev    =  i0_dp.grev;
-   assign i0_ap.gorc    =  i0_dp.gorc;
-   assign i0_ap.zbb     =  i0_dp.zbb;
-   assign i0_ap.sbset   =  i0_dp.sbset;
-   assign i0_ap.sbclr   =  i0_dp.sbclr;
-   assign i0_ap.sbinv   =  i0_dp.sbinv;
-   assign i0_ap.sbext   =  i0_dp.sbext;
-
-   assign i0_ap.csr_write =  i0_csr_write_only_d;
-   assign i0_ap.csr_imm   =  i0_dp.csr_imm;
-   assign i0_ap.jal       =  i0_jal;
-
-   assign i0_ap_pc2 = ~dec_i0_pc4_d;
-   assign i0_ap_pc4 =  dec_i0_pc4_d;
-
-   assign i0_ap.predict_nt = i0_predict_nt;
-   assign i0_ap.predict_t  = i0_predict_t;
-
-
-// non block load cam logic
-
-   always_comb begin
-      found = 0;
-      cam_wen[NBLOAD_SIZE_MSB:0] = '0;
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         if (~found) begin
-            if (~cam[i].valid) begin
-               cam_wen[i] = cam_write;
-               found = 1'b1;
-            end
-            else begin
-               cam_wen[i] = 0;
-            end
-         end
-         else
-            cam_wen[i] = 0;
-      end
-   end
-
-
-   assign cam_write          = lsu_nonblock_load_valid_m;
-   assign cam_write_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_tag_m[NBLOAD_TAG_MSB:0];
-
-   assign cam_inv_reset          = lsu_nonblock_load_inv_r;
-   assign cam_inv_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0];
-
-   assign cam_data_reset          = lsu_nonblock_load_data_valid | lsu_nonblock_load_data_error;
-   assign cam_data_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-   assign nonblock_load_rd[4:0] = (x_d.i0load) ? x_d.i0rd[4:0] : 5'b0;  // rd data
-
-
-   // checks
-
-
-
-
-    // case of multiple loads to same dest ie. x1 ... you have to invalidate the older one
-
-   for (genvar i=0; i<NBLOAD_SIZE; i++) begin : cam_array
-
-      assign cam_inv_reset_val[i] = cam_inv_reset   & (cam_inv_reset_tag[NBLOAD_TAG_MSB:0]  == cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid;
-
-      assign cam_data_reset_val[i] = cam_data_reset & (cam_data_reset_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-      always_comb begin
-
-         cam[i] = cam_raw[i];
-
-         if (cam_data_reset_val[i])
-           cam[i].valid = 1'b0;
-
-         cam_in[i] = '0;
-
-         if (cam_wen[i]) begin
-            cam_in[i].valid    = 1'b1;
-            cam_in[i].wb       = 1'b0;
-            cam_in[i].tag[NBLOAD_TAG_MSB:0] = cam_write_tag[NBLOAD_TAG_MSB:0];
-            cam_in[i].rd[4:0]  = nonblock_load_rd[4:0];
-         end
-         else if ( (cam_inv_reset_val[i]) |
-                   (i0_wen_r & (r_d_in.i0rd[4:0] == cam[i].rd[4:0]) & cam[i].wb) )
-           cam_in[i].valid = 1'b0;
-         else
-           cam_in[i] = cam[i];
-
-         if (nonblock_load_valid_m_delay & (lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0]==cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid)
-           cam_in[i].wb = 1'b1;
-
-         // force debug halt forces cam valids to 0; highest priority
-         if (dec_tlu_force_halt)
-           cam_in[i].valid = 1'b0;
-      end
-
-
-   rvdffie #( $bits(eb1_load_cam_pkt_t) ) cam_ff (.*, .din(cam_in[i]), .dout(cam_raw[i]));
-
-
-   assign nonblock_load_write[i] = (load_data_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-
-end : cam_array
-
-
-
-   assign load_data_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-
-
-   assign nonblock_load_cancel = ((r_d_in.i0rd[4:0] == dec_nonblock_load_waddr[4:0]) & i0_wen_r);     // cancel if any younger inst (including another nonblock) committing this cycle
-
-
-   assign dec_nonblock_load_wen = lsu_nonblock_load_data_valid & |nonblock_load_write[NBLOAD_SIZE_MSB:0] & ~nonblock_load_cancel;
-
-   always_comb begin
-
-      dec_nonblock_load_waddr[4:0] = '0;
-      i0_nonblock_load_stall = i0_nonblock_boundary_stall;
-
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         dec_nonblock_load_waddr[4:0] |= ({5{nonblock_load_write[i]}} & cam[i].rd[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs1_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs1[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs2_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs2[4:0]);
-      end
-
-   end
-
-   assign i0_nonblock_boundary_stall = ((nonblock_load_rd[4:0]==i0r.rs1[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs1_en_d) |
-                                       ((nonblock_load_rd[4:0]==i0r.rs2[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs2_en_d);
-
-
-
-// don't writeback a nonblock load
-
-   rvdffs #(1) wbnbloaddelayff (.*, .clk(active_clk), .en(i0_r_ctl_en ), .din(lsu_nonblock_load_valid_m),        .dout(nonblock_load_valid_m_delay) );
-
-   assign i0_load_kill_wen_r = nonblock_load_valid_m_delay &  r_d.i0load;
-
-
-
-// end non block load cam logic
-
-// pmu start
-
-
-
-
-   assign csr_read = csr_ren_qual_d;
-   assign csr_write = dec_csr_wen_unq_d;
-
-   assign i0_br_unpred = i0_dp.jal & ~i0_predict_br;
-
-   // the classes must be mutually exclusive with one another
-
-   always_comb begin
-      i0_itype = NULL;
-
-      if (i0_legal_decode_d) begin
-         if (i0_dp.mul)                  i0_itype = MUL;
-         if (i0_dp.load)                 i0_itype = LOAD;
-         if (i0_dp.store)                i0_itype = STORE;
-         if (i0_dp.pm_alu)               i0_itype = ALU;
-         if (i0_dp.zbb | i0_dp.zbs |
-             i0_dp.zbe | i0_dp.zbc |
-             i0_dp.zbp | i0_dp.zbr |
-             i0_dp.zbf | i0_dp.zba)
-                                         i0_itype = BITMANIPU;
-         if ( csr_read & ~csr_write)     i0_itype = CSRREAD;
-         if (~csr_read &  csr_write)     i0_itype = CSRWRITE;
-         if ( csr_read &  csr_write)     i0_itype = CSRRW;
-         if (i0_dp.ebreak)               i0_itype = EBREAK;
-         if (i0_dp.ecall)                i0_itype = ECALL;
-         if (i0_dp.fence)                i0_itype = FENCE;
-         if (i0_dp.fence_i)              i0_itype = FENCEI;  // fencei will set this even with fence attribute
-         if (i0_dp.mret)                 i0_itype = MRET;
-         if (i0_dp.condbr)               i0_itype = CONDBR;
-         if (i0_dp.jal)                  i0_itype = JAL;
-      end
-   end
-
-
-
-
-
-// end pmu
-
-
-   eb1_dec_dec_ctl i0_dec (.inst(i0[31:0]),.out(i0_dp_raw));
-   
-
-
-   rvdff #(1) lsu_idle_ff (.*, .clk(active_clk), .din(lsu_idle_any), .dout(lsu_idle));
-
-
-
-   assign leak1_i1_stall_in = (dec_tlu_flush_leak_one_r | (leak1_i1_stall & ~dec_tlu_flush_lower_r));
-
-
-   assign leak1_mode = leak1_i1_stall;
-
-   assign leak1_i0_stall_in = ((dec_i0_decode_d & leak1_i1_stall) | (leak1_i0_stall & ~dec_tlu_flush_lower_r));
-
-
-
-
-   // 12b jal's can be predicted - these are calls
-
-   assign i0_pcall_imm[20:1] = {i0[31],i0[19:12],i0[20],i0[30:21]};
-
-   assign i0_pcall_12b_offset = (i0_pcall_imm[12]) ? (i0_pcall_imm[20:13] == 8'hff) : (i0_pcall_imm[20:13] == 8'h0);
-
-   assign i0_pcall_case  = i0_pcall_12b_offset & i0_dp_raw.imm20 &  (i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-   assign i0_pja_case    = i0_pcall_12b_offset & i0_dp_raw.imm20 & ~(i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-
-   assign i0_pcall_raw   = i0_dp_raw.jal &   i0_pcall_case;   // this includes ja
-   assign i0_pcall       = i0_dp.jal     &   i0_pcall_case;
-
-   assign i0_pja_raw     = i0_dp_raw.jal &   i0_pja_case;
-   assign i0_pja         = i0_dp.jal     &   i0_pja_case;
-
-
-   assign i0_br_offset[11:0] = (i0_pcall_raw | i0_pja_raw) ? i0_pcall_imm[12:1] : {i0[31],i0[7],i0[30:25],i0[11:8]};
-
-   assign i0_pret_case = (i0_dp_raw.jal & i0_dp_raw.imm12 & (i0r.rd[4:0] == 5'b0) & (i0r.rs1[4:0] == 5'd1 | i0r.rs1[4:0] == 5'd5));  // jalr with rd==0, rs1==1 or rs1==5 is a ret
-
-   assign i0_pret_raw = i0_dp_raw.jal &   i0_pret_case;
-   assign i0_pret     = i0_dp.jal     &   i0_pret_case;
-
-   assign i0_jal      = i0_dp.jal     &  ~i0_pcall_case & ~i0_pja_case & ~i0_pret_case;
-
-   // lsu stuff
-   // load/store mutually exclusive
-   assign dec_lsu_offset_d[11:0] = ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.load}} &               i0[31:20]) |
-                                   ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.store}} &             {i0[31:25],i0[11:7]});
-
-
-
-   assign div_p.valid    =  div_decode_d;
-
-   assign div_p.unsign   =  i0_dp.unsign;
-   assign div_p.rem      =  i0_dp.rem;
-
-
-   assign mul_p.valid    =  mul_decode_d;
-
-   assign mul_p.rs1_sign =  i0_dp.rs1_sign;
-   assign mul_p.rs2_sign =  i0_dp.rs2_sign;
-   assign mul_p.low      =  i0_dp.low;
-   assign mul_p.bext     =  i0_dp.bext;
-   assign mul_p.bdep     =  i0_dp.bdep;
-   assign mul_p.clmul    =  i0_dp.clmul;
-   assign mul_p.clmulh   =  i0_dp.clmulh;
-   assign mul_p.clmulr   =  i0_dp.clmulr;
-   assign mul_p.grev     =  i0_dp.grev;
-   assign mul_p.gorc     =  i0_dp.gorc;
-   assign mul_p.shfl     =  i0_dp.shfl;
-   assign mul_p.unshfl   =  i0_dp.unshfl;
-   assign mul_p.crc32_b  =  i0_dp.crc32_b;
-   assign mul_p.crc32_h  =  i0_dp.crc32_h;
-   assign mul_p.crc32_w  =  i0_dp.crc32_w;
-   assign mul_p.crc32c_b =  i0_dp.crc32c_b;
-   assign mul_p.crc32c_h =  i0_dp.crc32c_h;
-   assign mul_p.crc32c_w =  i0_dp.crc32c_w;
-   assign mul_p.bfp      =  i0_dp.bfp;
-
-   always_comb  begin
-      lsu_p = '0;
-
-      if (dec_extint_stall) begin
-         lsu_p.load = 1'b1;
-         lsu_p.word = 1'b1;
-         lsu_p.fast_int = 1'b1;
-         lsu_p.valid = 1'b1;
-      end
-      else begin
-         lsu_p.valid = lsu_decode_d;
-
-         lsu_p.load                         =  i0_dp.load ;
-         lsu_p.store                        =  i0_dp.store;
-         lsu_p.by                           =  i0_dp.by   ;
-         lsu_p.half                         =  i0_dp.half ;
-         lsu_p.word                         =  i0_dp.word ;
-         lsu_p.stack                        = (i0r.rs1[4:0]==5'd2);   // stack reference
-
-         lsu_p.load_ldst_bypass_d          =  load_ldst_bypass_d ;
-         lsu_p.store_data_bypass_d         =  store_data_bypass_d;
-         lsu_p.store_data_bypass_m         =  store_data_bypass_m;
-
-         lsu_p.unsign  =  i0_dp.unsign;
-      end
-   end
-
-
-   assign  dec_lsu_valid_raw_d    = (i0_valid_d & (i0_dp_raw.load | i0_dp_raw.store) & ~dma_dccm_stall_any & ~i0_block_raw_d) | dec_extint_stall;
-
-
-
-   assign i0r.rs1[4:0] = i0[19:15];
-   assign i0r.rs2[4:0] = i0[24:20];
-   assign i0r.rd[4:0]  = i0[11:7];
-
-
-   assign dec_i0_rs1_en_d   =  (i0_dp.rs1 & (i0r.rs1[4:0] != 5'd0));  // if rs1_en=0 then read will be all 0's
-   assign dec_i0_rs2_en_d   =  (i0_dp.rs2 & (i0r.rs2[4:0] != 5'd0));
-   assign i0_rd_en_d        =  (i0_dp.rd  & (i0r.rd[4:0]  != 5'd0));
-
-   assign dec_i0_rs1_d[4:0] =  i0r.rs1[4:0];
-   assign dec_i0_rs2_d[4:0] =  i0r.rs2[4:0];
-
-
-   assign i0_jalimm20       =  i0_dp.jal & i0_dp.imm20;   // jal
-   assign i0_uiimm20        = ~i0_dp.jal & i0_dp.imm20;
-
-
-   // csr logic
-
-   assign dec_csr_ren_d  = i0_dp.csr_read & i0_valid_d;
-   assign csr_ren_qual_d = i0_dp.csr_read & i0_legal_decode_d;
-
-   assign csr_clr_d =   i0_dp.csr_clr   & i0_legal_decode_d;
-   assign csr_set_d   = i0_dp.csr_set   & i0_legal_decode_d;
-   assign csr_write_d = i0_csr_write    & i0_legal_decode_d;
-
-   assign i0_csr_write_only_d = i0_csr_write & ~i0_dp.csr_read;
-
-   assign dec_csr_wen_unq_d = (i0_dp.csr_clr | i0_dp.csr_set | i0_csr_write) & i0_valid_d;   // for csr legal, can't write read-only csr
-
-   assign dec_csr_any_unq_d = any_csr_d & i0_valid_d;
-
-
-   assign dec_csr_rdaddr_d[11:0] =  {12{dec_csr_any_unq_d}} & i0[31:20];
-   assign dec_csr_wraddr_r[11:0] =  {12{r_d.csrwen & r_d.i0valid}} & r_d.csrwaddr[11:0];
-
-
-   // make sure csr doesn't write same cycle as dec_tlu_flush_lower_wb
-   // also use valid so it's flushable
-   assign dec_csr_wen_r = r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_r;
-
-   // If we are writing MIE or MSTATUS, hold off the external interrupt for a cycle on the write.
-   assign dec_csr_stall_int_ff = ((r_d.csrwaddr[11:0] == 12'h300) | (r_d.csrwaddr[11:0] == 12'h304)) & r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_wb;
-
-
-   rvdff #(5) csrmiscff (.*,
-                        .clk (active_clk),
-                        .din ({csr_ren_qual_d, csr_clr_d, csr_set_d, csr_write_d, i0_dp.csr_imm}),
-                        .dout({csr_read_x,     csr_clr_x, csr_set_x, csr_write_x, csr_imm_x})
-                       );
-
-
-
-
-   // perform the update operation if any
-
-   rvdffe #(37) csr_rddata_x_ff (.*, .en(i0_x_data_en & any_csr_d), .din( {i0[19:15],dec_csr_rddata_d[31:0]}), .dout({csrimm_x[4:0],csr_rddata_x[31:0]}));
-
-
-   assign csr_mask_x[31:0]       = ({32{ csr_imm_x}} & {27'b0,csrimm_x[4:0]}) |
-                                   ({32{~csr_imm_x}} &  exu_csr_rs1_x[31:0] );
-
-
-   assign write_csr_data_x[31:0] = ({32{csr_clr_x}}   & (csr_rddata_x[31:0] & ~csr_mask_x[31:0])) |
-                                   ({32{csr_set_x}}   & (csr_rddata_x[31:0] |  csr_mask_x[31:0])) |
-                                   ({32{csr_write_x}} & (                      csr_mask_x[31:0]));
-
-
-// pause instruction
-
-
-
-
-   assign clear_pause = (dec_tlu_flush_lower_r & ~dec_tlu_flush_pause_r) |
-                        (pause_state & (write_csr_data[31:1] == 31'b0));        // if 0 or 1 then exit pause state - 1 cycle pause
-
-   assign pause_state_in = (dec_tlu_wr_pause_r | pause_state) & ~clear_pause;
-
-
-
-   assign dec_pause_state = pause_state;
-
-
-
-      assign dec_pause_state_cg = pause_state & ~tlu_wr_pause_r1 & ~tlu_wr_pause_r2;
-
-// end pause
-
-
-   assign csr_data_wen = ((csr_clr_x | csr_set_x | csr_write_x) & csr_read_x) | dec_tlu_wr_pause_r | pause_state;
-
-   assign write_csr_data_in[31:0] = (pause_state)         ? (write_csr_data[31:0] - 32'b1) :
-                                    (dec_tlu_wr_pause_r) ? dec_csr_wrdata_r[31:0] : write_csr_data_x[31:0];
-
-   // will hold until write-back at which time the CSR will be updated while GPR is possibly written with prior CSR
-   rvdffe #(32) write_csr_ff (.*, .clk(free_l2clk), .en(csr_data_wen), .din(write_csr_data_in[31:0]), .dout(write_csr_data[31:0]));
-
-   assign pause_stall = pause_state;
-
-   // for csr write only data is produced by the alu
-   assign dec_csr_wrdata_r[31:0]  = (r_d.csrwonly & r_d.i0valid) ? i0_result_corr_r[31:0] : write_csr_data[31:0];
-
-
-
-   assign dec_i0_immed_d[31:0] =  i0_immed_d[31:0];
-
-   assign     i0_immed_d[31:0] = ({32{i0_dp.imm12}}                         & { {20{i0[31]}},i0[31:20] }) |  // jalr
-                                 ({32{i0_dp.shimm5}}                        & {  27'b0,      i0[24:20] }) |
-                                 ({32{i0_jalimm20}}                         & { {12{i0[31]}},i0[19:12],i0[20],i0[30:21],1'b0}) |
-                                 ({32{i0_uiimm20}}                          & { i0[31:12],12'b0 }) |
-                                 ({32{i0_csr_write_only_d & i0_dp.csr_imm}} & {  27'b0,      i0[19:15]});  // for csr's that only write csr, dont read csr
-
-
-   // all conditional branches are currently predict_nt
-   // change this to generate the sequential address for all other cases for NPC requirements at commit
-   assign dec_i0_br_immed_d[12:1] = (i0_ap.predict_nt & ~i0_dp.jal) ? i0_br_offset[11:0] : {10'b0,i0_ap_pc4,i0_ap_pc2};
-
-
-   assign last_br_immed_d[12:1] = ((i0_ap.predict_nt) ? {10'b0,i0_ap_pc4,i0_ap_pc2} : i0_br_offset[11:0] );
-
-   assign i0_valid_d = dec_ib0_valid_d;
-
-   // load_stall includes bus_barrier
-
-   assign i0_load_stall_d = (i0_dp.load ) & (lsu_load_stall_any | dma_dccm_stall_any);
-
-   assign i0_store_stall_d =  i0_dp.store & (lsu_store_stall_any | dma_dccm_stall_any);
-
-
-
-// some CSR reads need to be presync'd
-   assign i0_presync = i0_dp.presync | dec_tlu_presync_d | debug_fence_i | debug_fence_raw | dec_tlu_pipelining_disable;  // both fence's presync
-
-// some CSR writes need to be postsync'd
-   assign i0_postsync = i0_dp.postsync | dec_tlu_postsync_d | debug_fence_i | // only fence_i postsync
-                        (i0_csr_write_only_d & (i0[31:20] == 12'h7c2));   // wr_pause must postsync
-
-
-// debug fence csr
-   assign debug_fence_i     = dec_debug_fence_d & dbg_cmd_wrdata[0];
-   assign debug_fence_raw   = dec_debug_fence_d & dbg_cmd_wrdata[1];
-
-   assign debug_fence       = debug_fence_raw | debug_fence_i;    // fence_i causes a fence
-
-   assign i0_csr_write = i0_dp.csr_write & ~dec_debug_fence_d;
-// end debug
-
-
-   // lets make ebreak, ecall, mret postsync, so break sync into pre and post
-
-   assign presync_stall      = (i0_presync & prior_inflight_eff);
-
-   assign prior_inflight_eff = (i0_dp.div)  ?  prior_inflight_x  :  prior_inflight;
-
-   assign i0_div_prior_div_stall = i0_dp.div & div_active;
-
-   // Raw block has everything excepts the stalls coming from the lsu
-   assign i0_block_raw_d = (i0_dp.csr_read & prior_csr_write) |
-                            dec_extint_stall |
-                            pause_stall |
-                            leak1_i0_stall |
-                            dec_tlu_debug_stall |
-                            postsync_stall |
-                            presync_stall  |
-                            ((i0_dp.fence | debug_fence) & ~lsu_idle) |
-                            i0_nonblock_load_stall |
-                            i0_load_block_d |
-                            i0_nonblock_div_stall |
-                            i0_div_prior_div_stall;
-
-   assign i0_block_d    = i0_block_raw_d | i0_store_stall_d | i0_load_stall_d;
-   assign i0_exublock_d = i0_block_raw_d;
-
-
-   // block reads if there is a prior csr write in the pipeline
-   assign prior_csr_write = x_d.csrwonly |
-                            r_d.csrwonly |
-                            wbd.csrwonly;
-
-
-
-   if       (pt.BITMANIP_ZBB == 1)
-     assign bitmanip_zbb_legal      =  1'b1;
-   else
-     assign bitmanip_zbb_legal      = ~(i0_dp.zbb & ~i0_dp.zbp);
-
-   if       (pt.BITMANIP_ZBS == 1)
-     assign bitmanip_zbs_legal      =  1'b1;
-   else
-     assign bitmanip_zbs_legal      = ~i0_dp.zbs;
-
-   if       (pt.BITMANIP_ZBE == 1)
-     assign bitmanip_zbe_legal      =  1'b1;
-   else
-     assign bitmanip_zbe_legal      = ~i0_dp.zbe;
-
-   if       (pt.BITMANIP_ZBC == 1)
-     assign bitmanip_zbc_legal      =  1'b1;
-   else
-     assign bitmanip_zbc_legal      = ~i0_dp.zbc;
-
-   if       (pt.BITMANIP_ZBP == 1)
-     assign bitmanip_zbp_legal      =  1'b1;
-   else
-     assign bitmanip_zbp_legal      = ~(i0_dp.zbp & ~i0_dp.zbb);
-
-   if       (pt.BITMANIP_ZBR == 1)
-     assign bitmanip_zbr_legal      =  1'b1;
-   else
-     assign bitmanip_zbr_legal      = ~i0_dp.zbr;
-
-   if       (pt.BITMANIP_ZBF == 1)
-     assign bitmanip_zbf_legal      =  1'b1;
-   else
-     assign bitmanip_zbf_legal      = ~i0_dp.zbf;
-
-   if (pt.BITMANIP_ZBA == 1)
-     assign bitmanip_zba_legal      =  1'b1;
-   else
-     assign bitmanip_zba_legal      = ~i0_dp.zba;
-
-   if     ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     assign bitmanip_zbb_zbp_legal  =  1'b1;
-   else
-     assign bitmanip_zbb_zbp_legal  = ~(i0_dp.zbb & i0_dp.zbp);
-
-
-   assign any_csr_d      =  i0_dp.csr_read | i0_csr_write;
-   assign bitmanip_legal =  bitmanip_zbb_legal & bitmanip_zbs_legal & bitmanip_zbe_legal & bitmanip_zbc_legal & bitmanip_zbp_legal & bitmanip_zbr_legal & bitmanip_zbf_legal & bitmanip_zba_legal & bitmanip_zbb_zbp_legal;
-
-   assign i0_legal       =  (i0_dp.legal) & (~any_csr_d | dec_csr_legal_d) & bitmanip_legal;
-
-
-
-   // illegal inst handling
-
-
-   assign shift_illegal      = dec_i0_decode_d & ~i0_legal;
-
-   assign illegal_inst_en    = shift_illegal & ~illegal_lockout;
-
-   rvdffe #(32) illegal_any_ff (.*, .en(illegal_inst_en), .din(i0_inst_d[31:0]), .dout(dec_illegal_inst[31:0]));
-
-   assign illegal_lockout_in = (shift_illegal | illegal_lockout) & ~flush_final_r;
-
-
-
-   // allow illegals to flow down the pipe
-   assign dec_i0_decode_d = i0_valid_d & ~i0_block_d    & ~dec_tlu_flush_lower_r & ~flush_final_r;
-   assign i0_exudecode_d  = i0_valid_d & ~i0_exublock_d & ~dec_tlu_flush_lower_r & ~flush_final_r;
-
-   // define i0 legal decode
-   assign i0_legal_decode_d    = dec_i0_decode_d & i0_legal;
-   assign i0_exulegal_decode_d = i0_exudecode_d  & i0_legal;
-
-
-   // performance monitor signals
-   assign dec_pmu_instr_decoded = dec_i0_decode_d;
-
-   assign dec_pmu_decode_stall = i0_valid_d & ~dec_i0_decode_d;
-
-   assign dec_pmu_postsync_stall = postsync_stall & i0_valid_d;
-   assign dec_pmu_presync_stall  = presync_stall & i0_valid_d;
-
-
-
-   // illegals will postsync
-   assign ps_stall_in =  ( dec_i0_decode_d & (i0_postsync | ~i0_legal) ) |
-                         ( ps_stall & prior_inflight_x                 );
-
-
-
-   assign postsync_stall =  ps_stall;
-
-
-   assign prior_inflight_x    =  x_d.i0valid;
-   assign prior_inflight_wb   =  r_d.i0valid;
-
-   assign prior_inflight = prior_inflight_x | prior_inflight_wb;
-
-   assign dec_i0_alu_decode_d = i0_exulegal_decode_d & i0_dp.alu;
-   assign dec_i0_branch_d     = i0_dp.condbr | i0_dp.jal | i0_br_error_all;
-
-   assign lsu_decode_d = i0_legal_decode_d    & i0_dp.lsu;
-   assign mul_decode_d = i0_exulegal_decode_d & i0_dp.mul;
-   assign div_decode_d = i0_exulegal_decode_d & i0_dp.div;
-
-   assign dec_qual_lsu_d = i0_dp.lsu;
-
-
-
-
-
-// scheduling logic for alu
-
-   assign i0_rs1_depend_i0_x  = dec_i0_rs1_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs1[4:0]);
-   assign i0_rs1_depend_i0_r  = dec_i0_rs1_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_depend_i0_x  = dec_i0_rs2_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs2[4:0]);
-   assign i0_rs2_depend_i0_r  = dec_i0_rs2_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs2[4:0]);
-
-
-// order the producers as follows:  , i0_x, i0_r, i0_wb
-
-   assign {i0_rs1_class_d, i0_rs1_depth_d[1:0]} = (i0_rs1_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs1_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-   assign {i0_rs2_class_d, i0_rs2_depth_d[1:0]} = (i0_rs2_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs2_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-
-// stores will bypass load data in the lsu pipe
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin : genblock
-      assign i0_load_block_d = (i0_rs1_class_d.load & i0_rs1_depth_d[0]) |
-                               (i0_rs2_class_d.load & i0_rs2_depth_d[0] & ~i0_dp.store);
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[1] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[1] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-   end
-   else begin : genblock
-
-      assign i0_load_block_d = 1'b0;
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[0] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m = 1'b0;
-   end
-
-
-
-
-
-
-   assign dec_tlu_i0_valid_r     =  r_d.i0valid & ~dec_tlu_flush_lower_wb;
-
-
-   assign d_t.legal              =  i0_legal_decode_d;
-   assign d_t.icaf               =  i0_icaf_d & i0_legal_decode_d;                // dbecc is icaf exception
-   assign d_t.icaf_second        =  dec_i0_icaf_second_d & i0_legal_decode_d;     // this includes icaf and dbecc
-   assign d_t.icaf_type[1:0]     =  dec_i0_icaf_type_d[1:0];
-
-   assign d_t.fence_i            = (i0_dp.fence_i | debug_fence_i) & i0_legal_decode_d;
-
-// put pmu info into the trap packet
-   assign d_t.pmu_i0_itype       =  i0_itype;
-   assign d_t.pmu_i0_br_unpred   =  i0_br_unpred;
-   assign d_t.pmu_divide         =  1'b0;
-   assign d_t.pmu_lsu_misaligned =  1'b0;
-
-   assign d_t.i0trigger[3:0]     =  dec_i0_trigger_match_d[3:0] & {4{dec_i0_decode_d}};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_xff (.*, .en(i0_x_ctl_en), .din(d_t),  .dout(x_t));
-
-   always_comb begin
-      x_t_in = x_t;
-      x_t_in.i0trigger[3:0] = x_t.i0trigger & ~{4{dec_tlu_flush_lower_wb}};
-   end
-
-
-   rvdfflie  #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_r_ff (.*, .en(i0_x_ctl_en), .din(x_t_in),  .dout(r_t));
-
-
-    always_comb begin
-
-      r_t_in                             =  r_t;
-
-      r_t_in.i0trigger[3:0]              = ({4{(r_d.i0load | r_d.i0store)}} & lsu_trigger_match_r[3:0]) | r_t.i0trigger[3:0];
-      r_t_in.pmu_lsu_misaligned          = lsu_pmu_misaligned_r;   // only valid if a load/store is valid in DC3 stage
-
-      if (dec_tlu_flush_lower_wb) r_t_in = '0 ;
-
-   end
-
-
-   always_comb begin
-
-      dec_tlu_packet_r                 =  r_t_in;
-      dec_tlu_packet_r.pmu_divide      =  r_d.i0div & r_d.i0valid;
-
-   end
-
-
-// end tlu stuff
-
-
-   assign i0_d_c.mul                =  i0_dp.mul  & i0_legal_decode_d;
-   assign i0_d_c.load               =  i0_dp.load & i0_legal_decode_d;
-   assign i0_d_c.alu                =  i0_dp.alu  & i0_legal_decode_d;
-
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_x_c_ff   (.*, .en(i0_x_ctl_en),  .clk(active_clk), .din(i0_d_c),  .dout(i0_x_c));
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_r_c_ff   (.*, .en(i0_r_ctl_en),  .clk(active_clk), .din(i0_x_c),  .dout(i0_r_c));
-
-
-   assign d_d.i0rd[4:0]             =  i0r.rd[4:0];
-   assign d_d.i0v                   =  i0_rd_en_d  & i0_legal_decode_d;
-   assign d_d.i0valid               =  dec_i0_decode_d;  // has flush_final_r
-
-   assign d_d.i0load                =  i0_dp.load  & i0_legal_decode_d;
-   assign d_d.i0store               =  i0_dp.store & i0_legal_decode_d;
-   assign d_d.i0div                 =  i0_dp.div   & i0_legal_decode_d;
-
-
-   assign d_d.csrwen                =  dec_csr_wen_unq_d   & i0_legal_decode_d;
-   assign d_d.csrwonly              =  i0_csr_write_only_d & dec_i0_decode_d;
-   assign d_d.csrwaddr[11:0]        =  (d_d.csrwen) ? i0[31:20] : '0;    // csr write address for rd==0 case
-
-
-   rvdff  #(3) i0cgff               (.*, .clk(active_clk),            .din(i0_pipe_en[3:1]), .dout(i0_pipe_en[2:0]));
-
-   assign i0_pipe_en[3]             =  dec_i0_decode_d;
-
-   assign i0_x_ctl_en               = (|i0_pipe_en[3:2] | clk_override);
-   assign i0_r_ctl_en               = (|i0_pipe_en[2:1] | clk_override);
-   assign i0_wb_ctl_en              = (|i0_pipe_en[1:0] | clk_override);
-   assign i0_x_data_en              = ( i0_pipe_en[3]   | clk_override);
-   assign i0_r_data_en              = ( i0_pipe_en[2]   | clk_override);
-   assign i0_wb_data_en             = ( i0_pipe_en[1]   | clk_override);
-
-   assign dec_data_en[1:0]          = {i0_x_data_en, i0_r_data_en};
-   assign dec_ctl_en[1:0]           = {i0_x_ctl_en,  i0_r_ctl_en};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)),.LEFT(15) ) e1ff (.*, .en(i0_x_ctl_en), .din(d_d),  .dout(x_d));
-
-   always_comb begin
-      x_d_in = x_d;
-
-      x_d_in.i0v         = x_d.i0v     & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-      x_d_in.i0valid     = x_d.i0valid & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-   end
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15) ) r_d_ff (.*, .en(i0_r_ctl_en), .din(x_d_in), .dout(r_d));
-
-
-   always_comb begin
-
-        r_d_in = r_d;
-
-
-      // for the bench
-      r_d_in.i0rd[4:0]   =  r_d.i0rd[4:0];
-
-      r_d_in.i0v         = (r_d.i0v      & ~dec_tlu_flush_lower_wb);
-      r_d_in.i0valid     = (r_d.i0valid  & ~dec_tlu_flush_lower_wb);
-
-      r_d_in.i0load      =  r_d.i0load   & ~dec_tlu_flush_lower_wb;
-      r_d_in.i0store     =  r_d.i0store  & ~dec_tlu_flush_lower_wb;
-
-   end
-
-
-   rvdfflie #(.WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15)) wbff (.*, .en(i0_wb_ctl_en), .din(r_d_in), .dout(wbd));
-
-   assign dec_i0_waddr_r[4:0]       =  r_d_in.i0rd[4:0];
-
-   assign     i0_wen_r              =  r_d_in.i0v & ~dec_tlu_i0_kill_writeb_r;
-   assign dec_i0_wen_r              =  i0_wen_r   & ~r_d_in.i0div & ~i0_load_kill_wen_r;  // don't write a nonblock load 1st time down the pipe
-   assign dec_i0_wdata_r[31:0]      =  i0_result_corr_r[31:0];
-
-
-   // divide stuff
-   assign div_e1_to_r         = (x_d.i0div & x_d.i0valid) |
-                                (r_d.i0div & r_d.i0valid);
-
-   assign div_active_in = i0_div_decode_d | (div_active & ~exu_div_wren & ~nonblock_div_cancel);
-
-
-   assign dec_div_active = div_active;
-
-   // nonblocking div scheme
-
-   assign i0_nonblock_div_stall  = (dec_i0_rs1_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs1[4:0])) |
-                                   (dec_i0_rs2_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs2[4:0]));
-
-
-   assign div_flush              = (x_d.i0div & x_d.i0valid & (x_d.i0rd[4:0]==5'b0)                           ) |
-                                   (x_d.i0div & x_d.i0valid & dec_tlu_flush_lower_r                           ) |
-                                   (r_d.i0div & r_d.i0valid & dec_tlu_flush_lower_r & dec_tlu_i0_kill_writeb_r);
-
-
-   // cancel if any younger inst committing this cycle to same dest as nonblock divide
-   assign nonblock_div_cancel    = (div_active &  div_flush) |
-                                   (div_active & ~div_e1_to_r & (r_d.i0rd[4:0] == div_waddr_wb[4:0]) & i0_wen_r);
-
-   assign dec_div_cancel         =  nonblock_div_cancel;
-
-
-
-   assign i0_div_decode_d            =  i0_legal_decode_d & i0_dp.div;
-
-// for load_to_use_plus1, the load result data is merged in R stage instead of D
-
-   if ( pt.LOAD_TO_USE_PLUS1 == 1 ) begin : genblock1
-      assign i0_result_x[31:0]          = exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = (r_d.i0v & r_d.i0load) ? lsu_result_m[31:0] : i0_result_r_raw[31:0];
-   end
-   else begin : genblock1
-      assign i0_result_x[31:0]          = (x_d.i0v & x_d.i0load) ? lsu_result_m[31:0] : exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = i0_result_r_raw[31:0];
-   end
-
-
-   rvdffe #(32) i0_result_r_ff       (.*, .en(i0_r_data_en & (x_d.i0v | x_d.csrwen | debug_valid_x)),  .din(i0_result_x[31:0]),       .dout(i0_result_r_raw[31:0]));
-
-   // correct lsu load data - don't use for bypass, do pass down the pipe
-   assign i0_result_corr_r[31:0]     = (r_d.i0v & r_d.i0load) ? lsu_result_corr_r[31:0] : i0_result_r_raw[31:0];
-
-
-   rvdffe #(12) e1brpcff             (.*, .en(i0_x_data_en), .din(last_br_immed_d[12:1] ), .dout(last_br_immed_x[12:1]));
-
-
-
-   assign i0_wb_en                   =  i0_wb_data_en;
-
-   assign i0_inst_wb_in[31:0]        =  i0_inst_r[31:0];
-   assign i0_inst_d[31:0]            = (dec_i0_pc4_d)    ?  i0[31:0]                                  :  {16'b0, ifu_i0_cinst[15:0]};
-
-
-   assign trace_enable = ~dec_tlu_trace_disable;
-
-
-   rvdffe #(.WIDTH(5),.OVERRIDE(1))  i0rdff  (.*, .en(i0_div_decode_d),        .din(i0r.rd[4:0]),             .dout(div_waddr_wb[4:0]));
-
-   rvdffe #(32) i0xinstff            (.*, .en(i0_x_data_en & trace_enable),    .din(i0_inst_d[31:0]),         .dout(i0_inst_x[31:0]));
-   rvdffe #(32) i0cinstff            (.*, .en(i0_r_data_en & trace_enable),    .din(i0_inst_x[31:0]),         .dout(i0_inst_r[31:0]));
-
-   rvdffe #(32) i0wbinstff           (.*, .en(i0_wb_en & trace_enable),        .din(i0_inst_wb_in[31:0]),     .dout(i0_inst_wb[31:0]));
-   rvdffe #(31) i0wbpcff             (.*, .en(i0_wb_en & trace_enable),        .din(dec_tlu_i0_pc_r[31:1]),   .dout(  i0_pc_wb[31:1]));
-
-   assign dec_i0_inst_wb[31:0] = i0_inst_wb[31:0];
-   assign dec_i0_pc_wb[31:1] = i0_pc_wb[31:1];
-
-
-
-   rvdffpcie #(31) i0_pc_r_ff           (.*, .en(i0_r_data_en), .din(exu_i0_pc_x[31:1]), .dout(dec_i0_pc_r[31:1]));
-
-   assign dec_tlu_i0_pc_r[31:1]      = dec_i0_pc_r[31:1];
-
-
-   rvbradder ibradder_correct (
-                     .pc(exu_i0_pc_x[31:1]),
-                     .offset(last_br_immed_x[12:1]),
-                     .dout(pred_correct_npc_x[31:1]));
-
-
-
-   // add nonblock load rs1/rs2 bypass cases
-
-   assign i0_rs1_nonblock_load_bypass_en_d  = dec_i0_rs1_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_nonblock_load_bypass_en_d  = dec_i0_rs2_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs2[4:0]);
-
-
-
-   // bit 2 is priority match, bit 0 lowest priority, i0_x, i0_r
-
-   assign i0_rs1bypass[2]                =  i0_rs1_depth_d[0] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul                      );
-   assign i0_rs1bypass[1]                =  i0_rs1_depth_d[0] & (                                          i0_rs1_class_d.load);
-   assign i0_rs1bypass[0]                =  i0_rs1_depth_d[1] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul | i0_rs1_class_d.load);
-
-   assign i0_rs2bypass[2]                =  i0_rs2_depth_d[0] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul                      );
-   assign i0_rs2bypass[1]                =  i0_rs2_depth_d[0] & (                                          i0_rs2_class_d.load);
-   assign i0_rs2bypass[0]                =  i0_rs2_depth_d[1] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul | i0_rs2_class_d.load);
-
-
-   assign dec_i0_rs1_bypass_en_d[3]      =  i0_rs1_nonblock_load_bypass_en_d & ~i0_rs1bypass[0] & ~i0_rs1bypass[1] & ~i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[2]      =  i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[1]      =  i0_rs1bypass[1];
-   assign dec_i0_rs1_bypass_en_d[0]      =  i0_rs1bypass[0];
-
-   assign dec_i0_rs2_bypass_en_d[3]      =  i0_rs2_nonblock_load_bypass_en_d & ~i0_rs2bypass[0] & ~i0_rs2bypass[1] & ~i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[2]      =  i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[1]      =  i0_rs2bypass[1];
-   assign dec_i0_rs2_bypass_en_d[0]      =  i0_rs2bypass[0];
-
-
-   assign dec_i0_result_r[31:0]          =  i0_result_r[31:0];
-
-
-endmodule // eb1_dec_decode_ctl
-
-
-
-
-
-// file "decode" is human readable file that has all of the instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "decode" except legal equation:
-
-// 1) coredecode -in decode > coredecode.e
-
-// 2) espresso -Dso -oeqntott coredecode.e | addassign -pre out.  > equations
-
-// to generate the legal (32b instruction is legal) equation below:
-
-// 1) coredecode -in decode -legal > legal.e
-
-// 2) espresso -Dso -oeqntott legal.e | addassign -pre out. > legal_equation
-
-module eb1_dec_dec_ctl
-import eb1_pkg::*;
-  (
-   input logic [31:0] inst,
-
-   output eb1_dec_pkt_t out
-   );
-
-   logic [31:0] i;
-
-
-   assign i[31:0] = inst[31:0];
-
-
-assign out.alu = (i[30]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[5]&i[4]) | (i[29]
-    &!i[27]&!i[24]&i[4]) | (!i[25]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[25]
-    &i[13]&i[12]) | (i[27]&i[25]&i[14]&i[4]) | (i[29]&i[27]&!i[14]&i[4]) | (
-    i[29]&!i[14]&i[5]&i[4]) | (!i[27]&!i[25]&i[14]&i[4]) | (i[30]&!i[29]
-    &!i[13]&i[4]) | (!i[30]&!i[27]&!i[25]&i[4]) | (i[13]&!i[5]&i[4]) | (
-    !i[12]&!i[5]&i[4]) | (i[2]) | (i[6]) | (i[30]&i[24]&i[23]&i[22]&i[21]
-    &i[20]&!i[5]&i[4]) | (!i[30]&i[29]&!i[24]&!i[23]&i[22]&i[21]&i[20]
-    &!i[5]&i[4]) | (!i[30]&i[24]&!i[23]&!i[22]&!i[21]&!i[20]&!i[5]&i[4]);
-
-assign out.rs1 = (!i[14]&!i[13]&!i[2]) | (!i[13]&i[11]&!i[2]) | (i[19]&i[13]&!i[2]) | (
-    !i[13]&i[10]&!i[2]) | (i[18]&i[13]&!i[2]) | (!i[13]&i[9]&!i[2]) | (
-    i[17]&i[13]&!i[2]) | (!i[13]&i[8]&!i[2]) | (i[16]&i[13]&!i[2]) | (
-    !i[13]&i[7]&!i[2]) | (i[15]&i[13]&!i[2]) | (!i[4]&!i[3]) | (!i[6]
-    &!i[2]);
-
-assign out.rs2 = (i[5]&!i[4]&!i[2]) | (!i[6]&i[5]&!i[2]);
-
-assign out.imm12 = (!i[4]&!i[3]&i[2]) | (i[13]&!i[5]&i[4]&!i[2]) | (!i[13]&!i[12]
-    &i[6]&i[4]) | (!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.rd = (!i[5]&!i[2]) | (i[5]&i[2]) | (i[4]);
-
-assign out.shimm5 = (i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.imm20 = (i[5]&i[3]) | (i[4]&i[2]);
-
-assign out.pc = (!i[5]&!i[3]&i[2]) | (i[5]&i[3]);
-
-assign out.load = (!i[5]&!i[4]&!i[2]);
-
-assign out.store = (!i[6]&i[5]&!i[4]);
-
-assign out.lsu = (!i[6]&!i[4]&!i[2]);
-
-assign out.add = (!i[14]&!i[13]&!i[12]&!i[5]&i[4]) | (!i[5]&!i[3]&i[2]) | (!i[30]
-    &!i[25]&!i[14]&!i[13]&!i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sub = (i[30]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (!i[29]&!i[25]&!i[14]
-    &i[13]&!i[6]&i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]) | (
-    !i[14]&i[13]&!i[5]&i[4]&!i[2]) | (i[6]&!i[4]&!i[2]);
-
-assign out.land = (!i[27]&!i[25]&i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[14]&i[13]&i[12]
-    &!i[5]&!i[2]);
-
-assign out.lor = (!i[6]&i[3]) | (!i[29]&!i[27]&!i[25]&i[14]&i[13]&!i[12]&!i[6]&!i[2]) | (
-    i[5]&i[4]&i[2]) | (!i[13]&!i[12]&i[6]&i[4]) | (i[14]&i[13]&!i[12]
-    &!i[5]&!i[2]);
-
-assign out.lxor = (!i[29]&!i[27]&!i[25]&i[14]&!i[13]&!i[12]&i[4]&!i[2]) | (i[14]
-    &!i[13]&!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sll = (!i[29]&!i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sra = (i[30]&!i[29]&!i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.srl = (!i[30]&!i[29]&!i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.slt = (!i[29]&!i[25]&!i[14]&i[13]&!i[6]&i[4]&!i[2]) | (!i[14]&i[13]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.unsign = (!i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]) | (!i[14]&i[13]
-    &i[12]&!i[5]&!i[2]) | (i[13]&i[6]&!i[4]&!i[2]) | (i[14]&!i[5]&!i[4]) | (
-    !i[25]&!i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[27]&i[25]&i[14]&i[13]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.condbr = (i[6]&!i[4]&!i[2]);
-
-assign out.beq = (!i[14]&!i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bne = (!i[14]&i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bge = (i[14]&i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.blt = (i[14]&!i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.jal = (i[6]&i[2]);
-
-assign out.by = (!i[13]&!i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.half = (i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.word = (i[13]&!i[6]&!i[4]);
-
-assign out.csr_read = (i[13]&i[6]&i[4]) | (i[7]&i[6]&i[4]) | (i[8]&i[6]&i[4]) | (
-    i[9]&i[6]&i[4]) | (i[10]&i[6]&i[4]) | (i[11]&i[6]&i[4]);
-
-assign out.csr_clr = (i[15]&i[13]&i[12]&i[6]&i[4]) | (i[16]&i[13]&i[12]&i[6]&i[4]) | (
-    i[17]&i[13]&i[12]&i[6]&i[4]) | (i[18]&i[13]&i[12]&i[6]&i[4]) | (
-    i[19]&i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_set = (i[15]&!i[12]&i[6]&i[4]) | (i[16]&!i[12]&i[6]&i[4]) | (i[17]
-    &!i[12]&i[6]&i[4]) | (i[18]&!i[12]&i[6]&i[4]) | (i[19]&!i[12]&i[6]
-    &i[4]);
-
-assign out.csr_write = (!i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_imm = (i[14]&!i[13]&i[6]&i[4]) | (i[15]&i[14]&i[6]&i[4]) | (i[16]
-    &i[14]&i[6]&i[4]) | (i[17]&i[14]&i[6]&i[4]) | (i[18]&i[14]&i[6]&i[4]) | (
-    i[19]&i[14]&i[6]&i[4]);
-
-assign out.presync = (!i[5]&i[3]) | (!i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (
-    !i[13]&i[9]&i[6]&i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]
-    &i[6]&i[4]) | (i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (
-    i[17]&i[13]&i[6]&i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]
-    &i[4]);
-
-assign out.postsync = (i[12]&!i[5]&i[3]) | (!i[22]&!i[13]&!i[12]&i[6]&i[4]) | (
-    !i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (!i[13]&i[9]&i[6]
-    &i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]&i[6]&i[4]) | (
-    i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (i[17]&i[13]&i[6]
-    &i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]&i[4]);
-
-assign out.ebreak = (!i[22]&i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.ecall = (!i[21]&!i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mret = (i[29]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mul = (!i[30]&i[27]&i[24]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&i[23]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[27]&i[13]
-    &!i[6]&i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[22]&!i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[22]&i[21]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[30]&i[29]&i[27]&!i[23]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]&i[23]&i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[2]) | (i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&!i[27]
-    &i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[14]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.rs1_sign = (!i[27]&i[25]&!i[14]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (
-    !i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.rs2_sign = (!i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.low = (i[25]&!i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.div = (!i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.rem = (!i[27]&i[25]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.fence = (!i[5]&i[3]);
-
-assign out.fence_i = (i[12]&!i[5]&i[3]);
-
-assign out.clz = (i[30]&!i[27]&!i[24]&!i[22]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.ctz = (i[30]&!i[27]&!i[24]&!i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.pcnt = (i[30]&!i[27]&!i[24]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_b = (i[30]&!i[27]&i[22]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_h = (i[30]&!i[27]&i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.slo = (!i[30]&i[29]&!i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sro = (!i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.min = (i[27]&i[25]&i[14]&!i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.max = (i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.pack = (!i[30]&i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packu = (i[30]&i[27]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packh = (!i[30]&i[27]&!i[25]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.rol = (i[30]&!i[27]&!i[14]&i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.ror = (i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbb = (i[30]&!i[27]&!i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    !i[30]&i[27]&i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]) | (i[30]&i[29]&!i[27]
-    &i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[27]&!i[13]&!i[12]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[14]&!i[13]&!i[12]&!i[6]&i[5]&!i[2]) | (i[30]
-    &!i[27]&i[13]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[29]&!i[27]&!i[6]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[29]&i[24]&i[23]&i[22]&i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[29]&i[27]&!i[24]&!i[23]&i[22]
-    &i[21]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]
-    &i[24]&!i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[30]&i[29]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.sbset = (!i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbclr = (i[30]&!i[29]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbinv = (i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbext = (i[30]&!i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbs = (i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]) | (i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.bext = (!i[30]&i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.bdep = (i[30]&i[27]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbe = (i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmul = (i[27]&i[25]&!i[14]&!i[13]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmulh = (i[27]&!i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.clmulr = (i[27]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbc = (i[27]&i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.grev = (i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.gorc = (!i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.shfl = (!i[30]&!i[29]&i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.unshfl = (!i[30]&!i[29]&i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbp = (!i[30]&i[29]&!i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[30]&!i[27]&i[13]&!i[6]
-    &i[5]&i[4]&!i[2]) | (i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (
-    i[30]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (i[29]&!i[27]&i[12]&!i[6]
-    &i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&i[12]&!i[6]&i[5]&i[4]
-    &!i[2]) | (i[29]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.crc32_b = (i[30]&!i[27]&i[24]&!i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]);
-
-assign out.crc32_h = (i[30]&!i[27]&i[24]&!i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32_w = (i[30]&!i[27]&i[24]&!i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32c_b = (i[30]&!i[27]&i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.crc32c_h = (i[30]&!i[27]&i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.crc32c_w = (i[30]&!i[27]&i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.zbr = (i[30]&!i[27]&i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.bfp = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.zbf = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.sh1add = (i[29]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.sh2add = (i[29]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.sh3add = (i[29]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.zba = (i[29]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.pm_alu = (i[28]&i[22]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[29]&!i[27]&!i[25]
-    &!i[6]&i[4]) | (!i[29]&!i[27]&!i[25]&!i[13]&i[12]&!i[6]&i[4]) | (
-    !i[29]&!i[27]&!i[25]&!i[14]&!i[6]&i[4]) | (i[13]&!i[5]&i[4]) | (i[4]
-    &i[2]) | (!i[12]&!i[5]&i[4]);
-
-
-assign out.legal = (!i[31]&!i[30]&!i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]
-    &i[22]&!i[21]&i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]
-    &!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]&!i[21]
-    &!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]&!i[9]&!i[8]
-    &!i[7]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]
-    &!i[25]&i[24]&!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&i[24]&!i[22]&!i[21]&!i[6]&!i[5]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[23]
-    &!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]
-    &!i[28]&!i[26]&!i[25]&!i[24]&!i[23]&!i[21]&!i[6]&!i[5]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[25]&i[13]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[26]&!i[25]&!i[24]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&i[14]&!i[12]&!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[28]&!i[27]&!i[26]&!i[25]&i[13]&!i[12]&!i[6]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[13]&!i[12]
-    &!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[28]&!i[27]&!i[26]&!i[25]
-    &i[14]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[29]
-    &!i[28]&!i[26]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]
-    &i[0]) | (!i[31]&i[30]&!i[28]&i[27]&!i[26]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&i[27]&!i[26]&!i[25]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]
-    &!i[29]&!i[28]&!i[27]&!i[26]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[14]&!i[13]&!i[12]&i[6]&i[5]&!i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[29]
-    &!i[28]&!i[26]&!i[25]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]
-    &i[1]&i[0]) | (i[14]&i[6]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[14]
-    &!i[13]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[12]&!i[6]&!i[5]&i[4]
-    &!i[3]&i[1]&i[0]) | (!i[13]&i[12]&i[6]&i[5]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &!i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[13]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]
-    &!i[13]&!i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]
-    &i[2]&i[1]&i[0]) | (i[13]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    i[6]&i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (!i[14]&!i[12]&!i[6]&!i[4]
-    &!i[3]&!i[2]&i[1]&i[0]) | (!i[13]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]
-    &i[0]) | (i[13]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[6]&i[4]&!i[3]
-    &i[2]&i[1]&i[0]);
-
-
-endmodule // eb1_dec_dec_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_gpr_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})  (
-    input logic [4:0]  raddr0,       // logical read addresses
-    input logic [4:0]  raddr1,
-
-    input logic        wen0,         // write enable
-    input logic [4:0]  waddr0,       // write address
-    input logic [31:0] wd0,          // write data
-
-    input logic        wen1,         // write enable
-    input logic [4:0]  waddr1,       // write address
-    input logic [31:0] wd1,          // write data
-
-    input logic        wen2,         // write enable
-    input logic [4:0]  waddr2,       // write address
-    input logic [31:0] wd2,          // write data
-
-    input logic        clk,
-    input logic        rst_l,
-
-    output logic [31:0] rd0,         // read data
-    output logic [31:0] rd1,
-
-    input  logic        scan_mode
-);
-
-   logic [31:1] [31:0] gpr_out;      // 31 x 32 bit GPRs
-   logic [31:1] [31:0] gpr_in;
-   logic [31:1] w0v,w1v,w2v;
-   logic [31:1] gpr_wr_en;
-
-   // GPR Write Enables
-   assign gpr_wr_en[31:1] = (w0v[31:1] | w1v[31:1] | w2v[31:1]);
-   for ( genvar j=1; j<32; j++ )  begin : gpr
-      rvdffe #(32) gprff (.*, .en(gpr_wr_en[j]), .din(gpr_in[j][31:0]), .dout(gpr_out[j][31:0]));
-   end : gpr
-
-   // the read out
-   always_comb begin
-      rd0[31:0] = 32'b0;
-      rd1[31:0] = 32'b0;
-      w0v[31:1] = 31'b0;
-      w1v[31:1] = 31'b0;
-      w2v[31:1] = 31'b0;
-      gpr_in[31:1] = '0;
-
-      // GPR Read logic
-      for (int j=1; j<32; j++ )  begin
-         rd0[31:0] |= ({32{(raddr0[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-         rd1[31:0] |= ({32{(raddr1[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-      end
-
-     // GPR Write logic
-     for (int j=1; j<32; j++ )  begin
-         w0v[j]     = wen0  & (waddr0[4:0]== 5'(j) );
-         w1v[j]     = wen1  & (waddr1[4:0]== 5'(j) );
-         w2v[j]     = wen2  & (waddr2[4:0]== 5'(j) );
-         gpr_in[j]  =    ({32{w0v[j]}} & wd0[31:0]) |
-                         ({32{w1v[j]}} & wd1[31:0]) |
-                         ({32{w2v[j]}} & wd2[31:0]);
-     end
-   end // always_comb begin
-
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_ib_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic                 dbg_cmd_valid,                      // valid dbg cmd
-
-   input logic                 dbg_cmd_write,                      // dbg cmd is write
-   input logic [1:0]           dbg_cmd_type,                       // dbg type
-   input logic [31:0]          dbg_cmd_addr,                       // expand to 31:0
-
-   input eb1_br_pkt_t i0_brp,                                     // i0 branch packet from aligner
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index,    // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,               // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,              // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input logic       ifu_i0_pc4,                                   // i0 is 4B inst else 2B
-   input logic       ifu_i0_valid,                                 // i0 valid from ifu
-   input logic       ifu_i0_icaf,                                  // i0 instruction access fault
-   input logic [1:0] ifu_i0_icaf_type,                             // i0 instruction access fault type
-
-   input logic   ifu_i0_icaf_second,                               // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,                                     // i0 double-bit error
-   input logic [31:0]  ifu_i0_instr,                               // i0 instruction from the aligner
-   input logic [31:1]  ifu_i0_pc,                                  // i0 pc from the aligner
-
-
-   output logic dec_ib0_valid_d,                                   // ib0 valid
-   output logic dec_debug_valid_d,                                 // Debug read or write at D-stage
-
-
-   output logic [31:0] dec_i0_instr_d,                             // i0 inst at decode
-
-   output logic [31:1] dec_i0_pc_d,                                // i0 pc at decode
-
-   output logic dec_i0_pc4_d,                                      // i0 is 4B inst else 2B
-
-   output eb1_br_pkt_t dec_i0_brp,                                // i0 branch packet at decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   output logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,              // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag,             // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   output logic dec_i0_icaf_d,                                     // i0 instruction access fault at decode
-   output logic dec_i0_icaf_second_d,                              // i0 instruction access fault on second 2B of 4B inst
-   output logic [1:0] dec_i0_icaf_type_d,                          // i0 instruction access fault type
-   output logic dec_i0_dbecc_d,                                    // i0 double-bit error at decode
-   output logic dec_debug_wdata_rs1_d,                             // put debug write data onto rs1 source: machine is halted
-
-   output logic dec_debug_fence_d                                  // debug fence inst
-
-   );
-
-
-   logic         debug_valid;
-   logic [4:0]   dreg;
-   logic [11:0]  dcsr;
-   logic [31:0]  ib0, ib0_debug_in;
-
-   logic         debug_read;
-   logic         debug_write;
-   logic         debug_read_gpr;
-   logic         debug_write_gpr;
-   logic         debug_read_csr;
-   logic         debug_write_csr;
-
-   logic [34:0]  ifu_i0_pcdata, pc0;
-
-   assign ifu_i0_pcdata[34:0] = { ifu_i0_icaf_second, ifu_i0_dbecc, ifu_i0_icaf,
-                                  ifu_i0_pc[31:1], ifu_i0_pc4 };
-
-   assign pc0[34:0] = ifu_i0_pcdata[34:0];
-
-   assign dec_i0_icaf_second_d = pc0[34];   // icaf's can only decode as i0
-
-   assign dec_i0_dbecc_d = pc0[33];
-
-   assign dec_i0_icaf_d = pc0[32];
-   assign dec_i0_pc_d[31:1] = pc0[31:1];
-   assign dec_i0_pc4_d = pc0[0];
-
-   assign dec_i0_icaf_type_d[1:0] = ifu_i0_icaf_type[1:0];
-
-// GPR accesses
-
-// put reg to read on rs1
-// read ->   or %x0,  %reg,%x0      {000000000000,reg[4:0],110000000110011}
-
-// put write date on rs1
-// write ->  or %reg, %x0, %x0      {00000000000000000110,reg[4:0],0110011}
-
-
-// CSR accesses
-// csr is of form rd, csr, rs1
-
-// read  -> csrrs %x0, %csr, %x0     {csr[11:0],00000010000001110011}
-
-// put write data on rs1
-// write -> csrrw %x0, %csr, %x0     {csr[11:0],00000001000001110011}
-
-// abstract memory command not done here
-   assign debug_valid = dbg_cmd_valid & (dbg_cmd_type[1:0] != 2'h2);
-
-
-   assign debug_read  = debug_valid & ~dbg_cmd_write;
-   assign debug_write = debug_valid &  dbg_cmd_write;
-
-   assign debug_read_gpr  = debug_read  & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_write_gpr = debug_write & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_read_csr  = debug_read  & (dbg_cmd_type[1:0]==2'h1);
-   assign debug_write_csr = debug_write & (dbg_cmd_type[1:0]==2'h1);
-
-   assign dreg[4:0]  = dbg_cmd_addr[4:0];
-   assign dcsr[11:0] = dbg_cmd_addr[11:0];
-
-
-   assign ib0_debug_in[31:0] = ({32{debug_read_gpr}}  & {12'b000000000000,dreg[4:0],15'b110000000110011}) |
-                               ({32{debug_write_gpr}} & {20'b00000000000000000110,dreg[4:0],7'b0110011}) |
-                               ({32{debug_read_csr}}  & {dcsr[11:0],20'b00000010000001110011}) |
-                               ({32{debug_write_csr}} & {dcsr[11:0],20'b00000001000001110011});
-
-
-
-   // machine is in halted state, pipe empty, write will always happen next cycle
-
-   assign dec_debug_wdata_rs1_d = debug_write_gpr | debug_write_csr;
-
-
-   // special fence csr for use only in debug mode
-
-   assign dec_debug_fence_d = debug_write_csr & (dcsr[11:0] == 12'h7c4);
-
-   assign ib0[31:0] = (debug_valid) ? ib0_debug_in[31:0] : ifu_i0_instr[31:0];
-
-   assign dec_ib0_valid_d = ifu_i0_valid | debug_valid;
-
-   assign dec_debug_valid_d = debug_valid;
-
-   assign dec_i0_instr_d[31:0] = ib0[31:0];
-
-   assign dec_i0_brp = i0_brp;
-   assign dec_i0_bp_index = ifu_i0_bp_index;
-   assign dec_i0_bp_fghr = ifu_i0_bp_fghr;
-   assign dec_i0_bp_btag = ifu_i0_bp_btag;
-   assign dec_i0_bp_fa_index = ifu_i0_fa_index;
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-//********************************************************************************
-// eb1_dec_tlu_ctl.sv
-//
-//
-// Function: CSRs, Commit/WB, flushing, exceptions, interrupts
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dec_tlu_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,
-   input logic free_clk,
-   input logic free_l2clk,
-   input logic rst_l,
-   input logic scan_mode,
-
-   input logic [31:1] rst_vec, // reset vector, from core pins
-   input logic        nmi_int, // nmi pin
-   input logic [31:1] nmi_vec, // nmi vector
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-
-   input logic lsu_fastint_stall_any,   // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-
-   // perf counter inputs
-   input logic       ifu_pmu_instr_aligned,   // aligned instructions
-   input logic       ifu_pmu_fetch_stall, // fetch unit stalled
-   input logic       ifu_pmu_ic_miss, // icache miss
-   input logic       ifu_pmu_ic_hit, // icache hit
-   input logic       ifu_pmu_bus_error, // Instruction side bus error
-   input logic       ifu_pmu_bus_busy, // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn, // Instruction side bus transaction
-   input logic       dec_pmu_instr_decoded, // decoded instructions
-   input logic       dec_pmu_decode_stall, // decode stall
-   input logic       dec_pmu_presync_stall, // decode stall due to presync'd inst
-   input logic       dec_pmu_postsync_stall,// decode stall due to postsync'd inst
-   input logic       lsu_store_stall_any,    // SB or WB is full, stall decode
-   input logic       dma_dccm_stall_any,     // DMA stall of lsu
-   input logic       dma_iccm_stall_any,     // DMA stall of ifu
-   input logic       exu_pmu_i0_br_misp,     // pipe 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // pipe 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // pipe 0 4 byte branch
-   input logic       lsu_pmu_bus_trxn,       // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned, // D side bus misaligned
-   input logic       lsu_pmu_bus_error,      // D side bus error
-   input logic       lsu_pmu_bus_busy,       // D side bus busy
-   input logic       lsu_pmu_load_external_m, // D side bus load
-   input logic       lsu_pmu_store_external_m, // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr, // Fast int address
-   input logic [1:0] lsu_fir_error, // Fast int lookup error
-
-   input logic       iccm_dma_sb_error,      // I side dma single bit error
-
-   input    eb1_lsu_error_pkt_t lsu_error_pkt_r, // lsu precise exception/error packet
-   input logic         lsu_single_ecc_error_incr, // LSU inc SB error counter
-
-   input logic dec_pause_state, // Pause counter not zero
-   input logic         lsu_imprecise_error_store_any,      // store bus error
-   input logic         lsu_imprecise_error_load_any,      // store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any, // store bus error address
-
-   input logic        dec_csr_wen_unq_d,       // valid csr with write - for csr legal
-   input logic        dec_csr_any_unq_d,       // valid csr - for csr legal
-   input logic [11:0] dec_csr_rdaddr_d,      // read address for csr
-
-   input logic        dec_csr_wen_r,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic        dec_csr_stall_int_ff, // csr is mie/mstatus
-
-   input logic dec_tlu_i0_valid_r, // pipe 0 op at e4 is valid
-
-   input logic [31:1] exu_npc_r, // for NPC tracking
-
-   input logic [31:1] dec_tlu_i0_pc_r, // for PC/NPC tracking
-
-   input eb1_trap_pkt_t dec_tlu_packet_r, // exceptions known at decode
-
-   input logic [31:0] dec_illegal_inst, // For mtval
-   input logic        dec_i0_decode_d,  // decode valid, used for clean icache diagnostics
-
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r, // history
-   input logic        exu_i0_br_error_r, // error
-   input logic        exu_i0_br_start_error_r, // start error
-   input logic        exu_i0_br_valid_r, // valid
-   input logic        exu_i0_br_mp_r, // mispredict
-   input logic        exu_i0_br_middle_r, // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r, // way hit or repl
-
-   output logic dec_tlu_core_empty,  // core is empty
-   // Debug start
-   output logic dec_dbg_cmd_done, // abstract command done
-   output logic dec_dbg_cmd_fail, // abstract command failed
-   output logic dec_tlu_dbg_halted, // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode, // Core is in debug mode
-   output logic dec_tlu_resume_ack, // Resume acknowledge
-   output logic dec_tlu_debug_stall, // stall decode while waiting on core to empty
-
-   output logic dec_tlu_flush_noredir_r , // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only, // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r, // single step
-   output logic dec_tlu_flush_err_r, // iside perr/ecc rfpc. This is the D stage of the error
-
-   output logic dec_tlu_flush_extint, // fast ext int started
-   output logic [31:2] dec_tlu_meihap, // meihap for fast int
-
-   input  logic dbg_halt_req, // DM requests a halt
-   input  logic dbg_resume_req, // DM requests a resume
-   input  logic ifu_miss_state_idle, // I-side miss buffer empty
-   input  logic lsu_idle_any, // lsu is idle
-   input  logic dec_div_active, // oop div is active
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // trigger info for trigger blocks
-
-   input logic  ifu_ic_error_start,     // IC single bit error
-   input logic  ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-
-   input logic [70:0] ifu_ic_debug_rd_data, // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid, // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-   // Debug end
-
-   input logic [7:0] pic_claimid, // pic claimid for csr
-   input logic [3:0] pic_pl, // pic priv level for csr
-   input logic       mhwakeup, // high priority external int, wakeup if halted
-
-   input logic mexintpend, // external interrupt pending
-   input logic timer_int, // timer interrupt pending
-   input logic soft_int, // software interrupt pending
-
-   output logic o_cpu_halt_status, // PMU interface, halted
-   output logic o_cpu_halt_ack, // halt req ack
-   output logic o_cpu_run_ack, // run req ack
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // Core ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic [3:0] dec_tlu_meicurpl, // to PIC
-   output logic [3:0] dec_tlu_meipt, // to PIC
-
-
-   output logic [31:0] dec_csr_rddata_d,      // csr read data at wb
-   output logic dec_csr_legal_d,              // csr indicates legal operation
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // branch pkt to bp
-
-   output logic dec_tlu_i0_kill_writeb_wb,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_wb,       // commit has a flush (exception, int, mispredict at e4)
-   output logic dec_tlu_i0_commit_cmt,        // committed an instruction
-
-   output logic dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_r,       // commit has a flush (exception, int)
-   output logic [31:1] dec_tlu_flush_path_r, // flush pc
-   output logic dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-   output logic dec_tlu_wr_pause_r,           // CSR write to pause reg is at R.
-   output logic dec_tlu_flush_pause_r,        // Flush is due to pause
-
-   output logic dec_tlu_presync_d,            // CSR read needs to be presync'd
-   output logic dec_tlu_postsync_d,           // CSR needs to be presync'd
-
-
-   output logic [31:0] dec_tlu_mrac_ff,        // CSR for memory region control
-
-   output logic dec_tlu_force_halt, // halt has been forced
-
-   output logic dec_tlu_perfcnt0, // toggles when pipe0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1, // toggles when pipe0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2, // toggles when pipe0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3, // toggles when pipe0 perf counter 3 has an event inc
-
-   output logic dec_tlu_i0_exc_valid_wb1, // pipe 0 exception valid
-   output logic dec_tlu_i0_valid_wb1,  // pipe 0 valid
-   output logic dec_tlu_int_valid_wb1, // pipe 2 int valid
-   output logic [4:0] dec_tlu_exc_cause_wb1, // exception or int cause
-   output logic [31:0] dec_tlu_mtval_wb1, // MTVAL value
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable, // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable, // disable core ECC
-   output logic  dec_tlu_bpred_disable,           // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,   // disable writebuffer coalescing
-   output logic  dec_tlu_pipelining_disable,      // disable pipelining
-   output logic  dec_tlu_trace_disable,           // disable trace
-   output logic [2:0]  dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override, // override misc clock domain gating
-   output logic  dec_tlu_dec_clk_override,  // override decode clock domain gating
-   output logic  dec_tlu_ifu_clk_override,  // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,  // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,  // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,  // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,// override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override, // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override   // override ICCM clock domain gating
-   );
-
-   logic         clk_override, e4e5_int_clk, nmi_fir_type, nmi_lsu_load_type, nmi_lsu_store_type, nmi_int_detected_f, nmi_lsu_load_type_f,
-                 nmi_lsu_store_type_f, allow_dbg_halt_csr_write, dbg_cmd_done_ns, i_cpu_run_req_d1_raw, debug_mode_status, lsu_single_ecc_error_r_d1,
-                 sel_npc_r, sel_npc_resume, ce_int,
-                 nmi_in_debug_mode, dpc_capture_npc, dpc_capture_pc, tdata_load, tdata_opcode, tdata_action, perfcnt_halted, tdata_chain,
-                 tdata_kill_write;
-
-
-   logic reset_delayed, reset_detect, reset_detected;
-   logic wr_mstatus_r, wr_mtvec_r, wr_mcyclel_r, wr_mcycleh_r,
-         wr_minstretl_r, wr_minstreth_r, wr_mscratch_r, wr_mepc_r, wr_mcause_r, wr_mscause_r, wr_mtval_r,
-         wr_mrac_r, wr_meihap_r, wr_meicurpl_r, wr_meipt_r, wr_dcsr_r,
-         wr_dpc_r, wr_meicidpl_r, wr_meivt_r, wr_meicpct_r, wr_micect_r, wr_miccmect_r, wr_mfdht_r, wr_mfdhs_r,
-         wr_mdccmect_r,wr_mhpme3_r, wr_mhpme4_r, wr_mhpme5_r, wr_mhpme6_r;
-   logic wr_mpmc_r;
-   logic [1:1] mpmc_b_ns, mpmc, mpmc_b;
-   logic set_mie_pmu_fw_halt, fw_halted_ns, fw_halted;
-   logic wr_mcountinhibit_r;
-   logic [6:0] mcountinhibit;
-   logic wr_mtsel_r, wr_mtdata1_t0_r, wr_mtdata1_t1_r, wr_mtdata1_t2_r, wr_mtdata1_t3_r, wr_mtdata2_t0_r, wr_mtdata2_t1_r, wr_mtdata2_t2_r, wr_mtdata2_t3_r;
-   logic [31:0] mtdata2_t0, mtdata2_t1, mtdata2_t2, mtdata2_t3, mtdata2_tsel_out, mtdata1_tsel_out;
-   logic [9:0]  mtdata1_t0_ns, mtdata1_t0, mtdata1_t1_ns, mtdata1_t1, mtdata1_t2_ns, mtdata1_t2, mtdata1_t3_ns, mtdata1_t3;
-   logic [9:0] tdata_wrdata_r;
-   logic [1:0] mtsel_ns, mtsel;
-   logic tlu_i0_kill_writeb_r;
-   logic [1:0]  mstatus_ns, mstatus;
-   logic [1:0] mfdhs_ns, mfdhs;
-   logic [31:0] force_halt_ctr, force_halt_ctr_f;
-   logic        force_halt;
-   logic [5:0]  mfdht, mfdht_ns;
-   logic mstatus_mie_ns;
-   logic [30:0] mtvec_ns, mtvec;
-   logic [15:2] dcsr_ns, dcsr;
-   logic [5:0] mip_ns, mip;
-   logic [5:0] mie_ns, mie;
-   logic [31:0] mcyclel_ns, mcyclel;
-   logic [31:0] mcycleh_ns, mcycleh;
-   logic [31:0] minstretl_ns, minstretl;
-   logic [31:0] minstreth_ns, minstreth;
-   logic [31:0] micect_ns, micect, miccmect_ns, miccmect, mdccmect_ns, mdccmect;
-   logic [26:0] micect_inc, miccmect_inc, mdccmect_inc;
-   logic [31:0] mscratch;
-   logic [31:0] mhpmc3, mhpmc3_ns, mhpmc4, mhpmc4_ns, mhpmc5, mhpmc5_ns, mhpmc6, mhpmc6_ns;
-   logic [31:0] mhpmc3h, mhpmc3h_ns, mhpmc4h, mhpmc4h_ns, mhpmc5h, mhpmc5h_ns, mhpmc6h, mhpmc6h_ns;
-   logic [9:0]  mhpme3, mhpme4, mhpme5, mhpme6;
-   logic [31:0] mrac;
-   logic [9:2] meihap;
-   logic [31:10] meivt;
-   logic [3:0] meicurpl_ns, meicurpl;
-   logic [3:0] meicidpl_ns, meicidpl;
-   logic [3:0] meipt_ns, meipt;
-   logic [31:0] mdseac;
-   logic mdseac_locked_ns, mdseac_locked_f, mdseac_en, nmi_lsu_detected;
-   logic [31:1] mepc_ns, mepc;
-   logic [31:1] dpc_ns, dpc;
-   logic [31:0] mcause_ns, mcause;
-   logic [3:0] mscause_ns, mscause, mscause_type;
-   logic [31:0] mtval_ns, mtval;
-   logic dec_pause_state_f, dec_tlu_wr_pause_r_d1, pause_expired_r, pause_expired_wb;
-   logic        tlu_flush_lower_r, tlu_flush_lower_r_d1;
-   logic [31:1] tlu_flush_path_r,  tlu_flush_path_r_d1;
-   logic i0_valid_wb;
-   logic tlu_i0_commit_cmt;
-   logic [31:1] vectored_path, interrupt_path;
-   logic [16:0] dicawics_ns, dicawics;
-   logic        wr_dicawics_r, wr_dicad0_r, wr_dicad1_r, wr_dicad0h_r;
-   logic [31:0] dicad0_ns, dicad0, dicad0h_ns, dicad0h;
-
-   logic [6:0]  dicad1_ns, dicad1_raw;
-   logic [31:0] dicad1;
-   logic        ebreak_r, ebreak_to_debug_mode_r, ecall_r, illegal_r, mret_r, inst_acc_r, fence_i_r,
-                ic_perr_r, iccm_sbecc_r, ebreak_to_debug_mode_r_d1, kill_ebreak_count_r, inst_acc_second_r;
-   logic ce_int_ready, ext_int_ready, timer_int_ready, soft_int_ready, int_timer0_int_ready, int_timer1_int_ready, mhwakeup_ready,
-         take_ext_int, take_ce_int, take_timer_int, take_soft_int, take_int_timer0_int, take_int_timer1_int, take_nmi, take_nmi_r_d1, int_timer0_int_possible, int_timer1_int_possible;
-   logic i0_exception_valid_r, interrupt_valid_r, i0_exception_valid_r_d1, interrupt_valid_r_d1, exc_or_int_valid_r, exc_or_int_valid_r_d1, mdccme_ce_req, miccme_ce_req, mice_ce_req;
-   logic synchronous_flush_r;
-   logic [4:0]  exc_cause_r, exc_cause_wb;
-   logic        mcyclel_cout, mcyclel_cout_f, mcyclela_cout;
-   logic [31:0] mcyclel_inc;
-   logic [31:0] mcycleh_inc;
-
-   logic        minstretl_cout, minstretl_cout_f, minstret_enable, minstretl_cout_ns, minstretl_couta;
-
-   logic [31:0] minstretl_inc, minstretl_read;
-   logic [31:0] minstreth_inc, minstreth_read;
-   logic [31:1] pc_r, pc_r_d1, npc_r, npc_r_d1;
-   logic valid_csr;
-   logic rfpc_i0_r;
-   logic lsu_i0_rfnpc_r;
-   logic dec_tlu_br0_error_r, dec_tlu_br0_start_error_r, dec_tlu_br0_v_r;
-   logic lsu_i0_exc_r, lsu_i0_exc_r_raw, lsu_exc_ma_r, lsu_exc_acc_r, lsu_exc_st_r,
-         lsu_exc_valid_r, lsu_exc_valid_r_raw, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1, block_interrupts;
-   logic i0_trigger_eval_r;
-
-   logic request_debug_mode_r, request_debug_mode_r_d1, request_debug_mode_done, request_debug_mode_done_f;
-   logic take_halt, halt_taken, halt_taken_f, internal_dbg_halt_mode, dbg_tlu_halted_f, take_reset,
-         dbg_tlu_halted, core_empty, lsu_idle_any_f, ifu_miss_state_idle_f, resume_ack_ns,
-         debug_halt_req_f, debug_resume_req_f_raw, debug_resume_req_f, enter_debug_halt_req, dcsr_single_step_done, dcsr_single_step_done_f,
-         debug_halt_req_d1, debug_halt_req_ns, dcsr_single_step_running, dcsr_single_step_running_f, internal_dbg_halt_timers;
-
-   logic [3:0] i0_trigger_r, trigger_action, trigger_enabled,
-               i0_trigger_chain_masked_r;
-   logic       i0_trigger_hit_r, i0_trigger_hit_raw_r, i0_trigger_action_r,
-               trigger_hit_r_d1,
-               mepc_trigger_hit_sel_pc_r;
-   logic [3:0] update_hit_bit_r, i0_iside_trigger_has_pri_r,i0trigger_qual_r, i0_lsu_trigger_has_pri_r;
-   logic cpu_halt_status, cpu_halt_ack, cpu_run_ack, ext_halt_pulse, i_cpu_halt_req_d1, i_cpu_run_req_d1;
-
-   logic inst_acc_r_raw, trigger_hit_dmode_r, trigger_hit_dmode_r_d1;
-   logic [9:0] mcgc, mcgc_ns, mcgc_int;
-   logic [18:0] mfdc;
-   logic i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual, pmu_fw_halt_req_ns, pmu_fw_halt_req_f, int_timer_stalled,
-         fw_halt_req, enter_pmu_fw_halt_req, pmu_fw_tlu_halted, pmu_fw_tlu_halted_f, internal_pmu_fw_halt_mode,
-         internal_pmu_fw_halt_mode_f, int_timer0_int_hold, int_timer1_int_hold, int_timer0_int_hold_f, int_timer1_int_hold_f;
-   logic nmi_int_delayed, nmi_int_detected;
-   logic [3:0] trigger_execute, trigger_data, trigger_store;
-   logic dec_tlu_pmu_fw_halted;
-
-   logic mpc_run_state_ns, debug_brkpt_status_ns, mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns, dbg_halt_state_ns, dbg_run_state_ns,
-         dbg_halt_state_f, mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f, mpc_halt_state_f, mpc_halt_state_ns, mpc_run_state_f, debug_brkpt_status_f,
-         mpc_debug_halt_ack_f, mpc_debug_run_ack_f, dbg_run_state_f, mpc_debug_halt_req_sync_pulse,
-         mpc_debug_run_req_sync_pulse, debug_brkpt_valid, debug_halt_req, debug_resume_req, dec_tlu_mpc_halted_only_ns;
-   logic take_ext_int_start, ext_int_freeze, take_ext_int_start_d1, take_ext_int_start_d2,
-         take_ext_int_start_d3, ext_int_freeze_d1, csr_meicpct, ignore_ext_int_due_to_lsu_stall;
-   logic mcause_sel_nmi_store, mcause_sel_nmi_load, mcause_sel_nmi_ext, fast_int_meicpct;
-   logic [1:0] mcause_fir_error_type;
-   logic dbg_halt_req_held_ns, dbg_halt_req_held, dbg_halt_req_final;
-   logic iccm_repair_state_ns, iccm_repair_state_d1, iccm_repair_state_rfnpc;
-
-
-   // internal timer, isolated for size reasons
-   logic [31:0] dec_timer_rddata_d;
-   logic dec_timer_read_d, dec_timer_t0_pulse, dec_timer_t1_pulse;
-   logic csr_mitctl0;
-   logic csr_mitctl1;
-   logic csr_mitb0;
-   logic csr_mitb1;
-   logic csr_mitcnt0;
-   logic csr_mitcnt1;
-
-   logic nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync, mpc_debug_run_req_sync, mpc_debug_halt_req_sync_raw;
-   logic csr_wr_clk;
-   logic e4e5_clk, e4_valid, e5_valid, e4e5_valid, internal_dbg_halt_mode_f, internal_dbg_halt_mode_f2;
-   logic lsu_pmu_load_external_r, lsu_pmu_store_external_r;
-   logic dec_tlu_flush_noredir_r_d1, dec_tlu_flush_pause_r_d1;
-   logic lsu_single_ecc_error_r;
-   logic [31:0] lsu_error_pkt_addr_r;
-   logic mcyclel_cout_in;
-   logic i0_valid_no_ebreak_ecall_r;
-   logic minstret_enable_f;
-   logic sel_exu_npc_r, sel_flush_npc_r, sel_hold_npc_r;
-   logic pc0_valid_r;
-   logic [15:0] mfdc_int, mfdc_ns;
-   logic [31:0] mrac_in;
-   logic [31:27] csr_sat;
-   logic [8:6] dcsr_cause;
-   logic enter_debug_halt_req_le, dcsr_cause_upgradeable;
-   logic icache_rd_valid, icache_wr_valid, icache_rd_valid_f, icache_wr_valid_f;
-   logic [3:0]      mhpmc_inc_r, mhpmc_inc_r_d1;
-
-   logic [3:0][9:0] mhpme_vec;
-   logic            mhpmc3_wr_en0, mhpmc3_wr_en1, mhpmc3_wr_en;
-   logic            mhpmc4_wr_en0, mhpmc4_wr_en1, mhpmc4_wr_en;
-   logic            mhpmc5_wr_en0, mhpmc5_wr_en1, mhpmc5_wr_en;
-   logic            mhpmc6_wr_en0, mhpmc6_wr_en1, mhpmc6_wr_en;
-   logic            mhpmc3h_wr_en0, mhpmc3h_wr_en;
-   logic            mhpmc4h_wr_en0, mhpmc4h_wr_en;
-   logic            mhpmc5h_wr_en0, mhpmc5h_wr_en;
-   logic            mhpmc6h_wr_en0, mhpmc6h_wr_en;
-   logic [63:0]     mhpmc3_incr, mhpmc4_incr, mhpmc5_incr, mhpmc6_incr;
-   logic perfcnt_halted_d1, zero_event_r;
-   logic [3:0] perfcnt_during_sleep;
-   logic [9:0] event_r;
-
-   eb1_inst_pkt_t pmu_i0_itype_qual;
-
-   logic csr_mfdht;
-   logic csr_mfdhs;
-   logic csr_misa;
-   logic csr_mvendorid;
-   logic csr_marchid;
-   logic csr_mimpid;
-   logic csr_mhartid;
-   logic csr_mstatus;
-   logic csr_mtvec;
-   logic csr_mip;
-   logic csr_mie;
-   logic csr_mcyclel;
-   logic csr_mcycleh;
-   logic csr_minstretl;
-   logic csr_minstreth;
-   logic csr_mscratch;
-   logic csr_mepc;
-   logic csr_mcause;
-   logic csr_mscause;
-   logic csr_mtval;
-   logic csr_mrac;
-   logic csr_dmst;
-   logic csr_mdseac;
-   logic csr_meihap;
-   logic csr_meivt;
-   logic csr_meipt;
-   logic csr_meicurpl;
-   logic csr_meicidpl;
-   logic csr_dcsr;
-   logic csr_mcgc;
-   logic csr_mfdc;
-   logic csr_dpc;
-   logic csr_mtsel;
-   logic csr_mtdata1;
-   logic csr_mtdata2;
-   logic csr_mhpmc3;
-   logic csr_mhpmc4;
-   logic csr_mhpmc5;
-   logic csr_mhpmc6;
-   logic csr_mhpmc3h;
-   logic csr_mhpmc4h;
-   logic csr_mhpmc5h;
-   logic csr_mhpmc6h;
-   logic csr_mhpme3;
-   logic csr_mhpme4;
-   logic csr_mhpme5;
-   logic csr_mhpme6;
-   logic csr_mcountinhibit;
-   logic csr_mpmc;
-   logic csr_micect;
-   logic csr_miccmect;
-   logic csr_mdccmect;
-   logic csr_dicawics;
-   logic csr_dicad0h;
-   logic csr_dicad0;
-   logic csr_dicad1;
-   logic csr_dicago;
-   logic presync;
-   logic postsync;
-   logic legal;
-   logic dec_csr_wen_r_mod;
-
-   logic flush_clkvalid;
-   logic sel_fir_addr;
-   logic wr_mie_r;
-   logic mtval_capture_pc_r;
-   logic mtval_capture_pc_plus2_r;
-   logic mtval_capture_inst_r;
-   logic mtval_capture_lsu_r;
-   logic mtval_clear_r;
-   logic wr_mcgc_r;
-   logic wr_mfdc_r;
-   logic wr_mdeau_r;
-   logic trigger_hit_for_dscr_cause_r_d1;
-   logic conditionally_illegal;
-
-   logic  [3:0] ifu_mscause ;
-   logic        ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f;
-
-   eb1_dec_timer_ctl  #(.pt(pt)) int_timers(.*);
-   // end of internal timers
-
-   assign clk_override = dec_tlu_dec_clk_override;
-
-   // Async inputs to the core have to be sync'd to the core clock.
-   rvsyncss #(7) syncro_ff(.*,
-                           .clk(free_clk),
-                           .din ({nmi_int,      timer_int,      soft_int,      i_cpu_halt_req,      i_cpu_run_req,      mpc_debug_halt_req,          mpc_debug_run_req}),
-                           .dout({nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync_raw, mpc_debug_run_req_sync}));
-
-   // for CSRs that have inpipe writes only
-
-   rvoclkhdr csrwr_r_cgc   ( .en(dec_csr_wen_r_mod | clk_override), .l1clk(csr_wr_clk), .* );
-
-   assign e4_valid = dec_tlu_i0_valid_r;
-   assign e4e5_valid = e4_valid | e5_valid;
-   assign flush_clkvalid = internal_dbg_halt_mode_f | i_cpu_run_req_d1 | interrupt_valid_r | interrupt_valid_r_d1 |
-                           reset_delayed | pause_expired_r | pause_expired_wb | ic_perr_r | iccm_sbecc_r |
-                           clk_override;
-   rvoclkhdr e4e5_cgc     ( .en(e4e5_valid | clk_override), .l1clk(e4e5_clk), .* );
-   rvoclkhdr e4e5_int_cgc ( .en(e4e5_valid | flush_clkvalid), .l1clk(e4e5_int_clk), .* );
-
-   rvdffie #(11)  freeff (.*, .clk(free_l2clk),
-                          .din ({ifu_ic_error_start, ifu_iccm_rd_ecc_single_err, iccm_repair_state_ns, e4_valid, internal_dbg_halt_mode,
-                                 lsu_pmu_load_external_m, lsu_pmu_store_external_m, tlu_flush_lower_r,  tlu_i0_kill_writeb_r,
-                                 internal_dbg_halt_mode_f, force_halt}),
-                          .dout({ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f, iccm_repair_state_d1, e5_valid, internal_dbg_halt_mode_f,
-                                 lsu_pmu_load_external_r, lsu_pmu_store_external_r, tlu_flush_lower_r_d1, dec_tlu_i0_kill_writeb_wb,
-                                 internal_dbg_halt_mode_f2, dec_tlu_force_halt}));
-
-   assign dec_tlu_i0_kill_writeb_r = tlu_i0_kill_writeb_r;
-
-   assign nmi_int_detected = (nmi_int_sync & ~nmi_int_delayed) | nmi_lsu_detected | (nmi_int_detected_f & ~take_nmi_r_d1) | nmi_fir_type;
-   // if the first nmi is a lsu type, note it. If there's already an nmi pending, ignore. Simultaneous with FIR, drop.
-   assign nmi_lsu_load_type  = (nmi_lsu_detected & lsu_imprecise_error_load_any &  ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_load_type_f  & ~take_nmi_r_d1);
-   assign nmi_lsu_store_type = (nmi_lsu_detected & lsu_imprecise_error_store_any & ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_store_type_f & ~take_nmi_r_d1);
-
-   assign nmi_fir_type = ~nmi_int_detected_f & take_ext_int_start_d3 & |lsu_fir_error[1:0];
-
-   // Filter subsequent bus errors after the first, until the lock on MDSEAC is cleared
-   assign nmi_lsu_detected = ~mdseac_locked_f & (lsu_imprecise_error_load_any | lsu_imprecise_error_store_any) & ~nmi_fir_type;
-
-
-localparam MSTATUS_MIE   = 0;
-localparam MIP_MCEIP     = 5;
-localparam MIP_MITIP0    = 4;
-localparam MIP_MITIP1    = 3;
-localparam MIP_MEIP      = 2;
-localparam MIP_MTIP      = 1;
-localparam MIP_MSIP      = 0;
-
-localparam MIE_MCEIE     = 5;
-localparam MIE_MITIE0    = 4;
-localparam MIE_MITIE1    = 3;
-localparam MIE_MEIE      = 2;
-localparam MIE_MTIE      = 1;
-localparam MIE_MSIE      = 0;
-
-localparam DCSR_EBREAKM  = 15;
-localparam DCSR_STEPIE   = 11;
-localparam DCSR_STOPC    = 10;
-localparam DCSR_STEP     = 2;
-
-
-   assign reset_delayed = reset_detect ^ reset_detected;
-
-   // ----------------------------------------------------------------------
-   // MPC halt
-   // - can interact with debugger halt and v-v
-
-   // fast ints in progress have priority
-   assign mpc_debug_halt_req_sync = mpc_debug_halt_req_sync_raw & ~ext_int_freeze_d1;
-
-    rvdffie #(16)  mpvhalt_ff (.*, .clk(free_l2clk),
-                                 .din({1'b1, reset_detect,
-                                       nmi_int_sync, nmi_int_detected, nmi_lsu_load_type, nmi_lsu_store_type,
-                                       mpc_debug_halt_req_sync, mpc_debug_run_req_sync,
-                                       mpc_halt_state_ns, mpc_run_state_ns, debug_brkpt_status_ns,
-                                       mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns,
-                                       dbg_halt_state_ns, dbg_run_state_ns,
-                                       dec_tlu_mpc_halted_only_ns}),
-                                .dout({reset_detect, reset_detected,
-                                       nmi_int_delayed, nmi_int_detected_f, nmi_lsu_load_type_f, nmi_lsu_store_type_f,
-                                       mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f,
-                                       mpc_halt_state_f, mpc_run_state_f, debug_brkpt_status_f,
-                                       mpc_debug_halt_ack_f, mpc_debug_run_ack_f,
-                                       dbg_halt_state_f, dbg_run_state_f,
-                                       dec_tlu_mpc_halted_only}));
-
-   // turn level sensitive requests into pulses
-   assign mpc_debug_halt_req_sync_pulse = mpc_debug_halt_req_sync & ~mpc_debug_halt_req_sync_f;
-   assign mpc_debug_run_req_sync_pulse = mpc_debug_run_req_sync & ~mpc_debug_run_req_sync_f;
-
-   // states
-   assign mpc_halt_state_ns = (mpc_halt_state_f | mpc_debug_halt_req_sync_pulse | (reset_delayed & ~mpc_reset_run_req)) & ~mpc_debug_run_req_sync;
-   assign mpc_run_state_ns = (mpc_run_state_f | (mpc_debug_run_req_sync_pulse & ~mpc_debug_run_ack_f)) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // note, MPC halt can allow the jtag debugger to just start sending commands. When that happens, set the interal debugger halt state to prevent
-   // MPC run from starting the core.
-   assign dbg_halt_state_ns = (dbg_halt_state_f | (dbg_halt_req_final | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1)) & ~dbg_resume_req;
-   assign dbg_run_state_ns = (dbg_run_state_f | dbg_resume_req) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // tell dbg we are only MPC halted
-   assign dec_tlu_mpc_halted_only_ns = ~dbg_halt_state_f & mpc_halt_state_f;
-
-   // this asserts from detection of bkpt until after we leave debug mode
-   assign debug_brkpt_valid = ebreak_to_debug_mode_r_d1 | trigger_hit_dmode_r_d1;
-   assign debug_brkpt_status_ns = (debug_brkpt_valid | debug_brkpt_status_f) & (internal_dbg_halt_mode & ~dcsr_single_step_running_f);
-
-   // acks back to interface
-   assign mpc_debug_halt_ack_ns = mpc_halt_state_f & internal_dbg_halt_mode_f & mpc_debug_halt_req_sync & core_empty;
-   assign mpc_debug_run_ack_ns = (mpc_debug_run_req_sync & ~dbg_halt_state_ns & ~mpc_debug_halt_req_sync) | (mpc_debug_run_ack_f & mpc_debug_run_req_sync) ;
-
-   // Pins
-   assign mpc_debug_halt_ack = mpc_debug_halt_ack_f;
-   assign mpc_debug_run_ack = mpc_debug_run_ack_f;
-   assign debug_brkpt_status = debug_brkpt_status_f;
-
-   // DBG halt req is a pulse, fast ext int in progress has priority
-   assign dbg_halt_req_held_ns = (dbg_halt_req | dbg_halt_req_held) & ext_int_freeze_d1;
-   assign dbg_halt_req_final = (dbg_halt_req | dbg_halt_req_held) & ~ext_int_freeze_d1;
-
-   // combine MPC and DBG halt requests
-   assign debug_halt_req = (dbg_halt_req_final | mpc_debug_halt_req_sync | (reset_delayed & ~mpc_reset_run_req)) & ~internal_dbg_halt_mode_f & ~ext_int_freeze_d1;
-
-   assign debug_resume_req = ~debug_resume_req_f &  // squash back to back resumes
-                             ((mpc_run_state_ns & ~dbg_halt_state_ns) |  // MPC run req
-                              (dbg_run_state_ns & ~mpc_halt_state_ns)); // dbg request is a pulse
-
-
-   // HALT
-   // dbg/pmu/fw requests halt, service as soon as lsu is not blocking interrupts
-   assign take_halt = (debug_halt_req_f | pmu_fw_halt_req_f) & ~synchronous_flush_r & ~mret_r & ~halt_taken_f & ~dec_tlu_flush_noredir_r_d1 & ~take_reset;
-
-   // hold after we take a halt, so we don't keep taking halts
-   assign halt_taken = (dec_tlu_flush_noredir_r_d1 & ~dec_tlu_flush_pause_r_d1 & ~take_ext_int_start_d1) | (halt_taken_f & ~dbg_tlu_halted_f & ~pmu_fw_tlu_halted_f & ~interrupt_valid_r_d1);
-
-   // After doing halt flush (RFNPC) wait until core is idle before asserting a particular halt mode
-   // It takes a cycle for mb_empty to assert after a fetch, take_halt covers that cycle
-   assign core_empty = force_halt |
-                       (lsu_idle_any & lsu_idle_any_f & ifu_miss_state_idle & ifu_miss_state_idle_f & ~debug_halt_req & ~debug_halt_req_d1 & ~dec_div_active);
-
-   assign dec_tlu_core_empty = core_empty;
-
-//--------------------------------------------------------------------------------
-// Debug start
-//
-
-   assign enter_debug_halt_req = (~internal_dbg_halt_mode_f & debug_halt_req) | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1;
-
-   // dbg halt state active from request until non-step resume
-   assign internal_dbg_halt_mode = debug_halt_req_ns | (internal_dbg_halt_mode_f & ~(debug_resume_req_f & ~dcsr[DCSR_STEP]));
-   // dbg halt can access csrs as long as we are not stepping
-   assign allow_dbg_halt_csr_write = internal_dbg_halt_mode_f & ~dcsr_single_step_running_f;
-
-
-   // hold debug_halt_req_ns high until we enter debug halt
-   assign debug_halt_req_ns = enter_debug_halt_req | (debug_halt_req_f & ~dbg_tlu_halted);
-
-   assign dbg_tlu_halted = (debug_halt_req_f & core_empty & halt_taken) | (dbg_tlu_halted_f & ~debug_resume_req_f);
-
-   assign resume_ack_ns = (debug_resume_req_f & dbg_tlu_halted_f & dbg_run_state_ns);
-
-   assign dcsr_single_step_done = dec_tlu_i0_valid_r & ~dec_tlu_dbg_halted & dcsr[DCSR_STEP] & ~rfpc_i0_r;
-
-   assign dcsr_single_step_running = (debug_resume_req_f & dcsr[DCSR_STEP]) | (dcsr_single_step_running_f & ~dcsr_single_step_done_f);
-
-   assign dbg_cmd_done_ns = dec_tlu_i0_valid_r & dec_tlu_dbg_halted;
-
-   // used to hold off commits after an in-pipe debug mode request (triggers, DCSR)
-   assign request_debug_mode_r = (trigger_hit_dmode_r | ebreak_to_debug_mode_r) | (request_debug_mode_r_d1 & ~dec_tlu_flush_lower_wb);
-
-   assign request_debug_mode_done = (request_debug_mode_r_d1 | request_debug_mode_done_f) & ~dbg_tlu_halted_f;
-
-    rvdffie #(18)  halt_ff (.*, .clk(free_l2clk),
-                          .din({dec_tlu_flush_noredir_r, halt_taken, lsu_idle_any, ifu_miss_state_idle, dbg_tlu_halted,
-                                resume_ack_ns, debug_halt_req_ns, debug_resume_req, trigger_hit_dmode_r,
-                                dcsr_single_step_done, debug_halt_req, dec_tlu_wr_pause_r, dec_pause_state,
-                                request_debug_mode_r, request_debug_mode_done, dcsr_single_step_running, dec_tlu_flush_pause_r,
-                                dbg_halt_req_held_ns}),
-                          .dout({dec_tlu_flush_noredir_r_d1, halt_taken_f, lsu_idle_any_f, ifu_miss_state_idle_f, dbg_tlu_halted_f,
-                                 dec_tlu_resume_ack , debug_halt_req_f, debug_resume_req_f_raw, trigger_hit_dmode_r_d1,
-                                 dcsr_single_step_done_f, debug_halt_req_d1, dec_tlu_wr_pause_r_d1, dec_pause_state_f,
-                                 request_debug_mode_r_d1, request_debug_mode_done_f, dcsr_single_step_running_f, dec_tlu_flush_pause_r_d1,
-                                 dbg_halt_req_held}));
-
-   // MPC run collides with DBG halt, fix it here
-   assign debug_resume_req_f = debug_resume_req_f_raw & ~dbg_halt_req;
-
-   assign dec_tlu_debug_stall = debug_halt_req_f;
-   assign dec_tlu_dbg_halted = dbg_tlu_halted_f;
-   assign dec_tlu_debug_mode = internal_dbg_halt_mode_f;
-   assign dec_tlu_pmu_fw_halted = pmu_fw_tlu_halted_f;
-
-   // kill fetch redirection on flush if going to halt, or if there's a fence during db-halt
-   assign dec_tlu_flush_noredir_r = take_halt | (fence_i_r & internal_dbg_halt_mode) | dec_tlu_flush_pause_r | (i0_trigger_hit_r & trigger_hit_dmode_r) | take_ext_int_start;
-
-   assign dec_tlu_flush_extint = take_ext_int_start;
-
-   // 1 cycle after writing the PAUSE counter, flush with noredir to idle F1-D.
-   assign dec_tlu_flush_pause_r = dec_tlu_wr_pause_r_d1 & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // detect end of pause counter and rfpc
-   assign pause_expired_r = ~dec_pause_state & dec_pause_state_f & ~(ext_int_ready | ce_int_ready | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | nmi_int_detected | ext_int_freeze_d1) & ~interrupt_valid_r_d1 & ~debug_halt_req_f & ~pmu_fw_halt_req_f & ~halt_taken_f;
-
-   assign dec_tlu_flush_leak_one_r = dec_tlu_flush_lower_r  & dcsr[DCSR_STEP] & (dec_tlu_resume_ack | dcsr_single_step_running) & ~dec_tlu_flush_noredir_r;
-   assign dec_tlu_flush_err_r = dec_tlu_flush_lower_r & (ic_perr_r | iccm_sbecc_r);
-
-   // If DM attempts to access an illegal CSR, send cmd_fail back
-   assign dec_dbg_cmd_done = dbg_cmd_done_ns;
-   assign dec_dbg_cmd_fail = illegal_r & dec_dbg_cmd_done;
-
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-   // Triggers
-   //
-localparam MTDATA1_DMODE             = 9;
-localparam MTDATA1_SEL   = 7;
-localparam MTDATA1_ACTION            = 6;
-localparam MTDATA1_CHAIN             = 5;
-localparam MTDATA1_MATCH             = 4;
-localparam MTDATA1_M_ENABLED         = 3;
-localparam MTDATA1_EXE   = 2;
-localparam MTDATA1_ST    = 1;
-localparam MTDATA1_LD    = 0;
-
-   // Prioritize trigger hits with other exceptions.
-   //
-   // Trigger should have highest priority except:
-   // - trigger is an execute-data and there is an inst_access exception (lsu triggers won't fire, inst. is nop'd by decode)
-   // - trigger is a store-data and there is a lsu_acc_exc or lsu_ma_exc.
-   assign trigger_execute[3:0] = {mtdata1_t3[MTDATA1_EXE], mtdata1_t2[MTDATA1_EXE], mtdata1_t1[MTDATA1_EXE], mtdata1_t0[MTDATA1_EXE]};
-   assign trigger_data[3:0] = {mtdata1_t3[MTDATA1_SEL], mtdata1_t2[MTDATA1_SEL], mtdata1_t1[MTDATA1_SEL], mtdata1_t0[MTDATA1_SEL]};
-   assign trigger_store[3:0] = {mtdata1_t3[MTDATA1_ST], mtdata1_t2[MTDATA1_ST], mtdata1_t1[MTDATA1_ST], mtdata1_t0[MTDATA1_ST]};
-
-   // MSTATUS[MIE] needs to be on to take triggers unless the action is trigger to debug mode.
-   assign trigger_enabled[3:0] = {(mtdata1_t3[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t3[MTDATA1_M_ENABLED],
-                                  (mtdata1_t2[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t2[MTDATA1_M_ENABLED],
-                                  (mtdata1_t1[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t1[MTDATA1_M_ENABLED],
-                                  (mtdata1_t0[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t0[MTDATA1_M_ENABLED]};
-
-   // iside exceptions are always in i0
-   assign i0_iside_trigger_has_pri_r[3:0]  = ~( (trigger_execute[3:0] & trigger_data[3:0] & {4{inst_acc_r_raw}}) | // exe-data with inst_acc
-                                                ({4{exu_i0_br_error_r | exu_i0_br_start_error_r}}));               // branch error in i0
-
-   // lsu excs have to line up with their respective triggers since the lsu op can be i0
-   assign i0_lsu_trigger_has_pri_r[3:0] = ~(trigger_store[3:0] & trigger_data[3:0] & {4{lsu_i0_exc_r_raw}});
-
-   // trigger hits have to be eval'd to cancel side effect lsu ops even though the pipe is already frozen
-   assign i0_trigger_eval_r = dec_tlu_i0_valid_r;
-
-   assign i0trigger_qual_r[3:0] = {4{i0_trigger_eval_r}} & dec_tlu_packet_r.i0trigger[3:0] & i0_iside_trigger_has_pri_r[3:0] & i0_lsu_trigger_has_pri_r[3:0] & trigger_enabled[3:0];
-
-   // Qual trigger hits
-   assign i0_trigger_r[3:0] = ~{4{dec_tlu_flush_lower_wb | dec_tlu_dbg_halted}} & i0trigger_qual_r[3:0];
-
-   // chaining can mask raw trigger info
-   assign i0_trigger_chain_masked_r[3:0]  = {i0_trigger_r[3] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[2]),
-                                             i0_trigger_r[2] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[3]),
-                                             i0_trigger_r[1] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[0]),
-                                             i0_trigger_r[0] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[1])};
-
-   // This is the highest priority by this point.
-   assign i0_trigger_hit_raw_r = |i0_trigger_chain_masked_r[3:0];
-
-   assign i0_trigger_hit_r = i0_trigger_hit_raw_r;
-
-   // Actions include breakpoint, or dmode. Dmode is only possible if the DMODE bit is set.
-   // Otherwise, take a breakpoint.
-   assign trigger_action[3:0] = {mtdata1_t3[MTDATA1_ACTION] & mtdata1_t3[MTDATA1_DMODE],
-                                 mtdata1_t2[MTDATA1_ACTION] & mtdata1_t2[MTDATA1_DMODE] & ~mtdata1_t2[MTDATA1_CHAIN],
-                                 mtdata1_t1[MTDATA1_ACTION] & mtdata1_t1[MTDATA1_DMODE],
-                                 mtdata1_t0[MTDATA1_ACTION] & mtdata1_t0[MTDATA1_DMODE] & ~mtdata1_t0[MTDATA1_CHAIN]};
-
-   // this is needed to set the HIT bit in the triggers
-   assign update_hit_bit_r[3:0] = ({4{|i0_trigger_r[3:0] & ~rfpc_i0_r}} & {i0_trigger_chain_masked_r[3], i0_trigger_r[2], i0_trigger_chain_masked_r[1], i0_trigger_r[0]});
-
-   // action, 1 means dmode. Simultaneous triggers with at least 1 set for dmode force entire action to dmode.
-   assign i0_trigger_action_r = |(i0_trigger_chain_masked_r[3:0] & trigger_action[3:0]);
-
-   assign trigger_hit_dmode_r = (i0_trigger_hit_r & i0_trigger_action_r);
-
-   assign mepc_trigger_hit_sel_pc_r = i0_trigger_hit_r & ~trigger_hit_dmode_r;
-
-
-//
-// Debug end
-//--------------------------------------------------------------------------------
-
-   //----------------------------------------------------------------------
-   //
-   // Commit
-   //
-   //----------------------------------------------------------------------
-
-
-
-   //--------------------------------------------------------------------------------
-   // External halt (not debug halt)
-   // - Fully interlocked handshake
-   // i_cpu_halt_req  ____|--------------|_______________
-   // core_empty      ---------------|___________
-   // o_cpu_halt_ack  _________________|----|__________
-   // o_cpu_halt_status _______________|---------------------|_________
-   // i_cpu_run_req                              ______|----------|____
-   // o_cpu_run_ack                              ____________|------|________
-   //
-
-
-   // debug mode has priority, ignore PMU/FW halt/run while in debug mode
-   assign i_cpu_halt_req_sync_qual = i_cpu_halt_req_sync & ~dec_tlu_debug_mode & ~ext_int_freeze_d1;
-   assign i_cpu_run_req_sync_qual = i_cpu_run_req_sync & ~dec_tlu_debug_mode & pmu_fw_tlu_halted_f & ~ext_int_freeze_d1;
-
-   rvdffie #(10) exthaltff (.*, .clk(free_l2clk), .din({i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual,   cpu_halt_status,
-                                                   cpu_halt_ack,   cpu_run_ack, internal_pmu_fw_halt_mode,
-                                                   pmu_fw_halt_req_ns, pmu_fw_tlu_halted,
-                                                   int_timer0_int_hold, int_timer1_int_hold}),
-                                            .dout({i_cpu_halt_req_d1,        i_cpu_run_req_d1_raw,      o_cpu_halt_status,
-                                                   o_cpu_halt_ack, o_cpu_run_ack, internal_pmu_fw_halt_mode_f,
-                                                   pmu_fw_halt_req_f, pmu_fw_tlu_halted_f,
-                                                   int_timer0_int_hold_f, int_timer1_int_hold_f}));
-
-   // only happens if we aren't in dgb_halt
-   assign ext_halt_pulse = i_cpu_halt_req_sync_qual & ~i_cpu_halt_req_d1;
-
-   assign enter_pmu_fw_halt_req =  ext_halt_pulse | fw_halt_req;
-
-   assign pmu_fw_halt_req_ns = (enter_pmu_fw_halt_req | (pmu_fw_halt_req_f & ~pmu_fw_tlu_halted)) & ~debug_halt_req_f;
-
-   assign internal_pmu_fw_halt_mode = pmu_fw_halt_req_ns | (internal_pmu_fw_halt_mode_f & ~i_cpu_run_req_d1 & ~debug_halt_req_f);
-
-   // debug halt has priority
-   assign pmu_fw_tlu_halted = ((pmu_fw_halt_req_f & core_empty & halt_taken & ~enter_debug_halt_req) | (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1)) & ~debug_halt_req_f;
-
-   assign cpu_halt_ack = (i_cpu_halt_req_d1 & pmu_fw_tlu_halted_f) | (o_cpu_halt_ack & i_cpu_halt_req_sync);
-   assign cpu_halt_status = (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1) | (o_cpu_halt_status & ~i_cpu_run_req_d1 & ~internal_dbg_halt_mode_f);
-   assign cpu_run_ack = (~pmu_fw_tlu_halted_f & i_cpu_run_req_sync) | (o_cpu_halt_status & i_cpu_run_req_d1_raw) | (o_cpu_run_ack & i_cpu_run_req_sync);
-   assign debug_mode_status = internal_dbg_halt_mode_f;
-   assign o_debug_mode_status = debug_mode_status;
-
-
-   // high priority interrupts can wakeup from external halt, so can unmasked timer interrupts
-   assign i_cpu_run_req_d1 = i_cpu_run_req_d1_raw | ((nmi_int_detected | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | (mhwakeup & mhwakeup_ready)) & o_cpu_halt_status & ~i_cpu_halt_req_d1);
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-
-   assign lsu_single_ecc_error_r = lsu_single_ecc_error_incr;
-
-   assign lsu_error_pkt_addr_r[31:0] = lsu_error_pkt_r.addr[31:0];
-
-
-   assign lsu_exc_valid_r_raw = lsu_error_pkt_r.exc_valid & ~dec_tlu_flush_lower_wb;
-
-   assign lsu_i0_exc_r_raw =  lsu_error_pkt_r.exc_valid;
-
-   assign lsu_i0_exc_r = lsu_i0_exc_r_raw & lsu_exc_valid_r_raw & ~i0_trigger_hit_r & ~rfpc_i0_r;
-
-   assign lsu_exc_valid_r = lsu_i0_exc_r;
-
-   assign lsu_exc_ma_r  =  lsu_i0_exc_r & ~lsu_error_pkt_r.exc_type;
-   assign lsu_exc_acc_r =  lsu_i0_exc_r & lsu_error_pkt_r.exc_type;
-   assign lsu_exc_st_r  =  lsu_i0_exc_r & lsu_error_pkt_r.inst_type;
-
-   // Single bit ECC errors on loads are RFNPC corrected, with the corrected data written to the GPR.
-   // LSU turns the load into a store and patches the data in the DCCM
-   assign lsu_i0_rfnpc_r = dec_tlu_i0_valid_r & ~i0_trigger_hit_r &
-                           (~lsu_error_pkt_r.inst_type & lsu_error_pkt_r.single_ecc_error);
-
-   //  Final commit valids
-   assign tlu_i0_commit_cmt = dec_tlu_i0_valid_r &
-                              ~rfpc_i0_r &
-                              ~lsu_i0_exc_r &
-                              ~inst_acc_r &
-                              ~dec_tlu_dbg_halted &
-                              ~request_debug_mode_r_d1 &
-                              ~i0_trigger_hit_r;
-
-   // unified place to manage the killing of arch state writebacks
-   assign tlu_i0_kill_writeb_r = rfpc_i0_r | lsu_i0_exc_r | inst_acc_r | (illegal_r & dec_tlu_dbg_halted) | i0_trigger_hit_r;
-   assign dec_tlu_i0_commit_cmt = tlu_i0_commit_cmt;
-
-
-   // refetch PC, microarch flush
-   // ic errors only in pipe0
-   assign rfpc_i0_r =  ((dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (exu_i0_br_error_r | exu_i0_br_start_error_r)) | // inst commit with rfpc
-                        ((ic_perr_r | iccm_sbecc_r) & ~ext_int_freeze_d1)) & // ic/iccm without inst commit
-                       ~i0_trigger_hit_r & // unless there's a trigger. Err signal to ic/iccm will assert anyway to clear the error.
-                       ~lsu_i0_rfnpc_r;
-
-   // From the indication of a iccm single bit error until the first commit or flush, maintain a repair state. In the repair state, rfnpc i0 commits.
-   assign iccm_repair_state_ns = iccm_sbecc_r | (iccm_repair_state_d1 & ~dec_tlu_flush_lower_r);
-
-
-   localparam MCPC          = 12'h7c2;
-
-   // this is a flush of last resort, meaning only assert it if there is no other flush happening.
-   assign iccm_repair_state_rfnpc = tlu_i0_commit_cmt & iccm_repair_state_d1 &
-                                    ~(ebreak_r | ecall_r | mret_r | take_reset | illegal_r | (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC)));
-
-if(pt.BTB_ENABLE==1) begin
-   // go ahead and repair the branch error on other flushes, doesn't have to be the rfpc flush
-   assign dec_tlu_br0_error_r = exu_i0_br_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_start_error_r = exu_i0_br_start_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_v_r = exu_i0_br_valid_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (~exu_i0_br_mp_r | ~exu_pmu_i0_br_ataken);
-
-
-   assign dec_tlu_br0_r_pkt.hist[1:0] = exu_i0_br_hist_r[1:0];
-   assign dec_tlu_br0_r_pkt.br_error = dec_tlu_br0_error_r;
-   assign dec_tlu_br0_r_pkt.br_start_error = dec_tlu_br0_start_error_r;
-   assign dec_tlu_br0_r_pkt.valid = dec_tlu_br0_v_r;
-   assign dec_tlu_br0_r_pkt.way = exu_i0_br_way_r;
-   assign dec_tlu_br0_r_pkt.middle = exu_i0_br_middle_r;
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign dec_tlu_br0_error_r = '0;
-   assign dec_tlu_br0_start_error_r = '0;
-   assign dec_tlu_br0_v_r = '0;
-   assign dec_tlu_br0_r_pkt  = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // only expect these in pipe 0
-   assign       ebreak_r     =  (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-   assign       ecall_r      =  (dec_tlu_packet_r.pmu_i0_itype == ECALL)   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       illegal_r    =  ~dec_tlu_packet_r.legal   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       mret_r       =  (dec_tlu_packet_r.pmu_i0_itype == MRET)    & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   // fence_i includes debug only fence_i's
-   assign       fence_i_r    =  (dec_tlu_packet_r.fence_i & dec_tlu_i0_valid_r & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-   assign       ic_perr_r    =  ifu_ic_error_start_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       iccm_sbecc_r =  ifu_iccm_rd_ecc_single_err_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       inst_acc_r_raw  =  dec_tlu_packet_r.icaf & dec_tlu_i0_valid_r;
-   assign       inst_acc_r = inst_acc_r_raw & ~rfpc_i0_r & ~i0_trigger_hit_r;
-   assign       inst_acc_second_r = dec_tlu_packet_r.icaf_second;
-
-   assign       ebreak_to_debug_mode_r = (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-
-   rvdff #(1)  exctype_wb_ff (.*, .clk(e4e5_clk),
-                                .din (ebreak_to_debug_mode_r   ),
-                                .dout(ebreak_to_debug_mode_r_d1));
-
-   assign dec_tlu_fence_i_r = fence_i_r;
-   //
-   // Exceptions
-   //
-   // - MEPC <- PC
-   // - PC <- MTVEC, assert flush_lower
-   // - MCAUSE <- cause
-   // - MSCAUSE <- secondary cause
-   // - MTVAL <-
-   // - MPIE <- MIE
-   // - MIE <- 0
-   //
-   assign i0_exception_valid_r = (ebreak_r | ecall_r | illegal_r | inst_acc_r) & ~rfpc_i0_r & ~dec_tlu_dbg_halted;
-
-   // Cause:
-   //
-   // 0x2 : illegal
-   // 0x3 : breakpoint
-   // 0xb : Environment call M-mode
-
-
-   assign exc_cause_r[4:0] =  ( ({5{take_ext_int}}        & 5'h0b) |
-                                ({5{take_timer_int}}      & 5'h07) |
-                                ({5{take_soft_int}}       & 5'h03) |
-                                ({5{take_int_timer0_int}} & 5'h1d) |
-                                ({5{take_int_timer1_int}} & 5'h1c) |
-                                ({5{take_ce_int}}         & 5'h1e) |
-                                ({5{illegal_r}}           & 5'h02) |
-                                ({5{ecall_r}}             & 5'h0b) |
-                                ({5{inst_acc_r}}          & 5'h01) |
-                                ({5{ebreak_r | i0_trigger_hit_r}}   & 5'h03) |
-                                ({5{lsu_exc_ma_r & ~lsu_exc_st_r}}  & 5'h04) |
-                                ({5{lsu_exc_acc_r & ~lsu_exc_st_r}} & 5'h05) |
-                                ({5{lsu_exc_ma_r & lsu_exc_st_r}}   & 5'h06) |
-                                ({5{lsu_exc_acc_r & lsu_exc_st_r}}  & 5'h07)
-                                ) & ~{5{take_nmi}};
-
-   //
-   // Interrupts
-   //
-   // exceptions that are committed have already happened and will cause an int at E4 to wait a cycle
-   // or more if MSTATUS[MIE] is cleared.
-   //
-   // -in priority order, highest to lowest
-   // -single cycle window where a csr write to MIE/MSTATUS is at E4 when the other conditions for externals are met.
-   //  Hold off externals for a cycle to make sure we are consistent with what was just written
-   assign mhwakeup_ready =  ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE];
-   assign ext_int_ready   = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE] & ~ignore_ext_int_due_to_lsu_stall;
-   assign ce_int_ready    = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MCEIP]  & mie_ns[MIE_MCEIE];
-   assign soft_int_ready  = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MSIP]   & mie_ns[MIE_MSIE];
-   assign timer_int_ready = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MTIP]   & mie_ns[MIE_MTIE];
-
-   // MIP for internal timers pulses for 1 clock, resets the timer counter. Mip won't hold past the various stall conditions.
-   assign int_timer0_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE0];
-   assign int_timer0_int_ready = mip[MIP_MITIP0] & int_timer0_int_possible;
-   assign int_timer1_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE1];
-   assign int_timer1_int_ready = mip[MIP_MITIP1] & int_timer1_int_possible;
-
-   // Internal timers pulse and reset. If core is PMU/FW halted, the pulse will cause an exit from halt, but won't stick around
-   // Make it sticky, also for 1 cycle stall conditions.
-   assign int_timer_stalled = dec_csr_stall_int_ff | synchronous_flush_r | exc_or_int_valid_r_d1 | mret_r;
-
-   assign int_timer0_int_hold = (int_timer0_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer0_int_possible & int_timer0_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-   assign int_timer1_int_hold = (int_timer1_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer1_int_possible & int_timer1_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-
-
-   assign internal_dbg_halt_timers = internal_dbg_halt_mode_f & ~dcsr_single_step_running;
-
-
-   assign block_interrupts = ( (internal_dbg_halt_mode & (~dcsr_single_step_running | dec_tlu_i0_valid_r)) | // No ints in db-halt unless we are single stepping
-                               internal_pmu_fw_halt_mode | i_cpu_halt_req_d1 |// No ints in PMU/FW halt. First we exit halt
-                               take_nmi | // NMI is top priority
-                               ebreak_to_debug_mode_r | // Heading to debug mode, hold off ints
-                               synchronous_flush_r | // exception flush this cycle
-                               exc_or_int_valid_r_d1 | // ext/int past cycle (need time for MIE to update)
-                               mret_r |    // mret in progress, for cases were ISR enables ints before mret
-                               ext_int_freeze_d1 // Fast interrupt in progress (optional)
-                               );
-
-
-if (pt.FAST_INTERRUPT_REDIRECT) begin
-
-
-   assign take_ext_int_start = ext_int_ready & ~block_interrupts;
-
-   assign ext_int_freeze = take_ext_int_start | take_ext_int_start_d1 | take_ext_int_start_d2 | take_ext_int_start_d3;
-   assign take_ext_int = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-   assign fast_int_meicpct = csr_meicpct & dec_csr_any_unq_d;  // MEICPCT becomes illegal if fast ints are enabled
-
-   assign ignore_ext_int_due_to_lsu_stall = lsu_fastint_stall_any;
-end
-else begin
-   assign take_ext_int_start = 1'b0;
-   assign ext_int_freeze = 1'b0;
-   assign ext_int_freeze_d1 = 1'b0;
-   assign take_ext_int_start_d1 = 1'b0;
-   assign take_ext_int_start_d2 = 1'b0;
-   assign take_ext_int_start_d3 = 1'b0;
-   assign fast_int_meicpct = 1'b0;
-   assign ignore_ext_int_due_to_lsu_stall = 1'b0;
-
-   assign take_ext_int = ext_int_ready & ~block_interrupts;
-end
-
-   assign take_ce_int  = ce_int_ready & ~ext_int_ready & ~block_interrupts;
-   assign take_soft_int = soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_timer_int = timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer0_int = (int_timer0_int_ready | int_timer0_int_hold_f) & int_timer0_int_possible & ~dec_csr_stall_int_ff &
-                                ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer1_int = (int_timer1_int_ready | int_timer1_int_hold_f) & int_timer1_int_possible & ~dec_csr_stall_int_ff &
-                                ~(int_timer0_int_ready | int_timer0_int_hold_f) & ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-
-   assign take_reset = reset_delayed & mpc_reset_run_req;
-   assign take_nmi = nmi_int_detected & ~internal_pmu_fw_halt_mode & (~internal_dbg_halt_mode | (dcsr_single_step_running_f & dcsr[DCSR_STEPIE] & ~dec_tlu_i0_valid_r & ~dcsr_single_step_done_f)) &
-                     ~synchronous_flush_r & ~mret_r & ~take_reset & ~ebreak_to_debug_mode_r & (~ext_int_freeze_d1 | (take_ext_int_start_d3 & |lsu_fir_error[1:0]));
-
-   assign interrupt_valid_r = take_ext_int | take_timer_int | take_soft_int | take_nmi | take_ce_int | take_int_timer0_int | take_int_timer1_int;
-
-
-   // Compute interrupt path:
-   // If vectored async is set in mtvec, flush path for interrupts is MTVEC + (4 * CAUSE);
-   assign vectored_path[31:1]  = {mtvec[30:1], 1'b0} + {25'b0, exc_cause_r[4:0], 1'b0};
-   assign interrupt_path[31:1] = take_nmi ? nmi_vec[31:1] : ((mtvec[0] == 1'b1) ? vectored_path[31:1] : {mtvec[30:1], 1'b0});
-
-   assign sel_npc_r  = lsu_i0_rfnpc_r | fence_i_r | iccm_repair_state_rfnpc | (i_cpu_run_req_d1 & ~interrupt_valid_r) | (rfpc_i0_r & ~dec_tlu_i0_valid_r);
-   assign sel_npc_resume = (i_cpu_run_req_d1 & pmu_fw_tlu_halted_f) | pause_expired_r;
-
-   assign sel_fir_addr = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-
-   assign synchronous_flush_r  = i0_exception_valid_r | // exception
-                                 rfpc_i0_r | // rfpc
-                                 lsu_exc_valid_r |  // lsu exception in either pipe 0 or pipe 1
-                                 fence_i_r |  // fence, a rfnpc
-                                 lsu_i0_rfnpc_r | // lsu dccm sb ecc
-                                 iccm_repair_state_rfnpc | // Iccm sb ecc
-                                 debug_resume_req_f | // resume from debug halt, fetch the dpc
-                                 sel_npc_resume |  // resume from pmu/fw halt, or from pause and fetch the NPC
-                                 dec_tlu_wr_pause_r_d1 | // flush at start of pause
-                                 i0_trigger_hit_r; // trigger hit, ebreak or goto debug mode
-
-   assign tlu_flush_lower_r = interrupt_valid_r | mret_r | synchronous_flush_r | take_halt | take_reset | take_ext_int_start;
-
-   assign tlu_flush_path_r[31:1] = take_reset ? rst_vec[31:1] :
-
-                                    ( ({31{sel_fir_addr}} & lsu_fir_addr[31:1]) |
-                                      ({31{~take_nmi & sel_npc_r}} & npc_r[31:1]) |
-                                      ({31{~take_nmi & rfpc_i0_r & dec_tlu_i0_valid_r & ~sel_npc_r}} & dec_tlu_i0_pc_r[31:1]) |
-                                      ({31{interrupt_valid_r & ~sel_fir_addr}} & interrupt_path[31:1]) |
-                                      ({31{(i0_exception_valid_r | lsu_exc_valid_r |
-                                            (i0_trigger_hit_r & ~trigger_hit_dmode_r)) & ~interrupt_valid_r & ~sel_fir_addr}} & {mtvec[30:1],1'b0}) |
-                                      ({31{~take_nmi & mret_r}} & mepc[31:1]) |
-                                      ({31{~take_nmi & debug_resume_req_f}} & dpc[31:1]) |
-                                      ({31{~take_nmi & sel_npc_resume}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  flush_lower_ff (.*, .en(tlu_flush_lower_r),
-                                 .din({tlu_flush_path_r[31:1]}),
-                                 .dout({tlu_flush_path_r_d1[31:1]}));
-
-   assign dec_tlu_flush_lower_wb = tlu_flush_lower_r_d1;
-   assign dec_tlu_flush_lower_r = tlu_flush_lower_r;
-   assign dec_tlu_flush_path_r[31:1] = tlu_flush_path_r[31:1];
-
-
-   // this is used to capture mepc, etc.
-   assign exc_or_int_valid_r = lsu_exc_valid_r | i0_exception_valid_r | interrupt_valid_r | (i0_trigger_hit_r & ~trigger_hit_dmode_r);
-
-
-   rvdffie #(12)  excinfo_wb_ff (.*,
-                                 .din({interrupt_valid_r, i0_exception_valid_r, exc_or_int_valid_r,
-                                       exc_cause_r[4:0], tlu_i0_commit_cmt & ~illegal_r, i0_trigger_hit_r,
-                                       take_nmi, pause_expired_r }),
-                                 .dout({interrupt_valid_r_d1, i0_exception_valid_r_d1, exc_or_int_valid_r_d1,
-                                        exc_cause_wb[4:0], i0_valid_wb, trigger_hit_r_d1,
-                                        take_nmi_r_d1, pause_expired_wb}));
-
-   //----------------------------------------------------------------------
-   //
-   // CSRs
-   //
-   //----------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // MISA (RO)
-   //  [31:30] XLEN - implementation width, 2'b01 - 32 bits
-   //  [12]    M    - integer mul/div
-   //  [8]     I    - RV32I
-   //  [2]     C    - Compressed extension
-   localparam MISA          = 12'h301;
-
-   // MVENDORID, MARCHID, MIMPID, MHARTID
-   localparam MVENDORID     = 12'hf11;
-   localparam MARCHID       = 12'hf12;
-   localparam MIMPID        = 12'hf13;
-   localparam MHARTID       = 12'hf14;
-
-
-   // ----------------------------------------------------------------------
-   // MSTATUS (RW)
-   // [12:11] MPP  : Prior priv level, always 2'b11, not flopped
-   // [7]     MPIE : Int enable previous [1]
-   // [3]     MIE  : Int enable          [0]
-   localparam MSTATUS       = 12'h300;
-
-
-   //When executing a MRET instruction, supposing MPP holds the value 3, MIE
-   //is set to MPIE; the privilege mode is changed to 3; MPIE is set to 1; and MPP is set to 3
-
-   assign dec_csr_wen_r_mod = dec_csr_wen_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign wr_mstatus_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSTATUS);
-
-   // set this even if we don't go to fwhalt due to debug halt. We committed the inst, so ...
-   assign set_mie_pmu_fw_halt = ~mpmc_b_ns[1] & fw_halt_req;
-
-   assign mstatus_ns[1:0] = ( ({2{~wr_mstatus_r & exc_or_int_valid_r}} & {mstatus[MSTATUS_MIE], 1'b0}) |
-                              ({2{ wr_mstatus_r & exc_or_int_valid_r}} & {dec_csr_wrdata_r[3], 1'b0}) |
-                              ({2{mret_r & ~exc_or_int_valid_r}} & {1'b1, mstatus[1]}) |
-                              ({2{set_mie_pmu_fw_halt}} & {mstatus[1], 1'b1}) |
-                              ({2{wr_mstatus_r & ~exc_or_int_valid_r}} & {dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]}) |
-                              ({2{~wr_mstatus_r & ~exc_or_int_valid_r & ~mret_r & ~set_mie_pmu_fw_halt}} & mstatus[1:0]) );
-
-   // gate MIE if we are single stepping and DCSR[STEPIE] is off
-   assign mstatus_mie_ns = mstatus[MSTATUS_MIE] & (~dcsr_single_step_running_f | dcsr[DCSR_STEPIE]);
-
-   // ----------------------------------------------------------------------
-   // MTVEC (RW)
-   // [31:2] BASE : Trap vector base address
-   // [1] - Reserved, not implemented, reads zero
-   // [0]  MODE : 0 = Direct, 1 = Asyncs are vectored to BASE + (4 * CAUSE)
-   localparam MTVEC         = 12'h305;
-
-   assign wr_mtvec_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVEC);
-   assign mtvec_ns[30:0] = {dec_csr_wrdata_r[31:2], dec_csr_wrdata_r[0]} ;
-   rvdffe #(31)  mtvec_ff (.*, .en(wr_mtvec_r), .din(mtvec_ns[30:0]), .dout(mtvec[30:0]));
-
-   // ----------------------------------------------------------------------
-   // MIP (RW)
-   //
-   // [30] MCEIP  : (RO) M-Mode Correctable Error interrupt pending
-   // [29] MITIP0 : (RO) M-Mode Internal Timer0 interrupt pending
-   // [28] MITIP1 : (RO) M-Mode Internal Timer1 interrupt pending
-   // [11] MEIP   : (RO) M-Mode external interrupt pending
-   // [7]  MTIP   : (RO) M-Mode timer interrupt pending
-   // [3]  MSIP   : (RO) M-Mode software interrupt pending
-   localparam MIP           = 12'h344;
-
-   assign ce_int = (mdccme_ce_req | miccme_ce_req | mice_ce_req);
-
-   assign mip_ns[5:0] = {ce_int, dec_timer_t0_pulse, dec_timer_t1_pulse, mexintpend, timer_int_sync, soft_int_sync};
-
-   // ----------------------------------------------------------------------
-   // MIE (RW)
-   // [30] MCEIE  : (RO) M-Mode Correctable Error interrupt enable
-   // [29] MITIE0 : (RO) M-Mode Internal Timer0 interrupt enable
-   // [28] MITIE1 : (RO) M-Mode Internal Timer1 interrupt enable
-   // [11] MEIE   : (RW) M-Mode external interrupt enable
-   // [7]  MTIE   : (RW) M-Mode timer interrupt enable
-   // [3]  MSIE   : (RW) M-Mode software interrupt enable
-   localparam MIE           = 12'h304;
-
-   assign wr_mie_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MIE);
-   assign mie_ns[5:0] = wr_mie_r ? {dec_csr_wrdata_r[30:28], dec_csr_wrdata_r[11], dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]} : mie[5:0];
-   rvdff #(6)  mie_ff (.*, .clk(csr_wr_clk), .din(mie_ns[5:0]), .dout(mie[5:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MCYCLEL (RW)
-   // [31:0] : Lower Cycle count
-
-   localparam MCYCLEL       = 12'hb00;
-
-   assign kill_ebreak_count_r = ebreak_to_debug_mode_r & dcsr[DCSR_STOPC];
-
-   assign wr_mcyclel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEL);
-
-   assign mcyclel_cout_in = ~(kill_ebreak_count_r | (dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted | mcountinhibit[0]);
-
-   // split for power
-   assign {mcyclela_cout, mcyclel_inc[7:0]}  = mcyclel[7:0] +  {7'b0, 1'b1};
-   assign {mcyclel_cout,  mcyclel_inc[31:8]} = mcyclel[31:8] + {23'b0, mcyclela_cout};
-
-   assign mcyclel_ns[31:0] = wr_mcyclel_r ? dec_csr_wrdata_r[31:0] : mcyclel_inc[31:0];
-
-   rvdffe #(24) mcyclel_bff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | (mcyclela_cout & mcyclel_cout_in)),    .din(mcyclel_ns[31:8]), .dout(mcyclel[31:8]));
-   rvdffe #(8)  mcyclel_aff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | mcyclel_cout_in),  .din(mcyclel_ns[7:0]),  .dout(mcyclel[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MCYCLEH (RW)
-   // [63:32] : Higher Cycle count
-   // Chained with mcyclel. Note: mcyclel overflow due to a mcycleh write gets ignored.
-
-   localparam MCYCLEH       = 12'hb80;
-
-   assign wr_mcycleh_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEH);
-
-   assign mcycleh_inc[31:0] = mcycleh[31:0] + {31'b0, mcyclel_cout_f};
-   assign mcycleh_ns[31:0]  = wr_mcycleh_r ? dec_csr_wrdata_r[31:0] : mcycleh_inc[31:0];
-
-   rvdffe #(32)  mcycleh_ff (.*, .clk(free_l2clk), .en(wr_mcycleh_r | mcyclel_cout_f), .din(mcycleh_ns[31:0]), .dout(mcycleh[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MINSTRETL (RW)
-   // [31:0] : Lower Instruction retired count
-   // From the spec "Some CSRs, such as the instructions retired counter, instret, may be modified as side effects
-   // of instruction execution. In these cases, if a CSR access instruction reads a CSR, it reads the
-   // value prior to the execution of the instruction. If a CSR access instruction writes a CSR, the
-   // update occurs after the execution of the instruction. In particular, a value written to instret by
-   // one instruction will be the value read by the following instruction (i.e., the increment of instret
-   // caused by the first instruction retiring happens before the write of the new value)."
-   localparam MINSTRETL     = 12'hb02;
-
-   assign i0_valid_no_ebreak_ecall_r = dec_tlu_i0_valid_r & ~(ebreak_r | ecall_r | ebreak_to_debug_mode_r | illegal_r | mcountinhibit[2]);
-
-   assign wr_minstretl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETL);
-
-   assign {minstretl_couta, minstretl_inc[7:0]} = minstretl[7:0] + {7'b0,1'b1};
-   assign {minstretl_cout, minstretl_inc[31:8]} = minstretl[31:8] + {23'b0, minstretl_couta};
-
-   assign minstret_enable = (i0_valid_no_ebreak_ecall_r & tlu_i0_commit_cmt) | wr_minstretl_r;
-
-   assign minstretl_cout_ns = minstretl_cout & ~wr_minstreth_r & i0_valid_no_ebreak_ecall_r & ~dec_tlu_dbg_halted;
-
-   assign minstretl_ns[31:0] = wr_minstretl_r ? dec_csr_wrdata_r[31:0] : minstretl_inc[31:0];
-   rvdffe #(24)  minstretl_bff (.*, .en(wr_minstretl_r | (minstretl_couta & minstret_enable)),
-                                .din(minstretl_ns[31:8]), .dout(minstretl[31:8]));
-   rvdffe #(8)   minstretl_aff (.*, .en(minstret_enable),
-                                .din(minstretl_ns[7:0]),  .dout(minstretl[7:0]));
-
-
-   assign minstretl_read[31:0] = minstretl[31:0];
-   // ----------------------------------------------------------------------
-   // MINSTRETH (RW)
-   // [63:32] : Higher Instret count
-   // Chained with minstretl. Note: minstretl overflow due to a minstreth write gets ignored.
-
-   localparam MINSTRETH     = 12'hb82;
-
-   assign wr_minstreth_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETH);
-
-   assign minstreth_inc[31:0] = minstreth[31:0] + {31'b0, minstretl_cout_f};
-   assign minstreth_ns[31:0]  = wr_minstreth_r ? dec_csr_wrdata_r[31:0] : minstreth_inc[31:0];
-   rvdffe #(32)  minstreth_ff (.*, .en((minstret_enable_f & minstretl_cout_f) | wr_minstreth_r), .din(minstreth_ns[31:0]), .dout(minstreth[31:0]));
-
-   assign minstreth_read[31:0] = minstreth_inc[31:0];
-
-   // ----------------------------------------------------------------------
-   // MSCRATCH (RW)
-   // [31:0] : Scratch register
-   localparam MSCRATCH      = 12'h340;
-
-   assign wr_mscratch_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCRATCH);
-
-   rvdffe #(32)  mscratch_ff (.*, .en(wr_mscratch_r), .din(dec_csr_wrdata_r[31:0]), .dout(mscratch[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MEPC (RW)
-   // [31:1] : Exception PC
-   localparam MEPC          = 12'h341;
-
-   // NPC
-
-   assign sel_exu_npc_r = ~dec_tlu_dbg_halted & ~tlu_flush_lower_r_d1 & dec_tlu_i0_valid_r;
-   assign sel_flush_npc_r = ~dec_tlu_dbg_halted & tlu_flush_lower_r_d1 & ~dec_tlu_flush_noredir_r_d1;
-   assign sel_hold_npc_r = ~sel_exu_npc_r & ~sel_flush_npc_r;
-
-   assign npc_r[31:1] =  ( ({31{sel_exu_npc_r}} & exu_npc_r[31:1]) |
-                           ({31{~mpc_reset_run_req & reset_delayed}} & rst_vec[31:1]) | // init to reset vector for mpc halt on reset case
-                           ({31{(sel_flush_npc_r)}} & tlu_flush_path_r_d1[31:1]) |
-                           ({31{(sel_hold_npc_r)}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  npwbc_ff (.*, .en(sel_exu_npc_r | sel_flush_npc_r | reset_delayed), .din(npc_r[31:1]), .dout(npc_r_d1[31:1]));
-
-   // PC has to be captured for exceptions and interrupts. For MRET, we could execute it and then take an
-   // interrupt before the next instruction.
-   assign pc0_valid_r = ~dec_tlu_dbg_halted & dec_tlu_i0_valid_r;
-
-   assign pc_r[31:1]  = ( ({31{ pc0_valid_r}} & dec_tlu_i0_pc_r[31:1]) |
-                          ({31{~pc0_valid_r}} & pc_r_d1[31:1]));
-
-   rvdffpcie #(31)  pwbc_ff (.*, .en(pc0_valid_r), .din(pc_r[31:1]), .dout(pc_r_d1[31:1]));
-
-   assign wr_mepc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEPC);
-
-   assign mepc_ns[31:1] = ( ({31{i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r}} & pc_r[31:1]) |
-                            ({31{interrupt_valid_r}} & npc_r[31:1]) |
-                            ({31{wr_mepc_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:1]) |
-                            ({31{~wr_mepc_r & ~exc_or_int_valid_r}} & mepc[31:1]) );
-
-
-   rvdffe #(31)  mepc_ff (.*, .en(i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r | interrupt_valid_r | wr_mepc_r), .din(mepc_ns[31:1]), .dout(mepc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // MCAUSE (RW)
-   // [31:0] : Exception Cause
-   localparam MCAUSE        = 12'h342;
-
-   assign wr_mcause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCAUSE);
-   assign mcause_sel_nmi_store = exc_or_int_valid_r & take_nmi & nmi_lsu_store_type;
-   assign mcause_sel_nmi_load = exc_or_int_valid_r & take_nmi & nmi_lsu_load_type;
-   assign mcause_sel_nmi_ext = exc_or_int_valid_r & take_nmi & take_ext_int_start_d3 & |lsu_fir_error[1:0] & ~nmi_int_detected_f;
-   // FIR value decoder
-   // 0 –no error
-   // 1 –uncorrectable ecc  => f000_1000
-   // 2 –dccm region access error => f000_1001
-   // 3 –non dccm region access error => f000_1002
-   assign mcause_fir_error_type[1:0] = {&lsu_fir_error[1:0], lsu_fir_error[1] & ~lsu_fir_error[0]};
-
-   assign mcause_ns[31:0] = ( ({32{mcause_sel_nmi_store}} & {32'hf000_0000}) |
-                              ({32{mcause_sel_nmi_load}} & {32'hf000_0001}) |
-                              ({32{mcause_sel_nmi_ext}} & {28'hf000_100, 2'b0, mcause_fir_error_type[1:0]}) |
-                              ({32{exc_or_int_valid_r & ~take_nmi}} & {interrupt_valid_r, 26'b0, exc_cause_r[4:0]}) |
-                              ({32{wr_mcause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                              ({32{~wr_mcause_r & ~exc_or_int_valid_r}} & mcause[31:0]) );
-
-   rvdffe #(32)  mcause_ff (.*, .en(exc_or_int_valid_r | wr_mcause_r), .din(mcause_ns[31:0]), .dout(mcause[31:0]));
-   // ----------------------------------------------------------------------
-   // MSCAUSE (RW)
-   // [2:0] : Secondary exception Cause
-   localparam MSCAUSE       = 12'h7ff;
-
-   assign wr_mscause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCAUSE);
-
-   assign ifu_mscause[3:0]  =  (dec_tlu_packet_r.icaf_type[1:0] == 2'b00) ? 4'b1001 :
-                               {2'b00 , dec_tlu_packet_r.icaf_type[1:0]} ;
-
-   assign mscause_type[3:0] = ( ({4{lsu_i0_exc_r}} & lsu_error_pkt_r.mscause[3:0]) |
-                                ({4{i0_trigger_hit_r}} & 4'b0001) |
-                                ({4{ebreak_r}} & 4'b0010) |
-                                ({4{inst_acc_r}} & ifu_mscause[3:0])
-                                );
-
-   assign mscause_ns[3:0] = ( ({4{exc_or_int_valid_r}} & mscause_type[3:0]) |
-                              ({4{ wr_mscause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[3:0]) |
-                              ({4{~wr_mscause_r & ~exc_or_int_valid_r}} & mscause[3:0])
-                             );
-
-   rvdff #(4)  mscause_ff (.*, .clk(e4e5_int_clk), .din(mscause_ns[3:0]), .dout(mscause[3:0]));
-   // ----------------------------------------------------------------------
-   // MTVAL (RW)
-   // [31:0] : Exception address if relevant
-   localparam MTVAL         = 12'h343;
-
-   assign wr_mtval_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVAL);
-   assign mtval_capture_pc_r = exc_or_int_valid_r & (ebreak_r | (inst_acc_r & ~inst_acc_second_r) | mepc_trigger_hit_sel_pc_r) & ~take_nmi;
-   assign mtval_capture_pc_plus2_r = exc_or_int_valid_r & (inst_acc_r & inst_acc_second_r) & ~take_nmi;
-   assign mtval_capture_inst_r = exc_or_int_valid_r & illegal_r & ~take_nmi;
-   assign mtval_capture_lsu_r = exc_or_int_valid_r & lsu_exc_valid_r & ~take_nmi;
-   assign mtval_clear_r = exc_or_int_valid_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_capture_lsu_r & ~mepc_trigger_hit_sel_pc_r;
-
-
-   assign mtval_ns[31:0] = (({32{mtval_capture_pc_r}} & {pc_r[31:1], 1'b0}) |
-                            ({32{mtval_capture_pc_plus2_r}} & {pc_r[31:1] + 31'b1, 1'b0}) |
-                            ({32{mtval_capture_inst_r}} & dec_illegal_inst[31:0]) |
-                            ({32{mtval_capture_lsu_r}} & lsu_error_pkt_addr_r[31:0]) |
-                            ({32{wr_mtval_r & ~interrupt_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                            ({32{~take_nmi & ~wr_mtval_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_clear_r & ~mtval_capture_lsu_r}} & mtval[31:0]) );
-
-
-   rvdffe #(32)  mtval_ff (.*, .en(tlu_flush_lower_r | wr_mtval_r), .din(mtval_ns[31:0]), .dout(mtval[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MCGC (RW) Clock gating control
-   // [31:10]: Reserved, reads 0x0
-   // [9]    : picio_clk_override
-   // [7]    : dec_clk_override
-   // [6]    : Unused
-   // [5]    : ifu_clk_override
-   // [4]    : lsu_clk_override
-   // [3]    : bus_clk_override
-   // [2]    : pic_clk_override
-   // [1]    : dccm_clk_override
-   // [0]    : icm_clk_override
-   //
-   localparam MCGC          = 12'h7f8;
-   assign wr_mcgc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCGC);
-
-   assign mcgc_ns[9:0] = wr_mcgc_r ? {~dec_csr_wrdata_r[9], dec_csr_wrdata_r[8:0]} : mcgc_int[9:0];
-   rvdffe #(10)  mcgc_ff (.*, .en(wr_mcgc_r), .din(mcgc_ns[9:0]), .dout(mcgc_int[9:0]));
-
-   assign mcgc[9:0] = {~mcgc_int[9], mcgc_int[8:0]};
-
-   assign dec_tlu_picio_clk_override= mcgc[9];
-   assign dec_tlu_misc_clk_override = mcgc[8];
-   assign dec_tlu_dec_clk_override  = mcgc[7];
-   //sign dec_tlu_exu_clk_override  = mcgc[6];
-   assign dec_tlu_ifu_clk_override  = mcgc[5];
-   assign dec_tlu_lsu_clk_override  = mcgc[4];
-   assign dec_tlu_bus_clk_override  = mcgc[3];
-   assign dec_tlu_pic_clk_override  = mcgc[2];
-   assign dec_tlu_dccm_clk_override = mcgc[1];
-   assign dec_tlu_icm_clk_override  = mcgc[0];
-
-   // ----------------------------------------------------------------------
-   // MFDC (RW) Feature Disable Control
-   // [31:19] : Reserved, reads 0x0
-   // [18:16] : DMA QoS Prty
-   // [15:13] : Reserved, reads 0x0
-   // [12]   : Disable trace
-   // [11]   : Disable external load forwarding
-   // [10]   : Disable dual issue
-   // [9]    : Disable pic multiple ints
-   // [8]    : Disable core ecc
-   // [7]    : Disable secondary alu?s
-   // [6]    : Unused, 0x0
-   // [5]    : Disable non-blocking loads/divides
-   // [4]    : Disable fast divide
-   // [3]    : Disable branch prediction and return stack
-   // [2]    : Disable write buffer coalescing
-   // [1]    : Disable load misses that bypass the write buffer
-   // [0]    : Disable pipelining - Enable single instruction execution
-   //
-   localparam MFDC          = 12'h7f9;
-
-   assign wr_mfdc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDC);
-
-   rvdffe #(16)  mfdc_ff (.*, .en(wr_mfdc_r), .din({mfdc_ns[15:0]}), .dout(mfdc_int[15:0]));
-
-   // flip poweron value of bit 6 for AXI build
-   if(pt.BUILD_AXI4==1) begin : axi4
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16], dec_csr_wrdata_r[12], dec_csr_wrdata_r[11:7], ~dec_csr_wrdata_r[6], dec_csr_wrdata_r[5:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12], mfdc_int[11:7], ~mfdc_int[6], mfdc_int[5:0]};
-   end
-   else begin
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16],dec_csr_wrdata_r[12:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12:0]};
-   end
-
-
-   assign dec_tlu_dma_qos_prty[2:0] = mfdc[18:16];
-   assign dec_tlu_trace_disable = mfdc[12];
-   assign dec_tlu_external_ldfwd_disable = mfdc[11];
-   assign dec_tlu_core_ecc_disable = 1'b1;//mfdc[8];
-   assign dec_tlu_sideeffect_posted_disable = mfdc[6];
-   assign dec_tlu_bpred_disable = mfdc[3];
-   assign dec_tlu_wb_coalescing_disable = mfdc[2];
-   assign dec_tlu_pipelining_disable = mfdc[0];
-
-   // ----------------------------------------------------------------------
-   // MCPC (RW) Pause counter
-   // [31:0] : Reads 0x0, decs in the wb register in decode_ctl
-
-   assign dec_tlu_wr_pause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC) & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MRAC (RW)
-   // [31:0] : Region Access Control Register, 16 regions, {side_effect, cachable} pairs
-   localparam MRAC          = 12'h7c0;
-
-   assign wr_mrac_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MRAC);
-
-   // prevent pairs of 0x11, side_effect and cacheable
-   assign mrac_in[31:0] = {dec_csr_wrdata_r[31], dec_csr_wrdata_r[30] & ~dec_csr_wrdata_r[31],
-                           dec_csr_wrdata_r[29], dec_csr_wrdata_r[28] & ~dec_csr_wrdata_r[29],
-                           dec_csr_wrdata_r[27], dec_csr_wrdata_r[26] & ~dec_csr_wrdata_r[27],
-                           dec_csr_wrdata_r[25], dec_csr_wrdata_r[24] & ~dec_csr_wrdata_r[25],
-                           dec_csr_wrdata_r[23], dec_csr_wrdata_r[22] & ~dec_csr_wrdata_r[23],
-                           dec_csr_wrdata_r[21], dec_csr_wrdata_r[20] & ~dec_csr_wrdata_r[21],
-                           dec_csr_wrdata_r[19], dec_csr_wrdata_r[18] & ~dec_csr_wrdata_r[19],
-                           dec_csr_wrdata_r[17], dec_csr_wrdata_r[16] & ~dec_csr_wrdata_r[17],
-                           dec_csr_wrdata_r[15], dec_csr_wrdata_r[14] & ~dec_csr_wrdata_r[15],
-                           dec_csr_wrdata_r[13], dec_csr_wrdata_r[12] & ~dec_csr_wrdata_r[13],
-                           dec_csr_wrdata_r[11], dec_csr_wrdata_r[10] & ~dec_csr_wrdata_r[11],
-                           dec_csr_wrdata_r[9], dec_csr_wrdata_r[8] & ~dec_csr_wrdata_r[9],
-                           dec_csr_wrdata_r[7], dec_csr_wrdata_r[6] & ~dec_csr_wrdata_r[7],
-                           dec_csr_wrdata_r[5], dec_csr_wrdata_r[4] & ~dec_csr_wrdata_r[5],
-                           dec_csr_wrdata_r[3], dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[3],
-                           dec_csr_wrdata_r[1], dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[1]};
-
-   rvdffe #(32)  mrac_ff (.*, .en(wr_mrac_r), .din(mrac_in[31:0]), .dout(mrac[31:0]));
-
-   // drive to LSU/IFU
-   assign dec_tlu_mrac_ff[31:0] = mrac[31:0];
-
-   // ----------------------------------------------------------------------
-   // MDEAU (WAR0)
-   // [31:0] : Dbus Error Address Unlock register
-   //
-   localparam MDEAU         = 12'hbc0;
-
-   assign wr_mdeau_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDEAU);
-
-
-   // ----------------------------------------------------------------------
-   // MDSEAC (R)
-   // [31:0] : Dbus Store Error Address Capture register
-   //
-   localparam MDSEAC        = 12'hfc0;
-
-   // only capture error bus if the MDSEAC reg is not locked
-   assign mdseac_locked_ns = mdseac_en | (mdseac_locked_f & ~wr_mdeau_r);
-
-   assign mdseac_en = (lsu_imprecise_error_store_any | lsu_imprecise_error_load_any) & ~nmi_int_detected_f & ~mdseac_locked_f;
-
-   rvdffe #(32)  mdseac_ff (.*, .en(mdseac_en), .din(lsu_imprecise_error_addr_any[31:0]), .dout(mdseac[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MPMC (R0W1)
-   // [0] : FW halt
-   // [1] : Set MSTATUS[MIE] on halt
-
-   localparam MPMC          = 12'h7c6;
-
-   assign wr_mpmc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MPMC);
-
-   // allow the cycle of the dbg halt flush that contains the wr_mpmc_r to
-   // set the mstatus bit potentially, use delayed version of internal dbg halt.
-   assign fw_halt_req = wr_mpmc_r & dec_csr_wrdata_r[0] & ~internal_dbg_halt_mode_f2 & ~ext_int_freeze_d1;
-
-   assign fw_halted_ns = (fw_halt_req | fw_halted) & ~set_mie_pmu_fw_halt;
-   assign mpmc_b_ns[1] = wr_mpmc_r ? ~dec_csr_wrdata_r[1] : ~mpmc[1];
-   rvdff #(1)  mpmc_ff (.*, .clk(csr_wr_clk), .din(mpmc_b_ns[1]), .dout(mpmc_b[1]));
-   assign mpmc[1] = ~mpmc_b[1];
-
-   // ----------------------------------------------------------------------
-   // MICECT (I-Cache error counter/threshold)
-   // [31:27] : Icache parity error threshold
-   // [26:0]  : Icache parity error count
-   localparam MICECT        = 12'h7f0;
-
-   assign csr_sat[31:27] = (dec_csr_wrdata_r[31:27] > 5'd26) ? 5'd26 : dec_csr_wrdata_r[31:27];
-
-   assign wr_micect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICECT);
-   assign micect_inc[26:0] = micect[26:0] + {26'b0, ic_perr_r};
-   assign micect_ns =  wr_micect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {micect[31:27], micect_inc[26:0]};
-
-   rvdffe #(32)  micect_ff (.*, .en(wr_micect_r | ic_perr_r), .din(micect_ns[31:0]), .dout(micect[31:0]));
-
-   assign mice_ce_req = |({32'hffffffff << micect[31:27]} & {5'b0, micect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MICCMECT (ICCM error counter/threshold)
-   // [31:27] : ICCM parity error threshold
-   // [26:0]  : ICCM parity error count
-   localparam MICCMECT      = 12'h7f1;
-
-   assign wr_miccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICCMECT);
-   assign miccmect_inc[26:0] = miccmect[26:0] + {26'b0, iccm_sbecc_r | iccm_dma_sb_error};
-   assign miccmect_ns        = wr_miccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {miccmect[31:27], miccmect_inc[26:0]};
-
-   rvdffe #(32)  miccmect_ff (.*, .clk(free_l2clk), .en(wr_miccmect_r | iccm_sbecc_r | iccm_dma_sb_error), .din(miccmect_ns[31:0]), .dout(miccmect[31:0]));
-
-   assign miccme_ce_req = |({32'hffffffff << miccmect[31:27]} & {5'b0, miccmect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MDCCMECT (DCCM error counter/threshold)
-   // [31:27] : DCCM parity error threshold
-   // [26:0]  : DCCM parity error count
-   localparam MDCCMECT      = 12'h7f2;
-
-   assign wr_mdccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDCCMECT);
-   assign mdccmect_inc[26:0] = mdccmect[26:0] + {26'b0, lsu_single_ecc_error_r_d1};
-   assign mdccmect_ns        = wr_mdccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {mdccmect[31:27], mdccmect_inc[26:0]};
-
-   rvdffe #(32)  mdccmect_ff (.*, .clk(free_l2clk), .en(wr_mdccmect_r | lsu_single_ecc_error_r_d1), .din(mdccmect_ns[31:0]), .dout(mdccmect[31:0]));
-
-   assign mdccme_ce_req = |({32'hffffffff << mdccmect[31:27]} & {5'b0, mdccmect[26:0]});
-
-
-   // ----------------------------------------------------------------------
-   // MFDHT (Force Debug Halt Threshold)
-   // [5:1] : Halt timeout threshold (power of 2)
-   //   [0] : Halt timeout enabled
-   localparam MFDHT         = 12'h7ce;
-
-   assign wr_mfdht_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHT);
-
-   assign mfdht_ns[5:0] = wr_mfdht_r ? dec_csr_wrdata_r[5:0] : mfdht[5:0];
-
-   rvdffs #(6)  mfdht_ff (.*, .clk(csr_wr_clk), .en(wr_mfdht_r), .din(mfdht_ns[5:0]), .dout(mfdht[5:0]));
-
-    // ----------------------------------------------------------------------
-   // MFDHS(RW)
-   // [1] : LSU operation pending when debug halt threshold reached
-   // [0] : IFU operation pending when debug halt threshold reached
-
-   localparam MFDHS         = 12'h7cf;
-
-   assign wr_mfdhs_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHS);
-
-   assign mfdhs_ns[1:0] = wr_mfdhs_r ? dec_csr_wrdata_r[1:0] : ((dbg_tlu_halted & ~dbg_tlu_halted_f) ? {~lsu_idle_any_f, ~ifu_miss_state_idle_f} : mfdhs[1:0]);
-
-   rvdffs #(2)  mfdhs_ff (.*, .clk(free_clk), .en(wr_mfdhs_r | dbg_tlu_halted), .din(mfdhs_ns[1:0]), .dout(mfdhs[1:0]));
-
-   assign force_halt_ctr[31:0] = debug_halt_req_f ? (force_halt_ctr_f[31:0] + 32'b1) : (dbg_tlu_halted_f ? 32'b0 : force_halt_ctr_f[31:0]);
-
-   rvdffe #(32)  forcehaltctr_ff (.*, .en(mfdht[0]), .din(force_halt_ctr[31:0]), .dout(force_halt_ctr_f[31:0]));
-
-   assign force_halt = mfdht[0] & |(force_halt_ctr_f[31:0] & (32'hffffffff << mfdht[5:1]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIVT (External Interrupt Vector Table (R/W))
-   // [31:10]: Base address (R/W)
-   // [9:0]  : Reserved, reads 0x0
-   localparam MEIVT         = 12'hbc8;
-
-   assign wr_meivt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIVT);
-
-   rvdffe #(22)  meivt_ff (.*, .en(wr_meivt_r), .din(dec_csr_wrdata_r[31:10]), .dout(meivt[31:10]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIHAP (External Interrupt Handler Access Pointer (R))
-   // [31:10]: Base address (R/W)
-   // [9:2]  : ClaimID (R)
-   // [1:0]  : Reserved, 0x0
-   localparam MEIHAP        = 12'hfc8;
-
-   assign wr_meihap_r = wr_meicpct_r;
-
-   rvdffe #(8)  meihap_ff (.*, .en(wr_meihap_r), .din(pic_claimid[7:0]), .dout(meihap[9:2]));
-
-   assign dec_tlu_meihap[31:2] = {meivt[31:10], meihap[9:2]};
-   // ----------------------------------------------------------------------
-   // MEICURPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : CURRPRI - Priority level of current interrupt service routine (R/W)
-   localparam MEICURPL      = 12'hbcc;
-
-   assign wr_meicurpl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICURPL);
-   assign meicurpl_ns[3:0] = wr_meicurpl_r ? dec_csr_wrdata_r[3:0] : meicurpl[3:0];
-
-   rvdff #(4)  meicurpl_ff (.*, .clk(csr_wr_clk), .din(meicurpl_ns[3:0]), .dout(meicurpl[3:0]));
-
-   // PIC needs this reg
-   assign dec_tlu_meicurpl[3:0] = meicurpl[3:0];
-
-
-   // ----------------------------------------------------------------------
-   // MEICIDPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : External Interrupt Claim ID's Priority Level Register
-   localparam MEICIDPL      = 12'hbcb;
-
-   assign wr_meicidpl_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICIDPL)) | take_ext_int_start;
-
-   assign meicidpl_ns[3:0] = wr_meicpct_r ? pic_pl[3:0] : (wr_meicidpl_r ? dec_csr_wrdata_r[3:0] : meicidpl[3:0]);
-
-
-   // ----------------------------------------------------------------------
-   // MEICPCT (Capture CLAIMID in MEIHAP and PL in MEICIDPL
-   // [31:1] : Reserved (read 0x0)
-   // [0]    : Capture (W1, Read 0)
-   localparam MEICPCT       = 12'hbca;
-
-   assign wr_meicpct_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICPCT)) | take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MEIPT (External Interrupt Priority Threshold)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : PRITHRESH
-   localparam MEIPT         = 12'hbc9;
-
-   assign wr_meipt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIPT);
-   assign meipt_ns[3:0] = wr_meipt_r ? dec_csr_wrdata_r[3:0] : meipt[3:0];
-
-   rvdff #(4)  meipt_ff (.*, .clk(csr_wr_clk), .din(meipt_ns[3:0]), .dout(meipt[3:0]));
-
-   // to PIC
-   assign dec_tlu_meipt[3:0] = meipt[3:0];
-   // ----------------------------------------------------------------------
-   // DCSR (R/W) (Only accessible in debug mode)
-   // [31:28] : xdebugver (hard coded to 0x4) RO
-   // [27:16] : 0x0, reserved
-   // [15]    : ebreakm
-   // [14]    : 0x0, reserved
-   // [13]    : ebreaks (0x0 for this core)
-   // [12]    : ebreaku (0x0 for this core)
-   // [11]    : stepie
-   // [10]    : stopcount
-   // [9]     : 0x0 //stoptime
-   // [8:6]   : cause (RO)
-   // [5:4]   : 0x0, reserved
-   // [3]     : nmip
-   // [2]     : step
-   // [1:0]   : prv (0x3 for this core)
-   //
-   localparam DCSR          = 12'h7b0;
-
-   // RV has clarified that 'priority 4' in the spec means top priority.
-   // 4. single step. 3. Debugger request. 2. Ebreak. 1. Trigger.
-
-   // RV debug spec indicates a cause priority change for trigger hits during single step.
-   assign trigger_hit_for_dscr_cause_r_d1 = trigger_hit_dmode_r_d1 | (trigger_hit_r_d1 & dcsr_single_step_done_f);
-
-   assign dcsr_cause[8:6] = ( ({3{dcsr_single_step_done_f & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1 & ~debug_halt_req}} & 3'b100) |
-                              ({3{debug_halt_req & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b011) |
-                              ({3{ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b001) |
-                              ({3{trigger_hit_for_dscr_cause_r_d1}} & 3'b010));
-
-   assign wr_dcsr_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DCSR);
-
-
-
-  // Multiple halt enter requests can happen before we are halted.
-  // We have to continue to upgrade based on dcsr_cause priority but we can't downgrade.
-   assign dcsr_cause_upgradeable = internal_dbg_halt_mode_f & (dcsr[8:6] == 3'b011);
-   assign enter_debug_halt_req_le = enter_debug_halt_req & (~dbg_tlu_halted | dcsr_cause_upgradeable);
-
-   assign nmi_in_debug_mode = nmi_int_detected_f & internal_dbg_halt_mode_f;
-   assign dcsr_ns[15:2] = enter_debug_halt_req_le ? {dcsr[15:9], dcsr_cause[8:6], dcsr[5:2]} :
-                          (wr_dcsr_r ? {dec_csr_wrdata_r[15], 3'b0, dec_csr_wrdata_r[11:10], 1'b0, dcsr[8:6], 2'b00, nmi_in_debug_mode | dcsr[3], dec_csr_wrdata_r[2]} :
-                           {dcsr[15:4], nmi_in_debug_mode, dcsr[2]});
-
-   rvdffe #(14)  dcsr_ff (.*, .clk(free_l2clk), .en(enter_debug_halt_req_le | wr_dcsr_r | internal_dbg_halt_mode | take_nmi), .din(dcsr_ns[15:2]), .dout(dcsr[15:2]));
-
-   // ----------------------------------------------------------------------
-   // DPC (R/W) (Only accessible in debug mode)
-   // [31:0] : Debug PC
-   localparam DPC           = 12'h7b1;
-
-   assign wr_dpc_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DPC);
-   assign dpc_capture_npc = dbg_tlu_halted & ~dbg_tlu_halted_f & ~request_debug_mode_done;
-   assign dpc_capture_pc = request_debug_mode_r;
-
-   assign dpc_ns[31:1] = ( ({31{~dpc_capture_pc & ~dpc_capture_npc & wr_dpc_r}} & dec_csr_wrdata_r[31:1]) |
-                           ({31{dpc_capture_pc}} & pc_r[31:1]) |
-                           ({31{~dpc_capture_pc & dpc_capture_npc}} & npc_r[31:1]) );
-
-   rvdffe #(31)  dpc_ff (.*, .en(wr_dpc_r | dpc_capture_pc | dpc_capture_npc), .din(dpc_ns[31:1]), .dout(dpc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // DICAWICS (R/W) (Only accessible in debug mode)
-   // [31:25] : Reserved
-   // [24]    : Array select, 0 is data, 1 is tag
-   // [23:22] : Reserved
-   // [21:20] : Way select
-   // [19:17] : Reserved
-   // [16:3]  : Index
-   // [2:0]   : Reserved
-   localparam DICAWICS      = 12'h7c8;
-
-   assign dicawics_ns[16:0] = {dec_csr_wrdata_r[24], dec_csr_wrdata_r[21:20], dec_csr_wrdata_r[16:3]};
-   assign wr_dicawics_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAWICS);
-
-   rvdffe #(17)  dicawics_ff (.*, .en(wr_dicawics_r), .din(dicawics_ns[16:0]), .dout(dicawics[16:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0 (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [31:0]  : inst data
-   //
-   // If dicawics[array] is 1
-   // [31:16] : Tag
-   // [15:7]  : Reserved
-   // [6:4]   : LRU
-   // [3:1]   : Reserved
-   // [0]     : Valid
-   localparam DICAD0        = 12'h7c9;
-
-   assign dicad0_ns[31:0] = wr_dicad0_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[31:0];
-
-   assign wr_dicad0_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0);
-
-   rvdffe #(32)  dicad0_ff (.*, .en(wr_dicad0_r | ifu_ic_debug_rd_data_valid), .din(dicad0_ns[31:0]), .dout(dicad0[31:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0H (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [63:32]  : inst data
-   //
-   localparam DICAD0H       = 12'h7cc;
-
-   assign dicad0h_ns[31:0] = wr_dicad0h_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[63:32];
-
-   assign wr_dicad0h_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0H);
-
-   rvdffe #(32)  dicad0h_ff (.*, .en(wr_dicad0h_r | ifu_ic_debug_rd_data_valid), .din(dicad0h_ns[31:0]), .dout(dicad0h[31:0]));
-
-
-if (pt.ICACHE_ECC == 1) begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [6:0]     : ECC
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[6:0] = wr_dicad1_r ? dec_csr_wrdata_r[6:0] : ifu_ic_debug_rd_data[70:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffe #(.WIDTH(7), .OVERRIDE(1))  dicad1_ff (.*, .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[6:0]), .dout(dicad1_raw[6:0]));
-
-   assign dicad1[31:0] = {25'b0, dicad1_raw[6:0]};
-
-end
-else begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [3:0]     : Parity
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[3:0] = wr_dicad1_r ? dec_csr_wrdata_r[3:0] : ifu_ic_debug_rd_data[67:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffs #(4)  dicad1_ff (.*, .clk(free_clk), .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[3:0]), .dout(dicad1_raw[3:0]));
-
-   assign dicad1[31:0] = {28'b0, dicad1_raw[3:0]};
-end
-   // ----------------------------------------------------------------------
-   // DICAGO (R/W) (Only accessible in debug mode)
-   // [0]     : Go
-   localparam DICAGO        = 12'h7cb;
-
-if (pt.ICACHE_ECC == 1)
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {      dicad1[6:0], dicad0h[31:0], dicad0[31:0]};
-else
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {3'b0, dicad1[3:0], dicad0h[31:0], dicad0[31:0]};
-
-
-   assign dec_tlu_ic_diag_pkt.icache_dicawics[16:0] = dicawics[16:0];
-
-   assign icache_rd_valid = allow_dbg_halt_csr_write & dec_csr_any_unq_d & dec_i0_decode_d & ~dec_csr_wen_unq_d & (dec_csr_rdaddr_d[11:0] == DICAGO);
-   assign icache_wr_valid = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAGO);
-
-
-   assign dec_tlu_ic_diag_pkt.icache_rd_valid = icache_rd_valid_f;
-   assign dec_tlu_ic_diag_pkt.icache_wr_valid = icache_wr_valid_f;
-
-   // ----------------------------------------------------------------------
-   // MTSEL (R/W)
-   // [1:0] : Trigger select : 00, 01, 10 are data/address triggers. 11 is inst count
-   localparam MTSEL         = 12'h7a0;
-
-   assign wr_mtsel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTSEL);
-   assign mtsel_ns[1:0] = wr_mtsel_r ? {dec_csr_wrdata_r[1:0]} : mtsel[1:0];
-
-   rvdff #(2)  mtsel_ff (.*, .clk(csr_wr_clk), .din(mtsel_ns[1:0]), .dout(mtsel[1:0]));
-
-   // ----------------------------------------------------------------------
-   // MTDATA1 (R/W)
-   // [31:0] : Trigger Data 1
-   localparam MTDATA1       = 12'h7a1;
-
-   // for triggers 0, 1, 2 and 3 aka Match Control
-   // [31:28] : type, hard coded to 0x2
-   // [27]    : dmode
-   // [26:21] : hard coded to 0x1f
-   // [20]    : hit
-   // [19]    : select (0 - address, 1 - data)
-   // [18]    : timing, always 'before', reads 0x0
-   // [17:12] : action, bits  [17:13] not implemented and reads 0x0
-   // [11]    : chain
-   // [10:7]  : match, bits [10:8] not implemented and reads 0x0
-   // [6]     : M
-   // [5:3]   : not implemented, reads 0x0
-   // [2]     : execute
-   // [1]     : store
-   // [0]     : load
-   //
-   // decoder ring
-   // [27]    : => 9
-   // [20]    : => 8
-   // [19]    : => 7
-   // [12]    : => 6
-   // [11]    : => 5
-   // [7]     : => 4
-   // [6]     : => 3
-   // [2]     : => 2
-   // [1]     : => 1
-   // [0]     : => 0
-
-
-   // don't allow setting load-data.
-   assign tdata_load = dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[19];
-   // don't allow setting execute-data.
-   assign tdata_opcode = dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[19];
-   // don't allow clearing DMODE and action=1
-   assign tdata_action = (dec_csr_wrdata_r[27] & dbg_tlu_halted_f) & dec_csr_wrdata_r[12];
-
-   // Chain bit has conditions: WARL for triggers without chains. Force to zero if dmode is 0 but next trigger dmode is 1.
-   assign tdata_chain = mtsel[0] ? 1'b0 : // triggers 1 and 3 chain bit is always zero
-                        mtsel[1] ?  dec_csr_wrdata_r[11] & ~(mtdata1_t3[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]) : // trigger 2
-                                    dec_csr_wrdata_r[11] & ~(mtdata1_t1[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]);  // trigger 0
-
-   // Kill mtdata1 write if dmode=1 but prior trigger has dmode=0/chain=1. Only applies to T1 and T3
-   assign tdata_kill_write = mtsel[1] ? dec_csr_wrdata_r[27] & (~mtdata1_t2[MTDATA1_DMODE] & mtdata1_t2[MTDATA1_CHAIN]) : // trigger 3
-                                        dec_csr_wrdata_r[27] & (~mtdata1_t0[MTDATA1_DMODE] & mtdata1_t0[MTDATA1_CHAIN]) ; // trigger 1
-
-
-   assign tdata_wrdata_r[9:0]  = {dec_csr_wrdata_r[27] & dbg_tlu_halted_f,
-                                   dec_csr_wrdata_r[20:19],
-                                   tdata_action,
-                                   tdata_chain,
-                                   dec_csr_wrdata_r[7:6],
-                                   tdata_opcode,
-                                   dec_csr_wrdata_r[1],
-                                   tdata_load};
-
-   // If the DMODE bit is set, tdata1 can only be updated in debug_mode
-   assign wr_mtdata1_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b0) & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t0_ns[9:0] = wr_mtdata1_t0_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t0[9], update_hit_bit_r[0] | mtdata1_t0[8], mtdata1_t0[7:0]};
-
-   assign wr_mtdata1_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t1_ns[9:0] = wr_mtdata1_t1_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t1[9], update_hit_bit_r[1] | mtdata1_t1[8], mtdata1_t1[7:0]};
-
-   assign wr_mtdata1_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t2_ns[9:0] = wr_mtdata1_t2_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t2[9], update_hit_bit_r[2] | mtdata1_t2[8], mtdata1_t2[7:0]};
-
-   assign wr_mtdata1_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t3_ns[9:0] = wr_mtdata1_t3_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t3[9], update_hit_bit_r[3] | mtdata1_t3[8], mtdata1_t3[7:0]};
-
-
-   rvdffe #(10)  mtdata1_t0_ff (.*, .en(trigger_enabled[0] | wr_mtdata1_t0_r), .din(mtdata1_t0_ns[9:0]), .dout(mtdata1_t0[9:0]));
-   rvdffe #(10)  mtdata1_t1_ff (.*, .en(trigger_enabled[1] | wr_mtdata1_t1_r), .din(mtdata1_t1_ns[9:0]), .dout(mtdata1_t1[9:0]));
-   rvdffe #(10)  mtdata1_t2_ff (.*, .en(trigger_enabled[2] | wr_mtdata1_t2_r), .din(mtdata1_t2_ns[9:0]), .dout(mtdata1_t2[9:0]));
-   rvdffe #(10)  mtdata1_t3_ff (.*, .en(trigger_enabled[3] | wr_mtdata1_t3_r), .din(mtdata1_t3_ns[9:0]), .dout(mtdata1_t3[9:0]));
-
-   assign mtdata1_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & {4'h2, mtdata1_t0[9], 6'b011111, mtdata1_t0[8:7], 6'b0, mtdata1_t0[6:5], 3'b0, mtdata1_t0[4:3], 3'b0, mtdata1_t0[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & {4'h2, mtdata1_t1[9], 6'b011111, mtdata1_t1[8:7], 6'b0, mtdata1_t1[6:5], 3'b0, mtdata1_t1[4:3], 3'b0, mtdata1_t1[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & {4'h2, mtdata1_t2[9], 6'b011111, mtdata1_t2[8:7], 6'b0, mtdata1_t2[6:5], 3'b0, mtdata1_t2[4:3], 3'b0, mtdata1_t2[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & {4'h2, mtdata1_t3[9], 6'b011111, mtdata1_t3[8:7], 6'b0, mtdata1_t3[6:5], 3'b0, mtdata1_t3[4:3], 3'b0, mtdata1_t3[2:0]}));
-
-   assign trigger_pkt_any[0].select = mtdata1_t0[MTDATA1_SEL];
-   assign trigger_pkt_any[0].match = mtdata1_t0[MTDATA1_MATCH];
-   assign trigger_pkt_any[0].store = mtdata1_t0[MTDATA1_ST];
-   assign trigger_pkt_any[0].load = mtdata1_t0[MTDATA1_LD];
-   assign trigger_pkt_any[0].execute = mtdata1_t0[MTDATA1_EXE];
-   assign trigger_pkt_any[0].m = mtdata1_t0[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[1].select = mtdata1_t1[MTDATA1_SEL];
-   assign trigger_pkt_any[1].match = mtdata1_t1[MTDATA1_MATCH];
-   assign trigger_pkt_any[1].store = mtdata1_t1[MTDATA1_ST];
-   assign trigger_pkt_any[1].load = mtdata1_t1[MTDATA1_LD];
-   assign trigger_pkt_any[1].execute = mtdata1_t1[MTDATA1_EXE];
-   assign trigger_pkt_any[1].m = mtdata1_t1[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[2].select = mtdata1_t2[MTDATA1_SEL];
-   assign trigger_pkt_any[2].match = mtdata1_t2[MTDATA1_MATCH];
-   assign trigger_pkt_any[2].store = mtdata1_t2[MTDATA1_ST];
-   assign trigger_pkt_any[2].load = mtdata1_t2[MTDATA1_LD];
-   assign trigger_pkt_any[2].execute = mtdata1_t2[MTDATA1_EXE];
-   assign trigger_pkt_any[2].m = mtdata1_t2[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[3].select = mtdata1_t3[MTDATA1_SEL];
-   assign trigger_pkt_any[3].match = mtdata1_t3[MTDATA1_MATCH];
-   assign trigger_pkt_any[3].store = mtdata1_t3[MTDATA1_ST];
-   assign trigger_pkt_any[3].load = mtdata1_t3[MTDATA1_LD];
-   assign trigger_pkt_any[3].execute = mtdata1_t3[MTDATA1_EXE];
-   assign trigger_pkt_any[3].m = mtdata1_t3[MTDATA1_M_ENABLED];
-
-
-
-
-
-   // ----------------------------------------------------------------------
-   // MTDATA2 (R/W)
-   // [31:0] : Trigger Data 2
-   localparam MTDATA2       = 12'h7a2;
-
-   // If the DMODE bit is set, tdata2 can only be updated in debug_mode
-   assign wr_mtdata2_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b0)  & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f);
-
-   rvdffe #(32)  mtdata2_t0_ff (.*, .en(wr_mtdata2_t0_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t0[31:0]));
-   rvdffe #(32)  mtdata2_t1_ff (.*, .en(wr_mtdata2_t1_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t1[31:0]));
-   rvdffe #(32)  mtdata2_t2_ff (.*, .en(wr_mtdata2_t2_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t2[31:0]));
-   rvdffe #(32)  mtdata2_t3_ff (.*, .en(wr_mtdata2_t3_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t3[31:0]));
-
-   assign mtdata2_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & mtdata2_t0[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & mtdata2_t1[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & mtdata2_t2[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & mtdata2_t3[31:0]));
-
-   assign trigger_pkt_any[0].tdata2[31:0] = mtdata2_t0[31:0];
-   assign trigger_pkt_any[1].tdata2[31:0] = mtdata2_t1[31:0];
-   assign trigger_pkt_any[2].tdata2[31:0] = mtdata2_t2[31:0];
-   assign trigger_pkt_any[3].tdata2[31:0] = mtdata2_t3[31:0];
-
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section starts
-   //----------------------------------------------------------------------
-   localparam MHPME_NOEVENT             = 10'd0;
-   localparam MHPME_CLK_ACTIVE          = 10'd1; // OOP - out of pipe
-   localparam MHPME_ICACHE_HIT          = 10'd2; // OOP
-   localparam MHPME_ICACHE_MISS         = 10'd3; // OOP
-   localparam MHPME_INST_COMMIT         = 10'd4;
-   localparam MHPME_INST_COMMIT_16B     = 10'd5;
-   localparam MHPME_INST_COMMIT_32B     = 10'd6;
-   localparam MHPME_INST_ALIGNED        = 10'd7; // OOP
-   localparam MHPME_INST_DECODED        = 10'd8; // OOP
-   localparam MHPME_INST_MUL            = 10'd9;
-   localparam MHPME_INST_DIV            = 10'd10;
-   localparam MHPME_INST_LOAD           = 10'd11;
-   localparam MHPME_INST_STORE          = 10'd12;
-   localparam MHPME_INST_MALOAD         = 10'd13;
-   localparam MHPME_INST_MASTORE        = 10'd14;
-   localparam MHPME_INST_ALU            = 10'd15;
-   localparam MHPME_INST_CSRREAD        = 10'd16;
-   localparam MHPME_INST_CSRRW          = 10'd17;
-   localparam MHPME_INST_CSRWRITE       = 10'd18;
-   localparam MHPME_INST_EBREAK         = 10'd19;
-   localparam MHPME_INST_ECALL          = 10'd20;
-   localparam MHPME_INST_FENCE          = 10'd21;
-   localparam MHPME_INST_FENCEI         = 10'd22;
-   localparam MHPME_INST_MRET           = 10'd23;
-   localparam MHPME_INST_BRANCH         = 10'd24;
-   localparam MHPME_BRANCH_MP           = 10'd25;
-   localparam MHPME_BRANCH_TAKEN        = 10'd26;
-   localparam MHPME_BRANCH_NOTP         = 10'd27;
-   localparam MHPME_FETCH_STALL         = 10'd28; // OOP
-   localparam MHPME_DECODE_STALL        = 10'd30; // OOP
-   localparam MHPME_POSTSYNC_STALL      = 10'd31; // OOP
-   localparam MHPME_PRESYNC_STALL       = 10'd32; // OOP
-   localparam MHPME_LSU_SB_WB_STALL     = 10'd34; // OOP
-   localparam MHPME_DMA_DCCM_STALL      = 10'd35; // OOP
-   localparam MHPME_DMA_ICCM_STALL      = 10'd36; // OOP
-   localparam MHPME_EXC_TAKEN           = 10'd37;
-   localparam MHPME_TIMER_INT_TAKEN     = 10'd38;
-   localparam MHPME_EXT_INT_TAKEN       = 10'd39;
-   localparam MHPME_FLUSH_LOWER         = 10'd40;
-   localparam MHPME_BR_ERROR            = 10'd41;
-   localparam MHPME_IBUS_TRANS          = 10'd42; // OOP
-   localparam MHPME_DBUS_TRANS          = 10'd43; // OOP
-   localparam MHPME_DBUS_MA_TRANS       = 10'd44; // OOP
-   localparam MHPME_IBUS_ERROR          = 10'd45; // OOP
-   localparam MHPME_DBUS_ERROR          = 10'd46; // OOP
-   localparam MHPME_IBUS_STALL          = 10'd47; // OOP
-   localparam MHPME_DBUS_STALL          = 10'd48; // OOP
-   localparam MHPME_INT_DISABLED        = 10'd49; // OOP
-   localparam MHPME_INT_STALLED         = 10'd50; // OOP
-   localparam MHPME_INST_BITMANIP       = 10'd54;
-   localparam MHPME_DBUS_LOAD           = 10'd55;
-   localparam MHPME_DBUS_STORE          = 10'd56;
-   // Counts even during sleep state
-   localparam MHPME_SLEEP_CYC           = 10'd512; // OOP
-   localparam MHPME_DMA_READ_ALL        = 10'd513; // OOP
-   localparam MHPME_DMA_WRITE_ALL       = 10'd514; // OOP
-   localparam MHPME_DMA_READ_DCCM       = 10'd515; // OOP
-   localparam MHPME_DMA_WRITE_DCCM      = 10'd516; // OOP
-
-   // Pack the event selects into a vector for genvar
-   assign mhpme_vec[0][9:0] = mhpme3[9:0];
-   assign mhpme_vec[1][9:0] = mhpme4[9:0];
-   assign mhpme_vec[2][9:0] = mhpme5[9:0];
-   assign mhpme_vec[3][9:0] = mhpme6[9:0];
-
-   // only consider committed itypes
-   //logic [3:0] pmu_i0_itype_qual;
-   assign pmu_i0_itype_qual[3:0] = dec_tlu_packet_r.pmu_i0_itype[3:0] & {4{tlu_i0_commit_cmt}};
-
-   // Generate the muxed incs for all counters based on event type
-   for (genvar i=0 ; i < 4; i++) begin
-      assign mhpmc_inc_r[i] =  {{~mcountinhibit[i+3]}} &
-           (
-             ({1{(mhpme_vec[i][9:0] == MHPME_CLK_ACTIVE      )}} & 1'b1) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_HIT      )}} & {ifu_pmu_ic_hit}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_MISS     )}} & {ifu_pmu_ic_miss}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT     )}} & {tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_16B )}} & {tlu_i0_commit_cmt & ~exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_32B )}} & {tlu_i0_commit_cmt &  exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALIGNED    )}} & ifu_pmu_instr_aligned)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DECODED    )}} & dec_pmu_instr_decoded)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & {dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MUL        )}} & {(pmu_i0_itype_qual == MUL)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DIV        )}} & {dec_tlu_packet_r.pmu_divide  & tlu_i0_commit_cmt & ~illegal_r})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_LOAD       )}} & {(pmu_i0_itype_qual == LOAD)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_STORE      )}} & {(pmu_i0_itype_qual == STORE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MALOAD     )}} & {(pmu_i0_itype_qual == LOAD)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MASTORE    )}} & {(pmu_i0_itype_qual == STORE)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALU        )}} & {(pmu_i0_itype_qual == ALU)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRREAD    )}} & {(pmu_i0_itype_qual == CSRREAD)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRWRITE   )}} & {(pmu_i0_itype_qual == CSRWRITE)})|
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRRW      )}} & {(pmu_i0_itype_qual == CSRRW)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_EBREAK     )}} & {(pmu_i0_itype_qual == EBREAK)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ECALL      )}} & {(pmu_i0_itype_qual == ECALL)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCE      )}} & {(pmu_i0_itype_qual == FENCE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCEI     )}} & {(pmu_i0_itype_qual == FENCEI)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MRET       )}} & {(pmu_i0_itype_qual == MRET)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BRANCH     )}} & {
-                                                                     ((pmu_i0_itype_qual == CONDBR) | (pmu_i0_itype_qual == JAL))})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_MP       )}} & {exu_pmu_i0_br_misp & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_TAKEN    )}} & {exu_pmu_i0_br_ataken & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_NOTP     )}} & {dec_tlu_packet_r.pmu_i0_br_unpred & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FETCH_STALL     )}} & { ifu_pmu_fetch_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & { dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_POSTSYNC_STALL  )}} & {dec_pmu_postsync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_PRESYNC_STALL   )}} & {dec_pmu_presync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_LSU_SB_WB_STALL )}} & { lsu_store_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_DCCM_STALL  )}} & { dma_dccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_ICCM_STALL  )}} & { dma_iccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXC_TAKEN       )}} & { (i0_exception_valid_r | i0_trigger_hit_r | lsu_exc_valid_r)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_TIMER_INT_TAKEN )}} & { take_timer_int | take_int_timer0_int | take_int_timer1_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXT_INT_TAKEN   )}} & { take_ext_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FLUSH_LOWER     )}} & { tlu_flush_lower_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BR_ERROR        )}} & {(dec_tlu_br0_error_r | dec_tlu_br0_start_error_r) & rfpc_i0_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_TRANS      )}} & {ifu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_TRANS      )}} & {lsu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_MA_TRANS   )}} & {lsu_pmu_bus_misaligned}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_ERROR      )}} & {ifu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_ERROR      )}} & {lsu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_STALL      )}} & {ifu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STALL      )}} & {lsu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_DISABLED    )}} & {~mstatus[MSTATUS_MIE]}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_STALLED     )}} & {~mstatus[MSTATUS_MIE] & |(mip[5:0] & mie[5:0])}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BITMANIP     )}} & {(pmu_i0_itype_qual == BITMANIPU)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_LOAD       )}} & {tlu_i0_commit_cmt & lsu_pmu_load_external_r & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STORE      )}} & {tlu_i0_commit_cmt & lsu_pmu_store_external_r & ~illegal_r}) |
-             // These count even during sleep
-             ({1{(mhpme_vec[i][9:0] == MHPME_SLEEP_CYC       )}} & {dec_tlu_pmu_fw_halted}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_ALL    )}} & {dma_pmu_any_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_ALL   )}} & {dma_pmu_any_write}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_DCCM   )}} & {dma_pmu_dccm_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_DCCM  )}} & {dma_pmu_dccm_write})
-             );
-   end
-
-
-   if(pt.FAST_INTERRUPT_REDIRECT)
-   rvdffie #(31)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   take_ext_int_start,    take_ext_int_start_d1, take_ext_int_start_d2, ext_int_freeze,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    take_ext_int_start_d1, take_ext_int_start_d2, take_ext_int_start_d3, ext_int_freeze_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   else
-   rvdffie #(27)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   assign perfcnt_halted = ((dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted);
-   assign perfcnt_during_sleep[3:0] = {4{~(dec_tlu_dbg_halted & dcsr[DCSR_STOPC])}} & {mhpme_vec[3][9],mhpme_vec[2][9],mhpme_vec[1][9],mhpme_vec[0][9]};
-
-   assign dec_tlu_perfcnt0 = mhpmc_inc_r_d1[0] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[0]);
-   assign dec_tlu_perfcnt1 = mhpmc_inc_r_d1[1] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[1]);
-   assign dec_tlu_perfcnt2 = mhpmc_inc_r_d1[2] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[2]);
-   assign dec_tlu_perfcnt3 = mhpmc_inc_r_d1[3] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[3]);
-
-   // ----------------------------------------------------------------------
-   // MHPMC3H(RW), MHPMC3(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 3
-   localparam MHPMC3        = 12'hB03;
-   localparam MHPMC3H       = 12'hB83;
-
-   assign mhpmc3_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3);
-   assign mhpmc3_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[0]) & (|(mhpmc_inc_r[0]));
-   assign mhpmc3_wr_en  = mhpmc3_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3_incr[63:0] = {mhpmc3h[31:0],mhpmc3[31:0]} + {63'b0, 1'b1};
-   assign mhpmc3_ns[31:0] = mhpmc3_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[31:0];
-   rvdffe #(32)  mhpmc3_ff (.*, .clk(free_l2clk), .en(mhpmc3_wr_en), .din(mhpmc3_ns[31:0]), .dout(mhpmc3[31:0]));
-
-   assign mhpmc3h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3H);
-   assign mhpmc3h_wr_en  = mhpmc3h_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3h_ns[31:0] = mhpmc3h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[63:32];
-   rvdffe #(32)  mhpmc3h_ff (.*, .clk(free_l2clk), .en(mhpmc3h_wr_en), .din(mhpmc3h_ns[31:0]), .dout(mhpmc3h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC4H(RW), MHPMC4(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 4
-   localparam MHPMC4        = 12'hB04;
-   localparam MHPMC4H       = 12'hB84;
-
-   assign mhpmc4_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4);
-   assign mhpmc4_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[1]) & (|(mhpmc_inc_r[1]));
-   assign mhpmc4_wr_en  = mhpmc4_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4_incr[63:0] = {mhpmc4h[31:0],mhpmc4[31:0]} + {63'b0,1'b1};
-   assign mhpmc4_ns[31:0] = mhpmc4_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[31:0];
-   rvdffe #(32)  mhpmc4_ff (.*, .clk(free_l2clk), .en(mhpmc4_wr_en), .din(mhpmc4_ns[31:0]), .dout(mhpmc4[31:0]));
-
-   assign mhpmc4h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4H);
-   assign mhpmc4h_wr_en  = mhpmc4h_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4h_ns[31:0] = mhpmc4h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[63:32];
-   rvdffe #(32)  mhpmc4h_ff (.*, .clk(free_l2clk), .en(mhpmc4h_wr_en), .din(mhpmc4h_ns[31:0]), .dout(mhpmc4h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC5H(RW), MHPMC5(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 5
-   localparam MHPMC5        = 12'hB05;
-   localparam MHPMC5H       = 12'hB85;
-
-   assign mhpmc5_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5);
-   assign mhpmc5_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[2]) & (|(mhpmc_inc_r[2]));
-   assign mhpmc5_wr_en  = mhpmc5_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5_incr[63:0] = {mhpmc5h[31:0],mhpmc5[31:0]} + {63'b0,1'b1};
-   assign mhpmc5_ns[31:0] = mhpmc5_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[31:0];
-   rvdffe #(32)  mhpmc5_ff (.*, .clk(free_l2clk), .en(mhpmc5_wr_en), .din(mhpmc5_ns[31:0]), .dout(mhpmc5[31:0]));
-
-   assign mhpmc5h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5H);
-   assign mhpmc5h_wr_en  = mhpmc5h_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5h_ns[31:0] = mhpmc5h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[63:32];
-   rvdffe #(32)  mhpmc5h_ff (.*, .clk(free_l2clk), .en(mhpmc5h_wr_en), .din(mhpmc5h_ns[31:0]), .dout(mhpmc5h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC6H(RW), MHPMC6(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 6
-   localparam MHPMC6        = 12'hB06;
-   localparam MHPMC6H       = 12'hB86;
-
-   assign mhpmc6_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6);
-   assign mhpmc6_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[3]) & (|(mhpmc_inc_r[3]));
-   assign mhpmc6_wr_en  = mhpmc6_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6_incr[63:0] = {mhpmc6h[31:0],mhpmc6[31:0]} + {63'b0,1'b1};
-   assign mhpmc6_ns[31:0] = mhpmc6_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[31:0];
-   rvdffe #(32)  mhpmc6_ff (.*, .clk(free_l2clk), .en(mhpmc6_wr_en), .din(mhpmc6_ns[31:0]), .dout(mhpmc6[31:0]));
-
-   assign mhpmc6h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6H);
-   assign mhpmc6h_wr_en  = mhpmc6h_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6h_ns[31:0] = mhpmc6h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[63:32];
-   rvdffe #(32)  mhpmc6h_ff (.*, .clk(free_l2clk), .en(mhpmc6h_wr_en), .din(mhpmc6h_ns[31:0]), .dout(mhpmc6h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPME3(RW)
-   // [9:0] : Hardware Performance Monitor Event 3
-   localparam MHPME3        = 12'h323;
-
-   // we only have events 0-56 with holes, 512-516, HPME* are WARL so zero otherwise.
-   assign zero_event_r = ( (dec_csr_wrdata_r[9:0] > 10'd516) |
-                           (|dec_csr_wrdata_r[31:10]) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd512) & (dec_csr_wrdata_r[9:0] > 10'd56)) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd54) & (dec_csr_wrdata_r[9:0] > 10'd50)) |
-                           (dec_csr_wrdata_r[9:0] == 10'd29) |
-                           (dec_csr_wrdata_r[9:0] == 10'd33)
-                           );
-
-   assign event_r[9:0] = zero_event_r ? '0 : dec_csr_wrdata_r[9:0];
-
-   assign wr_mhpme3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME3);
-   rvdffe #(10)  mhpme3_ff (.*, .en(wr_mhpme3_r), .din(event_r[9:0]), .dout(mhpme3[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME4(RW)
-   // [9:0] : Hardware Performance Monitor Event 4
-   localparam MHPME4        = 12'h324;
-
-   assign wr_mhpme4_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME4);
-   rvdffe #(10)  mhpme4_ff (.*, .en(wr_mhpme4_r), .din(event_r[9:0]), .dout(mhpme4[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME5(RW)
-   // [9:0] : Hardware Performance Monitor Event 5
-   localparam MHPME5        = 12'h325;
-
-   assign wr_mhpme5_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME5);
-   rvdffe #(10)  mhpme5_ff (.*, .en(wr_mhpme5_r), .din(event_r[9:0]), .dout(mhpme5[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME6(RW)
-   // [9:0] : Hardware Performance Monitor Event 6
-   localparam MHPME6        = 12'h326;
-
-   assign wr_mhpme6_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME6);
-   rvdffe #(10)  mhpme6_ff (.*, .en(wr_mhpme6_r), .din(event_r[9:0]), .dout(mhpme6[9:0]));
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section ends
-   //----------------------------------------------------------------------
-   // ----------------------------------------------------------------------
-
-   // MCOUNTINHIBIT(RW)
-   // [31:7] : Reserved, read 0x0
-   // [6]    : HPM6 disable
-   // [5]    : HPM5 disable
-   // [4]    : HPM4 disable
-   // [3]    : HPM3 disable
-   // [2]    : MINSTRET disable
-   // [1]    : reserved, read 0x0
-   // [0]    : MCYCLE disable
-
-   localparam MCOUNTINHIBIT             = 12'h320;
-
-   assign wr_mcountinhibit_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCOUNTINHIBIT);
-   rvdffs #(6)  mcountinhibit_ff (.*, .clk(csr_wr_clk), .en(wr_mcountinhibit_r), .din({dec_csr_wrdata_r[6:2], dec_csr_wrdata_r[0]}), .dout({mcountinhibit[6:2], mcountinhibit[0]}));
-   assign mcountinhibit[1] = 1'b0;
-
-   //--------------------------------------------------------------------------------
-   // trace
-   //--------------------------------------------------------------------------------
-   logic [4:0] dec_tlu_exc_cause_wb1_raw, dec_tlu_exc_cause_wb2;
-   logic       dec_tlu_int_valid_wb1_raw, dec_tlu_int_valid_wb2;
-
-   assign {dec_tlu_i0_valid_wb1,
-           dec_tlu_i0_exc_valid_wb1,
-           dec_tlu_exc_cause_wb1_raw[4:0],
-           dec_tlu_int_valid_wb1_raw}  =   {8{~dec_tlu_trace_disable}} & {i0_valid_wb,
-                                                                          i0_exception_valid_r_d1 | lsu_i0_exc_r_d1 | (trigger_hit_r_d1 & ~trigger_hit_dmode_r_d1),
-                                                                          exc_cause_wb[4:0],
-                                                                          interrupt_valid_r_d1};
-
-
-
-  // skid buffer for ints, reduces trace port count by 1
-   rvdffie #(.WIDTH(6), .OVERRIDE(1))  traceskidff (.*,  .clk(clk),
-                        .din ({dec_tlu_exc_cause_wb1_raw[4:0],
-                               dec_tlu_int_valid_wb1_raw}),
-                        .dout({dec_tlu_exc_cause_wb2[4:0],
-                               dec_tlu_int_valid_wb2}));
-   //skid for ints
-   assign dec_tlu_exc_cause_wb1[4:0] =  dec_tlu_int_valid_wb2 ? dec_tlu_exc_cause_wb2[4:0] : dec_tlu_exc_cause_wb1_raw[4:0];
-   assign dec_tlu_int_valid_wb1 = dec_tlu_int_valid_wb2;
-
-   assign dec_tlu_mtval_wb1  = mtval[31:0];
-
-   // end trace
-   //--------------------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // CSR read mux
-   // ----------------------------------------------------------------------
-
-// file "csrdecode" is human readable file that has all of the CSR decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "csrdecode" except legal equation:
-
-// 1) coredecode -in csrdecode > corecsrdecode.e
-
-// 2) espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations
-
-// to generate the legal CSR equation below:
-
-// 1) coredecode -in csrdecode -legal > csrlegal.e
-
-// 2) espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-// coredecode -in csrdecode > corecsrdecode.e; espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations; coredecode -in csrdecode -legal > csrlegal.e; espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-
-assign csr_misa = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mvendorid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_marchid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mimpid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mhartid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mstatus = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtvec = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mip = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]);
-
-assign csr_mie = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcyclel = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]);
-
-assign csr_mcycleh = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_minstretl = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_minstreth = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscratch = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mepc = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mcause = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscause = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mtval = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mrac = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dmst = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_mdseac = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]);
-
-assign csr_meihap = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[3]);
-
-assign csr_meivt = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_meipt = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_meicurpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_meicidpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dcsr = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcgc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dpc = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtsel = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata1 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata2 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[1]);
-
-assign csr_mhpmc3 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6 = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc3h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme3 = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme4 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme5 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme6 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mcountinhibit = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl1 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mpmc = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign csr_meicpct = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_micect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_miccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mdccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdht = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdhs = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_dicawics = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_dicad0h = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dicad0 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dicad1 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_dicago = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign presync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign postsync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign legal = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]);
-
-
-
-assign dec_tlu_presync_d = presync & dec_csr_any_unq_d & ~dec_csr_wen_unq_d;
-assign dec_tlu_postsync_d = postsync & dec_csr_any_unq_d;
-
-   // allow individual configuration of these features
-assign conditionally_illegal = ((csr_mitcnt0 | csr_mitcnt1 | csr_mitb0 | csr_mitb1 | csr_mitctl0 | csr_mitctl1) & !pt.TIMER_LEGAL_EN);
-
-assign valid_csr = ( legal & (~(csr_dcsr | csr_dpc | csr_dmst | csr_dicawics | csr_dicad0 | csr_dicad0h | csr_dicad1 | csr_dicago) | dbg_tlu_halted_f)
-                     & ~fast_int_meicpct & ~conditionally_illegal);
-
-assign dec_csr_legal_d = ( dec_csr_any_unq_d &
-                           valid_csr &          // of a valid CSR
-                           ~(dec_csr_wen_unq_d & (csr_mvendorid | csr_marchid | csr_mimpid | csr_mhartid | csr_mdseac | csr_meihap)) // that's not a write to a RO CSR
-                           );
-   // CSR read mux
-assign dec_csr_rddata_d[31:0] = ( ({32{csr_misa}}      & 32'h40201104) |
-                                  ({32{csr_mvendorid}} & 32'h00000045) |
-                                  ({32{csr_marchid}}   & 32'h00000010) |
-                                  ({32{csr_mimpid}}    & 32'h3) |
-                                  ({32{csr_mhartid}}   & {core_id[31:4], 4'b0}) |
-                                  ({32{csr_mstatus}}   & {{15{1'b0}}, 2'b01, 2'b00, 2'b11, 3'b0, mstatus[1], 3'b0, mstatus[0], 3'b0}) |
-                                  ({32{csr_mtvec}}     & {mtvec[30:1], 1'b0, mtvec[0]}) |
-                                  ({32{csr_mip}}       & {1'b0, mip[5:3], 16'b0, mip[2], 3'b0, mip[1], 3'b0, mip[0], 3'b0}) |
-                                  ({32{csr_mie}}       & {1'b0, mie[5:3], 16'b0, mie[2], 3'b0, mie[1], 3'b0, mie[0], 3'b0}) |
-                                  ({32{csr_mcyclel}}   & mcyclel[31:0]) |
-                                  ({32{csr_mcycleh}}   & mcycleh_inc[31:0]) |
-                                  ({32{csr_minstretl}} & minstretl_read[31:0]) |
-                                  ({32{csr_minstreth}} & minstreth_read[31:0]) |
-                                  ({32{csr_mscratch}}  & mscratch[31:0]) |
-                                  ({32{csr_mepc}}      & {mepc[31:1], 1'b0}) |
-                                  ({32{csr_mcause}}    & mcause[31:0]) |
-                                  ({32{csr_mscause}}   & {28'b0, mscause[3:0]}) |
-                                  ({32{csr_mtval}}     & mtval[31:0]) |
-                                  ({32{csr_mrac}}      & mrac[31:0]) |
-                                  ({32{csr_mdseac}}    & mdseac[31:0]) |
-                                  ({32{csr_meivt}}     & {meivt[31:10], 10'b0}) |
-                                  ({32{csr_meihap}}    & {meivt[31:10], meihap[9:2], 2'b0}) |
-                                  ({32{csr_meicurpl}}  & {28'b0, meicurpl[3:0]}) |
-                                  ({32{csr_meicidpl}}  & {28'b0, meicidpl[3:0]}) |
-                                  ({32{csr_meipt}}     & {28'b0, meipt[3:0]}) |
-                                  ({32{csr_mcgc}}      & {22'b0, mcgc[9:0]}) |
-                                  ({32{csr_mfdc}}      & {13'b0, mfdc[18:0]}) |
-                                  ({32{csr_dcsr}}      & {16'h4000, dcsr[15:2], 2'b11}) |
-                                  ({32{csr_dpc}}       & {dpc[31:1], 1'b0}) |
-                                  ({32{csr_dicad0}}    & dicad0[31:0]) |
-                                  ({32{csr_dicad0h}}   & dicad0h[31:0]) |
-                                  ({32{csr_dicad1}}    & dicad1[31:0]) |
-                                  ({32{csr_dicawics}}  & {7'b0, dicawics[16], 2'b0, dicawics[15:14], 3'b0, dicawics[13:0], 3'b0}) |
-                                  ({32{csr_mtsel}}     & {30'b0, mtsel[1:0]}) |
-                                  ({32{csr_mtdata1}}   & {mtdata1_tsel_out[31:0]}) |
-                                  ({32{csr_mtdata2}}   & {mtdata2_tsel_out[31:0]}) |
-                                  ({32{csr_micect}}    & {micect[31:0]}) |
-                                  ({32{csr_miccmect}}  & {miccmect[31:0]}) |
-                                  ({32{csr_mdccmect}}  & {mdccmect[31:0]}) |
-                                  ({32{csr_mhpmc3}}    & mhpmc3[31:0]) |
-                                  ({32{csr_mhpmc4}}    & mhpmc4[31:0]) |
-                                  ({32{csr_mhpmc5}}    & mhpmc5[31:0]) |
-                                  ({32{csr_mhpmc6}}    & mhpmc6[31:0]) |
-                                  ({32{csr_mhpmc3h}}   & mhpmc3h[31:0]) |
-                                  ({32{csr_mhpmc4h}}   & mhpmc4h[31:0]) |
-                                  ({32{csr_mhpmc5h}}   & mhpmc5h[31:0]) |
-                                  ({32{csr_mhpmc6h}}   & mhpmc6h[31:0]) |
-                                  ({32{csr_mfdht}}     & {26'b0, mfdht[5:0]}) |
-                                  ({32{csr_mfdhs}}     & {30'b0, mfdhs[1:0]}) |
-                                  ({32{csr_mhpme3}}    & {22'b0,mhpme3[9:0]}) |
-                                  ({32{csr_mhpme4}}    & {22'b0,mhpme4[9:0]}) |
-                                  ({32{csr_mhpme5}}    & {22'b0,mhpme5[9:0]}) |
-                                  ({32{csr_mhpme6}}    & {22'b0,mhpme6[9:0]}) |
-                                  ({32{csr_mcountinhibit}} & {25'b0, mcountinhibit[6:0]}) |
-                                  ({32{csr_mpmc}}      & {30'b0, mpmc[1], 1'b0}) |
-                                  ({32{dec_timer_read_d}} & dec_timer_rddata_d[31:0])
-                                  );
-
-
-
-endmodule // eb1_dec_tlu_ctl
-
-module eb1_dec_timer_ctl 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,
-   input logic free_l2clk,
-   input logic csr_wr_clk,
-   input logic rst_l,
-   input logic        dec_csr_wen_r_mod,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic csr_mitctl0,
-   input logic csr_mitctl1,
-   input logic csr_mitb0,
-   input logic csr_mitb1,
-   input logic csr_mitcnt0,
-   input logic csr_mitcnt1,
-
-
-   input logic dec_pause_state, // Paused
-   input logic dec_tlu_pmu_fw_halted, // pmu/fw halted
-   input logic internal_dbg_halt_timers, // debug halted
-
-   output logic [31:0] dec_timer_rddata_d, // timer CSR read data
-   output logic        dec_timer_read_d, // timer CSR address match
-   output logic        dec_timer_t0_pulse, // timer0 int
-   output logic        dec_timer_t1_pulse, // timer1 int
-
-   input  logic        scan_mode
-   );
-   localparam MITCTL_ENABLE             = 0;
-   localparam MITCTL_ENABLE_HALTED      = 1;
-   localparam MITCTL_ENABLE_PAUSED      = 2;
-
-   logic [31:0] mitcnt0_ns, mitcnt0, mitcnt1_ns, mitcnt1, mitb0, mitb1, mitb0_b, mitb1_b, mitcnt0_inc, mitcnt1_inc;
-   logic [2:0] mitctl0_ns, mitctl0;
-   logic [3:0] mitctl1_ns, mitctl1;
-   logic wr_mitcnt0_r, wr_mitcnt1_r, wr_mitb0_r, wr_mitb1_r, wr_mitctl0_r, wr_mitctl1_r;
-   logic mitcnt0_inc_ok, mitcnt1_inc_ok;
-   logic mitcnt0_inc_cout, mitcnt1_inc_cout;
- logic mit0_match_ns;
- logic mit1_match_ns;
- logic mitctl0_0_b_ns;
- logic mitctl0_0_b;
- logic mitctl1_0_b_ns;
- logic mitctl1_0_b;
-
-   assign mit0_match_ns = (mitcnt0[31:0] >= mitb0[31:0]);
-   assign mit1_match_ns = (mitcnt1[31:0] >= mitb1[31:0]);
-
-   assign dec_timer_t0_pulse = mit0_match_ns;
-   assign dec_timer_t1_pulse = mit1_match_ns;
-   // ----------------------------------------------------------------------
-   // MITCNT0 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT0       = 12'h7d2;
-
-   assign wr_mitcnt0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT0);
-
-   assign mitcnt0_inc_ok = mitctl0[MITCTL_ENABLE] & (~dec_pause_state | mitctl0[MITCTL_ENABLE_PAUSED]) & (~dec_tlu_pmu_fw_halted | mitctl0[MITCTL_ENABLE_HALTED]) & ~internal_dbg_halt_timers;
-
-   assign {mitcnt0_inc_cout, mitcnt0_inc[7:0]} = mitcnt0[7:0] + {7'b0, 1'b1};
-   assign mitcnt0_inc[31:8] = mitcnt0[31:8] + {23'b0, mitcnt0_inc_cout};
-
-   assign mitcnt0_ns[31:0]  = wr_mitcnt0_r ? dec_csr_wrdata_r[31:0] : mit0_match_ns ? 'b0 : mitcnt0_inc[31:0];
-
-   rvdffe #(24) mitcnt0_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | (mitcnt0_inc_ok & mitcnt0_inc_cout) | mit0_match_ns), .din(mitcnt0_ns[31:8]), .dout(mitcnt0[31:8]));
-   rvdffe #(8)  mitcnt0_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | mitcnt0_inc_ok | mit0_match_ns),                       .din(mitcnt0_ns[7:0]), .dout(mitcnt0[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MITCNT1 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT1       = 12'h7d5;
-
-   assign wr_mitcnt1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT1);
-
-   assign mitcnt1_inc_ok = mitctl1[MITCTL_ENABLE] &
-                           (~dec_pause_state | mitctl1[MITCTL_ENABLE_PAUSED]) &
-                           (~dec_tlu_pmu_fw_halted | mitctl1[MITCTL_ENABLE_HALTED]) &
-                           ~internal_dbg_halt_timers &
-                           (~mitctl1[3] | mit0_match_ns);
-
-   // only inc MITCNT1 if not cascaded with 0, or if 0 overflows
-   assign {mitcnt1_inc_cout, mitcnt1_inc[7:0]} = mitcnt1[7:0] + {7'b0, 1'b1};
-   assign mitcnt1_inc[31:8] = mitcnt1[31:8] + {23'b0, mitcnt1_inc_cout};
-
-   assign mitcnt1_ns[31:0]  = wr_mitcnt1_r ? dec_csr_wrdata_r[31:0] : mit1_match_ns ? 'b0 : mitcnt1_inc[31:0];
-
-   rvdffe #(24) mitcnt1_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | (mitcnt1_inc_ok & mitcnt1_inc_cout) | mit1_match_ns), .din(mitcnt1_ns[31:8]), .dout(mitcnt1[31:8]));
-   rvdffe #(8)  mitcnt1_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | mitcnt1_inc_ok | mit1_match_ns),                       .din(mitcnt1_ns[7:0]), .dout(mitcnt1[7:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MITB0 (RW)
-   // [31:0] : Internal Timer Bound 0
-
-   localparam MITB0         = 12'h7d3;
-
-   assign wr_mitb0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB0);
-
-   rvdffe #(32) mitb0_ff      (.*, .en(wr_mitb0_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb0_b[31:0]));
-   assign mitb0[31:0] = ~mitb0_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITB1 (RW)
-   // [31:0] : Internal Timer Bound 1
-
-   localparam MITB1         = 12'h7d6;
-
-   assign wr_mitb1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB1);
-
-   rvdffe #(32) mitb1_ff      (.*, .en(wr_mitb1_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb1_b[31:0]));
-   assign mitb1[31:0] = ~mitb1_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITCTL0 (RW) Internal Timer Ctl 0
-   // [31:3] : Reserved, reads 0x0
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL0       = 12'h7d4;
-
-   assign wr_mitctl0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL0);
-   assign mitctl0_ns[2:0] = wr_mitctl0_r ? {dec_csr_wrdata_r[2:0]} : {mitctl0[2:0]};
-
-   assign mitctl0_0_b_ns = ~mitctl0_ns[0];
-   rvdffs #(3) mitctl0_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl0_r), .din({mitctl0_ns[2:1], mitctl0_0_b_ns}), .dout({mitctl0[2:1], mitctl0_0_b}));
-   assign mitctl0[0] = ~mitctl0_0_b;
-
-   // ----------------------------------------------------------------------
-   // MITCTL1 (RW) Internal Timer Ctl 1
-   // [31:4] : Reserved, reads 0x0
-   // [3]    : Cascade
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL1       = 12'h7d7;
-
-   assign wr_mitctl1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL1);
-   assign mitctl1_ns[3:0] = wr_mitctl1_r ? {dec_csr_wrdata_r[3:0]} : {mitctl1[3:0]};
-
-   assign mitctl1_0_b_ns = ~mitctl1_ns[0];
-   rvdffs #(4) mitctl1_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl1_r), .din({mitctl1_ns[3:1], mitctl1_0_b_ns}), .dout({mitctl1[3:1], mitctl1_0_b}));
-   assign mitctl1[0] = ~mitctl1_0_b;
-   assign dec_timer_read_d = csr_mitcnt1 | csr_mitcnt0 | csr_mitb1 | csr_mitb0 | csr_mitctl0 | csr_mitctl1;
-   assign dec_timer_rddata_d[31:0] = ( ({32{csr_mitcnt0}}      & mitcnt0[31:0]) |
-                                       ({32{csr_mitcnt1}}      & mitcnt1[31:0]) |
-                                       ({32{csr_mitb0}}        & mitb0[31:0]) |
-                                       ({32{csr_mitb1}}        & mitb1[31:0]) |
-                                       ({32{csr_mitctl0}}      & {29'b0, mitctl0[2:0]}) |
-                                       ({32{csr_mitctl1}}      & {28'b0, mitctl1[3:0]})
-                                       );
-
-
-endmodule // dec_timer_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DEC Trigger Logic
-// Comments:
-//
-//********************************************************************************
-module eb1_dec_trigger
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,           // Packet from tlu. 'select':0-pc,1-Opcode  'Execute' needs to be set for dec triggers to fire. 'match'-1 do mask, 0: full match
-   input logic [31:1]  dec_i0_pc_d,                          // i0 pc
-
-   output logic [3:0] dec_i0_trigger_match_d                 // Trigger match
-);
-
-   logic [3:0][31:0]  dec_i0_match_data;
-   logic [3:0]        dec_i0_trigger_data_match;
-
-   for (genvar i=0; i<4; i++) begin
-      assign dec_i0_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select & trigger_pkt_any[i].execute}} & {dec_i0_pc_d[31:1], trigger_pkt_any[i].tdata2[0]});      // select=0; do a PC match
-
-      rvmaskandmatch trigger_i0_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(dec_i0_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(dec_i0_trigger_data_match[i]));
-
-      assign dec_i0_trigger_match_d[i] = trigger_pkt_any[i].execute & trigger_pkt_any[i].m & dec_i0_trigger_data_match[i];
-   end
-
-endmodule // eb1_dec_trigger
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic          clk,                                           // Top level clock
-   input logic          rst_l,                                         // Reset
-   input logic          scan_mode,                                     // Scan control
-
-   input logic  [1:0]   dec_data_en,                                   // Clock enable {x,r}, one cycle pulse
-   input logic  [1:0]   dec_ctl_en,                                    // Clock enable {x,r}, two cycle pulse
-   input logic  [31:0]  dbg_cmd_wrdata,                                // Debug data   to primary I0 RS1
-   input eb1_alu_pkt_t i0_ap,                                         // DEC alu {valid,predecodes}
-
-   input logic          dec_debug_wdata_rs1_d,                         // Debug select to primary I0 RS1
-
-   input eb1_predict_pkt_t dec_i0_predict_p_d,                        // DEC branch predict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   input logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   input logic  [31:0]  lsu_result_m,                                  // Load result M-stage
-   input logic  [31:0]  lsu_nonblock_load_data,                        // nonblock load data
-   input logic          dec_i0_rs1_en_d,                               // Qualify GPR RS1 data
-   input logic          dec_i0_rs2_en_d,                               // Qualify GPR RS2 data
-   input logic  [31:0]  gpr_i0_rs1_d,                                  // DEC data gpr
-   input logic  [31:0]  gpr_i0_rs2_d,                                  // DEC data gpr
-   input logic  [31:0]  dec_i0_immed_d,                                // DEC data immediate
-   input logic  [31:0]  dec_i0_result_r,                               // DEC result in R-stage
-   input logic  [12:1]  dec_i0_br_immed_d,                             // Branch immediate
-   input logic          dec_i0_alu_decode_d,                           // Valid to X-stage ALU
-   input logic          dec_i0_branch_d,                               // Branch in D-stage
-   input logic          dec_i0_select_pc_d,                            // PC select to RS1
-   input logic  [31:1]  dec_i0_pc_d,                                   // Instruction PC
-   input logic  [3:0]   dec_i0_rs1_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic  [3:0]   dec_i0_rs2_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic          dec_csr_ren_d,                                 // CSR read select
-   input logic  [31:0]  dec_csr_rddata_d,                              // CSR read data
-
-   input logic          dec_qual_lsu_d,                                // LSU instruction at D.  Use to quiet LSU operands
-   input eb1_mul_pkt_t mul_p,                                         // DEC {valid, operand signs, low, operand bypass}
-   input eb1_div_pkt_t div_p,                                         // DEC {valid, unsigned, rem}
-   input logic          dec_div_cancel,                                // Cancel the divide operation
-
-   input logic  [31:1]  pred_correct_npc_x,                            // DEC NPC for correctly predicted branch
-
-   input logic          dec_tlu_flush_lower_r,                         // Flush divide and secondary ALUs
-   input logic  [31:1]  dec_tlu_flush_path_r,                          // Redirect target
-
-
-   input logic         dec_extint_stall,                               // External stall mux select
-   input logic [31:2]  dec_tlu_meihap,                                 // External stall mux data
-
-
-   output logic [31:0]  exu_lsu_rs1_d,                                 // LSU operand
-   output logic [31:0]  exu_lsu_rs2_d,                                 // LSU operand
-
-   output logic         exu_flush_final,                               // Pipe is being flushed this cycle
-   output logic [31:1]  exu_flush_path_final,                          // Target for the oldest flush source
-
-   output logic [31:0]  exu_i0_result_x,                               // Primary ALU result to DEC
-   output logic [31:1]  exu_i0_pc_x,                                   // Primary PC  result to DEC
-   output logic [31:0]  exu_csr_rs1_x,                                 // RS1 source for a CSR instruction
-
-   output logic [31:1]  exu_npc_r,                                     // Divide NPC
-   output logic [1:0]   exu_i0_br_hist_r,                              // to DEC  I0 branch history
-   output logic         exu_i0_br_error_r,                             // to DEC  I0 branch error
-   output logic         exu_i0_br_start_error_r,                       // to DEC  I0 branch start error
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r,     // to DEC  I0 branch index
-   output logic         exu_i0_br_valid_r,                             // to DEC  I0 branch valid
-   output logic         exu_i0_br_mp_r,                                // to DEC  I0 branch mispredict
-   output logic         exu_i0_br_middle_r,                            // to DEC  I0 branch middle
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r,               // to DEC  I0 branch fghr
-   output logic         exu_i0_br_way_r,                               // to DEC  I0 branch way
-
-   output eb1_predict_pkt_t exu_mp_pkt,                               // Mispredict branch packet
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr,                    // Mispredict global history
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   output logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-
-   output logic         exu_pmu_i0_br_misp,                            // to PMU - I0 E4 branch mispredict
-   output logic         exu_pmu_i0_br_ataken,                          // to PMU - I0 E4 taken
-   output logic         exu_pmu_i0_pc4,                                // to PMU - I0 E4 PC
-
-
-   output logic [31:0]  exu_div_result,                                // Divide result
-   output logic         exu_div_wren                                   // Divide write enable to GPR
-  );
-
-
-
-
-   logic [31:0]                i0_rs1_bypass_data_d;
-   logic [31:0]                i0_rs2_bypass_data_d;
-   logic                       i0_rs1_bypass_en_d;
-   logic                       i0_rs2_bypass_en_d;
-   logic [31:0]                i0_rs1_d,  i0_rs2_d;
-   logic [31:0]                muldiv_rs1_d;
-   logic [31:1]                pred_correct_npc_r;
-   logic                       i0_pred_correct_upper_r;
-   logic [31:1]                i0_flush_path_upper_r;
-   logic                       x_data_en, x_data_en_q1, x_data_en_q2, r_data_en, r_data_en_q2;
-   logic                       x_ctl_en,  r_ctl_en;
-
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_d_ns, ghr_d;
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_x_ns, ghr_x;
-   logic                       i0_taken_d;
-   logic                       i0_taken_x;
-   logic                       i0_valid_d;
-   logic                       i0_valid_x;
-   logic [pt.BHT_GHR_SIZE-1:0] after_flush_eghr;
-
-   eb1_predict_pkt_t          final_predict_mp;
-   eb1_predict_pkt_t          i0_predict_newp_d;
-
-   logic                       flush_in_d;
-   logic [31:0]                alu_result_x;
-
-   logic                       mul_valid_x;
-   logic [31:0]                mul_result_x;
-
-   eb1_predict_pkt_t          i0_pp_r;
-
-   logic                       i0_flush_upper_d;
-   logic [31:1]                i0_flush_path_d;
-   eb1_predict_pkt_t          i0_predict_p_d;
-   logic                       i0_pred_correct_upper_d;
-
-   logic                       i0_flush_upper_x;
-   logic [31:1]                i0_flush_path_x;
-   eb1_predict_pkt_t          i0_predict_p_x;
-   logic                       i0_pred_correct_upper_x;
-   logic                       i0_branch_x;
-
-   localparam PREDPIPESIZE = pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1+pt.BHT_GHR_SIZE+pt.BTB_BTAG_SIZE;
-   logic [PREDPIPESIZE-1:0]    predpipe_d, predpipe_x, predpipe_r, final_predpipe_mp;
-
-
-
-
-   rvdffpcie #(31)                       i_flush_path_x_ff    (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_flush_path_d[31:1]         ),  .dout( i0_flush_path_x[31:1]      ) );
-   rvdffe #(32)                          i_csr_rs1_x_ff       (.*, .clk(clk),        .en ( x_data_en_q1  ),  .din ( i0_rs1_d[31:0]                ),  .dout( exu_csr_rs1_x[31:0]        ) );
-   rvdffppe #($bits(eb1_predict_pkt_t)) i_predictpacket_x_ff (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_predict_p_d                ),  .dout( i0_predict_p_x             ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_x_ff      (.*, .clk(clk),        .en ( x_data_en_q2  ),  .din ( predpipe_d                    ),  .dout( predpipe_x                 ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_r_ff      (.*, .clk(clk),        .en ( r_data_en_q2  ),  .din ( predpipe_x                    ),  .dout( predpipe_r                 ) );
-
-   rvdffe #(4+pt.BHT_GHR_SIZE)          i_x_ff               (.*, .clk(clk),        .en ( x_ctl_en      ),  .din ({i0_valid_d,i0_taken_d,i0_flush_upper_d,i0_pred_correct_upper_d,ghr_x_ns[pt.BHT_GHR_SIZE-1:0]} ),
-                                                                                                            .dout({i0_valid_x,i0_taken_x,i0_flush_upper_x,i0_pred_correct_upper_x,ghr_x[pt.BHT_GHR_SIZE-1:0]}    ) );
-
-   rvdffppe #($bits(eb1_predict_pkt_t)+1) i_r_ff0         (.*, .clk(clk),        .en ( r_ctl_en      ),  .din ({i0_pred_correct_upper_x, i0_predict_p_x}),
-                                                                                                          .dout({i0_pred_correct_upper_r, i0_pp_r       }) );
-
-   rvdffpcie #(31)                      i_flush_r_ff         (.*, .clk(clk),        .en ( r_data_en     ),  .din ( i0_flush_path_x[31:1]         ),  .dout( i0_flush_path_upper_r[31:1]) );
-   rvdffpcie #(31)                      i_npc_r_ff           (.*, .clk(clk),        .en ( r_data_en     ),  .din ( pred_correct_npc_x[31:1]      ),  .dout( pred_correct_npc_r[31:1]   ) );
-
-   rvdffie #(pt.BHT_GHR_SIZE+2,1)       i_misc_ff            (.*, .clk(clk),                                .din ({ghr_d_ns[pt.BHT_GHR_SIZE-1:0], mul_p.valid, dec_i0_branch_d}),
-                                                                                                            .dout({ghr_d[pt.BHT_GHR_SIZE-1:0]   , mul_valid_x, i0_branch_x}) );
-
-
-
-
-
-   assign predpipe_d[PREDPIPESIZE-1:0]
-                                   = {i0_predict_fghr_d, i0_predict_index_d, i0_predict_btag_d};
-
-
-   assign i0_rs1_bypass_en_d       = dec_i0_rs1_bypass_en_d[0] | dec_i0_rs1_bypass_en_d[1] | dec_i0_rs1_bypass_en_d[2] | dec_i0_rs1_bypass_en_d[3];
-   assign i0_rs2_bypass_en_d       = dec_i0_rs2_bypass_en_d[0] | dec_i0_rs2_bypass_en_d[1] | dec_i0_rs2_bypass_en_d[2] | dec_i0_rs2_bypass_en_d[3];
-
-   assign i0_rs1_bypass_data_d[31:0]=({32{dec_i0_rs1_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-   assign i0_rs2_bypass_data_d[31:0]=({32{dec_i0_rs2_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-
-   assign i0_rs1_d[31:0]           = ({32{ i0_rs1_bypass_en_d                                           }}             & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{~i0_rs1_bypass_en_d &  dec_i0_select_pc_d                     }}             & {dec_i0_pc_d[31:1],1'b0}  ) |    // for jal's
-                                     ({32{~i0_rs1_bypass_en_d &  dec_debug_wdata_rs1_d                  }}             & dbg_cmd_wrdata[31:0]      ) |
-                                     ({32{~i0_rs1_bypass_en_d & ~dec_debug_wdata_rs1_d & dec_i0_rs1_en_d}}             & gpr_i0_rs1_d[31:0]        );
-
-   assign i0_rs2_d[31:0]           = ({32{~i0_rs2_bypass_en_d & dec_i0_rs2_en_d}}                                      & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{~i0_rs2_bypass_en_d                  }}                                      & dec_i0_immed_d[31:0]      ) |
-                                     ({32{ i0_rs2_bypass_en_d                  }}                                      & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign exu_lsu_rs1_d[31:0]      = ({32{~i0_rs1_bypass_en_d & ~dec_extint_stall & dec_i0_rs1_en_d & dec_qual_lsu_d}} & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{                       dec_extint_stall                   & dec_qual_lsu_d}} & {dec_tlu_meihap[31:2],2'b0});
-
-   assign exu_lsu_rs2_d[31:0]      = ({32{~i0_rs2_bypass_en_d & ~dec_extint_stall & dec_i0_rs2_en_d & dec_qual_lsu_d}} & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{ i0_rs2_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign muldiv_rs1_d[31:0]       = ({32{~i0_rs1_bypass_en_d & dec_i0_rs1_en_d}}                                      & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d                  }}                                      & i0_rs1_bypass_data_d[31:0]);
-
-
-   assign x_data_en                =  dec_data_en[1];
-   assign x_data_en_q1             =  dec_data_en[1] & dec_csr_ren_d;
-   assign x_data_en_q2             =  dec_data_en[1] & dec_i0_branch_d;
-   assign r_data_en                =  dec_data_en[0];
-   assign r_data_en_q2             =  dec_data_en[0] & i0_branch_x;
-   assign x_ctl_en                 =  dec_ctl_en[1];
-   assign r_ctl_en                 =  dec_ctl_en[0];
-
-
-
-
-   eb1_exu_alu_ctl #(.pt(pt)) i_alu  (.*,
-                          .enable            ( x_data_en                   ),   // I
-                          .pp_in             ( i0_predict_newp_d           ),   // I
-                          .valid_in          ( dec_i0_alu_decode_d         ),   // I
-                          .flush_upper_x     ( i0_flush_upper_x            ),   // I
-                          .flush_lower_r     ( dec_tlu_flush_lower_r       ),   // I
-                          .a_in              ( i0_rs1_d[31:0]              ),   // I
-                          .b_in              ( i0_rs2_d[31:0]              ),   // I
-                          .pc_in             ( dec_i0_pc_d[31:1]           ),   // I
-                          .brimm_in          ( dec_i0_br_immed_d[12:1]     ),   // I
-                          .ap                ( i0_ap                       ),   // I
-                          .csr_ren_in        ( dec_csr_ren_d               ),   // I
-                          .csr_rddata_in     ( dec_csr_rddata_d[31:0]      ),   // I
-                          .result_ff         ( alu_result_x[31:0]          ),   // O
-                          .flush_upper_out   ( i0_flush_upper_d            ),   // O
-                          .flush_final_out   ( exu_flush_final             ),   // O
-                          .flush_path_out    ( i0_flush_path_d[31:1]       ),   // O
-                          .predict_p_out     ( i0_predict_p_d              ),   // O
-                          .pred_correct_out  ( i0_pred_correct_upper_d     ),   // O
-                          .pc_ff             ( exu_i0_pc_x[31:1]           ));  // O
-
-
-
-   eb1_exu_mul_ctl #(.pt(pt)) i_mul   (.*,
-                          .mul_p             ( mul_p              & {$bits(eb1_mul_pkt_t){mul_p.valid}} ),   // I
-                          .rs1_in            ( muldiv_rs1_d[31:0] & {32{mul_p.valid}}                    ),   // I
-                          .rs2_in            ( i0_rs2_d[31:0]     & {32{mul_p.valid}}                    ),   // I
-                          .result_x          ( mul_result_x[31:0]                                        ));  // O
-
-
-
-   eb1_exu_div_ctl #(.pt(pt)) i_div   (.*,
-                          .cancel            ( dec_div_cancel              ),   // I
-                          .dp                ( div_p                       ),   // I
-                          .dividend          ( muldiv_rs1_d[31:0]          ),   // I
-                          .divisor           ( i0_rs2_d[31:0]              ),   // I
-                          .finish_dly        ( exu_div_wren                ),   // O
-                          .out               ( exu_div_result[31:0]        ));  // O
-
-
-
-   assign exu_i0_result_x[31:0]    =  (mul_valid_x)  ?  mul_result_x[31:0]  :  alu_result_x[31:0];
-
-
-
-
-   always_comb begin
-      i0_predict_newp_d            =  dec_i0_predict_p_d;
-      i0_predict_newp_d.boffset    =  dec_i0_pc_d[1];  // from the start of inst
-   end
-
-
-   assign exu_pmu_i0_br_misp       =  i0_pp_r.misp;
-   assign exu_pmu_i0_br_ataken     =  i0_pp_r.ataken;
-   assign exu_pmu_i0_pc4           =  i0_pp_r.pc4;
-
-
-   assign i0_valid_d               =  i0_predict_p_d.valid  & dec_i0_alu_decode_d & ~dec_tlu_flush_lower_r;
-   assign i0_taken_d               = (i0_predict_p_d.ataken & dec_i0_alu_decode_d);
-
-if(pt.BTB_ENABLE==1) begin
-   // maintain GHR at D
-   assign ghr_d_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r &  i0_valid_d}} & {ghr_d[pt.BHT_GHR_SIZE-2:0], i0_taken_d}) |
-                                     ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r & ~i0_valid_d}} &  ghr_d[pt.BHT_GHR_SIZE-1:0]             ) |
-                                     ({pt.BHT_GHR_SIZE{ dec_tlu_flush_lower_r              }} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             );
-
-   // maintain GHR at X
-   assign ghr_x_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{ i0_valid_x}} & {ghr_x[pt.BHT_GHR_SIZE-2:0], i0_taken_x}) |
-                                     ({pt.BHT_GHR_SIZE{~i0_valid_x}} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             ) ;
-
-
-   assign exu_i0_br_valid_r                                 =  i0_pp_r.valid;
-   assign exu_i0_br_mp_r                                    =  i0_pp_r.misp;
-   assign exu_i0_br_way_r                                   =  i0_pp_r.way;
-   assign exu_i0_br_hist_r[1:0]                             =  {2{i0_pp_r.valid}} & i0_pp_r.hist[1:0];
-   assign exu_i0_br_error_r                                 =  i0_pp_r.br_error;
-   assign exu_i0_br_middle_r                                =  i0_pp_r.pc4 ^ i0_pp_r.boffset;
-   assign exu_i0_br_start_error_r                           =  i0_pp_r.br_start_error;
-
-   assign {exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0],
-           exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]}=  predpipe_r[PREDPIPESIZE-1:pt.BTB_BTAG_SIZE];
-
-
-   assign final_predict_mp                                  = (i0_flush_upper_x)  ?  i0_predict_p_x  :  '0;
-
-   assign final_predpipe_mp[PREDPIPESIZE-1:0]               = (i0_flush_upper_x)  ?  predpipe_x      :  '0;
-
-   assign after_flush_eghr[pt.BHT_GHR_SIZE-1:0]             = (i0_flush_upper_x & ~dec_tlu_flush_lower_r)  ?  ghr_d[pt.BHT_GHR_SIZE-1:0]  :  ghr_x[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign exu_mp_pkt.valid                                  =  final_predict_mp.valid;
-   assign exu_mp_pkt.way                                    =  final_predict_mp.way;
-   assign exu_mp_pkt.misp                                   =  final_predict_mp.misp;
-   assign exu_mp_pkt.pcall                                  =  final_predict_mp.pcall;
-   assign exu_mp_pkt.pja                                    =  final_predict_mp.pja;
-   assign exu_mp_pkt.pret                                   =  final_predict_mp.pret;
-   assign exu_mp_pkt.ataken                                 =  final_predict_mp.ataken;
-   assign exu_mp_pkt.boffset                                =  final_predict_mp.boffset;
-   assign exu_mp_pkt.pc4                                    =  final_predict_mp.pc4;
-   assign exu_mp_pkt.hist[1:0]                              =  final_predict_mp.hist[1:0];
-   assign exu_mp_pkt.toffset[11:0]                          =  final_predict_mp.toffset[11:0];
-
-   assign exu_mp_fghr[pt.BHT_GHR_SIZE-1:0]                  =  after_flush_eghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign {exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],
-           exu_mp_btag[pt.BTB_BTAG_SIZE-1:0]}               =  final_predpipe_mp[PREDPIPESIZE-pt.BHT_GHR_SIZE-1:0];
-
-   assign exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]                  =  final_predpipe_mp[PREDPIPESIZE-1:pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+pt.BTB_BTAG_SIZE+1]; // mp ghr for bht write
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign ghr_d_ns = '0;
-   assign ghr_x_ns = '0;
-   assign exu_mp_pkt = '0;
-   assign exu_mp_eghr = '0;
-   assign exu_mp_fghr = '0;
-   assign exu_mp_index = '0;
-   assign exu_mp_btag = '0;
-   assign exu_i0_br_hist_r = '0;
-   assign exu_i0_br_error_r = '0;
-   assign exu_i0_br_start_error_r = '0;
-   assign exu_i0_br_index_r = '0;
-   assign exu_i0_br_valid_r = '0;
-   assign exu_i0_br_mp_r = '0;
-   assign exu_i0_br_middle_r = '0;
-   assign exu_i0_br_fghr_r = '0;
-   assign exu_i0_br_way_r = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   assign exu_flush_path_final[31:1] = ( {31{ dec_tlu_flush_lower_r                   }} & dec_tlu_flush_path_r[31:1] ) |
-                                       ( {31{~dec_tlu_flush_lower_r & i0_flush_upper_d}} & i0_flush_path_d[31:1]      );
-
-   assign exu_npc_r[31:1]            = (i0_pred_correct_upper_r)  ?  pred_correct_npc_r[31:1]    :  i0_flush_path_upper_r[31:1];
-
-
-endmodule // eb1_exu
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dma_ctrl 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic         clk,
-   input logic         free_clk,
-   input logic         rst_l,
-   input logic         dma_bus_clk_en, // slave bus clock enable
-   input logic         clk_override,
-   input logic         scan_mode,
-
-   // Debug signals
-   input logic [31:0]  dbg_cmd_addr,
-   input logic [31:0]  dbg_cmd_wrdata,
-   input logic         dbg_cmd_valid,
-   input logic         dbg_cmd_write, // 1: write command, 0: read_command
-   input logic [1:0]   dbg_cmd_type, // 0:gpr 1:csr 2: memory
-   input logic [1:0]   dbg_cmd_size, // size of the abstract mem access debug command
-
-   input  logic        dbg_dma_bubble,   // Debug needs a bubble to send a valid
-   output logic        dma_dbg_ready,    // DMA is ready to accept debug request
-
-   output logic        dma_dbg_cmd_done,
-   output logic        dma_dbg_cmd_fail,
-   output logic [31:0] dma_dbg_rddata,
-
-   // Core side signals
-   output logic        dma_dccm_req,  // DMA dccm request (only one of dccm/iccm will be set)
-   output logic        dma_iccm_req,  // DMA iccm request
-   output logic [2:0]  dma_mem_tag,   // DMA Buffer entry number
-   output logic [31:0] dma_mem_addr,  // DMA request address
-   output logic [2:0]  dma_mem_sz,    // DMA request size
-   output logic        dma_mem_write, // DMA write to dccm/iccm
-   output logic [63:0] dma_mem_wdata, // DMA write data
-
-   input logic         dccm_dma_rvalid,    // dccm data valid for DMA read
-   input logic         dccm_dma_ecc_error, // ECC error on DMA read
-   input logic [2:0]   dccm_dma_rtag,      // Tag of the DMA req
-   input logic [63:0]  dccm_dma_rdata,     // dccm data for DMA read
-   input logic         iccm_dma_rvalid,    // iccm data valid for DMA read
-   input logic         iccm_dma_ecc_error, // ECC error on DMA read
-   input logic [2:0]   iccm_dma_rtag,      // Tag of the DMA req
-   input logic [63:0]  iccm_dma_rdata,     // iccm data for DMA read
-
-   output logic        dma_active,         // DMA is busy
-   output logic        dma_dccm_stall_any, // stall dccm pipe (bubble) so that DMA can proceed
-   output logic        dma_iccm_stall_any, // stall iccm pipe (bubble) so that DMA can proceed
-   input logic         dccm_ready, // dccm ready to accept DMA request
-   input logic         iccm_ready, // iccm ready to accept DMA request
-   input logic [2:0]   dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:15]
-
-   // PMU signals
-   output logic        dma_pmu_dccm_read,
-   output logic        dma_pmu_dccm_write,
-   output logic        dma_pmu_any_read,
-   output logic        dma_pmu_any_write,
-
-   // AXI Write Channels
-   input  logic                        dma_axi_awvalid,
-   output logic                        dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]   dma_axi_awid,
-   input  logic [31:0]                 dma_axi_awaddr,
-   input  logic [2:0]                  dma_axi_awsize,
-
-
-   input  logic                        dma_axi_wvalid,
-   output logic                        dma_axi_wready,
-   input  logic [63:0]                 dma_axi_wdata,
-   input  logic [7:0]                  dma_axi_wstrb,
-
-   output logic                        dma_axi_bvalid,
-   input  logic                        dma_axi_bready,
-   output logic [1:0]                  dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]   dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                        dma_axi_arvalid,
-   output logic                        dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]   dma_axi_arid,
-   input  logic [31:0]                 dma_axi_araddr,
-   input  logic [2:0]                  dma_axi_arsize,
-
-   output logic                        dma_axi_rvalid,
-   input  logic                        dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]   dma_axi_rid,
-   output logic [63:0]                 dma_axi_rdata,
-   output logic [1:0]                  dma_axi_rresp,
-   output logic                        dma_axi_rlast
-);
-
-
-   localparam DEPTH = pt.DMA_BUF_DEPTH;
-   localparam DEPTH_PTR = $clog2(DEPTH);
-   localparam NACK_COUNT = 7;
-
-   logic [DEPTH-1:0]        fifo_valid;
-   logic [DEPTH-1:0][1:0]   fifo_error;
-   logic [DEPTH-1:0]        fifo_error_bus;
-   logic [DEPTH-1:0]        fifo_rpend;
-   logic [DEPTH-1:0]        fifo_done;      // DMA trxn is done in core
-   logic [DEPTH-1:0]        fifo_done_bus;  // DMA trxn is done in core but synced to bus clock
-   logic [DEPTH-1:0][31:0]  fifo_addr;
-   logic [DEPTH-1:0][2:0]   fifo_sz;
-   logic [DEPTH-1:0][7:0]   fifo_byteen;
-   logic [DEPTH-1:0]        fifo_write;
-   logic [DEPTH-1:0]        fifo_posted_write;
-   logic [DEPTH-1:0]        fifo_dbg;
-   logic [DEPTH-1:0][63:0]  fifo_data;
-   logic [DEPTH-1:0][pt.DMA_BUS_TAG-1:0]  fifo_tag;
-   logic [DEPTH-1:0][pt.DMA_BUS_ID-1:0]   fifo_mid;
-   logic [DEPTH-1:0][pt.DMA_BUS_PRTY-1:0] fifo_prty;
-
-   logic [DEPTH-1:0]        fifo_cmd_en;
-   logic [DEPTH-1:0]        fifo_data_en;
-   logic [DEPTH-1:0]        fifo_pend_en;
-   logic [DEPTH-1:0]        fifo_done_en;
-   logic [DEPTH-1:0]        fifo_done_bus_en;
-   logic [DEPTH-1:0]        fifo_error_en;
-   logic [DEPTH-1:0]        fifo_error_bus_en;
-   logic [DEPTH-1:0]        fifo_reset;
-   logic [DEPTH-1:0][1:0]   fifo_error_in;
-   logic [DEPTH-1:0][63:0]  fifo_data_in;
-
-   logic                    fifo_write_in;
-   logic                    fifo_posted_write_in;
-   logic                    fifo_dbg_in;
-   logic [31:0]             fifo_addr_in;
-   logic [2:0]              fifo_sz_in;
-   logic [7:0]              fifo_byteen_in;
-
-   logic [DEPTH_PTR-1:0]    RspPtr, NxtRspPtr;
-   logic [DEPTH_PTR-1:0]    WrPtr, NxtWrPtr;
-   logic [DEPTH_PTR-1:0]    RdPtr, NxtRdPtr;
-   logic                    WrPtrEn, RdPtrEn, RspPtrEn;
-
-   logic [1:0]              dma_dbg_sz;
-   logic [1:0]              dma_dbg_addr;
-   logic [31:0]             dma_dbg_mem_rddata;
-   logic [31:0]             dma_dbg_mem_wrdata;
-   logic                    dma_dbg_cmd_error;
-   logic                    dma_dbg_cmd_done_q;
-
-   logic                    fifo_full, fifo_full_spec, fifo_empty;
-   logic                    dma_address_error, dma_alignment_error;
-   logic [3:0]              num_fifo_vld;
-   logic                    dma_mem_req;
-   logic [31:0]             dma_mem_addr_int;
-   logic [2:0]              dma_mem_sz_int;
-   logic [7:0]              dma_mem_byteen;
-   logic                    dma_mem_addr_in_dccm;
-   logic                    dma_mem_addr_in_iccm;
-   logic                    dma_mem_addr_in_pic;
-   logic                    dma_mem_addr_in_pic_region_nc;
-   logic                    dma_mem_addr_in_dccm_region_nc;
-   logic                    dma_mem_addr_in_iccm_region_nc;
-
-   logic [2:0]              dma_nack_count, dma_nack_count_d, dma_nack_count_csr;
-
-   logic                    dma_buffer_c1_clken;
-   logic                    dma_free_clken;
-   logic                    dma_buffer_c1_clk;
-   logic                    dma_free_clk;
-   logic                    dma_bus_clk;
-
-   logic                    bus_rsp_valid, bus_rsp_sent;
-   logic                    bus_cmd_valid, bus_cmd_sent;
-   logic                    bus_cmd_write, bus_cmd_posted_write;
-   logic [7:0]              bus_cmd_byteen;
-   logic [2:0]              bus_cmd_sz;
-   logic [31:0]             bus_cmd_addr;
-   logic [63:0]             bus_cmd_wdata;
-   logic [pt.DMA_BUS_TAG-1:0]  bus_cmd_tag;
-   logic [pt.DMA_BUS_ID-1:0]   bus_cmd_mid;
-   logic [pt.DMA_BUS_PRTY-1:0] bus_cmd_prty;
-   logic                    bus_posted_write_done;
-
-   logic                    fifo_full_spec_bus;
-   logic                    dbg_dma_bubble_bus;
-   logic                    stall_dma_in;
-   logic                    dma_fifo_ready;
-
-   logic                       wrbuf_en, wrbuf_data_en;
-   logic                       wrbuf_cmd_sent, wrbuf_rst, wrbuf_data_rst;
-   logic                       wrbuf_vld, wrbuf_data_vld;
-   logic [pt.DMA_BUS_TAG-1:0]  wrbuf_tag;
-   logic [2:0]                 wrbuf_sz;
-   logic [31:0]                wrbuf_addr;
-   logic [63:0]                wrbuf_data;
-   logic [7:0]                 wrbuf_byteen;
-
-   logic                       rdbuf_en;
-   logic                       rdbuf_cmd_sent, rdbuf_rst;
-   logic                       rdbuf_vld;
-   logic [pt.DMA_BUS_TAG-1:0]  rdbuf_tag;
-   logic [2:0]                 rdbuf_sz;
-   logic [31:0]                rdbuf_addr;
-
-   logic                       axi_mstr_prty_in, axi_mstr_prty_en;
-   logic                       axi_mstr_priority;
-   logic                       axi_mstr_sel;
-
-   logic                       axi_rsp_valid, axi_rsp_sent;
-   logic                       axi_rsp_write;
-   logic [pt.DMA_BUS_TAG-1:0]  axi_rsp_tag;
-   logic [1:0]                 axi_rsp_error;
-   logic [63:0]                axi_rsp_rdata;
-
-   //------------------------LOGIC STARTS HERE---------------------------------
-
-   // FIFO inputs
-   assign fifo_addr_in[31:0]    = dbg_cmd_valid ? dbg_cmd_addr[31:0] : bus_cmd_addr[31:0];
-   assign fifo_byteen_in[7:0]   = {8{~dbg_cmd_valid}} & bus_cmd_byteen[7:0];    // Byte enable is used only for bus requests
-   assign fifo_sz_in[2:0]       = dbg_cmd_valid ? {1'b0,dbg_cmd_size[1:0]} : bus_cmd_sz[2:0];
-   assign fifo_write_in         = dbg_cmd_valid ? dbg_cmd_write : bus_cmd_write;
-   assign fifo_posted_write_in  = ~dbg_cmd_valid & bus_cmd_posted_write;
-   assign fifo_dbg_in           = dbg_cmd_valid;
-
-   for (genvar i=0 ;i<DEPTH; i++) begin: GenFifo
-      assign fifo_cmd_en[i]   = ((bus_cmd_sent & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1])) & (i == WrPtr[DEPTH_PTR-1:0]);
-      assign fifo_data_en[i] = (((bus_cmd_sent & fifo_write_in & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1] & dbg_cmd_write))  & (i == WrPtr[DEPTH_PTR-1:0])) |
-                               ((dma_address_error | dma_alignment_error) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                               (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                               (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_pend_en[i] = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write & (i == RdPtr[DEPTH_PTR-1:0]);
-      assign fifo_error_en[i] = ((dma_address_error | dma_alignment_error | dma_dbg_cmd_error) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                                ((dccm_dma_rvalid & dccm_dma_ecc_error) & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                                ((iccm_dma_rvalid & iccm_dma_ecc_error) & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_error_bus_en[i] = (((|fifo_error_in[i][1:0]) & fifo_error_en[i]) | (|fifo_error[i])) & dma_bus_clk_en;
-      assign fifo_done_en[i] = ((|fifo_error[i] | fifo_error_en[i] | ((dma_dccm_req | dma_iccm_req) & dma_mem_write)) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                               (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                               (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_done_bus_en[i] = (fifo_done_en[i] | fifo_done[i]) & dma_bus_clk_en;
-      assign fifo_reset[i] = (((bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en) | dma_dbg_cmd_done) & (i == RspPtr[DEPTH_PTR-1:0]);
-      assign fifo_error_in[i]   = (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) ? {1'b0,dccm_dma_ecc_error} : (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0]))) ? {1'b0,iccm_dma_ecc_error}  :
-                                                                                                                {(dma_address_error | dma_alignment_error | dma_dbg_cmd_error), dma_alignment_error};
-      assign fifo_data_in[i]   = (fifo_error_en[i] & (|fifo_error_in[i])) ? {32'b0,fifo_addr[i]} :
-                                                        ((dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0])))  ? dccm_dma_rdata[63:0] : (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0]))) ? iccm_dma_rdata[63:0] :
-                                                                                                                                                       (dbg_cmd_valid ? {2{dma_dbg_mem_wrdata[31:0]}} : bus_cmd_wdata[63:0]));
-
-      rvdffsc #(1) fifo_valid_dff (.din(1'b1), .dout(fifo_valid[i]), .en(fifo_cmd_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(2) fifo_error_dff (.din(fifo_error_in[i]), .dout(fifo_error[i]), .en(fifo_error_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_error_bus_dff (.din(1'b1), .dout(fifo_error_bus[i]), .en(fifo_error_bus_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_rpend_dff (.din(1'b1), .dout(fifo_rpend[i]), .en(fifo_pend_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_done_dff (.din(1'b1), .dout(fifo_done[i]), .en(fifo_done_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_done_bus_dff (.din(1'b1), .dout(fifo_done_bus[i]), .en(fifo_done_bus_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffe  #(32) fifo_addr_dff (.din(fifo_addr_in[31:0]), .dout(fifo_addr[i]), .en(fifo_cmd_en[i]), .*);
-      rvdffs  #(3) fifo_sz_dff (.din(fifo_sz_in[2:0]), .dout(fifo_sz[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(8) fifo_byteen_dff (.din(fifo_byteen_in[7:0]), .dout(fifo_byteen[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_write_dff (.din(fifo_write_in), .dout(fifo_write[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_posted_write_dff (.din(fifo_posted_write_in), .dout(fifo_posted_write[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_dbg_dff (.din(fifo_dbg_in), .dout(fifo_dbg[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffe  #(64) fifo_data_dff (.din(fifo_data_in[i]), .dout(fifo_data[i]), .en(fifo_data_en[i]), .*);
-      rvdffs  #(pt.DMA_BUS_TAG) fifo_tag_dff(.din(bus_cmd_tag[pt.DMA_BUS_TAG-1:0]), .dout(fifo_tag[i][pt.DMA_BUS_TAG-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(pt.DMA_BUS_ID) fifo_mid_dff(.din(bus_cmd_mid[pt.DMA_BUS_ID-1:0]), .dout(fifo_mid[i][pt.DMA_BUS_ID-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(pt.DMA_BUS_PRTY) fifo_prty_dff(.din(bus_cmd_prty[pt.DMA_BUS_PRTY-1:0]), .dout(fifo_prty[i][pt.DMA_BUS_PRTY-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-   end
-
-   // Pointer logic
-   assign NxtWrPtr[DEPTH_PTR-1:0] = (WrPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : WrPtr[DEPTH_PTR-1:0] + 1'b1;
-   assign NxtRdPtr[DEPTH_PTR-1:0] = (RdPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : RdPtr[DEPTH_PTR-1:0] + 1'b1;
-   assign NxtRspPtr[DEPTH_PTR-1:0] = (RspPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : RspPtr[DEPTH_PTR-1:0] + 1'b1;
-
-   assign WrPtrEn = |fifo_cmd_en[DEPTH-1:0];
-   assign RdPtrEn = dma_dccm_req | dma_iccm_req | (dma_address_error | dma_alignment_error | dma_dbg_cmd_error);
-   assign RspPtrEn = (dma_dbg_cmd_done | (bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en);
-
-   rvdffs #(DEPTH_PTR) WrPtr_dff(.din(NxtWrPtr[DEPTH_PTR-1:0]), .dout(WrPtr[DEPTH_PTR-1:0]), .en(WrPtrEn), .clk(dma_free_clk), .*);
-   rvdffs #(DEPTH_PTR) RdPtr_dff(.din(NxtRdPtr[DEPTH_PTR-1:0]), .dout(RdPtr[DEPTH_PTR-1:0]), .en(RdPtrEn), .clk(dma_free_clk), .*);
-   rvdffs #(DEPTH_PTR) RspPtr_dff(.din(NxtRspPtr[DEPTH_PTR-1:0]), .dout(RspPtr[DEPTH_PTR-1:0]), .en(RspPtrEn), .clk(dma_free_clk), .*);
-
-   // Miscellaneous signals
-   assign fifo_full = fifo_full_spec_bus;
-
-   always_comb begin
-      num_fifo_vld[3:0] = {3'b0,bus_cmd_sent} - {3'b0,bus_rsp_sent};
-      for (int i=0; i<DEPTH; i++) begin
-         num_fifo_vld[3:0] += {3'b0,fifo_valid[i]};
-      end
-   end
-   assign fifo_full_spec          = (num_fifo_vld[3:0] >= DEPTH);
-
-   assign dma_fifo_ready = ~(fifo_full | dbg_dma_bubble_bus);
-
-   // Error logic
-   assign dma_address_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & ~fifo_dbg[RdPtr] & (~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm));    // request not for ICCM or DCCM
-   assign dma_alignment_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & ~fifo_dbg[RdPtr] & ~dma_address_error &
-                                (((dma_mem_sz_int[2:0] == 3'h1) & dma_mem_addr_int[0])                                                       |    // HW size but unaligned
-                                 ((dma_mem_sz_int[2:0] == 3'h2) & (|dma_mem_addr_int[1:0]))                                                  |    // W size but unaligned
-                                 ((dma_mem_sz_int[2:0] == 3'h3) & (|dma_mem_addr_int[2:0]))                                                  |    // DW size but unaligned
-                                 (dma_mem_addr_in_iccm & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11)))                 |    // ICCM access not word size
-                                 (dma_mem_addr_in_dccm & dma_mem_write & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11))) |    // DCCM write not word size
-                                 (dma_mem_write & (dma_mem_sz_int[2:0] == 3'h2) & (dma_mem_byteen[dma_mem_addr_int[2:0]+:4] != 4'hf))        |    // Write byte enables not aligned for word store
-                                 (dma_mem_write & (dma_mem_sz_int[2:0] == 3'h3) & ~((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0) | (dma_mem_byteen[7:0] == 8'hff)))); // Write byte enables not aligned for dword store
-
-
-   //Dbg outputs
-   assign dma_dbg_ready    = fifo_empty & dbg_dma_bubble;
-   assign dma_dbg_cmd_done = (fifo_valid[RspPtr] & fifo_dbg[RspPtr] & fifo_done[RspPtr]);
-   assign dma_dbg_cmd_fail     = |fifo_error[RspPtr];
-
-   assign dma_dbg_sz[1:0]          = fifo_sz[RspPtr][1:0];
-   assign dma_dbg_addr[1:0]        = fifo_addr[RspPtr][1:0];
-   assign dma_dbg_mem_rddata[31:0] = fifo_addr[RspPtr][2] ? fifo_data[RspPtr][63:32] : fifo_data[RspPtr][31:0];
-   assign dma_dbg_rddata[31:0]     = ({32{(dma_dbg_sz[1:0] == 2'h0)}} & ((dma_dbg_mem_rddata[31:0] >> 8*dma_dbg_addr[1:0]) & 32'hff)) |
-                                     ({32{(dma_dbg_sz[1:0] == 2'h1)}} & ((dma_dbg_mem_rddata[31:0] >> 16*dma_dbg_addr[1]) & 32'hffff)) |
-                                     ({32{(dma_dbg_sz[1:0] == 2'h2)}} & dma_dbg_mem_rddata[31:0]);
-
-   assign dma_dbg_cmd_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & fifo_dbg[RdPtr] &
-                                 ((~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm | dma_mem_addr_in_pic)) |             // Address outside of ICCM/DCCM/PIC
-                                  ((dma_mem_addr_in_iccm | dma_mem_addr_in_pic) & (dma_mem_sz_int[1:0] != 2'b10)));    // Only word accesses allowed for ICCM/PIC
-
-   assign dma_dbg_mem_wrdata[31:0] = ({32{dbg_cmd_size[1:0] == 2'h0}} & {4{dbg_cmd_wrdata[7:0]}}) |
-                                     ({32{dbg_cmd_size[1:0] == 2'h1}} & {2{dbg_cmd_wrdata[15:0]}}) |
-                                     ({32{dbg_cmd_size[1:0] == 2'h2}} & dbg_cmd_wrdata[31:0]);
-
-   // Block the decode if fifo full
-   assign dma_dccm_stall_any = dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic) & (dma_nack_count >= dma_nack_count_csr);
-   assign dma_iccm_stall_any = dma_mem_req & dma_mem_addr_in_iccm & (dma_nack_count >= dma_nack_count_csr);
-
-   // Used to indicate ready to debug
-   assign fifo_empty     = ~((|(fifo_valid[DEPTH-1:0])) | bus_cmd_sent);
-
-   // Nack counter, stall the lsu pipe if 7 nacks
-   assign dma_nack_count_csr[2:0] = dec_tlu_dma_qos_prty[2:0];
-   assign dma_nack_count_d[2:0] = (dma_nack_count[2:0] >= dma_nack_count_csr[2:0]) ? ({3{~(dma_dccm_req | dma_iccm_req)}} & dma_nack_count[2:0]) :
-                                                                                    (dma_mem_req & ~(dma_dccm_req | dma_iccm_req)) ? (dma_nack_count[2:0] + 1'b1) : 3'b0;
-
-   rvdffs #(3) nack_count_dff(.din(dma_nack_count_d[2:0]), .dout(dma_nack_count[2:0]), .en(dma_mem_req), .clk(dma_free_clk), .*);
-
-   // Core outputs
-   assign dma_mem_req         = fifo_valid[RdPtr] & ~fifo_rpend[RdPtr] & ~fifo_done[RdPtr] & ~(dma_address_error | dma_alignment_error | dma_dbg_cmd_error);
-   assign dma_dccm_req        = dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic) & dccm_ready;
-   assign dma_iccm_req        = dma_mem_req & dma_mem_addr_in_iccm & iccm_ready;
-   assign dma_mem_tag[2:0]    = 3'(RdPtr);
-   assign dma_mem_addr_int[31:0] = fifo_addr[RdPtr];
-   assign dma_mem_sz_int[2:0] = fifo_sz[RdPtr];
-   assign dma_mem_addr[31:0]  = (dma_mem_write & ~fifo_dbg[RdPtr] & (dma_mem_byteen[7:0] == 8'hf0)) ? {dma_mem_addr_int[31:3],1'b1,dma_mem_addr_int[1:0]} : dma_mem_addr_int[31:0];
-   assign dma_mem_sz[2:0]     = (dma_mem_write & ~fifo_dbg[RdPtr] & ((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0))) ? 3'h2 : dma_mem_sz_int[2:0];
-   assign dma_mem_byteen[7:0] = fifo_byteen[RdPtr];
-   assign dma_mem_write       = fifo_write[RdPtr];
-   assign dma_mem_wdata[63:0] = fifo_data[RdPtr];
-
-   // PMU outputs
-   assign dma_pmu_dccm_read   = dma_dccm_req & ~dma_mem_write;
-   assign dma_pmu_dccm_write  = dma_dccm_req & dma_mem_write;
-   assign dma_pmu_any_read    = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write;
-   assign dma_pmu_any_write   = (dma_dccm_req | dma_iccm_req) & dma_mem_write;
-
-   // Address check  dccm
-   if (pt.DCCM_ENABLE) begin: Gen_dccm_enable
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-         .addr(dma_mem_addr_int[31:0]),
-         .in_range(dma_mem_addr_in_dccm),
-         .in_region(dma_mem_addr_in_dccm_region_nc)
-      );
-   end else begin: Gen_dccm_disable
-      assign dma_mem_addr_in_dccm = '0;
-      assign dma_mem_addr_in_dccm_region_nc = '0;
-   end // else: !if(pt.ICCM_ENABLE)
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE) begin: Gen_iccm_enable
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(dma_mem_addr_int[31:0]),
-         .in_range(dma_mem_addr_in_iccm),
-         .in_region(dma_mem_addr_in_iccm_region_nc)
-      );
-   end else begin: Gen_iccm_disable
-      assign dma_mem_addr_in_iccm = '0;
-      assign dma_mem_addr_in_iccm_region_nc = '0;
-   end // else: !if(pt.ICCM_ENABLE)
-
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(dma_mem_addr_int[31:0]),
-      .in_range(dma_mem_addr_in_pic),
-      .in_region(dma_mem_addr_in_pic_region_nc)
-    );
-
-   // Inputs
-   rvdff_fpga #(1) fifo_full_bus_ff     (.din(fifo_full_spec),   .dout(fifo_full_spec_bus), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(1) dbg_dma_bubble_ff    (.din(dbg_dma_bubble),   .dout(dbg_dma_bubble_bus), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdff      #(1) dma_dbg_cmd_doneff   (.din(dma_dbg_cmd_done), .dout(dma_dbg_cmd_done_q), .clk(free_clk), .*);
-
-   // Clock Gating logic
-   assign dma_buffer_c1_clken = (bus_cmd_valid & dma_bus_clk_en) | dbg_cmd_valid | clk_override;
-   assign dma_free_clken = (bus_cmd_valid | bus_rsp_valid | dbg_cmd_valid | dma_dbg_cmd_done | dma_dbg_cmd_done_q | (|fifo_valid[DEPTH-1:0]) | clk_override);
-
-   rvoclkhdr dma_buffer_c1cgc ( .en(dma_buffer_c1_clken), .l1clk(dma_buffer_c1_clk), .* );
-   rvoclkhdr dma_free_cgc (.en(dma_free_clken), .l1clk(dma_free_clk), .*);
-
-
-   rvclkhdr  dma_bus_cgc (.en(dma_bus_clk_en), .l1clk(dma_bus_clk), .*);
-
-   // Write channel buffer
-   assign wrbuf_en       = dma_axi_awvalid & dma_axi_awready;
-   assign wrbuf_data_en  = dma_axi_wvalid & dma_axi_wready;
-   assign wrbuf_cmd_sent = bus_cmd_sent & bus_cmd_write;
-   assign wrbuf_rst      = wrbuf_cmd_sent & ~wrbuf_en;
-   assign wrbuf_data_rst = wrbuf_cmd_sent & ~wrbuf_data_en;
-
-   rvdffsc_fpga  #(.WIDTH(1))              wrbuf_vldff       (.din(1'b1), .dout(wrbuf_vld),      .en(wrbuf_en),      .clear(wrbuf_rst),      .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga  #(.WIDTH(1))              wrbuf_data_vldff  (.din(1'b1), .dout(wrbuf_data_vld), .en(wrbuf_data_en), .clear(wrbuf_data_rst), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(pt.DMA_BUS_TAG)) wrbuf_tagff       (.din(dma_axi_awid[pt.DMA_BUS_TAG-1:0]), .dout(wrbuf_tag[pt.DMA_BUS_TAG-1:0]), .en(wrbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(3))              wrbuf_szff        (.din(dma_axi_awsize[2:0]),  .dout(wrbuf_sz[2:0]),     .en(wrbuf_en),                  .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffe        #(.WIDTH(32))             wrbuf_addrff      (.din(dma_axi_awaddr[31:0]), .dout(wrbuf_addr[31:0]),  .en(wrbuf_en & dma_bus_clk_en), .*);
-   rvdffe        #(.WIDTH(64))             wrbuf_dataff      (.din(dma_axi_wdata[63:0]),  .dout(wrbuf_data[63:0]),  .en(wrbuf_data_en & dma_bus_clk_en), .*);
-   rvdffs_fpga   #(.WIDTH(8))              wrbuf_byteenff    (.din(dma_axi_wstrb[7:0]),   .dout(wrbuf_byteen[7:0]), .en(wrbuf_data_en),             .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-
-   // Read channel buffer
-   assign rdbuf_en    = dma_axi_arvalid & dma_axi_arready;
-   assign rdbuf_cmd_sent = bus_cmd_sent & ~bus_cmd_write;
-   assign rdbuf_rst   = rdbuf_cmd_sent & ~rdbuf_en;
-
-   rvdffsc_fpga  #(.WIDTH(1))              rdbuf_vldff  (.din(1'b1), .dout(rdbuf_vld), .en(rdbuf_en), .clear(rdbuf_rst), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(pt.DMA_BUS_TAG)) rdbuf_tagff  (.din(dma_axi_arid[pt.DMA_BUS_TAG-1:0]), .dout(rdbuf_tag[pt.DMA_BUS_TAG-1:0]), .en(rdbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(3))              rdbuf_szff   (.din(dma_axi_arsize[2:0]),  .dout(rdbuf_sz[2:0]),    .en(rdbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))              rdbuf_addrff (.din(dma_axi_araddr[31:0]), .dout(rdbuf_addr[31:0]), .en(rdbuf_en & dma_bus_clk_en), .*);
-
-   assign dma_axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent);
-   assign dma_axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent);
-   assign dma_axi_arready = ~(rdbuf_vld & ~rdbuf_cmd_sent);
-
-   //Generate a single request from read/write channel
-   assign bus_cmd_valid                     = (wrbuf_vld & wrbuf_data_vld) | rdbuf_vld;
-   assign bus_cmd_sent                      = bus_cmd_valid & dma_fifo_ready;
-   assign bus_cmd_write                     = axi_mstr_sel;
-   assign bus_cmd_posted_write              = '0;
-   assign bus_cmd_addr[31:0]                = axi_mstr_sel ? wrbuf_addr[31:0] : rdbuf_addr[31:0];
-   assign bus_cmd_sz[2:0]                   = axi_mstr_sel ? wrbuf_sz[2:0] : rdbuf_sz[2:0];
-   assign bus_cmd_wdata[63:0]               = wrbuf_data[63:0];
-   assign bus_cmd_byteen[7:0]               = wrbuf_byteen[7:0];
-   assign bus_cmd_tag[pt.DMA_BUS_TAG-1:0]   = axi_mstr_sel ? wrbuf_tag[pt.DMA_BUS_TAG-1:0] : rdbuf_tag[pt.DMA_BUS_TAG-1:0];
-   assign bus_cmd_mid[pt.DMA_BUS_ID-1:0]    = '0;
-   assign bus_cmd_prty[pt.DMA_BUS_PRTY-1:0] = '0;
-
-   // Sel=1 -> write has higher priority
-   assign axi_mstr_sel     = (wrbuf_vld & wrbuf_data_vld & rdbuf_vld) ? axi_mstr_priority : (wrbuf_vld & wrbuf_data_vld);
-   assign axi_mstr_prty_in = ~axi_mstr_priority;
-   assign axi_mstr_prty_en = bus_cmd_sent;
-   rvdffs_fpga #(.WIDTH(1)) mstr_prtyff(.din(axi_mstr_prty_in), .dout(axi_mstr_priority), .en(axi_mstr_prty_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-
-   assign axi_rsp_valid                   = fifo_valid[RspPtr] & ~fifo_dbg[RspPtr] & fifo_done_bus[RspPtr];
-   assign axi_rsp_rdata[63:0]             = fifo_data[RspPtr];
-   assign axi_rsp_write                   = fifo_write[RspPtr];
-   assign axi_rsp_error[1:0]              = fifo_error[RspPtr][0] ? 2'b10 : (fifo_error[RspPtr][1] ? 2'b11 : 2'b0);
-   assign axi_rsp_tag[pt.DMA_BUS_TAG-1:0] = fifo_tag[RspPtr];
-
-   // AXI response channel signals
-   assign dma_axi_bvalid                  = axi_rsp_valid & axi_rsp_write;
-   assign dma_axi_bresp[1:0]              = axi_rsp_error[1:0];
-   assign dma_axi_bid[pt.DMA_BUS_TAG-1:0] = axi_rsp_tag[pt.DMA_BUS_TAG-1:0];
-
-   assign dma_axi_rvalid                  = axi_rsp_valid & ~axi_rsp_write;
-   assign dma_axi_rresp[1:0]              = axi_rsp_error;
-   assign dma_axi_rdata[63:0]             = axi_rsp_rdata[63:0];
-   assign dma_axi_rlast                   = 1'b1;
-   assign dma_axi_rid[pt.DMA_BUS_TAG-1:0] = axi_rsp_tag[pt.DMA_BUS_TAG-1:0];
-
-   assign bus_posted_write_done = 1'b0;
-   assign bus_rsp_valid      = (dma_axi_bvalid | dma_axi_rvalid);
-   assign bus_rsp_sent       = (dma_axi_bvalid & dma_axi_bready) | (dma_axi_rvalid & dma_axi_rready);
-
-   assign dma_active  = wrbuf_vld | rdbuf_vld | (|fifo_valid[DEPTH-1:0]);
-
-endmodule // eb1_dma_ctrl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_alu_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input  logic                  clk,                // Top level clock
-   input  logic                  rst_l,              // Reset
-   input  logic                  scan_mode,          // Scan control
-
-   input  logic                  flush_upper_x,      // Branch flush from previous cycle
-   input  logic                  flush_lower_r,      // Master flush of entire pipeline
-   input  logic                  enable,             // Clock enable
-   input  logic                  valid_in,           // Valid
-   input  eb1_alu_pkt_t         ap,                 // predecodes
-   input  logic                  csr_ren_in,         // CSR select
-   input  logic        [31:0]    csr_rddata_in,      // CSR data
-   input  logic signed [31:0]    a_in,               // A operand
-   input  logic        [31:0]    b_in,               // B operand
-   input  logic        [31:1]    pc_in,              // for pc=pc+2,4 calculations
-   input  eb1_predict_pkt_t     pp_in,              // Predicted branch structure
-   input  logic        [12:1]    brimm_in,           // Branch offset
-
-
-   output logic        [31:0]    result_ff,          // final result
-   output logic                  flush_upper_out,    // Branch flush
-   output logic                  flush_final_out,    // Branch flush or flush entire pipeline
-   output logic        [31:1]    flush_path_out,     // Branch flush PC
-   output logic        [31:1]    pc_ff,              // flopped PC
-   output logic                  pred_correct_out,   // NPC control
-   output eb1_predict_pkt_t     predict_p_out       // Predicted branch structure
-  );
-
-
-   logic               [31:0]    zba_a_in;
-   logic               [31:0]    aout;
-   logic                         cout,ov,neg;
-   logic               [31:0]    lout;
-   logic               [31:0]    sout;
-   logic                         sel_shift;
-   logic                         sel_adder;
-   logic                         slt_one;
-   logic                         actual_taken;
-   logic               [31:1]    pcout;
-   logic                         cond_mispredict;
-   logic                         target_mispredict;
-   logic                         eq, ne, lt, ge;
-   logic                         any_jal;
-   logic               [1:0]     newhist;
-   logic                         sel_pc;
-   logic               [31:0]    csr_write_data;
-   logic               [31:0]    result;
-
-
-
-
-   // *** Start - BitManip ***
-
-   // Zbb
-   logic                  ap_clz;
-   logic                  ap_ctz;
-   logic                  ap_pcnt;
-   logic                  ap_sext_b;
-   logic                  ap_sext_h;
-   logic                  ap_min;
-   logic                  ap_max;
-   logic                  ap_pack;
-   logic                  ap_packu;
-   logic                  ap_packh;
-   logic                  ap_rol;
-   logic                  ap_ror;
-   logic                  ap_rev;
-   logic                  ap_rev8;
-   logic                  ap_orc_b;
-   logic                  ap_orc16;
-   logic                  ap_zbb;
-
-   // Zbs
-   logic                  ap_sbset;
-   logic                  ap_sbclr;
-   logic                  ap_sbinv;
-   logic                  ap_sbext;
-
-   // Zbr
-   logic                  ap_slo;
-   logic                  ap_sro;
-
-   // Zba
-   logic                  ap_sh1add;
-   logic                  ap_sh2add;
-   logic                  ap_sh3add;
-   logic                  ap_zba;
-
-
-
-   if (pt.BITMANIP_ZBB == 1)
-     begin
-       assign ap_clz          =  ap.clz;
-       assign ap_ctz          =  ap.ctz;
-       assign ap_pcnt         =  ap.pcnt;
-       assign ap_sext_b       =  ap.sext_b;
-       assign ap_sext_h       =  ap.sext_h;
-       assign ap_min          =  ap.min;
-       assign ap_max          =  ap.max;
-     end
-   else
-     begin
-       assign ap_clz          =  1'b0;
-       assign ap_ctz          =  1'b0;
-       assign ap_pcnt         =  1'b0;
-       assign ap_sext_b       =  1'b0;
-       assign ap_sext_h       =  1'b0;
-       assign ap_min          =  1'b0;
-       assign ap_max          =  1'b0;
-     end
-
-
-   if ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     begin
-       assign ap_pack         =  ap.pack;
-       assign ap_packu        =  ap.packu;
-       assign ap_packh        =  ap.packh;
-       assign ap_rol          =  ap.rol;
-       assign ap_ror          =  ap.ror;
-       assign ap_rev          =  ap.grev & (b_in[4:0] == 5'b11111);
-       assign ap_rev8         =  ap.grev & (b_in[4:0] == 5'b11000);
-       assign ap_orc_b        =  ap.gorc & (b_in[4:0] == 5'b00111);
-       assign ap_orc16        =  ap.gorc & (b_in[4:0] == 5'b10000);
-       assign ap_zbb          =  ap.zbb;
-     end
-   else
-     begin
-       assign ap_pack         =  1'b0;
-       assign ap_packu        =  1'b0;
-       assign ap_packh        =  1'b0;
-       assign ap_rol          =  1'b0;
-       assign ap_ror          =  1'b0;
-       assign ap_rev          =  1'b0;
-       assign ap_rev8         =  1'b0;
-       assign ap_orc_b        =  1'b0;
-       assign ap_orc16        =  1'b0;
-       assign ap_zbb          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBS == 1)
-     begin
-       assign ap_sbset        =  ap.sbset;
-       assign ap_sbclr        =  ap.sbclr;
-       assign ap_sbinv        =  ap.sbinv;
-       assign ap_sbext        =  ap.sbext;
-     end
-   else
-     begin
-       assign ap_sbset        =  1'b0;
-       assign ap_sbclr        =  1'b0;
-       assign ap_sbinv        =  1'b0;
-       assign ap_sbext        =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_slo          =  ap.slo;
-       assign ap_sro          =  ap.sro;
-     end
-   else
-     begin
-       assign ap_slo          =  1'b0;
-       assign ap_sro          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBA == 1)
-     begin
-       assign ap_sh1add       =  ap.sh1add;
-       assign ap_sh2add       =  ap.sh2add;
-       assign ap_sh3add       =  ap.sh3add;
-       assign ap_zba          =  ap.zba;
-     end
-   else
-     begin
-       assign ap_sh1add       =  1'b0;
-       assign ap_sh2add       =  1'b0;
-       assign ap_sh3add       =  1'b0;
-       assign ap_zba          =  1'b0;
-     end
-
-
-
-
-   // *** End   - BitManip ***
-
-
-
-
-   rvdffpcie #(31) i_pc_ff      (.*, .clk(clk), .en(enable),              .din(pc_in[31:1]),    .dout(pc_ff[31:1]));   // any PC is run through here - doesn't have to be alu
-   rvdffe    #(32) i_result_ff  (.*, .clk(clk), .en(enable & valid_in),   .din(result[31:0]),   .dout(result_ff[31:0]));
-
-
-
-   // immediates are just muxed into rs2
-
-   // add    =>  add=1;
-   // sub    =>  add=1; sub=1;
-
-   // and    =>  lctl=3
-   // or     =>  lctl=2
-   // xor    =>  lctl=1
-
-   // sll    =>  sctl=3
-   // srl    =>  sctl=2
-   // sra    =>  sctl=1
-
-   // slt    =>  slt
-
-   // lui    =>  lctl=2; or x0, imm20 previously << 12
-   // auipc  =>  add;   add pc, imm20 previously << 12
-
-   // beq    =>  bctl=4; add; add x0, pc, sext(offset[12:1])
-   // bne    =>  bctl=3; add; add x0, pc, sext(offset[12:1])
-   // blt    =>  bctl=2; add; add x0, pc, sext(offset[12:1])
-   // bge    =>  bctl=1; add; add x0, pc, sext(offset[12:1])
-
-   // jal    =>  rs1=pc {pc[31:1],1'b0},  rs2=sext(offset20:1]);   rd=pc+[2,4]
-   // jalr   =>  rs1=rs1,                 rs2=sext(offset20:1]);   rd=pc+[2,4]
-
-
-
-   assign zba_a_in[31:0]      = ( {32{ ap_sh1add}} & {a_in[30:0],1'b0} ) |
-                                ( {32{ ap_sh2add}} & {a_in[29:0],2'b0} ) |
-                                ( {32{ ap_sh3add}} & {a_in[28:0],3'b0} ) |
-                                ( {32{~ap_zba   }} &  a_in[31:0]       );
-
-   logic        [31:0]    bm;
-
-   assign bm[31:0]            = ( ap.sub )  ?  ~b_in[31:0]  :  b_in[31:0];
-
-   assign {cout, aout[31:0]}  = {1'b0, zba_a_in[31:0]} + {1'b0, bm[31:0]} + {32'b0, ap.sub};
-
-   assign ov                  = (~a_in[31] & ~bm[31] &  aout[31]) |
-                                ( a_in[31] &  bm[31] & ~aout[31] );
-
-   assign lt                  = (~ap.unsign & (neg ^ ov)) |
-                                ( ap.unsign & ~cout);
-
-   assign eq                  = (a_in[31:0] == b_in[31:0]);
-   assign ne                  = ~eq;
-   assign neg                 =  aout[31];
-   assign ge                  = ~lt;
-
-
-
-   assign lout[31:0]          =  ( {32{csr_ren_in       }} &  csr_rddata_in[31:0]       ) |
-                                 ( {32{ap.land & ~ap_zbb}} &  a_in[31:0] &  b_in[31:0]  ) |
-                                 ( {32{ap.lor  & ~ap_zbb}} & (a_in[31:0] |  b_in[31:0]) ) |
-                                 ( {32{ap.lxor & ~ap_zbb}} & (a_in[31:0] ^  b_in[31:0]) ) |
-                                 ( {32{ap.land &  ap_zbb}} &  a_in[31:0] & ~b_in[31:0]  ) |
-                                 ( {32{ap.lor  &  ap_zbb}} & (a_in[31:0] | ~b_in[31:0]) ) |
-                                 ( {32{ap.lxor &  ap_zbb}} & (a_in[31:0] ^ ~b_in[31:0]) );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SLO,SRO      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ROL,ROR      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBEXT        * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     shift_amount;
-   logic        [31:0]    shift_mask;
-   logic        [62:0]    shift_extend;
-   logic        [62:0]    shift_long;
-
-
-   assign shift_amount[5:0]            = ( { 6{ap.sll}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |   // [5] unused
-                                         ( { 6{ap.srl}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap.sra}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_rol}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_ror}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_slo}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_sro}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_sbext}} &          {1'b0,b_in[4:0]}  );
-
-
-   assign shift_mask[31:0]             = ( 32'hffffffff << ({5{ap.sll | ap_slo}} & b_in[4:0]) );
-
-
-   assign shift_extend[31:0]           =  a_in[31:0];
-
-   assign shift_extend[62:32]          = ( {31{ap.sra}} & {31{a_in[31]}} ) |
-                                         ( {31{ap.sll}} &     a_in[30:0] ) |
-                                         ( {31{ap_rol}} &     a_in[30:0] ) |
-                                         ( {31{ap_ror}} &     a_in[30:0] ) |
-                                         ( {31{ap_slo}} &     a_in[30:0] ) |
-                                         ( {31{ap_sro}} & {31{  1'b1  }} );
-
-
-   assign shift_long[62:0]    = ( shift_extend[62:0] >> shift_amount[4:0] );   // 62-32 unused
-
-   assign sout[31:0]          = ( shift_long[31:0] & shift_mask[31:0] ) | ( {32{ap_slo}} & ~shift_mask[31:0] );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLZ,CTZ      * * * * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_clz_ctz_sel;
-   logic        [31:0]    bitmanip_a_reverse_ff;
-   logic        [31:0]    bitmanip_lzd_in;
-   logic        [5:0]     bitmanip_dw_lzd_enc;
-   logic        [5:0]     bitmanip_clz_ctz_result;
-
-   assign bitmanip_clz_ctz_sel         =  ap_clz | ap_ctz;
-
-   assign bitmanip_a_reverse_ff[31:0]  = {a_in[0],  a_in[1],  a_in[2],  a_in[3],  a_in[4],  a_in[5],  a_in[6],  a_in[7],
-                                          a_in[8],  a_in[9],  a_in[10], a_in[11], a_in[12], a_in[13], a_in[14], a_in[15],
-                                          a_in[16], a_in[17], a_in[18], a_in[19], a_in[20], a_in[21], a_in[22], a_in[23],
-                                          a_in[24], a_in[25], a_in[26], a_in[27], a_in[28], a_in[29], a_in[30], a_in[31]};
-
-   assign bitmanip_lzd_in[31:0]        = ( {32{ap_clz}} & a_in[31:0]                 ) |
-                                         ( {32{ap_ctz}} & bitmanip_a_reverse_ff[31:0]);
-
-   logic        [31:0]    bitmanip_lzd_os;
-   integer                i;
-   logic                  found;
-
-   always_comb
-     begin
-        bitmanip_lzd_os[31:0]   =  bitmanip_lzd_in[31:0];
-        bitmanip_dw_lzd_enc[5:0]=  6'b0;
-        found = 1'b0;
-
-        for (int i=0; i<32 && found==0; i++) begin
-           if (bitmanip_lzd_os[31] == 1'b0) begin
-              bitmanip_dw_lzd_enc[5:0]=  bitmanip_dw_lzd_enc[5:0] + 6'b00_0001;
-              bitmanip_lzd_os[31:0]   =  bitmanip_lzd_os[31:0] << 1;
-           end
-           else
-              found=1'b1;
-        end
-     end
-
-
-
-   assign bitmanip_clz_ctz_result[5:0] = {6{bitmanip_clz_ctz_sel}} & {bitmanip_dw_lzd_enc[5],( {5{~bitmanip_dw_lzd_enc[5]}} & bitmanip_dw_lzd_enc[4:0] )};
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PCNT         * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     bitmanip_pcnt;
-   logic        [5:0]     bitmanip_pcnt_result;
-
-
-   integer                bitmanip_pcnt_i;
-
-   always_comb
-     begin
-       bitmanip_pcnt[5:0]               =  6'b0;
-
-       for (bitmanip_pcnt_i=0; bitmanip_pcnt_i<32; bitmanip_pcnt_i++)
-         begin
-            bitmanip_pcnt[5:0]          =  bitmanip_pcnt[5:0] + {5'b0,a_in[bitmanip_pcnt_i]};
-         end      // FOR    bitmanip_pcnt_i
-     end          // ALWAYS_COMB
-
-
-   assign bitmanip_pcnt_result[5:0]    =  {6{ap_pcnt}} & bitmanip_pcnt[5:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SEXT_B,SEXT_H  * * * * * * * * * * * * * * * * *
-
-   logic       [31:0]     bitmanip_sext_result;
-
-   assign bitmanip_sext_result[31:0]   = ( {32{ap_sext_b}} & { {24{a_in[7]}} ,a_in[7:0]  } ) |
-                                         ( {32{ap_sext_h}} & { {16{a_in[15]}},a_in[15:0] } );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  MIN,MAX,MINU,MAXU  * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_minmax_sel;
-   logic        [31:0]    bitmanip_minmax_result;
-
-   assign bitmanip_minmax_sel          =  ap_min | ap_max;
-
-
-   logic                  bitmanip_minmax_sel_a;
-
-   assign bitmanip_minmax_sel_a        =  ge  ^ ap_min;
-
-   assign bitmanip_minmax_result[31:0] = ({32{bitmanip_minmax_sel &  bitmanip_minmax_sel_a}}  &  a_in[31:0]) |
-                                         ({32{bitmanip_minmax_sel & ~bitmanip_minmax_sel_a}}  &  b_in[31:0]);
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PACK, PACKU, PACKH * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_pack_result;
-   logic        [31:0]    bitmanip_packu_result;
-   logic        [31:0]    bitmanip_packh_result;
-
-   assign bitmanip_pack_result[31:0]   = {32{ap_pack}}  & {b_in[15:0], a_in[15:0]};
-   assign bitmanip_packu_result[31:0]  = {32{ap_packu}} & {b_in[31:16],a_in[31:16]};
-   assign bitmanip_packh_result[31:0]  = {32{ap_packh}} & {16'b0,b_in[7:0],a_in[7:0]};
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  REV, REV8, ORC_B * * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_rev_result;
-   logic        [31:0]    bitmanip_rev8_result;
-   logic        [31:0]    bitmanip_orc_b_result;
-   logic        [31:0]    bitmanip_orc16_result;
-
-   assign bitmanip_rev_result[31:0]    = {32{ap_rev}}   &
-                                         {a_in[00],a_in[01],a_in[02],a_in[03],a_in[04],a_in[05],a_in[06],a_in[07],
-                                          a_in[08],a_in[09],a_in[10],a_in[11],a_in[12],a_in[13],a_in[14],a_in[15],
-                                          a_in[16],a_in[17],a_in[18],a_in[19],a_in[20],a_in[21],a_in[22],a_in[23],
-                                          a_in[24],a_in[25],a_in[26],a_in[27],a_in[28],a_in[29],a_in[30],a_in[31]};
-
-   assign bitmanip_rev8_result[31:0]   = {32{ap_rev8}}  & {a_in[7:0],a_in[15:8],a_in[23:16],a_in[31:24]};
-
-
-// uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-// {
-//      uint32_t x = rs1;
-//      int shamt = rs2 & 31;                                                        ORC.B  ORC16
-//      if (shamt &  1) x |= ((x & 0x55555555) <<  1) | ((x & 0xAAAAAAAA) >>  1);      1      0
-//      if (shamt &  2) x |= ((x & 0x33333333) <<  2) | ((x & 0xCCCCCCCC) >>  2);      1      0
-//      if (shamt &  4) x |= ((x & 0x0F0F0F0F) <<  4) | ((x & 0xF0F0F0F0) >>  4);      1      0
-//      if (shamt &  8) x |= ((x & 0x00FF00FF) <<  8) | ((x & 0xFF00FF00) >>  8);      0      0
-//      if (shamt & 16) x |= ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);      0      1
-//      return x;
-// }
-
-
-// BEFORE              31  ,   30  ,   29  ,   28  ,    27  ,   26,     25,     24
-// shamt[0]  b =    a31|a30,a31|a30,a29|a28,a29|a28, a27|a26,a27|a26,a25|a24,a25|a24
-// shamt[1]  c =    b31|b29,b30|b28,b31|b29,b30|b28, b27|b25,b26|b24,b27|b25,b26|b24
-// shamt[2]  d =    c31|c27,c30|c26,c29|c25,c28|c24, c31|c27,c30|c26,c29|c25,c28|c24
-//
-// Expand d31 =        c31         |         c27;
-//            =   b31   |   b29    |    b27   |   b25;
-//            = a31|a30 | a29|a28  |  a27|a26 | a25|a24
-
-   assign bitmanip_orc_b_result[31:0]  = {32{ap_orc_b}} & { {8{| a_in[31:24]}}, {8{| a_in[23:16]}}, {8{| a_in[15:8]}}, {8{| a_in[7:0]}} };
-
-   assign bitmanip_orc16_result[31:0]  = {32{ap_orc16}} & {     {a_in[31:16] | a_in[15:0]},             {a_in[31:16] | a_in[15:0]}      };
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBSET, ZBCLR, ZBINV  * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_sb_1hot;
-   logic        [31:0]    bitmanip_sb_data;
-
-   assign bitmanip_sb_1hot[31:0]       = ( 32'h00000001 << b_in[4:0] );
-
-   assign bitmanip_sb_data[31:0]       = ( {32{ap_sbset}} & ( a_in[31:0] |  bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbclr}} & ( a_in[31:0] & ~bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbinv}} & ( a_in[31:0] ^  bitmanip_sb_1hot[31:0]) );
-
-
-
-
-
-
-   assign sel_shift           =  ap.sll  | ap.srl | ap.sra | ap_slo | ap_sro | ap_rol | ap_ror;
-   assign sel_adder           = (ap.add  | ap.sub | ap_zba) & ~ap.slt & ~ap_min & ~ap_max;
-   assign sel_pc              =  ap.jal  | pp_in.pcall | pp_in.pja | pp_in.pret;
-   assign csr_write_data[31:0]= (ap.csr_imm)  ?  b_in[31:0]  :  a_in[31:0];
-
-   assign slt_one             =  ap.slt & lt;
-
-
-
-   assign result[31:0]        =                        lout[31:0]             |
-                                ({32{sel_shift}}    &  sout[31:0]           ) |
-                                ({32{sel_adder}}    &  aout[31:0]           ) |
-                                ({32{sel_pc}}       & {pcout[31:1],1'b0}    ) |
-                                ({32{ap.csr_write}} &  csr_write_data[31:0] ) |
-                                                      {31'b0, slt_one}        |
-                                ({32{ap_sbext}}     & {31'b0, sout[0]}      ) |
-                                                      {26'b0, bitmanip_clz_ctz_result[5:0]} |
-                                                      {26'b0, bitmanip_pcnt_result[5:0]}    |
-                                                       bitmanip_sext_result[31:0]    |
-                                                       bitmanip_minmax_result[31:0]  |
-                                                       bitmanip_pack_result[31:0]    |
-                                                       bitmanip_packu_result[31:0]   |
-                                                       bitmanip_packh_result[31:0]   |
-                                                       bitmanip_rev_result[31:0]     |
-                                                       bitmanip_rev8_result[31:0]    |
-                                                       bitmanip_orc_b_result[31:0]   |
-                                                       bitmanip_orc16_result[31:0]   |
-                                                       bitmanip_sb_data[31:0];
-
-
-
-   // *** branch handling ***
-
-   assign any_jal             =  ap.jal      |
-                                 pp_in.pcall |
-                                 pp_in.pja   |
-                                 pp_in.pret;
-
-   assign actual_taken        = (ap.beq & eq) |
-                                (ap.bne & ne) |
-                                (ap.blt & lt) |
-                                (ap.bge & ge) |
-                                 any_jal;
-
-   // for a conditional br pcout[] will be the opposite of the branch prediction
-   // for jal or pcall, it will be the link address pc+2 or pc+4
-
-   rvbradder ibradder (
-                     .pc     ( pc_in[31:1]    ),
-                     .offset ( brimm_in[12:1] ),
-                     .dout   ( pcout[31:1]    ));
-
-
-   // pred_correct is for the npc logic
-   // pred_correct indicates not to use the flush_path
-   // for any_jal pred_correct==0
-
-   assign pred_correct_out    = (valid_in & ap.predict_nt & ~actual_taken & ~any_jal) |
-                                (valid_in & ap.predict_t  &  actual_taken & ~any_jal);
-
-
-   // for any_jal adder output is the flush path
-   assign flush_path_out[31:1]= (any_jal) ? aout[31:1] : pcout[31:1];
-
-
-   // pcall and pret are included here
-   assign cond_mispredict     = (ap.predict_t  & ~actual_taken) |
-                                (ap.predict_nt &  actual_taken);
-
-
-   // target mispredicts on ret's
-
-   assign target_mispredict   =  pp_in.pret & (pp_in.prett[31:1] != aout[31:1]);
-
-   assign flush_upper_out     =   (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x   & ~flush_lower_r;
-   assign flush_final_out     = ( (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x ) |  flush_lower_r;
-
-
-   // .i 3
-   // .o 2
-   // .ilb hist[1] hist[0] taken
-   // .ob newhist[1] newhist[0]
-   // .type fd
-   //
-   // 00 0 01
-   // 01 0 01
-   // 10 0 00
-   // 11 0 10
-   // 00 1 10
-   // 01 1 00
-   // 10 1 11
-   // 11 1 11
-
-   assign newhist[1]          = ( pp_in.hist[1] &  pp_in.hist[0]) | (~pp_in.hist[0] & actual_taken);
-   assign newhist[0]          = (~pp_in.hist[1] & ~actual_taken)  | ( pp_in.hist[1] & actual_taken);
-
-   always_comb begin
-      predict_p_out           =  pp_in;
-
-      predict_p_out.misp      = ~flush_upper_x & ~flush_lower_r & (cond_mispredict | target_mispredict);
-      predict_p_out.ataken    =  actual_taken;
-      predict_p_out.hist[1]   =  newhist[1];
-      predict_p_out.hist[0]   =  newhist[0];
-
-   end
-
-
-
-endmodule // eb1_exu_alu_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_div_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic           clk,                       // Top level clock
-   input logic           rst_l,                     // Reset
-   input logic           scan_mode,                 // Scan mode
-
-   input eb1_div_pkt_t  dp,                        // valid, sign, rem
-   input logic  [31:0]   dividend,                  // Numerator
-   input logic  [31:0]   divisor,                   // Denominator
-
-   input logic           cancel,                    // Cancel divide
-
-
-   output logic          finish_dly,                // Finish to match data
-   output logic [31:0]   out                        // Result
-  );
-
-
-   logic [31:0]          out_raw;
-
-   assign out[31:0] = {32{finish_dly}} & out_raw[31:0];     // Qualification added to quiet result bus while divide is iterating
-
-
-
-   if (pt.DIV_NEW == 0)
-      begin
-        eb1_exu_div_existing_1bit_cheapshortq   i_existing_1bit_div_cheapshortq (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 1) )
-      begin
-        eb1_exu_div_new_1bit_fullshortq         i_new_1bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 2) )
-      begin
-        eb1_exu_div_new_2bit_fullshortq         i_new_2bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 3) )
-      begin
-        eb1_exu_div_new_3bit_fullshortq         i_new_3bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 4) )
-      begin
-        eb1_exu_div_new_4bit_fullshortq         i_new_4bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-
-endmodule // eb1_exu_div_ctl
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_existing_1bit_cheapshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic         div_clken;
-   logic         run_in, run_state;
-   logic  [5:0]  count_in, count;
-   logic [32:0]  m_ff;
-   logic         qff_enable;
-   logic         aff_enable;
-   logic [32:0]  q_in, q_ff;
-   logic [32:0]  a_in, a_ff;
-   logic [32:0]  m_eff;
-   logic [32:0]  a_shift;
-   logic         dividend_neg_ff, divisor_neg_ff;
-   logic [31:0]  dividend_comp;
-   logic [31:0]  dividend_eff;
-   logic [31:0]  q_ff_comp;
-   logic [31:0]  q_ff_eff;
-   logic [31:0]  a_ff_comp;
-   logic [31:0]  a_ff_eff;
-   logic         sign_ff, sign_eff;
-   logic         rem_ff;
-   logic         add;
-   logic [32:0]  a_eff;
-   logic [64:0]  a_eff_shift;
-   logic         rem_correct;
-   logic         valid_ff_x;
-   logic         valid_x;
-   logic         finish;
-   logic         finish_ff;
-
-   logic         smallnum_case, smallnum_case_ff;
-   logic  [3:0]  smallnum, smallnum_ff;
-   logic         m_already_comp;
-
-   logic [4:0]   a_cls;
-   logic [4:0]   b_cls;
-   logic [5:0]   shortq_shift;
-   logic [5:0]   shortq_shift_ff;
-   logic [5:0]   shortq;
-   logic         shortq_enable;
-   logic         shortq_enable_ff;
-   logic [32:0]  short_dividend;
-   logic [3:0]   shortq_raw;
-   logic [3:0]   shortq_shift_xx;
-
-
-
-   rvdffe #(23) i_misc_ff        (.*, .clk(clk), .en(div_clken),   .din ({valid_in & ~cancel,
-                                                                          finish   & ~cancel,
-                                                                          run_in,
-                                                                          count_in[5:0],
-                                                                          (valid_in & dividend_in[31]) | (~valid_in & dividend_neg_ff),
-                                                                          (valid_in & divisor_in[31] ) | (~valid_in & divisor_neg_ff ),
-                                                                          (valid_in & sign_eff       ) | (~valid_in & sign_ff        ),
-                                                                          (valid_in & rem_in         ) | (~valid_in & rem_ff         ),
-                                                                          smallnum_case,
-                                                                          smallnum[3:0],
-                                                                          shortq_enable,
-                                                                          shortq_shift[3:0]}),
-
-                                                                   .dout({valid_ff_x,
-                                                                          finish_ff,
-                                                                          run_state,
-                                                                          count[5:0],
-                                                                          dividend_neg_ff,
-                                                                          divisor_neg_ff,
-                                                                          sign_ff,
-                                                                          rem_ff,
-                                                                          smallnum_case_ff,
-                                                                          smallnum_ff[3:0],
-                                                                          shortq_enable_ff,
-                                                                          shortq_shift_xx[3:0]}));
-
-
-   rvdffe #(33) mff              (.*, .clk(clk), .en(valid_in),    .din({signed_in & divisor_in[31], divisor_in[31:0]}),   .dout(m_ff[32:0]));
-   rvdffe #(33) qff              (.*, .clk(clk), .en(qff_enable),  .din(q_in[32:0]),                                       .dout(q_ff[32:0]));
-   rvdffe #(33) aff              (.*, .clk(clk), .en(aff_enable),  .din(a_in[32:0]),                                       .dout(a_ff[32:0]));
-
-   rvtwoscomp #(32) i_dividend_comp (.din(q_ff[31:0]),    .dout(dividend_comp[31:0]));
-   rvtwoscomp #(32) i_q_ff_comp     (.din(q_ff[31:0]),    .dout(q_ff_comp[31:0]));
-   rvtwoscomp #(32) i_a_ff_comp     (.din(a_ff[31:0]),    .dout(a_ff_comp[31:0]));
-
-
-   assign valid_x                 = valid_ff_x & ~cancel;
-
-
-   // START - short circuit logic for small numbers {{
-
-   // small number divides - any 4b / 4b is done in 1 cycle (divisor != 0)
-   // to generate espresso equations:
-   // 1.  smalldiv > smalldiv.e
-   // 2.  espresso -Dso -oeqntott smalldiv.e | addassign > smalldiv
-
-   // smallnum case does not cover divide by 0
-   assign smallnum_case           = ((q_ff[31:4] == 28'b0) & (m_ff[31:4] == 28'b0) & (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x) |
-                                    ((q_ff[31:0] == 32'b0) &                         (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x);
-
-
-   assign smallnum[3]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           );
-
-
-   assign smallnum[2]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] & ~m_ff[2]                      );
-
-
-   assign smallnum[1]             = ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                                  ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] & ~m_ff[3] &                       ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2]                      );
-
-
-   assign smallnum[0]             = (            q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[0] &            ~m_ff[3] &             m_ff[1] &  m_ff[0]) |
-                                    (            q_ff[2] &                       ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                                  q_ff[0] & ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] & ~q_ff[1] &            ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &                                             ~m_ff[2] & ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] &  m_ff[2] &  m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &             q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] & ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &             m_ff[0]) |
-                                    (           ~q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                                             ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] &             q_ff[1] &                       ~m_ff[2] &            ~m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &  m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                        m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &             q_ff[1] &             m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                        q_ff[0] &            ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &            ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &             q_ff[0] &  m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[1] &            ~m_ff[3] &             m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] &  q_ff[0] &            ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] &  m_ff[3]                                 );
-
-
-   // END   - short circuit logic for small numbers }}
-
-
-   // *** Start Short Q *** {{
-
-   assign short_dividend[31:0]    =  q_ff[31:0];
-   assign short_dividend[32]      =  sign_ff & q_ff[31];
-
-
-   //    A       B
-   //   210     210    SH
-   //   ---     ---    --
-   //   1xx     000     0
-   //   1xx     001     8
-   //   1xx     01x    16
-   //   1xx     1xx    24
-   //   01x     000     8
-   //   01x     001    16
-   //   01x     01x    24
-   //   01x     1xx    32
-   //   001     000    16
-   //   001     001    24
-   //   001     01x    32
-   //   001     1xx    32
-   //   000     000    24
-   //   000     001    32
-   //   000     01x    32
-   //   000     1xx    32
-
-   assign a_cls[4:3]              =  2'b0;
-   assign a_cls[2]                =  (~short_dividend[32] & (short_dividend[31:24] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[31:23] != {9{1'b1}}));
-   assign a_cls[1]                =  (~short_dividend[32] & (short_dividend[23:16] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[22:15] != {8{1'b1}}));
-   assign a_cls[0]                =  (~short_dividend[32] & (short_dividend[15:08] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[14:07] != {8{1'b1}}));
-
-   assign b_cls[4:3]              =  2'b0;
-   assign b_cls[2]                =  (~m_ff[32]           & (          m_ff[31:24] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[31:24] != {8{1'b1}}));
-   assign b_cls[1]                =  (~m_ff[32]           & (          m_ff[23:16] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[23:16] != {8{1'b1}}));
-   assign b_cls[0]                =  (~m_ff[32]           & (          m_ff[15:08] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[15:08] != {8{1'b1}}));
-
-   assign shortq_raw[3]           = ( (a_cls[2:1] == 2'b01 ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 32
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b001) );
-
-   assign shortq_raw[2]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 24
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[1]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:1] == 2'b01 ) ) |   // Shift by 16
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[0]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:0] == 3'b001) ) |   // Shift by  8
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b000) );
-
-
-   assign shortq_enable           =  valid_ff_x & (m_ff[31:0] != 32'b0) & (shortq_raw[3:0] != 4'b0);
-
-   assign shortq_shift[3:0]       = ({4{shortq_enable}} & shortq_raw[3:0]);
-
-   assign shortq[5:0]             =  6'b0;
-   assign shortq_shift[5:4]       =  2'b0;
-   assign shortq_shift_ff[5]      =  1'b0;
-
-   assign shortq_shift_ff[4:0]    = ({5{shortq_shift_xx[3]}} & 5'b1_1111) |   // 31
-                                    ({5{shortq_shift_xx[2]}} & 5'b1_1000) |   // 24
-                                    ({5{shortq_shift_xx[1]}} & 5'b1_0000) |   // 16
-                                    ({5{shortq_shift_xx[0]}} & 5'b0_1000);    //  8
-
-   // *** End   Short *** }}
-
-
-
-
-
-   assign div_clken               =  valid_in | run_state | finish | finish_ff;
-
-   assign run_in                  = (valid_in | run_state) & ~finish & ~cancel;
-
-   assign count_in[5:0]           = {6{run_state & ~finish & ~cancel & ~shortq_enable}} & (count[5:0] + {1'b0,shortq_shift_ff[4:0]} + 6'd1);
-
-
-   assign finish                  = (smallnum_case | ((~rem_ff) ? (count[5:0] == 6'd32) : (count[5:0] == 6'd33)));
-
-   assign valid_out               =  finish_ff & ~cancel;
-
-   assign sign_eff                =  signed_in & (divisor_in[31:0] != 32'b0);
-
-
-   assign q_in[32:0]              = ({33{~run_state                                   }} &  {1'b0,dividend_in[31:0]}) |
-                                    ({33{ run_state &  (valid_ff_x | shortq_enable_ff)}} &  ({dividend_eff[31:0], ~a_in[32]} << shortq_shift_ff[4:0])) |
-                                    ({33{ run_state & ~(valid_ff_x | shortq_enable_ff)}} &  {q_ff[31:0], ~a_in[32]});
-
-   assign qff_enable              =  valid_in | (run_state & ~shortq_enable);
-
-
-
-
-   assign dividend_eff[31:0]      = (sign_ff & dividend_neg_ff) ? dividend_comp[31:0] : q_ff[31:0];
-
-
-   assign m_eff[32:0]             = ( add ) ? m_ff[32:0] : ~m_ff[32:0];
-
-   assign a_eff_shift[64:0]       = {33'b0, dividend_eff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_eff[32:0]             = ({33{ rem_correct                    }} &  a_ff[32:0]            ) |
-                                    ({33{~rem_correct & ~shortq_enable_ff}} & {a_ff[31:0], q_ff[32]} ) |
-                                    ({33{~rem_correct &  shortq_enable_ff}} &  a_eff_shift[64:32]    );
-
-   assign a_shift[32:0]           = {33{run_state}} & a_eff[32:0];
-
-   assign a_in[32:0]              = {33{run_state}} & (a_shift[32:0] + m_eff[32:0] + {32'b0,~add});
-
-   assign aff_enable              =  valid_in | (run_state & ~shortq_enable & (count[5:0]!=6'd33)) | rem_correct;
-
-
-   assign m_already_comp          = (divisor_neg_ff & sign_ff);
-
-   // if m already complemented, then invert operation add->sub, sub->add
-   assign add                     = (a_ff[32] | rem_correct) ^ m_already_comp;
-
-   assign rem_correct             = (count[5:0] == 6'd33) & rem_ff & a_ff[32];
-
-
-
-   assign q_ff_eff[31:0]          = (sign_ff & (dividend_neg_ff ^ divisor_neg_ff)) ? q_ff_comp[31:0] : q_ff[31:0];
-
-   assign a_ff_eff[31:0]          = (sign_ff &  dividend_neg_ff) ? a_ff_comp[31:0] : a_ff[31:0];
-
-   assign data_out[31:0]          = ({32{ smallnum_case_ff          }} & {28'b0, smallnum_ff[3:0]}) |
-                                    ({32{                     rem_ff}} &  a_ff_eff[31:0]          ) |
-                                    ({32{~smallnum_case_ff & ~rem_ff}} &  q_ff_eff[31:0]          );
-
-
-
-
-endmodule // eb1_exu_div_existing_1bit_cheapshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_1bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in, b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic                   quotient_set;
-   logic        [32:0]     adder_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {6'b0,1'b1} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[30:0],1'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & ~quotient_set & ~shortq_enable_ff;
-   assign r_adder_sel            =  running_state &  quotient_set & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff          ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[30:0] ,a_ff[31]} ) |
-                                   ( {32{r_adder_sel     }} &  adder_out[31:0]       ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]     ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]            );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[30:0], quotient_set}  ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]} ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                  );
-
-
-
-   assign adder_out[32:0]        = {r_ff[31:0],a_ff[31]} + {b_ff[32:0] };
-
-
-   assign quotient_set           = (~adder_out[32] ^ dividend_sign_ff) | ( (a_ff[30:0] == 31'b0) & (adder_out[32:0] == 33'b0) );
-
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_1bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_2bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [34:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder1_sel, r_adder2_sel, r_adder3_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [3:1]     quotient_raw;
-   logic         [1:0]     quotient_new;
-   logic        [32:0]     adder1_out;
-   logic        [33:0]     adder2_out;
-   logic        [34:0]     adder3_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:1]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(18) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:1],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:1], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b10} + {2'b0,shortq_shift_ff[4:1],1'b0});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:1],1'b0};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[29:0],2'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[1:0] == 2'b00) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[1:0] == 2'b01) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[1:0] == 2'b10) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[1:0] == 2'b11) & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff             ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[29:0] ,a_ff[31:30]} ) |
-                                   ( {32{r_adder1_sel    }} &  adder1_out[31:0]         ) |
-                                   ( {32{r_adder2_sel    }} &  adder2_out[31:0]         ) |
-                                   ( {32{r_adder3_sel    }} &  adder3_out[31:0]         ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]        ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]               );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[29:0], quotient_new[1:0]} ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                      );
-
-
-   assign b_ff[34:33]            = {b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[32:0]       = {         r_ff[30:0],a_ff[31:30]}  +                       b_ff[32:0];
-   assign adder2_out[33:0]       = {         r_ff[31:0],a_ff[31:30]}  + {b_ff[32:0],1'b0};
-   assign adder3_out[34:0]       = {r_ff[31],r_ff[31:0],a_ff[31:30]}  + {b_ff[33:0],1'b0}  +  b_ff[34:0];
-
-
-   assign quotient_raw[1]        = (~adder1_out[32] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[32:0] == 33'b0) );
-   assign quotient_raw[2]        = (~adder2_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[33:0] == 34'b0) );
-   assign quotient_raw[3]        = (~adder3_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[34:0] == 35'b0) );
-
-   assign quotient_new[1]        = quotient_raw[3] |  quotient_raw[2];
-   assign quotient_new[0]        = quotient_raw[3] |(~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);   // [0] is unused
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_2bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_3bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [32:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [36:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder1_sel, r_adder2_sel, r_adder3_sel, r_adder4_sel, r_adder5_sel, r_adder6_sel, r_adder7_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [7:1]     quotient_raw;
-   logic         [2:0]     quotient_new;
-   logic        [33:0]     adder1_out;
-   logic        [34:0]     adder2_out;
-   logic        [35:0]     adder3_out;
-   logic        [36:0]     adder4_out;
-   logic        [36:0]     adder5_out;
-   logic        [36:0]     adder6_out;
-   logic        [36:0]     adder7_out;
-
-   logic        [65:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(33) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[32:0]),           .dout(a_ff[32:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd33);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b11} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[65:0]       = { {33{dividend_sign_ff}} , a_ff[32:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[32:0]             = ( {33{~a_shift & ~shortq_enable_ff}} & {signed_in & dividend_in[31],dividend_in[31:0]} ) |
-                                   ( {33{ a_shift                    }} & {a_ff[29:0],3'b0}  ) |
-                                   ( {33{            shortq_enable_ff}} &  ar_shifted[32:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[2:0] == 3'b000) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[2:0] == 3'b001) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[2:0] == 3'b010) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[2:0] == 3'b011) & ~shortq_enable_ff;
-   assign r_adder4_sel           =  running_state & (quotient_new[2:0] == 3'b100) & ~shortq_enable_ff;
-   assign r_adder5_sel           =  running_state & (quotient_new[2:0] == 3'b101) & ~shortq_enable_ff;
-   assign r_adder6_sel           =  running_state & (quotient_new[2:0] == 3'b110) & ~shortq_enable_ff;
-   assign r_adder7_sel           =  running_state & (quotient_new[2:0] == 3'b111) & ~shortq_enable_ff;
-
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[29:0] ,a_ff[32:30]} ) |
-                                   ( {33{r_adder1_sel    }} &  adder1_out[32:0]         ) |
-                                   ( {33{r_adder2_sel    }} &  adder2_out[32:0]         ) |
-                                   ( {33{r_adder3_sel    }} &  adder3_out[32:0]         ) |
-                                   ( {33{r_adder4_sel    }} &  adder4_out[32:0]         ) |
-                                   ( {33{r_adder5_sel    }} &  adder5_out[32:0]         ) |
-                                   ( {33{r_adder6_sel    }} &  adder6_out[32:0]         ) |
-                                   ( {33{r_adder7_sel    }} &  adder7_out[32:0]         ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[65:33]        ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}         );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[28:0], quotient_new[2:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[36:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[33:0]       = {         r_ff[30:0],a_ff[32:30]}  +                                              b_ff[33:0];
-   assign adder2_out[34:0]       = {         r_ff[31:0],a_ff[32:30]}  +                        {b_ff[33:0],1'b0};
-   assign adder3_out[35:0]       = {         r_ff[32:0],a_ff[32:30]}  +                        {b_ff[34:0],1'b0}  +  b_ff[35:0];
-   assign adder4_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0};
-   assign adder5_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +                        b_ff[36:0];
-   assign adder6_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0};
-   assign adder7_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0}  +  b_ff[36:0];
-
-   assign quotient_raw[1]        = (~adder1_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[33:0] == 34'b0) );
-   assign quotient_raw[2]        = (~adder2_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[34:0] == 35'b0) );
-   assign quotient_raw[3]        = (~adder3_out[35] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[35:0] == 36'b0) );
-   assign quotient_raw[4]        = (~adder4_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder4_out[36:0] == 37'b0) );
-   assign quotient_raw[5]        = (~adder5_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder5_out[36:0] == 37'b0) );
-   assign quotient_raw[6]        = (~adder6_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder6_out[36:0] == 37'b0) );
-   assign quotient_raw[7]        = (~adder7_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder7_out[36:0] == 37'b0) );
-
-   assign quotient_new[2]        = quotient_raw[7] |   quotient_raw[6] | quotient_raw[5]  |   quotient_raw[4];
-   assign quotient_new[1]        = quotient_raw[7] |   quotient_raw[6] |                    (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[3] & quotient_raw[2]);
-   assign quotient_new[0]        = quotient_raw[7] | (~quotient_raw[6] & quotient_raw[5]) | (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd03) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd27);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_3bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_4bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [37:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder01_sel, r_adder02_sel, r_adder03_sel;
-   logic                   r_adder04_sel, r_adder05_sel, r_adder06_sel, r_adder07_sel;
-   logic                   r_adder08_sel, r_adder09_sel, r_adder10_sel, r_adder11_sel;
-   logic                   r_adder12_sel, r_adder13_sel, r_adder14_sel, r_adder15_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic        [15:1]     quotient_raw;
-   logic         [3:0]     quotient_new;
-   logic        [34:0]     adder01_out;
-   logic        [35:0]     adder02_out;
-   logic        [36:0]     adder03_out;
-   logic        [37:0]     adder04_out;
-   logic        [37:0]     adder05_out;
-   logic        [37:0]     adder06_out;
-   logic        [37:0]     adder07_out;
-   logic        [37:0]     adder08_out;
-   logic        [37:0]     adder09_out;
-   logic        [37:0]     adder10_out;
-   logic        [37:0]     adder11_out;
-   logic        [37:0]     adder12_out;
-   logic        [37:0]     adder13_out;
-   logic        [37:0]     adder14_out;
-   logic        [37:0]     adder15_out;
-
-   logic        [64:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),     .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                       .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),        .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),        .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),       .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),       .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + 7'd4 + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[64:0]       = { {33{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[27:0],4'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[3:0] == 4'd00) & ~shortq_enable_ff;
-   assign r_adder01_sel          =  running_state & (quotient_new[3:0] == 4'd01) & ~shortq_enable_ff;
-   assign r_adder02_sel          =  running_state & (quotient_new[3:0] == 4'd02) & ~shortq_enable_ff;
-   assign r_adder03_sel          =  running_state & (quotient_new[3:0] == 4'd03) & ~shortq_enable_ff;
-   assign r_adder04_sel          =  running_state & (quotient_new[3:0] == 4'd04) & ~shortq_enable_ff;
-   assign r_adder05_sel          =  running_state & (quotient_new[3:0] == 4'd05) & ~shortq_enable_ff;
-   assign r_adder06_sel          =  running_state & (quotient_new[3:0] == 4'd06) & ~shortq_enable_ff;
-   assign r_adder07_sel          =  running_state & (quotient_new[3:0] == 4'd07) & ~shortq_enable_ff;
-   assign r_adder08_sel          =  running_state & (quotient_new[3:0] == 4'd08) & ~shortq_enable_ff;
-   assign r_adder09_sel          =  running_state & (quotient_new[3:0] == 4'd09) & ~shortq_enable_ff;
-   assign r_adder10_sel          =  running_state & (quotient_new[3:0] == 4'd10) & ~shortq_enable_ff;
-   assign r_adder11_sel          =  running_state & (quotient_new[3:0] == 4'd11) & ~shortq_enable_ff;
-   assign r_adder12_sel          =  running_state & (quotient_new[3:0] == 4'd12) & ~shortq_enable_ff;
-   assign r_adder13_sel          =  running_state & (quotient_new[3:0] == 4'd13) & ~shortq_enable_ff;
-   assign r_adder14_sel          =  running_state & (quotient_new[3:0] == 4'd14) & ~shortq_enable_ff;
-   assign r_adder15_sel          =  running_state & (quotient_new[3:0] == 4'd15) & ~shortq_enable_ff;
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[28:0],a_ff[31:28]} ) |
-                                   ( {33{r_adder01_sel   }} &  adder01_out[32:0]       ) |
-                                   ( {33{r_adder02_sel   }} &  adder02_out[32:0]       ) |
-                                   ( {33{r_adder03_sel   }} &  adder03_out[32:0]       ) |
-                                   ( {33{r_adder04_sel   }} &  adder04_out[32:0]       ) |
-                                   ( {33{r_adder05_sel   }} &  adder05_out[32:0]       ) |
-                                   ( {33{r_adder06_sel   }} &  adder06_out[32:0]       ) |
-                                   ( {33{r_adder07_sel   }} &  adder07_out[32:0]       ) |
-                                   ( {33{r_adder08_sel   }} &  adder08_out[32:0]       ) |
-                                   ( {33{r_adder09_sel   }} &  adder09_out[32:0]       ) |
-                                   ( {33{r_adder10_sel   }} &  adder10_out[32:0]       ) |
-                                   ( {33{r_adder11_sel   }} &  adder11_out[32:0]       ) |
-                                   ( {33{r_adder12_sel   }} &  adder12_out[32:0]       ) |
-                                   ( {33{r_adder13_sel   }} &  adder13_out[32:0]       ) |
-                                   ( {33{r_adder14_sel   }} &  adder14_out[32:0]       ) |
-                                   ( {33{r_adder15_sel   }} &  adder15_out[32:0]       ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[64:32]       ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}        );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[27:0], quotient_new[3:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[37:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder01_out[34:0]      = {         r_ff[30:0],a_ff[31:28]}  +                                                                   b_ff[34:0];
-   assign adder02_out[35:0]      = {         r_ff[31:0],a_ff[31:28]}  +                                             {b_ff[34:0],1'b0};
-   assign adder03_out[36:0]      = {         r_ff[32:0],a_ff[31:28]}  +                                             {b_ff[35:0],1'b0}  +  b_ff[36:0];
-   assign adder04_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0};
-   assign adder05_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder06_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder07_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder08_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0};
-   assign adder09_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                                              b_ff[37:0];
-   assign adder10_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0};
-   assign adder11_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder12_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0};
-   assign adder13_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder14_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder15_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-
-   assign quotient_raw[01]       = (~adder01_out[34] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder01_out[34:0] == 35'b0) );
-   assign quotient_raw[02]       = (~adder02_out[35] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder02_out[35:0] == 36'b0) );
-   assign quotient_raw[03]       = (~adder03_out[36] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder03_out[36:0] == 37'b0) );
-   assign quotient_raw[04]       = (~adder04_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder04_out[37:0] == 38'b0) );
-   assign quotient_raw[05]       = (~adder05_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder05_out[37:0] == 38'b0) );
-   assign quotient_raw[06]       = (~adder06_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder06_out[37:0] == 38'b0) );
-   assign quotient_raw[07]       = (~adder07_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder07_out[37:0] == 38'b0) );
-   assign quotient_raw[08]       = (~adder08_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder08_out[37:0] == 38'b0) );
-   assign quotient_raw[09]       = (~adder09_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder09_out[37:0] == 38'b0) );
-   assign quotient_raw[10]       = (~adder10_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder10_out[37:0] == 38'b0) );
-   assign quotient_raw[11]       = (~adder11_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder11_out[37:0] == 38'b0) );
-   assign quotient_raw[12]       = (~adder12_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder12_out[37:0] == 38'b0) );
-   assign quotient_raw[13]       = (~adder13_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder13_out[37:0] == 38'b0) );
-   assign quotient_raw[14]       = (~adder14_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder14_out[37:0] == 38'b0) );
-   assign quotient_raw[15]       = (~adder15_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder15_out[37:0] == 38'b0) );
-
-
-   assign quotient_new[0]        = ( quotient_raw[15:01] == 15'b000_0000_0000_0001 ) |  //  1
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[1]        = ( quotient_raw[15:02] == 14'b000_0000_0000_001  ) |  //  2
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[2]        = ( quotient_raw[15:04] == 12'b000_0000_0000_1    ) |  //  4
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[3]        = ( quotient_raw[15:08] ==  8'b000_0000_1         ) |  //  8
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd28);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_4bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-module eb1_exu_div_cls
-  (
-   input  logic [32:0] operand,
-
-   output logic [4:0]  cls                  // Count leading sign bits - "n" format ignoring [32]
-   );
-
-
-   logic [4:0]   cls_zeros;
-   logic [4:0]   cls_ones;
-
-
-assign cls_zeros[4:0]             = ({5{operand[31]    ==  {           1'b1} }} & 5'd00) |
-                                    ({5{operand[31:30] ==  {{ 1{1'b0}},1'b1} }} & 5'd01) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b0}},1'b1} }} & 5'd02) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b0}},1'b1} }} & 5'd03) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b0}},1'b1} }} & 5'd04) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b0}},1'b1} }} & 5'd05) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b0}},1'b1} }} & 5'd06) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b0}},1'b1} }} & 5'd07) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b0}},1'b1} }} & 5'd08) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b0}},1'b1} }} & 5'd09) |
-                                    ({5{operand[31:21] ==  {{10{1'b0}},1'b1} }} & 5'd10) |
-                                    ({5{operand[31:20] ==  {{11{1'b0}},1'b1} }} & 5'd11) |
-                                    ({5{operand[31:19] ==  {{12{1'b0}},1'b1} }} & 5'd12) |
-                                    ({5{operand[31:18] ==  {{13{1'b0}},1'b1} }} & 5'd13) |
-                                    ({5{operand[31:17] ==  {{14{1'b0}},1'b1} }} & 5'd14) |
-                                    ({5{operand[31:16] ==  {{15{1'b0}},1'b1} }} & 5'd15) |
-                                    ({5{operand[31:15] ==  {{16{1'b0}},1'b1} }} & 5'd16) |
-                                    ({5{operand[31:14] ==  {{17{1'b0}},1'b1} }} & 5'd17) |
-                                    ({5{operand[31:13] ==  {{18{1'b0}},1'b1} }} & 5'd18) |
-                                    ({5{operand[31:12] ==  {{19{1'b0}},1'b1} }} & 5'd19) |
-                                    ({5{operand[31:11] ==  {{20{1'b0}},1'b1} }} & 5'd20) |
-                                    ({5{operand[31:10] ==  {{21{1'b0}},1'b1} }} & 5'd21) |
-                                    ({5{operand[31:09] ==  {{22{1'b0}},1'b1} }} & 5'd22) |
-                                    ({5{operand[31:08] ==  {{23{1'b0}},1'b1} }} & 5'd23) |
-                                    ({5{operand[31:07] ==  {{24{1'b0}},1'b1} }} & 5'd24) |
-                                    ({5{operand[31:06] ==  {{25{1'b0}},1'b1} }} & 5'd25) |
-                                    ({5{operand[31:05] ==  {{26{1'b0}},1'b1} }} & 5'd26) |
-                                    ({5{operand[31:04] ==  {{27{1'b0}},1'b1} }} & 5'd27) |
-                                    ({5{operand[31:03] ==  {{28{1'b0}},1'b1} }} & 5'd28) |
-                                    ({5{operand[31:02] ==  {{29{1'b0}},1'b1} }} & 5'd29) |
-                                    ({5{operand[31:01] ==  {{30{1'b0}},1'b1} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{31{1'b0}},1'b1} }} & 5'd31) |
-                                    ({5{operand[31:00] ==  {{32{1'b0}}     } }} & 5'd00);    // Don't care case as it will be handled as special case
-
-
-assign cls_ones[4:0]              = ({5{operand[31:30] ==  {{ 1{1'b1}},1'b0} }} & 5'd00) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b1}},1'b0} }} & 5'd01) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b1}},1'b0} }} & 5'd02) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b1}},1'b0} }} & 5'd03) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b1}},1'b0} }} & 5'd04) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b1}},1'b0} }} & 5'd05) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b1}},1'b0} }} & 5'd06) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b1}},1'b0} }} & 5'd07) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b1}},1'b0} }} & 5'd08) |
-                                    ({5{operand[31:21] ==  {{10{1'b1}},1'b0} }} & 5'd09) |
-                                    ({5{operand[31:20] ==  {{11{1'b1}},1'b0} }} & 5'd10) |
-                                    ({5{operand[31:19] ==  {{12{1'b1}},1'b0} }} & 5'd11) |
-                                    ({5{operand[31:18] ==  {{13{1'b1}},1'b0} }} & 5'd12) |
-                                    ({5{operand[31:17] ==  {{14{1'b1}},1'b0} }} & 5'd13) |
-                                    ({5{operand[31:16] ==  {{15{1'b1}},1'b0} }} & 5'd14) |
-                                    ({5{operand[31:15] ==  {{16{1'b1}},1'b0} }} & 5'd15) |
-                                    ({5{operand[31:14] ==  {{17{1'b1}},1'b0} }} & 5'd16) |
-                                    ({5{operand[31:13] ==  {{18{1'b1}},1'b0} }} & 5'd17) |
-                                    ({5{operand[31:12] ==  {{19{1'b1}},1'b0} }} & 5'd18) |
-                                    ({5{operand[31:11] ==  {{20{1'b1}},1'b0} }} & 5'd19) |
-                                    ({5{operand[31:10] ==  {{21{1'b1}},1'b0} }} & 5'd20) |
-                                    ({5{operand[31:09] ==  {{22{1'b1}},1'b0} }} & 5'd21) |
-                                    ({5{operand[31:08] ==  {{23{1'b1}},1'b0} }} & 5'd22) |
-                                    ({5{operand[31:07] ==  {{24{1'b1}},1'b0} }} & 5'd23) |
-                                    ({5{operand[31:06] ==  {{25{1'b1}},1'b0} }} & 5'd24) |
-                                    ({5{operand[31:05] ==  {{26{1'b1}},1'b0} }} & 5'd25) |
-                                    ({5{operand[31:04] ==  {{27{1'b1}},1'b0} }} & 5'd26) |
-                                    ({5{operand[31:03] ==  {{28{1'b1}},1'b0} }} & 5'd27) |
-                                    ({5{operand[31:02] ==  {{29{1'b1}},1'b0} }} & 5'd28) |
-                                    ({5{operand[31:01] ==  {{30{1'b1}},1'b0} }} & 5'd29) |
-                                    ({5{operand[31:00] ==  {{31{1'b1}},1'b0} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{32{1'b1}}     } }} & 5'd31);
-
-
-assign cls[4:0]                   =  operand[32]  ?  cls_ones[4:0]  :  cls_zeros[4:0];
-
-endmodule // eb1_exu_div_cls
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_mul_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic          clk,              // Top level clock
-   input logic          rst_l,            // Reset
-   input logic          scan_mode,        // Scan mode
-
-   input eb1_mul_pkt_t mul_p,            // {Valid, RS1 signed operand, RS2 signed operand, Select low 32-bits of result}
-
-   input logic [31:0]   rs1_in,           // A operand
-   input logic [31:0]   rs2_in,           // B operand
-
-
-   output logic [31:0]  result_x          // Result
-  );
-
-
-   logic                mul_x_enable;
-   logic                bit_x_enable;
-   logic signed [32:0]  rs1_ext_in;
-   logic signed [32:0]  rs2_ext_in;
-   logic        [65:0]  prod_x;
-   logic                low_x;
-
-
-
-   // *** Start - BitManip ***
-
-   logic                bitmanip_sel_d;
-   logic                bitmanip_sel_x;
-   logic        [31:0]  bitmanip_d;
-   logic        [31:0]  bitmanip_x;
-
-
-
-   // ZBE
-   logic                ap_bext;
-   logic                ap_bdep;
-
-   // ZBC
-   logic                ap_clmul;
-   logic                ap_clmulh;
-   logic                ap_clmulr;
-
-   // ZBP
-   logic                ap_grev;
-   logic                ap_gorc;
-   logic                ap_shfl;
-   logic                ap_unshfl;
-
-   // ZBR
-   logic                ap_crc32_b;
-   logic                ap_crc32_h;
-   logic                ap_crc32_w;
-   logic                ap_crc32c_b;
-   logic                ap_crc32c_h;
-   logic                ap_crc32c_w;
-
-   // ZBF
-   logic                ap_bfp;
-
-
-   if (pt.BITMANIP_ZBE == 1)
-     begin
-       assign ap_bext         =  mul_p.bext;
-       assign ap_bdep         =  mul_p.bdep;
-     end
-   else
-     begin
-       assign ap_bext         =  1'b0;
-       assign ap_bdep         =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBC == 1)
-     begin
-       assign ap_clmul        =  mul_p.clmul;
-       assign ap_clmulh       =  mul_p.clmulh;
-       assign ap_clmulr       =  mul_p.clmulr;
-     end
-   else
-     begin
-       assign ap_clmul        =  1'b0;
-       assign ap_clmulh       =  1'b0;
-       assign ap_clmulr       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_grev         =  mul_p.grev;
-       assign ap_gorc         =  mul_p.gorc;
-       assign ap_shfl         =  mul_p.shfl;
-       assign ap_unshfl       =  mul_p.unshfl;
-     end
-   else
-     begin
-       assign ap_grev         =  1'b0;
-       assign ap_gorc         =  1'b0;
-       assign ap_shfl         =  1'b0;
-       assign ap_unshfl       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBR == 1)
-     begin
-       assign ap_crc32_b      =  mul_p.crc32_b;
-       assign ap_crc32_h      =  mul_p.crc32_h;
-       assign ap_crc32_w      =  mul_p.crc32_w;
-       assign ap_crc32c_b     =  mul_p.crc32c_b;
-       assign ap_crc32c_h     =  mul_p.crc32c_h;
-       assign ap_crc32c_w     =  mul_p.crc32c_w;
-     end
-   else
-     begin
-       assign ap_crc32_b      =  1'b0;
-       assign ap_crc32_h      =  1'b0;
-       assign ap_crc32_w      =  1'b0;
-       assign ap_crc32c_b     =  1'b0;
-       assign ap_crc32c_h     =  1'b0;
-       assign ap_crc32c_w     =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBF == 1)
-     begin
-       assign ap_bfp          =  mul_p.bfp;
-     end
-   else
-     begin
-       assign ap_bfp          =  1'b0;
-     end
-
-
-   // *** End   - BitManip ***
-
-
-
-   assign mul_x_enable           =  mul_p.valid;
-   assign bit_x_enable           =  mul_p.valid;
-
-   assign rs1_ext_in[32]         =  mul_p.rs1_sign & rs1_in[31];
-   assign rs2_ext_in[32]         =  mul_p.rs2_sign & rs2_in[31];
-
-   assign rs1_ext_in[31:0]       =  rs1_in[31:0];
-   assign rs2_ext_in[31:0]       =  rs2_in[31:0];
-
-
-
-   // --------------------------- Multiply       ----------------------------------
-
-
-   logic signed [32:0]  rs1_x;
-   logic signed [32:0]  rs2_x;
-
-   rvdffe #(34) i_a_x_ff         (.*, .clk(clk),  .din({mul_p.low,rs1_ext_in[32:0]}),        .dout({low_x,rs1_x[32:0]}),                 .en(mul_x_enable));
-   rvdffe #(33) i_b_x_ff         (.*, .clk(clk),  .din(           rs2_ext_in[32:0] ),        .dout(       rs2_x[32:0] ),                 .en(mul_x_enable));
-
-
-   assign prod_x[65:0]           =  rs1_x  *  rs2_x;
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BEXT, BDEP   * * * * * * * * * * * * * * * * * *
-
-
-   // *** BEXT == "gather"  ***
-
-   logic        [31:0]    bext_d;
-   logic                  bext_test_bit_d;
-   integer                bext_i, bext_j;
-
-
-   always_comb
-     begin
-
-       bext_j                    =      0;
-       bext_test_bit_d           =   1'b0;
-       bext_d[31:0]              =  32'b0;
-
-       for (bext_i=0; bext_i<32; bext_i++)
-         begin
-             bext_test_bit_d     =  rs2_in[bext_i];
-             if (bext_test_bit_d)
-               begin
-                  bext_d[bext_j] =  rs1_in[bext_i];
-                  bext_j         =  bext_j + 1;
-               end  // IF  bext_test_bit
-         end        // FOR bext_i
-     end            // ALWAYS_COMB
-
-
-
-   // *** BDEP == "scatter" ***
-
-   logic        [31:0]    bdep_d;
-   logic                  bdep_test_bit_d;
-   integer                bdep_i, bdep_j;
-
-
-   always_comb
-     begin
-
-       bdep_j                    =      0;
-       bdep_test_bit_d           =   1'b0;
-       bdep_d[31:0]              =  32'b0;
-
-       for (bdep_i=0; bdep_i<32; bdep_i++)
-         begin
-             bdep_test_bit_d     =  rs2_in[bdep_i];
-             if (bdep_test_bit_d)
-               begin
-                  bdep_d[bdep_i] =  rs1_in[bdep_j];
-                  bdep_j         =  bdep_j + 1;
-               end  // IF  bdep_test_bit
-         end        // FOR bdep_i
-     end            // ALWAYS_COMB
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLMUL, CLMULH, CLMULR  * * * * * * * * * * * * *
-
-   logic        [62:0]    clmul_raw_d;
-
-
-   assign clmul_raw_d[62:0]      = ( {63{rs2_in[00]}} & {31'b0,rs1_in[31:0]      } ) ^
-                                   ( {63{rs2_in[01]}} & {30'b0,rs1_in[31:0], 1'b0} ) ^
-                                   ( {63{rs2_in[02]}} & {29'b0,rs1_in[31:0], 2'b0} ) ^
-                                   ( {63{rs2_in[03]}} & {28'b0,rs1_in[31:0], 3'b0} ) ^
-                                   ( {63{rs2_in[04]}} & {27'b0,rs1_in[31:0], 4'b0} ) ^
-                                   ( {63{rs2_in[05]}} & {26'b0,rs1_in[31:0], 5'b0} ) ^
-                                   ( {63{rs2_in[06]}} & {25'b0,rs1_in[31:0], 6'b0} ) ^
-                                   ( {63{rs2_in[07]}} & {24'b0,rs1_in[31:0], 7'b0} ) ^
-                                   ( {63{rs2_in[08]}} & {23'b0,rs1_in[31:0], 8'b0} ) ^
-                                   ( {63{rs2_in[09]}} & {22'b0,rs1_in[31:0], 9'b0} ) ^
-                                   ( {63{rs2_in[10]}} & {21'b0,rs1_in[31:0],10'b0} ) ^
-                                   ( {63{rs2_in[11]}} & {20'b0,rs1_in[31:0],11'b0} ) ^
-                                   ( {63{rs2_in[12]}} & {19'b0,rs1_in[31:0],12'b0} ) ^
-                                   ( {63{rs2_in[13]}} & {18'b0,rs1_in[31:0],13'b0} ) ^
-                                   ( {63{rs2_in[14]}} & {17'b0,rs1_in[31:0],14'b0} ) ^
-                                   ( {63{rs2_in[15]}} & {16'b0,rs1_in[31:0],15'b0} ) ^
-                                   ( {63{rs2_in[16]}} & {15'b0,rs1_in[31:0],16'b0} ) ^
-                                   ( {63{rs2_in[17]}} & {14'b0,rs1_in[31:0],17'b0} ) ^
-                                   ( {63{rs2_in[18]}} & {13'b0,rs1_in[31:0],18'b0} ) ^
-                                   ( {63{rs2_in[19]}} & {12'b0,rs1_in[31:0],19'b0} ) ^
-                                   ( {63{rs2_in[20]}} & {11'b0,rs1_in[31:0],20'b0} ) ^
-                                   ( {63{rs2_in[21]}} & {10'b0,rs1_in[31:0],21'b0} ) ^
-                                   ( {63{rs2_in[22]}} & { 9'b0,rs1_in[31:0],22'b0} ) ^
-                                   ( {63{rs2_in[23]}} & { 8'b0,rs1_in[31:0],23'b0} ) ^
-                                   ( {63{rs2_in[24]}} & { 7'b0,rs1_in[31:0],24'b0} ) ^
-                                   ( {63{rs2_in[25]}} & { 6'b0,rs1_in[31:0],25'b0} ) ^
-                                   ( {63{rs2_in[26]}} & { 5'b0,rs1_in[31:0],26'b0} ) ^
-                                   ( {63{rs2_in[27]}} & { 4'b0,rs1_in[31:0],27'b0} ) ^
-                                   ( {63{rs2_in[28]}} & { 3'b0,rs1_in[31:0],28'b0} ) ^
-                                   ( {63{rs2_in[29]}} & { 2'b0,rs1_in[31:0],29'b0} ) ^
-                                   ( {63{rs2_in[30]}} & { 1'b0,rs1_in[31:0],30'b0} ) ^
-                                   ( {63{rs2_in[31]}} & {      rs1_in[31:0],31'b0} );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GREV         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t grev32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x = ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x = ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x = ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x = ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x = ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    grev1_d;
-   logic        [31:0]    grev2_d;
-   logic        [31:0]    grev4_d;
-   logic        [31:0]    grev8_d;
-   logic        [31:0]    grev_d;
-
-
-   assign grev1_d[31:0]       = (rs2_in[0])  ?  {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                 rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                 rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                 rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]}  :  rs1_in[31:0];
-
-   assign grev2_d[31:0]       = (rs2_in[1])  ?  {grev1_d[29:28],grev1_d[31:30],grev1_d[25:24],grev1_d[27:26],
-                                                 grev1_d[21:20],grev1_d[23:22],grev1_d[17:16],grev1_d[19:18],
-                                                 grev1_d[13:12],grev1_d[15:14],grev1_d[09:08],grev1_d[11:10],
-                                                 grev1_d[05:04],grev1_d[07:06],grev1_d[01:00],grev1_d[03:02]}  :  grev1_d[31:0];
-
-   assign grev4_d[31:0]       = (rs2_in[2])  ?  {grev2_d[27:24],grev2_d[31:28],grev2_d[19:16],grev2_d[23:20],
-                                                 grev2_d[11:08],grev2_d[15:12],grev2_d[03:00],grev2_d[07:04]}  :  grev2_d[31:0];
-
-   assign grev8_d[31:0]       = (rs2_in[3])  ?  {grev4_d[23:16],grev4_d[31:24],grev4_d[07:00],grev4_d[15:08]}  :  grev4_d[31:0];
-
-   assign grev_d[31:0]        = (rs2_in[4])  ?  {grev8_d[15:00],grev8_d[31:16]}  :  grev8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GORC         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x |= ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x |= ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x |= ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x |= ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x |= ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    gorc1_d;
-   logic        [31:0]    gorc2_d;
-   logic        [31:0]    gorc4_d;
-   logic        [31:0]    gorc8_d;
-   logic        [31:0]    gorc_d;
-
-
-   assign gorc1_d[31:0]       = ( {32{rs2_in[0]}} & {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                     rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                     rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                     rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]} ) | rs1_in[31:0];
-
-   assign gorc2_d[31:0]       = ( {32{rs2_in[1]}} & {gorc1_d[29:28],gorc1_d[31:30],gorc1_d[25:24],gorc1_d[27:26],
-                                                     gorc1_d[21:20],gorc1_d[23:22],gorc1_d[17:16],gorc1_d[19:18],
-                                                     gorc1_d[13:12],gorc1_d[15:14],gorc1_d[09:08],gorc1_d[11:10],
-                                                     gorc1_d[05:04],gorc1_d[07:06],gorc1_d[01:00],gorc1_d[03:02]} ) | gorc1_d[31:0];
-
-   assign gorc4_d[31:0]       = ( {32{rs2_in[2]}} & {gorc2_d[27:24],gorc2_d[31:28],gorc2_d[19:16],gorc2_d[23:20],
-                                                     gorc2_d[11:08],gorc2_d[15:12],gorc2_d[03:00],gorc2_d[07:04]} ) | gorc2_d[31:0];
-
-   assign gorc8_d[31:0]       = ( {32{rs2_in[3]}} & {gorc4_d[23:16],gorc4_d[31:24],gorc4_d[07:00],gorc4_d[15:08]} ) | gorc4_d[31:0];
-
-   assign gorc_d[31:0]        = ( {32{rs2_in[4]}} & {gorc8_d[15:00],gorc8_d[31:16]} ) | gorc8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SHFL, UNSHLF * * * * * * * * * * * * * * * * * *
-
-   // uint32_t shuffle32_stage (uint32_t src, uint32_t maskL, uint32_t maskR, int N)
-   // {
-   //     uint32_t x  = src & ~(maskL | maskR);
-   //     x          |= ((src << N) & maskL) | ((src >> N) & maskR);
-   //     return x;
-   // }
-   //
-   //
-   //
-   // uint32_t shfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    shfl8_d;
-   logic        [31:0]    shfl4_d;
-   logic        [31:0]    shfl2_d;
-   logic        [31:0]    shfl_d;
-
-
-
-   assign shfl8_d[31:0]       = (rs2_in[3])  ?  {rs1_in[31:24],rs1_in[15:08],rs1_in[23:16],rs1_in[07:00]}      :  rs1_in[31:0];
-
-   assign shfl4_d[31:0]       = (rs2_in[2])  ?  {shfl8_d[31:28],shfl8_d[23:20],shfl8_d[27:24],shfl8_d[19:16],
-                                                 shfl8_d[15:12],shfl8_d[07:04],shfl8_d[11:08],shfl8_d[03:00]}  :  shfl8_d[31:0];
-
-   assign shfl2_d[31:0]       = (rs2_in[1])  ?  {shfl4_d[31:30],shfl4_d[27:26],shfl4_d[29:28],shfl4_d[25:24],
-                                                 shfl4_d[23:22],shfl4_d[19:18],shfl4_d[21:20],shfl4_d[17:16],
-                                                 shfl4_d[15:14],shfl4_d[11:10],shfl4_d[13:12],shfl4_d[09:08],
-                                                 shfl4_d[07:06],shfl4_d[03:02],shfl4_d[05:04],shfl4_d[01:00]}  :  shfl4_d[31:0];
-
-   assign shfl_d[31:0]        = (rs2_in[0])  ?  {shfl2_d[31],shfl2_d[29],shfl2_d[30],shfl2_d[28],shfl2_d[27],shfl2_d[25],shfl2_d[26],shfl2_d[24],
-                                                 shfl2_d[23],shfl2_d[21],shfl2_d[22],shfl2_d[20],shfl2_d[19],shfl2_d[17],shfl2_d[18],shfl2_d[16],
-                                                 shfl2_d[15],shfl2_d[13],shfl2_d[14],shfl2_d[12],shfl2_d[11],shfl2_d[09],shfl2_d[10],shfl2_d[08],
-                                                 shfl2_d[07],shfl2_d[05],shfl2_d[06],shfl2_d[04],shfl2_d[03],shfl2_d[01],shfl2_d[02],shfl2_d[00]}  :  shfl2_d[31:0];
-
-
-
-
-   // uint32_t unshfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    unshfl1_d;
-   logic        [31:0]    unshfl2_d;
-   logic        [31:0]    unshfl4_d;
-   logic        [31:0]    unshfl_d;
-
-
-   assign unshfl1_d[31:0]     = (rs2_in[0])  ?  {rs1_in[31],rs1_in[29],rs1_in[30],rs1_in[28],rs1_in[27],rs1_in[25],rs1_in[26],rs1_in[24],
-                                                 rs1_in[23],rs1_in[21],rs1_in[22],rs1_in[20],rs1_in[19],rs1_in[17],rs1_in[18],rs1_in[16],
-                                                 rs1_in[15],rs1_in[13],rs1_in[14],rs1_in[12],rs1_in[11],rs1_in[09],rs1_in[10],rs1_in[08],
-                                                 rs1_in[07],rs1_in[05],rs1_in[06],rs1_in[04],rs1_in[03],rs1_in[01],rs1_in[02],rs1_in[00]}  :  rs1_in[31:0];
-
-   assign unshfl2_d[31:0]     = (rs2_in[1])  ?  {unshfl1_d[31:30],unshfl1_d[27:26],unshfl1_d[29:28],unshfl1_d[25:24],
-                                                 unshfl1_d[23:22],unshfl1_d[19:18],unshfl1_d[21:20],unshfl1_d[17:16],
-                                                 unshfl1_d[15:14],unshfl1_d[11:10],unshfl1_d[13:12],unshfl1_d[09:08],
-                                                 unshfl1_d[07:06],unshfl1_d[03:02],unshfl1_d[05:04],unshfl1_d[01:00]}  :  unshfl1_d[31:0];
-
-   assign unshfl4_d[31:0]     = (rs2_in[2])  ?  {unshfl2_d[31:28],unshfl2_d[23:20],unshfl2_d[27:24],unshfl2_d[19:16],
-                                                 unshfl2_d[15:12],unshfl2_d[07:04],unshfl2_d[11:08],unshfl2_d[03:00]}  :  unshfl2_d[31:0];
-
-   assign unshfl_d[31:0]      = (rs2_in[3])  ?  {unshfl4_d[31:24],unshfl4_d[15:08],unshfl4_d[23:16],unshfl4_d[07:00]}  :  unshfl4_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CRC32, CRC32c  * * * * * * * * * * * * * * * * *
-
-   // ***  computed from   https: //crccalc.com  ***
-   //
-   // "a" is 8'h61 = 8'b0110_0001    (8'h61 ^ 8'hff = 8'h9e)
-   //
-   // Input must first be XORed with 32'hffff_ffff
-   //
-   //
-   // CRC32
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     e8b7be43      ffffff9e   174841bc
-   // "aa"    078a19d7      ffff9e9e   f875e628
-   // "aaaa"  ad98e545      9e9e9e9e   5267a1ba
-   //
-   //
-   //
-   // CRC32c
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     c1d04330      ffffff9e   3e2fbccf
-   // "aa"    f1f2dac2      ffff9e9e   0e0d253d
-   // "aaaa"  6a52eeb0      9e9e9e9e   95ad114f
-
-
-   logic                  crc32_all;
-   logic        [31:0]    crc32_poly_rev;
-   logic        [31:0]    crc32c_poly_rev;
-   integer                crc32_bi, crc32_hi, crc32_wi, crc32c_bi, crc32c_hi, crc32c_wi;
-   logic        [31:0]    crc32_bd, crc32_hd, crc32_wd, crc32c_bd, crc32c_hd, crc32c_wd;
-
-
-   assign crc32_all              =  ap_crc32_b  | ap_crc32_h  | ap_crc32_w | ap_crc32c_b | ap_crc32c_h | ap_crc32c_w;
-
-   assign crc32_poly_rev[31:0]   =  32'hEDB88320;    // bit reverse of 32'h04C11DB7
-   assign crc32c_poly_rev[31:0]  =  32'h82F63B78;    // bit reverse of 32'h1EDC6F41
-
-
-   always_comb
-     begin
-       crc32_bd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_bi=0; crc32_bi<8; crc32_bi++)
-         begin
-            crc32_bd[31:0] = (crc32_bd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_bd[0]}});
-         end      // FOR    crc32_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_hd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_hi=0; crc32_hi<16; crc32_hi++)
-         begin
-            crc32_hd[31:0] = (crc32_hd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_hd[0]}});
-         end      // FOR    crc32_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_wd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_wi=0; crc32_wi<32; crc32_wi++)
-         begin
-            crc32_wd[31:0] = (crc32_wd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_wd[0]}});
-         end      // FOR    crc32_wi
-     end          // ALWAYS_COMB
-
-
-
-
-   always_comb
-     begin
-       crc32c_bd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_bi=0; crc32c_bi<8; crc32c_bi++)
-         begin
-            crc32c_bd[31:0] = (crc32c_bd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_bd[0]}});
-         end      // FOR    crc32c_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_hd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_hi=0; crc32c_hi<16; crc32c_hi++)
-         begin
-            crc32c_hd[31:0] = (crc32c_hd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_hd[0]}});
-         end      // FOR    crc32c_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_wd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_wi=0; crc32c_wi<32; crc32c_wi++)
-         begin
-            crc32c_wd[31:0] = (crc32c_wd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_wd[0]}});
-         end      // FOR    crc32c_wi
-     end          // ALWAYS_COMB
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BFP          * * * * * * * * * * * * * * * * * *
-
-   logic        [4:0]     bfp_len;
-   logic        [4:0]     bfp_off;
-   logic        [31:0]    bfp_len_mask_;
-   logic        [15:0]    bfp_preshift_data;
-   logic        [63:0]    bfp_shift_data;
-   logic        [63:0]    bfp_shift_mask;
-   logic        [31:0]    bfp_result_d;
-
-
-   assign bfp_len[3:0]           =  rs2_in[27:24];
-   assign bfp_len[4]             = (bfp_len[3:0] == 4'b0);   // If LEN field is zero, then LEN=16
-   assign bfp_off[4:0]           =  rs2_in[20:16];
-
-   assign bfp_len_mask_[31:0]    =  32'hffff_ffff  <<  bfp_len[4:0];
-   assign bfp_preshift_data[15:0]=  rs2_in[15:0] & ~bfp_len_mask_[15:0];
-
-   assign bfp_shift_data[63:0]   = {16'b0,bfp_preshift_data[15:0], 16'b0,bfp_preshift_data[15:0]}  <<  bfp_off[4:0];
-   assign bfp_shift_mask[63:0]   = {bfp_len_mask_[31:0],           bfp_len_mask_[31:0]}            <<  bfp_off[4:0];
-
-   assign bfp_result_d[31:0]     = bfp_shift_data[63:32] | (rs1_in[31:0] & bfp_shift_mask[63:32]);
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  Common logic * * * * * * * * * * * * * * * * * *
-
-
-   assign bitmanip_sel_d         =  ap_bext | ap_bdep | ap_clmul | ap_clmulh | ap_clmulr | ap_grev | ap_gorc | ap_shfl | ap_unshfl | crc32_all | ap_bfp;
-
-   assign bitmanip_d[31:0]       = ( {32{ap_bext}}     &       bext_d[31:0]        ) |
-                                   ( {32{ap_bdep}}     &       bdep_d[31:0]        ) |
-                                   ( {32{ap_clmul}}    &       clmul_raw_d[31:0]   ) |
-                                   ( {32{ap_clmulh}}   & {1'b0,clmul_raw_d[62:32]} ) |
-                                   ( {32{ap_clmulr}}   &       clmul_raw_d[62:31]  ) |
-                                   ( {32{ap_grev}}     &       grev_d[31:0]        ) |
-                                   ( {32{ap_gorc}}     &       gorc_d[31:0]        ) |
-                                   ( {32{ap_shfl}}     &       shfl_d[31:0]        ) |
-                                   ( {32{ap_unshfl}}   &       unshfl_d[31:0]      ) |
-                                   ( {32{ap_crc32_b}}  &       crc32_bd[31:0]      ) |
-                                   ( {32{ap_crc32_h}}  &       crc32_hd[31:0]      ) |
-                                   ( {32{ap_crc32_w}}  &       crc32_wd[31:0]      ) |
-                                   ( {32{ap_crc32c_b}} &       crc32c_bd[31:0]     ) |
-                                   ( {32{ap_crc32c_h}} &       crc32c_hd[31:0]     ) |
-                                   ( {32{ap_crc32c_w}} &       crc32c_wd[31:0]     ) |
-                                   ( {32{ap_bfp}}      &       bfp_result_d[31:0]  );
-
-
-
-   rvdffe #(33) i_bitmanip_ff    (.*, .clk(clk),  .din({bitmanip_sel_d,bitmanip_d[31:0]}),   .dout({bitmanip_sel_x,bitmanip_x[31:0]}),   .en(bit_x_enable));
-
-
-
-
-   assign result_x[31:0]         =  ( {32{~bitmanip_sel_x & ~low_x}} & prod_x[63:32]    ) |
-                                    ( {32{~bitmanip_sel_x &  low_x}} & prod_x[31:0]     ) |
-                                                                       bitmanip_x[31:0];
-
-
-
-endmodule  // eb1_exu_mul_ctl
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-//********************************************************************************
-// Function: Top level file for Icache, Fetch, Branch prediction & Aligner
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic rst_l,                        // reset, active low
-
-   input logic dec_i0_decode_d,              // Valid instruction at D and not blocked
-
-   input logic exu_flush_final, // flush, includes upper and lower
-   input logic dec_tlu_i0_commit_cmt , // committed i0
-   input logic dec_tlu_flush_err_wb , // flush due to parity error.
-   input logic dec_tlu_flush_noredir_wb, // don't fetch, validated with exu_flush_final
-   input logic [31:1] exu_flush_path_final, // flush fetch address
-
-   input logic [31:0]  dec_tlu_mrac_ff ,// Side_effect , cacheable for each region
-   input logic         dec_tlu_fence_i_wb, // fence.i, invalidate icache, validated with exu_flush_final
-   input logic         dec_tlu_flush_leak_one_wb, // ignore bp for leak one fetches
-
-   input logic                       dec_tlu_bpred_disable,     // disable all branch prediction
-   input logic                       dec_tlu_core_ecc_disable,  // disable ecc checking and flagging
-   input logic                       dec_tlu_force_halt,        // force halt
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-   input  logic                      ifu_bus_clk_en,
-
-   input  logic                      dma_iccm_req,
-   input  logic [31:0]               dma_mem_addr,
-   input  logic [2:0]                dma_mem_sz,
-   input  logic                      dma_mem_write,
-   input  logic [63:0]               dma_mem_wdata,
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-
-   input  logic                      dma_iccm_stall_any,
-   output logic                      iccm_dma_ecc_error,
-   output logic                      iccm_dma_rvalid,
-   output logic [63:0]               iccm_dma_rdata,
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,
-
-   output logic       ifu_pmu_instr_aligned,
-   output logic       ifu_pmu_fetch_stall,
-   output logic       ifu_ic_error_start,     // has all of the I$ ecc/parity for data/tag
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]              ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]                     ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   output logic [70:0]               ifu_ic_debug_rd_data,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select the premux data.
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]               iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-
-   output logic                      ifu_iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-
-// Perf counter sigs
-   output logic       ifu_pmu_ic_miss, // ic miss
-   output logic       ifu_pmu_ic_hit, // ic hit
-   output logic       ifu_pmu_bus_error, // iside bus error
-   output logic       ifu_pmu_bus_busy,  // iside bus busy
-   output logic       ifu_pmu_bus_trxn, // iside bus transactions
-
-
-   output logic       ifu_i0_icaf,         // Instruction 0 access fault. From Aligner to Decode
-   output logic [1:0] ifu_i0_icaf_type, // Instruction 0 access fault type
-
-   output logic  ifu_i0_valid,        // Instruction 0 valid. From Aligner to Decode
-   output logic  ifu_i0_icaf_second,  // Instruction 0 has access fault on second 2B of 4B inst
-   output logic  ifu_i0_dbecc,        // Instruction 0 has double bit ecc error
-   output logic  iccm_dma_sb_error,   // Single Bit ECC error from a DMA access
-   output logic[31:0] ifu_i0_instr,   // Instruction 0 . From Aligner to Decode
-   output logic[31:1] ifu_i0_pc,      // Instruction 0 pc. From Aligner to Decode
-   output logic ifu_i0_pc4,           // Instruction 0 is 4 byte. From Aligner to Decode
-
-   output logic ifu_miss_state_idle,   // There is no outstanding miss. Cache miss state is idle.
-
-   output eb1_br_pkt_t i0_brp,           // Instruction 0 branch packet. From Aligner to Decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr, // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag, // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // slot0 update/error pkt
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   input dec_tlu_flush_lower_wb,
-
-   output logic [15:0] ifu_i0_cinst,
-
-
-/// Icache debug
-   input  eb1_cache_debug_pkt_t        dec_tlu_ic_diag_pkt ,
-   output logic                    ifu_ic_debug_rd_data_valid,
-   output logic                                iccm_buf_correct_ecc,
-   output logic                                iccm_correction_state,
-
-   input logic scan_mode
-   );
-
-   localparam TAGWIDTH = 2 ;
-   localparam IDWIDTH  = 2 ;
-
-   logic                   ifu_fb_consume1, ifu_fb_consume2;
-   logic [31:1]            ifc_fetch_addr_f;
-   logic [31:1]            ifc_fetch_addr_bf;
-
-   logic [1:0]   ifu_fetch_val;  // valids on a 2B boundary, left justified [7] implies valid fetch
-   logic [31:1]  ifu_fetch_pc;   // starting pc of fetch
-
-   logic iccm_rd_ecc_single_err, ic_error_start;
-   assign ifu_iccm_rd_ecc_single_err = iccm_rd_ecc_single_err;
-   assign ifu_ic_error_start = ic_error_start;
-
-
-   logic        ic_write_stall;
-   logic        ic_dma_active;
-   logic        ifc_dma_access_ok;
-   logic [1:0]  ic_access_fault_f;
-   logic [1:0]  ic_access_fault_type_f;
-   logic        ifu_ic_mb_empty;
-
-   logic ic_hit_f;
-
-   logic [1:0] ifu_bp_way_f; // way indication; right justified
-   logic       ifu_bp_hit_taken_f; // kill next fetch; taken target found
-   logic [31:1] ifu_bp_btb_target_f; //  predicted target PC
-   logic        ifu_bp_inst_mask_f; // tell ic which valids to kill because of a taken branch; right justified
-   logic [1:0]  ifu_bp_hist1_f; // history counters for all 4 potential branches; right justified
-   logic [1:0]  ifu_bp_hist0_f; // history counters for all 4 potential branches; right justified
-   logic [11:0] ifu_bp_poffset_f; // predicted target
-   logic [1:0]  ifu_bp_ret_f; // predicted ret ; right justified
-   logic [1:0]  ifu_bp_pc4_f; // pc4 indication; right justified
-   logic [1:0]  ifu_bp_valid_f; // branch valid, right justified
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f;
-   logic [1:0] [$clog2(pt.BTB_SIZE)-1:0] ifu_bp_fa_index_f;
-
-
-   // fetch control
-   eb1_ifu_ifc_ctl #(.pt(pt)) ifc (.*
-                    );
-
-   // branch predictor
-   if (pt.BTB_ENABLE==1) begin  : bpred
-      eb1_ifu_bp_ctl #(.pt(pt)) bp (.*);
-   end
-   else begin : bpred
-      assign ifu_bp_hit_taken_f = '0;
-      // verif wires
-      logic btb_wr_en_way0, btb_wr_en_way1,dec_tlu_error_wb;
-      logic [16+pt.BTB_BTAG_SIZE:0] btb_wr_data;
-      assign btb_wr_en_way0 = '0;
-      assign btb_wr_en_way1 = '0;
-      assign btb_wr_data = '0;
-      assign dec_tlu_error_wb ='0;
-      assign ifu_bp_inst_mask_f = 1'b1;
-   end
-
-
-   logic [1:0]   ic_fetch_val_f;
-   logic [31:0] ic_data_f;
-   logic [31:0] ifu_fetch_data_f;
-   logic ifc_fetch_req_f;
-   logic ifc_fetch_req_f_raw;
-   logic [1:0] iccm_rd_ecc_double_err;  // This fetch has an iccm double error.
-
-   logic ifu_async_error_start;
-
-
-   assign ifu_fetch_data_f[31:0] = ic_data_f[31:0];
-   assign ifu_fetch_val[1:0] = ic_fetch_val_f[1:0];
-   assign ifu_fetch_pc[31:1] = ifc_fetch_addr_f[31:1];
-
- logic                       ifc_fetch_uncacheable_bf;      // The fetch request is uncacheable space. BF stage
- logic                       ifc_fetch_req_bf;              // Fetch request. Comes with the address.  BF stage
- logic                       ifc_fetch_req_bf_raw;          // Fetch request without some qualifications. Used for clock-gating. BF stage
- logic                       ifc_iccm_access_bf;            // This request is to the ICCM. Do not generate misses to the bus.
- logic                       ifc_region_acc_fault_bf;       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   // aligner
-
-   eb1_ifu_aln_ctl #(.pt(pt)) aln (
-                                    .*
-                                    );
-
-
-   // icache
-   eb1_ifu_mem_ctl #(.pt(pt)) mem_ctl
-     (.*,
-      .ic_data_f(ic_data_f[31:0])
-      );
-
-
-
-   // Performance debug info
-   //
-   //
-`ifdef DUMP_BTB_ON
-   logic              exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_way; // conditional branch mispredict
-   logic exu_mp_ataken; // direction is actual taken
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-
-   assign exu_mp_valid = exu_mp_pkt.misp; // conditional branch mispredict
-   assign exu_mp_ataken = exu_mp_pkt.ataken;  // direction is actual taken
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // branch is a jump always
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_f;
- `define DEC `CPU_TOP.dec
- `define EXU `CPU_TOP.exu
-   eb1_btb_addr_hash f2hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   logic [31:0] mppc_ns, mppc;
-   logic        exu_flush_final_d1;
-   assign mppc_ns[31:1] = `EXU.i0_flush_upper_x ? `EXU.exu_i0_pc_x : `EXU.dec_i0_pc_d;
-   assign mppc_ns[0] = 1'b0;
-   rvdff #(33)  junk_ff (.*, .clk(active_clk), .din({mppc_ns[31:0], exu_flush_final}), .dout({mppc[31:0], exu_flush_final_d1}));
-   logic  tmp_bnk;
-   assign tmp_bnk = bpred.bp.btb_sel_f[1];
-
-   always @(negedge clk) begin
-      if(`DEC.tlu.mcyclel[31:0] == 32'h0000_0010) begin
-         $display("BTB_CONFIG: %d",pt.BTB_SIZE);
-         `ifndef BP_NOGSHARE
-         $display("BHT_CONFIG: %d gshare: 1",pt.BHT_SIZE);
-         `else
-         $display("BHT_CONFIG: %d gshare: 0",pt.BHT_SIZE);
-         `endif
-         $display("RS_CONFIG: %d", pt.RET_STACK_SIZE);
-      end
-       if(exu_flush_final_d1 & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error) & (exu_mp_pkt.misp | exu_mp_pkt.ataken))
-         $display("%7d BTB_MP  : index: %0h bank: %0h call: %b ret: %b ataken: %b hist: %h valid: %b tag: %h targ: %h eghr: %b pred: %b ghr_index: %h brpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha, exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO], 1'b0, exu_mp_call, exu_mp_ret, exu_mp_ataken, exu_mp_hist[1:0], exu_mp_valid, exu_mp_btag[pt.BTB_BTAG_SIZE-1:0], {exu_flush_path_final[31:1], 1'b0}, exu_mp_eghr[pt.BHT_GHR_SIZE-1:0], exu_mp_valid, bpred.bp.bht_wr_addr0, mppc[31:0], exu_mp_pkt.way);
-
-     for(int i = 0; i < 8; i++) begin
-      if(ifu_bp_valid_f[i] & ifc_fetch_req_f)
-        $display("%7d BTB_HIT : index: %0h bank: %0h call: %b ret: %b taken: %b strength: %b tag: %h targ: %0h ghr: %4b ghr_index: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],bpred.bp.btb_sel_f[1], bpred.bp.btb_rd_call_f, bpred.bp.btb_rd_ret_f, ifu_bp_hist1_f[tmp_bnk], ifu_bp_hist0_f[tmp_bnk], bpred.bp.fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0], {ifu_bp_btb_target_f[31:1], 1'b0}, bpred.bp.fghr[pt.BHT_GHR_SIZE-1:0], bpred.bp.bht_rd_addr_f, ifu_bp_way_f[tmp_bnk]);
-     end
-      if(dec_tlu_br0_r_pkt.valid & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error))
-        $display("%7d BTB_UPD0: ghr_index: %0h bank: %0h hist: %h  way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,bpred.bp.br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO],{dec_tlu_br0_r_pkt.middle}, dec_tlu_br0_r_pkt.hist, dec_tlu_br0_r_pkt.way);
-
-      if(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error)
-        $display("%7d BTB_ERR0: index: %0h bank: %0h start: %b rfpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],1'b0, dec_tlu_br0_r_pkt.br_start_error, {exu_flush_path_final[31:1], 1'b0}, dec_tlu_br0_r_pkt.way);
-   end // always @ (negedge clk)
-      function [1:0] encode4_2;
-      input [3:0] in;
-
-      encode4_2[1] = in[3] | in[2];
-      encode4_2[0] = in[3] | in[1];
-
-   endfunction
-`endif
-endmodule // eb1_ifu
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Instruction aligner
-//********************************************************************************
-module eb1_ifu_aln_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-
-   input logic                                    scan_mode,                // Flop scan mode control
-   input logic                                    rst_l,                    // reset, active low
-   input logic                                    clk,                      // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                    active_clk,               // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-
-   input logic                                    ifu_async_error_start,    // ecc/parity related errors with current fetch - not sent down the pipe
-
-   input logic [1:0]                              iccm_rd_ecc_double_err,   // This fetch has a double ICCM ecc  error.
-
-   input logic [1:0]                              ic_access_fault_f,        // Instruction access fault for the current fetch.
-   input logic [1:0]                              ic_access_fault_type_f,   // Instruction access fault types
-
-   input logic                                    exu_flush_final,          // Flush from the pipeline.
-
-   input logic                                    dec_i0_decode_d,          // Valid instruction at D-stage and not blocked
-
-   input logic [31:0]                             ifu_fetch_data_f,         // fetch data in memory format - not right justified
-
-   input logic [1:0]                              ifu_fetch_val,            // valids on a 2B boundary, right justified
-   input logic [31:1]                             ifu_fetch_pc,             // starting pc of fetch
-
-
-
-   output logic                                   ifu_i0_valid,             // Instruction 0 is valid
-   output logic                                   ifu_i0_icaf,              // Instruction 0 has access fault
-   output logic [1:0]                             ifu_i0_icaf_type,         // Instruction 0 access fault type
-   output logic                                   ifu_i0_icaf_second,       // Instruction 0 has access fault on second 2B of 4B inst
-
-   output logic                                   ifu_i0_dbecc,             // Instruction 0 has double bit ecc error
-   output logic [31:0]                            ifu_i0_instr,             // Instruction 0
-   output logic [31:1]                            ifu_i0_pc,                // Instruction 0 PC
-   output logic                                   ifu_i0_pc4,
-
-   output logic                                   ifu_fb_consume1,          // Consumed one buffer. To fetch control fetch for buffer mass balance
-   output logic                                   ifu_fb_consume2,          // Consumed two buffers.To fetch control fetch for buffer mass balance
-
-
-   input logic [pt.BHT_GHR_SIZE-1:0]              ifu_bp_fghr_f,            // fetch GHR
-   input logic [31:1]                             ifu_bp_btb_target_f,      // predicted RET target
-   input logic [11:0]                             ifu_bp_poffset_f,         // predicted target offset
-   input logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f,        // predicted branch index (fully associative option)
-
-   input logic [1:0]                              ifu_bp_hist0_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_hist1_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_pc4_f,             // pc4 indication, right justified
-   input logic [1:0]                              ifu_bp_way_f,             // way indication, right justified
-   input logic [1:0]                              ifu_bp_valid_f,           // branch valid, right justified
-   input logic [1:0]                              ifu_bp_ret_f,             // predicted ret indication, right justified
-
-
-   output eb1_br_pkt_t                           i0_brp,                   // Branch packet for I0.
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]   ifu_i0_bp_index,          // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0]             ifu_i0_bp_fghr,           // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0]            ifu_i0_bp_btag,           // BP tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   output logic                                   ifu_pmu_instr_aligned,    // number of inst aligned this cycle
-
-   output logic [15:0]                            ifu_i0_cinst              // 16b compress inst for i0
-   );
-
-
-
-   logic                                          ifvalid;
-   logic                                          shift_f1_f0, shift_f2_f0, shift_f2_f1;
-   logic                                          fetch_to_f0, fetch_to_f1, fetch_to_f2;
-
-   logic [1:0]                                    f2val_in, f2val;
-   logic [1:0]                                    f1val_in, f1val;
-   logic [1:0]                                    f0val_in, f0val;
-   logic [1:0]                                    sf1val, sf0val;
-
-   logic [31:0]                                   aligndata;
-   logic                                          first4B, first2B;
-
-   logic [31:0]                                   uncompress0;
-   logic                                          i0_shift;
-   logic                                          shift_2B, shift_4B;
-   logic                                          f1_shift_2B;
-   logic                                          f2_valid, sf1_valid, sf0_valid;
-
-   logic [31:0]                                   ifirst;
-   logic [1:0]                                    alignval;
-   logic [31:1]                                   firstpc, secondpc;
-
-   logic [11:0]                                   f1poffset;
-   logic [11:0]                                   f0poffset;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f1fghr;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f0fghr;
-   logic [1:0]                                    f1hist1;
-   logic [1:0]                                    f0hist1;
-   logic [1:0]                                    f1hist0;
-   logic [1:0]                                    f0hist0;
-
-   logic [1:0][$clog2(pt.BTB_SIZE)-1:0]           f0index, f1index, alignindex;
-
-   logic [1:0]                                    f1ictype;
-   logic [1:0]                                    f0ictype;
-
-   logic [1:0]                                    f1pc4;
-   logic [1:0]                                    f0pc4;
-
-   logic [1:0]                                    f1ret;
-   logic [1:0]                                    f0ret;
-   logic [1:0]                                    f1way;
-   logic [1:0]                                    f0way;
-
-   logic [1:0]                                    f1brend;
-   logic [1:0]                                    f0brend;
-
-   logic [1:0]                                    alignbrend;
-   logic [1:0]                                    alignpc4;
-
-   logic [1:0]                                    alignret;
-   logic [1:0]                                    alignway;
-   logic [1:0]                                    alignhist1;
-   logic [1:0]                                    alignhist0;
-   logic [1:1]                                    alignfromf1;
-   logic                                          i0_ends_f1;
-   logic                                          i0_br_start_error;
-
-   logic [31:1]                                   f1prett;
-   logic [31:1]                                   f0prett;
-   logic [1:0]                                    f1dbecc;
-   logic [1:0]                                    f0dbecc;
-   logic [1:0]                                    f1icaf;
-   logic [1:0]                                    f0icaf;
-
-   logic [1:0]                                    aligndbecc;
-   logic [1:0]                                    alignicaf;
-   logic                                          i0_brp_pc4;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]          firstpc_hash, secondpc_hash;
-
-   logic                                          first_legal;
-
-   logic [1:0]                                    wrptr, wrptr_in;
-   logic [1:0]                                    rdptr, rdptr_in;
-   logic [2:0]                                    qwen;
-   logic [31:0]                                   q2,q1,q0;
-   logic                                          q2off_in, q2off;
-   logic                                          q1off_in, q1off;
-   logic                                          q0off_in, q0off;
-   logic                                          f0_shift_2B;
-
-   logic [31:0]                                   q0eff;
-   logic [31:0]                                   q0final;
-   logic                                          q0ptr;
-   logic [1:0]                                    q0sel;
-
-   logic [31:0]                                   q1eff;
-   logic [15:0]                                   q1final;
-   logic                                          q1ptr;
-   logic [1:0]                                    q1sel;
-
-   logic [2:0]                                    qren;
-
-   logic                                          consume_fb1, consume_fb0;
-   logic [1:0]                                    icaf_eff;
-
-   localparam                                     BRDATA_SIZE  = pt.BTB_ENABLE ? 16+($clog2(pt.BTB_SIZE)*2*pt.BTB_FULLYA) : 2;
-   localparam                                     BRDATA_WIDTH = pt.BTB_ENABLE ? 8+($clog2(pt.BTB_SIZE)*pt.BTB_FULLYA) : 1;
-   logic [BRDATA_SIZE-1:0]                        brdata_in, brdata2, brdata1, brdata0;
-   logic [BRDATA_SIZE-1:0]                        brdata1eff, brdata0eff;
-   logic [BRDATA_SIZE-1:0]                        brdata1final, brdata0final;
-
-   localparam                                     MHI   = 1+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-   localparam                                     MSIZE = 2+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-
-   logic [MHI:0]                                  misc_data_in, misc2, misc1, misc0;
-   logic [MHI:0]                                  misc1eff, misc0eff;
-
-   logic [pt.BTB_BTAG_SIZE-1:0]                  firstbrtag_hash, secondbrtag_hash;
-
-   logic                                         error_stall_in, error_stall;
-
-   assign error_stall_in = (error_stall | ifu_async_error_start) & ~exu_flush_final;
-
-   rvdff #(.WIDTH(7))  bundle1ff (.*,
-                                  .clk(active_clk),
-                                  .din ({wrptr_in[1:0],rdptr_in[1:0],q2off_in,q1off_in,q0off_in}),
-                                  .dout({wrptr[1:0],   rdptr[1:0],   q2off,   q1off,   q0off})
-                                  );
-
-   rvdffie #(.WIDTH(7),.OVERRIDE(1))  bundle2ff (.*,
-                                                 .din ({error_stall_in,f2val_in[1:0],f1val_in[1:0],f0val_in[1:0]}),
-                                                 .dout({error_stall,   f2val[1:0],   f1val[1:0],   f0val[1:0]   })
-                                                 );
-
-if(pt.BTB_ENABLE==1) begin
-   rvdffe #(BRDATA_SIZE)  brdata2ff   (.*, .clk(clk), .en(qwen[2]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata2[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata1ff   (.*, .clk(clk), .en(qwen[1]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata1[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata0ff   (.*, .clk(clk), .en(qwen[0]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata0[BRDATA_SIZE-1:0]));
-   rvdffe #(MSIZE)        misc2ff     (.*, .clk(clk), .en(qwen[2]),        .din(misc_data_in[MHI:0]),        .dout(misc2[MHI:0]));
-   rvdffe #(MSIZE)        misc1ff     (.*, .clk(clk), .en(qwen[1]),        .din(misc_data_in[MHI:0]),        .dout(misc1[MHI:0]));
-   rvdffe #(MSIZE)        misc0ff     (.*, .clk(clk), .en(qwen[0]),        .din(misc_data_in[MHI:0]),        .dout(misc0[MHI:0]));
-end
-else begin
-
-   rvdffie #((MSIZE*3)+(BRDATA_SIZE*3))    miscff      (.*,
-                                                        .din({qwen[2] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc2[MHI:0], brdata2[BRDATA_SIZE-1:0]},
-                                                              qwen[1] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc1[MHI:0], brdata1[BRDATA_SIZE-1:0]},
-                                                              qwen[0] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc0[MHI:0], brdata0[BRDATA_SIZE-1:0]}}),
-                                                        .dout({misc2[MHI:0],misc1[MHI:0],misc0[MHI:0],
-                                                               brdata2[BRDATA_SIZE-1:0], brdata1[BRDATA_SIZE-1:0], brdata0[BRDATA_SIZE-1:0]})
-                                                        );
-end
-
-  logic [31:1] q2pc, q1pc, q0pc;
-
-   rvdffe #(31)           q2pcff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_pc[31:1]),     .dout(q2pc[31:1]));
-   rvdffe #(31)           q1pcff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_pc[31:1]),     .dout(q1pc[31:1]));
-   rvdffe #(31)           q0pcff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_pc[31:1]),     .dout(q0pc[31:1]));
-
-   rvdffe #(32)           q2ff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_data_f[31:0]),     .dout(q2[31:0]));
-   rvdffe #(32)           q1ff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_data_f[31:0]),     .dout(q1[31:0]));
-   rvdffe #(32)           q0ff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_data_f[31:0]),     .dout(q0[31:0]));
-
-
-   // new queue control logic
-
-   assign qren[2:0]          = {  rdptr[1:0] == 2'b10,
-                                  rdptr[1:0] == 2'b01,
-                                  rdptr[1:0] == 2'b00 };
-
-   assign qwen[2:0]          = { (wrptr[1:0] == 2'b10) & ifvalid,
-                                 (wrptr[1:0] == 2'b01) & ifvalid,
-                                 (wrptr[1:0] == 2'b00) & ifvalid };
-
-
-   assign rdptr_in[1:0]      = ({2{ qren[0]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[0]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{~ifu_fb_consume1 & ~ifu_fb_consume2 & ~exu_flush_final}} & rdptr[1:0]);
-
-   assign wrptr_in[1:0]      = ({2{ qwen[0] & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qwen[1] & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qwen[2] & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{~ifvalid & ~exu_flush_final}} & wrptr[1:0]);
-
-
-
-   assign q2off_in          = ( ~qwen[2] & (rdptr[1:0]==2'd2)  &  (q2off | f0_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd1)  &  (q2off | f1_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd0)  &   q2off                );
-
-   assign q1off_in          = ( ~qwen[1] & (rdptr[1:0]==2'd1)  &  (q1off | f0_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd0)  &  (q1off | f1_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd2)  &   q1off                );
-
-   assign q0off_in          = ( ~qwen[0] & (rdptr[1:0]==2'd0)  &  (q0off | f0_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd2)  &  (q0off | f1_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd1)  &   q0off                );
-
-
-
-   assign q0ptr              = ( (rdptr[1:0]==2'b00) & q0off ) |
-                               ( (rdptr[1:0]==2'b01) & q1off ) |
-                               ( (rdptr[1:0]==2'b10) & q2off );
-
-   assign q1ptr              = ( (rdptr[1:0]==2'b00) & q1off ) |
-                               ( (rdptr[1:0]==2'b01) & q2off ) |
-                               ( (rdptr[1:0]==2'b10) & q0off );
-
-   assign q0sel[1:0]         = {q0ptr,~q0ptr};
-
-   assign q1sel[1:0]         = {q1ptr,~q1ptr};
-
-   // end new queue control logic
-
-
-   // misc data that is associated with each fetch buffer
-
-   if(pt.BTB_ENABLE==1)
-     assign misc_data_in[MHI:0] = {
-
-                                    ic_access_fault_type_f[1:0],
-                                    ifu_bp_btb_target_f[31:1],
-                                    ifu_bp_poffset_f[11:0],
-                                    ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0]
-                                    };
-   else
-     assign misc_data_in[MHI:0] = {
-                                    ic_access_fault_type_f[1:0]
-                                    };
-
-
-   assign {misc1eff[MHI:0],misc0eff[MHI:0]} = (({MSIZE*2{qren[0]}} & {misc1[MHI:0],misc0[MHI:0]}) |
-                                               ({MSIZE*2{qren[1]}} & {misc2[MHI:0],misc1[MHI:0]}) |
-                                               ({MSIZE*2{qren[2]}} & {misc0[MHI:0],misc2[MHI:0]}));
-
-   if(pt.BTB_ENABLE==1) begin
-   assign {
-            f1ictype[1:0],
-            f1prett[31:1],
-            f1poffset[11:0],
-            f1fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc1eff[MHI:0];
-
-   assign {
-            f0ictype[1:0],
-            f0prett[31:1],
-            f0poffset[11:0],
-            f0fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc0eff[MHI:0];
-
-      if(pt.BTB_FULLYA) begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               ifu_bp_fa_index_f[1], iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               ifu_bp_fa_index_f[0], iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0index[1],f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0index[0],f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1index[1],f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1index[0],f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-      else begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-
-
-
-
-   assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-   assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // if (pt.BTB_ENABLE==1)
-   else begin
-      assign {
-               f1ictype[1:0]
-               } = misc1eff[MHI:0];
-
-      assign {
-               f0ictype[1:0]
-               } = misc0eff[MHI:0];
-
-      assign brdata_in[BRDATA_SIZE-1:0] = {
-                                            iccm_rd_ecc_double_err[1],ic_access_fault_f[1],
-                                            iccm_rd_ecc_double_err[0],ic_access_fault_f[0]
-                                            };
-      assign {f0dbecc[1],f0icaf[1],
-              f0dbecc[0],f0icaf[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-      assign {f1dbecc[1],f1icaf[1],
-              f1dbecc[0],f1icaf[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                          ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-      assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-      assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // possible states of { sf0_valid, sf1_valid, f2_valid }
-   //
-   // 000    if->f0
-   // 100    if->f1
-   // 101    illegal
-   // 010    if->f1, f1->f0
-   // 110    if->f2
-   // 001    if->f1, f2->f0
-   // 011    if->f2, f2->f1, f1->f0
-   // 111   !if,     no shift
-
-   assign f2_valid           =  f2val[0];
-   assign sf1_valid          =  sf1val[0];
-   assign sf0_valid          =  sf0val[0];
-
-   // interface to fetch
-
-   assign consume_fb0        = ~sf0val[0] & f0val[0];
-
-   assign consume_fb1        = ~sf1val[0] & f1val[0];
-
-   assign ifu_fb_consume1    =  consume_fb0 & ~consume_fb1 & ~exu_flush_final;
-   assign ifu_fb_consume2    =  consume_fb0 &  consume_fb1 & ~exu_flush_final;
-
-   assign ifvalid            =  ifu_fetch_val[0];
-
-   assign shift_f1_f0        =  ~sf0_valid &  sf1_valid;
-   assign shift_f2_f0        =  ~sf0_valid & ~sf1_valid &  f2_valid;
-   assign shift_f2_f1        =  ~sf0_valid &  sf1_valid &  f2_valid;
-
-   assign fetch_to_f0        =  ~sf0_valid & ~sf1_valid & ~f2_valid & ifvalid;
-
-   assign fetch_to_f1        = (~sf0_valid & ~sf1_valid &  f2_valid & ifvalid)  |
-                               (~sf0_valid &  sf1_valid & ~f2_valid & ifvalid)  |
-                               ( sf0_valid & ~sf1_valid & ~f2_valid & ifvalid);
-
-   assign fetch_to_f2        = (~sf0_valid &  sf1_valid &  f2_valid & ifvalid)  |
-                               ( sf0_valid &  sf1_valid & ~f2_valid & ifvalid);
-
-
-   assign f2val_in[1:0]      = ({2{ fetch_to_f2 &                               ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{~fetch_to_f2 & ~shift_f2_f1 & ~shift_f2_f0 & ~exu_flush_final}} & f2val[1:0]        );
-
-
-   assign sf1val[1:0]        = ({2{ f1_shift_2B}} & {1'b0,f1val[1]}) |
-                               ({2{~f1_shift_2B}} & f1val[1:0]     );
-
-   assign f1val_in[1:0]      = ({2{ fetch_to_f1                               & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f1                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{~fetch_to_f1 & ~shift_f2_f1 & ~shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       );
-
-
-
-   assign sf0val[1:0]        = ({2{ shift_2B            }} & {1'b0,f0val[1]}) |
-                               ({2{~shift_2B & ~shift_4B}} & f0val[1:0]);
-
-   assign f0val_in[1:0]      = ({2{fetch_to_f0                                & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f0                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{                               shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       ) |
-                               ({2{~fetch_to_f0 & ~shift_f2_f0 & ~shift_f1_f0 & ~exu_flush_final}} & sf0val[1:0]       );
-
-   assign {q1eff[31:0],q0eff[31:0]} = (({64{qren[0]}} & {q1[31:0],q0[31:0]}) |
-                                       ({64{qren[1]}} & {q2[31:0],q1[31:0]}) |
-                                       ({64{qren[2]}} & {q0[31:0],q2[31:0]}));
-
-   assign q0final[31:0]      = ({32{q0sel[0]}} & {      q0eff[31:0]}) |
-                               ({32{q0sel[1]}} & {16'b0,q0eff[31:16]});
-
-   assign q1final[15:0]      = ({16{q1sel[0]}} & q1eff[15:0] ) |
-                               ({16{q1sel[1]}} & q1eff[31:16]);
-   logic [31:1] q0pceff, q0pcfinal;
-   logic [31:1] q1pceff;
-
-   assign {q1pceff[31:1],q0pceff[31:1]} = (({62{qren[0]}} & {q1pc[31:1],q0pc[31:1]}) |
-                                           ({62{qren[1]}} & {q2pc[31:1],q1pc[31:1]}) |
-                                           ({62{qren[2]}} & {q0pc[31:1],q2pc[31:1]}));
-
-
-   assign q0pcfinal[31:1]      = ({31{q0sel[0]}} & ( q0pceff[31:1])) |
-                                 ({31{q0sel[1]}} & ( q0pceff[31:1] + 31'd1));
-
-   assign aligndata[31:0]    = ({32{ f0val[1]           }} & {q0final[31:0]}) |
-                               ({32{~f0val[1] & f0val[0]}} & {q1final[15:0],q0final[15:0]});
-
-   assign alignval[1:0]      = ({ 2{ f0val[1]           }} & {2'b11}) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1val[0],1'b1});
-
-   assign alignicaf[1:0]    = ({ 2{ f0val[1]           }} &  f0icaf[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1icaf[0],f0icaf[0]});
-
-   assign aligndbecc[1:0]    = ({ 2{ f0val[1]           }} &  f0dbecc[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1dbecc[0],f0dbecc[0]});
-
-   if (pt.BTB_ENABLE==1) begin
-
-   // for branch prediction
-
-   assign alignbrend[1:0]    = ({ 2{ f0val[1]           }} &  f0brend[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1brend[0],f0brend[0]});
-
-   assign alignpc4[1:0]      = ({ 2{ f0val[1]           }} &  f0pc4[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1pc4[0],f0pc4[0]});
-
-      if(pt.BTB_FULLYA) begin
-         assign alignindex[0]      = f0index[0];
-         assign alignindex[1]      = f0val[1] ? f0index[1] : f1index[0];
-      end
-
-   assign alignret[1:0]      = ({ 2{ f0val[1]           }} &  f0ret[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1ret[0],f0ret[0]});
-
-   assign alignway[1:0]      = ({ 2{ f0val[1]           }} &  f0way[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1way[0],f0way[0]});
-
-   assign alignhist1[1:0]    = ({ 2{ f0val[1]           }} &  f0hist1[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist1[0],f0hist1[0]});
-
-   assign alignhist0[1:0]    = ({ 2{ f0val[1]           }} &  f0hist0[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist0[0],f0hist0[0]});
-
-   assign secondpc[31:1]     = ({31{ f0val[1]           }} &  (q0pceff[31:1] + 31'd1)) |
-                               // you need the base pc for 2nd one only (4B max, 2B for the 1st and 2B for the 2nd)
-                               ({31{~f0val[1] & f0val[0]}} &   q1pceff[31:1]      );
-
-
-   assign firstpc[31:1]      =  q0pcfinal[31:1];
-      end // if (pt.BTB_ENABLE==1)
-
-   assign alignfromf1[1]     =      ~f0val[1] & f0val[0];
-
-
-   assign ifu_i0_pc[31:1]    =  q0pcfinal[31:1];
-
-
-   assign ifu_i0_pc4         =  first4B;
-
-
-   assign ifu_i0_cinst[15:0] = aligndata[15:0];
-
-   assign first4B            = (aligndata[1:0] == 2'b11);
-   assign first2B            = ~first4B;
-
-   assign ifu_i0_valid       = (first4B & alignval[1]) |
-                               (first2B & alignval[0]);
-
-   // inst access fault on any byte of inst results in access fault for the inst
-   assign ifu_i0_icaf        = (first4B & (|alignicaf[1:0])) |
-                               (first2B &   alignicaf[0]   );
-
-   assign ifu_i0_icaf_type[1:0] = (first4B & ~f0val[1] & f0val[0] & ~alignicaf[0] & ~aligndbecc[0]) ? f1ictype[1:0] : f0ictype[1:0];
-
-
-   assign icaf_eff[1:0] = alignicaf[1:0] | aligndbecc[1:0];
-
-   assign ifu_i0_icaf_second = first4B & ~icaf_eff[0] & icaf_eff[1];
-
-   assign ifu_i0_dbecc       = (first4B & (|aligndbecc[1:0])) |
-                               (first2B &   aligndbecc[0]   );
-
-
-   assign ifirst[31:0]       =  aligndata[31:0];
-
-
-   assign ifu_i0_instr[31:0] = ({32{first4B & alignval[1]}} & ifirst[31:0]) |
-                               ({32{first2B & alignval[0]}} & uncompress0[31:0]);
-
-if(pt.BTB_ENABLE==1) begin
-
-   // if you detect br does not start on instruction boundary
-
-   eb1_btb_addr_hash #(.pt(pt)) firsthash (.pc(firstpc [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(firstpc_hash [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   eb1_btb_addr_hash #(.pt(pt)) secondhash(.pc(secondpc[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   if(pt.BTB_FULLYA) begin
-      assign firstbrtag_hash = firstpc;
-      assign secondbrtag_hash = secondpc;
-   end
-   else begin
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash_fold #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-   end // else: !if(pt.BTB_FULLYA)
-
-
-   // start_indexing - you want pc to be based on where the end of branch is prediction
-   // normal indexing pc based that's incorrect now for pc4 cases it's pc4 + 2
-
-   always_comb begin
-
-      i0_brp                 = '0;
-
-      i0_br_start_error      = (first4B & alignval[1] & alignbrend[0]);
-
-      i0_brp.valid           = (first2B & alignbrend[0]) |
-                               (first4B & alignbrend[1]) |
-                                i0_br_start_error;
-
-      i0_brp_pc4             = (first2B & alignpc4[0]) |
-                               (first4B & alignpc4[1]);
-
-      i0_brp.ret             = (first2B & alignret[0]) |
-                               (first4B & alignret[1]);
-
-      i0_brp.way             = (first2B | alignbrend[0])  ?  alignway[0]  :  alignway[1];
-
-      i0_brp.hist[1]         = (first2B & alignhist1[0]) |
-                               (first4B & alignhist1[1]);
-
-      i0_brp.hist[0]         = (first2B & alignhist0[0]) |
-                               (first4B & alignhist0[1]);
-
-      i0_ends_f1             =  first4B & alignfromf1[1];
-
-      i0_brp.toffset[11:0]   = (i0_ends_f1)  ?  f1poffset[11:0]  :  f0poffset[11:0];
-
-      i0_brp.prett[31:1]     = (i0_ends_f1)  ?  f1prett[31:1]    :  f0prett[31:1];
-
-      i0_brp.br_start_error  = i0_br_start_error;
-
-      i0_brp.bank            = (first2B | alignbrend[0])  ?  firstpc[1]  :  secondpc[1];
-
-      i0_brp.br_error        = (i0_brp.valid &  i0_brp_pc4 &  first2B) |
-                               (i0_brp.valid & ~i0_brp_pc4 &  first4B);
-
-      if(pt.BTB_FULLYA)
-        ifu_i0_fa_index = (first2B | alignbrend[0])  ?  alignindex[0]  :  alignindex[1];
-      else
-        ifu_i0_fa_index = '0;
-
- end
-
-
-   assign ifu_i0_bp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = (first2B | alignbrend[0])  ?  firstpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  :
-                                                                                         secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign ifu_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0]            = (i0_ends_f1)               ?  f1fghr[pt.BHT_GHR_SIZE-1:0]  :
-                                                                                         f0fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign ifu_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0]           = (first2B | alignbrend[0])  ?  firstbrtag_hash[pt.BTB_BTAG_SIZE-1:0]  :
-                                                                                         secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0];
-end
-else begin
-   assign i0_brp = '0;
-   assign ifu_i0_bp_index = '0;
-   assign ifu_i0_bp_fghr = '0;
-   assign ifu_i0_bp_btag = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // decompress
-
-   // quiet inputs for 4B inst
-   eb1_ifu_compress_ctl #(.pt(pt)) compress0 (.din((first2B) ? aligndata[15:0] : '0), .dout(uncompress0[31:0]));
-
-
-
-   assign i0_shift           =  dec_i0_decode_d & ~error_stall;
-
-   assign ifu_pmu_instr_aligned = i0_shift;
-
-
-   // compute how many bytes are being shifted from f0
-
-   assign shift_2B           =  i0_shift & first2B;
-
-   assign shift_4B           =  i0_shift & first4B;
-
-   // exact equations for the queue logic
-   assign f0_shift_2B        = (shift_2B & f0val[0]            ) |
-                               (shift_4B & f0val[0] & ~f0val[1]);
-
-
-   // f0 valid states
-   //     11
-   //     10
-   //     00
-
-   assign f1_shift_2B        =  f0val[0] & ~f0val[1] & shift_4B;
-
-
-
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Branch predictor
-// Comments:
-//
-//
-//  Bank3 : Bank2 : Bank1 : Bank0
-//  FA  C       8       4       0
-//********************************************************************************
-
-module eb1_ifu_bp_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-
-   input logic clk,
-   input logic rst_l,
-
-   input logic ic_hit_f,      // Icache hit, enables F address capture
-
-   input logic [31:1] ifc_fetch_addr_f, // look up btb address
-   input logic ifc_fetch_req_f,  // F1 valid
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // BP commit update packet, includes errors
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associative btb error index
-
-   input logic dec_tlu_flush_lower_wb, // used to move EX4 RS to EX1 and F
-   input logic dec_tlu_flush_leak_one_wb, // don't hit for leak one fetches
-
-   input logic dec_tlu_bpred_disable, // disable all branch prediction
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr (for patching fghr)
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input logic exu_flush_final, // all flushes
-
-   output logic ifu_bp_hit_taken_f, // btb hit, select target
-   output logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-   output logic ifu_bp_inst_mask_f, // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f, // fetch ghr
-
-   output logic [1:0] ifu_bp_way_f, // way
-   output logic [1:0] ifu_bp_ret_f, // predicted ret
-   output logic [1:0] ifu_bp_hist1_f, // history counters for all 4 potential branches, bit 1, right justified
-   output logic [1:0] ifu_bp_hist0_f, // history counters for all 4 potential branches, bit 0, right justified
-   output logic [1:0] ifu_bp_pc4_f, // pc4 indication, right justified
-   output logic [1:0] ifu_bp_valid_f, // branch valid, right justified
-   output logic [11:0] ifu_bp_poffset_f, // predicted target
-
-   output logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f, // predicted branch index (fully associative option)
-
-   input  logic       scan_mode
-   );
-
-
-   localparam BTB_DWIDTH =  pt.BTB_TOFFSET_SIZE+pt.BTB_BTAG_SIZE+5;
-   localparam BTB_DWIDTH_TOP =  int'(pt.BTB_TOFFSET_SIZE)+int'(pt.BTB_BTAG_SIZE)+4;
-   localparam BTB_FA_INDEX = $clog2(pt.BTB_SIZE)-1;
-   localparam FA_CMP_LOWER = $clog2(pt.ICACHE_LN_SZ);
-   localparam FA_TAG_END_UPPER= 5+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER)-1; // must cast to int or vcs build fails
-   localparam FA_TAG_START_LOWER = 3+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER);
-   localparam FA_TAG_END_LOWER = 5+int'(pt.BTB_TOFFSET_SIZE);
-
-   localparam TAG_START=BTB_DWIDTH-1;
-   localparam PC4=4;
-   localparam BOFF=3;
-   localparam CALL=2;
-   localparam RET=1;
-   localparam BV=0;
-
-   localparam LRU_SIZE=pt.BTB_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP = (pt.BHT_ARRAY_DEPTH > 16 ) ? 16 : pt.BHT_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP_INNER_HI =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+3 : pt.BHT_ADDR_HI;
-   localparam NUM_BHT_LOOP_OUTER_LO =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+4 : pt.BHT_ADDR_LO;
-   localparam BHT_NO_ADDR_MATCH  = ( pt.BHT_ARRAY_DEPTH <= 16 );
-
-
-   logic exu_mp_valid_write;
-   logic exu_mp_ataken;
-   logic exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-   logic                                   dec_tlu_br0_v_wb; // WB stage history update
-   logic [1:0]                             dec_tlu_br0_hist_wb; // new history
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_tlu_br0_addr_wb; // addr
-   logic                                   dec_tlu_br0_error_wb; // error; invalidate bank
-   logic                                   dec_tlu_br0_start_error_wb; // error; invalidate all 4 banks in fg
-   logic [pt.BHT_GHR_SIZE-1:0]             exu_i0_br_fghr_wb;
-
-   logic use_mp_way, use_mp_way_p1;
-   logic [pt.RET_STACK_SIZE-1:0][31:0] rets_out, rets_in;
-   logic [pt.RET_STACK_SIZE-1:0]        rsenable;
-
-
-   logic [11:0]       btb_rd_tgt_f;
-   logic              btb_rd_pc4_f, btb_rd_call_f, btb_rd_ret_f;
-   logic [1:1]        bp_total_branch_offset_f;
-
-   logic [31:1]       bp_btb_target_adder_f;
-   logic [31:1]       bp_rs_call_target_f;
-   logic              rs_push, rs_pop, rs_hold;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_p1_f, btb_wr_addr, btb_rd_addr_f;
-   logic [pt.BTB_BTAG_SIZE-1:0] btb_wr_tag, fetch_rd_tag_f, fetch_rd_tag_p1_f;
-   logic [BTB_DWIDTH-1:0]        btb_wr_data;
-   logic               btb_wr_en_way0, btb_wr_en_way1;
-
-
-   logic               dec_tlu_error_wb, btb_valid, dec_tlu_br0_middle_wb;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]        btb_error_addr_wb;
-   logic branch_error_collision_f, fetch_mp_collision_f, branch_error_collision_p1_f, fetch_mp_collision_p1_f;
-
-   logic  branch_error_bank_conflict_f;
-   logic [pt.BHT_GHR_SIZE-1:0] merged_ghr, fghr_ns, fghr;
-   logic [1:0] num_valids;
-   logic [LRU_SIZE-1:0] btb_lru_b0_f, btb_lru_b0_hold, btb_lru_b0_ns,
-                        fetch_wrindex_dec, fetch_wrindex_p1_dec, fetch_wrlru_b0, fetch_wrlru_p1_b0,
-                        mp_wrindex_dec, mp_wrlru_b0;
-   logic                btb_lru_rd_f, btb_lru_rd_p1_f, lru_update_valid_f;
-   logic  tag_match_way0_f, tag_match_way1_f;
-   logic [1:0] way_raw, bht_dir_f, btb_sel_f, wayhit_f, vwayhit_f, wayhit_p1_f;
-   logic [1:0] bht_valid_f, bht_force_taken_f;
-
-   logic leak_one_f, leak_one_f_d1;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way0_out ;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way1_out ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_p1_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_p1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_vbank0_rd_data_f, btb_vbank1_rd_data_f;
-
-   logic                                         final_h;
-   logic                                         btb_fg_crossing_f;
-   logic                                         middle_of_bank;
-
-
-   logic [1:0]                                   bht_vbank0_rd_data_f, bht_vbank1_rd_data_f;
-   logic                                         branch_error_bank_conflict_p1_f;
-   logic                                         tag_match_way0_p1_f, tag_match_way1_p1_f;
-
-   logic [1:0]                                   btb_vlru_rd_f, fetch_start_f, tag_match_vway1_expanded_f, tag_match_way0_expanded_p1_f, tag_match_way1_expanded_p1_f;
-   logic [31:2] fetch_addr_p1_f;
-
-
-   logic exu_mp_way, exu_mp_way_f, dec_tlu_br0_way_wb, dec_tlu_way_wb;
-   logic                [BTB_DWIDTH-1:0] btb_bank0e_rd_data_f, btb_bank0e_rd_data_p1_f;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0o_rd_data_f;
-
-   logic [1:0] tag_match_way0_expanded_f, tag_match_way1_expanded_f;
-
-
-    logic [1:0]                                  bht_bank0_rd_data_f;
-    logic [1:0]                                  bht_bank1_rd_data_f;
-    logic [1:0]                                  bht_bank0_rd_data_p1_f;
-   genvar                                        j, i;
-
-   assign exu_mp_valid = exu_mp_pkt.misp & ~leak_one_f; // conditional branch mispredict
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // repl way
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-   assign exu_mp_ataken = exu_mp_pkt.ataken;
-
-
-   assign dec_tlu_br0_v_wb = dec_tlu_br0_r_pkt.valid;
-   assign dec_tlu_br0_hist_wb[1:0]  = dec_tlu_br0_r_pkt.hist[1:0];
-   assign dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign dec_tlu_br0_error_wb = dec_tlu_br0_r_pkt.br_error;
-   assign dec_tlu_br0_middle_wb = dec_tlu_br0_r_pkt.middle;
-   assign dec_tlu_br0_way_wb = dec_tlu_br0_r_pkt.way;
-   assign dec_tlu_br0_start_error_wb = dec_tlu_br0_r_pkt.br_start_error;
-   assign exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0] = exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0];
-
-
-
-
-   // ----------------------------------------------------------------------
-   // READ
-   // ----------------------------------------------------------------------
-
-   // hash the incoming fetch PC, first guess at hashing algorithm
-   eb1_btb_addr_hash #(.pt(pt)) f1hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-
-   assign fetch_addr_p1_f[31:2] = ifc_fetch_addr_f[31:2] + 30'b1;
-   eb1_btb_addr_hash #(.pt(pt)) f1hash_p1(.pc(fetch_addr_p1_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   assign btb_sel_f[1] = ~bht_dir_f[0];
-   assign btb_sel_f[0] =  bht_dir_f[0];
-
-   assign fetch_start_f[1:0] = {ifc_fetch_addr_f[1], ~ifc_fetch_addr_f[1]};
-
-   // Errors colliding with fetches must kill the btb/bht hit.
-
-   assign branch_error_collision_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-   assign branch_error_collision_p1_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-
-   assign branch_error_bank_conflict_f = branch_error_collision_f & dec_tlu_error_wb;
-   assign branch_error_bank_conflict_p1_f = branch_error_collision_p1_f & dec_tlu_error_wb;
-
-   // set on leak one, hold until next flush without leak one
-   assign leak_one_f = (dec_tlu_flush_leak_one_wb & dec_tlu_flush_lower_wb) | (leak_one_f_d1 & ~dec_tlu_flush_lower_wb);
-
-logic exu_flush_final_d1;
-
- if(!pt.BTB_FULLYA) begin
-   assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                    exu_mp_valid & ifc_fetch_req_f &
-                                    (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                    );
-   assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                       exu_mp_valid & ifc_fetch_req_f &
-                                       (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                       );
-   // 2 -way SA, figure out the way hit and mux accordingly
-   assign tag_match_way0_f = btb_bank0_rd_data_way0_f[BV] & (btb_bank0_rd_data_way0_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_f = btb_bank0_rd_data_way1_f[BV] & (btb_bank0_rd_data_way1_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way0_p1_f = btb_bank0_rd_data_way0_p1_f[BV] & (btb_bank0_rd_data_way0_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_p1_f = btb_bank0_rd_data_way1_p1_f[BV] & (btb_bank0_rd_data_way1_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   // Both ways could hit, use the offset bit to reorder
-
-   assign tag_match_way0_expanded_f[1:0] = {tag_match_way0_f &  (btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4]),
-                                             tag_match_way0_f & ~(btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4])};
-
-   assign tag_match_way1_expanded_f[1:0] = {tag_match_way1_f &  (btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4]),
-                                             tag_match_way1_f & ~(btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4])};
-
-   assign tag_match_way0_expanded_p1_f[1:0] = {tag_match_way0_p1_f &  (btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4]),
-                                                tag_match_way0_p1_f & ~(btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4])};
-
-   assign tag_match_way1_expanded_p1_f[1:0] = {tag_match_way1_p1_f &  (btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4]),
-                                                tag_match_way1_p1_f & ~(btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4])};
-
-   assign wayhit_f[1:0] = tag_match_way0_expanded_f[1:0] | tag_match_way1_expanded_f[1:0];
-   assign wayhit_p1_f[1:0] = tag_match_way0_expanded_p1_f[1:0] | tag_match_way1_expanded_p1_f[1:0];
-
-   assign btb_bank0o_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[1]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[1]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-   assign btb_bank0e_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[0]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[0]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-
-   assign btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_p1_f[0]}} & btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0]) |
-                                                               ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_p1_f[0]}} & btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0]) );
-
-   // virtual bank order
-
-   assign btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0e_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) );
-   assign btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0]) );
-
-   assign way_raw[1:0] =  tag_match_vway1_expanded_f[1:0] | (~vwayhit_f[1:0] & btb_vlru_rd_f[1:0]);
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-   // update lru
-   // mp
-
-   // create a onehot lru write vector
-   assign mp_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   // fetch
-   assign fetch_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign fetch_wrindex_p1_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign mp_wrlru_b0[LRU_SIZE-1:0] = mp_wrindex_dec[LRU_SIZE-1:0] & {LRU_SIZE{exu_mp_valid}};
-
-
-   assign btb_lru_b0_hold[LRU_SIZE-1:0] = ~mp_wrlru_b0[LRU_SIZE-1:0] & ~fetch_wrlru_b0[LRU_SIZE-1:0];
-
-   // Forward the mp lru information to the fetch, avoids multiple way hits later
-   assign use_mp_way = fetch_mp_collision_f;
-   assign use_mp_way_p1 = fetch_mp_collision_p1_f;
-
-   assign lru_update_valid_f = (vwayhit_f[0] | vwayhit_f[1]) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   assign fetch_wrlru_b0[LRU_SIZE-1:0] = fetch_wrindex_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-   assign fetch_wrlru_p1_b0[LRU_SIZE-1:0] = fetch_wrindex_p1_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-
-   assign btb_lru_b0_ns[LRU_SIZE-1:0] = ( (btb_lru_b0_hold[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]) |
-                                          (mp_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{~exu_mp_way}}) |
-                                          (fetch_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_f}}) |
-                                          (fetch_wrlru_p1_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_p1_f}}) );
-
-
-
-   assign btb_lru_rd_f = use_mp_way ? exu_mp_way_f : |(fetch_wrindex_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   assign btb_lru_rd_p1_f = use_mp_way_p1 ? exu_mp_way_f : |(fetch_wrindex_p1_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   // rotated
-   assign btb_vlru_rd_f[1:0] = ( ({2{fetch_start_f[0]}} & {btb_lru_rd_f, btb_lru_rd_f}) |
-                                  ({2{fetch_start_f[1]}} & {btb_lru_rd_p1_f, btb_lru_rd_f}));
-
-   assign tag_match_vway1_expanded_f[1:0] = ( ({2{fetch_start_f[0]}} & {tag_match_way1_expanded_f[1:0]}) |
-                                               ({2{fetch_start_f[1]}} & {tag_match_way1_expanded_p1_f[0], tag_match_way1_expanded_f[1]}) );
-
-
-   rvdffe #(LRU_SIZE) btb_lru_ff (.*, .en(ifc_fetch_req_f | exu_mp_valid),
-                                    .din(btb_lru_b0_ns[(LRU_SIZE)-1:0]),
-                                   .dout(btb_lru_b0_f[(LRU_SIZE)-1:0]));
-
- end // if (!pt.BTB_FULLYA)
-   // Detect end of cache line and mask as needed
-   logic eoc_near;
-   logic eoc_mask;
-   assign eoc_near = &ifc_fetch_addr_f[pt.ICACHE_BEAT_ADDR_HI:3];
-   assign eoc_mask = ~eoc_near| (|(~ifc_fetch_addr_f[2:1]));
-
-
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-
-   // mux out critical hit bank for pc computation
-   // This is only useful for the first taken branch in the fetch group
-   logic [16:1] btb_sel_data_f;
-
-   assign btb_rd_tgt_f[11:0] = btb_sel_data_f[16:5];
-   assign btb_rd_pc4_f       = btb_sel_data_f[4];
-   assign btb_rd_call_f      = btb_sel_data_f[2];
-   assign btb_rd_ret_f       = btb_sel_data_f[1];
-
-   assign btb_sel_data_f[16:1] = ( ({16{btb_sel_f[1]}} & btb_vbank1_rd_data_f[16:1]) |
-                                    ({16{btb_sel_f[0]}} & btb_vbank0_rd_data_f[16:1]) );
-
-
-   logic [1:0] hist0_raw, hist1_raw, pc4_raw, pret_raw;
-
-   // a valid taken target needs to kill the next fetch as we compute the target address
-   assign ifu_bp_hit_taken_f = |(vwayhit_f[1:0] & hist1_raw[1:0]) & ifc_fetch_req_f & ~leak_one_f_d1 & ~dec_tlu_bpred_disable;
-
-
-   // Don't put calls/rets/ja in the predictor, force the bht taken instead
-   assign bht_force_taken_f[1:0] = {(btb_vbank1_rd_data_f[CALL] | btb_vbank1_rd_data_f[RET]),
-                                     (btb_vbank0_rd_data_f[CALL] | btb_vbank0_rd_data_f[RET])};
-
-
-   // taken and valid, otherwise, branch errors must clear the bht
-   assign bht_valid_f[1:0] = vwayhit_f[1:0];
-
-   assign bht_vbank0_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank0_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank1_rd_data_f[1:0]) );
-
-   assign bht_vbank1_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank1_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank0_rd_data_p1_f[1:0]) );
-
-
-   assign bht_dir_f[1:0] = {(bht_force_taken_f[1] | bht_vbank1_rd_data_f[1]) & bht_valid_f[1],
-                             (bht_force_taken_f[0] | bht_vbank0_rd_data_f[1]) & bht_valid_f[0]};
-
-   assign ifu_bp_inst_mask_f = (ifu_bp_hit_taken_f & btb_sel_f[1]) | ~ifu_bp_hit_taken_f;
-
-
-
-
-   // Branch prediction info is sent with the 2byte lane associated with the end of the branch.
-   // Cases
-   //       BANK1         BANK0
-   // -------------------------------
-   // |      :       |      :       |
-   // -------------------------------
-   //         <------------>                   : PC4 branch, offset, should be in B1 (indicated on [2])
-   //                <------------>            : PC4 branch, no offset, indicate PC4, VALID, HIST on [1]
-   //                       <------------>     : PC4 branch, offset, indicate PC4, VALID, HIST on [0]
-   //                <------>                  : PC2 branch, offset, indicate VALID, HIST on [1]
-   //                       <------>           : PC2 branch, no offset, indicate VALID, HIST on [0]
-   //
-
-
-
-   assign hist1_raw[1:0] = bht_force_taken_f[1:0] | {bht_vbank1_rd_data_f[1],
-                                                      bht_vbank0_rd_data_f[1]};
-
-   assign hist0_raw[1:0] = {bht_vbank1_rd_data_f[0],
-                            bht_vbank0_rd_data_f[0]};
-
-
-   assign pc4_raw[1:0] = {vwayhit_f[1] & btb_vbank1_rd_data_f[PC4],
-                          vwayhit_f[0] & btb_vbank0_rd_data_f[PC4]};
-
-   assign pret_raw[1:0] = {vwayhit_f[1] & ~btb_vbank1_rd_data_f[CALL] & btb_vbank1_rd_data_f[RET],
-                           vwayhit_f[0] & ~btb_vbank0_rd_data_f[CALL] & btb_vbank0_rd_data_f[RET]};
-
-   // GHR
-
-
-  // count the valids with masking based on first taken
-   assign num_valids[1:0] = countones(bht_valid_f[1:0]);
-
-   // Note that the following property holds
-   // P: prior ghr, H: history bit of last valid branch in line (could be 1 or 0)
-   // Num valid branches   What new GHR must be
-   // 2                    0H
-   // 1                    PH
-   // 0                    PP
-
-   assign final_h = |(btb_sel_f[1:0] & bht_dir_f[1:0]);
-
-   assign merged_ghr[pt.BHT_GHR_SIZE-1:0] = (
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h2}} & {fghr[pt.BHT_GHR_SIZE-3:0], 1'b0, final_h}) | // 0H
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h1}} & {fghr[pt.BHT_GHR_SIZE-2:0], final_h}) | // PH
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h0}} & {fghr[pt.BHT_GHR_SIZE-1:0]}) ); // PP
-
-   logic [pt.BHT_GHR_SIZE-1:0] exu_flush_ghr;
-   assign exu_flush_ghr[pt.BHT_GHR_SIZE-1:0] = exu_mp_fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign fghr_ns[pt.BHT_GHR_SIZE-1:0] = ( ({pt.BHT_GHR_SIZE{exu_flush_final_d1}} & exu_flush_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1}} & merged_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ~(ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1)}} & fghr[pt.BHT_GHR_SIZE-1:0]));
-
-   rvdffie #(.WIDTH(pt.BHT_GHR_SIZE+3),.OVERRIDE(1)) fetchghr (.*,
-                                          .din ({exu_flush_final, exu_mp_way, leak_one_f, fghr_ns[pt.BHT_GHR_SIZE-1:0]}),
-                                          .dout({exu_flush_final_d1, exu_mp_way_f, leak_one_f_d1, fghr[pt.BHT_GHR_SIZE-1:0]}));
-
-   assign ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0] = fghr[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign ifu_bp_way_f[1:0] = way_raw[1:0];
-   assign ifu_bp_hist1_f[1:0]    = hist1_raw[1:0];
-   assign ifu_bp_hist0_f[1:0]    = hist0_raw[1:0];
-   assign ifu_bp_pc4_f[1:0]     = pc4_raw[1:0];
-
-   assign ifu_bp_valid_f[1:0]   = vwayhit_f[1:0] & ~{2{dec_tlu_bpred_disable}};
-   assign ifu_bp_ret_f[1:0]     = pret_raw[1:0];
-
-
-   // compute target
-   // Form the fetch group offset based on the btb hit location and the location of the branch within the 4 byte chunk
-
-//  .i 5
-//  .o 3
-//  .ilb bht_dir_f[1] bht_dir_f[0] fetch_start_f[1] fetch_start_f[0] btb_rd_pc4_f
-//  .ob bloc_f[1] bloc_f[0] use_fa_plus
-//  .type fr
-//
-//
-//  ## rotdir[1:0]  fs   pc4  off fapl
-//    -1            01 -  01  0
-//    10            01 -  10  0
-//
-//    -1            10 -  10  0
-//    10            10 0  01  1
-//    10            10 1  01  0
-logic [1:0] bloc_f;
-logic use_fa_plus;
-assign bloc_f[1] = (bht_dir_f[0] & ~fetch_start_f[0]) | (~bht_dir_f[0]
-     & fetch_start_f[0]);
-assign bloc_f[0] = (bht_dir_f[0] & fetch_start_f[0]) | (~bht_dir_f[0]
-     & ~fetch_start_f[0]);
-assign use_fa_plus = (~bht_dir_f[0] & ~fetch_start_f[0] & ~btb_rd_pc4_f);
-
-
-
-
-    assign btb_fg_crossing_f = fetch_start_f[0] & btb_sel_f[0] & btb_rd_pc4_f;
-
-   assign bp_total_branch_offset_f =  bloc_f[1] ^ btb_rd_pc4_f;
-
-   logic [31:2] adder_pc_in_f, ifc_fetch_adder_prior;
-   rvdfflie #(.WIDTH(30), .LEFT(19)) faddrf_ff (.*, .en(ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f), .din(ifc_fetch_addr_f[31:2]), .dout(ifc_fetch_adder_prior[31:2]));
-
-
-   assign ifu_bp_poffset_f[11:0] = btb_rd_tgt_f[11:0];
-
-   assign adder_pc_in_f[31:2] = ( ({30{ use_fa_plus}} & fetch_addr_p1_f[31:2]) |
-                                   ({30{ btb_fg_crossing_f}} & ifc_fetch_adder_prior[31:2]) |
-                                   ({30{~btb_fg_crossing_f & ~use_fa_plus}} & ifc_fetch_addr_f[31:2]));
-
-   rvbradder predtgt_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                         .offset(btb_rd_tgt_f[11:0]),
-                         .dout(bp_btb_target_adder_f[31:1])
-                         );
-   // mux in the return stack address here for a predicted return assuming the RS is valid, quite if no prediction
-   assign ifu_bp_btb_target_f[31:1] = (({31{btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0] & ifu_bp_hit_taken_f}} & rets_out[0][31:1]) |
-                                       ({31{~(btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0]) & ifu_bp_hit_taken_f}} & bp_btb_target_adder_f[31:1]) );
-
-
-   // ----------------------------------------------------------------------
-   // Return Stack
-   // ----------------------------------------------------------------------
-
-   rvbradder rs_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                    .offset({11'b0,  ~btb_rd_pc4_f}),
-                    .dout(bp_rs_call_target_f[31:1])
-                         );
-
-   assign rs_push = (btb_rd_call_f & ~btb_rd_ret_f & ifu_bp_hit_taken_f);
-   assign rs_pop = (btb_rd_ret_f & ~btb_rd_call_f & ifu_bp_hit_taken_f);
-   assign rs_hold = ~rs_push & ~rs_pop;
-
-
-
-   // Fetch based (bit 0 is a valid)
-   assign rets_in[0][31:0] = ( ({32{rs_push}} & {bp_rs_call_target_f[31:1], 1'b1}) | // target[31:1], valid
-                               ({32{rs_pop}}  & rets_out[1][31:0]) );
-
-   assign rsenable[0] = ~rs_hold;
-
-   for (i=0; i<pt.RET_STACK_SIZE; i++) begin : retstack
-
-      // for the last entry in the stack, we don't have a pop position
-      if(i==pt.RET_STACK_SIZE-1) begin
-         assign rets_in[i][31:0] = rets_out[i-1][31:0];
-         assign rsenable[i] = rs_push;
-      end
-      else if(i>0) begin
-        assign rets_in[i][31:0] = ( ({32{rs_push}} & rets_out[i-1][31:0]) |
-                                    ({32{rs_pop}}  & rets_out[i+1][31:0]) );
-         assign rsenable[i] = rs_push | rs_pop;
-      end
-      rvdffe #(32) rets_ff (.*, .en(rsenable[i]), .din(rets_in[i][31:0]), .dout(rets_out[i][31:0]));
-
-   end : retstack
-
-   // ----------------------------------------------------------------------
-   // WRITE
-   // ----------------------------------------------------------------------
-
-
-   assign dec_tlu_error_wb = dec_tlu_br0_start_error_wb | dec_tlu_br0_error_wb;
-
-   assign btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign dec_tlu_way_wb = dec_tlu_br0_way_wb;
-
-   assign btb_valid = exu_mp_valid & ~dec_tlu_error_wb;
-
-   assign btb_wr_tag[pt.BTB_BTAG_SIZE-1:0] = exu_mp_btag[pt.BTB_BTAG_SIZE-1:0];
-
-   if(!pt.BTB_FULLYA) begin
-
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagf  (.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({fetch_addr_p1_f[ pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) rdtagf(.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                             .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                               .pc({fetch_addr_p1_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-
-      assign btb_wr_en_way0 = ( ({{~exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{~dec_tlu_way_wb & dec_tlu_error_wb}}));
-
-      assign btb_wr_en_way1 = ( ({{exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{dec_tlu_way_wb & dec_tlu_error_wb}}));
-      assign btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_error_wb ? btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] : exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-
-      assign vwayhit_f[1:0] = ( ({2{fetch_start_f[0]}} & {wayhit_f[1:0]}) |
-                                ({2{fetch_start_f[1]}} & {wayhit_p1_f[0], wayhit_f[1]})) & {eoc_mask, 1'b1};
-
-   end // if (!pt.BTB_FULLYA)
-
-   assign btb_wr_data[BTB_DWIDTH-1:0] = {btb_wr_tag[pt.BTB_BTAG_SIZE-1:0], exu_mp_tgt[pt.BTB_TOFFSET_SIZE-1:0], exu_mp_pc4, exu_mp_boffset,
-                                                exu_mp_call | exu_mp_ja, exu_mp_ret | exu_mp_ja, btb_valid} ;
-
-   assign exu_mp_valid_write = exu_mp_valid & exu_mp_ataken & ~exu_mp_pkt.valid;
-   logic [1:0] bht_wr_data0, bht_wr_data2;
-   logic [1:0] bht_wr_en0, bht_wr_en2;
-
-   assign middle_of_bank = exu_mp_pc4 ^ exu_mp_boffset;
-   assign bht_wr_en0[1:0] = {2{exu_mp_valid & ~exu_mp_call & ~exu_mp_ret & ~exu_mp_ja}} & {middle_of_bank, ~middle_of_bank};
-   assign bht_wr_en2[1:0] = {2{dec_tlu_br0_v_wb}} & {dec_tlu_br0_middle_wb, ~dec_tlu_br0_middle_wb} ;
-
-   // Experiments show this is the best priority scheme for same bank/index writes at the same time.
-   assign bht_wr_data0[1:0] = exu_mp_hist[1:0]; // lowest priority
-   assign bht_wr_data2[1:0] = dec_tlu_br0_hist_wb[1:0]; // highest priority
-
-
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] bht_rd_addr_f, bht_rd_addr_p1_f, bht_wr_addr0, bht_wr_addr2;
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] mp_hashed, br0_hashed_wb, bht_rd_addr_hashed_f, bht_rd_addr_hashed_p1_f;
-   eb1_btb_ghr_hash #(.pt(pt)) mpghrhs  (.hashin(exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]), .hash(mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) br0ghrhs (.hashin(dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0]), .hash(br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs (.hashin(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs_p1 (.hashin(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-
-   assign bht_wr_addr0[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_wr_addr2[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-
-
-   // ----------------------------------------------------------------------
-   // Structures. Using FLOPS
-   // ----------------------------------------------------------------------
-   // BTB
-   // Entry -> tag[pt.BTB_BTAG_SIZE-1:0], toffset[11:0], pc4, boffset, call, ret, valid
-
-   if(!pt.BTB_FULLYA) begin
-
-      for (j=0 ; j<LRU_SIZE ; j++) begin : BTB_FLOPS
-         // Way 0
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way0 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way0)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way0_out[j]));
-
-         // Way 1
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way1 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way1)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way1_out[j]));
-
-      end
-
-
-    always_comb begin : BTB_rd_mux
-        btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] = '0 ;
-
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-    end
-end // if (!pt.BTB_FULLYA)
-
-
-
-
-
-      if(pt.BTB_FULLYA) begin : fa
-
-         logic found1, hit0, hit1;
-         logic btb_used_reset, write_used;
-         logic [$clog2(pt.BTB_SIZE)-1:0] btb_fa_wr_addr0, hit0_index, hit1_index;
-
-         logic [pt.BTB_SIZE-1:0]         btb_tag_hit, btb_offset_0, btb_offset_1, btb_used_ns, btb_used,
-                                         wr0_en, btb_upper_hit;
-         logic [pt.BTB_SIZE-1:0][BTB_DWIDTH-1:0] btbdata;
-
-         // Fully Associative tag hash uses bits 31:3. Bits 2:1 are the offset bits used for the 4 tag comp banks
-         // Full tag used to speed up lookup. There is one 31:3 cmp per entry, and 4 2:1 cmps per entry.
-
-         logic [FA_CMP_LOWER-1:1]  ifc_fetch_addr_p1_f;
-
-
-         assign ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1] = ifc_fetch_addr_f[FA_CMP_LOWER-1:1] + 1'b1;
-
-         assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == ifc_fetch_addr_f[31:1]) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-         assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == {ifc_fetch_addr_f[31:FA_CMP_LOWER], ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]}) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-
-      always_comb begin
-         btb_vbank0_rd_data_f = '0;
-         btb_vbank1_rd_data_f = '0;
-         btb_tag_hit = '0;
-         btb_upper_hit = '0;
-         btb_offset_0 = '0;
-         btb_offset_1 = '0;
-
-         found1 = 1'b0;
-         hit0 = 1'b0;
-         hit1 = 1'b0;
-         hit0_index = '0;
-         hit1_index = '0;
-         btb_fa_wr_addr0 = '0;
-
-         for(int i=0; i<pt.BTB_SIZE; i++) begin
-            // Break the cmp into chunks for lower area.
-            // Chunk1: FA 31:6 or 31:5 depending on icache line size
-            // Chunk2: FA 5:1 or 4:1 depending on icache line size
-            btb_upper_hit[i] = (btbdata[i][BTB_DWIDTH_TOP:FA_TAG_END_UPPER] == ifc_fetch_addr_f[31:FA_CMP_LOWER]) & btbdata[i][0] & ~wr0_en[i];
-            btb_offset_0[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-            btb_offset_1[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-
-            if(~hit0) begin
-               if(btb_offset_0[i]) begin
-                  hit0_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  // hit unless we are also writing this entry at the same time
-                  hit0 = 1'b1;
-               end
-            end
-            if(~hit1) begin
-               if(btb_offset_1[i]) begin
-                  hit1_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  hit1 = 1'b1;
-               end
-            end
-
-
-            // Mux out the 2 potential branches
-            if(btb_offset_0[i] == 1'b1)
-              btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_f ? btb_wr_data : btbdata[i];
-            if(btb_offset_1[i] == 1'b1)
-              btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_p1_f ? btb_wr_data : btbdata[i];
-
-            // find the first zero from bit zero in the used vector, this is the write address
-            if(~found1) begin
-               if(~btb_used[i]) begin
-                  btb_fa_wr_addr0[BTB_FA_INDEX:0] = i[BTB_FA_INDEX:0];
-                  found1 = 1'b1;
-               end
-            end
-         end
-      end // always_comb begin
-
-
-   assign vwayhit_f[1:0] = {hit1, hit0} & {eoc_mask, 1'b1};
-
-   // way bit is reused as the predicted bit
-   assign way_raw[1:0] =  vwayhit_f[1:0] | {fetch_mp_collision_p1_f, fetch_mp_collision_f};
-
-   for (j=0 ; j<pt.BTB_SIZE ; j++) begin : BTB_FAFLOPS
-
-      assign wr0_en[j] = ((btb_fa_wr_addr0[BTB_FA_INDEX:0] == j) & (exu_mp_valid_write & ~exu_mp_pkt.way)) |
-                         ((dec_fa_error_index == j) & dec_tlu_error_wb);
-
-      rvdffe #(BTB_DWIDTH) btb_fa (.*, .clk(clk),
-                                   .en  (wr0_en[j]),
-                                   .din (btb_wr_data[BTB_DWIDTH-1:0]),
-                                   .dout(btbdata[j]));
-   end // block: BTB_FAFLOPS
-
-   assign ifu_bp_fa_index_f[1] = hit1 ? hit1_index : '0;
-   assign ifu_bp_fa_index_f[0] = hit0 ? hit0_index : '0;
-
-   assign btb_used_reset = &btb_used[pt.BTB_SIZE-1:0];
-   assign btb_used_ns[pt.BTB_SIZE-1:0] = ({pt.BTB_SIZE{vwayhit_f[1]}} & (32'b1 << hit1_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{vwayhit_f[0]}} & (32'b1 << hit0_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{exu_mp_valid_write & ~exu_mp_pkt.way & ~dec_tlu_error_wb}} & (32'b1 << btb_fa_wr_addr0[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{btb_used_reset}} & {pt.BTB_SIZE{1'b0}}) |
-                                         ({pt.BTB_SIZE{~btb_used_reset & dec_tlu_error_wb}} & (btb_used[pt.BTB_SIZE-1:0] & ~(32'b1 << dec_fa_error_index[BTB_FA_INDEX:0]))) |
-                                         (~{pt.BTB_SIZE{btb_used_reset | dec_tlu_error_wb}} & btb_used[pt.BTB_SIZE-1:0]);
-
-   assign write_used = btb_used_reset | ifu_bp_hit_taken_f | exu_mp_valid_write | dec_tlu_error_wb;
-
-
-   rvdffe #(pt.BTB_SIZE) btb_usedf (.*, .clk(clk),
-                    .en  (write_used),
-                    .din (btb_used_ns[pt.BTB_SIZE-1:0]),
-                    .dout(btb_used[pt.BTB_SIZE-1:0]));
-
-end // block: fa
-
-
-   //-----------------------------------------------------------------------------
-   // BHT
-   // 2 bit Entry -> direction, strength
-   //
-   //-----------------------------------------------------------------------------
-
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0][1:0]      bht_bank_wr_data ;
-   logic [1:0] [pt.BHT_ARRAY_DEPTH-1:0] [1:0]                bht_bank_rd_data_out ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clken ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clk   ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0]           bht_bank_sel   ;
-
-   for ( i=0; i<2; i++) begin : BANKS
-     for (genvar k=0 ; k < (pt.BHT_ARRAY_DEPTH)/NUM_BHT_LOOP ; k++) begin : BHT_CLK_GROUP
-     assign bht_bank_clken[i][k]  = (bht_wr_en0[i] & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH)) |
-                                    (bht_wr_en2[i] & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH));
-
-     rvclkhdr bht_bank_grp_cgc ( .en(bht_bank_clken[i][k]), .l1clk(bht_bank_clk[i][k]), .* ); // ifndef RV_FPGA_OPTIMIZE
-
-
-     for (j=0 ; j<NUM_BHT_LOOP ; j++) begin : BHT_FLOPS
-       assign   bht_bank_sel[i][k][j]    = (bht_wr_en0[i] & (bht_wr_addr0[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) |
-                                           (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ;
-
-       assign bht_bank_wr_data[i][k][j]  = (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI:pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ? bht_wr_data2[1:0] :
-                                                                                                                      bht_wr_data0[1:0]   ;
-
-
-          rvdffs_fpga #(2) bht_bank (.*,
-                    .clk        (bht_bank_clk[i][k]),
-                    .en         (bht_bank_sel[i][k][j]),
-                    .rawclk     (clk),
-                    .clken      (bht_bank_sel[i][k][j]),
-                    .din        (bht_bank_wr_data[i][k][j]),
-                    .dout       (bht_bank_rd_data_out[i][(16*k)+j]));
-
-      end // block: BHT_FLOPS
-   end // block: BHT_CLK_GROUP
- end // block: BANKS
-
-    always_comb begin : BHT_rd_mux
-     bht_bank0_rd_data_f[1:0] = '0 ;
-     bht_bank1_rd_data_f[1:0] = '0 ;
-     bht_bank0_rd_data_p1_f[1:0] = '0 ;
-     for (int j=0; j< pt.BHT_ARRAY_DEPTH; j++) begin
-       if (bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_f[1:0] = bht_bank_rd_data_out[0][j];
-         bht_bank1_rd_data_f[1:0] = bht_bank_rd_data_out[1][j];
-       end
-       if (bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_p1_f[1:0] = bht_bank_rd_data_out[0][j];
-       end
-      end
-    end // block: BHT_rd_mux
-
-
-function [1:0] countones;
-      input [1:0] valid;
-
-      begin
-
-countones[1:0] = {2'b0, valid[1]} +
-                 {2'b0, valid[0]};
-      end
-   endfunction
-endmodule // eb1_ifu_bp_ctl
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-// purpose of this file is to convert 16b RISCV compressed instruction into 32b equivalent
-
-module eb1_ifu_compress_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input  logic [15:0] din,        // 16-bit   compressed instruction
-   output logic [31:0] dout        // 32-bit uncompressed instruction
-   );
-
-
-   logic               legal;
-
-   logic [15:0]  i;
-
-   logic [31:0]  o,l1,l2,l3;
-
-
-   assign i[15:0] = din[15:0];
-
-
-   logic [4:0]   rs2d,rdd,rdpd,rs2pd;
-
-   logic rdrd;
-   logic rdrs1;
-   logic rs2rs2;
-   logic rdprd;
-   logic rdprs1;
-   logic rs2prs2;
-   logic rs2prd;
-   logic uimm9_2;
-   logic ulwimm6_2;
-   logic ulwspimm7_2;
-   logic rdeq2;
-   logic rdeq1;
-   logic rs1eq2;
-   logic sbroffset8_1;
-   logic simm9_4;
-   logic simm5_0;
-   logic sjaloffset11_1;
-   logic sluimm17_12;
-   logic uimm5_0;
-   logic uswimm6_2;
-   logic uswspimm7_2;
-
-
-
-   // form the opcodes
-
-   // formats
-   //
-   // c.add rd 11:7 rs2  6:2
-   // c.and rdp 9:7 rs2p 4:2
-   //
-   // add rs2 24:20 rs1 19:15  rd 11:7
-
-   assign rs2d[4:0] = i[6:2];
-
-   assign rdd[4:0] = i[11:7];
-
-   assign rdpd[4:0] = {2'b01, i[9:7]};
-
-   assign rs2pd[4:0] = {2'b01, i[4:2]};
-
-
-
-   // merge in rd, rs1, rs2
-
-
-   // rd
-   assign l1[6:0] = o[6:0];
-
-   assign l1[11:7] = o[11:7] |
-                     ({5{rdrd}} & rdd[4:0]) |
-                     ({5{rdprd}} & rdpd[4:0]) |
-                     ({5{rs2prd}} & rs2pd[4:0]) |
-                     ({5{rdeq1}} & 5'd1) |
-                     ({5{rdeq2}} & 5'd2);
-
-
-   // rs1
-   assign l1[14:12] = o[14:12];
-   assign l1[19:15] = o[19:15] |
-                      ({5{rdrs1}} & rdd[4:0]) |
-                      ({5{rdprs1}} & rdpd[4:0]) |
-                      ({5{rs1eq2}} & 5'd2);
-
-
-   // rs2
-   assign l1[24:20] = o[24:20] |
-                      ({5{rs2rs2}} & rs2d[4:0]) |
-                      ({5{rs2prs2}} & rs2pd[4:0]);
-
-   assign l1[31:25] = o[31:25];
-
-   logic [5:0] simm5d;
-   logic [9:2] uimm9d;
-
-   logic [9:4] simm9d;
-   logic [6:2] ulwimm6d;
-   logic [7:2] ulwspimm7d;
-   logic [5:0] uimm5d;
-   logic [20:1] sjald;
-
-   logic [31:12] sluimmd;
-
-   // merge in immediates + jal offset
-
-   assign simm5d[5:0] = { i[12], i[6:2] };
-
-   assign uimm9d[9:2] = { i[10:7], i[12:11], i[5], i[6] };
-
-   assign simm9d[9:4] = { i[12], i[4:3], i[5], i[2], i[6] };
-
-   assign ulwimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign ulwspimm7d[7:2] = { i[3:2], i[12], i[6:4] };
-
-   assign uimm5d[5:0] = { i[12], i[6:2] };
-
-   assign sjald[11:1] = { i[12], i[8], i[10:9], i[6], i[7], i[2], i[11], i[5:4], i[3] };
-
-   assign sjald[20:12] =  {9{i[12]}};
-
-
-
-   assign sluimmd[31:12] = { {15{i[12]}}, i[6:2] };
-
-
-   assign l2[31:20] = ( l1[31:20] ) |
-                      ( {12{simm5_0}}   &  {{7{simm5d[5]}},simm5d[4:0]} ) |
-                      ( {12{uimm9_2}}   &  {2'b0,uimm9d[9:2],2'b0} ) |
-                      ( {12{simm9_4}}   &   {{3{simm9d[9]}},simm9d[8:4],4'b0} ) |
-                      ( {12{ulwimm6_2}} &   {5'b0,ulwimm6d[6:2],2'b0} ) |
-                      ( {12{ulwspimm7_2}}  & {4'b0,ulwspimm7d[7:2],2'b0} ) |
-                      ( {12{uimm5_0}}      &    {6'b0,uimm5d[5:0]} ) |
-                      ( {12{sjaloffset11_1}} &  {sjald[20],sjald[10:1],sjald[11]} ) |
-                      ( {12{sluimm17_12}}    &  sluimmd[31:20] );
-
-
-
-   assign l2[19:12] = ( l1[19:12] ) |
-                      ( {8{sjaloffset11_1}} & sjald[19:12] ) |
-                      ( {8{sluimm17_12}} & sluimmd[19:12] );
-
-
-   assign l2[11:0] = l1[11:0];
-
-
-   // merge in branch offset and store immediates
-
-   logic [8:1]   sbr8d;
-   logic [6:2]   uswimm6d;
-   logic [7:2]   uswspimm7d;
-
-
-   assign sbr8d[8:1] =   { i[12], i[6], i[5], i[2], i[11], i[10], i[4], i[3] };
-
-   assign uswimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign uswspimm7d[7:2] = { i[8:7], i[12:9] };
-
-   assign l3[31:25] = ( l2[31:25] ) |
-                      ( {7{sbroffset8_1}} & { {4{sbr8d[8]}},sbr8d[7:5] } ) |
-                      ( {7{uswimm6_2}}    & { 5'b0, uswimm6d[6:5] } ) |
-                      ( {7{uswspimm7_2}} & { 4'b0, uswspimm7d[7:5] } );
-
-
-   assign l3[24:12] = l2[24:12];
-
-   assign l3[11:7] = ( l2[11:7] ) |
-                     ( {5{sbroffset8_1}} & { sbr8d[4:1], sbr8d[8] } ) |
-                     ( {5{uswimm6_2}} & { uswimm6d[4:2], 2'b0 } ) |
-                     ( {5{uswspimm7_2}} & { uswspimm7d[4:2], 2'b0 } );
-
-   assign l3[6:0] = l2[6:0];
-
-
-   assign dout[31:0] = l3[31:0] & {32{legal}};
-
-
-// file "cdecode" is human readable file that has all of the compressed instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "cdecode" except legal equation:
-
-// 1) coredecode -in cdecode > cdecode.e
-
-// 2) espresso -Dso -oeqntott cdecode.e | addassign > compress_equations
-
-// to generate the legal (16b compressed instruction is legal)  equation below:
-
-// 1) coredecode -in cdecode -legal > clegal.e
-
-// 2) espresso -Dso -oeqntott clegal.e | addassign > clegal_equation
-
-
-
-
-
-// espresso decodes
-assign rdrd = (!i[14]&i[6]&i[1]) | (!i[15]&i[14]&i[11]&i[0]) | (!i[14]&i[5]&i[1]) | (
-    !i[15]&i[14]&i[10]&i[0]) | (!i[14]&i[4]&i[1]) | (!i[15]&i[14]&i[9]
-    &i[0]) | (!i[14]&i[3]&i[1]) | (!i[15]&i[14]&!i[8]&i[0]) | (!i[14]
-    &i[2]&i[1]) | (!i[15]&i[14]&i[7]&i[0]) | (!i[15]&i[1]) | (!i[15]
-    &!i[13]&i[0]);
-
-assign rdrs1 = (!i[14]&i[12]&i[11]&i[1]) | (!i[14]&i[12]&i[10]&i[1]) | (!i[14]
-    &i[12]&i[9]&i[1]) | (!i[14]&i[12]&i[8]&i[1]) | (!i[14]&i[12]&i[7]
-    &i[1]) | (!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[6]&i[1]) | (!i[14]&i[12]&i[5]&i[1]) | (!i[14]&i[12]&i[4]
-    &i[1]) | (!i[14]&i[12]&i[3]&i[1]) | (!i[14]&i[12]&i[2]&i[1]) | (
-    !i[15]&!i[14]&!i[13]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign rs2rs2 = (i[15]&i[6]&i[1]) | (i[15]&i[5]&i[1]) | (i[15]&i[4]&i[1]) | (
-    i[15]&i[3]&i[1]) | (i[15]&i[2]&i[1]) | (i[15]&i[14]&i[1]);
-
-assign rdprd = (i[15]&!i[14]&!i[13]&i[0]);
-
-assign rdprs1 = (i[15]&!i[13]&i[0]) | (i[15]&i[14]&i[0]) | (i[14]&!i[1]&!i[0]);
-
-assign rs2prs2 = (i[15]&!i[14]&!i[13]&i[11]&i[10]&i[0]) | (i[15]&!i[1]&!i[0]);
-
-assign rs2prd = (!i[15]&!i[1]&!i[0]);
-
-assign uimm9_2 = (!i[14]&!i[1]&!i[0]);
-
-assign ulwimm6_2 = (!i[15]&i[14]&!i[1]&!i[0]);
-
-assign ulwspimm7_2 = (!i[15]&i[14]&i[1]);
-
-assign rdeq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign rdeq1 = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (!i[15]&!i[14]&i[13]);
-
-assign rs1eq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]) | (i[14]
-    &i[1]) | (!i[14]&!i[1]&!i[0]);
-
-assign sbroffset8_1 = (i[15]&i[14]&i[0]);
-
-assign simm9_4 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign simm5_0 = (!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (!i[15]&!i[13]&i[0]);
-
-assign sjaloffset11_1 = (!i[14]&i[13]);
-
-assign sluimm17_12 = (!i[15]&i[14]&i[13]&i[7]) | (!i[15]&i[14]&i[13]&!i[8]) | (
-    !i[15]&i[14]&i[13]&i[9]) | (!i[15]&i[14]&i[13]&i[10]) | (!i[15]&i[14]
-    &i[13]&i[11]);
-
-assign uimm5_0 = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign uswimm6_2 = (i[15]&!i[1]&!i[0]);
-
-assign uswspimm7_2 = (i[15]&i[14]&i[1]);
-
-assign o[31]  = 1'b0;
-
-assign o[30] = (i[15]&!i[14]&!i[13]&i[10]&!i[6]&!i[5]&i[0]) | (i[15]&!i[14]
-    &!i[13]&!i[11]&i[10]&i[0]);
-
-assign o[29]  = 1'b0;
-
-assign o[28]  = 1'b0;
-
-assign o[27]  = 1'b0;
-
-assign o[26]  = 1'b0;
-
-assign o[25]  = 1'b0;
-
-assign o[24]  = 1'b0;
-
-assign o[23]  = 1'b0;
-
-assign o[22]  = 1'b0;
-
-assign o[21]  = 1'b0;
-
-assign o[20] = (!i[14]&i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]
-    &!i[3]&!i[2]&i[1]);
-
-assign o[19]  = 1'b0;
-
-assign o[18]  = 1'b0;
-
-assign o[17]  = 1'b0;
-
-assign o[16]  = 1'b0;
-
-assign o[15]  = 1'b0;
-
-assign o[14] = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (i[15]&!i[14]&!i[13]&!i[10]
-    &i[0]) | (i[15]&!i[14]&!i[13]&i[6]&i[0]) | (i[15]&!i[14]&!i[13]&i[5]
-    &i[0]);
-
-assign o[13] = (i[15]&!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (i[15]&!i[14]&!i[13]
-    &i[11]&i[6]&i[0]) | (i[14]&!i[0]);
-
-assign o[12] = (i[15]&!i[14]&!i[13]&i[6]&i[5]&i[0]) | (i[15]&!i[14]&!i[13]&!i[11]
-    &i[0]) | (i[15]&!i[14]&!i[13]&!i[10]&i[0]) | (!i[15]&!i[14]&i[1]) | (
-    i[15]&i[14]&i[13]);
-
-assign o[11]  = 1'b0;
-
-assign o[10]  = 1'b0;
-
-assign o[9]  = 1'b0;
-
-assign o[8]  = 1'b0;
-
-assign o[7]  = 1'b0;
-
-assign o[6] = (i[15]&!i[14]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&!i[0]) | (!i[14]&i[13]) | (
-    i[15]&i[14]&i[0]);
-
-assign o[5] = (i[15]&!i[0]) | (i[15]&i[11]&i[10]) | (i[13]&!i[8]) | (i[13]&i[7]) | (
-    i[13]&i[9]) | (i[13]&i[10]) | (i[13]&i[11]) | (!i[14]&i[13]) | (
-    i[15]&i[14]);
-
-assign o[4] = (!i[14]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[0]) | (!i[15]&!i[14]
-    &!i[0]) | (!i[14]&i[6]&!i[0]) | (!i[15]&i[14]&i[0]) | (!i[14]&i[5]
-    &!i[0]) | (!i[14]&i[4]&!i[0]) | (!i[14]&!i[13]&i[0]) | (!i[14]&i[3]
-    &!i[0]) | (!i[14]&i[2]&!i[0]);
-
-assign o[3] = (!i[14]&i[13]);
-
-assign o[2] = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (i[15]&!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]
-    &!i[0]) | (!i[15]&i[13]&!i[8]) | (!i[15]&i[13]&i[7]) | (!i[15]&i[13]
-    &i[9]) | (!i[15]&i[13]&i[10]) | (!i[15]&i[13]&i[11]) | (!i[14]&i[13]);
-
-// 32b instruction has lower two bits 2'b11
-
-assign o[1]  = 1'b1;
-
-assign o[0]  = 1'b1;
-
-assign legal = (!i[13]&!i[12]&i[11]&i[1]&!i[0]) | (!i[13]&!i[12]&i[6]&i[1]&!i[0]) | (
-    !i[15]&!i[13]&i[11]&!i[1]) | (!i[13]&!i[12]&i[5]&i[1]&!i[0]) | (
-    !i[13]&!i[12]&i[10]&i[1]&!i[0]) | (!i[15]&!i[13]&i[6]&!i[1]) | (
-    i[15]&!i[12]&!i[1]&i[0]) | (!i[13]&!i[12]&i[9]&i[1]&!i[0]) | (!i[12]
-    &i[6]&!i[1]&i[0]) | (!i[15]&!i[13]&i[5]&!i[1]) | (!i[13]&!i[12]&i[8]
-    &i[1]&!i[0]) | (!i[12]&i[5]&!i[1]&i[0]) | (!i[15]&!i[13]&i[10]&!i[1]) | (
-    !i[13]&!i[12]&i[7]&i[1]&!i[0]) | (i[12]&i[11]&!i[10]&!i[1]&i[0]) | (
-    !i[15]&!i[13]&i[9]&!i[1]) | (!i[13]&!i[12]&i[4]&i[1]&!i[0]) | (i[13]
-    &i[12]&!i[1]&i[0]) | (!i[15]&!i[13]&i[8]&!i[1]) | (!i[13]&!i[12]&i[3]
-    &i[1]&!i[0]) | (i[13]&i[4]&!i[1]&i[0]) | (!i[13]&!i[12]&i[2]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[7]&!i[1]) | (i[13]&i[3]&!i[1]&i[0]) | (
-    i[13]&i[2]&!i[1]&i[0]) | (i[14]&!i[13]&!i[1]) | (!i[14]&!i[12]&!i[1]
-    &i[0]) | (i[15]&!i[13]&i[12]&i[1]&!i[0]) | (!i[15]&!i[13]&!i[12]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[12]&!i[1]) | (i[14]&!i[13]&!i[0]);
-
-
-
-
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Icache closely coupled memory --- ICCM
-//********************************************************************************
-
-module eb1_ifu_iccm_mem
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
- `ifdef USE_POWER_PINS
-   input logic 					vccd1,
-   input logic						vssd1,
- `endif
-   input logic                                        clk,                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                        active_clk,                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                                        rst_l,                               // reset, active low
-   input logic                                        clk_override,                        // Override non-functional clock gating
-
-   input logic                                        iccm_wren,                           // ICCM write enable
-   input logic                                        iccm_rden,                           // ICCM read enable
-   input logic [pt.ICCM_BITS-1:1]                     iccm_rw_addr,                        // ICCM read/write address
-   input logic                                        iccm_buf_correct_ecc,                // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM under a correction - This is needed to guard replacements when hit
-   input logic [2:0]                                  iccm_wr_size,                        // ICCM write size
-   input logic [77:0]                                 iccm_wr_data,                        // ICCM write data
-
-   input eb1_ccm_ext_in_pkt_t [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,                    // External packet
-
-   output logic [63:0]                                iccm_rd_data,                        // ICCM read data
-   output logic [77:0]                                iccm_rd_data_ecc,                    // ICCM read ecc
-   input  logic                                       scan_mode                            // Scan mode control
-
-);
-
-
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                wren_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                rden_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                iccm_clken;
-   logic [pt.ICCM_NUM_BANKS-1:0] [pt.ICCM_BITS-1:pt.ICCM_BANK_INDEX_LO] addr_bank;
-
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_dout, iccm_bank_dout_fn;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data;
-   logic [pt.ICCM_BITS-1:1]              addr_bank_inc;
-   logic [pt.ICCM_BANK_HI : 2]           iccm_rd_addr_hi_q;
-   logic [pt.ICCM_BANK_HI : 1]           iccm_rd_addr_lo_q;
-   logic             [63:0]              iccm_rd_data_pre;
-   logic             [63:0]              iccm_data;
-   logic [1:0]                           addr_incr;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data_vec;
-
-   // logic to handle hard persisten faults
-   logic [1:0] [pt.ICCM_BITS-1:2]        redundant_address;
-   logic [1:0] [38:0]                    redundant_data;
-   logic [1:0]                           redundant_valid;
-   logic [pt.ICCM_NUM_BANKS-1:0]         sel_red1, sel_red0, sel_red1_q, sel_red0_q;
-
-
-   logic [38:0]                          redundant_data0_in, redundant_data1_in;
-   logic                                 redundant_lru, redundant_lru_in, redundant_lru_en;
-   logic                                 redundant_data0_en;
-   logic                                 redundant_data1_en;
-   logic                                 r0_addr_en, r1_addr_en;
-
-   // Testing persistent flip
-   //   logic [3:0]                              not_iccm_bank_dout;
-   //   logic [15:3]                     ecc_insert_flip_in, ecc_insert_flip;
-   //   logic                                 flip_en, flip_match, flip_match_q;
-   //
-   //   assign      flip_in = (iccm_rw_addr[3:2] != 2'b00);    // dont flip when bank0 - this is to make some progress in DMA streaming cases
-   //   assign      flip_en = iccm_rden;
-   //
-   //   rvdffs #(1) flipmatch  (.*,
-   //                   .clk(clk),
-   //                   .din(flip_in),
-   //                   .en(flip_en),
-   //                   .dout(flip_match_q));
-   //
-   // end of testing flip
-
-
-   assign addr_incr[1:0]                    = (iccm_wr_size[1:0] == 2'b11) ?  2'b10: 2'b01;
-   assign addr_bank_inc[pt.ICCM_BITS-1 : 1] = iccm_rw_addr[pt.ICCM_BITS-1 : 1] + addr_incr[1:0];
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS/2; i++) begin: mem_bank_data
-      assign iccm_bank_wr_data_vec[(2*i)]   = iccm_wr_data[38:0];
-      assign iccm_bank_wr_data_vec[(2*i)+1] = iccm_wr_data[77:39];
-   end
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS; i++) begin: mem_bank
-      assign wren_bank[i]         = iccm_wren & ((iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_bank_wr_data[i] = iccm_bank_wr_data_vec[i];
-      assign rden_bank[i]         = iccm_rden & ( (iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_clken[i]        =  wren_bank[i] | rden_bank[i] | clk_override;
-      assign addr_bank[i][pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] = wren_bank[i] ? iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                      ((addr_bank_inc[pt.ICCM_BANK_HI:2] == i) ?
-                                                                                                    addr_bank_inc[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                                    iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO]);
-
-
-     if (pt.ICCM_INDEX_BITS == 6 ) begin : iccm
-               ram_64x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-   else if (pt.ICCM_INDEX_BITS == 7 ) begin : iccm
-               ram_128x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-     else if (pt.ICCM_INDEX_BITS == 8 ) begin : iccm
-               /*ram_256x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );*/
-                                      sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i][31:0]),
-									.dout0(iccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 9 ) begin : iccm
-               ram_512x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 10 ) begin : iccm
-              /* ram_1024x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-                                     );*/
-                                     
-                                     sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i]),
-									.dout0(iccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 11 ) begin : iccm
-               ram_2048x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 12 ) begin : iccm
-               ram_4096x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 13 ) begin : iccm
-               ram_8192x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 14 ) begin : iccm
-               ram_16384x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else begin : iccm
-               ram_32768x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-
-   // match the redundant rows
-   assign sel_red1[i]  = (redundant_valid[1]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[1][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[1][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   assign sel_red0[i]  = (redundant_valid[0]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[0][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[0][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   rvdff #(1) selred0  (.*,
-                   .clk(active_clk),
-                   .din(sel_red0[i]),
-                   .dout(sel_red0_q[i]));
-
-   rvdff #(1) selred1  (.*,
-                   .clk(active_clk),
-                   .din(sel_red1[i]),
-                   .dout(sel_red1_q[i]));
-
-
-  // muxing out the memory data with the redundant data if the address matches
-   assign iccm_bank_dout_fn[i][38:0] = ({39{sel_red1_q[i]}}                         & redundant_data[1][38:0]) |
-                                       ({39{sel_red0_q[i]}}                         & redundant_data[0][38:0]) |
-                                       ({39{~sel_red0_q[i] & ~sel_red1_q[i]}}       & iccm_bank_dout[i][38:0]);
-
-  end : mem_bank
-// This section does the redundancy for tolerating single bit errors
-// 2x 39 bit data values with address[hi:2] and a valid bit is needed to CAM and sub out the reads/writes to the particular locations
-// Also a LRU flop is kept to decide which of the redundant element to replace.
-   assign r0_addr_en              = ~redundant_lru & iccm_buf_correct_ecc;
-   assign r1_addr_en              = redundant_lru  & iccm_buf_correct_ecc;
-   assign redundant_lru_en         = iccm_buf_correct_ecc | (((|sel_red0[pt.ICCM_NUM_BANKS-1:0]) | (|sel_red1[pt.ICCM_NUM_BANKS-1:0])) & iccm_rden & iccm_correction_state);
-   assign redundant_lru_in        = iccm_buf_correct_ecc ? ~redundant_lru : (|sel_red0[pt.ICCM_NUM_BANKS-1:0]) ? 1'b1 : 1'b0;
-
-   rvdffs #() red_lru  (.*,                               // LRU flop for the redundant replacements
-                   .clk(active_clk),
-                   .en(redundant_lru_en),
-                   .din(redundant_lru_in),
-                   .dout(redundant_lru));
-
-    rvdffs #(pt.ICCM_BITS-2) r0_address  (.*,                 // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r0_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[0][pt.ICCM_BITS-1:2]));
-
-   rvdffs #(pt.ICCM_BITS-2) r1_address  (.*,                   // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[1][pt.ICCM_BITS-1:2]));
-
-    rvdffs #(1) r0_valid  (.*,
-                   .clk(active_clk),                                  // Redundant Row 0 Valid
-                   .en(r0_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[0]));
-
-   rvdffs #(1) r1_valid  (.*,                                   // Redundant Row 1 Valid
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[1]));
-
-
-
-   // We will have to update the Redundant copies in addition to the memory on subsequent writes to this memory location.
-   // The data gets updated on : 1) correction cycle, 2) Future writes - this could be W writes from DMA ( match up till addr[2]) or DW writes ( match till address[3])
-   // The data to pick also depends on the current address[2], size and the addr[2] stored in the address field of the redundant flop. Correction cycle is always W write and the data is splat on both legs, so choosing lower Word
-
-    assign redundant_data0_en      = ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[0][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[0][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[0] & iccm_wren) |
-                                      (~redundant_lru & iccm_buf_correct_ecc);
-
-    assign redundant_data0_in[38:0] = (((iccm_rw_addr[2] == redundant_address[0][2]) & iccm_rw_addr[2]) | (redundant_address[0][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r0_data  (.*,                                 // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data0_en),
-                   .din(redundant_data0_in[38:0]),
-                   .dout(redundant_data[0][38:0]));
-
-   assign redundant_data1_en      =  ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[1][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[1][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[1] & iccm_wren) |
-                                     (redundant_lru & iccm_buf_correct_ecc);
-
-   assign redundant_data1_in[38:0] = (((iccm_rw_addr[2] == redundant_address[1][2]) & iccm_rw_addr[2]) | (redundant_address[1][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r1_data  (.*,                                  // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data1_en),
-                   .din(redundant_data1_in[38:0]),
-                   .dout(redundant_data[1][38:0]));
-
-
-   rvdffs  #(pt.ICCM_BANK_HI)   rd_addr_lo_ff (.*, .clk(active_clk), .din(iccm_rw_addr [pt.ICCM_BANK_HI:1]), .dout(iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:1]), .en(1'b1));   // bit 0 of address is always 0
-   rvdffs  #(pt.ICCM_BANK_BITS) rd_addr_hi_ff (.*, .clk(active_clk), .din(addr_bank_inc[pt.ICCM_BANK_HI:2]), .dout(iccm_rd_addr_hi_q[pt.ICCM_BANK_HI:2]), .en(1'b1));
-
-   assign iccm_rd_data_pre[63:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][31:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][31:0]};
-   assign iccm_data[63:0]        = 64'({16'b0, (iccm_rd_data_pre[63:0] >> (16*iccm_rd_addr_lo_q[1]))});
-   assign iccm_rd_data[63:0]     = {iccm_data[63:0]};
-   assign iccm_rd_data_ecc[77:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][38:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][38:0]};
-
-endmodule // eb1_ifu_iccm_mem
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// eb1_ifu_ifc_ctl.sv
-// Function: Fetch pipe control
-//
-// Comments:
-//********************************************************************************
-
-module eb1_ifu_ifc_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,                         // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic free_l2clk,                  // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic rst_l, // reset enable, from core pin
-   input logic scan_mode, // scan
-
-   input logic ic_hit_f,      // Icache hit
-   input logic ifu_ic_mb_empty, // Miss buffer empty
-
-   input logic ifu_fb_consume1,  // Aligner consumed 1 fetch buffer
-   input logic ifu_fb_consume2,  // Aligner consumed 2 fetch buffers
-
-   input logic dec_tlu_flush_noredir_wb, // Don't fetch on flush
-   input logic exu_flush_final, // FLush
-   input logic [31:1] exu_flush_path_final, // Flush path
-
-   input logic ifu_bp_hit_taken_f, // btb hit, select the target path
-   input logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-
-   input logic ic_dma_active, // IC DMA active, stop fetching
-   input logic ic_write_stall, // IC is writing, stop fetching
-   input logic dma_iccm_stall_any, // force a stall in the fetch pipe for DMA ICCM access
-
-   input logic [31:0]  dec_tlu_mrac_ff ,   // side_effect and cacheable for each region
-
-   output logic [31:1] ifc_fetch_addr_f, // fetch addr F
-   output logic [31:1] ifc_fetch_addr_bf, // fetch addr BF
-
-   output logic  ifc_fetch_req_f,  // fetch request valid F
-
-   output logic  ifu_pmu_fetch_stall, // pmu event measuring fetch stall
-
-   output logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. BF stage
-   output logic                      ifc_fetch_req_bf,              // Fetch request. Comes with the address.  BF stage
-   output logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. BF stage
-   output logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   output logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   output logic  ifc_dma_access_ok // fetch is not accessing the ICCM, DMA can proceed
-
-   
-
-   );
-
-   logic [31:1]  fetch_addr_bf;
-   logic [31:1]  fetch_addr_next;
-   logic [3:0]   fb_write_f, fb_write_ns;
-
-   logic     fb_full_f_ns, fb_full_f;
-   logic     fb_right, fb_right2, fb_left, wfm, idle;
-   logic     sel_last_addr_bf, sel_next_addr_bf;
-   logic     miss_f, miss_a;
-   logic     flush_fb, dma_iccm_stall_any_f;
-   logic     mb_empty_mod, goto_idle, leave_idle;
-   logic     fetch_bf_en;
-   logic         line_wrap;
-   logic         fetch_addr_next_1;
-
-   // FSM assignment
-    typedef enum logic [1:0] { IDLE  = 2'b00 ,
-                               FETCH = 2'b01 ,
-                               STALL = 2'b10 ,
-                               WFM   = 2'b11   } state_t ;
-   state_t state      ;
-   state_t next_state ;
-
-   logic     dma_stall;
-   assign dma_stall = ic_dma_active | dma_iccm_stall_any_f;
-
-
-
-   // Fetch address mux
-   // - flush
-   // - Miss *or* flush during WFM (icache miss buffer is blocking)
-   // - Sequential
-
-if(pt.BTB_ENABLE==1) begin
-   logic sel_btb_addr_bf;
-
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_btb_addr_bf  = ~exu_flush_final & ifc_fetch_req_f & ifu_bp_hit_taken_f & ic_hit_f;
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_btb_addr_bf}} & {ifu_bp_btb_target_f[31:1]})| // BTB target
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-
-end // if (pt.BTB_ENABLE=1)
-   else begin
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-end
-   assign fetch_addr_next[31:1] = {({ifc_fetch_addr_f[31:2]} + 31'b1), fetch_addr_next_1 };
-   assign line_wrap = (fetch_addr_next[pt.ICACHE_TAG_INDEX_LO] ^ ifc_fetch_addr_f[pt.ICACHE_TAG_INDEX_LO]);
-
-   assign fetch_addr_next_1 = line_wrap ? 1'b0 : ifc_fetch_addr_f[1];
-
-   assign ifc_fetch_req_bf_raw = ~idle;
-   assign ifc_fetch_req_bf =  ifc_fetch_req_bf_raw &
-
-                 ~(fb_full_f_ns & ~(ifu_fb_consume2 | ifu_fb_consume1)) &
-                 ~dma_stall &
-                 ~ic_write_stall &
-                 ~dec_tlu_flush_noredir_wb ;
-
-
-   assign fetch_bf_en = exu_flush_final | ifc_fetch_req_f;
-
-   assign miss_f = ifc_fetch_req_f & ~ic_hit_f & ~exu_flush_final;
-
-   assign mb_empty_mod = (ifu_ic_mb_empty | exu_flush_final) & ~dma_stall & ~miss_f & ~miss_a;
-
-   // Halt flushes and takes us to IDLE
-   assign goto_idle = exu_flush_final & dec_tlu_flush_noredir_wb;
-   // If we're in IDLE, and we get a flush, goto FETCH
-   assign leave_idle = exu_flush_final & ~dec_tlu_flush_noredir_wb & idle;
-
-//.i 7
-//.o 2
-//.ilb state[1] state[0] reset_delayed miss_f mb_empty_mod  goto_idle leave_idle
-//.ob next_state[1] next_state[0]
-//.type fr
-//
-//# fetch 01, stall 10, wfm 11, idle 00
-//-- 1---- 01
-//-- 0--1- 00
-//00 0--00 00
-//00 0--01 01
-//
-//01 01-0- 11
-//01 00-0- 01
-//
-//11 0-10- 01
-//11 0-00- 11
-
-   assign next_state[1] = (~state[1] & state[0] & miss_f & ~goto_idle) |
-              (state[1] & ~mb_empty_mod & ~goto_idle);
-
-   assign next_state[0] = (~goto_idle & leave_idle) | (state[0] & ~goto_idle);
-
-   assign flush_fb = exu_flush_final;
-
-   // model fb write logic to mass balance the fetch buffers
-   assign fb_right = ( ifu_fb_consume1 & ~ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)) | // Consumed and no new fetch
-              (ifu_fb_consume2 &  ifc_fetch_req_f); // Consumed 2 and new fetch
-
-
-   assign fb_right2 = (ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)); // Consumed 2 and no new fetch
-
-   assign fb_left = ifc_fetch_req_f & ~(ifu_fb_consume1 | ifu_fb_consume2) & ~miss_f;
-
-// CBH
-   assign fb_write_ns[3:0] = ( ({4{(flush_fb)}} & 4'b0001) |
-                   ({4{~flush_fb & fb_right }} & {1'b0, fb_write_f[3:1]}) |
-                   ({4{~flush_fb & fb_right2}} & {2'b0, fb_write_f[3:2]}) |
-                   ({4{~flush_fb & fb_left  }} & {fb_write_f[2:0], 1'b0}) |
-                   ({4{~flush_fb & ~fb_right & ~fb_right2 & ~fb_left}}  & fb_write_f[3:0]));
-
-
-   assign fb_full_f_ns = fb_write_ns[3];
-
-   assign idle     = state      == IDLE  ;
-   assign wfm      = state      == WFM   ;
-
-   rvdffie #(10) fbwrite_ff (.*, .clk(free_l2clk),
-                          .din( {dma_iccm_stall_any, miss_f, ifc_fetch_req_bf, next_state[1:0], fb_full_f_ns, fb_write_ns[3:0]}),
-                          .dout({dma_iccm_stall_any_f, miss_a, ifc_fetch_req_f, state[1:0], fb_full_f, fb_write_f[3:0]}));
-
-   assign ifu_pmu_fetch_stall = wfm | 
-                (ifc_fetch_req_bf_raw & ( (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1 | exu_flush_final)) |
-                  dma_stall));
-
-
-
-   assign ifc_fetch_addr_bf[31:1] = fetch_addr_bf[31:1];
-
-   rvdffpcie #(31) faddrf1_ff  (.*, .en(fetch_bf_en), .din(fetch_addr_bf[31:1]), .dout(ifc_fetch_addr_f[31:1]));
-
-
- if (pt.ICCM_ENABLE)  begin
-   logic iccm_acc_in_region_bf;
-   logic iccm_acc_in_range_bf;
-   rvrangecheck #( .CCM_SADR    (pt.ICCM_SADR),
-                   .CCM_SIZE    (pt.ICCM_SIZE) ) iccm_rangecheck (
-                                     .addr     ({ifc_fetch_addr_bf[31:1],1'b0}) ,
-                                     .in_range (iccm_acc_in_range_bf) ,
-                                     .in_region(iccm_acc_in_region_bf)
-                                     );
-
-   assign ifc_iccm_access_bf = iccm_acc_in_range_bf ;
-
-  assign ifc_dma_access_ok = ( (~ifc_iccm_access_bf |
-                 (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1)) |
-                 (wfm  & ~ifc_fetch_req_bf) |
-                 idle ) & ~exu_flush_final) |
-                  dma_iccm_stall_any_f;
-
-  assign ifc_region_acc_fault_bf = ~iccm_acc_in_range_bf & iccm_acc_in_region_bf ;
- end
- else  begin
-   assign ifc_iccm_access_bf = 1'b0 ;
-   assign ifc_dma_access_ok  = 1'b0 ;
-   assign ifc_region_acc_fault_bf  = 1'b0 ;
- end
-
-   assign ifc_fetch_uncacheable_bf =  ~dec_tlu_mrac_ff[{ifc_fetch_addr_bf[31:28] , 1'b0 }]  ; // bit 0 of each region description is the cacheable bit
-
-endmodule // eb1_ifu_ifc_ctl
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-
-//********************************************************************************
-// Function: Icache , iccm  control
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu_mem_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,                                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                                          // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic rst_l,                                               // reset, active low
-
-   input logic                       exu_flush_final,               // Flush from the pipeline., includes flush lower
-   input logic                       dec_tlu_flush_lower_wb,        // Flush lower from the pipeline.
-   input logic                       dec_tlu_flush_err_wb,          // Flush from the pipeline due to perr.
-   input logic                       dec_tlu_i0_commit_cmt,         // committed i0 instruction
-   input logic                       dec_tlu_force_halt,            // force halt.
-
-   input logic [31:1]                ifc_fetch_addr_bf,             // Fetch Address byte aligned always.      F1 stage.
-   input logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. F1 stage
-   input logic                       ifc_fetch_req_bf,              // Fetch request. Comes with the address.  F1 stage
-   input logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. F1 stage
-   input logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   input logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-   input logic                       ifc_dma_access_ok,             // It is OK to give dma access to the ICCM. (ICCM is not busy this cycle).
-   input logic                       dec_tlu_fence_i_wb,            // Fence.i instruction is committing. Clear all Icache valids.
-   input logic                       ifu_bp_hit_taken_f,            // Branch is predicted taken. Kill the fetch next cycle.
-
-   input logic                       ifu_bp_inst_mask_f,            // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic                      ifu_miss_state_idle,           // No icache misses are outstanding.
-   output logic                      ifu_ic_mb_empty,               // Continue with normal fetching. This does not mean that miss is finished.
-   output logic                      ic_dma_active  ,               // In the middle of servicing dma request to ICCM. Do not make any new requests.
-   output logic                      ic_write_stall,                // Stall fetch the cycle we are writing the cache.
-
-/// PMU signals
-   output logic                      ifu_pmu_ic_miss,               // IC miss event
-   output logic                      ifu_pmu_ic_hit,                // IC hit event
-   output logic                      ifu_pmu_bus_error,             // Bus error event
-   output logic                      ifu_pmu_bus_busy,              // Bus busy event
-   output logic                      ifu_pmu_bus_trxn,              // Bus transaction
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-    input  logic                     ifu_bus_clk_en,
-
-
-   input  logic                      dma_iccm_req,      //  dma iccm command (read or write)
-   input  logic [31:0]               dma_mem_addr,      //  dma address
-   input  logic [2:0]                dma_mem_sz,        //  size
-   input  logic                      dma_mem_write,     //  write
-   input  logic [63:0]               dma_mem_wdata,     //  write data
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-   output logic                      iccm_dma_ecc_error,//   Data read from iccm has an ecc error
-   output logic                      iccm_dma_rvalid,   //   Data read from iccm is valid
-   output logic [63:0]               iccm_dma_rdata,    //   dma data read from iccm
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,        //   iccm ready to accept new command.
-
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] [70:0]               ic_wr_data,           // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,  // Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,     // Debug wr cache.
-   output logic [70:0]               ifu_ic_debug_rd_data, // debug data read
-
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-   input  logic [1:0]                ifu_fetch_val,
-   // IFU control signals
-   output logic                      ic_hit_f,               // Hit in Icache(if Icache access) or ICCM access( ICCM always has ic_hit_f)
-   output logic [1:0]                ic_access_fault_f,      // Access fault (bus error or ICCM access in region but out of offset range).
-   output logic [1:0]                ic_access_fault_type_f, // Access fault types
-   output logic                      iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-   output logic [1:0]                iccm_rd_ecc_double_err, // This fetch has a double ICCM ecc  error.
-   output logic                      ic_error_start,         // This has any I$ errors ( data/tag/ecc/parity )
-
-   output logic                      ifu_async_error_start,  // Or of the sb iccm, and all the icache errors sent to aligner to stop
-   output logic                      iccm_dma_sb_error,      // Single Bit ECC error from a DMA access
-   output logic [1:0]                ic_fetch_val_f,         // valid bytes for fetch. To the Aligner.
-   output logic [31:0]               ic_data_f,              // Data read from Icache or ICCM. To the Aligner.
-   output logic [63:0]               ic_premux_data,         // Premuxed data to be muxed with Icache data
-   output logic                      ic_sel_premux_data,     // Select premux data.
-
-/////  Debug
-   input  eb1_cache_debug_pkt_t     dec_tlu_ic_diag_pkt ,       // Icache/tag debug read/write packet
-   input  logic                      dec_tlu_core_ecc_disable,   // disable the ecc checking and flagging
-   output logic                      ifu_ic_debug_rd_data_valid, // debug data valid.
-   output logic                      iccm_buf_correct_ecc,
-   output logic                      iccm_correction_state,
-
-
-   input  logic         scan_mode
-   );
-
-//  Create different defines for ICACHE and ICCM enable combinations
-
- localparam   NUM_OF_BEATS = 8 ;
-
-
-
-   logic [31:3]    ifu_ic_req_addr_f;
-   logic           uncacheable_miss_in ;
-   logic           uncacheable_miss_ff;
-
-
-
-   logic           bus_ifu_wr_en     ;
-   logic           bus_ifu_wr_en_ff  ;
-   logic           bus_ifu_wr_en_ff_q  ;
-   logic           bus_ifu_wr_en_ff_wo_err  ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     bus_ic_wr_en ;
-
-   logic           reset_tag_valid_for_miss  ;
-
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_in;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_rep_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_ff;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_hit_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_in;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_ff;
-
-
-   logic           ifu_wr_data_comb_err ;
-   logic           ifu_byp_data_err_new;
-   logic  [1:0]    ifu_byp_data_err_f;
-   logic           ifu_wr_cumulative_err_data;
-   logic           ifu_wr_cumulative_err;
-   logic           ifu_wr_data_comb_err_ff;
-   logic           scnd_miss_index_match ;
-
-
-   logic           ifc_dma_access_q_ok;
-   logic           ifc_iccm_access_f ;
-   logic           ifc_region_acc_fault_f;
-   logic           ifc_region_acc_fault_final_f;
-   logic  [1:0]    ifc_bus_acc_fault_f;
-   logic           ic_act_miss_f;
-   logic           ic_miss_under_miss_f;
-   logic           ic_ignore_2nd_miss_f;
-   logic           ic_act_hit_f;
-   logic           miss_pending;
-   logic [31:1]    imb_in , imb_ff  ;
-   logic [31:pt.ICACHE_BEAT_ADDR_HI+1]    miss_addr_in , miss_addr  ;
-   logic           miss_wrap_f ;
-   logic           flush_final_f;
-   logic           ifc_fetch_req_f;
-   logic           ifc_fetch_req_f_raw;
-   logic           fetch_req_f_qual   ;
-   logic           ifc_fetch_req_qual_bf ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     replace_way_mb_any;
-   logic           last_beat;
-   logic           reset_beat_cnt  ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_req_addr_bits_hi_3 ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_wr_addr_bits_hi_3 ;
-   logic [31:1]    ifu_fetch_addr_int_f ;
-   logic [31:1]    ifu_ic_rw_int_addr ;
-   logic           crit_wd_byp_ok_ff ;
-   logic           ic_crit_wd_rdy_new_ff;
-   logic   [79:0]  ic_byp_data_only_pre_new;
-   logic   [79:0]  ic_byp_data_only_new;
-   logic           ic_byp_hit_f ;
-   logic           ic_valid ;
-   logic           ic_valid_ff;
-   logic           reset_all_tags;
-   logic           ic_valid_w_debug;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren,ifu_tag_wren_ff;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_tag_wr_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_way_ff;
-   logic           ic_debug_rd_en_ff   ;
-   logic           fetch_bf_f_c1_clken ;
-   logic           fetch_bf_f_c1_clk;
-   logic           debug_c1_clken;
-   logic           debug_c1_clk;
-
-   logic           reset_ic_in ;
-   logic           reset_ic_ff ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]     vaddr_f ;
-   logic [31:1]    ifu_status_wr_addr;
-   logic           sel_mb_addr ;
-   logic           sel_mb_addr_ff ;
-   logic           sel_mb_status_addr ;
-   logic [63:0]    ic_final_data;
-
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_w_debug ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_w_debug ;
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]                              way_status_new_ff ;
-   logic                                    way_status_wr_en_ff ;
-   logic [pt.ICACHE_TAG_DEPTH-1:0][pt.ICACHE_STATUS_BITS-1:0]        way_status_out ;
-   logic [1:0]                              ic_debug_way_enc;
-
-   logic [pt.IFU_BUS_TAG-1:0]             ifu_bus_rid_ff;
-
-   logic         fetch_req_icache_f;
-   logic         fetch_req_iccm_f;
-   logic         ic_iccm_hit_f;
-   logic         fetch_uncacheable_ff;
-   logic         way_status_wr_en;
-   logic         sel_byp_data;
-   logic         sel_ic_data;
-   logic         sel_iccm_data;
-   logic         ic_rd_parity_final_err;
-   logic         ic_act_miss_f_delayed;
-   logic         bus_ifu_wr_data_error;
-   logic         bus_ifu_wr_data_error_ff;
-   logic         way_status_wr_en_w_debug;
-   logic         ic_debug_tag_val_rd_out;
-   logic         ifu_pmu_ic_miss_in;
-   logic         ifu_pmu_ic_hit_in;
-   logic         ifu_pmu_bus_error_in;
-   logic         ifu_pmu_bus_trxn_in;
-   logic         ifu_pmu_bus_busy_in;
-   logic         ic_debug_ict_array_sel_in;
-   logic         ic_debug_ict_array_sel_ff;
-   logic         debug_data_clken;
-   logic         last_data_recieved_in ;
-   logic         last_data_recieved_ff ;
-
-   logic                          ifu_bus_rvalid           ;
-   logic                          ifu_bus_rvalid_ff        ;
-   logic                          ifu_bus_rvalid_unq_ff    ;
-   logic                          ifu_bus_arready_unq       ;
-   logic                          ifu_bus_arready_unq_ff    ;
-   logic                          ifu_bus_arvalid           ;
-   logic                          ifu_bus_arvalid_ff        ;
-   logic                          ifu_bus_arready           ;
-   logic                          ifu_bus_arready_ff        ;
-   logic [63:0]                   ifu_bus_rdata_ff        ;
-   logic [1:0]                    ifu_bus_rresp_ff          ;
-   logic                          ifu_bus_rsp_valid ;
-   logic                          ifu_bus_rsp_ready ;
-   logic [pt.IFU_BUS_TAG-1:0]     ifu_bus_rsp_tag;
-   logic [63:0]                   ifu_bus_rsp_rdata;
-   logic [1:0]                    ifu_bus_rsp_opc;
-
-   logic [pt.ICACHE_NUM_BEATS-1:0]    write_fill_data;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    wr_data_c1_clk;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]    byp_fetch_index;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_1;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]    byp_fetch_index_inc;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_1;
-   logic          miss_buff_hit_unq_f ;
-   logic          stream_hit_f ;
-   logic          stream_miss_f ;
-   logic          stream_eol_f ;
-   logic          crit_byp_hit_f ;
-   logic [pt.IFU_BUS_TAG-1:0] other_tag ;
-   logic [(2*pt.ICACHE_NUM_BEATS)-1:0] [31:0] ic_miss_buff_data;
-   logic [63:0] ic_miss_buff_half;
-   logic        scnd_miss_req, scnd_miss_req_q;
-   logic        scnd_miss_req_in;
-
-
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_ff;
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_in;
-   logic [38:0]                         iccm_ecc_corr_data_ff;
-   logic                                iccm_ecc_write_status     ;
-   logic                                iccm_rd_ecc_single_err_ff   ;
-   logic                                iccm_error_start;     // start the error fsm
-   logic                                perr_state_en;
-   logic                                miss_state_en;
-
-   logic        busclk;
-   logic        busclk_force;
-   logic        busclk_reset;
-   logic        bus_ifu_bus_clk_en_ff;
-   logic        bus_ifu_bus_clk_en ;
-
-   logic        ifc_bus_ic_req_ff_in;
-   logic        ifu_bus_cmd_valid ;
-   logic        ifu_bus_cmd_ready ;
-
-   logic        bus_inc_data_beat_cnt     ;
-   logic        bus_reset_data_beat_cnt   ;
-   logic        bus_hold_data_beat_cnt    ;
-
-   logic        bus_inc_cmd_beat_cnt     ;
-   logic        bus_reset_cmd_beat_cnt_0   ;
-   logic        bus_reset_cmd_beat_cnt_secondlast   ;
-   logic        bus_hold_cmd_beat_cnt    ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_data_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_data_beat_count      ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_cmd_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_cmd_beat_count      ;
-
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_rd_addr_count;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_rd_addr_count;
-
-
-   logic        bus_cmd_sent           ;
-   logic        bus_last_data_beat     ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren            ;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren_last       ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]       wren_reset_miss      ;
-   logic        ifc_dma_access_ok_d;
-   logic        ifc_dma_access_ok_prev;
-
-   logic   bus_cmd_req_in ;
-   logic   bus_cmd_req_hold ;
-
-   logic   second_half_available ;
-   logic   write_ic_16_bytes ;
-
-   logic   ifc_region_acc_fault_final_bf;
-   logic   ifc_region_acc_fault_memory_bf;
-   logic   ifc_region_acc_fault_memory_f;
-   logic   ifc_region_acc_okay;
-
-   logic   iccm_correct_ecc;
-   logic   dma_sb_err_state, dma_sb_err_state_ff;
-   logic   two_byte_instr;
-
-   typedef enum logic [2:0] {IDLE=3'b000, CRIT_BYP_OK=3'b001, HIT_U_MISS=3'b010, MISS_WAIT=3'b011,CRIT_WRD_RDY=3'b100,SCND_MISS=3'b101,STREAM=3'b110 , STALL_SCND_MISS=3'b111} miss_state_t;
-   miss_state_t miss_state, miss_nxtstate;
-
-   typedef enum logic [1:0] {ERR_STOP_IDLE=2'b00, ERR_FETCH1=2'b01 , ERR_FETCH2=2'b10 , ERR_STOP_FETCH=2'b11} err_stop_state_t;
-   err_stop_state_t err_stop_state, err_stop_nxtstate;
-   logic   err_stop_state_en ;
-   logic   err_stop_fetch ;
-
-   logic   ic_crit_wd_rdy;         // Critical fetch is ready to be bypassed.
-
-   logic   ifu_bp_hit_taken_q_f;
-   logic   ifu_bus_rvalid_unq;
-   logic   bus_cmd_beat_en;
-
-
-// ---- Clock gating section -----
-// c1 clock enables
-
-
-   assign fetch_bf_f_c1_clken  = ifc_fetch_req_bf_raw | ifc_fetch_req_f | miss_pending | exu_flush_final | scnd_miss_req;
-   assign debug_c1_clken       = ic_debug_rd_en | ic_debug_wr_en ;
-   // C1 - 1 clock pulse for data
-
-   rvclkhdr fetch_bf_f_c1_cgc    ( .en(fetch_bf_f_c1_clken),     .l1clk(fetch_bf_f_c1_clk), .* );
-   rvclkhdr debug_c1_cgc         ( .en(debug_c1_clken),          .l1clk(debug_c1_clk), .* );
-
-
-
-// ------ end clock gating section ------------------------
-
-   logic [1:0]    iccm_single_ecc_error;
-   logic          dma_iccm_req_f ;
-   assign iccm_dma_sb_error     = (|iccm_single_ecc_error[1:0] )  & dma_iccm_req_f ;
-   assign ifu_async_error_start = iccm_rd_ecc_single_err | ic_error_start;
-
-
-   typedef enum logic [2:0] {ERR_IDLE=3'b000, IC_WFF=3'b001 , ECC_WFF=3'b010 , ECC_CORR=3'b011, DMA_SB_ERR=3'b100} perr_state_t;
-   perr_state_t perr_state, perr_nxtstate;
-
-
-   assign ic_dma_active = iccm_correct_ecc | (perr_state == DMA_SB_ERR) | (err_stop_state == ERR_STOP_FETCH) | err_stop_fetch |
-                          dec_tlu_flush_err_wb; // The last term is to give a error-correction a chance to finish before refetch starts
-
-   assign scnd_miss_req_in     = ifu_bus_rsp_valid & bus_ifu_bus_clk_en & ifu_bus_rsp_ready &
-                                 (&bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]) &
-                                 ~uncacheable_miss_ff &  ((miss_state == SCND_MISS) | (miss_nxtstate == SCND_MISS)) & ~exu_flush_final;
-
-   assign ifu_bp_hit_taken_q_f = ifu_bp_hit_taken_f & ic_hit_f ;
-
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   // FIFO state machine
-   always_comb begin : MISS_SM
-      miss_nxtstate   = IDLE;
-      miss_state_en   = 1'b0;
-      case (miss_state)
-         IDLE: begin : idle
-                  miss_nxtstate = (ic_act_miss_f & ~exu_flush_final) ? CRIT_BYP_OK : HIT_U_MISS ;
-                  miss_state_en = ic_act_miss_f & ~dec_tlu_force_halt ;
-         end
-         CRIT_BYP_OK: begin : crit_byp_ok
-                  miss_nxtstate =  (dec_tlu_force_halt ) ?                                                                             IDLE :
-                                  ( ic_byp_hit_f &  (last_data_recieved_ff | (bus_ifu_wr_en_ff & last_beat)) &  uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f &  ~last_data_recieved_ff                                &  uncacheable_miss_ff) ? MISS_WAIT :
-                                  (~ic_byp_hit_f &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       &  uncacheable_miss_ff) ? CRIT_WRD_RDY :
-                                  (                                      (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f  &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  ( bus_ifu_wr_en_ff &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  (~ic_byp_hit_f  &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( (exu_flush_final | ifu_bp_hit_taken_q_f)  & ~(bus_ifu_wr_en_ff & last_beat)                      ) ? HIT_U_MISS : IDLE;
-                  miss_state_en =  dec_tlu_force_halt | exu_flush_final | ic_byp_hit_f | ifu_bp_hit_taken_q_f | (bus_ifu_wr_en_ff & last_beat) | (bus_ifu_wr_en_ff & ~uncacheable_miss_ff)  ;
-         end
-         CRIT_WRD_RDY: begin : crit_wrd_rdy
-                  miss_nxtstate =  IDLE ;
-                  miss_state_en =  exu_flush_final | flush_final_f | ic_byp_hit_f | dec_tlu_force_halt  ;
-         end
-         STREAM: begin : stream
-                  miss_nxtstate =  ((exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ) & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =    exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f   |  (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         MISS_WAIT: begin : miss_wait
-                  miss_nxtstate =  (exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =   exu_flush_final | (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         HIT_U_MISS: begin : hit_u_miss
-                  miss_nxtstate =  ic_miss_under_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? SCND_MISS :
-                                   ic_ignore_2nd_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? STALL_SCND_MISS : IDLE  ;
-                  miss_state_en = (bus_ifu_wr_en_ff & last_beat) | ic_miss_under_miss_f | ic_ignore_2nd_miss_f | dec_tlu_force_halt;
-         end
-         SCND_MISS: begin : scnd_miss
-                  miss_nxtstate   = dec_tlu_force_halt ? IDLE  :
-                                    exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : CRIT_BYP_OK;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         STALL_SCND_MISS: begin : stall_scnd_miss
-                  miss_nxtstate   =  dec_tlu_force_halt ? IDLE  :
-                                     exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : IDLE;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         default: begin : def_case
-                  miss_nxtstate   = IDLE;
-                  miss_state_en   = 1'b0;
-         end
-      endcase
-   end
-   rvdffs #(($bits(miss_state_t))) miss_state_ff (.clk(active_clk), .din(miss_nxtstate), .dout({miss_state}), .en(miss_state_en),   .*);
-
-  logic    sel_hold_imb     ;
-
-   assign miss_pending       =  (miss_state != IDLE) ;
-   assign crit_wd_byp_ok_ff  =  (miss_state == CRIT_BYP_OK) | ((miss_state == CRIT_WRD_RDY) & ~flush_final_f);
-   assign sel_hold_imb       =  (miss_pending & ~(bus_ifu_wr_en_ff & last_beat) & ~((miss_state == CRIT_WRD_RDY) & exu_flush_final) &
-                              ~((miss_state == CRIT_WRD_RDY) & crit_byp_hit_f) ) | ic_act_miss_f |
-                                (miss_pending & (miss_nxtstate == CRIT_WRD_RDY)) ;
-
-
-   logic         sel_hold_imb_scnd;
-   logic  [31:1] imb_scnd_in;
-   logic  [31:1] imb_scnd_ff;
-   logic         uncacheable_miss_scnd_in ;
-   logic         uncacheable_miss_scnd_ff ;
-
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_in;
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_ff;
-
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_in;
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_ff;
-
-   assign sel_hold_imb_scnd                                =((miss_state == SCND_MISS) | ic_miss_under_miss_f) & ~flush_final_f ;
-   assign way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0] = (miss_state == SCND_MISS) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] : {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]          = (miss_state == SCND_MISS) ? tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]          : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}});
-   assign uncacheable_miss_scnd_in   = sel_hold_imb_scnd ? uncacheable_miss_scnd_ff : ifc_fetch_uncacheable_bf ;
-
-
-   rvdff_fpga #(1)  unc_miss_scnd_ff    (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din (uncacheable_miss_scnd_in), .dout(uncacheable_miss_scnd_ff));
-   rvdffpcie #(31) imb_f_scnd_ff       (.*, .en(fetch_bf_f_c1_clken),  .din ({imb_scnd_in[31:1]}), .dout({imb_scnd_ff[31:1]}));
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_scnd_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_scnd_ff      (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-
-
-
-   assign ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] = bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] ;
-   assign ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3]  = ifu_bus_rid_ff[pt.ICACHE_BEAT_BITS-1:0] & {pt.ICACHE_BEAT_BITS{bus_ifu_wr_en_ff}};
-   // NOTE: Cacheline size is 16 bytes in this example.
-   // Tag     Index  Bank Offset
-   // [31:16] [15:5] [4]  [3:0]
-
-
-   assign fetch_req_icache_f   = ifc_fetch_req_f & ~ifc_iccm_access_f & ~ifc_region_acc_fault_final_f;
-   assign fetch_req_iccm_f     = ifc_fetch_req_f &  ifc_iccm_access_f;
-
-   assign ic_iccm_hit_f        = fetch_req_iccm_f  &  (~miss_pending | (miss_state==HIT_U_MISS) | (miss_state==STREAM));
-   assign ic_byp_hit_f         = (crit_byp_hit_f | stream_hit_f)  & fetch_req_icache_f &  miss_pending ;
-   assign ic_act_hit_f         = (|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) & fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff;
-   assign ic_act_miss_f        = (((~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & ~miss_pending) | scnd_miss_req) & ~ifc_region_acc_fault_final_f;
-   assign ic_miss_under_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   (imb_ff[31:pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO]) & ~uncacheable_miss_ff & ~sel_mb_addr_ff & ~ifc_region_acc_fault_final_f;
-   assign ic_ignore_2nd_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   ((imb_ff[31:pt.ICACHE_TAG_INDEX_LO] == ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO])  |   uncacheable_miss_ff) ;
-   assign ic_hit_f             =  ic_act_hit_f | ic_byp_hit_f | ic_iccm_hit_f | (ifc_region_acc_fault_final_f & ifc_fetch_req_f);
-
-   assign uncacheable_miss_in   = scnd_miss_req ? uncacheable_miss_scnd_ff : sel_hold_imb ? uncacheable_miss_ff : ifc_fetch_uncacheable_bf ;
-   assign imb_in[31:1]          = scnd_miss_req ? imb_scnd_ff[31:1]        : sel_hold_imb ? imb_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign imb_scnd_in[31:1]     = sel_hold_imb_scnd ? imb_scnd_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign scnd_miss_index_match  =  (imb_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == imb_scnd_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]) & scnd_miss_req & ~ifu_wr_cumulative_err_data;
-   assign way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0] = (scnd_miss_req & ~scnd_miss_index_match) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                        (scnd_miss_req &  scnd_miss_index_match) ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                         miss_pending                            ? way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                                                                  {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]          = scnd_miss_req ? (tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0] | ({pt.ICACHE_NUM_WAYS {scnd_miss_index_match}} & replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0])) :
-                                                         miss_pending ? tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]  : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}}) ;
-
-   assign reset_ic_in           = miss_pending & ~scnd_miss_req_q &  (reset_all_tags |  reset_ic_ff) ;
-
-
-
-   rvdffpcie #(31) ifu_fetch_addr_f_ff (.*, .en(fetch_bf_f_c1_clken), .din ({ifc_fetch_addr_bf[31:1]}), .dout({ifu_fetch_addr_int_f[31:1]}));
-
-   assign vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] = ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1] ;
-
-   rvdffpcie #(31) imb_f_ff        (.*, .en(fetch_bf_f_c1_clken), .din (imb_in[31:1]), .dout(imb_ff[31:1]));
-   rvdff_fpga #(1) unc_miss_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ( uncacheable_miss_in),               .dout( uncacheable_miss_ff));
-
-
-   assign miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]      = (~miss_pending                    ) ? imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] : miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] ;
-
-
-   rvdfflie #(.WIDTH(31-pt.ICACHE_BEAT_ADDR_HI),.LEFT(31-pt.ICACHE_BEAT_ADDR_HI-8)) miss_f_ff       (.*, .en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .din ({miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]}), .dout({miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1]}));
-
-
-
-
-
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_ff (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_ff      (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-   assign ifc_fetch_req_qual_bf  = ifc_fetch_req_bf  & ~((miss_state == CRIT_WRD_RDY) & flush_final_f) & ~stream_miss_f ;// & ~exu_flush_final ;
-
-   assign ifc_fetch_req_f       = ifc_fetch_req_f_raw & ~exu_flush_final ;
-
-   rvdff_fpga #(1) ifu_iccm_acc_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_iccm_access_bf),      .dout(ifc_iccm_access_f));
-   rvdff_fpga #(1) ifu_iccm_reg_acc_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_final_bf), .dout(ifc_region_acc_fault_final_f));
-   rvdff_fpga #(1) rgn_acc_ff          (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_bf),       .dout(ifc_region_acc_fault_f));
-
-
-   assign ifu_ic_req_addr_f[31:3]  = {miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] };
-   assign ifu_ic_mb_empty          = (((miss_state == HIT_U_MISS) | (miss_state == STREAM)) & ~(bus_ifu_wr_en_ff & last_beat)) |  ~miss_pending ;
-   assign ifu_miss_state_idle      = (miss_state == IDLE) ;
-
-
-   assign sel_mb_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff) | reset_tag_valid_for_miss) ;
-   assign ifu_ic_rw_int_addr[31:1] = ({31{ sel_mb_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_addr}}  &  ifc_fetch_addr_bf[31:1] )   ;
-
-   assign sel_mb_status_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff & last_beat & bus_ifu_wr_en_ff_q) | reset_tag_valid_for_miss) ;
-   assign ifu_status_wr_addr[31:1] = ({31{ sel_mb_status_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_status_addr}}  &  ifu_fetch_addr_int_f[31:1] )   ;
-
-
-  assign ic_rw_addr[31:1]      = ifu_ic_rw_int_addr[31:1] ;
-
-
-if (pt.ICACHE_ECC == 1) begin: icache_ecc_1
-   logic [6:0]       ic_wr_ecc;
-   logic [6:0]       ic_miss_buff_ecc;
-   logic [141:0]     ic_wr_16bytes_data ;
-   logic [70:0]      ifu_ic_debug_rd_data_in   ;
-
-                rvecc_encode_64  ic_ecc_encode_64_bus (
-                           .din    (ifu_bus_rdata_ff[63:0]),
-                           .ecc_out(ic_wr_ecc[6:0]));
-                rvecc_encode_64  ic_ecc_encode_64_buff (
-                           .din    (ic_miss_buff_half[63:0]),
-                           .ecc_out(ic_miss_buff_ecc[6:0]));
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  ic_wr_16bytes_data[((71*i)+70): (71*i)];
-   end
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_eccerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f)  | ic_rd_parity_final_err;
-
-
-
-  assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {2'b0,ictag_debug_rd_data[25:21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}}, way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                     ic_debug_rd_data[70:0];
-
-  rvdffe #(71) ifu_debug_data_ff (.*,
-                                  .en (debug_data_clken),
-                                  .din ({
-                                         ifu_ic_debug_rd_data_in[70:0]
-                                         }),
-                                  .dout({
-                                         ifu_ic_debug_rd_data[70:0]
-                                         })
-                                  );
-
-  assign ic_wr_16bytes_data[141:0] =  ifu_bus_rid_ff[0] ? {ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_ecc[6:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_ecc[6:0] ,  ic_miss_buff_half[63:0] , ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] } ;
-
-
-end
-else begin : icache_parity_1
-   logic [3:0]   ic_wr_parity;
-   logic [3:0]   ic_miss_buff_parity;
-   logic [135:0] ic_wr_16bytes_data ;
-   logic [70:0]  ifu_ic_debug_rd_data_in   ;
-    for (genvar i=0 ; i < 4 ; i++) begin : DATA_PGEN
-       rveven_paritygen #(16) par_bus  (.data_in   (ifu_bus_rdata_ff[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_wr_parity[i]));
-       rveven_paritygen #(16) par_buff  (.data_in   (ic_miss_buff_half[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_miss_buff_parity[i]));
-    end
-
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  {3'b0, ic_wr_16bytes_data[((68*i)+67): (68*i)]};
-   end
-
-
-
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_parerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f) | ic_rd_parity_final_err;
-
-   assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {6'b0,ictag_debug_rd_data[21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}},way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                      ic_debug_rd_data[70:0] ;
-
-   rvdffe #(71) ifu_debug_data_ff (.*,
-                                   .en (debug_data_clken),
-                                   .din ({
-                                          ifu_ic_debug_rd_data_in[70:0]
-                                          }),
-                                   .dout({
-                                          ifu_ic_debug_rd_data[70:0]
-                                          })
-                                   );
-
-   assign ic_wr_16bytes_data[135:0] =  ifu_bus_rid_ff[0] ? {ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_parity[3:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_parity[3:0] ,  ic_miss_buff_half[63:0] , ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] } ;
-
-end
-
-
-  assign ifu_wr_data_comb_err       =  bus_ifu_wr_data_error_ff ;
-  assign ifu_wr_cumulative_err      = (ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff) & ~reset_beat_cnt;
-  assign ifu_wr_cumulative_err_data =  ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff ;
-
-
-  assign sel_byp_data     =  (ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK));
-  assign sel_ic_data      = ~(ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK) | (miss_state == MISS_WAIT)) & ~fetch_req_iccm_f & ~ifc_region_acc_fault_final_f;
-
- if (pt.ICCM_ICACHE==1) begin: iccm_icache
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_iccm_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-
-  assign ic_sel_premux_data = sel_iccm_data | sel_byp_data ;
- end
-
-if (pt.ICCM_ONLY == 1 ) begin: iccm_only
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-  assign ic_premux_data = '0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-if (pt.ICACHE_ONLY == 1 ) begin: icache_only
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_sel_premux_data =  sel_byp_data ;
-end
-
-
-if (pt.NO_ICCM_NO_ICACHE == 1 ) begin: no_iccm_no_icache
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_premux_data = 0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-
-  assign ifc_bus_acc_fault_f[1:0]   =  {2{ic_byp_hit_f}} & ifu_byp_data_err_f[1:0] ;
-  assign ic_data_f[31:0]      = ic_final_data[31:0];
-
-
-
-assign fetch_req_f_qual       = ic_hit_f & ~exu_flush_final;
-assign ic_access_fault_f[1:0]  = ({2{ifc_region_acc_fault_final_f}} | ifc_bus_acc_fault_f[1:0])  & {2{~exu_flush_final}};
-assign ic_access_fault_type_f[1:0] = |iccm_rd_ecc_double_err       ? 2'b01 :
-                                     ifc_region_acc_fault_f        ? 2'b10 :
-                                     ifc_region_acc_fault_memory_f ? 2'b11 :  2'b00 ;
-
-  // right justified
-
-assign ic_fetch_val_f[1] = fetch_req_f_qual & ifu_bp_inst_mask_f & ~(vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}}) & (err_stop_state != ERR_FETCH2);
-assign ic_fetch_val_f[0] = fetch_req_f_qual ;
-assign two_byte_instr    =  (ic_data_f[1:0] != 2'b11 )  ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-//  Create full buffer...                                                          //
-/////////////////////////////////////////////////////////////////////////////////////
-     logic [63:0]       ic_miss_buff_data_in;
-     assign ic_miss_buff_data_in[63:0] = ifu_bus_rsp_rdata[63:0];
-
-     for (genvar i=0; i<pt.ICACHE_NUM_BEATS; i++) begin :  wr_flop
-
-        assign write_fill_data[i]        =   bus_ifu_wr_en & (  (pt.IFU_BUS_TAG)'(i)  == ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0]);
-
-        rvdffe #(32) byp_data_0_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[31:0]),
-                                    .dout(ic_miss_buff_data[i*2][31:0])
-                                    );
-
-        rvdffe #(32) byp_data_1_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[63:32]),
-                                    .dout(ic_miss_buff_data[i*2+1][31:0])
-                                    );
-
-        assign ic_miss_buff_data_valid_in[i]  = write_fill_data[i] ? 1'b1  : (ic_miss_buff_data_valid[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_valid_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_valid_in[i]),
-                  .dout(ic_miss_buff_data_valid[i]));
-
-        assign ic_miss_buff_data_error_in[i]  = write_fill_data[i] ? bus_ifu_wr_data_error  : (ic_miss_buff_data_error[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_error_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_error_in[i] ),
-                  .dout(ic_miss_buff_data_error[i]));
-     end
-
-/////////////////////////////////////////////////////////////////////////////////////
-// New bypass ready                                                                //
-/////////////////////////////////////////////////////////////////////////////////////
-   logic   [pt.ICACHE_BEAT_ADDR_HI:1]  bypass_index;
-   logic   [pt.ICACHE_BEAT_ADDR_HI:3]  bypass_index_5_3_inc;
-   logic   bypass_data_ready_in;
-   logic   ic_crit_wd_rdy_new_in;
-
-   assign bypass_index[pt.ICACHE_BEAT_ADDR_HI:1] = imb_ff[pt.ICACHE_BEAT_ADDR_HI:1] ;
-   assign bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3] = bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] + 1 ;
-
-
-   assign bypass_data_ready_in = ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] &  bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      &  bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid_in[bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  bypass_index[2] & bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & (bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}})))   ;
-
-
-
-   assign    ic_crit_wd_rdy_new_in = ( bypass_data_ready_in & crit_wd_byp_ok_ff   &  uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (                        crit_wd_byp_ok_ff   & ~uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (ic_crit_wd_rdy_new_ff & ~fetch_req_icache_f & crit_wd_byp_ok_ff    &  ~exu_flush_final) ;
-
-
-  assign byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:1]          =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1]       ;
-  assign byp_fetch_index_0[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b0} ;
-  assign byp_fetch_index_1[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b1} ;
-  assign byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]      =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3]+1'b1 ;
-  assign byp_fetch_index_inc_0[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b0} ;
-  assign byp_fetch_index_inc_1[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b1} ;
-
-  assign  ifu_byp_data_err_new = (~ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 (~ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] & (ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] | ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )) ;
-
-  assign  ifu_byp_data_err_f[1:0]  =   (ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  ? 2'b11 :
-                                      ( ifu_fetch_addr_int_f[2] &  ifu_fetch_addr_int_f[1] &   ~(ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] ) & (~miss_wrap_f & ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]])) ? 2'b10 : 2'b00;
-
-
-
-
-
-  assign ic_byp_data_only_pre_new[79:0] =  ({80{~ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_0][15:0],ic_miss_buff_data[byp_fetch_index_1][31:0]     , ic_miss_buff_data[byp_fetch_index_0][31:0]}) |
-                                           ({80{ ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_1][15:0],ic_miss_buff_data[byp_fetch_index_inc_0][31:0] , ic_miss_buff_data[byp_fetch_index_1][31:0]}) ;
-
-  assign ic_byp_data_only_new[79:0]      = ~ifu_fetch_addr_int_f[1] ? {ic_byp_data_only_pre_new[79:0]} :
-                                                                      {16'b0,ic_byp_data_only_pre_new[79:16]} ;
-
-  assign miss_wrap_f      =  (imb_ff[pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[pt.ICACHE_TAG_INDEX_LO] ) ;
-
-  assign miss_buff_hit_unq_f  = ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     &  byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] &  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_BITS{1'b1}})))   ;
-
-  assign stream_hit_f     =  (miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) ;
-  assign stream_miss_f    = ~(miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) & ifc_fetch_req_f;
-  assign stream_eol_f     =  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:2] == {pt.ICACHE_BEAT_BITS+1{1'b1}}) & ifc_fetch_req_f & stream_hit_f;
-
-  assign crit_byp_hit_f   =  (miss_buff_hit_unq_f ) & ((miss_state == CRIT_WRD_RDY) | (miss_state==CRIT_BYP_OK)) ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Figure out if you have the data to write.                                       //
-/////////////////////////////////////////////////////////////////////////////////////
-
-assign other_tag[pt.IFU_BUS_TAG-1:0] = {ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:1] , ~ifu_bus_rid_ff[0] } ;
-assign second_half_available      = ic_miss_buff_data_valid[other_tag] ;
-assign write_ic_16_bytes          = second_half_available & bus_ifu_wr_en_ff ;
-assign ic_miss_buff_half[63:0]    = {ic_miss_buff_data[{other_tag,1'b1}],ic_miss_buff_data[{other_tag,1'b0}] } ;
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Parity checking logic for Icache logic.                                         //
-/////////////////////////////////////////////////////////////////////////////////////
-
-
-assign ic_rd_parity_final_err = ic_tag_perr & ~exu_flush_final & sel_ic_data & ~(ifc_region_acc_fault_final_f | (|ifc_bus_acc_fault_f)) &
-                                      (fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff);
-
-logic [pt.ICACHE_NUM_WAYS-1:0]                   perr_err_inv_way;
-logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]   perr_ic_index_ff;
-logic                                         perr_sel_invalidate;
-logic                                         perr_sb_write_status   ;
-
-
-
-   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1)) perr_dat_ff    (.din(ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]), .dout(perr_ic_index_ff[pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]), .en(perr_sb_write_status),  .*);
-
-   assign perr_err_inv_way[pt.ICACHE_NUM_WAYS-1:0]   =  {pt.ICACHE_NUM_WAYS{perr_sel_invalidate}} ;
-   assign iccm_correct_ecc     = (perr_state == ECC_CORR);
-   assign dma_sb_err_state     = (perr_state == DMA_SB_ERR);
-   assign iccm_buf_correct_ecc = iccm_correct_ecc & ~dma_sb_err_state_ff;
-
-
-
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-
-
-   // FIFO state machine
-   always_comb begin  : ERROR_SM
-      perr_nxtstate            = ERR_IDLE;
-      perr_state_en            = 1'b0;
-      perr_sb_write_status     = 1'b0;
-      perr_sel_invalidate      = 1'b0;
-
-      case (perr_state)
-         ERR_IDLE: begin : err_idle
-                  perr_nxtstate         =  iccm_dma_sb_error ? DMA_SB_ERR : (ic_error_start & ~exu_flush_final) ? IC_WFF : ECC_WFF;
-                  perr_state_en         =  (((iccm_error_start | ic_error_start) & ~exu_flush_final) | iccm_dma_sb_error) & ~dec_tlu_force_halt;
-                  perr_sb_write_status  =  perr_state_en;
-         end
-         IC_WFF: begin : icache_wff    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  perr_nxtstate       =  ERR_IDLE ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt ;
-                  perr_sel_invalidate =  (dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb);
-         end
-         ECC_WFF: begin : ecc_wff
-                  perr_nxtstate       =  ((~dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb ) | dec_tlu_force_halt) ? ERR_IDLE : ECC_CORR ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt  ;
-         end
-         DMA_SB_ERR : begin : dma_sb_ecc
-                 perr_nxtstate       = dec_tlu_force_halt ? ERR_IDLE : ECC_CORR;
-                 perr_state_en       = 1'b1;
-         end
-         ECC_CORR: begin : ecc_corr
-                  perr_nxtstate       =  ERR_IDLE  ;
-                  perr_state_en       =   1'b1   ;
-         end
-         default: begin : def_case
-                  perr_nxtstate            = ERR_IDLE;
-                  perr_state_en            = 1'b0;
-                  perr_sb_write_status     = 1'b0;
-                  perr_sel_invalidate      = 1'b0;
-         end
-      endcase
-   end
-
-   rvdffs #(($bits(perr_state_t))) perr_state_ff (.clk(active_clk), .din(perr_nxtstate), .dout({perr_state}), .en(perr_state_en),   .*);
-
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   always_comb begin  : ERROR_STOP_FETCH
-      err_stop_nxtstate            = ERR_STOP_IDLE;
-      err_stop_state_en            = 1'b0;
-      err_stop_fetch               = 1'b0;
-      iccm_correction_state        = 1'b0;
-
-      case (err_stop_state)
-         ERR_STOP_IDLE: begin : err_stop_idle
-                  err_stop_nxtstate         =  ERR_FETCH1;
-                  err_stop_state_en         =  dec_tlu_flush_err_wb & (perr_state  == ECC_WFF) & ~dec_tlu_force_halt;
-         end
-         ERR_FETCH1: begin : err_fetch1    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))   ?  ERR_STOP_FETCH : ifu_fetch_val[0] ? ERR_FETCH2 :  ERR_FETCH1;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | ifu_bp_hit_taken_q_f | dec_tlu_force_halt;
-                  err_stop_fetch          =   ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))  & ~(exu_flush_final | dec_tlu_i0_commit_cmt);
-                  iccm_correction_state   = 1'b1;
-
-        end
-         ERR_FETCH2: begin : err_fetch2    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ifu_fetch_val[0] ?  ERR_STOP_FETCH : ERR_FETCH2;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | dec_tlu_force_halt ;
-                  err_stop_fetch          =   ifu_fetch_val[0] & ~exu_flush_final & ~dec_tlu_i0_commit_cmt ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         ERR_STOP_FETCH: begin : ecc_wff
-                  err_stop_nxtstate       =  ( (dec_tlu_flush_lower_wb & ~dec_tlu_flush_err_wb) | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : dec_tlu_flush_err_wb ? ERR_FETCH1 : ERR_STOP_FETCH ;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb |  dec_tlu_i0_commit_cmt | dec_tlu_force_halt   ;
-                  err_stop_fetch          =  1'b1;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         default: begin : def_case
-                  err_stop_nxtstate            = ERR_STOP_IDLE;
-                  err_stop_state_en            = 1'b0;
-                  err_stop_fetch               = 1'b0 ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-      endcase
-   end
-   rvdffs #(($bits(err_stop_state_t))) err_stop_state_ff (.clk(active_clk), .din(err_stop_nxtstate), .dout({err_stop_state}), .en(err_stop_state_en),   .*);
-
-
-
-   assign bus_ifu_bus_clk_en =  ifu_bus_clk_en ;
-
-   rvclkhdr bus_clk_f(.en(bus_ifu_bus_clk_en), .l1clk(busclk), .*);
-   rvclkhdr bus_clk(.en(bus_ifu_bus_clk_en | dec_tlu_force_halt), .l1clk(busclk_force), .*);
-
-
-
-
-   assign  scnd_miss_req = scnd_miss_req_q & ~exu_flush_final;
-
-   assign  ifc_bus_ic_req_ff_in  = (ic_act_miss_f | bus_cmd_req_hold | ifu_bus_cmd_valid) & ~dec_tlu_force_halt & ~((bus_cmd_beat_count== {pt.ICACHE_BEAT_BITS{1'b1}}) & ifu_bus_cmd_valid & ifu_bus_cmd_ready & miss_pending);
-
-   rvdff_fpga #(1) bus_ic_req_ff2(.*, .clk(busclk_force), .clken(bus_ifu_bus_clk_en | dec_tlu_force_halt), .rawclk(clk), .din(ifc_bus_ic_req_ff_in), .dout(ifu_bus_cmd_valid));
-
-   assign    bus_cmd_req_in  = (ic_act_miss_f | bus_cmd_req_hold) & ~bus_cmd_sent & ~dec_tlu_force_halt ; // hold until first command sent
-
-
-
-    // AXI command signals
-    //  Read Channel
-    assign ifu_axi_arvalid               =  ifu_bus_cmd_valid ;
-    assign ifu_axi_arid[pt.IFU_BUS_TAG-1:0] = ((pt.IFU_BUS_TAG)'(bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0])) & {pt.IFU_BUS_TAG{ifu_bus_cmd_valid}};
-    assign ifu_axi_araddr[31:0]          =   {ifu_ic_req_addr_f[31:3],3'b0}  & {32{ifu_bus_cmd_valid}};
-    assign ifu_axi_arsize[2:0]           =  3'b011;
-    assign ifu_axi_arprot[2:0]           = 3'b101;
-    assign ifu_axi_arcache[3:0]          = 4'b1111;
-    assign ifu_axi_arregion[3:0]         = ifu_ic_req_addr_f[31:28];
-    assign ifu_axi_arlen[7:0]            = '0;
-    assign ifu_axi_arburst[1:0]          = 2'b01;
-    assign ifu_axi_arqos[3:0]            = '0;
-    assign ifu_axi_arlock                = '0;
-    assign ifu_axi_rready                = 1'b1;
-
-    //  Write Channel
-    assign ifu_axi_awvalid                  = '0 ;
-    assign ifu_axi_awid[pt.IFU_BUS_TAG-1:0] = '0 ;
-    assign ifu_axi_awaddr[31:0]             = '0 ;
-    assign ifu_axi_awsize[2:0]              = '0 ;
-    assign ifu_axi_awprot[2:0]              = '0;
-    assign ifu_axi_awcache[3:0]             = '0 ;
-    assign ifu_axi_awregion[3:0]            = '0 ;
-    assign ifu_axi_awlen[7:0]               = '0;
-    assign ifu_axi_awburst[1:0]             = '0 ;
-    assign ifu_axi_awqos[3:0]               = '0;
-    assign ifu_axi_awlock                   = '0;
-
-    assign ifu_axi_wvalid                =  '0;
-    assign ifu_axi_wstrb[7:0]            =  '0;
-    assign ifu_axi_wdata[63:0]           =  '0;
-    assign ifu_axi_wlast                 =  '0;
-    assign ifu_axi_bready                =  '0;
-
-
-   assign ifu_bus_arready_unq     =  ifu_axi_arready ;
-   assign ifu_bus_rvalid_unq      =  ifu_axi_rvalid ;
-   assign ifu_bus_arvalid         =  ifu_axi_arvalid ;
-
-   rvdff_fpga #(1)               bus_rdy_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arready_unq),            .dout(ifu_bus_arready_unq_ff));
-   rvdff_fpga #(1)               bus_rsp_vld_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_rvalid_unq),             .dout(ifu_bus_rvalid_unq_ff));
-   rvdff_fpga #(1)               bus_cmd_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arvalid),                .dout(ifu_bus_arvalid_ff));
-   rvdff_fpga #(2)               bus_rsp_cmd_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rresp[1:0]),             .dout(ifu_bus_rresp_ff[1:0]));
-   rvdff_fpga #(pt.IFU_BUS_TAG)  bus_rsp_tag_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rid[pt.IFU_BUS_TAG-1:0]),.dout(ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:0]));
-   rvdffe #(64)                  bus_data_ff     (.*, .clk(clk),     .din(ifu_axi_rdata[63:0]),            .dout(ifu_bus_rdata_ff[63:0]), .en(ifu_bus_clk_en & ifu_axi_rvalid));
-
-   assign ifu_bus_cmd_ready = ifu_axi_arready ;
-   assign ifu_bus_rsp_valid = ifu_axi_rvalid ;
-   assign ifu_bus_rsp_ready = ifu_axi_rready ;
-   assign ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0] = ifu_axi_rid[pt.IFU_BUS_TAG-1:0] ;
-   assign ifu_bus_rsp_rdata[63:0] = ifu_axi_rdata[63:0] ;
-   assign ifu_bus_rsp_opc[1:0] = {ifu_axi_rresp[1:0]} ;
-
-
-
-
-
-
-
-
-
-   // Create write signals so we can write to the miss-buffer directly from the bus.
-
-   assign ifu_bus_rvalid            =  ifu_bus_rsp_valid & bus_ifu_bus_clk_en ;
-
-
-
-   assign ifu_bus_arready            =  ifu_bus_arready_unq    & bus_ifu_bus_clk_en    ;
-   assign ifu_bus_arready_ff         =  ifu_bus_arready_unq_ff & bus_ifu_bus_clk_en_ff ;
-
-   assign ifu_bus_rvalid_ff          =  ifu_bus_rvalid_unq_ff & bus_ifu_bus_clk_en_ff ;
-   assign bus_cmd_sent               =  ifu_bus_arvalid & ifu_bus_arready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_inc_data_beat_cnt      = (bus_ifu_wr_en_ff & ~bus_last_data_beat & ~dec_tlu_force_halt) ;
-   assign bus_reset_data_beat_cnt    =  ic_act_miss_f | (bus_ifu_wr_en_ff &  bus_last_data_beat) | dec_tlu_force_halt;
-   assign bus_hold_data_beat_cnt     = ~bus_inc_data_beat_cnt & ~bus_reset_data_beat_cnt ;
-
-   assign bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] = ({pt.ICACHE_BEAT_BITS{bus_reset_data_beat_cnt}} & (pt.ICACHE_BEAT_BITS)'(0)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_data_beat_cnt}}   & (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_data_beat_cnt}}  &  bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-
-   assign last_data_recieved_in =  (bus_ifu_wr_en_ff &  bus_last_data_beat & ~scnd_miss_req) | (last_data_recieved_ff & ~ic_act_miss_f) ;
-
-
-
-// Request Address Count
-   assign bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] = (~miss_pending                    ) ? imb_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           ( bus_cmd_sent                    ) ? (bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] + 3'b001) :
-                                                                                                  bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0];
-
-   rvdff_fpga #(pt.ICACHE_BEAT_BITS)  bus_rd_addr_ff (.*,  .clk(busclk_reset),  .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .din ({bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}), .dout({bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-
-// command beat Count
-   assign bus_inc_cmd_beat_cnt              =  ifu_bus_cmd_valid    &  ifu_bus_cmd_ready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_reset_cmd_beat_cnt_0          =  (ic_act_miss_f        & ~uncacheable_miss_in) | dec_tlu_force_halt ;
-   assign bus_reset_cmd_beat_cnt_secondlast =  ic_act_miss_f        &  uncacheable_miss_in ;
-   assign bus_hold_cmd_beat_cnt             = ~bus_inc_cmd_beat_cnt & ~(ic_act_miss_f | scnd_miss_req | dec_tlu_force_halt) ;
-   assign bus_cmd_beat_en                   =  bus_inc_cmd_beat_cnt | ic_act_miss_f | dec_tlu_force_halt;
-
-   assign bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] =  ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_0}}       & (pt.ICACHE_BEAT_BITS)'(0) ) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_secondlast}} & (pt.ICACHE_BEAT_BITS)'(pt.ICACHE_SCND_LAST)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_cmd_beat_cnt}}              & (bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}}, 1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_cmd_beat_cnt}}             &  bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]) ;
-
-
-   rvclkhdr bus_clk_reset(.en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .l1clk(busclk_reset), .*);
-
-
-
-
-   rvdffs_fpga #(pt.ICACHE_BEAT_BITS)  bus_cmd_beat_ff (.*, .clk(busclk_reset), .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .en (bus_cmd_beat_en), .din ({bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}),
-                    .dout({bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-    assign bus_last_data_beat     =  uncacheable_miss_ff ? (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] == {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1}) : (&bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-   assign  bus_ifu_wr_en            =  ifu_bus_rvalid     & miss_pending ;
-   assign  bus_ifu_wr_en_ff         =  ifu_bus_rvalid_ff  & miss_pending ;
-   assign  bus_ifu_wr_en_ff_q       =  ifu_bus_rvalid_ff  & miss_pending & ~uncacheable_miss_ff & ~(|ifu_bus_rresp_ff[1:0]) & write_ic_16_bytes; // qualify with no-error conditions ;
-   assign  bus_ifu_wr_en_ff_wo_err  =  ifu_bus_rvalid_ff & miss_pending &  ~uncacheable_miss_ff;
-
-
-   rvdffie #(10) misc_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {ic_act_miss_f,        ifu_wr_cumulative_err,exu_flush_final,  ic_crit_wd_rdy_new_in,bus_ifu_bus_clk_en,   scnd_miss_req_in,bus_cmd_req_in,  last_data_recieved_in,
-ifc_dma_access_ok_d,   dma_iccm_req}),
-         .dout({ic_act_miss_f_delayed,ifu_wr_data_comb_err_ff,  flush_final_f,ic_crit_wd_rdy_new_ff,bus_ifu_bus_clk_en_ff,scnd_miss_req_q, bus_cmd_req_hold,last_data_recieved_ff,
-ifc_dma_access_ok_prev,dma_iccm_req_f})
-         );
-
-   rvdffie #(.WIDTH(pt.ICACHE_BEAT_BITS+5),.OVERRIDE(1)) misc1_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {reset_ic_in,sel_mb_addr,   bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],ifc_region_acc_fault_memory_bf,ic_debug_rd_en,       ic_debug_rd_en_ff}),
-         .dout({reset_ic_ff,sel_mb_addr_ff,bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],    ifc_region_acc_fault_memory_f, ic_debug_rd_en_ff,ifu_ic_debug_rd_data_valid})
-         );
-
-   assign    reset_tag_valid_for_miss = ic_act_miss_f_delayed & (miss_state == CRIT_BYP_OK) & ~uncacheable_miss_ff;
-   assign    bus_ifu_wr_data_error    = |ifu_bus_rsp_opc[1:0] &  ifu_bus_rvalid  & miss_pending;
-   assign    bus_ifu_wr_data_error_ff = |ifu_bus_rresp_ff[1:0] &  ifu_bus_rvalid_ff  & miss_pending;
-
-
-   assign ic_crit_wd_rdy   =  ic_crit_wd_rdy_new_in | ic_crit_wd_rdy_new_ff ;
-   assign last_beat        =  bus_last_data_beat & bus_ifu_wr_en_ff;
-   assign reset_beat_cnt    = bus_reset_data_beat_cnt ;
-
-// DMA
-   // Making sure that the dma_access is allowed when we have 2 back to back dma_access_ok. Also gating with current state == idle
-   assign ifc_dma_access_ok_d  = ifc_dma_access_ok &  ~iccm_correct_ecc & ~iccm_dma_sb_error;
-   assign ifc_dma_access_q_ok  = ifc_dma_access_ok &  ~iccm_correct_ecc & ifc_dma_access_ok_prev &  (perr_state == ERR_IDLE)  & ~iccm_dma_sb_error;
-   assign iccm_ready           = ifc_dma_access_q_ok ;
-
-   logic [1:0]        iccm_ecc_word_enable;
-
-    if (pt.ICCM_ENABLE == 1 ) begin: iccm_enabled
-         logic  [3:2] dma_mem_addr_ff  ;
-         logic  iccm_dma_rden    ;
-
-         logic  iccm_dma_ecc_error_in;
-         logic  [13:0] dma_mem_ecc;
-         logic  [63:0] iccm_dma_rdata_in;
-         logic  [31:0] iccm_dma_rdata_1_muxed;
-         logic [1:0] [31:0] iccm_corrected_data;
-         logic [1:0] [06:0] iccm_corrected_ecc;
-
-
-         logic [1:0]        iccm_double_ecc_error;
-
-
-         logic [pt.ICCM_BITS-1:2]       iccm_rw_addr_f;
-
-         logic [31:0]       iccm_corrected_data_f_mux;
-         logic [06:0]       iccm_corrected_ecc_f_mux;
-         logic              iccm_dma_rvalid_in;
-         logic [77:0]       iccm_rdmux_data;
-         logic              iccm_rd_ecc_single_err_hold_in ;
-         logic [2:0]        dma_mem_tag_ff;
-
-
-
-
-         assign iccm_wren          =  (ifc_dma_access_q_ok & dma_iccm_req &  dma_mem_write) | iccm_correct_ecc;
-         assign iccm_rden          =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write) | (ifc_iccm_access_bf & ifc_fetch_req_bf);
-         assign iccm_dma_rden      =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write)                     ;
-         assign iccm_wr_size[2:0]  =  {3{dma_iccm_req}}    & dma_mem_sz[2:0] ;
-
-         rvecc_encode  iccm_ecc_encode0 (
-                           .din(dma_mem_wdata[31:0]),
-                           .ecc_out(dma_mem_ecc[6:0]));
-
-         rvecc_encode  iccm_ecc_encode1 (
-                           .din(dma_mem_wdata[63:32]),
-                           .ecc_out(dma_mem_ecc[13:7]));
-
-        assign iccm_wr_data[77:0]   =  (iccm_correct_ecc & ~(ifc_dma_access_q_ok & dma_iccm_req)) ?  {iccm_ecc_corr_data_ff[38:0], iccm_ecc_corr_data_ff[38:0]} :
-                                       {dma_mem_ecc[13:7],dma_mem_wdata[63:32], dma_mem_ecc[6:0],dma_mem_wdata[31:0]};
-
-         assign iccm_dma_rdata_1_muxed[31:0] = dma_mem_addr_ff[2] ?  iccm_corrected_data[0][31:0] : iccm_corrected_data[1][31:0] ;
-         assign iccm_dma_rdata_in[63:0]      = iccm_dma_ecc_error_in ? {2{dma_mem_addr[31:0]}} : {iccm_dma_rdata_1_muxed[31:0], iccm_corrected_data[0]};
-         assign iccm_dma_ecc_error_in   =   |(iccm_double_ecc_error[1:0]);
-
-         rvdffe    #(64) dma_data_ff      (.*, .clk(clk), .en(iccm_dma_rvalid_in),  .din(iccm_dma_rdata_in[63:0]), .dout(iccm_dma_rdata[63:0]));
-         rvdffie   #(11) dma_misc_bits    (.*, .clk(free_l2clk), .din({dma_mem_tag[2:0],
-                                                                       dma_mem_tag_ff[2:0],
-                                                                       dma_mem_addr[3:2],
-                                                                       iccm_dma_rden,
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_ecc_error_in }),
-                                                                .dout({dma_mem_tag_ff[2:0],
-                                                                       iccm_dma_rtag[2:0],
-                                                                       dma_mem_addr_ff[3:2],
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_rvalid,
-                                                                       iccm_dma_ecc_error }));
-
-         assign iccm_rw_addr[pt.ICCM_BITS-1:1]    = (  ifc_dma_access_q_ok & dma_iccm_req  & ~iccm_correct_ecc) ? dma_mem_addr[pt.ICCM_BITS-1:1] :
-                                                 (~(ifc_dma_access_q_ok & dma_iccm_req) &  iccm_correct_ecc) ? {iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2],1'b0} : ifc_fetch_addr_bf[pt.ICCM_BITS-1:1] ;
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// ECC checking logic for ICCM data.                                               //
-/////////////////////////////////////////////////////////////////////////////////////
-
-  logic [3:0] ic_fetch_val_int_f;
-  logic [3:0] ic_fetch_val_shift_right;
-  assign ic_fetch_val_int_f[3:0] = {2'b00 , ic_fetch_val_f[1:0] } ;
-  assign ic_fetch_val_shift_right[3:0] = {ic_fetch_val_int_f << ifu_fetch_addr_int_f[1] } ;
-
-   assign iccm_rdmux_data[77:0] = iccm_rd_data_ecc[77:0];
-   for (genvar i=0; i < 2 ; i++) begin : ICCM_ECC_CHECK
-      assign iccm_ecc_word_enable[i] = ((|ic_fetch_val_shift_right[(2*i+1):(2*i)] & ~exu_flush_final & sel_iccm_data) | iccm_dma_rvalid_in) & ~dec_tlu_core_ecc_disable;
-   rvecc_decode  ecc_decode (
-                           .en(iccm_ecc_word_enable[i]),
-                           .sed_ded ( 1'b0 ),    // 1 : means only detection
-                           .din(iccm_rdmux_data[(39*i+31):(39*i)]),
-                           .ecc_in(iccm_rdmux_data[(39*i+38):(39*i+32)]),
-                           .dout(iccm_corrected_data[i][31:0]),
-                           .ecc_out(iccm_corrected_ecc[i][6:0]),
-                           .single_ecc_error(iccm_single_ecc_error[i]),
-                           .double_ecc_error(iccm_double_ecc_error[i]));
-end
-
-  assign iccm_rd_ecc_single_err  = (|iccm_single_ecc_error[1:0] ) & ifc_iccm_access_f & ifc_fetch_req_f;
-  assign iccm_rd_ecc_double_err[1:0]  = ~ifu_fetch_addr_int_f[1] ? ({iccm_double_ecc_error[0], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} :
-                                                                   ({iccm_double_ecc_error[1], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} ;
-
-  assign iccm_corrected_data_f_mux[31:0] = iccm_single_ecc_error[0] ? iccm_corrected_data[0] : iccm_corrected_data[1];
-  assign iccm_corrected_ecc_f_mux[6:0]   = iccm_single_ecc_error[0] ? iccm_corrected_ecc[0]  : iccm_corrected_ecc[1];
-
-  assign iccm_ecc_write_status           = ((iccm_rd_ecc_single_err & ~iccm_rd_ecc_single_err_ff)  & ~exu_flush_final) | iccm_dma_sb_error;
-  assign iccm_rd_ecc_single_err_hold_in  = (iccm_rd_ecc_single_err | iccm_rd_ecc_single_err_ff) & ~exu_flush_final ;
-  assign iccm_error_start                =  iccm_rd_ecc_single_err;
-  assign iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2] = iccm_single_ecc_error[0] ? iccm_rw_addr_f[pt.ICCM_BITS-1:2] : iccm_rw_addr_f[pt.ICCM_BITS-1:2] + 1'b1 ;
-
-   rvdffie #(pt.ICCM_BITS-1) iccm_index_f   (.*, .clk(free_l2clk), .din({iccm_rw_addr[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_hold_in
-                                                                                                       }),
-                                                                  .dout({iccm_rw_addr_f[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_ff}));
-
-   rvdffe #((39+(pt.ICCM_BITS-2)))      ecc_dat0_ff  (
-                                                      .clk(clk),
-                                                      .din({iccm_corrected_ecc_f_mux[6:0],  iccm_corrected_data_f_mux[31:0],iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2]}),
-                                                      .dout({iccm_ecc_corr_data_ff[38:0]   ,iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]}),
-                                                      .en(iccm_ecc_write_status),
-                                                      .*
-                                                      );
-
-     end else begin : iccm_disabled
-         assign iccm_dma_rvalid = 1'b0 ;
-         assign iccm_dma_ecc_error = 1'b0 ;
-         assign iccm_dma_rdata[63:0] = '0 ;
-         assign iccm_single_ecc_error = '0 ;
-         assign iccm_dma_rtag         = '0 ;
-
-
-
-
-
-
-         assign iccm_rd_ecc_single_err                 = 1'b0 ;
-         assign iccm_rd_ecc_double_err                 = '0 ;
-         assign iccm_rd_ecc_single_err_ff              = 1'b0 ;
-         assign iccm_error_start                         = 1'b0;
-         assign iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]  =  '0;
-         assign iccm_ecc_corr_data_ff[38:0]            =  '0;
-         assign iccm_ecc_write_status                  =  '0;
-
-
-
-
-
-
-    end
-
-
-////// ICCM signals
-
-
- assign   ic_rd_en    =  (ifc_fetch_req_bf & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf  &
-                            ~(((miss_state == STREAM) & ~miss_state_en)                                       |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en)                                  |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)                              |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en)                                    |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT))  ))  |
-                             ( ifc_fetch_req_bf & exu_flush_final  & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf )     ;
-
-logic   ic_real_rd_wp_unused;
-assign  ic_real_rd_wp_unused  =  (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & ~ic_act_miss_f &
-                            ~(((miss_state == STREAM) & ~miss_state_en) |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en & ~(miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en) |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)  |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_nxtstate == STREAM) &  miss_state_en)  |
-                              ((miss_state == SCND_MISS) & ~miss_state_en))) |
-                          (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & exu_flush_final)  ;
-
-
-assign ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{write_ic_16_bytes}};
-assign ic_write_stall                =  write_ic_16_bytes &  ~((((miss_state== CRIT_BYP_OK) | ((miss_state==STREAM) & ~(exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ))) & ~(bus_ifu_wr_en_ff & last_beat & ~uncacheable_miss_ff)));
-
-
-
-
-///////////////////////////////////////////////////////////////
-// Icache status and LRU
-///////////////////////////////////////////////////////////////
-logic [pt.ICACHE_NUM_WAYS-1:0] ic_tag_valid_unq;
-if (pt.ICACHE_ENABLE == 1 ) begin: icache_enabled
-   assign  ic_valid  = ~ifu_wr_cumulative_err_data & ~(reset_ic_in | reset_ic_ff) & ~reset_tag_valid_for_miss;
-
-   assign ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                           ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                           ifu_status_wr_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-
-   // status
-
-         assign way_status_wr_en_w_debug = way_status_wr_en | (ic_debug_wr_en  & ic_debug_tag_array);
-
-         assign way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]  = (ic_debug_wr_en  & ic_debug_tag_array) ? (pt.ICACHE_STATUS_BITS == 1) ? ic_debug_wr_data[4] : ic_debug_wr_data[6:4] :
-                                                way_status_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-   rvdffie #(.WIDTH(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+1+pt.ICACHE_STATUS_BITS),.OVERRIDE(1))  status_misc_ff
-     (.*,
-      .clk(free_l2clk),
-      .din({ ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO], way_status_wr_en_w_debug, way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]}),
-      .dout({ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],      way_status_wr_en_ff,      way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]} )
-      );
-
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clken;
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clk;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/8 ; i++) begin : CLK_GRP_WAY_STATUS
-      assign way_status_clken[i] = (ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+3] == i );
-
-           rvclkhdr way_status_cgc ( .en(way_status_clken[i]),   .l1clk(way_status_clk[i]), .* );
-
-
-
-      for (genvar j=0 ; j<8 ; j++) begin : WAY_STATUS
-         rvdffs_fpga #(pt.ICACHE_STATUS_BITS) ic_way_status (.*,
-                   .clk(way_status_clk[i]),
-                   .clken(way_status_clken[i]),
-                   .rawclk(clk),
-                   .en(((ifu_status_wr_addr_ff[pt.ICACHE_TAG_INDEX_LO+2:pt.ICACHE_TAG_INDEX_LO] == j) & way_status_wr_en_ff)),
-                   .din(way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]),
-                   .dout(way_status_out[8*i+j]));
-      end  // WAY_STATUS
-   end  // CLK_GRP_WAY_STATUS
-
-  always_comb begin : way_status_out_mux
-      way_status[pt.ICACHE_STATUS_BITS-1:0] = '0 ;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : status_mux_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : mux_out
-         way_status[pt.ICACHE_STATUS_BITS-1:0] =  way_status_out[j];
-        end
-      end
-  end
-
-         assign ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                        ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                        ifu_ic_rw_int_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-         assign ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0] = ifu_tag_wren[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] ;
-
-         assign ic_valid_w_debug = (ic_debug_wr_en & ic_debug_tag_array) ? ic_debug_wr_data[0] : ic_valid;
-
-         rvdffie #(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+pt.ICACHE_NUM_WAYS+1) tag_addr_ff (.*,
-                                                                                              .clk(free_l2clk),
-                                                                                              .din({ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                    ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                    ic_valid_w_debug}),
-                                                                                              .dout({ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                     ifu_tag_wren_ff[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                     ic_valid_ff})
-                                                                                              );
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_DEPTH-1:0] ic_tag_valid_out ;
-
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clken ;
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clk   ;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/32 ; i++) begin : CLK_GRP_TAG_VALID
-      for (genvar j=0; j<pt.ICACHE_NUM_WAYS; j++) begin : way_clken
-      if (pt.ICACHE_TAG_DEPTH == 32 ) begin
-        assign tag_valid_clken[i][j] =  ifu_tag_wren_ff[j] | perr_err_inv_way[j] | reset_all_tags;
-      end else begin
-         assign tag_valid_clken[i][j] = (((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  ifu_tag_wren_ff[j] ) |
-                                        ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  perr_err_inv_way[j]) | reset_all_tags);
-      end
-
-
-           rvclkhdr way_status_cgc ( .en(tag_valid_clken[i][j]),   .l1clk(tag_valid_clk[i][j]), .* );
-
-
-
-
-      for (genvar k=0 ; k<32 ; k++) begin : TAG_VALID
-         rvdffs_fpga #(1) ic_way_tagvalid_dup (.*,
-                   .clk(tag_valid_clk[i][j]),
-                   .clken(tag_valid_clken[i][j]),
-                   .rawclk(clk),
-                   .en(((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & ifu_tag_wren_ff[j] ) |
-                       ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & perr_err_inv_way[j]) | reset_all_tags),
-                   .din(ic_valid_ff & ~reset_all_tags & ~perr_sel_invalidate),
-                   .dout(ic_tag_valid_out[j][32*i+k]));
-      end
-      end
-   end
-
-
-  always_comb begin : tag_valid_out_mux
-      ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] = '0;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : tag_valid_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : valid_out
-           for ( int k=0; k<pt.ICACHE_NUM_WAYS; k++) begin
-             ic_tag_valid_unq[k] |= ic_tag_valid_out[k][j];
-        end
-      end
-      end
-  end
-   //   four-way set associative - three bits
-//   each bit represents one branch point in a binary decision tree; let 1
-//   represent that the left side has been referenced more recently than the
-//   right side, and 0 vice-versa
-//
-//              are all 4 ways valid?
-//                   /       \
-//                  |        no, use an invalid way.
-//                  |
-//                  |
-//             bit_0 == 0?             state | replace      ref to | next state
-//               /       \             ------+--------      -------+-----------
-//              y         n             x00  |  way_0      way_0 |    _11
-//             /           \            x10  |  way_1      way_1 |    _01
-//      bit_1 == 0?    bit_2 == 0?      0x1  |  way_2      way_2 |    1_0
-//        /    \          /    \        1x1  |  way_3      way_3 |    0_0
-//       y      n        y      n
-//      /        \      /        \        ('x' means don't care       ('_' means unchanged)
-//    way_0    way_1  way_2     way_3      don't care)
-
-   if (pt.ICACHE_NUM_WAYS == 4) begin: four_way_plru
-   assign replace_way_mb_any[3] = ( way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[3]& tagv_mb_ff[2] &  tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[2] = (~way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[2]& tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[1] = ( way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[1]& tagv_mb_ff[0] ) ;
-   assign replace_way_mb_any[0] = (~way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[0] ) ;
-
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{~exu_flush_final & ic_rd_hit[0]}} & {way_status[2] , 1'b1 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[1]}} & {way_status[2] , 1'b0 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[2]}} & {1'b1 ,way_status[1]  , 1'b0}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[3]}} & {1'b0 ,way_status[1]  , 1'b0}) ;
-
-  assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{replace_way_mb_any[0]}} & {way_status_mb_ff[2] , 1'b1 , 1'b1}) |
-                                   ({3{replace_way_mb_any[1]}} & {way_status_mb_ff[2] , 1'b0 , 1'b1}) |
-                                   ({3{replace_way_mb_any[2]}} & {1'b1 ,way_status_mb_ff[1]  , 1'b0}) |
-                                   ({3{replace_way_mb_any[3]}} & {1'b0 ,way_status_mb_ff[1]  , 1'b0}) ;
-  end
-   else begin : two_ways_plru
-      assign replace_way_mb_any[0]                      = (~way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[0];
-      assign replace_way_mb_any[1]                      = ( way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[1] & tagv_mb_ff[0];
-      assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ic_rd_hit[0];
-      assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = replace_way_mb_any[0];
-
-   end
-  // Make sure to select the way_status_hit_new even when in hit_under_miss.
-  assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = (bus_ifu_wr_en_ff_q  & last_beat )  ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                          way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-
-  assign way_status_wr_en  = (bus_ifu_wr_en_ff_q  & last_beat) | ic_act_hit_f;
-
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin  : bus_wren_loop
-      assign bus_wren[i]           = bus_ifu_wr_en_ff_q & replace_way_mb_any[i] & miss_pending ;
-      assign bus_wren_last[i]      = bus_ifu_wr_en_ff_wo_err & replace_way_mb_any[i] & miss_pending & bus_last_data_beat;
-      assign ifu_tag_wren[i]       = bus_wren_last[i] | wren_reset_miss[i];
-      assign wren_reset_miss[i]    = replace_way_mb_any[i] & reset_tag_valid_for_miss ;
-
-   end
-   assign bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_wren[pt.ICACHE_NUM_WAYS-1:0];
-
-
-end else begin: icache_disabled
-   assign ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]      = '0;
-   assign way_status[pt.ICACHE_STATUS_BITS-1:0]         = '0;
-   assign replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0]    = '0;
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = '0;
-   assign way_status_wr_en                           = '0;
-   assign bus_wren[pt.ICACHE_NUM_WAYS-1:0]              = '0;
-
-end
-
-   assign ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0] = ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{(~fetch_uncacheable_ff & ifc_fetch_req_f_raw) }} ;
-   assign ic_debug_tag_val_rd_out           = |(ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] &  ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{ic_debug_rd_en_ff}}) ;
-///////////////////////////////////////////
-// PMU signals
-///////////////////////////////////////////
-
- assign ifu_pmu_ic_miss_in   = ic_act_miss_f ;
- assign ifu_pmu_ic_hit_in    = ic_act_hit_f  ;
- assign ifu_pmu_bus_error_in = |ifc_bus_acc_fault_f;
- assign ifu_pmu_bus_trxn_in  = bus_cmd_sent ;
- assign ifu_pmu_bus_busy_in  = ifu_bus_arvalid_ff & ~ifu_bus_arready_ff & miss_pending ;
-
-   rvdffie #(9) ifu_pmu_sigs_ff (.*,
-                    .clk (free_l2clk),
-                    .din ({ifc_fetch_uncacheable_bf, ifc_fetch_req_qual_bf, dma_sb_err_state, dec_tlu_fence_i_wb,
-                           ifu_pmu_ic_miss_in,
-                           ifu_pmu_ic_hit_in,
-                           ifu_pmu_bus_error_in,
-                           ifu_pmu_bus_busy_in,
-                           ifu_pmu_bus_trxn_in
-                          }),
-                    .dout({fetch_uncacheable_ff, ifc_fetch_req_f_raw, dma_sb_err_state_ff, reset_all_tags,
-                           ifu_pmu_ic_miss,
-                           ifu_pmu_ic_hit,
-                           ifu_pmu_bus_error,
-                           ifu_pmu_bus_busy,
-                           ifu_pmu_bus_trxn
-                           }));
-
-
-///////////////////////////////////////////////////////
-// Cache debug logic                                 //
-///////////////////////////////////////////////////////
-assign ic_debug_addr[pt.ICACHE_INDEX_HI:3] = dec_tlu_ic_diag_pkt.icache_dicawics[pt.ICACHE_INDEX_HI-3:0] ;
-assign ic_debug_way_enc[01:00]             = dec_tlu_ic_diag_pkt.icache_dicawics[15:14] ;
-
-
-assign ic_debug_tag_array       = dec_tlu_ic_diag_pkt.icache_dicawics[16] ;
-assign ic_debug_rd_en           = dec_tlu_ic_diag_pkt.icache_rd_valid ;
-assign ic_debug_wr_en           = dec_tlu_ic_diag_pkt.icache_wr_valid ;
-
-
-assign ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]        = {(ic_debug_way_enc[1:0] == 2'b11),
-                                                      (ic_debug_way_enc[1:0] == 2'b10),
-                                                      (ic_debug_way_enc[1:0] == 2'b01),
-                                                      (ic_debug_way_enc[1:0] == 2'b00) };
-
-assign ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] = {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-assign ic_debug_ict_array_sel_in      =  ic_debug_rd_en & ic_debug_tag_array ;
-
-rvdff_fpga #(01+pt.ICACHE_NUM_WAYS) ifu_debug_sel_ff (.*, .clk (debug_c1_clk),
-                    .clken(debug_c1_clken), .rawclk(clk),
-                    .din ({ic_debug_ict_array_sel_in,
-                           ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]
-                          }),
-                    .dout({ic_debug_ict_array_sel_ff,
-                           ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]
-                           }));
-
-
-
-
-assign debug_data_clken  =  ic_debug_rd_en_ff;
-
-
-
-
-// memory protection  - equation to look identical to the LSU equation
-   assign ifc_region_acc_okay = (~(|{pt.INST_ACCESS_ENABLE0,pt.INST_ACCESS_ENABLE1,pt.INST_ACCESS_ENABLE2,pt.INST_ACCESS_ENABLE3,pt.INST_ACCESS_ENABLE4,pt.INST_ACCESS_ENABLE5,pt.INST_ACCESS_ENABLE6,pt.INST_ACCESS_ENABLE7})) |
-                               (pt.INST_ACCESS_ENABLE0 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK0)) == (pt.INST_ACCESS_ADDR0 | pt.INST_ACCESS_MASK0)) |
-                               (pt.INST_ACCESS_ENABLE1 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK1)) == (pt.INST_ACCESS_ADDR1 | pt.INST_ACCESS_MASK1)) |
-                               (pt.INST_ACCESS_ENABLE2 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK2)) == (pt.INST_ACCESS_ADDR2 | pt.INST_ACCESS_MASK2)) |
-                               (pt.INST_ACCESS_ENABLE3 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK3)) == (pt.INST_ACCESS_ADDR3 | pt.INST_ACCESS_MASK3)) |
-                               (pt.INST_ACCESS_ENABLE4 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK4)) == (pt.INST_ACCESS_ADDR4 | pt.INST_ACCESS_MASK4)) |
-                               (pt.INST_ACCESS_ENABLE5 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK5)) == (pt.INST_ACCESS_ADDR5 | pt.INST_ACCESS_MASK5)) |
-                               (pt.INST_ACCESS_ENABLE6 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK6)) == (pt.INST_ACCESS_ADDR6 | pt.INST_ACCESS_MASK6)) |
-                               (pt.INST_ACCESS_ENABLE7 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK7)) == (pt.INST_ACCESS_ADDR7 | pt.INST_ACCESS_MASK7));
-
-   assign ifc_region_acc_fault_memory_bf   =  ~ifc_iccm_access_bf & ~ifc_region_acc_okay & ifc_fetch_req_bf;
-
-   assign ifc_region_acc_fault_final_bf = ifc_region_acc_fault_bf | ifc_region_acc_fault_memory_bf;
-
-
-
-
-endmodule  // eb1_ifu_mem_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-
-module eb1_lsu
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-
-   input logic                             clk_override,             // Override non-functional clock gating
-   input logic                             dec_tlu_flush_lower_r,    // I0/I1 writeback flush. This is used to flush the old packets only
-   input logic                             dec_tlu_i0_kill_writeb_r, // I0 is flushed, don't writeback any results to arch state
-   input logic                             dec_tlu_force_halt,       // This will be high till TLU goes to debug halt
-
-   // chicken signals
-   input logic                             dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                             dec_tlu_wb_coalescing_disable,     // disable the write buffer coalesce
-   input logic                             dec_tlu_sideeffect_posted_disable, // disable the posted sideeffect load store to the bus
-   input logic                             dec_tlu_core_ecc_disable,          // disable the generation of the ecc
-
-   input logic [31:0]                      exu_lsu_rs1_d,        // address rs operand
-   input logic [31:0]                      exu_lsu_rs2_d,        // store data
-   input logic [11:0]                      dec_lsu_offset_d,     // address offset operand
-
-   input                                   eb1_lsu_pkt_t lsu_p,  // lsu control packet
-   input logic                             dec_lsu_valid_raw_d,   // Raw valid for address computation
-   input logic [31:0]                      dec_tlu_mrac_ff,       // CSR for memory region control
-
-   output logic [31:0]                     lsu_result_m,          // lsu load data
-   output logic [31:0]                     lsu_result_corr_r,     // This is the ECC corrected data going to RF
-   output logic                            lsu_load_stall_any,    // This is for blocking loads in the decode
-   output logic                            lsu_store_stall_any,   // This is for blocking stores in the decode
-   output logic                            lsu_fastint_stall_any, // Stall the fastint in decode-1 stage
-   output logic                            lsu_idle_any,          // lsu buffers are empty and no instruction in the pipeline. Doesn't include DMA
-   output logic                            lsu_active,            // Used to turn off top level clk
-
-   output logic [31:1]                     lsu_fir_addr,        // fast interrupt address
-   output logic [1:0]                      lsu_fir_error,       // Error during fast interrupt lookup
-
-   output logic                            lsu_single_ecc_error_incr,     // Increment the ecc counter
-   output eb1_lsu_error_pkt_t             lsu_error_pkt_r,               // lsu exception packet
-   output logic                            lsu_imprecise_error_load_any,  // bus load imprecise error
-   output logic                            lsu_imprecise_error_store_any, // bus store imprecise error
-   output logic [31:0]                     lsu_imprecise_error_addr_any,  // bus store imprecise error address
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,      // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,        // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,        // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,    // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,   // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,   // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,     // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,         // Data of the non block load
-
-   output logic                            lsu_pmu_load_external_m,        // PMU : Bus loads
-   output logic                            lsu_pmu_store_external_m,       // PMU : Bus loads
-   output logic                            lsu_pmu_misaligned_m,           // PMU : misaligned
-   output logic                            lsu_pmu_bus_trxn,               // PMU : bus transaction
-   output logic                            lsu_pmu_bus_misaligned,         // PMU : misaligned access going to the bus
-   output logic                            lsu_pmu_bus_error,              // PMU : bus sending error back
-   output logic                            lsu_pmu_bus_busy,               // PMU : bus is not ready
-
-   // Trigger signals
-   input                                   eb1_trigger_pkt_t [3:0] trigger_pkt_any, // Trigger info from the decode
-   output logic [3:0]                      lsu_trigger_match_m,                      // lsu trigger hit (one bit per trigger)
-
-   // DCCM ports
-   output logic                            dccm_wren,       // DCCM write enable
-   output logic                            dccm_rden,       // DCCM read enable
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo, // DCCM write address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi, // DCCM write address hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo, // DCCM read address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi, // DCCM read address hi bank (hi and low same if aligned read)
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo, // DCCM write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi, // DCCM write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo, // DCCM read data low bank
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi, // DCCM read data hi bank
-
-   // PIC ports
-   output logic                            picm_wren,    // PIC memory write enable
-   output logic                            picm_rden,    // PIC memory read enable
-   output logic                            picm_mken,    // Need to read the mask for stores to determine which bits to write/forward
-   output logic [31:0]                     picm_rdaddr,  // address for pic read access
-   output logic [31:0]                     picm_wraddr,  // address for pic write access
-   output logic [31:0]                     picm_wr_data, // PIC memory write data
-   input logic [31:0]                      picm_rd_data, // PIC memory read/mask data
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   input logic                             lsu_bus_clk_en,    // external drives a clock_en to control bus ratio
-
-   // DMA slave
-   input logic                             dma_dccm_req,       // DMA read/write to dccm
-   input logic [2:0]                       dma_mem_tag,        // DMA request tag
-   input logic [31:0]                      dma_mem_addr,       // DMA address
-   input logic [2:0]                       dma_mem_sz,         // DMA access size
-   input logic                             dma_mem_write,      // DMA access is a write
-   input logic [63:0]                      dma_mem_wdata,      // DMA write data
-
-   output logic                            dccm_dma_rvalid,     // lsu data valid for DMA dccm read
-   output logic                            dccm_dma_ecc_error,  // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,       // DMA request tag
-   output logic [63:0]                     dccm_dma_rdata,      // lsu data for DMA dccm read
-   output logic                            dccm_ready,          // lsu ready for DMA access
-
-   input logic                             scan_mode,           // scan mode
-   input logic                             clk,                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                             active_clk,          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                             rst_l                // reset, active low
-
-   );
-
-
-   logic        lsu_dccm_rden_m;
-   logic        lsu_dccm_rden_r;
-   logic [31:0] store_data_m;
-   logic [31:0] store_data_r;
-   logic [31:0] store_data_hi_r, store_data_lo_r;
-   logic [31:0] store_datafn_hi_r, store_datafn_lo_r;
-   logic [31:0] sec_data_lo_m, sec_data_hi_m;
-   logic [31:0] sec_data_lo_r, sec_data_hi_r;
-
-   logic [31:0] lsu_ld_data_m;
-   logic [31:0] dccm_rdata_hi_m, dccm_rdata_lo_m;
-   logic [6:0]  dccm_data_ecc_hi_m, dccm_data_ecc_lo_m;
-   logic        lsu_single_ecc_error_m;
-   logic        lsu_double_ecc_error_m;
-
-   logic [31:0] lsu_ld_data_r;
-   logic [31:0] lsu_ld_data_corr_r;
-   logic [31:0] dccm_rdata_hi_r, dccm_rdata_lo_r;
-   logic [6:0]  dccm_data_ecc_hi_r, dccm_data_ecc_lo_r;
-   logic        single_ecc_error_hi_r, single_ecc_error_lo_r;
-   logic        lsu_single_ecc_error_r;
-   logic        lsu_double_ecc_error_r;
-   logic        ld_single_ecc_error_r, ld_single_ecc_error_r_ff;
-
-   logic [31:0] picm_mask_data_m;
-
-   logic [31:0] lsu_addr_d, lsu_addr_m, lsu_addr_r;
-   logic [31:0] end_addr_d, end_addr_m, end_addr_r;
-
-   eb1_lsu_pkt_t    lsu_pkt_d, lsu_pkt_m, lsu_pkt_r;
-   logic        lsu_i0_valid_d, lsu_i0_valid_m, lsu_i0_valid_r;
-
-   // Store Buffer signals
-   logic        store_stbuf_reqvld_r;
-   logic        ldst_stbuf_reqvld_r;
-
-   logic        lsu_commit_r;
-   logic        lsu_exc_m;
-
-   logic        addr_in_dccm_d, addr_in_dccm_m, addr_in_dccm_r;
-   logic        addr_in_pic_d, addr_in_pic_m, addr_in_pic_r;
-   logic        ldst_dual_d, ldst_dual_m, ldst_dual_r;
-   logic        addr_external_m;
-
-   logic                          stbuf_reqvld_any;
-   logic                          stbuf_reqvld_flushed_any;
-   logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff, sec_data_hi_r_ff;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff, sec_data_ecc_lo_r_ff;
-
-   logic                          lsu_cmpen_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m;
-
-   logic        lsu_stbuf_commit_any;
-   logic        lsu_stbuf_empty_any;   // This is for blocking loads
-   logic        lsu_stbuf_full_any;
-
-    // Bus signals
-   logic        lsu_busreq_r;
-   logic        lsu_bus_buffer_pend_any;
-   logic        lsu_bus_buffer_empty_any;
-   logic        lsu_bus_buffer_full_any;
-   logic        lsu_busreq_m;
-   logic [31:0] bus_read_data_m;
-
-   logic        flush_m_up, flush_r;
-   logic        is_sideeffects_m;
-   logic [2:0]  dma_mem_tag_d, dma_mem_tag_m;
-   logic        ldst_nodma_mtor;
-   logic        dma_dccm_wen, dma_pic_wen;
-   logic [31:0] dma_dccm_wdata_lo, dma_dccm_wdata_hi;
-   logic [pt.DCCM_ECC_WIDTH-1:0] dma_dccm_wdata_ecc_lo, dma_dccm_wdata_ecc_hi;
-
-   // Clocks
-   logic        lsu_busm_clken;
-   logic        lsu_bus_obuf_c1_clken;
-   logic        lsu_c1_m_clk, lsu_c1_r_clk;
-   logic        lsu_c2_m_clk, lsu_c2_r_clk;
-   logic        lsu_store_c1_m_clk, lsu_store_c1_r_clk;
-
-   logic        lsu_stbuf_c1_clk;
-   logic        lsu_bus_ibuf_c1_clk, lsu_bus_obuf_c1_clk, lsu_bus_buf_c1_clk;
-   logic        lsu_busm_clk;
-   logic        lsu_free_c2_clk;
-
-   logic        lsu_raw_fwd_lo_m, lsu_raw_fwd_hi_m;
-   logic        lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r;
-
-   assign       lsu_raw_fwd_lo_m = (|stbuf_fwdbyteen_lo_m[pt.DCCM_BYTE_WIDTH-1:0]);
-   assign       lsu_raw_fwd_hi_m = (|stbuf_fwdbyteen_hi_m[pt.DCCM_BYTE_WIDTH-1:0]);
-
-   eb1_lsu_lsc_ctl #(.pt(pt)) lsu_lsc_ctl (.*);
-
-   // block stores in decode  - for either bus or stbuf reasons
-   assign lsu_store_stall_any = lsu_stbuf_full_any | lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_load_stall_any = lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_fastint_stall_any = ld_single_ecc_error_r;    // Stall the fastint in decode-1 stage
-
-   // Ready to accept dma trxns
-   // There can't be any inpipe forwarding from non-dma packet to dma packet since they can be flushed so we can't have st in r when dma is in m
-   assign dma_mem_tag_d[2:0]   = dma_mem_tag[2:0];
-   assign ldst_nodma_mtor = (lsu_pkt_m.valid & ~lsu_pkt_m.dma & (addr_in_dccm_m | addr_in_pic_m) & lsu_pkt_m.store);
-
-   assign dccm_ready = ~(dec_lsu_valid_raw_d | ldst_nodma_mtor | ld_single_ecc_error_r_ff);
-
-   assign dma_dccm_wen = dma_dccm_req & dma_mem_write & addr_in_dccm_d & dma_mem_sz[1];   // Perform DMA writes only for word/dword
-   assign dma_pic_wen  = dma_dccm_req & dma_mem_write & addr_in_pic_d;
-   assign {dma_dccm_wdata_hi[31:0], dma_dccm_wdata_lo[31:0]} = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-
-
-   // Generate per cycle flush signals
-   assign flush_m_up = dec_tlu_flush_lower_r;
-   assign flush_r    = dec_tlu_i0_kill_writeb_r;
-
-   // lsu idle
-   // lsu halt idle. This is used for entering the halt mode. Also, DMA accesses are allowed during fence.
-   // Indicates non-idle if there is a instruction valid in d-r or read/write buffers are non-empty since they can come with error
-   // Store buffer now have only non-dma dccm stores
-   // stbuf_empty not needed since it has only dccm stores
-   assign lsu_idle_any = ~((lsu_pkt_m.valid & ~lsu_pkt_m.dma) |
-                           (lsu_pkt_r.valid & ~lsu_pkt_r.dma)) &
-                           lsu_bus_buffer_empty_any;
-
-   assign lsu_active = (lsu_pkt_m.valid | lsu_pkt_r.valid | ld_single_ecc_error_r_ff) | ~lsu_bus_buffer_empty_any;  // This includes DMA. Used for gating top clock
-
-   // Instantiate the store buffer
-   assign store_stbuf_reqvld_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~flush_r & (~lsu_pkt_r.dma | ((lsu_pkt_r.by | lsu_pkt_r.half) & ~lsu_double_ecc_error_r));
-
-   // Disable Forwarding for now
-   assign lsu_cmpen_m = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & (addr_in_dccm_m | addr_in_pic_m);
-
-   // Bus signals
-   assign lsu_busreq_m = lsu_pkt_m.valid & ((lsu_pkt_m.load | lsu_pkt_m.store) & addr_external_m) & ~flush_m_up & ~lsu_exc_m & ~lsu_pkt_m.fast_int;
-
-   // Dual signals
-   assign ldst_dual_d  = (lsu_addr_d[2] != end_addr_d[2]);
-   assign ldst_dual_m  = (lsu_addr_m[2] != end_addr_m[2]);
-   assign ldst_dual_r  = (lsu_addr_r[2] != end_addr_r[2]);
-
-   // PMU signals
-   assign lsu_pmu_misaligned_m     = lsu_pkt_m.valid & ((lsu_pkt_m.half & lsu_addr_m[0]) | (lsu_pkt_m.word & (|lsu_addr_m[1:0])));
-   assign lsu_pmu_load_external_m  = lsu_pkt_m.valid & lsu_pkt_m.load & addr_external_m;
-   assign lsu_pmu_store_external_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_external_m;
-
-   eb1_lsu_dccm_ctl #(.pt(pt)) dccm_ctl (
-      .lsu_addr_d(lsu_addr_d[31:0]),
-      .end_addr_d(end_addr_d[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .lsu_addr_r(lsu_addr_r[31:0]),
-
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_stbuf #(.pt(pt)) stbuf (
-      .lsu_addr_d(lsu_addr_d[pt.LSU_SB_BITS-1:0]),
-      .end_addr_d(end_addr_d[pt.LSU_SB_BITS-1:0]),
-
-      .*
-
-   );
-
-   eb1_lsu_ecc #(.pt(pt)) ecc (
-      .lsu_addr_r(lsu_addr_r[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_trigger #(.pt(pt)) trigger (
-      .store_data_m(store_data_m[31:0]),
-      .*
-   );
-
-   // Clk domain
-   eb1_lsu_clkdomain #(.pt(pt)) clkdomain (.*);
-
-   // Bus interface
-   eb1_lsu_bus_intf #(.pt(pt)) bus_intf (
-      .lsu_addr_m(lsu_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .lsu_addr_r(lsu_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .end_addr_m(end_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .end_addr_r(end_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .store_data_r(store_data_r[31:0] & {32{lsu_busreq_r}}),
-      .*
-   );
-
-   //Flops
-   rvdff #(3) dma_mem_tag_mff     (.*, .din(dma_mem_tag_d[2:0]), .dout(dma_mem_tag_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(2) lsu_raw_fwd_r_ff    (.*, .din({lsu_raw_fwd_hi_m, lsu_raw_fwd_lo_m}),     .dout({lsu_raw_fwd_hi_r, lsu_raw_fwd_lo_r}),     .clk(lsu_c2_r_clk));
-
-
-endmodule // eb1_lsu
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Checks the memory map for the address
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_addrcheck
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic          lsu_c2_m_clk,              // clock
-   input logic          rst_l,                     // reset
-
-   input logic [31:0]   start_addr_d,              // start address for lsu
-   input logic [31:0]   end_addr_d,                // end address for lsu
-   input eb1_lsu_pkt_t lsu_pkt_d,                 // packet in d
-   input logic [31:0]   dec_tlu_mrac_ff,           // CSR read
-   input logic [3:0]    rs1_region_d,              // address rs operand [31:28]
-
-   input logic [31:0]   rs1_d,                     // address rs operand
-
-   output logic         is_sideeffects_m,          // is sideffects space
-   output logic         addr_in_dccm_d,            // address in dccm
-   output logic         addr_in_pic_d,             // address in pic
-   output logic         addr_external_d,           // address in external
-
-   output logic         access_fault_d,            // access fault
-   output logic         misaligned_fault_d,        // misaligned
-   output logic [3:0]   exc_mscause_d,             // mscause for access/misaligned faults
-
-   output logic         fir_dccm_access_error_d,   // Fast interrupt dccm access error
-   output logic         fir_nondccm_access_error_d,// Fast interrupt dccm access error
-
-   input  logic         scan_mode                  // Scan mode
-);
-
-
-   logic        non_dccm_access_ok;
-   logic        is_sideeffects_d, is_aligned_d;
-   logic        start_addr_in_dccm_d, end_addr_in_dccm_d;
-   logic        start_addr_in_dccm_region_d, end_addr_in_dccm_region_d;
-   logic        start_addr_in_pic_d, end_addr_in_pic_d;
-   logic        start_addr_in_pic_region_d, end_addr_in_pic_region_d;
-   logic [4:0]  csr_idx;
-   logic        addr_in_iccm;
-   logic        start_addr_dccm_or_pic;
-   logic        base_reg_dccm_or_pic;
-   logic        unmapped_access_fault_d, mpu_access_fault_d, picm_access_fault_d, regpred_access_fault_d;
-   logic        regcross_misaligned_fault_d, sideeffect_misaligned_fault_d;
-   logic [3:0]  access_fault_mscause_d;
-   logic [3:0]  misaligned_fault_mscause_d;
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Start address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) start_addr_dccm_rangecheck (
-         .addr(start_addr_d[31:0]),
-         .in_range(start_addr_in_dccm_d),
-         .in_region(start_addr_in_dccm_region_d)
-      );
-
-      // End address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) end_addr_dccm_rangecheck (
-         .addr(end_addr_d[31:0]),
-         .in_range(end_addr_in_dccm_d),
-         .in_region(end_addr_in_dccm_region_d)
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign start_addr_in_dccm_d = '0;
-      assign start_addr_in_dccm_region_d = '0;
-      assign end_addr_in_dccm_d = '0;
-      assign end_addr_in_dccm_region_d = '0;
-   end
-
-   if (pt.ICCM_ENABLE == 1) begin : check_iccm
-      assign addr_in_iccm =  (start_addr_d[31:28] == pt.ICCM_REGION);
-   end else begin
-     assign addr_in_iccm = 1'b0;
-   end
-
-   // PIC memory check
-   // Start address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) start_addr_pic_rangecheck (
-      .addr(start_addr_d[31:0]),
-      .in_range(start_addr_in_pic_d),
-      .in_region(start_addr_in_pic_region_d)
-   );
-
-   // End address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) end_addr_pic_rangecheck (
-      .addr(end_addr_d[31:0]),
-      .in_range(end_addr_in_pic_d),
-      .in_region(end_addr_in_pic_region_d)
-   );
-
-   assign start_addr_dccm_or_pic  = start_addr_in_dccm_region_d | start_addr_in_pic_region_d;
-   assign base_reg_dccm_or_pic    = ((rs1_region_d[3:0] == pt.DCCM_REGION) & pt.DCCM_ENABLE) | (rs1_region_d[3:0] == pt.PIC_REGION);
-   assign addr_in_dccm_d          = (start_addr_in_dccm_d & end_addr_in_dccm_d);
-   assign addr_in_pic_d           = (start_addr_in_pic_d & end_addr_in_pic_d);
-
-   assign addr_external_d   = ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d);
-   assign csr_idx[4:0]       = {start_addr_d[31:28], 1'b1};
-   assign is_sideeffects_d = dec_tlu_mrac_ff[csr_idx] & ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d | addr_in_iccm) & lsu_pkt_d.valid & (lsu_pkt_d.store | lsu_pkt_d.load);  //every region has the 2 LSB indicating ( 1: sideeffects/no_side effects, and 0: cacheable ). Ignored in internal regions
-   assign is_aligned_d    = (lsu_pkt_d.word & (start_addr_d[1:0] == 2'b0)) |
-                              (lsu_pkt_d.half & (start_addr_d[0] == 1'b0)) |
-                              lsu_pkt_d.by;
-
-   assign non_dccm_access_ok = (~(|{pt.DATA_ACCESS_ENABLE0,pt.DATA_ACCESS_ENABLE1,pt.DATA_ACCESS_ENABLE2,pt.DATA_ACCESS_ENABLE3,pt.DATA_ACCESS_ENABLE4,pt.DATA_ACCESS_ENABLE5,pt.DATA_ACCESS_ENABLE6,pt.DATA_ACCESS_ENABLE7})) |
-                               (((pt.DATA_ACCESS_ENABLE0 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7)))   &
-                                ((pt.DATA_ACCESS_ENABLE0 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7))));
-
-   // Access fault logic
-   // 0. Unmapped local memory : Addr in dccm region but not in dccm offset OR Addr in picm region but not in picm offset OR DCCM -> PIC cross when DCCM/PIC in same region
-   // 1. Uncorrectable (double bit) ECC error
-   // 3. Address is not in a populated non-dccm region
-   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   // 6. Ld/St access to picm are not word aligned or word size
-   assign regpred_access_fault_d  = (start_addr_dccm_or_pic ^ base_reg_dccm_or_pic);                   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   assign picm_access_fault_d     = (addr_in_pic_d & ((start_addr_d[1:0] != 2'b0) | ~lsu_pkt_d.word));                                               // 6. Ld/St access to picm are not word aligned or word size
-
-   if (pt.DCCM_ENABLE & (pt.DCCM_REGION == pt.PIC_REGION)) begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~(start_addr_in_dccm_d | start_addr_in_pic_d)) |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (end_addr_in_dccm_region_d & ~(end_addr_in_dccm_d | end_addr_in_pic_d))       |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (start_addr_in_dccm_d & end_addr_in_pic_d)                                    |   // 0. DCCM -> PIC cross when DCCM/PIC in same region
-                                        (start_addr_in_pic_d  & end_addr_in_dccm_d));                                     // 0. DCCM -> PIC cross when DCCM/PIC in same region
-      assign mpu_access_fault_d      = (~start_addr_in_dccm_region_d & ~non_dccm_access_ok);                              // 3. Address is not in a populated non-dccm region
-   end else begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d)                              |   // 0. Addr in dccm region but not in dccm offset
-                                        (end_addr_in_dccm_region_d & ~end_addr_in_dccm_d)                                  |   // 0. Addr in dccm region but not in dccm offset
-                                        (start_addr_in_pic_region_d & ~start_addr_in_pic_d)                                |   // 0. Addr in picm region but not in picm offset
-                                        (end_addr_in_pic_region_d & ~end_addr_in_pic_d));                                      // 0. Addr in picm region but not in picm offset
-      assign mpu_access_fault_d      = (~start_addr_in_pic_region_d & ~start_addr_in_dccm_region_d & ~non_dccm_access_ok);     // 3. Address is not in a populated non-dccm region
-   end
-
-   assign access_fault_d = (unmapped_access_fault_d | mpu_access_fault_d | picm_access_fault_d | regpred_access_fault_d) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign access_fault_mscause_d[3:0] = unmapped_access_fault_d ? 4'h2 : mpu_access_fault_d ? 4'h3 : regpred_access_fault_d ? 4'h5 : picm_access_fault_d ? 4'h6 : 4'h0;
-
-   // Misaligned happens due to 2 reasons
-   // 0. Region cross
-   // 1. sideeffects access which are not aligned
-   assign regcross_misaligned_fault_d = (start_addr_d[31:28] != end_addr_d[31:28]);
-   assign sideeffect_misaligned_fault_d = (is_sideeffects_d & ~is_aligned_d);
-   assign misaligned_fault_d = (regcross_misaligned_fault_d | (sideeffect_misaligned_fault_d & addr_external_d)) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign misaligned_fault_mscause_d[3:0] = regcross_misaligned_fault_d ? 4'h2 : sideeffect_misaligned_fault_d ? 4'h1 : 4'h0;
-
-   assign exc_mscause_d[3:0] = misaligned_fault_d ? misaligned_fault_mscause_d[3:0] : access_fault_mscause_d[3:0];
-
-   // Fast interrupt error logic
-   assign fir_dccm_access_error_d    = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d) |
-                                        (end_addr_in_dccm_region_d   & ~end_addr_in_dccm_d)) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-   assign fir_nondccm_access_error_d = ~(start_addr_in_dccm_region_d & end_addr_in_dccm_region_d) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-
-   rvdff #(.WIDTH(1))   is_sideeffects_mff (.din(is_sideeffects_d), .dout(is_sideeffects_m), .clk(lsu_c2_m_clk), .*);
-
-endmodule // eb1_lsu_addrcheck
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-
-module eb1_lsu_bus_buffer
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // Don't block the sideeffect load store to the bus
-   input logic                          dec_tlu_force_halt,
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,
-   input logic                          lsu_busm_clken,
-   input logic                          lsu_c2_r_clk,
-   input logic                          lsu_bus_ibuf_c1_clk,
-   input logic                          lsu_bus_obuf_c1_clk,
-   input logic                          lsu_bus_buf_c1_clk,
-   input logic                          lsu_free_c2_clk,
-   input logic                          lsu_busm_clk,
-
-
-   input logic                          dec_lsu_valid_raw_d,            // Raw valid for address computation
-   input eb1_lsu_pkt_t                 lsu_pkt_m,                      // lsu packet flowing down the pipe
-   input eb1_lsu_pkt_t                 lsu_pkt_r,                      // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   store_data_r,                   // store data flowing down the pipe
-
-   input logic                          no_word_merge_r,                // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          no_dword_merge_r,               // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          lsu_busreq_m,                   // bus request is in m
-   output logic                         lsu_busreq_r,                   // bus request is in r
-   input logic                          ld_full_hit_m,                  // load can get all its byte from a write buffer entry
-   input logic                          flush_m_up,                     // flush
-   input logic                          flush_r,                        // flush
-   input logic                          lsu_commit_r,                   // lsu instruction in r commits
-   input logic                          is_sideeffects_r,               // lsu attribute is side_effects
-   input logic                          ldst_dual_d,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_m,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_r,                    // load/store is unaligned at 32 bit boundary
-
-   input logic [7:0]                    ldst_byteen_ext_m,              // HI and LO signals
-
-   output logic                         lsu_bus_buffer_pend_any,          // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,          // bus buffer is full
-   output logic                         lsu_bus_buffer_empty_any,         // bus buffer is empty
-
-   output logic [3:0]                   ld_byte_hit_buf_lo, ld_byte_hit_buf_hi,    // Byte enables for forwarding data
-   output logic [31:0]                  ld_fwddata_buf_lo, ld_fwddata_buf_hi,      // load forwarding data
-
-   output logic                         lsu_imprecise_error_load_any,     // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,    // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,     // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,     // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,       // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,       // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,   // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,  // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,  // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,    // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,        // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-
-   input logic                             lsu_bus_clk_en,
-   input logic                             lsu_bus_clk_en_q
-
-);
-
-   // For Ld: IDLE -> WAIT -> CMD -> RESP -> DONE_PARTIAL(?) -> DONE_WAIT(?) -> DONE -> IDLE
-   // For St: IDLE -> WAIT -> CMD -> RESP(?) -> IDLE
-   typedef enum logic [2:0] {IDLE=3'b000, WAIT=3'b001, CMD=3'b010, RESP=3'b011, DONE_PARTIAL=3'b100, DONE_WAIT=3'b101, DONE=3'b110} state_t;
-
-   localparam DEPTH     = pt.LSU_NUM_NBLOAD;
-   localparam DEPTH_LOG2 = pt.LSU_NUM_NBLOAD_WIDTH;
-   localparam TIMER     = 8;   // This can be only power of 2
-   localparam TIMER_MAX = TIMER - 1;  // Maximum value of timer
-   localparam TIMER_LOG2 = (TIMER < 2) ? 1 : $clog2(TIMER);
-
-   logic [3:0]                          ldst_byteen_hi_m, ldst_byteen_lo_m;
-   logic [DEPTH-1:0]                    ld_addr_hitvec_lo, ld_addr_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvec_lo, ld_byte_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvecfn_lo, ld_byte_hitvecfn_hi;
-
-   logic                                ld_addr_ibuf_hit_lo, ld_addr_ibuf_hit_hi;
-   logic [3:0]                          ld_byte_ibuf_hit_lo, ld_byte_ibuf_hit_hi;
-
-   logic [3:0]                          ldst_byteen_r;
-   logic [3:0]                          ldst_byteen_hi_r, ldst_byteen_lo_r;
-   logic [31:0]                         store_data_hi_r, store_data_lo_r;
-   logic                                is_aligned_r;                   // Aligned load/store
-   logic                                ldst_samedw_r;
-
-   logic                                lsu_nonblock_load_valid_r;
-   logic [31:0]                         lsu_nonblock_load_data_hi, lsu_nonblock_load_data_lo, lsu_nonblock_data_unalgn;
-   logic [1:0]                          lsu_nonblock_addr_offset;
-   logic [1:0]                          lsu_nonblock_sz;
-   logic                                lsu_nonblock_unsign;
-   logic                                lsu_nonblock_load_data_ready;
-
-   logic [DEPTH-1:0]                    CmdPtr0Dec, CmdPtr1Dec;
-   logic [DEPTH-1:0]                    RspPtrDec;
-   logic [DEPTH_LOG2-1:0]               CmdPtr0, CmdPtr1;
-   logic [DEPTH_LOG2-1:0]               RspPtr;
-   logic [DEPTH_LOG2-1:0]               WrPtr0_m, WrPtr0_r;
-   logic [DEPTH_LOG2-1:0]               WrPtr1_m, WrPtr1_r;
-   logic                                found_wrptr0, found_wrptr1, found_cmdptr0, found_cmdptr1;
-   logic [3:0]                          buf_numvld_any, buf_numvld_wrcmd_any, buf_numvld_cmd_any, buf_numvld_pend_any;
-   logic                                any_done_wait_state;
-   logic                                bus_sideeffect_pend;
-   logic                                bus_coalescing_disable;
-
-   logic                                bus_addr_match_pending;
-   logic                                bus_cmd_sent, bus_cmd_ready;
-   logic                                bus_wcmd_sent, bus_wdata_sent;
-   logic                                bus_rsp_read, bus_rsp_write;
-   logic [pt.LSU_BUS_TAG-1:0]           bus_rsp_read_tag, bus_rsp_write_tag;
-   logic                                bus_rsp_read_error, bus_rsp_write_error;
-   logic [63:0]                         bus_rsp_rdata;
-
-   // Bus buffer signals
-   state_t [DEPTH-1:0]                  buf_state;
-   logic   [DEPTH-1:0][1:0]             buf_sz;
-   logic   [DEPTH-1:0][31:0]            buf_addr;
-   logic   [DEPTH-1:0][3:0]             buf_byteen;
-   logic   [DEPTH-1:0]                  buf_sideeffect;
-   logic   [DEPTH-1:0]                  buf_write;
-   logic   [DEPTH-1:0]                  buf_unsign;
-   logic   [DEPTH-1:0]                  buf_dual;
-   logic   [DEPTH-1:0]                  buf_samedw;
-   logic   [DEPTH-1:0]                  buf_nomerge;
-   logic   [DEPTH-1:0]                  buf_dualhi;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag;
-   logic   [DEPTH-1:0]                  buf_ldfwd;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag;
-   logic   [DEPTH-1:0]                  buf_error;
-   logic   [DEPTH-1:0][31:0]            buf_data;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age, buf_age_younger;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage, buf_rsp_pickage;
-
-   state_t [DEPTH-1:0]                  buf_nxtstate;
-   logic   [DEPTH-1:0]                  buf_rst;
-   logic   [DEPTH-1:0]                  buf_state_en;
-   logic   [DEPTH-1:0]                  buf_cmd_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_resp_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_dual_in;
-   logic   [DEPTH-1:0]                  buf_samedw_in;
-   logic   [DEPTH-1:0]                  buf_nomerge_in;
-   logic   [DEPTH-1:0]                  buf_sideeffect_in;
-   logic   [DEPTH-1:0]                  buf_unsign_in;
-   logic   [DEPTH-1:0][1:0]             buf_sz_in;
-   logic   [DEPTH-1:0]                  buf_write_in;
-   logic   [DEPTH-1:0]                  buf_wr_en;
-   logic   [DEPTH-1:0]                  buf_dualhi_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag_in;
-   logic   [DEPTH-1:0]                  buf_ldfwd_en;
-   logic   [DEPTH-1:0]                  buf_ldfwd_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag_in;
-   logic   [DEPTH-1:0][3:0]             buf_byteen_in;
-   logic   [DEPTH-1:0][31:0]            buf_addr_in;
-   logic   [DEPTH-1:0][31:0]            buf_data_in;
-   logic   [DEPTH-1:0]                  buf_error_en;
-   logic   [DEPTH-1:0]                  buf_data_en;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_ageQ;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_set;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspageQ;
-
-   // Input buffer signals
-   logic                               ibuf_valid;
-   logic                               ibuf_dual;
-   logic                               ibuf_samedw;
-   logic                               ibuf_nomerge;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag;
-   logic                               ibuf_sideeffect;
-   logic                               ibuf_unsign;
-   logic                               ibuf_write;
-   logic [1:0]                         ibuf_sz;
-   logic [3:0]                         ibuf_byteen;
-   logic [31:0]                        ibuf_addr;
-   logic [31:0]                        ibuf_data;
-   logic [TIMER_LOG2-1:0]              ibuf_timer;
-
-   logic                               ibuf_byp;
-   logic                               ibuf_wr_en;
-   logic                               ibuf_rst;
-   logic                               ibuf_force_drain;
-   logic                               ibuf_drain_vld;
-   logic [DEPTH-1:0]                   ibuf_drainvec_vld;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag_in;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag_in;
-   logic [1:0]                         ibuf_sz_in;
-   logic [31:0]                        ibuf_addr_in;
-   logic [3:0]                         ibuf_byteen_in;
-   logic [31:0]                        ibuf_data_in;
-   logic [TIMER_LOG2-1:0]              ibuf_timer_in;
-   logic [3:0]                         ibuf_byteen_out;
-   logic [31:0]                        ibuf_data_out;
-   logic                               ibuf_merge_en, ibuf_merge_in;
-
-   // Output buffer signals
-   logic                               obuf_valid;
-   logic                               obuf_write;
-   logic                               obuf_nosend;
-   logic                               obuf_rdrsp_pend;
-   logic                               obuf_sideeffect;
-   logic [31:0]                        obuf_addr;
-   logic [63:0]                        obuf_data;
-   logic [1:0]                         obuf_sz;
-   logic [7:0]                         obuf_byteen;
-   logic                               obuf_merge;
-   logic                               obuf_cmd_done, obuf_data_done;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag;
-
-   logic                               ibuf_buf_byp;
-   logic                               obuf_force_wr_en;
-   logic                               obuf_wr_wait;
-   logic                               obuf_wr_en, obuf_wr_enQ;
-   logic                               obuf_rst;
-   logic                               obuf_write_in;
-   logic                               obuf_nosend_in;
-   logic                               obuf_rdrsp_pend_en;
-   logic                               obuf_rdrsp_pend_in;
-   logic                               obuf_sideeffect_in;
-   logic                               obuf_aligned_in;
-   logic [31:0]                        obuf_addr_in;
-   logic [63:0]                        obuf_data_in;
-   logic [1:0]                         obuf_sz_in;
-   logic [7:0]                         obuf_byteen_in;
-   logic                               obuf_merge_in;
-   logic                               obuf_cmd_done_in, obuf_data_done_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag_in;
-
-   logic                               obuf_merge_en;
-   logic [TIMER_LOG2-1:0]              obuf_wr_timer, obuf_wr_timer_in;
-   logic [7:0]                         obuf_byteen0_in, obuf_byteen1_in;
-   logic [63:0]                        obuf_data0_in, obuf_data1_in;
-
-   logic                               lsu_axi_awvalid_q, lsu_axi_awready_q;
-   logic                               lsu_axi_wvalid_q, lsu_axi_wready_q;
-   logic                               lsu_axi_arvalid_q, lsu_axi_arready_q;
-   logic                               lsu_axi_bvalid_q, lsu_axi_bready_q;
-   logic                               lsu_axi_rvalid_q, lsu_axi_rready_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_axi_bid_q, lsu_axi_rid_q;
-   logic [1:0]                         lsu_axi_bresp_q, lsu_axi_rresp_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_imprecise_error_store_tag;
-   logic [63:0]                        lsu_axi_rdata_q;
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic start
-   //------------------------------------------------------------------------------
-
-   // Function to do 8 to 3 bit encoding
-   function automatic logic [2:0] f_Enc8to3;
-      input logic [7:0] Dec_value;
-
-      logic [2:0]       Enc_value;
-      Enc_value[0] = Dec_value[1] | Dec_value[3] | Dec_value[5] | Dec_value[7];
-      Enc_value[1] = Dec_value[2] | Dec_value[3] | Dec_value[6] | Dec_value[7];
-      Enc_value[2] = Dec_value[4] | Dec_value[5] | Dec_value[6] | Dec_value[7];
-
-      return Enc_value[2:0];
-   endfunction // f_Enc8to3
-
-   // Buffer hit logic for bus load forwarding
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   for (genvar i=0; i<DEPTH; i++) begin
-      assign ld_addr_hitvec_lo[i] = (lsu_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-      assign ld_addr_hitvec_hi[i] = (end_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-   end
-
-   for (genvar j=0; j<4; j++) begin
-     assign ld_byte_hit_buf_lo[j] = |(ld_byte_hitvecfn_lo[j]) | ld_byte_ibuf_hit_lo[j];
-     assign ld_byte_hit_buf_hi[j] = |(ld_byte_hitvecfn_hi[j]) | ld_byte_ibuf_hit_hi[j];
-     for (genvar i=0; i<DEPTH; i++) begin
-         assign ld_byte_hitvec_lo[j][i] = ld_addr_hitvec_lo[i] & buf_byteen[i][j] & ldst_byteen_lo_m[j];
-         assign ld_byte_hitvec_hi[j][i] = ld_addr_hitvec_hi[i] & buf_byteen[i][j] & ldst_byteen_hi_m[j];
-
-         assign ld_byte_hitvecfn_lo[j][i] = ld_byte_hitvec_lo[j][i] & ~(|(ld_byte_hitvec_lo[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_lo[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-         assign ld_byte_hitvecfn_hi[j][i] = ld_byte_hitvec_hi[j][i] & ~(|(ld_byte_hitvec_hi[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_hi[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-      end
-   end
-
-   // Hit in the ibuf
-   assign ld_addr_ibuf_hit_lo = (lsu_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-   assign ld_addr_ibuf_hit_hi = (end_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin
-      assign ld_byte_ibuf_hit_lo[i] = ld_addr_ibuf_hit_lo & ibuf_byteen[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_ibuf_hit_hi[i] = ld_addr_ibuf_hit_hi & ibuf_byteen[i] & ldst_byteen_hi_m[i];
-   end
-
-   always_comb begin
-      ld_fwddata_buf_lo[31:0] = {{8{ld_byte_ibuf_hit_lo[3]}},{8{ld_byte_ibuf_hit_lo[2]}},{8{ld_byte_ibuf_hit_lo[1]}},{8{ld_byte_ibuf_hit_lo[0]}}} & ibuf_data[31:0];
-      ld_fwddata_buf_hi[31:0] = {{8{ld_byte_ibuf_hit_hi[3]}},{8{ld_byte_ibuf_hit_hi[2]}},{8{ld_byte_ibuf_hit_hi[1]}},{8{ld_byte_ibuf_hit_hi[0]}}} & ibuf_data[31:0];
-      for (int i=0; i<DEPTH; i++) begin
-         ld_fwddata_buf_lo[7:0]   |= {8{ld_byte_hitvecfn_lo[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_lo[15:8]  |= {8{ld_byte_hitvecfn_lo[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_lo[23:16] |= {8{ld_byte_hitvecfn_lo[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_lo[31:24] |= {8{ld_byte_hitvecfn_lo[3][i]}} & buf_data[i][31:24];
-
-         ld_fwddata_buf_hi[7:0]   |= {8{ld_byte_hitvecfn_hi[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_hi[15:8]  |= {8{ld_byte_hitvecfn_hi[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_hi[23:16] |= {8{ld_byte_hitvecfn_hi[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_hi[31:24] |= {8{ld_byte_hitvecfn_hi[3][i]}} & buf_data[i][31:24];
-      end
-   end
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic end
-   //------------------------------------------------------------------------------
-
-   assign bus_coalescing_disable = dec_tlu_wb_coalescing_disable | pt.BUILD_AHB_LITE;
-
-   // Get the hi/lo byte enable
-   assign ldst_byteen_r[3:0] = ({4{lsu_pkt_r.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_r.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_r.word}} & 4'b1111);
-
-   assign {ldst_byteen_hi_r[3:0], ldst_byteen_lo_r[3:0]} = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-   assign {store_data_hi_r[31:0], store_data_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-   assign ldst_samedw_r    = (lsu_addr_r[3] == end_addr_r[3]);
-   assign is_aligned_r    = (lsu_pkt_r.word & (lsu_addr_r[1:0] == 2'b0)) |
-                            (lsu_pkt_r.half & (lsu_addr_r[0] == 1'b0))   |
-                            lsu_pkt_r.by;
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign ibuf_byp = lsu_busreq_r & (lsu_pkt_r.load | no_word_merge_r) & ~ibuf_valid;
-   assign ibuf_wr_en = lsu_busreq_r & lsu_commit_r & ~ibuf_byp;
-   assign ibuf_rst   = (ibuf_drain_vld & ~ibuf_wr_en) | dec_tlu_force_halt;
-   assign ibuf_force_drain = lsu_busreq_m & ~lsu_busreq_r & ibuf_valid & (lsu_pkt_m.load | (ibuf_addr[31:2] != lsu_addr_m[31:2]));  // Move the ibuf to buf if there is a non-colaescable ld/st in m but nothing in r
-   assign ibuf_drain_vld = ibuf_valid & (((ibuf_wr_en | (ibuf_timer == TIMER_MAX)) & ~(ibuf_merge_en & ibuf_merge_in)) | ibuf_byp | ibuf_force_drain | ibuf_sideeffect | ~ibuf_write | bus_coalescing_disable);
-   assign ibuf_tag_in[DEPTH_LOG2-1:0] = (ibuf_merge_en & ibuf_merge_in) ? ibuf_tag[DEPTH_LOG2-1:0] : (ldst_dual_r ? WrPtr1_r : WrPtr0_r);
-   assign ibuf_dualtag_in[DEPTH_LOG2-1:0] = WrPtr0_r;
-   assign ibuf_sz_in[1:0]   = {lsu_pkt_r.word, lsu_pkt_r.half};
-   assign ibuf_addr_in[31:0] = ldst_dual_r ? end_addr_r[31:0] : lsu_addr_r[31:0];
-   assign ibuf_byteen_in[3:0] = (ibuf_merge_en & ibuf_merge_in) ? (ibuf_byteen[3:0] | ldst_byteen_lo_r[3:0]) : (ldst_dual_r ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_data_in[(8*i)+7:(8*i)] = (ibuf_merge_en & ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                             (ldst_dual_r ? store_data_hi_r[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)]);
-   end
-   assign ibuf_timer_in = ibuf_wr_en ? '0 : (ibuf_timer < TIMER_MAX) ? (ibuf_timer + 1'b1) : ibuf_timer;
-
-
-   assign ibuf_merge_en = lsu_busreq_r & lsu_commit_r & lsu_pkt_r.store & ibuf_valid & ibuf_write & (lsu_addr_r[31:2] == ibuf_addr[31:2]) & ~is_sideeffects_r & ~bus_coalescing_disable;
-   assign ibuf_merge_in = ~ldst_dual_r;   // If it's a unaligned store, merge needs to happen on the way out of ibuf
-
-   // ibuf signals going to bus buffer after merging
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_byteen_out[i] = (ibuf_merge_en & ~ibuf_merge_in) ? (ibuf_byteen[i] | ldst_byteen_lo_r[i]) : ibuf_byteen[i];
-      assign ibuf_data_out[(8*i)+7:(8*i)] = (ibuf_merge_en & ~ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                                                        ibuf_data[(8*i)+7:(8*i)];
-   end
-
-   rvdffsc #(.WIDTH(1))              ibuf_valid_ff     (.din(1'b1),                      .dout(ibuf_valid),      .en(ibuf_wr_en), .clear(ibuf_rst), .clk(lsu_free_c2_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_tagff        (.din(ibuf_tag_in),               .dout(ibuf_tag),        .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_dualtagff    (.din(ibuf_dualtag_in),           .dout(ibuf_dualtag),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_dualff       (.din(ldst_dual_r),               .dout(ibuf_dual),       .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_samedwff     (.din(ldst_samedw_r),             .dout(ibuf_samedw),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_nomergeff    (.din(no_dword_merge_r),          .dout(ibuf_nomerge),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_sideeffectff (.din(is_sideeffects_r),          .dout(ibuf_sideeffect), .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_unsignff     (.din(lsu_pkt_r.unsign),          .dout(ibuf_unsign),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_writeff      (.din(lsu_pkt_r.store),           .dout(ibuf_write),      .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(2))              ibuf_szff         (.din(ibuf_sz_in[1:0]),           .dout(ibuf_sz),         .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_addrff       (.din(ibuf_addr_in[31:0]),        .dout(ibuf_addr),       .en(ibuf_wr_en),                                              .*);
-   rvdffs  #(.WIDTH(4))              ibuf_byteenff     (.din(ibuf_byteen_in[3:0]),       .dout(ibuf_byteen),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_dataff       (.din(ibuf_data_in[31:0]),        .dout(ibuf_data),       .en(ibuf_wr_en),                                              .*);
-   rvdff   #(.WIDTH(TIMER_LOG2))     ibuf_timerff      (.din(ibuf_timer_in),             .dout(ibuf_timer),                                         .clk(lsu_free_c2_clk),     .*);
-
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic ends here
-   //------------------------------------------------------------------------------
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign obuf_wr_wait = (buf_numvld_wrcmd_any[3:0] == 4'b1) & (buf_numvld_cmd_any[3:0] == 4'b1) & (obuf_wr_timer != TIMER_MAX) &
-                         ~bus_coalescing_disable & ~buf_nomerge[CmdPtr0] & ~buf_sideeffect[CmdPtr0] & ~obuf_force_wr_en;
-   assign obuf_wr_timer_in = obuf_wr_en ? 3'b0: (((buf_numvld_cmd_any > 4'b0) & (obuf_wr_timer < TIMER_MAX)) ? (obuf_wr_timer + 1'b1) : obuf_wr_timer);
-   assign obuf_force_wr_en = lsu_busreq_m & ~lsu_busreq_r & ~ibuf_valid & (buf_numvld_cmd_any[3:0] == 4'b1) & (lsu_addr_m[31:2] != buf_addr[CmdPtr0][31:2]);   // Entry in m can't merge with entry going to obuf and there is no entry in between
-   assign ibuf_buf_byp = ibuf_byp & (buf_numvld_pend_any[3:0] == 4'b0) & (~lsu_pkt_r.store | no_dword_merge_r);
-
-   assign obuf_wr_en = ((ibuf_buf_byp & lsu_commit_r & ~(is_sideeffects_r & bus_sideeffect_pend)) |
-                        ((buf_state[CmdPtr0] == CMD) & found_cmdptr0 & ~buf_cmd_state_bus_en[CmdPtr0] & ~(buf_sideeffect[CmdPtr0] & bus_sideeffect_pend) &
-                         (~(buf_dual[CmdPtr0] & buf_samedw[CmdPtr0] & ~buf_write[CmdPtr0]) | found_cmdptr1 | buf_nomerge[CmdPtr0] | obuf_force_wr_en))) &
-                       (bus_cmd_ready | ~obuf_valid | obuf_nosend) & ~obuf_wr_wait  & ~bus_addr_match_pending & lsu_bus_clk_en;
-
-   assign obuf_rst   = ((bus_cmd_sent | (obuf_valid & obuf_nosend)) & ~obuf_wr_en & lsu_bus_clk_en) | dec_tlu_force_halt;
-
-   assign obuf_write_in      = ibuf_buf_byp ? lsu_pkt_r.store : buf_write[CmdPtr0];
-   assign obuf_sideeffect_in = ibuf_buf_byp ? is_sideeffects_r : buf_sideeffect[CmdPtr0];
-   assign obuf_addr_in[31:0] = ibuf_buf_byp ? lsu_addr_r[31:0] : buf_addr[CmdPtr0];
-   assign obuf_sz_in[1:0]    = ibuf_buf_byp ? {lsu_pkt_r.word, lsu_pkt_r.half} : buf_sz[CmdPtr0];
-   assign obuf_merge_in      = obuf_merge_en;
-   assign obuf_tag0_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr0_r) : (pt.LSU_BUS_TAG)'(CmdPtr0);
-   assign obuf_tag1_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr1_r) : (pt.LSU_BUS_TAG)'(CmdPtr1);
-
-   assign obuf_cmd_done_in    = ~(obuf_wr_en | obuf_rst) & (obuf_cmd_done | bus_wcmd_sent);
-   assign obuf_data_done_in   = ~(obuf_wr_en | obuf_rst) & (obuf_data_done | bus_wdata_sent);
-
-   assign obuf_aligned_in    = ibuf_buf_byp ? is_aligned_r : ((obuf_sz_in[1:0] == 2'b0) |
-                                                              (obuf_sz_in[0] & ~obuf_addr_in[0]) |
-                                                              (obuf_sz_in[1] & ~(|obuf_addr_in[1:0])));
-
-   assign obuf_rdrsp_pend_in  = ((~(obuf_wr_en & ~obuf_nosend_in) & obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))) | (bus_cmd_sent & ~obuf_write)) & ~dec_tlu_force_halt;
-   assign obuf_rdrsp_pend_en  = lsu_bus_clk_en | dec_tlu_force_halt;
-   assign obuf_rdrsp_tag_in[pt.LSU_BUS_TAG-1:0] = (bus_cmd_sent & ~obuf_write) ? obuf_tag0[pt.LSU_BUS_TAG-1:0] : obuf_rdrsp_tag[pt.LSU_BUS_TAG-1:0];
-   // No ld to ld fwd for aligned
-   assign obuf_nosend_in      = (obuf_addr_in[31:3] == obuf_addr[31:3]) & obuf_aligned_in & ~obuf_sideeffect & ~obuf_write & ~obuf_write_in & ~dec_tlu_external_ldfwd_disable &
-                                ((obuf_valid & ~obuf_nosend) | (obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))));
-
-   assign obuf_byteen0_in[7:0] = ibuf_buf_byp ? (lsu_addr_r[2] ? {ldst_byteen_lo_r[3:0],4'b0} : {4'b0,ldst_byteen_lo_r[3:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_byteen[CmdPtr0],4'b0} : {4'b0,buf_byteen[CmdPtr0]});
-   assign obuf_byteen1_in[7:0] = ibuf_buf_byp ? (end_addr_r[2] ? {ldst_byteen_hi_r[3:0],4'b0} : {4'b0,ldst_byteen_hi_r[3:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_byteen[CmdPtr1],4'b0} : {4'b0,buf_byteen[CmdPtr1]});
-   assign obuf_data0_in[63:0]  = ibuf_buf_byp ? (lsu_addr_r[2] ? {store_data_lo_r[31:0],32'b0} : {32'b0,store_data_lo_r[31:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_data[CmdPtr0],32'b0} : {32'b0,buf_data[CmdPtr0]});
-   assign obuf_data1_in[63:0]  = ibuf_buf_byp ? (end_addr_r[2] ? {store_data_hi_r[31:0],32'b0} :{32'b0,store_data_hi_r[31:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_data[CmdPtr1],32'b0} : {32'b0,buf_data[CmdPtr1]});
-
-   for (genvar i=0 ;i<8; i++) begin
-      assign obuf_byteen_in[i] = obuf_byteen0_in[i] | (obuf_merge_en & obuf_byteen1_in[i]);
-      assign obuf_data_in[(8*i)+7:(8*i)] = (obuf_merge_en & obuf_byteen1_in[i]) ? obuf_data1_in[(8*i)+7:(8*i)] : obuf_data0_in[(8*i)+7:(8*i)];
-   end
-
-   // No store obuf merging for AXI since all stores are sent non-posted. Can't track the second id right now
-   assign obuf_merge_en = ((CmdPtr0 != CmdPtr1) & found_cmdptr0 & found_cmdptr1 & (buf_state[CmdPtr0] == CMD) & (buf_state[CmdPtr1] == CMD) &
-                           ~buf_cmd_state_bus_en[CmdPtr0] & ~buf_sideeffect[CmdPtr0] &
-                           (~buf_write[CmdPtr0] & buf_dual[CmdPtr0] & ~buf_dualhi[CmdPtr0] & buf_samedw[CmdPtr0])) |  // CmdPtr0/CmdPtr1 are for same load which is within a DW
-                          (ibuf_buf_byp & ldst_samedw_r & ldst_dual_r);
-
-
-   rvdff_fpga  #(.WIDTH(1))              obuf_wren_ff      (.din(obuf_wr_en),                  .dout(obuf_wr_enQ),                                        .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-   rvdffsc     #(.WIDTH(1))              obuf_valid_ff     (.din(1'b1),                        .dout(obuf_valid),      .en(obuf_wr_en), .clear(obuf_rst), .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_nosend_ff    (.din(obuf_nosend_in),              .dout(obuf_nosend),     .en(obuf_wr_en),                   .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_rdrsp_pend_ff(.din(obuf_rdrsp_pend_in),          .dout(obuf_rdrsp_pend), .en(obuf_rdrsp_pend_en),           .clk(lsu_free_c2_clk),                                                  .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_cmd_done_ff  (.din(obuf_cmd_done_in),            .dout(obuf_cmd_done),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_data_done_ff (.din(obuf_data_done_in),           .dout(obuf_data_done),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) obuf_rdrsp_tagff  (.din(obuf_rdrsp_tag_in),           .dout(obuf_rdrsp_tag),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag0ff       (.din(obuf_tag0_in),                .dout(obuf_tag0),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag1ff       (.din(obuf_tag1_in),                .dout(obuf_tag1),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_mergeff      (.din(obuf_merge_in),               .dout(obuf_merge),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_writeff      (.din(obuf_write_in),               .dout(obuf_write),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_sideeffectff (.din(obuf_sideeffect_in),          .dout(obuf_sideeffect), .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))              obuf_szff         (.din(obuf_sz_in[1:0]),             .dout(obuf_sz),         .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))              obuf_byteenff     (.din(obuf_byteen_in[7:0]),         .dout(obuf_byteen),     .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffe     #(.WIDTH(32))              obuf_addrff       (.din(obuf_addr_in[31:0]),          .dout(obuf_addr),       .en(obuf_wr_en),                                                                                           .*);
-   rvdffe     #(.WIDTH(64))              obuf_dataff       (.din(obuf_data_in[63:0]),          .dout(obuf_data),       .en(obuf_wr_en),                                                                                           .*);
-   rvdff_fpga #(.WIDTH(TIMER_LOG2))      obuf_timerff      (.din(obuf_wr_timer_in),            .dout(obuf_wr_timer),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic ends here
-   //------------------------------------------------------------------------------
-
-   // Find the entry to allocate and entry to send
-   always_comb begin
-      WrPtr0_m[DEPTH_LOG2-1:0] = '0;
-      WrPtr1_m[DEPTH_LOG2-1:0] = '0;
-      found_wrptr0  = '0;
-      found_wrptr1  = '0;
-
-      // Find first write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr0) begin
-            WrPtr0_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr0 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-
-      // Find second write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr1) begin
-            WrPtr1_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr1 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_m & (WrPtr0_m == i))                                         |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-   end
-
-   // Get the command ptr
-   for (genvar i=0; i<DEPTH; i++) begin
-      // These should be one-hot
-      assign CmdPtr0Dec[i] = ~(|buf_age[i]) & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign CmdPtr1Dec[i] = ~(|(buf_age[i] & ~CmdPtr0Dec)) & ~CmdPtr0Dec[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign RspPtrDec[i]  = ~(|buf_rsp_pickage[i]) & (buf_state[i] == DONE_WAIT);
-   end
-
-   assign found_cmdptr0 = |CmdPtr0Dec;
-   assign found_cmdptr1 = |CmdPtr1Dec;
-   assign CmdPtr0 = f_Enc8to3(8'(CmdPtr0Dec[DEPTH-1:0]));
-   assign CmdPtr1 = f_Enc8to3(8'(CmdPtr1Dec[DEPTH-1:0]));
-   assign RspPtr  = f_Enc8to3(8'(RspPtrDec[DEPTH-1:0]));
-
-   // Age vector
-   for (genvar i=0; i<DEPTH; i++) begin: GenAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_age_in[i][j] = (((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                    (((buf_state[j] == WAIT) | ((buf_state[j] == CMD) & ~buf_cmd_state_bus_en[j]))                   |       // Set age bit for older entries
-                                     (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (i == WrPtr0_r) & (j == ibuf_tag))  |       // Set case for dual lo
-                                     (ibuf_byp & lsu_busreq_r & ldst_dual_r & (i == WrPtr1_r) & (j == WrPtr0_r))))                      |     // ibuf bypass case
-                                   buf_age[i][j];
-
-
-         assign buf_age[i][j]    = buf_ageQ[i][j] & ~((buf_state[j] == CMD) & buf_cmd_state_bus_en[j]) & ~dec_tlu_force_halt;  // Reset case
-
-         assign buf_age_younger[i][j] = (i == j) ? 1'b0: (~buf_age[i][j] & (buf_state[j] != IDLE));   // Younger entries
-      end
-   end
-
-   // Age vector for responses
-   for (genvar i=0; i<DEPTH; i++) begin: GenRspAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_rspage_set[i][j] = ((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                           (~((buf_state[j] == IDLE) | (buf_state[j] == DONE))                                         |       // Set age bit for older entries
-                                            (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (DEPTH_LOG2'(i) == WrPtr0_r) & (DEPTH_LOG2'(j) == ibuf_tag))  |       // Set case for dual lo
-                                            (ibuf_byp & lsu_busreq_r & ldst_dual_r & (DEPTH_LOG2'(i) == WrPtr1_r) & (DEPTH_LOG2'(j) == WrPtr0_r)));
-         assign buf_rspage_in[i][j] = buf_rspage_set[i][j] | buf_rspage[i][j];
-         assign buf_rspage[i][j]    = buf_rspageQ[i][j] & ~((buf_state[j] == DONE) | (buf_state[j] == IDLE)) & ~dec_tlu_force_halt;  // Reset case
-         assign buf_rsp_pickage[i][j] = buf_rspageQ[i][j] & (buf_state[j] == DONE_WAIT);
-     end
-   end
-
-   //------------------------------------------------------------------------------
-   // Buffer logic
-   //------------------------------------------------------------------------------
-   for (genvar i=0; i<DEPTH; i++) begin
-
-      assign ibuf_drainvec_vld[i] = (ibuf_drain_vld & (i == ibuf_tag));
-      assign buf_byteen_in[i]     = ibuf_drainvec_vld[i] ? ibuf_byteen_out[3:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-      assign buf_addr_in[i]       = ibuf_drainvec_vld[i] ? ibuf_addr[31:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? end_addr_r[31:0] : lsu_addr_r[31:0]);
-      assign buf_dual_in[i]       = ibuf_drainvec_vld[i] ? ibuf_dual : ldst_dual_r;
-      assign buf_samedw_in[i]     = ibuf_drainvec_vld[i] ? ibuf_samedw : ldst_samedw_r;
-      assign buf_nomerge_in[i]    = ibuf_drainvec_vld[i] ? (ibuf_nomerge | ibuf_force_drain) : no_dword_merge_r;
-      assign buf_dualhi_in[i]     = ibuf_drainvec_vld[i] ? ibuf_dual : (ibuf_byp & ldst_dual_r & (i == WrPtr1_r));   // If it's dual, ibuf will always have the high
-      assign buf_dualtag_in[i]    = ibuf_drainvec_vld[i] ? ibuf_dualtag : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? WrPtr0_r : WrPtr1_r);
-      assign buf_sideeffect_in[i] = ibuf_drainvec_vld[i] ? ibuf_sideeffect : is_sideeffects_r;
-      assign buf_unsign_in[i]     = ibuf_drainvec_vld[i] ? ibuf_unsign : lsu_pkt_r.unsign;
-      assign buf_sz_in[i]         = ibuf_drainvec_vld[i] ? ibuf_sz : {lsu_pkt_r.word, lsu_pkt_r.half};
-      assign buf_write_in[i]      = ibuf_drainvec_vld[i] ? ibuf_write : lsu_pkt_r.store;
-
-      // Buffer entry state machine
-      always_comb begin
-         buf_nxtstate[i]          = IDLE;
-         buf_state_en[i]          = '0;
-         buf_resp_state_bus_en[i] = '0;
-         buf_state_bus_en[i]      = '0;
-         buf_wr_en[i]             = '0;
-         buf_data_in[i]           = '0;
-         buf_data_en[i]           = '0;
-         buf_error_en[i]          = '0;
-         buf_rst[i]               = dec_tlu_force_halt;
-         buf_ldfwd_en[i]          = dec_tlu_force_halt;
-         buf_ldfwd_in[i]          = '0;
-         buf_ldfwdtag_in[i]       = '0;
-
-         case (buf_state[i])
-            IDLE: begin
-                     buf_nxtstate[i] = lsu_bus_clk_en ? CMD : WAIT;
-                     buf_state_en[i] = (lsu_busreq_r & lsu_commit_r & (((ibuf_byp | ldst_dual_r) & ~ibuf_merge_en & (i == WrPtr0_r)) | (ibuf_byp & ldst_dual_r & (i == WrPtr1_r)))) |
-                                       (ibuf_drain_vld & (i == ibuf_tag));
-                     buf_wr_en[i]    = buf_state_en[i];
-                     buf_data_en[i]  = buf_state_en[i];
-                     buf_data_in[i]   = (ibuf_drain_vld & (i == ibuf_tag)) ? ibuf_data_out[31:0] : store_data_lo_r[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            WAIT: begin
-                     buf_nxtstate[i] = dec_tlu_force_halt ? IDLE : CMD;
-                     buf_state_en[i] = lsu_bus_clk_en | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            CMD: begin
-                     buf_nxtstate[i]          = dec_tlu_force_halt ? IDLE : (obuf_nosend & bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag)) ? DONE_WAIT : RESP;
-                     buf_cmd_state_bus_en[i]  = ((obuf_tag0 == i) | (obuf_merge & (obuf_tag1 == i))) & obuf_valid & obuf_wr_enQ;  // Just use the recently written obuf_valid
-                     buf_state_bus_en[i]      = buf_cmd_state_bus_en[i];
-                     buf_state_en[i]          = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_ldfwd_in[i]          = 1'b1;
-                     buf_ldfwd_en[i]          = buf_state_en[i] & ~buf_write[i] & obuf_nosend & ~dec_tlu_force_halt;
-                     buf_ldfwdtag_in[i]       = DEPTH_LOG2'(obuf_rdrsp_tag[pt.LSU_BUS_TAG-2:0]);
-                     buf_data_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read;
-                     buf_error_en[i]          = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read_error;
-                     buf_data_in[i]           = buf_error_en[i] ? bus_rsp_rdata[31:0] : (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]);
-            end
-            RESP: begin
-                     buf_nxtstate[i]           = (dec_tlu_force_halt | (buf_write[i] & ~bus_rsp_write_error)) ? IDLE :    // Side-effect writes will be non-posted
-                                                      (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & (buf_state[buf_dualtag[i]] != DONE_PARTIAL)) ? DONE_PARTIAL : // Goto DONE_PARTIAL if this is the first return of dual
-                                                           (buf_ldfwd[i] | any_done_wait_state |
-                                                            (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & buf_ldfwd[buf_dualtag[i]] &
-                                                             (buf_state[buf_dualtag[i]] == DONE_PARTIAL) & any_done_wait_state)) ? DONE_WAIT : DONE;
-                     buf_resp_state_bus_en[i]  = (bus_rsp_write & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))) |
-                                                 (bus_rsp_read  & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(i)) |
-                                                                   (buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                   (buf_dual[i] & buf_dualhi[i] & ~buf_write[i] & buf_samedw[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])))));
-                     buf_state_bus_en[i]       = buf_resp_state_bus_en[i];
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_data_en[i]            = buf_state_bus_en[i] & bus_rsp_read & lsu_bus_clk_en;
-                      // Need to capture the error for stores as well for AXI
-                     buf_error_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & ((bus_rsp_read_error  & (bus_rsp_read_tag  == (pt.LSU_BUS_TAG)'(i))) |
-                                                                                         (bus_rsp_read_error  & buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                                         (bus_rsp_write_error & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))));
-                     buf_data_in[i][31:0]      = (buf_state_en[i] & ~buf_error_en[i]) ? (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]) : bus_rsp_rdata[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_PARTIAL: begin   // Other part of dual load hasn't returned
-                     buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : (buf_ldfwd[i] | buf_ldfwd[buf_dualtag[i]] | any_done_wait_state) ? DONE_WAIT : DONE;
-                     buf_state_bus_en[i]       = bus_rsp_read & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])) |
-                                                                 (buf_ldfwd[buf_dualtag[i]] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[buf_dualtag[i]]))));
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_WAIT: begin  // WAIT state if there are multiple outstanding nb returns
-                      buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : DONE;
-                      buf_state_en[i]           = ((RspPtr == DEPTH_LOG2'(i)) | (buf_dual[i] & (buf_dualtag[i] == RspPtr))) | dec_tlu_force_halt;
-                      buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE: begin
-                     buf_nxtstate[i]           = IDLE;
-                     buf_rst[i]                = 1'b1;
-                     buf_state_en[i]           = 1'b1;
-                     buf_ldfwd_in[i]           = 1'b0;
-                     buf_ldfwd_en[i]           = buf_state_en[i];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            default : begin
-                     buf_nxtstate[i]          = IDLE;
-                     buf_state_en[i]          = '0;
-                     buf_resp_state_bus_en[i] = '0;
-                     buf_state_bus_en[i]      = '0;
-                     buf_wr_en[i]             = '0;
-                     buf_data_in[i]           = '0;
-                     buf_data_en[i]           = '0;
-                     buf_error_en[i]          = '0;
-                     buf_rst[i]               = '0;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-         endcase
-      end
-
-      rvdffs  #(.WIDTH($bits(state_t))) buf_state_ff     (.din(buf_nxtstate[i]),             .dout({buf_state[i]}),    .en(buf_state_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_ageff        (.din(buf_age_in[i]),               .dout(buf_ageQ[i]),                                                                    .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_rspageff     (.din(buf_rspage_in[i]),            .dout(buf_rspageQ[i]),                                                                 .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_dualtagff    (.din(buf_dualtag_in[i]),           .dout(buf_dualtag[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualff       (.din(buf_dual_in[i]),              .dout(buf_dual[i]),       .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_samedwff     (.din(buf_samedw_in[i]),            .dout(buf_samedw[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_nomergeff    (.din(buf_nomerge_in[i]),           .dout(buf_nomerge[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualhiff     (.din(buf_dualhi_in[i]),            .dout(buf_dualhi[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_ldfwdff      (.din(buf_ldfwd_in[i]),             .dout(buf_ldfwd[i]),      .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_ldfwdtagff   (.din(buf_ldfwdtag_in[i]),          .dout(buf_ldfwdtag[i]),   .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_sideeffectff (.din(buf_sideeffect_in[i]),        .dout(buf_sideeffect[i]), .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_unsignff     (.din(buf_unsign_in[i]),            .dout(buf_unsign[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_writeff      (.din(buf_write_in[i]),             .dout(buf_write[i]),      .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(2))              buf_szff         (.din(buf_sz_in[i]),                .dout(buf_sz[i]),         .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_addrff       (.din(buf_addr_in[i][31:0]),        .dout(buf_addr[i]),       .en(buf_wr_en[i]),                                                                     .*);
-      rvdffs  #(.WIDTH(4))              buf_byteenff     (.din(buf_byteen_in[i][3:0]),       .dout(buf_byteen[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_dataff       (.din(buf_data_in[i][31:0]),        .dout(buf_data[i]),       .en(buf_data_en[i]),                                                                   .*);
-      rvdffsc #(.WIDTH(1))              buf_errorff      (.din(1'b1),                        .dout(buf_error[i]),      .en(buf_error_en[i]),                    .clear(buf_rst[i]), .clk(lsu_bus_buf_c1_clk), .*);
-
-   end
-
-   // buffer full logic
-   always_comb begin
-      buf_numvld_any[3:0] =  ({1'b0,lsu_busreq_m} << ldst_dual_m) +
-                             ({1'b0,lsu_busreq_r} << ldst_dual_r) +
-                             ibuf_valid;
-      buf_numvld_wrcmd_any[3:0] = 4'b0;
-      buf_numvld_cmd_any[3:0] = 4'b0;
-      buf_numvld_pend_any[3:0] = 4'b0;
-      any_done_wait_state = 1'b0;
-      for (int i=0; i<DEPTH; i++) begin
-         buf_numvld_any[3:0] += {3'b0, (buf_state[i] != IDLE)};
-         buf_numvld_wrcmd_any[3:0] += {3'b0, (buf_write[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_cmd_any[3:0]   += {3'b0, ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_pend_any[3:0]   += {3'b0, ((buf_state[i] == WAIT) | ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i]))};
-         any_done_wait_state |= (buf_state[i] == DONE_WAIT);
-      end
-   end
-
-   assign lsu_bus_buffer_pend_any = (buf_numvld_pend_any != 0);
-   assign lsu_bus_buffer_full_any = (ldst_dual_d & dec_lsu_valid_raw_d) ? (buf_numvld_any[3:0] >= (DEPTH-1)) : (buf_numvld_any[3:0] == DEPTH);
-   assign lsu_bus_buffer_empty_any = ~(|buf_state[DEPTH-1:0]) & ~ibuf_valid & ~obuf_valid;
-
-
-   // Non blocking ports
-   assign lsu_nonblock_load_valid_m = lsu_busreq_m & lsu_pkt_m.valid & lsu_pkt_m.load & ~flush_m_up & ~ld_full_hit_m;
-   assign lsu_nonblock_load_tag_m[DEPTH_LOG2-1:0] = WrPtr0_m[DEPTH_LOG2-1:0];
-   assign lsu_nonblock_load_inv_r = lsu_nonblock_load_valid_r & ~lsu_commit_r;
-   assign lsu_nonblock_load_inv_tag_r[DEPTH_LOG2-1:0] = WrPtr0_r[DEPTH_LOG2-1:0];      // r tag needs to be accurate even if there is no invalidate
-
-   always_comb begin
-      lsu_nonblock_load_data_ready = '0;
-      lsu_nonblock_load_data_error = '0;
-      lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0] = '0;
-      lsu_nonblock_load_data_lo[31:0] = '0;
-      lsu_nonblock_load_data_hi[31:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-          // Use buf_rst[i] instead of buf_state_en[i] for timing
-          lsu_nonblock_load_data_ready      |= (buf_state[i] == DONE) & ~buf_write[i];
-          lsu_nonblock_load_data_error      |= (buf_state[i] == DONE) & buf_error[i] & ~buf_write[i];
-          lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0]   |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_lo[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_hi[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (buf_dual[i] & buf_dualhi[i]))}};
-      end
-   end
-
-   assign lsu_nonblock_addr_offset[1:0] = buf_addr[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_sz[1:0]          = buf_sz[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_unsign           = buf_unsign[lsu_nonblock_load_data_tag];
-   assign lsu_nonblock_data_unalgn[31:0] = 32'({lsu_nonblock_load_data_hi[31:0], lsu_nonblock_load_data_lo[31:0]} >> 8*lsu_nonblock_addr_offset[1:0]);
-
-   assign lsu_nonblock_load_data_valid = lsu_nonblock_load_data_ready & ~lsu_nonblock_load_data_error;
-   assign lsu_nonblock_load_data[31:0] = ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {24'b0,lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {16'b0,lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {{24{lsu_nonblock_data_unalgn[7]}}, lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {{16{lsu_nonblock_data_unalgn[15]}},lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{(lsu_nonblock_sz[1:0] == 2'b10)}} & lsu_nonblock_data_unalgn[31:0]);
-
-   // Determine if there is a pending return to sideeffect load/store
-   always_comb begin
-      bus_sideeffect_pend = obuf_valid & obuf_sideeffect & dec_tlu_sideeffect_posted_disable;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_sideeffect_pend |= ((buf_state[i] == RESP) & buf_sideeffect[i] & dec_tlu_sideeffect_posted_disable);
-      end
-   end
-
-   // We have no ordering rules for AXI. Need to check outstanding trxns to same address for AXI
-   always_comb begin
-      bus_addr_match_pending = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_addr_match_pending |= (obuf_valid & (obuf_addr[31:3] == buf_addr[i][31:3]) & (buf_state[i] == RESP) & ~((obuf_tag0 == (pt.LSU_BUS_TAG)'(i)) | (obuf_merge & (obuf_tag1 == (pt.LSU_BUS_TAG)'(i)))));
-      end
-   end
-
-   // Generic bus signals
-   assign bus_cmd_ready                      = obuf_write ? ((obuf_cmd_done | obuf_data_done) ? (obuf_cmd_done ? lsu_axi_wready : lsu_axi_awready) : (lsu_axi_awready & lsu_axi_wready)) : lsu_axi_arready;
-   assign bus_wcmd_sent                      = lsu_axi_awvalid & lsu_axi_awready;
-   assign bus_wdata_sent                     = lsu_axi_wvalid & lsu_axi_wready;
-   assign bus_cmd_sent                       = ((obuf_cmd_done | bus_wcmd_sent) & (obuf_data_done | bus_wdata_sent)) | (lsu_axi_arvalid & lsu_axi_arready);
-
-   assign bus_rsp_read                       = lsu_axi_rvalid & lsu_axi_rready;
-   assign bus_rsp_write                      = lsu_axi_bvalid & lsu_axi_bready;
-   assign bus_rsp_read_tag[pt.LSU_BUS_TAG-1:0]  = lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_tag[pt.LSU_BUS_TAG-1:0] = lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_error                = bus_rsp_write & (lsu_axi_bresp[1:0] != 2'b0);
-   assign bus_rsp_read_error                 = bus_rsp_read  & (lsu_axi_rresp[1:0] != 2'b0);
-   assign bus_rsp_rdata[63:0]                = lsu_axi_rdata[63:0];
-
-   // AXI command signals
-   assign lsu_axi_awvalid               = obuf_valid & obuf_write & ~obuf_cmd_done & ~bus_addr_match_pending;
-   assign lsu_axi_awid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_awaddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_awsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_awprot[2:0]           = 3'b001;
-   assign lsu_axi_awcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_awregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_awlen[7:0]            = '0;
-   assign lsu_axi_awburst[1:0]          = 2'b01;
-   assign lsu_axi_awqos[3:0]            = '0;
-   assign lsu_axi_awlock                = '0;
-
-   assign lsu_axi_wvalid                = obuf_valid & obuf_write & ~obuf_data_done & ~bus_addr_match_pending;
-   assign lsu_axi_wstrb[7:0]            = obuf_byteen[7:0] & {8{obuf_write}};
-   assign lsu_axi_wdata[63:0]           = obuf_data[63:0];
-   assign lsu_axi_wlast                 = '1;
-
-   assign lsu_axi_arvalid               = obuf_valid & ~obuf_write & ~obuf_nosend & ~bus_addr_match_pending;
-   assign lsu_axi_arid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_araddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_arsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_arprot[2:0]           = 3'b001;
-   assign lsu_axi_arcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_arregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_arlen[7:0]            = '0;
-   assign lsu_axi_arburst[1:0]          = 2'b01;
-   assign lsu_axi_arqos[3:0]            = '0;
-   assign lsu_axi_arlock                = '0;
-
-   assign lsu_axi_bready = 1;
-   assign lsu_axi_rready = 1;
-
-   always_comb begin
-      lsu_imprecise_error_store_any = '0;
-      lsu_imprecise_error_store_tag = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         lsu_imprecise_error_store_any |= lsu_bus_clk_en_q & (buf_state[i] == DONE) & buf_error[i] & buf_write[i];
-         lsu_imprecise_error_store_tag |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & buf_error[i] & buf_write[i])}};
-      end
-   end
-   assign lsu_imprecise_error_load_any       = lsu_nonblock_load_data_error & ~lsu_imprecise_error_store_any;   // This is to make sure we send only one imprecise error for load/store
-   assign lsu_imprecise_error_addr_any[31:0] = lsu_imprecise_error_store_any ? buf_addr[lsu_imprecise_error_store_tag] : buf_addr[lsu_nonblock_load_data_tag];
-
-   // PMU signals
-   assign lsu_pmu_bus_trxn  = (lsu_axi_awvalid & lsu_axi_awready) | (lsu_axi_wvalid & lsu_axi_wready) | (lsu_axi_arvalid & lsu_axi_arready);
-   assign lsu_pmu_bus_misaligned = lsu_busreq_r & ldst_dual_r & lsu_commit_r;
-   assign lsu_pmu_bus_error = lsu_imprecise_error_load_any | lsu_imprecise_error_store_any;
-   assign lsu_pmu_bus_busy  = (lsu_axi_awvalid & ~lsu_axi_awready) | (lsu_axi_wvalid & ~lsu_axi_wready) | (lsu_axi_arvalid & ~lsu_axi_arready);
-
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awvalid_ff (.din(lsu_axi_awvalid),                .dout(lsu_axi_awvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awready_ff (.din(lsu_axi_awready),                .dout(lsu_axi_awready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wvalid_ff  (.din(lsu_axi_wvalid),                 .dout(lsu_axi_wvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wready_ff  (.din(lsu_axi_wready),                 .dout(lsu_axi_wready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arvalid_ff (.din(lsu_axi_arvalid),                .dout(lsu_axi_arvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arready_ff (.din(lsu_axi_arready),                .dout(lsu_axi_arready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bvalid_ff  (.din(lsu_axi_bvalid),                 .dout(lsu_axi_bvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bready_ff  (.din(lsu_axi_bready),                 .dout(lsu_axi_bready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_bresp_ff   (.din(lsu_axi_bresp[1:0]),             .dout(lsu_axi_bresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_bid_ff     (.din(lsu_axi_bid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_bid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))             lsu_axi_rdata_ff   (.din(lsu_axi_rdata[63:0]),            .dout(lsu_axi_rdata_q[63:0]),            .en((lsu_axi_rvalid | clk_override) & lsu_bus_clk_en), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rvalid_ff  (.din(lsu_axi_rvalid),                 .dout(lsu_axi_rvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rready_ff  (.din(lsu_axi_rready),                 .dout(lsu_axi_rready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_rresp_ff   (.din(lsu_axi_rresp[1:0]),             .dout(lsu_axi_rresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_rid_ff     (.din(lsu_axi_rid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_rid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr0_rff (.din(WrPtr0_m), .dout(WrPtr0_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr1_rff (.din(WrPtr1_m), .dout(WrPtr1_r), .clk(lsu_c2_r_clk), .*);
-
-   rvdff #(.WIDTH(1)) lsu_busreq_rff (.din(lsu_busreq_m & ~flush_r & ~ld_full_hit_m),      .dout(lsu_busreq_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(1)) lsu_nonblock_load_valid_rff  (.din(lsu_nonblock_load_valid_m),  .dout(lsu_nonblock_load_valid_r), .clk(lsu_c2_r_clk), .*);
-
-
-endmodule // eb1_lsu_bus_buffer
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_bus_intf
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // disable the posted sideeffect load store to the bus
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,              // obuf clock enable
-   input logic                          lsu_busm_clken,                     // bus clock enable
-
-   input logic                          lsu_c1_r_clk,                       // r pipe single pulse clock
-   input logic                          lsu_c2_r_clk,                       // r pipe double pulse clock
-   input logic                          lsu_bus_ibuf_c1_clk,                // ibuf single pulse clock
-   input logic                          lsu_bus_obuf_c1_clk,                // obuf single pulse clock
-   input logic                          lsu_bus_buf_c1_clk,                 // buf  single pulse clock
-   input logic                          lsu_free_c2_clk,                    // free clock double pulse clock
-   input logic                          active_clk,                         // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                          lsu_busm_clk,                       // bus clock
-
-   input logic                          dec_lsu_valid_raw_d,               // Raw valid for address computation
-   input logic                          lsu_busreq_m,                      // bus request is in m
-
-   input                                eb1_lsu_pkt_t lsu_pkt_m,          // lsu packet flowing down the pipe
-   input                                eb1_lsu_pkt_t lsu_pkt_r,          // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   end_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   store_data_r,                      // store data flowing down the pipe
-   input logic                          dec_tlu_force_halt,
-
-   input logic                          lsu_commit_r,                      // lsu instruction in r commits
-   input logic                          is_sideeffects_m,                  // lsu attribute is side_effects
-   input logic                          flush_m_up,                        // flush
-   input logic                          flush_r,                           // flush
-   input logic                          ldst_dual_d, ldst_dual_m, ldst_dual_r,
-
-   output logic                         lsu_busreq_r,                      // bus request is in r
-   output logic                         lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,           // write buffer is full
-   output logic                         lsu_bus_buffer_empty_any,          // write buffer is empty
-   output logic [31:0]                  bus_read_data_m,                   // the bus return data
-
-
-   output logic                         lsu_imprecise_error_load_any,      // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,     // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,      // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,   // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,     // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,     // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r, // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,// the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,// non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,  // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,      // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                        lsu_axi_awvalid,
-   input  logic                        lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_awid,
-   output logic [31:0]                 lsu_axi_awaddr,
-   output logic [3:0]                  lsu_axi_awregion,
-   output logic [7:0]                  lsu_axi_awlen,
-   output logic [2:0]                  lsu_axi_awsize,
-   output logic [1:0]                  lsu_axi_awburst,
-   output logic                        lsu_axi_awlock,
-   output logic [3:0]                  lsu_axi_awcache,
-   output logic [2:0]                  lsu_axi_awprot,
-   output logic [3:0]                  lsu_axi_awqos,
-
-   output logic                        lsu_axi_wvalid,
-   input  logic                        lsu_axi_wready,
-   output logic [63:0]                 lsu_axi_wdata,
-   output logic [7:0]                  lsu_axi_wstrb,
-   output logic                        lsu_axi_wlast,
-
-   input  logic                        lsu_axi_bvalid,
-   output logic                        lsu_axi_bready,
-   input  logic [1:0]                  lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                        lsu_axi_arvalid,
-   input  logic                        lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_arid,
-   output logic [31:0]                 lsu_axi_araddr,
-   output logic [3:0]                  lsu_axi_arregion,
-   output logic [7:0]                  lsu_axi_arlen,
-   output logic [2:0]                  lsu_axi_arsize,
-   output logic [1:0]                  lsu_axi_arburst,
-   output logic                        lsu_axi_arlock,
-   output logic [3:0]                  lsu_axi_arcache,
-   output logic [2:0]                  lsu_axi_arprot,
-   output logic [3:0]                  lsu_axi_arqos,
-
-   input  logic                        lsu_axi_rvalid,
-   output logic                        lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_rid,
-   input  logic [63:0]                 lsu_axi_rdata,
-   input  logic [1:0]                  lsu_axi_rresp,
-
-   input logic                         lsu_bus_clk_en
-
-);
-
-
-
-   logic              lsu_bus_clk_en_q;
-
-   logic [3:0]        ldst_byteen_m, ldst_byteen_r;
-   logic [7:0]        ldst_byteen_ext_m, ldst_byteen_ext_r;
-   logic [3:0]        ldst_byteen_hi_m, ldst_byteen_hi_r;
-   logic [3:0]        ldst_byteen_lo_m, ldst_byteen_lo_r;
-   logic              is_sideeffects_r;
-
-   logic [63:0]       store_data_ext_r;
-   logic [31:0]       store_data_hi_r;
-   logic [31:0]       store_data_lo_r;
-
-   logic              addr_match_dw_lo_r_m;
-   logic              addr_match_word_lo_r_m;
-   logic              no_word_merge_r, no_dword_merge_r;
-
-   logic              ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-   logic [3:0]        ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-
-   logic [3:0]        ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [3:0]        ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   logic [3:0]        ld_byte_hit_buf_lo, ld_byte_hit_buf_hi;
-   logic [31:0]       ld_fwddata_buf_lo, ld_fwddata_buf_hi;
-
-   logic [63:0]       ld_fwddata_lo, ld_fwddata_hi;
-   logic [63:0]       ld_fwddata_m;
-
-   logic              ld_full_hit_hi_m, ld_full_hit_lo_m;
-   logic              ld_full_hit_m;
-
-   assign ldst_byteen_m[3:0] = ({4{lsu_pkt_m.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}} & 4'b1111);
-
-   // Read/Write Buffer
-   eb1_lsu_bus_buffer #(.pt(pt)) bus_buffer (
-      .*
-   );
-
-   // Logic to determine if dc5 store can be coalesced or not with younger stores. Bypass ibuf if cannot colaesced
-   assign addr_match_dw_lo_r_m = (lsu_addr_r[31:3] == lsu_addr_m[31:3]);
-   assign addr_match_word_lo_r_m = addr_match_dw_lo_r_m & ~(lsu_addr_r[2]^lsu_addr_m[2]);
-
-   assign no_word_merge_r  = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_word_lo_r_m);
-   assign no_dword_merge_r = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_dw_lo_r_m);
-
-   // Create Hi/Lo signals
-   assign ldst_byteen_ext_m[7:0] = {4'b0,ldst_byteen_m[3:0]} << lsu_addr_m[1:0];
-   assign ldst_byteen_ext_r[7:0] = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-   assign store_data_ext_r[63:0] = {32'b0,store_data_r[31:0]} << {lsu_addr_r[1:0],3'b0};
-
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign store_data_hi_r[31:0]   = store_data_ext_r[63:32];
-   assign store_data_lo_r[31:0]   = store_data_ext_r[31:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin: GenBusBufFwd
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i] & ldst_byteen_hi_m[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i] & ldst_byteen_hi_m[i];
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i] |
-                                 ld_byte_hit_buf_lo[i];
-
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i] |
-                                 ld_byte_hit_buf_hi[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      // Final muxing between m/r
-      assign ld_fwddata_lo[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : ld_fwddata_buf_lo[(8*i)+7:(8*i)];
-
-      assign ld_fwddata_hi[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : ld_fwddata_buf_hi[(8*i)+7:(8*i)];
-
-   end
-
-   always_comb begin
-      ld_full_hit_lo_m = 1'b1;
-      ld_full_hit_hi_m = 1'b1;
-      for (int i=0; i<4; i++) begin
-         ld_full_hit_lo_m &= (ld_byte_hit_lo[i] | ~ldst_byteen_lo_m[i]);
-         ld_full_hit_hi_m &= (ld_byte_hit_hi[i] | ~ldst_byteen_hi_m[i]);
-      end
-   end
-
-   // This will be high if all the bytes of load hit the stores in pipe/write buffer (m/r/wrbuf)
-   assign ld_full_hit_m = ld_full_hit_lo_m & ld_full_hit_hi_m & lsu_busreq_m & lsu_pkt_m.load & ~is_sideeffects_m;
-
-   assign ld_fwddata_m[63:0] = {ld_fwddata_hi[31:0], ld_fwddata_lo[31:0]} >> (8*lsu_addr_m[1:0]);
-   assign bus_read_data_m[31:0]                        = ld_fwddata_m[31:0];
-
-   // Fifo flops
-
-   rvdff #(.WIDTH(1)) clken_ff (.din(lsu_bus_clk_en), .dout(lsu_bus_clk_en_q), .clk(active_clk), .*);
-
-   rvdff #(.WIDTH(1)) is_sideeffects_rff (.din(is_sideeffects_m), .dout(is_sideeffects_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(4) lsu_byten_rff (.*, .din(ldst_byteen_m[3:0]), .dout(ldst_byteen_r[3:0]), .clk(lsu_c1_r_clk));
-
-endmodule // eb1_lsu_bus_intf
-
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Clock Generation Block
-// Comments: All the clocks are generate here
-//
-// //********************************************************************************
-
-
-module eb1_lsu_clkdomain
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic      clk,                               // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic      active_clk,                        // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic      rst_l,                             // reset, active low
-   input logic      dec_tlu_force_halt,                // This will be high till TLU goes to debug halt
-
-   // Inputs
-   input logic      clk_override,                      // chciken bit to turn off clock gating
-   input logic      dma_dccm_req,                      // dma is active
-   input logic      ldst_stbuf_reqvld_r,               // allocating in to the store queue
-
-   input logic      stbuf_reqvld_any,                  // stbuf is draining
-   input logic      stbuf_reqvld_flushed_any,          // instruction going to stbuf is flushed
-   input logic      lsu_busreq_r,                      // busreq in r
-   input logic      lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   input logic      lsu_bus_buffer_empty_any,          // external bus buffer is empty
-   input logic      lsu_stbuf_empty_any,               // stbuf is empty
-
-   input logic      lsu_bus_clk_en,                    // bus clock enable
-
-   input eb1_lsu_pkt_t  lsu_p,                        // lsu packet in decode
-   input eb1_lsu_pkt_t  lsu_pkt_d,                    // lsu packet in d
-   input eb1_lsu_pkt_t  lsu_pkt_m,                    // lsu packet in m
-   input eb1_lsu_pkt_t  lsu_pkt_r,                    // lsu packet in r
-
-   // Outputs
-   output logic     lsu_bus_obuf_c1_clken,             // obuf clock enable
-   output logic     lsu_busm_clken,                    // bus clock enable
-
-   output logic     lsu_c1_m_clk,                      // m pipe single pulse clock
-   output logic     lsu_c1_r_clk,                      // r pipe single pulse clock
-
-   output logic     lsu_c2_m_clk,                      // m pipe double pulse clock
-   output logic     lsu_c2_r_clk,                      // r pipe double pulse clock
-
-   output logic     lsu_store_c1_m_clk,                // store in m
-   output logic     lsu_store_c1_r_clk,                // store in r
-
-   output logic     lsu_stbuf_c1_clk,
-   output logic     lsu_bus_obuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_ibuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_buf_c1_clk,                // ibuf clock
-   output logic     lsu_busm_clk,                      // bus clock
-
-   output logic     lsu_free_c2_clk,                   // free double pulse clock
-
-   input  logic     scan_mode                          // Scan mode
-);
-
-   logic lsu_c1_m_clken, lsu_c1_r_clken;
-   logic lsu_c2_m_clken, lsu_c2_r_clken;
-   logic lsu_c1_m_clken_q, lsu_c1_r_clken_q;
-   logic lsu_store_c1_m_clken, lsu_store_c1_r_clken;
-
-
-   logic lsu_stbuf_c1_clken;
-   logic lsu_bus_ibuf_c1_clken, lsu_bus_buf_c1_clken;
-
-   logic lsu_free_c1_clken, lsu_free_c1_clken_q, lsu_free_c2_clken;
-
-   //-------------------------------------------------------------------------------------------
-   // Clock Enable logic
-   //-------------------------------------------------------------------------------------------
-
-   assign lsu_c1_m_clken = lsu_p.valid | dma_dccm_req | clk_override;
-   assign lsu_c1_r_clken = lsu_pkt_m.valid | lsu_c1_m_clken_q | clk_override;
-
-   assign lsu_c2_m_clken = lsu_c1_m_clken | lsu_c1_m_clken_q | clk_override;
-   assign lsu_c2_r_clken = lsu_c1_r_clken | lsu_c1_r_clken_q | clk_override;
-
-   assign lsu_store_c1_m_clken = ((lsu_c1_m_clken & lsu_pkt_d.store) | clk_override) ;
-   assign lsu_store_c1_r_clken = ((lsu_c1_r_clken & lsu_pkt_m.store) | clk_override) ;
-
-   assign lsu_stbuf_c1_clken = ldst_stbuf_reqvld_r | stbuf_reqvld_any | stbuf_reqvld_flushed_any | clk_override;
-   assign lsu_bus_ibuf_c1_clken = lsu_busreq_r | clk_override;
-   assign lsu_bus_obuf_c1_clken = (lsu_bus_buffer_pend_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-   assign lsu_bus_buf_c1_clken  = ~lsu_bus_buffer_empty_any | lsu_busreq_r | dec_tlu_force_halt | clk_override;
-
-   assign lsu_free_c1_clken = (lsu_p.valid | lsu_pkt_d.valid | lsu_pkt_m.valid | lsu_pkt_r.valid) |
-                              ~lsu_bus_buffer_empty_any | ~lsu_stbuf_empty_any | clk_override;
-   assign lsu_free_c2_clken = lsu_free_c1_clken | lsu_free_c1_clken_q | clk_override;
-
-    // Flops
-   rvdff #(1) lsu_free_c1_clkenff (.din(lsu_free_c1_clken), .dout(lsu_free_c1_clken_q), .clk(active_clk), .*);
-
-   rvdff #(1) lsu_c1_m_clkenff (.din(lsu_c1_m_clken), .dout(lsu_c1_m_clken_q), .clk(lsu_free_c2_clk), .*);
-   rvdff #(1) lsu_c1_r_clkenff (.din(lsu_c1_r_clken), .dout(lsu_c1_r_clken_q), .clk(lsu_free_c2_clk), .*);
-
-   // Clock Headers
-   rvoclkhdr lsu_c1m_cgc ( .en(lsu_c1_m_clken), .l1clk(lsu_c1_m_clk), .* );
-   rvoclkhdr lsu_c1r_cgc ( .en(lsu_c1_r_clken), .l1clk(lsu_c1_r_clk), .* );
-
-   rvoclkhdr lsu_c2m_cgc ( .en(lsu_c2_m_clken), .l1clk(lsu_c2_m_clk), .* );
-   rvoclkhdr lsu_c2r_cgc ( .en(lsu_c2_r_clken), .l1clk(lsu_c2_r_clk), .* );
-
-   rvoclkhdr lsu_store_c1m_cgc (.en(lsu_store_c1_m_clken), .l1clk(lsu_store_c1_m_clk), .*);
-   rvoclkhdr lsu_store_c1r_cgc (.en(lsu_store_c1_r_clken), .l1clk(lsu_store_c1_r_clk), .*);
-
-   rvoclkhdr lsu_stbuf_c1_cgc ( .en(lsu_stbuf_c1_clken), .l1clk(lsu_stbuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_ibuf_c1_cgc ( .en(lsu_bus_ibuf_c1_clken), .l1clk(lsu_bus_ibuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_buf_c1_cgc  ( .en(lsu_bus_buf_c1_clken),  .l1clk(lsu_bus_buf_c1_clk), .* );
-
-   assign lsu_busm_clken = (~lsu_bus_buffer_empty_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-
-   rvclkhdr  lsu_bus_obuf_c1_cgc ( .en(lsu_bus_obuf_c1_clken), .l1clk(lsu_bus_obuf_c1_clk), .* );
-   rvclkhdr  lsu_busm_cgc (.en(lsu_busm_clken), .l1clk(lsu_busm_clk), .*);
-
-
-   rvoclkhdr lsu_free_cgc (.en(lsu_free_c2_clken), .l1clk(lsu_free_c2_clk), .*);
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-module eb1_lsu_dccm_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic                             lsu_c2_m_clk,            // clocks
-   input logic                             lsu_c2_r_clk,            // clocks
-   input logic                             lsu_c1_r_clk,            // clocks
-   input logic                             lsu_store_c1_r_clk,      // clocks
-   input logic                             lsu_free_c2_clk,         // clocks
-   input logic                             clk_override,            // Override non-functional clock gating
-   input logic                             clk,                     // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   input logic                             rst_l,                   // reset, active low
-
-   input                                   eb1_lsu_pkt_t lsu_pkt_r,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_m,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_d,// lsu packets
-   input logic                             addr_in_dccm_d,          // address maps to dccm
-   input logic                             addr_in_pic_d,           // address maps to pic
-   input logic                             addr_in_pic_m,           // address maps to pic
-   input logic                             addr_in_dccm_m, addr_in_dccm_r,   // address in dccm per pipe stage
-   input logic                             addr_in_pic_r,                    // address in pic  per pipe stage
-   input logic                             lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r,
-   input logic                             lsu_commit_r,            // lsu instruction in r commits
-   input logic                             ldst_dual_m, ldst_dual_r,// load/store is unaligned at 32 bit boundary per pipe stage
-
-   // lsu address down the pipe
-   input logic [31:0]                      lsu_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          lsu_addr_m,
-   input logic [31:0]                      lsu_addr_r,
-
-   // lsu address down the pipe - needed to check unaligned
-   input logic [pt.DCCM_BITS-1:0]          end_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_m,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_r,
-
-
-   input logic                             stbuf_reqvld_any,        // write enable
-   input logic [pt.LSU_SB_BITS-1:0]        stbuf_addr_any,          // stbuf address (aligned)
-
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_data_any,          // the read out from stbuf
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     stbuf_ecc_any,           // the encoded data with ECC bits
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_hi_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_lo_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_hi_m,    // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_lo_m,    // stbuf fowarding to load
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_r,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_r,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_r,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_r,           // right justified, ie load byte will have data at 7:0
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_corr_r,      // right justified & ECC corrected, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_r,  // lsu has a DED
-   input logic                             single_ecc_error_hi_r,   // sec detected on hi dccm bank
-   input logic                             single_ecc_error_lo_r,   // sec detected on lower dccm bank
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_hi_r_ff,    // the encoded data with ECC bits
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_lo_r_ff,    // the encoded data with ECC bits
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_m,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_m,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_m,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_m,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_m,           // right justified, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_m,  // lsu has a DED
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_m,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_m,           // corrected dccm data
-
-   input logic [31:0]                      store_data_m,            // Store data M-stage
-   input logic                             dma_dccm_wen,            // Perform DMA writes only for word/dword
-   input logic                             dma_pic_wen,             // Perform PIC writes
-   input logic [2:0]                       dma_mem_tag_m,           // DMA Buffer entry number M-stage
-   input logic [31:0]                      dma_mem_addr,            // DMA request address
-   input logic [63:0]                      dma_mem_wdata,           // DMA write data
-   input logic [31:0]                      dma_dccm_wdata_lo,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [31:0]                      dma_dccm_wdata_hi,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_hi,   // ECC bits for the DMA wdata
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_lo,   // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_hi_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_hi_r,       // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_lo_r,       // data from the dccm
-   output logic [31:0]                     store_data_r,            // raw store data to be sent to bus
-   output logic                            ld_single_ecc_error_r,
-   output logic                            ld_single_ecc_error_r_ff,
-
-   output logic [31:0]                     picm_mask_data_m,        // pic data to stbuf
-   output logic                            lsu_stbuf_commit_any,    // stbuf wins the dccm port or is to pic
-   output logic                            lsu_dccm_rden_m,         // dccm read
-   output logic                            lsu_dccm_rden_r,         // dccm read
-
-   output logic                            dccm_dma_rvalid,         // dccm serviving the dma load
-   output logic                            dccm_dma_ecc_error,      // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,           // DMA return tag
-   output logic [63:0]                     dccm_dma_rdata,          // dccm data to dma request
-
-   // DCCM ports
-   output logic                            dccm_wren,               // dccm interface -- write
-   output logic                            dccm_rden,               // dccm interface -- write
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo,         // dccm interface -- wr addr for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi,         // dccm interface -- wr addr for hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo,         // dccm interface -- read address for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi,         // dccm interface -- read address for hi bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,         // dccm write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,         // dccm write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo,         // dccm read data back from the dccm
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi,         // dccm read data back from the dccm
-
-   // PIC ports
-   output logic                            picm_wren,               // write to pic
-   output logic                            picm_rden,               // read to pick
-   output logic                            picm_mken,               // write to pic need a mask
-   output logic [31:0]                     picm_rdaddr,             // address for pic read access
-   output logic [31:0]                     picm_wraddr,             // address for pic write access
-   output logic [31:0]                     picm_wr_data,            // write data
-   input logic [31:0]                      picm_rd_data,            // read data
-
-   input logic                             scan_mode                // scan mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-
-   logic                           lsu_dccm_rden_d, lsu_dccm_wren_d;
-   logic                           ld_single_ecc_error_lo_r, ld_single_ecc_error_hi_r;
-   logic                           ld_single_ecc_error_lo_r_ns, ld_single_ecc_error_hi_r_ns;
-   logic                           ld_single_ecc_error_lo_r_ff, ld_single_ecc_error_hi_r_ff;
-   logic                           lsu_double_ecc_error_r_ff;
-   logic [pt.DCCM_BITS-1:0]        ld_sec_addr_lo_r_ff, ld_sec_addr_hi_r_ff;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r_in, store_data_hi_r_in ;
-   logic [63:0]                    picm_rd_data_m;
-
-   logic                           dccm_wr_bypass_d_m_hi, dccm_wr_bypass_d_r_hi;
-   logic                           dccm_wr_bypass_d_m_lo, dccm_wr_bypass_d_r_lo;
-   logic                           kill_ecc_corr_lo_r, kill_ecc_corr_hi_r;
-
-    // byte_en flowing down
-   logic [3:0]                     store_byteen_m ,store_byteen_r;
-   logic [7:0]                     store_byteen_ext_m, store_byteen_ext_r;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic [63:0]  lsu_rdata_r, lsu_rdata_corr_r;
-      logic [63:0]  dccm_rdata_r, dccm_rdata_corr_r;
-      logic [63:0]  stbuf_fwddata_r;
-      logic [7:0]   stbuf_fwdbyteen_r;
-      logic [31:0]  stbuf_fwddata_lo_r, stbuf_fwddata_hi_r;
-      logic [3:0]   stbuf_fwdbyteen_lo_r, stbuf_fwdbyteen_hi_r;
-      logic [31:0]  lsu_rdata_lo_r, lsu_rdata_hi_r;
-      logic [63:0]  picm_rd_data_r;
-      logic [63:32] lsu_ld_data_r_nc, lsu_ld_data_corr_r_nc;
-      logic [2:0]   dma_mem_tag_r;
-      logic         stbuf_fwddata_en;
-
-      assign dccm_dma_rvalid      = lsu_pkt_r.valid & lsu_pkt_r.load & lsu_pkt_r.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_r;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_r[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_r ? lsu_rdata_corr_r[63:0] : {2{lsu_rdata_corr_r[31:0]}};
-      assign {lsu_ld_data_r_nc[63:32], lsu_ld_data_r[31:0]}           = lsu_rdata_r[63:0] >> 8*lsu_addr_r[1:0];
-      assign {lsu_ld_data_corr_r_nc[63:32], lsu_ld_data_corr_r[31:0]} = lsu_rdata_corr_r[63:0] >> 8*lsu_addr_r[1:0];
-
-      assign picm_rd_data_r[63:32]   = picm_rd_data_r[31:0];
-      assign dccm_rdata_r[63:0]      = {dccm_rdata_hi_r[31:0],dccm_rdata_lo_r[31:0]};
-      assign dccm_rdata_corr_r[63:0] = {sec_data_hi_r[31:0],sec_data_lo_r[31:0]};
-      assign stbuf_fwddata_r[63:0]   = {stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]};
-      assign stbuf_fwdbyteen_r[7:0]  = {stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]};
-      assign stbuf_fwddata_en        = (|stbuf_fwdbyteen_hi_m[3:0]) | (|stbuf_fwdbyteen_lo_m[3:0]) | clk_override;
-
-      for (genvar i=0; i<8; i++) begin: GenDMAData
-         assign lsu_rdata_corr_r[(8*i)+7:8*i]  = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_corr_r[(8*i)+7:8*i]));
-
-         assign lsu_rdata_r[(8*i)+7:8*i]       = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_r[(8*i)+7:8*i]));
-      end
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_hi_r_ff    (.*, .din(dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((lsu_dccm_rden_m & ldst_dual_m) | clk_override));
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_lo_r_ff    (.*, .din(dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_dccm_rden_m | clk_override));
-      rvdffe #(2*pt.DCCM_ECC_WIDTH)  dccm_data_ecc_r_ff  (.*, .din({dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0]}),
-                                                              .dout({dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0]}),                                  .en(lsu_dccm_rden_m | clk_override));
-      rvdff #(8)                   stbuf_fwdbyteen_ff    (.*, .din({stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]}), .dout({stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]}), .clk(lsu_c2_r_clk));
-      rvdffe #(64)                 stbuf_fwddata_ff      (.*, .din({stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]}),   .dout({stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]}),   .en(stbuf_fwddata_en));
-      rvdffe #(32)                 picm_rddata_rff       (.*, .din(picm_rd_data_m[31:0]),                                   .dout(picm_rd_data_r[31:0]),                                   .en(addr_in_pic_m | clk_override));
-      rvdff #(3)                   dma_mem_tag_rff       (.*, .din(dma_mem_tag_m[2:0]),                                     .dout(dma_mem_tag_r[2:0]),                                     .clk(lsu_c1_r_clk));
-
-   end else begin: L2U_Plus1_0
-
-      logic [63:0]  lsu_rdata_m, lsu_rdata_corr_m;
-      logic [63:0]  dccm_rdata_m, dccm_rdata_corr_m;
-      logic [63:0]  stbuf_fwddata_m;
-      logic [7:0]   stbuf_fwdbyteen_m;
-      logic [63:32] lsu_ld_data_m_nc, lsu_ld_data_corr_m_nc;
-      logic [31:0]  lsu_ld_data_corr_m;
-
-      assign dccm_dma_rvalid      = lsu_pkt_m.valid & lsu_pkt_m.load & lsu_pkt_m.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_m;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_m[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_m ? lsu_rdata_corr_m[63:0] : {2{lsu_rdata_corr_m[31:0]}};
-      assign {lsu_ld_data_m_nc[63:32], lsu_ld_data_m[31:0]} = lsu_rdata_m[63:0] >> 8*lsu_addr_m[1:0];
-      assign {lsu_ld_data_corr_m_nc[63:32], lsu_ld_data_corr_m[31:0]} = lsu_rdata_corr_m[63:0] >> 8*lsu_addr_m[1:0];
-
-      assign dccm_rdata_m[63:0]      = {dccm_rdata_hi_m[31:0],dccm_rdata_lo_m[31:0]};
-      assign dccm_rdata_corr_m[63:0] = {sec_data_hi_m[31:0],sec_data_lo_m[31:0]};
-      assign stbuf_fwddata_m[63:0]   = {stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]};
-      assign stbuf_fwdbyteen_m[7:0]  = {stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]};
-
-      for (genvar i=0; i<8; i++) begin: GenLoop
-         assign lsu_rdata_corr_m[(8*i)+7:8*i] = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_corr_m[(8*i)+7:8*i]));
-
-         assign lsu_rdata_m[(8*i)+7:8*i]      = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_m[(8*i)+7:8*i]));
-      end
-
-      rvdffe #(32) lsu_ld_data_corr_rff(.*, .din(lsu_ld_data_corr_m[31:0]), .dout(lsu_ld_data_corr_r[31:0]), .en((lsu_pkt_m.valid & lsu_pkt_m.load & (addr_in_pic_m | addr_in_dccm_m)) | clk_override));
-   end
-
-   assign kill_ecc_corr_lo_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign kill_ecc_corr_hi_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign ld_single_ecc_error_lo_r = lsu_pkt_r.load & single_ecc_error_lo_r & ~lsu_raw_fwd_lo_r;
-   assign ld_single_ecc_error_hi_r = lsu_pkt_r.load & single_ecc_error_hi_r & ~lsu_raw_fwd_hi_r;
-   assign ld_single_ecc_error_r    = (ld_single_ecc_error_lo_r | ld_single_ecc_error_hi_r) & ~lsu_double_ecc_error_r;
-
-   assign ld_single_ecc_error_lo_r_ns = ld_single_ecc_error_lo_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_lo_r;
-   assign ld_single_ecc_error_hi_r_ns = ld_single_ecc_error_hi_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_hi_r;
-   assign ld_single_ecc_error_r_ff = (ld_single_ecc_error_lo_r_ff | ld_single_ecc_error_hi_r_ff) & ~lsu_double_ecc_error_r_ff;
-
-   assign lsu_stbuf_commit_any = stbuf_reqvld_any &
-                                 (~(lsu_dccm_rden_d | lsu_dccm_wren_d | ld_single_ecc_error_r_ff) |
-                                  (lsu_dccm_rden_d & ~((stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == lsu_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]) |
-                                                       (stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == end_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]))));
-
-   // No need to read for aligned word/dword stores since ECC will come by new data completely
-   assign lsu_dccm_rden_d = lsu_pkt_d.valid & (lsu_pkt_d.load | (lsu_pkt_d.store & (~(lsu_pkt_d.word | lsu_pkt_d.dword) | (lsu_addr_d[1:0] != 2'b0)))) & addr_in_dccm_d;
-
-   // DMA will read/write in decode stage
-   assign lsu_dccm_wren_d = dma_dccm_wen;
-
-   // DCCM inputs
-   assign dccm_wren                             = lsu_dccm_wren_d | lsu_stbuf_commit_any | ld_single_ecc_error_r_ff;
-   assign dccm_rden                             = lsu_dccm_rden_d & addr_in_dccm_d;
-   assign dccm_wr_addr_lo[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? lsu_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_wr_addr_hi[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? end_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_lo[pt.DCCM_BITS-1:0]     = lsu_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_hi[pt.DCCM_BITS-1:0]     = end_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-   assign dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-
-   // DCCM outputs
-   assign store_byteen_m[3:0] = {4{lsu_pkt_m.store}} &
-                                (({4{lsu_pkt_m.by}}    & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}}  & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}}  & 4'b1111));
-
-   assign store_byteen_r[3:0] =  {4{lsu_pkt_r.store}} &
-                                 (({4{lsu_pkt_r.by}}    & 4'b0001) |
-                                  ({4{lsu_pkt_r.half}}  & 4'b0011) |
-                                  ({4{lsu_pkt_r.word}}  & 4'b1111));
-
-   assign store_byteen_ext_m[7:0] = {4'b0,store_byteen_m[3:0]} << lsu_addr_m[1:0];      // The packet in m
-   assign store_byteen_ext_r[7:0] = {4'b0,store_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-
-
-   assign dccm_wr_bypass_d_m_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-   assign dccm_wr_bypass_d_m_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-
-   assign dccm_wr_bypass_d_r_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-   assign dccm_wr_bypass_d_r_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic        dccm_wren_Q;
-      logic [31:0] dccm_wr_data_Q;
-      logic        dccm_wr_bypass_d_m_lo_Q, dccm_wr_bypass_d_m_hi_Q;
-      logic [31:0] store_data_pre_hi_r, store_data_pre_lo_r;
-
-      assign {store_data_pre_hi_r[31:0], store_data_pre_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-          assign store_data_lo_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]);
-          assign store_data_hi_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]);
-
-          assign store_datafn_lo_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]));
-          assign store_datafn_hi_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]));
-      end
-
-      rvdff #(1)   dccm_wren_ff       (.*, .din(lsu_stbuf_commit_any),  .dout(dccm_wren_Q),             .clk(lsu_free_c2_clk));   // ECC load errors writing to dccm shouldn't fwd to stores in pipe
-      rvdffe #(32) dccm_wrdata_ff     (.*, .din(stbuf_data_any[31:0]),  .dout(dccm_wr_data_Q[31:0]),    .en(lsu_stbuf_commit_any | clk_override), .clk(clk));
-      rvdff #(1)   dccm_wrbyp_dm_loff (.*, .din(dccm_wr_bypass_d_m_lo), .dout(dccm_wr_bypass_d_m_lo_Q), .clk(lsu_free_c2_clk));
-      rvdff #(1)   dccm_wrbyp_dm_hiff (.*, .din(dccm_wr_bypass_d_m_hi), .dout(dccm_wr_bypass_d_m_hi_Q), .clk(lsu_free_c2_clk));
-      rvdff #(32)  store_data_rff     (.*, .din(store_data_m[31:0]),    .dout(store_data_r[31:0]),      .clk(lsu_store_c1_r_clk));
-
-   end else begin: L2U1_Plus1_0
-
-      logic [31:0] store_data_hi_m, store_data_lo_m;
-      logic [63:0] store_data_mask;
-      assign {store_data_hi_m[31:0] , store_data_lo_m[31:0]} = {32'b0,store_data_m[31:0]} << 8*lsu_addr_m[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_hi_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i+4] ? store_data_hi_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_hi)   ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_hi_m[(8*i)+7:(8*i)]);
-         assign store_data_lo_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i]   ? store_data_lo_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_lo) ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_lo_m[(8*i)+7:(8*i)]);
-
-         assign store_datafn_lo_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo & ~store_byteen_ext_r[i])   ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)];
-         assign store_datafn_hi_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi & ~store_byteen_ext_r[i+4]) ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_hi_r[(8*i)+7:(8*i)];
-      end // for (genvar i=0; i<BYTE_WIDTH; i++)
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_mask[(8*i)+7:(8*i)] = {8{store_byteen_r[i]}};
-      end
-      assign store_data_r[31:0]      = 32'({store_data_hi_r[31:0],store_data_lo_r[31:0]} >> 8*lsu_addr_r[1:0]) & store_data_mask[31:0];
-
-      rvdffe #(pt.DCCM_DATA_WIDTH) store_data_hi_rff (.*, .din(store_data_hi_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((ldst_dual_m & lsu_pkt_m.valid & lsu_pkt_m.store) | clk_override), .clk(clk));
-      rvdff  #(pt.DCCM_DATA_WIDTH) store_data_lo_rff (.*, .din(store_data_lo_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .clk(lsu_store_c1_r_clk));
-
-   end
-
-   assign dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_lo[pt.DCCM_DATA_WIDTH-1:0]; // for ld choose dccm_out
-   assign dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_hi[pt.DCCM_DATA_WIDTH-1:0]; // for ld this is used for ecc
-
-   assign dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-   assign dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-
-   // PIC signals. PIC ignores the lower 2 bits of address since PIC memory registers are 32-bits
-   assign picm_wren          = (lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_pic_r & lsu_commit_r) | dma_pic_wen;
-   assign picm_rden          = lsu_pkt_d.valid & lsu_pkt_d.load  & addr_in_pic_d;
-   assign picm_mken          = lsu_pkt_d.valid & lsu_pkt_d.store & addr_in_pic_d;  // Get the mask for stores
-   assign picm_rdaddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},lsu_addr_d[pt.PIC_BITS-1:0]};
-
-   assign picm_wraddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},(dma_pic_wen ? dma_mem_addr[pt.PIC_BITS-1:0] : lsu_addr_r[pt.PIC_BITS-1:0])};
-
-   assign picm_wr_data[31:0] = dma_pic_wen ? dma_mem_wdata[31:0] : store_datafn_lo_r[31:0];
-
-   assign picm_mask_data_m[31:0] = picm_rd_data_m[31:0];
-   assign picm_rd_data_m[63:0]   = {picm_rd_data[31:0],picm_rd_data[31:0]};
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      rvdff #(1) dccm_rden_mff (.*, .din(lsu_dccm_rden_d), .dout(lsu_dccm_rden_m), .clk(lsu_c2_m_clk));
-      rvdff #(1) dccm_rden_rff (.*, .din(lsu_dccm_rden_m), .dout(lsu_dccm_rden_r), .clk(lsu_c2_r_clk));
-
-      // ECC correction flops since dccm write happens next cycle
-      // We are writing to dccm in r+1 for ecc correction since fast_int needs to be blocked in decode - 1. We can probably write in r for plus0 configuration since we know ecc error in M.
-      // In that case these (_ff) flops are needed only in plus1 configuration
-      rvdff #(1) ld_double_ecc_error_rff    (.*, .din(lsu_double_ecc_error_r),   .dout(lsu_double_ecc_error_r_ff),   .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_hi_rff (.*, .din(ld_single_ecc_error_hi_r_ns), .dout(ld_single_ecc_error_hi_r_ff), .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_lo_rff (.*, .din(ld_single_ecc_error_lo_r_ns), .dout(ld_single_ecc_error_lo_r_ff), .clk(lsu_free_c2_clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_hi_rff (.*, .din(end_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_lo_rff (.*, .din(lsu_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-
-   end else begin: Gen_dccm_disable
-      assign lsu_dccm_rden_m = '0;
-      assign lsu_dccm_rden_r = '0;
-
-      assign lsu_double_ecc_error_r_ff = 1'b0;
-      assign ld_single_ecc_error_hi_r_ff = 1'b0;
-      assign ld_single_ecc_error_lo_r_ff = 1'b0;
-      assign ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] = '0;
-      assign ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] = '0;
-   end
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-`define eb1_LOCAL_DCCM_RAM_TEST_PORTS    .TEST1(dccm_ext_in_pkt[i].TEST1),                      \
-                                     .RME(dccm_ext_in_pkt[i].RME),                      \
-                                     .RM(dccm_ext_in_pkt[i].RM),                        \
-                                     .LS(dccm_ext_in_pkt[i].LS),                        \
-                                     .DS(dccm_ext_in_pkt[i].DS),                        \
-                                     .SD(dccm_ext_in_pkt[i].SD),                        \
-                                     .TEST_RNM(dccm_ext_in_pkt[i].TEST_RNM),            \
-                                     .BC1(dccm_ext_in_pkt[i].BC1),                      \
-                                     .BC2(dccm_ext_in_pkt[i].BC2),                      \
-
-
-
-module eb1_lsu_dccm_mem
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-`ifdef USE_POWER_PINS
-   input logic 	vccd1,
-   input logic		vssd1,
- `endif
-   input logic         clk,                                             // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic         active_clk,                                      // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic         rst_l,                                           // reset, active low
-   input logic         clk_override,                                    // Override non-functional clock gating
-
-   input logic         dccm_wren,                                       // write enable
-   input logic         dccm_rden,                                       // read enable
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,                     // read address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,                     // read address for the upper bank in case of a misaligned access
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,              // write data
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,              // write data
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,    // the dccm packet from the soc
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_lo,              // read data from the lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_hi,              // read data from the hi bank
-
-   input  logic         scan_mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-   localparam DCCM_INDEX_BITS = (pt.DCCM_BITS - pt.DCCM_BANK_BITS - pt.DCCM_WIDTH_BITS);
-   localparam DCCM_INDEX_DEPTH = ((pt.DCCM_SIZE)*1024)/((pt.DCCM_BYTE_WIDTH)*(pt.DCCM_NUM_BANKS));  // Depth of memory bank
-
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        wren_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        rden_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+2)] addr_bank;
-   logic [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)]           rd_addr_even, rd_addr_odd;
-   logic                                                                rd_unaligned, wr_unaligned;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_FDATA_WIDTH-1:0]              dccm_bank_dout;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]                                      wrdata;
-
-   logic [pt.DCCM_NUM_BANKS-1:0][pt.DCCM_FDATA_WIDTH-1:0]               wr_data_bank;
-
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_lo_q;
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_hi_q;
-
-   logic [pt.DCCM_NUM_BANKS-1:0]            dccm_clken;
-
-   assign rd_unaligned = (dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-   assign wr_unaligned = (dccm_wr_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_wr_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-
-   // Align the read data
-   assign dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_lo_q[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-   assign dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-
-
-   // 8 Banks, 16KB each (2048 x 72)
-   for (genvar i=0; i<pt.DCCM_NUM_BANKS; i++) begin: mem_bank
-      assign  wren_bank[i]        = dccm_wren & ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_wr_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  rden_bank[i]        = dccm_rden & ((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_rd_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  addr_bank[i][(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] = wren_bank[i] ? (((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ?
-                                                                                                        dccm_wr_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_wr_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS])  :
-                                                                                                  (((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & rd_unaligned) ?
-                                                                                                        dccm_rd_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_rd_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS]);
-
-      assign wr_data_bank[i]     = ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ? dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] : dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0];
-
-      // clock gating section
-      assign  dccm_clken[i] = (wren_bank[i] | rden_bank[i] | clk_override) ;
-      // end clock gating section
-
-
-
-      if (DCCM_INDEX_DEPTH == 32768) begin : dccm
-         ram_32768x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 16384) begin : dccm
-         ram_16384x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 8192) begin : dccm
-         ram_8192x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 4096) begin : dccm
-         ram_4096x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 3072) begin : dccm
-         ram_3072x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 2048) begin : dccm
-         ram_2048x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 1024) begin : dccm
-         /*ram_1024x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-                                 */
-                                 sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i]),
-									.dout0(dccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 512) begin : dccm
-         ram_512x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-      else if (DCCM_INDEX_DEPTH == 256) begin : dccm
-         /*ram_256x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );*/
-                                sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i][31:0]),
-									.dout0(dccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 128) begin : dccm
-         ram_128x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-
-
-   end : mem_bank
-
-   // Flops
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_lo_ff (.*, .din(dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_lo_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_hi_ff (.*, .din(dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-
-`undef eb1_LOCAL_DCCM_RAM_TEST_PORTS
-
-endmodule // eb1_lsu_dccm_mem
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_ecc
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-   input logic                           clk,                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                           lsu_c2_r_clk,       // clock
-   input logic                           clk_override,       // Override non-functional clock gating
-   input logic                           rst_l,              // reset, active low
-   input logic                           scan_mode,          // scan mode
-
-   input eb1_lsu_pkt_t                  lsu_pkt_m,          // packet in m
-   input eb1_lsu_pkt_t                  lsu_pkt_r,          // packet in r
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  stbuf_data_any,
-
-   input logic                           dec_tlu_core_ecc_disable,  // disables the ecc computation and error flagging
-
-   input logic                           lsu_dccm_rden_r,          // dccm rden
-   input logic                           addr_in_dccm_r,           // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_r,               // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_r,               // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_r,          // data from the dccm
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_r,          // data from the dccm
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_r,       // data from the dccm + ecc
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_r,       // data from the dccm + ecc
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r_ff,         // corrected dccm data R+1 stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff,         // corrected dccm data R+1 stage
-
-   input logic                           ld_single_ecc_error_r,     // ld has a single ecc error
-   input logic                           ld_single_ecc_error_r_ff,  // ld has a single ecc error
-   input logic                           lsu_dccm_rden_m,           // dccm rden
-   input logic                           addr_in_dccm_m,            // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_m,                // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_m,                // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_m,           // raw data from mem
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_m,           // raw data from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_m,        // ecc read out from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_m,        // ecc read out from mem
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_m,             // corrected dccm data M-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_m,             // corrected dccm data M-stage
-
-   input logic                           dma_dccm_wen,              // Perform DMA writes only for word/dword
-   input logic  [31:0]                   dma_dccm_wdata_lo,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   input logic  [31:0]                   dma_dccm_wdata_hi,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_hi,     // ECC bits for the DMA wdata
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_lo,     // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any,             // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff,      // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_lo_r_ff,      // Encoded data with ECC bits
-
-   output logic                          single_ecc_error_hi_r,                   // sec detected
-   output logic                          single_ecc_error_lo_r,                   // sec detected on lower dccm bank
-   output logic                          lsu_single_ecc_error_r,                  // or of the 2
-   output logic                          lsu_double_ecc_error_r,                   // double error detected
-
-   output logic                          lsu_single_ecc_error_m,                  // or of the 2
-   output logic                          lsu_double_ecc_error_m                   // double error detected
-
- );
-
-   logic                           is_ldst_r;
-   logic                           is_ldst_hi_any, is_ldst_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_wdata_hi_any, dccm_wdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  dccm_wdata_ecc_hi_any, dccm_wdata_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_rdata_hi_any, dccm_rdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]   dccm_data_ecc_hi_any, dccm_data_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  sec_data_hi_any, sec_data_lo_any;
-   logic                           single_ecc_error_hi_any, single_ecc_error_lo_any;
-   logic                           double_ecc_error_hi_any, double_ecc_error_lo_any;
-
-   logic                           double_ecc_error_hi_m, double_ecc_error_lo_m;
-   logic                           double_ecc_error_hi_r, double_ecc_error_lo_r;
-
-   logic [6:0]                     ecc_out_hi_nc, ecc_out_lo_nc;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic        ldst_dual_m, ldst_dual_r;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_r, is_ldst_lo_r;
-
-      assign ldst_dual_r                                 = (lsu_addr_r[2] != end_addr_r[2]);
-      assign is_ldst_r                                   = lsu_pkt_r.valid & (lsu_pkt_r.load | lsu_pkt_r.store) & addr_in_dccm_r & lsu_dccm_rden_r;
-      assign is_ldst_lo_r                                = is_ldst_r & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_r                                = is_ldst_r & ldst_dual_r & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_r;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_r;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_hi_r                       = single_ecc_error_hi_any;
-      assign double_ecc_error_hi_r                       = double_ecc_error_hi_any;
-      assign sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_lo_r                       = single_ecc_error_lo_any;
-      assign double_ecc_error_lo_r                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_r                      = single_ecc_error_hi_r | single_ecc_error_lo_r;
-      assign lsu_double_ecc_error_r                      = double_ecc_error_hi_r | double_ecc_error_lo_r;
-
-   end else begin: L2U_Plus1_0
-
-      logic        ldst_dual_m;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_m, is_ldst_lo_m;
-
-      assign ldst_dual_m                                 = (lsu_addr_m[2] != end_addr_m[2]);
-      assign is_ldst_m                                   = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & addr_in_dccm_m & lsu_dccm_rden_m;
-      assign is_ldst_lo_m                                = is_ldst_m & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_m                                = is_ldst_m & (ldst_dual_m | lsu_pkt_m.dma) & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_m;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_m;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_hi_m                       = double_ecc_error_hi_any;
-      assign sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_lo_m                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_m                      = single_ecc_error_hi_any | single_ecc_error_lo_any;
-      assign lsu_double_ecc_error_m                      = double_ecc_error_hi_m   | double_ecc_error_lo_m;
-
-      // Flops
-      rvdff  #(1) lsu_single_ecc_err_r    (.din(lsu_single_ecc_error_m), .dout(lsu_single_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(1) lsu_double_ecc_err_r    (.din(lsu_double_ecc_error_m), .dout(lsu_double_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_lo_rff (.din(single_ecc_error_lo_any),  .dout(single_ecc_error_lo_r),  .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_hi_rff (.din(single_ecc_error_hi_any),  .dout(single_ecc_error_hi_r),  .clk(lsu_c2_r_clk), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rff (.din(sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rff (.din(sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-
-   end
-
-   // Logic for ECC generation during write
-   assign dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0] : stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]);
-   assign dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0] : 32'h0);
-
-   assign sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0]         = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-
-   // Instantiate ECC blocks
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-
-      //Detect/Repair for Hi
-      rvecc_decode lsu_ecc_decode_hi (
-         // Inputs
-         .en(is_ldst_hi_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_in(dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_hi_nc[6:0]),
-         .single_ecc_error(single_ecc_error_hi_any),
-         .double_ecc_error(double_ecc_error_hi_any),
-         .*
-      );
-
-      //Detect/Repair for Lo
-      rvecc_decode lsu_ecc_decode_lo (
-         // Inputs
-         .en(is_ldst_lo_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] ),
-         .ecc_in(dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_lo_nc[6:0]),
-         .single_ecc_error(single_ecc_error_lo_any),
-         .double_ecc_error(double_ecc_error_lo_any),
-         .*
-      );
-
-      rvecc_encode lsu_ecc_encode_hi (
-         //Inputs
-         .din(dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-      rvecc_encode lsu_ecc_encode_lo (
-         //Inputs
-         .din(dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign single_ecc_error_hi_any = '0;
-      assign double_ecc_error_hi_any = '0;
-      assign single_ecc_error_lo_any = '0;
-      assign double_ecc_error_lo_any = '0;
-   end
-
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rplus1ff (.din(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rplus1ff (.din(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-
-
-endmodule // eb1_lsu_ecc
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU control
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_lsc_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic                rst_l,                     // reset, active low
-   input logic                clk_override,              // Override non-functional clock gating
-   input logic                clk,                       // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   // clocks per pipe
-   input logic                lsu_c1_m_clk,
-   input logic                lsu_c1_r_clk,
-   input logic                lsu_c2_m_clk,
-   input logic                lsu_c2_r_clk,
-   input logic                lsu_store_c1_m_clk,
-
-   input logic [31:0]         lsu_ld_data_r,             // Load data R-stage
-   input logic [31:0]         lsu_ld_data_corr_r,        // ECC corrected data R-stage
-   input logic                lsu_single_ecc_error_r,    // ECC single bit error R-stage
-   input logic                lsu_double_ecc_error_r,    // ECC double bit error R-stage
-
-   input logic [31:0]         lsu_ld_data_m,             // Load data M-stage
-   input logic                lsu_single_ecc_error_m,    // ECC single bit error M-stage
-   input logic                lsu_double_ecc_error_m,    // ECC double bit error M-stage
-
-   input logic                flush_m_up,                // Flush M and D stage
-   input logic                flush_r,                   // Flush R-stage
-   input logic                ldst_dual_d,               // load/store is unaligned at 32 bit boundary D-stage
-   input logic                ldst_dual_m,               // load/store is unaligned at 32 bit boundary M-stage
-   input logic                ldst_dual_r,               // load/store is unaligned at 32 bit boundary R-stage
-
-   input logic [31:0]         exu_lsu_rs1_d,             // address
-   input logic [31:0]         exu_lsu_rs2_d,             // store data
-
-   input eb1_lsu_pkt_t       lsu_p,                     // lsu control packet
-   input logic                dec_lsu_valid_raw_d,       // Raw valid for address computation
-   input logic [11:0]         dec_lsu_offset_d,          // 12b offset for load/store addresses
-
-   input  logic [31:0]        picm_mask_data_m,          // PIC data M-stage
-   input  logic [31:0]        bus_read_data_m,           // the bus return data
-   output logic [31:0]        lsu_result_m,              // lsu load data
-   output logic [31:0]        lsu_result_corr_r,         // This is the ECC corrected data going to RF
-   // lsu address down the pipe
-   output logic [31:0]        lsu_addr_d,
-   output logic [31:0]        lsu_addr_m,
-   output logic [31:0]        lsu_addr_r,
-   // lsu address down the pipe - needed to check unaligned
-   output logic [31:0]        end_addr_d,
-   output logic [31:0]        end_addr_m,
-   output logic [31:0]        end_addr_r,
-   // store data down the pipe
-   output logic [31:0]        store_data_m,
-
-   input  logic [31:0]         dec_tlu_mrac_ff,          // CSR for memory region control
-   output logic                lsu_exc_m,                // Access or misaligned fault
-   output logic                is_sideeffects_m,         // is sideffects space
-   output logic                lsu_commit_r,             // lsu instruction in r commits
-   output logic                lsu_single_ecc_error_incr,// LSU inc SB error counter
-   output eb1_lsu_error_pkt_t lsu_error_pkt_r,          // lsu exception packet
-
-   output logic [31:1]         lsu_fir_addr,             // fast interrupt address
-   output logic [1:0]          lsu_fir_error,            // Error during fast interrupt lookup
-
-   // address in dccm/pic/external per pipe stage
-   output logic               addr_in_dccm_d,
-   output logic               addr_in_dccm_m,
-   output logic               addr_in_dccm_r,
-
-   output logic               addr_in_pic_d,
-   output logic               addr_in_pic_m,
-   output logic               addr_in_pic_r,
-
-   output logic               addr_external_m,
-
-   // DMA slave
-   input logic                dma_dccm_req,
-   input logic [31:0]         dma_mem_addr,
-   input logic [2:0]          dma_mem_sz,
-   input logic                dma_mem_write,
-   input logic [63:0]         dma_mem_wdata,
-
-   // Store buffer related signals
-   output eb1_lsu_pkt_t      lsu_pkt_d,
-   output eb1_lsu_pkt_t      lsu_pkt_m,
-   output eb1_lsu_pkt_t      lsu_pkt_r,
-
-   input  logic               scan_mode                  // Scan mode
-
-   );
-
-   logic [31:3]        end_addr_pre_m, end_addr_pre_r;
-   logic [31:0]        full_addr_d;
-   logic [31:0]        full_end_addr_d;
-   logic [31:0]        lsu_rs1_d;
-   logic [11:0]        lsu_offset_d;
-   logic [31:0]        rs1_d;
-   logic [11:0]        offset_d;
-   logic [12:0]        end_addr_offset_d;
-   logic [2:0]         addr_offset_d;
-
-   logic [63:0]        dma_mem_wdata_shifted;
-   logic               addr_external_d;
-   logic               addr_external_r;
-   logic               access_fault_d, misaligned_fault_d;
-   logic               access_fault_m, misaligned_fault_m;
-
-   logic               fir_dccm_access_error_d, fir_nondccm_access_error_d;
-   logic               fir_dccm_access_error_m, fir_nondccm_access_error_m;
-
-   logic [3:0]         exc_mscause_d, exc_mscause_m;
-   logic [31:0]        rs1_d_raw;
-   logic [31:0]        store_data_d, store_data_pre_m, store_data_m_in;
-   logic [31:0]        bus_read_data_r;
-
-   eb1_lsu_pkt_t           dma_pkt_d;
-   eb1_lsu_pkt_t           lsu_pkt_m_in, lsu_pkt_r_in;
-   eb1_lsu_error_pkt_t     lsu_error_pkt_m;
-
-
-   // Premux the rs1/offset for dma
-   assign lsu_rs1_d[31:0]    = dec_lsu_valid_raw_d ? exu_lsu_rs1_d[31:0] : dma_mem_addr[31:0];
-   assign lsu_offset_d[11:0] = dec_lsu_offset_d[11:0] & {12{dec_lsu_valid_raw_d}};
-   assign rs1_d_raw[31:0]    = lsu_rs1_d[31:0];
-   assign offset_d[11:0]     = lsu_offset_d[11:0];
-
-   assign rs1_d[31:0] = (lsu_pkt_d.load_ldst_bypass_d) ? lsu_result_m[31:0] : rs1_d_raw[31:0];
-
-   // generate the ls address
-   rvlsadder   lsadder  (.rs1(rs1_d[31:0]),
-                       .offset(offset_d[11:0]),
-                       .dout(full_addr_d[31:0])
-                       );
-
-   // Module to generate the memory map of the address
-   eb1_lsu_addrcheck #(.pt(pt)) addrcheck (
-              .start_addr_d(full_addr_d[31:0]),
-              .end_addr_d(full_end_addr_d[31:0]),
-              .rs1_region_d(rs1_d[31:28]),
-              .*
-  );
-
-   // Calculate start/end address for load/store
-   assign addr_offset_d[2:0]      = ({3{lsu_pkt_d.half}} & 3'b01) | ({3{lsu_pkt_d.word}} & 3'b11) | ({3{lsu_pkt_d.dword}} & 3'b111);
-   assign end_addr_offset_d[12:0] = {offset_d[11],offset_d[11:0]} + {9'b0,addr_offset_d[2:0]};
-   assign full_end_addr_d[31:0]   = rs1_d[31:0] + {{19{end_addr_offset_d[12]}},end_addr_offset_d[12:0]};
-   assign end_addr_d[31:0]        = full_end_addr_d[31:0];
-   assign lsu_exc_m               = access_fault_m | misaligned_fault_m;
-
-   // Goes to TLU to increment the ECC error counter
-   assign lsu_single_ecc_error_incr = (lsu_single_ecc_error_r & ~lsu_double_ecc_error_r) & (lsu_commit_r | lsu_pkt_r.dma) & lsu_pkt_r.valid;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic               access_fault_r, misaligned_fault_r;
-      logic [3:0]         exc_mscause_r;
-      logic               fir_dccm_access_error_r, fir_nondccm_access_error_r;
-
-      // Generate exception packet
-      assign lsu_error_pkt_r.exc_valid = (access_fault_r | misaligned_fault_r | lsu_double_ecc_error_r) & lsu_pkt_r.valid & ~lsu_pkt_r.dma & ~lsu_pkt_r.fast_int;
-      assign lsu_error_pkt_r.single_ecc_error = lsu_single_ecc_error_r & ~lsu_error_pkt_r.exc_valid & ~lsu_pkt_r.dma;
-      assign lsu_error_pkt_r.inst_type = lsu_pkt_r.store;
-      assign lsu_error_pkt_r.exc_type  = ~misaligned_fault_r;
-      assign lsu_error_pkt_r.mscause[3:0] = (lsu_double_ecc_error_r & ~misaligned_fault_r & ~access_fault_r) ? 4'h1 : exc_mscause_r[3:0];
-      assign lsu_error_pkt_r.addr[31:0] = lsu_addr_r[31:0];
-
-      assign lsu_fir_error[1:0] = fir_nondccm_access_error_r ? 2'b11 : (fir_dccm_access_error_r ? 2'b10 : ((lsu_pkt_r.fast_int & lsu_double_ecc_error_r) ? 2'b01 : 2'b00));
-
-      rvdff #(1) access_fault_rff             (.din(access_fault_m),             .dout(access_fault_r),             .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) misaligned_fault_rff         (.din(misaligned_fault_m),         .dout(misaligned_fault_r),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(4) exc_mscause_rff              (.din(exc_mscause_m[3:0]),         .dout(exc_mscause_r[3:0]),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_m),    .dout(fir_dccm_access_error_r),    .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_m), .dout(fir_nondccm_access_error_r), .clk(lsu_c1_r_clk), .*);
-
-   end else begin: L2U_Plus1_0
-      logic [1:0] lsu_fir_error_m;
-
-      // Generate exception packet
-      assign lsu_error_pkt_m.exc_valid = (access_fault_m | misaligned_fault_m | lsu_double_ecc_error_m) & lsu_pkt_m.valid & ~lsu_pkt_m.dma & ~lsu_pkt_m.fast_int & ~flush_m_up;
-      assign lsu_error_pkt_m.single_ecc_error = lsu_single_ecc_error_m & ~lsu_error_pkt_m.exc_valid & ~lsu_pkt_m.dma;
-      assign lsu_error_pkt_m.inst_type = lsu_pkt_m.store;
-      assign lsu_error_pkt_m.exc_type  = ~misaligned_fault_m;
-      assign lsu_error_pkt_m.mscause[3:0] = (lsu_double_ecc_error_m & ~misaligned_fault_m & ~access_fault_m) ? 4'h1 : exc_mscause_m[3:0];
-      assign lsu_error_pkt_m.addr[31:0] = lsu_addr_m[31:0];
-
-      assign lsu_fir_error_m[1:0] = fir_nondccm_access_error_m ? 2'b11 : (fir_dccm_access_error_m ? 2'b10 : ((lsu_pkt_m.fast_int & lsu_double_ecc_error_m) ? 2'b01 : 2'b00));
-
-      rvdff  #(1)                             lsu_exc_valid_rff       (.*, .din(lsu_error_pkt_m.exc_valid),                        .dout(lsu_error_pkt_r.exc_valid),                        .clk(lsu_c2_r_clk));
-      rvdff  #(1)                             lsu_single_ecc_error_rff(.*, .din(lsu_error_pkt_m.single_ecc_error),                 .dout(lsu_error_pkt_r.single_ecc_error),                 .clk(lsu_c2_r_clk));
-      rvdffe #($bits(eb1_lsu_error_pkt_t)-2) lsu_error_pkt_rff       (.*, .din(lsu_error_pkt_m[$bits(eb1_lsu_error_pkt_t)-1:2]), .dout(lsu_error_pkt_r[$bits(eb1_lsu_error_pkt_t)-1:2]), .en(lsu_error_pkt_m.exc_valid | lsu_error_pkt_m.single_ecc_error | clk_override));
-      rvdff #(2)                              lsu_fir_error_rff       (.*, .din(lsu_fir_error_m[1:0]),                             .dout(lsu_fir_error[1:0]),                               .clk(lsu_c2_r_clk));
-   end
-
-   //Create DMA packet
-   always_comb begin
-      dma_pkt_d = '0;
-      dma_pkt_d.valid   = dma_dccm_req;
-      dma_pkt_d.dma     = 1'b1;
-      dma_pkt_d.store   = dma_mem_write;
-      dma_pkt_d.load    = ~dma_mem_write;
-      dma_pkt_d.by      = (dma_mem_sz[2:0] == 3'b0);
-      dma_pkt_d.half    = (dma_mem_sz[2:0] == 3'b1);
-      dma_pkt_d.word    = (dma_mem_sz[2:0] == 3'b10);
-      dma_pkt_d.dword   = (dma_mem_sz[2:0] == 3'b11);
-   end
-
-   always_comb begin
-      lsu_pkt_d = dec_lsu_valid_raw_d ? lsu_p : dma_pkt_d;
-      lsu_pkt_m_in = lsu_pkt_d;
-      lsu_pkt_r_in = lsu_pkt_m;
-
-      lsu_pkt_d.valid = (lsu_p.valid & ~(flush_m_up & ~lsu_p.fast_int)) | dma_dccm_req;
-      lsu_pkt_m_in.valid = lsu_pkt_d.valid & ~(flush_m_up & ~lsu_pkt_d.dma);
-      lsu_pkt_r_in.valid = lsu_pkt_m.valid & ~(flush_m_up & ~lsu_pkt_m.dma) ;
-   end
-
-   // C2 clock for valid and C1 for other bits of packet
-   rvdff #(1) lsu_pkt_vldmff (.*, .din(lsu_pkt_m_in.valid), .dout(lsu_pkt_m.valid), .clk(lsu_c2_m_clk));
-   rvdff #(1) lsu_pkt_vldrff (.*, .din(lsu_pkt_r_in.valid), .dout(lsu_pkt_r.valid), .clk(lsu_c2_r_clk));
-
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_mff (.*, .din(lsu_pkt_m_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_m[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_m_clk));
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_rff (.*, .din(lsu_pkt_r_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_r[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_r_clk));
-
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_r, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_r[31:0];
-      assign lsu_ld_datafn_corr_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this is really R stage signal
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_r[7:0]}) |
-                                  ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_r[15:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_r[7]}}, lsu_ld_datafn_r[7:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_r[15]}},lsu_ld_datafn_r[15:0]}) |
-                                  ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_r[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-
-   end else begin: L2U1_Plus1_0 // block: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_m, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_m[31:0] = addr_external_m ? bus_read_data_m[31:0] : lsu_ld_data_m[31:0];
-      assign lsu_ld_datafn_corr_r[31:0] = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this result must look at prior stores and merge them in
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {24'b0,lsu_ld_datafn_m[7:0]}) |
-                                  ({32{ lsu_pkt_m.unsign & lsu_pkt_m.half}} & {16'b0,lsu_ld_datafn_m[15:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {{24{  lsu_ld_datafn_m[7]}}, lsu_ld_datafn_m[7:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.half}} & {{16{  lsu_ld_datafn_m[15]}},lsu_ld_datafn_m[15:0]}) |
-                                  ({32{lsu_pkt_m.word}}                     & lsu_ld_datafn_m[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-   end
-
-   // Fast interrupt address
-   assign lsu_fir_addr[31:1]    = lsu_ld_data_corr_r[31:1];
-
-   // absence load/store all 0's
-   assign lsu_addr_d[31:0] = full_addr_d[31:0];
-
-   // Interrupt as a flush source allows the WB to occur
-   assign lsu_commit_r = lsu_pkt_r.valid & (lsu_pkt_r.store | lsu_pkt_r.load) & ~flush_r & ~lsu_pkt_r.dma;
-
-   assign dma_mem_wdata_shifted[63:0] = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-   assign store_data_d[31:0] = dma_dccm_req ? dma_mem_wdata_shifted[31:0] : exu_lsu_rs2_d[31:0];  // Write to PIC still happens in r stage
-
-   assign store_data_m_in[31:0] = (lsu_pkt_d.store_data_bypass_d) ? lsu_result_m[31:0] : store_data_d[31:0];
-
-   assign store_data_m[31:0] = (picm_mask_data_m[31:0] | {32{~addr_in_pic_m}}) & ((lsu_pkt_m.store_data_bypass_m) ? lsu_result_m[31:0] : store_data_pre_m[31:0]);
-
-
-   rvdff #(32)  sdmff (.*, .din(store_data_m_in[31:0]), .dout(store_data_pre_m[31:0]),                       .clk(lsu_store_c1_m_clk));
-
-   rvdff #(32) samff (.*, .din(lsu_addr_d[31:0]), .dout(lsu_addr_m[31:0]), .clk(lsu_c1_m_clk));
-   rvdff #(32) sarff (.*, .din(lsu_addr_m[31:0]), .dout(lsu_addr_r[31:0]), .clk(lsu_c1_r_clk));
-
-   assign end_addr_m[31:3] = ldst_dual_m ? end_addr_pre_m[31:3] : lsu_addr_m[31:3];       // This is for power saving
-   assign end_addr_r[31:3] = ldst_dual_r ? end_addr_pre_r[31:3] : lsu_addr_r[31:3];       // This is for power saving
-
-   rvdffe #(29) end_addr_hi_mff (.*, .din(end_addr_d[31:3]), .dout(end_addr_pre_m[31:3]), .en((lsu_pkt_d.valid & ldst_dual_d) | clk_override));
-   rvdffe #(29) end_addr_hi_rff (.*, .din(end_addr_m[31:3]), .dout(end_addr_pre_r[31:3]), .en((lsu_pkt_m.valid & ldst_dual_m) | clk_override));
-
-   rvdff #(3)  end_addr_lo_mff (.*, .din(end_addr_d[2:0]), .dout(end_addr_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(3)  end_addr_lo_rff (.*, .din(end_addr_m[2:0]), .dout(end_addr_r[2:0]), .clk(lsu_c1_r_clk));
-
-   rvdff #(1) addr_in_dccm_mff(.din(addr_in_dccm_d), .dout(addr_in_dccm_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_dccm_rff(.din(addr_in_dccm_m), .dout(addr_in_dccm_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_in_pic_mff(.din(addr_in_pic_d), .dout(addr_in_pic_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_pic_rff(.din(addr_in_pic_m), .dout(addr_in_pic_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_external_mff(.din(addr_external_d), .dout(addr_external_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_external_rff(.din(addr_external_m), .dout(addr_external_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) access_fault_mff     (.din(access_fault_d),     .dout(access_fault_m),     .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) misaligned_fault_mff (.din(misaligned_fault_d), .dout(misaligned_fault_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(4) exc_mscause_mff      (.din(exc_mscause_d[3:0]), .dout(exc_mscause_m[3:0]), .clk(lsu_c1_m_clk), .*);
-
-   rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_d),    .dout(fir_dccm_access_error_m),    .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_d), .dout(fir_nondccm_access_error_m), .clk(lsu_c1_m_clk), .*);
-
-   rvdffe #(32) bus_read_data_r_ff (.*, .din(bus_read_data_m[31:0]), .dout(bus_read_data_r[31:0]), .en(addr_external_m | clk_override));
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Store Buffer
-// Comments: Dual writes and single drain
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-module eb1_lsu_stbuf
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-   input logic                           clk,                         // core clock
-   input logic                           rst_l,                       // reset
-
-   input logic                           lsu_stbuf_c1_clk,            // stbuf clock
-   input logic                           lsu_free_c2_clk,             // free clk
-
-   // Store Buffer input
-   input logic                           store_stbuf_reqvld_r,        // core instruction goes to stbuf
-   input logic                           lsu_commit_r,                // lsu commits
-   input logic                           dec_lsu_valid_raw_d,         // Speculative decode valid
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_hi_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_hi_r,           // merged data from the dccm for stores
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_lo_r,           // merged data from the dccm for stores
-
-   // Store Buffer output
-   output logic                          stbuf_reqvld_any,            // stbuf is draining
-   output logic                          stbuf_reqvld_flushed_any,    // Top entry is flushed
-   output logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any,              // address
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any,              // stbuf data
-
-   input  logic                          lsu_stbuf_commit_any,        // pop the stbuf as it commite
-   output logic                          lsu_stbuf_full_any,          // stbuf is full
-   output logic                          lsu_stbuf_empty_any,         // stbuf is empty
-   output logic                          ldst_stbuf_reqvld_r,         // needed for clocking
-
-   input logic [pt.LSU_SB_BITS-1:0]      lsu_addr_d,                  // lsu address D-stage
-   input logic [31:0]                    lsu_addr_m,                  // lsu address M-stage
-   input logic [31:0]                    lsu_addr_r,                  // lsu address R-stage
-
-   input logic [pt.LSU_SB_BITS-1:0]      end_addr_d,                  // lsu end address D-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_m,                  // lsu end address M-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_r,                  // lsu end address R-stage - needed to check unaligned
-
-   input logic                           ldst_dual_d, ldst_dual_m, ldst_dual_r,
-   input logic                           addr_in_dccm_m,              // address is in dccm
-   input logic                           addr_in_dccm_r,              // address is in dccm
-
-   // Forwarding signals
-   input logic                           lsu_cmpen_m,                 // needed for forwarding stbuf - load
-   input eb1_lsu_pkt_t                  lsu_pkt_m,                   // LSU packet M-stage
-   input eb1_lsu_pkt_t                  lsu_pkt_r,                   // LSU packet R-stage
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m,          // stbuf data
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m,          // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m,        // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m,        // stbuf data
-
-   input  logic       scan_mode                                       // Scan mode
-
-);
-
-
-   localparam DEPTH      = pt.LSU_STBUF_DEPTH;
-   localparam DATA_WIDTH = pt.DCCM_DATA_WIDTH;
-   localparam BYTE_WIDTH = pt.DCCM_BYTE_WIDTH;
-   localparam DEPTH_LOG2 = $clog2(DEPTH);
-
-   // These are the fields in the store queue
-   logic [DEPTH-1:0]                     stbuf_vld;
-   logic [DEPTH-1:0]                     stbuf_dma_kill;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addr;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteen;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_data;
-
-   logic [DEPTH-1:0]                     sel_lo;
-   logic [DEPTH-1:0]                     stbuf_wr_en;
-   logic [DEPTH-1:0]                     stbuf_dma_kill_en;
-   logic [DEPTH-1:0]                     stbuf_reset;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addrin;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_datain;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteenin;
-
-   logic [7:0]             store_byteen_ext_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_lo_r;
-
-   logic                   WrPtrEn, RdPtrEn;
-   logic [DEPTH_LOG2-1:0]  WrPtr, RdPtr;
-   logic [DEPTH_LOG2-1:0]  NxtWrPtr, NxtRdPtr;
-   logic [DEPTH_LOG2-1:0]  WrPtrPlus1, WrPtrPlus2, RdPtrPlus1;
-
-   logic                   dual_stbuf_write_r;
-
-   logic                   isdccmst_m, isdccmst_r;
-   logic [3:0]             stbuf_numvld_any, stbuf_specvld_any;
-   logic [1:0]             stbuf_specvld_m, stbuf_specvld_r;
-
-   logic [pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] cmpaddr_hi_m, cmpaddr_lo_m;
-
-   // variables to detect matching from the store queue
-   logic [DEPTH-1:0]                 stbuf_match_hi, stbuf_match_lo;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0] stbuf_fwdbyteenvec_hi, stbuf_fwdbyteenvec_lo;
-   logic [DATA_WIDTH-1:0]            stbuf_fwddata_hi_pre_m, stbuf_fwddata_lo_pre_m;
-   logic [BYTE_WIDTH-1:0]            stbuf_fwdbyteen_hi_pre_m, stbuf_fwdbyteen_lo_pre_m;
-
-   // logic to detect matching from the pipe - needed for store - load forwarding
-   logic [BYTE_WIDTH-1:0]  ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-   logic                   ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_lo_r;
-   // byte_en flowing down
-   logic [7:0]             ldst_byteen_r;
-   logic [7:0]             ldst_byteen_ext_r;
-   // fwd data through the pipe
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   // coalescing signals
-   logic [DEPTH-1:0]      store_matchvec_lo_r, store_matchvec_hi_r;
-   logic                  store_coalesce_lo_r, store_coalesce_hi_r;
-
-   //----------------------------------------
-   // Logic starts here
-   //----------------------------------------
-   // Create high/low byte enables
-   assign store_byteen_ext_r[7:0]           = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-   assign store_byteen_hi_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[7:4] & {4{lsu_pkt_r.store}};
-   assign store_byteen_lo_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[3:0] & {4{lsu_pkt_r.store}};
-
-   assign RdPtrPlus1[DEPTH_LOG2-1:0]     = RdPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus1[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus2[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 2'b10;
-
-   // ecc error on both hi/lo
-   assign dual_stbuf_write_r   = ldst_dual_r & store_stbuf_reqvld_r;
-   assign ldst_stbuf_reqvld_r  = ((lsu_commit_r | lsu_pkt_r.dma) & store_stbuf_reqvld_r);
-
-  // Store Buffer coalescing
-   for (genvar i=0; i<DEPTH; i++) begin: FindMatchEntry
-       assign store_matchvec_lo_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == lsu_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & ~stbuf_reset[i];
-       assign store_matchvec_hi_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == end_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & dual_stbuf_write_r & ~stbuf_reset[i];
-   end: FindMatchEntry
-
-   assign store_coalesce_lo_r = |store_matchvec_lo_r[DEPTH-1:0];
-   assign store_coalesce_hi_r = |store_matchvec_hi_r[DEPTH-1:0];
-
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Allocate new in this entry if :
-      // 1. wrptr, single allocate, lo did not coalesce
-      // 2. wrptr, double allocate, lo ^ hi coalesced
-      // 3. wrptr + 1, double alloacte, niether lo or hi coalesced
-      // Also update if there is a hi or a lo coalesce to this entry
-      // Store Buffer instantiation
-      for (genvar i=0; i<DEPTH; i++) begin: GenStBuf
-         assign stbuf_wr_en[i] = ldst_stbuf_reqvld_r & (
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  ~store_coalesce_lo_r)   |                                                    // Allocate : new Lo
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  dual_stbuf_write_r & ~store_coalesce_hi_r) |                               // Allocate : only 1 new Write Either
-                                   ( (i == WrPtrPlus1[DEPTH_LOG2-1:0]) &  dual_stbuf_write_r & ~(store_coalesce_lo_r | store_coalesce_hi_r)) |     // Allocate2 : 2 new so Write Hi
-                                   store_matchvec_lo_r[i] | store_matchvec_hi_r[i]);                                                                 // Coalesced Write Lo or Hi
-         assign stbuf_reset[i] = (lsu_stbuf_commit_any | stbuf_reqvld_flushed_any) & (i == RdPtr[DEPTH_LOG2-1:0]);
-
-         // Mux select for start/end address
-         assign sel_lo[i]                         = ((~ldst_dual_r | store_stbuf_reqvld_r) & (i == WrPtr[DEPTH_LOG2-1:0]) & ~store_coalesce_lo_r) |   // lo allocated new entry
-                                                    store_matchvec_lo_r[i];                                                                                                           // lo coalesced in to this entry
-         assign stbuf_addrin[i][pt.LSU_SB_BITS-1:0]  = sel_lo[i] ? lsu_addr_r[pt.LSU_SB_BITS-1:0]       : end_addr_r[pt.LSU_SB_BITS-1:0];
-         assign stbuf_byteenin[i][BYTE_WIDTH-1:0] = sel_lo[i] ? (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_lo_r[BYTE_WIDTH-1:0])          : (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_hi_r[BYTE_WIDTH-1:0]);
-         assign stbuf_datain[i][7:0]              = sel_lo[i] ? ((~stbuf_byteen[i][0] | store_byteen_lo_r[0]) ? store_datafn_lo_r[7:0]   : stbuf_data[i][7:0])    :
-                                                                ((~stbuf_byteen[i][0] | store_byteen_hi_r[0]) ? store_datafn_hi_r[7:0]   : stbuf_data[i][7:0]);
-         assign stbuf_datain[i][15:8]             = sel_lo[i] ? ((~stbuf_byteen[i][1] | store_byteen_lo_r[1]) ? store_datafn_lo_r[15:8]  : stbuf_data[i][15:8])    :
-                                                                ((~stbuf_byteen[i][1] | store_byteen_hi_r[1]) ? store_datafn_hi_r[15:8]  : stbuf_data[i][15:8]);
-         assign stbuf_datain[i][23:16]            = sel_lo[i] ? ((~stbuf_byteen[i][2] | store_byteen_lo_r[2]) ? store_datafn_lo_r[23:16] : stbuf_data[i][23:16])    :
-                                                                ((~stbuf_byteen[i][2] | store_byteen_hi_r[2]) ? store_datafn_hi_r[23:16] : stbuf_data[i][23:16]);
-         assign stbuf_datain[i][31:24]            = sel_lo[i] ? ((~stbuf_byteen[i][3] | store_byteen_lo_r[3]) ? store_datafn_lo_r[31:24] : stbuf_data[i][31:24])    :
-                                                                ((~stbuf_byteen[i][3] | store_byteen_hi_r[3]) ? store_datafn_hi_r[31:24] : stbuf_data[i][31:24]);
-
-         rvdffsc #(.WIDTH(1))              stbuf_vldff         (.din(1'b1),                                .dout(stbuf_vld[i]),                      .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffsc #(.WIDTH(1))              stbuf_killff        (.din(1'b1),                                .dout(stbuf_dma_kill[i]),                 .en(stbuf_dma_kill_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffe  #(.WIDTH(pt.LSU_SB_BITS)) stbuf_addrff        (.din(stbuf_addrin[i][pt.LSU_SB_BITS-1:0]), .dout(stbuf_addr[i][pt.LSU_SB_BITS-1:0]), .en(stbuf_wr_en[i]), .*);
-         rvdffsc #(.WIDTH(BYTE_WIDTH))     stbuf_byteenff      (.din(stbuf_byteenin[i][BYTE_WIDTH-1:0]),   .dout(stbuf_byteen[i][BYTE_WIDTH-1:0]),   .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_stbuf_c1_clk), .*);
-         rvdffe  #(.WIDTH(DATA_WIDTH))     stbuf_dataff        (.din(stbuf_datain[i][DATA_WIDTH-1:0]),     .dout(stbuf_data[i][DATA_WIDTH-1:0]),     .en(stbuf_wr_en[i]), .*);
-      end
-   end else begin: Gen_dccm_disable
-      assign stbuf_wr_en[DEPTH-1:0] = '0;
-      assign stbuf_reset[DEPTH-1:0] = '0;
-      assign stbuf_vld[DEPTH-1:0]   = '0;
-      assign stbuf_dma_kill[DEPTH-1:0] = '0;
-      assign stbuf_addr[DEPTH-1:0]  = '0;
-      assign stbuf_byteen[DEPTH-1:0] = '0;
-      assign stbuf_data[DEPTH-1:0]   = '0;
-   end
-
-   // Store Buffer drain logic
-   assign stbuf_reqvld_flushed_any            = stbuf_vld[RdPtr] & stbuf_dma_kill[RdPtr];
-   assign stbuf_reqvld_any                    = stbuf_vld[RdPtr] & ~stbuf_dma_kill[RdPtr] & ~(|stbuf_dma_kill_en[DEPTH-1:0]);  // Don't drain if some kill bit is being set this cycle
-   assign stbuf_addr_any[pt.LSU_SB_BITS-1:0]  = stbuf_addr[RdPtr][pt.LSU_SB_BITS-1:0];
-   assign stbuf_data_any[DATA_WIDTH-1:0]      = stbuf_data[RdPtr][DATA_WIDTH-1:0];
-
-   // Update the RdPtr/WrPtr logic
-   // Need to revert the WrPtr for flush cases. Also revert the pipe WrPtrs
-   assign WrPtrEn                  = (ldst_stbuf_reqvld_r  & ~dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r))  |  // writing 1 and did not coalesce
-                                     (ldst_stbuf_reqvld_r  &  dual_stbuf_write_r & ~(store_coalesce_hi_r & store_coalesce_lo_r));    // writing 2 and atleast 1 did not coalesce
-   assign NxtWrPtr[DEPTH_LOG2-1:0] = (ldst_stbuf_reqvld_r & dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r)) ? WrPtrPlus2[DEPTH_LOG2-1:0] : WrPtrPlus1[DEPTH_LOG2-1:0];
-   assign RdPtrEn                  = lsu_stbuf_commit_any | stbuf_reqvld_flushed_any;
-   assign NxtRdPtr[DEPTH_LOG2-1:0] = RdPtrPlus1[DEPTH_LOG2-1:0];
-
-   always_comb begin
-      stbuf_numvld_any[3:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_numvld_any[3:0] += {3'b0, stbuf_vld[i]};
-      end
-   end
-
-    // These go to store buffer to detect full
-   assign isdccmst_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_in_dccm_m & ~lsu_pkt_m.dma;
-   assign isdccmst_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~lsu_pkt_r.dma;
-
-   assign stbuf_specvld_m[1:0] = {1'b0,isdccmst_m} << (isdccmst_m & ldst_dual_m);
-   assign stbuf_specvld_r[1:0] = {1'b0,isdccmst_r} << (isdccmst_r & ldst_dual_r);
-   assign stbuf_specvld_any[3:0] = stbuf_numvld_any[3:0] +  {2'b0, stbuf_specvld_m[1:0]} + {2'b0, stbuf_specvld_r[1:0]};
-
-   assign lsu_stbuf_full_any  = (~ldst_dual_d & dec_lsu_valid_raw_d) ? (stbuf_specvld_any[3:0] >= DEPTH) : (stbuf_specvld_any[3:0] >= (DEPTH-1));
-   assign lsu_stbuf_empty_any = (stbuf_numvld_any[3:0] == 4'b0);
-
-   // Load forwarding logic from the store queue
-   assign cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = end_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   assign cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = lsu_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   always_comb begin: GenLdFwd
-      stbuf_fwdbyteen_hi_pre_m[BYTE_WIDTH-1:0]   = '0;
-      stbuf_fwdbyteen_lo_pre_m[BYTE_WIDTH-1:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_match_hi[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-         stbuf_match_lo[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-
-         // Kill the store buffer entry if there is a dma store since it already updated the dccm
-         stbuf_dma_kill_en[i] = (stbuf_match_hi[i] | stbuf_match_lo[i]) & lsu_pkt_m.valid & lsu_pkt_m.dma & lsu_pkt_m.store;
-
-         for (int j=0; j<BYTE_WIDTH; j++) begin
-            stbuf_fwdbyteenvec_hi[i][j] = stbuf_match_hi[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_hi_pre_m[j]  |= stbuf_fwdbyteenvec_hi[i][j];
-
-            stbuf_fwdbyteenvec_lo[i][j] = stbuf_match_lo[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_lo_pre_m[j]  |= stbuf_fwdbyteenvec_lo[i][j];
-         end
-      end
-   end // block: GenLdFwd
-
-   always_comb begin: GenLdData
-      stbuf_fwddata_hi_pre_m[31:0]   = '0;
-      stbuf_fwddata_lo_pre_m[31:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_fwddata_hi_pre_m[31:0] |= {32{stbuf_match_hi[i]}} & stbuf_data[i][31:0];
-         stbuf_fwddata_lo_pre_m[31:0] |= {32{stbuf_match_lo[i]}} & stbuf_data[i][31:0];
-
-      end
-
-   end // block: GenLdData
-
-   // Create Hi/Lo signals - needed for the pipe forwarding
-   assign ldst_byteen_r[7:0] =  ({8{lsu_pkt_r.by}}    & 8'b0000_0001) |
-                                 ({8{lsu_pkt_r.half}}  & 8'b0000_0011) |
-                                 ({8{lsu_pkt_r.word}}  & 8'b0000_1111) |
-                                 ({8{lsu_pkt_r.dword}} & 8'b1111_1111);
-
-   assign ldst_byteen_ext_r[7:0] = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-
-   for (genvar i=0; i<BYTE_WIDTH; i++) begin
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-       assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-       assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign stbuf_fwdbyteen_hi_m[i] = ld_byte_hit_hi[i] | stbuf_fwdbyteen_hi_pre_m[i];
-      assign stbuf_fwdbyteen_lo_m[i] = ld_byte_hit_lo[i] | stbuf_fwdbyteen_lo_pre_m[i];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_lo_m[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : stbuf_fwddata_lo_pre_m[(8*i)+7:(8*i)];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_hi_m[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : stbuf_fwddata_hi_pre_m[(8*i)+7:(8*i)];
-   end
-
-   // Flops
-   rvdffs #(.WIDTH(DEPTH_LOG2)) WrPtrff (.din(NxtWrPtr[DEPTH_LOG2-1:0]), .dout(WrPtr[DEPTH_LOG2-1:0]), .en(WrPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-   rvdffs #(.WIDTH(DEPTH_LOG2)) RdPtrff (.din(NxtRdPtr[DEPTH_LOG2-1:0]), .dout(RdPtr[DEPTH_LOG2-1:0]), .en(RdPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU Trigger logic
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_trigger
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,            // trigger packet from dec
-   input eb1_lsu_pkt_t           lsu_pkt_m,                  // lsu packet
-   input logic [31:0]             lsu_addr_m,                 // address
-   input logic [31:0]             store_data_m,               // store data
-
-   output logic [3:0]             lsu_trigger_match_m         // match result
-);
-
-   logic               trigger_enable;
-   logic [3:0][31:0]  lsu_match_data;
-   logic [3:0]        lsu_trigger_data_match;
-   logic [31:0]       store_data_trigger_m;
-   logic [31:0]       ldst_addr_trigger_m;
-
-   // Generate the trigger enable (This is for power)
-   always_comb begin
-      trigger_enable = 1'b0;
-      for (int i=0; i<4; i++) begin
-         trigger_enable |= trigger_pkt_any[i].m;
-      end
-   end
-
-   assign store_data_trigger_m[31:0] = {({16{lsu_pkt_m.word}} & store_data_m[31:16]),({8{(lsu_pkt_m.half | lsu_pkt_m.word)}} & store_data_m[15:8]), store_data_m[7:0]} & {32{trigger_enable}};
-   assign ldst_addr_trigger_m[31:0]  = lsu_addr_m[31:0] & {32{trigger_enable}};
-
-
-   for (genvar i=0; i<4; i++) begin
-      assign lsu_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select}} & ldst_addr_trigger_m[31:0]) |
-                                       ({32{trigger_pkt_any[i].select & trigger_pkt_any[i].store}} & store_data_trigger_m[31:0]);
-
-      rvmaskandmatch trigger_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(lsu_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(lsu_trigger_data_match[i]));
-
-      assign lsu_trigger_match_m[i] = lsu_pkt_m.valid & ~lsu_pkt_m.dma & trigger_enable &
-                                        ((trigger_pkt_any[i].store & lsu_pkt_m.store) | (trigger_pkt_any[i].load & lsu_pkt_m.load & ~trigger_pkt_any[i].select)) &
-                                        lsu_trigger_data_match[i];
-   end
-
-
-endmodule // eb1_lsu_trigger
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License
-
-module rvjtag_tap #(
-parameter AWIDTH = 7
-)
-(
-input               trst,
-input               tck,
-input               tms,
-input               tdi,
-output   reg        tdo,
-output              tdoEnable,
-
-output [31:0]       wr_data,
-output [AWIDTH-1:0] wr_addr,
-output              wr_en,
-output              rd_en,
-
-input   [31:0]      rd_data,
-input   [1:0]       rd_status,
-
-output  reg         dmi_reset,
-output  reg         dmi_hard_reset,
-
-input   [2:0]       idle,
-input   [1:0]       dmi_stat,
-/*
---  revisionCode        : 4'h0;
---  manufacturersIdCode : 11'h45;
---  deviceIdCode        : 16'h0001;
---  order MSB .. LSB -> [4 bit version or revision] [16 bit part number] [11 bit manufacturer id] [value of 1'b1 in LSB]
-*/
-input   [31:1]      jtag_id,
-input   [3:0]       version
-);
-
-localparam USER_DR_LENGTH = AWIDTH + 34;
-
-
-reg [USER_DR_LENGTH-1:0] sr, nsr, dr;
-
-///////////////////////////////////////////////////////
-//                      Tap controller
-///////////////////////////////////////////////////////
-logic[3:0] state, nstate;
-logic [4:0] ir;
-wire jtag_reset;
-wire shift_dr;
-wire pause_dr;
-wire update_dr;
-wire capture_dr;
-wire shift_ir;
-wire pause_ir ;
-wire update_ir ;
-wire capture_ir;
-wire[1:0] dr_en;
-wire devid_sel;
-wire [5:0] abits;
-
-assign abits = AWIDTH[5:0];
-
-
-localparam TEST_LOGIC_RESET_STATE = 0;
-localparam RUN_TEST_IDLE_STATE    = 1;
-localparam SELECT_DR_SCAN_STATE   = 2;
-localparam CAPTURE_DR_STATE       = 3;
-localparam SHIFT_DR_STATE         = 4;
-localparam EXIT1_DR_STATE         = 5;
-localparam PAUSE_DR_STATE         = 6;
-localparam EXIT2_DR_STATE         = 7;
-localparam UPDATE_DR_STATE        = 8;
-localparam SELECT_IR_SCAN_STATE   = 9;
-localparam CAPTURE_IR_STATE       = 10;
-localparam SHIFT_IR_STATE         = 11;
-localparam EXIT1_IR_STATE         = 12;
-localparam PAUSE_IR_STATE         = 13;
-localparam EXIT2_IR_STATE         = 14;
-localparam UPDATE_IR_STATE        = 15;
-
-always_comb  begin
-    nstate = state;
-    case(state)
-    TEST_LOGIC_RESET_STATE: nstate = tms ? TEST_LOGIC_RESET_STATE : RUN_TEST_IDLE_STATE;
-    RUN_TEST_IDLE_STATE:    nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_DR_SCAN_STATE:   nstate = tms ? SELECT_IR_SCAN_STATE   : CAPTURE_DR_STATE;
-    CAPTURE_DR_STATE:       nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    SHIFT_DR_STATE:         nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    EXIT1_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : PAUSE_DR_STATE;
-    PAUSE_DR_STATE:         nstate = tms ? EXIT2_DR_STATE         : PAUSE_DR_STATE;
-    EXIT2_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : SHIFT_DR_STATE;
-    UPDATE_DR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_IR_SCAN_STATE:   nstate = tms ? TEST_LOGIC_RESET_STATE : CAPTURE_IR_STATE;
-    CAPTURE_IR_STATE:       nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    SHIFT_IR_STATE:         nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    EXIT1_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : PAUSE_IR_STATE;
-    PAUSE_IR_STATE:         nstate = tms ? EXIT2_IR_STATE         : PAUSE_IR_STATE;
-    EXIT2_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : SHIFT_IR_STATE;
-    UPDATE_IR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    default:                nstate = TEST_LOGIC_RESET_STATE;
-    endcase
-end
-
-always @ (posedge tck or negedge trst) begin
-    if(!trst) state <= TEST_LOGIC_RESET_STATE;
-    else state <= nstate;
-end
-
-assign jtag_reset = state == TEST_LOGIC_RESET_STATE;
-assign shift_dr   = state == SHIFT_DR_STATE;
-assign pause_dr   = state == PAUSE_DR_STATE;
-assign update_dr  = state == UPDATE_DR_STATE;
-assign capture_dr = state == CAPTURE_DR_STATE;
-assign shift_ir   = state == SHIFT_IR_STATE;
-assign pause_ir   = state == PAUSE_IR_STATE;
-assign update_ir  = state == UPDATE_IR_STATE;
-assign capture_ir = state == CAPTURE_IR_STATE;
-
-assign tdoEnable = shift_dr | shift_ir;
-
-///////////////////////////////////////////////////////
-//                      IR register
-///////////////////////////////////////////////////////
-
-always @ (negedge tck or negedge trst) begin
-   if (!trst) ir <= 5'b1;
-   else begin
-      if (jtag_reset) ir <= 5'b1;
-      else if (update_ir) ir <= (sr[4:0] == '0) ? 5'h1f :sr[4:0];
-   end
-end
-
-
-assign devid_sel  = ir == 5'b00001;
-assign dr_en[0]   = ir == 5'b10000;
-assign dr_en[1]   = ir == 5'b10001;
-
-///////////////////////////////////////////////////////
-//                      Shift register
-///////////////////////////////////////////////////////
-always @ (posedge tck or negedge trst) begin
-    if(!trst)begin
-        sr <= '0;
-    end
-    else begin
-        sr <= nsr;
-    end
-end
-
-// SR next value
-always_comb begin
-    nsr = sr;
-    case(1)
-    shift_dr:   begin
-                    case(1)
-                    dr_en[1]:   nsr = {tdi, sr[USER_DR_LENGTH-1:1]};
-
-                    dr_en[0],
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}},tdi, sr[31:1]};
-                    default:    nsr = {{USER_DR_LENGTH-1{1'b0}},tdi}; // bypass
-                    endcase
-                end
-    capture_dr: begin
-                    nsr[0] = 1'b0;
-                    case(1)
-                    dr_en[0]:   nsr = {{USER_DR_LENGTH-15{1'b0}}, idle, dmi_stat, abits, version};
-                    dr_en[1]:   nsr = {{AWIDTH{1'b0}}, rd_data, rd_status};
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}}, jtag_id, 1'b1};
-                    endcase
-                end
-    shift_ir:   nsr = {{USER_DR_LENGTH-5{1'b0}},tdi, sr[4:1]};
-    capture_ir: nsr = {{USER_DR_LENGTH-1{1'b0}},1'b1};
-    endcase
-end
-
-// TDO retiming
-always @ (negedge tck ) tdo <= sr[0];
-
-// DMI CS register
-always @ (posedge tck or negedge trst) begin
-    if(!trst) begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-    else if (update_dr & dr_en[0]) begin
-        dmi_hard_reset <= sr[17];
-        dmi_reset      <= sr[16];
-    end
-    else begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-end
-
-// DR register
-always @ (posedge tck or negedge trst) begin
-    if(!trst)
-        dr <=  '0;
-    else begin
-        if (update_dr & dr_en[1])
-            dr <= sr;
-        else
-            dr <= {dr[USER_DR_LENGTH-1:2],2'b0};
-    end
-end
-
-assign {wr_addr, wr_data, wr_en, rd_en} = dr;
-
-
-
-
-endmodule
-
-module eb1_btb_tag_hash 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-}) (
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-endmodule
-
-module eb1_btb_tag_hash_fold  
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-
-endmodule
-
-module eb1_btb_addr_hash  
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-                        input logic [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO] pc,
-                        output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hash
-                        );
-
-
-if(pt.BTB_FOLD2_INDEX_HASH) begin : fold2
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-   else begin
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX2_HI:pt.BTB_INDEX2_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-
-endmodule
-
-module eb1_btb_ghr_hash 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-                       input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hashin,
-                       input logic [pt.BHT_GHR_SIZE-1:0] ghr,
-                       output logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] hash
-                       );
-
-   // The hash function is too complex to write in verilog for all cases.
-   // The config script generates the logic string based on the bp config.
-   if(pt.BHT_GHR_HASH_1) begin : ghrhash_cfg1
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { ghr[pt.BHT_GHR_SIZE-1:pt.BTB_INDEX1_HI-1], hashin[pt.BTB_INDEX1_HI:2]^ghr[pt.BTB_INDEX1_HI-2:0]};
-   end
-   else begin : ghrhash_cfg2
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { hashin[pt.BHT_GHR_SIZE+1:2]^ghr[pt.BHT_GHR_SIZE-1:0]};
-   end
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// all flops call the rvdff flop
-
-//// `include "common_defines.vh"
-module rvdff #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic                   rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-
-
-   always_ff @(posedge clk or negedge rst_l) begin
-      if (rst_l == 0)
-        dout[WIDTH-1:0] <= 0;
-      else
-        dout[WIDTH-1:0] <= din[WIDTH-1:0];
-   end
-
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-   rvdff #(WIDTH) dffs (.din((en) ? din[WIDTH-1:0] : dout[WIDTH-1:0]), .*);
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   assign din_new = {WIDTH{~clear}} & (en ? din[WIDTH-1:0] : dout[WIDTH-1:0]);
-   rvdff #(WIDTH) dffsc (.din(din_new[WIDTH-1:0]), .*);
-end
-endmodule
-
-// _fpga versions
-module rvdff_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-    rvdff #(WIDTH)  dff (.*);
-end
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-   rvdffs #(WIDTH)   dffs (.*);
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic             clk,
-     input logic             clken,
-     input logic             rawclk,
-     input logic             rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   rvdffsc #(WIDTH)   dffsc (.*);
-end
-endmodule
-
-
-module rvdffe #( parameter WIDTH=1, SHORT=0, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic           en,
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-
-if (SHORT == 1) begin : genblock
-   if (1) begin : genblock
-      assign dout = din;
-   end
-end
-else begin : genblock
-
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-
-end // else: !if(SHORT == 1)
-
-endmodule // rvdffe
-
-
-module rvdffpcie #( parameter WIDTH=31 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-
-      rvdfflie #(.WIDTH(WIDTH), .LEFT(19)) dff (.*);
-
-endmodule
-
-// format: { LEFT, EXTRA }
-// LEFT # of bits will be done with rvdffie, all else EXTRA with rvdffe
-module rvdfflie #( parameter WIDTH=16, LEFT=8 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam EXTRA = WIDTH-LEFT;
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam XMSB = LLSB-1;
-   localparam XLSB = LLSB-EXTRA;
-
-
-
-
-      rvdffiee #(LEFT)  dff_left  (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-
-      rvdffe  #(EXTRA)  dff_extra (.*, .din(din[XMSB:XLSB]), .dout(dout[XMSB:XLSB]));
-
-endmodule
-
-
-
-
-// special power flop for predict packet
-// format: { LEFT, RIGHT==31 }
-// LEFT # of bits will be done with rvdffe; RIGHT is enabled by LEFT[LSB] & en
-module rvdffppe #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam RIGHT = 31;
-   localparam LEFT = WIDTH - RIGHT;
-
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam RMSB = LLSB-1;
-   localparam RLSB = LLSB-RIGHT;
-
-
-
-
-
-      rvdffe #(LEFT)     dff_left (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-      rvdffe #(RIGHT)   dff_right (.*, .din(din[RMSB:RLSB]), .dout(dout[RMSB:RLSB]), .en(en & din[LLSB]));  // qualify with pret
-
-endmodule
-
-
-
-
-module rvdffie #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      en;
-
-
-
-
-
-
-
-
-
-      assign en = |(din ^ dout);
-
-
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-
-
-
-
-endmodule
-
-// ie flop but it has an .en input
-module rvdffiee #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic           scan_mode,
-     input  logic           en,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      final_en;
-
-
-
-      assign final_en = (|(din ^ dout)) & en;
-
-
-      rvdffe #(WIDTH) dff (.*,  .en(final_en));
-
-
-
-endmodule
-
-
-
-module rvsyncss #(parameter WIDTH = 251)
-   (
-     input  logic                 clk,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff #(WIDTH) sync_ff1  (.*, .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff #(WIDTH) sync_ff2  (.*, .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvsyncss_fpga #(parameter WIDTH = 251)
-   (
-     input  logic                 gw_clk,
-     input  logic                 rawclk,
-     input  logic                 clken,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff_fpga #(WIDTH) sync_ff1  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff_fpga #(WIDTH) sync_ff2  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvlsadder
-  (
-    input logic [31:0] rs1,
-    input logic [11:0] offset,
-
-    output logic [31:0] dout
-    );
-
-   logic                cout;
-   logic                sign;
-
-   logic [31:12]        rs1_inc;
-   logic [31:12]        rs1_dec;
-
-   assign {cout,dout[11:0]} = {1'b0,rs1[11:0]} + {1'b0,offset[11:0]};
-
-   assign rs1_inc[31:12] = rs1[31:12] + 1;
-
-   assign rs1_dec[31:12] = rs1[31:12] - 1;
-
-   assign sign = offset[11];
-
-   assign dout[31:12] = ({20{  sign ^~  cout}} &     rs1[31:12]) |
-                        ({20{ ~sign &   cout}}  & rs1_inc[31:12]) |
-                        ({20{  sign &  ~cout}}  & rs1_dec[31:12]);
-
-endmodule // rvlsadder
-
-// assume we only maintain pc[31:1] in the pipe
-
-module rvbradder
-  (
-    input [31:1] pc,
-    input [12:1] offset,
-
-    output [31:1] dout
-    );
-
-   logic          cout;
-   logic          sign;
-
-   logic [31:13]  pc_inc;
-   logic [31:13]  pc_dec;
-
-   assign {cout,dout[12:1]} = {1'b0,pc[12:1]} + {1'b0,offset[12:1]};
-
-   assign pc_inc[31:13] = pc[31:13] + 1;
-
-   assign pc_dec[31:13] = pc[31:13] - 1;
-
-   assign sign = offset[12];
-
-
-   assign dout[31:13] = ({19{  sign ^~  cout}} &     pc[31:13]) |
-                        ({19{ ~sign &   cout}}  & pc_inc[31:13]) |
-                        ({19{  sign &  ~cout}}  & pc_dec[31:13]);
-
-
-endmodule // rvbradder
-
-
-// 2s complement circuit
-module rvtwoscomp #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:1]          dout_temp;   // holding for all other bits except for the lsb. LSB is always din
-
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : flip_after_first_one
-      assign dout_temp[i] = (|din[i-1:0]) ? ~din[i] : din[i];
-   end : flip_after_first_one
-
-   assign dout[WIDTH-1:0]  = { dout_temp[WIDTH-1:1], din[0] };
-
-endmodule  // 2'scomp
-
-// find first
-module rvfindfirst1 #( parameter WIDTH=32, SHIFT=$clog2(WIDTH) )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [SHIFT-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[SHIFT-1:0] = {SHIFT{1'b0}};
-      done    = 1'b0;
-
-      for ( int i = WIDTH-1; i > 0; i-- )  begin : find_first_one
-         done |= din[i];
-         dout[SHIFT-1:0] += done ? 1'b0 : 1'b1;
-      end : find_first_one
-   end
-endmodule // rvfindfirst1
-
-module rvfindfirst1hot #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[WIDTH-1:0] = {WIDTH{1'b0}};
-      done    = 1'b0;
-      for ( int i = 0; i < WIDTH; i++ )  begin : find_first_one
-         dout[i] = ~done & din[i];
-         done   |= din[i];
-      end : find_first_one
-   end
-endmodule // rvfindfirst1hot
-
-// mask and match function matches bits after finding the first 0 position
-// find first starting from LSB. Skip that location and match the rest of the bits
-module rvmaskandmatch #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] mask,     // this will have the mask in the lower bit positions
-     input  logic [WIDTH-1:0] data,     // this is what needs to be matched on the upper bits with the mask's upper bits
-     input  logic             masken,   // when 1 : do mask. 0 : full match
-     output logic             match
-     );
-
-   logic [WIDTH-1:0]          matchvec;
-   logic                      masken_or_fullmask;
-
-   assign masken_or_fullmask = masken &  ~(&mask[WIDTH-1:0]);
-
-   assign matchvec[0]        = masken_or_fullmask | (mask[0] == data[0]);
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : match_after_first_zero
-      assign matchvec[i] = (&mask[i-1:0] & masken_or_fullmask) ? 1'b1 : (mask[i] == data[i]);
-   end : match_after_first_zero
-
-   assign match  = &matchvec[WIDTH-1:0];    // all bits either matched or were masked off
-
-endmodule // rvmaskandmatch
-
-
-
-
-// Check if the S_ADDR <= addr < E_ADDR
-module rvrangecheck  #(CCM_SADR = 32'h0,
-                       CCM_SIZE  = 128) (
-   input  logic [31:0]   addr,                             // Address to be checked for range
-   output logic          in_range,                            // S_ADDR <= start_addr < E_ADDR
-   output logic          in_region
-);
-
-   localparam REGION_BITS = 4;
-   localparam MASK_BITS = 10 + $clog2(CCM_SIZE);
-
-   logic [31:0]          start_addr;
-   logic [3:0]           region;
-
-   assign start_addr[31:0]        = CCM_SADR;
-   assign region[REGION_BITS-1:0] = start_addr[31:(32-REGION_BITS)];
-
-   assign in_region = (addr[31:(32-REGION_BITS)] == region[REGION_BITS-1:0]);
-   if (CCM_SIZE  == 48)
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]) & ~(&addr[MASK_BITS-1 : MASK_BITS-2]);
-   else
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]);
-
-endmodule  // rvrangechecker
-
-// 16 bit even parity generator
-module rveven_paritygen #(WIDTH = 16)  (
-                                         input  logic [WIDTH-1:0]  data_in,         // Data
-                                         output logic              parity_out       // generated even parity
-                                         );
-
-   assign  parity_out =  ^(data_in[WIDTH-1:0]) ;
-
-endmodule  // rveven_paritygen
-
-module rveven_paritycheck #(WIDTH = 16)  (
-                                           input  logic [WIDTH-1:0]  data_in,         // Data
-                                           input  logic              parity_in,
-                                           output logic              parity_err       // Parity error
-                                           );
-
-   assign  parity_err =  ^(data_in[WIDTH-1:0]) ^ parity_in ;
-
-endmodule  // rveven_paritycheck
-
-module rvecc_encode  (
-                      input [31:0] din,
-                      output [6:0] ecc_out
-                      );
-logic [5:0] ecc_out_temp;
-
-   assign ecc_out_temp[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_out_temp[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_out_temp[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_out_temp[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   assign ecc_out[6:0] = {(^din[31:0])^(^ecc_out_temp[5:0]),ecc_out_temp[5:0]};
-
-endmodule // rvecc_encode
-
-module rvecc_decode  (
-                      input         en,
-                      input [31:0]  din,
-                      input [6:0]   ecc_in,
-                      input         sed_ded,    // only do detection and no correction. Used for the I$
-                      output [31:0] dout,
-                      output [6:0]  ecc_out,
-                      output        single_ecc_error,
-                      output        double_ecc_error
-
-                      );
-
-   logic [6:0]                      ecc_check;
-   logic [38:0]                     error_mask;
-   logic [38:0]                     din_plus_parity, dout_plus_parity;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   // This is the parity bit
-   assign ecc_check[6] = ((^din[31:0])^(^ecc_in[6:0])) & ~sed_ded;
-
-   assign single_ecc_error = en & (ecc_check[6:0] != 0) & ecc_check[6];   // this will never be on for sed_ded
-   assign double_ecc_error = en & (ecc_check[6:0] != 0) & ~ecc_check[6];  // all errors in the sed_ded case will be recorded as DE
-
-   // Generate the mask for error correctiong
-   for (genvar i=1; i<40; i++) begin
-      assign error_mask[i-1] = (ecc_check[5:0] == i);
-   end
-
-   // Generate the corrected data
-   assign din_plus_parity[38:0] = {ecc_in[6], din[31:26], ecc_in[5], din[25:11], ecc_in[4], din[10:4], ecc_in[3], din[3:1], ecc_in[2], din[0], ecc_in[1:0]};
-
-   assign dout_plus_parity[38:0] = single_ecc_error ? (error_mask[38:0] ^ din_plus_parity[38:0]) : din_plus_parity[38:0];
-   assign dout[31:0]             = {dout_plus_parity[37:32], dout_plus_parity[30:16], dout_plus_parity[14:8], dout_plus_parity[6:4], dout_plus_parity[2]};
-   assign ecc_out[6:0]           = {(dout_plus_parity[38] ^ (ecc_check[6:0] == 7'b1000000)), dout_plus_parity[31], dout_plus_parity[15], dout_plus_parity[7], dout_plus_parity[3], dout_plus_parity[1:0]};
-
-endmodule // rvecc_decode
-
-module rvecc_encode_64  (
-                      input [63:0] din,
-                      output [6:0] ecc_out
-                      );
-  assign ecc_out[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_out[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_out[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_out[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[6] = din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-endmodule // rvecc_encode_64
-
-
-module rvecc_decode_64  (
-                      input         en,
-                      input [63:0]  din,
-                      input [6:0]   ecc_in,
-                      output        ecc_error
-                      );
-
-   logic [6:0]                      ecc_check;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[6] = ecc_in[6]^din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_error = en & (ecc_check[6:0] != 0);  // all errors in the sed_ded case will be recorded as DE
-
- endmodule // rvecc_decode_64
-
-// Skywater cell
-//sky130_fd_sc_hd__dlclkp_1 CG( .CLK(clk), .GCLK(l1clk), .GATE(en_i | test_en_i));
-
-
-/*module `TEC_RV_ICG 
-  (
-   input logic SE, EN, CK,
-   output Q
-   );
-
-   logic  en_ff;
-   logic  enable;
-
-   assign      enable = EN | SE;
-
-`ifdef VERILATOR
-   always @(negedge CK) begin
-      en_ff <= enable;
-   end
-`else
-   always @(CK, enable) begin
-      if(!CK)
-        en_ff = enable;
-   end
-`endif
-   assign Q = CK & en_ff;
-
-endmodule
-*/
-
-
-module rvclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .CLK(clk), .GCLK(l1clk), .GATE(en)); /*clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));*/
-
-endmodule // rvclkhdr
-
-
-module rvoclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .CLK(clk), .GCLK(l1clk), .GATE(en)); //clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));
-
-
-endmodule
-
-
-
-
-
-
-
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/Defines/common_defines.vh b/verilog/rtl/BrqRV_EB1/design/Defines/common_defines.vh
deleted file mode 100644
index 9e581ff..0000000
--- a/verilog/rtl/BrqRV_EB1/design/Defines/common_defines.vh
+++ /dev/null
@@ -1,247 +0,0 @@
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-`define RV_ROOT "/home/hshabbir/caravel_BrqRV_EB1/verilog/rtl/BrqRV_EB1"
-`define RV_RET_STACK_SIZE 8
-`define RV_EXT_ADDRWIDTH 32
-`define RV_STERR_ROLLBACK 0
-`define SDVT_AHB 0
-`define RV_EXT_DATAWIDTH 64
-`define RV_LDERR_ROLLBACK 1
-`define CLOCK_PERIOD 100
-`define RV_ASSERT_ON 
-`define RV_BUILD_AXI4 1
-`define TOP tb_top
-`define RV_BUILD_AXI_NATIVE 1
-`define CPU_TOP `RV_TOP.brqrv
-`define RV_TOP `TOP.rvtop
-`define RV_UNUSED_REGION2 'h70000000
-`define RV_EXTERNAL_DATA 'hd0580000
-`define RV_SERIALIO 'he0580000
-`define RV_UNUSED_REGION7 'h20000000
-`define RV_UNUSED_REGION5 'h40000000
-`define RV_DEBUG_SB_MEM 'hb0580000
-`define RV_EXTERNAL_DATA_1 'hc0000000
-`define RV_UNUSED_REGION0 'h90000000
-`define RV_UNUSED_REGION3 'h60000000
-`define RV_UNUSED_REGION9 'h00000000
-`define RV_UNUSED_REGION8 'h10000000
-`define RV_UNUSED_REGION6 'h30000000
-`define RV_UNUSED_REGION1 'h80000000
-`define RV_UNUSED_REGION4 'h50000000
-`define RV_BHT_ADDR_LO 2
-`define RV_BHT_SIZE 256
-`define RV_BHT_GHR_HASH_1 
-`define RV_BHT_GHR_SIZE 7
-`define RV_BHT_ADDR_HI 8
-`define RV_BHT_HASH_STRING {hashin[7+1:2]^ghr[7-1:0]}// cf2
-`define RV_BHT_ARRAY_DEPTH 128
-`define RV_BHT_GHR_RANGE 6:0
-`define RV_INST_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK3 'hffffffff
-`define RV_INST_ACCESS_MASK7 'hffffffff
-`define RV_DATA_ACCESS_MASK0 'hffffffff
-`define RV_INST_ACCESS_ADDR6 'h00000000
-`define RV_INST_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_ENABLE6 1'h0
-`define RV_INST_ACCESS_ENABLE5 1'h0
-`define RV_DATA_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ENABLE1 1'h0
-`define RV_DATA_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_ADDR3 'h00000000
-`define RV_INST_ACCESS_ADDR7 'h00000000
-`define RV_INST_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_MASK2 'hffffffff
-`define RV_INST_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_ADDR2 'h00000000
-`define RV_INST_ACCESS_ENABLE2 1'h0
-`define RV_INST_ACCESS_ADDR1 'h00000000
-`define RV_INST_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ADDR6 'h00000000
-`define RV_DATA_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK0 'hffffffff
-`define RV_DATA_ACCESS_MASK7 'hffffffff
-`define RV_INST_ACCESS_MASK3 'hffffffff
-`define RV_DATA_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_ADDR3 'h00000000
-`define RV_DATA_ACCESS_ADDR7 'h00000000
-`define RV_DATA_ACCESS_ENABLE5 1'h0
-`define RV_INST_ACCESS_ENABLE6 1'h0
-`define RV_DATA_ACCESS_ENABLE1 1'h0
-`define RV_INST_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_MASK2 'hffffffff
-`define RV_DATA_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR2 'h00000000
-`define RV_DATA_ACCESS_ADDR1 'h00000000
-`define RV_DATA_ACCESS_ENABLE2 1'h0
-`define RV_ICCM_BITS 12
-`define RV_ICCM_OFFSET 10'h0ffff000
-`define RV_ICCM_SIZE_4 
-`define RV_ICCM_BANK_BITS 2
-`define RV_ICCM_ENABLE 1
-`define RV_ICCM_SADR 32'haffff000
-`define RV_ICCM_DATA_CELL ram_256x39
-`define RV_ICCM_EADR 32'hafffffff
-`define RV_ICCM_RESERVED 'h400
-`define RV_ICCM_REGION 4'ha
-`define RV_ICCM_SIZE 4
-`define RV_ICCM_BANK_HI 3
-`define RV_ICCM_BANK_INDEX_LO 4
-`define RV_ICCM_ROWS 256
-`define RV_ICCM_INDEX_BITS 8
-`define RV_ICCM_NUM_BANKS 4
-`define RV_ICCM_NUM_BANKS_4 
-`define TEC_RV_ICG clockhdr
-`define RV_LSU2DMA 0
-`define RV_LSU_NUM_NBLOAD_WIDTH 2
-`define RV_ICCM_ONLY 1
-`define RV_BITMANIP_ZBC 0
-`define RV_BITMANIP_ZBS 0
-`define RV_FPGA_OPTIMIZE 0
-`define RV_LSU_NUM_NBLOAD 4
-`define RV_DIV_BIT 3
-`define RV_DIV_NEW 1
-`define RV_DMA_BUF_DEPTH 5
-`define RV_FAST_INTERRUPT_REDIRECT 1
-`define RV_BITMANIP_ZBP 0
-`define RV_BITMANIP_ZBA 0
-`define RV_LSU_STBUF_DEPTH 4
-`define RV_BITMANIP_ZBB 0
-`define RV_BITMANIP_ZBR 0
-`define RV_BITMANIP_ZBE 0
-`define RV_TIMER_LEGAL_EN 1
-`define RV_BITMANIP_ZBF 0
-`define REGWIDTH 32
-`define RV_CONFIG_KEY 32'hdeadbeef
-`define RV_BTB_INDEX1_HI 8
-`define RV_BTB_SIZE 256
-`define RV_BTB_BTAG_SIZE 6
-`define RV_BTB_FOLD2_INDEX_HASH 0
-`define RV_BTB_INDEX3_LO 16
-`define RV_BTB_INDEX2_HI 15
-`define RV_BTB_ARRAY_DEPTH 128
-`define RV_BTB_INDEX1_LO 2
-`define RV_BTB_ADDR_LO 2
-`define RV_BTB_INDEX3_HI 22
-`define RV_BTB_ADDR_HI 8
-`define RV_BTB_TOFFSET_SIZE 12
-`define RV_BTB_INDEX2_LO 9
-`define RV_BTB_BTAG_FOLD 0
-`define RV_BTB_ENABLE 1
-`define RV_XLEN 32
-`define RV_IFU_BUS_TAG 3
-`define RV_LSU_BUS_ID 1
-`define RV_IFU_BUS_PRTY 2
-`define RV_LSU_BUS_TAG 3
-`define RV_IFU_BUS_ID 1
-`define RV_SB_BUS_PRTY 2
-`define RV_LSU_BUS_PRTY 2
-`define RV_DMA_BUS_ID 1
-`define RV_SB_BUS_ID 1
-`define RV_BUS_PRTY_DEFAULT 2'h3
-`define RV_DMA_BUS_PRTY 2
-`define RV_SB_BUS_TAG 1
-`define RV_DMA_BUS_TAG 1
-`define RV_ICACHE_TAG_NUM_BYPASS 2
-`define RV_ICACHE_STATUS_BITS 1
-`define RV_ICACHE_BEAT_ADDR_HI 5
-`define RV_ICACHE_SCND_LAST 6
-`define RV_ICACHE_TAG_LO 13
-`define RV_ICACHE_BANK_WIDTH 8
-`define RV_ICACHE_DATA_CELL ram_512x71
-`define RV_ICACHE_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_WAYPACK 1
-`define RV_ICACHE_LN_SZ 64
-`define RV_ICACHE_NUM_BEATS 8
-`define RV_ICACHE_NUM_LINES_WAY 128
-`define RV_ICACHE_NUM_LINES_BANK 64
-`define RV_ICACHE_TAG_DEPTH 128
-`define RV_ICACHE_DATA_DEPTH 512
-`define RV_ICACHE_DATA_WIDTH 64
-`define RV_ICACHE_TAG_CELL ram_128x25
-`define RV_ICACHE_NUM_BYPASS 2
-`define RV_ICACHE_FDATA_WIDTH 71
-`define RV_ICACHE_NUM_LINES 256
-`define RV_ICACHE_DATA_INDEX_LO 4
-`define RV_ICACHE_BANK_BITS 1
-`define RV_ICACHE_TAG_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_2BANKS 1
-`define RV_ICACHE_BANKS_WAY 2
-`define RV_ICACHE_BANK_LO 3
-`define RV_ICACHE_ECC 1
-`define RV_ICACHE_INDEX_HI 12
-`define RV_ICACHE_TAG_INDEX_LO 6
-`define RV_ICACHE_TAG_BYPASS_ENABLE 1
-`define RV_ICACHE_BANK_HI 3
-`define RV_ICACHE_BEAT_BITS 3
-`define RV_ICACHE_BYPASS_ENABLE 1
-`define RV_ICACHE_NUM_WAYS 2
-`define RV_ICACHE_SIZE 16
-`define RV_NMI_VEC 'h11110000
-`define RV_DCCM_EADR 32'hf0040fff
-`define RV_DCCM_SIZE 4
-`define RV_DCCM_REGION 4'hf
-`define RV_DCCM_RESERVED 'h400
-`define RV_DCCM_INDEX_BITS 8
-`define RV_DCCM_ROWS 256
-`define RV_DCCM_FDATA_WIDTH 39
-`define RV_DCCM_NUM_BANKS_4 
-`define RV_DCCM_NUM_BANKS 4
-`define RV_DCCM_BITS 12
-`define RV_DCCM_DATA_WIDTH 32
-`define RV_DCCM_SIZE_4 
-`define RV_DCCM_OFFSET 28'h40000
-`define RV_DCCM_WIDTH_BITS 2
-`define RV_DCCM_BYTE_WIDTH 4
-`define RV_DCCM_ENABLE 1
-`define RV_DCCM_ECC_WIDTH 7
-`define RV_DCCM_BANK_BITS 2
-`define RV_DCCM_DATA_CELL ram_256x39
-`define RV_DCCM_SADR 32'hf0040000
-`define RV_LSU_SB_BITS 12
-`define RV_RESET_VEC 'haffff000
-`define RV_PIC_BITS 15
-`define RV_PIC_MEIGWCTRL_OFFSET 'h4000
-`define RV_PIC_MEIGWCTRL_MASK 'h3
-`define RV_PIC_MEIGWCLR_OFFSET 'h5000
-`define RV_PIC_MEIE_MASK 'h1
-`define RV_PIC_MEIP_MASK 'h0
-`define RV_PIC_MEIPT_COUNT 31
-`define RV_PIC_MEIPL_COUNT 31
-`define RV_PIC_MEIPT_MASK 'h0
-`define RV_PIC_BASE_ADDR 32'hf00c0000
-`define RV_PIC_MEIPL_MASK 'hf
-`define RV_PIC_INT_WORDS 1
-`define RV_PIC_MPICCFG_MASK 'h1
-`define RV_PIC_MEIPT_OFFSET 'h3004
-`define RV_PIC_TOTAL_INT_PLUS1 32
-`define RV_PIC_MEIPL_OFFSET 'h0000
-`define RV_PIC_MEIE_COUNT 31
-`define RV_PIC_MEIGWCTRL_COUNT 31
-`define RV_PIC_REGION 4'hf
-`define RV_PIC_MEIGWCLR_MASK 'h0
-`define RV_PIC_SIZE 32
-`define RV_PIC_MEIE_OFFSET 'h2000
-`define RV_PIC_MPICCFG_OFFSET 'h3000
-`define RV_PIC_MPICCFG_COUNT 1
-`define RV_PIC_MEIP_OFFSET 'h1000
-`define RV_PIC_TOTAL_INT 31
-`define RV_PIC_OFFSET 10'hc0000
-`define RV_PIC_MEIGWCLR_COUNT 31
-`define RV_PIC_MEIP_COUNT 1
-`define RV_TARGET default
-`define RV_NUMIREGS 32
-`undef RV_ASSERT_ON
diff --git a/verilog/rtl/BrqRV_EB1/design/Defines/eb1_param.vh b/verilog/rtl/BrqRV_EB1/design/Defines/eb1_param.vh
deleted file mode 100644
index 77adbc4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/Defines/eb1_param.vh
+++ /dev/null
@@ -1,175 +0,0 @@
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-}
-// parameter eb1_param_t pt = 2271'h0404020000E0200000000000008081000030400040081E090B040100060210C00000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC103020401C213840103C3C01000000040818428042010840830C2010281840200081002008E0C0801004040800C01002100400606810104100C080C080200810A0AFFFF00000102101800000000000000000000000000000000000000000000000000000000000000000000000000000000007FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF8001080C080818080007806000003C043C04003E02008084021
diff --git a/verilog/rtl/BrqRV_EB1/design/Defines/eb1_pdef.vh b/verilog/rtl/BrqRV_EB1/design/Defines/eb1_pdef.vh
deleted file mode 100644
index af6de1e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/Defines/eb1_pdef.vh
+++ /dev/null
@@ -1,175 +0,0 @@
-typedef struct packed {
-	bit [7:0]      BHT_ADDR_HI;
-	bit [5:0]      BHT_ADDR_LO;
-	bit [14:0]     BHT_ARRAY_DEPTH;
-	bit [4:0]      BHT_GHR_HASH_1;
-	bit [7:0]      BHT_GHR_SIZE;
-	bit [15:0]     BHT_SIZE;
-	bit [4:0]      BITMANIP_ZBA;
-	bit [4:0]      BITMANIP_ZBB;
-	bit [4:0]      BITMANIP_ZBC;
-	bit [4:0]      BITMANIP_ZBE;
-	bit [4:0]      BITMANIP_ZBF;
-	bit [4:0]      BITMANIP_ZBP;
-	bit [4:0]      BITMANIP_ZBR;
-	bit [4:0]      BITMANIP_ZBS;
-	bit [8:0]      BTB_ADDR_HI;
-	bit [5:0]      BTB_ADDR_LO;
-	bit [12:0]     BTB_ARRAY_DEPTH;
-	bit [4:0]      BTB_BTAG_FOLD;
-	bit [8:0]      BTB_BTAG_SIZE;
-	bit [4:0]      BTB_ENABLE;
-	bit [4:0]      BTB_FOLD2_INDEX_HASH;
-	bit [4:0]      BTB_FULLYA;
-	bit [8:0]      BTB_INDEX1_HI;
-	bit [8:0]      BTB_INDEX1_LO;
-	bit [8:0]      BTB_INDEX2_HI;
-	bit [8:0]      BTB_INDEX2_LO;
-	bit [8:0]      BTB_INDEX3_HI;
-	bit [8:0]      BTB_INDEX3_LO;
-	bit [13:0]     BTB_SIZE;
-	bit [8:0]      BTB_TOFFSET_SIZE;
-	bit            BUILD_AHB_LITE;
-	bit [4:0]      BUILD_AXI4;
-	bit [4:0]      BUILD_AXI_NATIVE;
-	bit [5:0]      BUS_PRTY_DEFAULT;
-	bit [35:0]     DATA_ACCESS_ADDR0;
-	bit [35:0]     DATA_ACCESS_ADDR1;
-	bit [35:0]     DATA_ACCESS_ADDR2;
-	bit [35:0]     DATA_ACCESS_ADDR3;
-	bit [35:0]     DATA_ACCESS_ADDR4;
-	bit [35:0]     DATA_ACCESS_ADDR5;
-	bit [35:0]     DATA_ACCESS_ADDR6;
-	bit [35:0]     DATA_ACCESS_ADDR7;
-	bit [4:0]      DATA_ACCESS_ENABLE0;
-	bit [4:0]      DATA_ACCESS_ENABLE1;
-	bit [4:0]      DATA_ACCESS_ENABLE2;
-	bit [4:0]      DATA_ACCESS_ENABLE3;
-	bit [4:0]      DATA_ACCESS_ENABLE4;
-	bit [4:0]      DATA_ACCESS_ENABLE5;
-	bit [4:0]      DATA_ACCESS_ENABLE6;
-	bit [4:0]      DATA_ACCESS_ENABLE7;
-	bit [35:0]     DATA_ACCESS_MASK0;
-	bit [35:0]     DATA_ACCESS_MASK1;
-	bit [35:0]     DATA_ACCESS_MASK2;
-	bit [35:0]     DATA_ACCESS_MASK3;
-	bit [35:0]     DATA_ACCESS_MASK4;
-	bit [35:0]     DATA_ACCESS_MASK5;
-	bit [35:0]     DATA_ACCESS_MASK6;
-	bit [35:0]     DATA_ACCESS_MASK7;
-	bit [6:0]      DCCM_BANK_BITS;
-	bit [8:0]      DCCM_BITS;
-	bit [6:0]      DCCM_BYTE_WIDTH;
-	bit [9:0]      DCCM_DATA_WIDTH;
-	bit [6:0]      DCCM_ECC_WIDTH;
-	bit [4:0]      DCCM_ENABLE;
-	bit [9:0]      DCCM_FDATA_WIDTH;
-	bit [7:0]      DCCM_INDEX_BITS;
-	bit [8:0]      DCCM_NUM_BANKS;
-	bit [7:0]      DCCM_REGION;
-	bit [35:0]     DCCM_SADR;
-	bit [13:0]     DCCM_SIZE;
-	bit [5:0]      DCCM_WIDTH_BITS;
-	bit [6:0]      DIV_BIT;
-	bit [4:0]      DIV_NEW;
-	bit [6:0]      DMA_BUF_DEPTH;
-	bit [8:0]      DMA_BUS_ID;
-	bit [5:0]      DMA_BUS_PRTY;
-	bit [7:0]      DMA_BUS_TAG;
-	bit [4:0]      FAST_INTERRUPT_REDIRECT;
-	bit [4:0]      ICACHE_2BANKS;
-	bit [6:0]      ICACHE_BANK_BITS;
-	bit [6:0]      ICACHE_BANK_HI;
-	bit [5:0]      ICACHE_BANK_LO;
-	bit [7:0]      ICACHE_BANK_WIDTH;
-	bit [6:0]      ICACHE_BANKS_WAY;
-	bit [7:0]      ICACHE_BEAT_ADDR_HI;
-	bit [7:0]      ICACHE_BEAT_BITS;
-	bit [4:0]      ICACHE_BYPASS_ENABLE;
-	bit [17:0]     ICACHE_DATA_DEPTH;
-	bit [6:0]      ICACHE_DATA_INDEX_LO;
-	bit [10:0]     ICACHE_DATA_WIDTH;
-	bit [4:0]      ICACHE_ECC;
-	bit [4:0]      ICACHE_ENABLE;
-	bit [10:0]     ICACHE_FDATA_WIDTH;
-	bit [8:0]      ICACHE_INDEX_HI;
-	bit [10:0]     ICACHE_LN_SZ;
-	bit [7:0]      ICACHE_NUM_BEATS;
-	bit [7:0]      ICACHE_NUM_BYPASS;
-	bit [7:0]      ICACHE_NUM_BYPASS_WIDTH;
-	bit [6:0]      ICACHE_NUM_WAYS;
-	bit [4:0]      ICACHE_ONLY;
-	bit [7:0]      ICACHE_SCND_LAST;
-	bit [12:0]     ICACHE_SIZE;
-	bit [6:0]      ICACHE_STATUS_BITS;
-	bit [4:0]      ICACHE_TAG_BYPASS_ENABLE;
-	bit [16:0]     ICACHE_TAG_DEPTH;
-	bit [6:0]      ICACHE_TAG_INDEX_LO;
-	bit [8:0]      ICACHE_TAG_LO;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS_WIDTH;
-	bit [4:0]      ICACHE_WAYPACK;
-	bit [6:0]      ICCM_BANK_BITS;
-	bit [8:0]      ICCM_BANK_HI;
-	bit [8:0]      ICCM_BANK_INDEX_LO;
-	bit [8:0]      ICCM_BITS;
-	bit [4:0]      ICCM_ENABLE;
-	bit [4:0]      ICCM_ICACHE;
-	bit [7:0]      ICCM_INDEX_BITS;
-	bit [8:0]      ICCM_NUM_BANKS;
-	bit [4:0]      ICCM_ONLY;
-	bit [7:0]      ICCM_REGION;
-	bit [35:0]     ICCM_SADR;
-	bit [13:0]     ICCM_SIZE;
-	bit [4:0]      IFU_BUS_ID;
-	bit [5:0]      IFU_BUS_PRTY;
-	bit [7:0]      IFU_BUS_TAG;
-	bit [35:0]     INST_ACCESS_ADDR0;
-	bit [35:0]     INST_ACCESS_ADDR1;
-	bit [35:0]     INST_ACCESS_ADDR2;
-	bit [35:0]     INST_ACCESS_ADDR3;
-	bit [35:0]     INST_ACCESS_ADDR4;
-	bit [35:0]     INST_ACCESS_ADDR5;
-	bit [35:0]     INST_ACCESS_ADDR6;
-	bit [35:0]     INST_ACCESS_ADDR7;
-	bit [4:0]      INST_ACCESS_ENABLE0;
-	bit [4:0]      INST_ACCESS_ENABLE1;
-	bit [4:0]      INST_ACCESS_ENABLE2;
-	bit [4:0]      INST_ACCESS_ENABLE3;
-	bit [4:0]      INST_ACCESS_ENABLE4;
-	bit [4:0]      INST_ACCESS_ENABLE5;
-	bit [4:0]      INST_ACCESS_ENABLE6;
-	bit [4:0]      INST_ACCESS_ENABLE7;
-	bit [35:0]     INST_ACCESS_MASK0;
-	bit [35:0]     INST_ACCESS_MASK1;
-	bit [35:0]     INST_ACCESS_MASK2;
-	bit [35:0]     INST_ACCESS_MASK3;
-	bit [35:0]     INST_ACCESS_MASK4;
-	bit [35:0]     INST_ACCESS_MASK5;
-	bit [35:0]     INST_ACCESS_MASK6;
-	bit [35:0]     INST_ACCESS_MASK7;
-	bit [4:0]      LOAD_TO_USE_PLUS1;
-	bit [4:0]      LSU2DMA;
-	bit [4:0]      LSU_BUS_ID;
-	bit [5:0]      LSU_BUS_PRTY;
-	bit [7:0]      LSU_BUS_TAG;
-	bit [8:0]      LSU_NUM_NBLOAD;
-	bit [6:0]      LSU_NUM_NBLOAD_WIDTH;
-	bit [8:0]      LSU_SB_BITS;
-	bit [7:0]      LSU_STBUF_DEPTH;
-	bit [4:0]      NO_ICCM_NO_ICACHE;
-	bit [4:0]      PIC_2CYCLE;
-	bit [35:0]     PIC_BASE_ADDR;
-	bit [8:0]      PIC_BITS;
-	bit [7:0]      PIC_INT_WORDS;
-	bit [7:0]      PIC_REGION;
-	bit [12:0]     PIC_SIZE;
-	bit [11:0]     PIC_TOTAL_INT;
-	bit [12:0]     PIC_TOTAL_INT_PLUS1;
-	bit [7:0]      RET_STACK_SIZE;
-	bit [4:0]      SB_BUS_ID;
-	bit [5:0]      SB_BUS_PRTY;
-	bit [7:0]      SB_BUS_TAG;
-	bit [4:0]      TIMER_LEGAL_EN;
-} eb1_param_t;
-
diff --git a/verilog/rtl/BrqRV_EB1/design/Defines/pd_defines.vh b/verilog/rtl/BrqRV_EB1/design/Defines/pd_defines.vh
deleted file mode 100644
index 0b9763c..0000000
--- a/verilog/rtl/BrqRV_EB1/design/Defines/pd_defines.vh
+++ /dev/null
@@ -1,11 +0,0 @@
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-
-`include "common_defines.vh"
-`undef RV_ASSERT_ON
-`undef TEC_RV_ICG
-`define TEC_RV_ICG sky130_fd_sc_hd__dlclkp_1
-`define RV_PHYSICAL 1
diff --git a/verilog/rtl/BrqRV_EB1/design/ahb_to_axi4.sv b/verilog/rtl/BrqRV_EB1/design/ahb_to_axi4.sv
deleted file mode 100644
index 190ed8b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ahb_to_axi4.sv
+++ /dev/null
@@ -1,289 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AHB to AXI4 Bridge
-// Comments:
-//
-//********************************************************************************
-module ahb_to_axi4
-import eb1_pkg::*;
-#(
-   TAG = 1,
-   `include "eb1_param.vh"
-)
-//   ,TAG  = 1)
-(
-   input                   clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-
-   // AXI signals
-   // AXI Write Channels
-   output logic            axi_awvalid,
-   input  logic            axi_awready,
-   output logic [TAG-1:0]  axi_awid,
-   output logic [31:0]     axi_awaddr,
-   output logic [2:0]      axi_awsize,
-   output logic [2:0]      axi_awprot,
-   output logic [7:0]      axi_awlen,
-   output logic [1:0]      axi_awburst,
-
-   output logic            axi_wvalid,
-   input  logic            axi_wready,
-   output logic [63:0]     axi_wdata,
-   output logic [7:0]      axi_wstrb,
-   output logic            axi_wlast,
-
-   input  logic            axi_bvalid,
-   output logic            axi_bready,
-   input  logic [1:0]      axi_bresp,
-   input  logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   output logic            axi_arvalid,
-   input  logic            axi_arready,
-   output logic [TAG-1:0]  axi_arid,
-   output logic [31:0]     axi_araddr,
-   output logic [2:0]      axi_arsize,
-   output logic [2:0]      axi_arprot,
-   output logic [7:0]      axi_arlen,
-   output logic [1:0]      axi_arburst,
-
-   input  logic            axi_rvalid,
-   output logic            axi_rready,
-   input  logic [TAG-1:0]  axi_rid,
-   input  logic [63:0]     axi_rdata,
-   input  logic [1:0]      axi_rresp,
-
-   // AHB-Lite signals
-   input logic [31:0]      ahb_haddr,     // ahb bus address
-   input logic [2:0]       ahb_hburst,    // tied to 0
-   input logic             ahb_hmastlock, // tied to 0
-   input logic [3:0]       ahb_hprot,     // tied to 4'b0011
-   input logic [2:0]       ahb_hsize,     // size of bus transaction (possible values 0,1,2,3)
-   input logic [1:0]       ahb_htrans,    // Transaction type (possible values 0,2 only right now)
-   input logic             ahb_hwrite,    // ahb bus write
-   input logic [63:0]      ahb_hwdata,    // ahb bus write data
-   input logic             ahb_hsel,      // this slave was selected
-   input logic             ahb_hreadyin,  // previous hready was accepted or not
-
-   output logic [63:0]      ahb_hrdata,      // ahb bus read data
-   output logic             ahb_hreadyout,   // slave ready to accept transaction
-   output logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   logic [7:0]       master_wstrb;
-
- typedef enum logic [1:0] {   IDLE   = 2'b00,    // Nothing in the buffer. No commands yet recieved
-                              WR     = 2'b01,    // Write Command recieved
-                              RD     = 2'b10,    // Read Command recieved
-                              PEND   = 2'b11     // Waiting on Read Data from core
-                            } state_t;
-   state_t      buf_state, buf_nxtstate;
-   logic        buf_state_en;
-
-   // Buffer signals (one entry buffer)
-   logic                    buf_read_error_in, buf_read_error;
-   logic [63:0]             buf_rdata;
-
-   logic                    ahb_hready;
-   logic                    ahb_hready_q;
-   logic [1:0]              ahb_htrans_in, ahb_htrans_q;
-   logic [2:0]              ahb_hsize_q;
-   logic                    ahb_hwrite_q;
-   logic [31:0]             ahb_haddr_q;
-   logic [63:0]             ahb_hwdata_q;
-   logic                    ahb_hresp_q;
-
-    //Miscellaneous signals
-   logic                    ahb_addr_in_dccm, ahb_addr_in_iccm, ahb_addr_in_pic;
-   logic                    ahb_addr_in_dccm_region_nc, ahb_addr_in_iccm_region_nc, ahb_addr_in_pic_region_nc;
-   // signals needed for the read data coming back from the core and to block any further commands as AHB is a blocking bus
-   logic                    buf_rdata_en;
-
-   logic                    ahb_addr_clk_en, buf_rdata_clk_en;
-   logic                    bus_clk, ahb_addr_clk, buf_rdata_clk;
-   // Command buffer is the holding station where we convert to AXI and send to core
-   logic                    cmdbuf_wr_en, cmdbuf_rst;
-   logic                    cmdbuf_full;
-   logic                    cmdbuf_vld, cmdbuf_write;
-   logic [1:0]              cmdbuf_size;
-   logic [7:0]              cmdbuf_wstrb;
-   logic [31:0]             cmdbuf_addr;
-   logic [63:0]             cmdbuf_wdata;
-
-// FSM to control the bus states and when to block the hready and load the command buffer
-   always_comb begin
-      buf_nxtstate      = IDLE;
-      buf_state_en      = 1'b0;
-      buf_rdata_en      = 1'b0;              // signal to load the buffer when the core sends read data back
-      buf_read_error_in = 1'b0;              // signal indicating that an error came back with the read from the core
-      cmdbuf_wr_en      = 1'b0;              // all clear from the gasket to load the buffer with the command for reads, command/dat for writes
-      case (buf_state)
-         IDLE: begin  // No commands recieved
-                  buf_nxtstate      = ahb_hwrite ? WR : RD;
-                  buf_state_en      = ahb_hready & ahb_htrans[1] & ahb_hsel;                 // only transition on a valid hrtans
-          end
-         WR: begin // Write command recieved last cycle
-                  buf_nxtstate      = (ahb_hresp | (ahb_htrans[1:0] == 2'b0) | ~ahb_hsel) ? IDLE : ahb_hwrite  ? WR : RD;
-                  buf_state_en      = (~cmdbuf_full | ahb_hresp) ;
-                  cmdbuf_wr_en      = ~cmdbuf_full & ~(ahb_hresp | ((ahb_htrans[1:0] == 2'b01) & ahb_hsel));   // Dont send command to the buffer in case of an error or when the master is not ready with the data now.
-         end
-         RD: begin // Read command recieved last cycle.
-                 buf_nxtstate      = ahb_hresp ? IDLE :PEND;                                       // If error go to idle, else wait for read data
-                 buf_state_en      = (~cmdbuf_full | ahb_hresp);                                   // only when command can go, or if its an error
-                 cmdbuf_wr_en      = ~ahb_hresp & ~cmdbuf_full;                                    // send command only when no error
-         end
-         PEND: begin // Read Command has been sent. Waiting on Data.
-                 buf_nxtstate      = IDLE;                                                          // go back for next command and present data next cycle
-                 buf_state_en      = axi_rvalid & ~cmdbuf_write;                                    // read data is back
-                 buf_rdata_en      = buf_state_en;                                                  // buffer the read data coming back from core
-                 buf_read_error_in = buf_state_en & |axi_rresp[1:0];                                // buffer error flag if return has Error ( ECC )
-         end
-     endcase
-   end // always_comb begin
-
-    rvdffs_fpga #($bits(state_t)) state_reg (.*, .din(buf_nxtstate), .dout({buf_state}), .en(buf_state_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk));
-
-   assign master_wstrb[7:0]   = ({8{ahb_hsize_q[2:0] == 3'b0}}  & (8'b1    << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b1}}  & (8'b11   << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b10}} & (8'b1111 << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b11}} & 8'b1111_1111);
-
-   // AHB signals
-   assign ahb_hreadyout       = ahb_hresp ? (ahb_hresp_q & ~ahb_hready_q) :
-                                         ((~cmdbuf_full | (buf_state == IDLE)) & ~(buf_state == RD | buf_state == PEND)  & ~buf_read_error);
-
-   assign ahb_hready          = ahb_hreadyout & ahb_hreadyin;
-   assign ahb_htrans_in[1:0]  = {2{ahb_hsel}} & ahb_htrans[1:0];
-   assign ahb_hrdata[63:0]    = buf_rdata[63:0];
-   assign ahb_hresp        = ((ahb_htrans_q[1:0] != 2'b0) & (buf_state != IDLE)  &
-
-                             ((~(ahb_addr_in_dccm | ahb_addr_in_iccm)) |                                                                                   // request not for ICCM or DCCM
-                             ((ahb_addr_in_iccm | (ahb_addr_in_dccm &  ahb_hwrite_q)) & ~((ahb_hsize_q[1:0] == 2'b10) | (ahb_hsize_q[1:0] == 2'b11))) |    // ICCM Rd/Wr OR DCCM Wr not the right size
-                             ((ahb_hsize_q[2:0] == 3'h1) & ahb_haddr_q[0])   |                                                                             // HW size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h2) & (|ahb_haddr_q[1:0])) |                                                                          // W size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h3) & (|ahb_haddr_q[2:0])))) |                                                                        // DW size but unaligned
-                             buf_read_error |                                                                                                              // Read ECC error
-                             (ahb_hresp_q & ~ahb_hready_q);
-
-   // Buffer signals - needed for the read data and ECC error response
-   rvdff_fpga  #(.WIDTH(64)) buf_rdata_ff     (.din(axi_rdata[63:0]),   .dout(buf_rdata[63:0]), .clk(buf_rdata_clk), .clken(buf_rdata_clk_en), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))  buf_read_error_ff(.din(buf_read_error_in), .dout(buf_read_error),  .clk(bus_clk),       .clken(bus_clk_en),       .rawclk(clk), .*);          // buf_read_error will be high only one cycle
-
-   // All the Master signals are captured before presenting it to the command buffer. We check for Hresp before sending it to the cmd buffer.
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),          .dout(ahb_hresp_q),       .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),         .dout(ahb_hready_q),      .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans_in[1:0]), .dout(ahb_htrans_q[1:0]), .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(3))  hsize_ff  (.din(ahb_hsize[2:0]),     .dout(ahb_hsize_q[2:0]),  .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),         .dout(ahb_hwrite_q),      .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(32)) haddr_ff  (.din(ahb_haddr[31:0]),    .dout(ahb_haddr_q[31:0]), .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-
-   // Address check  dccm
-   rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                  .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_dccm),
-      .in_region(ahb_addr_in_dccm_region_nc)
-   );
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE == 1) begin: GenICCM
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(ahb_haddr_q[31:0]),
-         .in_range(ahb_addr_in_iccm),
-         .in_region(ahb_addr_in_iccm_region_nc)
-      );
-   end else begin: GenNoICCM
-      assign ahb_addr_in_iccm = '0;
-      assign ahb_addr_in_iccm_region_nc = '0;
-   end
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_pic),
-      .in_region(ahb_addr_in_pic_region_nc)
-   );
-
-   // Command Buffer - Holding for the commands to be sent for the AXI. It will be converted to the AXI signals.
-   assign cmdbuf_rst         = (((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)) & ~cmdbuf_wr_en) | (ahb_hresp & ~cmdbuf_write);
-   assign cmdbuf_full        = (cmdbuf_vld & ~((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)));
-
-   rvdffsc_fpga #(.WIDTH(1))  cmdbuf_vldff      (.din(1'b1),              .dout(cmdbuf_vld),         .en(cmdbuf_wr_en), .clear(cmdbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(1))  cmdbuf_writeff    (.din(ahb_hwrite_q),      .dout(cmdbuf_write),       .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(2))  cmdbuf_sizeff     (.din(ahb_hsize_q[1:0]),  .dout(cmdbuf_size[1:0]),   .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))  cmdbuf_wstrbff    (.din(master_wstrb[7:0]), .dout(cmdbuf_wstrb[7:0]),  .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32)) cmdbuf_addrff     (.din(ahb_haddr_q[31:0]), .dout(cmdbuf_addr[31:0]),  .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffe       #(.WIDTH(64)) cmdbuf_wdataff    (.din(ahb_hwdata[63:0]),  .dout(cmdbuf_wdata[63:0]), .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-
-   // AXI Write Command Channel
-   assign axi_awvalid           = cmdbuf_vld & cmdbuf_write;
-   assign axi_awid[TAG-1:0]     = '0;
-   assign axi_awaddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_awsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_awprot[2:0]       = 3'b0;
-   assign axi_awlen[7:0]        = '0;
-   assign axi_awburst[1:0]      = 2'b01;
-   // AXI Write Data Channel - This is tied to the command channel as we only write the command buffer once we have the data.
-   assign axi_wvalid            = cmdbuf_vld & cmdbuf_write;
-   assign axi_wdata[63:0]       = cmdbuf_wdata[63:0];
-   assign axi_wstrb[7:0]        = cmdbuf_wstrb[7:0];
-   assign axi_wlast             = 1'b1;
-  // AXI Write Response - Always ready. AHB does not require a write response.
-   assign axi_bready            = 1'b1;
-   // AXI Read Channels
-   assign axi_arvalid           = cmdbuf_vld & ~cmdbuf_write;
-   assign axi_arid[TAG-1:0]     = '0;
-   assign axi_araddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_arsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_arprot            = 3'b0;
-   assign axi_arlen[7:0]        = '0;
-   assign axi_arburst[1:0]      = 2'b01;
-   // AXI Read Response Channel - Always ready as AHB reads are blocking and the the buffer is available for the read coming back always.
-   assign axi_rready            = 1'b1;
-
-   // Clock header logic
-   assign ahb_addr_clk_en = bus_clk_en & (ahb_hready & ahb_htrans[1]);
-   assign buf_rdata_clk_en    = bus_clk_en & buf_rdata_en;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign bus_clk = 1'b0;
-   assign ahb_addr_clk = 1'b0;
-   assign buf_rdata_clk = 1'b0;
-`else
-   rvclkhdr bus_cgc       (.en(bus_clk_en),       .l1clk(bus_clk),       .*);
-   rvclkhdr ahb_addr_cgc  (.en(ahb_addr_clk_en),  .l1clk(ahb_addr_clk),  .*);
-   rvclkhdr buf_rdata_cgc (.en(buf_rdata_clk_en), .l1clk(buf_rdata_clk), .*);
-`endif
-
-`ifdef RV_ASSERT_ON
-   property ahb_error_protocol;
-      @(posedge bus_clk) (ahb_hready & ahb_hresp) |-> (~$past(ahb_hready) & $past(ahb_hresp));
-   endproperty
-   assert_ahb_error_protocol: assert property (ahb_error_protocol) else
-      $display("Bus Error with hReady isn't preceded with Bus Error without hready");
-
-`endif
-
-endmodule // ahb_to_axi4
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/design/axi4_to_ahb.sv b/verilog/rtl/BrqRV_EB1/design/axi4_to_ahb.sv
deleted file mode 100644
index 18e5313..0000000
--- a/verilog/rtl/BrqRV_EB1/design/axi4_to_ahb.sv
+++ /dev/null
@@ -1,477 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AXI4 -> AHB Bridge
-// Comments:
-//
-//********************************************************************************
-module axi4_to_ahb
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-,parameter TAG  = 1) (
-
-   input                   clk,
-   input                   free_clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-   input                   dec_tlu_force_halt,
-
-   // AXI signals
-   // AXI Write Channels
-   input  logic            axi_awvalid,
-   output logic            axi_awready,
-   input  logic [TAG-1:0]  axi_awid,
-   input  logic [31:0]     axi_awaddr,
-   input  logic [2:0]      axi_awsize,
-   input  logic [2:0]      axi_awprot,
-
-   input  logic            axi_wvalid,
-   output logic            axi_wready,
-   input  logic [63:0]     axi_wdata,
-   input  logic [7:0]      axi_wstrb,
-   input  logic            axi_wlast,
-
-   output logic            axi_bvalid,
-   input  logic            axi_bready,
-   output logic [1:0]      axi_bresp,
-   output logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   input  logic            axi_arvalid,
-   output logic            axi_arready,
-   input  logic [TAG-1:0]  axi_arid,
-   input  logic [31:0]     axi_araddr,
-   input  logic [2:0]      axi_arsize,
-   input  logic [2:0]      axi_arprot,
-
-   output logic            axi_rvalid,
-   input  logic            axi_rready,
-   output logic [TAG-1:0]  axi_rid,
-   output logic [63:0]     axi_rdata,
-   output logic [1:0]      axi_rresp,
-   output logic            axi_rlast,
-
-   // AHB-Lite signals
-   output logic [31:0]     ahb_haddr,       // ahb bus address
-   output logic [2:0]      ahb_hburst,      // tied to 0
-   output logic            ahb_hmastlock,   // tied to 0
-   output logic [3:0]      ahb_hprot,       // tied to 4'b0011
-   output logic [2:0]      ahb_hsize,       // size of bus transaction (possible values 0,1,2,3)
-   output logic [1:0]      ahb_htrans,      // Transaction type (possible values 0,2 only right now)
-   output logic            ahb_hwrite,      // ahb bus write
-   output logic [63:0]     ahb_hwdata,      // ahb bus write data
-
-   input logic [63:0]      ahb_hrdata,      // ahb bus read data
-   input logic             ahb_hready,      // slave ready to accept transaction
-   input logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   localparam ID   = 1;
-   localparam PRTY = 1;
-   typedef enum logic [2:0] {IDLE=3'b000, CMD_RD=3'b001, CMD_WR=3'b010, DATA_RD=3'b011, DATA_WR=3'b100, DONE=3'b101, STREAM_RD=3'b110, STREAM_ERR_RD=3'b111} state_t;
-   state_t buf_state, buf_nxtstate;
-
-   logic             slave_valid;
-   logic             slave_ready;
-   logic [TAG-1:0]   slave_tag;
-   logic [63:0]      slave_rdata;
-   logic [3:0]       slave_opc;
-
-   logic             wrbuf_en, wrbuf_data_en;
-   logic             wrbuf_cmd_sent, wrbuf_rst;
-   logic             wrbuf_vld;
-   logic             wrbuf_data_vld;
-   logic [TAG-1:0]   wrbuf_tag;
-   logic [2:0]       wrbuf_size;
-   logic [31:0]      wrbuf_addr;
-   logic [63:0]      wrbuf_data;
-   logic [7:0]       wrbuf_byteen;
-
-   logic             master_valid;
-   logic             master_ready;
-   logic [TAG-1:0]   master_tag;
-   logic [31:0]      master_addr;
-   logic [63:0]      master_wdata;
-   logic [2:0]       master_size;
-   logic [2:0]       master_opc;
-   logic [7:0]       master_byteen;
-
-   // Buffer signals (one entry buffer)
-   logic [31:0]                buf_addr;
-   logic [1:0]                 buf_size;
-   logic                       buf_write;
-   logic [7:0]                 buf_byteen;
-   logic                       buf_aligned;
-   logic [63:0]                buf_data;
-   logic [TAG-1:0]             buf_tag;
-
-   //Miscellaneous signals
-   logic                       buf_rst;
-   logic [TAG-1:0]             buf_tag_in;
-   logic [31:0]                buf_addr_in;
-   logic [7:0]                 buf_byteen_in;
-   logic [63:0]                buf_data_in;
-   logic                       buf_write_in;
-   logic                       buf_aligned_in;
-   logic [2:0]                 buf_size_in;
-
-   logic                       buf_state_en;
-   logic                       buf_wr_en;
-   logic                       buf_data_wr_en;
-   logic                       slvbuf_error_en;
-   logic                       wr_cmd_vld;
-
-   logic                       cmd_done_rst, cmd_done, cmd_doneQ;
-   logic                       trxn_done;
-   logic [2:0]                 buf_cmd_byte_ptr, buf_cmd_byte_ptrQ, buf_cmd_nxtbyte_ptr;
-   logic                       buf_cmd_byte_ptr_en;
-   logic                       found;
-
-   logic                       slave_valid_pre;
-   logic                       ahb_hready_q;
-   logic                       ahb_hresp_q;
-   logic [1:0]                 ahb_htrans_q;
-   logic                       ahb_hwrite_q;
-   logic [63:0]                ahb_hrdata_q;
-
-
-   logic                       slvbuf_write;
-   logic                       slvbuf_error;
-   logic [TAG-1:0]             slvbuf_tag;
-
-   logic                       slvbuf_error_in;
-   logic                       slvbuf_wr_en;
-   logic                       bypass_en;
-   logic                       rd_bypass_idle;
-
-   logic                       last_addr_en;
-   logic [31:0]                last_bus_addr;
-
-   // Clocks
-   logic                       buf_clken;
-   logic                       ahbm_data_clken;
-
-   logic                       buf_clk;
-   logic                       bus_clk;
-   logic                       ahbm_data_clk;
-
-   logic                       dec_tlu_force_halt_bus, dec_tlu_force_halt_bus_ns, dec_tlu_force_halt_bus_q;
-
-   // Function to get the length from byte enable
-   function automatic logic [1:0] get_write_size;
-      input logic [7:0] byteen;
-
-      logic [1:0]       size;
-
-      size[1:0] = (2'b11 & {2{(byteen[7:0] == 8'hff)}}) |
-                  (2'b10 & {2{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h0f))}}) |
-                  (2'b01 & {2{((byteen[7:0] == 8'hc0) | (byteen[7:0] == 8'h30) | (byteen[7:0] == 8'h0c) | (byteen[7:0] == 8'h03))}});
-
-      return size[1:0];
-   endfunction // get_write_size
-
-   // Function to get the length from byte enable
-   function automatic logic [2:0] get_write_addr;
-      input logic [7:0] byteen;
-
-      logic [2:0]       addr;
-
-      addr[2:0] = (3'h0 & {3{((byteen[7:0] == 8'hff) | (byteen[7:0] == 8'h0f) | (byteen[7:0] == 8'h03))}}) |
-                  (3'h2 & {3{(byteen[7:0] == 8'h0c)}})                                                     |
-                  (3'h4 & {3{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h03))}})                          |
-                  (3'h6 & {3{(byteen[7:0] == 8'hc0)}});
-
-      return addr[2:0];
-   endfunction // get_write_addr
-
-   // Function to get the next byte pointer
-   function automatic logic [2:0] get_nxtbyte_ptr (logic [2:0] current_byte_ptr, logic [7:0] byteen, logic get_next);
-      logic [2:0] start_ptr;
-      logic       found;
-      found = '0;
-      //get_nxtbyte_ptr[2:0] = current_byte_ptr[2:0];
-      start_ptr[2:0] = get_next ? (current_byte_ptr[2:0] + 3'b1) : current_byte_ptr[2:0];
-      for (int j=0; j<8; j++) begin
-         if (~found) begin
-            get_nxtbyte_ptr[2:0] = 3'(j);
-            found |= (byteen[j] & (3'(j) >= start_ptr[2:0])) ;
-         end
-      end
-   endfunction // get_nextbyte_ptr
-
-   // Create bus synchronized version of force halt
-   assign dec_tlu_force_halt_bus = dec_tlu_force_halt | dec_tlu_force_halt_bus_q;
-   assign dec_tlu_force_halt_bus_ns = ~bus_clk_en & dec_tlu_force_halt_bus;
-   rvdff  #(.WIDTH(1))   force_halt_busff(.din(dec_tlu_force_halt_bus_ns), .dout(dec_tlu_force_halt_bus_q), .clk(free_clk), .*);
-
-   // Write buffer
-   assign wrbuf_en       = axi_awvalid & axi_awready & master_ready;
-   assign wrbuf_data_en  = axi_wvalid & axi_wready & master_ready;
-   assign wrbuf_cmd_sent = master_valid & master_ready & (master_opc[2:1] == 2'b01);
-   assign wrbuf_rst      = (wrbuf_cmd_sent & ~wrbuf_en) | dec_tlu_force_halt_bus;
-
-   assign axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_arready = ~(wrbuf_vld & wrbuf_data_vld) & master_ready;
-   assign axi_rlast   = 1'b1;
-
-   assign wr_cmd_vld          = (wrbuf_vld & wrbuf_data_vld);
-   assign master_valid        = wr_cmd_vld | axi_arvalid;
-   assign master_tag[TAG-1:0] = wr_cmd_vld ? wrbuf_tag[TAG-1:0] : axi_arid[TAG-1:0];
-   assign master_opc[2:0]     = wr_cmd_vld ? 3'b011 : 3'b0;
-   assign master_addr[31:0]   = wr_cmd_vld ? wrbuf_addr[31:0] : axi_araddr[31:0];
-   assign master_size[2:0]    = wr_cmd_vld ? wrbuf_size[2:0] : axi_arsize[2:0];
-   assign master_byteen[7:0]  = wrbuf_byteen[7:0];
-   assign master_wdata[63:0]  = wrbuf_data[63:0];
-
-   // AXI response channel signals
-   assign axi_bvalid       = slave_valid & slave_ready & slave_opc[3];
-   assign axi_bresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_bid[TAG-1:0] = slave_tag[TAG-1:0];
-
-   assign axi_rvalid       = slave_valid & slave_ready & (slave_opc[3:2] == 2'b0);
-   assign axi_rresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_rid[TAG-1:0] = slave_tag[TAG-1:0];
-   assign axi_rdata[63:0]  = slave_rdata[63:0];
-   assign slave_ready        = axi_bready & axi_rready;
-
- // FIFO state machine
-   always_comb begin
-      buf_nxtstate   = IDLE;
-      buf_state_en   = 1'b0;
-      buf_wr_en      = 1'b0;
-      buf_data_wr_en = 1'b0;
-      slvbuf_error_in   = 1'b0;
-      slvbuf_error_en   = 1'b0;
-      buf_write_in   = 1'b0;
-      cmd_done       = 1'b0;
-      trxn_done      = 1'b0;
-      buf_cmd_byte_ptr_en = 1'b0;
-      buf_cmd_byte_ptr[2:0] = '0;
-      slave_valid_pre   = 1'b0;
-      master_ready   = 1'b0;
-      ahb_htrans[1:0]  = 2'b0;
-      slvbuf_wr_en     = 1'b0;
-      bypass_en        = 1'b0;
-      rd_bypass_idle   = 1'b0;
-
-      case (buf_state)
-         IDLE: begin
-                  master_ready   = 1'b1;
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_nxtstate = buf_write_in ? CMD_WR : CMD_RD;
-                  buf_state_en = master_valid & master_ready;
-                  buf_wr_en    = buf_state_en;
-                  buf_data_wr_en = buf_state_en & (buf_nxtstate == CMD_WR);
-                  buf_cmd_byte_ptr_en   = buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = buf_write_in ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) : master_addr[2:0];
-                  bypass_en       = buf_state_en;
-                  rd_bypass_idle  = bypass_en & (buf_nxtstate == CMD_RD);
-                  ahb_htrans[1:0] = {2{bypass_en}} & 2'b10;
-          end
-         CMD_RD: begin
-                  buf_nxtstate    = (master_valid & (master_opc[2:0] == 3'b000))? STREAM_RD : DATA_RD;
-                  buf_state_en    = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  cmd_done        = buf_state_en & ~master_valid;
-                  slvbuf_wr_en    = buf_state_en;
-                  master_ready  = buf_state_en & (buf_nxtstate == STREAM_RD);
-                  buf_wr_en       = master_ready;
-                  bypass_en       = master_ready & master_valid;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en | bypass_en}};
-         end
-         STREAM_RD: begin
-                  master_ready  =  (ahb_hready_q & ~ahb_hresp_q) & ~(master_valid & master_opc[2:1] == 2'b01);
-                  buf_wr_en       = (master_valid & master_ready & (master_opc[2:0] == 3'b000)); // update the fifo if we are streaming the read commands
-                  buf_nxtstate    = ahb_hresp_q ? STREAM_ERR_RD : (buf_wr_en ? STREAM_RD : DATA_RD);            // assuming that the master accpets the slave response right away.
-                  buf_state_en    = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en  = buf_state_en;
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-                  slave_valid_pre  = buf_state_en & ~ahb_hresp_q;             // send a response right away if we are not going through an error response.
-                  cmd_done        = buf_state_en & ~master_valid;                     // last one of the stream should not send a htrans
-                  bypass_en       = master_ready & master_valid & (buf_nxtstate == STREAM_RD) & buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~((buf_nxtstate != STREAM_RD) & buf_state_en)}};
-                  slvbuf_wr_en    = buf_wr_en;                                         // shifting the contents from the buf to slv_buf for streaming cases
-         end // case: STREAM_RD
-         STREAM_ERR_RD: begin
-                  buf_nxtstate = DATA_RD;
-                  buf_state_en = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  slave_valid_pre = buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;     // Overwrite slvbuf with buffer
-                  buf_cmd_byte_ptr[2:0] = buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en}};
-         end
-         DATA_RD: begin
-                  buf_nxtstate   = DONE;
-                  buf_state_en   = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en = buf_state_en;
-                  slvbuf_error_in= ahb_hresp_q;
-                  slvbuf_error_en= buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;
-
-         end
-         CMD_WR: begin
-                  buf_nxtstate = DATA_WR;
-                  trxn_done    = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_state_en = trxn_done;
-                  buf_cmd_byte_ptr_en = buf_state_en;
-                  slvbuf_wr_en    = buf_state_en;
-                  buf_cmd_byte_ptr    = trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-                  cmd_done            = trxn_done & (buf_aligned | (buf_cmd_byte_ptrQ == 3'b111) |
-                                                     (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0));
-                  ahb_htrans[1:0] = {2{~(cmd_done | cmd_doneQ)}} & 2'b10;
-         end
-         DATA_WR: begin
-                  buf_state_en = (cmd_doneQ & ahb_hready_q) | ahb_hresp_q;
-                  master_ready = buf_state_en & ~ahb_hresp_q & slave_ready;   // Ready to accept new command if current command done and no error
-                  buf_nxtstate = (ahb_hresp_q | ~slave_ready) ? DONE :
-                                  ((master_valid & master_ready) ? ((master_opc[2:1] == 2'b01) ? CMD_WR : CMD_RD) : IDLE);
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_wr_en = buf_state_en & ((buf_nxtstate == CMD_WR) | (buf_nxtstate == CMD_RD));
-                  buf_data_wr_en = buf_wr_en;
-
-                  cmd_done     = (ahb_hresp_q | (ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) &
-                                 ((buf_cmd_byte_ptrQ == 3'b111) | (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0))));
-                  bypass_en       = buf_state_en & buf_write_in & (buf_nxtstate == CMD_WR);   // Only bypass for writes for the time being
-                  ahb_htrans[1:0] = {2{(~(cmd_done | cmd_doneQ) | bypass_en)}} & 2'b10;
-                  slave_valid_pre  = buf_state_en & (buf_nxtstate != DONE);
-
-                  trxn_done = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_cmd_byte_ptr_en = trxn_done | bypass_en;
-                  buf_cmd_byte_ptr = bypass_en ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) :
-                                                 trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-            end
-         DONE: begin
-                  buf_nxtstate = IDLE;
-                  buf_state_en = slave_ready;
-                  slvbuf_error_en = 1'b1;
-                  slave_valid_pre = 1'b1;
-         end
-      endcase
-   end
-
-   assign buf_rst              = dec_tlu_force_halt_bus;
-   assign cmd_done_rst         = slave_valid_pre;
-   assign buf_addr_in[31:3]    = master_addr[31:3];
-   assign buf_addr_in[2:0]     = (buf_aligned_in & (master_opc[2:1] == 2'b01)) ? get_write_addr(master_byteen[7:0]) : master_addr[2:0];
-   assign buf_tag_in[TAG-1:0]  = master_tag[TAG-1:0];
-   assign buf_byteen_in[7:0]   = wrbuf_byteen[7:0];
-   assign buf_data_in[63:0]    = (buf_state == DATA_RD) ? ahb_hrdata_q[63:0] : master_wdata[63:0];
-   assign buf_size_in[1:0]     = (buf_aligned_in & (master_size[1:0] == 2'b11) & (master_opc[2:1] == 2'b01)) ? get_write_size(master_byteen[7:0]) : master_size[1:0];
-   assign buf_aligned_in       = (master_opc[2:0] == 3'b0)    |   // reads are always aligned since they are either DW or sideeffects
-                                 (master_size[1:0] == 2'b0) |  (master_size[1:0] == 2'b01) | (master_size[1:0] == 2'b10) | // Always aligned for Byte/HW/Word since they can be only for non-idempotent. IFU/SB are always aligned
-                                 ((master_size[1:0] == 2'b11) &
-                                  ((master_byteen[7:0] == 8'h3)  | (master_byteen[7:0] == 8'hc)   | (master_byteen[7:0] == 8'h30) | (master_byteen[7:0] == 8'hc0) |
-                                   (master_byteen[7:0] == 8'hf)  | (master_byteen[7:0] == 8'hf0)  | (master_byteen[7:0] == 8'hff)));
-
-   // Generate the ahb signals
-   assign ahb_haddr[31:3] = bypass_en ? master_addr[31:3]  : buf_addr[31:3];
-   assign ahb_haddr[2:0]  = {3{(ahb_htrans == 2'b10)}} & buf_cmd_byte_ptr[2:0];    // Trxn should be aligned during IDLE
-   assign ahb_hsize[2:0]  = bypass_en ? {1'b0, ({2{buf_aligned_in}} & buf_size_in[1:0])} :
-                                        {1'b0, ({2{buf_aligned}} & buf_size[1:0])};   // Send the full size for aligned trxn
-   assign ahb_hburst[2:0] = 3'b0;
-   assign ahb_hmastlock   = 1'b0;
-   assign ahb_hprot[3:0]  = {3'b001,~axi_arprot[2]};
-   assign ahb_hwrite      = bypass_en ? (master_opc[2:1] == 2'b01) : buf_write;
-   assign ahb_hwdata[63:0] = buf_data[63:0];
-
-   assign slave_valid          = slave_valid_pre;// & (~slvbuf_posted_write | slvbuf_error);
-   assign slave_opc[3:2]       = slvbuf_write ? 2'b11 : 2'b00;
-   assign slave_opc[1:0]       = {2{slvbuf_error}} & 2'b10;
-   assign slave_rdata[63:0]    = slvbuf_error ? {2{last_bus_addr[31:0]}} : ((buf_state == DONE) ? buf_data[63:0] : ahb_hrdata_q[63:0]);
-   assign slave_tag[TAG-1:0]   = slvbuf_tag[TAG-1:0];
-
-   assign last_addr_en = (ahb_htrans[1:0] != 2'b0) & ahb_hready & ahb_hwrite ;
-
-
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_vldff     (.din(1'b1),              .dout(wrbuf_vld),          .en(wrbuf_en),      .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_data_vldff(.din(1'b1),              .dout(wrbuf_data_vld),     .en(wrbuf_data_en), .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(TAG)) wrbuf_tagff     (.din(axi_awid[TAG-1:0]), .dout(wrbuf_tag[TAG-1:0]), .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(3))   wrbuf_sizeff    (.din(axi_awsize[2:0]),   .dout(wrbuf_size[2:0]),    .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))  wrbuf_addrff    (.din(axi_awaddr[31:0]),  .dout(wrbuf_addr[31:0]),   .en(wrbuf_en & bus_clk_en),            .clk(clk), .*);
-   rvdffe       #(.WIDTH(64))  wrbuf_dataff    (.din(axi_wdata[63:0]),   .dout(wrbuf_data[63:0]),   .en(wrbuf_data_en & bus_clk_en),       .clk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))   wrbuf_byteenff  (.din(axi_wstrb[7:0]),    .dout(wrbuf_byteen[7:0]),  .en(wrbuf_data_en),                    .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffs_fpga #(.WIDTH(32))   last_bus_addrff (.din(ahb_haddr[31:0]),   .dout(last_bus_addr[31:0]), .en(last_addr_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH($bits(state_t))) buf_state_ff  (.din(buf_nxtstate),        .dout({buf_state}),      .en(buf_state_en), .clear(buf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_writeff   (.din(buf_write_in),        .dout(buf_write),        .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG))             buf_tagff     (.din(buf_tag_in[TAG-1:0]), .dout(buf_tag[TAG-1:0]), .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(32))              buf_addrff    (.din(buf_addr_in[31:0]),   .dout(buf_addr[31:0]),   .en(buf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))               buf_sizeff    (.din(buf_size_in[1:0]),    .dout(buf_size[1:0]),    .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_alignedff (.din(buf_aligned_in),      .dout(buf_aligned),      .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))               buf_byteenff  (.din(buf_byteen_in[7:0]),  .dout(buf_byteen[7:0]),  .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))              buf_dataff    (.din(buf_data_in[63:0]),   .dout(buf_data[63:0]),   .en(buf_data_wr_en & bus_clk_en),   .clk(clk), .*);
-
-
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_writeff  (.din(buf_write),        .dout(slvbuf_write),        .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG)) slvbuf_tagff    (.din(buf_tag[TAG-1:0]), .dout(slvbuf_tag[TAG-1:0]), .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_errorff  (.din(slvbuf_error_in),  .dout(slvbuf_error),        .en(slvbuf_error_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH(1)) buf_cmd_doneff     (.din(1'b1),                  .dout(cmd_doneQ),              .en(cmd_done),            .clear(cmd_done_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(3))  buf_cmd_byte_ptrff (.din(buf_cmd_byte_ptr[2:0]), .dout(buf_cmd_byte_ptrQ[2:0]), .en(buf_cmd_byte_ptr_en),                       .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),       .dout(ahb_hready_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans[1:0]),  .dout(ahb_htrans_q[1:0]),  .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),       .dout(ahb_hwrite_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),        .dout(ahb_hresp_q),        .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(64)) hrdata_ff (.din(ahb_hrdata[63:0]), .dout(ahb_hrdata_q[63:0]), .clk(ahbm_data_clk), .clken(ahbm_data_clken), .rawclk(clk), .*);
-
-   // Clock headers
-   // clock enables for ahbm addr/data
-   assign buf_clken       = bus_clk_en & (buf_wr_en | slvbuf_wr_en | clk_override);
-   assign ahbm_data_clken = bus_clk_en & ((buf_state != IDLE) | clk_override);
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign bus_clk = 1'b0;
-   assign buf_clk = 1'b0;
-   assign ahbm_data_clk = 1'b0;
-`else
-   rvclkhdr bus_cgc       (.en(bus_clk_en),      .l1clk(bus_clk),       .*);
-   rvclkhdr buf_cgc       (.en(buf_clken),       .l1clk(buf_clk), .*);
-   rvclkhdr ahbm_data_cgc (.en(ahbm_data_clken), .l1clk(ahbm_data_clk), .*);
-`endif
-
-`ifdef RV_ASSERT_ON
-   property ahb_trxn_aligned;
-     @(posedge bus_clk) ahb_htrans[1]  |-> ((ahb_hsize[2:0] == 3'h0)                              |
-                                        ((ahb_hsize[2:0] == 3'h1) & (ahb_haddr[0] == 1'b0))   |
-                                        ((ahb_hsize[2:0] == 3'h2) & (ahb_haddr[1:0] == 2'b0)) |
-                                        ((ahb_hsize[2:0] == 3'h3) & (ahb_haddr[2:0] == 3'b0)));
-   endproperty
-   assert_ahb_trxn_aligned: assert property (ahb_trxn_aligned) else
-     $display("Assertion ahb_trxn_aligned failed: ahb_htrans=2'h%h, ahb_hsize=3'h%h, ahb_haddr=32'h%h",ahb_htrans[1:0], ahb_hsize[2:0], ahb_haddr[31:0]);
-
-   property ahb_error_protocol;
-      @(posedge bus_clk) (ahb_hready & ahb_hresp) |-> (~$past(ahb_hready) & $past(ahb_hresp));
-   endproperty
-   assert_ahb_error_protocol: assert property (ahb_error_protocol) else
-      $display("Bus Error with hReady isn't preceded with Bus Error without hready");
-`endif
-
-endmodule // axi4_to_ahb
diff --git a/verilog/rtl/BrqRV_EB1/design/beh_lib.sv b/verilog/rtl/BrqRV_EB1/design/beh_lib.sv
deleted file mode 100644
index 1cffe5b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/beh_lib.sv
+++ /dev/null
@@ -1,819 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// all flops call the rvdff flop
-
-`include "common_defines.vh"
-
-module rvdff #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic                   rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-`ifdef RV_CLOCKGATE
-   always @(posedge tb_top.clk) begin
-      #0 $strobe("CG: %0t %m din %x dout %x clk %b width %d",$time,din,dout,clk,WIDTH);
-   end
-`endif
-
-   always_ff @(posedge clk or negedge rst_l) begin
-      if (rst_l == 0)
-        dout[WIDTH-1:0] <= 0;
-      else
-        dout[WIDTH-1:0] <= din[WIDTH-1:0];
-   end
-
-end
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-   rvdff #(WIDTH) dffs (.din((en) ? din[WIDTH-1:0] : dout[WIDTH-1:0]), .*);
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   assign din_new = {WIDTH{~clear}} & (en ? din[WIDTH-1:0] : dout[WIDTH-1:0]);
-   rvdff #(WIDTH) dffsc (.din(din_new[WIDTH-1:0]), .*);
-end
-endmodule
-
-// _fpga versions
-module rvdff_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   `ifdef RV_FPGA_OPTIMIZE
-    rvdffs #(WIDTH) dffs (.clk(rawclk), .en(clken), .*);
-`else
-    rvdff #(WIDTH)  dff (.*);
-`endif
-end
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-`ifdef RV_FPGA_OPTIMIZE
-   rvdffs #(WIDTH)   dffs (.clk(rawclk), .en(clken & en), .*);
-`else
-   rvdffs #(WIDTH)   dffs (.*);
-`endif
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic             clk,
-     input logic             clken,
-     input logic             rawclk,
-     input logic             rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-`ifdef RV_FPGA_OPTIMIZE
-   rvdffs  #(WIDTH)   dffs  (.clk(rawclk), .din(din[WIDTH-1:0] & {WIDTH{~clear}}),.en((en | clear) & clken), .*);
-`else
-   rvdffsc #(WIDTH)   dffsc (.*);
-`endif
-end
-endmodule
-
-
-module rvdffe #( parameter WIDTH=1, SHORT=0, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic           en,
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-
-if (SHORT == 1) begin : genblock
-   if (1) begin : genblock
-      assign dout = din;
-   end
-end
-else begin : genblock
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 8 || OVERRIDE==1) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdffe must be WIDTH >= 8");
-`endif
-end // else: !if(SHORT == 1)
-
-endmodule // rvdffe
-
-
-module rvdffpcie #( parameter WIDTH=31 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH == 31) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-
-      rvdfflie #(.WIDTH(WIDTH), .LEFT(19)) dff (.*);
-
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdffpcie width must be 31");
-`endif
-endmodule
-
-// format: { LEFT, EXTRA }
-// LEFT # of bits will be done with rvdffie, all else EXTRA with rvdffe
-module rvdfflie #( parameter WIDTH=16, LEFT=8 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam EXTRA = WIDTH-LEFT;
-
-
-
-
-
-
-
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam XMSB = LLSB-1;
-   localparam XLSB = LLSB-EXTRA;
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 16 && LEFT >= 8 && EXTRA >= 8) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-
-      rvdffiee #(LEFT)  dff_left  (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-
-      rvdffe  #(EXTRA)  dff_extra (.*, .din(din[XMSB:XLSB]), .dout(dout[XMSB:XLSB]));
-
-
-
-
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdfflie musb be WIDTH >= 16 && LEFT >= 8 && EXTRA >= 8");
-`endif
-endmodule
-
-
-
-
-// special power flop for predict packet
-// format: { LEFT, RIGHT==31 }
-// LEFT # of bits will be done with rvdffe; RIGHT is enabled by LEFT[LSB] & en
-module rvdffppe #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam RIGHT = 31;
-   localparam LEFT = WIDTH - RIGHT;
-
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam RMSB = LLSB-1;
-   localparam RLSB = LLSB-RIGHT;
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH>=32 && LEFT>=8 && RIGHT>=8) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-      rvdffe #(LEFT)     dff_left (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-      rvdffe #(RIGHT)   dff_right (.*, .din(din[RMSB:RLSB]), .dout(dout[RMSB:RLSB]), .en(en & din[LLSB]));  // qualify with pret
-
-
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: must be WIDTH>=32 && LEFT>=8 && RIGHT>=8");
-`endif
-endmodule
-
-
-
-
-module rvdffie #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      en;
-
-
-
-
-
-
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 8 || OVERRIDE==1) begin: genblock
-`endif
-
-      assign en = |(din ^ dout);
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-     $error("%m: rvdffie must be WIDTH >= 8");
-`endif
-
-
-endmodule
-
-// ie flop but it has an .en input
-module rvdffiee #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic           scan_mode,
-     input  logic           en,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      final_en;
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 8 || OVERRIDE==1) begin: genblock
-`endif
-
-      assign final_en = (|(din ^ dout)) & en;
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .*, .en(final_en) );
-`else
-      rvdffe #(WIDTH) dff (.*,  .en(final_en));
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdffie width must be >= 8");
-`endif
-
-endmodule
-
-
-
-module rvsyncss #(parameter WIDTH = 251)
-   (
-     input  logic                 clk,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff #(WIDTH) sync_ff1  (.*, .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff #(WIDTH) sync_ff2  (.*, .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvsyncss_fpga #(parameter WIDTH = 251)
-   (
-     input  logic                 gw_clk,
-     input  logic                 rawclk,
-     input  logic                 clken,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff_fpga #(WIDTH) sync_ff1  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff_fpga #(WIDTH) sync_ff2  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvlsadder
-  (
-    input logic [31:0] rs1,
-    input logic [11:0] offset,
-
-    output logic [31:0] dout
-    );
-
-   logic                cout;
-   logic                sign;
-
-   logic [31:12]        rs1_inc;
-   logic [31:12]        rs1_dec;
-
-   assign {cout,dout[11:0]} = {1'b0,rs1[11:0]} + {1'b0,offset[11:0]};
-
-   assign rs1_inc[31:12] = rs1[31:12] + 1;
-
-   assign rs1_dec[31:12] = rs1[31:12] - 1;
-
-   assign sign = offset[11];
-
-   assign dout[31:12] = ({20{  sign ^~  cout}} &     rs1[31:12]) |
-                        ({20{ ~sign &   cout}}  & rs1_inc[31:12]) |
-                        ({20{  sign &  ~cout}}  & rs1_dec[31:12]);
-
-endmodule // rvlsadder
-
-// assume we only maintain pc[31:1] in the pipe
-
-module rvbradder
-  (
-    input [31:1] pc,
-    input [12:1] offset,
-
-    output [31:1] dout
-    );
-
-   logic          cout;
-   logic          sign;
-
-   logic [31:13]  pc_inc;
-   logic [31:13]  pc_dec;
-
-   assign {cout,dout[12:1]} = {1'b0,pc[12:1]} + {1'b0,offset[12:1]};
-
-   assign pc_inc[31:13] = pc[31:13] + 1;
-
-   assign pc_dec[31:13] = pc[31:13] - 1;
-
-   assign sign = offset[12];
-
-
-   assign dout[31:13] = ({19{  sign ^~  cout}} &     pc[31:13]) |
-                        ({19{ ~sign &   cout}}  & pc_inc[31:13]) |
-                        ({19{  sign &  ~cout}}  & pc_dec[31:13]);
-
-
-endmodule // rvbradder
-
-
-// 2s complement circuit
-module rvtwoscomp #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:1]          dout_temp;   // holding for all other bits except for the lsb. LSB is always din
-
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : flip_after_first_one
-      assign dout_temp[i] = (|din[i-1:0]) ? ~din[i] : din[i];
-   end : flip_after_first_one
-
-   assign dout[WIDTH-1:0]  = { dout_temp[WIDTH-1:1], din[0] };
-
-endmodule  // 2'scomp
-
-// find first
-module rvfindfirst1 #( parameter WIDTH=32, SHIFT=$clog2(WIDTH) )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [SHIFT-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[SHIFT-1:0] = {SHIFT{1'b0}};
-      done    = 1'b0;
-
-      for ( int i = WIDTH-1; i > 0; i-- )  begin : find_first_one
-         done |= din[i];
-         dout[SHIFT-1:0] += done ? 1'b0 : 1'b1;
-      end : find_first_one
-   end
-endmodule // rvfindfirst1
-
-module rvfindfirst1hot #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[WIDTH-1:0] = {WIDTH{1'b0}};
-      done    = 1'b0;
-      for ( int i = 0; i < WIDTH; i++ )  begin : find_first_one
-         dout[i] = ~done & din[i];
-         done   |= din[i];
-      end : find_first_one
-   end
-endmodule // rvfindfirst1hot
-
-// mask and match function matches bits after finding the first 0 position
-// find first starting from LSB. Skip that location and match the rest of the bits
-module rvmaskandmatch #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] mask,     // this will have the mask in the lower bit positions
-     input  logic [WIDTH-1:0] data,     // this is what needs to be matched on the upper bits with the mask's upper bits
-     input  logic             masken,   // when 1 : do mask. 0 : full match
-     output logic             match
-     );
-
-   logic [WIDTH-1:0]          matchvec;
-   logic                      masken_or_fullmask;
-
-   assign masken_or_fullmask = masken &  ~(&mask[WIDTH-1:0]);
-
-   assign matchvec[0]        = masken_or_fullmask | (mask[0] == data[0]);
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : match_after_first_zero
-      assign matchvec[i] = (&mask[i-1:0] & masken_or_fullmask) ? 1'b1 : (mask[i] == data[i]);
-   end : match_after_first_zero
-
-   assign match  = &matchvec[WIDTH-1:0];    // all bits either matched or were masked off
-
-endmodule // rvmaskandmatch
-
-
-
-
-// Check if the S_ADDR <= addr < E_ADDR
-module rvrangecheck  #(CCM_SADR = 32'h0,
-                       CCM_SIZE  = 128) (
-   input  logic [31:0]   addr,                             // Address to be checked for range
-   output logic          in_range,                            // S_ADDR <= start_addr < E_ADDR
-   output logic          in_region
-);
-
-   localparam REGION_BITS = 4;
-   localparam MASK_BITS = 10 + $clog2(CCM_SIZE);
-
-   logic [31:0]          start_addr;
-   logic [3:0]           region;
-
-   assign start_addr[31:0]        = CCM_SADR;
-   assign region[REGION_BITS-1:0] = start_addr[31:(32-REGION_BITS)];
-
-   assign in_region = (addr[31:(32-REGION_BITS)] == region[REGION_BITS-1:0]);
-   if (CCM_SIZE  == 48)
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]) & ~(&addr[MASK_BITS-1 : MASK_BITS-2]);
-   else
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]);
-
-endmodule  // rvrangechecker
-
-// 16 bit even parity generator
-module rveven_paritygen #(WIDTH = 16)  (
-                                         input  logic [WIDTH-1:0]  data_in,         // Data
-                                         output logic              parity_out       // generated even parity
-                                         );
-
-   assign  parity_out =  ^(data_in[WIDTH-1:0]) ;
-
-endmodule  // rveven_paritygen
-
-module rveven_paritycheck #(WIDTH = 16)  (
-                                           input  logic [WIDTH-1:0]  data_in,         // Data
-                                           input  logic              parity_in,
-                                           output logic              parity_err       // Parity error
-                                           );
-
-   assign  parity_err =  ^(data_in[WIDTH-1:0]) ^ parity_in ;
-
-endmodule  // rveven_paritycheck
-
-module rvecc_encode  (
-                      input [31:0] din,
-                      output [6:0] ecc_out
-                      );
-logic [5:0] ecc_out_temp;
-
-   assign ecc_out_temp[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_out_temp[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_out_temp[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_out_temp[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   assign ecc_out[6:0] = {(^din[31:0])^(^ecc_out_temp[5:0]),ecc_out_temp[5:0]};
-
-endmodule // rvecc_encode
-
-module rvecc_decode  (
-                      input         en,
-                      input [31:0]  din,
-                      input [6:0]   ecc_in,
-                      input         sed_ded,    // only do detection and no correction. Used for the I$
-                      output [31:0] dout,
-                      output [6:0]  ecc_out,
-                      output        single_ecc_error,
-                      output        double_ecc_error
-
-                      );
-
-   logic [6:0]                      ecc_check;
-   logic [38:0]                     error_mask;
-   logic [38:0]                     din_plus_parity, dout_plus_parity;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   // This is the parity bit
-   assign ecc_check[6] = ((^din[31:0])^(^ecc_in[6:0])) & ~sed_ded;
-
-   assign single_ecc_error = en & (ecc_check[6:0] != 0) & ecc_check[6];   // this will never be on for sed_ded
-   assign double_ecc_error = en & (ecc_check[6:0] != 0) & ~ecc_check[6];  // all errors in the sed_ded case will be recorded as DE
-
-   // Generate the mask for error correctiong
-   for (genvar i=1; i<40; i++) begin
-      assign error_mask[i-1] = (ecc_check[5:0] == i);
-   end
-
-   // Generate the corrected data
-   assign din_plus_parity[38:0] = {ecc_in[6], din[31:26], ecc_in[5], din[25:11], ecc_in[4], din[10:4], ecc_in[3], din[3:1], ecc_in[2], din[0], ecc_in[1:0]};
-
-   assign dout_plus_parity[38:0] = single_ecc_error ? (error_mask[38:0] ^ din_plus_parity[38:0]) : din_plus_parity[38:0];
-   assign dout[31:0]             = {dout_plus_parity[37:32], dout_plus_parity[30:16], dout_plus_parity[14:8], dout_plus_parity[6:4], dout_plus_parity[2]};
-   assign ecc_out[6:0]           = {(dout_plus_parity[38] ^ (ecc_check[6:0] == 7'b1000000)), dout_plus_parity[31], dout_plus_parity[15], dout_plus_parity[7], dout_plus_parity[3], dout_plus_parity[1:0]};
-
-endmodule // rvecc_decode
-
-module rvecc_encode_64  (
-                      input [63:0] din,
-                      output [6:0] ecc_out
-                      );
-  assign ecc_out[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_out[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_out[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_out[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[6] = din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-endmodule // rvecc_encode_64
-
-
-module rvecc_decode_64  (
-                      input         en,
-                      input [63:0]  din,
-                      input [6:0]   ecc_in,
-                      output        ecc_error
-                      );
-
-   logic [6:0]                      ecc_check;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[6] = ecc_in[6]^din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_error = en & (ecc_check[6:0] != 0);  // all errors in the sed_ded case will be recorded as DE
-
- endmodule // rvecc_decode_64
-
-// Skywater cell
-//sky130_fd_sc_hd__dlclkp_1 CG( .CLK(clk), .GCLK(l1clk), .GATE(en_i | test_en_i));
-
-
-/*module `TEC_RV_ICG 
-  (
-   input logic SE, EN, CK,
-   output Q
-   );
-
-   logic  en_ff;
-   logic  enable;
-
-   assign      enable = EN | SE;
-
-`ifdef VERILATOR
-   always @(negedge CK) begin
-      en_ff <= enable;
-   end
-`else
-   always @(CK, enable) begin
-      if(!CK)
-        en_ff = enable;
-   end
-`endif
-   assign Q = CK & en_ff;
-
-endmodule
-*/
-
-`ifndef RV_FPGA_OPTIMIZE
-module rvclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .CLK(clk), .GCLK(l1clk), .GATE(en)); /*clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));*/
-
-endmodule // rvclkhdr
-`endif
-
-module rvoclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign l1clk = clk;
-`else
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .CLK(clk), .GCLK(l1clk), .GATE(en)); //clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));
-`endif
-
-endmodule
-
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/common_defines.vh b/verilog/rtl/BrqRV_EB1/design/common_defines.vh
deleted file mode 100644
index 9e581ff..0000000
--- a/verilog/rtl/BrqRV_EB1/design/common_defines.vh
+++ /dev/null
@@ -1,247 +0,0 @@
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-`define RV_ROOT "/home/hshabbir/caravel_BrqRV_EB1/verilog/rtl/BrqRV_EB1"
-`define RV_RET_STACK_SIZE 8
-`define RV_EXT_ADDRWIDTH 32
-`define RV_STERR_ROLLBACK 0
-`define SDVT_AHB 0
-`define RV_EXT_DATAWIDTH 64
-`define RV_LDERR_ROLLBACK 1
-`define CLOCK_PERIOD 100
-`define RV_ASSERT_ON 
-`define RV_BUILD_AXI4 1
-`define TOP tb_top
-`define RV_BUILD_AXI_NATIVE 1
-`define CPU_TOP `RV_TOP.brqrv
-`define RV_TOP `TOP.rvtop
-`define RV_UNUSED_REGION2 'h70000000
-`define RV_EXTERNAL_DATA 'hd0580000
-`define RV_SERIALIO 'he0580000
-`define RV_UNUSED_REGION7 'h20000000
-`define RV_UNUSED_REGION5 'h40000000
-`define RV_DEBUG_SB_MEM 'hb0580000
-`define RV_EXTERNAL_DATA_1 'hc0000000
-`define RV_UNUSED_REGION0 'h90000000
-`define RV_UNUSED_REGION3 'h60000000
-`define RV_UNUSED_REGION9 'h00000000
-`define RV_UNUSED_REGION8 'h10000000
-`define RV_UNUSED_REGION6 'h30000000
-`define RV_UNUSED_REGION1 'h80000000
-`define RV_UNUSED_REGION4 'h50000000
-`define RV_BHT_ADDR_LO 2
-`define RV_BHT_SIZE 256
-`define RV_BHT_GHR_HASH_1 
-`define RV_BHT_GHR_SIZE 7
-`define RV_BHT_ADDR_HI 8
-`define RV_BHT_HASH_STRING {hashin[7+1:2]^ghr[7-1:0]}// cf2
-`define RV_BHT_ARRAY_DEPTH 128
-`define RV_BHT_GHR_RANGE 6:0
-`define RV_INST_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK3 'hffffffff
-`define RV_INST_ACCESS_MASK7 'hffffffff
-`define RV_DATA_ACCESS_MASK0 'hffffffff
-`define RV_INST_ACCESS_ADDR6 'h00000000
-`define RV_INST_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_ENABLE6 1'h0
-`define RV_INST_ACCESS_ENABLE5 1'h0
-`define RV_DATA_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ENABLE1 1'h0
-`define RV_DATA_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_ADDR3 'h00000000
-`define RV_INST_ACCESS_ADDR7 'h00000000
-`define RV_INST_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_MASK2 'hffffffff
-`define RV_INST_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_ADDR2 'h00000000
-`define RV_INST_ACCESS_ENABLE2 1'h0
-`define RV_INST_ACCESS_ADDR1 'h00000000
-`define RV_INST_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ADDR6 'h00000000
-`define RV_DATA_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK0 'hffffffff
-`define RV_DATA_ACCESS_MASK7 'hffffffff
-`define RV_INST_ACCESS_MASK3 'hffffffff
-`define RV_DATA_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_ADDR3 'h00000000
-`define RV_DATA_ACCESS_ADDR7 'h00000000
-`define RV_DATA_ACCESS_ENABLE5 1'h0
-`define RV_INST_ACCESS_ENABLE6 1'h0
-`define RV_DATA_ACCESS_ENABLE1 1'h0
-`define RV_INST_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_MASK2 'hffffffff
-`define RV_DATA_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR2 'h00000000
-`define RV_DATA_ACCESS_ADDR1 'h00000000
-`define RV_DATA_ACCESS_ENABLE2 1'h0
-`define RV_ICCM_BITS 12
-`define RV_ICCM_OFFSET 10'h0ffff000
-`define RV_ICCM_SIZE_4 
-`define RV_ICCM_BANK_BITS 2
-`define RV_ICCM_ENABLE 1
-`define RV_ICCM_SADR 32'haffff000
-`define RV_ICCM_DATA_CELL ram_256x39
-`define RV_ICCM_EADR 32'hafffffff
-`define RV_ICCM_RESERVED 'h400
-`define RV_ICCM_REGION 4'ha
-`define RV_ICCM_SIZE 4
-`define RV_ICCM_BANK_HI 3
-`define RV_ICCM_BANK_INDEX_LO 4
-`define RV_ICCM_ROWS 256
-`define RV_ICCM_INDEX_BITS 8
-`define RV_ICCM_NUM_BANKS 4
-`define RV_ICCM_NUM_BANKS_4 
-`define TEC_RV_ICG clockhdr
-`define RV_LSU2DMA 0
-`define RV_LSU_NUM_NBLOAD_WIDTH 2
-`define RV_ICCM_ONLY 1
-`define RV_BITMANIP_ZBC 0
-`define RV_BITMANIP_ZBS 0
-`define RV_FPGA_OPTIMIZE 0
-`define RV_LSU_NUM_NBLOAD 4
-`define RV_DIV_BIT 3
-`define RV_DIV_NEW 1
-`define RV_DMA_BUF_DEPTH 5
-`define RV_FAST_INTERRUPT_REDIRECT 1
-`define RV_BITMANIP_ZBP 0
-`define RV_BITMANIP_ZBA 0
-`define RV_LSU_STBUF_DEPTH 4
-`define RV_BITMANIP_ZBB 0
-`define RV_BITMANIP_ZBR 0
-`define RV_BITMANIP_ZBE 0
-`define RV_TIMER_LEGAL_EN 1
-`define RV_BITMANIP_ZBF 0
-`define REGWIDTH 32
-`define RV_CONFIG_KEY 32'hdeadbeef
-`define RV_BTB_INDEX1_HI 8
-`define RV_BTB_SIZE 256
-`define RV_BTB_BTAG_SIZE 6
-`define RV_BTB_FOLD2_INDEX_HASH 0
-`define RV_BTB_INDEX3_LO 16
-`define RV_BTB_INDEX2_HI 15
-`define RV_BTB_ARRAY_DEPTH 128
-`define RV_BTB_INDEX1_LO 2
-`define RV_BTB_ADDR_LO 2
-`define RV_BTB_INDEX3_HI 22
-`define RV_BTB_ADDR_HI 8
-`define RV_BTB_TOFFSET_SIZE 12
-`define RV_BTB_INDEX2_LO 9
-`define RV_BTB_BTAG_FOLD 0
-`define RV_BTB_ENABLE 1
-`define RV_XLEN 32
-`define RV_IFU_BUS_TAG 3
-`define RV_LSU_BUS_ID 1
-`define RV_IFU_BUS_PRTY 2
-`define RV_LSU_BUS_TAG 3
-`define RV_IFU_BUS_ID 1
-`define RV_SB_BUS_PRTY 2
-`define RV_LSU_BUS_PRTY 2
-`define RV_DMA_BUS_ID 1
-`define RV_SB_BUS_ID 1
-`define RV_BUS_PRTY_DEFAULT 2'h3
-`define RV_DMA_BUS_PRTY 2
-`define RV_SB_BUS_TAG 1
-`define RV_DMA_BUS_TAG 1
-`define RV_ICACHE_TAG_NUM_BYPASS 2
-`define RV_ICACHE_STATUS_BITS 1
-`define RV_ICACHE_BEAT_ADDR_HI 5
-`define RV_ICACHE_SCND_LAST 6
-`define RV_ICACHE_TAG_LO 13
-`define RV_ICACHE_BANK_WIDTH 8
-`define RV_ICACHE_DATA_CELL ram_512x71
-`define RV_ICACHE_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_WAYPACK 1
-`define RV_ICACHE_LN_SZ 64
-`define RV_ICACHE_NUM_BEATS 8
-`define RV_ICACHE_NUM_LINES_WAY 128
-`define RV_ICACHE_NUM_LINES_BANK 64
-`define RV_ICACHE_TAG_DEPTH 128
-`define RV_ICACHE_DATA_DEPTH 512
-`define RV_ICACHE_DATA_WIDTH 64
-`define RV_ICACHE_TAG_CELL ram_128x25
-`define RV_ICACHE_NUM_BYPASS 2
-`define RV_ICACHE_FDATA_WIDTH 71
-`define RV_ICACHE_NUM_LINES 256
-`define RV_ICACHE_DATA_INDEX_LO 4
-`define RV_ICACHE_BANK_BITS 1
-`define RV_ICACHE_TAG_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_2BANKS 1
-`define RV_ICACHE_BANKS_WAY 2
-`define RV_ICACHE_BANK_LO 3
-`define RV_ICACHE_ECC 1
-`define RV_ICACHE_INDEX_HI 12
-`define RV_ICACHE_TAG_INDEX_LO 6
-`define RV_ICACHE_TAG_BYPASS_ENABLE 1
-`define RV_ICACHE_BANK_HI 3
-`define RV_ICACHE_BEAT_BITS 3
-`define RV_ICACHE_BYPASS_ENABLE 1
-`define RV_ICACHE_NUM_WAYS 2
-`define RV_ICACHE_SIZE 16
-`define RV_NMI_VEC 'h11110000
-`define RV_DCCM_EADR 32'hf0040fff
-`define RV_DCCM_SIZE 4
-`define RV_DCCM_REGION 4'hf
-`define RV_DCCM_RESERVED 'h400
-`define RV_DCCM_INDEX_BITS 8
-`define RV_DCCM_ROWS 256
-`define RV_DCCM_FDATA_WIDTH 39
-`define RV_DCCM_NUM_BANKS_4 
-`define RV_DCCM_NUM_BANKS 4
-`define RV_DCCM_BITS 12
-`define RV_DCCM_DATA_WIDTH 32
-`define RV_DCCM_SIZE_4 
-`define RV_DCCM_OFFSET 28'h40000
-`define RV_DCCM_WIDTH_BITS 2
-`define RV_DCCM_BYTE_WIDTH 4
-`define RV_DCCM_ENABLE 1
-`define RV_DCCM_ECC_WIDTH 7
-`define RV_DCCM_BANK_BITS 2
-`define RV_DCCM_DATA_CELL ram_256x39
-`define RV_DCCM_SADR 32'hf0040000
-`define RV_LSU_SB_BITS 12
-`define RV_RESET_VEC 'haffff000
-`define RV_PIC_BITS 15
-`define RV_PIC_MEIGWCTRL_OFFSET 'h4000
-`define RV_PIC_MEIGWCTRL_MASK 'h3
-`define RV_PIC_MEIGWCLR_OFFSET 'h5000
-`define RV_PIC_MEIE_MASK 'h1
-`define RV_PIC_MEIP_MASK 'h0
-`define RV_PIC_MEIPT_COUNT 31
-`define RV_PIC_MEIPL_COUNT 31
-`define RV_PIC_MEIPT_MASK 'h0
-`define RV_PIC_BASE_ADDR 32'hf00c0000
-`define RV_PIC_MEIPL_MASK 'hf
-`define RV_PIC_INT_WORDS 1
-`define RV_PIC_MPICCFG_MASK 'h1
-`define RV_PIC_MEIPT_OFFSET 'h3004
-`define RV_PIC_TOTAL_INT_PLUS1 32
-`define RV_PIC_MEIPL_OFFSET 'h0000
-`define RV_PIC_MEIE_COUNT 31
-`define RV_PIC_MEIGWCTRL_COUNT 31
-`define RV_PIC_REGION 4'hf
-`define RV_PIC_MEIGWCLR_MASK 'h0
-`define RV_PIC_SIZE 32
-`define RV_PIC_MEIE_OFFSET 'h2000
-`define RV_PIC_MPICCFG_OFFSET 'h3000
-`define RV_PIC_MPICCFG_COUNT 1
-`define RV_PIC_MEIP_OFFSET 'h1000
-`define RV_PIC_TOTAL_INT 31
-`define RV_PIC_OFFSET 10'hc0000
-`define RV_PIC_MEIGWCLR_COUNT 31
-`define RV_PIC_MEIP_COUNT 1
-`define RV_TARGET default
-`define RV_NUMIREGS 32
-`undef RV_ASSERT_ON
diff --git a/verilog/rtl/BrqRV_EB1/design/dbg/eb1_dbg.sv b/verilog/rtl/BrqRV_EB1/design/dbg/eb1_dbg.sv
deleted file mode 100644
index 72a03f6..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dbg/eb1_dbg.sv
+++ /dev/null
@@ -1,753 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file to control the debug mode
-// Comments: Responsible to put the rest of the core in quiesce mode,
-//           Send the commands/address. sends WrData and Recieve read Data.
-//           And then Resume the core to do the normal mode
-// Author  :
-//********************************************************************************
-module eb1_dbg
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   // outputs to the core for command and data interface
-   output logic [31:0]                 dbg_cmd_addr,
-   output logic [31:0]                 dbg_cmd_wrdata,
-   output logic                        dbg_cmd_valid,
-   output logic                        dbg_cmd_write,             // 1: write command, 0: read_command
-   output logic [1:0]                  dbg_cmd_type,              // 0:gpr 1:csr 2: memory
-   output logic [1:0]                  dbg_cmd_size,              // size of the abstract mem access debug command
-   output logic                        dbg_core_rst_l,            // core reset from dm
-
-   // inputs back from the core/dec
-   input logic [31:0]                  core_dbg_rddata,
-   input logic                         core_dbg_cmd_done,         // This will be treated like a valid signal
-   input logic                         core_dbg_cmd_fail,         // Exception during command run
-
-   // Signals to dma to get a bubble
-   output logic                        dbg_dma_bubble,            // Debug needs a bubble to send a valid
-   input  logic                        dma_dbg_ready,             // DMA is ready to accept debug request
-
-   // interface with the rest of the core to halt/resume handshaking
-   output logic                        dbg_halt_req,              // This is a pulse
-   output logic                        dbg_resume_req,            // Debug sends a resume requests. Pulse
-   input  logic                        dec_tlu_debug_mode,        // Core is in debug mode
-   input  logic                        dec_tlu_dbg_halted,        // The core has finished the queiscing sequence. Core is halted now
-   input  logic                        dec_tlu_mpc_halted_only,   // Only halted due to MPC
-   input  logic                        dec_tlu_resume_ack,        // core sends back an ack for the resume (pulse)
-
-   // inputs from the JTAG
-   input logic                         dmi_reg_en,                // read or write
-   input logic [6:0]                   dmi_reg_addr,              // address of DM register
-   input logic                         dmi_reg_wr_en,             // write instruction
-   input logic [31:0]                  dmi_reg_wdata,             // write data
-
-   // output
-   output logic [31:0]                 dmi_reg_rdata,             // read data
-
-   // AXI Write Channels
-   output logic                        sb_axi_awvalid,
-   input  logic                        sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_awid,
-   output logic [31:0]                 sb_axi_awaddr,
-   output logic [3:0]                  sb_axi_awregion,
-   output logic [7:0]                  sb_axi_awlen,
-   output logic [2:0]                  sb_axi_awsize,
-   output logic [1:0]                  sb_axi_awburst,
-   output logic                        sb_axi_awlock,
-   output logic [3:0]                  sb_axi_awcache,
-   output logic [2:0]                  sb_axi_awprot,
-   output logic [3:0]                  sb_axi_awqos,
-
-   output logic                        sb_axi_wvalid,
-   input  logic                        sb_axi_wready,
-   output logic [63:0]                 sb_axi_wdata,
-   output logic [7:0]                  sb_axi_wstrb,
-   output logic                        sb_axi_wlast,
-
-   input  logic                        sb_axi_bvalid,
-   output logic                        sb_axi_bready,
-   input  logic [1:0]                  sb_axi_bresp,
-
-   // AXI Read Channels
-   output logic                        sb_axi_arvalid,
-   input  logic                        sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_arid,
-   output logic [31:0]                 sb_axi_araddr,
-   output logic [3:0]                  sb_axi_arregion,
-   output logic [7:0]                  sb_axi_arlen,
-   output logic [2:0]                  sb_axi_arsize,
-   output logic [1:0]                  sb_axi_arburst,
-   output logic                        sb_axi_arlock,
-   output logic [3:0]                  sb_axi_arcache,
-   output logic [2:0]                  sb_axi_arprot,
-   output logic [3:0]                  sb_axi_arqos,
-
-   input  logic                        sb_axi_rvalid,
-   output logic                        sb_axi_rready,
-   input  logic [63:0]                 sb_axi_rdata,
-   input  logic [1:0]                  sb_axi_rresp,
-
-   input logic                         dbg_bus_clk_en,
-
-   // general inputs
-   input logic                         clk,
-   input logic                         rst_l,        // This includes both top rst and debug rst
-   input logic                         dbg_rst_l,
-   input logic                         clk_override,
-   input logic                         scan_mode
-);
-
-
-   typedef enum logic [3:0] {IDLE=4'h0, HALTING=4'h1, HALTED=4'h2, CORE_CMD_START=4'h3, CORE_CMD_WAIT=4'h4, SB_CMD_START=4'h5, SB_CMD_SEND=4'h6, SB_CMD_RESP=4'h7, CMD_DONE=4'h8, RESUMING=4'h9} state_t;
-   typedef enum logic [3:0] {SBIDLE=4'h0, WAIT_RD=4'h1, WAIT_WR=4'h2, CMD_RD=4'h3, CMD_WR=4'h4, CMD_WR_ADDR=4'h5, CMD_WR_DATA=4'h6, RSP_RD=4'h7, RSP_WR=4'h8, DONE=4'h9} sb_state_t;
-
-   state_t       dbg_state;
-   state_t       dbg_nxtstate;
-   logic         dbg_state_en;
-   // these are the registers that the debug module implements
-   logic [31:0]  dmstatus_reg;        // [26:24]-dmerr, [17:16]-resume ack, [9:8]-halted, [3:0]-version
-   logic [31:0]  dmcontrol_reg;       // dmcontrol register has only 6 bits implemented. 31: haltreq, 30: resumereq, 29: haltreset, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   logic [31:0]  command_reg;
-   logic [31:0]  abstractcs_reg;      // bits implemted are [12] - busy and [10:8]= command error
-   logic [31:0]  haltsum0_reg;
-   logic [31:0]  data0_reg;
-   logic [31:0]  data1_reg;
-
-   // data 0
-   logic [31:0]  data0_din;
-   logic         data0_reg_wren, data0_reg_wren0, data0_reg_wren1, data0_reg_wren2;
-   // data 1
-   logic [31:0]  data1_din;
-   logic         data1_reg_wren, data1_reg_wren0, data1_reg_wren1;
-   // abstractcs
-   logic         abstractcs_busy_wren;
-   logic         abstractcs_busy_din;
-   logic [2:0]   abstractcs_error_din;
-   logic         abstractcs_error_sel0, abstractcs_error_sel1, abstractcs_error_seb1, abstractcs_error_sel3, abstractcs_error_sel4, abstractcs_error_sel5, abstractcs_error_sel6;
-   logic         dbg_sb_bus_error;
-   // abstractauto
-   logic         abstractauto_reg_wren;
-   logic [1:0]   abstractauto_reg;
-
-   // dmstatus
-   logic         dmstatus_resumeack_wren;
-   logic         dmstatus_resumeack_din;
-   logic         dmstatus_haveresetn_wren;
-   logic         dmstatus_resumeack;
-   logic         dmstatus_unavail;
-   logic         dmstatus_running;
-   logic         dmstatus_halted;
-   logic         dmstatus_havereset, dmstatus_haveresetn;
-
-   // dmcontrol
-   logic         resumereq;
-   logic         dmcontrol_wren, dmcontrol_wren_Q;
-   // command
-   logic         execute_command_ns, execute_command;
-   logic         command_wren, command_regno_wren;
-   logic         command_transfer_din;
-   logic         command_postexec_din;
-   logic [31:0]  command_din;
-   logic [3:0]   dbg_cmd_addr_incr;
-   logic [31:0]  dbg_cmd_curr_addr;
-   logic [31:0]  dbg_cmd_next_addr;
-
-   // needed to send the read data back for dmi reads
-   logic  [31:0] dmi_reg_rdata_din;
-
-   sb_state_t    sb_state;
-   sb_state_t    sb_nxtstate;
-   logic         sb_state_en;
-
-   //System bus section
-   logic              sbcs_wren;
-   logic              sbcs_sbbusy_wren;
-   logic              sbcs_sbbusy_din;
-   logic              sbcs_sbbusyerror_wren;
-   logic              sbcs_sbbusyerror_din;
-
-   logic              sbcs_sberror_wren;
-   logic [2:0]        sbcs_sberror_din;
-   logic              sbcs_unaligned;
-   logic              sbcs_illegal_size;
-   logic [19:15]      sbcs_reg_int;
-
-   // data
-   logic              sbdata0_reg_wren0;
-   logic              sbdata0_reg_wren1;
-   logic              sbdata0_reg_wren;
-   logic [31:0]       sbdata0_din;
-
-   logic              sbdata1_reg_wren0;
-   logic              sbdata1_reg_wren1;
-   logic              sbdata1_reg_wren;
-   logic [31:0]       sbdata1_din;
-
-   logic              sbaddress0_reg_wren0;
-   logic              sbaddress0_reg_wren1;
-   logic              sbaddress0_reg_wren;
-   logic [31:0]       sbaddress0_reg_din;
-   logic [3:0]        sbaddress0_incr;
-   logic              sbreadonaddr_access;
-   logic              sbreadondata_access;
-   logic              sbdata0wr_access;
-
-   logic              sb_abmem_cmd_done_in, sb_abmem_data_done_in;
-   logic              sb_abmem_cmd_done_en, sb_abmem_data_done_en;
-   logic              sb_abmem_cmd_done, sb_abmem_data_done;
-   logic [31:0]       abmem_addr;
-   logic              abmem_addr_in_dccm_region, abmem_addr_in_iccm_region, abmem_addr_in_pic_region;
-   logic              abmem_addr_core_local;
-   logic              abmem_addr_external;
-
-   logic              sb_cmd_pending, sb_abmem_cmd_pending;
-   logic              sb_abmem_cmd_write;
-   logic [2:0]        sb_abmem_cmd_size;
-   logic [31:0]       sb_abmem_cmd_addr;
-   logic [31:0]       sb_abmem_cmd_wdata;
-
-   logic [2:0]        sb_cmd_size;
-   logic [31:0]       sb_cmd_addr;
-   logic [63:0]       sb_cmd_wdata;
-
-   logic              sb_bus_cmd_read, sb_bus_cmd_write_addr, sb_bus_cmd_write_data;
-   logic              sb_bus_rsp_read, sb_bus_rsp_write;
-   logic              sb_bus_rsp_error;
-   logic [63:0]       sb_bus_rdata;
-
-   //registers
-   logic [31:0]       sbcs_reg;
-   logic [31:0]       sbaddress0_reg;
-   logic [31:0]       sbdata0_reg;
-   logic [31:0]       sbdata1_reg;
-
-   logic              sb_abmem_cmd_arvalid, sb_abmem_cmd_awvalid, sb_abmem_cmd_wvalid;
-   logic              sb_abmem_read_pend;
-   logic              sb_cmd_awvalid, sb_cmd_wvalid, sb_cmd_arvalid;
-   logic              sb_read_pend;
-   logic [31:0]       sb_axi_addr;
-   logic [63:0]       sb_axi_wrdata;
-   logic [2:0]        sb_axi_size;
-
-   logic              dbg_dm_rst_l;
-
-   //clken
-   logic              dbg_free_clken;
-   logic              dbg_free_clk;
-
-   logic              sb_free_clken;
-   logic              sb_free_clk;
-
-   // clocking
-   // used for the abstract commands.
-   assign dbg_free_clken  = dmi_reg_en | execute_command | (dbg_state != IDLE) | dbg_state_en | dec_tlu_dbg_halted | dec_tlu_mpc_halted_only | dec_tlu_debug_mode | dbg_halt_req | clk_override;
-
-   // used for the system bus
-   assign sb_free_clken = dmi_reg_en | execute_command | sb_state_en | (sb_state != SBIDLE) | clk_override;
-
-   rvoclkhdr dbg_free_cgc    (.en(dbg_free_clken), .l1clk(dbg_free_clk), .*);
-   rvoclkhdr sb_free_cgc     (.en(sb_free_clken), .l1clk(sb_free_clk), .*);
-
-   // end clocking section
-
-   // Reset logic
-   assign dbg_dm_rst_l = dbg_rst_l & (dmcontrol_reg[0] | scan_mode);
-   assign dbg_core_rst_l = ~dmcontrol_reg[1] | scan_mode;
-
-   // system bus register
-   // sbcs[31:29], sbcs - [22]:sbbusyerror, [21]: sbbusy, [20]:sbreadonaddr, [19:17]:sbaccess, [16]:sbautoincrement, [15]:sbreadondata, [14:12]:sberror, sbsize=32, 128=0, 64/32/16/8 are legal
-   assign        sbcs_reg[31:29] = 3'b1;
-   assign        sbcs_reg[28:23] = '0;
-   assign        sbcs_reg[19:15] = {sbcs_reg_int[19], ~sbcs_reg_int[18], sbcs_reg_int[17:15]};
-   assign        sbcs_reg[11:5]  = 7'h20;
-   assign        sbcs_reg[4:0]   = 5'b01111;
-   assign        sbcs_wren = (dmi_reg_addr ==  7'h38) & dmi_reg_en & dmi_reg_wr_en & (sb_state == SBIDLE);
-   assign        sbcs_sbbusyerror_wren = (sbcs_wren & dmi_reg_wdata[22]) |
-                                         (sbcs_reg[21] & dmi_reg_en & ((dmi_reg_wr_en & (dmi_reg_addr == 7'h39)) | (dmi_reg_addr == 7'h3c) | (dmi_reg_addr == 7'h3d)));
-   assign        sbcs_sbbusyerror_din = ~(sbcs_wren & dmi_reg_wdata[22]);   // Clear when writing one
-
-   rvdffs #(1) sbcs_sbbusyerror_reg  (.din(sbcs_sbbusyerror_din),  .dout(sbcs_reg[22]),    .en(sbcs_sbbusyerror_wren), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbbusy_reg       (.din(sbcs_sbbusy_din),       .dout(sbcs_reg[21]),    .en(sbcs_sbbusy_wren),      .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbreadonaddr_reg (.din(dmi_reg_wdata[20]),     .dout(sbcs_reg[20]),    .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(5) sbcs_misc_reg         (.din({dmi_reg_wdata[19],~dmi_reg_wdata[18],dmi_reg_wdata[17:15]}),
-                                      .dout(sbcs_reg_int[19:15]), .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(3) sbcs_error_reg        (.din(sbcs_sberror_din[2:0]), .dout(sbcs_reg[14:12]), .en(sbcs_sberror_wren),     .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sbcs_unaligned =    ((sbcs_reg[19:17] == 3'b001) &  sbaddress0_reg[0]) |
-                              ((sbcs_reg[19:17] == 3'b010) &  (|sbaddress0_reg[1:0])) |
-                              ((sbcs_reg[19:17] == 3'b011) &  (|sbaddress0_reg[2:0]));
-
-   assign sbcs_illegal_size = sbcs_reg[19];    // Anything bigger than 64 bits is illegal
-
-   assign sbaddress0_incr[3:0] = ({4{(sbcs_reg[19:17] == 3'h0)}} &  4'b0001) |
-                                 ({4{(sbcs_reg[19:17] == 3'h1)}} &  4'b0010) |
-                                 ({4{(sbcs_reg[19:17] == 3'h2)}} &  4'b0100) |
-                                 ({4{(sbcs_reg[19:17] == 3'h3)}} &  4'b1000);
-
-   // sbdata
-   assign        sbdata0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);   // write data only when single read is 0
-   assign        sbdata0_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata0_reg_wren    = sbdata0_reg_wren0 | sbdata0_reg_wren1;
-
-   assign        sbdata1_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3d);   // write data only when single read is 0;
-   assign        sbdata1_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata1_reg_wren    = sbdata1_reg_wren0 | sbdata1_reg_wren1;
-
-   assign        sbdata0_din[31:0]   = ({32{sbdata0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata0_reg_wren1}} & sb_bus_rdata[31:0]);
-   assign        sbdata1_din[31:0]   = ({32{sbdata1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata1_reg_wren1}} & sb_bus_rdata[63:32]);
-
-   rvdffe #(32)    dbg_sbdata0_reg    (.*, .din(sbdata0_din[31:0]), .dout(sbdata0_reg[31:0]), .en(sbdata0_reg_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(32)    dbg_sbdata1_reg    (.*, .din(sbdata1_din[31:0]), .dout(sbdata1_reg[31:0]), .en(sbdata1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-    // sbaddress
-   assign        sbaddress0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39);
-   assign        sbaddress0_reg_wren    = sbaddress0_reg_wren0 | sbaddress0_reg_wren1;
-   assign        sbaddress0_reg_din[31:0]= ({32{sbaddress0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                           ({32{sbaddress0_reg_wren1}} & (sbaddress0_reg[31:0] + {28'b0,sbaddress0_incr[3:0]}));
-   rvdffe #(32)    dbg_sbaddress0_reg    (.*, .din(sbaddress0_reg_din[31:0]), .dout(sbaddress0_reg[31:0]), .en(sbaddress0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   assign sbreadonaddr_access = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39) & sbcs_reg[20];   // if readonaddr is set the next command will start upon writing of addr0
-   assign sbreadondata_access = dmi_reg_en & ~dmi_reg_wr_en & (dmi_reg_addr == 7'h3c) & sbcs_reg[15];  // if readondata is set the next command will start upon reading of data0
-   assign sbdata0wr_access  = dmi_reg_en &  dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);                   // write to sbdata0 will start write command to system bus
-
-   // memory mapped registers
-   // dmcontrol register has only 5 bits implemented. 31: haltreq, 30: resumereq, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   // rest all the bits are zeroed out
-   // dmactive flop is reset based on core rst_l, all other flops use dm_rst_l
-   assign dmcontrol_wren      = (dmi_reg_addr ==  7'h10) & dmi_reg_en & dmi_reg_wr_en;
-   assign dmcontrol_reg[29]   = '0;
-   assign dmcontrol_reg[27:2] = '0;
-   assign resumereq           = dmcontrol_reg[30] & ~dmcontrol_reg[31] & dmcontrol_wren_Q;
-   rvdffs #(4) dmcontrolff (.din({dmi_reg_wdata[31:30],dmi_reg_wdata[28],dmi_reg_wdata[1]}), .dout({dmcontrol_reg[31:30], dmcontrol_reg[28], dmcontrol_reg[1]}), .en(dmcontrol_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs #(1) dmcontrol_dmactive_ff (.din(dmi_reg_wdata[0]), .dout(dmcontrol_reg[0]), .en(dmcontrol_wren), .rst_l(dbg_rst_l), .clk(dbg_free_clk));
-   rvdff  #(1) dmcontrol_wrenff(.din(dmcontrol_wren), .dout(dmcontrol_wren_Q), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // dmstatus register bits that are implemented
-   // [19:18]-havereset,[17:16]-resume ack, [9:8]-halted, [3:0]-version
-   // rest all the bits are zeroed out
-   //assign dmstatus_wren       = (dmi_reg_addr[31:0] ==  32'h11) & dmi_reg_en;
-   assign dmstatus_reg[31:20] = '0;
-   assign dmstatus_reg[19:18] = {2{dmstatus_havereset}};
-   assign dmstatus_reg[15:14] = '0;
-   assign dmstatus_reg[7]     = '1;
-   assign dmstatus_reg[6:4]   = '0;
-   assign dmstatus_reg[17:16] = {2{dmstatus_resumeack}};
-   assign dmstatus_reg[13:12] = {2{dmstatus_unavail}};
-   assign dmstatus_reg[11:10] = {2{dmstatus_running}};
-   assign dmstatus_reg[9:8]   = {2{dmstatus_halted}};
-   assign dmstatus_reg[3:0]   = 4'h2;
-
-   assign dmstatus_resumeack_wren = ((dbg_state == RESUMING) & dec_tlu_resume_ack) | (dmstatus_resumeack & resumereq & dmstatus_halted);
-   assign dmstatus_resumeack_din  = (dbg_state == RESUMING) & dec_tlu_resume_ack;
-
-   assign dmstatus_haveresetn_wren  = (dmi_reg_addr == 7'h10) & dmi_reg_wdata[28] & dmi_reg_en & dmi_reg_wr_en & dmcontrol_reg[0];   // clear the havereset
-   assign dmstatus_havereset        = ~dmstatus_haveresetn;
-
-   assign dmstatus_unavail = dmcontrol_reg[1] | ~rst_l;
-   assign dmstatus_running = ~(dmstatus_unavail | dmstatus_halted);
-
-   rvdffs  #(1) dmstatus_resumeack_reg  (.din(dmstatus_resumeack_din), .dout(dmstatus_resumeack), .en(dmstatus_resumeack_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff   #(1) dmstatus_halted_reg     (.din(dec_tlu_dbg_halted & ~dec_tlu_mpc_halted_only),     .dout(dmstatus_halted), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs  #(1) dmstatus_haveresetn_reg (.din(1'b1), .dout(dmstatus_haveresetn), .en(dmstatus_haveresetn_wren), .rst_l(rst_l), .clk(dbg_free_clk));
-
-   // haltsum0 register
-   assign haltsum0_reg[31:1] = '0;
-   assign haltsum0_reg[0]    = dmstatus_halted;
-
-   // abstractcs register
-   // bits implemted are [12] - busy and [10:8]= command error
-   assign        abstractcs_reg[31:13] = '0;
-   assign        abstractcs_reg[11]    = '0;
-   assign        abstractcs_reg[7:4]   = '0;
-   assign        abstractcs_reg[3:0]   = 4'h2;    // One data register
-
-   assign        abstractcs_error_sel0 = abstractcs_reg[12] & ~(|abstractcs_reg[10:8]) & dmi_reg_en & ((dmi_reg_wr_en & ((dmi_reg_addr == 7'h16) | (dmi_reg_addr == 7'h17)) | (dmi_reg_addr == 7'h18)) |
-                                                                                                       (dmi_reg_addr == 7'h4) | (dmi_reg_addr == 7'h5));
-   assign        abstractcs_error_sel1 = execute_command & ~(|abstractcs_reg[10:8]) &
-                                         ((~((command_reg[31:24] == 8'b0) | (command_reg[31:24] == 8'h2)))                      |   // Illegal command
-                                          (((command_reg[22:20] == 3'b011) | (command_reg[22])) & (command_reg[31:24] == 8'h2)) |   // Illegal abstract memory size (can't be DW or higher)
-                                          ((command_reg[22:20] != 3'b010) & ((command_reg[31:24] == 8'h0) & command_reg[17]))   |   // Illegal abstract reg size
-                                          ((command_reg[31:24] == 8'h0) & command_reg[18]));                                          //postexec for abstract register access
-   assign        abstractcs_error_seb1 = ((core_dbg_cmd_done & core_dbg_cmd_fail) |                   // exception from core
-                                          (execute_command & (command_reg[31:24] == 8'h0) &           // unimplemented regs
-                                                (((command_reg[15:12] == 4'h1) & (command_reg[11:5] != 0)) | (command_reg[15:13] != 0)))) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel3 = execute_command & (dbg_state != HALTED) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel4 = dbg_sb_bus_error & dbg_bus_clk_en & ~(|abstractcs_reg[10:8]);// sb bus error for abstract memory command
-   assign        abstractcs_error_sel5 = execute_command & (command_reg[31:24] == 8'h2) & ~(|abstractcs_reg[10:8]) &
-                                         (((command_reg[22:20] == 3'b001) & data1_reg[0]) | ((command_reg[22:20] == 3'b010) & (|data1_reg[1:0])));  //Unaligned address for abstract memory
-   assign        abstractcs_error_sel6 = (dmi_reg_addr ==  7'h16) & dmi_reg_en & dmi_reg_wr_en;
-
-   assign        abstractcs_error_din[2:0]  = abstractcs_error_sel0 ? 3'b001 :                  // writing command or abstractcs while a command was executing. Or accessing data0
-                                                 abstractcs_error_sel1 ? 3'b010 :               // writing a illegal command type to cmd field of command
-                                                    abstractcs_error_seb1 ? 3'b011 :            // exception while running command
-                                                       abstractcs_error_sel3 ? 3'b100 :         // writing a comnand when not in the halted state
-                                                          abstractcs_error_sel4 ? 3'b101 :      // Bus error
-                                                             abstractcs_error_sel5 ? 3'b111 :   // unaligned or illegal size abstract memory command
-                                                                abstractcs_error_sel6 ? (~dmi_reg_wdata[10:8] & abstractcs_reg[10:8]) :   //W1C
-                                                                                        abstractcs_reg[10:8];                             //hold
-
-   rvdffs #(1) dmabstractcs_busy_reg  (.din(abstractcs_busy_din), .dout(abstractcs_reg[12]), .en(abstractcs_busy_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff  #(3) dmabstractcs_error_reg (.din(abstractcs_error_din[2:0]), .dout(abstractcs_reg[10:8]), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-    // abstract auto reg
-   assign abstractauto_reg_wren  = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h18) & ~abstractcs_reg[12];
-   rvdffs #(2) dbg_abstractauto_reg (.*, .din(dmi_reg_wdata[1:0]), .dout(abstractauto_reg[1:0]), .en(abstractauto_reg_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // command register - implemented all the bits in this register
-   // command[16] = 1: write, 0: read
-   assign execute_command_ns = command_wren |
-                               (dmi_reg_en & ~abstractcs_reg[12] & (((dmi_reg_addr == 7'h4) & abstractauto_reg[0]) | ((dmi_reg_addr == 7'h5) & abstractauto_reg[1])));
-   assign command_wren = (dmi_reg_addr ==  7'h17) & dmi_reg_en & dmi_reg_wr_en;
-   assign command_regno_wren = command_wren | ((command_reg[31:24] == 8'h0) & command_reg[19] & (dbg_state == CMD_DONE) & ~(|abstractcs_reg[10:8]));  // aarpostincrement
-   assign command_postexec_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[18];
-   assign command_transfer_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[17];
-   assign command_din[31:16] = {dmi_reg_wdata[31:24],1'b0,dmi_reg_wdata[22:19],command_postexec_din,command_transfer_din, dmi_reg_wdata[16]};
-   assign command_din[15:0] =  command_wren ? dmi_reg_wdata[15:0] : dbg_cmd_next_addr[15:0];
-   rvdff  #(1)  execute_commandff   (.*, .din(execute_command_ns), .dout(execute_command), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_reg       (.*, .din(command_din[31:16]), .dout(command_reg[31:16]), .en(command_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_regno_reg (.*, .din(command_din[15:0]),  .dout(command_reg[15:0]),  .en(command_regno_wren), .rst_l(dbg_dm_rst_l));
-
-  // data0 reg
-   assign data0_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h4) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data0_reg_wren1   = core_dbg_cmd_done & (dbg_state == CORE_CMD_WAIT) & ~command_reg[16];
-   assign data0_reg_wren    = data0_reg_wren0 | data0_reg_wren1 | data0_reg_wren2;
-
-   assign data0_din[31:0]   = ({32{data0_reg_wren0}} & dmi_reg_wdata[31:0])   |
-                              ({32{data0_reg_wren1}} & core_dbg_rddata[31:0]) |
-                              ({32{data0_reg_wren2}} & sb_bus_rdata[31:0]);
-
-   rvdffe #(32) dbg_data0_reg (.*, .din(data0_din[31:0]), .dout(data0_reg[31:0]), .en(data0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   // data 1
-   assign data1_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h5) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data1_reg_wren1   = (dbg_state == CMD_DONE) & (command_reg[31:24] == 8'h2) & command_reg[19] & ~(|abstractcs_reg[10:8]);   // aampostincrement
-   assign data1_reg_wren    = data1_reg_wren0 | data1_reg_wren1;
-
-   assign data1_din[31:0]   = ({32{data1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                              ({32{data1_reg_wren1}} & dbg_cmd_next_addr[31:0]);
-
-   rvdffe #(32)    dbg_data1_reg    (.*, .din(data1_din[31:0]), .dout(data1_reg[31:0]), .en(data1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   rvdffs #(1) sb_abmem_cmd_doneff  (.din(sb_abmem_cmd_done_in),  .dout(sb_abmem_cmd_done),  .en(sb_abmem_cmd_done_en),  .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-   rvdffs #(1) sb_abmem_data_doneff (.din(sb_abmem_data_done_in), .dout(sb_abmem_data_done), .en(sb_abmem_data_done_en), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-
-   // FSM to control the debug mode entry, command send/recieve, and Resume flow.
-   always_comb begin
-      dbg_nxtstate            = IDLE;
-      dbg_state_en            = 1'b0;
-      abstractcs_busy_wren    = 1'b0;
-      abstractcs_busy_din     = 1'b0;
-      dbg_halt_req            = dmcontrol_wren_Q & dmcontrol_reg[31];      // single pulse output to the core. Need to drive every time this register is written since core might be halted due to MPC
-      dbg_resume_req          = 1'b0;                                      // single pulse output to the core
-      dbg_sb_bus_error        = 1'b0;
-      data0_reg_wren2         = 1'b0;
-      sb_abmem_cmd_done_in    = 1'b0;
-      sb_abmem_data_done_in   = 1'b0;
-      sb_abmem_cmd_done_en    = 1'b0;
-      sb_abmem_data_done_en   = 1'b0;
-
-       case (dbg_state)
-            IDLE: begin
-                     dbg_nxtstate         = (dmstatus_reg[9] | dec_tlu_mpc_halted_only) ? HALTED : HALTING;         // initiate the halt command to the core
-                     dbg_state_en         = dmcontrol_reg[31] | dmstatus_reg[9] | dec_tlu_mpc_halted_only;      // when the jtag writes the halt bit in the DM register, OR when the status indicates H
-                     dbg_halt_req         = dmcontrol_reg[31];               // only when jtag has written the halt_req bit in the control. Removed debug mode qualification during MPC changes
-            end
-            HALTING : begin
-                     dbg_nxtstate         = HALTED;                                 // Goto HALTED once the core sends an ACK
-                     dbg_state_en         = dmstatus_reg[9] | dec_tlu_mpc_halted_only;     // core indicates halted
-            end
-            HALTED: begin
-                     // wait for halted to go away before send to resume. Else start of new command
-                     dbg_nxtstate         = dmstatus_reg[9] ? (resumereq ? RESUMING : (((command_reg[31:24] == 8'h2) & abmem_addr_external) ? SB_CMD_START : CORE_CMD_START)) :
-                                                                                    (dmcontrol_reg[31] ? HALTING : IDLE);       // This is MPC halted case
-                     dbg_state_en         = (dmstatus_reg[9] & resumereq) | execute_command | ~(dmstatus_reg[9] | dec_tlu_mpc_halted_only);
-                     abstractcs_busy_wren = dbg_state_en & ((dbg_nxtstate == CORE_CMD_START) | (dbg_nxtstate == SB_CMD_START));                 // write busy when a new command was written by jtag
-                     abstractcs_busy_din  = 1'b1;
-                     dbg_resume_req       = dbg_state_en & (dbg_nxtstate == RESUMING);                       // single cycle pulse to core if resuming
-            end
-            CORE_CMD_START: begin
-                     // Don't execute the command if cmderror or transfer=0 for abstract register access
-                     dbg_nxtstate         = ((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17])) ? CMD_DONE : CORE_CMD_WAIT;     // new command sent to the core
-                     dbg_state_en         = dbg_cmd_valid | (|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]);
-            end
-            CORE_CMD_WAIT: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = core_dbg_cmd_done;                   // go to done state for one cycle after completing current command
-            end
-            SB_CMD_START: begin
-                     dbg_nxtstate         = (|abstractcs_reg[10:8]) ? CMD_DONE : SB_CMD_SEND;
-                     dbg_state_en         = (dbg_bus_clk_en & ~sb_cmd_pending) | (|abstractcs_reg[10:8]);
-            end
-            SB_CMD_SEND: begin
-                     sb_abmem_cmd_done_in = 1'b1;
-                     sb_abmem_data_done_in= 1'b1;
-                     sb_abmem_cmd_done_en = (sb_bus_cmd_read | sb_bus_cmd_write_addr) & dbg_bus_clk_en;
-                     sb_abmem_data_done_en= (sb_bus_cmd_read | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-                     dbg_nxtstate         = SB_CMD_RESP;
-                     dbg_state_en         = (sb_abmem_cmd_done | sb_abmem_cmd_done_en) & (sb_abmem_data_done | sb_abmem_data_done_en) & dbg_bus_clk_en;
-            end
-            SB_CMD_RESP: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = (sb_bus_rsp_read | sb_bus_rsp_write) & dbg_bus_clk_en;
-                     dbg_sb_bus_error     = (sb_bus_rsp_read | sb_bus_rsp_write) & sb_bus_rsp_error & dbg_bus_clk_en;
-                     data0_reg_wren2      = dbg_state_en & ~sb_abmem_cmd_write & ~dbg_sb_bus_error;
-            end
-            CMD_DONE: begin
-                     dbg_nxtstate         = HALTED;
-                     dbg_state_en         = 1'b1;
-                     abstractcs_busy_wren = dbg_state_en;                    // remove the busy bit from the abstracts ( bit 12 )
-                     abstractcs_busy_din  = 1'b0;
-                     sb_abmem_cmd_done_in = 1'b0;
-                     sb_abmem_data_done_in= 1'b0;
-                     sb_abmem_cmd_done_en = 1'b1;
-                     sb_abmem_data_done_en= 1'b1;
-            end
-            RESUMING : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = dmstatus_reg[17];             // resume ack has been updated in the dmstatus register
-           end
-           default : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = 1'b0;
-                     abstractcs_busy_wren    = 1'b0;
-                     abstractcs_busy_din     = 1'b0;
-                     dbg_halt_req            = 1'b0;         // single pulse output to the core
-                     dbg_resume_req          = 1'b0;         // single pulse output to the core
-                     dbg_sb_bus_error        = 1'b0;
-                     data0_reg_wren2         = 1'b0;
-                     sb_abmem_cmd_done_in    = 1'b0;
-                     sb_abmem_data_done_in   = 1'b0;
-                     sb_abmem_cmd_done_en    = 1'b0;
-                     sb_abmem_data_done_en   = 1'b0;
-          end
-         endcase
-   end // always_comb begin
-
-   assign dmi_reg_rdata_din[31:0] = ({32{dmi_reg_addr == 7'h4}}  & data0_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h5}}  & data1_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h10}} & {2'b0,dmcontrol_reg[29],1'b0,dmcontrol_reg[27:0]})  |  // Read0 to Write only bits
-                                    ({32{dmi_reg_addr == 7'h11}} & dmstatus_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h16}} & abstractcs_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h17}} & command_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h18}} & {30'h0,abstractauto_reg[1:0]})    |
-                                    ({32{dmi_reg_addr == 7'h40}} & haltsum0_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h38}} & sbcs_reg[31:0])       |
-                                    ({32{dmi_reg_addr == 7'h39}} & sbaddress0_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h3c}} & sbdata0_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h3d}} & sbdata1_reg[31:0]);
-
-
-   rvdffs #($bits(state_t)) dbg_state_reg    (.din(dbg_nxtstate), .dout({dbg_state}), .en(dbg_state_en), .rst_l(dbg_dm_rst_l & rst_l), .clk(dbg_free_clk));
-   rvdffe #(32)             dmi_rddata_reg   (.din(dmi_reg_rdata_din[31:0]), .dout(dmi_reg_rdata[31:0]), .en(dmi_reg_en), .rst_l(dbg_dm_rst_l), .clk(clk), .*);
-
-   assign abmem_addr[31:0]      = data1_reg[31:0];
-   assign abmem_addr_core_local = (abmem_addr_in_dccm_region | abmem_addr_in_iccm_region | abmem_addr_in_pic_region);
-   assign abmem_addr_external   = ~abmem_addr_core_local;
-
-   assign abmem_addr_in_dccm_region = (abmem_addr[31:28] == pt.DCCM_REGION) & pt.DCCM_ENABLE;
-   assign abmem_addr_in_iccm_region = (abmem_addr[31:28] == pt.ICCM_REGION) & pt.ICCM_ENABLE;
-   assign abmem_addr_in_pic_region  = (abmem_addr[31:28] == pt.PIC_REGION);
-
-   // interface for the core
-   assign dbg_cmd_addr[31:0]    = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {20'b0, command_reg[11:0]};
-   assign dbg_cmd_wrdata[31:0]  = data0_reg[31:0];
-   assign dbg_cmd_valid         = (dbg_state == CORE_CMD_START) & ~((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]) | ((command_reg[31:24] == 8'h2) & abmem_addr_external)) & dma_dbg_ready;
-   assign dbg_cmd_write         = command_reg[16];
-   assign dbg_cmd_type[1:0]     = (command_reg[31:24] == 8'h2) ? 2'b10 : {1'b0, (command_reg[15:12] == 4'b0)};
-   assign dbg_cmd_size[1:0]     = command_reg[21:20];
-
-   assign dbg_cmd_addr_incr[3:0]  = (command_reg[31:24] == 8'h2) ? (4'h1 << sb_abmem_cmd_size[1:0]) : 4'h1;
-   assign dbg_cmd_curr_addr[31:0] = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {16'b0, command_reg[15:0]};
-   assign dbg_cmd_next_addr[31:0] = dbg_cmd_curr_addr[31:0] + {28'h0,dbg_cmd_addr_incr[3:0]};
-
-   // Ask DMA to stop taking bus trxns since debug request is done
-   assign dbg_dma_bubble = ((dbg_state == CORE_CMD_START) & ~(|abstractcs_reg[10:8])) | (dbg_state == CORE_CMD_WAIT);
-
-   assign sb_cmd_pending       = (sb_state == CMD_RD) | (sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR) | (sb_state == CMD_WR_DATA) | (sb_state == RSP_RD) | (sb_state == RSP_WR);
-   assign sb_abmem_cmd_pending = (dbg_state == SB_CMD_START) | (dbg_state == SB_CMD_SEND) | (dbg_state== SB_CMD_RESP);
-
-
-  // system bus FSM
-  always_comb begin
-      sb_nxtstate            = SBIDLE;
-      sb_state_en            = 1'b0;
-      sbcs_sbbusy_wren       = 1'b0;
-      sbcs_sbbusy_din        = 1'b0;
-      sbcs_sberror_wren      = 1'b0;
-      sbcs_sberror_din[2:0]  = 3'b0;
-      sbaddress0_reg_wren1   = 1'b0;
-      case (sb_state)
-            SBIDLE: begin
-                     sb_nxtstate            = sbdata0wr_access ? WAIT_WR : WAIT_RD;
-                     sb_state_en            = (sbdata0wr_access | sbreadondata_access | sbreadonaddr_access) & ~(|sbcs_reg[14:12]) & ~sbcs_reg[22];
-                     sbcs_sbbusy_wren       = sb_state_en;                                                 // set the single read bit if it is a singlread command
-                     sbcs_sbbusy_din        = 1'b1;
-                     sbcs_sberror_wren      = sbcs_wren & (|dmi_reg_wdata[14:12]);                                            // write to clear the error bits
-                     sbcs_sberror_din[2:0]  = ~dmi_reg_wdata[14:12] & sbcs_reg[14:12];
-            end
-            WAIT_RD: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_RD;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            WAIT_WR: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_WR;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            CMD_RD : begin
-                     sb_nxtstate           = RSP_RD;
-                     sb_state_en           = sb_bus_cmd_read & dbg_bus_clk_en;
-            end
-            CMD_WR : begin
-                     sb_nxtstate           = (sb_bus_cmd_write_addr & sb_bus_cmd_write_data) ? RSP_WR : (sb_bus_cmd_write_data ? CMD_WR_ADDR : CMD_WR_DATA);
-                     sb_state_en           = (sb_bus_cmd_write_addr | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-            end
-            CMD_WR_ADDR : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_addr & dbg_bus_clk_en;
-            end
-            CMD_WR_DATA : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_data & dbg_bus_clk_en;
-            end
-            RSP_RD: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_read & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            RSP_WR: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_write & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            DONE: begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b1;
-                     sbcs_sbbusy_wren       = 1'b1;                           // reset the single read
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbaddress0_reg_wren1   = sbcs_reg[16] & (sbcs_reg[14:12] == 3'b0);    // auto increment was set and no error. Update to new address after completing the current command
-            end
-            default : begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b0;
-                     sbcs_sbbusy_wren       = 1'b0;
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbcs_sberror_wren      = 1'b0;
-                     sbcs_sberror_din[2:0]  = 3'b0;
-                     sbaddress0_reg_wren1   = 1'b0;
-           end
-         endcase
-   end // always_comb begin
-
-   rvdffs #($bits(sb_state_t)) sb_state_reg (.din(sb_nxtstate), .dout({sb_state}), .en(sb_state_en), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sb_abmem_cmd_write      = command_reg[16];
-   assign sb_abmem_cmd_size[2:0]  = {1'b0, command_reg[21:20]};
-   assign sb_abmem_cmd_addr[31:0] = abmem_addr[31:0];
-   assign sb_abmem_cmd_wdata[31:0] = data0_reg[31:0];
-
-   assign sb_cmd_size[2:0]   = sbcs_reg[19:17];
-   assign sb_cmd_wdata[63:0] = {sbdata1_reg[31:0], sbdata0_reg[31:0]};
-   assign sb_cmd_addr[31:0]  = sbaddress0_reg[31:0];
-
-   assign sb_abmem_cmd_awvalid    = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_cmd_done;
-   assign sb_abmem_cmd_wvalid     = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_data_done;
-   assign sb_abmem_cmd_arvalid    = (dbg_state == SB_CMD_SEND) & ~sb_abmem_cmd_write & ~sb_abmem_cmd_done & ~sb_abmem_data_done;
-   assign sb_abmem_read_pend      = (dbg_state == SB_CMD_RESP) & ~sb_abmem_cmd_write;
-
-   assign sb_cmd_awvalid     = ((sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR));
-   assign sb_cmd_wvalid      = ((sb_state == CMD_WR) | (sb_state == CMD_WR_DATA));
-   assign sb_cmd_arvalid     = (sb_state == CMD_RD);
-   assign sb_read_pend       = (sb_state == RSP_RD);
-
-   assign sb_axi_size[2:0]    = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_size[2:0] : sb_cmd_size[2:0];
-   assign sb_axi_addr[31:0]   = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_addr[31:0] : sb_cmd_addr[31:0];
-   assign sb_axi_wrdata[63:0] = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid) ? {2{sb_abmem_cmd_wdata[31:0]}} : sb_cmd_wdata[63:0];
-
-   // Generic bus response signals
-   assign sb_bus_cmd_read       = sb_axi_arvalid & sb_axi_arready;
-   assign sb_bus_cmd_write_addr = sb_axi_awvalid & sb_axi_awready;
-   assign sb_bus_cmd_write_data = sb_axi_wvalid  & sb_axi_wready;
-
-   assign sb_bus_rsp_read  = sb_axi_rvalid & sb_axi_rready;
-   assign sb_bus_rsp_write = sb_axi_bvalid & sb_axi_bready;
-   assign sb_bus_rsp_error = (sb_bus_rsp_read & (|(sb_axi_rresp[1:0]))) | (sb_bus_rsp_write & (|(sb_axi_bresp[1:0])));
-
-   // AXI Request signals
-   assign sb_axi_awvalid              = sb_abmem_cmd_awvalid | sb_cmd_awvalid;
-   assign sb_axi_awaddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_awid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_awsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_awprot[2:0]          = 3'b001;
-   assign sb_axi_awcache[3:0]         = 4'b1111;
-   assign sb_axi_awregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_awlen[7:0]           = '0;
-   assign sb_axi_awburst[1:0]         = 2'b01;
-   assign sb_axi_awqos[3:0]           = '0;
-   assign sb_axi_awlock               = '0;
-
-   assign sb_axi_wvalid       = sb_abmem_cmd_wvalid | sb_cmd_wvalid;
-   assign sb_axi_wdata[63:0]  = ({64{(sb_axi_size[2:0] == 3'h0)}} & {8{sb_axi_wrdata[7:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h1)}} & {4{sb_axi_wrdata[15:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h2)}} & {2{sb_axi_wrdata[31:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h3)}} & {sb_axi_wrdata[63:0]});
-   assign sb_axi_wstrb[7:0]   = ({8{(sb_axi_size[2:0] == 3'h0)}} & (8'h1 << sb_axi_addr[2:0])) |
-                                ({8{(sb_axi_size[2:0] == 3'h1)}} & (8'h3 << {sb_axi_addr[2:1],1'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h2)}} & (8'hf << {sb_axi_addr[2],2'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h3)}} & 8'hff);
-   assign sb_axi_wlast        = '1;
-
-   assign sb_axi_arvalid              = sb_abmem_cmd_arvalid | sb_cmd_arvalid;
-   assign sb_axi_araddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_arid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_arsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_arprot[2:0]          = 3'b001;
-   assign sb_axi_arcache[3:0]         = 4'b0;
-   assign sb_axi_arregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_arlen[7:0]           = '0;
-   assign sb_axi_arburst[1:0]         = 2'b01;
-   assign sb_axi_arqos[3:0]           = '0;
-   assign sb_axi_arlock               = '0;
-
-   // AXI Response signals
-   assign sb_axi_bready = 1'b1;
-
-   assign sb_axi_rready = 1'b1;
-   assign sb_bus_rdata[63:0] = ({64{sb_axi_size == 3'h0}} & ((sb_axi_rdata[63:0] >>  8*sb_axi_addr[2:0]) & 64'hff))       |
-                               ({64{sb_axi_size == 3'h1}} & ((sb_axi_rdata[63:0] >> 16*sb_axi_addr[2:1]) & 64'hffff))    |
-                               ({64{sb_axi_size == 3'h2}} & ((sb_axi_rdata[63:0] >> 32*sb_axi_addr[2]) & 64'hffff_ffff)) |
-                               ({64{sb_axi_size == 3'h3}} & sb_axi_rdata[63:0]);
-
-`ifdef RV_ASSERT_ON
-// assertion.
-//  when the resume_ack is asserted then the dec_tlu_dbg_halted should be 0
-   dm_check_resume_and_halted: assert property (@(posedge clk)  disable iff(~rst_l) (~dec_tlu_resume_ack | ~dec_tlu_dbg_halted));
-
-   assert_b2b_haltreq: assert property (@(posedge clk) disable iff (~(rst_l)) (##1 dbg_halt_req |=> ~dbg_halt_req));  // One cycle delay to fix weird issue around reset
-   assert_halt_resume_onehot: assert #0 ($onehot0({dbg_halt_req, dbg_resume_req}));
-`endif
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/cdecode b/verilog/rtl/BrqRV_EB1/design/dec/cdecode
deleted file mode 100644
index d98b523..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/cdecode
+++ /dev/null
@@ -1,254 +0,0 @@
-
-.definition
-
-
-
-# invalid rs2=0
-c.add0 =        [1001.....1....10]
-c.add1 =        [1001......1...10]
-c.add2 =        [1001.......1..10]
-c.add3 =        [1001........1.10]
-c.add4 =        [1001.........110]
-
-# invalid rs2=0
-c.mv0 =        [1000.....1....10]
-c.mv1 =        [1000......1...10]
-c.mv2 =        [1000.......1..10]
-c.mv3 =        [1000........1.10]
-c.mv4 =        [1000.........110]
-
-
-# invalid if rs1=0
-c.jalr0 =       [10011....0000010]
-c.jalr1 =       [1001.1...0000010]
-c.jalr2 =       [1001..1..0000010]
-c.jalr3 =       [1001...1.0000010]
-c.jalr4 =       [1001....10000010]
-
-c.addi  =        [000...........01]
-
-# invalid imm=0
-c.addi16sp0 =   [011100010.....01]
-c.addi16sp1 =   [011.000101....01]
-c.addi16sp2 =   [011.00010.1...01]
-c.addi16sp3 =   [011.00010..1..01]
-c.addi16sp4 =   [011.00010...1.01]
-c.addi16sp5 =   [011.00010....101]
-
-# invalid uimm=0
-c.addi4spn0 =   [0001..........00]
-c.addi4spn1 =   [000.1.........00]
-c.addi4spn2 =   [000..1........00]
-c.addi4spn3 =   [000...1.......00]
-c.addi4spn4 =   [000....1......00]
-c.addi4spn5 =   [000.....1.....00]
-c.addi4spn6 =   [000......1....00]
-c.addi4spn7 =   [000.......1...00]
-
-
-c.and =         [100011...11...01]
-c.andi =        [100.10........01]
-c.beqz =        [110...........01]
-c.bnez =        [111...........01]
-c.ebreak =      [1001000000000010]
-c.j =           [101...........01]
-c.jal =         [001...........01]
-
-
-c.jr0 =                 [10001....0000010]
-c.jr1 =                 [1000.1...0000010]
-c.jr2 =                 [1000..1..0000010]
-c.jr3 =                 [1000...1.0000010]
-c.jr4 =                 [1000....10000010]
-
-c.li =           [010...........01]
-
-# invalid rd=x2 or imm=0
-c.lui0 =                [01111.........01]
-c.lui1 =                [0111.1........01]
-c.lui2 =                [0111..1.......01]
-c.lui3 =                [0111...0......01]
-c.lui4 =                [0111....1.....01]
-c.lui5 =                [011.1....1....01]
-c.lui6 =                [011..1...1....01]
-c.lui7 =                [011...1..1....01]
-c.lui8 =                [011....0.1....01]
-c.lui9 =                [011.....11....01]
-c.lui10=                [011.1.....1...01]
-c.lui11=                [011..1....1...01]
-c.lui12 =               [011...1...1...01]
-c.lui13 =               [011....0..1...01]
-c.lui14 =               [011.....1.1...01]
-c.lui15 =               [011.1......1..01]
-c.lui16 =               [011..1.....1..01]
-c.lui17 =               [011...1....1..01]
-c.lui18 =               [011....0...1..01]
-c.lui19 =               [011.....1..1..01]
-c.lui20 =               [011.1.......1.01]
-c.lui21 =               [011..1......1.01]
-c.lui22 =               [011...1.....1.01]
-c.lui23 =               [011....0....1.01]
-c.lui24 =               [011.....1...1.01]
-c.lui25 =               [011.1........101]
-c.lui26 =               [011..1.......101]
-c.lui27 =               [011...1......101]
-c.lui28 =               [011....0.....101]
-c.lui29 =               [011.....1....101]
-
-
-c.lw =          [010...........00]
-
-
-c.lwsp =        [010...........10]
-
-c.or =          [100011...10...01]
-
-# bit 5 of the shift must be 0 to be legal
-c.slli =        [0000..........10]
-
-c.srai =        [100001........01]
-
-c.srli =        [100000........01]
-
-c.sub =         [100011...00...01]
-c.sw =          [110...........00]
-c.swsp =        [110...........10]
-c.xor =         [100011...01...01]
-
-
-.input
-rv32c = {
-        i[15]
-        i[14]
-        i[13]
-        i[12]
-        i[11]
-        i[10]
-        i[9]
-        i[8]
-        i[7]
-        i[6]
-        i[5]
-        i[4]
-        i[3]
-        i[2]
-        i[1]
-        i[0]
-}
-
-.output
-rv32c = {
-        rdrd
-        rdrs1
-        rs2rs2
-        rdprd
-        rdprs1
-        rs2prs2
-        rs2prd
-        uimm9_2
-        ulwimm6_2
-        ulwspimm7_2
-        rdeq2
-        rdeq1
-        rs1eq2
-        sbroffset8_1
-        simm9_4
-        simm5_0
-        sjaloffset11_1
-        sluimm17_12
-        uimm5_0
-        uswimm6_2
-        uswspimm7_2
-        o[31]
-        o[30]
-        o[29]
-        o[28]
-        o[27]
-        o[26]
-        o[25]
-        o[24]
-        o[23]
-        o[22]
-        o[21]
-        o[20]
-        o[19]
-        o[18]
-        o[17]
-        o[16]
-        o[15]
-        o[14]
-        o[13]
-        o[12]
-        o[11]
-        o[10]
-        o[9]
-        o[8]
-        o[7]
-        o[6]
-        o[5]
-        o[4]
-        o[3]
-        o[2]
-        o[1]
-        o[0]
-      }
-
-#  assign rs2d[4:0] = i[6:2];
-#
-#   assign rdd[4:0] = i[11:7];
-#
-#   assign rdpd[4:0] = {2'b01, i[9:7]};
-#
-#   assign rs2pd[4:0] = {2'b01, i[4:2]};
-
-.decode
-
-
-
-
-rv32c[c.add{0-4}] =             { rdrd rdrs1 rs2rs2                                    o[5] o[4] o[1] o[0] }
-
-rv32c[c.mv{0-4}] =              { rdrd rs2rs2                                          o[5] o[4] o[1] o[0] }
-
-rv32c[c.addi] =                 { rdrd rdrs1 simm5_0                                          o[4] o[1] o[0] }
-
-rv32c[c.addi16sp{0-5}] =        { rdeq2 rs1eq2 simm9_4                                        o[4] o[1] o[0] }
-rv32c[c.addi4spn{0-7}] =        { rs2prd rs1eq2 uimm9_2                                         o[4] o[1] o[0] }
-
-
-rv32c[c.and] =                  { rdprd rdprs1 rs2prs2          o[14] o[13] o[12]      o[5] o[4] o[1] o[0] }
-rv32c[c.andi] =                 { rdprd rdprs1 simm5_0            o[14] o[13] o[12]           o[4] o[1] o[0] }
-rv32c[c.beqz] =                 { rdprs1 sbroffset8_1                                o[6] o[5]      o[1] o[0] }
-rv32c[c.bnez] =                 { rdprs1 sbroffset8_1                          o[12] o[6] o[5]      o[1] o[0] }
-
-
-rv32c[c.ebreak] =               {                            o[20]                o[6] o[5] o[4] o[1] o[0] }
-
-rv32c[c.j] =                    { sjaloffset11_1                                            o[6] o[5]      o[3] o[2] o[1] o[0] }
-rv32c[c.jal] =                  { sjaloffset11_1 rdeq1                                      o[6] o[5]      o[3] o[2] o[1] o[0] }
-
-
-rv32c[c.jalr{0-4}] =            { rdeq1 rdrs1                                           o[6] o[5]           o[2] o[1] o[0] }
-rv32c[c.jr{0-4}] =              {       rdrs1                                           o[6] o[5]           o[2] o[1] o[0] }
-rv32c[c.li] =                   { rdrd simm5_0                                               o[4]           o[1] o[0] }
-
-rv32c[c.lui{0-29}] =            { rdrd sluimm17_12                                                o[5] o[4]      o[2] o[1] o[0] }
-rv32c[c.lw] =                   { rs2prd rdprs1 ulwimm6_2                    o[13]                                 o[1] o[0] }
-rv32c[c.lwsp] =                 { rdrd rs1eq2 ulwspimm7_2                    o[13]                                 o[1] o[0] }
-
-
-rv32c[c.or] =                   { rdprd rdprs1 rs2prs2               o[14] o[13]             o[5] o[4] o[1] o[0] }
-
-rv32c[c.slli] =            { rdrd rdrs1 uimm5_0                               o[12]            o[4] o[1] o[0] }
-rv32c[c.srai] =           { rdprd rdprs1 uimm5_0          o[30] o[14]        o[12]            o[4] o[1] o[0] }
-rv32c[c.srli] =            { rdprd rdprs1 uimm5_0                o[14]        o[12]            o[4] o[1] o[0] }
-
-
-rv32c[c.sub] =                  { rdprd rdprs1 rs2prs2        o[30]                          o[5] o[4] o[1] o[0] }
-rv32c[c.sw] =                   { rdprs1 rs2prs2 uswimm6_2                   o[13]             o[5]      o[1] o[0] }
-rv32c[c.swsp] =                 { rs2rs2 rs1eq2  uswspimm7_2                 o[13]             o[5]      o[1] o[0] }
-rv32c[c.xor] =                  { rdprd rdprs1 rs2prs2              o[14]                    o[5] o[4] o[1] o[0] }
-
-
-
-.end
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/csrdecode b/verilog/rtl/BrqRV_EB1/design/dec/csrdecode
deleted file mode 100644
index b43c79b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/csrdecode
+++ /dev/null
@@ -1,259 +0,0 @@
-.definition
-
-csr_misa =          [001100000001]
-csr_mvendorid =     [111100010001]
-csr_marchid =       [111100010010]
-csr_mimpid =        [111100010011]
-csr_mhartid =       [111100010100]
-csr_mstatus =       [001100000000]
-csr_mtvec =         [001100000101]
-csr_mip =           [001101000100]
-csr_mie =           [001100000100]
-csr_mcyclel =       [101100000000]
-csr_mcycleh =       [101110000000]
-csr_minstretl =     [101100000010]
-csr_minstreth =     [101110000010]
-csr_mscratch =      [001101000000]
-csr_mepc =          [001101000001]
-csr_mcause =        [001101000010]
-csr_mscause =       [011111111111]
-csr_mtval =         [001101000011]
-csr_mrac =          [011111000000]
-csr_dmst =          [011111000100]
-csr_mdeau =         [101111000000]
-csr_mdseac =        [111111000000]
-csr_meivt =         [101111001000]
-csr_meihap =        [111111001000]
-csr_meipt =         [101111001001]
-csr_meicpct =       [101111001010]
-csr_meicurpl =      [101111001100]
-csr_meicidpl =      [101111001011]
-csr_dcsr =          [011110110000]
-csr_dpc =           [011110110001]
-csr_dicawics =      [011111001000]
-csr_dicad0h =       [011111001100]
-csr_dicad0 =        [011111001001]
-csr_dicad1 =        [011111001010]
-csr_dicago =        [011111001011]
-csr_mtsel =         [011110100000]
-csr_mtdata1 =       [011110100001]
-csr_mtdata2 =       [011110100010]
-csr_mhpmc3 =        [101100000011]
-csr_mhpmc4 =        [101100000100]
-csr_mhpmc5 =        [101100000101]
-csr_mhpmc6 =        [101100000110]
-csr_mhpmc3h =       [101110000011]
-csr_mhpmc4h =       [101110000100]
-csr_mhpmc5h =       [101110000101]
-csr_mhpmc6h =       [101110000110]
-csr_mhpme3 =        [001100100011]
-csr_mhpme4 =        [001100100100]
-csr_mhpme5 =        [001100100101]
-csr_mhpme6 =        [001100100110]
-csr_micect =        [011111110000]
-csr_miccmect =      [011111110001]
-csr_mdccmect =      [011111110010]
-csr_mpmc =          [011111000110]
-csr_mcgc =          [011111111000]
-csr_mcpc =          [011111000010]
-csr_mfdc =          [011111111001]
-csr_mitctl0 =       [011111010100]
-csr_mitctl1 =       [011111010111]
-csr_mitb0 =         [011111010011]
-csr_mitb1 =         [011111010110]
-csr_mitcnt0 =       [011111010010]
-csr_mitcnt1 =       [011111010101]
-csr_perfva =        [101100000111]
-csr_perfvb =        [101100001...]
-csr_perfvc =        [10110001....]
-csr_perfvd =        [101110000111]
-csr_perfve =        [101110001...]
-csr_perfvf =        [10111001....]
-csr_perfvg =        [001100100111]
-csr_perfvh =        [001100101...]
-csr_perfvi =        [00110011....]
-csr_mcountinhibit = [001100100000]
-csr_mfdht =         [011111001110]
-csr_mfdhs =         [011111001111]
-
-.input
-
-csr = {
-        dec_csr_rdaddr_d[11]
-        dec_csr_rdaddr_d[10]
-        dec_csr_rdaddr_d[9]
-        dec_csr_rdaddr_d[8]
-        dec_csr_rdaddr_d[7]
-        dec_csr_rdaddr_d[6]
-        dec_csr_rdaddr_d[5]
-        dec_csr_rdaddr_d[4]
-        dec_csr_rdaddr_d[3]
-        dec_csr_rdaddr_d[2]
-        dec_csr_rdaddr_d[1]
-        dec_csr_rdaddr_d[0]
-}
-
-.output
-
-csr = {
-     csr_misa
-     csr_mvendorid
-     csr_marchid
-     csr_mimpid
-     csr_mhartid
-     csr_mstatus
-     csr_mtvec
-     csr_mip
-     csr_mie
-     csr_mcyclel
-     csr_mcycleh
-     csr_minstretl
-     csr_minstreth
-     csr_mscratch
-     csr_mepc
-     csr_mcause
-     csr_mscause
-     csr_mtval
-     csr_mrac
-     csr_dmst
-     csr_mdseac
-     csr_meihap
-     csr_meivt
-     csr_meipt
-     csr_meicurpl
-     csr_meicidpl
-     csr_dcsr
-     csr_mcgc
-     csr_mfdc
-     csr_dpc
-     csr_mtsel
-     csr_mtdata1
-     csr_mtdata2
-     csr_mhpmc3
-     csr_mhpmc4
-     csr_mhpmc5
-     csr_mhpmc6
-     csr_mhpmc3h
-     csr_mhpmc4h
-     csr_mhpmc5h
-     csr_mhpmc6h
-     csr_mhpme3
-     csr_mhpme4
-     csr_mhpme5
-     csr_mhpme6
-     csr_mcountinhibit
-     csr_mitctl0
-     csr_mitctl1
-     csr_mitb0
-     csr_mitb1
-     csr_mitcnt0
-     csr_mitcnt1
-csr_perfva
-csr_perfvb
-csr_perfvc
-csr_perfvd
-csr_perfve
-csr_perfvf
-csr_perfvg
-csr_perfvh
-csr_perfvi
-     csr_mpmc
-     csr_mcpc
-     csr_meicpct
-     csr_mdeau
-     csr_micect
-     csr_miccmect
-     csr_mdccmect
-csr_mfdht
-csr_mfdhs
-csr_dicawics
-csr_dicad0h
-csr_dicad0
-csr_dicad1
-csr_dicago
-     valid_only
-     presync
-     postsync
-}
-
-.decode
-
-csr[ csr_misa      ] = {  csr_misa      }
-csr[ csr_mvendorid ] = {  csr_mvendorid }
-csr[ csr_marchid   ] = {  csr_marchid   }
-csr[ csr_mimpid    ] = {  csr_mimpid    }
-csr[ csr_mhartid   ] = {  csr_mhartid   }
-csr[ csr_mstatus   ] = {  csr_mstatus postsync   }
-csr[ csr_mtvec     ] = {  csr_mtvec postsync}
-csr[ csr_mip       ] = {  csr_mip       }
-csr[ csr_mie       ] = {  csr_mie       }
-csr[ csr_mcyclel   ] = {  csr_mcyclel   }
-csr[ csr_mcycleh   ] = {  csr_mcycleh   }
-csr[ csr_minstretl ] = {  csr_minstretl presync }
-csr[ csr_minstreth ] = {  csr_minstreth presync }
-csr[ csr_mscratch  ] = {  csr_mscratch  }
-csr[ csr_mepc      ] = {  csr_mepc postsync}
-csr[ csr_mcause    ] = {  csr_mcause    }
-csr[ csr_mscause   ] = {  csr_mscause   }
-csr[ csr_mtval     ] = {  csr_mtval     }
-csr[ csr_mrac      ] = {  csr_mrac postsync     }
-csr[ csr_dmst      ] = {  csr_dmst postsync}
-csr[ csr_mdseac    ] = {  csr_mdseac    }
-csr[ csr_meipt     ] = {  csr_meipt     }
-csr[ csr_meihap    ] = {  csr_meihap    }
-csr[ csr_meivt     ] = {  csr_meivt     }
-csr[ csr_meicurpl  ] = {  csr_meicurpl  }
-csr[ csr_mdeau     ] = {  csr_mdeau    }
-csr[ csr_meicpct   ] = {  csr_meicpct   }
-csr[ csr_mpmc      ] = {  csr_mpmc      }
-csr[ csr_mcpc      ] = {  csr_mcpc presync postsync }
-csr[ csr_meicidpl  ] = {  csr_meicidpl  }
-csr[ csr_mcgc      ] = {  csr_mcgc      }
-csr[ csr_mcountinhibit] = {  csr_mcountinhibit presync postsync }
-csr[ csr_mfdc      ] = {  csr_mfdc presync postsync }
-csr[ csr_dcsr      ] = {  csr_dcsr      }
-csr[ csr_dpc       ] = {  csr_dpc       }
-csr[ csr_mtsel     ] = {  csr_mtsel     }
-csr[ csr_mtdata1   ] = {  csr_mtdata1  postsync }
-csr[ csr_mtdata2   ] = {  csr_mtdata2  postsync }
-csr[ csr_mhpmc3    ] = {  csr_mhpmc3  presync }
-csr[ csr_mhpmc4    ] = {  csr_mhpmc4  presync }
-csr[ csr_mhpmc5    ] = {  csr_mhpmc5  presync }
-csr[ csr_mhpmc6    ] = {  csr_mhpmc6  presync }
-csr[ csr_mhpmc3h   ] = {  csr_mhpmc3h presync  }
-csr[ csr_mhpmc4h   ] = {  csr_mhpmc4h presync  }
-csr[ csr_mhpmc5h   ] = {  csr_mhpmc5h presync  }
-csr[ csr_mhpmc6h   ] = {  csr_mhpmc6h presync  }
-csr[ csr_mhpme3    ] = {  csr_mhpme3    }
-csr[ csr_mhpme4    ] = {  csr_mhpme4    }
-csr[ csr_mhpme5    ] = {  csr_mhpme5    }
-csr[ csr_mhpme6    ] = {  csr_mhpme6    }
-csr[ csr_micect    ] = {  csr_micect    }
-csr[ csr_miccmect  ] = {  csr_miccmect  }
-csr[ csr_mdccmect  ] = {  csr_mdccmect  }
-csr[ csr_dicawics  ] = {  csr_dicawics  }
-csr[ csr_dicad0h   ] = {  csr_dicad0h   }
-csr[ csr_dicad0    ] = {  csr_dicad0    }
-csr[ csr_dicad1    ] = {  csr_dicad1    }
-csr[ csr_dicago    ] = {  csr_dicago    }
-csr[ csr_mitctl0   ] = {  csr_mitctl0   }
-csr[ csr_mitctl1   ] = {  csr_mitctl1   }
-csr[ csr_mitb0     ] = {  csr_mitb0     }
-csr[ csr_mitb1     ] = {  csr_mitb1     }
-csr[ csr_mitcnt0   ] = {  csr_mitcnt0   }
-csr[ csr_mitcnt1   ] = {  csr_mitcnt1   }
-csr[ csr_mfdht     ] = {  csr_mfdht }
-csr[ csr_mfdhs     ] = {  csr_mfdhs }
-csr[ csr_mcountinhibit] = {  csr_mcountinhibit presync postsync }
-
-csr[ csr_perfva    ] = { valid_only }
-csr[ csr_perfvb    ] = { valid_only }
-csr[ csr_perfvc    ] = { valid_only }
-csr[ csr_perfvd    ] = { valid_only }
-csr[ csr_perfve    ] = { valid_only }
-csr[ csr_perfvf    ] = { valid_only }
-csr[ csr_perfvg    ] = { valid_only }
-csr[ csr_perfvh    ] = { valid_only }
-csr[ csr_perfvi    ] = { valid_only }
-
-.end
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/decode b/verilog/rtl/BrqRV_EB1/design/dec/decode
deleted file mode 100644
index b9e98c8..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/decode
+++ /dev/null
@@ -1,582 +0,0 @@
-
-.definition
-
-clz       =  [011000000000.....001.....0010011]
-ctz       =  [011000000001.....001.....0010011]
-pcnt      =  [011000000010.....001.....0010011]
-sext_b    =  [011000000100.....001.....0010011]
-sext_h    =  [011000000101.....001.....0010011]
-slo       =  [0010000..........001.....0110011]
-sro       =  [0010000..........101.....0110011]
-sloi      =  [0010000..........001.....0010011]
-sroi      =  [0010000..........101.....0010011]
-
-min       =  [0000101..........100.....0110011]
-max       =  [0000101..........101.....0110011]
-minu      =  [0000101..........110.....0110011]
-maxu      =  [0000101..........111.....0110011]
-
-andn      =  [0100000..........111.....0110011]
-orn       =  [0100000..........110.....0110011]
-xnor      =  [0100000..........100.....0110011]
-pack      =  [0000100..........100.....0110011]
-packu     =  [0100100..........100.....0110011]
-packh     =  [0000100..........111.....0110011]
-rol       =  [0110000..........001.....0110011]
-ror       =  [0110000..........101.....0110011]
-rori      =  [0110000..........101.....0010011]
-
-sh1add    =  [0010000..........010.....0110011]
-sh2add    =  [0010000..........100.....0110011]
-sh3add    =  [0010000..........110.....0110011]
-
-sbset     =  [0010100..........001.....0110011]
-sbclr     =  [0100100..........001.....0110011]
-sbinv     =  [0110100..........001.....0110011]
-sbext     =  [0100100..........101.....0110011]
-
-sbseti    =  [0010100..........001.....0010011]
-sbclri    =  [0100100..........001.....0010011]
-sbinvi    =  [0110100..........001.....0010011]
-sbexti    =  [0100100..........101.....0010011]
-
-grev      =  [0110100..........101.....0110011]
-#grevi    =  [01101............101.....0010011]
-grevi0   =   [011010000000.....101.....0010011]
-grevi1   =   [011010000001.....101.....0010011]
-grevi2   =   [011010000010.....101.....0010011]
-grevi3   =   [011010000011.....101.....0010011]
-grevi4   =   [011010000100.....101.....0010011]
-grevi5   =   [011010000101.....101.....0010011]
-grevi6   =   [011010000110.....101.....0010011]
-grevi7   =   [011010000111.....101.....0010011]
-grevi8   =   [011010001000.....101.....0010011]
-grevi9   =   [011010001001.....101.....0010011]
-grevi10   =  [011010001010.....101.....0010011]
-grevi11   =  [011010001011.....101.....0010011]
-grevi12   =  [011010001100.....101.....0010011]
-grevi13   =  [011010001101.....101.....0010011]
-grevi14   =  [011010001110.....101.....0010011]
-grevi15   =  [011010001111.....101.....0010011]
-grevi16   =  [011010010000.....101.....0010011]
-grevi17   =  [011010010001.....101.....0010011]
-grevi18   =  [011010010010.....101.....0010011]
-grevi19   =  [011010010011.....101.....0010011]
-grevi20   =  [011010010100.....101.....0010011]
-grevi21   =  [011010010101.....101.....0010011]
-grevi22   =  [011010010110.....101.....0010011]
-grevi23   =  [011010010111.....101.....0010011]
-#grevi24  =  [011010011000.....101.....0010011]    # REV8
-rev8      =  [011010011000.....101.....0010011]
-grevi25   =  [011010011001.....101.....0010011]
-grevi26   =  [011010011010.....101.....0010011]
-grevi27   =  [011010011011.....101.....0010011]
-grevi28   =  [011010011100.....101.....0010011]
-grevi29   =  [011010011101.....101.....0010011]
-grevi30   =  [011010011110.....101.....0010011]
-#grevi31  =  [011010011111.....101.....0010011]    # REV
-rev       =  [011010011111.....101.....0010011]
-
-gorc      =  [0010100..........101.....0110011]
-#gorci    =  [00101............101.....0010011]
-gorci0    =  [001010000000.....101.....0010011]
-gorci1    =  [001010000001.....101.....0010011]
-gorci2    =  [001010000010.....101.....0010011]
-gorci3    =  [001010000011.....101.....0010011]
-gorci4    =  [001010000100.....101.....0010011]
-gorci5    =  [001010000101.....101.....0010011]
-gorci6    =  [001010000110.....101.....0010011]
-#gorci7   =  [001010000111.....101.....0010011]    # ORC_B
-orc_b     =  [001010000111.....101.....0010011]
-gorci8    =  [001010001000.....101.....0010011]
-gorci9    =  [001010001001.....101.....0010011]
-gorci10   =  [001010001010.....101.....0010011]
-gorci11   =  [001010001011.....101.....0010011]
-gorci12   =  [001010001100.....101.....0010011]
-gorci13   =  [001010001101.....101.....0010011]
-gorci14   =  [001010001110.....101.....0010011]
-gorci15   =  [001010001111.....101.....0010011]
-#gorci16  =  [001010010000.....101.....0010011]    # ORC16
-orc16     =  [001010010000.....101.....0010011]
-gorci17   =  [001010010001.....101.....0010011]
-gorci18   =  [001010010010.....101.....0010011]
-gorci19   =  [001010010011.....101.....0010011]
-gorci20   =  [001010010100.....101.....0010011]
-gorci21   =  [001010010101.....101.....0010011]
-gorci22   =  [001010010110.....101.....0010011]
-gorci23   =  [001010010111.....101.....0010011]
-gorci24   =  [001010011000.....101.....0010011]
-gorci25   =  [001010011001.....101.....0010011]
-gorci26   =  [001010011010.....101.....0010011]
-gorci27   =  [001010011011.....101.....0010011]
-gorci28   =  [001010011100.....101.....0010011]
-gorci29   =  [001010011101.....101.....0010011]
-gorci30   =  [001010011110.....101.....0010011]
-gorci31   =  [001010011111.....101.....0010011]
-
-
-shfl      =  [0000100..........001.....0110011]
-shfli     =  [00001000.........001.....0010011]
-
-unshfl    =  [0000100..........101.....0110011]
-unshfli   =  [00001000.........101.....0010011]
-
-bdep      =  [0100100..........110.....0110011]
-bext      =  [0000100..........110.....0110011]
-
-clmul     =  [0000101..........001.....0110011]
-clmulr    =  [0000101..........010.....0110011]
-clmulh    =  [0000101..........011.....0110011]
-
-crc32_b   =  [011000010000.....001.....0010011]
-crc32_h   =  [011000010001.....001.....0010011]
-crc32_w   =  [011000010010.....001.....0010011]
-crc32c_b  =  [011000011000.....001.....0010011]
-crc32c_h  =  [011000011001.....001.....0010011]
-crc32c_w  =  [011000011010.....001.....0010011]
-
-bfp       =  [0100100..........111.....0110011]
-
-
-
-
-
-add       =  [0000000..........000.....0110011]
-addi      =  [.................000.....0010011]
-
-sub       =  [0100000..........000.....0110011]
-
-and       =  [0000000..........111.....0110011]
-andi      =  [.................111.....0010011]
-
-or        =  [0000000..........110.....0110011]
-ori       =  [.................110.....0010011]
-
-xor       =  [0000000..........100.....0110011]
-xori      =  [.................100.....0010011]
-
-sll       =  [0000000..........001.....0110011]
-slli      =  [0000000..........001.....0010011]
-
-sra       =  [0100000..........101.....0110011]
-srai      =  [0100000..........101.....0010011]
-
-srl       =  [0000000..........101.....0110011]
-srli      =  [0000000..........101.....0010011]
-
-lui       =  [.........................0110111]
-auipc     =  [.........................0010111]
-
-slt       =  [0000000..........010.....0110011]
-sltu      =  [0000000..........011.....0110011]
-slti      =  [.................010.....0010011]
-sltiu     =  [.................011.....0010011]
-
-beq       =  [.................000.....1100011]
-bne       =  [.................001.....1100011]
-bge       =  [.................101.....1100011]
-blt       =  [.................100.....1100011]
-bgeu      =  [.................111.....1100011]
-bltu      =  [.................110.....1100011]
-
-jal       =  [.........................1101111]
-jalr      =  [.................000.....1100111]
-
-lb        =  [.................000.....0000011]
-lh        =  [.................001.....0000011]
-lw        =  [.................010.....0000011]
-
-sb        =  [.................000.....0100011]
-sh        =  [.................001.....0100011]
-sw        =  [.................010.....0100011]
-
-lbu       =  [.................100.....0000011]
-lhu       =  [.................101.....0000011]
-
-fence     =  [0000........00000000000000001111]
-fence.i   =  [00000000000000000001000000001111]
-
-ebreak    =  [00000000000100000000000001110011]
-ecall     =  [00000000000000000000000001110011]
-
-mret      =  [00110000001000000000000001110011]
-
-wfi       =  [00010000010100000000000001110011]
-
-csrrc_ro  =  [............00000011.....1110011]
-csrrc_rw0 =  [............1....011.....1110011]
-csrrc_rw1 =  [.............1...011.....1110011]
-csrrc_rw2 =  [..............1..011.....1110011]
-csrrc_rw3 =  [...............1.011.....1110011]
-csrrc_rw4 =  [................1011.....1110011]
-
-csrrci_ro  = [............00000111.....1110011]
-csrrci_rw0 = [............1....111.....1110011]
-csrrci_rw1 = [.............1...111.....1110011]
-csrrci_rw2 = [..............1..111.....1110011]
-csrrci_rw3 = [...............1.111.....1110011]
-csrrci_rw4 = [................1111.....1110011]
-
-csrrs_ro  =  [............00000010.....1110011]
-csrrs_rw0 =  [............1....010.....1110011]
-csrrs_rw1 =  [.............1...010.....1110011]
-csrrs_rw2 =  [..............1..010.....1110011]
-csrrs_rw3 =  [...............1.010.....1110011]
-csrrs_rw4 =  [................1010.....1110011]
-
-csrrsi_ro  = [............00000110.....1110011]
-csrrsi_rw0 = [............1....110.....1110011]
-csrrsi_rw1 = [.............1...110.....1110011]
-csrrsi_rw2 = [..............1..110.....1110011]
-csrrsi_rw3 = [...............1.110.....1110011]
-csrrsi_rw4 = [................1110.....1110011]
-
-
-csrw  =       [.................001000001110011]
-csrrw0 =      [.................001....11110011]
-csrrw1 =      [.................001...1.1110011]
-csrrw2 =      [.................001..1..1110011]
-csrrw3 =      [.................001.1...1110011]
-csrrw4 =      [.................0011....1110011]
-
-csrwi   =     [.................101000001110011]
-csrrwi0 =     [.................101....11110011]
-csrrwi1 =     [.................101...1.1110011]
-csrrwi2 =     [.................101..1..1110011]
-csrrwi3 =     [.................101.1...1110011]
-csrrwi4 =     [.................1011....1110011]
-
-mul =        [0000001..........000.....0110011]
-mulh =       [0000001..........001.....0110011]
-mulhsu =     [0000001..........010.....0110011]
-mulhu =      [0000001..........011.....0110011]
-
-div =        [0000001..........100.....0110011]
-divu =       [0000001..........101.....0110011]
-rem =        [0000001..........110.....0110011]
-remu =       [0000001..........111.....0110011]
-
-
-.input
-
-rv32i = {
-        i[31]
-        i[30]
-        i[29]
-        i[28]
-        i[27]
-        i[26]
-        i[25]
-        i[24]
-        i[23]
-        i[22]
-        i[21]
-        i[20]
-        i[19]
-        i[18]
-        i[17]
-        i[16]
-        i[15]
-        i[14]
-        i[13]
-        i[12]
-        i[11]
-        i[10]
-        i[9]
-        i[8]
-        i[7]
-        i[6]
-        i[5]
-        i[4]
-        i[3]
-        i[2]
-        i[1]
-        i[0]
-}
-
-
-.output
-
-rv32i = {
-      alu
-      rs1
-      rs2
-      imm12
-      rd
-      shimm5
-      imm20
-      pc
-      load
-      store
-      lsu
-      add
-      sub
-      land
-      lor
-      lxor
-      sll
-      sra
-      srl
-      slt
-      unsign
-      condbr
-      beq
-      bne
-      bge
-      blt
-      jal
-      by
-      half
-      word
-      csr_read
-      csr_clr
-      csr_set
-      csr_write
-      csr_imm
-      presync
-      postsync
-      ebreak
-      ecall
-      mret
-      mul
-      rs1_sign
-      rs2_sign
-      low
-      div
-      rem
-      fence
-      fence_i
-      clz
-      ctz
-      pcnt
-      sext_b
-      sext_h
-      slo
-      sro
-      min
-      max
-      pack
-      packu
-      packh
-      rol
-      ror
-      zbb
-      sbset
-      sbclr
-      sbinv
-      sbext
-      zbs
-      bext
-      bdep
-      zbe
-      clmul
-      clmulh
-      clmulr
-      zbc
-      grev
-      gorc
-      shfl
-      unshfl
-      zbp
-      crc32_b
-      crc32_h
-      crc32_w
-      crc32c_b
-      crc32c_h
-      crc32c_w
-      zbr
-      bfp
-      zbf
-      sh1add
-      sh2add
-      sh3add
-      zba
-      pm_alu
-}
-
-.decode
-
-rv32i[clz]       =  { alu zbb     rs1     rd                       clz   }
-rv32i[ctz]       =  { alu zbb     rs1     rd                       ctz   }
-rv32i[pcnt]      =  { alu zbb     rs1     rd                       pcnt  }
-rv32i[sext_b]    =  { alu zbb     rs1     rd                       sext_b}
-rv32i[sext_h]    =  { alu zbb     rs1     rd                       sext_h}
-rv32i[slo]       =  { alu     zbp rs1 rs2 rd                       slo   }
-rv32i[sro]       =  { alu     zbp rs1 rs2 rd                       sro   }
-rv32i[sloi]      =  { alu     zbp rs1     rd         shimm5        slo   }
-rv32i[sroi]      =  { alu     zbp rs1     rd         shimm5        sro   }
-rv32i[min]       =  { alu zbb     rs1 rs2 rd                sub    min   }
-rv32i[max]       =  { alu zbb     rs1 rs2 rd                sub    max   }
-rv32i[minu]      =  { alu zbb     rs1 rs2 rd  unsign        sub    min   }
-rv32i[maxu]      =  { alu zbb     rs1 rs2 rd  unsign        sub    max   }
-rv32i[andn]      =  { alu zbb zbp rs1 rs2 rd                       land  }
-rv32i[orn]       =  { alu zbb zbp rs1 rs2 rd                       lor   }
-rv32i[xnor]      =  { alu zbb zbp rs1 rs2 rd                       lxor  }
-rv32i[pack]      =  { alu zbb zbp rs1 rs2 rd                       pack  }
-rv32i[packu]     =  { alu zbb zbp rs1 rs2 rd                       packu }
-rv32i[packh]     =  { alu zbb zbp rs1 rs2 rd                       packh }
-rv32i[rol]       =  { alu zbb zbp rs1 rs2 rd                       rol   }
-rv32i[ror]       =  { alu zbb zbp rs1 rs2 rd                       ror   }
-rv32i[rori]      =  { alu zbb zbp rs1     rd         shimm5        ror   }
-rv32i[sbset]     =  { alu zbs     rs1 rs2 rd                       sbset }
-rv32i[sbclr]     =  { alu zbs     rs1 rs2 rd                       sbclr }
-rv32i[sbinv]     =  { alu zbs     rs1 rs2 rd                       sbinv }
-rv32i[sbext]     =  { alu zbs     rs1 rs2 rd                       sbext }
-rv32i[sbseti]    =  { alu zbs     rs1     rd         shimm5        sbset }
-rv32i[sbclri]    =  { alu zbs     rs1     rd         shimm5        sbclr }
-rv32i[sbinvi]    =  { alu zbs     rs1     rd         shimm5        sbinv }
-rv32i[sbexti]    =  { alu zbs     rs1     rd         shimm5        sbext }
-rv32i[sh1add]    =  { alu zba     rs1 rs2 rd                       sh1add}
-rv32i[sh2add]    =  { alu zba     rs1 rs2 rd                       sh2add}
-rv32i[sh3add]    =  { alu zba     rs1 rs2 rd                       sh3add}
-
-rv32i[mul]       =  { mul         rs1 rs2 rd low                         }
-rv32i[mulh]      =  { mul         rs1 rs2 rd rs1_sign rs2_sign           }
-rv32i[mulhu]     =  { mul         rs1 rs2 rd                             }
-rv32i[mulhsu]    =  { mul         rs1 rs2 rd rs1_sign                    }
-rv32i[bext]      =  { mul zbe     rs1 rs2 rd                       bext  }
-rv32i[bdep]      =  { mul zbe     rs1 rs2 rd                       bdep  }
-rv32i[clmul]     =  { mul zbc     rs1 rs2 rd                       clmul }
-rv32i[clmulh]    =  { mul zbc     rs1 rs2 rd                       clmulh}
-rv32i[clmulr]    =  { mul zbc     rs1 rs2 rd                       clmulr}
-
-rv32i[crc32_b]   =  { mul zbr     rs1     rd                       crc32_b}
-rv32i[crc32_h]   =  { mul zbr     rs1     rd                       crc32_h}
-rv32i[crc32_w]   =  { mul zbr     rs1     rd                       crc32_w}
-rv32i[crc32c_b]  =  { mul zbr     rs1     rd                       crc32c_b}
-rv32i[crc32c_h]  =  { mul zbr     rs1     rd                       crc32c_h}
-rv32i[crc32c_w]  =  { mul zbr     rs1     rd                       crc32c_w}
-
-rv32i[bfp]       =  { mul zbf     rs1 rs2 rd                       bfp   }
-
-rv32i[grev]          =  { mul     zbp rs1 rs2 rd                       grev  }
-
-rv32i[grevi{0-23}]   =  { mul     zbp rs1     rd         shimm5        grev  }
-rv32i[grevi{25-30}]  =  { mul     zbp rs1     rd         shimm5        grev  }
-
-rv32i[rev8]          =  { alu zbb zbp rs1     rd         shimm5        grev  } # grevi24
-rv32i[rev]           =  { alu zbb zbp rs1     rd         shimm5        grev  } # grevi31
-
-rv32i[gorc]          =  { mul     zbp rs1 rs2 rd                       gorc  }
-
-rv32i[gorci{0-6}]    =  { mul     zbp rs1     rd         shimm5        gorc  }
-rv32i[gorci{8-15}]   =  { mul     zbp rs1     rd         shimm5        gorc  }
-rv32i[gorci{17-31}]  =  { mul     zbp rs1     rd         shimm5        gorc  }
-
-rv32i[orc_b]         =  { alu zbb zbp rs1     rd         shimm5        gorc  }  # gorci7
-rv32i[orc16]         =  { alu zbb zbp rs1     rd         shimm5        gorc  }  # gorci16
-
-
-rv32i[shfl]      =  { mul     zbp rs1 rs2 rd                       shfl  }
-rv32i[shfli]     =  { mul     zbp rs1     rd         shimm5        shfl  }
-
-rv32i[unshfl]    =  { mul     zbp rs1 rs2 rd                       unshfl}
-rv32i[unshfli]   =  { mul     zbp rs1     rd         shimm5        unshfl}
-
-
-rv32i[div]       =  { div rs1 rs2 rd           }
-rv32i[divu]      =  { div rs1 rs2 rd unsign    }
-rv32i[rem]       =  { div rs1 rs2 rd        rem}
-rv32i[remu]      =  { div rs1 rs2 rd unsign rem}
-
-rv32i[add]       =  { alu rs1 rs2   rd add pm_alu }
-rv32i[addi]      =  { alu rs1 imm12 rd add pm_alu }
-
-rv32i[sub]       =  { alu rs1 rs2   rd sub pm_alu }
-
-rv32i[and]       =  { alu rs1 rs2   rd land pm_alu }
-rv32i[andi]      =  { alu rs1 imm12 rd land pm_alu }
-
-rv32i[or]        =  { alu rs1 rs2   rd lor pm_alu }
-rv32i[ori]       =  { alu rs1 imm12 rd lor pm_alu }
-
-rv32i[xor]       =  { alu rs1 rs2   rd lxor pm_alu }
-rv32i[xori]      =  { alu rs1 imm12 rd lxor pm_alu }
-
-rv32i[sll]       =  { alu rs1 rs2    rd sll pm_alu }
-rv32i[slli]      =  { alu rs1 shimm5 rd sll pm_alu }
-
-rv32i[sra]       =  { alu rs1 rs2    rd sra pm_alu }
-rv32i[srai]      =  { alu rs1 shimm5 rd sra pm_alu }
-
-rv32i[srl]       =  { alu rs1 rs2    rd srl pm_alu }
-rv32i[srli]      =  { alu rs1 shimm5 rd srl pm_alu }
-
-rv32i[lui]       =  { alu imm20    rd lor pm_alu }
-rv32i[auipc]     =  { alu imm20 pc rd add pm_alu }
-
-
-rv32i[slt]    =     { alu rs1 rs2    rd sub slt        pm_alu }
-rv32i[sltu]    =    { alu rs1 rs2    rd sub slt unsign pm_alu }
-rv32i[slti]    =    { alu rs1 imm12  rd sub slt        pm_alu }
-rv32i[sltiu]    =   { alu rs1 imm12  rd sub slt unsign pm_alu }
-
-rv32i[beq]    =     { alu rs1 rs2 sub condbr beq }
-rv32i[bne]    =     { alu rs1 rs2 sub condbr bne }
-rv32i[bge]    =     { alu rs1 rs2 sub condbr bge }
-rv32i[blt]    =     { alu rs1 rs2 sub condbr blt }
-rv32i[bgeu]    =    { alu rs1 rs2 sub condbr bge unsign }
-rv32i[bltu]    =    { alu rs1 rs2 sub condbr blt unsign }
-
-rv32i[jal]    =     { alu imm20 rd pc    jal }
-rv32i[jalr]    =    { alu rs1   rd imm12 jal }
-
-
-
-rv32i[lb] =      { lsu load rs1 rd by    }
-rv32i[lh] =      { lsu load rs1 rd half  }
-rv32i[lw] =      { lsu load rs1 rd word  }
-rv32i[lbu] =     { lsu load rs1 rd by   unsign  }
-rv32i[lhu] =     { lsu load rs1 rd half unsign  }
-
-rv32i[sb] =      { lsu store rs1 rs2 by   }
-rv32i[sh] =      { lsu store rs1 rs2 half }
-rv32i[sw] =      { lsu store rs1 rs2 word }
-
-
-rv32i[fence] =   { alu lor fence presync}
-
-# fence.i has fence effect in addtion to flush I$ and redirect
-rv32i[fence.i] = { alu lor fence fence_i presync postsync}
-
-# nops for now
-
-rv32i[ebreak] = {  alu rs1 imm12 rd lor ebreak postsync}
-rv32i[ecall] =  {  alu rs1 imm12 rd lor ecall  postsync}
-rv32i[mret] =   {  alu rs1 imm12 rd lor mret   postsync}
-
-rv32i[wfi] =    {  alu rs1 imm12 rd lor pm_alu }
-
-# csr means read
-
-# csr_read - put csr on rs2 and rs1 0's
-rv32i[csrrc_ro] =        { alu rd csr_read }
-
-# put csr on rs2 and make rs1 0's into alu.  Save rs1 for csr_clr later
-rv32i[csrrc_rw{0-4}] =   { alu rd csr_read rs1 csr_clr            presync postsync }
-
-rv32i[csrrci_ro] =       { alu rd csr_read }
-
-rv32i[csrrci_rw{0-4}] =  { alu rd csr_read rs1 csr_clr   csr_imm  presync postsync }
-
-rv32i[csrrs_ro] =        { alu rd csr_read }
-
-rv32i[csrrs_rw{0-4}] =   { alu rd csr_read rs1 csr_set            presync postsync }
-
-rv32i[csrrsi_ro] =       { alu rd csr_read }
-
-rv32i[csrrsi_rw{0-4}] =  { alu rd csr_read rs1 csr_set   csr_imm presync postsync }
-
-rv32i[csrrw{0-4}] =     { alu rd csr_read rs1 csr_write         presync postsync }
-
-
-rv32i[csrrwi{0-4}] =         { alu rd csr_read rs1 csr_write csr_imm presync postsync }
-
-# optimize csr write only - pipelined
-rv32i[csrw] =                { alu rd rs1 csr_write           }
-
-rv32i[csrwi]       =         { alu rd     csr_write csr_imm   }
-
-
-.end
-
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec.sv b/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec.sv
deleted file mode 100644
index 3c08145..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec.sv
+++ /dev/null
@@ -1,454 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// dec: decode unit - decode, bypassing, ARF, interrupts
-//
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Decode
-// Comments: Decode, dependency scoreboard, ARF
-//
-//
-// A -> D -> EX1 ... WB
-//
-//********************************************************************************
-
-module eb1_dec
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_clk,                     // Clock always.                  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic lsu_fastint_stall_any,        // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-   output logic dec_extint_stall,            // Stall on external interrupt
-
-   output logic dec_i0_decode_d,             // Valid instruction at D-stage and not blocked
-   output logic dec_pause_state_cg,          // to top for active state clock gating
-
-   output logic dec_tlu_core_empty,
-
-   input logic rst_l,                        // reset, active low
-   input logic [31:1] rst_vec,               // reset vector, from core pins
-
-   input logic        nmi_int,               // NMI pin
-   input logic [31:1] nmi_vec,               // NMI vector, from pins
-
-   input logic  i_cpu_halt_req,              // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,               // Asynchronous Restart request to CPU
-
-   output logic o_cpu_halt_status,           // Halt status of core (pmu/fw)
-   output logic o_cpu_halt_ack,              // Halt request ack
-   output logic o_cpu_run_ack,               // Run request ack
-   output logic o_debug_mode_status,         // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id,               // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req,           // Async halt request
-   input logic mpc_debug_run_req,            // Async run request
-   input logic mpc_reset_run_req,            // Run/halt after reset
-   output logic mpc_debug_halt_ack,          // Halt ack
-   output logic mpc_debug_run_ack,           // Run ack
-   output logic debug_brkpt_status,          // debug breakpoint
-
-    input logic       exu_pmu_i0_br_misp,    // slot 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // slot 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // slot 0 4 byte branch
-
-
-   input logic                                lsu_nonblock_load_valid_m,      // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,        // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,        // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,    // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,   // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,   // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,     // -> corresponding tag
-   input logic [31:0]                         lsu_nonblock_load_data,         // nonblock load data
-
-   input logic       lsu_pmu_bus_trxn,           // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned,     // D side bus misaligned
-   input logic       lsu_pmu_bus_error,          // D side bus error
-   input logic       lsu_pmu_bus_busy,           // D side bus busy
-   input logic       lsu_pmu_misaligned_m,       // D side load or store misaligned
-   input logic       lsu_pmu_load_external_m,    // D side bus load
-   input logic       lsu_pmu_store_external_m,   // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr,          // Fast int address
-   input logic [1:0] lsu_fir_error,          // Fast int lookup error
-
-   input logic       ifu_pmu_instr_aligned,  // aligned instructions
-   input logic       ifu_pmu_fetch_stall,    // fetch unit stalled
-   input logic       ifu_pmu_ic_miss,        // icache miss
-   input logic       ifu_pmu_ic_hit,         // icache hit
-   input logic       ifu_pmu_bus_error,      // Instruction side bus error
-   input logic       ifu_pmu_bus_busy,       // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn,       // Instruction side bus transaction
-
-   input logic       ifu_ic_error_start,     // IC single bit error
-   input logic       ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-   input logic [3:0]  lsu_trigger_match_m,
-   input logic        dbg_cmd_valid,         // debugger abstract command valid
-   input logic        dbg_cmd_write,         // command is a write
-   input logic  [1:0] dbg_cmd_type,          // command type
-   input logic [31:0] dbg_cmd_addr,          // command address
-   input logic  [1:0] dbg_cmd_wrdata,        // command write data, for fence/fence_i
-
-
-   input logic        ifu_i0_icaf,           // icache access fault
-   input logic [1:0]  ifu_i0_icaf_type,      // icache access fault type
-
-   input logic   ifu_i0_icaf_second,         // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,               // icache/iccm double-bit error
-
-   input logic lsu_idle_any,                 // lsu idle for halting
-
-   input eb1_br_pkt_t i0_brp,                                  // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,            // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,           // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_lsu_error_pkt_t lsu_error_pkt_r,         // LSU exception/error packet
-   input logic         lsu_single_ecc_error_incr,      // LSU inc SB error counter
-
-   input logic         lsu_imprecise_error_load_any,   // LSU imprecise load bus error
-   input logic         lsu_imprecise_error_store_any,  // LSU imprecise store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any,   // LSU imprecise bus error address
-
-   input logic [31:0]  exu_div_result,      // final div result
-   input logic         exu_div_wren,        // Divide write enable to GPR
-
-   input logic [31:0] exu_csr_rs1_x,        // rs1 for csr instruction
-
-   input logic [31:0] lsu_result_m,         // load result
-   input logic [31:0] lsu_result_corr_r,    // load result - corrected load data
-
-   input logic        lsu_load_stall_any,   // This is for blocking loads
-   input logic        lsu_store_stall_any,  // This is for blocking stores
-   input logic        dma_dccm_stall_any,   // stall any load/store at decode, pmu event
-   input logic        dma_iccm_stall_any,   // iccm stalled, pmu event
-
-   input logic       iccm_dma_sb_error,     // ICCM DMA single bit error
-
-   input logic exu_flush_final,             // slot0 flush
-
-   input logic [31:1] exu_npc_r,            // next PC
-
-   input logic [31:0] exu_i0_result_x,      // alu result x
-
-
-   input logic         ifu_i0_valid,                  // fetch valids to instruction buffer
-   input logic [31:0]  ifu_i0_instr,                  // fetch inst's to instruction buffer
-   input logic [31:1]  ifu_i0_pc,                     // pc's for instruction buffer
-   input logic         ifu_i0_pc4,                    // indication of 4B or 2B for corresponding inst
-   input logic  [31:1] exu_i0_pc_x,                   // pc's for e1 from the alu's
-
-   input logic mexintpend,                            // External interrupt pending
-   input logic timer_int,                             // Timer interrupt pending (from pin)
-   input logic soft_int,                              // Software interrupt pending (from pin)
-
-   input logic [7:0] pic_claimid,                     // PIC claimid
-   input logic [3:0] pic_pl,                          // PIC priv level
-   input logic       mhwakeup,                        // High priority wakeup
-
-   output logic [3:0] dec_tlu_meicurpl,               // to PIC, Current priv level
-   output logic [3:0] dec_tlu_meipt,                  // to PIC
-
-   input logic [70:0] ifu_ic_debug_rd_data,           // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid,            // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-// Debug start
-   input logic dbg_halt_req,                 // DM requests a halt
-   input logic dbg_resume_req,               // DM requests a resume
-   input logic ifu_miss_state_idle,          // I-side miss buffer empty
-
-   output logic dec_tlu_dbg_halted,          // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode,          // Core is in debug mode
-   output logic dec_tlu_resume_ack,          // Resume acknowledge
-   output logic dec_tlu_flush_noredir_r,     // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only,     // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r,    // single step
-   output logic dec_tlu_flush_err_r,         // iside perr/ecc rfpc
-   output logic [31:2] dec_tlu_meihap,       // Fast ext int base
-
-   output logic dec_debug_wdata_rs1_d,       // insert debug write data into rs1 at decode
-
-   output logic [31:0] dec_dbg_rddata,       // debug command read data
-
-   output logic dec_dbg_cmd_done,            // abstract command is done
-   output logic dec_dbg_cmd_fail,            // abstract command failed (illegal reg address)
-
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // info needed by debug trigger blocks
-
-   output logic dec_tlu_force_halt,          // halt has been forced
-// Debug end
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r,             // history
-   input logic        exu_i0_br_error_r,            // error
-   input logic        exu_i0_br_start_error_r,      // start error
-   input logic        exu_i0_br_valid_r,            // valid
-   input logic        exu_i0_br_mp_r,               // mispredict
-   input logic        exu_i0_br_middle_r,           // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r,         // way hit or repl
-
-   output logic         dec_i0_rs1_en_d,            // Qualify GPR RS1 data
-   output logic         dec_i0_rs2_en_d,            // Qualify GPR RS2 data
-   output logic  [31:0] gpr_i0_rs1_d,               // gpr rs1 data
-   output logic  [31:0] gpr_i0_rs2_d,               // gpr rs2 data
-
-   output logic [31:0] dec_i0_immed_d,              // immediate data
-   output logic [12:1] dec_i0_br_immed_d,           // br immediate data
-
-   output        eb1_alu_pkt_t i0_ap,              // alu packet
-
-   output logic          dec_i0_alu_decode_d,       // schedule on D-stage alu
-   output logic          dec_i0_branch_d,           // Branch in D-stage
-
-   output logic          dec_i0_select_pc_d,        // select pc onto rs1 for jal's
-
-   output logic [31:1]  dec_i0_pc_d,                // pc's at decode
-   output logic [3:0]   dec_i0_rs1_bypass_en_d,     // rs1 bypass enable
-   output logic [3:0]   dec_i0_rs2_bypass_en_d,     // rs2 bypass enable
-
-   output logic [31:0]  dec_i0_result_r,            // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                  // lsu packet
-   output logic             dec_qual_lsu_d,         // LSU instruction at D.  Use to quiet LSU operands
-   output eb1_mul_pkt_t    mul_p,                  // mul packet
-   output eb1_div_pkt_t    div_p,                  // div packet
-   output logic             dec_div_cancel,         // cancel divide operation
-
-   output logic [11:0] dec_lsu_offset_d,            // 12b offset for load/store addresses
-
-   output logic        dec_csr_ren_d,               // CSR read enable
-   output logic [31:0] dec_csr_rddata_d,            // CSR read data
-
-   output logic        dec_tlu_flush_lower_r,       // tlu flush due to late mp, exception, rfpc, or int
-   output logic        dec_tlu_flush_lower_wb,
-   output logic [31:1] dec_tlu_flush_path_r,        // tlu flush target
-   output logic        dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic        dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-
-   output logic [31:1] pred_correct_npc_x,          // npc if prediction is correct at e2 stage
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt,      // slot 0 branch predictor update packet
-
-   output logic dec_tlu_perfcnt0,                   // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,                   // toggles when slot0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2,                   // toggles when slot0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3,                   // toggles when slot0 perf counter 3 has an event inc
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,                        // prediction packet to alus
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic dec_lsu_valid_raw_d,
-
-   output logic [31:0] dec_tlu_mrac_ff,              // CSR for memory region control
-
-   output logic [1:0] dec_data_en,                   // clock-gate control logic
-   output logic [1:0] dec_ctl_en,
-
-   input logic [15:0] ifu_i0_cinst,                  // 16b compressed instruction
-
-   output eb1_trace_pkt_t  trace_rv_trace_pkt,      // trace packet
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable,     // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable,           // disable core ECC
-   output logic  dec_tlu_bpred_disable,              // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,      // disable writebuffer coalescing
-   output logic [2:0]  dec_tlu_dma_qos_prty,         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override,          // override misc clock domain gating
-   output logic  dec_tlu_ifu_clk_override,           // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,           // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,           // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,           // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,         // override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override,          // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override,           // override ICCM clock domain gating
-
-   output logic  dec_tlu_i0_commit_cmt,              // committed i0 instruction
-   input  logic  scan_mode                           // Flop scan mode control
- 
-
-   );
-
-
-   logic  dec_tlu_dec_clk_override;      // to and from dec blocks
-   logic  clk_override;
-
-   logic               dec_ib0_valid_d;
-
-   logic               dec_pmu_instr_decoded;
-   logic               dec_pmu_decode_stall;
-   logic               dec_pmu_presync_stall;
-   logic               dec_pmu_postsync_stall;
-
-   logic dec_tlu_wr_pause_r;             // CSR write to pause reg is at R.
-
-   logic [4:0]  dec_i0_rs1_d;
-   logic [4:0]  dec_i0_rs2_d;
-
-   logic [31:0] dec_i0_instr_d;
-
-   logic  dec_tlu_trace_disable;
-   logic  dec_tlu_pipelining_disable;
-
-
-   logic [4:0]  dec_i0_waddr_r;
-   logic        dec_i0_wen_r;
-   logic [31:0] dec_i0_wdata_r;
-   logic        dec_csr_wen_r;           // csr write enable at wb
-   logic [11:0] dec_csr_wraddr_r;        // write address for csryes
-   logic [31:0] dec_csr_wrdata_r;        // csr write data at wb
-
-   logic [11:0] dec_csr_rdaddr_d;        // read address for csr
-   logic        dec_csr_legal_d;         // csr indicates legal operation
-
-   logic        dec_csr_wen_unq_d;       // valid csr with write - for csr legal
-   logic        dec_csr_any_unq_d;       // valid csr - for csr legal
-   logic        dec_csr_stall_int_ff;    // csr is mie/mstatus
-
-   eb1_trap_pkt_t dec_tlu_packet_r;
-
-   logic        dec_i0_pc4_d;
-   logic        dec_tlu_presync_d;
-   logic        dec_tlu_postsync_d;
-   logic        dec_tlu_debug_stall;
-
-   logic [31:0] dec_illegal_inst;
-
-   logic                      dec_i0_icaf_d;
-
-   logic                      dec_i0_dbecc_d;
-   logic                      dec_i0_icaf_second_d;
-   logic [3:0]                dec_i0_trigger_match_d;
-   logic                      dec_debug_fence_d;
-   logic                      dec_nonblock_load_wen;
-   logic [4:0]                dec_nonblock_load_waddr;
-   logic                      dec_tlu_flush_pause_r;
-   eb1_br_pkt_t                   dec_i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index;          // Fully associt btb index
-
-   logic [31:1]               dec_tlu_i0_pc_r;
-   logic                      dec_tlu_i0_kill_writeb_wb;
-   logic                      dec_tlu_i0_valid_r;
-
-   logic                      dec_pause_state;
-
-   logic [1:0]                dec_i0_icaf_type_d;   // i0 instruction access fault type
-
-   logic                      dec_tlu_flush_extint; // Fast ext int started
-
-   logic [31:0]               dec_i0_inst_wb;
-   logic [31:1]               dec_i0_pc_wb;
-   logic                      dec_tlu_i0_valid_wb1,  dec_tlu_int_valid_wb1;
-   logic [4:0]                dec_tlu_exc_cause_wb1;
-   logic [31:0]               dec_tlu_mtval_wb1;
-   logic                      dec_tlu_i0_exc_valid_wb1;
-
-   logic [4:0]                div_waddr_wb;
-   logic                      dec_div_active;
-
-   logic                      dec_debug_valid_d;
-
-
-// Adding signals for vector
-   
-   //logic stall_scalar;
-   
-   
-   
-   assign clk_override = dec_tlu_dec_clk_override;
-
-
-   assign dec_dbg_rddata[31:0] = dec_i0_wdata_r[31:0];
-
-
-   eb1_dec_ib_ctl #(.pt(pt)) instbuff (.*);
-
-
-   eb1_dec_decode_ctl #(.pt(pt)) decode (.*);
-
-
-   eb1_dec_tlu_ctl #(.pt(pt)) tlu (.*);
-
-
-   eb1_dec_gpr_ctl #(.pt(pt)) arf (.*,
-                    // inputs
-                    .raddr0(dec_i0_rs1_d[4:0]),
-                    .raddr1(dec_i0_rs2_d[4:0]),
-
-                    .wen0(dec_i0_wen_r),          .waddr0(dec_i0_waddr_r[4:0]),          .wd0(dec_i0_wdata_r[31:0]),
-                    .wen1(dec_nonblock_load_wen), .waddr1(dec_nonblock_load_waddr[4:0]), .wd1(lsu_nonblock_load_data[31:0]),
-                    .wen2(exu_div_wren),          .waddr2(div_waddr_wb),                 .wd2(exu_div_result[31:0]),
-
-                    // outputs
-                    .rd0(gpr_i0_rs1_d[31:0]), .rd1(gpr_i0_rs2_d[31:0])
-                    );
-
-
-// Trigger
-
-   eb1_dec_trigger #(.pt(pt)) dec_trigger (.*);
-
-
-
-
-// trace
-   assign trace_rv_trace_pkt.trace_rv_i_insn_ip      =   dec_i0_inst_wb[31:0];
-   assign trace_rv_trace_pkt.trace_rv_i_address_ip   = { dec_i0_pc_wb[31:1], 1'b0};
-
-   assign trace_rv_trace_pkt.trace_rv_i_valid_ip     = dec_tlu_int_valid_wb1 | dec_tlu_i0_valid_wb1 | dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_exception_ip = dec_tlu_int_valid_wb1 |  dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_ecause_ip    = dec_tlu_exc_cause_wb1[4:0];     // replicate across ports
-   assign trace_rv_trace_pkt.trace_rv_i_interrupt_ip = dec_tlu_int_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_tval_ip      = dec_tlu_mtval_wb1[31:0];        // replicate across ports
-
-
-
-// end trace
-
-
-endmodule // eb1_dec
-
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_decode_ctl.sv b/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_decode_ctl.sv
deleted file mode 100644
index b663545..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_decode_ctl.sv
+++ /dev/null
@@ -1,1825 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_dec_decode_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic dec_tlu_trace_disable,
-   input logic dec_debug_valid_d,
-
-   input logic dec_tlu_flush_extint,         // Flush external interrupt
-
-   input logic dec_tlu_force_halt,           // invalidate nonblock load cam on a force halt event
-
-   output logic dec_extint_stall,            // Stall from external interrupt
-
-   input  logic [15:0] ifu_i0_cinst,         // 16b compressed instruction
-   output logic [31:0] dec_i0_inst_wb,       // 32b instruction at wb+1 for trace encoder
-   output logic [31:1] dec_i0_pc_wb,         // 31b pc at wb+1 for trace encoder
-
-
-   input logic                                lsu_nonblock_load_valid_m,       // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,         // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,         // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,     // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,    // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,    // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,      // -> corresponding tag
-
-
-   input logic [3:0] dec_i0_trigger_match_d,          // i0 decode trigger matches
-
-   input logic dec_tlu_wr_pause_r,                    // pause instruction at r
-   input logic dec_tlu_pipelining_disable,            // pipeline disable - presync, i0 decode only
-
-   input logic [3:0]  lsu_trigger_match_m,            // lsu trigger matches
-
-   input logic lsu_pmu_misaligned_m,                  // perf mon: load/store misalign
-   input logic dec_tlu_debug_stall,                   // debug stall decode
-   input logic dec_tlu_flush_leak_one_r,              // leak1 instruction
-
-   input logic dec_debug_fence_d,                     // debug fence instruction
-
-   input logic [1:0] dbg_cmd_wrdata,                  // disambiguate fence, fence_i
-
-   input logic dec_i0_icaf_d,                         // icache access fault
-   input logic dec_i0_icaf_second_d,                  // i0 instruction access fault on second 2B of 4B inst
-   input logic [1:0] dec_i0_icaf_type_d,              // i0 instruction access fault type
-
-   input logic dec_i0_dbecc_d,                        // icache/iccm double-bit error
-
-   input eb1_br_pkt_t dec_i0_brp,                    // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   input logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,  // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag, // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   input logic lsu_idle_any,                          // lsu idle: if fence instr & ~lsu_idle then stall decode
-
-   input logic lsu_load_stall_any,                    // stall any load at decode
-   input logic lsu_store_stall_any,                   // stall any store at decode
-   input logic dma_dccm_stall_any,                    // stall any load/store at decode
-
-   input logic exu_div_wren,                          // nonblocking divide write enable to GPR.
-
-   input logic dec_tlu_i0_kill_writeb_wb,             // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_wb,                // trap lower flush
-   input logic dec_tlu_i0_kill_writeb_r,              // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_r,                 // trap lower flush
-   input logic dec_tlu_flush_pause_r,                 // don't clear pause state on initial lower flush
-   input logic dec_tlu_presync_d,                     // CSR read needs to be presync'd
-   input logic dec_tlu_postsync_d,                    // CSR ops that need to be postsync'd
-
-   input logic dec_i0_pc4_d,                          // inst is 4B inst else 2B
-
-   input logic [31:0] dec_csr_rddata_d,               // csr read data at wb
-   input logic dec_csr_legal_d,                       // csr indicates legal operation
-
-   input logic [31:0] exu_csr_rs1_x,                  // rs1 for csr instr
-
-   input logic [31:0] lsu_result_m,                   // load result
-   input logic [31:0] lsu_result_corr_r,              // load result - corrected data for writing gpr's, not for bypassing
-
-   input logic exu_flush_final,                       // lower flush or i0 flush at X or D
-
-   input logic [31:1] exu_i0_pc_x,                    // pcs at e1
-
-   input logic [31:0] dec_i0_instr_d,                 // inst at decode
-
-   input logic  dec_ib0_valid_d,                      // inst valid at decode
-
-   input logic [31:0] exu_i0_result_x,                // from primary alu's
-
-   input logic  clk,                                  // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic  active_clk,                           // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic  free_l2clk,                           // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic  clk_override,                         // Override non-functional clock gating
-   input logic  rst_l,                                // Flop reset
-
-
-
-   output logic        dec_i0_rs1_en_d,               // rs1 enable at decode
-   output logic        dec_i0_rs2_en_d,               // rs2 enable at decode
-
-   output logic [4:0]  dec_i0_rs1_d,                  // rs1 logical source
-   output logic [4:0]  dec_i0_rs2_d,                  // rs2 logical source
-
-   output logic [31:0] dec_i0_immed_d,                // 32b immediate data decode
-
-
-   output logic [12:1] dec_i0_br_immed_d,             // 12b branch immediate
-
-   output eb1_alu_pkt_t i0_ap,                       // alu packets
-
-   output logic        dec_i0_decode_d,               // i0 decode
-
-   output logic        dec_i0_alu_decode_d,           // decode to D-stage alu
-   output logic        dec_i0_branch_d,               // Branch in D-stage
-
-   output logic [4:0]  dec_i0_waddr_r,                // i0 logical source to write to gpr's
-   output logic        dec_i0_wen_r,                  // i0 write enable
-   output logic [31:0] dec_i0_wdata_r,                // i0 write data
-
-   output logic        dec_i0_select_pc_d,            // i0 select pc for rs1 - branches
-
-   output logic [3:0]    dec_i0_rs1_bypass_en_d,      // i0 rs1 bypass enable
-   output logic [3:0]    dec_i0_rs2_bypass_en_d,      // i0 rs2 bypass enable
-   output logic [31:0]   dec_i0_result_r,             // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                    // load/store packet
-   output logic             dec_qual_lsu_d,           // LSU instruction at D.  Use to quiet LSU operands
-
-   output eb1_mul_pkt_t    mul_p,                    // multiply packet
-
-   output eb1_div_pkt_t    div_p,                    // divide packet
-   output logic [4:0]       div_waddr_wb,             // DIV write address to GPR
-   output logic             dec_div_cancel,           // cancel the divide operation
-
-   output logic        dec_lsu_valid_raw_d,
-   output logic [11:0] dec_lsu_offset_d,
-
-   output logic        dec_csr_ren_d,                 // valid csr decode
-   output logic        dec_csr_wen_unq_d,             // valid csr with write - for csr legal
-   output logic        dec_csr_any_unq_d,             // valid csr - for csr legal
-   output logic [11:0] dec_csr_rdaddr_d,              // read address for csr
-   output logic        dec_csr_wen_r,                 // csr write enable at r
-   output logic [11:0] dec_csr_wraddr_r,              // write address for csr
-   output logic [31:0] dec_csr_wrdata_r,              // csr write data at r
-   output logic        dec_csr_stall_int_ff,          // csr is mie/mstatus
-
-   output              dec_tlu_i0_valid_r,            // i0 valid inst at c
-
-   output eb1_trap_pkt_t   dec_tlu_packet_r,              // trap packet
-
-   output logic [31:1] dec_tlu_i0_pc_r,               // i0 trap pc
-
-   output logic [31:0] dec_illegal_inst,              // illegal inst
-   output logic [31:1] pred_correct_npc_x,            // npc e2 if the prediction is correct
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,      // i0 predict packet decode
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d, // i0 predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d, // i0 predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d, // i0_predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic [1:0] dec_data_en,                    // clock-gating logic
-   output logic [1:0] dec_ctl_en,
-
-   output logic       dec_pmu_instr_decoded,          // number of instructions decode this cycle encoded
-   output logic       dec_pmu_decode_stall,           // decode is stalled
-   output logic       dec_pmu_presync_stall,          // decode has presync stall
-   output logic       dec_pmu_postsync_stall,         // decode has postsync stall
-
-   output logic       dec_nonblock_load_wen,          // write enable for nonblock load
-   output logic [4:0] dec_nonblock_load_waddr,        // logical write addr for nonblock load
-   output logic       dec_pause_state,                // core in pause state
-   output logic       dec_pause_state_cg,             // pause state for clock-gating
-
-   output logic       dec_div_active,                 // non-block divide is active
-
-   input  logic       scan_mode
-   
-   );
-
-
-
-
-   eb1_dec_pkt_t           i0_dp_raw, i0_dp;
-
-   logic [31:0]        i0;
-   logic               i0_valid_d;
-
-   logic [31:0]        i0_result_r;
-
-   logic [2:0]         i0_rs1bypass, i0_rs2bypass;
-
-   logic               i0_jalimm20;
-   logic               i0_uiimm20;
-
-   logic               lsu_decode_d;
-   logic [31:0]        i0_immed_d;
-   logic               i0_presync;
-   logic               i0_postsync;
-
-   logic               postsync_stall;
-   logic               ps_stall;
-
-   logic               prior_inflight, prior_inflight_wb;
-
-   logic               csr_clr_d, csr_set_d, csr_write_d;
-
-   logic               csr_clr_x,csr_set_x,csr_write_x,csr_imm_x;
-   logic [31:0]        csr_mask_x;
-   logic [31:0]        write_csr_data_x;
-   logic [31:0]        write_csr_data_in;
-   logic [31:0]        write_csr_data;
-   logic               csr_data_wen;
-
-   logic [4:0]         csrimm_x;
-
-   logic [31:0]        csr_rddata_x;
-
-   logic               mul_decode_d;
-   logic               div_decode_d;
-   logic               div_e1_to_r;
-   logic               div_flush;
-   logic               div_active_in;
-   logic               div_active;
-   logic               i0_nonblock_div_stall;
-   logic               i0_div_prior_div_stall;
-   logic               nonblock_div_cancel;
-
-   logic               i0_legal;
-   logic               shift_illegal;
-   logic               illegal_inst_en;
-   logic               illegal_lockout_in, illegal_lockout;
-   logic               i0_legal_decode_d;
-   logic               i0_exulegal_decode_d, i0_exudecode_d, i0_exublock_d;
-
-   logic [12:1]        last_br_immed_d;
-   logic               i0_rs1_depend_i0_x, i0_rs1_depend_i0_r;
-   logic               i0_rs2_depend_i0_x, i0_rs2_depend_i0_r;
-
-   logic               i0_div_decode_d;
-   logic               i0_load_block_d;
-   logic [1:0]         i0_rs1_depth_d, i0_rs2_depth_d;
-
-   logic               i0_load_stall_d;
-   logic               i0_store_stall_d;
-
-   logic               i0_predict_nt, i0_predict_t;
-
-   logic               i0_notbr_error, i0_br_toffset_error;
-   logic               i0_ret_error;
-   logic               i0_br_error;
-   logic               i0_br_error_all;
-   logic [11:0]        i0_br_offset;
-
-   logic [20:1]        i0_pcall_imm;                          // predicted jal's
-   logic               i0_pcall_12b_offset;
-   logic               i0_pcall_raw;
-   logic               i0_pcall_case;
-   logic               i0_pcall;
-
-   logic               i0_pja_raw;
-   logic               i0_pja_case;
-   logic               i0_pja;
-
-   logic               i0_pret_case;
-   logic               i0_pret_raw, i0_pret;
-
-   logic               i0_jal;                                // jal's that are not predicted
-
-
-   logic               i0_predict_br;
-
-   logic               store_data_bypass_d, store_data_bypass_m;
-
-   eb1_class_pkt_t         i0_rs1_class_d, i0_rs2_class_d;
-
-   eb1_class_pkt_t         i0_d_c, i0_x_c, i0_r_c;
-
-
-   logic               i0_ap_pc2, i0_ap_pc4;
-
-   logic               i0_rd_en_d;
-
-   logic               load_ldst_bypass_d;
-
-   logic               leak1_i0_stall_in, leak1_i0_stall;
-   logic               leak1_i1_stall_in, leak1_i1_stall;
-   logic               leak1_mode;
-
-   logic               i0_csr_write_only_d;
-
-   logic               prior_inflight_x, prior_inflight_eff;
-   logic               any_csr_d;
-
-   logic               prior_csr_write;
-
-   logic [3:0]        i0_pipe_en;
-   logic              i0_r_ctl_en,  i0_x_ctl_en,  i0_wb_ctl_en;
-   logic              i0_x_data_en, i0_r_data_en, i0_wb_data_en;
-
-   logic              debug_fence_i;
-   logic              debug_fence;
-
-   logic              i0_csr_write;
-   logic              presync_stall;
-
-   logic              i0_instr_error;
-   logic              i0_icaf_d;
-
-   logic              clear_pause;
-   logic              pause_state_in, pause_state;
-   logic              pause_stall;
-
-   logic              i0_brp_valid;
-   logic              nonblock_load_cancel;
-   logic              lsu_idle;
-   logic              lsu_pmu_misaligned_r;
-   logic              csr_ren_qual_d;
-   logic              csr_read_x;
-   logic              i0_block_d;
-   logic              i0_block_raw_d;  // This is use to create the raw valid
-   logic              ps_stall_in;
-   logic [31:0]       i0_result_x;
-
-   eb1_dest_pkt_t         d_d, x_d, r_d, wbd;
-   eb1_dest_pkt_t         x_d_in, r_d_in;
-
-   eb1_trap_pkt_t         d_t, x_t, x_t_in, r_t_in, r_t;
-
-   logic [3:0]        lsu_trigger_match_r;
-
-   logic [31:1]       dec_i0_pc_r;
-
-   logic csr_read, csr_write;
-   logic i0_br_unpred;
-
-   logic nonblock_load_valid_m_delay;
-   logic i0_wen_r;
-
-   logic tlu_wr_pause_r1;
-   logic tlu_wr_pause_r2;
-
-   logic flush_final_r;
-
-   logic bitmanip_zbb_legal;
-   logic bitmanip_zbs_legal;
-   logic bitmanip_zbe_legal;
-   logic bitmanip_zbc_legal;
-   logic bitmanip_zbp_legal;
-   logic bitmanip_zbr_legal;
-   logic bitmanip_zbf_legal;
-   logic bitmanip_zba_legal;
-   logic bitmanip_zbb_zbp_legal;
-   logic bitmanip_legal;
-
-   logic              data_gate_en;
-   logic              data_gate_clk;
-
-
-   localparam NBLOAD_SIZE     = pt.LSU_NUM_NBLOAD;
-   localparam NBLOAD_SIZE_MSB = int'(pt.LSU_NUM_NBLOAD)-1;
-   localparam NBLOAD_TAG_MSB  = pt.LSU_NUM_NBLOAD_WIDTH-1;
-
-
-   logic                     cam_write, cam_inv_reset, cam_data_reset;
-   logic [NBLOAD_TAG_MSB:0]  cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag;
-   logic [NBLOAD_SIZE_MSB:0] cam_wen;
-
-   logic [NBLOAD_TAG_MSB:0]  load_data_tag;
-   logic [NBLOAD_SIZE_MSB:0] nonblock_load_write;
-
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_raw;
-
-   logic [4:0] nonblock_load_rd;
-   logic i0_nonblock_load_stall;
-   logic i0_nonblock_boundary_stall;
-
-   logic i0_rs1_nonblock_load_bypass_en_d, i0_rs2_nonblock_load_bypass_en_d;
-
-   logic i0_load_kill_wen_r;
-
-   logic found;
-
-   logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val;
-
-   logic debug_fence_raw;
-
-   logic [31:0] i0_result_r_raw;
-   logic [31:0] i0_result_corr_r;
-
-   logic [12:1] last_br_immed_x;
-
-   logic [31:0]        i0_inst_d;
-   logic [31:0]        i0_inst_x;
-   logic [31:0]        i0_inst_r;
-   logic [31:0]        i0_inst_wb_in;
-   logic [31:0]        i0_inst_wb;
-
-   logic [31:1]        i0_pc_wb;
-
-   logic               i0_wb_en;
-
-   logic               trace_enable;
-
-   logic               debug_valid_x;
-
-   eb1_inst_pkt_t i0_itype;
-   eb1_reg_pkt_t i0r;
-   
-
-
-   rvdffie  #(8) misc1ff (.*,
-                          .clk(free_l2clk),
-                          .din( {leak1_i1_stall_in,leak1_i0_stall_in,dec_tlu_flush_extint,pause_state_in ,dec_tlu_wr_pause_r, tlu_wr_pause_r1,illegal_lockout_in,ps_stall_in}),
-                          .dout({leak1_i1_stall,   leak1_i0_stall,   dec_extint_stall,    pause_state,       tlu_wr_pause_r1,tlu_wr_pause_r2,illegal_lockout,   ps_stall   })
-                          );
-
-   rvdffie  #(8) misc2ff (.*,
-                          .clk(free_l2clk),
-                          .din( {lsu_trigger_match_m[3:0],lsu_pmu_misaligned_m,div_active_in,exu_flush_final,  dec_debug_valid_d}),
-                          .dout({lsu_trigger_match_r[3:0],lsu_pmu_misaligned_r,div_active,       flush_final_r,    debug_valid_x})
-                          );
-
-if(pt.BTB_ENABLE==1) begin
-// branch prediction
-
-
-   // in leak1_mode, ignore any predictions for i0, treat branch as if we haven't seen it before
-   // in leak1 mode, also ignore branch errors for i0
-   assign i0_brp_valid                        =  dec_i0_brp.valid & ~leak1_mode & ~i0_icaf_d;
-
-   assign dec_i0_predict_p_d.misp        =  '0;
-   assign dec_i0_predict_p_d.ataken      =  '0;
-   assign dec_i0_predict_p_d.boffset     =  '0;
-
-   assign dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-   assign dec_i0_predict_p_d.pja         =  i0_pja;
-   assign dec_i0_predict_p_d.pret        =  i0_pret;
-   assign dec_i0_predict_p_d.prett[31:1] =  dec_i0_brp.prett[31:1];
-   assign dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   assign dec_i0_predict_p_d.hist[1:0]   =  dec_i0_brp.hist[1:0];
-   assign dec_i0_predict_p_d.valid       =  i0_brp_valid & i0_legal_decode_d;
-   assign i0_notbr_error                 =  i0_brp_valid & ~(i0_dp_raw.condbr | i0_pcall_raw | i0_pja_raw | i0_pret_raw);
-
-   // no toffset error for a pret
-   assign i0_br_toffset_error                               =  i0_brp_valid & dec_i0_brp.hist[1] & (dec_i0_brp.toffset[11:0] != i0_br_offset[11:0]) & ~i0_pret_raw;
-   assign i0_ret_error                                      =  i0_brp_valid & (dec_i0_brp.ret ^ i0_pret_raw);
-   assign i0_br_error                                       =  dec_i0_brp.br_error | i0_notbr_error | i0_br_toffset_error | i0_ret_error;
-   assign dec_i0_predict_p_d.br_error                       =  i0_br_error & i0_legal_decode_d & ~leak1_mode;
-   assign dec_i0_predict_p_d.br_start_error                 =  dec_i0_brp.br_start_error & i0_legal_decode_d & ~leak1_mode;
-   assign i0_predict_index_d[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] =  dec_i0_bp_index;
-
-   assign i0_predict_btag_d[pt.BTB_BTAG_SIZE-1:0]           =  dec_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0];
-   assign i0_br_error_all                                   = (i0_br_error | dec_i0_brp.br_start_error) & ~leak1_mode;
-   assign dec_i0_predict_p_d.toffset[11:0]                  =  i0_br_offset[11:0];
-   assign i0_predict_fghr_d[pt.BHT_GHR_SIZE-1:0]            =  dec_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0];
-   assign dec_i0_predict_p_d.way                            =  dec_i0_brp.way;
-
-
-   if(pt.BTB_FULLYA) begin
-      logic btb_error_found, btb_error_found_f;
-      logic [$clog2(pt.BTB_SIZE)-1:0] fa_error_index_ns;
-
-      assign btb_error_found = (i0_br_error_all | btb_error_found_f) & ~dec_tlu_flush_lower_r;
-      assign fa_error_index_ns = (i0_br_error_all & ~btb_error_found_f) ? dec_i0_bp_fa_index : dec_fa_error_index;
-
-      rvdff #($clog2(pt.BTB_SIZE)+1) btberrorfa_f   (.*, .clk(active_clk),
-                                                         .din({btb_error_found,    fa_error_index_ns}),
-                                                         .dout({btb_error_found_f, dec_fa_error_index}));
-
-
-   end
-   else
-     assign dec_fa_error_index = 'b0;
-
-
-   //   end
-end // if (pt.BTB_ENABLE==1)
-else begin
-
-   always_comb begin
-      dec_i0_predict_p_d = '0;
-      dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-      dec_i0_predict_p_d.pja         =  i0_pja;
-      dec_i0_predict_p_d.pret        =  i0_pret;
-      dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   end
-
-   assign i0_br_error_all = '0;
-   assign i0_predict_index_d = '0;
-   assign i0_predict_btag_d = '0;
-   assign i0_predict_fghr_d = '0;
-   assign i0_brp_valid = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // on br error turn anything into a nop
-   // on i0 instruction fetch access fault turn anything into a nop
-   // nop =>   alu rs1 imm12 rd lor
-
-   assign i0_icaf_d = dec_i0_icaf_d | dec_i0_dbecc_d;
-
-   assign i0_instr_error = i0_icaf_d;
-
-   always_comb begin
-      i0_dp = i0_dp_raw;
-      if (i0_br_error_all | i0_instr_error) begin
-         i0_dp          =   '0;
-         i0_dp.alu      = 1'b1;
-         i0_dp.rs1      = 1'b1;
-         i0_dp.rs2      = 1'b1;
-         i0_dp.lor      = 1'b1;
-         i0_dp.legal    = 1'b1;
-         i0_dp.postsync = 1'b1;
-      end
-   end
-
-   assign i0[31:0] = dec_i0_instr_d[31:0];
-
-   assign dec_i0_select_pc_d = i0_dp.pc;
-
-   // branches that can be predicted
-
-   assign i0_predict_br =  i0_dp.condbr | i0_pcall | i0_pja | i0_pret;
-
-   assign i0_predict_nt = ~(dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-   assign i0_predict_t  =  (dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-
-   assign i0_ap.add     =  i0_dp.add;
-   assign i0_ap.sub     =  i0_dp.sub;
-   assign i0_ap.land    =  i0_dp.land;
-   assign i0_ap.lor     =  i0_dp.lor;
-   assign i0_ap.lxor    =  i0_dp.lxor;
-   assign i0_ap.sll     =  i0_dp.sll;
-   assign i0_ap.srl     =  i0_dp.srl;
-   assign i0_ap.sra     =  i0_dp.sra;
-   assign i0_ap.slt     =  i0_dp.slt;
-   assign i0_ap.unsign  =  i0_dp.unsign;
-   assign i0_ap.beq     =  i0_dp.beq;
-   assign i0_ap.bne     =  i0_dp.bne;
-   assign i0_ap.blt     =  i0_dp.blt;
-   assign i0_ap.bge     =  i0_dp.bge;
-
-   assign i0_ap.clz     =  i0_dp.clz;
-   assign i0_ap.ctz     =  i0_dp.ctz;
-   assign i0_ap.pcnt    =  i0_dp.pcnt;
-   assign i0_ap.sext_b  =  i0_dp.sext_b;
-   assign i0_ap.sext_h  =  i0_dp.sext_h;
-   assign i0_ap.sh1add  =  i0_dp.sh1add;
-   assign i0_ap.sh2add  =  i0_dp.sh2add;
-   assign i0_ap.sh3add  =  i0_dp.sh3add;
-   assign i0_ap.zba     =  i0_dp.zba;
-   assign i0_ap.slo     =  i0_dp.slo;
-   assign i0_ap.sro     =  i0_dp.sro;
-   assign i0_ap.min     =  i0_dp.min;
-   assign i0_ap.max     =  i0_dp.max;
-   assign i0_ap.pack    =  i0_dp.pack;
-   assign i0_ap.packu   =  i0_dp.packu;
-   assign i0_ap.packh   =  i0_dp.packh;
-   assign i0_ap.rol     =  i0_dp.rol;
-   assign i0_ap.ror     =  i0_dp.ror;
-   assign i0_ap.grev    =  i0_dp.grev;
-   assign i0_ap.gorc    =  i0_dp.gorc;
-   assign i0_ap.zbb     =  i0_dp.zbb;
-   assign i0_ap.sbset   =  i0_dp.sbset;
-   assign i0_ap.sbclr   =  i0_dp.sbclr;
-   assign i0_ap.sbinv   =  i0_dp.sbinv;
-   assign i0_ap.sbext   =  i0_dp.sbext;
-
-   assign i0_ap.csr_write =  i0_csr_write_only_d;
-   assign i0_ap.csr_imm   =  i0_dp.csr_imm;
-   assign i0_ap.jal       =  i0_jal;
-
-   assign i0_ap_pc2 = ~dec_i0_pc4_d;
-   assign i0_ap_pc4 =  dec_i0_pc4_d;
-
-   assign i0_ap.predict_nt = i0_predict_nt;
-   assign i0_ap.predict_t  = i0_predict_t;
-
-
-// non block load cam logic
-
-   always_comb begin
-      found = 0;
-      cam_wen[NBLOAD_SIZE_MSB:0] = '0;
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         if (~found) begin
-            if (~cam[i].valid) begin
-               cam_wen[i] = cam_write;
-               found = 1'b1;
-            end
-            else begin
-               cam_wen[i] = 0;
-            end
-         end
-         else
-            cam_wen[i] = 0;
-      end
-   end
-
-
-   assign cam_write          = lsu_nonblock_load_valid_m;
-   assign cam_write_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_tag_m[NBLOAD_TAG_MSB:0];
-
-   assign cam_inv_reset          = lsu_nonblock_load_inv_r;
-   assign cam_inv_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0];
-
-   assign cam_data_reset          = lsu_nonblock_load_data_valid | lsu_nonblock_load_data_error;
-   assign cam_data_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-   assign nonblock_load_rd[4:0] = (x_d.i0load) ? x_d.i0rd[4:0] : 5'b0;  // rd data
-
-
-   // checks
-
-`ifdef RV_ASSERT_ON
-   assert_dec_data_valid_data_error_onehot:    assert #0 ($onehot0({lsu_nonblock_load_data_valid,lsu_nonblock_load_data_error}));
-   assert_dec_cam_inv_reset_onehot:            assert #0 ($onehot0(cam_inv_reset_val[NBLOAD_SIZE_MSB:0]));
-   assert_dec_cam_data_reset_onehot:           assert #0 ($onehot0(cam_data_reset_val[NBLOAD_SIZE_MSB:0]));
-`endif
-
-
-
-    // case of multiple loads to same dest ie. x1 ... you have to invalidate the older one
-
-   for (genvar i=0; i<NBLOAD_SIZE; i++) begin : cam_array
-
-      assign cam_inv_reset_val[i] = cam_inv_reset   & (cam_inv_reset_tag[NBLOAD_TAG_MSB:0]  == cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid;
-
-      assign cam_data_reset_val[i] = cam_data_reset & (cam_data_reset_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-      always_comb begin
-
-         cam[i] = cam_raw[i];
-
-         if (cam_data_reset_val[i])
-           cam[i].valid = 1'b0;
-
-         cam_in[i] = '0;
-
-         if (cam_wen[i]) begin
-            cam_in[i].valid    = 1'b1;
-            cam_in[i].wb       = 1'b0;
-            cam_in[i].tag[NBLOAD_TAG_MSB:0] = cam_write_tag[NBLOAD_TAG_MSB:0];
-            cam_in[i].rd[4:0]  = nonblock_load_rd[4:0];
-         end
-         else if ( (cam_inv_reset_val[i]) |
-                   (i0_wen_r & (r_d_in.i0rd[4:0] == cam[i].rd[4:0]) & cam[i].wb) )
-           cam_in[i].valid = 1'b0;
-         else
-           cam_in[i] = cam[i];
-
-         if (nonblock_load_valid_m_delay & (lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0]==cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid)
-           cam_in[i].wb = 1'b1;
-
-         // force debug halt forces cam valids to 0; highest priority
-         if (dec_tlu_force_halt)
-           cam_in[i].valid = 1'b0;
-      end
-
-
-   rvdffie #( $bits(eb1_load_cam_pkt_t) ) cam_ff (.*, .din(cam_in[i]), .dout(cam_raw[i]));
-
-
-   assign nonblock_load_write[i] = (load_data_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-
-end : cam_array
-
-
-
-   assign load_data_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-`ifdef RV_ASSERT_ON
-   assert_dec_cam_nonblock_load_write_onehot:   assert #0 ($onehot0(nonblock_load_write[NBLOAD_SIZE_MSB:0]));
-`endif
-
-
-   assign nonblock_load_cancel = ((r_d_in.i0rd[4:0] == dec_nonblock_load_waddr[4:0]) & i0_wen_r);     // cancel if any younger inst (including another nonblock) committing this cycle
-
-
-   assign dec_nonblock_load_wen = lsu_nonblock_load_data_valid & |nonblock_load_write[NBLOAD_SIZE_MSB:0] & ~nonblock_load_cancel;
-
-   always_comb begin
-
-      dec_nonblock_load_waddr[4:0] = '0;
-      i0_nonblock_load_stall = i0_nonblock_boundary_stall;
-
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         dec_nonblock_load_waddr[4:0] |= ({5{nonblock_load_write[i]}} & cam[i].rd[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs1_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs1[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs2_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs2[4:0]);
-      end
-
-   end
-
-   assign i0_nonblock_boundary_stall = ((nonblock_load_rd[4:0]==i0r.rs1[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs1_en_d) |
-                                       ((nonblock_load_rd[4:0]==i0r.rs2[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs2_en_d);
-
-
-
-// don't writeback a nonblock load
-
-   rvdffs #(1) wbnbloaddelayff (.*, .clk(active_clk), .en(i0_r_ctl_en ), .din(lsu_nonblock_load_valid_m),        .dout(nonblock_load_valid_m_delay) );
-
-   assign i0_load_kill_wen_r = nonblock_load_valid_m_delay &  r_d.i0load;
-
-
-
-// end non block load cam logic
-
-// pmu start
-
-
-
-
-   assign csr_read = csr_ren_qual_d;
-   assign csr_write = dec_csr_wen_unq_d;
-
-   assign i0_br_unpred = i0_dp.jal & ~i0_predict_br;
-
-   // the classes must be mutually exclusive with one another
-
-   always_comb begin
-      i0_itype = NULL;
-
-      if (i0_legal_decode_d) begin
-         if (i0_dp.mul)                  i0_itype = MUL;
-         if (i0_dp.load)                 i0_itype = LOAD;
-         if (i0_dp.store)                i0_itype = STORE;
-         if (i0_dp.pm_alu)               i0_itype = ALU;
-         if (i0_dp.zbb | i0_dp.zbs |
-             i0_dp.zbe | i0_dp.zbc |
-             i0_dp.zbp | i0_dp.zbr |
-             i0_dp.zbf | i0_dp.zba)
-                                         i0_itype = BITMANIPU;
-         if ( csr_read & ~csr_write)     i0_itype = CSRREAD;
-         if (~csr_read &  csr_write)     i0_itype = CSRWRITE;
-         if ( csr_read &  csr_write)     i0_itype = CSRRW;
-         if (i0_dp.ebreak)               i0_itype = EBREAK;
-         if (i0_dp.ecall)                i0_itype = ECALL;
-         if (i0_dp.fence)                i0_itype = FENCE;
-         if (i0_dp.fence_i)              i0_itype = FENCEI;  // fencei will set this even with fence attribute
-         if (i0_dp.mret)                 i0_itype = MRET;
-         if (i0_dp.condbr)               i0_itype = CONDBR;
-         if (i0_dp.jal)                  i0_itype = JAL;
-      end
-   end
-
-
-
-
-
-// end pmu
-
-
-   eb1_dec_dec_ctl i0_dec (.inst(i0[31:0]),.out(i0_dp_raw));
-   
-
-
-   rvdff #(1) lsu_idle_ff (.*, .clk(active_clk), .din(lsu_idle_any), .dout(lsu_idle));
-
-
-
-   assign leak1_i1_stall_in = (dec_tlu_flush_leak_one_r | (leak1_i1_stall & ~dec_tlu_flush_lower_r));
-
-
-   assign leak1_mode = leak1_i1_stall;
-
-   assign leak1_i0_stall_in = ((dec_i0_decode_d & leak1_i1_stall) | (leak1_i0_stall & ~dec_tlu_flush_lower_r));
-
-
-
-
-   // 12b jal's can be predicted - these are calls
-
-   assign i0_pcall_imm[20:1] = {i0[31],i0[19:12],i0[20],i0[30:21]};
-
-   assign i0_pcall_12b_offset = (i0_pcall_imm[12]) ? (i0_pcall_imm[20:13] == 8'hff) : (i0_pcall_imm[20:13] == 8'h0);
-
-   assign i0_pcall_case  = i0_pcall_12b_offset & i0_dp_raw.imm20 &  (i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-   assign i0_pja_case    = i0_pcall_12b_offset & i0_dp_raw.imm20 & ~(i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-
-   assign i0_pcall_raw   = i0_dp_raw.jal &   i0_pcall_case;   // this includes ja
-   assign i0_pcall       = i0_dp.jal     &   i0_pcall_case;
-
-   assign i0_pja_raw     = i0_dp_raw.jal &   i0_pja_case;
-   assign i0_pja         = i0_dp.jal     &   i0_pja_case;
-
-
-   assign i0_br_offset[11:0] = (i0_pcall_raw | i0_pja_raw) ? i0_pcall_imm[12:1] : {i0[31],i0[7],i0[30:25],i0[11:8]};
-
-   assign i0_pret_case = (i0_dp_raw.jal & i0_dp_raw.imm12 & (i0r.rd[4:0] == 5'b0) & (i0r.rs1[4:0] == 5'd1 | i0r.rs1[4:0] == 5'd5));  // jalr with rd==0, rs1==1 or rs1==5 is a ret
-
-   assign i0_pret_raw = i0_dp_raw.jal &   i0_pret_case;
-   assign i0_pret     = i0_dp.jal     &   i0_pret_case;
-
-   assign i0_jal      = i0_dp.jal     &  ~i0_pcall_case & ~i0_pja_case & ~i0_pret_case;
-
-   // lsu stuff
-   // load/store mutually exclusive
-   assign dec_lsu_offset_d[11:0] = ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.load}} &               i0[31:20]) |
-                                   ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.store}} &             {i0[31:25],i0[11:7]});
-
-
-
-   assign div_p.valid    =  div_decode_d;
-
-   assign div_p.unsign   =  i0_dp.unsign;
-   assign div_p.rem      =  i0_dp.rem;
-
-
-   assign mul_p.valid    =  mul_decode_d;
-
-   assign mul_p.rs1_sign =  i0_dp.rs1_sign;
-   assign mul_p.rs2_sign =  i0_dp.rs2_sign;
-   assign mul_p.low      =  i0_dp.low;
-   assign mul_p.bext     =  i0_dp.bext;
-   assign mul_p.bdep     =  i0_dp.bdep;
-   assign mul_p.clmul    =  i0_dp.clmul;
-   assign mul_p.clmulh   =  i0_dp.clmulh;
-   assign mul_p.clmulr   =  i0_dp.clmulr;
-   assign mul_p.grev     =  i0_dp.grev;
-   assign mul_p.gorc     =  i0_dp.gorc;
-   assign mul_p.shfl     =  i0_dp.shfl;
-   assign mul_p.unshfl   =  i0_dp.unshfl;
-   assign mul_p.crc32_b  =  i0_dp.crc32_b;
-   assign mul_p.crc32_h  =  i0_dp.crc32_h;
-   assign mul_p.crc32_w  =  i0_dp.crc32_w;
-   assign mul_p.crc32c_b =  i0_dp.crc32c_b;
-   assign mul_p.crc32c_h =  i0_dp.crc32c_h;
-   assign mul_p.crc32c_w =  i0_dp.crc32c_w;
-   assign mul_p.bfp      =  i0_dp.bfp;
-
-   always_comb  begin
-      lsu_p = '0;
-
-      if (dec_extint_stall) begin
-         lsu_p.load = 1'b1;
-         lsu_p.word = 1'b1;
-         lsu_p.fast_int = 1'b1;
-         lsu_p.valid = 1'b1;
-      end
-      else begin
-         lsu_p.valid = lsu_decode_d;
-
-         lsu_p.load                         =  i0_dp.load ;
-         lsu_p.store                        =  i0_dp.store;
-         lsu_p.by                           =  i0_dp.by   ;
-         lsu_p.half                         =  i0_dp.half ;
-         lsu_p.word                         =  i0_dp.word ;
-         lsu_p.stack                        = (i0r.rs1[4:0]==5'd2);   // stack reference
-
-         lsu_p.load_ldst_bypass_d          =  load_ldst_bypass_d ;
-         lsu_p.store_data_bypass_d         =  store_data_bypass_d;
-         lsu_p.store_data_bypass_m         =  store_data_bypass_m;
-
-         lsu_p.unsign  =  i0_dp.unsign;
-      end
-   end
-
-
-   assign  dec_lsu_valid_raw_d    = (i0_valid_d & (i0_dp_raw.load | i0_dp_raw.store) & ~dma_dccm_stall_any & ~i0_block_raw_d) | dec_extint_stall;
-
-
-
-   assign i0r.rs1[4:0] = i0[19:15];
-   assign i0r.rs2[4:0] = i0[24:20];
-   assign i0r.rd[4:0]  = i0[11:7];
-
-
-   assign dec_i0_rs1_en_d   =  (i0_dp.rs1 & (i0r.rs1[4:0] != 5'd0));  // if rs1_en=0 then read will be all 0's
-   assign dec_i0_rs2_en_d   =  (i0_dp.rs2 & (i0r.rs2[4:0] != 5'd0));
-   assign i0_rd_en_d        =  (i0_dp.rd  & (i0r.rd[4:0]  != 5'd0));
-
-   assign dec_i0_rs1_d[4:0] =  i0r.rs1[4:0];
-   assign dec_i0_rs2_d[4:0] =  i0r.rs2[4:0];
-
-
-   assign i0_jalimm20       =  i0_dp.jal & i0_dp.imm20;   // jal
-   assign i0_uiimm20        = ~i0_dp.jal & i0_dp.imm20;
-
-
-   // csr logic
-
-   assign dec_csr_ren_d  = i0_dp.csr_read & i0_valid_d;
-   assign csr_ren_qual_d = i0_dp.csr_read & i0_legal_decode_d;
-
-   assign csr_clr_d =   i0_dp.csr_clr   & i0_legal_decode_d;
-   assign csr_set_d   = i0_dp.csr_set   & i0_legal_decode_d;
-   assign csr_write_d = i0_csr_write    & i0_legal_decode_d;
-
-   assign i0_csr_write_only_d = i0_csr_write & ~i0_dp.csr_read;
-
-   assign dec_csr_wen_unq_d = (i0_dp.csr_clr | i0_dp.csr_set | i0_csr_write) & i0_valid_d;   // for csr legal, can't write read-only csr
-
-   assign dec_csr_any_unq_d = any_csr_d & i0_valid_d;
-
-
-   assign dec_csr_rdaddr_d[11:0] =  {12{dec_csr_any_unq_d}} & i0[31:20];
-   assign dec_csr_wraddr_r[11:0] =  {12{r_d.csrwen & r_d.i0valid}} & r_d.csrwaddr[11:0];
-
-
-   // make sure csr doesn't write same cycle as dec_tlu_flush_lower_wb
-   // also use valid so it's flushable
-   assign dec_csr_wen_r = r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_r;
-
-   // If we are writing MIE or MSTATUS, hold off the external interrupt for a cycle on the write.
-   assign dec_csr_stall_int_ff = ((r_d.csrwaddr[11:0] == 12'h300) | (r_d.csrwaddr[11:0] == 12'h304)) & r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_wb;
-
-
-   rvdff #(5) csrmiscff (.*,
-                        .clk (active_clk),
-                        .din ({csr_ren_qual_d, csr_clr_d, csr_set_d, csr_write_d, i0_dp.csr_imm}),
-                        .dout({csr_read_x,     csr_clr_x, csr_set_x, csr_write_x, csr_imm_x})
-                       );
-
-
-
-
-   // perform the update operation if any
-
-   rvdffe #(37) csr_rddata_x_ff (.*, .en(i0_x_data_en & any_csr_d), .din( {i0[19:15],dec_csr_rddata_d[31:0]}), .dout({csrimm_x[4:0],csr_rddata_x[31:0]}));
-
-
-   assign csr_mask_x[31:0]       = ({32{ csr_imm_x}} & {27'b0,csrimm_x[4:0]}) |
-                                   ({32{~csr_imm_x}} &  exu_csr_rs1_x[31:0] );
-
-
-   assign write_csr_data_x[31:0] = ({32{csr_clr_x}}   & (csr_rddata_x[31:0] & ~csr_mask_x[31:0])) |
-                                   ({32{csr_set_x}}   & (csr_rddata_x[31:0] |  csr_mask_x[31:0])) |
-                                   ({32{csr_write_x}} & (                      csr_mask_x[31:0]));
-
-
-// pause instruction
-
-
-
-
-   assign clear_pause = (dec_tlu_flush_lower_r & ~dec_tlu_flush_pause_r) |
-                        (pause_state & (write_csr_data[31:1] == 31'b0));        // if 0 or 1 then exit pause state - 1 cycle pause
-
-   assign pause_state_in = (dec_tlu_wr_pause_r | pause_state) & ~clear_pause;
-
-
-
-   assign dec_pause_state = pause_state;
-
-
-
-      assign dec_pause_state_cg = pause_state & ~tlu_wr_pause_r1 & ~tlu_wr_pause_r2;
-
-// end pause
-
-
-   assign csr_data_wen = ((csr_clr_x | csr_set_x | csr_write_x) & csr_read_x) | dec_tlu_wr_pause_r | pause_state;
-
-   assign write_csr_data_in[31:0] = (pause_state)         ? (write_csr_data[31:0] - 32'b1) :
-                                    (dec_tlu_wr_pause_r) ? dec_csr_wrdata_r[31:0] : write_csr_data_x[31:0];
-
-   // will hold until write-back at which time the CSR will be updated while GPR is possibly written with prior CSR
-   rvdffe #(32) write_csr_ff (.*, .clk(free_l2clk), .en(csr_data_wen), .din(write_csr_data_in[31:0]), .dout(write_csr_data[31:0]));
-
-   assign pause_stall = pause_state;
-
-   // for csr write only data is produced by the alu
-   assign dec_csr_wrdata_r[31:0]  = (r_d.csrwonly & r_d.i0valid) ? i0_result_corr_r[31:0] : write_csr_data[31:0];
-
-
-
-   assign dec_i0_immed_d[31:0] =  i0_immed_d[31:0];
-
-   assign     i0_immed_d[31:0] = ({32{i0_dp.imm12}}                         & { {20{i0[31]}},i0[31:20] }) |  // jalr
-                                 ({32{i0_dp.shimm5}}                        & {  27'b0,      i0[24:20] }) |
-                                 ({32{i0_jalimm20}}                         & { {12{i0[31]}},i0[19:12],i0[20],i0[30:21],1'b0}) |
-                                 ({32{i0_uiimm20}}                          & { i0[31:12],12'b0 }) |
-                                 ({32{i0_csr_write_only_d & i0_dp.csr_imm}} & {  27'b0,      i0[19:15]});  // for csr's that only write csr, dont read csr
-
-
-   // all conditional branches are currently predict_nt
-   // change this to generate the sequential address for all other cases for NPC requirements at commit
-   assign dec_i0_br_immed_d[12:1] = (i0_ap.predict_nt & ~i0_dp.jal) ? i0_br_offset[11:0] : {10'b0,i0_ap_pc4,i0_ap_pc2};
-
-
-   assign last_br_immed_d[12:1] = ((i0_ap.predict_nt) ? {10'b0,i0_ap_pc4,i0_ap_pc2} : i0_br_offset[11:0] );
-
-   assign i0_valid_d = dec_ib0_valid_d;
-
-   // load_stall includes bus_barrier
-
-   assign i0_load_stall_d = (i0_dp.load ) & (lsu_load_stall_any | dma_dccm_stall_any);
-
-   assign i0_store_stall_d =  i0_dp.store & (lsu_store_stall_any | dma_dccm_stall_any);
-
-
-
-// some CSR reads need to be presync'd
-   assign i0_presync = i0_dp.presync | dec_tlu_presync_d | debug_fence_i | debug_fence_raw | dec_tlu_pipelining_disable;  // both fence's presync
-
-// some CSR writes need to be postsync'd
-   assign i0_postsync = i0_dp.postsync | dec_tlu_postsync_d | debug_fence_i | // only fence_i postsync
-                        (i0_csr_write_only_d & (i0[31:20] == 12'h7c2));   // wr_pause must postsync
-
-
-// debug fence csr
-   assign debug_fence_i     = dec_debug_fence_d & dbg_cmd_wrdata[0];
-   assign debug_fence_raw   = dec_debug_fence_d & dbg_cmd_wrdata[1];
-
-   assign debug_fence       = debug_fence_raw | debug_fence_i;    // fence_i causes a fence
-
-   assign i0_csr_write = i0_dp.csr_write & ~dec_debug_fence_d;
-// end debug
-
-
-   // lets make ebreak, ecall, mret postsync, so break sync into pre and post
-
-   assign presync_stall      = (i0_presync & prior_inflight_eff);
-
-   assign prior_inflight_eff = (i0_dp.div)  ?  prior_inflight_x  :  prior_inflight;
-
-   assign i0_div_prior_div_stall = i0_dp.div & div_active;
-
-   // Raw block has everything excepts the stalls coming from the lsu
-   assign i0_block_raw_d = (i0_dp.csr_read & prior_csr_write) |
-                            dec_extint_stall |
-                            pause_stall |
-                            leak1_i0_stall |
-                            dec_tlu_debug_stall |
-                            postsync_stall |
-                            presync_stall  |
-                            ((i0_dp.fence | debug_fence) & ~lsu_idle) |
-                            i0_nonblock_load_stall |
-                            i0_load_block_d |
-                            i0_nonblock_div_stall |
-                            i0_div_prior_div_stall;
-
-   assign i0_block_d    = i0_block_raw_d | i0_store_stall_d | i0_load_stall_d;
-   assign i0_exublock_d = i0_block_raw_d;
-
-
-   // block reads if there is a prior csr write in the pipeline
-   assign prior_csr_write = x_d.csrwonly |
-                            r_d.csrwonly |
-                            wbd.csrwonly;
-
-
-
-   if       (pt.BITMANIP_ZBB == 1)
-     assign bitmanip_zbb_legal      =  1'b1;
-   else
-     assign bitmanip_zbb_legal      = ~(i0_dp.zbb & ~i0_dp.zbp);
-
-   if       (pt.BITMANIP_ZBS == 1)
-     assign bitmanip_zbs_legal      =  1'b1;
-   else
-     assign bitmanip_zbs_legal      = ~i0_dp.zbs;
-
-   if       (pt.BITMANIP_ZBE == 1)
-     assign bitmanip_zbe_legal      =  1'b1;
-   else
-     assign bitmanip_zbe_legal      = ~i0_dp.zbe;
-
-   if       (pt.BITMANIP_ZBC == 1)
-     assign bitmanip_zbc_legal      =  1'b1;
-   else
-     assign bitmanip_zbc_legal      = ~i0_dp.zbc;
-
-   if       (pt.BITMANIP_ZBP == 1)
-     assign bitmanip_zbp_legal      =  1'b1;
-   else
-     assign bitmanip_zbp_legal      = ~(i0_dp.zbp & ~i0_dp.zbb);
-
-   if       (pt.BITMANIP_ZBR == 1)
-     assign bitmanip_zbr_legal      =  1'b1;
-   else
-     assign bitmanip_zbr_legal      = ~i0_dp.zbr;
-
-   if       (pt.BITMANIP_ZBF == 1)
-     assign bitmanip_zbf_legal      =  1'b1;
-   else
-     assign bitmanip_zbf_legal      = ~i0_dp.zbf;
-
-   if (pt.BITMANIP_ZBA == 1)
-     assign bitmanip_zba_legal      =  1'b1;
-   else
-     assign bitmanip_zba_legal      = ~i0_dp.zba;
-
-   if     ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     assign bitmanip_zbb_zbp_legal  =  1'b1;
-   else
-     assign bitmanip_zbb_zbp_legal  = ~(i0_dp.zbb & i0_dp.zbp);
-
-
-   assign any_csr_d      =  i0_dp.csr_read | i0_csr_write;
-   assign bitmanip_legal =  bitmanip_zbb_legal & bitmanip_zbs_legal & bitmanip_zbe_legal & bitmanip_zbc_legal & bitmanip_zbp_legal & bitmanip_zbr_legal & bitmanip_zbf_legal & bitmanip_zba_legal & bitmanip_zbb_zbp_legal;
-
-   assign i0_legal       =  (i0_dp.legal) & (~any_csr_d | dec_csr_legal_d) & bitmanip_legal;
-
-
-
-   // illegal inst handling
-
-
-   assign shift_illegal      = dec_i0_decode_d & ~i0_legal;
-
-   assign illegal_inst_en    = shift_illegal & ~illegal_lockout;
-
-   rvdffe #(32) illegal_any_ff (.*, .en(illegal_inst_en), .din(i0_inst_d[31:0]), .dout(dec_illegal_inst[31:0]));
-
-   assign illegal_lockout_in = (shift_illegal | illegal_lockout) & ~flush_final_r;
-
-
-
-   // allow illegals to flow down the pipe
-   assign dec_i0_decode_d = i0_valid_d & ~i0_block_d    & ~dec_tlu_flush_lower_r & ~flush_final_r;
-   assign i0_exudecode_d  = i0_valid_d & ~i0_exublock_d & ~dec_tlu_flush_lower_r & ~flush_final_r;
-
-   // define i0 legal decode
-   assign i0_legal_decode_d    = dec_i0_decode_d & i0_legal;
-   assign i0_exulegal_decode_d = i0_exudecode_d  & i0_legal;
-
-
-   // performance monitor signals
-   assign dec_pmu_instr_decoded = dec_i0_decode_d;
-
-   assign dec_pmu_decode_stall = i0_valid_d & ~dec_i0_decode_d;
-
-   assign dec_pmu_postsync_stall = postsync_stall & i0_valid_d;
-   assign dec_pmu_presync_stall  = presync_stall & i0_valid_d;
-
-
-
-   // illegals will postsync
-   assign ps_stall_in =  ( dec_i0_decode_d & (i0_postsync | ~i0_legal) ) |
-                         ( ps_stall & prior_inflight_x                 );
-
-
-
-   assign postsync_stall =  ps_stall;
-
-
-   assign prior_inflight_x    =  x_d.i0valid;
-   assign prior_inflight_wb   =  r_d.i0valid;
-
-   assign prior_inflight = prior_inflight_x | prior_inflight_wb;
-
-   assign dec_i0_alu_decode_d = i0_exulegal_decode_d & i0_dp.alu;
-   assign dec_i0_branch_d     = i0_dp.condbr | i0_dp.jal | i0_br_error_all;
-
-   assign lsu_decode_d = i0_legal_decode_d    & i0_dp.lsu;
-   assign mul_decode_d = i0_exulegal_decode_d & i0_dp.mul;
-   assign div_decode_d = i0_exulegal_decode_d & i0_dp.div;
-
-   assign dec_qual_lsu_d = i0_dp.lsu;
-
-
-
-
-
-// scheduling logic for alu
-
-   assign i0_rs1_depend_i0_x  = dec_i0_rs1_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs1[4:0]);
-   assign i0_rs1_depend_i0_r  = dec_i0_rs1_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_depend_i0_x  = dec_i0_rs2_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs2[4:0]);
-   assign i0_rs2_depend_i0_r  = dec_i0_rs2_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs2[4:0]);
-
-
-// order the producers as follows:  , i0_x, i0_r, i0_wb
-
-   assign {i0_rs1_class_d, i0_rs1_depth_d[1:0]} = (i0_rs1_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs1_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-   assign {i0_rs2_class_d, i0_rs2_depth_d[1:0]} = (i0_rs2_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs2_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-
-// stores will bypass load data in the lsu pipe
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin : genblock
-      assign i0_load_block_d = (i0_rs1_class_d.load & i0_rs1_depth_d[0]) |
-                               (i0_rs2_class_d.load & i0_rs2_depth_d[0] & ~i0_dp.store);
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[1] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[1] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-   end
-   else begin : genblock
-
-      assign i0_load_block_d = 1'b0;
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[0] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m = 1'b0;
-   end
-
-
-
-
-
-
-   assign dec_tlu_i0_valid_r     =  r_d.i0valid & ~dec_tlu_flush_lower_wb;
-
-
-   assign d_t.legal              =  i0_legal_decode_d;
-   assign d_t.icaf               =  i0_icaf_d & i0_legal_decode_d;                // dbecc is icaf exception
-   assign d_t.icaf_second        =  dec_i0_icaf_second_d & i0_legal_decode_d;     // this includes icaf and dbecc
-   assign d_t.icaf_type[1:0]     =  dec_i0_icaf_type_d[1:0];
-
-   assign d_t.fence_i            = (i0_dp.fence_i | debug_fence_i) & i0_legal_decode_d;
-
-// put pmu info into the trap packet
-   assign d_t.pmu_i0_itype       =  i0_itype;
-   assign d_t.pmu_i0_br_unpred   =  i0_br_unpred;
-   assign d_t.pmu_divide         =  1'b0;
-   assign d_t.pmu_lsu_misaligned =  1'b0;
-
-   assign d_t.i0trigger[3:0]     =  dec_i0_trigger_match_d[3:0] & {4{dec_i0_decode_d}};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_xff (.*, .en(i0_x_ctl_en), .din(d_t),  .dout(x_t));
-
-   always_comb begin
-      x_t_in = x_t;
-      x_t_in.i0trigger[3:0] = x_t.i0trigger & ~{4{dec_tlu_flush_lower_wb}};
-   end
-
-
-   rvdfflie  #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_r_ff (.*, .en(i0_x_ctl_en), .din(x_t_in),  .dout(r_t));
-
-
-    always_comb begin
-
-      r_t_in                             =  r_t;
-
-      r_t_in.i0trigger[3:0]              = ({4{(r_d.i0load | r_d.i0store)}} & lsu_trigger_match_r[3:0]) | r_t.i0trigger[3:0];
-      r_t_in.pmu_lsu_misaligned          = lsu_pmu_misaligned_r;   // only valid if a load/store is valid in DC3 stage
-
-      if (dec_tlu_flush_lower_wb) r_t_in = '0 ;
-
-   end
-
-
-   always_comb begin
-
-      dec_tlu_packet_r                 =  r_t_in;
-      dec_tlu_packet_r.pmu_divide      =  r_d.i0div & r_d.i0valid;
-
-   end
-
-
-// end tlu stuff
-
-
-   assign i0_d_c.mul                =  i0_dp.mul  & i0_legal_decode_d;
-   assign i0_d_c.load               =  i0_dp.load & i0_legal_decode_d;
-   assign i0_d_c.alu                =  i0_dp.alu  & i0_legal_decode_d;
-
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_x_c_ff   (.*, .en(i0_x_ctl_en),  .clk(active_clk), .din(i0_d_c),  .dout(i0_x_c));
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_r_c_ff   (.*, .en(i0_r_ctl_en),  .clk(active_clk), .din(i0_x_c),  .dout(i0_r_c));
-
-
-   assign d_d.i0rd[4:0]             =  i0r.rd[4:0];
-   assign d_d.i0v                   =  i0_rd_en_d  & i0_legal_decode_d;
-   assign d_d.i0valid               =  dec_i0_decode_d;  // has flush_final_r
-
-   assign d_d.i0load                =  i0_dp.load  & i0_legal_decode_d;
-   assign d_d.i0store               =  i0_dp.store & i0_legal_decode_d;
-   assign d_d.i0div                 =  i0_dp.div   & i0_legal_decode_d;
-
-
-   assign d_d.csrwen                =  dec_csr_wen_unq_d   & i0_legal_decode_d;
-   assign d_d.csrwonly              =  i0_csr_write_only_d & dec_i0_decode_d;
-   assign d_d.csrwaddr[11:0]        =  (d_d.csrwen) ? i0[31:20] : '0;    // csr write address for rd==0 case
-
-
-   rvdff  #(3) i0cgff               (.*, .clk(active_clk),            .din(i0_pipe_en[3:1]), .dout(i0_pipe_en[2:0]));
-
-   assign i0_pipe_en[3]             =  dec_i0_decode_d;
-
-   assign i0_x_ctl_en               = (|i0_pipe_en[3:2] | clk_override);
-   assign i0_r_ctl_en               = (|i0_pipe_en[2:1] | clk_override);
-   assign i0_wb_ctl_en              = (|i0_pipe_en[1:0] | clk_override);
-   assign i0_x_data_en              = ( i0_pipe_en[3]   | clk_override);
-   assign i0_r_data_en              = ( i0_pipe_en[2]   | clk_override);
-   assign i0_wb_data_en             = ( i0_pipe_en[1]   | clk_override);
-
-   assign dec_data_en[1:0]          = {i0_x_data_en, i0_r_data_en};
-   assign dec_ctl_en[1:0]           = {i0_x_ctl_en,  i0_r_ctl_en};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)),.LEFT(15) ) e1ff (.*, .en(i0_x_ctl_en), .din(d_d),  .dout(x_d));
-
-   always_comb begin
-      x_d_in = x_d;
-
-      x_d_in.i0v         = x_d.i0v     & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-      x_d_in.i0valid     = x_d.i0valid & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-   end
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15) ) r_d_ff (.*, .en(i0_r_ctl_en), .din(x_d_in), .dout(r_d));
-
-
-   always_comb begin
-
-        r_d_in = r_d;
-
-
-      // for the bench
-      r_d_in.i0rd[4:0]   =  r_d.i0rd[4:0];
-
-      r_d_in.i0v         = (r_d.i0v      & ~dec_tlu_flush_lower_wb);
-      r_d_in.i0valid     = (r_d.i0valid  & ~dec_tlu_flush_lower_wb);
-
-      r_d_in.i0load      =  r_d.i0load   & ~dec_tlu_flush_lower_wb;
-      r_d_in.i0store     =  r_d.i0store  & ~dec_tlu_flush_lower_wb;
-
-   end
-
-
-   rvdfflie #(.WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15)) wbff (.*, .en(i0_wb_ctl_en), .din(r_d_in), .dout(wbd));
-
-   assign dec_i0_waddr_r[4:0]       =  r_d_in.i0rd[4:0];
-
-   assign     i0_wen_r              =  r_d_in.i0v & ~dec_tlu_i0_kill_writeb_r;
-   assign dec_i0_wen_r              =  i0_wen_r   & ~r_d_in.i0div & ~i0_load_kill_wen_r;  // don't write a nonblock load 1st time down the pipe
-   assign dec_i0_wdata_r[31:0]      =  i0_result_corr_r[31:0];
-
-
-   // divide stuff
-   assign div_e1_to_r         = (x_d.i0div & x_d.i0valid) |
-                                (r_d.i0div & r_d.i0valid);
-
-   assign div_active_in = i0_div_decode_d | (div_active & ~exu_div_wren & ~nonblock_div_cancel);
-
-
-   assign dec_div_active = div_active;
-
-   // nonblocking div scheme
-
-   assign i0_nonblock_div_stall  = (dec_i0_rs1_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs1[4:0])) |
-                                   (dec_i0_rs2_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs2[4:0]));
-
-
-   assign div_flush              = (x_d.i0div & x_d.i0valid & (x_d.i0rd[4:0]==5'b0)                           ) |
-                                   (x_d.i0div & x_d.i0valid & dec_tlu_flush_lower_r                           ) |
-                                   (r_d.i0div & r_d.i0valid & dec_tlu_flush_lower_r & dec_tlu_i0_kill_writeb_r);
-
-
-   // cancel if any younger inst committing this cycle to same dest as nonblock divide
-   assign nonblock_div_cancel    = (div_active &  div_flush) |
-                                   (div_active & ~div_e1_to_r & (r_d.i0rd[4:0] == div_waddr_wb[4:0]) & i0_wen_r);
-
-   assign dec_div_cancel         =  nonblock_div_cancel;
-
-
-
-   assign i0_div_decode_d            =  i0_legal_decode_d & i0_dp.div;
-
-// for load_to_use_plus1, the load result data is merged in R stage instead of D
-
-   if ( pt.LOAD_TO_USE_PLUS1 == 1 ) begin : genblock1
-      assign i0_result_x[31:0]          = exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = (r_d.i0v & r_d.i0load) ? lsu_result_m[31:0] : i0_result_r_raw[31:0];
-   end
-   else begin : genblock1
-      assign i0_result_x[31:0]          = (x_d.i0v & x_d.i0load) ? lsu_result_m[31:0] : exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = i0_result_r_raw[31:0];
-   end
-
-
-   rvdffe #(32) i0_result_r_ff       (.*, .en(i0_r_data_en & (x_d.i0v | x_d.csrwen | debug_valid_x)),  .din(i0_result_x[31:0]),       .dout(i0_result_r_raw[31:0]));
-
-   // correct lsu load data - don't use for bypass, do pass down the pipe
-   assign i0_result_corr_r[31:0]     = (r_d.i0v & r_d.i0load) ? lsu_result_corr_r[31:0] : i0_result_r_raw[31:0];
-
-
-   rvdffe #(12) e1brpcff             (.*, .en(i0_x_data_en), .din(last_br_immed_d[12:1] ), .dout(last_br_immed_x[12:1]));
-
-
-
-   assign i0_wb_en                   =  i0_wb_data_en;
-
-   assign i0_inst_wb_in[31:0]        =  i0_inst_r[31:0];
-   assign i0_inst_d[31:0]            = (dec_i0_pc4_d)    ?  i0[31:0]                                  :  {16'b0, ifu_i0_cinst[15:0]};
-
-
-   assign trace_enable = ~dec_tlu_trace_disable;
-
-
-   rvdffe #(.WIDTH(5),.OVERRIDE(1))  i0rdff  (.*, .en(i0_div_decode_d),        .din(i0r.rd[4:0]),             .dout(div_waddr_wb[4:0]));
-
-   rvdffe #(32) i0xinstff            (.*, .en(i0_x_data_en & trace_enable),    .din(i0_inst_d[31:0]),         .dout(i0_inst_x[31:0]));
-   rvdffe #(32) i0cinstff            (.*, .en(i0_r_data_en & trace_enable),    .din(i0_inst_x[31:0]),         .dout(i0_inst_r[31:0]));
-
-   rvdffe #(32) i0wbinstff           (.*, .en(i0_wb_en & trace_enable),        .din(i0_inst_wb_in[31:0]),     .dout(i0_inst_wb[31:0]));
-   rvdffe #(31) i0wbpcff             (.*, .en(i0_wb_en & trace_enable),        .din(dec_tlu_i0_pc_r[31:1]),   .dout(  i0_pc_wb[31:1]));
-
-   assign dec_i0_inst_wb[31:0] = i0_inst_wb[31:0];
-   assign dec_i0_pc_wb[31:1] = i0_pc_wb[31:1];
-
-
-
-   rvdffpcie #(31) i0_pc_r_ff           (.*, .en(i0_r_data_en), .din(exu_i0_pc_x[31:1]), .dout(dec_i0_pc_r[31:1]));
-
-   assign dec_tlu_i0_pc_r[31:1]      = dec_i0_pc_r[31:1];
-
-
-   rvbradder ibradder_correct (
-                     .pc(exu_i0_pc_x[31:1]),
-                     .offset(last_br_immed_x[12:1]),
-                     .dout(pred_correct_npc_x[31:1]));
-
-
-
-   // add nonblock load rs1/rs2 bypass cases
-
-   assign i0_rs1_nonblock_load_bypass_en_d  = dec_i0_rs1_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_nonblock_load_bypass_en_d  = dec_i0_rs2_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs2[4:0]);
-
-
-
-   // bit 2 is priority match, bit 0 lowest priority, i0_x, i0_r
-
-   assign i0_rs1bypass[2]                =  i0_rs1_depth_d[0] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul                      );
-   assign i0_rs1bypass[1]                =  i0_rs1_depth_d[0] & (                                          i0_rs1_class_d.load);
-   assign i0_rs1bypass[0]                =  i0_rs1_depth_d[1] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul | i0_rs1_class_d.load);
-
-   assign i0_rs2bypass[2]                =  i0_rs2_depth_d[0] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul                      );
-   assign i0_rs2bypass[1]                =  i0_rs2_depth_d[0] & (                                          i0_rs2_class_d.load);
-   assign i0_rs2bypass[0]                =  i0_rs2_depth_d[1] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul | i0_rs2_class_d.load);
-
-
-   assign dec_i0_rs1_bypass_en_d[3]      =  i0_rs1_nonblock_load_bypass_en_d & ~i0_rs1bypass[0] & ~i0_rs1bypass[1] & ~i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[2]      =  i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[1]      =  i0_rs1bypass[1];
-   assign dec_i0_rs1_bypass_en_d[0]      =  i0_rs1bypass[0];
-
-   assign dec_i0_rs2_bypass_en_d[3]      =  i0_rs2_nonblock_load_bypass_en_d & ~i0_rs2bypass[0] & ~i0_rs2bypass[1] & ~i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[2]      =  i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[1]      =  i0_rs2bypass[1];
-   assign dec_i0_rs2_bypass_en_d[0]      =  i0_rs2bypass[0];
-
-
-   assign dec_i0_result_r[31:0]          =  i0_result_r[31:0];
-
-
-endmodule // eb1_dec_decode_ctl
-
-
-
-
-
-// file "decode" is human readable file that has all of the instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "decode" except legal equation:
-
-// 1) coredecode -in decode > coredecode.e
-
-// 2) espresso -Dso -oeqntott coredecode.e | addassign -pre out.  > equations
-
-// to generate the legal (32b instruction is legal) equation below:
-
-// 1) coredecode -in decode -legal > legal.e
-
-// 2) espresso -Dso -oeqntott legal.e | addassign -pre out. > legal_equation
-
-module eb1_dec_dec_ctl
-import eb1_pkg::*;
-  (
-   input logic [31:0] inst,
-
-   output eb1_dec_pkt_t out
-   );
-
-   logic [31:0] i;
-
-
-   assign i[31:0] = inst[31:0];
-
-
-assign out.alu = (i[30]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[5]&i[4]) | (i[29]
-    &!i[27]&!i[24]&i[4]) | (!i[25]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[25]
-    &i[13]&i[12]) | (i[27]&i[25]&i[14]&i[4]) | (i[29]&i[27]&!i[14]&i[4]) | (
-    i[29]&!i[14]&i[5]&i[4]) | (!i[27]&!i[25]&i[14]&i[4]) | (i[30]&!i[29]
-    &!i[13]&i[4]) | (!i[30]&!i[27]&!i[25]&i[4]) | (i[13]&!i[5]&i[4]) | (
-    !i[12]&!i[5]&i[4]) | (i[2]) | (i[6]) | (i[30]&i[24]&i[23]&i[22]&i[21]
-    &i[20]&!i[5]&i[4]) | (!i[30]&i[29]&!i[24]&!i[23]&i[22]&i[21]&i[20]
-    &!i[5]&i[4]) | (!i[30]&i[24]&!i[23]&!i[22]&!i[21]&!i[20]&!i[5]&i[4]);
-
-assign out.rs1 = (!i[14]&!i[13]&!i[2]) | (!i[13]&i[11]&!i[2]) | (i[19]&i[13]&!i[2]) | (
-    !i[13]&i[10]&!i[2]) | (i[18]&i[13]&!i[2]) | (!i[13]&i[9]&!i[2]) | (
-    i[17]&i[13]&!i[2]) | (!i[13]&i[8]&!i[2]) | (i[16]&i[13]&!i[2]) | (
-    !i[13]&i[7]&!i[2]) | (i[15]&i[13]&!i[2]) | (!i[4]&!i[3]) | (!i[6]
-    &!i[2]);
-
-assign out.rs2 = (i[5]&!i[4]&!i[2]) | (!i[6]&i[5]&!i[2]);
-
-assign out.imm12 = (!i[4]&!i[3]&i[2]) | (i[13]&!i[5]&i[4]&!i[2]) | (!i[13]&!i[12]
-    &i[6]&i[4]) | (!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.rd = (!i[5]&!i[2]) | (i[5]&i[2]) | (i[4]);
-
-assign out.shimm5 = (i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.imm20 = (i[5]&i[3]) | (i[4]&i[2]);
-
-assign out.pc = (!i[5]&!i[3]&i[2]) | (i[5]&i[3]);
-
-assign out.load = (!i[5]&!i[4]&!i[2]);
-
-assign out.store = (!i[6]&i[5]&!i[4]);
-
-assign out.lsu = (!i[6]&!i[4]&!i[2]);
-
-assign out.add = (!i[14]&!i[13]&!i[12]&!i[5]&i[4]) | (!i[5]&!i[3]&i[2]) | (!i[30]
-    &!i[25]&!i[14]&!i[13]&!i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sub = (i[30]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (!i[29]&!i[25]&!i[14]
-    &i[13]&!i[6]&i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]) | (
-    !i[14]&i[13]&!i[5]&i[4]&!i[2]) | (i[6]&!i[4]&!i[2]);
-
-assign out.land = (!i[27]&!i[25]&i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[14]&i[13]&i[12]
-    &!i[5]&!i[2]);
-
-assign out.lor = (!i[6]&i[3]) | (!i[29]&!i[27]&!i[25]&i[14]&i[13]&!i[12]&!i[6]&!i[2]) | (
-    i[5]&i[4]&i[2]) | (!i[13]&!i[12]&i[6]&i[4]) | (i[14]&i[13]&!i[12]
-    &!i[5]&!i[2]);
-
-assign out.lxor = (!i[29]&!i[27]&!i[25]&i[14]&!i[13]&!i[12]&i[4]&!i[2]) | (i[14]
-    &!i[13]&!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sll = (!i[29]&!i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sra = (i[30]&!i[29]&!i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.srl = (!i[30]&!i[29]&!i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.slt = (!i[29]&!i[25]&!i[14]&i[13]&!i[6]&i[4]&!i[2]) | (!i[14]&i[13]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.unsign = (!i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]) | (!i[14]&i[13]
-    &i[12]&!i[5]&!i[2]) | (i[13]&i[6]&!i[4]&!i[2]) | (i[14]&!i[5]&!i[4]) | (
-    !i[25]&!i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[27]&i[25]&i[14]&i[13]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.condbr = (i[6]&!i[4]&!i[2]);
-
-assign out.beq = (!i[14]&!i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bne = (!i[14]&i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bge = (i[14]&i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.blt = (i[14]&!i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.jal = (i[6]&i[2]);
-
-assign out.by = (!i[13]&!i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.half = (i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.word = (i[13]&!i[6]&!i[4]);
-
-assign out.csr_read = (i[13]&i[6]&i[4]) | (i[7]&i[6]&i[4]) | (i[8]&i[6]&i[4]) | (
-    i[9]&i[6]&i[4]) | (i[10]&i[6]&i[4]) | (i[11]&i[6]&i[4]);
-
-assign out.csr_clr = (i[15]&i[13]&i[12]&i[6]&i[4]) | (i[16]&i[13]&i[12]&i[6]&i[4]) | (
-    i[17]&i[13]&i[12]&i[6]&i[4]) | (i[18]&i[13]&i[12]&i[6]&i[4]) | (
-    i[19]&i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_set = (i[15]&!i[12]&i[6]&i[4]) | (i[16]&!i[12]&i[6]&i[4]) | (i[17]
-    &!i[12]&i[6]&i[4]) | (i[18]&!i[12]&i[6]&i[4]) | (i[19]&!i[12]&i[6]
-    &i[4]);
-
-assign out.csr_write = (!i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_imm = (i[14]&!i[13]&i[6]&i[4]) | (i[15]&i[14]&i[6]&i[4]) | (i[16]
-    &i[14]&i[6]&i[4]) | (i[17]&i[14]&i[6]&i[4]) | (i[18]&i[14]&i[6]&i[4]) | (
-    i[19]&i[14]&i[6]&i[4]);
-
-assign out.presync = (!i[5]&i[3]) | (!i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (
-    !i[13]&i[9]&i[6]&i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]
-    &i[6]&i[4]) | (i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (
-    i[17]&i[13]&i[6]&i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]
-    &i[4]);
-
-assign out.postsync = (i[12]&!i[5]&i[3]) | (!i[22]&!i[13]&!i[12]&i[6]&i[4]) | (
-    !i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (!i[13]&i[9]&i[6]
-    &i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]&i[6]&i[4]) | (
-    i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (i[17]&i[13]&i[6]
-    &i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]&i[4]);
-
-assign out.ebreak = (!i[22]&i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.ecall = (!i[21]&!i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mret = (i[29]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mul = (!i[30]&i[27]&i[24]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&i[23]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[27]&i[13]
-    &!i[6]&i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[22]&!i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[22]&i[21]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[30]&i[29]&i[27]&!i[23]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]&i[23]&i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[2]) | (i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&!i[27]
-    &i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[14]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.rs1_sign = (!i[27]&i[25]&!i[14]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (
-    !i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.rs2_sign = (!i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.low = (i[25]&!i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.div = (!i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.rem = (!i[27]&i[25]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.fence = (!i[5]&i[3]);
-
-assign out.fence_i = (i[12]&!i[5]&i[3]);
-
-assign out.clz = (i[30]&!i[27]&!i[24]&!i[22]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.ctz = (i[30]&!i[27]&!i[24]&!i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.pcnt = (i[30]&!i[27]&!i[24]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_b = (i[30]&!i[27]&i[22]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_h = (i[30]&!i[27]&i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.slo = (!i[30]&i[29]&!i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sro = (!i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.min = (i[27]&i[25]&i[14]&!i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.max = (i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.pack = (!i[30]&i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packu = (i[30]&i[27]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packh = (!i[30]&i[27]&!i[25]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.rol = (i[30]&!i[27]&!i[14]&i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.ror = (i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbb = (i[30]&!i[27]&!i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    !i[30]&i[27]&i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]) | (i[30]&i[29]&!i[27]
-    &i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[27]&!i[13]&!i[12]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[14]&!i[13]&!i[12]&!i[6]&i[5]&!i[2]) | (i[30]
-    &!i[27]&i[13]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[29]&!i[27]&!i[6]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[29]&i[24]&i[23]&i[22]&i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[29]&i[27]&!i[24]&!i[23]&i[22]
-    &i[21]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]
-    &i[24]&!i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[30]&i[29]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.sbset = (!i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbclr = (i[30]&!i[29]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbinv = (i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbext = (i[30]&!i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbs = (i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]) | (i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.bext = (!i[30]&i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.bdep = (i[30]&i[27]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbe = (i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmul = (i[27]&i[25]&!i[14]&!i[13]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmulh = (i[27]&!i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.clmulr = (i[27]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbc = (i[27]&i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.grev = (i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.gorc = (!i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.shfl = (!i[30]&!i[29]&i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.unshfl = (!i[30]&!i[29]&i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbp = (!i[30]&i[29]&!i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[30]&!i[27]&i[13]&!i[6]
-    &i[5]&i[4]&!i[2]) | (i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (
-    i[30]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (i[29]&!i[27]&i[12]&!i[6]
-    &i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&i[12]&!i[6]&i[5]&i[4]
-    &!i[2]) | (i[29]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.crc32_b = (i[30]&!i[27]&i[24]&!i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]);
-
-assign out.crc32_h = (i[30]&!i[27]&i[24]&!i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32_w = (i[30]&!i[27]&i[24]&!i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32c_b = (i[30]&!i[27]&i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.crc32c_h = (i[30]&!i[27]&i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.crc32c_w = (i[30]&!i[27]&i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.zbr = (i[30]&!i[27]&i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.bfp = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.zbf = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.sh1add = (i[29]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.sh2add = (i[29]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.sh3add = (i[29]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.zba = (i[29]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.pm_alu = (i[28]&i[22]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[29]&!i[27]&!i[25]
-    &!i[6]&i[4]) | (!i[29]&!i[27]&!i[25]&!i[13]&i[12]&!i[6]&i[4]) | (
-    !i[29]&!i[27]&!i[25]&!i[14]&!i[6]&i[4]) | (i[13]&!i[5]&i[4]) | (i[4]
-    &i[2]) | (!i[12]&!i[5]&i[4]);
-
-
-assign out.legal = (!i[31]&!i[30]&!i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]
-    &i[22]&!i[21]&i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]
-    &!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]&!i[21]
-    &!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]&!i[9]&!i[8]
-    &!i[7]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]
-    &!i[25]&i[24]&!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&i[24]&!i[22]&!i[21]&!i[6]&!i[5]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[23]
-    &!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]
-    &!i[28]&!i[26]&!i[25]&!i[24]&!i[23]&!i[21]&!i[6]&!i[5]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[25]&i[13]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[26]&!i[25]&!i[24]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&i[14]&!i[12]&!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[28]&!i[27]&!i[26]&!i[25]&i[13]&!i[12]&!i[6]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[13]&!i[12]
-    &!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[28]&!i[27]&!i[26]&!i[25]
-    &i[14]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[29]
-    &!i[28]&!i[26]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]
-    &i[0]) | (!i[31]&i[30]&!i[28]&i[27]&!i[26]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&i[27]&!i[26]&!i[25]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]
-    &!i[29]&!i[28]&!i[27]&!i[26]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[14]&!i[13]&!i[12]&i[6]&i[5]&!i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[29]
-    &!i[28]&!i[26]&!i[25]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]
-    &i[1]&i[0]) | (i[14]&i[6]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[14]
-    &!i[13]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[12]&!i[6]&!i[5]&i[4]
-    &!i[3]&i[1]&i[0]) | (!i[13]&i[12]&i[6]&i[5]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &!i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[13]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]
-    &!i[13]&!i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]
-    &i[2]&i[1]&i[0]) | (i[13]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    i[6]&i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (!i[14]&!i[12]&!i[6]&!i[4]
-    &!i[3]&!i[2]&i[1]&i[0]) | (!i[13]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]
-    &i[0]) | (i[13]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[6]&i[4]&!i[3]
-    &i[2]&i[1]&i[0]);
-
-
-endmodule // eb1_dec_dec_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_gpr_ctl.sv b/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_gpr_ctl.sv
deleted file mode 100644
index 62ddf2e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_gpr_ctl.sv
+++ /dev/null
@@ -1,95 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_gpr_ctl
-import eb1_pkg::*;
-#(
-   `include "eb1_param.vh"
- )  (
-    input logic [4:0]  raddr0,       // logical read addresses
-    input logic [4:0]  raddr1,
-
-    input logic        wen0,         // write enable
-    input logic [4:0]  waddr0,       // write address
-    input logic [31:0] wd0,          // write data
-
-    input logic        wen1,         // write enable
-    input logic [4:0]  waddr1,       // write address
-    input logic [31:0] wd1,          // write data
-
-    input logic        wen2,         // write enable
-    input logic [4:0]  waddr2,       // write address
-    input logic [31:0] wd2,          // write data
-
-    input logic        clk,
-    input logic        rst_l,
-
-    output logic [31:0] rd0,         // read data
-    output logic [31:0] rd1,
-
-    input  logic        scan_mode
-);
-
-   logic [31:1] [31:0] gpr_out;      // 31 x 32 bit GPRs
-   logic [31:1] [31:0] gpr_in;
-   logic [31:1] w0v,w1v,w2v;
-   logic [31:1] gpr_wr_en;
-
-   // GPR Write Enables
-   assign gpr_wr_en[31:1] = (w0v[31:1] | w1v[31:1] | w2v[31:1]);
-   for ( genvar j=1; j<32; j++ )  begin : gpr
-      rvdffe #(32) gprff (.*, .en(gpr_wr_en[j]), .din(gpr_in[j][31:0]), .dout(gpr_out[j][31:0]));
-   end : gpr
-
-   // the read out
-   always_comb begin
-      rd0[31:0] = 32'b0;
-      rd1[31:0] = 32'b0;
-      w0v[31:1] = 31'b0;
-      w1v[31:1] = 31'b0;
-      w2v[31:1] = 31'b0;
-      gpr_in[31:1] = '0;
-
-      // GPR Read logic
-      for (int j=1; j<32; j++ )  begin
-         rd0[31:0] |= ({32{(raddr0[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-         rd1[31:0] |= ({32{(raddr1[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-      end
-
-     // GPR Write logic
-     for (int j=1; j<32; j++ )  begin
-         w0v[j]     = wen0  & (waddr0[4:0]== 5'(j) );
-         w1v[j]     = wen1  & (waddr1[4:0]== 5'(j) );
-         w2v[j]     = wen2  & (waddr2[4:0]== 5'(j) );
-         gpr_in[j]  =    ({32{w0v[j]}} & wd0[31:0]) |
-                         ({32{w1v[j]}} & wd1[31:0]) |
-                         ({32{w2v[j]}} & wd2[31:0]);
-     end
-   end // always_comb begin
-
-`ifdef RV_ASSERT_ON
-
-   logic  write_collision_unused;
-   assign write_collision_unused = ( (w0v[31:1] == w1v[31:1]) & wen0 & wen1 ) |
-                                   ( (w0v[31:1] == w2v[31:1]) & wen0 & wen2 ) |
-                                   ( (w1v[31:1] == w2v[31:1]) & wen1 & wen2 );
-
-
-   // asserting that no 2 ports will write to the same gpr simultaneously
-   assert_multiple_wen_to_same_gpr: assert #0 (~( write_collision_unused ) );
-
-`endif
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_ib_ctl.sv b/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_ib_ctl.sv
deleted file mode 100644
index 0eb95df..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_ib_ctl.sv
+++ /dev/null
@@ -1,164 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_ib_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic                 dbg_cmd_valid,                      // valid dbg cmd
-
-   input logic                 dbg_cmd_write,                      // dbg cmd is write
-   input logic [1:0]           dbg_cmd_type,                       // dbg type
-   input logic [31:0]          dbg_cmd_addr,                       // expand to 31:0
-
-   input eb1_br_pkt_t i0_brp,                                     // i0 branch packet from aligner
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index,    // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,               // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,              // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input logic       ifu_i0_pc4,                                   // i0 is 4B inst else 2B
-   input logic       ifu_i0_valid,                                 // i0 valid from ifu
-   input logic       ifu_i0_icaf,                                  // i0 instruction access fault
-   input logic [1:0] ifu_i0_icaf_type,                             // i0 instruction access fault type
-
-   input logic   ifu_i0_icaf_second,                               // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,                                     // i0 double-bit error
-   input logic [31:0]  ifu_i0_instr,                               // i0 instruction from the aligner
-   input logic [31:1]  ifu_i0_pc,                                  // i0 pc from the aligner
-
-
-   output logic dec_ib0_valid_d,                                   // ib0 valid
-   output logic dec_debug_valid_d,                                 // Debug read or write at D-stage
-
-
-   output logic [31:0] dec_i0_instr_d,                             // i0 inst at decode
-
-   output logic [31:1] dec_i0_pc_d,                                // i0 pc at decode
-
-   output logic dec_i0_pc4_d,                                      // i0 is 4B inst else 2B
-
-   output eb1_br_pkt_t dec_i0_brp,                                // i0 branch packet at decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   output logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,              // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag,             // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   output logic dec_i0_icaf_d,                                     // i0 instruction access fault at decode
-   output logic dec_i0_icaf_second_d,                              // i0 instruction access fault on second 2B of 4B inst
-   output logic [1:0] dec_i0_icaf_type_d,                          // i0 instruction access fault type
-   output logic dec_i0_dbecc_d,                                    // i0 double-bit error at decode
-   output logic dec_debug_wdata_rs1_d,                             // put debug write data onto rs1 source: machine is halted
-
-   output logic dec_debug_fence_d                                  // debug fence inst
-
-   );
-
-
-   logic         debug_valid;
-   logic [4:0]   dreg;
-   logic [11:0]  dcsr;
-   logic [31:0]  ib0, ib0_debug_in;
-
-   logic         debug_read;
-   logic         debug_write;
-   logic         debug_read_gpr;
-   logic         debug_write_gpr;
-   logic         debug_read_csr;
-   logic         debug_write_csr;
-
-   logic [34:0]  ifu_i0_pcdata, pc0;
-
-   assign ifu_i0_pcdata[34:0] = { ifu_i0_icaf_second, ifu_i0_dbecc, ifu_i0_icaf,
-                                  ifu_i0_pc[31:1], ifu_i0_pc4 };
-
-   assign pc0[34:0] = ifu_i0_pcdata[34:0];
-
-   assign dec_i0_icaf_second_d = pc0[34];   // icaf's can only decode as i0
-
-   assign dec_i0_dbecc_d = pc0[33];
-
-   assign dec_i0_icaf_d = pc0[32];
-   assign dec_i0_pc_d[31:1] = pc0[31:1];
-   assign dec_i0_pc4_d = pc0[0];
-
-   assign dec_i0_icaf_type_d[1:0] = ifu_i0_icaf_type[1:0];
-
-// GPR accesses
-
-// put reg to read on rs1
-// read ->   or %x0,  %reg,%x0      {000000000000,reg[4:0],110000000110011}
-
-// put write date on rs1
-// write ->  or %reg, %x0, %x0      {00000000000000000110,reg[4:0],0110011}
-
-
-// CSR accesses
-// csr is of form rd, csr, rs1
-
-// read  -> csrrs %x0, %csr, %x0     {csr[11:0],00000010000001110011}
-
-// put write data on rs1
-// write -> csrrw %x0, %csr, %x0     {csr[11:0],00000001000001110011}
-
-// abstract memory command not done here
-   assign debug_valid = dbg_cmd_valid & (dbg_cmd_type[1:0] != 2'h2);
-
-
-   assign debug_read  = debug_valid & ~dbg_cmd_write;
-   assign debug_write = debug_valid &  dbg_cmd_write;
-
-   assign debug_read_gpr  = debug_read  & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_write_gpr = debug_write & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_read_csr  = debug_read  & (dbg_cmd_type[1:0]==2'h1);
-   assign debug_write_csr = debug_write & (dbg_cmd_type[1:0]==2'h1);
-
-   assign dreg[4:0]  = dbg_cmd_addr[4:0];
-   assign dcsr[11:0] = dbg_cmd_addr[11:0];
-
-
-   assign ib0_debug_in[31:0] = ({32{debug_read_gpr}}  & {12'b000000000000,dreg[4:0],15'b110000000110011}) |
-                               ({32{debug_write_gpr}} & {20'b00000000000000000110,dreg[4:0],7'b0110011}) |
-                               ({32{debug_read_csr}}  & {dcsr[11:0],20'b00000010000001110011}) |
-                               ({32{debug_write_csr}} & {dcsr[11:0],20'b00000001000001110011});
-
-
-
-   // machine is in halted state, pipe empty, write will always happen next cycle
-
-   assign dec_debug_wdata_rs1_d = debug_write_gpr | debug_write_csr;
-
-
-   // special fence csr for use only in debug mode
-
-   assign dec_debug_fence_d = debug_write_csr & (dcsr[11:0] == 12'h7c4);
-
-   assign ib0[31:0] = (debug_valid) ? ib0_debug_in[31:0] : ifu_i0_instr[31:0];
-
-   assign dec_ib0_valid_d = ifu_i0_valid | debug_valid;
-
-   assign dec_debug_valid_d = debug_valid;
-
-   assign dec_i0_instr_d[31:0] = ib0[31:0];
-
-   assign dec_i0_brp = i0_brp;
-   assign dec_i0_bp_index = ifu_i0_bp_index;
-   assign dec_i0_bp_fghr = ifu_i0_bp_fghr;
-   assign dec_i0_bp_btag = ifu_i0_bp_btag;
-   assign dec_i0_bp_fa_index = ifu_i0_fa_index;
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_tlu_ctl.sv b/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_tlu_ctl.sv
deleted file mode 100644
index 83f0a9d..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_tlu_ctl.sv
+++ /dev/null
@@ -1,2947 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-//********************************************************************************
-// eb1_dec_tlu_ctl.sv
-//
-//
-// Function: CSRs, Commit/WB, flushing, exceptions, interrupts
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dec_tlu_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,
-   input logic free_clk,
-   input logic free_l2clk,
-   input logic rst_l,
-   input logic scan_mode,
-
-   input logic [31:1] rst_vec, // reset vector, from core pins
-   input logic        nmi_int, // nmi pin
-   input logic [31:1] nmi_vec, // nmi vector
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-
-   input logic lsu_fastint_stall_any,   // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-
-   // perf counter inputs
-   input logic       ifu_pmu_instr_aligned,   // aligned instructions
-   input logic       ifu_pmu_fetch_stall, // fetch unit stalled
-   input logic       ifu_pmu_ic_miss, // icache miss
-   input logic       ifu_pmu_ic_hit, // icache hit
-   input logic       ifu_pmu_bus_error, // Instruction side bus error
-   input logic       ifu_pmu_bus_busy, // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn, // Instruction side bus transaction
-   input logic       dec_pmu_instr_decoded, // decoded instructions
-   input logic       dec_pmu_decode_stall, // decode stall
-   input logic       dec_pmu_presync_stall, // decode stall due to presync'd inst
-   input logic       dec_pmu_postsync_stall,// decode stall due to postsync'd inst
-   input logic       lsu_store_stall_any,    // SB or WB is full, stall decode
-   input logic       dma_dccm_stall_any,     // DMA stall of lsu
-   input logic       dma_iccm_stall_any,     // DMA stall of ifu
-   input logic       exu_pmu_i0_br_misp,     // pipe 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // pipe 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // pipe 0 4 byte branch
-   input logic       lsu_pmu_bus_trxn,       // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned, // D side bus misaligned
-   input logic       lsu_pmu_bus_error,      // D side bus error
-   input logic       lsu_pmu_bus_busy,       // D side bus busy
-   input logic       lsu_pmu_load_external_m, // D side bus load
-   input logic       lsu_pmu_store_external_m, // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr, // Fast int address
-   input logic [1:0] lsu_fir_error, // Fast int lookup error
-
-   input logic       iccm_dma_sb_error,      // I side dma single bit error
-
-   input    eb1_lsu_error_pkt_t lsu_error_pkt_r, // lsu precise exception/error packet
-   input logic         lsu_single_ecc_error_incr, // LSU inc SB error counter
-
-   input logic dec_pause_state, // Pause counter not zero
-   input logic         lsu_imprecise_error_store_any,      // store bus error
-   input logic         lsu_imprecise_error_load_any,      // store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any, // store bus error address
-
-   input logic        dec_csr_wen_unq_d,       // valid csr with write - for csr legal
-   input logic        dec_csr_any_unq_d,       // valid csr - for csr legal
-   input logic [11:0] dec_csr_rdaddr_d,      // read address for csr
-
-   input logic        dec_csr_wen_r,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic        dec_csr_stall_int_ff, // csr is mie/mstatus
-
-   input logic dec_tlu_i0_valid_r, // pipe 0 op at e4 is valid
-
-   input logic [31:1] exu_npc_r, // for NPC tracking
-
-   input logic [31:1] dec_tlu_i0_pc_r, // for PC/NPC tracking
-
-   input eb1_trap_pkt_t dec_tlu_packet_r, // exceptions known at decode
-
-   input logic [31:0] dec_illegal_inst, // For mtval
-   input logic        dec_i0_decode_d,  // decode valid, used for clean icache diagnostics
-
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r, // history
-   input logic        exu_i0_br_error_r, // error
-   input logic        exu_i0_br_start_error_r, // start error
-   input logic        exu_i0_br_valid_r, // valid
-   input logic        exu_i0_br_mp_r, // mispredict
-   input logic        exu_i0_br_middle_r, // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r, // way hit or repl
-
-   output logic dec_tlu_core_empty,  // core is empty
-   // Debug start
-   output logic dec_dbg_cmd_done, // abstract command done
-   output logic dec_dbg_cmd_fail, // abstract command failed
-   output logic dec_tlu_dbg_halted, // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode, // Core is in debug mode
-   output logic dec_tlu_resume_ack, // Resume acknowledge
-   output logic dec_tlu_debug_stall, // stall decode while waiting on core to empty
-
-   output logic dec_tlu_flush_noredir_r , // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only, // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r, // single step
-   output logic dec_tlu_flush_err_r, // iside perr/ecc rfpc. This is the D stage of the error
-
-   output logic dec_tlu_flush_extint, // fast ext int started
-   output logic [31:2] dec_tlu_meihap, // meihap for fast int
-
-   input  logic dbg_halt_req, // DM requests a halt
-   input  logic dbg_resume_req, // DM requests a resume
-   input  logic ifu_miss_state_idle, // I-side miss buffer empty
-   input  logic lsu_idle_any, // lsu is idle
-   input  logic dec_div_active, // oop div is active
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // trigger info for trigger blocks
-
-   input logic  ifu_ic_error_start,     // IC single bit error
-   input logic  ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-
-   input logic [70:0] ifu_ic_debug_rd_data, // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid, // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-   // Debug end
-
-   input logic [7:0] pic_claimid, // pic claimid for csr
-   input logic [3:0] pic_pl, // pic priv level for csr
-   input logic       mhwakeup, // high priority external int, wakeup if halted
-
-   input logic mexintpend, // external interrupt pending
-   input logic timer_int, // timer interrupt pending
-   input logic soft_int, // software interrupt pending
-
-   output logic o_cpu_halt_status, // PMU interface, halted
-   output logic o_cpu_halt_ack, // halt req ack
-   output logic o_cpu_run_ack, // run req ack
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // Core ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic [3:0] dec_tlu_meicurpl, // to PIC
-   output logic [3:0] dec_tlu_meipt, // to PIC
-
-
-   output logic [31:0] dec_csr_rddata_d,      // csr read data at wb
-   output logic dec_csr_legal_d,              // csr indicates legal operation
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // branch pkt to bp
-
-   output logic dec_tlu_i0_kill_writeb_wb,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_wb,       // commit has a flush (exception, int, mispredict at e4)
-   output logic dec_tlu_i0_commit_cmt,        // committed an instruction
-
-   output logic dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_r,       // commit has a flush (exception, int)
-   output logic [31:1] dec_tlu_flush_path_r, // flush pc
-   output logic dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-   output logic dec_tlu_wr_pause_r,           // CSR write to pause reg is at R.
-   output logic dec_tlu_flush_pause_r,        // Flush is due to pause
-
-   output logic dec_tlu_presync_d,            // CSR read needs to be presync'd
-   output logic dec_tlu_postsync_d,           // CSR needs to be presync'd
-
-
-   output logic [31:0] dec_tlu_mrac_ff,        // CSR for memory region control
-
-   output logic dec_tlu_force_halt, // halt has been forced
-
-   output logic dec_tlu_perfcnt0, // toggles when pipe0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1, // toggles when pipe0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2, // toggles when pipe0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3, // toggles when pipe0 perf counter 3 has an event inc
-
-   output logic dec_tlu_i0_exc_valid_wb1, // pipe 0 exception valid
-   output logic dec_tlu_i0_valid_wb1,  // pipe 0 valid
-   output logic dec_tlu_int_valid_wb1, // pipe 2 int valid
-   output logic [4:0] dec_tlu_exc_cause_wb1, // exception or int cause
-   output logic [31:0] dec_tlu_mtval_wb1, // MTVAL value
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable, // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable, // disable core ECC
-   output logic  dec_tlu_bpred_disable,           // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,   // disable writebuffer coalescing
-   output logic  dec_tlu_pipelining_disable,      // disable pipelining
-   output logic  dec_tlu_trace_disable,           // disable trace
-   output logic [2:0]  dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override, // override misc clock domain gating
-   output logic  dec_tlu_dec_clk_override,  // override decode clock domain gating
-   output logic  dec_tlu_ifu_clk_override,  // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,  // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,  // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,  // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,// override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override, // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override   // override ICCM clock domain gating
-   );
-
-   logic         clk_override, e4e5_int_clk, nmi_fir_type, nmi_lsu_load_type, nmi_lsu_store_type, nmi_int_detected_f, nmi_lsu_load_type_f,
-                 nmi_lsu_store_type_f, allow_dbg_halt_csr_write, dbg_cmd_done_ns, i_cpu_run_req_d1_raw, debug_mode_status, lsu_single_ecc_error_r_d1,
-                 sel_npc_r, sel_npc_resume, ce_int,
-                 nmi_in_debug_mode, dpc_capture_npc, dpc_capture_pc, tdata_load, tdata_opcode, tdata_action, perfcnt_halted, tdata_chain,
-                 tdata_kill_write;
-
-
-   logic reset_delayed, reset_detect, reset_detected;
-   logic wr_mstatus_r, wr_mtvec_r, wr_mcyclel_r, wr_mcycleh_r,
-         wr_minstretl_r, wr_minstreth_r, wr_mscratch_r, wr_mepc_r, wr_mcause_r, wr_mscause_r, wr_mtval_r,
-         wr_mrac_r, wr_meihap_r, wr_meicurpl_r, wr_meipt_r, wr_dcsr_r,
-         wr_dpc_r, wr_meicidpl_r, wr_meivt_r, wr_meicpct_r, wr_micect_r, wr_miccmect_r, wr_mfdht_r, wr_mfdhs_r,
-         wr_mdccmect_r,wr_mhpme3_r, wr_mhpme4_r, wr_mhpme5_r, wr_mhpme6_r;
-   logic wr_mpmc_r;
-   logic [1:1] mpmc_b_ns, mpmc, mpmc_b;
-   logic set_mie_pmu_fw_halt, fw_halted_ns, fw_halted;
-   logic wr_mcountinhibit_r;
-   logic [6:0] mcountinhibit;
-   logic wr_mtsel_r, wr_mtdata1_t0_r, wr_mtdata1_t1_r, wr_mtdata1_t2_r, wr_mtdata1_t3_r, wr_mtdata2_t0_r, wr_mtdata2_t1_r, wr_mtdata2_t2_r, wr_mtdata2_t3_r;
-   logic [31:0] mtdata2_t0, mtdata2_t1, mtdata2_t2, mtdata2_t3, mtdata2_tsel_out, mtdata1_tsel_out;
-   logic [9:0]  mtdata1_t0_ns, mtdata1_t0, mtdata1_t1_ns, mtdata1_t1, mtdata1_t2_ns, mtdata1_t2, mtdata1_t3_ns, mtdata1_t3;
-   logic [9:0] tdata_wrdata_r;
-   logic [1:0] mtsel_ns, mtsel;
-   logic tlu_i0_kill_writeb_r;
-   logic [1:0]  mstatus_ns, mstatus;
-   logic [1:0] mfdhs_ns, mfdhs;
-   logic [31:0] force_halt_ctr, force_halt_ctr_f;
-   logic        force_halt;
-   logic [5:0]  mfdht, mfdht_ns;
-   logic mstatus_mie_ns;
-   logic [30:0] mtvec_ns, mtvec;
-   logic [15:2] dcsr_ns, dcsr;
-   logic [5:0] mip_ns, mip;
-   logic [5:0] mie_ns, mie;
-   logic [31:0] mcyclel_ns, mcyclel;
-   logic [31:0] mcycleh_ns, mcycleh;
-   logic [31:0] minstretl_ns, minstretl;
-   logic [31:0] minstreth_ns, minstreth;
-   logic [31:0] micect_ns, micect, miccmect_ns, miccmect, mdccmect_ns, mdccmect;
-   logic [26:0] micect_inc, miccmect_inc, mdccmect_inc;
-   logic [31:0] mscratch;
-   logic [31:0] mhpmc3, mhpmc3_ns, mhpmc4, mhpmc4_ns, mhpmc5, mhpmc5_ns, mhpmc6, mhpmc6_ns;
-   logic [31:0] mhpmc3h, mhpmc3h_ns, mhpmc4h, mhpmc4h_ns, mhpmc5h, mhpmc5h_ns, mhpmc6h, mhpmc6h_ns;
-   logic [9:0]  mhpme3, mhpme4, mhpme5, mhpme6;
-   logic [31:0] mrac;
-   logic [9:2] meihap;
-   logic [31:10] meivt;
-   logic [3:0] meicurpl_ns, meicurpl;
-   logic [3:0] meicidpl_ns, meicidpl;
-   logic [3:0] meipt_ns, meipt;
-   logic [31:0] mdseac;
-   logic mdseac_locked_ns, mdseac_locked_f, mdseac_en, nmi_lsu_detected;
-   logic [31:1] mepc_ns, mepc;
-   logic [31:1] dpc_ns, dpc;
-   logic [31:0] mcause_ns, mcause;
-   logic [3:0] mscause_ns, mscause, mscause_type;
-   logic [31:0] mtval_ns, mtval;
-   logic dec_pause_state_f, dec_tlu_wr_pause_r_d1, pause_expired_r, pause_expired_wb;
-   logic        tlu_flush_lower_r, tlu_flush_lower_r_d1;
-   logic [31:1] tlu_flush_path_r,  tlu_flush_path_r_d1;
-   logic i0_valid_wb;
-   logic tlu_i0_commit_cmt;
-   logic [31:1] vectored_path, interrupt_path;
-   logic [16:0] dicawics_ns, dicawics;
-   logic        wr_dicawics_r, wr_dicad0_r, wr_dicad1_r, wr_dicad0h_r;
-   logic [31:0] dicad0_ns, dicad0, dicad0h_ns, dicad0h;
-
-   logic [6:0]  dicad1_ns, dicad1_raw;
-   logic [31:0] dicad1;
-   logic        ebreak_r, ebreak_to_debug_mode_r, ecall_r, illegal_r, mret_r, inst_acc_r, fence_i_r,
-                ic_perr_r, iccm_sbecc_r, ebreak_to_debug_mode_r_d1, kill_ebreak_count_r, inst_acc_second_r;
-   logic ce_int_ready, ext_int_ready, timer_int_ready, soft_int_ready, int_timer0_int_ready, int_timer1_int_ready, mhwakeup_ready,
-         take_ext_int, take_ce_int, take_timer_int, take_soft_int, take_int_timer0_int, take_int_timer1_int, take_nmi, take_nmi_r_d1, int_timer0_int_possible, int_timer1_int_possible;
-   logic i0_exception_valid_r, interrupt_valid_r, i0_exception_valid_r_d1, interrupt_valid_r_d1, exc_or_int_valid_r, exc_or_int_valid_r_d1, mdccme_ce_req, miccme_ce_req, mice_ce_req;
-   logic synchronous_flush_r;
-   logic [4:0]  exc_cause_r, exc_cause_wb;
-   logic        mcyclel_cout, mcyclel_cout_f, mcyclela_cout;
-   logic [31:0] mcyclel_inc;
-   logic [31:0] mcycleh_inc;
-
-   logic        minstretl_cout, minstretl_cout_f, minstret_enable, minstretl_cout_ns, minstretl_couta;
-
-   logic [31:0] minstretl_inc, minstretl_read;
-   logic [31:0] minstreth_inc, minstreth_read;
-   logic [31:1] pc_r, pc_r_d1, npc_r, npc_r_d1;
-   logic valid_csr;
-   logic rfpc_i0_r;
-   logic lsu_i0_rfnpc_r;
-   logic dec_tlu_br0_error_r, dec_tlu_br0_start_error_r, dec_tlu_br0_v_r;
-   logic lsu_i0_exc_r, lsu_i0_exc_r_raw, lsu_exc_ma_r, lsu_exc_acc_r, lsu_exc_st_r,
-         lsu_exc_valid_r, lsu_exc_valid_r_raw, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1, block_interrupts;
-   logic i0_trigger_eval_r;
-
-   logic request_debug_mode_r, request_debug_mode_r_d1, request_debug_mode_done, request_debug_mode_done_f;
-   logic take_halt, halt_taken, halt_taken_f, internal_dbg_halt_mode, dbg_tlu_halted_f, take_reset,
-         dbg_tlu_halted, core_empty, lsu_idle_any_f, ifu_miss_state_idle_f, resume_ack_ns,
-         debug_halt_req_f, debug_resume_req_f_raw, debug_resume_req_f, enter_debug_halt_req, dcsr_single_step_done, dcsr_single_step_done_f,
-         debug_halt_req_d1, debug_halt_req_ns, dcsr_single_step_running, dcsr_single_step_running_f, internal_dbg_halt_timers;
-
-   logic [3:0] i0_trigger_r, trigger_action, trigger_enabled,
-               i0_trigger_chain_masked_r;
-   logic       i0_trigger_hit_r, i0_trigger_hit_raw_r, i0_trigger_action_r,
-               trigger_hit_r_d1,
-               mepc_trigger_hit_sel_pc_r;
-   logic [3:0] update_hit_bit_r, i0_iside_trigger_has_pri_r,i0trigger_qual_r, i0_lsu_trigger_has_pri_r;
-   logic cpu_halt_status, cpu_halt_ack, cpu_run_ack, ext_halt_pulse, i_cpu_halt_req_d1, i_cpu_run_req_d1;
-
-   logic inst_acc_r_raw, trigger_hit_dmode_r, trigger_hit_dmode_r_d1;
-   logic [9:0] mcgc, mcgc_ns, mcgc_int;
-   logic [18:0] mfdc;
-   logic i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual, pmu_fw_halt_req_ns, pmu_fw_halt_req_f, int_timer_stalled,
-         fw_halt_req, enter_pmu_fw_halt_req, pmu_fw_tlu_halted, pmu_fw_tlu_halted_f, internal_pmu_fw_halt_mode,
-         internal_pmu_fw_halt_mode_f, int_timer0_int_hold, int_timer1_int_hold, int_timer0_int_hold_f, int_timer1_int_hold_f;
-   logic nmi_int_delayed, nmi_int_detected;
-   logic [3:0] trigger_execute, trigger_data, trigger_store;
-   logic dec_tlu_pmu_fw_halted;
-
-   logic mpc_run_state_ns, debug_brkpt_status_ns, mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns, dbg_halt_state_ns, dbg_run_state_ns,
-         dbg_halt_state_f, mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f, mpc_halt_state_f, mpc_halt_state_ns, mpc_run_state_f, debug_brkpt_status_f,
-         mpc_debug_halt_ack_f, mpc_debug_run_ack_f, dbg_run_state_f, mpc_debug_halt_req_sync_pulse,
-         mpc_debug_run_req_sync_pulse, debug_brkpt_valid, debug_halt_req, debug_resume_req, dec_tlu_mpc_halted_only_ns;
-   logic take_ext_int_start, ext_int_freeze, take_ext_int_start_d1, take_ext_int_start_d2,
-         take_ext_int_start_d3, ext_int_freeze_d1, csr_meicpct, ignore_ext_int_due_to_lsu_stall;
-   logic mcause_sel_nmi_store, mcause_sel_nmi_load, mcause_sel_nmi_ext, fast_int_meicpct;
-   logic [1:0] mcause_fir_error_type;
-   logic dbg_halt_req_held_ns, dbg_halt_req_held, dbg_halt_req_final;
-   logic iccm_repair_state_ns, iccm_repair_state_d1, iccm_repair_state_rfnpc;
-
-
-   // internal timer, isolated for size reasons
-   logic [31:0] dec_timer_rddata_d;
-   logic dec_timer_read_d, dec_timer_t0_pulse, dec_timer_t1_pulse;
-   logic csr_mitctl0;
-   logic csr_mitctl1;
-   logic csr_mitb0;
-   logic csr_mitb1;
-   logic csr_mitcnt0;
-   logic csr_mitcnt1;
-
-   logic nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync, mpc_debug_run_req_sync, mpc_debug_halt_req_sync_raw;
-   logic csr_wr_clk;
-   logic e4e5_clk, e4_valid, e5_valid, e4e5_valid, internal_dbg_halt_mode_f, internal_dbg_halt_mode_f2;
-   logic lsu_pmu_load_external_r, lsu_pmu_store_external_r;
-   logic dec_tlu_flush_noredir_r_d1, dec_tlu_flush_pause_r_d1;
-   logic lsu_single_ecc_error_r;
-   logic [31:0] lsu_error_pkt_addr_r;
-   logic mcyclel_cout_in;
-   logic i0_valid_no_ebreak_ecall_r;
-   logic minstret_enable_f;
-   logic sel_exu_npc_r, sel_flush_npc_r, sel_hold_npc_r;
-   logic pc0_valid_r;
-   logic [15:0] mfdc_int, mfdc_ns;
-   logic [31:0] mrac_in;
-   logic [31:27] csr_sat;
-   logic [8:6] dcsr_cause;
-   logic enter_debug_halt_req_le, dcsr_cause_upgradeable;
-   logic icache_rd_valid, icache_wr_valid, icache_rd_valid_f, icache_wr_valid_f;
-   logic [3:0]      mhpmc_inc_r, mhpmc_inc_r_d1;
-
-   logic [3:0][9:0] mhpme_vec;
-   logic            mhpmc3_wr_en0, mhpmc3_wr_en1, mhpmc3_wr_en;
-   logic            mhpmc4_wr_en0, mhpmc4_wr_en1, mhpmc4_wr_en;
-   logic            mhpmc5_wr_en0, mhpmc5_wr_en1, mhpmc5_wr_en;
-   logic            mhpmc6_wr_en0, mhpmc6_wr_en1, mhpmc6_wr_en;
-   logic            mhpmc3h_wr_en0, mhpmc3h_wr_en;
-   logic            mhpmc4h_wr_en0, mhpmc4h_wr_en;
-   logic            mhpmc5h_wr_en0, mhpmc5h_wr_en;
-   logic            mhpmc6h_wr_en0, mhpmc6h_wr_en;
-   logic [63:0]     mhpmc3_incr, mhpmc4_incr, mhpmc5_incr, mhpmc6_incr;
-   logic perfcnt_halted_d1, zero_event_r;
-   logic [3:0] perfcnt_during_sleep;
-   logic [9:0] event_r;
-
-   eb1_inst_pkt_t pmu_i0_itype_qual;
-
-   logic csr_mfdht;
-   logic csr_mfdhs;
-   logic csr_misa;
-   logic csr_mvendorid;
-   logic csr_marchid;
-   logic csr_mimpid;
-   logic csr_mhartid;
-   logic csr_mstatus;
-   logic csr_mtvec;
-   logic csr_mip;
-   logic csr_mie;
-   logic csr_mcyclel;
-   logic csr_mcycleh;
-   logic csr_minstretl;
-   logic csr_minstreth;
-   logic csr_mscratch;
-   logic csr_mepc;
-   logic csr_mcause;
-   logic csr_mscause;
-   logic csr_mtval;
-   logic csr_mrac;
-   logic csr_dmst;
-   logic csr_mdseac;
-   logic csr_meihap;
-   logic csr_meivt;
-   logic csr_meipt;
-   logic csr_meicurpl;
-   logic csr_meicidpl;
-   logic csr_dcsr;
-   logic csr_mcgc;
-   logic csr_mfdc;
-   logic csr_dpc;
-   logic csr_mtsel;
-   logic csr_mtdata1;
-   logic csr_mtdata2;
-   logic csr_mhpmc3;
-   logic csr_mhpmc4;
-   logic csr_mhpmc5;
-   logic csr_mhpmc6;
-   logic csr_mhpmc3h;
-   logic csr_mhpmc4h;
-   logic csr_mhpmc5h;
-   logic csr_mhpmc6h;
-   logic csr_mhpme3;
-   logic csr_mhpme4;
-   logic csr_mhpme5;
-   logic csr_mhpme6;
-   logic csr_mcountinhibit;
-   logic csr_mpmc;
-   logic csr_micect;
-   logic csr_miccmect;
-   logic csr_mdccmect;
-   logic csr_dicawics;
-   logic csr_dicad0h;
-   logic csr_dicad0;
-   logic csr_dicad1;
-   logic csr_dicago;
-   logic presync;
-   logic postsync;
-   logic legal;
-   logic dec_csr_wen_r_mod;
-
-   logic flush_clkvalid;
-   logic sel_fir_addr;
-   logic wr_mie_r;
-   logic mtval_capture_pc_r;
-   logic mtval_capture_pc_plus2_r;
-   logic mtval_capture_inst_r;
-   logic mtval_capture_lsu_r;
-   logic mtval_clear_r;
-   logic wr_mcgc_r;
-   logic wr_mfdc_r;
-   logic wr_mdeau_r;
-   logic trigger_hit_for_dscr_cause_r_d1;
-   logic conditionally_illegal;
-
-   logic  [3:0] ifu_mscause ;
-   logic        ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f;
-
-   eb1_dec_timer_ctl  #(.pt(pt)) int_timers(.*);
-   // end of internal timers
-
-   assign clk_override = dec_tlu_dec_clk_override;
-
-   // Async inputs to the core have to be sync'd to the core clock.
-   rvsyncss #(7) syncro_ff(.*,
-                           .clk(free_clk),
-                           .din ({nmi_int,      timer_int,      soft_int,      i_cpu_halt_req,      i_cpu_run_req,      mpc_debug_halt_req,          mpc_debug_run_req}),
-                           .dout({nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync_raw, mpc_debug_run_req_sync}));
-
-   // for CSRs that have inpipe writes only
-
-   rvoclkhdr csrwr_r_cgc   ( .en(dec_csr_wen_r_mod | clk_override), .l1clk(csr_wr_clk), .* );
-
-   assign e4_valid = dec_tlu_i0_valid_r;
-   assign e4e5_valid = e4_valid | e5_valid;
-   assign flush_clkvalid = internal_dbg_halt_mode_f | i_cpu_run_req_d1 | interrupt_valid_r | interrupt_valid_r_d1 |
-                           reset_delayed | pause_expired_r | pause_expired_wb | ic_perr_r | iccm_sbecc_r |
-                           clk_override;
-   rvoclkhdr e4e5_cgc     ( .en(e4e5_valid | clk_override), .l1clk(e4e5_clk), .* );
-   rvoclkhdr e4e5_int_cgc ( .en(e4e5_valid | flush_clkvalid), .l1clk(e4e5_int_clk), .* );
-
-   rvdffie #(11)  freeff (.*, .clk(free_l2clk),
-                          .din ({ifu_ic_error_start, ifu_iccm_rd_ecc_single_err, iccm_repair_state_ns, e4_valid, internal_dbg_halt_mode,
-                                 lsu_pmu_load_external_m, lsu_pmu_store_external_m, tlu_flush_lower_r,  tlu_i0_kill_writeb_r,
-                                 internal_dbg_halt_mode_f, force_halt}),
-                          .dout({ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f, iccm_repair_state_d1, e5_valid, internal_dbg_halt_mode_f,
-                                 lsu_pmu_load_external_r, lsu_pmu_store_external_r, tlu_flush_lower_r_d1, dec_tlu_i0_kill_writeb_wb,
-                                 internal_dbg_halt_mode_f2, dec_tlu_force_halt}));
-
-   assign dec_tlu_i0_kill_writeb_r = tlu_i0_kill_writeb_r;
-
-   assign nmi_int_detected = (nmi_int_sync & ~nmi_int_delayed) | nmi_lsu_detected | (nmi_int_detected_f & ~take_nmi_r_d1) | nmi_fir_type;
-   // if the first nmi is a lsu type, note it. If there's already an nmi pending, ignore. Simultaneous with FIR, drop.
-   assign nmi_lsu_load_type  = (nmi_lsu_detected & lsu_imprecise_error_load_any &  ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_load_type_f  & ~take_nmi_r_d1);
-   assign nmi_lsu_store_type = (nmi_lsu_detected & lsu_imprecise_error_store_any & ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_store_type_f & ~take_nmi_r_d1);
-
-   assign nmi_fir_type = ~nmi_int_detected_f & take_ext_int_start_d3 & |lsu_fir_error[1:0];
-
-   // Filter subsequent bus errors after the first, until the lock on MDSEAC is cleared
-   assign nmi_lsu_detected = ~mdseac_locked_f & (lsu_imprecise_error_load_any | lsu_imprecise_error_store_any) & ~nmi_fir_type;
-
-
-localparam MSTATUS_MIE   = 0;
-localparam MIP_MCEIP     = 5;
-localparam MIP_MITIP0    = 4;
-localparam MIP_MITIP1    = 3;
-localparam MIP_MEIP      = 2;
-localparam MIP_MTIP      = 1;
-localparam MIP_MSIP      = 0;
-
-localparam MIE_MCEIE     = 5;
-localparam MIE_MITIE0    = 4;
-localparam MIE_MITIE1    = 3;
-localparam MIE_MEIE      = 2;
-localparam MIE_MTIE      = 1;
-localparam MIE_MSIE      = 0;
-
-localparam DCSR_EBREAKM  = 15;
-localparam DCSR_STEPIE   = 11;
-localparam DCSR_STOPC    = 10;
-localparam DCSR_STEP     = 2;
-
-
-   assign reset_delayed = reset_detect ^ reset_detected;
-
-   // ----------------------------------------------------------------------
-   // MPC halt
-   // - can interact with debugger halt and v-v
-
-   // fast ints in progress have priority
-   assign mpc_debug_halt_req_sync = mpc_debug_halt_req_sync_raw & ~ext_int_freeze_d1;
-
-    rvdffie #(16)  mpvhalt_ff (.*, .clk(free_l2clk),
-                                 .din({1'b1, reset_detect,
-                                       nmi_int_sync, nmi_int_detected, nmi_lsu_load_type, nmi_lsu_store_type,
-                                       mpc_debug_halt_req_sync, mpc_debug_run_req_sync,
-                                       mpc_halt_state_ns, mpc_run_state_ns, debug_brkpt_status_ns,
-                                       mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns,
-                                       dbg_halt_state_ns, dbg_run_state_ns,
-                                       dec_tlu_mpc_halted_only_ns}),
-                                .dout({reset_detect, reset_detected,
-                                       nmi_int_delayed, nmi_int_detected_f, nmi_lsu_load_type_f, nmi_lsu_store_type_f,
-                                       mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f,
-                                       mpc_halt_state_f, mpc_run_state_f, debug_brkpt_status_f,
-                                       mpc_debug_halt_ack_f, mpc_debug_run_ack_f,
-                                       dbg_halt_state_f, dbg_run_state_f,
-                                       dec_tlu_mpc_halted_only}));
-
-   // turn level sensitive requests into pulses
-   assign mpc_debug_halt_req_sync_pulse = mpc_debug_halt_req_sync & ~mpc_debug_halt_req_sync_f;
-   assign mpc_debug_run_req_sync_pulse = mpc_debug_run_req_sync & ~mpc_debug_run_req_sync_f;
-
-   // states
-   assign mpc_halt_state_ns = (mpc_halt_state_f | mpc_debug_halt_req_sync_pulse | (reset_delayed & ~mpc_reset_run_req)) & ~mpc_debug_run_req_sync;
-   assign mpc_run_state_ns = (mpc_run_state_f | (mpc_debug_run_req_sync_pulse & ~mpc_debug_run_ack_f)) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // note, MPC halt can allow the jtag debugger to just start sending commands. When that happens, set the interal debugger halt state to prevent
-   // MPC run from starting the core.
-   assign dbg_halt_state_ns = (dbg_halt_state_f | (dbg_halt_req_final | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1)) & ~dbg_resume_req;
-   assign dbg_run_state_ns = (dbg_run_state_f | dbg_resume_req) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // tell dbg we are only MPC halted
-   assign dec_tlu_mpc_halted_only_ns = ~dbg_halt_state_f & mpc_halt_state_f;
-
-   // this asserts from detection of bkpt until after we leave debug mode
-   assign debug_brkpt_valid = ebreak_to_debug_mode_r_d1 | trigger_hit_dmode_r_d1;
-   assign debug_brkpt_status_ns = (debug_brkpt_valid | debug_brkpt_status_f) & (internal_dbg_halt_mode & ~dcsr_single_step_running_f);
-
-   // acks back to interface
-   assign mpc_debug_halt_ack_ns = mpc_halt_state_f & internal_dbg_halt_mode_f & mpc_debug_halt_req_sync & core_empty;
-   assign mpc_debug_run_ack_ns = (mpc_debug_run_req_sync & ~dbg_halt_state_ns & ~mpc_debug_halt_req_sync) | (mpc_debug_run_ack_f & mpc_debug_run_req_sync) ;
-
-   // Pins
-   assign mpc_debug_halt_ack = mpc_debug_halt_ack_f;
-   assign mpc_debug_run_ack = mpc_debug_run_ack_f;
-   assign debug_brkpt_status = debug_brkpt_status_f;
-
-   // DBG halt req is a pulse, fast ext int in progress has priority
-   assign dbg_halt_req_held_ns = (dbg_halt_req | dbg_halt_req_held) & ext_int_freeze_d1;
-   assign dbg_halt_req_final = (dbg_halt_req | dbg_halt_req_held) & ~ext_int_freeze_d1;
-
-   // combine MPC and DBG halt requests
-   assign debug_halt_req = (dbg_halt_req_final | mpc_debug_halt_req_sync | (reset_delayed & ~mpc_reset_run_req)) & ~internal_dbg_halt_mode_f & ~ext_int_freeze_d1;
-
-   assign debug_resume_req = ~debug_resume_req_f &  // squash back to back resumes
-                             ((mpc_run_state_ns & ~dbg_halt_state_ns) |  // MPC run req
-                              (dbg_run_state_ns & ~mpc_halt_state_ns)); // dbg request is a pulse
-
-
-   // HALT
-   // dbg/pmu/fw requests halt, service as soon as lsu is not blocking interrupts
-   assign take_halt = (debug_halt_req_f | pmu_fw_halt_req_f) & ~synchronous_flush_r & ~mret_r & ~halt_taken_f & ~dec_tlu_flush_noredir_r_d1 & ~take_reset;
-
-   // hold after we take a halt, so we don't keep taking halts
-   assign halt_taken = (dec_tlu_flush_noredir_r_d1 & ~dec_tlu_flush_pause_r_d1 & ~take_ext_int_start_d1) | (halt_taken_f & ~dbg_tlu_halted_f & ~pmu_fw_tlu_halted_f & ~interrupt_valid_r_d1);
-
-   // After doing halt flush (RFNPC) wait until core is idle before asserting a particular halt mode
-   // It takes a cycle for mb_empty to assert after a fetch, take_halt covers that cycle
-   assign core_empty = force_halt |
-                       (lsu_idle_any & lsu_idle_any_f & ifu_miss_state_idle & ifu_miss_state_idle_f & ~debug_halt_req & ~debug_halt_req_d1 & ~dec_div_active);
-
-   assign dec_tlu_core_empty = core_empty;
-
-//--------------------------------------------------------------------------------
-// Debug start
-//
-
-   assign enter_debug_halt_req = (~internal_dbg_halt_mode_f & debug_halt_req) | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1;
-
-   // dbg halt state active from request until non-step resume
-   assign internal_dbg_halt_mode = debug_halt_req_ns | (internal_dbg_halt_mode_f & ~(debug_resume_req_f & ~dcsr[DCSR_STEP]));
-   // dbg halt can access csrs as long as we are not stepping
-   assign allow_dbg_halt_csr_write = internal_dbg_halt_mode_f & ~dcsr_single_step_running_f;
-
-
-   // hold debug_halt_req_ns high until we enter debug halt
-   assign debug_halt_req_ns = enter_debug_halt_req | (debug_halt_req_f & ~dbg_tlu_halted);
-
-   assign dbg_tlu_halted = (debug_halt_req_f & core_empty & halt_taken) | (dbg_tlu_halted_f & ~debug_resume_req_f);
-
-   assign resume_ack_ns = (debug_resume_req_f & dbg_tlu_halted_f & dbg_run_state_ns);
-
-   assign dcsr_single_step_done = dec_tlu_i0_valid_r & ~dec_tlu_dbg_halted & dcsr[DCSR_STEP] & ~rfpc_i0_r;
-
-   assign dcsr_single_step_running = (debug_resume_req_f & dcsr[DCSR_STEP]) | (dcsr_single_step_running_f & ~dcsr_single_step_done_f);
-
-   assign dbg_cmd_done_ns = dec_tlu_i0_valid_r & dec_tlu_dbg_halted;
-
-   // used to hold off commits after an in-pipe debug mode request (triggers, DCSR)
-   assign request_debug_mode_r = (trigger_hit_dmode_r | ebreak_to_debug_mode_r) | (request_debug_mode_r_d1 & ~dec_tlu_flush_lower_wb);
-
-   assign request_debug_mode_done = (request_debug_mode_r_d1 | request_debug_mode_done_f) & ~dbg_tlu_halted_f;
-
-    rvdffie #(18)  halt_ff (.*, .clk(free_l2clk),
-                          .din({dec_tlu_flush_noredir_r, halt_taken, lsu_idle_any, ifu_miss_state_idle, dbg_tlu_halted,
-                                resume_ack_ns, debug_halt_req_ns, debug_resume_req, trigger_hit_dmode_r,
-                                dcsr_single_step_done, debug_halt_req, dec_tlu_wr_pause_r, dec_pause_state,
-                                request_debug_mode_r, request_debug_mode_done, dcsr_single_step_running, dec_tlu_flush_pause_r,
-                                dbg_halt_req_held_ns}),
-                          .dout({dec_tlu_flush_noredir_r_d1, halt_taken_f, lsu_idle_any_f, ifu_miss_state_idle_f, dbg_tlu_halted_f,
-                                 dec_tlu_resume_ack , debug_halt_req_f, debug_resume_req_f_raw, trigger_hit_dmode_r_d1,
-                                 dcsr_single_step_done_f, debug_halt_req_d1, dec_tlu_wr_pause_r_d1, dec_pause_state_f,
-                                 request_debug_mode_r_d1, request_debug_mode_done_f, dcsr_single_step_running_f, dec_tlu_flush_pause_r_d1,
-                                 dbg_halt_req_held}));
-
-   // MPC run collides with DBG halt, fix it here
-   assign debug_resume_req_f = debug_resume_req_f_raw & ~dbg_halt_req;
-
-   assign dec_tlu_debug_stall = debug_halt_req_f;
-   assign dec_tlu_dbg_halted = dbg_tlu_halted_f;
-   assign dec_tlu_debug_mode = internal_dbg_halt_mode_f;
-   assign dec_tlu_pmu_fw_halted = pmu_fw_tlu_halted_f;
-
-   // kill fetch redirection on flush if going to halt, or if there's a fence during db-halt
-   assign dec_tlu_flush_noredir_r = take_halt | (fence_i_r & internal_dbg_halt_mode) | dec_tlu_flush_pause_r | (i0_trigger_hit_r & trigger_hit_dmode_r) | take_ext_int_start;
-
-   assign dec_tlu_flush_extint = take_ext_int_start;
-
-   // 1 cycle after writing the PAUSE counter, flush with noredir to idle F1-D.
-   assign dec_tlu_flush_pause_r = dec_tlu_wr_pause_r_d1 & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // detect end of pause counter and rfpc
-   assign pause_expired_r = ~dec_pause_state & dec_pause_state_f & ~(ext_int_ready | ce_int_ready | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | nmi_int_detected | ext_int_freeze_d1) & ~interrupt_valid_r_d1 & ~debug_halt_req_f & ~pmu_fw_halt_req_f & ~halt_taken_f;
-
-   assign dec_tlu_flush_leak_one_r = dec_tlu_flush_lower_r  & dcsr[DCSR_STEP] & (dec_tlu_resume_ack | dcsr_single_step_running) & ~dec_tlu_flush_noredir_r;
-   assign dec_tlu_flush_err_r = dec_tlu_flush_lower_r & (ic_perr_r | iccm_sbecc_r);
-
-   // If DM attempts to access an illegal CSR, send cmd_fail back
-   assign dec_dbg_cmd_done = dbg_cmd_done_ns;
-   assign dec_dbg_cmd_fail = illegal_r & dec_dbg_cmd_done;
-
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-   // Triggers
-   //
-localparam MTDATA1_DMODE             = 9;
-localparam MTDATA1_SEL   = 7;
-localparam MTDATA1_ACTION            = 6;
-localparam MTDATA1_CHAIN             = 5;
-localparam MTDATA1_MATCH             = 4;
-localparam MTDATA1_M_ENABLED         = 3;
-localparam MTDATA1_EXE   = 2;
-localparam MTDATA1_ST    = 1;
-localparam MTDATA1_LD    = 0;
-
-   // Prioritize trigger hits with other exceptions.
-   //
-   // Trigger should have highest priority except:
-   // - trigger is an execute-data and there is an inst_access exception (lsu triggers won't fire, inst. is nop'd by decode)
-   // - trigger is a store-data and there is a lsu_acc_exc or lsu_ma_exc.
-   assign trigger_execute[3:0] = {mtdata1_t3[MTDATA1_EXE], mtdata1_t2[MTDATA1_EXE], mtdata1_t1[MTDATA1_EXE], mtdata1_t0[MTDATA1_EXE]};
-   assign trigger_data[3:0] = {mtdata1_t3[MTDATA1_SEL], mtdata1_t2[MTDATA1_SEL], mtdata1_t1[MTDATA1_SEL], mtdata1_t0[MTDATA1_SEL]};
-   assign trigger_store[3:0] = {mtdata1_t3[MTDATA1_ST], mtdata1_t2[MTDATA1_ST], mtdata1_t1[MTDATA1_ST], mtdata1_t0[MTDATA1_ST]};
-
-   // MSTATUS[MIE] needs to be on to take triggers unless the action is trigger to debug mode.
-   assign trigger_enabled[3:0] = {(mtdata1_t3[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t3[MTDATA1_M_ENABLED],
-                                  (mtdata1_t2[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t2[MTDATA1_M_ENABLED],
-                                  (mtdata1_t1[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t1[MTDATA1_M_ENABLED],
-                                  (mtdata1_t0[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t0[MTDATA1_M_ENABLED]};
-
-   // iside exceptions are always in i0
-   assign i0_iside_trigger_has_pri_r[3:0]  = ~( (trigger_execute[3:0] & trigger_data[3:0] & {4{inst_acc_r_raw}}) | // exe-data with inst_acc
-                                                ({4{exu_i0_br_error_r | exu_i0_br_start_error_r}}));               // branch error in i0
-
-   // lsu excs have to line up with their respective triggers since the lsu op can be i0
-   assign i0_lsu_trigger_has_pri_r[3:0] = ~(trigger_store[3:0] & trigger_data[3:0] & {4{lsu_i0_exc_r_raw}});
-
-   // trigger hits have to be eval'd to cancel side effect lsu ops even though the pipe is already frozen
-   assign i0_trigger_eval_r = dec_tlu_i0_valid_r;
-
-   assign i0trigger_qual_r[3:0] = {4{i0_trigger_eval_r}} & dec_tlu_packet_r.i0trigger[3:0] & i0_iside_trigger_has_pri_r[3:0] & i0_lsu_trigger_has_pri_r[3:0] & trigger_enabled[3:0];
-
-   // Qual trigger hits
-   assign i0_trigger_r[3:0] = ~{4{dec_tlu_flush_lower_wb | dec_tlu_dbg_halted}} & i0trigger_qual_r[3:0];
-
-   // chaining can mask raw trigger info
-   assign i0_trigger_chain_masked_r[3:0]  = {i0_trigger_r[3] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[2]),
-                                             i0_trigger_r[2] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[3]),
-                                             i0_trigger_r[1] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[0]),
-                                             i0_trigger_r[0] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[1])};
-
-   // This is the highest priority by this point.
-   assign i0_trigger_hit_raw_r = |i0_trigger_chain_masked_r[3:0];
-
-   assign i0_trigger_hit_r = i0_trigger_hit_raw_r;
-
-   // Actions include breakpoint, or dmode. Dmode is only possible if the DMODE bit is set.
-   // Otherwise, take a breakpoint.
-   assign trigger_action[3:0] = {mtdata1_t3[MTDATA1_ACTION] & mtdata1_t3[MTDATA1_DMODE],
-                                 mtdata1_t2[MTDATA1_ACTION] & mtdata1_t2[MTDATA1_DMODE] & ~mtdata1_t2[MTDATA1_CHAIN],
-                                 mtdata1_t1[MTDATA1_ACTION] & mtdata1_t1[MTDATA1_DMODE],
-                                 mtdata1_t0[MTDATA1_ACTION] & mtdata1_t0[MTDATA1_DMODE] & ~mtdata1_t0[MTDATA1_CHAIN]};
-
-   // this is needed to set the HIT bit in the triggers
-   assign update_hit_bit_r[3:0] = ({4{|i0_trigger_r[3:0] & ~rfpc_i0_r}} & {i0_trigger_chain_masked_r[3], i0_trigger_r[2], i0_trigger_chain_masked_r[1], i0_trigger_r[0]});
-
-   // action, 1 means dmode. Simultaneous triggers with at least 1 set for dmode force entire action to dmode.
-   assign i0_trigger_action_r = |(i0_trigger_chain_masked_r[3:0] & trigger_action[3:0]);
-
-   assign trigger_hit_dmode_r = (i0_trigger_hit_r & i0_trigger_action_r);
-
-   assign mepc_trigger_hit_sel_pc_r = i0_trigger_hit_r & ~trigger_hit_dmode_r;
-
-
-//
-// Debug end
-//--------------------------------------------------------------------------------
-
-   //----------------------------------------------------------------------
-   //
-   // Commit
-   //
-   //----------------------------------------------------------------------
-
-
-
-   //--------------------------------------------------------------------------------
-   // External halt (not debug halt)
-   // - Fully interlocked handshake
-   // i_cpu_halt_req  ____|--------------|_______________
-   // core_empty      ---------------|___________
-   // o_cpu_halt_ack  _________________|----|__________
-   // o_cpu_halt_status _______________|---------------------|_________
-   // i_cpu_run_req                              ______|----------|____
-   // o_cpu_run_ack                              ____________|------|________
-   //
-
-
-   // debug mode has priority, ignore PMU/FW halt/run while in debug mode
-   assign i_cpu_halt_req_sync_qual = i_cpu_halt_req_sync & ~dec_tlu_debug_mode & ~ext_int_freeze_d1;
-   assign i_cpu_run_req_sync_qual = i_cpu_run_req_sync & ~dec_tlu_debug_mode & pmu_fw_tlu_halted_f & ~ext_int_freeze_d1;
-
-   rvdffie #(10) exthaltff (.*, .clk(free_l2clk), .din({i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual,   cpu_halt_status,
-                                                   cpu_halt_ack,   cpu_run_ack, internal_pmu_fw_halt_mode,
-                                                   pmu_fw_halt_req_ns, pmu_fw_tlu_halted,
-                                                   int_timer0_int_hold, int_timer1_int_hold}),
-                                            .dout({i_cpu_halt_req_d1,        i_cpu_run_req_d1_raw,      o_cpu_halt_status,
-                                                   o_cpu_halt_ack, o_cpu_run_ack, internal_pmu_fw_halt_mode_f,
-                                                   pmu_fw_halt_req_f, pmu_fw_tlu_halted_f,
-                                                   int_timer0_int_hold_f, int_timer1_int_hold_f}));
-
-   // only happens if we aren't in dgb_halt
-   assign ext_halt_pulse = i_cpu_halt_req_sync_qual & ~i_cpu_halt_req_d1;
-
-   assign enter_pmu_fw_halt_req =  ext_halt_pulse | fw_halt_req;
-
-   assign pmu_fw_halt_req_ns = (enter_pmu_fw_halt_req | (pmu_fw_halt_req_f & ~pmu_fw_tlu_halted)) & ~debug_halt_req_f;
-
-   assign internal_pmu_fw_halt_mode = pmu_fw_halt_req_ns | (internal_pmu_fw_halt_mode_f & ~i_cpu_run_req_d1 & ~debug_halt_req_f);
-
-   // debug halt has priority
-   assign pmu_fw_tlu_halted = ((pmu_fw_halt_req_f & core_empty & halt_taken & ~enter_debug_halt_req) | (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1)) & ~debug_halt_req_f;
-
-   assign cpu_halt_ack = (i_cpu_halt_req_d1 & pmu_fw_tlu_halted_f) | (o_cpu_halt_ack & i_cpu_halt_req_sync);
-   assign cpu_halt_status = (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1) | (o_cpu_halt_status & ~i_cpu_run_req_d1 & ~internal_dbg_halt_mode_f);
-   assign cpu_run_ack = (~pmu_fw_tlu_halted_f & i_cpu_run_req_sync) | (o_cpu_halt_status & i_cpu_run_req_d1_raw) | (o_cpu_run_ack & i_cpu_run_req_sync);
-   assign debug_mode_status = internal_dbg_halt_mode_f;
-   assign o_debug_mode_status = debug_mode_status;
-
-`ifdef RV_ASSERT_ON
-  assert_commit_while_halted: assert #0 (~(tlu_i0_commit_cmt  & o_cpu_halt_status)) else $display("ERROR: Commiting while cpu_halt_status asserted!");
-  assert_flush_while_fastint: assert #0 (~((take_ext_int_start_d1 | take_ext_int_start_d2) & dec_tlu_flush_lower_r)) else $display("ERROR: TLU Flushing inside fast interrupt procedure!");
-`endif
-
-   // high priority interrupts can wakeup from external halt, so can unmasked timer interrupts
-   assign i_cpu_run_req_d1 = i_cpu_run_req_d1_raw | ((nmi_int_detected | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | (mhwakeup & mhwakeup_ready)) & o_cpu_halt_status & ~i_cpu_halt_req_d1);
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-
-   assign lsu_single_ecc_error_r = lsu_single_ecc_error_incr;
-
-   assign lsu_error_pkt_addr_r[31:0] = lsu_error_pkt_r.addr[31:0];
-
-
-   assign lsu_exc_valid_r_raw = lsu_error_pkt_r.exc_valid & ~dec_tlu_flush_lower_wb;
-
-   assign lsu_i0_exc_r_raw =  lsu_error_pkt_r.exc_valid;
-
-   assign lsu_i0_exc_r = lsu_i0_exc_r_raw & lsu_exc_valid_r_raw & ~i0_trigger_hit_r & ~rfpc_i0_r;
-
-   assign lsu_exc_valid_r = lsu_i0_exc_r;
-
-   assign lsu_exc_ma_r  =  lsu_i0_exc_r & ~lsu_error_pkt_r.exc_type;
-   assign lsu_exc_acc_r =  lsu_i0_exc_r & lsu_error_pkt_r.exc_type;
-   assign lsu_exc_st_r  =  lsu_i0_exc_r & lsu_error_pkt_r.inst_type;
-
-   // Single bit ECC errors on loads are RFNPC corrected, with the corrected data written to the GPR.
-   // LSU turns the load into a store and patches the data in the DCCM
-   assign lsu_i0_rfnpc_r = dec_tlu_i0_valid_r & ~i0_trigger_hit_r &
-                           (~lsu_error_pkt_r.inst_type & lsu_error_pkt_r.single_ecc_error);
-
-   //  Final commit valids
-   assign tlu_i0_commit_cmt = dec_tlu_i0_valid_r &
-                              ~rfpc_i0_r &
-                              ~lsu_i0_exc_r &
-                              ~inst_acc_r &
-                              ~dec_tlu_dbg_halted &
-                              ~request_debug_mode_r_d1 &
-                              ~i0_trigger_hit_r;
-
-   // unified place to manage the killing of arch state writebacks
-   assign tlu_i0_kill_writeb_r = rfpc_i0_r | lsu_i0_exc_r | inst_acc_r | (illegal_r & dec_tlu_dbg_halted) | i0_trigger_hit_r;
-   assign dec_tlu_i0_commit_cmt = tlu_i0_commit_cmt;
-
-
-   // refetch PC, microarch flush
-   // ic errors only in pipe0
-   assign rfpc_i0_r =  ((dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (exu_i0_br_error_r | exu_i0_br_start_error_r)) | // inst commit with rfpc
-                        ((ic_perr_r | iccm_sbecc_r) & ~ext_int_freeze_d1)) & // ic/iccm without inst commit
-                       ~i0_trigger_hit_r & // unless there's a trigger. Err signal to ic/iccm will assert anyway to clear the error.
-                       ~lsu_i0_rfnpc_r;
-
-   // From the indication of a iccm single bit error until the first commit or flush, maintain a repair state. In the repair state, rfnpc i0 commits.
-   assign iccm_repair_state_ns = iccm_sbecc_r | (iccm_repair_state_d1 & ~dec_tlu_flush_lower_r);
-
-
-   localparam MCPC          = 12'h7c2;
-
-   // this is a flush of last resort, meaning only assert it if there is no other flush happening.
-   assign iccm_repair_state_rfnpc = tlu_i0_commit_cmt & iccm_repair_state_d1 &
-                                    ~(ebreak_r | ecall_r | mret_r | take_reset | illegal_r | (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC)));
-
-if(pt.BTB_ENABLE==1) begin
-   // go ahead and repair the branch error on other flushes, doesn't have to be the rfpc flush
-   assign dec_tlu_br0_error_r = exu_i0_br_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_start_error_r = exu_i0_br_start_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_v_r = exu_i0_br_valid_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (~exu_i0_br_mp_r | ~exu_pmu_i0_br_ataken);
-
-
-   assign dec_tlu_br0_r_pkt.hist[1:0] = exu_i0_br_hist_r[1:0];
-   assign dec_tlu_br0_r_pkt.br_error = dec_tlu_br0_error_r;
-   assign dec_tlu_br0_r_pkt.br_start_error = dec_tlu_br0_start_error_r;
-   assign dec_tlu_br0_r_pkt.valid = dec_tlu_br0_v_r;
-   assign dec_tlu_br0_r_pkt.way = exu_i0_br_way_r;
-   assign dec_tlu_br0_r_pkt.middle = exu_i0_br_middle_r;
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign dec_tlu_br0_error_r = '0;
-   assign dec_tlu_br0_start_error_r = '0;
-   assign dec_tlu_br0_v_r = '0;
-   assign dec_tlu_br0_r_pkt  = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // only expect these in pipe 0
-   assign       ebreak_r     =  (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-   assign       ecall_r      =  (dec_tlu_packet_r.pmu_i0_itype == ECALL)   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       illegal_r    =  ~dec_tlu_packet_r.legal   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       mret_r       =  (dec_tlu_packet_r.pmu_i0_itype == MRET)    & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   // fence_i includes debug only fence_i's
-   assign       fence_i_r    =  (dec_tlu_packet_r.fence_i & dec_tlu_i0_valid_r & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-   assign       ic_perr_r    =  ifu_ic_error_start_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       iccm_sbecc_r =  ifu_iccm_rd_ecc_single_err_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       inst_acc_r_raw  =  dec_tlu_packet_r.icaf & dec_tlu_i0_valid_r;
-   assign       inst_acc_r = inst_acc_r_raw & ~rfpc_i0_r & ~i0_trigger_hit_r;
-   assign       inst_acc_second_r = dec_tlu_packet_r.icaf_second;
-
-   assign       ebreak_to_debug_mode_r = (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-
-   rvdff #(1)  exctype_wb_ff (.*, .clk(e4e5_clk),
-                                .din (ebreak_to_debug_mode_r   ),
-                                .dout(ebreak_to_debug_mode_r_d1));
-
-   assign dec_tlu_fence_i_r = fence_i_r;
-   //
-   // Exceptions
-   //
-   // - MEPC <- PC
-   // - PC <- MTVEC, assert flush_lower
-   // - MCAUSE <- cause
-   // - MSCAUSE <- secondary cause
-   // - MTVAL <-
-   // - MPIE <- MIE
-   // - MIE <- 0
-   //
-   assign i0_exception_valid_r = (ebreak_r | ecall_r | illegal_r | inst_acc_r) & ~rfpc_i0_r & ~dec_tlu_dbg_halted;
-
-   // Cause:
-   //
-   // 0x2 : illegal
-   // 0x3 : breakpoint
-   // 0xb : Environment call M-mode
-
-
-   assign exc_cause_r[4:0] =  ( ({5{take_ext_int}}        & 5'h0b) |
-                                ({5{take_timer_int}}      & 5'h07) |
-                                ({5{take_soft_int}}       & 5'h03) |
-                                ({5{take_int_timer0_int}} & 5'h1d) |
-                                ({5{take_int_timer1_int}} & 5'h1c) |
-                                ({5{take_ce_int}}         & 5'h1e) |
-                                ({5{illegal_r}}           & 5'h02) |
-                                ({5{ecall_r}}             & 5'h0b) |
-                                ({5{inst_acc_r}}          & 5'h01) |
-                                ({5{ebreak_r | i0_trigger_hit_r}}   & 5'h03) |
-                                ({5{lsu_exc_ma_r & ~lsu_exc_st_r}}  & 5'h04) |
-                                ({5{lsu_exc_acc_r & ~lsu_exc_st_r}} & 5'h05) |
-                                ({5{lsu_exc_ma_r & lsu_exc_st_r}}   & 5'h06) |
-                                ({5{lsu_exc_acc_r & lsu_exc_st_r}}  & 5'h07)
-                                ) & ~{5{take_nmi}};
-
-   //
-   // Interrupts
-   //
-   // exceptions that are committed have already happened and will cause an int at E4 to wait a cycle
-   // or more if MSTATUS[MIE] is cleared.
-   //
-   // -in priority order, highest to lowest
-   // -single cycle window where a csr write to MIE/MSTATUS is at E4 when the other conditions for externals are met.
-   //  Hold off externals for a cycle to make sure we are consistent with what was just written
-   assign mhwakeup_ready =  ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE];
-   assign ext_int_ready   = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE] & ~ignore_ext_int_due_to_lsu_stall;
-   assign ce_int_ready    = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MCEIP]  & mie_ns[MIE_MCEIE];
-   assign soft_int_ready  = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MSIP]   & mie_ns[MIE_MSIE];
-   assign timer_int_ready = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MTIP]   & mie_ns[MIE_MTIE];
-
-   // MIP for internal timers pulses for 1 clock, resets the timer counter. Mip won't hold past the various stall conditions.
-   assign int_timer0_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE0];
-   assign int_timer0_int_ready = mip[MIP_MITIP0] & int_timer0_int_possible;
-   assign int_timer1_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE1];
-   assign int_timer1_int_ready = mip[MIP_MITIP1] & int_timer1_int_possible;
-
-   // Internal timers pulse and reset. If core is PMU/FW halted, the pulse will cause an exit from halt, but won't stick around
-   // Make it sticky, also for 1 cycle stall conditions.
-   assign int_timer_stalled = dec_csr_stall_int_ff | synchronous_flush_r | exc_or_int_valid_r_d1 | mret_r;
-
-   assign int_timer0_int_hold = (int_timer0_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer0_int_possible & int_timer0_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-   assign int_timer1_int_hold = (int_timer1_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer1_int_possible & int_timer1_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-
-
-   assign internal_dbg_halt_timers = internal_dbg_halt_mode_f & ~dcsr_single_step_running;
-
-
-   assign block_interrupts = ( (internal_dbg_halt_mode & (~dcsr_single_step_running | dec_tlu_i0_valid_r)) | // No ints in db-halt unless we are single stepping
-                               internal_pmu_fw_halt_mode | i_cpu_halt_req_d1 |// No ints in PMU/FW halt. First we exit halt
-                               take_nmi | // NMI is top priority
-                               ebreak_to_debug_mode_r | // Heading to debug mode, hold off ints
-                               synchronous_flush_r | // exception flush this cycle
-                               exc_or_int_valid_r_d1 | // ext/int past cycle (need time for MIE to update)
-                               mret_r |    // mret in progress, for cases were ISR enables ints before mret
-                               ext_int_freeze_d1 // Fast interrupt in progress (optional)
-                               );
-
-
-if (pt.FAST_INTERRUPT_REDIRECT) begin
-
-
-   assign take_ext_int_start = ext_int_ready & ~block_interrupts;
-
-   assign ext_int_freeze = take_ext_int_start | take_ext_int_start_d1 | take_ext_int_start_d2 | take_ext_int_start_d3;
-   assign take_ext_int = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-   assign fast_int_meicpct = csr_meicpct & dec_csr_any_unq_d;  // MEICPCT becomes illegal if fast ints are enabled
-
-   assign ignore_ext_int_due_to_lsu_stall = lsu_fastint_stall_any;
-end
-else begin
-   assign take_ext_int_start = 1'b0;
-   assign ext_int_freeze = 1'b0;
-   assign ext_int_freeze_d1 = 1'b0;
-   assign take_ext_int_start_d1 = 1'b0;
-   assign take_ext_int_start_d2 = 1'b0;
-   assign take_ext_int_start_d3 = 1'b0;
-   assign fast_int_meicpct = 1'b0;
-   assign ignore_ext_int_due_to_lsu_stall = 1'b0;
-
-   assign take_ext_int = ext_int_ready & ~block_interrupts;
-end
-
-   assign take_ce_int  = ce_int_ready & ~ext_int_ready & ~block_interrupts;
-   assign take_soft_int = soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_timer_int = timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer0_int = (int_timer0_int_ready | int_timer0_int_hold_f) & int_timer0_int_possible & ~dec_csr_stall_int_ff &
-                                ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer1_int = (int_timer1_int_ready | int_timer1_int_hold_f) & int_timer1_int_possible & ~dec_csr_stall_int_ff &
-                                ~(int_timer0_int_ready | int_timer0_int_hold_f) & ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-
-   assign take_reset = reset_delayed & mpc_reset_run_req;
-   assign take_nmi = nmi_int_detected & ~internal_pmu_fw_halt_mode & (~internal_dbg_halt_mode | (dcsr_single_step_running_f & dcsr[DCSR_STEPIE] & ~dec_tlu_i0_valid_r & ~dcsr_single_step_done_f)) &
-                     ~synchronous_flush_r & ~mret_r & ~take_reset & ~ebreak_to_debug_mode_r & (~ext_int_freeze_d1 | (take_ext_int_start_d3 & |lsu_fir_error[1:0]));
-
-   assign interrupt_valid_r = take_ext_int | take_timer_int | take_soft_int | take_nmi | take_ce_int | take_int_timer0_int | take_int_timer1_int;
-
-
-   // Compute interrupt path:
-   // If vectored async is set in mtvec, flush path for interrupts is MTVEC + (4 * CAUSE);
-   assign vectored_path[31:1]  = {mtvec[30:1], 1'b0} + {25'b0, exc_cause_r[4:0], 1'b0};
-   assign interrupt_path[31:1] = take_nmi ? nmi_vec[31:1] : ((mtvec[0] == 1'b1) ? vectored_path[31:1] : {mtvec[30:1], 1'b0});
-
-   assign sel_npc_r  = lsu_i0_rfnpc_r | fence_i_r | iccm_repair_state_rfnpc | (i_cpu_run_req_d1 & ~interrupt_valid_r) | (rfpc_i0_r & ~dec_tlu_i0_valid_r);
-   assign sel_npc_resume = (i_cpu_run_req_d1 & pmu_fw_tlu_halted_f) | pause_expired_r;
-
-   assign sel_fir_addr = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-
-   assign synchronous_flush_r  = i0_exception_valid_r | // exception
-                                 rfpc_i0_r | // rfpc
-                                 lsu_exc_valid_r |  // lsu exception in either pipe 0 or pipe 1
-                                 fence_i_r |  // fence, a rfnpc
-                                 lsu_i0_rfnpc_r | // lsu dccm sb ecc
-                                 iccm_repair_state_rfnpc | // Iccm sb ecc
-                                 debug_resume_req_f | // resume from debug halt, fetch the dpc
-                                 sel_npc_resume |  // resume from pmu/fw halt, or from pause and fetch the NPC
-                                 dec_tlu_wr_pause_r_d1 | // flush at start of pause
-                                 i0_trigger_hit_r; // trigger hit, ebreak or goto debug mode
-
-   assign tlu_flush_lower_r = interrupt_valid_r | mret_r | synchronous_flush_r | take_halt | take_reset | take_ext_int_start;
-
-   assign tlu_flush_path_r[31:1] = take_reset ? rst_vec[31:1] :
-
-                                    ( ({31{sel_fir_addr}} & lsu_fir_addr[31:1]) |
-                                      ({31{~take_nmi & sel_npc_r}} & npc_r[31:1]) |
-                                      ({31{~take_nmi & rfpc_i0_r & dec_tlu_i0_valid_r & ~sel_npc_r}} & dec_tlu_i0_pc_r[31:1]) |
-                                      ({31{interrupt_valid_r & ~sel_fir_addr}} & interrupt_path[31:1]) |
-                                      ({31{(i0_exception_valid_r | lsu_exc_valid_r |
-                                            (i0_trigger_hit_r & ~trigger_hit_dmode_r)) & ~interrupt_valid_r & ~sel_fir_addr}} & {mtvec[30:1],1'b0}) |
-                                      ({31{~take_nmi & mret_r}} & mepc[31:1]) |
-                                      ({31{~take_nmi & debug_resume_req_f}} & dpc[31:1]) |
-                                      ({31{~take_nmi & sel_npc_resume}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  flush_lower_ff (.*, .en(tlu_flush_lower_r),
-                                 .din({tlu_flush_path_r[31:1]}),
-                                 .dout({tlu_flush_path_r_d1[31:1]}));
-
-   assign dec_tlu_flush_lower_wb = tlu_flush_lower_r_d1;
-   assign dec_tlu_flush_lower_r = tlu_flush_lower_r;
-   assign dec_tlu_flush_path_r[31:1] = tlu_flush_path_r[31:1];
-
-
-   // this is used to capture mepc, etc.
-   assign exc_or_int_valid_r = lsu_exc_valid_r | i0_exception_valid_r | interrupt_valid_r | (i0_trigger_hit_r & ~trigger_hit_dmode_r);
-
-
-   rvdffie #(12)  excinfo_wb_ff (.*,
-                                 .din({interrupt_valid_r, i0_exception_valid_r, exc_or_int_valid_r,
-                                       exc_cause_r[4:0], tlu_i0_commit_cmt & ~illegal_r, i0_trigger_hit_r,
-                                       take_nmi, pause_expired_r }),
-                                 .dout({interrupt_valid_r_d1, i0_exception_valid_r_d1, exc_or_int_valid_r_d1,
-                                        exc_cause_wb[4:0], i0_valid_wb, trigger_hit_r_d1,
-                                        take_nmi_r_d1, pause_expired_wb}));
-
-   //----------------------------------------------------------------------
-   //
-   // CSRs
-   //
-   //----------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // MISA (RO)
-   //  [31:30] XLEN - implementation width, 2'b01 - 32 bits
-   //  [12]    M    - integer mul/div
-   //  [8]     I    - RV32I
-   //  [2]     C    - Compressed extension
-   localparam MISA          = 12'h301;
-
-   // MVENDORID, MARCHID, MIMPID, MHARTID
-   localparam MVENDORID     = 12'hf11;
-   localparam MARCHID       = 12'hf12;
-   localparam MIMPID        = 12'hf13;
-   localparam MHARTID       = 12'hf14;
-
-
-   // ----------------------------------------------------------------------
-   // MSTATUS (RW)
-   // [12:11] MPP  : Prior priv level, always 2'b11, not flopped
-   // [7]     MPIE : Int enable previous [1]
-   // [3]     MIE  : Int enable          [0]
-   localparam MSTATUS       = 12'h300;
-
-
-   //When executing a MRET instruction, supposing MPP holds the value 3, MIE
-   //is set to MPIE; the privilege mode is changed to 3; MPIE is set to 1; and MPP is set to 3
-
-   assign dec_csr_wen_r_mod = dec_csr_wen_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign wr_mstatus_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSTATUS);
-
-   // set this even if we don't go to fwhalt due to debug halt. We committed the inst, so ...
-   assign set_mie_pmu_fw_halt = ~mpmc_b_ns[1] & fw_halt_req;
-
-   assign mstatus_ns[1:0] = ( ({2{~wr_mstatus_r & exc_or_int_valid_r}} & {mstatus[MSTATUS_MIE], 1'b0}) |
-                              ({2{ wr_mstatus_r & exc_or_int_valid_r}} & {dec_csr_wrdata_r[3], 1'b0}) |
-                              ({2{mret_r & ~exc_or_int_valid_r}} & {1'b1, mstatus[1]}) |
-                              ({2{set_mie_pmu_fw_halt}} & {mstatus[1], 1'b1}) |
-                              ({2{wr_mstatus_r & ~exc_or_int_valid_r}} & {dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]}) |
-                              ({2{~wr_mstatus_r & ~exc_or_int_valid_r & ~mret_r & ~set_mie_pmu_fw_halt}} & mstatus[1:0]) );
-
-   // gate MIE if we are single stepping and DCSR[STEPIE] is off
-   assign mstatus_mie_ns = mstatus[MSTATUS_MIE] & (~dcsr_single_step_running_f | dcsr[DCSR_STEPIE]);
-
-   // ----------------------------------------------------------------------
-   // MTVEC (RW)
-   // [31:2] BASE : Trap vector base address
-   // [1] - Reserved, not implemented, reads zero
-   // [0]  MODE : 0 = Direct, 1 = Asyncs are vectored to BASE + (4 * CAUSE)
-   localparam MTVEC         = 12'h305;
-
-   assign wr_mtvec_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVEC);
-   assign mtvec_ns[30:0] = {dec_csr_wrdata_r[31:2], dec_csr_wrdata_r[0]} ;
-   rvdffe #(31)  mtvec_ff (.*, .en(wr_mtvec_r), .din(mtvec_ns[30:0]), .dout(mtvec[30:0]));
-
-   // ----------------------------------------------------------------------
-   // MIP (RW)
-   //
-   // [30] MCEIP  : (RO) M-Mode Correctable Error interrupt pending
-   // [29] MITIP0 : (RO) M-Mode Internal Timer0 interrupt pending
-   // [28] MITIP1 : (RO) M-Mode Internal Timer1 interrupt pending
-   // [11] MEIP   : (RO) M-Mode external interrupt pending
-   // [7]  MTIP   : (RO) M-Mode timer interrupt pending
-   // [3]  MSIP   : (RO) M-Mode software interrupt pending
-   localparam MIP           = 12'h344;
-
-   assign ce_int = (mdccme_ce_req | miccme_ce_req | mice_ce_req);
-
-   assign mip_ns[5:0] = {ce_int, dec_timer_t0_pulse, dec_timer_t1_pulse, mexintpend, timer_int_sync, soft_int_sync};
-
-   // ----------------------------------------------------------------------
-   // MIE (RW)
-   // [30] MCEIE  : (RO) M-Mode Correctable Error interrupt enable
-   // [29] MITIE0 : (RO) M-Mode Internal Timer0 interrupt enable
-   // [28] MITIE1 : (RO) M-Mode Internal Timer1 interrupt enable
-   // [11] MEIE   : (RW) M-Mode external interrupt enable
-   // [7]  MTIE   : (RW) M-Mode timer interrupt enable
-   // [3]  MSIE   : (RW) M-Mode software interrupt enable
-   localparam MIE           = 12'h304;
-
-   assign wr_mie_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MIE);
-   assign mie_ns[5:0] = wr_mie_r ? {dec_csr_wrdata_r[30:28], dec_csr_wrdata_r[11], dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]} : mie[5:0];
-   rvdff #(6)  mie_ff (.*, .clk(csr_wr_clk), .din(mie_ns[5:0]), .dout(mie[5:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MCYCLEL (RW)
-   // [31:0] : Lower Cycle count
-
-   localparam MCYCLEL       = 12'hb00;
-
-   assign kill_ebreak_count_r = ebreak_to_debug_mode_r & dcsr[DCSR_STOPC];
-
-   assign wr_mcyclel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEL);
-
-   assign mcyclel_cout_in = ~(kill_ebreak_count_r | (dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted | mcountinhibit[0]);
-
-   // split for power
-   assign {mcyclela_cout, mcyclel_inc[7:0]}  = mcyclel[7:0] +  {7'b0, 1'b1};
-   assign {mcyclel_cout,  mcyclel_inc[31:8]} = mcyclel[31:8] + {23'b0, mcyclela_cout};
-
-   assign mcyclel_ns[31:0] = wr_mcyclel_r ? dec_csr_wrdata_r[31:0] : mcyclel_inc[31:0];
-
-   rvdffe #(24) mcyclel_bff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | (mcyclela_cout & mcyclel_cout_in)),    .din(mcyclel_ns[31:8]), .dout(mcyclel[31:8]));
-   rvdffe #(8)  mcyclel_aff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | mcyclel_cout_in),  .din(mcyclel_ns[7:0]),  .dout(mcyclel[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MCYCLEH (RW)
-   // [63:32] : Higher Cycle count
-   // Chained with mcyclel. Note: mcyclel overflow due to a mcycleh write gets ignored.
-
-   localparam MCYCLEH       = 12'hb80;
-
-   assign wr_mcycleh_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEH);
-
-   assign mcycleh_inc[31:0] = mcycleh[31:0] + {31'b0, mcyclel_cout_f};
-   assign mcycleh_ns[31:0]  = wr_mcycleh_r ? dec_csr_wrdata_r[31:0] : mcycleh_inc[31:0];
-
-   rvdffe #(32)  mcycleh_ff (.*, .clk(free_l2clk), .en(wr_mcycleh_r | mcyclel_cout_f), .din(mcycleh_ns[31:0]), .dout(mcycleh[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MINSTRETL (RW)
-   // [31:0] : Lower Instruction retired count
-   // From the spec "Some CSRs, such as the instructions retired counter, instret, may be modified as side effects
-   // of instruction execution. In these cases, if a CSR access instruction reads a CSR, it reads the
-   // value prior to the execution of the instruction. If a CSR access instruction writes a CSR, the
-   // update occurs after the execution of the instruction. In particular, a value written to instret by
-   // one instruction will be the value read by the following instruction (i.e., the increment of instret
-   // caused by the first instruction retiring happens before the write of the new value)."
-   localparam MINSTRETL     = 12'hb02;
-
-   assign i0_valid_no_ebreak_ecall_r = dec_tlu_i0_valid_r & ~(ebreak_r | ecall_r | ebreak_to_debug_mode_r | illegal_r | mcountinhibit[2]);
-
-   assign wr_minstretl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETL);
-
-   assign {minstretl_couta, minstretl_inc[7:0]} = minstretl[7:0] + {7'b0,1'b1};
-   assign {minstretl_cout, minstretl_inc[31:8]} = minstretl[31:8] + {23'b0, minstretl_couta};
-
-   assign minstret_enable = (i0_valid_no_ebreak_ecall_r & tlu_i0_commit_cmt) | wr_minstretl_r;
-
-   assign minstretl_cout_ns = minstretl_cout & ~wr_minstreth_r & i0_valid_no_ebreak_ecall_r & ~dec_tlu_dbg_halted;
-
-   assign minstretl_ns[31:0] = wr_minstretl_r ? dec_csr_wrdata_r[31:0] : minstretl_inc[31:0];
-   rvdffe #(24)  minstretl_bff (.*, .en(wr_minstretl_r | (minstretl_couta & minstret_enable)),
-                                .din(minstretl_ns[31:8]), .dout(minstretl[31:8]));
-   rvdffe #(8)   minstretl_aff (.*, .en(minstret_enable),
-                                .din(minstretl_ns[7:0]),  .dout(minstretl[7:0]));
-
-
-   assign minstretl_read[31:0] = minstretl[31:0];
-   // ----------------------------------------------------------------------
-   // MINSTRETH (RW)
-   // [63:32] : Higher Instret count
-   // Chained with minstretl. Note: minstretl overflow due to a minstreth write gets ignored.
-
-   localparam MINSTRETH     = 12'hb82;
-
-   assign wr_minstreth_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETH);
-
-   assign minstreth_inc[31:0] = minstreth[31:0] + {31'b0, minstretl_cout_f};
-   assign minstreth_ns[31:0]  = wr_minstreth_r ? dec_csr_wrdata_r[31:0] : minstreth_inc[31:0];
-   rvdffe #(32)  minstreth_ff (.*, .en((minstret_enable_f & minstretl_cout_f) | wr_minstreth_r), .din(minstreth_ns[31:0]), .dout(minstreth[31:0]));
-
-   assign minstreth_read[31:0] = minstreth_inc[31:0];
-
-   // ----------------------------------------------------------------------
-   // MSCRATCH (RW)
-   // [31:0] : Scratch register
-   localparam MSCRATCH      = 12'h340;
-
-   assign wr_mscratch_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCRATCH);
-
-   rvdffe #(32)  mscratch_ff (.*, .en(wr_mscratch_r), .din(dec_csr_wrdata_r[31:0]), .dout(mscratch[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MEPC (RW)
-   // [31:1] : Exception PC
-   localparam MEPC          = 12'h341;
-
-   // NPC
-
-   assign sel_exu_npc_r = ~dec_tlu_dbg_halted & ~tlu_flush_lower_r_d1 & dec_tlu_i0_valid_r;
-   assign sel_flush_npc_r = ~dec_tlu_dbg_halted & tlu_flush_lower_r_d1 & ~dec_tlu_flush_noredir_r_d1;
-   assign sel_hold_npc_r = ~sel_exu_npc_r & ~sel_flush_npc_r;
-
-   assign npc_r[31:1] =  ( ({31{sel_exu_npc_r}} & exu_npc_r[31:1]) |
-                           ({31{~mpc_reset_run_req & reset_delayed}} & rst_vec[31:1]) | // init to reset vector for mpc halt on reset case
-                           ({31{(sel_flush_npc_r)}} & tlu_flush_path_r_d1[31:1]) |
-                           ({31{(sel_hold_npc_r)}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  npwbc_ff (.*, .en(sel_exu_npc_r | sel_flush_npc_r | reset_delayed), .din(npc_r[31:1]), .dout(npc_r_d1[31:1]));
-
-   // PC has to be captured for exceptions and interrupts. For MRET, we could execute it and then take an
-   // interrupt before the next instruction.
-   assign pc0_valid_r = ~dec_tlu_dbg_halted & dec_tlu_i0_valid_r;
-
-   assign pc_r[31:1]  = ( ({31{ pc0_valid_r}} & dec_tlu_i0_pc_r[31:1]) |
-                          ({31{~pc0_valid_r}} & pc_r_d1[31:1]));
-
-   rvdffpcie #(31)  pwbc_ff (.*, .en(pc0_valid_r), .din(pc_r[31:1]), .dout(pc_r_d1[31:1]));
-
-   assign wr_mepc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEPC);
-
-   assign mepc_ns[31:1] = ( ({31{i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r}} & pc_r[31:1]) |
-                            ({31{interrupt_valid_r}} & npc_r[31:1]) |
-                            ({31{wr_mepc_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:1]) |
-                            ({31{~wr_mepc_r & ~exc_or_int_valid_r}} & mepc[31:1]) );
-
-
-   rvdffe #(31)  mepc_ff (.*, .en(i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r | interrupt_valid_r | wr_mepc_r), .din(mepc_ns[31:1]), .dout(mepc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // MCAUSE (RW)
-   // [31:0] : Exception Cause
-   localparam MCAUSE        = 12'h342;
-
-   assign wr_mcause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCAUSE);
-   assign mcause_sel_nmi_store = exc_or_int_valid_r & take_nmi & nmi_lsu_store_type;
-   assign mcause_sel_nmi_load = exc_or_int_valid_r & take_nmi & nmi_lsu_load_type;
-   assign mcause_sel_nmi_ext = exc_or_int_valid_r & take_nmi & take_ext_int_start_d3 & |lsu_fir_error[1:0] & ~nmi_int_detected_f;
-   // FIR value decoder
-   // 0 –no error
-   // 1 –uncorrectable ecc  => f000_1000
-   // 2 –dccm region access error => f000_1001
-   // 3 –non dccm region access error => f000_1002
-   assign mcause_fir_error_type[1:0] = {&lsu_fir_error[1:0], lsu_fir_error[1] & ~lsu_fir_error[0]};
-
-   assign mcause_ns[31:0] = ( ({32{mcause_sel_nmi_store}} & {32'hf000_0000}) |
-                              ({32{mcause_sel_nmi_load}} & {32'hf000_0001}) |
-                              ({32{mcause_sel_nmi_ext}} & {28'hf000_100, 2'b0, mcause_fir_error_type[1:0]}) |
-                              ({32{exc_or_int_valid_r & ~take_nmi}} & {interrupt_valid_r, 26'b0, exc_cause_r[4:0]}) |
-                              ({32{wr_mcause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                              ({32{~wr_mcause_r & ~exc_or_int_valid_r}} & mcause[31:0]) );
-
-   rvdffe #(32)  mcause_ff (.*, .en(exc_or_int_valid_r | wr_mcause_r), .din(mcause_ns[31:0]), .dout(mcause[31:0]));
-   // ----------------------------------------------------------------------
-   // MSCAUSE (RW)
-   // [2:0] : Secondary exception Cause
-   localparam MSCAUSE       = 12'h7ff;
-
-   assign wr_mscause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCAUSE);
-
-   assign ifu_mscause[3:0]  =  (dec_tlu_packet_r.icaf_type[1:0] == 2'b00) ? 4'b1001 :
-                               {2'b00 , dec_tlu_packet_r.icaf_type[1:0]} ;
-
-   assign mscause_type[3:0] = ( ({4{lsu_i0_exc_r}} & lsu_error_pkt_r.mscause[3:0]) |
-                                ({4{i0_trigger_hit_r}} & 4'b0001) |
-                                ({4{ebreak_r}} & 4'b0010) |
-                                ({4{inst_acc_r}} & ifu_mscause[3:0])
-                                );
-
-   assign mscause_ns[3:0] = ( ({4{exc_or_int_valid_r}} & mscause_type[3:0]) |
-                              ({4{ wr_mscause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[3:0]) |
-                              ({4{~wr_mscause_r & ~exc_or_int_valid_r}} & mscause[3:0])
-                             );
-
-   rvdff #(4)  mscause_ff (.*, .clk(e4e5_int_clk), .din(mscause_ns[3:0]), .dout(mscause[3:0]));
-   // ----------------------------------------------------------------------
-   // MTVAL (RW)
-   // [31:0] : Exception address if relevant
-   localparam MTVAL         = 12'h343;
-
-   assign wr_mtval_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVAL);
-   assign mtval_capture_pc_r = exc_or_int_valid_r & (ebreak_r | (inst_acc_r & ~inst_acc_second_r) | mepc_trigger_hit_sel_pc_r) & ~take_nmi;
-   assign mtval_capture_pc_plus2_r = exc_or_int_valid_r & (inst_acc_r & inst_acc_second_r) & ~take_nmi;
-   assign mtval_capture_inst_r = exc_or_int_valid_r & illegal_r & ~take_nmi;
-   assign mtval_capture_lsu_r = exc_or_int_valid_r & lsu_exc_valid_r & ~take_nmi;
-   assign mtval_clear_r = exc_or_int_valid_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_capture_lsu_r & ~mepc_trigger_hit_sel_pc_r;
-
-
-   assign mtval_ns[31:0] = (({32{mtval_capture_pc_r}} & {pc_r[31:1], 1'b0}) |
-                            ({32{mtval_capture_pc_plus2_r}} & {pc_r[31:1] + 31'b1, 1'b0}) |
-                            ({32{mtval_capture_inst_r}} & dec_illegal_inst[31:0]) |
-                            ({32{mtval_capture_lsu_r}} & lsu_error_pkt_addr_r[31:0]) |
-                            ({32{wr_mtval_r & ~interrupt_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                            ({32{~take_nmi & ~wr_mtval_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_clear_r & ~mtval_capture_lsu_r}} & mtval[31:0]) );
-
-
-   rvdffe #(32)  mtval_ff (.*, .en(tlu_flush_lower_r | wr_mtval_r), .din(mtval_ns[31:0]), .dout(mtval[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MCGC (RW) Clock gating control
-   // [31:10]: Reserved, reads 0x0
-   // [9]    : picio_clk_override
-   // [7]    : dec_clk_override
-   // [6]    : Unused
-   // [5]    : ifu_clk_override
-   // [4]    : lsu_clk_override
-   // [3]    : bus_clk_override
-   // [2]    : pic_clk_override
-   // [1]    : dccm_clk_override
-   // [0]    : icm_clk_override
-   //
-   localparam MCGC          = 12'h7f8;
-   assign wr_mcgc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCGC);
-
-   assign mcgc_ns[9:0] = wr_mcgc_r ? {~dec_csr_wrdata_r[9], dec_csr_wrdata_r[8:0]} : mcgc_int[9:0];
-   rvdffe #(10)  mcgc_ff (.*, .en(wr_mcgc_r), .din(mcgc_ns[9:0]), .dout(mcgc_int[9:0]));
-
-   assign mcgc[9:0] = {~mcgc_int[9], mcgc_int[8:0]};
-
-   assign dec_tlu_picio_clk_override= mcgc[9];
-   assign dec_tlu_misc_clk_override = mcgc[8];
-   assign dec_tlu_dec_clk_override  = mcgc[7];
-   //sign dec_tlu_exu_clk_override  = mcgc[6];
-   assign dec_tlu_ifu_clk_override  = mcgc[5];
-   assign dec_tlu_lsu_clk_override  = mcgc[4];
-   assign dec_tlu_bus_clk_override  = mcgc[3];
-   assign dec_tlu_pic_clk_override  = mcgc[2];
-   assign dec_tlu_dccm_clk_override = mcgc[1];
-   assign dec_tlu_icm_clk_override  = mcgc[0];
-
-   // ----------------------------------------------------------------------
-   // MFDC (RW) Feature Disable Control
-   // [31:19] : Reserved, reads 0x0
-   // [18:16] : DMA QoS Prty
-   // [15:13] : Reserved, reads 0x0
-   // [12]   : Disable trace
-   // [11]   : Disable external load forwarding
-   // [10]   : Disable dual issue
-   // [9]    : Disable pic multiple ints
-   // [8]    : Disable core ecc
-   // [7]    : Disable secondary alu?s
-   // [6]    : Unused, 0x0
-   // [5]    : Disable non-blocking loads/divides
-   // [4]    : Disable fast divide
-   // [3]    : Disable branch prediction and return stack
-   // [2]    : Disable write buffer coalescing
-   // [1]    : Disable load misses that bypass the write buffer
-   // [0]    : Disable pipelining - Enable single instruction execution
-   //
-   localparam MFDC          = 12'h7f9;
-
-   assign wr_mfdc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDC);
-
-   rvdffe #(16)  mfdc_ff (.*, .en(wr_mfdc_r), .din({mfdc_ns[15:0]}), .dout(mfdc_int[15:0]));
-
-   // flip poweron value of bit 6 for AXI build
-   if(pt.BUILD_AXI4==1) begin : axi4
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16], dec_csr_wrdata_r[12], dec_csr_wrdata_r[11:7], ~dec_csr_wrdata_r[6], dec_csr_wrdata_r[5:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12], mfdc_int[11:7], ~mfdc_int[6], mfdc_int[5:0]};
-   end
-   else begin
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16],dec_csr_wrdata_r[12:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12:0]};
-   end
-
-
-   assign dec_tlu_dma_qos_prty[2:0] = mfdc[18:16];
-   assign dec_tlu_trace_disable = mfdc[12];
-   assign dec_tlu_external_ldfwd_disable = mfdc[11];
-   assign dec_tlu_core_ecc_disable = 1'b1;//mfdc[8];
-   assign dec_tlu_sideeffect_posted_disable = mfdc[6];
-   assign dec_tlu_bpred_disable = mfdc[3];
-   assign dec_tlu_wb_coalescing_disable = mfdc[2];
-   assign dec_tlu_pipelining_disable = mfdc[0];
-
-   // ----------------------------------------------------------------------
-   // MCPC (RW) Pause counter
-   // [31:0] : Reads 0x0, decs in the wb register in decode_ctl
-
-   assign dec_tlu_wr_pause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC) & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MRAC (RW)
-   // [31:0] : Region Access Control Register, 16 regions, {side_effect, cachable} pairs
-   localparam MRAC          = 12'h7c0;
-
-   assign wr_mrac_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MRAC);
-
-   // prevent pairs of 0x11, side_effect and cacheable
-   assign mrac_in[31:0] = {dec_csr_wrdata_r[31], dec_csr_wrdata_r[30] & ~dec_csr_wrdata_r[31],
-                           dec_csr_wrdata_r[29], dec_csr_wrdata_r[28] & ~dec_csr_wrdata_r[29],
-                           dec_csr_wrdata_r[27], dec_csr_wrdata_r[26] & ~dec_csr_wrdata_r[27],
-                           dec_csr_wrdata_r[25], dec_csr_wrdata_r[24] & ~dec_csr_wrdata_r[25],
-                           dec_csr_wrdata_r[23], dec_csr_wrdata_r[22] & ~dec_csr_wrdata_r[23],
-                           dec_csr_wrdata_r[21], dec_csr_wrdata_r[20] & ~dec_csr_wrdata_r[21],
-                           dec_csr_wrdata_r[19], dec_csr_wrdata_r[18] & ~dec_csr_wrdata_r[19],
-                           dec_csr_wrdata_r[17], dec_csr_wrdata_r[16] & ~dec_csr_wrdata_r[17],
-                           dec_csr_wrdata_r[15], dec_csr_wrdata_r[14] & ~dec_csr_wrdata_r[15],
-                           dec_csr_wrdata_r[13], dec_csr_wrdata_r[12] & ~dec_csr_wrdata_r[13],
-                           dec_csr_wrdata_r[11], dec_csr_wrdata_r[10] & ~dec_csr_wrdata_r[11],
-                           dec_csr_wrdata_r[9], dec_csr_wrdata_r[8] & ~dec_csr_wrdata_r[9],
-                           dec_csr_wrdata_r[7], dec_csr_wrdata_r[6] & ~dec_csr_wrdata_r[7],
-                           dec_csr_wrdata_r[5], dec_csr_wrdata_r[4] & ~dec_csr_wrdata_r[5],
-                           dec_csr_wrdata_r[3], dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[3],
-                           dec_csr_wrdata_r[1], dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[1]};
-
-   rvdffe #(32)  mrac_ff (.*, .en(wr_mrac_r), .din(mrac_in[31:0]), .dout(mrac[31:0]));
-
-   // drive to LSU/IFU
-   assign dec_tlu_mrac_ff[31:0] = mrac[31:0];
-
-   // ----------------------------------------------------------------------
-   // MDEAU (WAR0)
-   // [31:0] : Dbus Error Address Unlock register
-   //
-   localparam MDEAU         = 12'hbc0;
-
-   assign wr_mdeau_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDEAU);
-
-
-   // ----------------------------------------------------------------------
-   // MDSEAC (R)
-   // [31:0] : Dbus Store Error Address Capture register
-   //
-   localparam MDSEAC        = 12'hfc0;
-
-   // only capture error bus if the MDSEAC reg is not locked
-   assign mdseac_locked_ns = mdseac_en | (mdseac_locked_f & ~wr_mdeau_r);
-
-   assign mdseac_en = (lsu_imprecise_error_store_any | lsu_imprecise_error_load_any) & ~nmi_int_detected_f & ~mdseac_locked_f;
-
-   rvdffe #(32)  mdseac_ff (.*, .en(mdseac_en), .din(lsu_imprecise_error_addr_any[31:0]), .dout(mdseac[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MPMC (R0W1)
-   // [0] : FW halt
-   // [1] : Set MSTATUS[MIE] on halt
-
-   localparam MPMC          = 12'h7c6;
-
-   assign wr_mpmc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MPMC);
-
-   // allow the cycle of the dbg halt flush that contains the wr_mpmc_r to
-   // set the mstatus bit potentially, use delayed version of internal dbg halt.
-   assign fw_halt_req = wr_mpmc_r & dec_csr_wrdata_r[0] & ~internal_dbg_halt_mode_f2 & ~ext_int_freeze_d1;
-
-   assign fw_halted_ns = (fw_halt_req | fw_halted) & ~set_mie_pmu_fw_halt;
-   assign mpmc_b_ns[1] = wr_mpmc_r ? ~dec_csr_wrdata_r[1] : ~mpmc[1];
-   rvdff #(1)  mpmc_ff (.*, .clk(csr_wr_clk), .din(mpmc_b_ns[1]), .dout(mpmc_b[1]));
-   assign mpmc[1] = ~mpmc_b[1];
-
-   // ----------------------------------------------------------------------
-   // MICECT (I-Cache error counter/threshold)
-   // [31:27] : Icache parity error threshold
-   // [26:0]  : Icache parity error count
-   localparam MICECT        = 12'h7f0;
-
-   assign csr_sat[31:27] = (dec_csr_wrdata_r[31:27] > 5'd26) ? 5'd26 : dec_csr_wrdata_r[31:27];
-
-   assign wr_micect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICECT);
-   assign micect_inc[26:0] = micect[26:0] + {26'b0, ic_perr_r};
-   assign micect_ns =  wr_micect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {micect[31:27], micect_inc[26:0]};
-
-   rvdffe #(32)  micect_ff (.*, .en(wr_micect_r | ic_perr_r), .din(micect_ns[31:0]), .dout(micect[31:0]));
-
-   assign mice_ce_req = |({32'hffffffff << micect[31:27]} & {5'b0, micect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MICCMECT (ICCM error counter/threshold)
-   // [31:27] : ICCM parity error threshold
-   // [26:0]  : ICCM parity error count
-   localparam MICCMECT      = 12'h7f1;
-
-   assign wr_miccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICCMECT);
-   assign miccmect_inc[26:0] = miccmect[26:0] + {26'b0, iccm_sbecc_r | iccm_dma_sb_error};
-   assign miccmect_ns        = wr_miccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {miccmect[31:27], miccmect_inc[26:0]};
-
-   rvdffe #(32)  miccmect_ff (.*, .clk(free_l2clk), .en(wr_miccmect_r | iccm_sbecc_r | iccm_dma_sb_error), .din(miccmect_ns[31:0]), .dout(miccmect[31:0]));
-
-   assign miccme_ce_req = |({32'hffffffff << miccmect[31:27]} & {5'b0, miccmect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MDCCMECT (DCCM error counter/threshold)
-   // [31:27] : DCCM parity error threshold
-   // [26:0]  : DCCM parity error count
-   localparam MDCCMECT      = 12'h7f2;
-
-   assign wr_mdccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDCCMECT);
-   assign mdccmect_inc[26:0] = mdccmect[26:0] + {26'b0, lsu_single_ecc_error_r_d1};
-   assign mdccmect_ns        = wr_mdccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {mdccmect[31:27], mdccmect_inc[26:0]};
-
-   rvdffe #(32)  mdccmect_ff (.*, .clk(free_l2clk), .en(wr_mdccmect_r | lsu_single_ecc_error_r_d1), .din(mdccmect_ns[31:0]), .dout(mdccmect[31:0]));
-
-   assign mdccme_ce_req = |({32'hffffffff << mdccmect[31:27]} & {5'b0, mdccmect[26:0]});
-
-
-   // ----------------------------------------------------------------------
-   // MFDHT (Force Debug Halt Threshold)
-   // [5:1] : Halt timeout threshold (power of 2)
-   //   [0] : Halt timeout enabled
-   localparam MFDHT         = 12'h7ce;
-
-   assign wr_mfdht_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHT);
-
-   assign mfdht_ns[5:0] = wr_mfdht_r ? dec_csr_wrdata_r[5:0] : mfdht[5:0];
-
-   rvdffs #(6)  mfdht_ff (.*, .clk(csr_wr_clk), .en(wr_mfdht_r), .din(mfdht_ns[5:0]), .dout(mfdht[5:0]));
-
-    // ----------------------------------------------------------------------
-   // MFDHS(RW)
-   // [1] : LSU operation pending when debug halt threshold reached
-   // [0] : IFU operation pending when debug halt threshold reached
-
-   localparam MFDHS         = 12'h7cf;
-
-   assign wr_mfdhs_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHS);
-
-   assign mfdhs_ns[1:0] = wr_mfdhs_r ? dec_csr_wrdata_r[1:0] : ((dbg_tlu_halted & ~dbg_tlu_halted_f) ? {~lsu_idle_any_f, ~ifu_miss_state_idle_f} : mfdhs[1:0]);
-
-   rvdffs #(2)  mfdhs_ff (.*, .clk(free_clk), .en(wr_mfdhs_r | dbg_tlu_halted), .din(mfdhs_ns[1:0]), .dout(mfdhs[1:0]));
-
-   assign force_halt_ctr[31:0] = debug_halt_req_f ? (force_halt_ctr_f[31:0] + 32'b1) : (dbg_tlu_halted_f ? 32'b0 : force_halt_ctr_f[31:0]);
-
-   rvdffe #(32)  forcehaltctr_ff (.*, .en(mfdht[0]), .din(force_halt_ctr[31:0]), .dout(force_halt_ctr_f[31:0]));
-
-   assign force_halt = mfdht[0] & |(force_halt_ctr_f[31:0] & (32'hffffffff << mfdht[5:1]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIVT (External Interrupt Vector Table (R/W))
-   // [31:10]: Base address (R/W)
-   // [9:0]  : Reserved, reads 0x0
-   localparam MEIVT         = 12'hbc8;
-
-   assign wr_meivt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIVT);
-
-   rvdffe #(22)  meivt_ff (.*, .en(wr_meivt_r), .din(dec_csr_wrdata_r[31:10]), .dout(meivt[31:10]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIHAP (External Interrupt Handler Access Pointer (R))
-   // [31:10]: Base address (R/W)
-   // [9:2]  : ClaimID (R)
-   // [1:0]  : Reserved, 0x0
-   localparam MEIHAP        = 12'hfc8;
-
-   assign wr_meihap_r = wr_meicpct_r;
-
-   rvdffe #(8)  meihap_ff (.*, .en(wr_meihap_r), .din(pic_claimid[7:0]), .dout(meihap[9:2]));
-
-   assign dec_tlu_meihap[31:2] = {meivt[31:10], meihap[9:2]};
-   // ----------------------------------------------------------------------
-   // MEICURPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : CURRPRI - Priority level of current interrupt service routine (R/W)
-   localparam MEICURPL      = 12'hbcc;
-
-   assign wr_meicurpl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICURPL);
-   assign meicurpl_ns[3:0] = wr_meicurpl_r ? dec_csr_wrdata_r[3:0] : meicurpl[3:0];
-
-   rvdff #(4)  meicurpl_ff (.*, .clk(csr_wr_clk), .din(meicurpl_ns[3:0]), .dout(meicurpl[3:0]));
-
-   // PIC needs this reg
-   assign dec_tlu_meicurpl[3:0] = meicurpl[3:0];
-
-
-   // ----------------------------------------------------------------------
-   // MEICIDPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : External Interrupt Claim ID's Priority Level Register
-   localparam MEICIDPL      = 12'hbcb;
-
-   assign wr_meicidpl_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICIDPL)) | take_ext_int_start;
-
-   assign meicidpl_ns[3:0] = wr_meicpct_r ? pic_pl[3:0] : (wr_meicidpl_r ? dec_csr_wrdata_r[3:0] : meicidpl[3:0]);
-
-
-   // ----------------------------------------------------------------------
-   // MEICPCT (Capture CLAIMID in MEIHAP and PL in MEICIDPL
-   // [31:1] : Reserved (read 0x0)
-   // [0]    : Capture (W1, Read 0)
-   localparam MEICPCT       = 12'hbca;
-
-   assign wr_meicpct_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICPCT)) | take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MEIPT (External Interrupt Priority Threshold)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : PRITHRESH
-   localparam MEIPT         = 12'hbc9;
-
-   assign wr_meipt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIPT);
-   assign meipt_ns[3:0] = wr_meipt_r ? dec_csr_wrdata_r[3:0] : meipt[3:0];
-
-   rvdff #(4)  meipt_ff (.*, .clk(csr_wr_clk), .din(meipt_ns[3:0]), .dout(meipt[3:0]));
-
-   // to PIC
-   assign dec_tlu_meipt[3:0] = meipt[3:0];
-   // ----------------------------------------------------------------------
-   // DCSR (R/W) (Only accessible in debug mode)
-   // [31:28] : xdebugver (hard coded to 0x4) RO
-   // [27:16] : 0x0, reserved
-   // [15]    : ebreakm
-   // [14]    : 0x0, reserved
-   // [13]    : ebreaks (0x0 for this core)
-   // [12]    : ebreaku (0x0 for this core)
-   // [11]    : stepie
-   // [10]    : stopcount
-   // [9]     : 0x0 //stoptime
-   // [8:6]   : cause (RO)
-   // [5:4]   : 0x0, reserved
-   // [3]     : nmip
-   // [2]     : step
-   // [1:0]   : prv (0x3 for this core)
-   //
-   localparam DCSR          = 12'h7b0;
-
-   // RV has clarified that 'priority 4' in the spec means top priority.
-   // 4. single step. 3. Debugger request. 2. Ebreak. 1. Trigger.
-
-   // RV debug spec indicates a cause priority change for trigger hits during single step.
-   assign trigger_hit_for_dscr_cause_r_d1 = trigger_hit_dmode_r_d1 | (trigger_hit_r_d1 & dcsr_single_step_done_f);
-
-   assign dcsr_cause[8:6] = ( ({3{dcsr_single_step_done_f & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1 & ~debug_halt_req}} & 3'b100) |
-                              ({3{debug_halt_req & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b011) |
-                              ({3{ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b001) |
-                              ({3{trigger_hit_for_dscr_cause_r_d1}} & 3'b010));
-
-   assign wr_dcsr_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DCSR);
-
-
-
-  // Multiple halt enter requests can happen before we are halted.
-  // We have to continue to upgrade based on dcsr_cause priority but we can't downgrade.
-   assign dcsr_cause_upgradeable = internal_dbg_halt_mode_f & (dcsr[8:6] == 3'b011);
-   assign enter_debug_halt_req_le = enter_debug_halt_req & (~dbg_tlu_halted | dcsr_cause_upgradeable);
-
-   assign nmi_in_debug_mode = nmi_int_detected_f & internal_dbg_halt_mode_f;
-   assign dcsr_ns[15:2] = enter_debug_halt_req_le ? {dcsr[15:9], dcsr_cause[8:6], dcsr[5:2]} :
-                          (wr_dcsr_r ? {dec_csr_wrdata_r[15], 3'b0, dec_csr_wrdata_r[11:10], 1'b0, dcsr[8:6], 2'b00, nmi_in_debug_mode | dcsr[3], dec_csr_wrdata_r[2]} :
-                           {dcsr[15:4], nmi_in_debug_mode, dcsr[2]});
-
-   rvdffe #(14)  dcsr_ff (.*, .clk(free_l2clk), .en(enter_debug_halt_req_le | wr_dcsr_r | internal_dbg_halt_mode | take_nmi), .din(dcsr_ns[15:2]), .dout(dcsr[15:2]));
-
-   // ----------------------------------------------------------------------
-   // DPC (R/W) (Only accessible in debug mode)
-   // [31:0] : Debug PC
-   localparam DPC           = 12'h7b1;
-
-   assign wr_dpc_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DPC);
-   assign dpc_capture_npc = dbg_tlu_halted & ~dbg_tlu_halted_f & ~request_debug_mode_done;
-   assign dpc_capture_pc = request_debug_mode_r;
-
-   assign dpc_ns[31:1] = ( ({31{~dpc_capture_pc & ~dpc_capture_npc & wr_dpc_r}} & dec_csr_wrdata_r[31:1]) |
-                           ({31{dpc_capture_pc}} & pc_r[31:1]) |
-                           ({31{~dpc_capture_pc & dpc_capture_npc}} & npc_r[31:1]) );
-
-   rvdffe #(31)  dpc_ff (.*, .en(wr_dpc_r | dpc_capture_pc | dpc_capture_npc), .din(dpc_ns[31:1]), .dout(dpc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // DICAWICS (R/W) (Only accessible in debug mode)
-   // [31:25] : Reserved
-   // [24]    : Array select, 0 is data, 1 is tag
-   // [23:22] : Reserved
-   // [21:20] : Way select
-   // [19:17] : Reserved
-   // [16:3]  : Index
-   // [2:0]   : Reserved
-   localparam DICAWICS      = 12'h7c8;
-
-   assign dicawics_ns[16:0] = {dec_csr_wrdata_r[24], dec_csr_wrdata_r[21:20], dec_csr_wrdata_r[16:3]};
-   assign wr_dicawics_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAWICS);
-
-   rvdffe #(17)  dicawics_ff (.*, .en(wr_dicawics_r), .din(dicawics_ns[16:0]), .dout(dicawics[16:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0 (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [31:0]  : inst data
-   //
-   // If dicawics[array] is 1
-   // [31:16] : Tag
-   // [15:7]  : Reserved
-   // [6:4]   : LRU
-   // [3:1]   : Reserved
-   // [0]     : Valid
-   localparam DICAD0        = 12'h7c9;
-
-   assign dicad0_ns[31:0] = wr_dicad0_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[31:0];
-
-   assign wr_dicad0_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0);
-
-   rvdffe #(32)  dicad0_ff (.*, .en(wr_dicad0_r | ifu_ic_debug_rd_data_valid), .din(dicad0_ns[31:0]), .dout(dicad0[31:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0H (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [63:32]  : inst data
-   //
-   localparam DICAD0H       = 12'h7cc;
-
-   assign dicad0h_ns[31:0] = wr_dicad0h_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[63:32];
-
-   assign wr_dicad0h_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0H);
-
-   rvdffe #(32)  dicad0h_ff (.*, .en(wr_dicad0h_r | ifu_ic_debug_rd_data_valid), .din(dicad0h_ns[31:0]), .dout(dicad0h[31:0]));
-
-
-if (pt.ICACHE_ECC == 1) begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [6:0]     : ECC
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[6:0] = wr_dicad1_r ? dec_csr_wrdata_r[6:0] : ifu_ic_debug_rd_data[70:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffe #(.WIDTH(7), .OVERRIDE(1))  dicad1_ff (.*, .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[6:0]), .dout(dicad1_raw[6:0]));
-
-   assign dicad1[31:0] = {25'b0, dicad1_raw[6:0]};
-
-end
-else begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [3:0]     : Parity
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[3:0] = wr_dicad1_r ? dec_csr_wrdata_r[3:0] : ifu_ic_debug_rd_data[67:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffs #(4)  dicad1_ff (.*, .clk(free_clk), .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[3:0]), .dout(dicad1_raw[3:0]));
-
-   assign dicad1[31:0] = {28'b0, dicad1_raw[3:0]};
-end
-   // ----------------------------------------------------------------------
-   // DICAGO (R/W) (Only accessible in debug mode)
-   // [0]     : Go
-   localparam DICAGO        = 12'h7cb;
-
-if (pt.ICACHE_ECC == 1)
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {      dicad1[6:0], dicad0h[31:0], dicad0[31:0]};
-else
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {3'b0, dicad1[3:0], dicad0h[31:0], dicad0[31:0]};
-
-
-   assign dec_tlu_ic_diag_pkt.icache_dicawics[16:0] = dicawics[16:0];
-
-   assign icache_rd_valid = allow_dbg_halt_csr_write & dec_csr_any_unq_d & dec_i0_decode_d & ~dec_csr_wen_unq_d & (dec_csr_rdaddr_d[11:0] == DICAGO);
-   assign icache_wr_valid = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAGO);
-
-
-   assign dec_tlu_ic_diag_pkt.icache_rd_valid = icache_rd_valid_f;
-   assign dec_tlu_ic_diag_pkt.icache_wr_valid = icache_wr_valid_f;
-
-   // ----------------------------------------------------------------------
-   // MTSEL (R/W)
-   // [1:0] : Trigger select : 00, 01, 10 are data/address triggers. 11 is inst count
-   localparam MTSEL         = 12'h7a0;
-
-   assign wr_mtsel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTSEL);
-   assign mtsel_ns[1:0] = wr_mtsel_r ? {dec_csr_wrdata_r[1:0]} : mtsel[1:0];
-
-   rvdff #(2)  mtsel_ff (.*, .clk(csr_wr_clk), .din(mtsel_ns[1:0]), .dout(mtsel[1:0]));
-
-   // ----------------------------------------------------------------------
-   // MTDATA1 (R/W)
-   // [31:0] : Trigger Data 1
-   localparam MTDATA1       = 12'h7a1;
-
-   // for triggers 0, 1, 2 and 3 aka Match Control
-   // [31:28] : type, hard coded to 0x2
-   // [27]    : dmode
-   // [26:21] : hard coded to 0x1f
-   // [20]    : hit
-   // [19]    : select (0 - address, 1 - data)
-   // [18]    : timing, always 'before', reads 0x0
-   // [17:12] : action, bits  [17:13] not implemented and reads 0x0
-   // [11]    : chain
-   // [10:7]  : match, bits [10:8] not implemented and reads 0x0
-   // [6]     : M
-   // [5:3]   : not implemented, reads 0x0
-   // [2]     : execute
-   // [1]     : store
-   // [0]     : load
-   //
-   // decoder ring
-   // [27]    : => 9
-   // [20]    : => 8
-   // [19]    : => 7
-   // [12]    : => 6
-   // [11]    : => 5
-   // [7]     : => 4
-   // [6]     : => 3
-   // [2]     : => 2
-   // [1]     : => 1
-   // [0]     : => 0
-
-
-   // don't allow setting load-data.
-   assign tdata_load = dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[19];
-   // don't allow setting execute-data.
-   assign tdata_opcode = dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[19];
-   // don't allow clearing DMODE and action=1
-   assign tdata_action = (dec_csr_wrdata_r[27] & dbg_tlu_halted_f) & dec_csr_wrdata_r[12];
-
-   // Chain bit has conditions: WARL for triggers without chains. Force to zero if dmode is 0 but next trigger dmode is 1.
-   assign tdata_chain = mtsel[0] ? 1'b0 : // triggers 1 and 3 chain bit is always zero
-                        mtsel[1] ?  dec_csr_wrdata_r[11] & ~(mtdata1_t3[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]) : // trigger 2
-                                    dec_csr_wrdata_r[11] & ~(mtdata1_t1[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]);  // trigger 0
-
-   // Kill mtdata1 write if dmode=1 but prior trigger has dmode=0/chain=1. Only applies to T1 and T3
-   assign tdata_kill_write = mtsel[1] ? dec_csr_wrdata_r[27] & (~mtdata1_t2[MTDATA1_DMODE] & mtdata1_t2[MTDATA1_CHAIN]) : // trigger 3
-                                        dec_csr_wrdata_r[27] & (~mtdata1_t0[MTDATA1_DMODE] & mtdata1_t0[MTDATA1_CHAIN]) ; // trigger 1
-
-
-   assign tdata_wrdata_r[9:0]  = {dec_csr_wrdata_r[27] & dbg_tlu_halted_f,
-                                   dec_csr_wrdata_r[20:19],
-                                   tdata_action,
-                                   tdata_chain,
-                                   dec_csr_wrdata_r[7:6],
-                                   tdata_opcode,
-                                   dec_csr_wrdata_r[1],
-                                   tdata_load};
-
-   // If the DMODE bit is set, tdata1 can only be updated in debug_mode
-   assign wr_mtdata1_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b0) & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t0_ns[9:0] = wr_mtdata1_t0_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t0[9], update_hit_bit_r[0] | mtdata1_t0[8], mtdata1_t0[7:0]};
-
-   assign wr_mtdata1_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t1_ns[9:0] = wr_mtdata1_t1_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t1[9], update_hit_bit_r[1] | mtdata1_t1[8], mtdata1_t1[7:0]};
-
-   assign wr_mtdata1_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t2_ns[9:0] = wr_mtdata1_t2_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t2[9], update_hit_bit_r[2] | mtdata1_t2[8], mtdata1_t2[7:0]};
-
-   assign wr_mtdata1_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t3_ns[9:0] = wr_mtdata1_t3_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t3[9], update_hit_bit_r[3] | mtdata1_t3[8], mtdata1_t3[7:0]};
-
-
-   rvdffe #(10)  mtdata1_t0_ff (.*, .en(trigger_enabled[0] | wr_mtdata1_t0_r), .din(mtdata1_t0_ns[9:0]), .dout(mtdata1_t0[9:0]));
-   rvdffe #(10)  mtdata1_t1_ff (.*, .en(trigger_enabled[1] | wr_mtdata1_t1_r), .din(mtdata1_t1_ns[9:0]), .dout(mtdata1_t1[9:0]));
-   rvdffe #(10)  mtdata1_t2_ff (.*, .en(trigger_enabled[2] | wr_mtdata1_t2_r), .din(mtdata1_t2_ns[9:0]), .dout(mtdata1_t2[9:0]));
-   rvdffe #(10)  mtdata1_t3_ff (.*, .en(trigger_enabled[3] | wr_mtdata1_t3_r), .din(mtdata1_t3_ns[9:0]), .dout(mtdata1_t3[9:0]));
-
-   assign mtdata1_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & {4'h2, mtdata1_t0[9], 6'b011111, mtdata1_t0[8:7], 6'b0, mtdata1_t0[6:5], 3'b0, mtdata1_t0[4:3], 3'b0, mtdata1_t0[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & {4'h2, mtdata1_t1[9], 6'b011111, mtdata1_t1[8:7], 6'b0, mtdata1_t1[6:5], 3'b0, mtdata1_t1[4:3], 3'b0, mtdata1_t1[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & {4'h2, mtdata1_t2[9], 6'b011111, mtdata1_t2[8:7], 6'b0, mtdata1_t2[6:5], 3'b0, mtdata1_t2[4:3], 3'b0, mtdata1_t2[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & {4'h2, mtdata1_t3[9], 6'b011111, mtdata1_t3[8:7], 6'b0, mtdata1_t3[6:5], 3'b0, mtdata1_t3[4:3], 3'b0, mtdata1_t3[2:0]}));
-
-   assign trigger_pkt_any[0].select = mtdata1_t0[MTDATA1_SEL];
-   assign trigger_pkt_any[0].match = mtdata1_t0[MTDATA1_MATCH];
-   assign trigger_pkt_any[0].store = mtdata1_t0[MTDATA1_ST];
-   assign trigger_pkt_any[0].load = mtdata1_t0[MTDATA1_LD];
-   assign trigger_pkt_any[0].execute = mtdata1_t0[MTDATA1_EXE];
-   assign trigger_pkt_any[0].m = mtdata1_t0[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[1].select = mtdata1_t1[MTDATA1_SEL];
-   assign trigger_pkt_any[1].match = mtdata1_t1[MTDATA1_MATCH];
-   assign trigger_pkt_any[1].store = mtdata1_t1[MTDATA1_ST];
-   assign trigger_pkt_any[1].load = mtdata1_t1[MTDATA1_LD];
-   assign trigger_pkt_any[1].execute = mtdata1_t1[MTDATA1_EXE];
-   assign trigger_pkt_any[1].m = mtdata1_t1[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[2].select = mtdata1_t2[MTDATA1_SEL];
-   assign trigger_pkt_any[2].match = mtdata1_t2[MTDATA1_MATCH];
-   assign trigger_pkt_any[2].store = mtdata1_t2[MTDATA1_ST];
-   assign trigger_pkt_any[2].load = mtdata1_t2[MTDATA1_LD];
-   assign trigger_pkt_any[2].execute = mtdata1_t2[MTDATA1_EXE];
-   assign trigger_pkt_any[2].m = mtdata1_t2[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[3].select = mtdata1_t3[MTDATA1_SEL];
-   assign trigger_pkt_any[3].match = mtdata1_t3[MTDATA1_MATCH];
-   assign trigger_pkt_any[3].store = mtdata1_t3[MTDATA1_ST];
-   assign trigger_pkt_any[3].load = mtdata1_t3[MTDATA1_LD];
-   assign trigger_pkt_any[3].execute = mtdata1_t3[MTDATA1_EXE];
-   assign trigger_pkt_any[3].m = mtdata1_t3[MTDATA1_M_ENABLED];
-
-
-
-
-
-   // ----------------------------------------------------------------------
-   // MTDATA2 (R/W)
-   // [31:0] : Trigger Data 2
-   localparam MTDATA2       = 12'h7a2;
-
-   // If the DMODE bit is set, tdata2 can only be updated in debug_mode
-   assign wr_mtdata2_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b0)  & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f);
-
-   rvdffe #(32)  mtdata2_t0_ff (.*, .en(wr_mtdata2_t0_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t0[31:0]));
-   rvdffe #(32)  mtdata2_t1_ff (.*, .en(wr_mtdata2_t1_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t1[31:0]));
-   rvdffe #(32)  mtdata2_t2_ff (.*, .en(wr_mtdata2_t2_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t2[31:0]));
-   rvdffe #(32)  mtdata2_t3_ff (.*, .en(wr_mtdata2_t3_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t3[31:0]));
-
-   assign mtdata2_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & mtdata2_t0[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & mtdata2_t1[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & mtdata2_t2[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & mtdata2_t3[31:0]));
-
-   assign trigger_pkt_any[0].tdata2[31:0] = mtdata2_t0[31:0];
-   assign trigger_pkt_any[1].tdata2[31:0] = mtdata2_t1[31:0];
-   assign trigger_pkt_any[2].tdata2[31:0] = mtdata2_t2[31:0];
-   assign trigger_pkt_any[3].tdata2[31:0] = mtdata2_t3[31:0];
-
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section starts
-   //----------------------------------------------------------------------
-   localparam MHPME_NOEVENT             = 10'd0;
-   localparam MHPME_CLK_ACTIVE          = 10'd1; // OOP - out of pipe
-   localparam MHPME_ICACHE_HIT          = 10'd2; // OOP
-   localparam MHPME_ICACHE_MISS         = 10'd3; // OOP
-   localparam MHPME_INST_COMMIT         = 10'd4;
-   localparam MHPME_INST_COMMIT_16B     = 10'd5;
-   localparam MHPME_INST_COMMIT_32B     = 10'd6;
-   localparam MHPME_INST_ALIGNED        = 10'd7; // OOP
-   localparam MHPME_INST_DECODED        = 10'd8; // OOP
-   localparam MHPME_INST_MUL            = 10'd9;
-   localparam MHPME_INST_DIV            = 10'd10;
-   localparam MHPME_INST_LOAD           = 10'd11;
-   localparam MHPME_INST_STORE          = 10'd12;
-   localparam MHPME_INST_MALOAD         = 10'd13;
-   localparam MHPME_INST_MASTORE        = 10'd14;
-   localparam MHPME_INST_ALU            = 10'd15;
-   localparam MHPME_INST_CSRREAD        = 10'd16;
-   localparam MHPME_INST_CSRRW          = 10'd17;
-   localparam MHPME_INST_CSRWRITE       = 10'd18;
-   localparam MHPME_INST_EBREAK         = 10'd19;
-   localparam MHPME_INST_ECALL          = 10'd20;
-   localparam MHPME_INST_FENCE          = 10'd21;
-   localparam MHPME_INST_FENCEI         = 10'd22;
-   localparam MHPME_INST_MRET           = 10'd23;
-   localparam MHPME_INST_BRANCH         = 10'd24;
-   localparam MHPME_BRANCH_MP           = 10'd25;
-   localparam MHPME_BRANCH_TAKEN        = 10'd26;
-   localparam MHPME_BRANCH_NOTP         = 10'd27;
-   localparam MHPME_FETCH_STALL         = 10'd28; // OOP
-   localparam MHPME_DECODE_STALL        = 10'd30; // OOP
-   localparam MHPME_POSTSYNC_STALL      = 10'd31; // OOP
-   localparam MHPME_PRESYNC_STALL       = 10'd32; // OOP
-   localparam MHPME_LSU_SB_WB_STALL     = 10'd34; // OOP
-   localparam MHPME_DMA_DCCM_STALL      = 10'd35; // OOP
-   localparam MHPME_DMA_ICCM_STALL      = 10'd36; // OOP
-   localparam MHPME_EXC_TAKEN           = 10'd37;
-   localparam MHPME_TIMER_INT_TAKEN     = 10'd38;
-   localparam MHPME_EXT_INT_TAKEN       = 10'd39;
-   localparam MHPME_FLUSH_LOWER         = 10'd40;
-   localparam MHPME_BR_ERROR            = 10'd41;
-   localparam MHPME_IBUS_TRANS          = 10'd42; // OOP
-   localparam MHPME_DBUS_TRANS          = 10'd43; // OOP
-   localparam MHPME_DBUS_MA_TRANS       = 10'd44; // OOP
-   localparam MHPME_IBUS_ERROR          = 10'd45; // OOP
-   localparam MHPME_DBUS_ERROR          = 10'd46; // OOP
-   localparam MHPME_IBUS_STALL          = 10'd47; // OOP
-   localparam MHPME_DBUS_STALL          = 10'd48; // OOP
-   localparam MHPME_INT_DISABLED        = 10'd49; // OOP
-   localparam MHPME_INT_STALLED         = 10'd50; // OOP
-   localparam MHPME_INST_BITMANIP       = 10'd54;
-   localparam MHPME_DBUS_LOAD           = 10'd55;
-   localparam MHPME_DBUS_STORE          = 10'd56;
-   // Counts even during sleep state
-   localparam MHPME_SLEEP_CYC           = 10'd512; // OOP
-   localparam MHPME_DMA_READ_ALL        = 10'd513; // OOP
-   localparam MHPME_DMA_WRITE_ALL       = 10'd514; // OOP
-   localparam MHPME_DMA_READ_DCCM       = 10'd515; // OOP
-   localparam MHPME_DMA_WRITE_DCCM      = 10'd516; // OOP
-
-   // Pack the event selects into a vector for genvar
-   assign mhpme_vec[0][9:0] = mhpme3[9:0];
-   assign mhpme_vec[1][9:0] = mhpme4[9:0];
-   assign mhpme_vec[2][9:0] = mhpme5[9:0];
-   assign mhpme_vec[3][9:0] = mhpme6[9:0];
-
-   // only consider committed itypes
-   //logic [3:0] pmu_i0_itype_qual;
-   assign pmu_i0_itype_qual[3:0] = dec_tlu_packet_r.pmu_i0_itype[3:0] & {4{tlu_i0_commit_cmt}};
-
-   // Generate the muxed incs for all counters based on event type
-   for (genvar i=0 ; i < 4; i++) begin
-      assign mhpmc_inc_r[i] =  {{~mcountinhibit[i+3]}} &
-           (
-             ({1{(mhpme_vec[i][9:0] == MHPME_CLK_ACTIVE      )}} & 1'b1) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_HIT      )}} & {ifu_pmu_ic_hit}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_MISS     )}} & {ifu_pmu_ic_miss}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT     )}} & {tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_16B )}} & {tlu_i0_commit_cmt & ~exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_32B )}} & {tlu_i0_commit_cmt &  exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALIGNED    )}} & ifu_pmu_instr_aligned)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DECODED    )}} & dec_pmu_instr_decoded)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & {dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MUL        )}} & {(pmu_i0_itype_qual == MUL)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DIV        )}} & {dec_tlu_packet_r.pmu_divide  & tlu_i0_commit_cmt & ~illegal_r})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_LOAD       )}} & {(pmu_i0_itype_qual == LOAD)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_STORE      )}} & {(pmu_i0_itype_qual == STORE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MALOAD     )}} & {(pmu_i0_itype_qual == LOAD)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MASTORE    )}} & {(pmu_i0_itype_qual == STORE)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALU        )}} & {(pmu_i0_itype_qual == ALU)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRREAD    )}} & {(pmu_i0_itype_qual == CSRREAD)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRWRITE   )}} & {(pmu_i0_itype_qual == CSRWRITE)})|
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRRW      )}} & {(pmu_i0_itype_qual == CSRRW)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_EBREAK     )}} & {(pmu_i0_itype_qual == EBREAK)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ECALL      )}} & {(pmu_i0_itype_qual == ECALL)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCE      )}} & {(pmu_i0_itype_qual == FENCE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCEI     )}} & {(pmu_i0_itype_qual == FENCEI)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MRET       )}} & {(pmu_i0_itype_qual == MRET)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BRANCH     )}} & {
-                                                                     ((pmu_i0_itype_qual == CONDBR) | (pmu_i0_itype_qual == JAL))})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_MP       )}} & {exu_pmu_i0_br_misp & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_TAKEN    )}} & {exu_pmu_i0_br_ataken & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_NOTP     )}} & {dec_tlu_packet_r.pmu_i0_br_unpred & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FETCH_STALL     )}} & { ifu_pmu_fetch_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & { dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_POSTSYNC_STALL  )}} & {dec_pmu_postsync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_PRESYNC_STALL   )}} & {dec_pmu_presync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_LSU_SB_WB_STALL )}} & { lsu_store_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_DCCM_STALL  )}} & { dma_dccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_ICCM_STALL  )}} & { dma_iccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXC_TAKEN       )}} & { (i0_exception_valid_r | i0_trigger_hit_r | lsu_exc_valid_r)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_TIMER_INT_TAKEN )}} & { take_timer_int | take_int_timer0_int | take_int_timer1_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXT_INT_TAKEN   )}} & { take_ext_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FLUSH_LOWER     )}} & { tlu_flush_lower_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BR_ERROR        )}} & {(dec_tlu_br0_error_r | dec_tlu_br0_start_error_r) & rfpc_i0_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_TRANS      )}} & {ifu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_TRANS      )}} & {lsu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_MA_TRANS   )}} & {lsu_pmu_bus_misaligned}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_ERROR      )}} & {ifu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_ERROR      )}} & {lsu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_STALL      )}} & {ifu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STALL      )}} & {lsu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_DISABLED    )}} & {~mstatus[MSTATUS_MIE]}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_STALLED     )}} & {~mstatus[MSTATUS_MIE] & |(mip[5:0] & mie[5:0])}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BITMANIP     )}} & {(pmu_i0_itype_qual == BITMANIPU)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_LOAD       )}} & {tlu_i0_commit_cmt & lsu_pmu_load_external_r & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STORE      )}} & {tlu_i0_commit_cmt & lsu_pmu_store_external_r & ~illegal_r}) |
-             // These count even during sleep
-             ({1{(mhpme_vec[i][9:0] == MHPME_SLEEP_CYC       )}} & {dec_tlu_pmu_fw_halted}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_ALL    )}} & {dma_pmu_any_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_ALL   )}} & {dma_pmu_any_write}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_DCCM   )}} & {dma_pmu_dccm_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_DCCM  )}} & {dma_pmu_dccm_write})
-             );
-   end
-
-
-   if(pt.FAST_INTERRUPT_REDIRECT)
-   rvdffie #(31)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   take_ext_int_start,    take_ext_int_start_d1, take_ext_int_start_d2, ext_int_freeze,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    take_ext_int_start_d1, take_ext_int_start_d2, take_ext_int_start_d3, ext_int_freeze_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   else
-   rvdffie #(27)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   assign perfcnt_halted = ((dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted);
-   assign perfcnt_during_sleep[3:0] = {4{~(dec_tlu_dbg_halted & dcsr[DCSR_STOPC])}} & {mhpme_vec[3][9],mhpme_vec[2][9],mhpme_vec[1][9],mhpme_vec[0][9]};
-
-   assign dec_tlu_perfcnt0 = mhpmc_inc_r_d1[0] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[0]);
-   assign dec_tlu_perfcnt1 = mhpmc_inc_r_d1[1] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[1]);
-   assign dec_tlu_perfcnt2 = mhpmc_inc_r_d1[2] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[2]);
-   assign dec_tlu_perfcnt3 = mhpmc_inc_r_d1[3] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[3]);
-
-   // ----------------------------------------------------------------------
-   // MHPMC3H(RW), MHPMC3(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 3
-   localparam MHPMC3        = 12'hB03;
-   localparam MHPMC3H       = 12'hB83;
-
-   assign mhpmc3_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3);
-   assign mhpmc3_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[0]) & (|(mhpmc_inc_r[0]));
-   assign mhpmc3_wr_en  = mhpmc3_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3_incr[63:0] = {mhpmc3h[31:0],mhpmc3[31:0]} + {63'b0, 1'b1};
-   assign mhpmc3_ns[31:0] = mhpmc3_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[31:0];
-   rvdffe #(32)  mhpmc3_ff (.*, .clk(free_l2clk), .en(mhpmc3_wr_en), .din(mhpmc3_ns[31:0]), .dout(mhpmc3[31:0]));
-
-   assign mhpmc3h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3H);
-   assign mhpmc3h_wr_en  = mhpmc3h_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3h_ns[31:0] = mhpmc3h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[63:32];
-   rvdffe #(32)  mhpmc3h_ff (.*, .clk(free_l2clk), .en(mhpmc3h_wr_en), .din(mhpmc3h_ns[31:0]), .dout(mhpmc3h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC4H(RW), MHPMC4(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 4
-   localparam MHPMC4        = 12'hB04;
-   localparam MHPMC4H       = 12'hB84;
-
-   assign mhpmc4_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4);
-   assign mhpmc4_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[1]) & (|(mhpmc_inc_r[1]));
-   assign mhpmc4_wr_en  = mhpmc4_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4_incr[63:0] = {mhpmc4h[31:0],mhpmc4[31:0]} + {63'b0,1'b1};
-   assign mhpmc4_ns[31:0] = mhpmc4_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[31:0];
-   rvdffe #(32)  mhpmc4_ff (.*, .clk(free_l2clk), .en(mhpmc4_wr_en), .din(mhpmc4_ns[31:0]), .dout(mhpmc4[31:0]));
-
-   assign mhpmc4h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4H);
-   assign mhpmc4h_wr_en  = mhpmc4h_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4h_ns[31:0] = mhpmc4h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[63:32];
-   rvdffe #(32)  mhpmc4h_ff (.*, .clk(free_l2clk), .en(mhpmc4h_wr_en), .din(mhpmc4h_ns[31:0]), .dout(mhpmc4h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC5H(RW), MHPMC5(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 5
-   localparam MHPMC5        = 12'hB05;
-   localparam MHPMC5H       = 12'hB85;
-
-   assign mhpmc5_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5);
-   assign mhpmc5_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[2]) & (|(mhpmc_inc_r[2]));
-   assign mhpmc5_wr_en  = mhpmc5_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5_incr[63:0] = {mhpmc5h[31:0],mhpmc5[31:0]} + {63'b0,1'b1};
-   assign mhpmc5_ns[31:0] = mhpmc5_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[31:0];
-   rvdffe #(32)  mhpmc5_ff (.*, .clk(free_l2clk), .en(mhpmc5_wr_en), .din(mhpmc5_ns[31:0]), .dout(mhpmc5[31:0]));
-
-   assign mhpmc5h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5H);
-   assign mhpmc5h_wr_en  = mhpmc5h_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5h_ns[31:0] = mhpmc5h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[63:32];
-   rvdffe #(32)  mhpmc5h_ff (.*, .clk(free_l2clk), .en(mhpmc5h_wr_en), .din(mhpmc5h_ns[31:0]), .dout(mhpmc5h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC6H(RW), MHPMC6(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 6
-   localparam MHPMC6        = 12'hB06;
-   localparam MHPMC6H       = 12'hB86;
-
-   assign mhpmc6_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6);
-   assign mhpmc6_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[3]) & (|(mhpmc_inc_r[3]));
-   assign mhpmc6_wr_en  = mhpmc6_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6_incr[63:0] = {mhpmc6h[31:0],mhpmc6[31:0]} + {63'b0,1'b1};
-   assign mhpmc6_ns[31:0] = mhpmc6_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[31:0];
-   rvdffe #(32)  mhpmc6_ff (.*, .clk(free_l2clk), .en(mhpmc6_wr_en), .din(mhpmc6_ns[31:0]), .dout(mhpmc6[31:0]));
-
-   assign mhpmc6h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6H);
-   assign mhpmc6h_wr_en  = mhpmc6h_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6h_ns[31:0] = mhpmc6h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[63:32];
-   rvdffe #(32)  mhpmc6h_ff (.*, .clk(free_l2clk), .en(mhpmc6h_wr_en), .din(mhpmc6h_ns[31:0]), .dout(mhpmc6h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPME3(RW)
-   // [9:0] : Hardware Performance Monitor Event 3
-   localparam MHPME3        = 12'h323;
-
-   // we only have events 0-56 with holes, 512-516, HPME* are WARL so zero otherwise.
-   assign zero_event_r = ( (dec_csr_wrdata_r[9:0] > 10'd516) |
-                           (|dec_csr_wrdata_r[31:10]) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd512) & (dec_csr_wrdata_r[9:0] > 10'd56)) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd54) & (dec_csr_wrdata_r[9:0] > 10'd50)) |
-                           (dec_csr_wrdata_r[9:0] == 10'd29) |
-                           (dec_csr_wrdata_r[9:0] == 10'd33)
-                           );
-
-   assign event_r[9:0] = zero_event_r ? '0 : dec_csr_wrdata_r[9:0];
-
-   assign wr_mhpme3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME3);
-   rvdffe #(10)  mhpme3_ff (.*, .en(wr_mhpme3_r), .din(event_r[9:0]), .dout(mhpme3[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME4(RW)
-   // [9:0] : Hardware Performance Monitor Event 4
-   localparam MHPME4        = 12'h324;
-
-   assign wr_mhpme4_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME4);
-   rvdffe #(10)  mhpme4_ff (.*, .en(wr_mhpme4_r), .din(event_r[9:0]), .dout(mhpme4[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME5(RW)
-   // [9:0] : Hardware Performance Monitor Event 5
-   localparam MHPME5        = 12'h325;
-
-   assign wr_mhpme5_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME5);
-   rvdffe #(10)  mhpme5_ff (.*, .en(wr_mhpme5_r), .din(event_r[9:0]), .dout(mhpme5[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME6(RW)
-   // [9:0] : Hardware Performance Monitor Event 6
-   localparam MHPME6        = 12'h326;
-
-   assign wr_mhpme6_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME6);
-   rvdffe #(10)  mhpme6_ff (.*, .en(wr_mhpme6_r), .din(event_r[9:0]), .dout(mhpme6[9:0]));
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section ends
-   //----------------------------------------------------------------------
-   // ----------------------------------------------------------------------
-
-   // MCOUNTINHIBIT(RW)
-   // [31:7] : Reserved, read 0x0
-   // [6]    : HPM6 disable
-   // [5]    : HPM5 disable
-   // [4]    : HPM4 disable
-   // [3]    : HPM3 disable
-   // [2]    : MINSTRET disable
-   // [1]    : reserved, read 0x0
-   // [0]    : MCYCLE disable
-
-   localparam MCOUNTINHIBIT             = 12'h320;
-
-   assign wr_mcountinhibit_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCOUNTINHIBIT);
-   rvdffs #(6)  mcountinhibit_ff (.*, .clk(csr_wr_clk), .en(wr_mcountinhibit_r), .din({dec_csr_wrdata_r[6:2], dec_csr_wrdata_r[0]}), .dout({mcountinhibit[6:2], mcountinhibit[0]}));
-   assign mcountinhibit[1] = 1'b0;
-
-   //--------------------------------------------------------------------------------
-   // trace
-   //--------------------------------------------------------------------------------
-   logic [4:0] dec_tlu_exc_cause_wb1_raw, dec_tlu_exc_cause_wb2;
-   logic       dec_tlu_int_valid_wb1_raw, dec_tlu_int_valid_wb2;
-
-   assign {dec_tlu_i0_valid_wb1,
-           dec_tlu_i0_exc_valid_wb1,
-           dec_tlu_exc_cause_wb1_raw[4:0],
-           dec_tlu_int_valid_wb1_raw}  =   {8{~dec_tlu_trace_disable}} & {i0_valid_wb,
-                                                                          i0_exception_valid_r_d1 | lsu_i0_exc_r_d1 | (trigger_hit_r_d1 & ~trigger_hit_dmode_r_d1),
-                                                                          exc_cause_wb[4:0],
-                                                                          interrupt_valid_r_d1};
-
-
-
-  // skid buffer for ints, reduces trace port count by 1
-   rvdffie #(.WIDTH(6), .OVERRIDE(1))  traceskidff (.*,  .clk(clk),
-                        .din ({dec_tlu_exc_cause_wb1_raw[4:0],
-                               dec_tlu_int_valid_wb1_raw}),
-                        .dout({dec_tlu_exc_cause_wb2[4:0],
-                               dec_tlu_int_valid_wb2}));
-   //skid for ints
-   assign dec_tlu_exc_cause_wb1[4:0] =  dec_tlu_int_valid_wb2 ? dec_tlu_exc_cause_wb2[4:0] : dec_tlu_exc_cause_wb1_raw[4:0];
-   assign dec_tlu_int_valid_wb1 = dec_tlu_int_valid_wb2;
-
-   assign dec_tlu_mtval_wb1  = mtval[31:0];
-
-   // end trace
-   //--------------------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // CSR read mux
-   // ----------------------------------------------------------------------
-
-// file "csrdecode" is human readable file that has all of the CSR decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "csrdecode" except legal equation:
-
-// 1) coredecode -in csrdecode > corecsrdecode.e
-
-// 2) espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations
-
-// to generate the legal CSR equation below:
-
-// 1) coredecode -in csrdecode -legal > csrlegal.e
-
-// 2) espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-// coredecode -in csrdecode > corecsrdecode.e; espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations; coredecode -in csrdecode -legal > csrlegal.e; espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-
-assign csr_misa = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mvendorid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_marchid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mimpid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mhartid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mstatus = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtvec = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mip = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]);
-
-assign csr_mie = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcyclel = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]);
-
-assign csr_mcycleh = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_minstretl = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_minstreth = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscratch = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mepc = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mcause = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscause = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mtval = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mrac = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dmst = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_mdseac = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]);
-
-assign csr_meihap = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[3]);
-
-assign csr_meivt = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_meipt = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_meicurpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_meicidpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dcsr = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcgc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dpc = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtsel = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata1 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata2 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[1]);
-
-assign csr_mhpmc3 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6 = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc3h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme3 = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme4 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme5 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme6 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mcountinhibit = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl1 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mpmc = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign csr_meicpct = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_micect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_miccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mdccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdht = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdhs = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_dicawics = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_dicad0h = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dicad0 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dicad1 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_dicago = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign presync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign postsync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign legal = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]);
-
-
-
-assign dec_tlu_presync_d = presync & dec_csr_any_unq_d & ~dec_csr_wen_unq_d;
-assign dec_tlu_postsync_d = postsync & dec_csr_any_unq_d;
-
-   // allow individual configuration of these features
-assign conditionally_illegal = ((csr_mitcnt0 | csr_mitcnt1 | csr_mitb0 | csr_mitb1 | csr_mitctl0 | csr_mitctl1) & !pt.TIMER_LEGAL_EN);
-
-assign valid_csr = ( legal & (~(csr_dcsr | csr_dpc | csr_dmst | csr_dicawics | csr_dicad0 | csr_dicad0h | csr_dicad1 | csr_dicago) | dbg_tlu_halted_f)
-                     & ~fast_int_meicpct & ~conditionally_illegal);
-
-assign dec_csr_legal_d = ( dec_csr_any_unq_d &
-                           valid_csr &          // of a valid CSR
-                           ~(dec_csr_wen_unq_d & (csr_mvendorid | csr_marchid | csr_mimpid | csr_mhartid | csr_mdseac | csr_meihap)) // that's not a write to a RO CSR
-                           );
-   // CSR read mux
-assign dec_csr_rddata_d[31:0] = ( ({32{csr_misa}}      & 32'h40201104) |
-                                  ({32{csr_mvendorid}} & 32'h00000045) |
-                                  ({32{csr_marchid}}   & 32'h00000010) |
-                                  ({32{csr_mimpid}}    & 32'h3) |
-                                  ({32{csr_mhartid}}   & {core_id[31:4], 4'b0}) |
-                                  ({32{csr_mstatus}}   & {{15{1'b0}}, 2'b01, 2'b00, 2'b11, 3'b0, mstatus[1], 3'b0, mstatus[0], 3'b0}) |
-                                  ({32{csr_mtvec}}     & {mtvec[30:1], 1'b0, mtvec[0]}) |
-                                  ({32{csr_mip}}       & {1'b0, mip[5:3], 16'b0, mip[2], 3'b0, mip[1], 3'b0, mip[0], 3'b0}) |
-                                  ({32{csr_mie}}       & {1'b0, mie[5:3], 16'b0, mie[2], 3'b0, mie[1], 3'b0, mie[0], 3'b0}) |
-                                  ({32{csr_mcyclel}}   & mcyclel[31:0]) |
-                                  ({32{csr_mcycleh}}   & mcycleh_inc[31:0]) |
-                                  ({32{csr_minstretl}} & minstretl_read[31:0]) |
-                                  ({32{csr_minstreth}} & minstreth_read[31:0]) |
-                                  ({32{csr_mscratch}}  & mscratch[31:0]) |
-                                  ({32{csr_mepc}}      & {mepc[31:1], 1'b0}) |
-                                  ({32{csr_mcause}}    & mcause[31:0]) |
-                                  ({32{csr_mscause}}   & {28'b0, mscause[3:0]}) |
-                                  ({32{csr_mtval}}     & mtval[31:0]) |
-                                  ({32{csr_mrac}}      & mrac[31:0]) |
-                                  ({32{csr_mdseac}}    & mdseac[31:0]) |
-                                  ({32{csr_meivt}}     & {meivt[31:10], 10'b0}) |
-                                  ({32{csr_meihap}}    & {meivt[31:10], meihap[9:2], 2'b0}) |
-                                  ({32{csr_meicurpl}}  & {28'b0, meicurpl[3:0]}) |
-                                  ({32{csr_meicidpl}}  & {28'b0, meicidpl[3:0]}) |
-                                  ({32{csr_meipt}}     & {28'b0, meipt[3:0]}) |
-                                  ({32{csr_mcgc}}      & {22'b0, mcgc[9:0]}) |
-                                  ({32{csr_mfdc}}      & {13'b0, mfdc[18:0]}) |
-                                  ({32{csr_dcsr}}      & {16'h4000, dcsr[15:2], 2'b11}) |
-                                  ({32{csr_dpc}}       & {dpc[31:1], 1'b0}) |
-                                  ({32{csr_dicad0}}    & dicad0[31:0]) |
-                                  ({32{csr_dicad0h}}   & dicad0h[31:0]) |
-                                  ({32{csr_dicad1}}    & dicad1[31:0]) |
-                                  ({32{csr_dicawics}}  & {7'b0, dicawics[16], 2'b0, dicawics[15:14], 3'b0, dicawics[13:0], 3'b0}) |
-                                  ({32{csr_mtsel}}     & {30'b0, mtsel[1:0]}) |
-                                  ({32{csr_mtdata1}}   & {mtdata1_tsel_out[31:0]}) |
-                                  ({32{csr_mtdata2}}   & {mtdata2_tsel_out[31:0]}) |
-                                  ({32{csr_micect}}    & {micect[31:0]}) |
-                                  ({32{csr_miccmect}}  & {miccmect[31:0]}) |
-                                  ({32{csr_mdccmect}}  & {mdccmect[31:0]}) |
-                                  ({32{csr_mhpmc3}}    & mhpmc3[31:0]) |
-                                  ({32{csr_mhpmc4}}    & mhpmc4[31:0]) |
-                                  ({32{csr_mhpmc5}}    & mhpmc5[31:0]) |
-                                  ({32{csr_mhpmc6}}    & mhpmc6[31:0]) |
-                                  ({32{csr_mhpmc3h}}   & mhpmc3h[31:0]) |
-                                  ({32{csr_mhpmc4h}}   & mhpmc4h[31:0]) |
-                                  ({32{csr_mhpmc5h}}   & mhpmc5h[31:0]) |
-                                  ({32{csr_mhpmc6h}}   & mhpmc6h[31:0]) |
-                                  ({32{csr_mfdht}}     & {26'b0, mfdht[5:0]}) |
-                                  ({32{csr_mfdhs}}     & {30'b0, mfdhs[1:0]}) |
-                                  ({32{csr_mhpme3}}    & {22'b0,mhpme3[9:0]}) |
-                                  ({32{csr_mhpme4}}    & {22'b0,mhpme4[9:0]}) |
-                                  ({32{csr_mhpme5}}    & {22'b0,mhpme5[9:0]}) |
-                                  ({32{csr_mhpme6}}    & {22'b0,mhpme6[9:0]}) |
-                                  ({32{csr_mcountinhibit}} & {25'b0, mcountinhibit[6:0]}) |
-                                  ({32{csr_mpmc}}      & {30'b0, mpmc[1], 1'b0}) |
-                                  ({32{dec_timer_read_d}} & dec_timer_rddata_d[31:0])
-                                  );
-
-
-
-endmodule // eb1_dec_tlu_ctl
-
-module eb1_dec_timer_ctl #(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,
-   input logic free_l2clk,
-   input logic csr_wr_clk,
-   input logic rst_l,
-   input logic        dec_csr_wen_r_mod,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic csr_mitctl0,
-   input logic csr_mitctl1,
-   input logic csr_mitb0,
-   input logic csr_mitb1,
-   input logic csr_mitcnt0,
-   input logic csr_mitcnt1,
-
-
-   input logic dec_pause_state, // Paused
-   input logic dec_tlu_pmu_fw_halted, // pmu/fw halted
-   input logic internal_dbg_halt_timers, // debug halted
-
-   output logic [31:0] dec_timer_rddata_d, // timer CSR read data
-   output logic        dec_timer_read_d, // timer CSR address match
-   output logic        dec_timer_t0_pulse, // timer0 int
-   output logic        dec_timer_t1_pulse, // timer1 int
-
-   input  logic        scan_mode
-   );
-   localparam MITCTL_ENABLE             = 0;
-   localparam MITCTL_ENABLE_HALTED      = 1;
-   localparam MITCTL_ENABLE_PAUSED      = 2;
-
-   logic [31:0] mitcnt0_ns, mitcnt0, mitcnt1_ns, mitcnt1, mitb0, mitb1, mitb0_b, mitb1_b, mitcnt0_inc, mitcnt1_inc;
-   logic [2:0] mitctl0_ns, mitctl0;
-   logic [3:0] mitctl1_ns, mitctl1;
-   logic wr_mitcnt0_r, wr_mitcnt1_r, wr_mitb0_r, wr_mitb1_r, wr_mitctl0_r, wr_mitctl1_r;
-   logic mitcnt0_inc_ok, mitcnt1_inc_ok;
-   logic mitcnt0_inc_cout, mitcnt1_inc_cout;
- logic mit0_match_ns;
- logic mit1_match_ns;
- logic mitctl0_0_b_ns;
- logic mitctl0_0_b;
- logic mitctl1_0_b_ns;
- logic mitctl1_0_b;
-
-   assign mit0_match_ns = (mitcnt0[31:0] >= mitb0[31:0]);
-   assign mit1_match_ns = (mitcnt1[31:0] >= mitb1[31:0]);
-
-   assign dec_timer_t0_pulse = mit0_match_ns;
-   assign dec_timer_t1_pulse = mit1_match_ns;
-   // ----------------------------------------------------------------------
-   // MITCNT0 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT0       = 12'h7d2;
-
-   assign wr_mitcnt0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT0);
-
-   assign mitcnt0_inc_ok = mitctl0[MITCTL_ENABLE] & (~dec_pause_state | mitctl0[MITCTL_ENABLE_PAUSED]) & (~dec_tlu_pmu_fw_halted | mitctl0[MITCTL_ENABLE_HALTED]) & ~internal_dbg_halt_timers;
-
-   assign {mitcnt0_inc_cout, mitcnt0_inc[7:0]} = mitcnt0[7:0] + {7'b0, 1'b1};
-   assign mitcnt0_inc[31:8] = mitcnt0[31:8] + {23'b0, mitcnt0_inc_cout};
-
-   assign mitcnt0_ns[31:0]  = wr_mitcnt0_r ? dec_csr_wrdata_r[31:0] : mit0_match_ns ? 'b0 : mitcnt0_inc[31:0];
-
-   rvdffe #(24) mitcnt0_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | (mitcnt0_inc_ok & mitcnt0_inc_cout) | mit0_match_ns), .din(mitcnt0_ns[31:8]), .dout(mitcnt0[31:8]));
-   rvdffe #(8)  mitcnt0_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | mitcnt0_inc_ok | mit0_match_ns),                       .din(mitcnt0_ns[7:0]), .dout(mitcnt0[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MITCNT1 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT1       = 12'h7d5;
-
-   assign wr_mitcnt1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT1);
-
-   assign mitcnt1_inc_ok = mitctl1[MITCTL_ENABLE] &
-                           (~dec_pause_state | mitctl1[MITCTL_ENABLE_PAUSED]) &
-                           (~dec_tlu_pmu_fw_halted | mitctl1[MITCTL_ENABLE_HALTED]) &
-                           ~internal_dbg_halt_timers &
-                           (~mitctl1[3] | mit0_match_ns);
-
-   // only inc MITCNT1 if not cascaded with 0, or if 0 overflows
-   assign {mitcnt1_inc_cout, mitcnt1_inc[7:0]} = mitcnt1[7:0] + {7'b0, 1'b1};
-   assign mitcnt1_inc[31:8] = mitcnt1[31:8] + {23'b0, mitcnt1_inc_cout};
-
-   assign mitcnt1_ns[31:0]  = wr_mitcnt1_r ? dec_csr_wrdata_r[31:0] : mit1_match_ns ? 'b0 : mitcnt1_inc[31:0];
-
-   rvdffe #(24) mitcnt1_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | (mitcnt1_inc_ok & mitcnt1_inc_cout) | mit1_match_ns), .din(mitcnt1_ns[31:8]), .dout(mitcnt1[31:8]));
-   rvdffe #(8)  mitcnt1_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | mitcnt1_inc_ok | mit1_match_ns),                       .din(mitcnt1_ns[7:0]), .dout(mitcnt1[7:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MITB0 (RW)
-   // [31:0] : Internal Timer Bound 0
-
-   localparam MITB0         = 12'h7d3;
-
-   assign wr_mitb0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB0);
-
-   rvdffe #(32) mitb0_ff      (.*, .en(wr_mitb0_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb0_b[31:0]));
-   assign mitb0[31:0] = ~mitb0_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITB1 (RW)
-   // [31:0] : Internal Timer Bound 1
-
-   localparam MITB1         = 12'h7d6;
-
-   assign wr_mitb1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB1);
-
-   rvdffe #(32) mitb1_ff      (.*, .en(wr_mitb1_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb1_b[31:0]));
-   assign mitb1[31:0] = ~mitb1_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITCTL0 (RW) Internal Timer Ctl 0
-   // [31:3] : Reserved, reads 0x0
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL0       = 12'h7d4;
-
-   assign wr_mitctl0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL0);
-   assign mitctl0_ns[2:0] = wr_mitctl0_r ? {dec_csr_wrdata_r[2:0]} : {mitctl0[2:0]};
-
-   assign mitctl0_0_b_ns = ~mitctl0_ns[0];
-   rvdffs #(3) mitctl0_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl0_r), .din({mitctl0_ns[2:1], mitctl0_0_b_ns}), .dout({mitctl0[2:1], mitctl0_0_b}));
-   assign mitctl0[0] = ~mitctl0_0_b;
-
-   // ----------------------------------------------------------------------
-   // MITCTL1 (RW) Internal Timer Ctl 1
-   // [31:4] : Reserved, reads 0x0
-   // [3]    : Cascade
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL1       = 12'h7d7;
-
-   assign wr_mitctl1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL1);
-   assign mitctl1_ns[3:0] = wr_mitctl1_r ? {dec_csr_wrdata_r[3:0]} : {mitctl1[3:0]};
-
-   assign mitctl1_0_b_ns = ~mitctl1_ns[0];
-   rvdffs #(4) mitctl1_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl1_r), .din({mitctl1_ns[3:1], mitctl1_0_b_ns}), .dout({mitctl1[3:1], mitctl1_0_b}));
-   assign mitctl1[0] = ~mitctl1_0_b;
-   assign dec_timer_read_d = csr_mitcnt1 | csr_mitcnt0 | csr_mitb1 | csr_mitb0 | csr_mitctl0 | csr_mitctl1;
-   assign dec_timer_rddata_d[31:0] = ( ({32{csr_mitcnt0}}      & mitcnt0[31:0]) |
-                                       ({32{csr_mitcnt1}}      & mitcnt1[31:0]) |
-                                       ({32{csr_mitb0}}        & mitb0[31:0]) |
-                                       ({32{csr_mitb1}}        & mitb1[31:0]) |
-                                       ({32{csr_mitctl0}}      & {29'b0, mitctl0[2:0]}) |
-                                       ({32{csr_mitctl1}}      & {28'b0, mitctl1[3:0]})
-                                       );
-
-
-endmodule // dec_timer_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_trigger.sv b/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_trigger.sv
deleted file mode 100644
index 05f9d12..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dec/eb1_dec_trigger.sv
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DEC Trigger Logic
-// Comments:
-//
-//********************************************************************************
-module eb1_dec_trigger
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,           // Packet from tlu. 'select':0-pc,1-Opcode  'Execute' needs to be set for dec triggers to fire. 'match'-1 do mask, 0: full match
-   input logic [31:1]  dec_i0_pc_d,                          // i0 pc
-
-   output logic [3:0] dec_i0_trigger_match_d                 // Trigger match
-);
-
-   logic [3:0][31:0]  dec_i0_match_data;
-   logic [3:0]        dec_i0_trigger_data_match;
-
-   for (genvar i=0; i<4; i++) begin
-      assign dec_i0_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select & trigger_pkt_any[i].execute}} & {dec_i0_pc_d[31:1], trigger_pkt_any[i].tdata2[0]});      // select=0; do a PC match
-
-      rvmaskandmatch trigger_i0_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(dec_i0_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(dec_i0_trigger_data_match[i]));
-
-      assign dec_i0_trigger_match_d[i] = trigger_pkt_any[i].execute & trigger_pkt_any[i].m & dec_i0_trigger_data_match[i];
-   end
-
-endmodule // eb1_dec_trigger
-
diff --git a/verilog/rtl/BrqRV_EB1/design/dmi/dmi_jtag_to_core_sync.v b/verilog/rtl/BrqRV_EB1/design/dmi/dmi_jtag_to_core_sync.v
deleted file mode 100644
index 25328ea..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dmi/dmi_jtag_to_core_sync.v
+++ /dev/null
@@ -1,64 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2019
-//  Owner : Alex Grobman
-//  Description:  
-//                This module Synchronizes the signals between JTAG (TCK) and
-//                processor (Core_clk)
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_jtag_to_core_sync (
-// JTAG signals
-input       rd_en,      // 1 bit  Read Enable from JTAG
-input       wr_en,      // 1 bit  Write enable from JTAG
-
-// Processor Signals
-input       rst_n,      // Core reset
-input       clk,        // Core clock
-
-output      reg_en,     // 1 bit  Write interface bit to Processor
-output      reg_wr_en   // 1 bit  Write enable to Processor
-);
-  
-wire        c_rd_en;
-wire        c_wr_en;
-reg [2:0]   rden, wren;
- 
-
-// Outputs
-assign reg_en    = c_wr_en | c_rd_en;
-assign reg_wr_en = c_wr_en;
-
-
-// synchronizers  
-always @ ( posedge clk or negedge rst_n) begin
-    if(!rst_n) begin
-        rden <= '0;
-        wren <= '0;
-    end
-    else begin
-        rden <= {rden[1:0], rd_en};
-        wren <= {wren[1:0], wr_en};
-    end
-end
-
-assign c_rd_en = rden[1] & ~rden[2];
-assign c_wr_en = wren[1] & ~wren[2];
- 
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dmi/dmi_wrapper.v b/verilog/rtl/BrqRV_EB1/design/dmi/dmi_wrapper.v
deleted file mode 100644
index 3f0682f..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dmi/dmi_wrapper.v
+++ /dev/null
@@ -1,90 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2018
-//  Owner : Anusha Narayanamoorthy
-//  Description:  
-//                Wrapper module for JTAG_TAP and DMI synchronizer
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_wrapper(
-
-  // JTAG signals
-  input              trst_n,              // JTAG reset
-  input              tck,                 // JTAG clock
-  input              tms,                 // Test mode select   
-  input              tdi,                 // Test Data Input
-  output             tdo,                 // Test Data Output           
-  output             tdoEnable,           // Test Data Output enable             
-
-  // Processor Signals
-  input              core_rst_n,          // Core reset                  
-  input              core_clk,            // Core clock                  
-  input [31:1]       jtag_id,             // JTAG ID
-  input [31:0]       rd_data,             // 32 bit Read data from  Processor                       
-  output [31:0]      reg_wr_data,         // 32 bit Write data to Processor                      
-  output [6:0]       reg_wr_addr,         // 7 bit reg address to Processor                   
-  output             reg_en,              // 1 bit  Read enable to Processor                                    
-  output             reg_wr_en,           // 1 bit  Write enable to Processor 
-  output             dmi_hard_reset  
-);
-
-
-  
-
-
-  //Wire Declaration
-  wire                     rd_en;
-  wire                     wr_en;
-  wire                     dmireset;
-
- 
-  //jtag_tap instantiation
- rvjtag_tap i_jtag_tap(
-   .trst(trst_n),                      // dedicated JTAG TRST (active low) pad signal or asynchronous active low power on reset
-   .tck(tck),                          // dedicated JTAG TCK pad signal
-   .tms(tms),                          // dedicated JTAG TMS pad signal
-   .tdi(tdi),                          // dedicated JTAG TDI pad signal
-   .tdo(tdo),                          // dedicated JTAG TDO pad signal
-   .tdoEnable(tdoEnable),              // enable for TDO pad
-   .wr_data(reg_wr_data),              // 32 bit Write data
-   .wr_addr(reg_wr_addr),              // 7 bit Write address
-   .rd_en(rd_en),                      // 1 bit  read enable
-   .wr_en(wr_en),                      // 1 bit  Write enable
-   .rd_data(rd_data),                  // 32 bit Read data
-   .rd_status(2'b0),
-   .idle(3'h0),                         // no need to wait to sample data
-   .dmi_stat(2'b0),                     // no need to wait or error possible
-   .version(4'h1),                      // debug spec 0.13 compliant
-   .jtag_id(jtag_id),
-   .dmi_hard_reset(dmi_hard_reset),
-   .dmi_reset(dmireset)
-);
-
-
-  // dmi_jtag_to_core_sync instantiation
-  dmi_jtag_to_core_sync i_dmi_jtag_to_core_sync(
-    .wr_en(wr_en),                          // 1 bit  Write enable
-    .rd_en(rd_en),                          // 1 bit  Read enable
-
-    .rst_n(core_rst_n),
-    .clk(core_clk),
-    .reg_en(reg_en),                          // 1 bit  Write interface bit
-    .reg_wr_en(reg_wr_en)                          // 1 bit  Write enable
-  );
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dmi/rvjtag_tap.v b/verilog/rtl/BrqRV_EB1/design/dmi/rvjtag_tap.v
deleted file mode 100644
index d4969b3..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dmi/rvjtag_tap.v
+++ /dev/null
@@ -1,224 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License
-
-module rvjtag_tap #(
-parameter AWIDTH = 7
-)
-(
-input               trst,
-input               tck,
-input               tms,
-input               tdi,
-output   reg        tdo,
-output              tdoEnable,
-
-output [31:0]       wr_data,
-output [AWIDTH-1:0] wr_addr,
-output              wr_en,
-output              rd_en,
-
-input   [31:0]      rd_data,
-input   [1:0]       rd_status,
-
-output  reg         dmi_reset,
-output  reg         dmi_hard_reset,
-
-input   [2:0]       idle,
-input   [1:0]       dmi_stat,
-/*
---  revisionCode        : 4'h0;
---  manufacturersIdCode : 11'h45;
---  deviceIdCode        : 16'h0001;
---  order MSB .. LSB -> [4 bit version or revision] [16 bit part number] [11 bit manufacturer id] [value of 1'b1 in LSB]
-*/
-input   [31:1]      jtag_id,
-input   [3:0]       version
-);
-
-localparam USER_DR_LENGTH = AWIDTH + 34;
-
-
-reg [USER_DR_LENGTH-1:0] sr, nsr, dr;
-
-///////////////////////////////////////////////////////
-//                      Tap controller
-///////////////////////////////////////////////////////
-logic[3:0] state, nstate;
-logic [4:0] ir;
-wire jtag_reset;
-wire shift_dr;
-wire pause_dr;
-wire update_dr;
-wire capture_dr;
-wire shift_ir;
-wire pause_ir ;
-wire update_ir ;
-wire capture_ir;
-wire[1:0] dr_en;
-wire devid_sel;
-wire [5:0] abits;
-
-assign abits = AWIDTH[5:0];
-
-
-localparam TEST_LOGIC_RESET_STATE = 0;
-localparam RUN_TEST_IDLE_STATE    = 1;
-localparam SELECT_DR_SCAN_STATE   = 2;
-localparam CAPTURE_DR_STATE       = 3;
-localparam SHIFT_DR_STATE         = 4;
-localparam EXIT1_DR_STATE         = 5;
-localparam PAUSE_DR_STATE         = 6;
-localparam EXIT2_DR_STATE         = 7;
-localparam UPDATE_DR_STATE        = 8;
-localparam SELECT_IR_SCAN_STATE   = 9;
-localparam CAPTURE_IR_STATE       = 10;
-localparam SHIFT_IR_STATE         = 11;
-localparam EXIT1_IR_STATE         = 12;
-localparam PAUSE_IR_STATE         = 13;
-localparam EXIT2_IR_STATE         = 14;
-localparam UPDATE_IR_STATE        = 15;
-
-always_comb  begin
-    nstate = state;
-    case(state)
-    TEST_LOGIC_RESET_STATE: nstate = tms ? TEST_LOGIC_RESET_STATE : RUN_TEST_IDLE_STATE;
-    RUN_TEST_IDLE_STATE:    nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_DR_SCAN_STATE:   nstate = tms ? SELECT_IR_SCAN_STATE   : CAPTURE_DR_STATE;
-    CAPTURE_DR_STATE:       nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    SHIFT_DR_STATE:         nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    EXIT1_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : PAUSE_DR_STATE;
-    PAUSE_DR_STATE:         nstate = tms ? EXIT2_DR_STATE         : PAUSE_DR_STATE;
-    EXIT2_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : SHIFT_DR_STATE;
-    UPDATE_DR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_IR_SCAN_STATE:   nstate = tms ? TEST_LOGIC_RESET_STATE : CAPTURE_IR_STATE;
-    CAPTURE_IR_STATE:       nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    SHIFT_IR_STATE:         nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    EXIT1_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : PAUSE_IR_STATE;
-    PAUSE_IR_STATE:         nstate = tms ? EXIT2_IR_STATE         : PAUSE_IR_STATE;
-    EXIT2_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : SHIFT_IR_STATE;
-    UPDATE_IR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    default:                nstate = TEST_LOGIC_RESET_STATE;
-    endcase
-end
-
-always @ (posedge tck or negedge trst) begin
-    if(!trst) state <= TEST_LOGIC_RESET_STATE;
-    else state <= nstate;
-end
-
-assign jtag_reset = state == TEST_LOGIC_RESET_STATE;
-assign shift_dr   = state == SHIFT_DR_STATE;
-assign pause_dr   = state == PAUSE_DR_STATE;
-assign update_dr  = state == UPDATE_DR_STATE;
-assign capture_dr = state == CAPTURE_DR_STATE;
-assign shift_ir   = state == SHIFT_IR_STATE;
-assign pause_ir   = state == PAUSE_IR_STATE;
-assign update_ir  = state == UPDATE_IR_STATE;
-assign capture_ir = state == CAPTURE_IR_STATE;
-
-assign tdoEnable = shift_dr | shift_ir;
-
-///////////////////////////////////////////////////////
-//                      IR register
-///////////////////////////////////////////////////////
-
-always @ (negedge tck or negedge trst) begin
-   if (!trst) ir <= 5'b1;
-   else begin
-      if (jtag_reset) ir <= 5'b1;
-      else if (update_ir) ir <= (sr[4:0] == '0) ? 5'h1f :sr[4:0];
-   end
-end
-
-
-assign devid_sel  = ir == 5'b00001;
-assign dr_en[0]   = ir == 5'b10000;
-assign dr_en[1]   = ir == 5'b10001;
-
-///////////////////////////////////////////////////////
-//                      Shift register
-///////////////////////////////////////////////////////
-always @ (posedge tck or negedge trst) begin
-    if(!trst)begin
-        sr <= '0;
-    end
-    else begin
-        sr <= nsr;
-    end
-end
-
-// SR next value
-always_comb begin
-    nsr = sr;
-    case(1)
-    shift_dr:   begin
-                    case(1)
-                    dr_en[1]:   nsr = {tdi, sr[USER_DR_LENGTH-1:1]};
-
-                    dr_en[0],
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}},tdi, sr[31:1]};
-                    default:    nsr = {{USER_DR_LENGTH-1{1'b0}},tdi}; // bypass
-                    endcase
-                end
-    capture_dr: begin
-                    nsr[0] = 1'b0;
-                    case(1)
-                    dr_en[0]:   nsr = {{USER_DR_LENGTH-15{1'b0}}, idle, dmi_stat, abits, version};
-                    dr_en[1]:   nsr = {{AWIDTH{1'b0}}, rd_data, rd_status};
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}}, jtag_id, 1'b1};
-                    endcase
-                end
-    shift_ir:   nsr = {{USER_DR_LENGTH-5{1'b0}},tdi, sr[4:1]};
-    capture_ir: nsr = {{USER_DR_LENGTH-1{1'b0}},1'b1};
-    endcase
-end
-
-// TDO retiming
-always @ (negedge tck ) tdo <= sr[0];
-
-// DMI CS register
-always @ (posedge tck or negedge trst) begin
-    if(!trst) begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-    else if (update_dr & dr_en[0]) begin
-        dmi_hard_reset <= sr[17];
-        dmi_reset      <= sr[16];
-    end
-    else begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-end
-
-// DR register
-always @ (posedge tck or negedge trst) begin
-    if(!trst)
-        dr <=  '0;
-    else begin
-        if (update_dr & dr_en[1])
-            dr <= sr;
-        else
-            dr <= {dr[USER_DR_LENGTH-1:2],2'b0};
-    end
-end
-
-assign {wr_addr, wr_data, wr_en, rd_en} = dr;
-
-
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dmi_jtag_to_core_sync.v b/verilog/rtl/BrqRV_EB1/design/dmi_jtag_to_core_sync.v
deleted file mode 100644
index 25328ea..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dmi_jtag_to_core_sync.v
+++ /dev/null
@@ -1,64 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2019
-//  Owner : Alex Grobman
-//  Description:  
-//                This module Synchronizes the signals between JTAG (TCK) and
-//                processor (Core_clk)
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_jtag_to_core_sync (
-// JTAG signals
-input       rd_en,      // 1 bit  Read Enable from JTAG
-input       wr_en,      // 1 bit  Write enable from JTAG
-
-// Processor Signals
-input       rst_n,      // Core reset
-input       clk,        // Core clock
-
-output      reg_en,     // 1 bit  Write interface bit to Processor
-output      reg_wr_en   // 1 bit  Write enable to Processor
-);
-  
-wire        c_rd_en;
-wire        c_wr_en;
-reg [2:0]   rden, wren;
- 
-
-// Outputs
-assign reg_en    = c_wr_en | c_rd_en;
-assign reg_wr_en = c_wr_en;
-
-
-// synchronizers  
-always @ ( posedge clk or negedge rst_n) begin
-    if(!rst_n) begin
-        rden <= '0;
-        wren <= '0;
-    end
-    else begin
-        rden <= {rden[1:0], rd_en};
-        wren <= {wren[1:0], wr_en};
-    end
-end
-
-assign c_rd_en = rden[1] & ~rden[2];
-assign c_wr_en = wren[1] & ~wren[2];
- 
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/dmi_wrapper.v b/verilog/rtl/BrqRV_EB1/design/dmi_wrapper.v
deleted file mode 100644
index 3f0682f..0000000
--- a/verilog/rtl/BrqRV_EB1/design/dmi_wrapper.v
+++ /dev/null
@@ -1,90 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2018
-//  Owner : Anusha Narayanamoorthy
-//  Description:  
-//                Wrapper module for JTAG_TAP and DMI synchronizer
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_wrapper(
-
-  // JTAG signals
-  input              trst_n,              // JTAG reset
-  input              tck,                 // JTAG clock
-  input              tms,                 // Test mode select   
-  input              tdi,                 // Test Data Input
-  output             tdo,                 // Test Data Output           
-  output             tdoEnable,           // Test Data Output enable             
-
-  // Processor Signals
-  input              core_rst_n,          // Core reset                  
-  input              core_clk,            // Core clock                  
-  input [31:1]       jtag_id,             // JTAG ID
-  input [31:0]       rd_data,             // 32 bit Read data from  Processor                       
-  output [31:0]      reg_wr_data,         // 32 bit Write data to Processor                      
-  output [6:0]       reg_wr_addr,         // 7 bit reg address to Processor                   
-  output             reg_en,              // 1 bit  Read enable to Processor                                    
-  output             reg_wr_en,           // 1 bit  Write enable to Processor 
-  output             dmi_hard_reset  
-);
-
-
-  
-
-
-  //Wire Declaration
-  wire                     rd_en;
-  wire                     wr_en;
-  wire                     dmireset;
-
- 
-  //jtag_tap instantiation
- rvjtag_tap i_jtag_tap(
-   .trst(trst_n),                      // dedicated JTAG TRST (active low) pad signal or asynchronous active low power on reset
-   .tck(tck),                          // dedicated JTAG TCK pad signal
-   .tms(tms),                          // dedicated JTAG TMS pad signal
-   .tdi(tdi),                          // dedicated JTAG TDI pad signal
-   .tdo(tdo),                          // dedicated JTAG TDO pad signal
-   .tdoEnable(tdoEnable),              // enable for TDO pad
-   .wr_data(reg_wr_data),              // 32 bit Write data
-   .wr_addr(reg_wr_addr),              // 7 bit Write address
-   .rd_en(rd_en),                      // 1 bit  read enable
-   .wr_en(wr_en),                      // 1 bit  Write enable
-   .rd_data(rd_data),                  // 32 bit Read data
-   .rd_status(2'b0),
-   .idle(3'h0),                         // no need to wait to sample data
-   .dmi_stat(2'b0),                     // no need to wait or error possible
-   .version(4'h1),                      // debug spec 0.13 compliant
-   .jtag_id(jtag_id),
-   .dmi_hard_reset(dmi_hard_reset),
-   .dmi_reset(dmireset)
-);
-
-
-  // dmi_jtag_to_core_sync instantiation
-  dmi_jtag_to_core_sync i_dmi_jtag_to_core_sync(
-    .wr_en(wr_en),                          // 1 bit  Write enable
-    .rd_en(rd_en),                          // 1 bit  Read enable
-
-    .rst_n(core_rst_n),
-    .clk(core_clk),
-    .reg_en(reg_en),                          // 1 bit  Write interface bit
-    .reg_wr_en(reg_wr_en)                          // 1 bit  Write enable
-  );
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_brqrv.sv b/verilog/rtl/BrqRV_EB1/design/eb1_brqrv.sv
deleted file mode 100644
index 68b3f8c..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_brqrv.sv
+++ /dev/null
@@ -1,1311 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file
-// Comments:
-//
-//********************************************************************************
-module eb1_brqrv
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic                  clk,
-   input logic                  rst_l,
-   input logic                  dbg_rst_l,
-   input logic [31:1]           rst_vec,
-   input logic                  nmi_int,
-   input logic [31:1]           nmi_vec,
-   output logic                 core_rst_l,   // This is "rst_l | dbg_rst_l"
-
-   output logic                 active_l2clk,
-   output logic                 free_l2clk,
-
-   output logic [31:0] trace_rv_i_insn_ip,
-   output logic [31:0] trace_rv_i_address_ip,
-   output logic   trace_rv_i_valid_ip,
-   output logic   trace_rv_i_exception_ip,
-   output logic [4:0]  trace_rv_i_ecause_ip,
-   output logic   trace_rv_i_interrupt_ip,
-   output logic [31:0] trace_rv_i_tval_ip,
-
-
-   output logic                 dccm_clk_override,
-   output logic                 icm_clk_override,
-   output logic                 dec_tlu_core_ecc_disable,
-
-   // external halt/run interface
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-   output logic o_cpu_halt_ack,    // Core Acknowledge to Halt request
-   output logic o_cpu_halt_status, // 1'b1 indicates processor is halted
-   output logic o_cpu_run_ack,     // Core Acknowledge to run request
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic dec_tlu_perfcnt0, // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,
-   output logic dec_tlu_perfcnt2,
-   output logic dec_tlu_perfcnt3,
-
-   // DCCM ports
-   output logic                          dccm_wren,
-   output logic                          dccm_rden,
-   output logic [pt.DCCM_BITS-1:0]          dccm_wr_addr_lo,
-   output logic [pt.DCCM_BITS-1:0]          dccm_wr_addr_hi,
-   output logic [pt.DCCM_BITS-1:0]          dccm_rd_addr_lo,
-   output logic [pt.DCCM_BITS-1:0]          dccm_rd_addr_hi,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_wr_data_lo,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_wr_data_hi,
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]    dccm_rd_data_lo,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]    dccm_rd_data_hi,
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]           iccm_rw_addr,
-   output logic                  iccm_wren,
-   output logic                  iccm_rden,
-   output logic [2:0]            iccm_wr_size,
-   output logic [77:0]           iccm_wr_data,
-   output logic                  iccm_buf_correct_ecc,
-   output logic                  iccm_correction_state,
-
-   input  logic [63:0]          iccm_rd_data,
-   input  logic [77:0]           iccm_rd_data_ecc,
-
-   // ICache , ITAG  ports
-   output logic [31:1]           ic_rw_addr,
-   output logic [pt.ICACHE_NUM_WAYS-1:0]            ic_tag_valid,
-   output logic [pt.ICACHE_NUM_WAYS-1:0]            ic_wr_en,
-   output logic                  ic_rd_en,
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select premux data
-
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]            ic_rd_hit,
-   input  logic                  ic_tag_perr,        // Icache Tag parity error
-
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   input  logic                            ifu_axi_awready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   input  logic                            ifu_axi_wready,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   input  logic                            ifu_axi_bvalid,
-   output logic                            ifu_axi_bready,
-   input  logic [1:0]                      ifu_axi_bresp,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-   input  logic                            ifu_axi_rlast,
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            sb_axi_awvalid,
-   input  logic                            sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_awid,
-   output logic [31:0]                     sb_axi_awaddr,
-   output logic [3:0]                      sb_axi_awregion,
-   output logic [7:0]                      sb_axi_awlen,
-   output logic [2:0]                      sb_axi_awsize,
-   output logic [1:0]                      sb_axi_awburst,
-   output logic                            sb_axi_awlock,
-   output logic [3:0]                      sb_axi_awcache,
-   output logic [2:0]                      sb_axi_awprot,
-   output logic [3:0]                      sb_axi_awqos,
-
-   output logic                            sb_axi_wvalid,
-   input  logic                            sb_axi_wready,
-   output logic [63:0]                     sb_axi_wdata,
-   output logic [7:0]                      sb_axi_wstrb,
-   output logic                            sb_axi_wlast,
-
-   input  logic                            sb_axi_bvalid,
-   output logic                            sb_axi_bready,
-   input  logic [1:0]                      sb_axi_bresp,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_bid,
-
-   // AXI Read Channels
-   output logic                            sb_axi_arvalid,
-   input  logic                            sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_arid,
-   output logic [31:0]                     sb_axi_araddr,
-   output logic [3:0]                      sb_axi_arregion,
-   output logic [7:0]                      sb_axi_arlen,
-   output logic [2:0]                      sb_axi_arsize,
-   output logic [1:0]                      sb_axi_arburst,
-   output logic                            sb_axi_arlock,
-   output logic [3:0]                      sb_axi_arcache,
-   output logic [2:0]                      sb_axi_arprot,
-   output logic [3:0]                      sb_axi_arqos,
-
-   input  logic                            sb_axi_rvalid,
-   output logic                            sb_axi_rready,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_rid,
-   input  logic [63:0]                     sb_axi_rdata,
-   input  logic [1:0]                      sb_axi_rresp,
-   input  logic                            sb_axi_rlast,
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   input  logic                         dma_axi_awvalid,
-   output logic                         dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid,
-   input  logic [31:0]                  dma_axi_awaddr,
-   input  logic [2:0]                   dma_axi_awsize,
-   input  logic [2:0]                   dma_axi_awprot,
-   input  logic [7:0]                   dma_axi_awlen,
-   input  logic [1:0]                   dma_axi_awburst,
-
-
-   input  logic                         dma_axi_wvalid,
-   output logic                         dma_axi_wready,
-   input  logic [63:0]                  dma_axi_wdata,
-   input  logic [7:0]                   dma_axi_wstrb,
-   input  logic                         dma_axi_wlast,
-
-   output logic                         dma_axi_bvalid,
-   input  logic                         dma_axi_bready,
-   output logic [1:0]                   dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]    dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                         dma_axi_arvalid,
-   output logic                         dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid,
-   input  logic [31:0]                  dma_axi_araddr,
-   input  logic [2:0]                   dma_axi_arsize,
-   input  logic [2:0]                   dma_axi_arprot,
-   input  logic [7:0]                   dma_axi_arlen,
-   input  logic [1:0]                   dma_axi_arburst,
-
-   output logic                         dma_axi_rvalid,
-   input  logic                         dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]    dma_axi_rid,
-   output logic [63:0]                  dma_axi_rdata,
-   output logic [1:0]                   dma_axi_rresp,
-   output logic                         dma_axi_rlast,
-
-
- //// AHB LITE BUS
-   output logic [31:0]           haddr,
-   output logic [2:0]            hburst,
-   output logic                  hmastlock,
-   output logic [3:0]            hprot,
-   output logic [2:0]            hsize,
-   output logic [1:0]            htrans,
-   output logic                  hwrite,
-
-   input  logic [63:0]           hrdata,
-   input  logic                  hready,
-   input  logic                  hresp,
-
-   // LSU AHB Master
-   output logic [31:0]          lsu_haddr,
-   output logic [2:0]           lsu_hburst,
-   output logic                 lsu_hmastlock,
-   output logic [3:0]           lsu_hprot,
-   output logic [2:0]           lsu_hsize,
-   output logic [1:0]           lsu_htrans,
-   output logic                 lsu_hwrite,
-   output logic [63:0]          lsu_hwdata,
-
-   input  logic [63:0]          lsu_hrdata,
-   input  logic                 lsu_hready,
-   input  logic                 lsu_hresp,
-
-   //System Bus Debug Master
-   output logic [31:0]          sb_haddr,
-   output logic [2:0]           sb_hburst,
-   output logic                 sb_hmastlock,
-   output logic [3:0]           sb_hprot,
-   output logic [2:0]           sb_hsize,
-   output logic [1:0]           sb_htrans,
-   output logic                 sb_hwrite,
-   output logic [63:0]          sb_hwdata,
-
-   input  logic [63:0]          sb_hrdata,
-   input  logic                 sb_hready,
-   input  logic                 sb_hresp,
-
-   // DMA Slave
-   input logic                   dma_hsel,
-   input logic [31:0]            dma_haddr,
-   input logic [2:0]             dma_hburst,
-   input logic                   dma_hmastlock,
-   input logic [3:0]             dma_hprot,
-   input logic [2:0]             dma_hsize,
-   input logic [1:0]             dma_htrans,
-   input logic                   dma_hwrite,
-   input logic [63:0]            dma_hwdata,
-   input logic                   dma_hreadyin,
-
-   output  logic [63:0]          dma_hrdata,
-   output  logic                 dma_hreadyout,
-   output  logic                 dma_hresp,
-
-   input   logic                 lsu_bus_clk_en,
-   input   logic                 ifu_bus_clk_en,
-   input   logic                 dbg_bus_clk_en,
-   input   logic                 dma_bus_clk_en,
-
-   input logic                  dmi_reg_en,                // read or write
-   input logic [6:0]            dmi_reg_addr,              // address of DM register
-   input logic                  dmi_reg_wr_en,             // write instruction
-   input logic [31:0]           dmi_reg_wdata,             // write data
-   output logic [31:0]          dmi_reg_rdata,
-
-   input logic [pt.PIC_TOTAL_INT:1]           extintsrc_req,
-   input logic                   timer_int,
-   input logic                   soft_int,
-   input logic                   scan_mode
-);
-
-
-
-
-   logic [63:0]                  hwdata_nc;
-   //----------------------------------------------------------------------
-   //
-   //----------------------------------------------------------------------
-
-   logic                         ifu_pmu_instr_aligned;
-   logic                         ifu_ic_error_start;
-   logic                         ifu_iccm_rd_ecc_single_err;
-
-   logic                         lsu_axi_awready_ahb;
-   logic                         lsu_axi_wready_ahb;
-   logic                         lsu_axi_bvalid_ahb;
-   logic                         lsu_axi_bready_ahb;
-   logic [1:0]                   lsu_axi_bresp_ahb;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_bid_ahb;
-   logic                         lsu_axi_arready_ahb;
-   logic                         lsu_axi_rvalid_ahb;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_rid_ahb;
-   logic [63:0]                  lsu_axi_rdata_ahb;
-   logic [1:0]                   lsu_axi_rresp_ahb;
-   logic                         lsu_axi_rlast_ahb;
-
-   logic                         lsu_axi_awready_int;
-   logic                         lsu_axi_wready_int;
-   logic                         lsu_axi_bvalid_int;
-   logic                         lsu_axi_bready_int;
-   logic [1:0]                   lsu_axi_bresp_int;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_bid_int;
-   logic                         lsu_axi_arready_int;
-   logic                         lsu_axi_rvalid_int;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_rid_int;
-   logic [63:0]                  lsu_axi_rdata_int;
-   logic [1:0]                   lsu_axi_rresp_int;
-   logic                         lsu_axi_rlast_int;
-   
-   logic                         ifu_axi_awready_ahb;
-   logic                         ifu_axi_wready_ahb;
-   logic                         ifu_axi_bvalid_ahb;
-   logic                         ifu_axi_bready_ahb;
-   logic [1:0]                   ifu_axi_bresp_ahb;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_bid_ahb;
-   logic                         ifu_axi_arready_ahb;
-   logic                         ifu_axi_rvalid_ahb;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_rid_ahb;
-   logic [63:0]                  ifu_axi_rdata_ahb;
-   logic [1:0]                   ifu_axi_rresp_ahb;
-   logic                         ifu_axi_rlast_ahb;
-
-   logic                         ifu_axi_awready_int;
-   logic                         ifu_axi_wready_int;
-   logic                         ifu_axi_bvalid_int;
-   logic                         ifu_axi_bready_int;
-   logic [1:0]                   ifu_axi_bresp_int;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_bid_int;
-   logic                         ifu_axi_arready_int;
-   logic                         ifu_axi_rvalid_int;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_rid_int;
-   logic [63:0]                  ifu_axi_rdata_int;
-   logic [1:0]                   ifu_axi_rresp_int;
-   logic                         ifu_axi_rlast_int;
-
-   logic                         sb_axi_awready_ahb;
-   logic                         sb_axi_wready_ahb;
-   logic                         sb_axi_bvalid_ahb;
-   logic                         sb_axi_bready_ahb;
-   logic [1:0]                   sb_axi_bresp_ahb;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_bid_ahb;
-   logic                         sb_axi_arready_ahb;
-   logic                         sb_axi_rvalid_ahb;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_rid_ahb;
-   logic [63:0]                  sb_axi_rdata_ahb;
-   logic [1:0]                   sb_axi_rresp_ahb;
-   logic                         sb_axi_rlast_ahb;
-
-   logic                         sb_axi_awready_int;
-   logic                         sb_axi_wready_int;
-   logic                         sb_axi_bvalid_int;
-   logic                         sb_axi_bready_int;
-   logic [1:0]                   sb_axi_bresp_int;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_bid_int;
-   logic                         sb_axi_arready_int;
-   logic                         sb_axi_rvalid_int;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_rid_int;
-   logic [63:0]                  sb_axi_rdata_int;
-   logic [1:0]                   sb_axi_rresp_int;
-   logic                         sb_axi_rlast_int;
-
-   logic                         dma_axi_awvalid_ahb;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid_ahb;
-   logic [31:0]                  dma_axi_awaddr_ahb;
-   logic [2:0]                   dma_axi_awsize_ahb;
-   logic [2:0]                   dma_axi_awprot_ahb;
-   logic [7:0]                   dma_axi_awlen_ahb;
-   logic [1:0]                   dma_axi_awburst_ahb;
-   logic                         dma_axi_wvalid_ahb;
-   logic [63:0]                  dma_axi_wdata_ahb;
-   logic [7:0]                   dma_axi_wstrb_ahb;
-   logic                         dma_axi_wlast_ahb;
-   logic                         dma_axi_bready_ahb;
-   logic                         dma_axi_arvalid_ahb;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid_ahb;
-   logic [31:0]                  dma_axi_araddr_ahb;
-   logic [2:0]                   dma_axi_arsize_ahb;
-   logic [2:0]                   dma_axi_arprot_ahb;
-   logic [7:0]                   dma_axi_arlen_ahb;
-   logic [1:0]                   dma_axi_arburst_ahb;
-   logic                         dma_axi_rready_ahb;
-
-   logic                         dma_axi_awvalid_int;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid_int;
-   logic [31:0]                  dma_axi_awaddr_int;
-   logic [2:0]                   dma_axi_awsize_int;
-   logic [2:0]                   dma_axi_awprot_int;
-   logic [7:0]                   dma_axi_awlen_int;
-   logic [1:0]                   dma_axi_awburst_int;
-   logic                         dma_axi_wvalid_int;
-   logic [63:0]                  dma_axi_wdata_int;
-   logic [7:0]                   dma_axi_wstrb_int;
-   logic                         dma_axi_wlast_int;
-   logic                         dma_axi_bready_int;
-   logic                         dma_axi_arvalid_int;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid_int;
-   logic [31:0]                  dma_axi_araddr_int;
-   logic [2:0]                   dma_axi_arsize_int;
-   logic [2:0]                   dma_axi_arprot_int;
-   logic [7:0]                   dma_axi_arlen_int;
-   logic [1:0]                   dma_axi_arburst_int;
-   logic                         dma_axi_rready_int;
-
-
-// Icache debug
-   logic [70:0] ifu_ic_debug_rd_data; // diagnostic icache read data
-   logic ifu_ic_debug_rd_data_valid; // diagnostic icache read data valid
-   eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt; // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-   logic         dec_i0_rs1_en_d;
-   logic         dec_i0_rs2_en_d;
-   logic  [31:0] gpr_i0_rs1_d;
-   logic  [31:0] gpr_i0_rs2_d;
-
-   logic [31:0] dec_i0_result_r;
-   logic [31:0] exu_i0_result_x;
-   logic [31:1] exu_i0_pc_x;
-   logic [31:1] exu_npc_r;
-
-   eb1_alu_pkt_t  i0_ap;
-
-   // Trigger signals
-   eb1_trigger_pkt_t [3:0]     trigger_pkt_any;
-   logic [3:0]             lsu_trigger_match_m;
-
-
-   logic [31:0] dec_i0_immed_d;
-   logic [12:1] dec_i0_br_immed_d;
-   logic         dec_i0_select_pc_d;
-
-   logic [31:1] dec_i0_pc_d;
-   logic [3:0]  dec_i0_rs1_bypass_en_d;
-   logic [3:0]  dec_i0_rs2_bypass_en_d;
-
-   logic         dec_i0_alu_decode_d;
-   logic         dec_i0_branch_d;
-
-   logic         ifu_miss_state_idle;
-   logic         dec_tlu_flush_noredir_r;
-   logic         dec_tlu_flush_leak_one_r;
-   logic         dec_tlu_flush_err_r;
-   logic         ifu_i0_valid;
-   logic [31:0]  ifu_i0_instr;
-   logic [31:1]  ifu_i0_pc;
-
-   logic        exu_flush_final;
-
-   logic [31:1] exu_flush_path_final;
-
-   logic [31:0] exu_lsu_rs1_d;
-   logic [31:0] exu_lsu_rs2_d;
-
-
-   eb1_lsu_pkt_t    lsu_p;
-   logic             dec_qual_lsu_d;
-
-   logic        dec_lsu_valid_raw_d;
-   logic [11:0] dec_lsu_offset_d;
-
-   logic [31:0]  lsu_result_m;
-   logic [31:0]  lsu_result_corr_r;     // This is the ECC corrected data going to RF
-   logic         lsu_single_ecc_error_incr;     // Increment the ecc counter
-   eb1_lsu_error_pkt_t lsu_error_pkt_r;
-   logic         lsu_imprecise_error_load_any;
-   logic         lsu_imprecise_error_store_any;
-   logic [31:0]  lsu_imprecise_error_addr_any;
-   logic         lsu_load_stall_any;       // This is for blocking loads
-   logic         lsu_store_stall_any;      // This is for blocking stores
-   logic         lsu_idle_any;             // doesn't include DMA
-   logic         lsu_active;               // lsu is active. used for clock
-
-
-   logic [31:1]  lsu_fir_addr;        // fast interrupt address
-   logic [1:0]   lsu_fir_error;       // Error during fast interrupt lookup
-
-   // Non-blocking loads
-   logic                                 lsu_nonblock_load_valid_m;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_tag_m;
-   logic                                 lsu_nonblock_load_inv_r;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_inv_tag_r;
-   logic                                 lsu_nonblock_load_data_valid;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_data_tag;
-   logic [31:0]                          lsu_nonblock_load_data;
-
-   logic        dec_csr_ren_d;
-   logic [31:0] dec_csr_rddata_d;
-
-   logic [31:0] exu_csr_rs1_x;
-
-   logic        dec_tlu_i0_commit_cmt;
-   logic        dec_tlu_flush_lower_r;
-   logic        dec_tlu_flush_lower_wb;
-   logic        dec_tlu_i0_kill_writeb_r;     // I0 is flushed, don't writeback any results to arch state
-   logic        dec_tlu_fence_i_r;            // flush is a fence_i rfnpc, flush icache
-
-   logic [31:1] dec_tlu_flush_path_r;
-   logic [31:0] dec_tlu_mrac_ff;        // CSR for memory region control
-
-   logic        ifu_i0_pc4;
-
-   eb1_mul_pkt_t  mul_p;
-
-   eb1_div_pkt_t  div_p;
-   logic           dec_div_cancel;
-
-   logic [31:0] exu_div_result;
-   logic exu_div_wren;
-
-   logic dec_i0_decode_d;
-
-
-   logic [31:1] pred_correct_npc_x;
-
-   eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt;
-
-   eb1_predict_pkt_t  exu_mp_pkt;
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr;
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_index;
-   logic [pt.BTB_BTAG_SIZE-1:0]          exu_mp_btag;
-
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r;
-   logic [1:0]  exu_i0_br_hist_r;
-   logic        exu_i0_br_error_r;
-   logic        exu_i0_br_start_error_r;
-   logic        exu_i0_br_valid_r;
-   logic        exu_i0_br_mp_r;
-   logic        exu_i0_br_middle_r;
-
-   logic        exu_i0_br_way_r;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r;
-
-   logic        dma_dccm_req;
-   logic        dma_iccm_req;
-   logic [2:0]  dma_mem_tag;
-   logic [31:0] dma_mem_addr;
-   logic [2:0]  dma_mem_sz;
-   logic        dma_mem_write;
-   logic [63:0] dma_mem_wdata;
-
-   logic        dccm_dma_rvalid;
-   logic        dccm_dma_ecc_error;
-   logic [2:0]  dccm_dma_rtag;
-   logic [63:0] dccm_dma_rdata;
-   logic        iccm_dma_rvalid;
-   logic        iccm_dma_ecc_error;
-   logic [2:0]  iccm_dma_rtag;
-   logic [63:0] iccm_dma_rdata;
-
-   logic        dma_dccm_stall_any;       // Stall the ld/st in decode if asserted
-   logic        dma_iccm_stall_any;       // Stall the fetch
-   logic        dccm_ready;
-   logic        iccm_ready;
-
-   logic        dma_pmu_dccm_read;
-   logic        dma_pmu_dccm_write;
-   logic        dma_pmu_any_read;
-   logic        dma_pmu_any_write;
-
-   logic        ifu_i0_icaf;
-   logic [1:0]  ifu_i0_icaf_type;
-
-
-   logic        ifu_i0_icaf_second;
-   logic        ifu_i0_dbecc;
-   logic        iccm_dma_sb_error;
-
-   eb1_br_pkt_t i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag;
-
-   logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index; // Fully associative btb error index
-
-
-   eb1_predict_pkt_t dec_i0_predict_p_d;
-
-   logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d;                // DEC predict fghr
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d;     // DEC predict index
-   logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d;               // DEC predict branch tag
-
-   // PIC ports
-   logic                  picm_wren;
-   logic                  picm_rden;
-   logic                  picm_mken;
-   logic [31:0]           picm_rdaddr;
-   logic [31:0]           picm_wraddr;
-   logic [31:0]           picm_wr_data;
-   logic [31:0]           picm_rd_data;
-
-   // feature disable from mfdc
-   logic  dec_tlu_external_ldfwd_disable; // disable external load forwarding
-   logic  dec_tlu_bpred_disable;
-   logic  dec_tlu_wb_coalescing_disable;
-   logic  dec_tlu_sideeffect_posted_disable;
-   logic [2:0] dec_tlu_dma_qos_prty;         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   logic  dec_tlu_misc_clk_override;
-   logic  dec_tlu_ifu_clk_override;
-   logic  dec_tlu_lsu_clk_override;
-   logic  dec_tlu_bus_clk_override;
-   logic  dec_tlu_pic_clk_override;
-   logic  dec_tlu_dccm_clk_override;
-   logic  dec_tlu_icm_clk_override;
-
-   logic  dec_tlu_picio_clk_override;
-
-   assign        dccm_clk_override = dec_tlu_dccm_clk_override;   // dccm memory
-   assign        icm_clk_override = dec_tlu_icm_clk_override;    // icache/iccm memory
-
-   // -----------------------DEBUG  START -------------------------------
-
-   logic [31:0]            dbg_cmd_addr;              // the address of the debug command to used by the core
-   logic [31:0]            dbg_cmd_wrdata;            // If the debug command is a write command, this has the data to be written to the CSR/GPR
-   logic                   dbg_cmd_valid;             // commad is being driven by the dbg module. One pulse. Only dirven when core_halted has been seen
-   logic                   dbg_cmd_write;             // 1: write command; 0: read_command
-   logic [1:0]             dbg_cmd_type;              // 0:gpr 1:csr 2: memory
-   logic [1:0]             dbg_cmd_size;              // size of the abstract mem access debug command
-   logic                   dbg_halt_req;              // Sticky signal indicating that the debug module wants to start the entering of debug mode ( start the halting sequence )
-   logic                   dbg_resume_req;            // Sticky signal indicating that the debug module wants to resume from debug mode
-   logic                   dbg_core_rst_l;            // Core reset from DM
-
-   logic                   core_dbg_cmd_done;         // Final muxed cmd done to debug
-   logic                   core_dbg_cmd_fail;         // Final muxed cmd done to debug
-   logic [31:0]            core_dbg_rddata;           // Final muxed cmd done to debug
-
-   logic                   dma_dbg_cmd_done;          // Abstarct memory command sent to dma is done
-   logic                   dma_dbg_cmd_fail;          // Abstarct memory command sent to dma failed
-   logic [31:0]            dma_dbg_rddata;            // Read data for abstract memory access
-
-   logic                   dbg_dma_bubble;            // Debug needs a bubble to send a valid
-   logic                   dma_dbg_ready;             // DMA is ready to accept debug request
-
-   logic [31:0]            dec_dbg_rddata;            // The core drives this data ( intercepts the pipe and sends it here )
-   logic                   dec_dbg_cmd_done;          // This will be treated like a valid signal
-   logic                   dec_dbg_cmd_fail;          // Abstract command failed
-   logic                   dec_tlu_mpc_halted_only;   // Only halted due to MPC
-   logic                   dec_tlu_dbg_halted;        // The core has finished the queiscing sequence. Sticks this signal high
-   logic                   dec_tlu_resume_ack;
-   logic                   dec_tlu_debug_mode;        // Core is in debug mode
-   logic                   dec_debug_wdata_rs1_d;
-   logic                   dec_tlu_force_halt;        // halt has been forced
-
-   logic [1:0]             dec_data_en;
-   logic [1:0]             dec_ctl_en;
-
-   // PMU Signals
-   logic                   exu_pmu_i0_br_misp;
-   logic                   exu_pmu_i0_br_ataken;
-   logic                   exu_pmu_i0_pc4;
-
-   logic                   lsu_pmu_load_external_m;
-   logic                   lsu_pmu_store_external_m;
-   logic                   lsu_pmu_misaligned_m;
-   logic                   lsu_pmu_bus_trxn;
-   logic                   lsu_pmu_bus_misaligned;
-   logic                   lsu_pmu_bus_error;
-   logic                   lsu_pmu_bus_busy;
-
-   logic                   ifu_pmu_fetch_stall;
-   logic                   ifu_pmu_ic_miss;
-   logic                   ifu_pmu_ic_hit;
-   logic                   ifu_pmu_bus_error;
-   logic                   ifu_pmu_bus_busy;
-   logic                   ifu_pmu_bus_trxn;
-
-   logic                   active_state;
-   logic                   free_clk;
-   logic                   active_clk;
-   logic                   dec_pause_state_cg;
-
-   logic                   lsu_nonblock_load_data_error;
-
-   logic [15:0]            ifu_i0_cinst;
-
-// fast interrupt
-   logic [31:2]            dec_tlu_meihap;
-   logic                   dec_extint_stall;
-
-   eb1_trace_pkt_t  trace_rv_trace_pkt;
-
-
-   logic                   lsu_fastint_stall_any;
-
-   logic [7:0]  pic_claimid;
-   logic [3:0]  pic_pl, dec_tlu_meicurpl, dec_tlu_meipt;
-   logic        mexintpend;
-   logic        mhwakeup;
-
-   logic        dma_active;
-
-
-   logic        pause_state;
-   logic        halt_state;
-
-   logic        dec_tlu_core_empty;
-   
-
-   assign pause_state = dec_pause_state_cg & ~(dma_active | lsu_active) & dec_tlu_core_empty;
-
-   assign halt_state = o_cpu_halt_status & ~(dma_active | lsu_active);
-
-
-   assign active_state = (~(halt_state | pause_state) | dec_tlu_flush_lower_r | dec_tlu_flush_lower_wb)  | dec_tlu_misc_clk_override;
-
-   rvoclkhdr free_cg2   ( .clk(clk), .en(1'b1),         .l1clk(free_l2clk), .* );
-   rvoclkhdr active_cg2 ( .clk(clk), .en(active_state), .l1clk(active_l2clk), .* );
-
-// all other clock headers are 1st level
-   rvoclkhdr free_cg1   ( .clk(free_l2clk),     .en(1'b1), .l1clk(free_clk), .* );
-   rvoclkhdr active_cg1 ( .clk(active_l2clk),   .en(1'b1), .l1clk(active_clk), .* );
-
-
-   assign core_dbg_cmd_done = dma_dbg_cmd_done | dec_dbg_cmd_done;
-   assign core_dbg_cmd_fail = dma_dbg_cmd_fail | dec_dbg_cmd_fail;
-   assign core_dbg_rddata[31:0] = dma_dbg_cmd_done ? dma_dbg_rddata[31:0] : dec_dbg_rddata[31:0];
-
-   eb1_dbg #(.pt(pt)) dbg (
-      .rst_l(core_rst_l),
-      .clk(free_l2clk),
-      .clk_override(dec_tlu_misc_clk_override),
-
-      // AXI signals
-      .sb_axi_awready(sb_axi_awready_int),
-      .sb_axi_wready(sb_axi_wready_int),
-      .sb_axi_bvalid(sb_axi_bvalid_int),
-      .sb_axi_bresp(sb_axi_bresp_int[1:0]),
-
-      .sb_axi_arready(sb_axi_arready_int),
-      .sb_axi_rvalid(sb_axi_rvalid_int),
-      .sb_axi_rdata(sb_axi_rdata_int[63:0]),
-      .sb_axi_rresp(sb_axi_rresp_int[1:0]),
-      .*
-   );
-
-`ifdef RV_ASSERT_ON
-      assert_fetch_indbghalt: assert #0 (~(ifu.ifc_fetch_req_f & dec.tlu.dbg_tlu_halted_f & ~dec.tlu.dcsr_single_step_running)) else $display("ERROR: Fetching in dBG halt!");
-`endif
-
-   // -----------------   DEBUG END -----------------------------
-
-   assign core_rst_l = rst_l & (dbg_core_rst_l | scan_mode);
-   // fetch
-   eb1_ifu #(.pt(pt)) ifu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .dec_tlu_flush_err_wb       (dec_tlu_flush_err_r      ),
-                            .dec_tlu_flush_noredir_wb   (dec_tlu_flush_noredir_r  ),
-                            .dec_tlu_fence_i_wb         (dec_tlu_fence_i_r        ),
-                            .dec_tlu_flush_leak_one_wb  (dec_tlu_flush_leak_one_r ),
-                            .dec_tlu_flush_lower_wb     (dec_tlu_flush_lower_r    ),
-
-                            // AXI signals
-                            .ifu_axi_arready(ifu_axi_arready_int),
-                            .ifu_axi_rvalid(ifu_axi_rvalid_int),
-                            .ifu_axi_rid(ifu_axi_rid_int[pt.IFU_BUS_TAG-1:0]),
-                            .ifu_axi_rdata(ifu_axi_rdata_int[63:0]),
-                            .ifu_axi_rresp(ifu_axi_rresp_int[1:0]),
-                            .exu_flush_final(exu_flush_final),
-
-                            .*
-                            );
-
-
-   eb1_dec #(.pt(pt)) dec (
-                            .clk(active_l2clk),
-                            .dbg_cmd_wrdata(dbg_cmd_wrdata[1:0]),
-                            .rst_l(core_rst_l),
-                            .i_cpu_halt_req(i_cpu_halt_req),
-                            .i_cpu_run_req(i_cpu_run_req),  
-                            .*
-                            );
-
-   eb1_exu #(.pt(pt)) exu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .*
-                            );
-
-   eb1_lsu #(.pt(pt)) lsu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .clk_override(dec_tlu_lsu_clk_override),
-                            .dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-
-                            // AXI signals
-                            .lsu_axi_awready(lsu_axi_awready_int),
-                            .lsu_axi_wready(lsu_axi_wready_int),
-                            .lsu_axi_bvalid(lsu_axi_bvalid_int),
-                            .lsu_axi_bid(lsu_axi_bid_int[pt.LSU_BUS_TAG-1:0]),
-                            .lsu_axi_bresp(lsu_axi_bresp_int[1:0]),
-
-                            .lsu_axi_arready(lsu_axi_arready_int),
-                            .lsu_axi_rvalid(lsu_axi_rvalid_int),
-                            .lsu_axi_rid(lsu_axi_rid_int[pt.LSU_BUS_TAG-1:0]),
-                            .lsu_axi_rdata(lsu_axi_rdata_int[63:0]),
-                            .lsu_axi_rresp(lsu_axi_rresp_int[1:0]),
-                            .lsu_axi_rlast(lsu_axi_rlast_int),
-
-                            .*
-
-                            );
-
-
-   eb1_pic_ctrl  #(.pt(pt)) pic_ctrl_inst (
-                                            .clk(free_l2clk),
-                                            .clk_override(dec_tlu_pic_clk_override),
-                                            .io_clk_override(dec_tlu_picio_clk_override),
-                                            .picm_mken (picm_mken),
-                                            .extintsrc_req({extintsrc_req[pt.PIC_TOTAL_INT:1],1'b0}),
-                                            .pl(pic_pl[3:0]),
-                                            .claimid(pic_claimid[7:0]),
-                                            .meicurpl(dec_tlu_meicurpl[3:0]),
-                                            .meipt(dec_tlu_meipt[3:0]),
-                                            .rst_l(core_rst_l),
-                                            .*);
-
-   eb1_dma_ctrl #(.pt(pt)) dma_ctrl (
-                                      .clk(free_l2clk),
-                                      .rst_l(core_rst_l),
-                                      .clk_override(dec_tlu_misc_clk_override),
-
-                                      // AXI signals
-                                      .dma_axi_awvalid(dma_axi_awvalid_int),
-                                      .dma_axi_awid(dma_axi_awid_int[pt.DMA_BUS_TAG-1:0]),
-                                      .dma_axi_awaddr(dma_axi_awaddr_int[31:0]),
-                                      .dma_axi_awsize(dma_axi_awsize_int[2:0]),
-                                      .dma_axi_wvalid(dma_axi_wvalid_int),
-                                      .dma_axi_wdata(dma_axi_wdata_int[63:0]),
-                                      .dma_axi_wstrb(dma_axi_wstrb_int[7:0]),
-                                      .dma_axi_bready(dma_axi_bready_int),
-
-                                      .dma_axi_arvalid(dma_axi_arvalid_int),
-                                      .dma_axi_arid(dma_axi_arid_int[pt.DMA_BUS_TAG-1:0]),
-                                      .dma_axi_araddr(dma_axi_araddr_int[31:0]),
-                                      .dma_axi_arsize(dma_axi_arsize_int[2:0]),
-                                      .dma_axi_rready(dma_axi_rready_int),
-
-                                      .*
-                                      );
-
-   if (pt.BUILD_AHB_LITE == 1) begin: Gen_AXI_To_AHB
-
-      // AXI4 -> AHB Gasket for LSU
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.LSU_BUS_TAG)) lsu_axi4_to_ahb (
-
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(lsu_bus_clk_en),
-         .dec_tlu_force_halt(dec_tlu_force_halt),
-
-         // AXI Write Channels
-         .axi_awvalid(lsu_axi_awvalid),
-         .axi_awready(lsu_axi_awready_ahb),
-         .axi_awid(lsu_axi_awid[pt.LSU_BUS_TAG-1:0]),
-         .axi_awaddr(lsu_axi_awaddr[31:0]),
-         .axi_awsize(lsu_axi_awsize[2:0]),
-         .axi_awprot(lsu_axi_awprot[2:0]),
-
-         .axi_wvalid(lsu_axi_wvalid),
-         .axi_wready(lsu_axi_wready_ahb),
-         .axi_wdata(lsu_axi_wdata[63:0]),
-         .axi_wstrb(lsu_axi_wstrb[7:0]),
-         .axi_wlast(lsu_axi_wlast),
-
-         .axi_bvalid(lsu_axi_bvalid_ahb),
-         .axi_bready(lsu_axi_bready),
-         .axi_bresp(lsu_axi_bresp_ahb[1:0]),
-         .axi_bid(lsu_axi_bid_ahb[pt.LSU_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(lsu_axi_arvalid),
-         .axi_arready(lsu_axi_arready_ahb),
-         .axi_arid(lsu_axi_arid[pt.LSU_BUS_TAG-1:0]),
-         .axi_araddr(lsu_axi_araddr[31:0]),
-         .axi_arsize(lsu_axi_arsize[2:0]),
-         .axi_arprot(lsu_axi_arprot[2:0]),
-
-         .axi_rvalid(lsu_axi_rvalid_ahb),
-         .axi_rready(lsu_axi_rready),
-         .axi_rid(lsu_axi_rid_ahb[pt.LSU_BUS_TAG-1:0]),
-         .axi_rdata(lsu_axi_rdata_ahb[63:0]),
-         .axi_rresp(lsu_axi_rresp_ahb[1:0]),
-         .axi_rlast(lsu_axi_rlast_ahb),
-
-         // AHB-LITE signals
-         .ahb_haddr(lsu_haddr[31:0]),
-         .ahb_hburst(lsu_hburst),
-         .ahb_hmastlock(lsu_hmastlock),
-         .ahb_hprot(lsu_hprot[3:0]),
-         .ahb_hsize(lsu_hsize[2:0]),
-         .ahb_htrans(lsu_htrans[1:0]),
-         .ahb_hwrite(lsu_hwrite),
-         .ahb_hwdata(lsu_hwdata[63:0]),
-
-         .ahb_hrdata(lsu_hrdata[63:0]),
-         .ahb_hready(lsu_hready),
-         .ahb_hresp(lsu_hresp),
-
-         .*
-      );
-
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.IFU_BUS_TAG)) ifu_axi4_to_ahb (
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(ifu_bus_clk_en),
-         .dec_tlu_force_halt(dec_tlu_force_halt),
-
-          // AHB-Lite signals
-         .ahb_haddr(haddr[31:0]),
-         .ahb_hburst(hburst),
-         .ahb_hmastlock(hmastlock),
-         .ahb_hprot(hprot[3:0]),
-         .ahb_hsize(hsize[2:0]),
-         .ahb_htrans(htrans[1:0]),
-         .ahb_hwrite(hwrite),
-         .ahb_hwdata(hwdata_nc[63:0]),
-
-         .ahb_hrdata(hrdata[63:0]),
-         .ahb_hready(hready),
-         .ahb_hresp(hresp),
-
-         // AXI Write Channels
-         .axi_awvalid(ifu_axi_awvalid),
-         .axi_awready(ifu_axi_awready_ahb),
-         .axi_awid(ifu_axi_awid[pt.IFU_BUS_TAG-1:0]),
-         .axi_awaddr(ifu_axi_awaddr[31:0]),
-         .axi_awsize(ifu_axi_awsize[2:0]),
-         .axi_awprot(ifu_axi_awprot[2:0]),
-
-         .axi_wvalid(ifu_axi_wvalid),
-         .axi_wready(ifu_axi_wready_ahb),
-         .axi_wdata(ifu_axi_wdata[63:0]),
-         .axi_wstrb(ifu_axi_wstrb[7:0]),
-         .axi_wlast(ifu_axi_wlast),
-
-         .axi_bvalid(ifu_axi_bvalid_ahb),
-         .axi_bready(1'b1),
-         .axi_bresp(ifu_axi_bresp_ahb[1:0]),
-         .axi_bid(ifu_axi_bid_ahb[pt.IFU_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(ifu_axi_arvalid),
-         .axi_arready(ifu_axi_arready_ahb),
-         .axi_arid(ifu_axi_arid[pt.IFU_BUS_TAG-1:0]),
-         .axi_araddr(ifu_axi_araddr[31:0]),
-         .axi_arsize(ifu_axi_arsize[2:0]),
-         .axi_arprot(ifu_axi_arprot[2:0]),
-
-         .axi_rvalid(ifu_axi_rvalid_ahb),
-         .axi_rready(ifu_axi_rready),
-         .axi_rid(ifu_axi_rid_ahb[pt.IFU_BUS_TAG-1:0]),
-         .axi_rdata(ifu_axi_rdata_ahb[63:0]),
-         .axi_rresp(ifu_axi_rresp_ahb[1:0]),
-         .axi_rlast(ifu_axi_rlast_ahb),
-         .*
-      );
-
-      // AXI4 -> AHB Gasket for System Bus
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.SB_BUS_TAG)) sb_axi4_to_ahb (
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(dbg_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(dbg_bus_clk_en),
-         .dec_tlu_force_halt(1'b0),
-
-         // AXI Write Channels
-         .axi_awvalid(sb_axi_awvalid),
-         .axi_awready(sb_axi_awready_ahb),
-         .axi_awid(sb_axi_awid[pt.SB_BUS_TAG-1:0]),
-         .axi_awaddr(sb_axi_awaddr[31:0]),
-         .axi_awsize(sb_axi_awsize[2:0]),
-         .axi_awprot(sb_axi_awprot[2:0]),
-
-         .axi_wvalid(sb_axi_wvalid),
-         .axi_wready(sb_axi_wready_ahb),
-         .axi_wdata(sb_axi_wdata[63:0]),
-         .axi_wstrb(sb_axi_wstrb[7:0]),
-         .axi_wlast(sb_axi_wlast),
-
-         .axi_bvalid(sb_axi_bvalid_ahb),
-         .axi_bready(sb_axi_bready),
-         .axi_bresp(sb_axi_bresp_ahb[1:0]),
-         .axi_bid(sb_axi_bid_ahb[pt.SB_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(sb_axi_arvalid),
-         .axi_arready(sb_axi_arready_ahb),
-         .axi_arid(sb_axi_arid[pt.SB_BUS_TAG-1:0]),
-         .axi_araddr(sb_axi_araddr[31:0]),
-         .axi_arsize(sb_axi_arsize[2:0]),
-         .axi_arprot(sb_axi_arprot[2:0]),
-
-         .axi_rvalid(sb_axi_rvalid_ahb),
-         .axi_rready(sb_axi_rready),
-         .axi_rid(sb_axi_rid_ahb[pt.SB_BUS_TAG-1:0]),
-         .axi_rdata(sb_axi_rdata_ahb[63:0]),
-         .axi_rresp(sb_axi_rresp_ahb[1:0]),
-         .axi_rlast(sb_axi_rlast_ahb),
-         // AHB-LITE signals
-         .ahb_haddr(sb_haddr[31:0]),
-         .ahb_hburst(sb_hburst),
-         .ahb_hmastlock(sb_hmastlock),
-         .ahb_hprot(sb_hprot[3:0]),
-         .ahb_hsize(sb_hsize[2:0]),
-         .ahb_htrans(sb_htrans[1:0]),
-         .ahb_hwrite(sb_hwrite),
-         .ahb_hwdata(sb_hwdata[63:0]),
-
-         .ahb_hrdata(sb_hrdata[63:0]),
-         .ahb_hready(sb_hready),
-         .ahb_hresp(sb_hresp),
-
-         .*
-      );
-
-      //AHB -> AXI4 Gasket for DMA
-      ahb_to_axi4 #(.pt(pt),
-                    .TAG(pt.DMA_BUS_TAG)) dma_ahb_to_axi4 (
-         .clk(free_l2clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(dma_bus_clk_en),
-
-         // AXI Write Channels
-         .axi_awvalid(dma_axi_awvalid_ahb),
-         .axi_awready(dma_axi_awready),
-         .axi_awid(dma_axi_awid_ahb[pt.DMA_BUS_TAG-1:0]),
-         .axi_awaddr(dma_axi_awaddr_ahb[31:0]),
-         .axi_awsize(dma_axi_awsize_ahb[2:0]),
-         .axi_awprot(dma_axi_awprot_ahb[2:0]),
-         .axi_awlen(dma_axi_awlen_ahb[7:0]),
-         .axi_awburst(dma_axi_awburst_ahb[1:0]),
-
-         .axi_wvalid(dma_axi_wvalid_ahb),
-         .axi_wready(dma_axi_wready),
-         .axi_wdata(dma_axi_wdata_ahb[63:0]),
-         .axi_wstrb(dma_axi_wstrb_ahb[7:0]),
-         .axi_wlast(dma_axi_wlast_ahb),
-
-         .axi_bvalid(dma_axi_bvalid),
-         .axi_bready(dma_axi_bready_ahb),
-         .axi_bresp(dma_axi_bresp[1:0]),
-         .axi_bid(dma_axi_bid[pt.DMA_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(dma_axi_arvalid_ahb),
-         .axi_arready(dma_axi_arready),
-         .axi_arid(dma_axi_arid_ahb[pt.DMA_BUS_TAG-1:0]),
-         .axi_araddr(dma_axi_araddr_ahb[31:0]),
-         .axi_arsize(dma_axi_arsize_ahb[2:0]),
-         .axi_arprot(dma_axi_arprot_ahb[2:0]),
-         .axi_arlen(dma_axi_arlen_ahb[7:0]),
-         .axi_arburst(dma_axi_arburst_ahb[1:0]),
-
-         .axi_rvalid(dma_axi_rvalid),
-         .axi_rready(dma_axi_rready_ahb),
-         .axi_rid(dma_axi_rid[pt.DMA_BUS_TAG-1:0]),
-         .axi_rdata(dma_axi_rdata[63:0]),
-         .axi_rresp(dma_axi_rresp[1:0]),
-
-          // AHB signals
-         .ahb_haddr(dma_haddr[31:0]),
-         .ahb_hburst(dma_hburst),
-         .ahb_hmastlock(dma_hmastlock),
-         .ahb_hprot(dma_hprot[3:0]),
-         .ahb_hsize(dma_hsize[2:0]),
-         .ahb_htrans(dma_htrans[1:0]),
-         .ahb_hwrite(dma_hwrite),
-         .ahb_hwdata(dma_hwdata[63:0]),
-
-         .ahb_hrdata(dma_hrdata[63:0]),
-         .ahb_hreadyout(dma_hreadyout),
-         .ahb_hresp(dma_hresp),
-         .ahb_hreadyin(dma_hreadyin),
-         .ahb_hsel(dma_hsel),
-         .*
-      );
-
-   end
-
-   // Drive the final AXI inputs
-   assign lsu_axi_awready_int                 = pt.BUILD_AHB_LITE ? lsu_axi_awready_ahb : lsu_axi_awready;
-   assign lsu_axi_wready_int                  = pt.BUILD_AHB_LITE ? lsu_axi_wready_ahb : lsu_axi_wready;
-   assign lsu_axi_bvalid_int                  = pt.BUILD_AHB_LITE ? lsu_axi_bvalid_ahb : lsu_axi_bvalid;
-   assign lsu_axi_bready_int                  = pt.BUILD_AHB_LITE ? lsu_axi_bready_ahb : lsu_axi_bready;
-   assign lsu_axi_bresp_int[1:0]              = pt.BUILD_AHB_LITE ? lsu_axi_bresp_ahb[1:0] : lsu_axi_bresp[1:0];
-   assign lsu_axi_bid_int[pt.LSU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? lsu_axi_bid_ahb[pt.LSU_BUS_TAG-1:0] : lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign lsu_axi_arready_int                 = pt.BUILD_AHB_LITE ? lsu_axi_arready_ahb : lsu_axi_arready;
-   assign lsu_axi_rvalid_int                  = pt.BUILD_AHB_LITE ? lsu_axi_rvalid_ahb : lsu_axi_rvalid;
-   assign lsu_axi_rid_int[pt.LSU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? lsu_axi_rid_ahb[pt.LSU_BUS_TAG-1:0] : lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign lsu_axi_rdata_int[63:0]             = pt.BUILD_AHB_LITE ? lsu_axi_rdata_ahb[63:0] : lsu_axi_rdata[63:0];
-   assign lsu_axi_rresp_int[1:0]              = pt.BUILD_AHB_LITE ? lsu_axi_rresp_ahb[1:0] : lsu_axi_rresp[1:0];
-   assign lsu_axi_rlast_int                   = pt.BUILD_AHB_LITE ? lsu_axi_rlast_ahb : lsu_axi_rlast;
-
-   assign ifu_axi_awready_int                 = pt.BUILD_AHB_LITE ? ifu_axi_awready_ahb : ifu_axi_awready;
-   assign ifu_axi_wready_int                  = pt.BUILD_AHB_LITE ? ifu_axi_wready_ahb : ifu_axi_wready;
-   assign ifu_axi_bvalid_int                  = pt.BUILD_AHB_LITE ? ifu_axi_bvalid_ahb : ifu_axi_bvalid;
-   assign ifu_axi_bready_int                  = pt.BUILD_AHB_LITE ? ifu_axi_bready_ahb : ifu_axi_bready;
-   assign ifu_axi_bresp_int[1:0]              = pt.BUILD_AHB_LITE ? ifu_axi_bresp_ahb[1:0] : ifu_axi_bresp[1:0];
-   assign ifu_axi_bid_int[pt.IFU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? ifu_axi_bid_ahb[pt.IFU_BUS_TAG-1:0] : ifu_axi_bid[pt.IFU_BUS_TAG-1:0];
-   assign ifu_axi_arready_int                 = pt.BUILD_AHB_LITE ? ifu_axi_arready_ahb : ifu_axi_arready;
-   assign ifu_axi_rvalid_int                  = pt.BUILD_AHB_LITE ? ifu_axi_rvalid_ahb : ifu_axi_rvalid;
-   assign ifu_axi_rid_int[pt.IFU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? ifu_axi_rid_ahb[pt.IFU_BUS_TAG-1:0] : ifu_axi_rid[pt.IFU_BUS_TAG-1:0];
-   assign ifu_axi_rdata_int[63:0]             = pt.BUILD_AHB_LITE ? ifu_axi_rdata_ahb[63:0] : ifu_axi_rdata[63:0];
-   assign ifu_axi_rresp_int[1:0]              = pt.BUILD_AHB_LITE ? ifu_axi_rresp_ahb[1:0] : ifu_axi_rresp[1:0];
-   assign ifu_axi_rlast_int                   = pt.BUILD_AHB_LITE ? ifu_axi_rlast_ahb : ifu_axi_rlast;
-
-   assign sb_axi_awready_int                  = pt.BUILD_AHB_LITE ? sb_axi_awready_ahb : sb_axi_awready;
-   assign sb_axi_wready_int                   = pt.BUILD_AHB_LITE ? sb_axi_wready_ahb : sb_axi_wready;
-   assign sb_axi_bvalid_int                   = pt.BUILD_AHB_LITE ? sb_axi_bvalid_ahb : sb_axi_bvalid;
-   assign sb_axi_bready_int                   = pt.BUILD_AHB_LITE ? sb_axi_bready_ahb : sb_axi_bready;
-   assign sb_axi_bresp_int[1:0]               = pt.BUILD_AHB_LITE ? sb_axi_bresp_ahb[1:0] : sb_axi_bresp[1:0];
-   assign sb_axi_bid_int[pt.SB_BUS_TAG-1:0]   = pt.BUILD_AHB_LITE ? sb_axi_bid_ahb[pt.SB_BUS_TAG-1:0] : sb_axi_bid[pt.SB_BUS_TAG-1:0];
-   assign sb_axi_arready_int                  = pt.BUILD_AHB_LITE ? sb_axi_arready_ahb : sb_axi_arready;
-   assign sb_axi_rvalid_int                   = pt.BUILD_AHB_LITE ? sb_axi_rvalid_ahb : sb_axi_rvalid;
-   assign sb_axi_rid_int[pt.SB_BUS_TAG-1:0]   = pt.BUILD_AHB_LITE ? sb_axi_rid_ahb[pt.SB_BUS_TAG-1:0] : sb_axi_rid[pt.SB_BUS_TAG-1:0];
-   assign sb_axi_rdata_int[63:0]              = pt.BUILD_AHB_LITE ? sb_axi_rdata_ahb[63:0] : sb_axi_rdata[63:0];
-   assign sb_axi_rresp_int[1:0]               = pt.BUILD_AHB_LITE ? sb_axi_rresp_ahb[1:0] : sb_axi_rresp[1:0];
-   assign sb_axi_rlast_int                    = pt.BUILD_AHB_LITE ? sb_axi_rlast_ahb : sb_axi_rlast;
-
-   assign dma_axi_awvalid_int                  = pt.BUILD_AHB_LITE ? dma_axi_awvalid_ahb : dma_axi_awvalid;
-   assign dma_axi_awid_int[pt.DMA_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? dma_axi_awid_ahb[pt.DMA_BUS_TAG-1:0] : dma_axi_awid[pt.DMA_BUS_TAG-1:0];
-   assign dma_axi_awaddr_int[31:0]             = pt.BUILD_AHB_LITE ? dma_axi_awaddr_ahb[31:0] : dma_axi_awaddr[31:0];
-   assign dma_axi_awsize_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_awsize_ahb[2:0] : dma_axi_awsize[2:0];
-   assign dma_axi_awprot_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_awprot_ahb[2:0] : dma_axi_awprot[2:0];
-   assign dma_axi_awlen_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_awlen_ahb[7:0] : dma_axi_awlen[7:0];
-   assign dma_axi_awburst_int[1:0]             = pt.BUILD_AHB_LITE ? dma_axi_awburst_ahb[1:0] : dma_axi_awburst[1:0];
-   assign dma_axi_wvalid_int                   = pt.BUILD_AHB_LITE ? dma_axi_wvalid_ahb : dma_axi_wvalid;
-   assign dma_axi_wdata_int[63:0]              = pt.BUILD_AHB_LITE ? dma_axi_wdata_ahb[63:0] : dma_axi_wdata;
-   assign dma_axi_wstrb_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_wstrb_ahb[7:0] : dma_axi_wstrb[7:0];
-   assign dma_axi_wlast_int                    = pt.BUILD_AHB_LITE ? dma_axi_wlast_ahb : dma_axi_wlast;
-   assign dma_axi_bready_int                   = pt.BUILD_AHB_LITE ? dma_axi_bready_ahb : dma_axi_bready;
-   assign dma_axi_arvalid_int                  = pt.BUILD_AHB_LITE ? dma_axi_arvalid_ahb : dma_axi_arvalid;
-   assign dma_axi_arid_int[pt.DMA_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? dma_axi_arid_ahb[pt.DMA_BUS_TAG-1:0] : dma_axi_arid[pt.DMA_BUS_TAG-1:0];
-   assign dma_axi_araddr_int[31:0]             = pt.BUILD_AHB_LITE ? dma_axi_araddr_ahb[31:0] : dma_axi_araddr[31:0];
-   assign dma_axi_arsize_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_arsize_ahb[2:0] : dma_axi_arsize[2:0];
-   assign dma_axi_arprot_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_arprot_ahb[2:0] : dma_axi_arprot[2:0];
-   assign dma_axi_arlen_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_arlen_ahb[7:0] : dma_axi_arlen[7:0];
-   assign dma_axi_arburst_int[1:0]             = pt.BUILD_AHB_LITE ? dma_axi_arburst_ahb[1:0] : dma_axi_arburst[1:0];
-   assign dma_axi_rready_int                   = pt.BUILD_AHB_LITE ? dma_axi_rready_ahb : dma_axi_rready;
-
- 
-if  (pt.BUILD_AHB_LITE == 1) begin
-`ifdef RV_ASSERT_ON
-   property ahb_trxn_aligned;
-     @(posedge clk) disable iff(~rst_l) (lsu_htrans[1:0] != 2'b0)  |-> ((lsu_hsize[2:0] == 3'h0)                              |
-                                                                        ((lsu_hsize[2:0] == 3'h1) & (lsu_haddr[0] == 1'b0))   |
-                                                                        ((lsu_hsize[2:0] == 3'h2) & (lsu_haddr[1:0] == 2'b0)) |
-                                                                        ((lsu_hsize[2:0] == 3'h3) & (lsu_haddr[2:0] == 3'b0)));
-   endproperty
-   assert_ahb_trxn_aligned: assert property (ahb_trxn_aligned) else
-     $display("Assertion ahb_trxn_aligned failed: lsu_htrans=2'h%h, lsu_hsize=3'h%h, lsu_haddr=32'h%h",lsu_htrans[1:0], lsu_hsize[2:0], lsu_haddr[31:0]);
-
-   property dma_trxn_aligned;
-     @(posedge clk) disable iff(~rst_l) (dma_htrans[1:0] != 2'b0)  |-> ((dma_hsize[2:0] == 3'h0)                              |
-                                                                        ((dma_hsize[2:0] == 3'h1) & (dma_haddr[0] == 1'b0))   |
-                                                                        ((dma_hsize[2:0] == 3'h2) & (dma_haddr[1:0] == 2'b0)) |
-                                                                        ((dma_hsize[2:0] == 3'h3) & (dma_haddr[2:0] == 3'b0)));
-   endproperty
-
-
-`endif
-   end // if (pt.BUILD_AHB_LITE == 1)
-
-
-      // unpack packet
-      // also need retires_p==3
-
-      assign trace_rv_i_insn_ip[31:0]     = trace_rv_trace_pkt.trace_rv_i_insn_ip[31:0];
-
-      assign trace_rv_i_address_ip[31:0]  = trace_rv_trace_pkt.trace_rv_i_address_ip[31:0];
-
-      assign trace_rv_i_valid_ip     = trace_rv_trace_pkt.trace_rv_i_valid_ip;
-
-      assign trace_rv_i_exception_ip = trace_rv_trace_pkt.trace_rv_i_exception_ip;
-
-      assign trace_rv_i_ecause_ip[4:0]    = trace_rv_trace_pkt.trace_rv_i_ecause_ip[4:0];
-
-      assign trace_rv_i_interrupt_ip = trace_rv_trace_pkt.trace_rv_i_interrupt_ip;
-
-      assign trace_rv_i_tval_ip[31:0]     = trace_rv_trace_pkt.trace_rv_i_tval_ip[31:0];
-			
-endmodule // eb1_brqrv
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_brqrv_wrapper.sv b/verilog/rtl/BrqRV_EB1/design/eb1_brqrv_wrapper.sv
deleted file mode 100644
index d5f9a69..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_brqrv_wrapper.sv
+++ /dev/null
@@ -1,766 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top wrapper file with eb1_brqrv/mem instantiated inside
-// Comments:
-//
-//********************************************************************************
-module eb1_brqrv_wrapper
-import eb1_pkg::*;
- #(
-`include "eb1_param.vh"
-)
-(
-   input logic			             vccd1,
-   input logic				     vssd1,
-   input logic                             clk,
-   input logic                             rst_l,
-   input logic                             dbg_rst_l,
-   input logic [31:1]                      rst_vec,
-   input logic                             nmi_int,
-   input logic [31:1]                      nmi_vec,
-   input logic [31:1]                      jtag_id,
-   input 				     uart_rx,
-
-
-   output logic [31:0]                     trace_rv_i_insn_ip,
-   output logic [31:0]                     trace_rv_i_address_ip,
-   output logic                            trace_rv_i_valid_ip,
-   output logic                            trace_rv_i_exception_ip,
-   output logic [4:0]                      trace_rv_i_ecause_ip,
-   output logic                            trace_rv_i_interrupt_ip,
-   output logic [31:0]                     trace_rv_i_tval_ip,
-
-   // Bus signals
-`ifdef RV_BUILD_AXI4
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   input  logic                            ifu_axi_awready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   input  logic                            ifu_axi_wready,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   input  logic                            ifu_axi_bvalid,
-   output logic                            ifu_axi_bready,
-   input  logic [1:0]                      ifu_axi_bresp,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-   input  logic                            ifu_axi_rlast,
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            sb_axi_awvalid,
-   input  logic                            sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_awid,
-   output logic [31:0]                     sb_axi_awaddr,
-   output logic [3:0]                      sb_axi_awregion,
-   output logic [7:0]                      sb_axi_awlen,
-   output logic [2:0]                      sb_axi_awsize,
-   output logic [1:0]                      sb_axi_awburst,
-   output logic                            sb_axi_awlock,
-   output logic [3:0]                      sb_axi_awcache,
-   output logic [2:0]                      sb_axi_awprot,
-   output logic [3:0]                      sb_axi_awqos,
-
-   output logic                            sb_axi_wvalid,
-   input  logic                            sb_axi_wready,
-   output logic [63:0]                     sb_axi_wdata,
-   output logic [7:0]                      sb_axi_wstrb,
-   output logic                            sb_axi_wlast,
-
-   input  logic                            sb_axi_bvalid,
-   output logic                            sb_axi_bready,
-   input  logic [1:0]                      sb_axi_bresp,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_bid,
-
-   // AXI Read Channels
-   output logic                            sb_axi_arvalid,
-   input  logic                            sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_arid,
-   output logic [31:0]                     sb_axi_araddr,
-   output logic [3:0]                      sb_axi_arregion,
-   output logic [7:0]                      sb_axi_arlen,
-   output logic [2:0]                      sb_axi_arsize,
-   output logic [1:0]                      sb_axi_arburst,
-   output logic                            sb_axi_arlock,
-   output logic [3:0]                      sb_axi_arcache,
-   output logic [2:0]                      sb_axi_arprot,
-   output logic [3:0]                      sb_axi_arqos,
-
-   input  logic                            sb_axi_rvalid,
-   output logic                            sb_axi_rready,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_rid,
-   input  logic [63:0]                     sb_axi_rdata,
-   input  logic [1:0]                      sb_axi_rresp,
-   input  logic                            sb_axi_rlast,
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   input  logic                            dma_axi_awvalid,
-   output logic                            dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]       dma_axi_awid,
-   input  logic [31:0]                     dma_axi_awaddr,
-   input  logic [2:0]                      dma_axi_awsize,
-   input  logic [2:0]                      dma_axi_awprot,
-   input  logic [7:0]                      dma_axi_awlen,
-   input  logic [1:0]                      dma_axi_awburst,
-
-
-   input  logic                            dma_axi_wvalid,
-   output logic                            dma_axi_wready,
-   input  logic [63:0]                     dma_axi_wdata,
-   input  logic [7:0]                      dma_axi_wstrb,
-   input  logic                            dma_axi_wlast,
-
-   output logic                            dma_axi_bvalid,
-   input  logic                            dma_axi_bready,
-   output logic [1:0]                      dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]       dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                            dma_axi_arvalid,
-   output logic                            dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]       dma_axi_arid,
-   input  logic [31:0]                     dma_axi_araddr,
-   input  logic [2:0]                      dma_axi_arsize,
-   input  logic [2:0]                      dma_axi_arprot,
-   input  logic [7:0]                      dma_axi_arlen,
-   input  logic [1:0]                      dma_axi_arburst,
-
-   output logic                            dma_axi_rvalid,
-   input  logic                            dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]       dma_axi_rid,
-   output logic [63:0]                     dma_axi_rdata,
-   output logic [1:0]                      dma_axi_rresp,
-   output logic                            dma_axi_rlast,
-`endif
-
-`ifdef RV_BUILD_AHB_LITE
- //// AHB LITE BUS
-   output logic [31:0]                     haddr,
-   output logic [2:0]                      hburst,
-   output logic                            hmastlock,
-   output logic [3:0]                      hprot,
-   output logic [2:0]                      hsize,
-   output logic [1:0]                      htrans,
-   output logic                            hwrite,
-
-   input logic [63:0]                      hrdata,
-   input logic                             hready,
-   input logic                             hresp,
-
-   // LSU AHB Master
-   output logic [31:0]                     lsu_haddr,
-   output logic [2:0]                      lsu_hburst,
-   output logic                            lsu_hmastlock,
-   output logic [3:0]                      lsu_hprot,
-   output logic [2:0]                      lsu_hsize,
-   output logic [1:0]                      lsu_htrans,
-   output logic                            lsu_hwrite,
-   output logic [63:0]                     lsu_hwdata,
-
-   input logic [63:0]                      lsu_hrdata,
-   input logic                             lsu_hready,
-   input logic                             lsu_hresp,
-   // Debug Syster Bus AHB
-   output logic [31:0]                     sb_haddr,
-   output logic [2:0]                      sb_hburst,
-   output logic                            sb_hmastlock,
-   output logic [3:0]                      sb_hprot,
-   output logic [2:0]                      sb_hsize,
-   output logic [1:0]                      sb_htrans,
-   output logic                            sb_hwrite,
-   output logic [63:0]                     sb_hwdata,
-
-   input  logic [63:0]                     sb_hrdata,
-   input  logic                            sb_hready,
-   input  logic                            sb_hresp,
-
-   // DMA Slave
-   input logic                             dma_hsel,
-   input logic [31:0]                      dma_haddr,
-   input logic [2:0]                       dma_hburst,
-   input logic                             dma_hmastlock,
-   input logic [3:0]                       dma_hprot,
-   input logic [2:0]                       dma_hsize,
-   input logic [1:0]                       dma_htrans,
-   input logic                             dma_hwrite,
-   input logic [63:0]                      dma_hwdata,
-   input logic                             dma_hreadyin,
-
-   output logic [63:0]                     dma_hrdata,
-   output logic                            dma_hreadyout,
-   output logic                            dma_hresp,
-`endif
-   // clk ratio signals
-   input logic                             lsu_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             ifu_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             dbg_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             dma_bus_clk_en, // Clock ratio b/w cpu core clk & AHB slave interface
-
- // all of these test inputs are brought to top-level; must be tied off based on usage by physical design (ie. icache or not, iccm or not, dccm or not)
-
-   input                                   eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
-   input                                   eb1_ccm_ext_in_pkt_t  [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,
-   input                                   eb1_ic_data_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,
-   input                                   eb1_ic_tag_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0] ic_tag_ext_in_pkt,
-
-   input logic                             timer_int,
-   input logic                             soft_int,
-   input logic [pt.PIC_TOTAL_INT:1]        extintsrc_req,
-
-   output logic                            dec_tlu_perfcnt0, // toggles when slot0 perf counter 0 has an event inc
-   output logic                            dec_tlu_perfcnt1,
-   output logic                            dec_tlu_perfcnt2,
-   output logic                            dec_tlu_perfcnt3,
-
-   // ports added by the soc team
-   input logic                             jtag_tck,    // JTAG clk
-   input logic                             jtag_tms,    // JTAG TMS
-   input logic                             jtag_tdi,    // JTAG tdi
-   input logic                             jtag_trst_n, // JTAG Reset
-   output logic                            jtag_tdo,    // JTAG TDO
-
-   input logic [31:4] core_id,
-
-   // external MPC halt/run interface
-   input logic                             mpc_debug_halt_req, // Async halt request
-   input logic                             mpc_debug_run_req,  // Async run request
-   input logic                             mpc_reset_run_req,  // Run/halt after reset
-   output logic                            mpc_debug_halt_ack, // Halt ack
-   output logic                            mpc_debug_run_ack,  // Run ack
-   output logic                            debug_brkpt_status, // debug breakpoint
-
-   input logic                             i_cpu_halt_req,      // Async halt req to CPU
-   output logic                            o_cpu_halt_ack,      // core response to halt
-   output logic                            o_cpu_halt_status,   // 1'b1 indicates core is halted
-   output logic                            o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-   input logic                             i_cpu_run_req, // Async restart req to CPU
-   output logic                            o_cpu_run_ack, // Core response to run req
-   input logic                             scan_mode,     // To enable scan mode
-   input logic                             mbist_mode,     // to enable mbist
-   input [15:0] 			    CLKS_PER_BIT
-);
-
-   logic                             active_l2clk;
-   logic                             free_l2clk;
-
-   // DCCM ports
-   logic         dccm_wren;
-   logic         dccm_rden;
-   logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo;
-   logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi;
-   logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo;
-   logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi;
-
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_lo;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_hi;
-
-   // PIC ports
-
-   // Icache & Itag ports
-   logic [31:1]  ic_rw_addr;
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_wr_en  ;     // Which way to write
-   logic         ic_rd_en ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_tag_valid;   // Valid from the I$ tag valid outside (in flops).
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_rd_hit;      // ic_rd_hit[3:0]
-   logic         ic_tag_perr;                       // Ic tag parity error
-
-   logic [pt.ICACHE_INDEX_HI:3]  ic_debug_addr;     // Read/Write addresss to the Icache.
-   logic         ic_debug_rd_en;                    // Icache debug rd
-   logic         ic_debug_wr_en;                    // Icache debug wr
-   logic         ic_debug_tag_array;                // Debug tag array
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_debug_way;   // Debug way. Rd or Wr.
-
-   logic [25:0]  ictag_debug_rd_data;               // Debug icache tag.
-   logic [pt.ICACHE_BANKS_WAY-1:0][70:0]  ic_wr_data;
-   logic [63:0]  ic_rd_data;
-   logic [70:0]  ic_debug_rd_data;                  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   logic [70:0]  ic_debug_wr_data;                  // Debug wr cache.
-
-   logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr;       // ecc error per bank
-   logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr;       // parity error per bank
-
-   logic [63:0]  ic_premux_data;
-   logic         ic_sel_premux_data;
-
-   // ICCM ports
-   logic [pt.ICCM_BITS-1:1]    iccm_rw_addr;
-   logic           iccm_wren;
-   logic           iccm_rden;
-   logic [2:0]     iccm_wr_size;
-   logic [77:0]    iccm_wr_data;
-   logic           iccm_buf_correct_ecc;
-   logic           iccm_correction_state;
-
-   logic [63:0]    iccm_rd_data;
-   logic [77:0]    iccm_rd_data_ecc;
- 
-   logic	 core_rst;
-   logic        core_rst_l;                         // Core reset including rst_l and dbg_rst_l
-   logic        jtag_tdoEn;
-
-   logic        dccm_clk_override;
-   logic        icm_clk_override;
-   logic        dec_tlu_core_ecc_disable;
-
-
-   // zero out the signals not presented at the wrapper instantiation level
-`ifdef RV_BUILD_AXI4
-
- //// AHB LITE BUS
-   logic [31:0]              haddr;
-   logic [2:0]               hburst;
-   logic                     hmastlock;
-   logic [3:0]               hprot;
-   logic [2:0]               hsize;
-   logic [1:0]               htrans;
-   logic                     hwrite;
-
-   logic [63:0]              hrdata;
-   logic                     hready;
-   logic                     hresp;
-
-   // LSU AHB Master
-   logic [31:0]              lsu_haddr;
-   logic [2:0]               lsu_hburst;
-   logic                     lsu_hmastlock;
-   logic [3:0]               lsu_hprot;
-   logic [2:0]               lsu_hsize;
-   logic [1:0]               lsu_htrans;
-   logic                     lsu_hwrite;
-   logic [63:0]              lsu_hwdata;
-
-   logic [63:0]              lsu_hrdata;
-   logic                     lsu_hready;
-   logic                     lsu_hresp;
-   // Debug Syster Bus AHB
-   logic [31:0]              sb_haddr;
-   logic [2:0]               sb_hburst;
-   logic                     sb_hmastlock;
-   logic [3:0]               sb_hprot;
-   logic [2:0]               sb_hsize;
-   logic [1:0]               sb_htrans;
-   logic                     sb_hwrite;
-   logic [63:0]              sb_hwdata;
-
-    logic [63:0]             sb_hrdata;
-    logic                    sb_hready;
-    logic                    sb_hresp;
-
-   // DMA Slave
-   logic                     dma_hsel;
-   logic [31:0]              dma_haddr;
-   logic [2:0]               dma_hburst;
-   logic                     dma_hmastlock;
-   logic [3:0]               dma_hprot;
-   logic [2:0]               dma_hsize;
-   logic [1:0]               dma_htrans;
-   logic                     dma_hwrite;
-   logic [63:0]              dma_hwdata;
-   logic                     dma_hreadyin;
-
-   logic [63:0]              dma_hrdata;
-   logic                     dma_hreadyout;
-   logic                     dma_hresp;
-
-
-
-   // AHB
-   assign  hrdata[63:0]                           = '0;
-   assign  hready                                 = '0;
-   assign  hresp                                  = '0;
-   // LSU
-   assign  lsu_hrdata[63:0]                       = '0;
-   assign  lsu_hready                             = '0;
-   assign  lsu_hresp                              = '0;
-   // Debu
-   assign  sb_hrdata[63:0]                        = '0;
-   assign  sb_hready                              = '0;
-   assign  sb_hresp                               = '0;
-
-   // DMA
-   assign  dma_hsel                               = '0;
-   assign  dma_haddr[31:0]                        = '0;
-   assign  dma_hburst[2:0]                        = '0;
-   assign  dma_hmastlock                          = '0;
-   assign  dma_hprot[3:0]                         = '0;
-   assign  dma_hsize[2:0]                         = '0;
-   assign  dma_htrans[1:0]                        = '0;
-   assign  dma_hwrite                             = '0;
-   assign  dma_hwdata[63:0]                       = '0;
-   assign  dma_hreadyin                           = '0;
-
-`endif //  `ifdef RV_BUILD_AXI4
-
-
-`ifdef RV_BUILD_AHB_LITE
-   wire                            lsu_axi_awvalid;
-   wire                            lsu_axi_awready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid;
-   wire [31:0]                     lsu_axi_awaddr;
-   wire [3:0]                      lsu_axi_awregion;
-   wire [7:0]                      lsu_axi_awlen;
-   wire [2:0]                      lsu_axi_awsize;
-   wire [1:0]                      lsu_axi_awburst;
-   wire                            lsu_axi_awlock;
-   wire [3:0]                      lsu_axi_awcache;
-   wire [2:0]                      lsu_axi_awprot;
-   wire [3:0]                      lsu_axi_awqos;
-
-   wire                            lsu_axi_wvalid;
-   wire                            lsu_axi_wready;
-   wire [63:0]                     lsu_axi_wdata;
-   wire [7:0]                      lsu_axi_wstrb;
-   wire                            lsu_axi_wlast;
-
-   wire                            lsu_axi_bvalid;
-   wire                            lsu_axi_bready;
-   wire [1:0]                      lsu_axi_bresp;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid;
-
-   // AXI Read Channels
-   wire                            lsu_axi_arvalid;
-   wire                            lsu_axi_arready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid;
-   wire [31:0]                     lsu_axi_araddr;
-   wire [3:0]                      lsu_axi_arregion;
-   wire [7:0]                      lsu_axi_arlen;
-   wire [2:0]                      lsu_axi_arsize;
-   wire [1:0]                      lsu_axi_arburst;
-   wire                            lsu_axi_arlock;
-   wire [3:0]                      lsu_axi_arcache;
-   wire [2:0]                      lsu_axi_arprot;
-   wire [3:0]                      lsu_axi_arqos;
-
-   wire                            lsu_axi_rvalid;
-   wire                            lsu_axi_rready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid;
-   wire [63:0]                     lsu_axi_rdata;
-   wire [1:0]                      lsu_axi_rresp;
-   wire                            lsu_axi_rlast;
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   wire                            ifu_axi_awvalid;
-   wire                            ifu_axi_awready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid;
-   wire [31:0]                     ifu_axi_awaddr;
-   wire [3:0]                      ifu_axi_awregion;
-   wire [7:0]                      ifu_axi_awlen;
-   wire [2:0]                      ifu_axi_awsize;
-   wire [1:0]                      ifu_axi_awburst;
-   wire                            ifu_axi_awlock;
-   wire [3:0]                      ifu_axi_awcache;
-   wire [2:0]                      ifu_axi_awprot;
-   wire [3:0]                      ifu_axi_awqos;
-
-   wire                            ifu_axi_wvalid;
-   wire                            ifu_axi_wready;
-   wire [63:0]                     ifu_axi_wdata;
-   wire [7:0]                      ifu_axi_wstrb;
-   wire                            ifu_axi_wlast;
-
-   wire                            ifu_axi_bvalid;
-   wire                            ifu_axi_bready;
-   wire [1:0]                      ifu_axi_bresp;
-   wire [pt.IFU_BUS_TAG-1:0]      ifu_axi_bid;
-
-   // AXI Read Channels
-   wire                            ifu_axi_arvalid;
-   wire                            ifu_axi_arready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid;
-   wire [31:0]                     ifu_axi_araddr;
-   wire [3:0]                      ifu_axi_arregion;
-   wire [7:0]                      ifu_axi_arlen;
-   wire [2:0]                      ifu_axi_arsize;
-   wire [1:0]                      ifu_axi_arburst;
-   wire                            ifu_axi_arlock;
-   wire [3:0]                      ifu_axi_arcache;
-   wire [2:0]                      ifu_axi_arprot;
-   wire [3:0]                      ifu_axi_arqos;
-
-   wire                            ifu_axi_rvalid;
-   wire                            ifu_axi_rready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid;
-   wire [63:0]                     ifu_axi_rdata;
-   wire [1:0]                      ifu_axi_rresp;
-   wire                            ifu_axi_rlast;
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   wire                            sb_axi_awvalid;
-   wire                            sb_axi_awready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_awid;
-   wire [31:0]                     sb_axi_awaddr;
-   wire [3:0]                      sb_axi_awregion;
-   wire [7:0]                      sb_axi_awlen;
-   wire [2:0]                      sb_axi_awsize;
-   wire [1:0]                      sb_axi_awburst;
-   wire                            sb_axi_awlock;
-   wire [3:0]                      sb_axi_awcache;
-   wire [2:0]                      sb_axi_awprot;
-   wire [3:0]                      sb_axi_awqos;
-
-   wire                            sb_axi_wvalid;
-   wire                            sb_axi_wready;
-   wire [63:0]                     sb_axi_wdata;
-   wire [7:0]                      sb_axi_wstrb;
-   wire                            sb_axi_wlast;
-
-   wire                            sb_axi_bvalid;
-   wire                            sb_axi_bready;
-   wire [1:0]                      sb_axi_bresp;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_bid;
-
-   // AXI Read Channels
-   wire                            sb_axi_arvalid;
-   wire                            sb_axi_arready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_arid;
-   wire [31:0]                     sb_axi_araddr;
-   wire [3:0]                      sb_axi_arregion;
-   wire [7:0]                      sb_axi_arlen;
-   wire [2:0]                      sb_axi_arsize;
-   wire [1:0]                      sb_axi_arburst;
-   wire                            sb_axi_arlock;
-   wire [3:0]                      sb_axi_arcache;
-   wire [2:0]                      sb_axi_arprot;
-   wire [3:0]                      sb_axi_arqos;
-
-   wire                            sb_axi_rvalid;
-   wire                            sb_axi_rready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_rid;
-   wire [63:0]                     sb_axi_rdata;
-   wire [1:0]                      sb_axi_rresp;
-   wire                            sb_axi_rlast;
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   wire                         dma_axi_awvalid;
-   wire                         dma_axi_awready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_awid;
-   wire [31:0]                  dma_axi_awaddr;
-   wire [2:0]                   dma_axi_awsize;
-   wire [2:0]                   dma_axi_awprot;
-   wire [7:0]                   dma_axi_awlen;
-   wire [1:0]                   dma_axi_awburst;
-
-
-   wire                         dma_axi_wvalid;
-   wire                         dma_axi_wready;
-   wire [63:0]                  dma_axi_wdata;
-   wire [7:0]                   dma_axi_wstrb;
-   wire                         dma_axi_wlast;
-
-   wire                         dma_axi_bvalid;
-   wire                         dma_axi_bready;
-   wire [1:0]                   dma_axi_bresp;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_bid;
-
-   // AXI Read Channels
-   wire                         dma_axi_arvalid;
-   wire                         dma_axi_arready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_arid;
-   wire [31:0]                  dma_axi_araddr;
-   wire [2:0]                   dma_axi_arsize;
-   wire [2:0]                   dma_axi_arprot;
-   wire [7:0]                   dma_axi_arlen;
-   wire [1:0]                   dma_axi_arburst;
-
-   wire                         dma_axi_rvalid;
-   wire                         dma_axi_rready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_rid;
-   wire [63:0]                  dma_axi_rdata;
-   wire [1:0]                   dma_axi_rresp;
-   wire                         dma_axi_rlast;
-
-   // AXI
-   assign ifu_axi_awready = 1'b1;
-   assign ifu_axi_wready = 1'b1;
-   assign ifu_axi_bvalid = '0;
-   assign ifu_axi_bresp[1:0] = '0;
-   assign ifu_axi_bid[pt.IFU_BUS_TAG-1:0] = '0;
-
-`endif //  `ifdef RV_BUILD_AHB_LITE
-
-   logic                   dmi_reg_en;
-   logic [6:0]             dmi_reg_addr;
-   logic                   dmi_reg_wr_en;
-   logic [31:0]            dmi_reg_wdata;
-   logic [31:0]            dmi_reg_rdata;
-   logic rx_dv_i;
-   logic [7:0] rx_byte_i;
-   logic iccm_instr_we;
-   logic [13:0] iccm_instr_addr;
-   logic [31:0] iccm_instr_wdata;
-   // UART Receiver
-
-
-   // Instantiate the eb1_brqrv core
-   eb1_brqrv #(.pt(pt)) brqrv (
-                                .clk(clk),
-                                .rst_l(core_rst),
-                                .*
-                                );
-
-   // Instantiate the mem
-   eb1_mem  #(.pt(pt)) mem (
-                             .clk(active_l2clk),
-                             .rst_l(rst_l),
-                             .iccm_rw_addr((core_rst) ? iccm_rw_addr : iccm_instr_addr[10:0]),
-                             .iccm_wren((core_rst) ? iccm_wren : iccm_instr_we),
-                             .iccm_wr_data((core_rst) ? iccm_wr_data : {7'h0,iccm_instr_wdata,7'h0,iccm_instr_wdata}),
-                             .iccm_wr_size((core_rst) ? iccm_wr_size : 3'b010),
-                             .*
-                             );
-   
-   eb1_iccm_controller iccm_controller(
-		.clk_i(clk),
-		.rst_ni(rst_l),
-		.rx_dv_i(rx_dv_i),
-		.rx_byte_i(rx_byte_i),
-		.we_o(iccm_instr_we),
-		.addr_o(iccm_instr_addr),
-		.wdata_o(iccm_instr_wdata),
-		.reset_o(core_rst)
-	);                          
-   eb1_uart_rx_prog uart_rx_m(
-		.i_Clock(clk),
-		.rst_ni(rst_l),
-		.i_Rx_Serial(uart_rx),
-		.CLKS_PER_BIT(CLKS_PER_BIT),
-		.o_Rx_DV(rx_dv_i),
-		.o_Rx_Byte(rx_byte_i)
-	);
- 
-
-   //  JTAG/DMI instance
-   dmi_wrapper  dmi_wrapper (
-    // JTAG signals
-    .trst_n      (jtag_trst_n),     // JTAG reset
-    .tck         (jtag_tck),        // JTAG clock
-    .tms         (jtag_tms),        // Test mode select
-    .tdi         (jtag_tdi),        // Test Data Input
-    .tdo         (jtag_tdo),        // Test Data Output
-    .tdoEnable   (),
-    // Processor Signals
-    .core_rst_n  (dbg_rst_l),       // Debug reset, active low
-    .core_clk    (clk),             // Core clock
-    .jtag_id     (jtag_id),         // JTAG ID
-    .rd_data     (dmi_reg_rdata),   // Read data from  Processor
-    .reg_wr_data (dmi_reg_wdata),   // Write data to Processor
-    .reg_wr_addr (dmi_reg_addr),    // Write address to Processor
-    .reg_en      (dmi_reg_en),      // Write interface bit to Processor
-    .reg_wr_en   (dmi_reg_wr_en),   // Write enable to Processor
-    .dmi_hard_reset   ()
-   );
-
-`ifdef RV_ASSERT_ON
-// to avoid internal assertions failure at time 0
-initial begin
-    $assertoff(0, brqrv);
-    @ (negedge clk) $asserton(0, brqrv);
-end
-`endif
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dbg.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dbg.sv
deleted file mode 100644
index 72a03f6..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dbg.sv
+++ /dev/null
@@ -1,753 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file to control the debug mode
-// Comments: Responsible to put the rest of the core in quiesce mode,
-//           Send the commands/address. sends WrData and Recieve read Data.
-//           And then Resume the core to do the normal mode
-// Author  :
-//********************************************************************************
-module eb1_dbg
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   // outputs to the core for command and data interface
-   output logic [31:0]                 dbg_cmd_addr,
-   output logic [31:0]                 dbg_cmd_wrdata,
-   output logic                        dbg_cmd_valid,
-   output logic                        dbg_cmd_write,             // 1: write command, 0: read_command
-   output logic [1:0]                  dbg_cmd_type,              // 0:gpr 1:csr 2: memory
-   output logic [1:0]                  dbg_cmd_size,              // size of the abstract mem access debug command
-   output logic                        dbg_core_rst_l,            // core reset from dm
-
-   // inputs back from the core/dec
-   input logic [31:0]                  core_dbg_rddata,
-   input logic                         core_dbg_cmd_done,         // This will be treated like a valid signal
-   input logic                         core_dbg_cmd_fail,         // Exception during command run
-
-   // Signals to dma to get a bubble
-   output logic                        dbg_dma_bubble,            // Debug needs a bubble to send a valid
-   input  logic                        dma_dbg_ready,             // DMA is ready to accept debug request
-
-   // interface with the rest of the core to halt/resume handshaking
-   output logic                        dbg_halt_req,              // This is a pulse
-   output logic                        dbg_resume_req,            // Debug sends a resume requests. Pulse
-   input  logic                        dec_tlu_debug_mode,        // Core is in debug mode
-   input  logic                        dec_tlu_dbg_halted,        // The core has finished the queiscing sequence. Core is halted now
-   input  logic                        dec_tlu_mpc_halted_only,   // Only halted due to MPC
-   input  logic                        dec_tlu_resume_ack,        // core sends back an ack for the resume (pulse)
-
-   // inputs from the JTAG
-   input logic                         dmi_reg_en,                // read or write
-   input logic [6:0]                   dmi_reg_addr,              // address of DM register
-   input logic                         dmi_reg_wr_en,             // write instruction
-   input logic [31:0]                  dmi_reg_wdata,             // write data
-
-   // output
-   output logic [31:0]                 dmi_reg_rdata,             // read data
-
-   // AXI Write Channels
-   output logic                        sb_axi_awvalid,
-   input  logic                        sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_awid,
-   output logic [31:0]                 sb_axi_awaddr,
-   output logic [3:0]                  sb_axi_awregion,
-   output logic [7:0]                  sb_axi_awlen,
-   output logic [2:0]                  sb_axi_awsize,
-   output logic [1:0]                  sb_axi_awburst,
-   output logic                        sb_axi_awlock,
-   output logic [3:0]                  sb_axi_awcache,
-   output logic [2:0]                  sb_axi_awprot,
-   output logic [3:0]                  sb_axi_awqos,
-
-   output logic                        sb_axi_wvalid,
-   input  logic                        sb_axi_wready,
-   output logic [63:0]                 sb_axi_wdata,
-   output logic [7:0]                  sb_axi_wstrb,
-   output logic                        sb_axi_wlast,
-
-   input  logic                        sb_axi_bvalid,
-   output logic                        sb_axi_bready,
-   input  logic [1:0]                  sb_axi_bresp,
-
-   // AXI Read Channels
-   output logic                        sb_axi_arvalid,
-   input  logic                        sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_arid,
-   output logic [31:0]                 sb_axi_araddr,
-   output logic [3:0]                  sb_axi_arregion,
-   output logic [7:0]                  sb_axi_arlen,
-   output logic [2:0]                  sb_axi_arsize,
-   output logic [1:0]                  sb_axi_arburst,
-   output logic                        sb_axi_arlock,
-   output logic [3:0]                  sb_axi_arcache,
-   output logic [2:0]                  sb_axi_arprot,
-   output logic [3:0]                  sb_axi_arqos,
-
-   input  logic                        sb_axi_rvalid,
-   output logic                        sb_axi_rready,
-   input  logic [63:0]                 sb_axi_rdata,
-   input  logic [1:0]                  sb_axi_rresp,
-
-   input logic                         dbg_bus_clk_en,
-
-   // general inputs
-   input logic                         clk,
-   input logic                         rst_l,        // This includes both top rst and debug rst
-   input logic                         dbg_rst_l,
-   input logic                         clk_override,
-   input logic                         scan_mode
-);
-
-
-   typedef enum logic [3:0] {IDLE=4'h0, HALTING=4'h1, HALTED=4'h2, CORE_CMD_START=4'h3, CORE_CMD_WAIT=4'h4, SB_CMD_START=4'h5, SB_CMD_SEND=4'h6, SB_CMD_RESP=4'h7, CMD_DONE=4'h8, RESUMING=4'h9} state_t;
-   typedef enum logic [3:0] {SBIDLE=4'h0, WAIT_RD=4'h1, WAIT_WR=4'h2, CMD_RD=4'h3, CMD_WR=4'h4, CMD_WR_ADDR=4'h5, CMD_WR_DATA=4'h6, RSP_RD=4'h7, RSP_WR=4'h8, DONE=4'h9} sb_state_t;
-
-   state_t       dbg_state;
-   state_t       dbg_nxtstate;
-   logic         dbg_state_en;
-   // these are the registers that the debug module implements
-   logic [31:0]  dmstatus_reg;        // [26:24]-dmerr, [17:16]-resume ack, [9:8]-halted, [3:0]-version
-   logic [31:0]  dmcontrol_reg;       // dmcontrol register has only 6 bits implemented. 31: haltreq, 30: resumereq, 29: haltreset, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   logic [31:0]  command_reg;
-   logic [31:0]  abstractcs_reg;      // bits implemted are [12] - busy and [10:8]= command error
-   logic [31:0]  haltsum0_reg;
-   logic [31:0]  data0_reg;
-   logic [31:0]  data1_reg;
-
-   // data 0
-   logic [31:0]  data0_din;
-   logic         data0_reg_wren, data0_reg_wren0, data0_reg_wren1, data0_reg_wren2;
-   // data 1
-   logic [31:0]  data1_din;
-   logic         data1_reg_wren, data1_reg_wren0, data1_reg_wren1;
-   // abstractcs
-   logic         abstractcs_busy_wren;
-   logic         abstractcs_busy_din;
-   logic [2:0]   abstractcs_error_din;
-   logic         abstractcs_error_sel0, abstractcs_error_sel1, abstractcs_error_seb1, abstractcs_error_sel3, abstractcs_error_sel4, abstractcs_error_sel5, abstractcs_error_sel6;
-   logic         dbg_sb_bus_error;
-   // abstractauto
-   logic         abstractauto_reg_wren;
-   logic [1:0]   abstractauto_reg;
-
-   // dmstatus
-   logic         dmstatus_resumeack_wren;
-   logic         dmstatus_resumeack_din;
-   logic         dmstatus_haveresetn_wren;
-   logic         dmstatus_resumeack;
-   logic         dmstatus_unavail;
-   logic         dmstatus_running;
-   logic         dmstatus_halted;
-   logic         dmstatus_havereset, dmstatus_haveresetn;
-
-   // dmcontrol
-   logic         resumereq;
-   logic         dmcontrol_wren, dmcontrol_wren_Q;
-   // command
-   logic         execute_command_ns, execute_command;
-   logic         command_wren, command_regno_wren;
-   logic         command_transfer_din;
-   logic         command_postexec_din;
-   logic [31:0]  command_din;
-   logic [3:0]   dbg_cmd_addr_incr;
-   logic [31:0]  dbg_cmd_curr_addr;
-   logic [31:0]  dbg_cmd_next_addr;
-
-   // needed to send the read data back for dmi reads
-   logic  [31:0] dmi_reg_rdata_din;
-
-   sb_state_t    sb_state;
-   sb_state_t    sb_nxtstate;
-   logic         sb_state_en;
-
-   //System bus section
-   logic              sbcs_wren;
-   logic              sbcs_sbbusy_wren;
-   logic              sbcs_sbbusy_din;
-   logic              sbcs_sbbusyerror_wren;
-   logic              sbcs_sbbusyerror_din;
-
-   logic              sbcs_sberror_wren;
-   logic [2:0]        sbcs_sberror_din;
-   logic              sbcs_unaligned;
-   logic              sbcs_illegal_size;
-   logic [19:15]      sbcs_reg_int;
-
-   // data
-   logic              sbdata0_reg_wren0;
-   logic              sbdata0_reg_wren1;
-   logic              sbdata0_reg_wren;
-   logic [31:0]       sbdata0_din;
-
-   logic              sbdata1_reg_wren0;
-   logic              sbdata1_reg_wren1;
-   logic              sbdata1_reg_wren;
-   logic [31:0]       sbdata1_din;
-
-   logic              sbaddress0_reg_wren0;
-   logic              sbaddress0_reg_wren1;
-   logic              sbaddress0_reg_wren;
-   logic [31:0]       sbaddress0_reg_din;
-   logic [3:0]        sbaddress0_incr;
-   logic              sbreadonaddr_access;
-   logic              sbreadondata_access;
-   logic              sbdata0wr_access;
-
-   logic              sb_abmem_cmd_done_in, sb_abmem_data_done_in;
-   logic              sb_abmem_cmd_done_en, sb_abmem_data_done_en;
-   logic              sb_abmem_cmd_done, sb_abmem_data_done;
-   logic [31:0]       abmem_addr;
-   logic              abmem_addr_in_dccm_region, abmem_addr_in_iccm_region, abmem_addr_in_pic_region;
-   logic              abmem_addr_core_local;
-   logic              abmem_addr_external;
-
-   logic              sb_cmd_pending, sb_abmem_cmd_pending;
-   logic              sb_abmem_cmd_write;
-   logic [2:0]        sb_abmem_cmd_size;
-   logic [31:0]       sb_abmem_cmd_addr;
-   logic [31:0]       sb_abmem_cmd_wdata;
-
-   logic [2:0]        sb_cmd_size;
-   logic [31:0]       sb_cmd_addr;
-   logic [63:0]       sb_cmd_wdata;
-
-   logic              sb_bus_cmd_read, sb_bus_cmd_write_addr, sb_bus_cmd_write_data;
-   logic              sb_bus_rsp_read, sb_bus_rsp_write;
-   logic              sb_bus_rsp_error;
-   logic [63:0]       sb_bus_rdata;
-
-   //registers
-   logic [31:0]       sbcs_reg;
-   logic [31:0]       sbaddress0_reg;
-   logic [31:0]       sbdata0_reg;
-   logic [31:0]       sbdata1_reg;
-
-   logic              sb_abmem_cmd_arvalid, sb_abmem_cmd_awvalid, sb_abmem_cmd_wvalid;
-   logic              sb_abmem_read_pend;
-   logic              sb_cmd_awvalid, sb_cmd_wvalid, sb_cmd_arvalid;
-   logic              sb_read_pend;
-   logic [31:0]       sb_axi_addr;
-   logic [63:0]       sb_axi_wrdata;
-   logic [2:0]        sb_axi_size;
-
-   logic              dbg_dm_rst_l;
-
-   //clken
-   logic              dbg_free_clken;
-   logic              dbg_free_clk;
-
-   logic              sb_free_clken;
-   logic              sb_free_clk;
-
-   // clocking
-   // used for the abstract commands.
-   assign dbg_free_clken  = dmi_reg_en | execute_command | (dbg_state != IDLE) | dbg_state_en | dec_tlu_dbg_halted | dec_tlu_mpc_halted_only | dec_tlu_debug_mode | dbg_halt_req | clk_override;
-
-   // used for the system bus
-   assign sb_free_clken = dmi_reg_en | execute_command | sb_state_en | (sb_state != SBIDLE) | clk_override;
-
-   rvoclkhdr dbg_free_cgc    (.en(dbg_free_clken), .l1clk(dbg_free_clk), .*);
-   rvoclkhdr sb_free_cgc     (.en(sb_free_clken), .l1clk(sb_free_clk), .*);
-
-   // end clocking section
-
-   // Reset logic
-   assign dbg_dm_rst_l = dbg_rst_l & (dmcontrol_reg[0] | scan_mode);
-   assign dbg_core_rst_l = ~dmcontrol_reg[1] | scan_mode;
-
-   // system bus register
-   // sbcs[31:29], sbcs - [22]:sbbusyerror, [21]: sbbusy, [20]:sbreadonaddr, [19:17]:sbaccess, [16]:sbautoincrement, [15]:sbreadondata, [14:12]:sberror, sbsize=32, 128=0, 64/32/16/8 are legal
-   assign        sbcs_reg[31:29] = 3'b1;
-   assign        sbcs_reg[28:23] = '0;
-   assign        sbcs_reg[19:15] = {sbcs_reg_int[19], ~sbcs_reg_int[18], sbcs_reg_int[17:15]};
-   assign        sbcs_reg[11:5]  = 7'h20;
-   assign        sbcs_reg[4:0]   = 5'b01111;
-   assign        sbcs_wren = (dmi_reg_addr ==  7'h38) & dmi_reg_en & dmi_reg_wr_en & (sb_state == SBIDLE);
-   assign        sbcs_sbbusyerror_wren = (sbcs_wren & dmi_reg_wdata[22]) |
-                                         (sbcs_reg[21] & dmi_reg_en & ((dmi_reg_wr_en & (dmi_reg_addr == 7'h39)) | (dmi_reg_addr == 7'h3c) | (dmi_reg_addr == 7'h3d)));
-   assign        sbcs_sbbusyerror_din = ~(sbcs_wren & dmi_reg_wdata[22]);   // Clear when writing one
-
-   rvdffs #(1) sbcs_sbbusyerror_reg  (.din(sbcs_sbbusyerror_din),  .dout(sbcs_reg[22]),    .en(sbcs_sbbusyerror_wren), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbbusy_reg       (.din(sbcs_sbbusy_din),       .dout(sbcs_reg[21]),    .en(sbcs_sbbusy_wren),      .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbreadonaddr_reg (.din(dmi_reg_wdata[20]),     .dout(sbcs_reg[20]),    .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(5) sbcs_misc_reg         (.din({dmi_reg_wdata[19],~dmi_reg_wdata[18],dmi_reg_wdata[17:15]}),
-                                      .dout(sbcs_reg_int[19:15]), .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(3) sbcs_error_reg        (.din(sbcs_sberror_din[2:0]), .dout(sbcs_reg[14:12]), .en(sbcs_sberror_wren),     .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sbcs_unaligned =    ((sbcs_reg[19:17] == 3'b001) &  sbaddress0_reg[0]) |
-                              ((sbcs_reg[19:17] == 3'b010) &  (|sbaddress0_reg[1:0])) |
-                              ((sbcs_reg[19:17] == 3'b011) &  (|sbaddress0_reg[2:0]));
-
-   assign sbcs_illegal_size = sbcs_reg[19];    // Anything bigger than 64 bits is illegal
-
-   assign sbaddress0_incr[3:0] = ({4{(sbcs_reg[19:17] == 3'h0)}} &  4'b0001) |
-                                 ({4{(sbcs_reg[19:17] == 3'h1)}} &  4'b0010) |
-                                 ({4{(sbcs_reg[19:17] == 3'h2)}} &  4'b0100) |
-                                 ({4{(sbcs_reg[19:17] == 3'h3)}} &  4'b1000);
-
-   // sbdata
-   assign        sbdata0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);   // write data only when single read is 0
-   assign        sbdata0_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata0_reg_wren    = sbdata0_reg_wren0 | sbdata0_reg_wren1;
-
-   assign        sbdata1_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3d);   // write data only when single read is 0;
-   assign        sbdata1_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata1_reg_wren    = sbdata1_reg_wren0 | sbdata1_reg_wren1;
-
-   assign        sbdata0_din[31:0]   = ({32{sbdata0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata0_reg_wren1}} & sb_bus_rdata[31:0]);
-   assign        sbdata1_din[31:0]   = ({32{sbdata1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata1_reg_wren1}} & sb_bus_rdata[63:32]);
-
-   rvdffe #(32)    dbg_sbdata0_reg    (.*, .din(sbdata0_din[31:0]), .dout(sbdata0_reg[31:0]), .en(sbdata0_reg_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(32)    dbg_sbdata1_reg    (.*, .din(sbdata1_din[31:0]), .dout(sbdata1_reg[31:0]), .en(sbdata1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-    // sbaddress
-   assign        sbaddress0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39);
-   assign        sbaddress0_reg_wren    = sbaddress0_reg_wren0 | sbaddress0_reg_wren1;
-   assign        sbaddress0_reg_din[31:0]= ({32{sbaddress0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                           ({32{sbaddress0_reg_wren1}} & (sbaddress0_reg[31:0] + {28'b0,sbaddress0_incr[3:0]}));
-   rvdffe #(32)    dbg_sbaddress0_reg    (.*, .din(sbaddress0_reg_din[31:0]), .dout(sbaddress0_reg[31:0]), .en(sbaddress0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   assign sbreadonaddr_access = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39) & sbcs_reg[20];   // if readonaddr is set the next command will start upon writing of addr0
-   assign sbreadondata_access = dmi_reg_en & ~dmi_reg_wr_en & (dmi_reg_addr == 7'h3c) & sbcs_reg[15];  // if readondata is set the next command will start upon reading of data0
-   assign sbdata0wr_access  = dmi_reg_en &  dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);                   // write to sbdata0 will start write command to system bus
-
-   // memory mapped registers
-   // dmcontrol register has only 5 bits implemented. 31: haltreq, 30: resumereq, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   // rest all the bits are zeroed out
-   // dmactive flop is reset based on core rst_l, all other flops use dm_rst_l
-   assign dmcontrol_wren      = (dmi_reg_addr ==  7'h10) & dmi_reg_en & dmi_reg_wr_en;
-   assign dmcontrol_reg[29]   = '0;
-   assign dmcontrol_reg[27:2] = '0;
-   assign resumereq           = dmcontrol_reg[30] & ~dmcontrol_reg[31] & dmcontrol_wren_Q;
-   rvdffs #(4) dmcontrolff (.din({dmi_reg_wdata[31:30],dmi_reg_wdata[28],dmi_reg_wdata[1]}), .dout({dmcontrol_reg[31:30], dmcontrol_reg[28], dmcontrol_reg[1]}), .en(dmcontrol_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs #(1) dmcontrol_dmactive_ff (.din(dmi_reg_wdata[0]), .dout(dmcontrol_reg[0]), .en(dmcontrol_wren), .rst_l(dbg_rst_l), .clk(dbg_free_clk));
-   rvdff  #(1) dmcontrol_wrenff(.din(dmcontrol_wren), .dout(dmcontrol_wren_Q), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // dmstatus register bits that are implemented
-   // [19:18]-havereset,[17:16]-resume ack, [9:8]-halted, [3:0]-version
-   // rest all the bits are zeroed out
-   //assign dmstatus_wren       = (dmi_reg_addr[31:0] ==  32'h11) & dmi_reg_en;
-   assign dmstatus_reg[31:20] = '0;
-   assign dmstatus_reg[19:18] = {2{dmstatus_havereset}};
-   assign dmstatus_reg[15:14] = '0;
-   assign dmstatus_reg[7]     = '1;
-   assign dmstatus_reg[6:4]   = '0;
-   assign dmstatus_reg[17:16] = {2{dmstatus_resumeack}};
-   assign dmstatus_reg[13:12] = {2{dmstatus_unavail}};
-   assign dmstatus_reg[11:10] = {2{dmstatus_running}};
-   assign dmstatus_reg[9:8]   = {2{dmstatus_halted}};
-   assign dmstatus_reg[3:0]   = 4'h2;
-
-   assign dmstatus_resumeack_wren = ((dbg_state == RESUMING) & dec_tlu_resume_ack) | (dmstatus_resumeack & resumereq & dmstatus_halted);
-   assign dmstatus_resumeack_din  = (dbg_state == RESUMING) & dec_tlu_resume_ack;
-
-   assign dmstatus_haveresetn_wren  = (dmi_reg_addr == 7'h10) & dmi_reg_wdata[28] & dmi_reg_en & dmi_reg_wr_en & dmcontrol_reg[0];   // clear the havereset
-   assign dmstatus_havereset        = ~dmstatus_haveresetn;
-
-   assign dmstatus_unavail = dmcontrol_reg[1] | ~rst_l;
-   assign dmstatus_running = ~(dmstatus_unavail | dmstatus_halted);
-
-   rvdffs  #(1) dmstatus_resumeack_reg  (.din(dmstatus_resumeack_din), .dout(dmstatus_resumeack), .en(dmstatus_resumeack_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff   #(1) dmstatus_halted_reg     (.din(dec_tlu_dbg_halted & ~dec_tlu_mpc_halted_only),     .dout(dmstatus_halted), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs  #(1) dmstatus_haveresetn_reg (.din(1'b1), .dout(dmstatus_haveresetn), .en(dmstatus_haveresetn_wren), .rst_l(rst_l), .clk(dbg_free_clk));
-
-   // haltsum0 register
-   assign haltsum0_reg[31:1] = '0;
-   assign haltsum0_reg[0]    = dmstatus_halted;
-
-   // abstractcs register
-   // bits implemted are [12] - busy and [10:8]= command error
-   assign        abstractcs_reg[31:13] = '0;
-   assign        abstractcs_reg[11]    = '0;
-   assign        abstractcs_reg[7:4]   = '0;
-   assign        abstractcs_reg[3:0]   = 4'h2;    // One data register
-
-   assign        abstractcs_error_sel0 = abstractcs_reg[12] & ~(|abstractcs_reg[10:8]) & dmi_reg_en & ((dmi_reg_wr_en & ((dmi_reg_addr == 7'h16) | (dmi_reg_addr == 7'h17)) | (dmi_reg_addr == 7'h18)) |
-                                                                                                       (dmi_reg_addr == 7'h4) | (dmi_reg_addr == 7'h5));
-   assign        abstractcs_error_sel1 = execute_command & ~(|abstractcs_reg[10:8]) &
-                                         ((~((command_reg[31:24] == 8'b0) | (command_reg[31:24] == 8'h2)))                      |   // Illegal command
-                                          (((command_reg[22:20] == 3'b011) | (command_reg[22])) & (command_reg[31:24] == 8'h2)) |   // Illegal abstract memory size (can't be DW or higher)
-                                          ((command_reg[22:20] != 3'b010) & ((command_reg[31:24] == 8'h0) & command_reg[17]))   |   // Illegal abstract reg size
-                                          ((command_reg[31:24] == 8'h0) & command_reg[18]));                                          //postexec for abstract register access
-   assign        abstractcs_error_seb1 = ((core_dbg_cmd_done & core_dbg_cmd_fail) |                   // exception from core
-                                          (execute_command & (command_reg[31:24] == 8'h0) &           // unimplemented regs
-                                                (((command_reg[15:12] == 4'h1) & (command_reg[11:5] != 0)) | (command_reg[15:13] != 0)))) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel3 = execute_command & (dbg_state != HALTED) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel4 = dbg_sb_bus_error & dbg_bus_clk_en & ~(|abstractcs_reg[10:8]);// sb bus error for abstract memory command
-   assign        abstractcs_error_sel5 = execute_command & (command_reg[31:24] == 8'h2) & ~(|abstractcs_reg[10:8]) &
-                                         (((command_reg[22:20] == 3'b001) & data1_reg[0]) | ((command_reg[22:20] == 3'b010) & (|data1_reg[1:0])));  //Unaligned address for abstract memory
-   assign        abstractcs_error_sel6 = (dmi_reg_addr ==  7'h16) & dmi_reg_en & dmi_reg_wr_en;
-
-   assign        abstractcs_error_din[2:0]  = abstractcs_error_sel0 ? 3'b001 :                  // writing command or abstractcs while a command was executing. Or accessing data0
-                                                 abstractcs_error_sel1 ? 3'b010 :               // writing a illegal command type to cmd field of command
-                                                    abstractcs_error_seb1 ? 3'b011 :            // exception while running command
-                                                       abstractcs_error_sel3 ? 3'b100 :         // writing a comnand when not in the halted state
-                                                          abstractcs_error_sel4 ? 3'b101 :      // Bus error
-                                                             abstractcs_error_sel5 ? 3'b111 :   // unaligned or illegal size abstract memory command
-                                                                abstractcs_error_sel6 ? (~dmi_reg_wdata[10:8] & abstractcs_reg[10:8]) :   //W1C
-                                                                                        abstractcs_reg[10:8];                             //hold
-
-   rvdffs #(1) dmabstractcs_busy_reg  (.din(abstractcs_busy_din), .dout(abstractcs_reg[12]), .en(abstractcs_busy_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff  #(3) dmabstractcs_error_reg (.din(abstractcs_error_din[2:0]), .dout(abstractcs_reg[10:8]), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-    // abstract auto reg
-   assign abstractauto_reg_wren  = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h18) & ~abstractcs_reg[12];
-   rvdffs #(2) dbg_abstractauto_reg (.*, .din(dmi_reg_wdata[1:0]), .dout(abstractauto_reg[1:0]), .en(abstractauto_reg_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // command register - implemented all the bits in this register
-   // command[16] = 1: write, 0: read
-   assign execute_command_ns = command_wren |
-                               (dmi_reg_en & ~abstractcs_reg[12] & (((dmi_reg_addr == 7'h4) & abstractauto_reg[0]) | ((dmi_reg_addr == 7'h5) & abstractauto_reg[1])));
-   assign command_wren = (dmi_reg_addr ==  7'h17) & dmi_reg_en & dmi_reg_wr_en;
-   assign command_regno_wren = command_wren | ((command_reg[31:24] == 8'h0) & command_reg[19] & (dbg_state == CMD_DONE) & ~(|abstractcs_reg[10:8]));  // aarpostincrement
-   assign command_postexec_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[18];
-   assign command_transfer_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[17];
-   assign command_din[31:16] = {dmi_reg_wdata[31:24],1'b0,dmi_reg_wdata[22:19],command_postexec_din,command_transfer_din, dmi_reg_wdata[16]};
-   assign command_din[15:0] =  command_wren ? dmi_reg_wdata[15:0] : dbg_cmd_next_addr[15:0];
-   rvdff  #(1)  execute_commandff   (.*, .din(execute_command_ns), .dout(execute_command), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_reg       (.*, .din(command_din[31:16]), .dout(command_reg[31:16]), .en(command_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_regno_reg (.*, .din(command_din[15:0]),  .dout(command_reg[15:0]),  .en(command_regno_wren), .rst_l(dbg_dm_rst_l));
-
-  // data0 reg
-   assign data0_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h4) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data0_reg_wren1   = core_dbg_cmd_done & (dbg_state == CORE_CMD_WAIT) & ~command_reg[16];
-   assign data0_reg_wren    = data0_reg_wren0 | data0_reg_wren1 | data0_reg_wren2;
-
-   assign data0_din[31:0]   = ({32{data0_reg_wren0}} & dmi_reg_wdata[31:0])   |
-                              ({32{data0_reg_wren1}} & core_dbg_rddata[31:0]) |
-                              ({32{data0_reg_wren2}} & sb_bus_rdata[31:0]);
-
-   rvdffe #(32) dbg_data0_reg (.*, .din(data0_din[31:0]), .dout(data0_reg[31:0]), .en(data0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   // data 1
-   assign data1_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h5) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data1_reg_wren1   = (dbg_state == CMD_DONE) & (command_reg[31:24] == 8'h2) & command_reg[19] & ~(|abstractcs_reg[10:8]);   // aampostincrement
-   assign data1_reg_wren    = data1_reg_wren0 | data1_reg_wren1;
-
-   assign data1_din[31:0]   = ({32{data1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                              ({32{data1_reg_wren1}} & dbg_cmd_next_addr[31:0]);
-
-   rvdffe #(32)    dbg_data1_reg    (.*, .din(data1_din[31:0]), .dout(data1_reg[31:0]), .en(data1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   rvdffs #(1) sb_abmem_cmd_doneff  (.din(sb_abmem_cmd_done_in),  .dout(sb_abmem_cmd_done),  .en(sb_abmem_cmd_done_en),  .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-   rvdffs #(1) sb_abmem_data_doneff (.din(sb_abmem_data_done_in), .dout(sb_abmem_data_done), .en(sb_abmem_data_done_en), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-
-   // FSM to control the debug mode entry, command send/recieve, and Resume flow.
-   always_comb begin
-      dbg_nxtstate            = IDLE;
-      dbg_state_en            = 1'b0;
-      abstractcs_busy_wren    = 1'b0;
-      abstractcs_busy_din     = 1'b0;
-      dbg_halt_req            = dmcontrol_wren_Q & dmcontrol_reg[31];      // single pulse output to the core. Need to drive every time this register is written since core might be halted due to MPC
-      dbg_resume_req          = 1'b0;                                      // single pulse output to the core
-      dbg_sb_bus_error        = 1'b0;
-      data0_reg_wren2         = 1'b0;
-      sb_abmem_cmd_done_in    = 1'b0;
-      sb_abmem_data_done_in   = 1'b0;
-      sb_abmem_cmd_done_en    = 1'b0;
-      sb_abmem_data_done_en   = 1'b0;
-
-       case (dbg_state)
-            IDLE: begin
-                     dbg_nxtstate         = (dmstatus_reg[9] | dec_tlu_mpc_halted_only) ? HALTED : HALTING;         // initiate the halt command to the core
-                     dbg_state_en         = dmcontrol_reg[31] | dmstatus_reg[9] | dec_tlu_mpc_halted_only;      // when the jtag writes the halt bit in the DM register, OR when the status indicates H
-                     dbg_halt_req         = dmcontrol_reg[31];               // only when jtag has written the halt_req bit in the control. Removed debug mode qualification during MPC changes
-            end
-            HALTING : begin
-                     dbg_nxtstate         = HALTED;                                 // Goto HALTED once the core sends an ACK
-                     dbg_state_en         = dmstatus_reg[9] | dec_tlu_mpc_halted_only;     // core indicates halted
-            end
-            HALTED: begin
-                     // wait for halted to go away before send to resume. Else start of new command
-                     dbg_nxtstate         = dmstatus_reg[9] ? (resumereq ? RESUMING : (((command_reg[31:24] == 8'h2) & abmem_addr_external) ? SB_CMD_START : CORE_CMD_START)) :
-                                                                                    (dmcontrol_reg[31] ? HALTING : IDLE);       // This is MPC halted case
-                     dbg_state_en         = (dmstatus_reg[9] & resumereq) | execute_command | ~(dmstatus_reg[9] | dec_tlu_mpc_halted_only);
-                     abstractcs_busy_wren = dbg_state_en & ((dbg_nxtstate == CORE_CMD_START) | (dbg_nxtstate == SB_CMD_START));                 // write busy when a new command was written by jtag
-                     abstractcs_busy_din  = 1'b1;
-                     dbg_resume_req       = dbg_state_en & (dbg_nxtstate == RESUMING);                       // single cycle pulse to core if resuming
-            end
-            CORE_CMD_START: begin
-                     // Don't execute the command if cmderror or transfer=0 for abstract register access
-                     dbg_nxtstate         = ((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17])) ? CMD_DONE : CORE_CMD_WAIT;     // new command sent to the core
-                     dbg_state_en         = dbg_cmd_valid | (|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]);
-            end
-            CORE_CMD_WAIT: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = core_dbg_cmd_done;                   // go to done state for one cycle after completing current command
-            end
-            SB_CMD_START: begin
-                     dbg_nxtstate         = (|abstractcs_reg[10:8]) ? CMD_DONE : SB_CMD_SEND;
-                     dbg_state_en         = (dbg_bus_clk_en & ~sb_cmd_pending) | (|abstractcs_reg[10:8]);
-            end
-            SB_CMD_SEND: begin
-                     sb_abmem_cmd_done_in = 1'b1;
-                     sb_abmem_data_done_in= 1'b1;
-                     sb_abmem_cmd_done_en = (sb_bus_cmd_read | sb_bus_cmd_write_addr) & dbg_bus_clk_en;
-                     sb_abmem_data_done_en= (sb_bus_cmd_read | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-                     dbg_nxtstate         = SB_CMD_RESP;
-                     dbg_state_en         = (sb_abmem_cmd_done | sb_abmem_cmd_done_en) & (sb_abmem_data_done | sb_abmem_data_done_en) & dbg_bus_clk_en;
-            end
-            SB_CMD_RESP: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = (sb_bus_rsp_read | sb_bus_rsp_write) & dbg_bus_clk_en;
-                     dbg_sb_bus_error     = (sb_bus_rsp_read | sb_bus_rsp_write) & sb_bus_rsp_error & dbg_bus_clk_en;
-                     data0_reg_wren2      = dbg_state_en & ~sb_abmem_cmd_write & ~dbg_sb_bus_error;
-            end
-            CMD_DONE: begin
-                     dbg_nxtstate         = HALTED;
-                     dbg_state_en         = 1'b1;
-                     abstractcs_busy_wren = dbg_state_en;                    // remove the busy bit from the abstracts ( bit 12 )
-                     abstractcs_busy_din  = 1'b0;
-                     sb_abmem_cmd_done_in = 1'b0;
-                     sb_abmem_data_done_in= 1'b0;
-                     sb_abmem_cmd_done_en = 1'b1;
-                     sb_abmem_data_done_en= 1'b1;
-            end
-            RESUMING : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = dmstatus_reg[17];             // resume ack has been updated in the dmstatus register
-           end
-           default : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = 1'b0;
-                     abstractcs_busy_wren    = 1'b0;
-                     abstractcs_busy_din     = 1'b0;
-                     dbg_halt_req            = 1'b0;         // single pulse output to the core
-                     dbg_resume_req          = 1'b0;         // single pulse output to the core
-                     dbg_sb_bus_error        = 1'b0;
-                     data0_reg_wren2         = 1'b0;
-                     sb_abmem_cmd_done_in    = 1'b0;
-                     sb_abmem_data_done_in   = 1'b0;
-                     sb_abmem_cmd_done_en    = 1'b0;
-                     sb_abmem_data_done_en   = 1'b0;
-          end
-         endcase
-   end // always_comb begin
-
-   assign dmi_reg_rdata_din[31:0] = ({32{dmi_reg_addr == 7'h4}}  & data0_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h5}}  & data1_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h10}} & {2'b0,dmcontrol_reg[29],1'b0,dmcontrol_reg[27:0]})  |  // Read0 to Write only bits
-                                    ({32{dmi_reg_addr == 7'h11}} & dmstatus_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h16}} & abstractcs_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h17}} & command_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h18}} & {30'h0,abstractauto_reg[1:0]})    |
-                                    ({32{dmi_reg_addr == 7'h40}} & haltsum0_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h38}} & sbcs_reg[31:0])       |
-                                    ({32{dmi_reg_addr == 7'h39}} & sbaddress0_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h3c}} & sbdata0_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h3d}} & sbdata1_reg[31:0]);
-
-
-   rvdffs #($bits(state_t)) dbg_state_reg    (.din(dbg_nxtstate), .dout({dbg_state}), .en(dbg_state_en), .rst_l(dbg_dm_rst_l & rst_l), .clk(dbg_free_clk));
-   rvdffe #(32)             dmi_rddata_reg   (.din(dmi_reg_rdata_din[31:0]), .dout(dmi_reg_rdata[31:0]), .en(dmi_reg_en), .rst_l(dbg_dm_rst_l), .clk(clk), .*);
-
-   assign abmem_addr[31:0]      = data1_reg[31:0];
-   assign abmem_addr_core_local = (abmem_addr_in_dccm_region | abmem_addr_in_iccm_region | abmem_addr_in_pic_region);
-   assign abmem_addr_external   = ~abmem_addr_core_local;
-
-   assign abmem_addr_in_dccm_region = (abmem_addr[31:28] == pt.DCCM_REGION) & pt.DCCM_ENABLE;
-   assign abmem_addr_in_iccm_region = (abmem_addr[31:28] == pt.ICCM_REGION) & pt.ICCM_ENABLE;
-   assign abmem_addr_in_pic_region  = (abmem_addr[31:28] == pt.PIC_REGION);
-
-   // interface for the core
-   assign dbg_cmd_addr[31:0]    = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {20'b0, command_reg[11:0]};
-   assign dbg_cmd_wrdata[31:0]  = data0_reg[31:0];
-   assign dbg_cmd_valid         = (dbg_state == CORE_CMD_START) & ~((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]) | ((command_reg[31:24] == 8'h2) & abmem_addr_external)) & dma_dbg_ready;
-   assign dbg_cmd_write         = command_reg[16];
-   assign dbg_cmd_type[1:0]     = (command_reg[31:24] == 8'h2) ? 2'b10 : {1'b0, (command_reg[15:12] == 4'b0)};
-   assign dbg_cmd_size[1:0]     = command_reg[21:20];
-
-   assign dbg_cmd_addr_incr[3:0]  = (command_reg[31:24] == 8'h2) ? (4'h1 << sb_abmem_cmd_size[1:0]) : 4'h1;
-   assign dbg_cmd_curr_addr[31:0] = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {16'b0, command_reg[15:0]};
-   assign dbg_cmd_next_addr[31:0] = dbg_cmd_curr_addr[31:0] + {28'h0,dbg_cmd_addr_incr[3:0]};
-
-   // Ask DMA to stop taking bus trxns since debug request is done
-   assign dbg_dma_bubble = ((dbg_state == CORE_CMD_START) & ~(|abstractcs_reg[10:8])) | (dbg_state == CORE_CMD_WAIT);
-
-   assign sb_cmd_pending       = (sb_state == CMD_RD) | (sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR) | (sb_state == CMD_WR_DATA) | (sb_state == RSP_RD) | (sb_state == RSP_WR);
-   assign sb_abmem_cmd_pending = (dbg_state == SB_CMD_START) | (dbg_state == SB_CMD_SEND) | (dbg_state== SB_CMD_RESP);
-
-
-  // system bus FSM
-  always_comb begin
-      sb_nxtstate            = SBIDLE;
-      sb_state_en            = 1'b0;
-      sbcs_sbbusy_wren       = 1'b0;
-      sbcs_sbbusy_din        = 1'b0;
-      sbcs_sberror_wren      = 1'b0;
-      sbcs_sberror_din[2:0]  = 3'b0;
-      sbaddress0_reg_wren1   = 1'b0;
-      case (sb_state)
-            SBIDLE: begin
-                     sb_nxtstate            = sbdata0wr_access ? WAIT_WR : WAIT_RD;
-                     sb_state_en            = (sbdata0wr_access | sbreadondata_access | sbreadonaddr_access) & ~(|sbcs_reg[14:12]) & ~sbcs_reg[22];
-                     sbcs_sbbusy_wren       = sb_state_en;                                                 // set the single read bit if it is a singlread command
-                     sbcs_sbbusy_din        = 1'b1;
-                     sbcs_sberror_wren      = sbcs_wren & (|dmi_reg_wdata[14:12]);                                            // write to clear the error bits
-                     sbcs_sberror_din[2:0]  = ~dmi_reg_wdata[14:12] & sbcs_reg[14:12];
-            end
-            WAIT_RD: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_RD;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            WAIT_WR: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_WR;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            CMD_RD : begin
-                     sb_nxtstate           = RSP_RD;
-                     sb_state_en           = sb_bus_cmd_read & dbg_bus_clk_en;
-            end
-            CMD_WR : begin
-                     sb_nxtstate           = (sb_bus_cmd_write_addr & sb_bus_cmd_write_data) ? RSP_WR : (sb_bus_cmd_write_data ? CMD_WR_ADDR : CMD_WR_DATA);
-                     sb_state_en           = (sb_bus_cmd_write_addr | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-            end
-            CMD_WR_ADDR : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_addr & dbg_bus_clk_en;
-            end
-            CMD_WR_DATA : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_data & dbg_bus_clk_en;
-            end
-            RSP_RD: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_read & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            RSP_WR: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_write & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            DONE: begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b1;
-                     sbcs_sbbusy_wren       = 1'b1;                           // reset the single read
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbaddress0_reg_wren1   = sbcs_reg[16] & (sbcs_reg[14:12] == 3'b0);    // auto increment was set and no error. Update to new address after completing the current command
-            end
-            default : begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b0;
-                     sbcs_sbbusy_wren       = 1'b0;
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbcs_sberror_wren      = 1'b0;
-                     sbcs_sberror_din[2:0]  = 3'b0;
-                     sbaddress0_reg_wren1   = 1'b0;
-           end
-         endcase
-   end // always_comb begin
-
-   rvdffs #($bits(sb_state_t)) sb_state_reg (.din(sb_nxtstate), .dout({sb_state}), .en(sb_state_en), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sb_abmem_cmd_write      = command_reg[16];
-   assign sb_abmem_cmd_size[2:0]  = {1'b0, command_reg[21:20]};
-   assign sb_abmem_cmd_addr[31:0] = abmem_addr[31:0];
-   assign sb_abmem_cmd_wdata[31:0] = data0_reg[31:0];
-
-   assign sb_cmd_size[2:0]   = sbcs_reg[19:17];
-   assign sb_cmd_wdata[63:0] = {sbdata1_reg[31:0], sbdata0_reg[31:0]};
-   assign sb_cmd_addr[31:0]  = sbaddress0_reg[31:0];
-
-   assign sb_abmem_cmd_awvalid    = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_cmd_done;
-   assign sb_abmem_cmd_wvalid     = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_data_done;
-   assign sb_abmem_cmd_arvalid    = (dbg_state == SB_CMD_SEND) & ~sb_abmem_cmd_write & ~sb_abmem_cmd_done & ~sb_abmem_data_done;
-   assign sb_abmem_read_pend      = (dbg_state == SB_CMD_RESP) & ~sb_abmem_cmd_write;
-
-   assign sb_cmd_awvalid     = ((sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR));
-   assign sb_cmd_wvalid      = ((sb_state == CMD_WR) | (sb_state == CMD_WR_DATA));
-   assign sb_cmd_arvalid     = (sb_state == CMD_RD);
-   assign sb_read_pend       = (sb_state == RSP_RD);
-
-   assign sb_axi_size[2:0]    = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_size[2:0] : sb_cmd_size[2:0];
-   assign sb_axi_addr[31:0]   = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_addr[31:0] : sb_cmd_addr[31:0];
-   assign sb_axi_wrdata[63:0] = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid) ? {2{sb_abmem_cmd_wdata[31:0]}} : sb_cmd_wdata[63:0];
-
-   // Generic bus response signals
-   assign sb_bus_cmd_read       = sb_axi_arvalid & sb_axi_arready;
-   assign sb_bus_cmd_write_addr = sb_axi_awvalid & sb_axi_awready;
-   assign sb_bus_cmd_write_data = sb_axi_wvalid  & sb_axi_wready;
-
-   assign sb_bus_rsp_read  = sb_axi_rvalid & sb_axi_rready;
-   assign sb_bus_rsp_write = sb_axi_bvalid & sb_axi_bready;
-   assign sb_bus_rsp_error = (sb_bus_rsp_read & (|(sb_axi_rresp[1:0]))) | (sb_bus_rsp_write & (|(sb_axi_bresp[1:0])));
-
-   // AXI Request signals
-   assign sb_axi_awvalid              = sb_abmem_cmd_awvalid | sb_cmd_awvalid;
-   assign sb_axi_awaddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_awid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_awsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_awprot[2:0]          = 3'b001;
-   assign sb_axi_awcache[3:0]         = 4'b1111;
-   assign sb_axi_awregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_awlen[7:0]           = '0;
-   assign sb_axi_awburst[1:0]         = 2'b01;
-   assign sb_axi_awqos[3:0]           = '0;
-   assign sb_axi_awlock               = '0;
-
-   assign sb_axi_wvalid       = sb_abmem_cmd_wvalid | sb_cmd_wvalid;
-   assign sb_axi_wdata[63:0]  = ({64{(sb_axi_size[2:0] == 3'h0)}} & {8{sb_axi_wrdata[7:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h1)}} & {4{sb_axi_wrdata[15:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h2)}} & {2{sb_axi_wrdata[31:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h3)}} & {sb_axi_wrdata[63:0]});
-   assign sb_axi_wstrb[7:0]   = ({8{(sb_axi_size[2:0] == 3'h0)}} & (8'h1 << sb_axi_addr[2:0])) |
-                                ({8{(sb_axi_size[2:0] == 3'h1)}} & (8'h3 << {sb_axi_addr[2:1],1'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h2)}} & (8'hf << {sb_axi_addr[2],2'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h3)}} & 8'hff);
-   assign sb_axi_wlast        = '1;
-
-   assign sb_axi_arvalid              = sb_abmem_cmd_arvalid | sb_cmd_arvalid;
-   assign sb_axi_araddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_arid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_arsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_arprot[2:0]          = 3'b001;
-   assign sb_axi_arcache[3:0]         = 4'b0;
-   assign sb_axi_arregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_arlen[7:0]           = '0;
-   assign sb_axi_arburst[1:0]         = 2'b01;
-   assign sb_axi_arqos[3:0]           = '0;
-   assign sb_axi_arlock               = '0;
-
-   // AXI Response signals
-   assign sb_axi_bready = 1'b1;
-
-   assign sb_axi_rready = 1'b1;
-   assign sb_bus_rdata[63:0] = ({64{sb_axi_size == 3'h0}} & ((sb_axi_rdata[63:0] >>  8*sb_axi_addr[2:0]) & 64'hff))       |
-                               ({64{sb_axi_size == 3'h1}} & ((sb_axi_rdata[63:0] >> 16*sb_axi_addr[2:1]) & 64'hffff))    |
-                               ({64{sb_axi_size == 3'h2}} & ((sb_axi_rdata[63:0] >> 32*sb_axi_addr[2]) & 64'hffff_ffff)) |
-                               ({64{sb_axi_size == 3'h3}} & sb_axi_rdata[63:0]);
-
-`ifdef RV_ASSERT_ON
-// assertion.
-//  when the resume_ack is asserted then the dec_tlu_dbg_halted should be 0
-   dm_check_resume_and_halted: assert property (@(posedge clk)  disable iff(~rst_l) (~dec_tlu_resume_ack | ~dec_tlu_dbg_halted));
-
-   assert_b2b_haltreq: assert property (@(posedge clk) disable iff (~(rst_l)) (##1 dbg_halt_req |=> ~dbg_halt_req));  // One cycle delay to fix weird issue around reset
-   assert_halt_resume_onehot: assert #0 ($onehot0({dbg_halt_req, dbg_resume_req}));
-`endif
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dec.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dec.sv
deleted file mode 100644
index 3c08145..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dec.sv
+++ /dev/null
@@ -1,454 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// dec: decode unit - decode, bypassing, ARF, interrupts
-//
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Decode
-// Comments: Decode, dependency scoreboard, ARF
-//
-//
-// A -> D -> EX1 ... WB
-//
-//********************************************************************************
-
-module eb1_dec
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_clk,                     // Clock always.                  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic lsu_fastint_stall_any,        // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-   output logic dec_extint_stall,            // Stall on external interrupt
-
-   output logic dec_i0_decode_d,             // Valid instruction at D-stage and not blocked
-   output logic dec_pause_state_cg,          // to top for active state clock gating
-
-   output logic dec_tlu_core_empty,
-
-   input logic rst_l,                        // reset, active low
-   input logic [31:1] rst_vec,               // reset vector, from core pins
-
-   input logic        nmi_int,               // NMI pin
-   input logic [31:1] nmi_vec,               // NMI vector, from pins
-
-   input logic  i_cpu_halt_req,              // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,               // Asynchronous Restart request to CPU
-
-   output logic o_cpu_halt_status,           // Halt status of core (pmu/fw)
-   output logic o_cpu_halt_ack,              // Halt request ack
-   output logic o_cpu_run_ack,               // Run request ack
-   output logic o_debug_mode_status,         // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id,               // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req,           // Async halt request
-   input logic mpc_debug_run_req,            // Async run request
-   input logic mpc_reset_run_req,            // Run/halt after reset
-   output logic mpc_debug_halt_ack,          // Halt ack
-   output logic mpc_debug_run_ack,           // Run ack
-   output logic debug_brkpt_status,          // debug breakpoint
-
-    input logic       exu_pmu_i0_br_misp,    // slot 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // slot 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // slot 0 4 byte branch
-
-
-   input logic                                lsu_nonblock_load_valid_m,      // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,        // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,        // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,    // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,   // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,   // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,     // -> corresponding tag
-   input logic [31:0]                         lsu_nonblock_load_data,         // nonblock load data
-
-   input logic       lsu_pmu_bus_trxn,           // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned,     // D side bus misaligned
-   input logic       lsu_pmu_bus_error,          // D side bus error
-   input logic       lsu_pmu_bus_busy,           // D side bus busy
-   input logic       lsu_pmu_misaligned_m,       // D side load or store misaligned
-   input logic       lsu_pmu_load_external_m,    // D side bus load
-   input logic       lsu_pmu_store_external_m,   // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr,          // Fast int address
-   input logic [1:0] lsu_fir_error,          // Fast int lookup error
-
-   input logic       ifu_pmu_instr_aligned,  // aligned instructions
-   input logic       ifu_pmu_fetch_stall,    // fetch unit stalled
-   input logic       ifu_pmu_ic_miss,        // icache miss
-   input logic       ifu_pmu_ic_hit,         // icache hit
-   input logic       ifu_pmu_bus_error,      // Instruction side bus error
-   input logic       ifu_pmu_bus_busy,       // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn,       // Instruction side bus transaction
-
-   input logic       ifu_ic_error_start,     // IC single bit error
-   input logic       ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-   input logic [3:0]  lsu_trigger_match_m,
-   input logic        dbg_cmd_valid,         // debugger abstract command valid
-   input logic        dbg_cmd_write,         // command is a write
-   input logic  [1:0] dbg_cmd_type,          // command type
-   input logic [31:0] dbg_cmd_addr,          // command address
-   input logic  [1:0] dbg_cmd_wrdata,        // command write data, for fence/fence_i
-
-
-   input logic        ifu_i0_icaf,           // icache access fault
-   input logic [1:0]  ifu_i0_icaf_type,      // icache access fault type
-
-   input logic   ifu_i0_icaf_second,         // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,               // icache/iccm double-bit error
-
-   input logic lsu_idle_any,                 // lsu idle for halting
-
-   input eb1_br_pkt_t i0_brp,                                  // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,            // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,           // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_lsu_error_pkt_t lsu_error_pkt_r,         // LSU exception/error packet
-   input logic         lsu_single_ecc_error_incr,      // LSU inc SB error counter
-
-   input logic         lsu_imprecise_error_load_any,   // LSU imprecise load bus error
-   input logic         lsu_imprecise_error_store_any,  // LSU imprecise store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any,   // LSU imprecise bus error address
-
-   input logic [31:0]  exu_div_result,      // final div result
-   input logic         exu_div_wren,        // Divide write enable to GPR
-
-   input logic [31:0] exu_csr_rs1_x,        // rs1 for csr instruction
-
-   input logic [31:0] lsu_result_m,         // load result
-   input logic [31:0] lsu_result_corr_r,    // load result - corrected load data
-
-   input logic        lsu_load_stall_any,   // This is for blocking loads
-   input logic        lsu_store_stall_any,  // This is for blocking stores
-   input logic        dma_dccm_stall_any,   // stall any load/store at decode, pmu event
-   input logic        dma_iccm_stall_any,   // iccm stalled, pmu event
-
-   input logic       iccm_dma_sb_error,     // ICCM DMA single bit error
-
-   input logic exu_flush_final,             // slot0 flush
-
-   input logic [31:1] exu_npc_r,            // next PC
-
-   input logic [31:0] exu_i0_result_x,      // alu result x
-
-
-   input logic         ifu_i0_valid,                  // fetch valids to instruction buffer
-   input logic [31:0]  ifu_i0_instr,                  // fetch inst's to instruction buffer
-   input logic [31:1]  ifu_i0_pc,                     // pc's for instruction buffer
-   input logic         ifu_i0_pc4,                    // indication of 4B or 2B for corresponding inst
-   input logic  [31:1] exu_i0_pc_x,                   // pc's for e1 from the alu's
-
-   input logic mexintpend,                            // External interrupt pending
-   input logic timer_int,                             // Timer interrupt pending (from pin)
-   input logic soft_int,                              // Software interrupt pending (from pin)
-
-   input logic [7:0] pic_claimid,                     // PIC claimid
-   input logic [3:0] pic_pl,                          // PIC priv level
-   input logic       mhwakeup,                        // High priority wakeup
-
-   output logic [3:0] dec_tlu_meicurpl,               // to PIC, Current priv level
-   output logic [3:0] dec_tlu_meipt,                  // to PIC
-
-   input logic [70:0] ifu_ic_debug_rd_data,           // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid,            // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-// Debug start
-   input logic dbg_halt_req,                 // DM requests a halt
-   input logic dbg_resume_req,               // DM requests a resume
-   input logic ifu_miss_state_idle,          // I-side miss buffer empty
-
-   output logic dec_tlu_dbg_halted,          // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode,          // Core is in debug mode
-   output logic dec_tlu_resume_ack,          // Resume acknowledge
-   output logic dec_tlu_flush_noredir_r,     // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only,     // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r,    // single step
-   output logic dec_tlu_flush_err_r,         // iside perr/ecc rfpc
-   output logic [31:2] dec_tlu_meihap,       // Fast ext int base
-
-   output logic dec_debug_wdata_rs1_d,       // insert debug write data into rs1 at decode
-
-   output logic [31:0] dec_dbg_rddata,       // debug command read data
-
-   output logic dec_dbg_cmd_done,            // abstract command is done
-   output logic dec_dbg_cmd_fail,            // abstract command failed (illegal reg address)
-
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // info needed by debug trigger blocks
-
-   output logic dec_tlu_force_halt,          // halt has been forced
-// Debug end
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r,             // history
-   input logic        exu_i0_br_error_r,            // error
-   input logic        exu_i0_br_start_error_r,      // start error
-   input logic        exu_i0_br_valid_r,            // valid
-   input logic        exu_i0_br_mp_r,               // mispredict
-   input logic        exu_i0_br_middle_r,           // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r,         // way hit or repl
-
-   output logic         dec_i0_rs1_en_d,            // Qualify GPR RS1 data
-   output logic         dec_i0_rs2_en_d,            // Qualify GPR RS2 data
-   output logic  [31:0] gpr_i0_rs1_d,               // gpr rs1 data
-   output logic  [31:0] gpr_i0_rs2_d,               // gpr rs2 data
-
-   output logic [31:0] dec_i0_immed_d,              // immediate data
-   output logic [12:1] dec_i0_br_immed_d,           // br immediate data
-
-   output        eb1_alu_pkt_t i0_ap,              // alu packet
-
-   output logic          dec_i0_alu_decode_d,       // schedule on D-stage alu
-   output logic          dec_i0_branch_d,           // Branch in D-stage
-
-   output logic          dec_i0_select_pc_d,        // select pc onto rs1 for jal's
-
-   output logic [31:1]  dec_i0_pc_d,                // pc's at decode
-   output logic [3:0]   dec_i0_rs1_bypass_en_d,     // rs1 bypass enable
-   output logic [3:0]   dec_i0_rs2_bypass_en_d,     // rs2 bypass enable
-
-   output logic [31:0]  dec_i0_result_r,            // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                  // lsu packet
-   output logic             dec_qual_lsu_d,         // LSU instruction at D.  Use to quiet LSU operands
-   output eb1_mul_pkt_t    mul_p,                  // mul packet
-   output eb1_div_pkt_t    div_p,                  // div packet
-   output logic             dec_div_cancel,         // cancel divide operation
-
-   output logic [11:0] dec_lsu_offset_d,            // 12b offset for load/store addresses
-
-   output logic        dec_csr_ren_d,               // CSR read enable
-   output logic [31:0] dec_csr_rddata_d,            // CSR read data
-
-   output logic        dec_tlu_flush_lower_r,       // tlu flush due to late mp, exception, rfpc, or int
-   output logic        dec_tlu_flush_lower_wb,
-   output logic [31:1] dec_tlu_flush_path_r,        // tlu flush target
-   output logic        dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic        dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-
-   output logic [31:1] pred_correct_npc_x,          // npc if prediction is correct at e2 stage
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt,      // slot 0 branch predictor update packet
-
-   output logic dec_tlu_perfcnt0,                   // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,                   // toggles when slot0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2,                   // toggles when slot0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3,                   // toggles when slot0 perf counter 3 has an event inc
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,                        // prediction packet to alus
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic dec_lsu_valid_raw_d,
-
-   output logic [31:0] dec_tlu_mrac_ff,              // CSR for memory region control
-
-   output logic [1:0] dec_data_en,                   // clock-gate control logic
-   output logic [1:0] dec_ctl_en,
-
-   input logic [15:0] ifu_i0_cinst,                  // 16b compressed instruction
-
-   output eb1_trace_pkt_t  trace_rv_trace_pkt,      // trace packet
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable,     // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable,           // disable core ECC
-   output logic  dec_tlu_bpred_disable,              // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,      // disable writebuffer coalescing
-   output logic [2:0]  dec_tlu_dma_qos_prty,         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override,          // override misc clock domain gating
-   output logic  dec_tlu_ifu_clk_override,           // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,           // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,           // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,           // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,         // override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override,          // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override,           // override ICCM clock domain gating
-
-   output logic  dec_tlu_i0_commit_cmt,              // committed i0 instruction
-   input  logic  scan_mode                           // Flop scan mode control
- 
-
-   );
-
-
-   logic  dec_tlu_dec_clk_override;      // to and from dec blocks
-   logic  clk_override;
-
-   logic               dec_ib0_valid_d;
-
-   logic               dec_pmu_instr_decoded;
-   logic               dec_pmu_decode_stall;
-   logic               dec_pmu_presync_stall;
-   logic               dec_pmu_postsync_stall;
-
-   logic dec_tlu_wr_pause_r;             // CSR write to pause reg is at R.
-
-   logic [4:0]  dec_i0_rs1_d;
-   logic [4:0]  dec_i0_rs2_d;
-
-   logic [31:0] dec_i0_instr_d;
-
-   logic  dec_tlu_trace_disable;
-   logic  dec_tlu_pipelining_disable;
-
-
-   logic [4:0]  dec_i0_waddr_r;
-   logic        dec_i0_wen_r;
-   logic [31:0] dec_i0_wdata_r;
-   logic        dec_csr_wen_r;           // csr write enable at wb
-   logic [11:0] dec_csr_wraddr_r;        // write address for csryes
-   logic [31:0] dec_csr_wrdata_r;        // csr write data at wb
-
-   logic [11:0] dec_csr_rdaddr_d;        // read address for csr
-   logic        dec_csr_legal_d;         // csr indicates legal operation
-
-   logic        dec_csr_wen_unq_d;       // valid csr with write - for csr legal
-   logic        dec_csr_any_unq_d;       // valid csr - for csr legal
-   logic        dec_csr_stall_int_ff;    // csr is mie/mstatus
-
-   eb1_trap_pkt_t dec_tlu_packet_r;
-
-   logic        dec_i0_pc4_d;
-   logic        dec_tlu_presync_d;
-   logic        dec_tlu_postsync_d;
-   logic        dec_tlu_debug_stall;
-
-   logic [31:0] dec_illegal_inst;
-
-   logic                      dec_i0_icaf_d;
-
-   logic                      dec_i0_dbecc_d;
-   logic                      dec_i0_icaf_second_d;
-   logic [3:0]                dec_i0_trigger_match_d;
-   logic                      dec_debug_fence_d;
-   logic                      dec_nonblock_load_wen;
-   logic [4:0]                dec_nonblock_load_waddr;
-   logic                      dec_tlu_flush_pause_r;
-   eb1_br_pkt_t                   dec_i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index;          // Fully associt btb index
-
-   logic [31:1]               dec_tlu_i0_pc_r;
-   logic                      dec_tlu_i0_kill_writeb_wb;
-   logic                      dec_tlu_i0_valid_r;
-
-   logic                      dec_pause_state;
-
-   logic [1:0]                dec_i0_icaf_type_d;   // i0 instruction access fault type
-
-   logic                      dec_tlu_flush_extint; // Fast ext int started
-
-   logic [31:0]               dec_i0_inst_wb;
-   logic [31:1]               dec_i0_pc_wb;
-   logic                      dec_tlu_i0_valid_wb1,  dec_tlu_int_valid_wb1;
-   logic [4:0]                dec_tlu_exc_cause_wb1;
-   logic [31:0]               dec_tlu_mtval_wb1;
-   logic                      dec_tlu_i0_exc_valid_wb1;
-
-   logic [4:0]                div_waddr_wb;
-   logic                      dec_div_active;
-
-   logic                      dec_debug_valid_d;
-
-
-// Adding signals for vector
-   
-   //logic stall_scalar;
-   
-   
-   
-   assign clk_override = dec_tlu_dec_clk_override;
-
-
-   assign dec_dbg_rddata[31:0] = dec_i0_wdata_r[31:0];
-
-
-   eb1_dec_ib_ctl #(.pt(pt)) instbuff (.*);
-
-
-   eb1_dec_decode_ctl #(.pt(pt)) decode (.*);
-
-
-   eb1_dec_tlu_ctl #(.pt(pt)) tlu (.*);
-
-
-   eb1_dec_gpr_ctl #(.pt(pt)) arf (.*,
-                    // inputs
-                    .raddr0(dec_i0_rs1_d[4:0]),
-                    .raddr1(dec_i0_rs2_d[4:0]),
-
-                    .wen0(dec_i0_wen_r),          .waddr0(dec_i0_waddr_r[4:0]),          .wd0(dec_i0_wdata_r[31:0]),
-                    .wen1(dec_nonblock_load_wen), .waddr1(dec_nonblock_load_waddr[4:0]), .wd1(lsu_nonblock_load_data[31:0]),
-                    .wen2(exu_div_wren),          .waddr2(div_waddr_wb),                 .wd2(exu_div_result[31:0]),
-
-                    // outputs
-                    .rd0(gpr_i0_rs1_d[31:0]), .rd1(gpr_i0_rs2_d[31:0])
-                    );
-
-
-// Trigger
-
-   eb1_dec_trigger #(.pt(pt)) dec_trigger (.*);
-
-
-
-
-// trace
-   assign trace_rv_trace_pkt.trace_rv_i_insn_ip      =   dec_i0_inst_wb[31:0];
-   assign trace_rv_trace_pkt.trace_rv_i_address_ip   = { dec_i0_pc_wb[31:1], 1'b0};
-
-   assign trace_rv_trace_pkt.trace_rv_i_valid_ip     = dec_tlu_int_valid_wb1 | dec_tlu_i0_valid_wb1 | dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_exception_ip = dec_tlu_int_valid_wb1 |  dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_ecause_ip    = dec_tlu_exc_cause_wb1[4:0];     // replicate across ports
-   assign trace_rv_trace_pkt.trace_rv_i_interrupt_ip = dec_tlu_int_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_tval_ip      = dec_tlu_mtval_wb1[31:0];        // replicate across ports
-
-
-
-// end trace
-
-
-endmodule // eb1_dec
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dec_decode_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dec_decode_ctl.sv
deleted file mode 100644
index b663545..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dec_decode_ctl.sv
+++ /dev/null
@@ -1,1825 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_dec_decode_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic dec_tlu_trace_disable,
-   input logic dec_debug_valid_d,
-
-   input logic dec_tlu_flush_extint,         // Flush external interrupt
-
-   input logic dec_tlu_force_halt,           // invalidate nonblock load cam on a force halt event
-
-   output logic dec_extint_stall,            // Stall from external interrupt
-
-   input  logic [15:0] ifu_i0_cinst,         // 16b compressed instruction
-   output logic [31:0] dec_i0_inst_wb,       // 32b instruction at wb+1 for trace encoder
-   output logic [31:1] dec_i0_pc_wb,         // 31b pc at wb+1 for trace encoder
-
-
-   input logic                                lsu_nonblock_load_valid_m,       // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,         // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,         // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,     // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,    // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,    // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,      // -> corresponding tag
-
-
-   input logic [3:0] dec_i0_trigger_match_d,          // i0 decode trigger matches
-
-   input logic dec_tlu_wr_pause_r,                    // pause instruction at r
-   input logic dec_tlu_pipelining_disable,            // pipeline disable - presync, i0 decode only
-
-   input logic [3:0]  lsu_trigger_match_m,            // lsu trigger matches
-
-   input logic lsu_pmu_misaligned_m,                  // perf mon: load/store misalign
-   input logic dec_tlu_debug_stall,                   // debug stall decode
-   input logic dec_tlu_flush_leak_one_r,              // leak1 instruction
-
-   input logic dec_debug_fence_d,                     // debug fence instruction
-
-   input logic [1:0] dbg_cmd_wrdata,                  // disambiguate fence, fence_i
-
-   input logic dec_i0_icaf_d,                         // icache access fault
-   input logic dec_i0_icaf_second_d,                  // i0 instruction access fault on second 2B of 4B inst
-   input logic [1:0] dec_i0_icaf_type_d,              // i0 instruction access fault type
-
-   input logic dec_i0_dbecc_d,                        // icache/iccm double-bit error
-
-   input eb1_br_pkt_t dec_i0_brp,                    // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   input logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,  // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag, // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   input logic lsu_idle_any,                          // lsu idle: if fence instr & ~lsu_idle then stall decode
-
-   input logic lsu_load_stall_any,                    // stall any load at decode
-   input logic lsu_store_stall_any,                   // stall any store at decode
-   input logic dma_dccm_stall_any,                    // stall any load/store at decode
-
-   input logic exu_div_wren,                          // nonblocking divide write enable to GPR.
-
-   input logic dec_tlu_i0_kill_writeb_wb,             // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_wb,                // trap lower flush
-   input logic dec_tlu_i0_kill_writeb_r,              // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_r,                 // trap lower flush
-   input logic dec_tlu_flush_pause_r,                 // don't clear pause state on initial lower flush
-   input logic dec_tlu_presync_d,                     // CSR read needs to be presync'd
-   input logic dec_tlu_postsync_d,                    // CSR ops that need to be postsync'd
-
-   input logic dec_i0_pc4_d,                          // inst is 4B inst else 2B
-
-   input logic [31:0] dec_csr_rddata_d,               // csr read data at wb
-   input logic dec_csr_legal_d,                       // csr indicates legal operation
-
-   input logic [31:0] exu_csr_rs1_x,                  // rs1 for csr instr
-
-   input logic [31:0] lsu_result_m,                   // load result
-   input logic [31:0] lsu_result_corr_r,              // load result - corrected data for writing gpr's, not for bypassing
-
-   input logic exu_flush_final,                       // lower flush or i0 flush at X or D
-
-   input logic [31:1] exu_i0_pc_x,                    // pcs at e1
-
-   input logic [31:0] dec_i0_instr_d,                 // inst at decode
-
-   input logic  dec_ib0_valid_d,                      // inst valid at decode
-
-   input logic [31:0] exu_i0_result_x,                // from primary alu's
-
-   input logic  clk,                                  // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic  active_clk,                           // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic  free_l2clk,                           // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic  clk_override,                         // Override non-functional clock gating
-   input logic  rst_l,                                // Flop reset
-
-
-
-   output logic        dec_i0_rs1_en_d,               // rs1 enable at decode
-   output logic        dec_i0_rs2_en_d,               // rs2 enable at decode
-
-   output logic [4:0]  dec_i0_rs1_d,                  // rs1 logical source
-   output logic [4:0]  dec_i0_rs2_d,                  // rs2 logical source
-
-   output logic [31:0] dec_i0_immed_d,                // 32b immediate data decode
-
-
-   output logic [12:1] dec_i0_br_immed_d,             // 12b branch immediate
-
-   output eb1_alu_pkt_t i0_ap,                       // alu packets
-
-   output logic        dec_i0_decode_d,               // i0 decode
-
-   output logic        dec_i0_alu_decode_d,           // decode to D-stage alu
-   output logic        dec_i0_branch_d,               // Branch in D-stage
-
-   output logic [4:0]  dec_i0_waddr_r,                // i0 logical source to write to gpr's
-   output logic        dec_i0_wen_r,                  // i0 write enable
-   output logic [31:0] dec_i0_wdata_r,                // i0 write data
-
-   output logic        dec_i0_select_pc_d,            // i0 select pc for rs1 - branches
-
-   output logic [3:0]    dec_i0_rs1_bypass_en_d,      // i0 rs1 bypass enable
-   output logic [3:0]    dec_i0_rs2_bypass_en_d,      // i0 rs2 bypass enable
-   output logic [31:0]   dec_i0_result_r,             // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                    // load/store packet
-   output logic             dec_qual_lsu_d,           // LSU instruction at D.  Use to quiet LSU operands
-
-   output eb1_mul_pkt_t    mul_p,                    // multiply packet
-
-   output eb1_div_pkt_t    div_p,                    // divide packet
-   output logic [4:0]       div_waddr_wb,             // DIV write address to GPR
-   output logic             dec_div_cancel,           // cancel the divide operation
-
-   output logic        dec_lsu_valid_raw_d,
-   output logic [11:0] dec_lsu_offset_d,
-
-   output logic        dec_csr_ren_d,                 // valid csr decode
-   output logic        dec_csr_wen_unq_d,             // valid csr with write - for csr legal
-   output logic        dec_csr_any_unq_d,             // valid csr - for csr legal
-   output logic [11:0] dec_csr_rdaddr_d,              // read address for csr
-   output logic        dec_csr_wen_r,                 // csr write enable at r
-   output logic [11:0] dec_csr_wraddr_r,              // write address for csr
-   output logic [31:0] dec_csr_wrdata_r,              // csr write data at r
-   output logic        dec_csr_stall_int_ff,          // csr is mie/mstatus
-
-   output              dec_tlu_i0_valid_r,            // i0 valid inst at c
-
-   output eb1_trap_pkt_t   dec_tlu_packet_r,              // trap packet
-
-   output logic [31:1] dec_tlu_i0_pc_r,               // i0 trap pc
-
-   output logic [31:0] dec_illegal_inst,              // illegal inst
-   output logic [31:1] pred_correct_npc_x,            // npc e2 if the prediction is correct
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,      // i0 predict packet decode
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d, // i0 predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d, // i0 predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d, // i0_predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic [1:0] dec_data_en,                    // clock-gating logic
-   output logic [1:0] dec_ctl_en,
-
-   output logic       dec_pmu_instr_decoded,          // number of instructions decode this cycle encoded
-   output logic       dec_pmu_decode_stall,           // decode is stalled
-   output logic       dec_pmu_presync_stall,          // decode has presync stall
-   output logic       dec_pmu_postsync_stall,         // decode has postsync stall
-
-   output logic       dec_nonblock_load_wen,          // write enable for nonblock load
-   output logic [4:0] dec_nonblock_load_waddr,        // logical write addr for nonblock load
-   output logic       dec_pause_state,                // core in pause state
-   output logic       dec_pause_state_cg,             // pause state for clock-gating
-
-   output logic       dec_div_active,                 // non-block divide is active
-
-   input  logic       scan_mode
-   
-   );
-
-
-
-
-   eb1_dec_pkt_t           i0_dp_raw, i0_dp;
-
-   logic [31:0]        i0;
-   logic               i0_valid_d;
-
-   logic [31:0]        i0_result_r;
-
-   logic [2:0]         i0_rs1bypass, i0_rs2bypass;
-
-   logic               i0_jalimm20;
-   logic               i0_uiimm20;
-
-   logic               lsu_decode_d;
-   logic [31:0]        i0_immed_d;
-   logic               i0_presync;
-   logic               i0_postsync;
-
-   logic               postsync_stall;
-   logic               ps_stall;
-
-   logic               prior_inflight, prior_inflight_wb;
-
-   logic               csr_clr_d, csr_set_d, csr_write_d;
-
-   logic               csr_clr_x,csr_set_x,csr_write_x,csr_imm_x;
-   logic [31:0]        csr_mask_x;
-   logic [31:0]        write_csr_data_x;
-   logic [31:0]        write_csr_data_in;
-   logic [31:0]        write_csr_data;
-   logic               csr_data_wen;
-
-   logic [4:0]         csrimm_x;
-
-   logic [31:0]        csr_rddata_x;
-
-   logic               mul_decode_d;
-   logic               div_decode_d;
-   logic               div_e1_to_r;
-   logic               div_flush;
-   logic               div_active_in;
-   logic               div_active;
-   logic               i0_nonblock_div_stall;
-   logic               i0_div_prior_div_stall;
-   logic               nonblock_div_cancel;
-
-   logic               i0_legal;
-   logic               shift_illegal;
-   logic               illegal_inst_en;
-   logic               illegal_lockout_in, illegal_lockout;
-   logic               i0_legal_decode_d;
-   logic               i0_exulegal_decode_d, i0_exudecode_d, i0_exublock_d;
-
-   logic [12:1]        last_br_immed_d;
-   logic               i0_rs1_depend_i0_x, i0_rs1_depend_i0_r;
-   logic               i0_rs2_depend_i0_x, i0_rs2_depend_i0_r;
-
-   logic               i0_div_decode_d;
-   logic               i0_load_block_d;
-   logic [1:0]         i0_rs1_depth_d, i0_rs2_depth_d;
-
-   logic               i0_load_stall_d;
-   logic               i0_store_stall_d;
-
-   logic               i0_predict_nt, i0_predict_t;
-
-   logic               i0_notbr_error, i0_br_toffset_error;
-   logic               i0_ret_error;
-   logic               i0_br_error;
-   logic               i0_br_error_all;
-   logic [11:0]        i0_br_offset;
-
-   logic [20:1]        i0_pcall_imm;                          // predicted jal's
-   logic               i0_pcall_12b_offset;
-   logic               i0_pcall_raw;
-   logic               i0_pcall_case;
-   logic               i0_pcall;
-
-   logic               i0_pja_raw;
-   logic               i0_pja_case;
-   logic               i0_pja;
-
-   logic               i0_pret_case;
-   logic               i0_pret_raw, i0_pret;
-
-   logic               i0_jal;                                // jal's that are not predicted
-
-
-   logic               i0_predict_br;
-
-   logic               store_data_bypass_d, store_data_bypass_m;
-
-   eb1_class_pkt_t         i0_rs1_class_d, i0_rs2_class_d;
-
-   eb1_class_pkt_t         i0_d_c, i0_x_c, i0_r_c;
-
-
-   logic               i0_ap_pc2, i0_ap_pc4;
-
-   logic               i0_rd_en_d;
-
-   logic               load_ldst_bypass_d;
-
-   logic               leak1_i0_stall_in, leak1_i0_stall;
-   logic               leak1_i1_stall_in, leak1_i1_stall;
-   logic               leak1_mode;
-
-   logic               i0_csr_write_only_d;
-
-   logic               prior_inflight_x, prior_inflight_eff;
-   logic               any_csr_d;
-
-   logic               prior_csr_write;
-
-   logic [3:0]        i0_pipe_en;
-   logic              i0_r_ctl_en,  i0_x_ctl_en,  i0_wb_ctl_en;
-   logic              i0_x_data_en, i0_r_data_en, i0_wb_data_en;
-
-   logic              debug_fence_i;
-   logic              debug_fence;
-
-   logic              i0_csr_write;
-   logic              presync_stall;
-
-   logic              i0_instr_error;
-   logic              i0_icaf_d;
-
-   logic              clear_pause;
-   logic              pause_state_in, pause_state;
-   logic              pause_stall;
-
-   logic              i0_brp_valid;
-   logic              nonblock_load_cancel;
-   logic              lsu_idle;
-   logic              lsu_pmu_misaligned_r;
-   logic              csr_ren_qual_d;
-   logic              csr_read_x;
-   logic              i0_block_d;
-   logic              i0_block_raw_d;  // This is use to create the raw valid
-   logic              ps_stall_in;
-   logic [31:0]       i0_result_x;
-
-   eb1_dest_pkt_t         d_d, x_d, r_d, wbd;
-   eb1_dest_pkt_t         x_d_in, r_d_in;
-
-   eb1_trap_pkt_t         d_t, x_t, x_t_in, r_t_in, r_t;
-
-   logic [3:0]        lsu_trigger_match_r;
-
-   logic [31:1]       dec_i0_pc_r;
-
-   logic csr_read, csr_write;
-   logic i0_br_unpred;
-
-   logic nonblock_load_valid_m_delay;
-   logic i0_wen_r;
-
-   logic tlu_wr_pause_r1;
-   logic tlu_wr_pause_r2;
-
-   logic flush_final_r;
-
-   logic bitmanip_zbb_legal;
-   logic bitmanip_zbs_legal;
-   logic bitmanip_zbe_legal;
-   logic bitmanip_zbc_legal;
-   logic bitmanip_zbp_legal;
-   logic bitmanip_zbr_legal;
-   logic bitmanip_zbf_legal;
-   logic bitmanip_zba_legal;
-   logic bitmanip_zbb_zbp_legal;
-   logic bitmanip_legal;
-
-   logic              data_gate_en;
-   logic              data_gate_clk;
-
-
-   localparam NBLOAD_SIZE     = pt.LSU_NUM_NBLOAD;
-   localparam NBLOAD_SIZE_MSB = int'(pt.LSU_NUM_NBLOAD)-1;
-   localparam NBLOAD_TAG_MSB  = pt.LSU_NUM_NBLOAD_WIDTH-1;
-
-
-   logic                     cam_write, cam_inv_reset, cam_data_reset;
-   logic [NBLOAD_TAG_MSB:0]  cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag;
-   logic [NBLOAD_SIZE_MSB:0] cam_wen;
-
-   logic [NBLOAD_TAG_MSB:0]  load_data_tag;
-   logic [NBLOAD_SIZE_MSB:0] nonblock_load_write;
-
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_raw;
-
-   logic [4:0] nonblock_load_rd;
-   logic i0_nonblock_load_stall;
-   logic i0_nonblock_boundary_stall;
-
-   logic i0_rs1_nonblock_load_bypass_en_d, i0_rs2_nonblock_load_bypass_en_d;
-
-   logic i0_load_kill_wen_r;
-
-   logic found;
-
-   logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val;
-
-   logic debug_fence_raw;
-
-   logic [31:0] i0_result_r_raw;
-   logic [31:0] i0_result_corr_r;
-
-   logic [12:1] last_br_immed_x;
-
-   logic [31:0]        i0_inst_d;
-   logic [31:0]        i0_inst_x;
-   logic [31:0]        i0_inst_r;
-   logic [31:0]        i0_inst_wb_in;
-   logic [31:0]        i0_inst_wb;
-
-   logic [31:1]        i0_pc_wb;
-
-   logic               i0_wb_en;
-
-   logic               trace_enable;
-
-   logic               debug_valid_x;
-
-   eb1_inst_pkt_t i0_itype;
-   eb1_reg_pkt_t i0r;
-   
-
-
-   rvdffie  #(8) misc1ff (.*,
-                          .clk(free_l2clk),
-                          .din( {leak1_i1_stall_in,leak1_i0_stall_in,dec_tlu_flush_extint,pause_state_in ,dec_tlu_wr_pause_r, tlu_wr_pause_r1,illegal_lockout_in,ps_stall_in}),
-                          .dout({leak1_i1_stall,   leak1_i0_stall,   dec_extint_stall,    pause_state,       tlu_wr_pause_r1,tlu_wr_pause_r2,illegal_lockout,   ps_stall   })
-                          );
-
-   rvdffie  #(8) misc2ff (.*,
-                          .clk(free_l2clk),
-                          .din( {lsu_trigger_match_m[3:0],lsu_pmu_misaligned_m,div_active_in,exu_flush_final,  dec_debug_valid_d}),
-                          .dout({lsu_trigger_match_r[3:0],lsu_pmu_misaligned_r,div_active,       flush_final_r,    debug_valid_x})
-                          );
-
-if(pt.BTB_ENABLE==1) begin
-// branch prediction
-
-
-   // in leak1_mode, ignore any predictions for i0, treat branch as if we haven't seen it before
-   // in leak1 mode, also ignore branch errors for i0
-   assign i0_brp_valid                        =  dec_i0_brp.valid & ~leak1_mode & ~i0_icaf_d;
-
-   assign dec_i0_predict_p_d.misp        =  '0;
-   assign dec_i0_predict_p_d.ataken      =  '0;
-   assign dec_i0_predict_p_d.boffset     =  '0;
-
-   assign dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-   assign dec_i0_predict_p_d.pja         =  i0_pja;
-   assign dec_i0_predict_p_d.pret        =  i0_pret;
-   assign dec_i0_predict_p_d.prett[31:1] =  dec_i0_brp.prett[31:1];
-   assign dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   assign dec_i0_predict_p_d.hist[1:0]   =  dec_i0_brp.hist[1:0];
-   assign dec_i0_predict_p_d.valid       =  i0_brp_valid & i0_legal_decode_d;
-   assign i0_notbr_error                 =  i0_brp_valid & ~(i0_dp_raw.condbr | i0_pcall_raw | i0_pja_raw | i0_pret_raw);
-
-   // no toffset error for a pret
-   assign i0_br_toffset_error                               =  i0_brp_valid & dec_i0_brp.hist[1] & (dec_i0_brp.toffset[11:0] != i0_br_offset[11:0]) & ~i0_pret_raw;
-   assign i0_ret_error                                      =  i0_brp_valid & (dec_i0_brp.ret ^ i0_pret_raw);
-   assign i0_br_error                                       =  dec_i0_brp.br_error | i0_notbr_error | i0_br_toffset_error | i0_ret_error;
-   assign dec_i0_predict_p_d.br_error                       =  i0_br_error & i0_legal_decode_d & ~leak1_mode;
-   assign dec_i0_predict_p_d.br_start_error                 =  dec_i0_brp.br_start_error & i0_legal_decode_d & ~leak1_mode;
-   assign i0_predict_index_d[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] =  dec_i0_bp_index;
-
-   assign i0_predict_btag_d[pt.BTB_BTAG_SIZE-1:0]           =  dec_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0];
-   assign i0_br_error_all                                   = (i0_br_error | dec_i0_brp.br_start_error) & ~leak1_mode;
-   assign dec_i0_predict_p_d.toffset[11:0]                  =  i0_br_offset[11:0];
-   assign i0_predict_fghr_d[pt.BHT_GHR_SIZE-1:0]            =  dec_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0];
-   assign dec_i0_predict_p_d.way                            =  dec_i0_brp.way;
-
-
-   if(pt.BTB_FULLYA) begin
-      logic btb_error_found, btb_error_found_f;
-      logic [$clog2(pt.BTB_SIZE)-1:0] fa_error_index_ns;
-
-      assign btb_error_found = (i0_br_error_all | btb_error_found_f) & ~dec_tlu_flush_lower_r;
-      assign fa_error_index_ns = (i0_br_error_all & ~btb_error_found_f) ? dec_i0_bp_fa_index : dec_fa_error_index;
-
-      rvdff #($clog2(pt.BTB_SIZE)+1) btberrorfa_f   (.*, .clk(active_clk),
-                                                         .din({btb_error_found,    fa_error_index_ns}),
-                                                         .dout({btb_error_found_f, dec_fa_error_index}));
-
-
-   end
-   else
-     assign dec_fa_error_index = 'b0;
-
-
-   //   end
-end // if (pt.BTB_ENABLE==1)
-else begin
-
-   always_comb begin
-      dec_i0_predict_p_d = '0;
-      dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-      dec_i0_predict_p_d.pja         =  i0_pja;
-      dec_i0_predict_p_d.pret        =  i0_pret;
-      dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   end
-
-   assign i0_br_error_all = '0;
-   assign i0_predict_index_d = '0;
-   assign i0_predict_btag_d = '0;
-   assign i0_predict_fghr_d = '0;
-   assign i0_brp_valid = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // on br error turn anything into a nop
-   // on i0 instruction fetch access fault turn anything into a nop
-   // nop =>   alu rs1 imm12 rd lor
-
-   assign i0_icaf_d = dec_i0_icaf_d | dec_i0_dbecc_d;
-
-   assign i0_instr_error = i0_icaf_d;
-
-   always_comb begin
-      i0_dp = i0_dp_raw;
-      if (i0_br_error_all | i0_instr_error) begin
-         i0_dp          =   '0;
-         i0_dp.alu      = 1'b1;
-         i0_dp.rs1      = 1'b1;
-         i0_dp.rs2      = 1'b1;
-         i0_dp.lor      = 1'b1;
-         i0_dp.legal    = 1'b1;
-         i0_dp.postsync = 1'b1;
-      end
-   end
-
-   assign i0[31:0] = dec_i0_instr_d[31:0];
-
-   assign dec_i0_select_pc_d = i0_dp.pc;
-
-   // branches that can be predicted
-
-   assign i0_predict_br =  i0_dp.condbr | i0_pcall | i0_pja | i0_pret;
-
-   assign i0_predict_nt = ~(dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-   assign i0_predict_t  =  (dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-
-   assign i0_ap.add     =  i0_dp.add;
-   assign i0_ap.sub     =  i0_dp.sub;
-   assign i0_ap.land    =  i0_dp.land;
-   assign i0_ap.lor     =  i0_dp.lor;
-   assign i0_ap.lxor    =  i0_dp.lxor;
-   assign i0_ap.sll     =  i0_dp.sll;
-   assign i0_ap.srl     =  i0_dp.srl;
-   assign i0_ap.sra     =  i0_dp.sra;
-   assign i0_ap.slt     =  i0_dp.slt;
-   assign i0_ap.unsign  =  i0_dp.unsign;
-   assign i0_ap.beq     =  i0_dp.beq;
-   assign i0_ap.bne     =  i0_dp.bne;
-   assign i0_ap.blt     =  i0_dp.blt;
-   assign i0_ap.bge     =  i0_dp.bge;
-
-   assign i0_ap.clz     =  i0_dp.clz;
-   assign i0_ap.ctz     =  i0_dp.ctz;
-   assign i0_ap.pcnt    =  i0_dp.pcnt;
-   assign i0_ap.sext_b  =  i0_dp.sext_b;
-   assign i0_ap.sext_h  =  i0_dp.sext_h;
-   assign i0_ap.sh1add  =  i0_dp.sh1add;
-   assign i0_ap.sh2add  =  i0_dp.sh2add;
-   assign i0_ap.sh3add  =  i0_dp.sh3add;
-   assign i0_ap.zba     =  i0_dp.zba;
-   assign i0_ap.slo     =  i0_dp.slo;
-   assign i0_ap.sro     =  i0_dp.sro;
-   assign i0_ap.min     =  i0_dp.min;
-   assign i0_ap.max     =  i0_dp.max;
-   assign i0_ap.pack    =  i0_dp.pack;
-   assign i0_ap.packu   =  i0_dp.packu;
-   assign i0_ap.packh   =  i0_dp.packh;
-   assign i0_ap.rol     =  i0_dp.rol;
-   assign i0_ap.ror     =  i0_dp.ror;
-   assign i0_ap.grev    =  i0_dp.grev;
-   assign i0_ap.gorc    =  i0_dp.gorc;
-   assign i0_ap.zbb     =  i0_dp.zbb;
-   assign i0_ap.sbset   =  i0_dp.sbset;
-   assign i0_ap.sbclr   =  i0_dp.sbclr;
-   assign i0_ap.sbinv   =  i0_dp.sbinv;
-   assign i0_ap.sbext   =  i0_dp.sbext;
-
-   assign i0_ap.csr_write =  i0_csr_write_only_d;
-   assign i0_ap.csr_imm   =  i0_dp.csr_imm;
-   assign i0_ap.jal       =  i0_jal;
-
-   assign i0_ap_pc2 = ~dec_i0_pc4_d;
-   assign i0_ap_pc4 =  dec_i0_pc4_d;
-
-   assign i0_ap.predict_nt = i0_predict_nt;
-   assign i0_ap.predict_t  = i0_predict_t;
-
-
-// non block load cam logic
-
-   always_comb begin
-      found = 0;
-      cam_wen[NBLOAD_SIZE_MSB:0] = '0;
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         if (~found) begin
-            if (~cam[i].valid) begin
-               cam_wen[i] = cam_write;
-               found = 1'b1;
-            end
-            else begin
-               cam_wen[i] = 0;
-            end
-         end
-         else
-            cam_wen[i] = 0;
-      end
-   end
-
-
-   assign cam_write          = lsu_nonblock_load_valid_m;
-   assign cam_write_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_tag_m[NBLOAD_TAG_MSB:0];
-
-   assign cam_inv_reset          = lsu_nonblock_load_inv_r;
-   assign cam_inv_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0];
-
-   assign cam_data_reset          = lsu_nonblock_load_data_valid | lsu_nonblock_load_data_error;
-   assign cam_data_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-   assign nonblock_load_rd[4:0] = (x_d.i0load) ? x_d.i0rd[4:0] : 5'b0;  // rd data
-
-
-   // checks
-
-`ifdef RV_ASSERT_ON
-   assert_dec_data_valid_data_error_onehot:    assert #0 ($onehot0({lsu_nonblock_load_data_valid,lsu_nonblock_load_data_error}));
-   assert_dec_cam_inv_reset_onehot:            assert #0 ($onehot0(cam_inv_reset_val[NBLOAD_SIZE_MSB:0]));
-   assert_dec_cam_data_reset_onehot:           assert #0 ($onehot0(cam_data_reset_val[NBLOAD_SIZE_MSB:0]));
-`endif
-
-
-
-    // case of multiple loads to same dest ie. x1 ... you have to invalidate the older one
-
-   for (genvar i=0; i<NBLOAD_SIZE; i++) begin : cam_array
-
-      assign cam_inv_reset_val[i] = cam_inv_reset   & (cam_inv_reset_tag[NBLOAD_TAG_MSB:0]  == cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid;
-
-      assign cam_data_reset_val[i] = cam_data_reset & (cam_data_reset_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-      always_comb begin
-
-         cam[i] = cam_raw[i];
-
-         if (cam_data_reset_val[i])
-           cam[i].valid = 1'b0;
-
-         cam_in[i] = '0;
-
-         if (cam_wen[i]) begin
-            cam_in[i].valid    = 1'b1;
-            cam_in[i].wb       = 1'b0;
-            cam_in[i].tag[NBLOAD_TAG_MSB:0] = cam_write_tag[NBLOAD_TAG_MSB:0];
-            cam_in[i].rd[4:0]  = nonblock_load_rd[4:0];
-         end
-         else if ( (cam_inv_reset_val[i]) |
-                   (i0_wen_r & (r_d_in.i0rd[4:0] == cam[i].rd[4:0]) & cam[i].wb) )
-           cam_in[i].valid = 1'b0;
-         else
-           cam_in[i] = cam[i];
-
-         if (nonblock_load_valid_m_delay & (lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0]==cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid)
-           cam_in[i].wb = 1'b1;
-
-         // force debug halt forces cam valids to 0; highest priority
-         if (dec_tlu_force_halt)
-           cam_in[i].valid = 1'b0;
-      end
-
-
-   rvdffie #( $bits(eb1_load_cam_pkt_t) ) cam_ff (.*, .din(cam_in[i]), .dout(cam_raw[i]));
-
-
-   assign nonblock_load_write[i] = (load_data_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-
-end : cam_array
-
-
-
-   assign load_data_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-`ifdef RV_ASSERT_ON
-   assert_dec_cam_nonblock_load_write_onehot:   assert #0 ($onehot0(nonblock_load_write[NBLOAD_SIZE_MSB:0]));
-`endif
-
-
-   assign nonblock_load_cancel = ((r_d_in.i0rd[4:0] == dec_nonblock_load_waddr[4:0]) & i0_wen_r);     // cancel if any younger inst (including another nonblock) committing this cycle
-
-
-   assign dec_nonblock_load_wen = lsu_nonblock_load_data_valid & |nonblock_load_write[NBLOAD_SIZE_MSB:0] & ~nonblock_load_cancel;
-
-   always_comb begin
-
-      dec_nonblock_load_waddr[4:0] = '0;
-      i0_nonblock_load_stall = i0_nonblock_boundary_stall;
-
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         dec_nonblock_load_waddr[4:0] |= ({5{nonblock_load_write[i]}} & cam[i].rd[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs1_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs1[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs2_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs2[4:0]);
-      end
-
-   end
-
-   assign i0_nonblock_boundary_stall = ((nonblock_load_rd[4:0]==i0r.rs1[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs1_en_d) |
-                                       ((nonblock_load_rd[4:0]==i0r.rs2[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs2_en_d);
-
-
-
-// don't writeback a nonblock load
-
-   rvdffs #(1) wbnbloaddelayff (.*, .clk(active_clk), .en(i0_r_ctl_en ), .din(lsu_nonblock_load_valid_m),        .dout(nonblock_load_valid_m_delay) );
-
-   assign i0_load_kill_wen_r = nonblock_load_valid_m_delay &  r_d.i0load;
-
-
-
-// end non block load cam logic
-
-// pmu start
-
-
-
-
-   assign csr_read = csr_ren_qual_d;
-   assign csr_write = dec_csr_wen_unq_d;
-
-   assign i0_br_unpred = i0_dp.jal & ~i0_predict_br;
-
-   // the classes must be mutually exclusive with one another
-
-   always_comb begin
-      i0_itype = NULL;
-
-      if (i0_legal_decode_d) begin
-         if (i0_dp.mul)                  i0_itype = MUL;
-         if (i0_dp.load)                 i0_itype = LOAD;
-         if (i0_dp.store)                i0_itype = STORE;
-         if (i0_dp.pm_alu)               i0_itype = ALU;
-         if (i0_dp.zbb | i0_dp.zbs |
-             i0_dp.zbe | i0_dp.zbc |
-             i0_dp.zbp | i0_dp.zbr |
-             i0_dp.zbf | i0_dp.zba)
-                                         i0_itype = BITMANIPU;
-         if ( csr_read & ~csr_write)     i0_itype = CSRREAD;
-         if (~csr_read &  csr_write)     i0_itype = CSRWRITE;
-         if ( csr_read &  csr_write)     i0_itype = CSRRW;
-         if (i0_dp.ebreak)               i0_itype = EBREAK;
-         if (i0_dp.ecall)                i0_itype = ECALL;
-         if (i0_dp.fence)                i0_itype = FENCE;
-         if (i0_dp.fence_i)              i0_itype = FENCEI;  // fencei will set this even with fence attribute
-         if (i0_dp.mret)                 i0_itype = MRET;
-         if (i0_dp.condbr)               i0_itype = CONDBR;
-         if (i0_dp.jal)                  i0_itype = JAL;
-      end
-   end
-
-
-
-
-
-// end pmu
-
-
-   eb1_dec_dec_ctl i0_dec (.inst(i0[31:0]),.out(i0_dp_raw));
-   
-
-
-   rvdff #(1) lsu_idle_ff (.*, .clk(active_clk), .din(lsu_idle_any), .dout(lsu_idle));
-
-
-
-   assign leak1_i1_stall_in = (dec_tlu_flush_leak_one_r | (leak1_i1_stall & ~dec_tlu_flush_lower_r));
-
-
-   assign leak1_mode = leak1_i1_stall;
-
-   assign leak1_i0_stall_in = ((dec_i0_decode_d & leak1_i1_stall) | (leak1_i0_stall & ~dec_tlu_flush_lower_r));
-
-
-
-
-   // 12b jal's can be predicted - these are calls
-
-   assign i0_pcall_imm[20:1] = {i0[31],i0[19:12],i0[20],i0[30:21]};
-
-   assign i0_pcall_12b_offset = (i0_pcall_imm[12]) ? (i0_pcall_imm[20:13] == 8'hff) : (i0_pcall_imm[20:13] == 8'h0);
-
-   assign i0_pcall_case  = i0_pcall_12b_offset & i0_dp_raw.imm20 &  (i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-   assign i0_pja_case    = i0_pcall_12b_offset & i0_dp_raw.imm20 & ~(i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-
-   assign i0_pcall_raw   = i0_dp_raw.jal &   i0_pcall_case;   // this includes ja
-   assign i0_pcall       = i0_dp.jal     &   i0_pcall_case;
-
-   assign i0_pja_raw     = i0_dp_raw.jal &   i0_pja_case;
-   assign i0_pja         = i0_dp.jal     &   i0_pja_case;
-
-
-   assign i0_br_offset[11:0] = (i0_pcall_raw | i0_pja_raw) ? i0_pcall_imm[12:1] : {i0[31],i0[7],i0[30:25],i0[11:8]};
-
-   assign i0_pret_case = (i0_dp_raw.jal & i0_dp_raw.imm12 & (i0r.rd[4:0] == 5'b0) & (i0r.rs1[4:0] == 5'd1 | i0r.rs1[4:0] == 5'd5));  // jalr with rd==0, rs1==1 or rs1==5 is a ret
-
-   assign i0_pret_raw = i0_dp_raw.jal &   i0_pret_case;
-   assign i0_pret     = i0_dp.jal     &   i0_pret_case;
-
-   assign i0_jal      = i0_dp.jal     &  ~i0_pcall_case & ~i0_pja_case & ~i0_pret_case;
-
-   // lsu stuff
-   // load/store mutually exclusive
-   assign dec_lsu_offset_d[11:0] = ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.load}} &               i0[31:20]) |
-                                   ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.store}} &             {i0[31:25],i0[11:7]});
-
-
-
-   assign div_p.valid    =  div_decode_d;
-
-   assign div_p.unsign   =  i0_dp.unsign;
-   assign div_p.rem      =  i0_dp.rem;
-
-
-   assign mul_p.valid    =  mul_decode_d;
-
-   assign mul_p.rs1_sign =  i0_dp.rs1_sign;
-   assign mul_p.rs2_sign =  i0_dp.rs2_sign;
-   assign mul_p.low      =  i0_dp.low;
-   assign mul_p.bext     =  i0_dp.bext;
-   assign mul_p.bdep     =  i0_dp.bdep;
-   assign mul_p.clmul    =  i0_dp.clmul;
-   assign mul_p.clmulh   =  i0_dp.clmulh;
-   assign mul_p.clmulr   =  i0_dp.clmulr;
-   assign mul_p.grev     =  i0_dp.grev;
-   assign mul_p.gorc     =  i0_dp.gorc;
-   assign mul_p.shfl     =  i0_dp.shfl;
-   assign mul_p.unshfl   =  i0_dp.unshfl;
-   assign mul_p.crc32_b  =  i0_dp.crc32_b;
-   assign mul_p.crc32_h  =  i0_dp.crc32_h;
-   assign mul_p.crc32_w  =  i0_dp.crc32_w;
-   assign mul_p.crc32c_b =  i0_dp.crc32c_b;
-   assign mul_p.crc32c_h =  i0_dp.crc32c_h;
-   assign mul_p.crc32c_w =  i0_dp.crc32c_w;
-   assign mul_p.bfp      =  i0_dp.bfp;
-
-   always_comb  begin
-      lsu_p = '0;
-
-      if (dec_extint_stall) begin
-         lsu_p.load = 1'b1;
-         lsu_p.word = 1'b1;
-         lsu_p.fast_int = 1'b1;
-         lsu_p.valid = 1'b1;
-      end
-      else begin
-         lsu_p.valid = lsu_decode_d;
-
-         lsu_p.load                         =  i0_dp.load ;
-         lsu_p.store                        =  i0_dp.store;
-         lsu_p.by                           =  i0_dp.by   ;
-         lsu_p.half                         =  i0_dp.half ;
-         lsu_p.word                         =  i0_dp.word ;
-         lsu_p.stack                        = (i0r.rs1[4:0]==5'd2);   // stack reference
-
-         lsu_p.load_ldst_bypass_d          =  load_ldst_bypass_d ;
-         lsu_p.store_data_bypass_d         =  store_data_bypass_d;
-         lsu_p.store_data_bypass_m         =  store_data_bypass_m;
-
-         lsu_p.unsign  =  i0_dp.unsign;
-      end
-   end
-
-
-   assign  dec_lsu_valid_raw_d    = (i0_valid_d & (i0_dp_raw.load | i0_dp_raw.store) & ~dma_dccm_stall_any & ~i0_block_raw_d) | dec_extint_stall;
-
-
-
-   assign i0r.rs1[4:0] = i0[19:15];
-   assign i0r.rs2[4:0] = i0[24:20];
-   assign i0r.rd[4:0]  = i0[11:7];
-
-
-   assign dec_i0_rs1_en_d   =  (i0_dp.rs1 & (i0r.rs1[4:0] != 5'd0));  // if rs1_en=0 then read will be all 0's
-   assign dec_i0_rs2_en_d   =  (i0_dp.rs2 & (i0r.rs2[4:0] != 5'd0));
-   assign i0_rd_en_d        =  (i0_dp.rd  & (i0r.rd[4:0]  != 5'd0));
-
-   assign dec_i0_rs1_d[4:0] =  i0r.rs1[4:0];
-   assign dec_i0_rs2_d[4:0] =  i0r.rs2[4:0];
-
-
-   assign i0_jalimm20       =  i0_dp.jal & i0_dp.imm20;   // jal
-   assign i0_uiimm20        = ~i0_dp.jal & i0_dp.imm20;
-
-
-   // csr logic
-
-   assign dec_csr_ren_d  = i0_dp.csr_read & i0_valid_d;
-   assign csr_ren_qual_d = i0_dp.csr_read & i0_legal_decode_d;
-
-   assign csr_clr_d =   i0_dp.csr_clr   & i0_legal_decode_d;
-   assign csr_set_d   = i0_dp.csr_set   & i0_legal_decode_d;
-   assign csr_write_d = i0_csr_write    & i0_legal_decode_d;
-
-   assign i0_csr_write_only_d = i0_csr_write & ~i0_dp.csr_read;
-
-   assign dec_csr_wen_unq_d = (i0_dp.csr_clr | i0_dp.csr_set | i0_csr_write) & i0_valid_d;   // for csr legal, can't write read-only csr
-
-   assign dec_csr_any_unq_d = any_csr_d & i0_valid_d;
-
-
-   assign dec_csr_rdaddr_d[11:0] =  {12{dec_csr_any_unq_d}} & i0[31:20];
-   assign dec_csr_wraddr_r[11:0] =  {12{r_d.csrwen & r_d.i0valid}} & r_d.csrwaddr[11:0];
-
-
-   // make sure csr doesn't write same cycle as dec_tlu_flush_lower_wb
-   // also use valid so it's flushable
-   assign dec_csr_wen_r = r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_r;
-
-   // If we are writing MIE or MSTATUS, hold off the external interrupt for a cycle on the write.
-   assign dec_csr_stall_int_ff = ((r_d.csrwaddr[11:0] == 12'h300) | (r_d.csrwaddr[11:0] == 12'h304)) & r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_wb;
-
-
-   rvdff #(5) csrmiscff (.*,
-                        .clk (active_clk),
-                        .din ({csr_ren_qual_d, csr_clr_d, csr_set_d, csr_write_d, i0_dp.csr_imm}),
-                        .dout({csr_read_x,     csr_clr_x, csr_set_x, csr_write_x, csr_imm_x})
-                       );
-
-
-
-
-   // perform the update operation if any
-
-   rvdffe #(37) csr_rddata_x_ff (.*, .en(i0_x_data_en & any_csr_d), .din( {i0[19:15],dec_csr_rddata_d[31:0]}), .dout({csrimm_x[4:0],csr_rddata_x[31:0]}));
-
-
-   assign csr_mask_x[31:0]       = ({32{ csr_imm_x}} & {27'b0,csrimm_x[4:0]}) |
-                                   ({32{~csr_imm_x}} &  exu_csr_rs1_x[31:0] );
-
-
-   assign write_csr_data_x[31:0] = ({32{csr_clr_x}}   & (csr_rddata_x[31:0] & ~csr_mask_x[31:0])) |
-                                   ({32{csr_set_x}}   & (csr_rddata_x[31:0] |  csr_mask_x[31:0])) |
-                                   ({32{csr_write_x}} & (                      csr_mask_x[31:0]));
-
-
-// pause instruction
-
-
-
-
-   assign clear_pause = (dec_tlu_flush_lower_r & ~dec_tlu_flush_pause_r) |
-                        (pause_state & (write_csr_data[31:1] == 31'b0));        // if 0 or 1 then exit pause state - 1 cycle pause
-
-   assign pause_state_in = (dec_tlu_wr_pause_r | pause_state) & ~clear_pause;
-
-
-
-   assign dec_pause_state = pause_state;
-
-
-
-      assign dec_pause_state_cg = pause_state & ~tlu_wr_pause_r1 & ~tlu_wr_pause_r2;
-
-// end pause
-
-
-   assign csr_data_wen = ((csr_clr_x | csr_set_x | csr_write_x) & csr_read_x) | dec_tlu_wr_pause_r | pause_state;
-
-   assign write_csr_data_in[31:0] = (pause_state)         ? (write_csr_data[31:0] - 32'b1) :
-                                    (dec_tlu_wr_pause_r) ? dec_csr_wrdata_r[31:0] : write_csr_data_x[31:0];
-
-   // will hold until write-back at which time the CSR will be updated while GPR is possibly written with prior CSR
-   rvdffe #(32) write_csr_ff (.*, .clk(free_l2clk), .en(csr_data_wen), .din(write_csr_data_in[31:0]), .dout(write_csr_data[31:0]));
-
-   assign pause_stall = pause_state;
-
-   // for csr write only data is produced by the alu
-   assign dec_csr_wrdata_r[31:0]  = (r_d.csrwonly & r_d.i0valid) ? i0_result_corr_r[31:0] : write_csr_data[31:0];
-
-
-
-   assign dec_i0_immed_d[31:0] =  i0_immed_d[31:0];
-
-   assign     i0_immed_d[31:0] = ({32{i0_dp.imm12}}                         & { {20{i0[31]}},i0[31:20] }) |  // jalr
-                                 ({32{i0_dp.shimm5}}                        & {  27'b0,      i0[24:20] }) |
-                                 ({32{i0_jalimm20}}                         & { {12{i0[31]}},i0[19:12],i0[20],i0[30:21],1'b0}) |
-                                 ({32{i0_uiimm20}}                          & { i0[31:12],12'b0 }) |
-                                 ({32{i0_csr_write_only_d & i0_dp.csr_imm}} & {  27'b0,      i0[19:15]});  // for csr's that only write csr, dont read csr
-
-
-   // all conditional branches are currently predict_nt
-   // change this to generate the sequential address for all other cases for NPC requirements at commit
-   assign dec_i0_br_immed_d[12:1] = (i0_ap.predict_nt & ~i0_dp.jal) ? i0_br_offset[11:0] : {10'b0,i0_ap_pc4,i0_ap_pc2};
-
-
-   assign last_br_immed_d[12:1] = ((i0_ap.predict_nt) ? {10'b0,i0_ap_pc4,i0_ap_pc2} : i0_br_offset[11:0] );
-
-   assign i0_valid_d = dec_ib0_valid_d;
-
-   // load_stall includes bus_barrier
-
-   assign i0_load_stall_d = (i0_dp.load ) & (lsu_load_stall_any | dma_dccm_stall_any);
-
-   assign i0_store_stall_d =  i0_dp.store & (lsu_store_stall_any | dma_dccm_stall_any);
-
-
-
-// some CSR reads need to be presync'd
-   assign i0_presync = i0_dp.presync | dec_tlu_presync_d | debug_fence_i | debug_fence_raw | dec_tlu_pipelining_disable;  // both fence's presync
-
-// some CSR writes need to be postsync'd
-   assign i0_postsync = i0_dp.postsync | dec_tlu_postsync_d | debug_fence_i | // only fence_i postsync
-                        (i0_csr_write_only_d & (i0[31:20] == 12'h7c2));   // wr_pause must postsync
-
-
-// debug fence csr
-   assign debug_fence_i     = dec_debug_fence_d & dbg_cmd_wrdata[0];
-   assign debug_fence_raw   = dec_debug_fence_d & dbg_cmd_wrdata[1];
-
-   assign debug_fence       = debug_fence_raw | debug_fence_i;    // fence_i causes a fence
-
-   assign i0_csr_write = i0_dp.csr_write & ~dec_debug_fence_d;
-// end debug
-
-
-   // lets make ebreak, ecall, mret postsync, so break sync into pre and post
-
-   assign presync_stall      = (i0_presync & prior_inflight_eff);
-
-   assign prior_inflight_eff = (i0_dp.div)  ?  prior_inflight_x  :  prior_inflight;
-
-   assign i0_div_prior_div_stall = i0_dp.div & div_active;
-
-   // Raw block has everything excepts the stalls coming from the lsu
-   assign i0_block_raw_d = (i0_dp.csr_read & prior_csr_write) |
-                            dec_extint_stall |
-                            pause_stall |
-                            leak1_i0_stall |
-                            dec_tlu_debug_stall |
-                            postsync_stall |
-                            presync_stall  |
-                            ((i0_dp.fence | debug_fence) & ~lsu_idle) |
-                            i0_nonblock_load_stall |
-                            i0_load_block_d |
-                            i0_nonblock_div_stall |
-                            i0_div_prior_div_stall;
-
-   assign i0_block_d    = i0_block_raw_d | i0_store_stall_d | i0_load_stall_d;
-   assign i0_exublock_d = i0_block_raw_d;
-
-
-   // block reads if there is a prior csr write in the pipeline
-   assign prior_csr_write = x_d.csrwonly |
-                            r_d.csrwonly |
-                            wbd.csrwonly;
-
-
-
-   if       (pt.BITMANIP_ZBB == 1)
-     assign bitmanip_zbb_legal      =  1'b1;
-   else
-     assign bitmanip_zbb_legal      = ~(i0_dp.zbb & ~i0_dp.zbp);
-
-   if       (pt.BITMANIP_ZBS == 1)
-     assign bitmanip_zbs_legal      =  1'b1;
-   else
-     assign bitmanip_zbs_legal      = ~i0_dp.zbs;
-
-   if       (pt.BITMANIP_ZBE == 1)
-     assign bitmanip_zbe_legal      =  1'b1;
-   else
-     assign bitmanip_zbe_legal      = ~i0_dp.zbe;
-
-   if       (pt.BITMANIP_ZBC == 1)
-     assign bitmanip_zbc_legal      =  1'b1;
-   else
-     assign bitmanip_zbc_legal      = ~i0_dp.zbc;
-
-   if       (pt.BITMANIP_ZBP == 1)
-     assign bitmanip_zbp_legal      =  1'b1;
-   else
-     assign bitmanip_zbp_legal      = ~(i0_dp.zbp & ~i0_dp.zbb);
-
-   if       (pt.BITMANIP_ZBR == 1)
-     assign bitmanip_zbr_legal      =  1'b1;
-   else
-     assign bitmanip_zbr_legal      = ~i0_dp.zbr;
-
-   if       (pt.BITMANIP_ZBF == 1)
-     assign bitmanip_zbf_legal      =  1'b1;
-   else
-     assign bitmanip_zbf_legal      = ~i0_dp.zbf;
-
-   if (pt.BITMANIP_ZBA == 1)
-     assign bitmanip_zba_legal      =  1'b1;
-   else
-     assign bitmanip_zba_legal      = ~i0_dp.zba;
-
-   if     ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     assign bitmanip_zbb_zbp_legal  =  1'b1;
-   else
-     assign bitmanip_zbb_zbp_legal  = ~(i0_dp.zbb & i0_dp.zbp);
-
-
-   assign any_csr_d      =  i0_dp.csr_read | i0_csr_write;
-   assign bitmanip_legal =  bitmanip_zbb_legal & bitmanip_zbs_legal & bitmanip_zbe_legal & bitmanip_zbc_legal & bitmanip_zbp_legal & bitmanip_zbr_legal & bitmanip_zbf_legal & bitmanip_zba_legal & bitmanip_zbb_zbp_legal;
-
-   assign i0_legal       =  (i0_dp.legal) & (~any_csr_d | dec_csr_legal_d) & bitmanip_legal;
-
-
-
-   // illegal inst handling
-
-
-   assign shift_illegal      = dec_i0_decode_d & ~i0_legal;
-
-   assign illegal_inst_en    = shift_illegal & ~illegal_lockout;
-
-   rvdffe #(32) illegal_any_ff (.*, .en(illegal_inst_en), .din(i0_inst_d[31:0]), .dout(dec_illegal_inst[31:0]));
-
-   assign illegal_lockout_in = (shift_illegal | illegal_lockout) & ~flush_final_r;
-
-
-
-   // allow illegals to flow down the pipe
-   assign dec_i0_decode_d = i0_valid_d & ~i0_block_d    & ~dec_tlu_flush_lower_r & ~flush_final_r;
-   assign i0_exudecode_d  = i0_valid_d & ~i0_exublock_d & ~dec_tlu_flush_lower_r & ~flush_final_r;
-
-   // define i0 legal decode
-   assign i0_legal_decode_d    = dec_i0_decode_d & i0_legal;
-   assign i0_exulegal_decode_d = i0_exudecode_d  & i0_legal;
-
-
-   // performance monitor signals
-   assign dec_pmu_instr_decoded = dec_i0_decode_d;
-
-   assign dec_pmu_decode_stall = i0_valid_d & ~dec_i0_decode_d;
-
-   assign dec_pmu_postsync_stall = postsync_stall & i0_valid_d;
-   assign dec_pmu_presync_stall  = presync_stall & i0_valid_d;
-
-
-
-   // illegals will postsync
-   assign ps_stall_in =  ( dec_i0_decode_d & (i0_postsync | ~i0_legal) ) |
-                         ( ps_stall & prior_inflight_x                 );
-
-
-
-   assign postsync_stall =  ps_stall;
-
-
-   assign prior_inflight_x    =  x_d.i0valid;
-   assign prior_inflight_wb   =  r_d.i0valid;
-
-   assign prior_inflight = prior_inflight_x | prior_inflight_wb;
-
-   assign dec_i0_alu_decode_d = i0_exulegal_decode_d & i0_dp.alu;
-   assign dec_i0_branch_d     = i0_dp.condbr | i0_dp.jal | i0_br_error_all;
-
-   assign lsu_decode_d = i0_legal_decode_d    & i0_dp.lsu;
-   assign mul_decode_d = i0_exulegal_decode_d & i0_dp.mul;
-   assign div_decode_d = i0_exulegal_decode_d & i0_dp.div;
-
-   assign dec_qual_lsu_d = i0_dp.lsu;
-
-
-
-
-
-// scheduling logic for alu
-
-   assign i0_rs1_depend_i0_x  = dec_i0_rs1_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs1[4:0]);
-   assign i0_rs1_depend_i0_r  = dec_i0_rs1_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_depend_i0_x  = dec_i0_rs2_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs2[4:0]);
-   assign i0_rs2_depend_i0_r  = dec_i0_rs2_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs2[4:0]);
-
-
-// order the producers as follows:  , i0_x, i0_r, i0_wb
-
-   assign {i0_rs1_class_d, i0_rs1_depth_d[1:0]} = (i0_rs1_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs1_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-   assign {i0_rs2_class_d, i0_rs2_depth_d[1:0]} = (i0_rs2_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs2_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-
-// stores will bypass load data in the lsu pipe
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin : genblock
-      assign i0_load_block_d = (i0_rs1_class_d.load & i0_rs1_depth_d[0]) |
-                               (i0_rs2_class_d.load & i0_rs2_depth_d[0] & ~i0_dp.store);
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[1] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[1] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-   end
-   else begin : genblock
-
-      assign i0_load_block_d = 1'b0;
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[0] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m = 1'b0;
-   end
-
-
-
-
-
-
-   assign dec_tlu_i0_valid_r     =  r_d.i0valid & ~dec_tlu_flush_lower_wb;
-
-
-   assign d_t.legal              =  i0_legal_decode_d;
-   assign d_t.icaf               =  i0_icaf_d & i0_legal_decode_d;                // dbecc is icaf exception
-   assign d_t.icaf_second        =  dec_i0_icaf_second_d & i0_legal_decode_d;     // this includes icaf and dbecc
-   assign d_t.icaf_type[1:0]     =  dec_i0_icaf_type_d[1:0];
-
-   assign d_t.fence_i            = (i0_dp.fence_i | debug_fence_i) & i0_legal_decode_d;
-
-// put pmu info into the trap packet
-   assign d_t.pmu_i0_itype       =  i0_itype;
-   assign d_t.pmu_i0_br_unpred   =  i0_br_unpred;
-   assign d_t.pmu_divide         =  1'b0;
-   assign d_t.pmu_lsu_misaligned =  1'b0;
-
-   assign d_t.i0trigger[3:0]     =  dec_i0_trigger_match_d[3:0] & {4{dec_i0_decode_d}};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_xff (.*, .en(i0_x_ctl_en), .din(d_t),  .dout(x_t));
-
-   always_comb begin
-      x_t_in = x_t;
-      x_t_in.i0trigger[3:0] = x_t.i0trigger & ~{4{dec_tlu_flush_lower_wb}};
-   end
-
-
-   rvdfflie  #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_r_ff (.*, .en(i0_x_ctl_en), .din(x_t_in),  .dout(r_t));
-
-
-    always_comb begin
-
-      r_t_in                             =  r_t;
-
-      r_t_in.i0trigger[3:0]              = ({4{(r_d.i0load | r_d.i0store)}} & lsu_trigger_match_r[3:0]) | r_t.i0trigger[3:0];
-      r_t_in.pmu_lsu_misaligned          = lsu_pmu_misaligned_r;   // only valid if a load/store is valid in DC3 stage
-
-      if (dec_tlu_flush_lower_wb) r_t_in = '0 ;
-
-   end
-
-
-   always_comb begin
-
-      dec_tlu_packet_r                 =  r_t_in;
-      dec_tlu_packet_r.pmu_divide      =  r_d.i0div & r_d.i0valid;
-
-   end
-
-
-// end tlu stuff
-
-
-   assign i0_d_c.mul                =  i0_dp.mul  & i0_legal_decode_d;
-   assign i0_d_c.load               =  i0_dp.load & i0_legal_decode_d;
-   assign i0_d_c.alu                =  i0_dp.alu  & i0_legal_decode_d;
-
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_x_c_ff   (.*, .en(i0_x_ctl_en),  .clk(active_clk), .din(i0_d_c),  .dout(i0_x_c));
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_r_c_ff   (.*, .en(i0_r_ctl_en),  .clk(active_clk), .din(i0_x_c),  .dout(i0_r_c));
-
-
-   assign d_d.i0rd[4:0]             =  i0r.rd[4:0];
-   assign d_d.i0v                   =  i0_rd_en_d  & i0_legal_decode_d;
-   assign d_d.i0valid               =  dec_i0_decode_d;  // has flush_final_r
-
-   assign d_d.i0load                =  i0_dp.load  & i0_legal_decode_d;
-   assign d_d.i0store               =  i0_dp.store & i0_legal_decode_d;
-   assign d_d.i0div                 =  i0_dp.div   & i0_legal_decode_d;
-
-
-   assign d_d.csrwen                =  dec_csr_wen_unq_d   & i0_legal_decode_d;
-   assign d_d.csrwonly              =  i0_csr_write_only_d & dec_i0_decode_d;
-   assign d_d.csrwaddr[11:0]        =  (d_d.csrwen) ? i0[31:20] : '0;    // csr write address for rd==0 case
-
-
-   rvdff  #(3) i0cgff               (.*, .clk(active_clk),            .din(i0_pipe_en[3:1]), .dout(i0_pipe_en[2:0]));
-
-   assign i0_pipe_en[3]             =  dec_i0_decode_d;
-
-   assign i0_x_ctl_en               = (|i0_pipe_en[3:2] | clk_override);
-   assign i0_r_ctl_en               = (|i0_pipe_en[2:1] | clk_override);
-   assign i0_wb_ctl_en              = (|i0_pipe_en[1:0] | clk_override);
-   assign i0_x_data_en              = ( i0_pipe_en[3]   | clk_override);
-   assign i0_r_data_en              = ( i0_pipe_en[2]   | clk_override);
-   assign i0_wb_data_en             = ( i0_pipe_en[1]   | clk_override);
-
-   assign dec_data_en[1:0]          = {i0_x_data_en, i0_r_data_en};
-   assign dec_ctl_en[1:0]           = {i0_x_ctl_en,  i0_r_ctl_en};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)),.LEFT(15) ) e1ff (.*, .en(i0_x_ctl_en), .din(d_d),  .dout(x_d));
-
-   always_comb begin
-      x_d_in = x_d;
-
-      x_d_in.i0v         = x_d.i0v     & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-      x_d_in.i0valid     = x_d.i0valid & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-   end
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15) ) r_d_ff (.*, .en(i0_r_ctl_en), .din(x_d_in), .dout(r_d));
-
-
-   always_comb begin
-
-        r_d_in = r_d;
-
-
-      // for the bench
-      r_d_in.i0rd[4:0]   =  r_d.i0rd[4:0];
-
-      r_d_in.i0v         = (r_d.i0v      & ~dec_tlu_flush_lower_wb);
-      r_d_in.i0valid     = (r_d.i0valid  & ~dec_tlu_flush_lower_wb);
-
-      r_d_in.i0load      =  r_d.i0load   & ~dec_tlu_flush_lower_wb;
-      r_d_in.i0store     =  r_d.i0store  & ~dec_tlu_flush_lower_wb;
-
-   end
-
-
-   rvdfflie #(.WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15)) wbff (.*, .en(i0_wb_ctl_en), .din(r_d_in), .dout(wbd));
-
-   assign dec_i0_waddr_r[4:0]       =  r_d_in.i0rd[4:0];
-
-   assign     i0_wen_r              =  r_d_in.i0v & ~dec_tlu_i0_kill_writeb_r;
-   assign dec_i0_wen_r              =  i0_wen_r   & ~r_d_in.i0div & ~i0_load_kill_wen_r;  // don't write a nonblock load 1st time down the pipe
-   assign dec_i0_wdata_r[31:0]      =  i0_result_corr_r[31:0];
-
-
-   // divide stuff
-   assign div_e1_to_r         = (x_d.i0div & x_d.i0valid) |
-                                (r_d.i0div & r_d.i0valid);
-
-   assign div_active_in = i0_div_decode_d | (div_active & ~exu_div_wren & ~nonblock_div_cancel);
-
-
-   assign dec_div_active = div_active;
-
-   // nonblocking div scheme
-
-   assign i0_nonblock_div_stall  = (dec_i0_rs1_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs1[4:0])) |
-                                   (dec_i0_rs2_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs2[4:0]));
-
-
-   assign div_flush              = (x_d.i0div & x_d.i0valid & (x_d.i0rd[4:0]==5'b0)                           ) |
-                                   (x_d.i0div & x_d.i0valid & dec_tlu_flush_lower_r                           ) |
-                                   (r_d.i0div & r_d.i0valid & dec_tlu_flush_lower_r & dec_tlu_i0_kill_writeb_r);
-
-
-   // cancel if any younger inst committing this cycle to same dest as nonblock divide
-   assign nonblock_div_cancel    = (div_active &  div_flush) |
-                                   (div_active & ~div_e1_to_r & (r_d.i0rd[4:0] == div_waddr_wb[4:0]) & i0_wen_r);
-
-   assign dec_div_cancel         =  nonblock_div_cancel;
-
-
-
-   assign i0_div_decode_d            =  i0_legal_decode_d & i0_dp.div;
-
-// for load_to_use_plus1, the load result data is merged in R stage instead of D
-
-   if ( pt.LOAD_TO_USE_PLUS1 == 1 ) begin : genblock1
-      assign i0_result_x[31:0]          = exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = (r_d.i0v & r_d.i0load) ? lsu_result_m[31:0] : i0_result_r_raw[31:0];
-   end
-   else begin : genblock1
-      assign i0_result_x[31:0]          = (x_d.i0v & x_d.i0load) ? lsu_result_m[31:0] : exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = i0_result_r_raw[31:0];
-   end
-
-
-   rvdffe #(32) i0_result_r_ff       (.*, .en(i0_r_data_en & (x_d.i0v | x_d.csrwen | debug_valid_x)),  .din(i0_result_x[31:0]),       .dout(i0_result_r_raw[31:0]));
-
-   // correct lsu load data - don't use for bypass, do pass down the pipe
-   assign i0_result_corr_r[31:0]     = (r_d.i0v & r_d.i0load) ? lsu_result_corr_r[31:0] : i0_result_r_raw[31:0];
-
-
-   rvdffe #(12) e1brpcff             (.*, .en(i0_x_data_en), .din(last_br_immed_d[12:1] ), .dout(last_br_immed_x[12:1]));
-
-
-
-   assign i0_wb_en                   =  i0_wb_data_en;
-
-   assign i0_inst_wb_in[31:0]        =  i0_inst_r[31:0];
-   assign i0_inst_d[31:0]            = (dec_i0_pc4_d)    ?  i0[31:0]                                  :  {16'b0, ifu_i0_cinst[15:0]};
-
-
-   assign trace_enable = ~dec_tlu_trace_disable;
-
-
-   rvdffe #(.WIDTH(5),.OVERRIDE(1))  i0rdff  (.*, .en(i0_div_decode_d),        .din(i0r.rd[4:0]),             .dout(div_waddr_wb[4:0]));
-
-   rvdffe #(32) i0xinstff            (.*, .en(i0_x_data_en & trace_enable),    .din(i0_inst_d[31:0]),         .dout(i0_inst_x[31:0]));
-   rvdffe #(32) i0cinstff            (.*, .en(i0_r_data_en & trace_enable),    .din(i0_inst_x[31:0]),         .dout(i0_inst_r[31:0]));
-
-   rvdffe #(32) i0wbinstff           (.*, .en(i0_wb_en & trace_enable),        .din(i0_inst_wb_in[31:0]),     .dout(i0_inst_wb[31:0]));
-   rvdffe #(31) i0wbpcff             (.*, .en(i0_wb_en & trace_enable),        .din(dec_tlu_i0_pc_r[31:1]),   .dout(  i0_pc_wb[31:1]));
-
-   assign dec_i0_inst_wb[31:0] = i0_inst_wb[31:0];
-   assign dec_i0_pc_wb[31:1] = i0_pc_wb[31:1];
-
-
-
-   rvdffpcie #(31) i0_pc_r_ff           (.*, .en(i0_r_data_en), .din(exu_i0_pc_x[31:1]), .dout(dec_i0_pc_r[31:1]));
-
-   assign dec_tlu_i0_pc_r[31:1]      = dec_i0_pc_r[31:1];
-
-
-   rvbradder ibradder_correct (
-                     .pc(exu_i0_pc_x[31:1]),
-                     .offset(last_br_immed_x[12:1]),
-                     .dout(pred_correct_npc_x[31:1]));
-
-
-
-   // add nonblock load rs1/rs2 bypass cases
-
-   assign i0_rs1_nonblock_load_bypass_en_d  = dec_i0_rs1_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_nonblock_load_bypass_en_d  = dec_i0_rs2_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs2[4:0]);
-
-
-
-   // bit 2 is priority match, bit 0 lowest priority, i0_x, i0_r
-
-   assign i0_rs1bypass[2]                =  i0_rs1_depth_d[0] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul                      );
-   assign i0_rs1bypass[1]                =  i0_rs1_depth_d[0] & (                                          i0_rs1_class_d.load);
-   assign i0_rs1bypass[0]                =  i0_rs1_depth_d[1] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul | i0_rs1_class_d.load);
-
-   assign i0_rs2bypass[2]                =  i0_rs2_depth_d[0] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul                      );
-   assign i0_rs2bypass[1]                =  i0_rs2_depth_d[0] & (                                          i0_rs2_class_d.load);
-   assign i0_rs2bypass[0]                =  i0_rs2_depth_d[1] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul | i0_rs2_class_d.load);
-
-
-   assign dec_i0_rs1_bypass_en_d[3]      =  i0_rs1_nonblock_load_bypass_en_d & ~i0_rs1bypass[0] & ~i0_rs1bypass[1] & ~i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[2]      =  i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[1]      =  i0_rs1bypass[1];
-   assign dec_i0_rs1_bypass_en_d[0]      =  i0_rs1bypass[0];
-
-   assign dec_i0_rs2_bypass_en_d[3]      =  i0_rs2_nonblock_load_bypass_en_d & ~i0_rs2bypass[0] & ~i0_rs2bypass[1] & ~i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[2]      =  i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[1]      =  i0_rs2bypass[1];
-   assign dec_i0_rs2_bypass_en_d[0]      =  i0_rs2bypass[0];
-
-
-   assign dec_i0_result_r[31:0]          =  i0_result_r[31:0];
-
-
-endmodule // eb1_dec_decode_ctl
-
-
-
-
-
-// file "decode" is human readable file that has all of the instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "decode" except legal equation:
-
-// 1) coredecode -in decode > coredecode.e
-
-// 2) espresso -Dso -oeqntott coredecode.e | addassign -pre out.  > equations
-
-// to generate the legal (32b instruction is legal) equation below:
-
-// 1) coredecode -in decode -legal > legal.e
-
-// 2) espresso -Dso -oeqntott legal.e | addassign -pre out. > legal_equation
-
-module eb1_dec_dec_ctl
-import eb1_pkg::*;
-  (
-   input logic [31:0] inst,
-
-   output eb1_dec_pkt_t out
-   );
-
-   logic [31:0] i;
-
-
-   assign i[31:0] = inst[31:0];
-
-
-assign out.alu = (i[30]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[5]&i[4]) | (i[29]
-    &!i[27]&!i[24]&i[4]) | (!i[25]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[25]
-    &i[13]&i[12]) | (i[27]&i[25]&i[14]&i[4]) | (i[29]&i[27]&!i[14]&i[4]) | (
-    i[29]&!i[14]&i[5]&i[4]) | (!i[27]&!i[25]&i[14]&i[4]) | (i[30]&!i[29]
-    &!i[13]&i[4]) | (!i[30]&!i[27]&!i[25]&i[4]) | (i[13]&!i[5]&i[4]) | (
-    !i[12]&!i[5]&i[4]) | (i[2]) | (i[6]) | (i[30]&i[24]&i[23]&i[22]&i[21]
-    &i[20]&!i[5]&i[4]) | (!i[30]&i[29]&!i[24]&!i[23]&i[22]&i[21]&i[20]
-    &!i[5]&i[4]) | (!i[30]&i[24]&!i[23]&!i[22]&!i[21]&!i[20]&!i[5]&i[4]);
-
-assign out.rs1 = (!i[14]&!i[13]&!i[2]) | (!i[13]&i[11]&!i[2]) | (i[19]&i[13]&!i[2]) | (
-    !i[13]&i[10]&!i[2]) | (i[18]&i[13]&!i[2]) | (!i[13]&i[9]&!i[2]) | (
-    i[17]&i[13]&!i[2]) | (!i[13]&i[8]&!i[2]) | (i[16]&i[13]&!i[2]) | (
-    !i[13]&i[7]&!i[2]) | (i[15]&i[13]&!i[2]) | (!i[4]&!i[3]) | (!i[6]
-    &!i[2]);
-
-assign out.rs2 = (i[5]&!i[4]&!i[2]) | (!i[6]&i[5]&!i[2]);
-
-assign out.imm12 = (!i[4]&!i[3]&i[2]) | (i[13]&!i[5]&i[4]&!i[2]) | (!i[13]&!i[12]
-    &i[6]&i[4]) | (!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.rd = (!i[5]&!i[2]) | (i[5]&i[2]) | (i[4]);
-
-assign out.shimm5 = (i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.imm20 = (i[5]&i[3]) | (i[4]&i[2]);
-
-assign out.pc = (!i[5]&!i[3]&i[2]) | (i[5]&i[3]);
-
-assign out.load = (!i[5]&!i[4]&!i[2]);
-
-assign out.store = (!i[6]&i[5]&!i[4]);
-
-assign out.lsu = (!i[6]&!i[4]&!i[2]);
-
-assign out.add = (!i[14]&!i[13]&!i[12]&!i[5]&i[4]) | (!i[5]&!i[3]&i[2]) | (!i[30]
-    &!i[25]&!i[14]&!i[13]&!i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sub = (i[30]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (!i[29]&!i[25]&!i[14]
-    &i[13]&!i[6]&i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]) | (
-    !i[14]&i[13]&!i[5]&i[4]&!i[2]) | (i[6]&!i[4]&!i[2]);
-
-assign out.land = (!i[27]&!i[25]&i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[14]&i[13]&i[12]
-    &!i[5]&!i[2]);
-
-assign out.lor = (!i[6]&i[3]) | (!i[29]&!i[27]&!i[25]&i[14]&i[13]&!i[12]&!i[6]&!i[2]) | (
-    i[5]&i[4]&i[2]) | (!i[13]&!i[12]&i[6]&i[4]) | (i[14]&i[13]&!i[12]
-    &!i[5]&!i[2]);
-
-assign out.lxor = (!i[29]&!i[27]&!i[25]&i[14]&!i[13]&!i[12]&i[4]&!i[2]) | (i[14]
-    &!i[13]&!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sll = (!i[29]&!i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sra = (i[30]&!i[29]&!i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.srl = (!i[30]&!i[29]&!i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.slt = (!i[29]&!i[25]&!i[14]&i[13]&!i[6]&i[4]&!i[2]) | (!i[14]&i[13]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.unsign = (!i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]) | (!i[14]&i[13]
-    &i[12]&!i[5]&!i[2]) | (i[13]&i[6]&!i[4]&!i[2]) | (i[14]&!i[5]&!i[4]) | (
-    !i[25]&!i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[27]&i[25]&i[14]&i[13]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.condbr = (i[6]&!i[4]&!i[2]);
-
-assign out.beq = (!i[14]&!i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bne = (!i[14]&i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bge = (i[14]&i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.blt = (i[14]&!i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.jal = (i[6]&i[2]);
-
-assign out.by = (!i[13]&!i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.half = (i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.word = (i[13]&!i[6]&!i[4]);
-
-assign out.csr_read = (i[13]&i[6]&i[4]) | (i[7]&i[6]&i[4]) | (i[8]&i[6]&i[4]) | (
-    i[9]&i[6]&i[4]) | (i[10]&i[6]&i[4]) | (i[11]&i[6]&i[4]);
-
-assign out.csr_clr = (i[15]&i[13]&i[12]&i[6]&i[4]) | (i[16]&i[13]&i[12]&i[6]&i[4]) | (
-    i[17]&i[13]&i[12]&i[6]&i[4]) | (i[18]&i[13]&i[12]&i[6]&i[4]) | (
-    i[19]&i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_set = (i[15]&!i[12]&i[6]&i[4]) | (i[16]&!i[12]&i[6]&i[4]) | (i[17]
-    &!i[12]&i[6]&i[4]) | (i[18]&!i[12]&i[6]&i[4]) | (i[19]&!i[12]&i[6]
-    &i[4]);
-
-assign out.csr_write = (!i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_imm = (i[14]&!i[13]&i[6]&i[4]) | (i[15]&i[14]&i[6]&i[4]) | (i[16]
-    &i[14]&i[6]&i[4]) | (i[17]&i[14]&i[6]&i[4]) | (i[18]&i[14]&i[6]&i[4]) | (
-    i[19]&i[14]&i[6]&i[4]);
-
-assign out.presync = (!i[5]&i[3]) | (!i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (
-    !i[13]&i[9]&i[6]&i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]
-    &i[6]&i[4]) | (i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (
-    i[17]&i[13]&i[6]&i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]
-    &i[4]);
-
-assign out.postsync = (i[12]&!i[5]&i[3]) | (!i[22]&!i[13]&!i[12]&i[6]&i[4]) | (
-    !i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (!i[13]&i[9]&i[6]
-    &i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]&i[6]&i[4]) | (
-    i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (i[17]&i[13]&i[6]
-    &i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]&i[4]);
-
-assign out.ebreak = (!i[22]&i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.ecall = (!i[21]&!i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mret = (i[29]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mul = (!i[30]&i[27]&i[24]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&i[23]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[27]&i[13]
-    &!i[6]&i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[22]&!i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[22]&i[21]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[30]&i[29]&i[27]&!i[23]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]&i[23]&i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[2]) | (i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&!i[27]
-    &i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[14]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.rs1_sign = (!i[27]&i[25]&!i[14]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (
-    !i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.rs2_sign = (!i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.low = (i[25]&!i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.div = (!i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.rem = (!i[27]&i[25]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.fence = (!i[5]&i[3]);
-
-assign out.fence_i = (i[12]&!i[5]&i[3]);
-
-assign out.clz = (i[30]&!i[27]&!i[24]&!i[22]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.ctz = (i[30]&!i[27]&!i[24]&!i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.pcnt = (i[30]&!i[27]&!i[24]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_b = (i[30]&!i[27]&i[22]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_h = (i[30]&!i[27]&i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.slo = (!i[30]&i[29]&!i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sro = (!i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.min = (i[27]&i[25]&i[14]&!i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.max = (i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.pack = (!i[30]&i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packu = (i[30]&i[27]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packh = (!i[30]&i[27]&!i[25]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.rol = (i[30]&!i[27]&!i[14]&i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.ror = (i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbb = (i[30]&!i[27]&!i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    !i[30]&i[27]&i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]) | (i[30]&i[29]&!i[27]
-    &i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[27]&!i[13]&!i[12]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[14]&!i[13]&!i[12]&!i[6]&i[5]&!i[2]) | (i[30]
-    &!i[27]&i[13]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[29]&!i[27]&!i[6]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[29]&i[24]&i[23]&i[22]&i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[29]&i[27]&!i[24]&!i[23]&i[22]
-    &i[21]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]
-    &i[24]&!i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[30]&i[29]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.sbset = (!i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbclr = (i[30]&!i[29]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbinv = (i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbext = (i[30]&!i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbs = (i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]) | (i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.bext = (!i[30]&i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.bdep = (i[30]&i[27]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbe = (i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmul = (i[27]&i[25]&!i[14]&!i[13]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmulh = (i[27]&!i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.clmulr = (i[27]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbc = (i[27]&i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.grev = (i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.gorc = (!i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.shfl = (!i[30]&!i[29]&i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.unshfl = (!i[30]&!i[29]&i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbp = (!i[30]&i[29]&!i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[30]&!i[27]&i[13]&!i[6]
-    &i[5]&i[4]&!i[2]) | (i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (
-    i[30]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (i[29]&!i[27]&i[12]&!i[6]
-    &i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&i[12]&!i[6]&i[5]&i[4]
-    &!i[2]) | (i[29]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.crc32_b = (i[30]&!i[27]&i[24]&!i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]);
-
-assign out.crc32_h = (i[30]&!i[27]&i[24]&!i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32_w = (i[30]&!i[27]&i[24]&!i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32c_b = (i[30]&!i[27]&i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.crc32c_h = (i[30]&!i[27]&i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.crc32c_w = (i[30]&!i[27]&i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.zbr = (i[30]&!i[27]&i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.bfp = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.zbf = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.sh1add = (i[29]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.sh2add = (i[29]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.sh3add = (i[29]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.zba = (i[29]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.pm_alu = (i[28]&i[22]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[29]&!i[27]&!i[25]
-    &!i[6]&i[4]) | (!i[29]&!i[27]&!i[25]&!i[13]&i[12]&!i[6]&i[4]) | (
-    !i[29]&!i[27]&!i[25]&!i[14]&!i[6]&i[4]) | (i[13]&!i[5]&i[4]) | (i[4]
-    &i[2]) | (!i[12]&!i[5]&i[4]);
-
-
-assign out.legal = (!i[31]&!i[30]&!i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]
-    &i[22]&!i[21]&i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]
-    &!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]&!i[21]
-    &!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]&!i[9]&!i[8]
-    &!i[7]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]
-    &!i[25]&i[24]&!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&i[24]&!i[22]&!i[21]&!i[6]&!i[5]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[23]
-    &!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]
-    &!i[28]&!i[26]&!i[25]&!i[24]&!i[23]&!i[21]&!i[6]&!i[5]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[25]&i[13]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[26]&!i[25]&!i[24]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&i[14]&!i[12]&!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[28]&!i[27]&!i[26]&!i[25]&i[13]&!i[12]&!i[6]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[13]&!i[12]
-    &!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[28]&!i[27]&!i[26]&!i[25]
-    &i[14]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[29]
-    &!i[28]&!i[26]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]
-    &i[0]) | (!i[31]&i[30]&!i[28]&i[27]&!i[26]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&i[27]&!i[26]&!i[25]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]
-    &!i[29]&!i[28]&!i[27]&!i[26]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[14]&!i[13]&!i[12]&i[6]&i[5]&!i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[29]
-    &!i[28]&!i[26]&!i[25]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]
-    &i[1]&i[0]) | (i[14]&i[6]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[14]
-    &!i[13]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[12]&!i[6]&!i[5]&i[4]
-    &!i[3]&i[1]&i[0]) | (!i[13]&i[12]&i[6]&i[5]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &!i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[13]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]
-    &!i[13]&!i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]
-    &i[2]&i[1]&i[0]) | (i[13]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    i[6]&i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (!i[14]&!i[12]&!i[6]&!i[4]
-    &!i[3]&!i[2]&i[1]&i[0]) | (!i[13]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]
-    &i[0]) | (i[13]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[6]&i[4]&!i[3]
-    &i[2]&i[1]&i[0]);
-
-
-endmodule // eb1_dec_dec_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dec_gpr_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dec_gpr_ctl.sv
deleted file mode 100644
index 62ddf2e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dec_gpr_ctl.sv
+++ /dev/null
@@ -1,95 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_gpr_ctl
-import eb1_pkg::*;
-#(
-   `include "eb1_param.vh"
- )  (
-    input logic [4:0]  raddr0,       // logical read addresses
-    input logic [4:0]  raddr1,
-
-    input logic        wen0,         // write enable
-    input logic [4:0]  waddr0,       // write address
-    input logic [31:0] wd0,          // write data
-
-    input logic        wen1,         // write enable
-    input logic [4:0]  waddr1,       // write address
-    input logic [31:0] wd1,          // write data
-
-    input logic        wen2,         // write enable
-    input logic [4:0]  waddr2,       // write address
-    input logic [31:0] wd2,          // write data
-
-    input logic        clk,
-    input logic        rst_l,
-
-    output logic [31:0] rd0,         // read data
-    output logic [31:0] rd1,
-
-    input  logic        scan_mode
-);
-
-   logic [31:1] [31:0] gpr_out;      // 31 x 32 bit GPRs
-   logic [31:1] [31:0] gpr_in;
-   logic [31:1] w0v,w1v,w2v;
-   logic [31:1] gpr_wr_en;
-
-   // GPR Write Enables
-   assign gpr_wr_en[31:1] = (w0v[31:1] | w1v[31:1] | w2v[31:1]);
-   for ( genvar j=1; j<32; j++ )  begin : gpr
-      rvdffe #(32) gprff (.*, .en(gpr_wr_en[j]), .din(gpr_in[j][31:0]), .dout(gpr_out[j][31:0]));
-   end : gpr
-
-   // the read out
-   always_comb begin
-      rd0[31:0] = 32'b0;
-      rd1[31:0] = 32'b0;
-      w0v[31:1] = 31'b0;
-      w1v[31:1] = 31'b0;
-      w2v[31:1] = 31'b0;
-      gpr_in[31:1] = '0;
-
-      // GPR Read logic
-      for (int j=1; j<32; j++ )  begin
-         rd0[31:0] |= ({32{(raddr0[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-         rd1[31:0] |= ({32{(raddr1[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-      end
-
-     // GPR Write logic
-     for (int j=1; j<32; j++ )  begin
-         w0v[j]     = wen0  & (waddr0[4:0]== 5'(j) );
-         w1v[j]     = wen1  & (waddr1[4:0]== 5'(j) );
-         w2v[j]     = wen2  & (waddr2[4:0]== 5'(j) );
-         gpr_in[j]  =    ({32{w0v[j]}} & wd0[31:0]) |
-                         ({32{w1v[j]}} & wd1[31:0]) |
-                         ({32{w2v[j]}} & wd2[31:0]);
-     end
-   end // always_comb begin
-
-`ifdef RV_ASSERT_ON
-
-   logic  write_collision_unused;
-   assign write_collision_unused = ( (w0v[31:1] == w1v[31:1]) & wen0 & wen1 ) |
-                                   ( (w0v[31:1] == w2v[31:1]) & wen0 & wen2 ) |
-                                   ( (w1v[31:1] == w2v[31:1]) & wen1 & wen2 );
-
-
-   // asserting that no 2 ports will write to the same gpr simultaneously
-   assert_multiple_wen_to_same_gpr: assert #0 (~( write_collision_unused ) );
-
-`endif
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dec_ib_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dec_ib_ctl.sv
deleted file mode 100644
index 0eb95df..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dec_ib_ctl.sv
+++ /dev/null
@@ -1,164 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_ib_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic                 dbg_cmd_valid,                      // valid dbg cmd
-
-   input logic                 dbg_cmd_write,                      // dbg cmd is write
-   input logic [1:0]           dbg_cmd_type,                       // dbg type
-   input logic [31:0]          dbg_cmd_addr,                       // expand to 31:0
-
-   input eb1_br_pkt_t i0_brp,                                     // i0 branch packet from aligner
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index,    // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,               // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,              // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input logic       ifu_i0_pc4,                                   // i0 is 4B inst else 2B
-   input logic       ifu_i0_valid,                                 // i0 valid from ifu
-   input logic       ifu_i0_icaf,                                  // i0 instruction access fault
-   input logic [1:0] ifu_i0_icaf_type,                             // i0 instruction access fault type
-
-   input logic   ifu_i0_icaf_second,                               // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,                                     // i0 double-bit error
-   input logic [31:0]  ifu_i0_instr,                               // i0 instruction from the aligner
-   input logic [31:1]  ifu_i0_pc,                                  // i0 pc from the aligner
-
-
-   output logic dec_ib0_valid_d,                                   // ib0 valid
-   output logic dec_debug_valid_d,                                 // Debug read or write at D-stage
-
-
-   output logic [31:0] dec_i0_instr_d,                             // i0 inst at decode
-
-   output logic [31:1] dec_i0_pc_d,                                // i0 pc at decode
-
-   output logic dec_i0_pc4_d,                                      // i0 is 4B inst else 2B
-
-   output eb1_br_pkt_t dec_i0_brp,                                // i0 branch packet at decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   output logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,              // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag,             // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   output logic dec_i0_icaf_d,                                     // i0 instruction access fault at decode
-   output logic dec_i0_icaf_second_d,                              // i0 instruction access fault on second 2B of 4B inst
-   output logic [1:0] dec_i0_icaf_type_d,                          // i0 instruction access fault type
-   output logic dec_i0_dbecc_d,                                    // i0 double-bit error at decode
-   output logic dec_debug_wdata_rs1_d,                             // put debug write data onto rs1 source: machine is halted
-
-   output logic dec_debug_fence_d                                  // debug fence inst
-
-   );
-
-
-   logic         debug_valid;
-   logic [4:0]   dreg;
-   logic [11:0]  dcsr;
-   logic [31:0]  ib0, ib0_debug_in;
-
-   logic         debug_read;
-   logic         debug_write;
-   logic         debug_read_gpr;
-   logic         debug_write_gpr;
-   logic         debug_read_csr;
-   logic         debug_write_csr;
-
-   logic [34:0]  ifu_i0_pcdata, pc0;
-
-   assign ifu_i0_pcdata[34:0] = { ifu_i0_icaf_second, ifu_i0_dbecc, ifu_i0_icaf,
-                                  ifu_i0_pc[31:1], ifu_i0_pc4 };
-
-   assign pc0[34:0] = ifu_i0_pcdata[34:0];
-
-   assign dec_i0_icaf_second_d = pc0[34];   // icaf's can only decode as i0
-
-   assign dec_i0_dbecc_d = pc0[33];
-
-   assign dec_i0_icaf_d = pc0[32];
-   assign dec_i0_pc_d[31:1] = pc0[31:1];
-   assign dec_i0_pc4_d = pc0[0];
-
-   assign dec_i0_icaf_type_d[1:0] = ifu_i0_icaf_type[1:0];
-
-// GPR accesses
-
-// put reg to read on rs1
-// read ->   or %x0,  %reg,%x0      {000000000000,reg[4:0],110000000110011}
-
-// put write date on rs1
-// write ->  or %reg, %x0, %x0      {00000000000000000110,reg[4:0],0110011}
-
-
-// CSR accesses
-// csr is of form rd, csr, rs1
-
-// read  -> csrrs %x0, %csr, %x0     {csr[11:0],00000010000001110011}
-
-// put write data on rs1
-// write -> csrrw %x0, %csr, %x0     {csr[11:0],00000001000001110011}
-
-// abstract memory command not done here
-   assign debug_valid = dbg_cmd_valid & (dbg_cmd_type[1:0] != 2'h2);
-
-
-   assign debug_read  = debug_valid & ~dbg_cmd_write;
-   assign debug_write = debug_valid &  dbg_cmd_write;
-
-   assign debug_read_gpr  = debug_read  & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_write_gpr = debug_write & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_read_csr  = debug_read  & (dbg_cmd_type[1:0]==2'h1);
-   assign debug_write_csr = debug_write & (dbg_cmd_type[1:0]==2'h1);
-
-   assign dreg[4:0]  = dbg_cmd_addr[4:0];
-   assign dcsr[11:0] = dbg_cmd_addr[11:0];
-
-
-   assign ib0_debug_in[31:0] = ({32{debug_read_gpr}}  & {12'b000000000000,dreg[4:0],15'b110000000110011}) |
-                               ({32{debug_write_gpr}} & {20'b00000000000000000110,dreg[4:0],7'b0110011}) |
-                               ({32{debug_read_csr}}  & {dcsr[11:0],20'b00000010000001110011}) |
-                               ({32{debug_write_csr}} & {dcsr[11:0],20'b00000001000001110011});
-
-
-
-   // machine is in halted state, pipe empty, write will always happen next cycle
-
-   assign dec_debug_wdata_rs1_d = debug_write_gpr | debug_write_csr;
-
-
-   // special fence csr for use only in debug mode
-
-   assign dec_debug_fence_d = debug_write_csr & (dcsr[11:0] == 12'h7c4);
-
-   assign ib0[31:0] = (debug_valid) ? ib0_debug_in[31:0] : ifu_i0_instr[31:0];
-
-   assign dec_ib0_valid_d = ifu_i0_valid | debug_valid;
-
-   assign dec_debug_valid_d = debug_valid;
-
-   assign dec_i0_instr_d[31:0] = ib0[31:0];
-
-   assign dec_i0_brp = i0_brp;
-   assign dec_i0_bp_index = ifu_i0_bp_index;
-   assign dec_i0_bp_fghr = ifu_i0_bp_fghr;
-   assign dec_i0_bp_btag = ifu_i0_bp_btag;
-   assign dec_i0_bp_fa_index = ifu_i0_fa_index;
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dec_tlu_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dec_tlu_ctl.sv
deleted file mode 100644
index 83f0a9d..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dec_tlu_ctl.sv
+++ /dev/null
@@ -1,2947 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-//********************************************************************************
-// eb1_dec_tlu_ctl.sv
-//
-//
-// Function: CSRs, Commit/WB, flushing, exceptions, interrupts
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dec_tlu_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,
-   input logic free_clk,
-   input logic free_l2clk,
-   input logic rst_l,
-   input logic scan_mode,
-
-   input logic [31:1] rst_vec, // reset vector, from core pins
-   input logic        nmi_int, // nmi pin
-   input logic [31:1] nmi_vec, // nmi vector
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-
-   input logic lsu_fastint_stall_any,   // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-
-   // perf counter inputs
-   input logic       ifu_pmu_instr_aligned,   // aligned instructions
-   input logic       ifu_pmu_fetch_stall, // fetch unit stalled
-   input logic       ifu_pmu_ic_miss, // icache miss
-   input logic       ifu_pmu_ic_hit, // icache hit
-   input logic       ifu_pmu_bus_error, // Instruction side bus error
-   input logic       ifu_pmu_bus_busy, // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn, // Instruction side bus transaction
-   input logic       dec_pmu_instr_decoded, // decoded instructions
-   input logic       dec_pmu_decode_stall, // decode stall
-   input logic       dec_pmu_presync_stall, // decode stall due to presync'd inst
-   input logic       dec_pmu_postsync_stall,// decode stall due to postsync'd inst
-   input logic       lsu_store_stall_any,    // SB or WB is full, stall decode
-   input logic       dma_dccm_stall_any,     // DMA stall of lsu
-   input logic       dma_iccm_stall_any,     // DMA stall of ifu
-   input logic       exu_pmu_i0_br_misp,     // pipe 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // pipe 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // pipe 0 4 byte branch
-   input logic       lsu_pmu_bus_trxn,       // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned, // D side bus misaligned
-   input logic       lsu_pmu_bus_error,      // D side bus error
-   input logic       lsu_pmu_bus_busy,       // D side bus busy
-   input logic       lsu_pmu_load_external_m, // D side bus load
-   input logic       lsu_pmu_store_external_m, // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr, // Fast int address
-   input logic [1:0] lsu_fir_error, // Fast int lookup error
-
-   input logic       iccm_dma_sb_error,      // I side dma single bit error
-
-   input    eb1_lsu_error_pkt_t lsu_error_pkt_r, // lsu precise exception/error packet
-   input logic         lsu_single_ecc_error_incr, // LSU inc SB error counter
-
-   input logic dec_pause_state, // Pause counter not zero
-   input logic         lsu_imprecise_error_store_any,      // store bus error
-   input logic         lsu_imprecise_error_load_any,      // store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any, // store bus error address
-
-   input logic        dec_csr_wen_unq_d,       // valid csr with write - for csr legal
-   input logic        dec_csr_any_unq_d,       // valid csr - for csr legal
-   input logic [11:0] dec_csr_rdaddr_d,      // read address for csr
-
-   input logic        dec_csr_wen_r,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic        dec_csr_stall_int_ff, // csr is mie/mstatus
-
-   input logic dec_tlu_i0_valid_r, // pipe 0 op at e4 is valid
-
-   input logic [31:1] exu_npc_r, // for NPC tracking
-
-   input logic [31:1] dec_tlu_i0_pc_r, // for PC/NPC tracking
-
-   input eb1_trap_pkt_t dec_tlu_packet_r, // exceptions known at decode
-
-   input logic [31:0] dec_illegal_inst, // For mtval
-   input logic        dec_i0_decode_d,  // decode valid, used for clean icache diagnostics
-
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r, // history
-   input logic        exu_i0_br_error_r, // error
-   input logic        exu_i0_br_start_error_r, // start error
-   input logic        exu_i0_br_valid_r, // valid
-   input logic        exu_i0_br_mp_r, // mispredict
-   input logic        exu_i0_br_middle_r, // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r, // way hit or repl
-
-   output logic dec_tlu_core_empty,  // core is empty
-   // Debug start
-   output logic dec_dbg_cmd_done, // abstract command done
-   output logic dec_dbg_cmd_fail, // abstract command failed
-   output logic dec_tlu_dbg_halted, // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode, // Core is in debug mode
-   output logic dec_tlu_resume_ack, // Resume acknowledge
-   output logic dec_tlu_debug_stall, // stall decode while waiting on core to empty
-
-   output logic dec_tlu_flush_noredir_r , // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only, // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r, // single step
-   output logic dec_tlu_flush_err_r, // iside perr/ecc rfpc. This is the D stage of the error
-
-   output logic dec_tlu_flush_extint, // fast ext int started
-   output logic [31:2] dec_tlu_meihap, // meihap for fast int
-
-   input  logic dbg_halt_req, // DM requests a halt
-   input  logic dbg_resume_req, // DM requests a resume
-   input  logic ifu_miss_state_idle, // I-side miss buffer empty
-   input  logic lsu_idle_any, // lsu is idle
-   input  logic dec_div_active, // oop div is active
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // trigger info for trigger blocks
-
-   input logic  ifu_ic_error_start,     // IC single bit error
-   input logic  ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-
-   input logic [70:0] ifu_ic_debug_rd_data, // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid, // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-   // Debug end
-
-   input logic [7:0] pic_claimid, // pic claimid for csr
-   input logic [3:0] pic_pl, // pic priv level for csr
-   input logic       mhwakeup, // high priority external int, wakeup if halted
-
-   input logic mexintpend, // external interrupt pending
-   input logic timer_int, // timer interrupt pending
-   input logic soft_int, // software interrupt pending
-
-   output logic o_cpu_halt_status, // PMU interface, halted
-   output logic o_cpu_halt_ack, // halt req ack
-   output logic o_cpu_run_ack, // run req ack
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // Core ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic [3:0] dec_tlu_meicurpl, // to PIC
-   output logic [3:0] dec_tlu_meipt, // to PIC
-
-
-   output logic [31:0] dec_csr_rddata_d,      // csr read data at wb
-   output logic dec_csr_legal_d,              // csr indicates legal operation
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // branch pkt to bp
-
-   output logic dec_tlu_i0_kill_writeb_wb,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_wb,       // commit has a flush (exception, int, mispredict at e4)
-   output logic dec_tlu_i0_commit_cmt,        // committed an instruction
-
-   output logic dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_r,       // commit has a flush (exception, int)
-   output logic [31:1] dec_tlu_flush_path_r, // flush pc
-   output logic dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-   output logic dec_tlu_wr_pause_r,           // CSR write to pause reg is at R.
-   output logic dec_tlu_flush_pause_r,        // Flush is due to pause
-
-   output logic dec_tlu_presync_d,            // CSR read needs to be presync'd
-   output logic dec_tlu_postsync_d,           // CSR needs to be presync'd
-
-
-   output logic [31:0] dec_tlu_mrac_ff,        // CSR for memory region control
-
-   output logic dec_tlu_force_halt, // halt has been forced
-
-   output logic dec_tlu_perfcnt0, // toggles when pipe0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1, // toggles when pipe0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2, // toggles when pipe0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3, // toggles when pipe0 perf counter 3 has an event inc
-
-   output logic dec_tlu_i0_exc_valid_wb1, // pipe 0 exception valid
-   output logic dec_tlu_i0_valid_wb1,  // pipe 0 valid
-   output logic dec_tlu_int_valid_wb1, // pipe 2 int valid
-   output logic [4:0] dec_tlu_exc_cause_wb1, // exception or int cause
-   output logic [31:0] dec_tlu_mtval_wb1, // MTVAL value
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable, // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable, // disable core ECC
-   output logic  dec_tlu_bpred_disable,           // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,   // disable writebuffer coalescing
-   output logic  dec_tlu_pipelining_disable,      // disable pipelining
-   output logic  dec_tlu_trace_disable,           // disable trace
-   output logic [2:0]  dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override, // override misc clock domain gating
-   output logic  dec_tlu_dec_clk_override,  // override decode clock domain gating
-   output logic  dec_tlu_ifu_clk_override,  // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,  // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,  // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,  // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,// override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override, // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override   // override ICCM clock domain gating
-   );
-
-   logic         clk_override, e4e5_int_clk, nmi_fir_type, nmi_lsu_load_type, nmi_lsu_store_type, nmi_int_detected_f, nmi_lsu_load_type_f,
-                 nmi_lsu_store_type_f, allow_dbg_halt_csr_write, dbg_cmd_done_ns, i_cpu_run_req_d1_raw, debug_mode_status, lsu_single_ecc_error_r_d1,
-                 sel_npc_r, sel_npc_resume, ce_int,
-                 nmi_in_debug_mode, dpc_capture_npc, dpc_capture_pc, tdata_load, tdata_opcode, tdata_action, perfcnt_halted, tdata_chain,
-                 tdata_kill_write;
-
-
-   logic reset_delayed, reset_detect, reset_detected;
-   logic wr_mstatus_r, wr_mtvec_r, wr_mcyclel_r, wr_mcycleh_r,
-         wr_minstretl_r, wr_minstreth_r, wr_mscratch_r, wr_mepc_r, wr_mcause_r, wr_mscause_r, wr_mtval_r,
-         wr_mrac_r, wr_meihap_r, wr_meicurpl_r, wr_meipt_r, wr_dcsr_r,
-         wr_dpc_r, wr_meicidpl_r, wr_meivt_r, wr_meicpct_r, wr_micect_r, wr_miccmect_r, wr_mfdht_r, wr_mfdhs_r,
-         wr_mdccmect_r,wr_mhpme3_r, wr_mhpme4_r, wr_mhpme5_r, wr_mhpme6_r;
-   logic wr_mpmc_r;
-   logic [1:1] mpmc_b_ns, mpmc, mpmc_b;
-   logic set_mie_pmu_fw_halt, fw_halted_ns, fw_halted;
-   logic wr_mcountinhibit_r;
-   logic [6:0] mcountinhibit;
-   logic wr_mtsel_r, wr_mtdata1_t0_r, wr_mtdata1_t1_r, wr_mtdata1_t2_r, wr_mtdata1_t3_r, wr_mtdata2_t0_r, wr_mtdata2_t1_r, wr_mtdata2_t2_r, wr_mtdata2_t3_r;
-   logic [31:0] mtdata2_t0, mtdata2_t1, mtdata2_t2, mtdata2_t3, mtdata2_tsel_out, mtdata1_tsel_out;
-   logic [9:0]  mtdata1_t0_ns, mtdata1_t0, mtdata1_t1_ns, mtdata1_t1, mtdata1_t2_ns, mtdata1_t2, mtdata1_t3_ns, mtdata1_t3;
-   logic [9:0] tdata_wrdata_r;
-   logic [1:0] mtsel_ns, mtsel;
-   logic tlu_i0_kill_writeb_r;
-   logic [1:0]  mstatus_ns, mstatus;
-   logic [1:0] mfdhs_ns, mfdhs;
-   logic [31:0] force_halt_ctr, force_halt_ctr_f;
-   logic        force_halt;
-   logic [5:0]  mfdht, mfdht_ns;
-   logic mstatus_mie_ns;
-   logic [30:0] mtvec_ns, mtvec;
-   logic [15:2] dcsr_ns, dcsr;
-   logic [5:0] mip_ns, mip;
-   logic [5:0] mie_ns, mie;
-   logic [31:0] mcyclel_ns, mcyclel;
-   logic [31:0] mcycleh_ns, mcycleh;
-   logic [31:0] minstretl_ns, minstretl;
-   logic [31:0] minstreth_ns, minstreth;
-   logic [31:0] micect_ns, micect, miccmect_ns, miccmect, mdccmect_ns, mdccmect;
-   logic [26:0] micect_inc, miccmect_inc, mdccmect_inc;
-   logic [31:0] mscratch;
-   logic [31:0] mhpmc3, mhpmc3_ns, mhpmc4, mhpmc4_ns, mhpmc5, mhpmc5_ns, mhpmc6, mhpmc6_ns;
-   logic [31:0] mhpmc3h, mhpmc3h_ns, mhpmc4h, mhpmc4h_ns, mhpmc5h, mhpmc5h_ns, mhpmc6h, mhpmc6h_ns;
-   logic [9:0]  mhpme3, mhpme4, mhpme5, mhpme6;
-   logic [31:0] mrac;
-   logic [9:2] meihap;
-   logic [31:10] meivt;
-   logic [3:0] meicurpl_ns, meicurpl;
-   logic [3:0] meicidpl_ns, meicidpl;
-   logic [3:0] meipt_ns, meipt;
-   logic [31:0] mdseac;
-   logic mdseac_locked_ns, mdseac_locked_f, mdseac_en, nmi_lsu_detected;
-   logic [31:1] mepc_ns, mepc;
-   logic [31:1] dpc_ns, dpc;
-   logic [31:0] mcause_ns, mcause;
-   logic [3:0] mscause_ns, mscause, mscause_type;
-   logic [31:0] mtval_ns, mtval;
-   logic dec_pause_state_f, dec_tlu_wr_pause_r_d1, pause_expired_r, pause_expired_wb;
-   logic        tlu_flush_lower_r, tlu_flush_lower_r_d1;
-   logic [31:1] tlu_flush_path_r,  tlu_flush_path_r_d1;
-   logic i0_valid_wb;
-   logic tlu_i0_commit_cmt;
-   logic [31:1] vectored_path, interrupt_path;
-   logic [16:0] dicawics_ns, dicawics;
-   logic        wr_dicawics_r, wr_dicad0_r, wr_dicad1_r, wr_dicad0h_r;
-   logic [31:0] dicad0_ns, dicad0, dicad0h_ns, dicad0h;
-
-   logic [6:0]  dicad1_ns, dicad1_raw;
-   logic [31:0] dicad1;
-   logic        ebreak_r, ebreak_to_debug_mode_r, ecall_r, illegal_r, mret_r, inst_acc_r, fence_i_r,
-                ic_perr_r, iccm_sbecc_r, ebreak_to_debug_mode_r_d1, kill_ebreak_count_r, inst_acc_second_r;
-   logic ce_int_ready, ext_int_ready, timer_int_ready, soft_int_ready, int_timer0_int_ready, int_timer1_int_ready, mhwakeup_ready,
-         take_ext_int, take_ce_int, take_timer_int, take_soft_int, take_int_timer0_int, take_int_timer1_int, take_nmi, take_nmi_r_d1, int_timer0_int_possible, int_timer1_int_possible;
-   logic i0_exception_valid_r, interrupt_valid_r, i0_exception_valid_r_d1, interrupt_valid_r_d1, exc_or_int_valid_r, exc_or_int_valid_r_d1, mdccme_ce_req, miccme_ce_req, mice_ce_req;
-   logic synchronous_flush_r;
-   logic [4:0]  exc_cause_r, exc_cause_wb;
-   logic        mcyclel_cout, mcyclel_cout_f, mcyclela_cout;
-   logic [31:0] mcyclel_inc;
-   logic [31:0] mcycleh_inc;
-
-   logic        minstretl_cout, minstretl_cout_f, minstret_enable, minstretl_cout_ns, minstretl_couta;
-
-   logic [31:0] minstretl_inc, minstretl_read;
-   logic [31:0] minstreth_inc, minstreth_read;
-   logic [31:1] pc_r, pc_r_d1, npc_r, npc_r_d1;
-   logic valid_csr;
-   logic rfpc_i0_r;
-   logic lsu_i0_rfnpc_r;
-   logic dec_tlu_br0_error_r, dec_tlu_br0_start_error_r, dec_tlu_br0_v_r;
-   logic lsu_i0_exc_r, lsu_i0_exc_r_raw, lsu_exc_ma_r, lsu_exc_acc_r, lsu_exc_st_r,
-         lsu_exc_valid_r, lsu_exc_valid_r_raw, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1, block_interrupts;
-   logic i0_trigger_eval_r;
-
-   logic request_debug_mode_r, request_debug_mode_r_d1, request_debug_mode_done, request_debug_mode_done_f;
-   logic take_halt, halt_taken, halt_taken_f, internal_dbg_halt_mode, dbg_tlu_halted_f, take_reset,
-         dbg_tlu_halted, core_empty, lsu_idle_any_f, ifu_miss_state_idle_f, resume_ack_ns,
-         debug_halt_req_f, debug_resume_req_f_raw, debug_resume_req_f, enter_debug_halt_req, dcsr_single_step_done, dcsr_single_step_done_f,
-         debug_halt_req_d1, debug_halt_req_ns, dcsr_single_step_running, dcsr_single_step_running_f, internal_dbg_halt_timers;
-
-   logic [3:0] i0_trigger_r, trigger_action, trigger_enabled,
-               i0_trigger_chain_masked_r;
-   logic       i0_trigger_hit_r, i0_trigger_hit_raw_r, i0_trigger_action_r,
-               trigger_hit_r_d1,
-               mepc_trigger_hit_sel_pc_r;
-   logic [3:0] update_hit_bit_r, i0_iside_trigger_has_pri_r,i0trigger_qual_r, i0_lsu_trigger_has_pri_r;
-   logic cpu_halt_status, cpu_halt_ack, cpu_run_ack, ext_halt_pulse, i_cpu_halt_req_d1, i_cpu_run_req_d1;
-
-   logic inst_acc_r_raw, trigger_hit_dmode_r, trigger_hit_dmode_r_d1;
-   logic [9:0] mcgc, mcgc_ns, mcgc_int;
-   logic [18:0] mfdc;
-   logic i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual, pmu_fw_halt_req_ns, pmu_fw_halt_req_f, int_timer_stalled,
-         fw_halt_req, enter_pmu_fw_halt_req, pmu_fw_tlu_halted, pmu_fw_tlu_halted_f, internal_pmu_fw_halt_mode,
-         internal_pmu_fw_halt_mode_f, int_timer0_int_hold, int_timer1_int_hold, int_timer0_int_hold_f, int_timer1_int_hold_f;
-   logic nmi_int_delayed, nmi_int_detected;
-   logic [3:0] trigger_execute, trigger_data, trigger_store;
-   logic dec_tlu_pmu_fw_halted;
-
-   logic mpc_run_state_ns, debug_brkpt_status_ns, mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns, dbg_halt_state_ns, dbg_run_state_ns,
-         dbg_halt_state_f, mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f, mpc_halt_state_f, mpc_halt_state_ns, mpc_run_state_f, debug_brkpt_status_f,
-         mpc_debug_halt_ack_f, mpc_debug_run_ack_f, dbg_run_state_f, mpc_debug_halt_req_sync_pulse,
-         mpc_debug_run_req_sync_pulse, debug_brkpt_valid, debug_halt_req, debug_resume_req, dec_tlu_mpc_halted_only_ns;
-   logic take_ext_int_start, ext_int_freeze, take_ext_int_start_d1, take_ext_int_start_d2,
-         take_ext_int_start_d3, ext_int_freeze_d1, csr_meicpct, ignore_ext_int_due_to_lsu_stall;
-   logic mcause_sel_nmi_store, mcause_sel_nmi_load, mcause_sel_nmi_ext, fast_int_meicpct;
-   logic [1:0] mcause_fir_error_type;
-   logic dbg_halt_req_held_ns, dbg_halt_req_held, dbg_halt_req_final;
-   logic iccm_repair_state_ns, iccm_repair_state_d1, iccm_repair_state_rfnpc;
-
-
-   // internal timer, isolated for size reasons
-   logic [31:0] dec_timer_rddata_d;
-   logic dec_timer_read_d, dec_timer_t0_pulse, dec_timer_t1_pulse;
-   logic csr_mitctl0;
-   logic csr_mitctl1;
-   logic csr_mitb0;
-   logic csr_mitb1;
-   logic csr_mitcnt0;
-   logic csr_mitcnt1;
-
-   logic nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync, mpc_debug_run_req_sync, mpc_debug_halt_req_sync_raw;
-   logic csr_wr_clk;
-   logic e4e5_clk, e4_valid, e5_valid, e4e5_valid, internal_dbg_halt_mode_f, internal_dbg_halt_mode_f2;
-   logic lsu_pmu_load_external_r, lsu_pmu_store_external_r;
-   logic dec_tlu_flush_noredir_r_d1, dec_tlu_flush_pause_r_d1;
-   logic lsu_single_ecc_error_r;
-   logic [31:0] lsu_error_pkt_addr_r;
-   logic mcyclel_cout_in;
-   logic i0_valid_no_ebreak_ecall_r;
-   logic minstret_enable_f;
-   logic sel_exu_npc_r, sel_flush_npc_r, sel_hold_npc_r;
-   logic pc0_valid_r;
-   logic [15:0] mfdc_int, mfdc_ns;
-   logic [31:0] mrac_in;
-   logic [31:27] csr_sat;
-   logic [8:6] dcsr_cause;
-   logic enter_debug_halt_req_le, dcsr_cause_upgradeable;
-   logic icache_rd_valid, icache_wr_valid, icache_rd_valid_f, icache_wr_valid_f;
-   logic [3:0]      mhpmc_inc_r, mhpmc_inc_r_d1;
-
-   logic [3:0][9:0] mhpme_vec;
-   logic            mhpmc3_wr_en0, mhpmc3_wr_en1, mhpmc3_wr_en;
-   logic            mhpmc4_wr_en0, mhpmc4_wr_en1, mhpmc4_wr_en;
-   logic            mhpmc5_wr_en0, mhpmc5_wr_en1, mhpmc5_wr_en;
-   logic            mhpmc6_wr_en0, mhpmc6_wr_en1, mhpmc6_wr_en;
-   logic            mhpmc3h_wr_en0, mhpmc3h_wr_en;
-   logic            mhpmc4h_wr_en0, mhpmc4h_wr_en;
-   logic            mhpmc5h_wr_en0, mhpmc5h_wr_en;
-   logic            mhpmc6h_wr_en0, mhpmc6h_wr_en;
-   logic [63:0]     mhpmc3_incr, mhpmc4_incr, mhpmc5_incr, mhpmc6_incr;
-   logic perfcnt_halted_d1, zero_event_r;
-   logic [3:0] perfcnt_during_sleep;
-   logic [9:0] event_r;
-
-   eb1_inst_pkt_t pmu_i0_itype_qual;
-
-   logic csr_mfdht;
-   logic csr_mfdhs;
-   logic csr_misa;
-   logic csr_mvendorid;
-   logic csr_marchid;
-   logic csr_mimpid;
-   logic csr_mhartid;
-   logic csr_mstatus;
-   logic csr_mtvec;
-   logic csr_mip;
-   logic csr_mie;
-   logic csr_mcyclel;
-   logic csr_mcycleh;
-   logic csr_minstretl;
-   logic csr_minstreth;
-   logic csr_mscratch;
-   logic csr_mepc;
-   logic csr_mcause;
-   logic csr_mscause;
-   logic csr_mtval;
-   logic csr_mrac;
-   logic csr_dmst;
-   logic csr_mdseac;
-   logic csr_meihap;
-   logic csr_meivt;
-   logic csr_meipt;
-   logic csr_meicurpl;
-   logic csr_meicidpl;
-   logic csr_dcsr;
-   logic csr_mcgc;
-   logic csr_mfdc;
-   logic csr_dpc;
-   logic csr_mtsel;
-   logic csr_mtdata1;
-   logic csr_mtdata2;
-   logic csr_mhpmc3;
-   logic csr_mhpmc4;
-   logic csr_mhpmc5;
-   logic csr_mhpmc6;
-   logic csr_mhpmc3h;
-   logic csr_mhpmc4h;
-   logic csr_mhpmc5h;
-   logic csr_mhpmc6h;
-   logic csr_mhpme3;
-   logic csr_mhpme4;
-   logic csr_mhpme5;
-   logic csr_mhpme6;
-   logic csr_mcountinhibit;
-   logic csr_mpmc;
-   logic csr_micect;
-   logic csr_miccmect;
-   logic csr_mdccmect;
-   logic csr_dicawics;
-   logic csr_dicad0h;
-   logic csr_dicad0;
-   logic csr_dicad1;
-   logic csr_dicago;
-   logic presync;
-   logic postsync;
-   logic legal;
-   logic dec_csr_wen_r_mod;
-
-   logic flush_clkvalid;
-   logic sel_fir_addr;
-   logic wr_mie_r;
-   logic mtval_capture_pc_r;
-   logic mtval_capture_pc_plus2_r;
-   logic mtval_capture_inst_r;
-   logic mtval_capture_lsu_r;
-   logic mtval_clear_r;
-   logic wr_mcgc_r;
-   logic wr_mfdc_r;
-   logic wr_mdeau_r;
-   logic trigger_hit_for_dscr_cause_r_d1;
-   logic conditionally_illegal;
-
-   logic  [3:0] ifu_mscause ;
-   logic        ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f;
-
-   eb1_dec_timer_ctl  #(.pt(pt)) int_timers(.*);
-   // end of internal timers
-
-   assign clk_override = dec_tlu_dec_clk_override;
-
-   // Async inputs to the core have to be sync'd to the core clock.
-   rvsyncss #(7) syncro_ff(.*,
-                           .clk(free_clk),
-                           .din ({nmi_int,      timer_int,      soft_int,      i_cpu_halt_req,      i_cpu_run_req,      mpc_debug_halt_req,          mpc_debug_run_req}),
-                           .dout({nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync_raw, mpc_debug_run_req_sync}));
-
-   // for CSRs that have inpipe writes only
-
-   rvoclkhdr csrwr_r_cgc   ( .en(dec_csr_wen_r_mod | clk_override), .l1clk(csr_wr_clk), .* );
-
-   assign e4_valid = dec_tlu_i0_valid_r;
-   assign e4e5_valid = e4_valid | e5_valid;
-   assign flush_clkvalid = internal_dbg_halt_mode_f | i_cpu_run_req_d1 | interrupt_valid_r | interrupt_valid_r_d1 |
-                           reset_delayed | pause_expired_r | pause_expired_wb | ic_perr_r | iccm_sbecc_r |
-                           clk_override;
-   rvoclkhdr e4e5_cgc     ( .en(e4e5_valid | clk_override), .l1clk(e4e5_clk), .* );
-   rvoclkhdr e4e5_int_cgc ( .en(e4e5_valid | flush_clkvalid), .l1clk(e4e5_int_clk), .* );
-
-   rvdffie #(11)  freeff (.*, .clk(free_l2clk),
-                          .din ({ifu_ic_error_start, ifu_iccm_rd_ecc_single_err, iccm_repair_state_ns, e4_valid, internal_dbg_halt_mode,
-                                 lsu_pmu_load_external_m, lsu_pmu_store_external_m, tlu_flush_lower_r,  tlu_i0_kill_writeb_r,
-                                 internal_dbg_halt_mode_f, force_halt}),
-                          .dout({ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f, iccm_repair_state_d1, e5_valid, internal_dbg_halt_mode_f,
-                                 lsu_pmu_load_external_r, lsu_pmu_store_external_r, tlu_flush_lower_r_d1, dec_tlu_i0_kill_writeb_wb,
-                                 internal_dbg_halt_mode_f2, dec_tlu_force_halt}));
-
-   assign dec_tlu_i0_kill_writeb_r = tlu_i0_kill_writeb_r;
-
-   assign nmi_int_detected = (nmi_int_sync & ~nmi_int_delayed) | nmi_lsu_detected | (nmi_int_detected_f & ~take_nmi_r_d1) | nmi_fir_type;
-   // if the first nmi is a lsu type, note it. If there's already an nmi pending, ignore. Simultaneous with FIR, drop.
-   assign nmi_lsu_load_type  = (nmi_lsu_detected & lsu_imprecise_error_load_any &  ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_load_type_f  & ~take_nmi_r_d1);
-   assign nmi_lsu_store_type = (nmi_lsu_detected & lsu_imprecise_error_store_any & ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_store_type_f & ~take_nmi_r_d1);
-
-   assign nmi_fir_type = ~nmi_int_detected_f & take_ext_int_start_d3 & |lsu_fir_error[1:0];
-
-   // Filter subsequent bus errors after the first, until the lock on MDSEAC is cleared
-   assign nmi_lsu_detected = ~mdseac_locked_f & (lsu_imprecise_error_load_any | lsu_imprecise_error_store_any) & ~nmi_fir_type;
-
-
-localparam MSTATUS_MIE   = 0;
-localparam MIP_MCEIP     = 5;
-localparam MIP_MITIP0    = 4;
-localparam MIP_MITIP1    = 3;
-localparam MIP_MEIP      = 2;
-localparam MIP_MTIP      = 1;
-localparam MIP_MSIP      = 0;
-
-localparam MIE_MCEIE     = 5;
-localparam MIE_MITIE0    = 4;
-localparam MIE_MITIE1    = 3;
-localparam MIE_MEIE      = 2;
-localparam MIE_MTIE      = 1;
-localparam MIE_MSIE      = 0;
-
-localparam DCSR_EBREAKM  = 15;
-localparam DCSR_STEPIE   = 11;
-localparam DCSR_STOPC    = 10;
-localparam DCSR_STEP     = 2;
-
-
-   assign reset_delayed = reset_detect ^ reset_detected;
-
-   // ----------------------------------------------------------------------
-   // MPC halt
-   // - can interact with debugger halt and v-v
-
-   // fast ints in progress have priority
-   assign mpc_debug_halt_req_sync = mpc_debug_halt_req_sync_raw & ~ext_int_freeze_d1;
-
-    rvdffie #(16)  mpvhalt_ff (.*, .clk(free_l2clk),
-                                 .din({1'b1, reset_detect,
-                                       nmi_int_sync, nmi_int_detected, nmi_lsu_load_type, nmi_lsu_store_type,
-                                       mpc_debug_halt_req_sync, mpc_debug_run_req_sync,
-                                       mpc_halt_state_ns, mpc_run_state_ns, debug_brkpt_status_ns,
-                                       mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns,
-                                       dbg_halt_state_ns, dbg_run_state_ns,
-                                       dec_tlu_mpc_halted_only_ns}),
-                                .dout({reset_detect, reset_detected,
-                                       nmi_int_delayed, nmi_int_detected_f, nmi_lsu_load_type_f, nmi_lsu_store_type_f,
-                                       mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f,
-                                       mpc_halt_state_f, mpc_run_state_f, debug_brkpt_status_f,
-                                       mpc_debug_halt_ack_f, mpc_debug_run_ack_f,
-                                       dbg_halt_state_f, dbg_run_state_f,
-                                       dec_tlu_mpc_halted_only}));
-
-   // turn level sensitive requests into pulses
-   assign mpc_debug_halt_req_sync_pulse = mpc_debug_halt_req_sync & ~mpc_debug_halt_req_sync_f;
-   assign mpc_debug_run_req_sync_pulse = mpc_debug_run_req_sync & ~mpc_debug_run_req_sync_f;
-
-   // states
-   assign mpc_halt_state_ns = (mpc_halt_state_f | mpc_debug_halt_req_sync_pulse | (reset_delayed & ~mpc_reset_run_req)) & ~mpc_debug_run_req_sync;
-   assign mpc_run_state_ns = (mpc_run_state_f | (mpc_debug_run_req_sync_pulse & ~mpc_debug_run_ack_f)) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // note, MPC halt can allow the jtag debugger to just start sending commands. When that happens, set the interal debugger halt state to prevent
-   // MPC run from starting the core.
-   assign dbg_halt_state_ns = (dbg_halt_state_f | (dbg_halt_req_final | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1)) & ~dbg_resume_req;
-   assign dbg_run_state_ns = (dbg_run_state_f | dbg_resume_req) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // tell dbg we are only MPC halted
-   assign dec_tlu_mpc_halted_only_ns = ~dbg_halt_state_f & mpc_halt_state_f;
-
-   // this asserts from detection of bkpt until after we leave debug mode
-   assign debug_brkpt_valid = ebreak_to_debug_mode_r_d1 | trigger_hit_dmode_r_d1;
-   assign debug_brkpt_status_ns = (debug_brkpt_valid | debug_brkpt_status_f) & (internal_dbg_halt_mode & ~dcsr_single_step_running_f);
-
-   // acks back to interface
-   assign mpc_debug_halt_ack_ns = mpc_halt_state_f & internal_dbg_halt_mode_f & mpc_debug_halt_req_sync & core_empty;
-   assign mpc_debug_run_ack_ns = (mpc_debug_run_req_sync & ~dbg_halt_state_ns & ~mpc_debug_halt_req_sync) | (mpc_debug_run_ack_f & mpc_debug_run_req_sync) ;
-
-   // Pins
-   assign mpc_debug_halt_ack = mpc_debug_halt_ack_f;
-   assign mpc_debug_run_ack = mpc_debug_run_ack_f;
-   assign debug_brkpt_status = debug_brkpt_status_f;
-
-   // DBG halt req is a pulse, fast ext int in progress has priority
-   assign dbg_halt_req_held_ns = (dbg_halt_req | dbg_halt_req_held) & ext_int_freeze_d1;
-   assign dbg_halt_req_final = (dbg_halt_req | dbg_halt_req_held) & ~ext_int_freeze_d1;
-
-   // combine MPC and DBG halt requests
-   assign debug_halt_req = (dbg_halt_req_final | mpc_debug_halt_req_sync | (reset_delayed & ~mpc_reset_run_req)) & ~internal_dbg_halt_mode_f & ~ext_int_freeze_d1;
-
-   assign debug_resume_req = ~debug_resume_req_f &  // squash back to back resumes
-                             ((mpc_run_state_ns & ~dbg_halt_state_ns) |  // MPC run req
-                              (dbg_run_state_ns & ~mpc_halt_state_ns)); // dbg request is a pulse
-
-
-   // HALT
-   // dbg/pmu/fw requests halt, service as soon as lsu is not blocking interrupts
-   assign take_halt = (debug_halt_req_f | pmu_fw_halt_req_f) & ~synchronous_flush_r & ~mret_r & ~halt_taken_f & ~dec_tlu_flush_noredir_r_d1 & ~take_reset;
-
-   // hold after we take a halt, so we don't keep taking halts
-   assign halt_taken = (dec_tlu_flush_noredir_r_d1 & ~dec_tlu_flush_pause_r_d1 & ~take_ext_int_start_d1) | (halt_taken_f & ~dbg_tlu_halted_f & ~pmu_fw_tlu_halted_f & ~interrupt_valid_r_d1);
-
-   // After doing halt flush (RFNPC) wait until core is idle before asserting a particular halt mode
-   // It takes a cycle for mb_empty to assert after a fetch, take_halt covers that cycle
-   assign core_empty = force_halt |
-                       (lsu_idle_any & lsu_idle_any_f & ifu_miss_state_idle & ifu_miss_state_idle_f & ~debug_halt_req & ~debug_halt_req_d1 & ~dec_div_active);
-
-   assign dec_tlu_core_empty = core_empty;
-
-//--------------------------------------------------------------------------------
-// Debug start
-//
-
-   assign enter_debug_halt_req = (~internal_dbg_halt_mode_f & debug_halt_req) | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1;
-
-   // dbg halt state active from request until non-step resume
-   assign internal_dbg_halt_mode = debug_halt_req_ns | (internal_dbg_halt_mode_f & ~(debug_resume_req_f & ~dcsr[DCSR_STEP]));
-   // dbg halt can access csrs as long as we are not stepping
-   assign allow_dbg_halt_csr_write = internal_dbg_halt_mode_f & ~dcsr_single_step_running_f;
-
-
-   // hold debug_halt_req_ns high until we enter debug halt
-   assign debug_halt_req_ns = enter_debug_halt_req | (debug_halt_req_f & ~dbg_tlu_halted);
-
-   assign dbg_tlu_halted = (debug_halt_req_f & core_empty & halt_taken) | (dbg_tlu_halted_f & ~debug_resume_req_f);
-
-   assign resume_ack_ns = (debug_resume_req_f & dbg_tlu_halted_f & dbg_run_state_ns);
-
-   assign dcsr_single_step_done = dec_tlu_i0_valid_r & ~dec_tlu_dbg_halted & dcsr[DCSR_STEP] & ~rfpc_i0_r;
-
-   assign dcsr_single_step_running = (debug_resume_req_f & dcsr[DCSR_STEP]) | (dcsr_single_step_running_f & ~dcsr_single_step_done_f);
-
-   assign dbg_cmd_done_ns = dec_tlu_i0_valid_r & dec_tlu_dbg_halted;
-
-   // used to hold off commits after an in-pipe debug mode request (triggers, DCSR)
-   assign request_debug_mode_r = (trigger_hit_dmode_r | ebreak_to_debug_mode_r) | (request_debug_mode_r_d1 & ~dec_tlu_flush_lower_wb);
-
-   assign request_debug_mode_done = (request_debug_mode_r_d1 | request_debug_mode_done_f) & ~dbg_tlu_halted_f;
-
-    rvdffie #(18)  halt_ff (.*, .clk(free_l2clk),
-                          .din({dec_tlu_flush_noredir_r, halt_taken, lsu_idle_any, ifu_miss_state_idle, dbg_tlu_halted,
-                                resume_ack_ns, debug_halt_req_ns, debug_resume_req, trigger_hit_dmode_r,
-                                dcsr_single_step_done, debug_halt_req, dec_tlu_wr_pause_r, dec_pause_state,
-                                request_debug_mode_r, request_debug_mode_done, dcsr_single_step_running, dec_tlu_flush_pause_r,
-                                dbg_halt_req_held_ns}),
-                          .dout({dec_tlu_flush_noredir_r_d1, halt_taken_f, lsu_idle_any_f, ifu_miss_state_idle_f, dbg_tlu_halted_f,
-                                 dec_tlu_resume_ack , debug_halt_req_f, debug_resume_req_f_raw, trigger_hit_dmode_r_d1,
-                                 dcsr_single_step_done_f, debug_halt_req_d1, dec_tlu_wr_pause_r_d1, dec_pause_state_f,
-                                 request_debug_mode_r_d1, request_debug_mode_done_f, dcsr_single_step_running_f, dec_tlu_flush_pause_r_d1,
-                                 dbg_halt_req_held}));
-
-   // MPC run collides with DBG halt, fix it here
-   assign debug_resume_req_f = debug_resume_req_f_raw & ~dbg_halt_req;
-
-   assign dec_tlu_debug_stall = debug_halt_req_f;
-   assign dec_tlu_dbg_halted = dbg_tlu_halted_f;
-   assign dec_tlu_debug_mode = internal_dbg_halt_mode_f;
-   assign dec_tlu_pmu_fw_halted = pmu_fw_tlu_halted_f;
-
-   // kill fetch redirection on flush if going to halt, or if there's a fence during db-halt
-   assign dec_tlu_flush_noredir_r = take_halt | (fence_i_r & internal_dbg_halt_mode) | dec_tlu_flush_pause_r | (i0_trigger_hit_r & trigger_hit_dmode_r) | take_ext_int_start;
-
-   assign dec_tlu_flush_extint = take_ext_int_start;
-
-   // 1 cycle after writing the PAUSE counter, flush with noredir to idle F1-D.
-   assign dec_tlu_flush_pause_r = dec_tlu_wr_pause_r_d1 & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // detect end of pause counter and rfpc
-   assign pause_expired_r = ~dec_pause_state & dec_pause_state_f & ~(ext_int_ready | ce_int_ready | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | nmi_int_detected | ext_int_freeze_d1) & ~interrupt_valid_r_d1 & ~debug_halt_req_f & ~pmu_fw_halt_req_f & ~halt_taken_f;
-
-   assign dec_tlu_flush_leak_one_r = dec_tlu_flush_lower_r  & dcsr[DCSR_STEP] & (dec_tlu_resume_ack | dcsr_single_step_running) & ~dec_tlu_flush_noredir_r;
-   assign dec_tlu_flush_err_r = dec_tlu_flush_lower_r & (ic_perr_r | iccm_sbecc_r);
-
-   // If DM attempts to access an illegal CSR, send cmd_fail back
-   assign dec_dbg_cmd_done = dbg_cmd_done_ns;
-   assign dec_dbg_cmd_fail = illegal_r & dec_dbg_cmd_done;
-
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-   // Triggers
-   //
-localparam MTDATA1_DMODE             = 9;
-localparam MTDATA1_SEL   = 7;
-localparam MTDATA1_ACTION            = 6;
-localparam MTDATA1_CHAIN             = 5;
-localparam MTDATA1_MATCH             = 4;
-localparam MTDATA1_M_ENABLED         = 3;
-localparam MTDATA1_EXE   = 2;
-localparam MTDATA1_ST    = 1;
-localparam MTDATA1_LD    = 0;
-
-   // Prioritize trigger hits with other exceptions.
-   //
-   // Trigger should have highest priority except:
-   // - trigger is an execute-data and there is an inst_access exception (lsu triggers won't fire, inst. is nop'd by decode)
-   // - trigger is a store-data and there is a lsu_acc_exc or lsu_ma_exc.
-   assign trigger_execute[3:0] = {mtdata1_t3[MTDATA1_EXE], mtdata1_t2[MTDATA1_EXE], mtdata1_t1[MTDATA1_EXE], mtdata1_t0[MTDATA1_EXE]};
-   assign trigger_data[3:0] = {mtdata1_t3[MTDATA1_SEL], mtdata1_t2[MTDATA1_SEL], mtdata1_t1[MTDATA1_SEL], mtdata1_t0[MTDATA1_SEL]};
-   assign trigger_store[3:0] = {mtdata1_t3[MTDATA1_ST], mtdata1_t2[MTDATA1_ST], mtdata1_t1[MTDATA1_ST], mtdata1_t0[MTDATA1_ST]};
-
-   // MSTATUS[MIE] needs to be on to take triggers unless the action is trigger to debug mode.
-   assign trigger_enabled[3:0] = {(mtdata1_t3[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t3[MTDATA1_M_ENABLED],
-                                  (mtdata1_t2[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t2[MTDATA1_M_ENABLED],
-                                  (mtdata1_t1[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t1[MTDATA1_M_ENABLED],
-                                  (mtdata1_t0[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t0[MTDATA1_M_ENABLED]};
-
-   // iside exceptions are always in i0
-   assign i0_iside_trigger_has_pri_r[3:0]  = ~( (trigger_execute[3:0] & trigger_data[3:0] & {4{inst_acc_r_raw}}) | // exe-data with inst_acc
-                                                ({4{exu_i0_br_error_r | exu_i0_br_start_error_r}}));               // branch error in i0
-
-   // lsu excs have to line up with their respective triggers since the lsu op can be i0
-   assign i0_lsu_trigger_has_pri_r[3:0] = ~(trigger_store[3:0] & trigger_data[3:0] & {4{lsu_i0_exc_r_raw}});
-
-   // trigger hits have to be eval'd to cancel side effect lsu ops even though the pipe is already frozen
-   assign i0_trigger_eval_r = dec_tlu_i0_valid_r;
-
-   assign i0trigger_qual_r[3:0] = {4{i0_trigger_eval_r}} & dec_tlu_packet_r.i0trigger[3:0] & i0_iside_trigger_has_pri_r[3:0] & i0_lsu_trigger_has_pri_r[3:0] & trigger_enabled[3:0];
-
-   // Qual trigger hits
-   assign i0_trigger_r[3:0] = ~{4{dec_tlu_flush_lower_wb | dec_tlu_dbg_halted}} & i0trigger_qual_r[3:0];
-
-   // chaining can mask raw trigger info
-   assign i0_trigger_chain_masked_r[3:0]  = {i0_trigger_r[3] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[2]),
-                                             i0_trigger_r[2] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[3]),
-                                             i0_trigger_r[1] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[0]),
-                                             i0_trigger_r[0] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[1])};
-
-   // This is the highest priority by this point.
-   assign i0_trigger_hit_raw_r = |i0_trigger_chain_masked_r[3:0];
-
-   assign i0_trigger_hit_r = i0_trigger_hit_raw_r;
-
-   // Actions include breakpoint, or dmode. Dmode is only possible if the DMODE bit is set.
-   // Otherwise, take a breakpoint.
-   assign trigger_action[3:0] = {mtdata1_t3[MTDATA1_ACTION] & mtdata1_t3[MTDATA1_DMODE],
-                                 mtdata1_t2[MTDATA1_ACTION] & mtdata1_t2[MTDATA1_DMODE] & ~mtdata1_t2[MTDATA1_CHAIN],
-                                 mtdata1_t1[MTDATA1_ACTION] & mtdata1_t1[MTDATA1_DMODE],
-                                 mtdata1_t0[MTDATA1_ACTION] & mtdata1_t0[MTDATA1_DMODE] & ~mtdata1_t0[MTDATA1_CHAIN]};
-
-   // this is needed to set the HIT bit in the triggers
-   assign update_hit_bit_r[3:0] = ({4{|i0_trigger_r[3:0] & ~rfpc_i0_r}} & {i0_trigger_chain_masked_r[3], i0_trigger_r[2], i0_trigger_chain_masked_r[1], i0_trigger_r[0]});
-
-   // action, 1 means dmode. Simultaneous triggers with at least 1 set for dmode force entire action to dmode.
-   assign i0_trigger_action_r = |(i0_trigger_chain_masked_r[3:0] & trigger_action[3:0]);
-
-   assign trigger_hit_dmode_r = (i0_trigger_hit_r & i0_trigger_action_r);
-
-   assign mepc_trigger_hit_sel_pc_r = i0_trigger_hit_r & ~trigger_hit_dmode_r;
-
-
-//
-// Debug end
-//--------------------------------------------------------------------------------
-
-   //----------------------------------------------------------------------
-   //
-   // Commit
-   //
-   //----------------------------------------------------------------------
-
-
-
-   //--------------------------------------------------------------------------------
-   // External halt (not debug halt)
-   // - Fully interlocked handshake
-   // i_cpu_halt_req  ____|--------------|_______________
-   // core_empty      ---------------|___________
-   // o_cpu_halt_ack  _________________|----|__________
-   // o_cpu_halt_status _______________|---------------------|_________
-   // i_cpu_run_req                              ______|----------|____
-   // o_cpu_run_ack                              ____________|------|________
-   //
-
-
-   // debug mode has priority, ignore PMU/FW halt/run while in debug mode
-   assign i_cpu_halt_req_sync_qual = i_cpu_halt_req_sync & ~dec_tlu_debug_mode & ~ext_int_freeze_d1;
-   assign i_cpu_run_req_sync_qual = i_cpu_run_req_sync & ~dec_tlu_debug_mode & pmu_fw_tlu_halted_f & ~ext_int_freeze_d1;
-
-   rvdffie #(10) exthaltff (.*, .clk(free_l2clk), .din({i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual,   cpu_halt_status,
-                                                   cpu_halt_ack,   cpu_run_ack, internal_pmu_fw_halt_mode,
-                                                   pmu_fw_halt_req_ns, pmu_fw_tlu_halted,
-                                                   int_timer0_int_hold, int_timer1_int_hold}),
-                                            .dout({i_cpu_halt_req_d1,        i_cpu_run_req_d1_raw,      o_cpu_halt_status,
-                                                   o_cpu_halt_ack, o_cpu_run_ack, internal_pmu_fw_halt_mode_f,
-                                                   pmu_fw_halt_req_f, pmu_fw_tlu_halted_f,
-                                                   int_timer0_int_hold_f, int_timer1_int_hold_f}));
-
-   // only happens if we aren't in dgb_halt
-   assign ext_halt_pulse = i_cpu_halt_req_sync_qual & ~i_cpu_halt_req_d1;
-
-   assign enter_pmu_fw_halt_req =  ext_halt_pulse | fw_halt_req;
-
-   assign pmu_fw_halt_req_ns = (enter_pmu_fw_halt_req | (pmu_fw_halt_req_f & ~pmu_fw_tlu_halted)) & ~debug_halt_req_f;
-
-   assign internal_pmu_fw_halt_mode = pmu_fw_halt_req_ns | (internal_pmu_fw_halt_mode_f & ~i_cpu_run_req_d1 & ~debug_halt_req_f);
-
-   // debug halt has priority
-   assign pmu_fw_tlu_halted = ((pmu_fw_halt_req_f & core_empty & halt_taken & ~enter_debug_halt_req) | (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1)) & ~debug_halt_req_f;
-
-   assign cpu_halt_ack = (i_cpu_halt_req_d1 & pmu_fw_tlu_halted_f) | (o_cpu_halt_ack & i_cpu_halt_req_sync);
-   assign cpu_halt_status = (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1) | (o_cpu_halt_status & ~i_cpu_run_req_d1 & ~internal_dbg_halt_mode_f);
-   assign cpu_run_ack = (~pmu_fw_tlu_halted_f & i_cpu_run_req_sync) | (o_cpu_halt_status & i_cpu_run_req_d1_raw) | (o_cpu_run_ack & i_cpu_run_req_sync);
-   assign debug_mode_status = internal_dbg_halt_mode_f;
-   assign o_debug_mode_status = debug_mode_status;
-
-`ifdef RV_ASSERT_ON
-  assert_commit_while_halted: assert #0 (~(tlu_i0_commit_cmt  & o_cpu_halt_status)) else $display("ERROR: Commiting while cpu_halt_status asserted!");
-  assert_flush_while_fastint: assert #0 (~((take_ext_int_start_d1 | take_ext_int_start_d2) & dec_tlu_flush_lower_r)) else $display("ERROR: TLU Flushing inside fast interrupt procedure!");
-`endif
-
-   // high priority interrupts can wakeup from external halt, so can unmasked timer interrupts
-   assign i_cpu_run_req_d1 = i_cpu_run_req_d1_raw | ((nmi_int_detected | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | (mhwakeup & mhwakeup_ready)) & o_cpu_halt_status & ~i_cpu_halt_req_d1);
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-
-   assign lsu_single_ecc_error_r = lsu_single_ecc_error_incr;
-
-   assign lsu_error_pkt_addr_r[31:0] = lsu_error_pkt_r.addr[31:0];
-
-
-   assign lsu_exc_valid_r_raw = lsu_error_pkt_r.exc_valid & ~dec_tlu_flush_lower_wb;
-
-   assign lsu_i0_exc_r_raw =  lsu_error_pkt_r.exc_valid;
-
-   assign lsu_i0_exc_r = lsu_i0_exc_r_raw & lsu_exc_valid_r_raw & ~i0_trigger_hit_r & ~rfpc_i0_r;
-
-   assign lsu_exc_valid_r = lsu_i0_exc_r;
-
-   assign lsu_exc_ma_r  =  lsu_i0_exc_r & ~lsu_error_pkt_r.exc_type;
-   assign lsu_exc_acc_r =  lsu_i0_exc_r & lsu_error_pkt_r.exc_type;
-   assign lsu_exc_st_r  =  lsu_i0_exc_r & lsu_error_pkt_r.inst_type;
-
-   // Single bit ECC errors on loads are RFNPC corrected, with the corrected data written to the GPR.
-   // LSU turns the load into a store and patches the data in the DCCM
-   assign lsu_i0_rfnpc_r = dec_tlu_i0_valid_r & ~i0_trigger_hit_r &
-                           (~lsu_error_pkt_r.inst_type & lsu_error_pkt_r.single_ecc_error);
-
-   //  Final commit valids
-   assign tlu_i0_commit_cmt = dec_tlu_i0_valid_r &
-                              ~rfpc_i0_r &
-                              ~lsu_i0_exc_r &
-                              ~inst_acc_r &
-                              ~dec_tlu_dbg_halted &
-                              ~request_debug_mode_r_d1 &
-                              ~i0_trigger_hit_r;
-
-   // unified place to manage the killing of arch state writebacks
-   assign tlu_i0_kill_writeb_r = rfpc_i0_r | lsu_i0_exc_r | inst_acc_r | (illegal_r & dec_tlu_dbg_halted) | i0_trigger_hit_r;
-   assign dec_tlu_i0_commit_cmt = tlu_i0_commit_cmt;
-
-
-   // refetch PC, microarch flush
-   // ic errors only in pipe0
-   assign rfpc_i0_r =  ((dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (exu_i0_br_error_r | exu_i0_br_start_error_r)) | // inst commit with rfpc
-                        ((ic_perr_r | iccm_sbecc_r) & ~ext_int_freeze_d1)) & // ic/iccm without inst commit
-                       ~i0_trigger_hit_r & // unless there's a trigger. Err signal to ic/iccm will assert anyway to clear the error.
-                       ~lsu_i0_rfnpc_r;
-
-   // From the indication of a iccm single bit error until the first commit or flush, maintain a repair state. In the repair state, rfnpc i0 commits.
-   assign iccm_repair_state_ns = iccm_sbecc_r | (iccm_repair_state_d1 & ~dec_tlu_flush_lower_r);
-
-
-   localparam MCPC          = 12'h7c2;
-
-   // this is a flush of last resort, meaning only assert it if there is no other flush happening.
-   assign iccm_repair_state_rfnpc = tlu_i0_commit_cmt & iccm_repair_state_d1 &
-                                    ~(ebreak_r | ecall_r | mret_r | take_reset | illegal_r | (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC)));
-
-if(pt.BTB_ENABLE==1) begin
-   // go ahead and repair the branch error on other flushes, doesn't have to be the rfpc flush
-   assign dec_tlu_br0_error_r = exu_i0_br_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_start_error_r = exu_i0_br_start_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_v_r = exu_i0_br_valid_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (~exu_i0_br_mp_r | ~exu_pmu_i0_br_ataken);
-
-
-   assign dec_tlu_br0_r_pkt.hist[1:0] = exu_i0_br_hist_r[1:0];
-   assign dec_tlu_br0_r_pkt.br_error = dec_tlu_br0_error_r;
-   assign dec_tlu_br0_r_pkt.br_start_error = dec_tlu_br0_start_error_r;
-   assign dec_tlu_br0_r_pkt.valid = dec_tlu_br0_v_r;
-   assign dec_tlu_br0_r_pkt.way = exu_i0_br_way_r;
-   assign dec_tlu_br0_r_pkt.middle = exu_i0_br_middle_r;
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign dec_tlu_br0_error_r = '0;
-   assign dec_tlu_br0_start_error_r = '0;
-   assign dec_tlu_br0_v_r = '0;
-   assign dec_tlu_br0_r_pkt  = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // only expect these in pipe 0
-   assign       ebreak_r     =  (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-   assign       ecall_r      =  (dec_tlu_packet_r.pmu_i0_itype == ECALL)   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       illegal_r    =  ~dec_tlu_packet_r.legal   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       mret_r       =  (dec_tlu_packet_r.pmu_i0_itype == MRET)    & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   // fence_i includes debug only fence_i's
-   assign       fence_i_r    =  (dec_tlu_packet_r.fence_i & dec_tlu_i0_valid_r & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-   assign       ic_perr_r    =  ifu_ic_error_start_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       iccm_sbecc_r =  ifu_iccm_rd_ecc_single_err_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       inst_acc_r_raw  =  dec_tlu_packet_r.icaf & dec_tlu_i0_valid_r;
-   assign       inst_acc_r = inst_acc_r_raw & ~rfpc_i0_r & ~i0_trigger_hit_r;
-   assign       inst_acc_second_r = dec_tlu_packet_r.icaf_second;
-
-   assign       ebreak_to_debug_mode_r = (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-
-   rvdff #(1)  exctype_wb_ff (.*, .clk(e4e5_clk),
-                                .din (ebreak_to_debug_mode_r   ),
-                                .dout(ebreak_to_debug_mode_r_d1));
-
-   assign dec_tlu_fence_i_r = fence_i_r;
-   //
-   // Exceptions
-   //
-   // - MEPC <- PC
-   // - PC <- MTVEC, assert flush_lower
-   // - MCAUSE <- cause
-   // - MSCAUSE <- secondary cause
-   // - MTVAL <-
-   // - MPIE <- MIE
-   // - MIE <- 0
-   //
-   assign i0_exception_valid_r = (ebreak_r | ecall_r | illegal_r | inst_acc_r) & ~rfpc_i0_r & ~dec_tlu_dbg_halted;
-
-   // Cause:
-   //
-   // 0x2 : illegal
-   // 0x3 : breakpoint
-   // 0xb : Environment call M-mode
-
-
-   assign exc_cause_r[4:0] =  ( ({5{take_ext_int}}        & 5'h0b) |
-                                ({5{take_timer_int}}      & 5'h07) |
-                                ({5{take_soft_int}}       & 5'h03) |
-                                ({5{take_int_timer0_int}} & 5'h1d) |
-                                ({5{take_int_timer1_int}} & 5'h1c) |
-                                ({5{take_ce_int}}         & 5'h1e) |
-                                ({5{illegal_r}}           & 5'h02) |
-                                ({5{ecall_r}}             & 5'h0b) |
-                                ({5{inst_acc_r}}          & 5'h01) |
-                                ({5{ebreak_r | i0_trigger_hit_r}}   & 5'h03) |
-                                ({5{lsu_exc_ma_r & ~lsu_exc_st_r}}  & 5'h04) |
-                                ({5{lsu_exc_acc_r & ~lsu_exc_st_r}} & 5'h05) |
-                                ({5{lsu_exc_ma_r & lsu_exc_st_r}}   & 5'h06) |
-                                ({5{lsu_exc_acc_r & lsu_exc_st_r}}  & 5'h07)
-                                ) & ~{5{take_nmi}};
-
-   //
-   // Interrupts
-   //
-   // exceptions that are committed have already happened and will cause an int at E4 to wait a cycle
-   // or more if MSTATUS[MIE] is cleared.
-   //
-   // -in priority order, highest to lowest
-   // -single cycle window where a csr write to MIE/MSTATUS is at E4 when the other conditions for externals are met.
-   //  Hold off externals for a cycle to make sure we are consistent with what was just written
-   assign mhwakeup_ready =  ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE];
-   assign ext_int_ready   = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE] & ~ignore_ext_int_due_to_lsu_stall;
-   assign ce_int_ready    = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MCEIP]  & mie_ns[MIE_MCEIE];
-   assign soft_int_ready  = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MSIP]   & mie_ns[MIE_MSIE];
-   assign timer_int_ready = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MTIP]   & mie_ns[MIE_MTIE];
-
-   // MIP for internal timers pulses for 1 clock, resets the timer counter. Mip won't hold past the various stall conditions.
-   assign int_timer0_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE0];
-   assign int_timer0_int_ready = mip[MIP_MITIP0] & int_timer0_int_possible;
-   assign int_timer1_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE1];
-   assign int_timer1_int_ready = mip[MIP_MITIP1] & int_timer1_int_possible;
-
-   // Internal timers pulse and reset. If core is PMU/FW halted, the pulse will cause an exit from halt, but won't stick around
-   // Make it sticky, also for 1 cycle stall conditions.
-   assign int_timer_stalled = dec_csr_stall_int_ff | synchronous_flush_r | exc_or_int_valid_r_d1 | mret_r;
-
-   assign int_timer0_int_hold = (int_timer0_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer0_int_possible & int_timer0_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-   assign int_timer1_int_hold = (int_timer1_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer1_int_possible & int_timer1_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-
-
-   assign internal_dbg_halt_timers = internal_dbg_halt_mode_f & ~dcsr_single_step_running;
-
-
-   assign block_interrupts = ( (internal_dbg_halt_mode & (~dcsr_single_step_running | dec_tlu_i0_valid_r)) | // No ints in db-halt unless we are single stepping
-                               internal_pmu_fw_halt_mode | i_cpu_halt_req_d1 |// No ints in PMU/FW halt. First we exit halt
-                               take_nmi | // NMI is top priority
-                               ebreak_to_debug_mode_r | // Heading to debug mode, hold off ints
-                               synchronous_flush_r | // exception flush this cycle
-                               exc_or_int_valid_r_d1 | // ext/int past cycle (need time for MIE to update)
-                               mret_r |    // mret in progress, for cases were ISR enables ints before mret
-                               ext_int_freeze_d1 // Fast interrupt in progress (optional)
-                               );
-
-
-if (pt.FAST_INTERRUPT_REDIRECT) begin
-
-
-   assign take_ext_int_start = ext_int_ready & ~block_interrupts;
-
-   assign ext_int_freeze = take_ext_int_start | take_ext_int_start_d1 | take_ext_int_start_d2 | take_ext_int_start_d3;
-   assign take_ext_int = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-   assign fast_int_meicpct = csr_meicpct & dec_csr_any_unq_d;  // MEICPCT becomes illegal if fast ints are enabled
-
-   assign ignore_ext_int_due_to_lsu_stall = lsu_fastint_stall_any;
-end
-else begin
-   assign take_ext_int_start = 1'b0;
-   assign ext_int_freeze = 1'b0;
-   assign ext_int_freeze_d1 = 1'b0;
-   assign take_ext_int_start_d1 = 1'b0;
-   assign take_ext_int_start_d2 = 1'b0;
-   assign take_ext_int_start_d3 = 1'b0;
-   assign fast_int_meicpct = 1'b0;
-   assign ignore_ext_int_due_to_lsu_stall = 1'b0;
-
-   assign take_ext_int = ext_int_ready & ~block_interrupts;
-end
-
-   assign take_ce_int  = ce_int_ready & ~ext_int_ready & ~block_interrupts;
-   assign take_soft_int = soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_timer_int = timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer0_int = (int_timer0_int_ready | int_timer0_int_hold_f) & int_timer0_int_possible & ~dec_csr_stall_int_ff &
-                                ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer1_int = (int_timer1_int_ready | int_timer1_int_hold_f) & int_timer1_int_possible & ~dec_csr_stall_int_ff &
-                                ~(int_timer0_int_ready | int_timer0_int_hold_f) & ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-
-   assign take_reset = reset_delayed & mpc_reset_run_req;
-   assign take_nmi = nmi_int_detected & ~internal_pmu_fw_halt_mode & (~internal_dbg_halt_mode | (dcsr_single_step_running_f & dcsr[DCSR_STEPIE] & ~dec_tlu_i0_valid_r & ~dcsr_single_step_done_f)) &
-                     ~synchronous_flush_r & ~mret_r & ~take_reset & ~ebreak_to_debug_mode_r & (~ext_int_freeze_d1 | (take_ext_int_start_d3 & |lsu_fir_error[1:0]));
-
-   assign interrupt_valid_r = take_ext_int | take_timer_int | take_soft_int | take_nmi | take_ce_int | take_int_timer0_int | take_int_timer1_int;
-
-
-   // Compute interrupt path:
-   // If vectored async is set in mtvec, flush path for interrupts is MTVEC + (4 * CAUSE);
-   assign vectored_path[31:1]  = {mtvec[30:1], 1'b0} + {25'b0, exc_cause_r[4:0], 1'b0};
-   assign interrupt_path[31:1] = take_nmi ? nmi_vec[31:1] : ((mtvec[0] == 1'b1) ? vectored_path[31:1] : {mtvec[30:1], 1'b0});
-
-   assign sel_npc_r  = lsu_i0_rfnpc_r | fence_i_r | iccm_repair_state_rfnpc | (i_cpu_run_req_d1 & ~interrupt_valid_r) | (rfpc_i0_r & ~dec_tlu_i0_valid_r);
-   assign sel_npc_resume = (i_cpu_run_req_d1 & pmu_fw_tlu_halted_f) | pause_expired_r;
-
-   assign sel_fir_addr = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-
-   assign synchronous_flush_r  = i0_exception_valid_r | // exception
-                                 rfpc_i0_r | // rfpc
-                                 lsu_exc_valid_r |  // lsu exception in either pipe 0 or pipe 1
-                                 fence_i_r |  // fence, a rfnpc
-                                 lsu_i0_rfnpc_r | // lsu dccm sb ecc
-                                 iccm_repair_state_rfnpc | // Iccm sb ecc
-                                 debug_resume_req_f | // resume from debug halt, fetch the dpc
-                                 sel_npc_resume |  // resume from pmu/fw halt, or from pause and fetch the NPC
-                                 dec_tlu_wr_pause_r_d1 | // flush at start of pause
-                                 i0_trigger_hit_r; // trigger hit, ebreak or goto debug mode
-
-   assign tlu_flush_lower_r = interrupt_valid_r | mret_r | synchronous_flush_r | take_halt | take_reset | take_ext_int_start;
-
-   assign tlu_flush_path_r[31:1] = take_reset ? rst_vec[31:1] :
-
-                                    ( ({31{sel_fir_addr}} & lsu_fir_addr[31:1]) |
-                                      ({31{~take_nmi & sel_npc_r}} & npc_r[31:1]) |
-                                      ({31{~take_nmi & rfpc_i0_r & dec_tlu_i0_valid_r & ~sel_npc_r}} & dec_tlu_i0_pc_r[31:1]) |
-                                      ({31{interrupt_valid_r & ~sel_fir_addr}} & interrupt_path[31:1]) |
-                                      ({31{(i0_exception_valid_r | lsu_exc_valid_r |
-                                            (i0_trigger_hit_r & ~trigger_hit_dmode_r)) & ~interrupt_valid_r & ~sel_fir_addr}} & {mtvec[30:1],1'b0}) |
-                                      ({31{~take_nmi & mret_r}} & mepc[31:1]) |
-                                      ({31{~take_nmi & debug_resume_req_f}} & dpc[31:1]) |
-                                      ({31{~take_nmi & sel_npc_resume}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  flush_lower_ff (.*, .en(tlu_flush_lower_r),
-                                 .din({tlu_flush_path_r[31:1]}),
-                                 .dout({tlu_flush_path_r_d1[31:1]}));
-
-   assign dec_tlu_flush_lower_wb = tlu_flush_lower_r_d1;
-   assign dec_tlu_flush_lower_r = tlu_flush_lower_r;
-   assign dec_tlu_flush_path_r[31:1] = tlu_flush_path_r[31:1];
-
-
-   // this is used to capture mepc, etc.
-   assign exc_or_int_valid_r = lsu_exc_valid_r | i0_exception_valid_r | interrupt_valid_r | (i0_trigger_hit_r & ~trigger_hit_dmode_r);
-
-
-   rvdffie #(12)  excinfo_wb_ff (.*,
-                                 .din({interrupt_valid_r, i0_exception_valid_r, exc_or_int_valid_r,
-                                       exc_cause_r[4:0], tlu_i0_commit_cmt & ~illegal_r, i0_trigger_hit_r,
-                                       take_nmi, pause_expired_r }),
-                                 .dout({interrupt_valid_r_d1, i0_exception_valid_r_d1, exc_or_int_valid_r_d1,
-                                        exc_cause_wb[4:0], i0_valid_wb, trigger_hit_r_d1,
-                                        take_nmi_r_d1, pause_expired_wb}));
-
-   //----------------------------------------------------------------------
-   //
-   // CSRs
-   //
-   //----------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // MISA (RO)
-   //  [31:30] XLEN - implementation width, 2'b01 - 32 bits
-   //  [12]    M    - integer mul/div
-   //  [8]     I    - RV32I
-   //  [2]     C    - Compressed extension
-   localparam MISA          = 12'h301;
-
-   // MVENDORID, MARCHID, MIMPID, MHARTID
-   localparam MVENDORID     = 12'hf11;
-   localparam MARCHID       = 12'hf12;
-   localparam MIMPID        = 12'hf13;
-   localparam MHARTID       = 12'hf14;
-
-
-   // ----------------------------------------------------------------------
-   // MSTATUS (RW)
-   // [12:11] MPP  : Prior priv level, always 2'b11, not flopped
-   // [7]     MPIE : Int enable previous [1]
-   // [3]     MIE  : Int enable          [0]
-   localparam MSTATUS       = 12'h300;
-
-
-   //When executing a MRET instruction, supposing MPP holds the value 3, MIE
-   //is set to MPIE; the privilege mode is changed to 3; MPIE is set to 1; and MPP is set to 3
-
-   assign dec_csr_wen_r_mod = dec_csr_wen_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign wr_mstatus_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSTATUS);
-
-   // set this even if we don't go to fwhalt due to debug halt. We committed the inst, so ...
-   assign set_mie_pmu_fw_halt = ~mpmc_b_ns[1] & fw_halt_req;
-
-   assign mstatus_ns[1:0] = ( ({2{~wr_mstatus_r & exc_or_int_valid_r}} & {mstatus[MSTATUS_MIE], 1'b0}) |
-                              ({2{ wr_mstatus_r & exc_or_int_valid_r}} & {dec_csr_wrdata_r[3], 1'b0}) |
-                              ({2{mret_r & ~exc_or_int_valid_r}} & {1'b1, mstatus[1]}) |
-                              ({2{set_mie_pmu_fw_halt}} & {mstatus[1], 1'b1}) |
-                              ({2{wr_mstatus_r & ~exc_or_int_valid_r}} & {dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]}) |
-                              ({2{~wr_mstatus_r & ~exc_or_int_valid_r & ~mret_r & ~set_mie_pmu_fw_halt}} & mstatus[1:0]) );
-
-   // gate MIE if we are single stepping and DCSR[STEPIE] is off
-   assign mstatus_mie_ns = mstatus[MSTATUS_MIE] & (~dcsr_single_step_running_f | dcsr[DCSR_STEPIE]);
-
-   // ----------------------------------------------------------------------
-   // MTVEC (RW)
-   // [31:2] BASE : Trap vector base address
-   // [1] - Reserved, not implemented, reads zero
-   // [0]  MODE : 0 = Direct, 1 = Asyncs are vectored to BASE + (4 * CAUSE)
-   localparam MTVEC         = 12'h305;
-
-   assign wr_mtvec_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVEC);
-   assign mtvec_ns[30:0] = {dec_csr_wrdata_r[31:2], dec_csr_wrdata_r[0]} ;
-   rvdffe #(31)  mtvec_ff (.*, .en(wr_mtvec_r), .din(mtvec_ns[30:0]), .dout(mtvec[30:0]));
-
-   // ----------------------------------------------------------------------
-   // MIP (RW)
-   //
-   // [30] MCEIP  : (RO) M-Mode Correctable Error interrupt pending
-   // [29] MITIP0 : (RO) M-Mode Internal Timer0 interrupt pending
-   // [28] MITIP1 : (RO) M-Mode Internal Timer1 interrupt pending
-   // [11] MEIP   : (RO) M-Mode external interrupt pending
-   // [7]  MTIP   : (RO) M-Mode timer interrupt pending
-   // [3]  MSIP   : (RO) M-Mode software interrupt pending
-   localparam MIP           = 12'h344;
-
-   assign ce_int = (mdccme_ce_req | miccme_ce_req | mice_ce_req);
-
-   assign mip_ns[5:0] = {ce_int, dec_timer_t0_pulse, dec_timer_t1_pulse, mexintpend, timer_int_sync, soft_int_sync};
-
-   // ----------------------------------------------------------------------
-   // MIE (RW)
-   // [30] MCEIE  : (RO) M-Mode Correctable Error interrupt enable
-   // [29] MITIE0 : (RO) M-Mode Internal Timer0 interrupt enable
-   // [28] MITIE1 : (RO) M-Mode Internal Timer1 interrupt enable
-   // [11] MEIE   : (RW) M-Mode external interrupt enable
-   // [7]  MTIE   : (RW) M-Mode timer interrupt enable
-   // [3]  MSIE   : (RW) M-Mode software interrupt enable
-   localparam MIE           = 12'h304;
-
-   assign wr_mie_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MIE);
-   assign mie_ns[5:0] = wr_mie_r ? {dec_csr_wrdata_r[30:28], dec_csr_wrdata_r[11], dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]} : mie[5:0];
-   rvdff #(6)  mie_ff (.*, .clk(csr_wr_clk), .din(mie_ns[5:0]), .dout(mie[5:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MCYCLEL (RW)
-   // [31:0] : Lower Cycle count
-
-   localparam MCYCLEL       = 12'hb00;
-
-   assign kill_ebreak_count_r = ebreak_to_debug_mode_r & dcsr[DCSR_STOPC];
-
-   assign wr_mcyclel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEL);
-
-   assign mcyclel_cout_in = ~(kill_ebreak_count_r | (dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted | mcountinhibit[0]);
-
-   // split for power
-   assign {mcyclela_cout, mcyclel_inc[7:0]}  = mcyclel[7:0] +  {7'b0, 1'b1};
-   assign {mcyclel_cout,  mcyclel_inc[31:8]} = mcyclel[31:8] + {23'b0, mcyclela_cout};
-
-   assign mcyclel_ns[31:0] = wr_mcyclel_r ? dec_csr_wrdata_r[31:0] : mcyclel_inc[31:0];
-
-   rvdffe #(24) mcyclel_bff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | (mcyclela_cout & mcyclel_cout_in)),    .din(mcyclel_ns[31:8]), .dout(mcyclel[31:8]));
-   rvdffe #(8)  mcyclel_aff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | mcyclel_cout_in),  .din(mcyclel_ns[7:0]),  .dout(mcyclel[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MCYCLEH (RW)
-   // [63:32] : Higher Cycle count
-   // Chained with mcyclel. Note: mcyclel overflow due to a mcycleh write gets ignored.
-
-   localparam MCYCLEH       = 12'hb80;
-
-   assign wr_mcycleh_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEH);
-
-   assign mcycleh_inc[31:0] = mcycleh[31:0] + {31'b0, mcyclel_cout_f};
-   assign mcycleh_ns[31:0]  = wr_mcycleh_r ? dec_csr_wrdata_r[31:0] : mcycleh_inc[31:0];
-
-   rvdffe #(32)  mcycleh_ff (.*, .clk(free_l2clk), .en(wr_mcycleh_r | mcyclel_cout_f), .din(mcycleh_ns[31:0]), .dout(mcycleh[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MINSTRETL (RW)
-   // [31:0] : Lower Instruction retired count
-   // From the spec "Some CSRs, such as the instructions retired counter, instret, may be modified as side effects
-   // of instruction execution. In these cases, if a CSR access instruction reads a CSR, it reads the
-   // value prior to the execution of the instruction. If a CSR access instruction writes a CSR, the
-   // update occurs after the execution of the instruction. In particular, a value written to instret by
-   // one instruction will be the value read by the following instruction (i.e., the increment of instret
-   // caused by the first instruction retiring happens before the write of the new value)."
-   localparam MINSTRETL     = 12'hb02;
-
-   assign i0_valid_no_ebreak_ecall_r = dec_tlu_i0_valid_r & ~(ebreak_r | ecall_r | ebreak_to_debug_mode_r | illegal_r | mcountinhibit[2]);
-
-   assign wr_minstretl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETL);
-
-   assign {minstretl_couta, minstretl_inc[7:0]} = minstretl[7:0] + {7'b0,1'b1};
-   assign {minstretl_cout, minstretl_inc[31:8]} = minstretl[31:8] + {23'b0, minstretl_couta};
-
-   assign minstret_enable = (i0_valid_no_ebreak_ecall_r & tlu_i0_commit_cmt) | wr_minstretl_r;
-
-   assign minstretl_cout_ns = minstretl_cout & ~wr_minstreth_r & i0_valid_no_ebreak_ecall_r & ~dec_tlu_dbg_halted;
-
-   assign minstretl_ns[31:0] = wr_minstretl_r ? dec_csr_wrdata_r[31:0] : minstretl_inc[31:0];
-   rvdffe #(24)  minstretl_bff (.*, .en(wr_minstretl_r | (minstretl_couta & minstret_enable)),
-                                .din(minstretl_ns[31:8]), .dout(minstretl[31:8]));
-   rvdffe #(8)   minstretl_aff (.*, .en(minstret_enable),
-                                .din(minstretl_ns[7:0]),  .dout(minstretl[7:0]));
-
-
-   assign minstretl_read[31:0] = minstretl[31:0];
-   // ----------------------------------------------------------------------
-   // MINSTRETH (RW)
-   // [63:32] : Higher Instret count
-   // Chained with minstretl. Note: minstretl overflow due to a minstreth write gets ignored.
-
-   localparam MINSTRETH     = 12'hb82;
-
-   assign wr_minstreth_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETH);
-
-   assign minstreth_inc[31:0] = minstreth[31:0] + {31'b0, minstretl_cout_f};
-   assign minstreth_ns[31:0]  = wr_minstreth_r ? dec_csr_wrdata_r[31:0] : minstreth_inc[31:0];
-   rvdffe #(32)  minstreth_ff (.*, .en((minstret_enable_f & minstretl_cout_f) | wr_minstreth_r), .din(minstreth_ns[31:0]), .dout(minstreth[31:0]));
-
-   assign minstreth_read[31:0] = minstreth_inc[31:0];
-
-   // ----------------------------------------------------------------------
-   // MSCRATCH (RW)
-   // [31:0] : Scratch register
-   localparam MSCRATCH      = 12'h340;
-
-   assign wr_mscratch_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCRATCH);
-
-   rvdffe #(32)  mscratch_ff (.*, .en(wr_mscratch_r), .din(dec_csr_wrdata_r[31:0]), .dout(mscratch[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MEPC (RW)
-   // [31:1] : Exception PC
-   localparam MEPC          = 12'h341;
-
-   // NPC
-
-   assign sel_exu_npc_r = ~dec_tlu_dbg_halted & ~tlu_flush_lower_r_d1 & dec_tlu_i0_valid_r;
-   assign sel_flush_npc_r = ~dec_tlu_dbg_halted & tlu_flush_lower_r_d1 & ~dec_tlu_flush_noredir_r_d1;
-   assign sel_hold_npc_r = ~sel_exu_npc_r & ~sel_flush_npc_r;
-
-   assign npc_r[31:1] =  ( ({31{sel_exu_npc_r}} & exu_npc_r[31:1]) |
-                           ({31{~mpc_reset_run_req & reset_delayed}} & rst_vec[31:1]) | // init to reset vector for mpc halt on reset case
-                           ({31{(sel_flush_npc_r)}} & tlu_flush_path_r_d1[31:1]) |
-                           ({31{(sel_hold_npc_r)}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  npwbc_ff (.*, .en(sel_exu_npc_r | sel_flush_npc_r | reset_delayed), .din(npc_r[31:1]), .dout(npc_r_d1[31:1]));
-
-   // PC has to be captured for exceptions and interrupts. For MRET, we could execute it and then take an
-   // interrupt before the next instruction.
-   assign pc0_valid_r = ~dec_tlu_dbg_halted & dec_tlu_i0_valid_r;
-
-   assign pc_r[31:1]  = ( ({31{ pc0_valid_r}} & dec_tlu_i0_pc_r[31:1]) |
-                          ({31{~pc0_valid_r}} & pc_r_d1[31:1]));
-
-   rvdffpcie #(31)  pwbc_ff (.*, .en(pc0_valid_r), .din(pc_r[31:1]), .dout(pc_r_d1[31:1]));
-
-   assign wr_mepc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEPC);
-
-   assign mepc_ns[31:1] = ( ({31{i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r}} & pc_r[31:1]) |
-                            ({31{interrupt_valid_r}} & npc_r[31:1]) |
-                            ({31{wr_mepc_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:1]) |
-                            ({31{~wr_mepc_r & ~exc_or_int_valid_r}} & mepc[31:1]) );
-
-
-   rvdffe #(31)  mepc_ff (.*, .en(i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r | interrupt_valid_r | wr_mepc_r), .din(mepc_ns[31:1]), .dout(mepc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // MCAUSE (RW)
-   // [31:0] : Exception Cause
-   localparam MCAUSE        = 12'h342;
-
-   assign wr_mcause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCAUSE);
-   assign mcause_sel_nmi_store = exc_or_int_valid_r & take_nmi & nmi_lsu_store_type;
-   assign mcause_sel_nmi_load = exc_or_int_valid_r & take_nmi & nmi_lsu_load_type;
-   assign mcause_sel_nmi_ext = exc_or_int_valid_r & take_nmi & take_ext_int_start_d3 & |lsu_fir_error[1:0] & ~nmi_int_detected_f;
-   // FIR value decoder
-   // 0 –no error
-   // 1 –uncorrectable ecc  => f000_1000
-   // 2 –dccm region access error => f000_1001
-   // 3 –non dccm region access error => f000_1002
-   assign mcause_fir_error_type[1:0] = {&lsu_fir_error[1:0], lsu_fir_error[1] & ~lsu_fir_error[0]};
-
-   assign mcause_ns[31:0] = ( ({32{mcause_sel_nmi_store}} & {32'hf000_0000}) |
-                              ({32{mcause_sel_nmi_load}} & {32'hf000_0001}) |
-                              ({32{mcause_sel_nmi_ext}} & {28'hf000_100, 2'b0, mcause_fir_error_type[1:0]}) |
-                              ({32{exc_or_int_valid_r & ~take_nmi}} & {interrupt_valid_r, 26'b0, exc_cause_r[4:0]}) |
-                              ({32{wr_mcause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                              ({32{~wr_mcause_r & ~exc_or_int_valid_r}} & mcause[31:0]) );
-
-   rvdffe #(32)  mcause_ff (.*, .en(exc_or_int_valid_r | wr_mcause_r), .din(mcause_ns[31:0]), .dout(mcause[31:0]));
-   // ----------------------------------------------------------------------
-   // MSCAUSE (RW)
-   // [2:0] : Secondary exception Cause
-   localparam MSCAUSE       = 12'h7ff;
-
-   assign wr_mscause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCAUSE);
-
-   assign ifu_mscause[3:0]  =  (dec_tlu_packet_r.icaf_type[1:0] == 2'b00) ? 4'b1001 :
-                               {2'b00 , dec_tlu_packet_r.icaf_type[1:0]} ;
-
-   assign mscause_type[3:0] = ( ({4{lsu_i0_exc_r}} & lsu_error_pkt_r.mscause[3:0]) |
-                                ({4{i0_trigger_hit_r}} & 4'b0001) |
-                                ({4{ebreak_r}} & 4'b0010) |
-                                ({4{inst_acc_r}} & ifu_mscause[3:0])
-                                );
-
-   assign mscause_ns[3:0] = ( ({4{exc_or_int_valid_r}} & mscause_type[3:0]) |
-                              ({4{ wr_mscause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[3:0]) |
-                              ({4{~wr_mscause_r & ~exc_or_int_valid_r}} & mscause[3:0])
-                             );
-
-   rvdff #(4)  mscause_ff (.*, .clk(e4e5_int_clk), .din(mscause_ns[3:0]), .dout(mscause[3:0]));
-   // ----------------------------------------------------------------------
-   // MTVAL (RW)
-   // [31:0] : Exception address if relevant
-   localparam MTVAL         = 12'h343;
-
-   assign wr_mtval_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVAL);
-   assign mtval_capture_pc_r = exc_or_int_valid_r & (ebreak_r | (inst_acc_r & ~inst_acc_second_r) | mepc_trigger_hit_sel_pc_r) & ~take_nmi;
-   assign mtval_capture_pc_plus2_r = exc_or_int_valid_r & (inst_acc_r & inst_acc_second_r) & ~take_nmi;
-   assign mtval_capture_inst_r = exc_or_int_valid_r & illegal_r & ~take_nmi;
-   assign mtval_capture_lsu_r = exc_or_int_valid_r & lsu_exc_valid_r & ~take_nmi;
-   assign mtval_clear_r = exc_or_int_valid_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_capture_lsu_r & ~mepc_trigger_hit_sel_pc_r;
-
-
-   assign mtval_ns[31:0] = (({32{mtval_capture_pc_r}} & {pc_r[31:1], 1'b0}) |
-                            ({32{mtval_capture_pc_plus2_r}} & {pc_r[31:1] + 31'b1, 1'b0}) |
-                            ({32{mtval_capture_inst_r}} & dec_illegal_inst[31:0]) |
-                            ({32{mtval_capture_lsu_r}} & lsu_error_pkt_addr_r[31:0]) |
-                            ({32{wr_mtval_r & ~interrupt_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                            ({32{~take_nmi & ~wr_mtval_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_clear_r & ~mtval_capture_lsu_r}} & mtval[31:0]) );
-
-
-   rvdffe #(32)  mtval_ff (.*, .en(tlu_flush_lower_r | wr_mtval_r), .din(mtval_ns[31:0]), .dout(mtval[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MCGC (RW) Clock gating control
-   // [31:10]: Reserved, reads 0x0
-   // [9]    : picio_clk_override
-   // [7]    : dec_clk_override
-   // [6]    : Unused
-   // [5]    : ifu_clk_override
-   // [4]    : lsu_clk_override
-   // [3]    : bus_clk_override
-   // [2]    : pic_clk_override
-   // [1]    : dccm_clk_override
-   // [0]    : icm_clk_override
-   //
-   localparam MCGC          = 12'h7f8;
-   assign wr_mcgc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCGC);
-
-   assign mcgc_ns[9:0] = wr_mcgc_r ? {~dec_csr_wrdata_r[9], dec_csr_wrdata_r[8:0]} : mcgc_int[9:0];
-   rvdffe #(10)  mcgc_ff (.*, .en(wr_mcgc_r), .din(mcgc_ns[9:0]), .dout(mcgc_int[9:0]));
-
-   assign mcgc[9:0] = {~mcgc_int[9], mcgc_int[8:0]};
-
-   assign dec_tlu_picio_clk_override= mcgc[9];
-   assign dec_tlu_misc_clk_override = mcgc[8];
-   assign dec_tlu_dec_clk_override  = mcgc[7];
-   //sign dec_tlu_exu_clk_override  = mcgc[6];
-   assign dec_tlu_ifu_clk_override  = mcgc[5];
-   assign dec_tlu_lsu_clk_override  = mcgc[4];
-   assign dec_tlu_bus_clk_override  = mcgc[3];
-   assign dec_tlu_pic_clk_override  = mcgc[2];
-   assign dec_tlu_dccm_clk_override = mcgc[1];
-   assign dec_tlu_icm_clk_override  = mcgc[0];
-
-   // ----------------------------------------------------------------------
-   // MFDC (RW) Feature Disable Control
-   // [31:19] : Reserved, reads 0x0
-   // [18:16] : DMA QoS Prty
-   // [15:13] : Reserved, reads 0x0
-   // [12]   : Disable trace
-   // [11]   : Disable external load forwarding
-   // [10]   : Disable dual issue
-   // [9]    : Disable pic multiple ints
-   // [8]    : Disable core ecc
-   // [7]    : Disable secondary alu?s
-   // [6]    : Unused, 0x0
-   // [5]    : Disable non-blocking loads/divides
-   // [4]    : Disable fast divide
-   // [3]    : Disable branch prediction and return stack
-   // [2]    : Disable write buffer coalescing
-   // [1]    : Disable load misses that bypass the write buffer
-   // [0]    : Disable pipelining - Enable single instruction execution
-   //
-   localparam MFDC          = 12'h7f9;
-
-   assign wr_mfdc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDC);
-
-   rvdffe #(16)  mfdc_ff (.*, .en(wr_mfdc_r), .din({mfdc_ns[15:0]}), .dout(mfdc_int[15:0]));
-
-   // flip poweron value of bit 6 for AXI build
-   if(pt.BUILD_AXI4==1) begin : axi4
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16], dec_csr_wrdata_r[12], dec_csr_wrdata_r[11:7], ~dec_csr_wrdata_r[6], dec_csr_wrdata_r[5:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12], mfdc_int[11:7], ~mfdc_int[6], mfdc_int[5:0]};
-   end
-   else begin
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16],dec_csr_wrdata_r[12:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12:0]};
-   end
-
-
-   assign dec_tlu_dma_qos_prty[2:0] = mfdc[18:16];
-   assign dec_tlu_trace_disable = mfdc[12];
-   assign dec_tlu_external_ldfwd_disable = mfdc[11];
-   assign dec_tlu_core_ecc_disable = 1'b1;//mfdc[8];
-   assign dec_tlu_sideeffect_posted_disable = mfdc[6];
-   assign dec_tlu_bpred_disable = mfdc[3];
-   assign dec_tlu_wb_coalescing_disable = mfdc[2];
-   assign dec_tlu_pipelining_disable = mfdc[0];
-
-   // ----------------------------------------------------------------------
-   // MCPC (RW) Pause counter
-   // [31:0] : Reads 0x0, decs in the wb register in decode_ctl
-
-   assign dec_tlu_wr_pause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC) & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MRAC (RW)
-   // [31:0] : Region Access Control Register, 16 regions, {side_effect, cachable} pairs
-   localparam MRAC          = 12'h7c0;
-
-   assign wr_mrac_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MRAC);
-
-   // prevent pairs of 0x11, side_effect and cacheable
-   assign mrac_in[31:0] = {dec_csr_wrdata_r[31], dec_csr_wrdata_r[30] & ~dec_csr_wrdata_r[31],
-                           dec_csr_wrdata_r[29], dec_csr_wrdata_r[28] & ~dec_csr_wrdata_r[29],
-                           dec_csr_wrdata_r[27], dec_csr_wrdata_r[26] & ~dec_csr_wrdata_r[27],
-                           dec_csr_wrdata_r[25], dec_csr_wrdata_r[24] & ~dec_csr_wrdata_r[25],
-                           dec_csr_wrdata_r[23], dec_csr_wrdata_r[22] & ~dec_csr_wrdata_r[23],
-                           dec_csr_wrdata_r[21], dec_csr_wrdata_r[20] & ~dec_csr_wrdata_r[21],
-                           dec_csr_wrdata_r[19], dec_csr_wrdata_r[18] & ~dec_csr_wrdata_r[19],
-                           dec_csr_wrdata_r[17], dec_csr_wrdata_r[16] & ~dec_csr_wrdata_r[17],
-                           dec_csr_wrdata_r[15], dec_csr_wrdata_r[14] & ~dec_csr_wrdata_r[15],
-                           dec_csr_wrdata_r[13], dec_csr_wrdata_r[12] & ~dec_csr_wrdata_r[13],
-                           dec_csr_wrdata_r[11], dec_csr_wrdata_r[10] & ~dec_csr_wrdata_r[11],
-                           dec_csr_wrdata_r[9], dec_csr_wrdata_r[8] & ~dec_csr_wrdata_r[9],
-                           dec_csr_wrdata_r[7], dec_csr_wrdata_r[6] & ~dec_csr_wrdata_r[7],
-                           dec_csr_wrdata_r[5], dec_csr_wrdata_r[4] & ~dec_csr_wrdata_r[5],
-                           dec_csr_wrdata_r[3], dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[3],
-                           dec_csr_wrdata_r[1], dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[1]};
-
-   rvdffe #(32)  mrac_ff (.*, .en(wr_mrac_r), .din(mrac_in[31:0]), .dout(mrac[31:0]));
-
-   // drive to LSU/IFU
-   assign dec_tlu_mrac_ff[31:0] = mrac[31:0];
-
-   // ----------------------------------------------------------------------
-   // MDEAU (WAR0)
-   // [31:0] : Dbus Error Address Unlock register
-   //
-   localparam MDEAU         = 12'hbc0;
-
-   assign wr_mdeau_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDEAU);
-
-
-   // ----------------------------------------------------------------------
-   // MDSEAC (R)
-   // [31:0] : Dbus Store Error Address Capture register
-   //
-   localparam MDSEAC        = 12'hfc0;
-
-   // only capture error bus if the MDSEAC reg is not locked
-   assign mdseac_locked_ns = mdseac_en | (mdseac_locked_f & ~wr_mdeau_r);
-
-   assign mdseac_en = (lsu_imprecise_error_store_any | lsu_imprecise_error_load_any) & ~nmi_int_detected_f & ~mdseac_locked_f;
-
-   rvdffe #(32)  mdseac_ff (.*, .en(mdseac_en), .din(lsu_imprecise_error_addr_any[31:0]), .dout(mdseac[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MPMC (R0W1)
-   // [0] : FW halt
-   // [1] : Set MSTATUS[MIE] on halt
-
-   localparam MPMC          = 12'h7c6;
-
-   assign wr_mpmc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MPMC);
-
-   // allow the cycle of the dbg halt flush that contains the wr_mpmc_r to
-   // set the mstatus bit potentially, use delayed version of internal dbg halt.
-   assign fw_halt_req = wr_mpmc_r & dec_csr_wrdata_r[0] & ~internal_dbg_halt_mode_f2 & ~ext_int_freeze_d1;
-
-   assign fw_halted_ns = (fw_halt_req | fw_halted) & ~set_mie_pmu_fw_halt;
-   assign mpmc_b_ns[1] = wr_mpmc_r ? ~dec_csr_wrdata_r[1] : ~mpmc[1];
-   rvdff #(1)  mpmc_ff (.*, .clk(csr_wr_clk), .din(mpmc_b_ns[1]), .dout(mpmc_b[1]));
-   assign mpmc[1] = ~mpmc_b[1];
-
-   // ----------------------------------------------------------------------
-   // MICECT (I-Cache error counter/threshold)
-   // [31:27] : Icache parity error threshold
-   // [26:0]  : Icache parity error count
-   localparam MICECT        = 12'h7f0;
-
-   assign csr_sat[31:27] = (dec_csr_wrdata_r[31:27] > 5'd26) ? 5'd26 : dec_csr_wrdata_r[31:27];
-
-   assign wr_micect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICECT);
-   assign micect_inc[26:0] = micect[26:0] + {26'b0, ic_perr_r};
-   assign micect_ns =  wr_micect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {micect[31:27], micect_inc[26:0]};
-
-   rvdffe #(32)  micect_ff (.*, .en(wr_micect_r | ic_perr_r), .din(micect_ns[31:0]), .dout(micect[31:0]));
-
-   assign mice_ce_req = |({32'hffffffff << micect[31:27]} & {5'b0, micect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MICCMECT (ICCM error counter/threshold)
-   // [31:27] : ICCM parity error threshold
-   // [26:0]  : ICCM parity error count
-   localparam MICCMECT      = 12'h7f1;
-
-   assign wr_miccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICCMECT);
-   assign miccmect_inc[26:0] = miccmect[26:0] + {26'b0, iccm_sbecc_r | iccm_dma_sb_error};
-   assign miccmect_ns        = wr_miccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {miccmect[31:27], miccmect_inc[26:0]};
-
-   rvdffe #(32)  miccmect_ff (.*, .clk(free_l2clk), .en(wr_miccmect_r | iccm_sbecc_r | iccm_dma_sb_error), .din(miccmect_ns[31:0]), .dout(miccmect[31:0]));
-
-   assign miccme_ce_req = |({32'hffffffff << miccmect[31:27]} & {5'b0, miccmect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MDCCMECT (DCCM error counter/threshold)
-   // [31:27] : DCCM parity error threshold
-   // [26:0]  : DCCM parity error count
-   localparam MDCCMECT      = 12'h7f2;
-
-   assign wr_mdccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDCCMECT);
-   assign mdccmect_inc[26:0] = mdccmect[26:0] + {26'b0, lsu_single_ecc_error_r_d1};
-   assign mdccmect_ns        = wr_mdccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {mdccmect[31:27], mdccmect_inc[26:0]};
-
-   rvdffe #(32)  mdccmect_ff (.*, .clk(free_l2clk), .en(wr_mdccmect_r | lsu_single_ecc_error_r_d1), .din(mdccmect_ns[31:0]), .dout(mdccmect[31:0]));
-
-   assign mdccme_ce_req = |({32'hffffffff << mdccmect[31:27]} & {5'b0, mdccmect[26:0]});
-
-
-   // ----------------------------------------------------------------------
-   // MFDHT (Force Debug Halt Threshold)
-   // [5:1] : Halt timeout threshold (power of 2)
-   //   [0] : Halt timeout enabled
-   localparam MFDHT         = 12'h7ce;
-
-   assign wr_mfdht_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHT);
-
-   assign mfdht_ns[5:0] = wr_mfdht_r ? dec_csr_wrdata_r[5:0] : mfdht[5:0];
-
-   rvdffs #(6)  mfdht_ff (.*, .clk(csr_wr_clk), .en(wr_mfdht_r), .din(mfdht_ns[5:0]), .dout(mfdht[5:0]));
-
-    // ----------------------------------------------------------------------
-   // MFDHS(RW)
-   // [1] : LSU operation pending when debug halt threshold reached
-   // [0] : IFU operation pending when debug halt threshold reached
-
-   localparam MFDHS         = 12'h7cf;
-
-   assign wr_mfdhs_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHS);
-
-   assign mfdhs_ns[1:0] = wr_mfdhs_r ? dec_csr_wrdata_r[1:0] : ((dbg_tlu_halted & ~dbg_tlu_halted_f) ? {~lsu_idle_any_f, ~ifu_miss_state_idle_f} : mfdhs[1:0]);
-
-   rvdffs #(2)  mfdhs_ff (.*, .clk(free_clk), .en(wr_mfdhs_r | dbg_tlu_halted), .din(mfdhs_ns[1:0]), .dout(mfdhs[1:0]));
-
-   assign force_halt_ctr[31:0] = debug_halt_req_f ? (force_halt_ctr_f[31:0] + 32'b1) : (dbg_tlu_halted_f ? 32'b0 : force_halt_ctr_f[31:0]);
-
-   rvdffe #(32)  forcehaltctr_ff (.*, .en(mfdht[0]), .din(force_halt_ctr[31:0]), .dout(force_halt_ctr_f[31:0]));
-
-   assign force_halt = mfdht[0] & |(force_halt_ctr_f[31:0] & (32'hffffffff << mfdht[5:1]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIVT (External Interrupt Vector Table (R/W))
-   // [31:10]: Base address (R/W)
-   // [9:0]  : Reserved, reads 0x0
-   localparam MEIVT         = 12'hbc8;
-
-   assign wr_meivt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIVT);
-
-   rvdffe #(22)  meivt_ff (.*, .en(wr_meivt_r), .din(dec_csr_wrdata_r[31:10]), .dout(meivt[31:10]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIHAP (External Interrupt Handler Access Pointer (R))
-   // [31:10]: Base address (R/W)
-   // [9:2]  : ClaimID (R)
-   // [1:0]  : Reserved, 0x0
-   localparam MEIHAP        = 12'hfc8;
-
-   assign wr_meihap_r = wr_meicpct_r;
-
-   rvdffe #(8)  meihap_ff (.*, .en(wr_meihap_r), .din(pic_claimid[7:0]), .dout(meihap[9:2]));
-
-   assign dec_tlu_meihap[31:2] = {meivt[31:10], meihap[9:2]};
-   // ----------------------------------------------------------------------
-   // MEICURPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : CURRPRI - Priority level of current interrupt service routine (R/W)
-   localparam MEICURPL      = 12'hbcc;
-
-   assign wr_meicurpl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICURPL);
-   assign meicurpl_ns[3:0] = wr_meicurpl_r ? dec_csr_wrdata_r[3:0] : meicurpl[3:0];
-
-   rvdff #(4)  meicurpl_ff (.*, .clk(csr_wr_clk), .din(meicurpl_ns[3:0]), .dout(meicurpl[3:0]));
-
-   // PIC needs this reg
-   assign dec_tlu_meicurpl[3:0] = meicurpl[3:0];
-
-
-   // ----------------------------------------------------------------------
-   // MEICIDPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : External Interrupt Claim ID's Priority Level Register
-   localparam MEICIDPL      = 12'hbcb;
-
-   assign wr_meicidpl_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICIDPL)) | take_ext_int_start;
-
-   assign meicidpl_ns[3:0] = wr_meicpct_r ? pic_pl[3:0] : (wr_meicidpl_r ? dec_csr_wrdata_r[3:0] : meicidpl[3:0]);
-
-
-   // ----------------------------------------------------------------------
-   // MEICPCT (Capture CLAIMID in MEIHAP and PL in MEICIDPL
-   // [31:1] : Reserved (read 0x0)
-   // [0]    : Capture (W1, Read 0)
-   localparam MEICPCT       = 12'hbca;
-
-   assign wr_meicpct_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICPCT)) | take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MEIPT (External Interrupt Priority Threshold)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : PRITHRESH
-   localparam MEIPT         = 12'hbc9;
-
-   assign wr_meipt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIPT);
-   assign meipt_ns[3:0] = wr_meipt_r ? dec_csr_wrdata_r[3:0] : meipt[3:0];
-
-   rvdff #(4)  meipt_ff (.*, .clk(csr_wr_clk), .din(meipt_ns[3:0]), .dout(meipt[3:0]));
-
-   // to PIC
-   assign dec_tlu_meipt[3:0] = meipt[3:0];
-   // ----------------------------------------------------------------------
-   // DCSR (R/W) (Only accessible in debug mode)
-   // [31:28] : xdebugver (hard coded to 0x4) RO
-   // [27:16] : 0x0, reserved
-   // [15]    : ebreakm
-   // [14]    : 0x0, reserved
-   // [13]    : ebreaks (0x0 for this core)
-   // [12]    : ebreaku (0x0 for this core)
-   // [11]    : stepie
-   // [10]    : stopcount
-   // [9]     : 0x0 //stoptime
-   // [8:6]   : cause (RO)
-   // [5:4]   : 0x0, reserved
-   // [3]     : nmip
-   // [2]     : step
-   // [1:0]   : prv (0x3 for this core)
-   //
-   localparam DCSR          = 12'h7b0;
-
-   // RV has clarified that 'priority 4' in the spec means top priority.
-   // 4. single step. 3. Debugger request. 2. Ebreak. 1. Trigger.
-
-   // RV debug spec indicates a cause priority change for trigger hits during single step.
-   assign trigger_hit_for_dscr_cause_r_d1 = trigger_hit_dmode_r_d1 | (trigger_hit_r_d1 & dcsr_single_step_done_f);
-
-   assign dcsr_cause[8:6] = ( ({3{dcsr_single_step_done_f & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1 & ~debug_halt_req}} & 3'b100) |
-                              ({3{debug_halt_req & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b011) |
-                              ({3{ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b001) |
-                              ({3{trigger_hit_for_dscr_cause_r_d1}} & 3'b010));
-
-   assign wr_dcsr_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DCSR);
-
-
-
-  // Multiple halt enter requests can happen before we are halted.
-  // We have to continue to upgrade based on dcsr_cause priority but we can't downgrade.
-   assign dcsr_cause_upgradeable = internal_dbg_halt_mode_f & (dcsr[8:6] == 3'b011);
-   assign enter_debug_halt_req_le = enter_debug_halt_req & (~dbg_tlu_halted | dcsr_cause_upgradeable);
-
-   assign nmi_in_debug_mode = nmi_int_detected_f & internal_dbg_halt_mode_f;
-   assign dcsr_ns[15:2] = enter_debug_halt_req_le ? {dcsr[15:9], dcsr_cause[8:6], dcsr[5:2]} :
-                          (wr_dcsr_r ? {dec_csr_wrdata_r[15], 3'b0, dec_csr_wrdata_r[11:10], 1'b0, dcsr[8:6], 2'b00, nmi_in_debug_mode | dcsr[3], dec_csr_wrdata_r[2]} :
-                           {dcsr[15:4], nmi_in_debug_mode, dcsr[2]});
-
-   rvdffe #(14)  dcsr_ff (.*, .clk(free_l2clk), .en(enter_debug_halt_req_le | wr_dcsr_r | internal_dbg_halt_mode | take_nmi), .din(dcsr_ns[15:2]), .dout(dcsr[15:2]));
-
-   // ----------------------------------------------------------------------
-   // DPC (R/W) (Only accessible in debug mode)
-   // [31:0] : Debug PC
-   localparam DPC           = 12'h7b1;
-
-   assign wr_dpc_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DPC);
-   assign dpc_capture_npc = dbg_tlu_halted & ~dbg_tlu_halted_f & ~request_debug_mode_done;
-   assign dpc_capture_pc = request_debug_mode_r;
-
-   assign dpc_ns[31:1] = ( ({31{~dpc_capture_pc & ~dpc_capture_npc & wr_dpc_r}} & dec_csr_wrdata_r[31:1]) |
-                           ({31{dpc_capture_pc}} & pc_r[31:1]) |
-                           ({31{~dpc_capture_pc & dpc_capture_npc}} & npc_r[31:1]) );
-
-   rvdffe #(31)  dpc_ff (.*, .en(wr_dpc_r | dpc_capture_pc | dpc_capture_npc), .din(dpc_ns[31:1]), .dout(dpc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // DICAWICS (R/W) (Only accessible in debug mode)
-   // [31:25] : Reserved
-   // [24]    : Array select, 0 is data, 1 is tag
-   // [23:22] : Reserved
-   // [21:20] : Way select
-   // [19:17] : Reserved
-   // [16:3]  : Index
-   // [2:0]   : Reserved
-   localparam DICAWICS      = 12'h7c8;
-
-   assign dicawics_ns[16:0] = {dec_csr_wrdata_r[24], dec_csr_wrdata_r[21:20], dec_csr_wrdata_r[16:3]};
-   assign wr_dicawics_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAWICS);
-
-   rvdffe #(17)  dicawics_ff (.*, .en(wr_dicawics_r), .din(dicawics_ns[16:0]), .dout(dicawics[16:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0 (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [31:0]  : inst data
-   //
-   // If dicawics[array] is 1
-   // [31:16] : Tag
-   // [15:7]  : Reserved
-   // [6:4]   : LRU
-   // [3:1]   : Reserved
-   // [0]     : Valid
-   localparam DICAD0        = 12'h7c9;
-
-   assign dicad0_ns[31:0] = wr_dicad0_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[31:0];
-
-   assign wr_dicad0_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0);
-
-   rvdffe #(32)  dicad0_ff (.*, .en(wr_dicad0_r | ifu_ic_debug_rd_data_valid), .din(dicad0_ns[31:0]), .dout(dicad0[31:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0H (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [63:32]  : inst data
-   //
-   localparam DICAD0H       = 12'h7cc;
-
-   assign dicad0h_ns[31:0] = wr_dicad0h_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[63:32];
-
-   assign wr_dicad0h_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0H);
-
-   rvdffe #(32)  dicad0h_ff (.*, .en(wr_dicad0h_r | ifu_ic_debug_rd_data_valid), .din(dicad0h_ns[31:0]), .dout(dicad0h[31:0]));
-
-
-if (pt.ICACHE_ECC == 1) begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [6:0]     : ECC
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[6:0] = wr_dicad1_r ? dec_csr_wrdata_r[6:0] : ifu_ic_debug_rd_data[70:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffe #(.WIDTH(7), .OVERRIDE(1))  dicad1_ff (.*, .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[6:0]), .dout(dicad1_raw[6:0]));
-
-   assign dicad1[31:0] = {25'b0, dicad1_raw[6:0]};
-
-end
-else begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [3:0]     : Parity
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[3:0] = wr_dicad1_r ? dec_csr_wrdata_r[3:0] : ifu_ic_debug_rd_data[67:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffs #(4)  dicad1_ff (.*, .clk(free_clk), .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[3:0]), .dout(dicad1_raw[3:0]));
-
-   assign dicad1[31:0] = {28'b0, dicad1_raw[3:0]};
-end
-   // ----------------------------------------------------------------------
-   // DICAGO (R/W) (Only accessible in debug mode)
-   // [0]     : Go
-   localparam DICAGO        = 12'h7cb;
-
-if (pt.ICACHE_ECC == 1)
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {      dicad1[6:0], dicad0h[31:0], dicad0[31:0]};
-else
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {3'b0, dicad1[3:0], dicad0h[31:0], dicad0[31:0]};
-
-
-   assign dec_tlu_ic_diag_pkt.icache_dicawics[16:0] = dicawics[16:0];
-
-   assign icache_rd_valid = allow_dbg_halt_csr_write & dec_csr_any_unq_d & dec_i0_decode_d & ~dec_csr_wen_unq_d & (dec_csr_rdaddr_d[11:0] == DICAGO);
-   assign icache_wr_valid = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAGO);
-
-
-   assign dec_tlu_ic_diag_pkt.icache_rd_valid = icache_rd_valid_f;
-   assign dec_tlu_ic_diag_pkt.icache_wr_valid = icache_wr_valid_f;
-
-   // ----------------------------------------------------------------------
-   // MTSEL (R/W)
-   // [1:0] : Trigger select : 00, 01, 10 are data/address triggers. 11 is inst count
-   localparam MTSEL         = 12'h7a0;
-
-   assign wr_mtsel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTSEL);
-   assign mtsel_ns[1:0] = wr_mtsel_r ? {dec_csr_wrdata_r[1:0]} : mtsel[1:0];
-
-   rvdff #(2)  mtsel_ff (.*, .clk(csr_wr_clk), .din(mtsel_ns[1:0]), .dout(mtsel[1:0]));
-
-   // ----------------------------------------------------------------------
-   // MTDATA1 (R/W)
-   // [31:0] : Trigger Data 1
-   localparam MTDATA1       = 12'h7a1;
-
-   // for triggers 0, 1, 2 and 3 aka Match Control
-   // [31:28] : type, hard coded to 0x2
-   // [27]    : dmode
-   // [26:21] : hard coded to 0x1f
-   // [20]    : hit
-   // [19]    : select (0 - address, 1 - data)
-   // [18]    : timing, always 'before', reads 0x0
-   // [17:12] : action, bits  [17:13] not implemented and reads 0x0
-   // [11]    : chain
-   // [10:7]  : match, bits [10:8] not implemented and reads 0x0
-   // [6]     : M
-   // [5:3]   : not implemented, reads 0x0
-   // [2]     : execute
-   // [1]     : store
-   // [0]     : load
-   //
-   // decoder ring
-   // [27]    : => 9
-   // [20]    : => 8
-   // [19]    : => 7
-   // [12]    : => 6
-   // [11]    : => 5
-   // [7]     : => 4
-   // [6]     : => 3
-   // [2]     : => 2
-   // [1]     : => 1
-   // [0]     : => 0
-
-
-   // don't allow setting load-data.
-   assign tdata_load = dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[19];
-   // don't allow setting execute-data.
-   assign tdata_opcode = dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[19];
-   // don't allow clearing DMODE and action=1
-   assign tdata_action = (dec_csr_wrdata_r[27] & dbg_tlu_halted_f) & dec_csr_wrdata_r[12];
-
-   // Chain bit has conditions: WARL for triggers without chains. Force to zero if dmode is 0 but next trigger dmode is 1.
-   assign tdata_chain = mtsel[0] ? 1'b0 : // triggers 1 and 3 chain bit is always zero
-                        mtsel[1] ?  dec_csr_wrdata_r[11] & ~(mtdata1_t3[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]) : // trigger 2
-                                    dec_csr_wrdata_r[11] & ~(mtdata1_t1[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]);  // trigger 0
-
-   // Kill mtdata1 write if dmode=1 but prior trigger has dmode=0/chain=1. Only applies to T1 and T3
-   assign tdata_kill_write = mtsel[1] ? dec_csr_wrdata_r[27] & (~mtdata1_t2[MTDATA1_DMODE] & mtdata1_t2[MTDATA1_CHAIN]) : // trigger 3
-                                        dec_csr_wrdata_r[27] & (~mtdata1_t0[MTDATA1_DMODE] & mtdata1_t0[MTDATA1_CHAIN]) ; // trigger 1
-
-
-   assign tdata_wrdata_r[9:0]  = {dec_csr_wrdata_r[27] & dbg_tlu_halted_f,
-                                   dec_csr_wrdata_r[20:19],
-                                   tdata_action,
-                                   tdata_chain,
-                                   dec_csr_wrdata_r[7:6],
-                                   tdata_opcode,
-                                   dec_csr_wrdata_r[1],
-                                   tdata_load};
-
-   // If the DMODE bit is set, tdata1 can only be updated in debug_mode
-   assign wr_mtdata1_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b0) & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t0_ns[9:0] = wr_mtdata1_t0_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t0[9], update_hit_bit_r[0] | mtdata1_t0[8], mtdata1_t0[7:0]};
-
-   assign wr_mtdata1_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t1_ns[9:0] = wr_mtdata1_t1_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t1[9], update_hit_bit_r[1] | mtdata1_t1[8], mtdata1_t1[7:0]};
-
-   assign wr_mtdata1_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t2_ns[9:0] = wr_mtdata1_t2_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t2[9], update_hit_bit_r[2] | mtdata1_t2[8], mtdata1_t2[7:0]};
-
-   assign wr_mtdata1_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t3_ns[9:0] = wr_mtdata1_t3_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t3[9], update_hit_bit_r[3] | mtdata1_t3[8], mtdata1_t3[7:0]};
-
-
-   rvdffe #(10)  mtdata1_t0_ff (.*, .en(trigger_enabled[0] | wr_mtdata1_t0_r), .din(mtdata1_t0_ns[9:0]), .dout(mtdata1_t0[9:0]));
-   rvdffe #(10)  mtdata1_t1_ff (.*, .en(trigger_enabled[1] | wr_mtdata1_t1_r), .din(mtdata1_t1_ns[9:0]), .dout(mtdata1_t1[9:0]));
-   rvdffe #(10)  mtdata1_t2_ff (.*, .en(trigger_enabled[2] | wr_mtdata1_t2_r), .din(mtdata1_t2_ns[9:0]), .dout(mtdata1_t2[9:0]));
-   rvdffe #(10)  mtdata1_t3_ff (.*, .en(trigger_enabled[3] | wr_mtdata1_t3_r), .din(mtdata1_t3_ns[9:0]), .dout(mtdata1_t3[9:0]));
-
-   assign mtdata1_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & {4'h2, mtdata1_t0[9], 6'b011111, mtdata1_t0[8:7], 6'b0, mtdata1_t0[6:5], 3'b0, mtdata1_t0[4:3], 3'b0, mtdata1_t0[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & {4'h2, mtdata1_t1[9], 6'b011111, mtdata1_t1[8:7], 6'b0, mtdata1_t1[6:5], 3'b0, mtdata1_t1[4:3], 3'b0, mtdata1_t1[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & {4'h2, mtdata1_t2[9], 6'b011111, mtdata1_t2[8:7], 6'b0, mtdata1_t2[6:5], 3'b0, mtdata1_t2[4:3], 3'b0, mtdata1_t2[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & {4'h2, mtdata1_t3[9], 6'b011111, mtdata1_t3[8:7], 6'b0, mtdata1_t3[6:5], 3'b0, mtdata1_t3[4:3], 3'b0, mtdata1_t3[2:0]}));
-
-   assign trigger_pkt_any[0].select = mtdata1_t0[MTDATA1_SEL];
-   assign trigger_pkt_any[0].match = mtdata1_t0[MTDATA1_MATCH];
-   assign trigger_pkt_any[0].store = mtdata1_t0[MTDATA1_ST];
-   assign trigger_pkt_any[0].load = mtdata1_t0[MTDATA1_LD];
-   assign trigger_pkt_any[0].execute = mtdata1_t0[MTDATA1_EXE];
-   assign trigger_pkt_any[0].m = mtdata1_t0[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[1].select = mtdata1_t1[MTDATA1_SEL];
-   assign trigger_pkt_any[1].match = mtdata1_t1[MTDATA1_MATCH];
-   assign trigger_pkt_any[1].store = mtdata1_t1[MTDATA1_ST];
-   assign trigger_pkt_any[1].load = mtdata1_t1[MTDATA1_LD];
-   assign trigger_pkt_any[1].execute = mtdata1_t1[MTDATA1_EXE];
-   assign trigger_pkt_any[1].m = mtdata1_t1[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[2].select = mtdata1_t2[MTDATA1_SEL];
-   assign trigger_pkt_any[2].match = mtdata1_t2[MTDATA1_MATCH];
-   assign trigger_pkt_any[2].store = mtdata1_t2[MTDATA1_ST];
-   assign trigger_pkt_any[2].load = mtdata1_t2[MTDATA1_LD];
-   assign trigger_pkt_any[2].execute = mtdata1_t2[MTDATA1_EXE];
-   assign trigger_pkt_any[2].m = mtdata1_t2[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[3].select = mtdata1_t3[MTDATA1_SEL];
-   assign trigger_pkt_any[3].match = mtdata1_t3[MTDATA1_MATCH];
-   assign trigger_pkt_any[3].store = mtdata1_t3[MTDATA1_ST];
-   assign trigger_pkt_any[3].load = mtdata1_t3[MTDATA1_LD];
-   assign trigger_pkt_any[3].execute = mtdata1_t3[MTDATA1_EXE];
-   assign trigger_pkt_any[3].m = mtdata1_t3[MTDATA1_M_ENABLED];
-
-
-
-
-
-   // ----------------------------------------------------------------------
-   // MTDATA2 (R/W)
-   // [31:0] : Trigger Data 2
-   localparam MTDATA2       = 12'h7a2;
-
-   // If the DMODE bit is set, tdata2 can only be updated in debug_mode
-   assign wr_mtdata2_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b0)  & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f);
-
-   rvdffe #(32)  mtdata2_t0_ff (.*, .en(wr_mtdata2_t0_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t0[31:0]));
-   rvdffe #(32)  mtdata2_t1_ff (.*, .en(wr_mtdata2_t1_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t1[31:0]));
-   rvdffe #(32)  mtdata2_t2_ff (.*, .en(wr_mtdata2_t2_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t2[31:0]));
-   rvdffe #(32)  mtdata2_t3_ff (.*, .en(wr_mtdata2_t3_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t3[31:0]));
-
-   assign mtdata2_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & mtdata2_t0[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & mtdata2_t1[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & mtdata2_t2[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & mtdata2_t3[31:0]));
-
-   assign trigger_pkt_any[0].tdata2[31:0] = mtdata2_t0[31:0];
-   assign trigger_pkt_any[1].tdata2[31:0] = mtdata2_t1[31:0];
-   assign trigger_pkt_any[2].tdata2[31:0] = mtdata2_t2[31:0];
-   assign trigger_pkt_any[3].tdata2[31:0] = mtdata2_t3[31:0];
-
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section starts
-   //----------------------------------------------------------------------
-   localparam MHPME_NOEVENT             = 10'd0;
-   localparam MHPME_CLK_ACTIVE          = 10'd1; // OOP - out of pipe
-   localparam MHPME_ICACHE_HIT          = 10'd2; // OOP
-   localparam MHPME_ICACHE_MISS         = 10'd3; // OOP
-   localparam MHPME_INST_COMMIT         = 10'd4;
-   localparam MHPME_INST_COMMIT_16B     = 10'd5;
-   localparam MHPME_INST_COMMIT_32B     = 10'd6;
-   localparam MHPME_INST_ALIGNED        = 10'd7; // OOP
-   localparam MHPME_INST_DECODED        = 10'd8; // OOP
-   localparam MHPME_INST_MUL            = 10'd9;
-   localparam MHPME_INST_DIV            = 10'd10;
-   localparam MHPME_INST_LOAD           = 10'd11;
-   localparam MHPME_INST_STORE          = 10'd12;
-   localparam MHPME_INST_MALOAD         = 10'd13;
-   localparam MHPME_INST_MASTORE        = 10'd14;
-   localparam MHPME_INST_ALU            = 10'd15;
-   localparam MHPME_INST_CSRREAD        = 10'd16;
-   localparam MHPME_INST_CSRRW          = 10'd17;
-   localparam MHPME_INST_CSRWRITE       = 10'd18;
-   localparam MHPME_INST_EBREAK         = 10'd19;
-   localparam MHPME_INST_ECALL          = 10'd20;
-   localparam MHPME_INST_FENCE          = 10'd21;
-   localparam MHPME_INST_FENCEI         = 10'd22;
-   localparam MHPME_INST_MRET           = 10'd23;
-   localparam MHPME_INST_BRANCH         = 10'd24;
-   localparam MHPME_BRANCH_MP           = 10'd25;
-   localparam MHPME_BRANCH_TAKEN        = 10'd26;
-   localparam MHPME_BRANCH_NOTP         = 10'd27;
-   localparam MHPME_FETCH_STALL         = 10'd28; // OOP
-   localparam MHPME_DECODE_STALL        = 10'd30; // OOP
-   localparam MHPME_POSTSYNC_STALL      = 10'd31; // OOP
-   localparam MHPME_PRESYNC_STALL       = 10'd32; // OOP
-   localparam MHPME_LSU_SB_WB_STALL     = 10'd34; // OOP
-   localparam MHPME_DMA_DCCM_STALL      = 10'd35; // OOP
-   localparam MHPME_DMA_ICCM_STALL      = 10'd36; // OOP
-   localparam MHPME_EXC_TAKEN           = 10'd37;
-   localparam MHPME_TIMER_INT_TAKEN     = 10'd38;
-   localparam MHPME_EXT_INT_TAKEN       = 10'd39;
-   localparam MHPME_FLUSH_LOWER         = 10'd40;
-   localparam MHPME_BR_ERROR            = 10'd41;
-   localparam MHPME_IBUS_TRANS          = 10'd42; // OOP
-   localparam MHPME_DBUS_TRANS          = 10'd43; // OOP
-   localparam MHPME_DBUS_MA_TRANS       = 10'd44; // OOP
-   localparam MHPME_IBUS_ERROR          = 10'd45; // OOP
-   localparam MHPME_DBUS_ERROR          = 10'd46; // OOP
-   localparam MHPME_IBUS_STALL          = 10'd47; // OOP
-   localparam MHPME_DBUS_STALL          = 10'd48; // OOP
-   localparam MHPME_INT_DISABLED        = 10'd49; // OOP
-   localparam MHPME_INT_STALLED         = 10'd50; // OOP
-   localparam MHPME_INST_BITMANIP       = 10'd54;
-   localparam MHPME_DBUS_LOAD           = 10'd55;
-   localparam MHPME_DBUS_STORE          = 10'd56;
-   // Counts even during sleep state
-   localparam MHPME_SLEEP_CYC           = 10'd512; // OOP
-   localparam MHPME_DMA_READ_ALL        = 10'd513; // OOP
-   localparam MHPME_DMA_WRITE_ALL       = 10'd514; // OOP
-   localparam MHPME_DMA_READ_DCCM       = 10'd515; // OOP
-   localparam MHPME_DMA_WRITE_DCCM      = 10'd516; // OOP
-
-   // Pack the event selects into a vector for genvar
-   assign mhpme_vec[0][9:0] = mhpme3[9:0];
-   assign mhpme_vec[1][9:0] = mhpme4[9:0];
-   assign mhpme_vec[2][9:0] = mhpme5[9:0];
-   assign mhpme_vec[3][9:0] = mhpme6[9:0];
-
-   // only consider committed itypes
-   //logic [3:0] pmu_i0_itype_qual;
-   assign pmu_i0_itype_qual[3:0] = dec_tlu_packet_r.pmu_i0_itype[3:0] & {4{tlu_i0_commit_cmt}};
-
-   // Generate the muxed incs for all counters based on event type
-   for (genvar i=0 ; i < 4; i++) begin
-      assign mhpmc_inc_r[i] =  {{~mcountinhibit[i+3]}} &
-           (
-             ({1{(mhpme_vec[i][9:0] == MHPME_CLK_ACTIVE      )}} & 1'b1) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_HIT      )}} & {ifu_pmu_ic_hit}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_MISS     )}} & {ifu_pmu_ic_miss}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT     )}} & {tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_16B )}} & {tlu_i0_commit_cmt & ~exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_32B )}} & {tlu_i0_commit_cmt &  exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALIGNED    )}} & ifu_pmu_instr_aligned)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DECODED    )}} & dec_pmu_instr_decoded)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & {dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MUL        )}} & {(pmu_i0_itype_qual == MUL)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DIV        )}} & {dec_tlu_packet_r.pmu_divide  & tlu_i0_commit_cmt & ~illegal_r})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_LOAD       )}} & {(pmu_i0_itype_qual == LOAD)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_STORE      )}} & {(pmu_i0_itype_qual == STORE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MALOAD     )}} & {(pmu_i0_itype_qual == LOAD)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MASTORE    )}} & {(pmu_i0_itype_qual == STORE)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALU        )}} & {(pmu_i0_itype_qual == ALU)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRREAD    )}} & {(pmu_i0_itype_qual == CSRREAD)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRWRITE   )}} & {(pmu_i0_itype_qual == CSRWRITE)})|
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRRW      )}} & {(pmu_i0_itype_qual == CSRRW)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_EBREAK     )}} & {(pmu_i0_itype_qual == EBREAK)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ECALL      )}} & {(pmu_i0_itype_qual == ECALL)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCE      )}} & {(pmu_i0_itype_qual == FENCE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCEI     )}} & {(pmu_i0_itype_qual == FENCEI)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MRET       )}} & {(pmu_i0_itype_qual == MRET)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BRANCH     )}} & {
-                                                                     ((pmu_i0_itype_qual == CONDBR) | (pmu_i0_itype_qual == JAL))})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_MP       )}} & {exu_pmu_i0_br_misp & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_TAKEN    )}} & {exu_pmu_i0_br_ataken & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_NOTP     )}} & {dec_tlu_packet_r.pmu_i0_br_unpred & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FETCH_STALL     )}} & { ifu_pmu_fetch_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & { dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_POSTSYNC_STALL  )}} & {dec_pmu_postsync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_PRESYNC_STALL   )}} & {dec_pmu_presync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_LSU_SB_WB_STALL )}} & { lsu_store_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_DCCM_STALL  )}} & { dma_dccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_ICCM_STALL  )}} & { dma_iccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXC_TAKEN       )}} & { (i0_exception_valid_r | i0_trigger_hit_r | lsu_exc_valid_r)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_TIMER_INT_TAKEN )}} & { take_timer_int | take_int_timer0_int | take_int_timer1_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXT_INT_TAKEN   )}} & { take_ext_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FLUSH_LOWER     )}} & { tlu_flush_lower_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BR_ERROR        )}} & {(dec_tlu_br0_error_r | dec_tlu_br0_start_error_r) & rfpc_i0_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_TRANS      )}} & {ifu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_TRANS      )}} & {lsu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_MA_TRANS   )}} & {lsu_pmu_bus_misaligned}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_ERROR      )}} & {ifu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_ERROR      )}} & {lsu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_STALL      )}} & {ifu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STALL      )}} & {lsu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_DISABLED    )}} & {~mstatus[MSTATUS_MIE]}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_STALLED     )}} & {~mstatus[MSTATUS_MIE] & |(mip[5:0] & mie[5:0])}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BITMANIP     )}} & {(pmu_i0_itype_qual == BITMANIPU)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_LOAD       )}} & {tlu_i0_commit_cmt & lsu_pmu_load_external_r & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STORE      )}} & {tlu_i0_commit_cmt & lsu_pmu_store_external_r & ~illegal_r}) |
-             // These count even during sleep
-             ({1{(mhpme_vec[i][9:0] == MHPME_SLEEP_CYC       )}} & {dec_tlu_pmu_fw_halted}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_ALL    )}} & {dma_pmu_any_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_ALL   )}} & {dma_pmu_any_write}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_DCCM   )}} & {dma_pmu_dccm_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_DCCM  )}} & {dma_pmu_dccm_write})
-             );
-   end
-
-
-   if(pt.FAST_INTERRUPT_REDIRECT)
-   rvdffie #(31)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   take_ext_int_start,    take_ext_int_start_d1, take_ext_int_start_d2, ext_int_freeze,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    take_ext_int_start_d1, take_ext_int_start_d2, take_ext_int_start_d3, ext_int_freeze_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   else
-   rvdffie #(27)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   assign perfcnt_halted = ((dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted);
-   assign perfcnt_during_sleep[3:0] = {4{~(dec_tlu_dbg_halted & dcsr[DCSR_STOPC])}} & {mhpme_vec[3][9],mhpme_vec[2][9],mhpme_vec[1][9],mhpme_vec[0][9]};
-
-   assign dec_tlu_perfcnt0 = mhpmc_inc_r_d1[0] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[0]);
-   assign dec_tlu_perfcnt1 = mhpmc_inc_r_d1[1] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[1]);
-   assign dec_tlu_perfcnt2 = mhpmc_inc_r_d1[2] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[2]);
-   assign dec_tlu_perfcnt3 = mhpmc_inc_r_d1[3] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[3]);
-
-   // ----------------------------------------------------------------------
-   // MHPMC3H(RW), MHPMC3(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 3
-   localparam MHPMC3        = 12'hB03;
-   localparam MHPMC3H       = 12'hB83;
-
-   assign mhpmc3_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3);
-   assign mhpmc3_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[0]) & (|(mhpmc_inc_r[0]));
-   assign mhpmc3_wr_en  = mhpmc3_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3_incr[63:0] = {mhpmc3h[31:0],mhpmc3[31:0]} + {63'b0, 1'b1};
-   assign mhpmc3_ns[31:0] = mhpmc3_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[31:0];
-   rvdffe #(32)  mhpmc3_ff (.*, .clk(free_l2clk), .en(mhpmc3_wr_en), .din(mhpmc3_ns[31:0]), .dout(mhpmc3[31:0]));
-
-   assign mhpmc3h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3H);
-   assign mhpmc3h_wr_en  = mhpmc3h_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3h_ns[31:0] = mhpmc3h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[63:32];
-   rvdffe #(32)  mhpmc3h_ff (.*, .clk(free_l2clk), .en(mhpmc3h_wr_en), .din(mhpmc3h_ns[31:0]), .dout(mhpmc3h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC4H(RW), MHPMC4(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 4
-   localparam MHPMC4        = 12'hB04;
-   localparam MHPMC4H       = 12'hB84;
-
-   assign mhpmc4_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4);
-   assign mhpmc4_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[1]) & (|(mhpmc_inc_r[1]));
-   assign mhpmc4_wr_en  = mhpmc4_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4_incr[63:0] = {mhpmc4h[31:0],mhpmc4[31:0]} + {63'b0,1'b1};
-   assign mhpmc4_ns[31:0] = mhpmc4_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[31:0];
-   rvdffe #(32)  mhpmc4_ff (.*, .clk(free_l2clk), .en(mhpmc4_wr_en), .din(mhpmc4_ns[31:0]), .dout(mhpmc4[31:0]));
-
-   assign mhpmc4h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4H);
-   assign mhpmc4h_wr_en  = mhpmc4h_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4h_ns[31:0] = mhpmc4h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[63:32];
-   rvdffe #(32)  mhpmc4h_ff (.*, .clk(free_l2clk), .en(mhpmc4h_wr_en), .din(mhpmc4h_ns[31:0]), .dout(mhpmc4h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC5H(RW), MHPMC5(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 5
-   localparam MHPMC5        = 12'hB05;
-   localparam MHPMC5H       = 12'hB85;
-
-   assign mhpmc5_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5);
-   assign mhpmc5_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[2]) & (|(mhpmc_inc_r[2]));
-   assign mhpmc5_wr_en  = mhpmc5_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5_incr[63:0] = {mhpmc5h[31:0],mhpmc5[31:0]} + {63'b0,1'b1};
-   assign mhpmc5_ns[31:0] = mhpmc5_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[31:0];
-   rvdffe #(32)  mhpmc5_ff (.*, .clk(free_l2clk), .en(mhpmc5_wr_en), .din(mhpmc5_ns[31:0]), .dout(mhpmc5[31:0]));
-
-   assign mhpmc5h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5H);
-   assign mhpmc5h_wr_en  = mhpmc5h_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5h_ns[31:0] = mhpmc5h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[63:32];
-   rvdffe #(32)  mhpmc5h_ff (.*, .clk(free_l2clk), .en(mhpmc5h_wr_en), .din(mhpmc5h_ns[31:0]), .dout(mhpmc5h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC6H(RW), MHPMC6(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 6
-   localparam MHPMC6        = 12'hB06;
-   localparam MHPMC6H       = 12'hB86;
-
-   assign mhpmc6_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6);
-   assign mhpmc6_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[3]) & (|(mhpmc_inc_r[3]));
-   assign mhpmc6_wr_en  = mhpmc6_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6_incr[63:0] = {mhpmc6h[31:0],mhpmc6[31:0]} + {63'b0,1'b1};
-   assign mhpmc6_ns[31:0] = mhpmc6_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[31:0];
-   rvdffe #(32)  mhpmc6_ff (.*, .clk(free_l2clk), .en(mhpmc6_wr_en), .din(mhpmc6_ns[31:0]), .dout(mhpmc6[31:0]));
-
-   assign mhpmc6h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6H);
-   assign mhpmc6h_wr_en  = mhpmc6h_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6h_ns[31:0] = mhpmc6h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[63:32];
-   rvdffe #(32)  mhpmc6h_ff (.*, .clk(free_l2clk), .en(mhpmc6h_wr_en), .din(mhpmc6h_ns[31:0]), .dout(mhpmc6h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPME3(RW)
-   // [9:0] : Hardware Performance Monitor Event 3
-   localparam MHPME3        = 12'h323;
-
-   // we only have events 0-56 with holes, 512-516, HPME* are WARL so zero otherwise.
-   assign zero_event_r = ( (dec_csr_wrdata_r[9:0] > 10'd516) |
-                           (|dec_csr_wrdata_r[31:10]) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd512) & (dec_csr_wrdata_r[9:0] > 10'd56)) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd54) & (dec_csr_wrdata_r[9:0] > 10'd50)) |
-                           (dec_csr_wrdata_r[9:0] == 10'd29) |
-                           (dec_csr_wrdata_r[9:0] == 10'd33)
-                           );
-
-   assign event_r[9:0] = zero_event_r ? '0 : dec_csr_wrdata_r[9:0];
-
-   assign wr_mhpme3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME3);
-   rvdffe #(10)  mhpme3_ff (.*, .en(wr_mhpme3_r), .din(event_r[9:0]), .dout(mhpme3[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME4(RW)
-   // [9:0] : Hardware Performance Monitor Event 4
-   localparam MHPME4        = 12'h324;
-
-   assign wr_mhpme4_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME4);
-   rvdffe #(10)  mhpme4_ff (.*, .en(wr_mhpme4_r), .din(event_r[9:0]), .dout(mhpme4[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME5(RW)
-   // [9:0] : Hardware Performance Monitor Event 5
-   localparam MHPME5        = 12'h325;
-
-   assign wr_mhpme5_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME5);
-   rvdffe #(10)  mhpme5_ff (.*, .en(wr_mhpme5_r), .din(event_r[9:0]), .dout(mhpme5[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME6(RW)
-   // [9:0] : Hardware Performance Monitor Event 6
-   localparam MHPME6        = 12'h326;
-
-   assign wr_mhpme6_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME6);
-   rvdffe #(10)  mhpme6_ff (.*, .en(wr_mhpme6_r), .din(event_r[9:0]), .dout(mhpme6[9:0]));
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section ends
-   //----------------------------------------------------------------------
-   // ----------------------------------------------------------------------
-
-   // MCOUNTINHIBIT(RW)
-   // [31:7] : Reserved, read 0x0
-   // [6]    : HPM6 disable
-   // [5]    : HPM5 disable
-   // [4]    : HPM4 disable
-   // [3]    : HPM3 disable
-   // [2]    : MINSTRET disable
-   // [1]    : reserved, read 0x0
-   // [0]    : MCYCLE disable
-
-   localparam MCOUNTINHIBIT             = 12'h320;
-
-   assign wr_mcountinhibit_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCOUNTINHIBIT);
-   rvdffs #(6)  mcountinhibit_ff (.*, .clk(csr_wr_clk), .en(wr_mcountinhibit_r), .din({dec_csr_wrdata_r[6:2], dec_csr_wrdata_r[0]}), .dout({mcountinhibit[6:2], mcountinhibit[0]}));
-   assign mcountinhibit[1] = 1'b0;
-
-   //--------------------------------------------------------------------------------
-   // trace
-   //--------------------------------------------------------------------------------
-   logic [4:0] dec_tlu_exc_cause_wb1_raw, dec_tlu_exc_cause_wb2;
-   logic       dec_tlu_int_valid_wb1_raw, dec_tlu_int_valid_wb2;
-
-   assign {dec_tlu_i0_valid_wb1,
-           dec_tlu_i0_exc_valid_wb1,
-           dec_tlu_exc_cause_wb1_raw[4:0],
-           dec_tlu_int_valid_wb1_raw}  =   {8{~dec_tlu_trace_disable}} & {i0_valid_wb,
-                                                                          i0_exception_valid_r_d1 | lsu_i0_exc_r_d1 | (trigger_hit_r_d1 & ~trigger_hit_dmode_r_d1),
-                                                                          exc_cause_wb[4:0],
-                                                                          interrupt_valid_r_d1};
-
-
-
-  // skid buffer for ints, reduces trace port count by 1
-   rvdffie #(.WIDTH(6), .OVERRIDE(1))  traceskidff (.*,  .clk(clk),
-                        .din ({dec_tlu_exc_cause_wb1_raw[4:0],
-                               dec_tlu_int_valid_wb1_raw}),
-                        .dout({dec_tlu_exc_cause_wb2[4:0],
-                               dec_tlu_int_valid_wb2}));
-   //skid for ints
-   assign dec_tlu_exc_cause_wb1[4:0] =  dec_tlu_int_valid_wb2 ? dec_tlu_exc_cause_wb2[4:0] : dec_tlu_exc_cause_wb1_raw[4:0];
-   assign dec_tlu_int_valid_wb1 = dec_tlu_int_valid_wb2;
-
-   assign dec_tlu_mtval_wb1  = mtval[31:0];
-
-   // end trace
-   //--------------------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // CSR read mux
-   // ----------------------------------------------------------------------
-
-// file "csrdecode" is human readable file that has all of the CSR decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "csrdecode" except legal equation:
-
-// 1) coredecode -in csrdecode > corecsrdecode.e
-
-// 2) espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations
-
-// to generate the legal CSR equation below:
-
-// 1) coredecode -in csrdecode -legal > csrlegal.e
-
-// 2) espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-// coredecode -in csrdecode > corecsrdecode.e; espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations; coredecode -in csrdecode -legal > csrlegal.e; espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-
-assign csr_misa = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mvendorid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_marchid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mimpid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mhartid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mstatus = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtvec = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mip = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]);
-
-assign csr_mie = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcyclel = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]);
-
-assign csr_mcycleh = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_minstretl = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_minstreth = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscratch = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mepc = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mcause = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscause = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mtval = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mrac = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dmst = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_mdseac = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]);
-
-assign csr_meihap = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[3]);
-
-assign csr_meivt = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_meipt = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_meicurpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_meicidpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dcsr = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcgc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dpc = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtsel = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata1 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata2 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[1]);
-
-assign csr_mhpmc3 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6 = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc3h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme3 = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme4 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme5 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme6 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mcountinhibit = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl1 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mpmc = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign csr_meicpct = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_micect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_miccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mdccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdht = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdhs = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_dicawics = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_dicad0h = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dicad0 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dicad1 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_dicago = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign presync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign postsync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign legal = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]);
-
-
-
-assign dec_tlu_presync_d = presync & dec_csr_any_unq_d & ~dec_csr_wen_unq_d;
-assign dec_tlu_postsync_d = postsync & dec_csr_any_unq_d;
-
-   // allow individual configuration of these features
-assign conditionally_illegal = ((csr_mitcnt0 | csr_mitcnt1 | csr_mitb0 | csr_mitb1 | csr_mitctl0 | csr_mitctl1) & !pt.TIMER_LEGAL_EN);
-
-assign valid_csr = ( legal & (~(csr_dcsr | csr_dpc | csr_dmst | csr_dicawics | csr_dicad0 | csr_dicad0h | csr_dicad1 | csr_dicago) | dbg_tlu_halted_f)
-                     & ~fast_int_meicpct & ~conditionally_illegal);
-
-assign dec_csr_legal_d = ( dec_csr_any_unq_d &
-                           valid_csr &          // of a valid CSR
-                           ~(dec_csr_wen_unq_d & (csr_mvendorid | csr_marchid | csr_mimpid | csr_mhartid | csr_mdseac | csr_meihap)) // that's not a write to a RO CSR
-                           );
-   // CSR read mux
-assign dec_csr_rddata_d[31:0] = ( ({32{csr_misa}}      & 32'h40201104) |
-                                  ({32{csr_mvendorid}} & 32'h00000045) |
-                                  ({32{csr_marchid}}   & 32'h00000010) |
-                                  ({32{csr_mimpid}}    & 32'h3) |
-                                  ({32{csr_mhartid}}   & {core_id[31:4], 4'b0}) |
-                                  ({32{csr_mstatus}}   & {{15{1'b0}}, 2'b01, 2'b00, 2'b11, 3'b0, mstatus[1], 3'b0, mstatus[0], 3'b0}) |
-                                  ({32{csr_mtvec}}     & {mtvec[30:1], 1'b0, mtvec[0]}) |
-                                  ({32{csr_mip}}       & {1'b0, mip[5:3], 16'b0, mip[2], 3'b0, mip[1], 3'b0, mip[0], 3'b0}) |
-                                  ({32{csr_mie}}       & {1'b0, mie[5:3], 16'b0, mie[2], 3'b0, mie[1], 3'b0, mie[0], 3'b0}) |
-                                  ({32{csr_mcyclel}}   & mcyclel[31:0]) |
-                                  ({32{csr_mcycleh}}   & mcycleh_inc[31:0]) |
-                                  ({32{csr_minstretl}} & minstretl_read[31:0]) |
-                                  ({32{csr_minstreth}} & minstreth_read[31:0]) |
-                                  ({32{csr_mscratch}}  & mscratch[31:0]) |
-                                  ({32{csr_mepc}}      & {mepc[31:1], 1'b0}) |
-                                  ({32{csr_mcause}}    & mcause[31:0]) |
-                                  ({32{csr_mscause}}   & {28'b0, mscause[3:0]}) |
-                                  ({32{csr_mtval}}     & mtval[31:0]) |
-                                  ({32{csr_mrac}}      & mrac[31:0]) |
-                                  ({32{csr_mdseac}}    & mdseac[31:0]) |
-                                  ({32{csr_meivt}}     & {meivt[31:10], 10'b0}) |
-                                  ({32{csr_meihap}}    & {meivt[31:10], meihap[9:2], 2'b0}) |
-                                  ({32{csr_meicurpl}}  & {28'b0, meicurpl[3:0]}) |
-                                  ({32{csr_meicidpl}}  & {28'b0, meicidpl[3:0]}) |
-                                  ({32{csr_meipt}}     & {28'b0, meipt[3:0]}) |
-                                  ({32{csr_mcgc}}      & {22'b0, mcgc[9:0]}) |
-                                  ({32{csr_mfdc}}      & {13'b0, mfdc[18:0]}) |
-                                  ({32{csr_dcsr}}      & {16'h4000, dcsr[15:2], 2'b11}) |
-                                  ({32{csr_dpc}}       & {dpc[31:1], 1'b0}) |
-                                  ({32{csr_dicad0}}    & dicad0[31:0]) |
-                                  ({32{csr_dicad0h}}   & dicad0h[31:0]) |
-                                  ({32{csr_dicad1}}    & dicad1[31:0]) |
-                                  ({32{csr_dicawics}}  & {7'b0, dicawics[16], 2'b0, dicawics[15:14], 3'b0, dicawics[13:0], 3'b0}) |
-                                  ({32{csr_mtsel}}     & {30'b0, mtsel[1:0]}) |
-                                  ({32{csr_mtdata1}}   & {mtdata1_tsel_out[31:0]}) |
-                                  ({32{csr_mtdata2}}   & {mtdata2_tsel_out[31:0]}) |
-                                  ({32{csr_micect}}    & {micect[31:0]}) |
-                                  ({32{csr_miccmect}}  & {miccmect[31:0]}) |
-                                  ({32{csr_mdccmect}}  & {mdccmect[31:0]}) |
-                                  ({32{csr_mhpmc3}}    & mhpmc3[31:0]) |
-                                  ({32{csr_mhpmc4}}    & mhpmc4[31:0]) |
-                                  ({32{csr_mhpmc5}}    & mhpmc5[31:0]) |
-                                  ({32{csr_mhpmc6}}    & mhpmc6[31:0]) |
-                                  ({32{csr_mhpmc3h}}   & mhpmc3h[31:0]) |
-                                  ({32{csr_mhpmc4h}}   & mhpmc4h[31:0]) |
-                                  ({32{csr_mhpmc5h}}   & mhpmc5h[31:0]) |
-                                  ({32{csr_mhpmc6h}}   & mhpmc6h[31:0]) |
-                                  ({32{csr_mfdht}}     & {26'b0, mfdht[5:0]}) |
-                                  ({32{csr_mfdhs}}     & {30'b0, mfdhs[1:0]}) |
-                                  ({32{csr_mhpme3}}    & {22'b0,mhpme3[9:0]}) |
-                                  ({32{csr_mhpme4}}    & {22'b0,mhpme4[9:0]}) |
-                                  ({32{csr_mhpme5}}    & {22'b0,mhpme5[9:0]}) |
-                                  ({32{csr_mhpme6}}    & {22'b0,mhpme6[9:0]}) |
-                                  ({32{csr_mcountinhibit}} & {25'b0, mcountinhibit[6:0]}) |
-                                  ({32{csr_mpmc}}      & {30'b0, mpmc[1], 1'b0}) |
-                                  ({32{dec_timer_read_d}} & dec_timer_rddata_d[31:0])
-                                  );
-
-
-
-endmodule // eb1_dec_tlu_ctl
-
-module eb1_dec_timer_ctl #(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,
-   input logic free_l2clk,
-   input logic csr_wr_clk,
-   input logic rst_l,
-   input logic        dec_csr_wen_r_mod,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic csr_mitctl0,
-   input logic csr_mitctl1,
-   input logic csr_mitb0,
-   input logic csr_mitb1,
-   input logic csr_mitcnt0,
-   input logic csr_mitcnt1,
-
-
-   input logic dec_pause_state, // Paused
-   input logic dec_tlu_pmu_fw_halted, // pmu/fw halted
-   input logic internal_dbg_halt_timers, // debug halted
-
-   output logic [31:0] dec_timer_rddata_d, // timer CSR read data
-   output logic        dec_timer_read_d, // timer CSR address match
-   output logic        dec_timer_t0_pulse, // timer0 int
-   output logic        dec_timer_t1_pulse, // timer1 int
-
-   input  logic        scan_mode
-   );
-   localparam MITCTL_ENABLE             = 0;
-   localparam MITCTL_ENABLE_HALTED      = 1;
-   localparam MITCTL_ENABLE_PAUSED      = 2;
-
-   logic [31:0] mitcnt0_ns, mitcnt0, mitcnt1_ns, mitcnt1, mitb0, mitb1, mitb0_b, mitb1_b, mitcnt0_inc, mitcnt1_inc;
-   logic [2:0] mitctl0_ns, mitctl0;
-   logic [3:0] mitctl1_ns, mitctl1;
-   logic wr_mitcnt0_r, wr_mitcnt1_r, wr_mitb0_r, wr_mitb1_r, wr_mitctl0_r, wr_mitctl1_r;
-   logic mitcnt0_inc_ok, mitcnt1_inc_ok;
-   logic mitcnt0_inc_cout, mitcnt1_inc_cout;
- logic mit0_match_ns;
- logic mit1_match_ns;
- logic mitctl0_0_b_ns;
- logic mitctl0_0_b;
- logic mitctl1_0_b_ns;
- logic mitctl1_0_b;
-
-   assign mit0_match_ns = (mitcnt0[31:0] >= mitb0[31:0]);
-   assign mit1_match_ns = (mitcnt1[31:0] >= mitb1[31:0]);
-
-   assign dec_timer_t0_pulse = mit0_match_ns;
-   assign dec_timer_t1_pulse = mit1_match_ns;
-   // ----------------------------------------------------------------------
-   // MITCNT0 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT0       = 12'h7d2;
-
-   assign wr_mitcnt0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT0);
-
-   assign mitcnt0_inc_ok = mitctl0[MITCTL_ENABLE] & (~dec_pause_state | mitctl0[MITCTL_ENABLE_PAUSED]) & (~dec_tlu_pmu_fw_halted | mitctl0[MITCTL_ENABLE_HALTED]) & ~internal_dbg_halt_timers;
-
-   assign {mitcnt0_inc_cout, mitcnt0_inc[7:0]} = mitcnt0[7:0] + {7'b0, 1'b1};
-   assign mitcnt0_inc[31:8] = mitcnt0[31:8] + {23'b0, mitcnt0_inc_cout};
-
-   assign mitcnt0_ns[31:0]  = wr_mitcnt0_r ? dec_csr_wrdata_r[31:0] : mit0_match_ns ? 'b0 : mitcnt0_inc[31:0];
-
-   rvdffe #(24) mitcnt0_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | (mitcnt0_inc_ok & mitcnt0_inc_cout) | mit0_match_ns), .din(mitcnt0_ns[31:8]), .dout(mitcnt0[31:8]));
-   rvdffe #(8)  mitcnt0_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | mitcnt0_inc_ok | mit0_match_ns),                       .din(mitcnt0_ns[7:0]), .dout(mitcnt0[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MITCNT1 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT1       = 12'h7d5;
-
-   assign wr_mitcnt1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT1);
-
-   assign mitcnt1_inc_ok = mitctl1[MITCTL_ENABLE] &
-                           (~dec_pause_state | mitctl1[MITCTL_ENABLE_PAUSED]) &
-                           (~dec_tlu_pmu_fw_halted | mitctl1[MITCTL_ENABLE_HALTED]) &
-                           ~internal_dbg_halt_timers &
-                           (~mitctl1[3] | mit0_match_ns);
-
-   // only inc MITCNT1 if not cascaded with 0, or if 0 overflows
-   assign {mitcnt1_inc_cout, mitcnt1_inc[7:0]} = mitcnt1[7:0] + {7'b0, 1'b1};
-   assign mitcnt1_inc[31:8] = mitcnt1[31:8] + {23'b0, mitcnt1_inc_cout};
-
-   assign mitcnt1_ns[31:0]  = wr_mitcnt1_r ? dec_csr_wrdata_r[31:0] : mit1_match_ns ? 'b0 : mitcnt1_inc[31:0];
-
-   rvdffe #(24) mitcnt1_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | (mitcnt1_inc_ok & mitcnt1_inc_cout) | mit1_match_ns), .din(mitcnt1_ns[31:8]), .dout(mitcnt1[31:8]));
-   rvdffe #(8)  mitcnt1_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | mitcnt1_inc_ok | mit1_match_ns),                       .din(mitcnt1_ns[7:0]), .dout(mitcnt1[7:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MITB0 (RW)
-   // [31:0] : Internal Timer Bound 0
-
-   localparam MITB0         = 12'h7d3;
-
-   assign wr_mitb0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB0);
-
-   rvdffe #(32) mitb0_ff      (.*, .en(wr_mitb0_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb0_b[31:0]));
-   assign mitb0[31:0] = ~mitb0_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITB1 (RW)
-   // [31:0] : Internal Timer Bound 1
-
-   localparam MITB1         = 12'h7d6;
-
-   assign wr_mitb1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB1);
-
-   rvdffe #(32) mitb1_ff      (.*, .en(wr_mitb1_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb1_b[31:0]));
-   assign mitb1[31:0] = ~mitb1_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITCTL0 (RW) Internal Timer Ctl 0
-   // [31:3] : Reserved, reads 0x0
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL0       = 12'h7d4;
-
-   assign wr_mitctl0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL0);
-   assign mitctl0_ns[2:0] = wr_mitctl0_r ? {dec_csr_wrdata_r[2:0]} : {mitctl0[2:0]};
-
-   assign mitctl0_0_b_ns = ~mitctl0_ns[0];
-   rvdffs #(3) mitctl0_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl0_r), .din({mitctl0_ns[2:1], mitctl0_0_b_ns}), .dout({mitctl0[2:1], mitctl0_0_b}));
-   assign mitctl0[0] = ~mitctl0_0_b;
-
-   // ----------------------------------------------------------------------
-   // MITCTL1 (RW) Internal Timer Ctl 1
-   // [31:4] : Reserved, reads 0x0
-   // [3]    : Cascade
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL1       = 12'h7d7;
-
-   assign wr_mitctl1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL1);
-   assign mitctl1_ns[3:0] = wr_mitctl1_r ? {dec_csr_wrdata_r[3:0]} : {mitctl1[3:0]};
-
-   assign mitctl1_0_b_ns = ~mitctl1_ns[0];
-   rvdffs #(4) mitctl1_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl1_r), .din({mitctl1_ns[3:1], mitctl1_0_b_ns}), .dout({mitctl1[3:1], mitctl1_0_b}));
-   assign mitctl1[0] = ~mitctl1_0_b;
-   assign dec_timer_read_d = csr_mitcnt1 | csr_mitcnt0 | csr_mitb1 | csr_mitb0 | csr_mitctl0 | csr_mitctl1;
-   assign dec_timer_rddata_d[31:0] = ( ({32{csr_mitcnt0}}      & mitcnt0[31:0]) |
-                                       ({32{csr_mitcnt1}}      & mitcnt1[31:0]) |
-                                       ({32{csr_mitb0}}        & mitb0[31:0]) |
-                                       ({32{csr_mitb1}}        & mitb1[31:0]) |
-                                       ({32{csr_mitctl0}}      & {29'b0, mitctl0[2:0]}) |
-                                       ({32{csr_mitctl1}}      & {28'b0, mitctl1[3:0]})
-                                       );
-
-
-endmodule // dec_timer_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dec_trigger.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dec_trigger.sv
deleted file mode 100644
index 05f9d12..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dec_trigger.sv
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DEC Trigger Logic
-// Comments:
-//
-//********************************************************************************
-module eb1_dec_trigger
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,           // Packet from tlu. 'select':0-pc,1-Opcode  'Execute' needs to be set for dec triggers to fire. 'match'-1 do mask, 0: full match
-   input logic [31:1]  dec_i0_pc_d,                          // i0 pc
-
-   output logic [3:0] dec_i0_trigger_match_d                 // Trigger match
-);
-
-   logic [3:0][31:0]  dec_i0_match_data;
-   logic [3:0]        dec_i0_trigger_data_match;
-
-   for (genvar i=0; i<4; i++) begin
-      assign dec_i0_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select & trigger_pkt_any[i].execute}} & {dec_i0_pc_d[31:1], trigger_pkt_any[i].tdata2[0]});      // select=0; do a PC match
-
-      rvmaskandmatch trigger_i0_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(dec_i0_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(dec_i0_trigger_data_match[i]));
-
-      assign dec_i0_trigger_match_d[i] = trigger_pkt_any[i].execute & trigger_pkt_any[i].m & dec_i0_trigger_data_match[i];
-   end
-
-endmodule // eb1_dec_trigger
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_def.sv b/verilog/rtl/BrqRV_EB1/design/eb1_def.sv
deleted file mode 100644
index 15df549..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_def.sv
+++ /dev/null
@@ -1,405 +0,0 @@
-// performance monitor stuff
-//`ifndef eb1_DEF_SV
-//`define eb1_DEF_SV
-package eb1_pkg;
-
-typedef struct packed {
-                       logic  trace_rv_i_valid_ip;
-                       logic [31:0] trace_rv_i_insn_ip;
-                       logic [31:0] trace_rv_i_address_ip;
-                       logic  trace_rv_i_exception_ip;
-                       logic [4:0] trace_rv_i_ecause_ip;
-                       logic  trace_rv_i_interrupt_ip;
-                       logic [31:0] trace_rv_i_tval_ip;
-                       } eb1_trace_pkt_t;
-
-
-typedef enum logic [3:0] {
-                          NULL     = 4'b0000,
-                          MUL      = 4'b0001,
-                          LOAD     = 4'b0010,
-                          STORE    = 4'b0011,
-                          ALU      = 4'b0100,
-                          CSRREAD  = 4'b0101,
-                          CSRWRITE = 4'b0110,
-                          CSRRW    = 4'b0111,
-                          EBREAK   = 4'b1000,
-                          ECALL    = 4'b1001,
-                          FENCE    = 4'b1010,
-                          FENCEI   = 4'b1011,
-                          MRET     = 4'b1100,
-                          CONDBR   = 4'b1101,
-                          JAL      = 4'b1110,
-                          BITMANIPU = 4'b1111
-                          } eb1_inst_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic wb;
-                       logic [2:0] tag;
-                       logic [4:0] rd;
-                       } eb1_load_cam_pkt_t;
-
-typedef struct packed {
-                       logic pc0_call;
-                       logic pc0_ret;
-                       logic pc0_pc4;
-                       } eb1_rets_pkt_t;
-typedef struct packed {
-                       logic valid;
-                       logic [11:0] toffset;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic  bank;
-                       logic [31:1] prett;  // predicted ret target
-                       logic way;
-                       logic ret;
-                       } eb1_br_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic way;
-                       logic middle;
-                       } eb1_br_tlu_pkt_t;
-
-typedef struct packed {
-                       logic misp;
-                       logic ataken;
-                       logic boffset;
-                       logic pc4;
-                       logic [1:0] hist;
-                       logic [11:0] toffset;
-                       logic valid;
-                       logic br_error;
-                       logic br_start_error;
-                       logic pcall;
-                       logic pja;
-                       logic way;
-                       logic pret;
-                       // for power use the pret bit to clock the prett field
-                       logic [31:1] prett;
-                       } eb1_predict_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic icaf;
-                       logic icaf_second;
-                       logic [1:0] icaf_type;
-                       logic fence_i;
-                       logic [3:0] i0trigger;
-                       logic pmu_i0_br_unpred;     // pmu
-                       logic pmu_divide;
-                       // likely to change
-                       logic legal;
-                       logic pmu_lsu_misaligned;
-                       eb1_inst_pkt_t pmu_i0_itype;        // pmu - instruction type
-                       } eb1_trap_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic i0div;
-                       logic csrwen;
-                       logic csrwonly;
-                       logic [11:0] csrwaddr;
-                       // likely to change
-                       logic [4:0] i0rd;
-                       logic i0load;
-                       logic i0store;
-                       logic i0v;
-                       logic i0valid;
-                       } eb1_dest_pkt_t;
-
-typedef struct packed {
-                       logic mul;
-                       logic load;
-                       logic alu;
-                       } eb1_class_pkt_t;
-
-typedef struct packed {
-                       logic [4:0] rs1;
-                       logic [4:0] rs2;
-                       logic [4:0] rd;
-                       } eb1_reg_pkt_t;
-
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic srl;
-                       logic sra;
-                       logic beq;
-                       logic bne;
-                       logic blt;
-                       logic bge;
-                       logic add;
-                       logic sub;
-                       logic slt;
-                       logic unsign;
-                       logic jal;
-                       logic predict_t;
-                       logic predict_nt;
-                       logic csr_write;
-                       logic csr_imm;
-                       } eb1_alu_pkt_t;
-
-typedef struct packed {
-                       logic fast_int;
-/* verilator lint_off SYMRSVDWORD */
-                       logic stack;
-/* verilator lint_on SYMRSVDWORD */
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic dword;  // for dma
-                       logic load;
-                       logic store;
-                       logic unsign;
-                       logic dma;    // dma pkt
-                       logic store_data_bypass_d;
-                       logic load_ldst_bypass_d;
-                       logic store_data_bypass_m;
-                       logic valid;
-                       } eb1_lsu_pkt_t;
-
-typedef struct packed {
-                      logic inst_type;   //0: Load, 1: Store
-                      //logic dma_valid;
-                      logic exc_type;    //0: MisAligned, 1: Access Fault
-                      logic [3:0] mscause;
-                      logic [31:0] addr;
-                      logic single_ecc_error;
-                      logic exc_valid;
-                      } eb1_lsu_error_pkt_t;
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic zbs;
-                       logic bext;
-                       logic bdep;
-                       logic zbe;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic zbc;
-                       logic shfl;
-                       logic unshfl;
-                       logic zbp;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic zbr;
-                       logic bfp;
-                       logic zbf;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic alu;
-                       logic rs1;
-                       logic rs2;
-                       logic imm12;
-                       logic rd;
-                       logic shimm5;
-                       logic imm20;
-                       logic pc;
-                       logic load;
-                       logic store;
-                       logic lsu;
-                       logic add;
-                       logic sub;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic sra;
-                       logic srl;
-                       logic slt;
-                       logic unsign;
-                       logic condbr;
-                       logic beq;
-                       logic bne;
-                       logic bge;
-                       logic blt;
-                       logic jal;
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic csr_read;
-                       logic csr_clr;
-                       logic csr_set;
-                       logic csr_write;
-                       logic csr_imm;
-                       logic presync;
-                       logic postsync;
-                       logic ebreak;
-                       logic ecall;
-                       logic mret;
-                       logic mul;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic div;
-                       logic rem;
-                       logic fence;
-                       logic fence_i;
-                       logic pm_alu;
-                       logic legal;
-                       } eb1_dec_pkt_t;
-
-
-typedef struct packed {
-                       logic valid;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic bext;
-                       logic bdep;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic grev;
-                       logic gorc;
-                       logic shfl;
-                       logic unshfl;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic bfp;
-                       } eb1_mul_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic unsign;
-                       logic rem;
-                       } eb1_div_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ccm_ext_in_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_dccm_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_data_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_tag_ext_in_pkt_t;
-
-
-
-typedef struct packed {
-                        logic        select;
-                        logic        match;
-                        logic        store;
-                        logic        load;
-                        logic        execute;
-                        logic        m;
-                        logic [31:0] tdata2;
-            } eb1_trigger_pkt_t;
-
-
-typedef struct packed {
-                        logic [70:0]  icache_wrdata; // {dicad1[1:0], dicad0h[31:0], dicad0[31:0]}
-                        logic [16:0]  icache_dicawics; // Arraysel:24, Waysel:21:20, Index:16:3
-                        logic         icache_rd_valid;
-                        logic         icache_wr_valid;
-            } eb1_cache_debug_pkt_t;
-//`endif
-
-endpackage // eb1_pkg
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_dma_ctrl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_dma_ctrl.sv
deleted file mode 100644
index 6193526..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_dma_ctrl.sv
+++ /dev/null
@@ -1,637 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dma_ctrl #(
-`include "eb1_param.vh"
- )(
-   input logic         clk,
-   input logic         free_clk,
-   input logic         rst_l,
-   input logic         dma_bus_clk_en, // slave bus clock enable
-   input logic         clk_override,
-   input logic         scan_mode,
-
-   // Debug signals
-   input logic [31:0]  dbg_cmd_addr,
-   input logic [31:0]  dbg_cmd_wrdata,
-   input logic         dbg_cmd_valid,
-   input logic         dbg_cmd_write, // 1: write command, 0: read_command
-   input logic [1:0]   dbg_cmd_type, // 0:gpr 1:csr 2: memory
-   input logic [1:0]   dbg_cmd_size, // size of the abstract mem access debug command
-
-   input  logic        dbg_dma_bubble,   // Debug needs a bubble to send a valid
-   output logic        dma_dbg_ready,    // DMA is ready to accept debug request
-
-   output logic        dma_dbg_cmd_done,
-   output logic        dma_dbg_cmd_fail,
-   output logic [31:0] dma_dbg_rddata,
-
-   // Core side signals
-   output logic        dma_dccm_req,  // DMA dccm request (only one of dccm/iccm will be set)
-   output logic        dma_iccm_req,  // DMA iccm request
-   output logic [2:0]  dma_mem_tag,   // DMA Buffer entry number
-   output logic [31:0] dma_mem_addr,  // DMA request address
-   output logic [2:0]  dma_mem_sz,    // DMA request size
-   output logic        dma_mem_write, // DMA write to dccm/iccm
-   output logic [63:0] dma_mem_wdata, // DMA write data
-
-   input logic         dccm_dma_rvalid,    // dccm data valid for DMA read
-   input logic         dccm_dma_ecc_error, // ECC error on DMA read
-   input logic [2:0]   dccm_dma_rtag,      // Tag of the DMA req
-   input logic [63:0]  dccm_dma_rdata,     // dccm data for DMA read
-   input logic         iccm_dma_rvalid,    // iccm data valid for DMA read
-   input logic         iccm_dma_ecc_error, // ECC error on DMA read
-   input logic [2:0]   iccm_dma_rtag,      // Tag of the DMA req
-   input logic [63:0]  iccm_dma_rdata,     // iccm data for DMA read
-
-   output logic        dma_active,         // DMA is busy
-   output logic        dma_dccm_stall_any, // stall dccm pipe (bubble) so that DMA can proceed
-   output logic        dma_iccm_stall_any, // stall iccm pipe (bubble) so that DMA can proceed
-   input logic         dccm_ready, // dccm ready to accept DMA request
-   input logic         iccm_ready, // iccm ready to accept DMA request
-   input logic [2:0]   dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:15]
-
-   // PMU signals
-   output logic        dma_pmu_dccm_read,
-   output logic        dma_pmu_dccm_write,
-   output logic        dma_pmu_any_read,
-   output logic        dma_pmu_any_write,
-
-   // AXI Write Channels
-   input  logic                        dma_axi_awvalid,
-   output logic                        dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]   dma_axi_awid,
-   input  logic [31:0]                 dma_axi_awaddr,
-   input  logic [2:0]                  dma_axi_awsize,
-
-
-   input  logic                        dma_axi_wvalid,
-   output logic                        dma_axi_wready,
-   input  logic [63:0]                 dma_axi_wdata,
-   input  logic [7:0]                  dma_axi_wstrb,
-
-   output logic                        dma_axi_bvalid,
-   input  logic                        dma_axi_bready,
-   output logic [1:0]                  dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]   dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                        dma_axi_arvalid,
-   output logic                        dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]   dma_axi_arid,
-   input  logic [31:0]                 dma_axi_araddr,
-   input  logic [2:0]                  dma_axi_arsize,
-
-   output logic                        dma_axi_rvalid,
-   input  logic                        dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]   dma_axi_rid,
-   output logic [63:0]                 dma_axi_rdata,
-   output logic [1:0]                  dma_axi_rresp,
-   output logic                        dma_axi_rlast
-);
-
-
-   localparam DEPTH = pt.DMA_BUF_DEPTH;
-   localparam DEPTH_PTR = $clog2(DEPTH);
-   localparam NACK_COUNT = 7;
-
-   logic [DEPTH-1:0]        fifo_valid;
-   logic [DEPTH-1:0][1:0]   fifo_error;
-   logic [DEPTH-1:0]        fifo_error_bus;
-   logic [DEPTH-1:0]        fifo_rpend;
-   logic [DEPTH-1:0]        fifo_done;      // DMA trxn is done in core
-   logic [DEPTH-1:0]        fifo_done_bus;  // DMA trxn is done in core but synced to bus clock
-   logic [DEPTH-1:0][31:0]  fifo_addr;
-   logic [DEPTH-1:0][2:0]   fifo_sz;
-   logic [DEPTH-1:0][7:0]   fifo_byteen;
-   logic [DEPTH-1:0]        fifo_write;
-   logic [DEPTH-1:0]        fifo_posted_write;
-   logic [DEPTH-1:0]        fifo_dbg;
-   logic [DEPTH-1:0][63:0]  fifo_data;
-   logic [DEPTH-1:0][pt.DMA_BUS_TAG-1:0]  fifo_tag;
-   logic [DEPTH-1:0][pt.DMA_BUS_ID-1:0]   fifo_mid;
-   logic [DEPTH-1:0][pt.DMA_BUS_PRTY-1:0] fifo_prty;
-
-   logic [DEPTH-1:0]        fifo_cmd_en;
-   logic [DEPTH-1:0]        fifo_data_en;
-   logic [DEPTH-1:0]        fifo_pend_en;
-   logic [DEPTH-1:0]        fifo_done_en;
-   logic [DEPTH-1:0]        fifo_done_bus_en;
-   logic [DEPTH-1:0]        fifo_error_en;
-   logic [DEPTH-1:0]        fifo_error_bus_en;
-   logic [DEPTH-1:0]        fifo_reset;
-   logic [DEPTH-1:0][1:0]   fifo_error_in;
-   logic [DEPTH-1:0][63:0]  fifo_data_in;
-
-   logic                    fifo_write_in;
-   logic                    fifo_posted_write_in;
-   logic                    fifo_dbg_in;
-   logic [31:0]             fifo_addr_in;
-   logic [2:0]              fifo_sz_in;
-   logic [7:0]              fifo_byteen_in;
-
-   logic [DEPTH_PTR-1:0]    RspPtr, NxtRspPtr;
-   logic [DEPTH_PTR-1:0]    WrPtr, NxtWrPtr;
-   logic [DEPTH_PTR-1:0]    RdPtr, NxtRdPtr;
-   logic                    WrPtrEn, RdPtrEn, RspPtrEn;
-
-   logic [1:0]              dma_dbg_sz;
-   logic [1:0]              dma_dbg_addr;
-   logic [31:0]             dma_dbg_mem_rddata;
-   logic [31:0]             dma_dbg_mem_wrdata;
-   logic                    dma_dbg_cmd_error;
-   logic                    dma_dbg_cmd_done_q;
-
-   logic                    fifo_full, fifo_full_spec, fifo_empty;
-   logic                    dma_address_error, dma_alignment_error;
-   logic [3:0]              num_fifo_vld;
-   logic                    dma_mem_req;
-   logic [31:0]             dma_mem_addr_int;
-   logic [2:0]              dma_mem_sz_int;
-   logic [7:0]              dma_mem_byteen;
-   logic                    dma_mem_addr_in_dccm;
-   logic                    dma_mem_addr_in_iccm;
-   logic                    dma_mem_addr_in_pic;
-   logic                    dma_mem_addr_in_pic_region_nc;
-   logic                    dma_mem_addr_in_dccm_region_nc;
-   logic                    dma_mem_addr_in_iccm_region_nc;
-
-   logic [2:0]              dma_nack_count, dma_nack_count_d, dma_nack_count_csr;
-
-   logic                    dma_buffer_c1_clken;
-   logic                    dma_free_clken;
-   logic                    dma_buffer_c1_clk;
-   logic                    dma_free_clk;
-   logic                    dma_bus_clk;
-
-   logic                    bus_rsp_valid, bus_rsp_sent;
-   logic                    bus_cmd_valid, bus_cmd_sent;
-   logic                    bus_cmd_write, bus_cmd_posted_write;
-   logic [7:0]              bus_cmd_byteen;
-   logic [2:0]              bus_cmd_sz;
-   logic [31:0]             bus_cmd_addr;
-   logic [63:0]             bus_cmd_wdata;
-   logic [pt.DMA_BUS_TAG-1:0]  bus_cmd_tag;
-   logic [pt.DMA_BUS_ID-1:0]   bus_cmd_mid;
-   logic [pt.DMA_BUS_PRTY-1:0] bus_cmd_prty;
-   logic                    bus_posted_write_done;
-
-   logic                    fifo_full_spec_bus;
-   logic                    dbg_dma_bubble_bus;
-   logic                    stall_dma_in;
-   logic                    dma_fifo_ready;
-
-   logic                       wrbuf_en, wrbuf_data_en;
-   logic                       wrbuf_cmd_sent, wrbuf_rst, wrbuf_data_rst;
-   logic                       wrbuf_vld, wrbuf_data_vld;
-   logic [pt.DMA_BUS_TAG-1:0]  wrbuf_tag;
-   logic [2:0]                 wrbuf_sz;
-   logic [31:0]                wrbuf_addr;
-   logic [63:0]                wrbuf_data;
-   logic [7:0]                 wrbuf_byteen;
-
-   logic                       rdbuf_en;
-   logic                       rdbuf_cmd_sent, rdbuf_rst;
-   logic                       rdbuf_vld;
-   logic [pt.DMA_BUS_TAG-1:0]  rdbuf_tag;
-   logic [2:0]                 rdbuf_sz;
-   logic [31:0]                rdbuf_addr;
-
-   logic                       axi_mstr_prty_in, axi_mstr_prty_en;
-   logic                       axi_mstr_priority;
-   logic                       axi_mstr_sel;
-
-   logic                       axi_rsp_valid, axi_rsp_sent;
-   logic                       axi_rsp_write;
-   logic [pt.DMA_BUS_TAG-1:0]  axi_rsp_tag;
-   logic [1:0]                 axi_rsp_error;
-   logic [63:0]                axi_rsp_rdata;
-
-   //------------------------LOGIC STARTS HERE---------------------------------
-
-   // FIFO inputs
-   assign fifo_addr_in[31:0]    = dbg_cmd_valid ? dbg_cmd_addr[31:0] : bus_cmd_addr[31:0];
-   assign fifo_byteen_in[7:0]   = {8{~dbg_cmd_valid}} & bus_cmd_byteen[7:0];    // Byte enable is used only for bus requests
-   assign fifo_sz_in[2:0]       = dbg_cmd_valid ? {1'b0,dbg_cmd_size[1:0]} : bus_cmd_sz[2:0];
-   assign fifo_write_in         = dbg_cmd_valid ? dbg_cmd_write : bus_cmd_write;
-   assign fifo_posted_write_in  = ~dbg_cmd_valid & bus_cmd_posted_write;
-   assign fifo_dbg_in           = dbg_cmd_valid;
-
-   for (genvar i=0 ;i<DEPTH; i++) begin: GenFifo
-      assign fifo_cmd_en[i]   = ((bus_cmd_sent & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1])) & (i == WrPtr[DEPTH_PTR-1:0]);
-      assign fifo_data_en[i] = (((bus_cmd_sent & fifo_write_in & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1] & dbg_cmd_write))  & (i == WrPtr[DEPTH_PTR-1:0])) |
-                               ((dma_address_error | dma_alignment_error) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                               (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                               (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_pend_en[i] = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write & (i == RdPtr[DEPTH_PTR-1:0]);
-      assign fifo_error_en[i] = ((dma_address_error | dma_alignment_error | dma_dbg_cmd_error) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                                ((dccm_dma_rvalid & dccm_dma_ecc_error) & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                                ((iccm_dma_rvalid & iccm_dma_ecc_error) & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_error_bus_en[i] = (((|fifo_error_in[i][1:0]) & fifo_error_en[i]) | (|fifo_error[i])) & dma_bus_clk_en;
-      assign fifo_done_en[i] = ((|fifo_error[i] | fifo_error_en[i] | ((dma_dccm_req | dma_iccm_req) & dma_mem_write)) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                               (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                               (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_done_bus_en[i] = (fifo_done_en[i] | fifo_done[i]) & dma_bus_clk_en;
-      assign fifo_reset[i] = (((bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en) | dma_dbg_cmd_done) & (i == RspPtr[DEPTH_PTR-1:0]);
-      assign fifo_error_in[i]   = (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) ? {1'b0,dccm_dma_ecc_error} : (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0]))) ? {1'b0,iccm_dma_ecc_error}  :
-                                                                                                                {(dma_address_error | dma_alignment_error | dma_dbg_cmd_error), dma_alignment_error};
-      assign fifo_data_in[i]   = (fifo_error_en[i] & (|fifo_error_in[i])) ? {32'b0,fifo_addr[i]} :
-                                                        ((dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0])))  ? dccm_dma_rdata[63:0] : (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0]))) ? iccm_dma_rdata[63:0] :
-                                                                                                                                                       (dbg_cmd_valid ? {2{dma_dbg_mem_wrdata[31:0]}} : bus_cmd_wdata[63:0]));
-
-      rvdffsc #(1) fifo_valid_dff (.din(1'b1), .dout(fifo_valid[i]), .en(fifo_cmd_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(2) fifo_error_dff (.din(fifo_error_in[i]), .dout(fifo_error[i]), .en(fifo_error_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_error_bus_dff (.din(1'b1), .dout(fifo_error_bus[i]), .en(fifo_error_bus_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_rpend_dff (.din(1'b1), .dout(fifo_rpend[i]), .en(fifo_pend_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_done_dff (.din(1'b1), .dout(fifo_done[i]), .en(fifo_done_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_done_bus_dff (.din(1'b1), .dout(fifo_done_bus[i]), .en(fifo_done_bus_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffe  #(32) fifo_addr_dff (.din(fifo_addr_in[31:0]), .dout(fifo_addr[i]), .en(fifo_cmd_en[i]), .*);
-      rvdffs  #(3) fifo_sz_dff (.din(fifo_sz_in[2:0]), .dout(fifo_sz[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(8) fifo_byteen_dff (.din(fifo_byteen_in[7:0]), .dout(fifo_byteen[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_write_dff (.din(fifo_write_in), .dout(fifo_write[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_posted_write_dff (.din(fifo_posted_write_in), .dout(fifo_posted_write[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_dbg_dff (.din(fifo_dbg_in), .dout(fifo_dbg[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffe  #(64) fifo_data_dff (.din(fifo_data_in[i]), .dout(fifo_data[i]), .en(fifo_data_en[i]), .*);
-      rvdffs  #(pt.DMA_BUS_TAG) fifo_tag_dff(.din(bus_cmd_tag[pt.DMA_BUS_TAG-1:0]), .dout(fifo_tag[i][pt.DMA_BUS_TAG-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(pt.DMA_BUS_ID) fifo_mid_dff(.din(bus_cmd_mid[pt.DMA_BUS_ID-1:0]), .dout(fifo_mid[i][pt.DMA_BUS_ID-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(pt.DMA_BUS_PRTY) fifo_prty_dff(.din(bus_cmd_prty[pt.DMA_BUS_PRTY-1:0]), .dout(fifo_prty[i][pt.DMA_BUS_PRTY-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-   end
-
-   // Pointer logic
-   assign NxtWrPtr[DEPTH_PTR-1:0] = (WrPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : WrPtr[DEPTH_PTR-1:0] + 1'b1;
-   assign NxtRdPtr[DEPTH_PTR-1:0] = (RdPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : RdPtr[DEPTH_PTR-1:0] + 1'b1;
-   assign NxtRspPtr[DEPTH_PTR-1:0] = (RspPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : RspPtr[DEPTH_PTR-1:0] + 1'b1;
-
-   assign WrPtrEn = |fifo_cmd_en[DEPTH-1:0];
-   assign RdPtrEn = dma_dccm_req | dma_iccm_req | (dma_address_error | dma_alignment_error | dma_dbg_cmd_error);
-   assign RspPtrEn = (dma_dbg_cmd_done | (bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en);
-
-   rvdffs #(DEPTH_PTR) WrPtr_dff(.din(NxtWrPtr[DEPTH_PTR-1:0]), .dout(WrPtr[DEPTH_PTR-1:0]), .en(WrPtrEn), .clk(dma_free_clk), .*);
-   rvdffs #(DEPTH_PTR) RdPtr_dff(.din(NxtRdPtr[DEPTH_PTR-1:0]), .dout(RdPtr[DEPTH_PTR-1:0]), .en(RdPtrEn), .clk(dma_free_clk), .*);
-   rvdffs #(DEPTH_PTR) RspPtr_dff(.din(NxtRspPtr[DEPTH_PTR-1:0]), .dout(RspPtr[DEPTH_PTR-1:0]), .en(RspPtrEn), .clk(dma_free_clk), .*);
-
-   // Miscellaneous signals
-   assign fifo_full = fifo_full_spec_bus;
-
-   always_comb begin
-      num_fifo_vld[3:0] = {3'b0,bus_cmd_sent} - {3'b0,bus_rsp_sent};
-      for (int i=0; i<DEPTH; i++) begin
-         num_fifo_vld[3:0] += {3'b0,fifo_valid[i]};
-      end
-   end
-   assign fifo_full_spec          = (num_fifo_vld[3:0] >= DEPTH);
-
-   assign dma_fifo_ready = ~(fifo_full | dbg_dma_bubble_bus);
-
-   // Error logic
-   assign dma_address_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & ~fifo_dbg[RdPtr] & (~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm));    // request not for ICCM or DCCM
-   assign dma_alignment_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & ~fifo_dbg[RdPtr] & ~dma_address_error &
-                                (((dma_mem_sz_int[2:0] == 3'h1) & dma_mem_addr_int[0])                                                       |    // HW size but unaligned
-                                 ((dma_mem_sz_int[2:0] == 3'h2) & (|dma_mem_addr_int[1:0]))                                                  |    // W size but unaligned
-                                 ((dma_mem_sz_int[2:0] == 3'h3) & (|dma_mem_addr_int[2:0]))                                                  |    // DW size but unaligned
-                                 (dma_mem_addr_in_iccm & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11)))                 |    // ICCM access not word size
-                                 (dma_mem_addr_in_dccm & dma_mem_write & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11))) |    // DCCM write not word size
-                                 (dma_mem_write & (dma_mem_sz_int[2:0] == 3'h2) & (dma_mem_byteen[dma_mem_addr_int[2:0]+:4] != 4'hf))        |    // Write byte enables not aligned for word store
-                                 (dma_mem_write & (dma_mem_sz_int[2:0] == 3'h3) & ~((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0) | (dma_mem_byteen[7:0] == 8'hff)))); // Write byte enables not aligned for dword store
-
-
-   //Dbg outputs
-   assign dma_dbg_ready    = fifo_empty & dbg_dma_bubble;
-   assign dma_dbg_cmd_done = (fifo_valid[RspPtr] & fifo_dbg[RspPtr] & fifo_done[RspPtr]);
-   assign dma_dbg_cmd_fail     = |fifo_error[RspPtr];
-
-   assign dma_dbg_sz[1:0]          = fifo_sz[RspPtr][1:0];
-   assign dma_dbg_addr[1:0]        = fifo_addr[RspPtr][1:0];
-   assign dma_dbg_mem_rddata[31:0] = fifo_addr[RspPtr][2] ? fifo_data[RspPtr][63:32] : fifo_data[RspPtr][31:0];
-   assign dma_dbg_rddata[31:0]     = ({32{(dma_dbg_sz[1:0] == 2'h0)}} & ((dma_dbg_mem_rddata[31:0] >> 8*dma_dbg_addr[1:0]) & 32'hff)) |
-                                     ({32{(dma_dbg_sz[1:0] == 2'h1)}} & ((dma_dbg_mem_rddata[31:0] >> 16*dma_dbg_addr[1]) & 32'hffff)) |
-                                     ({32{(dma_dbg_sz[1:0] == 2'h2)}} & dma_dbg_mem_rddata[31:0]);
-
-   assign dma_dbg_cmd_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & fifo_dbg[RdPtr] &
-                                 ((~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm | dma_mem_addr_in_pic)) |             // Address outside of ICCM/DCCM/PIC
-                                  ((dma_mem_addr_in_iccm | dma_mem_addr_in_pic) & (dma_mem_sz_int[1:0] != 2'b10)));    // Only word accesses allowed for ICCM/PIC
-
-   assign dma_dbg_mem_wrdata[31:0] = ({32{dbg_cmd_size[1:0] == 2'h0}} & {4{dbg_cmd_wrdata[7:0]}}) |
-                                     ({32{dbg_cmd_size[1:0] == 2'h1}} & {2{dbg_cmd_wrdata[15:0]}}) |
-                                     ({32{dbg_cmd_size[1:0] == 2'h2}} & dbg_cmd_wrdata[31:0]);
-
-   // Block the decode if fifo full
-   assign dma_dccm_stall_any = dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic) & (dma_nack_count >= dma_nack_count_csr);
-   assign dma_iccm_stall_any = dma_mem_req & dma_mem_addr_in_iccm & (dma_nack_count >= dma_nack_count_csr);
-
-   // Used to indicate ready to debug
-   assign fifo_empty     = ~((|(fifo_valid[DEPTH-1:0])) | bus_cmd_sent);
-
-   // Nack counter, stall the lsu pipe if 7 nacks
-   assign dma_nack_count_csr[2:0] = dec_tlu_dma_qos_prty[2:0];
-   assign dma_nack_count_d[2:0] = (dma_nack_count[2:0] >= dma_nack_count_csr[2:0]) ? ({3{~(dma_dccm_req | dma_iccm_req)}} & dma_nack_count[2:0]) :
-                                                                                    (dma_mem_req & ~(dma_dccm_req | dma_iccm_req)) ? (dma_nack_count[2:0] + 1'b1) : 3'b0;
-
-   rvdffs #(3) nack_count_dff(.din(dma_nack_count_d[2:0]), .dout(dma_nack_count[2:0]), .en(dma_mem_req), .clk(dma_free_clk), .*);
-
-   // Core outputs
-   assign dma_mem_req         = fifo_valid[RdPtr] & ~fifo_rpend[RdPtr] & ~fifo_done[RdPtr] & ~(dma_address_error | dma_alignment_error | dma_dbg_cmd_error);
-   assign dma_dccm_req        = dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic) & dccm_ready;
-   assign dma_iccm_req        = dma_mem_req & dma_mem_addr_in_iccm & iccm_ready;
-   assign dma_mem_tag[2:0]    = 3'(RdPtr);
-   assign dma_mem_addr_int[31:0] = fifo_addr[RdPtr];
-   assign dma_mem_sz_int[2:0] = fifo_sz[RdPtr];
-   assign dma_mem_addr[31:0]  = (dma_mem_write & ~fifo_dbg[RdPtr] & (dma_mem_byteen[7:0] == 8'hf0)) ? {dma_mem_addr_int[31:3],1'b1,dma_mem_addr_int[1:0]} : dma_mem_addr_int[31:0];
-   assign dma_mem_sz[2:0]     = (dma_mem_write & ~fifo_dbg[RdPtr] & ((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0))) ? 3'h2 : dma_mem_sz_int[2:0];
-   assign dma_mem_byteen[7:0] = fifo_byteen[RdPtr];
-   assign dma_mem_write       = fifo_write[RdPtr];
-   assign dma_mem_wdata[63:0] = fifo_data[RdPtr];
-
-   // PMU outputs
-   assign dma_pmu_dccm_read   = dma_dccm_req & ~dma_mem_write;
-   assign dma_pmu_dccm_write  = dma_dccm_req & dma_mem_write;
-   assign dma_pmu_any_read    = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write;
-   assign dma_pmu_any_write   = (dma_dccm_req | dma_iccm_req) & dma_mem_write;
-
-   // Address check  dccm
-   if (pt.DCCM_ENABLE) begin: Gen_dccm_enable
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-         .addr(dma_mem_addr_int[31:0]),
-         .in_range(dma_mem_addr_in_dccm),
-         .in_region(dma_mem_addr_in_dccm_region_nc)
-      );
-   end else begin: Gen_dccm_disable
-      assign dma_mem_addr_in_dccm = '0;
-      assign dma_mem_addr_in_dccm_region_nc = '0;
-   end // else: !if(pt.ICCM_ENABLE)
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE) begin: Gen_iccm_enable
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(dma_mem_addr_int[31:0]),
-         .in_range(dma_mem_addr_in_iccm),
-         .in_region(dma_mem_addr_in_iccm_region_nc)
-      );
-   end else begin: Gen_iccm_disable
-      assign dma_mem_addr_in_iccm = '0;
-      assign dma_mem_addr_in_iccm_region_nc = '0;
-   end // else: !if(pt.ICCM_ENABLE)
-
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(dma_mem_addr_int[31:0]),
-      .in_range(dma_mem_addr_in_pic),
-      .in_region(dma_mem_addr_in_pic_region_nc)
-    );
-
-   // Inputs
-   rvdff_fpga #(1) fifo_full_bus_ff     (.din(fifo_full_spec),   .dout(fifo_full_spec_bus), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(1) dbg_dma_bubble_ff    (.din(dbg_dma_bubble),   .dout(dbg_dma_bubble_bus), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdff      #(1) dma_dbg_cmd_doneff   (.din(dma_dbg_cmd_done), .dout(dma_dbg_cmd_done_q), .clk(free_clk), .*);
-
-   // Clock Gating logic
-   assign dma_buffer_c1_clken = (bus_cmd_valid & dma_bus_clk_en) | dbg_cmd_valid | clk_override;
-   assign dma_free_clken = (bus_cmd_valid | bus_rsp_valid | dbg_cmd_valid | dma_dbg_cmd_done | dma_dbg_cmd_done_q | (|fifo_valid[DEPTH-1:0]) | clk_override);
-
-   rvoclkhdr dma_buffer_c1cgc ( .en(dma_buffer_c1_clken), .l1clk(dma_buffer_c1_clk), .* );
-   rvoclkhdr dma_free_cgc (.en(dma_free_clken), .l1clk(dma_free_clk), .*);
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign dma_bus_clk = 1'b0;
-`else
-   rvclkhdr  dma_bus_cgc (.en(dma_bus_clk_en), .l1clk(dma_bus_clk), .*);
-`endif
-
-   // Write channel buffer
-   assign wrbuf_en       = dma_axi_awvalid & dma_axi_awready;
-   assign wrbuf_data_en  = dma_axi_wvalid & dma_axi_wready;
-   assign wrbuf_cmd_sent = bus_cmd_sent & bus_cmd_write;
-   assign wrbuf_rst      = wrbuf_cmd_sent & ~wrbuf_en;
-   assign wrbuf_data_rst = wrbuf_cmd_sent & ~wrbuf_data_en;
-
-   rvdffsc_fpga  #(.WIDTH(1))              wrbuf_vldff       (.din(1'b1), .dout(wrbuf_vld),      .en(wrbuf_en),      .clear(wrbuf_rst),      .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga  #(.WIDTH(1))              wrbuf_data_vldff  (.din(1'b1), .dout(wrbuf_data_vld), .en(wrbuf_data_en), .clear(wrbuf_data_rst), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(pt.DMA_BUS_TAG)) wrbuf_tagff       (.din(dma_axi_awid[pt.DMA_BUS_TAG-1:0]), .dout(wrbuf_tag[pt.DMA_BUS_TAG-1:0]), .en(wrbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(3))              wrbuf_szff        (.din(dma_axi_awsize[2:0]),  .dout(wrbuf_sz[2:0]),     .en(wrbuf_en),                  .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffe        #(.WIDTH(32))             wrbuf_addrff      (.din(dma_axi_awaddr[31:0]), .dout(wrbuf_addr[31:0]),  .en(wrbuf_en & dma_bus_clk_en), .*);
-   rvdffe        #(.WIDTH(64))             wrbuf_dataff      (.din(dma_axi_wdata[63:0]),  .dout(wrbuf_data[63:0]),  .en(wrbuf_data_en & dma_bus_clk_en), .*);
-   rvdffs_fpga   #(.WIDTH(8))              wrbuf_byteenff    (.din(dma_axi_wstrb[7:0]),   .dout(wrbuf_byteen[7:0]), .en(wrbuf_data_en),             .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-
-   // Read channel buffer
-   assign rdbuf_en    = dma_axi_arvalid & dma_axi_arready;
-   assign rdbuf_cmd_sent = bus_cmd_sent & ~bus_cmd_write;
-   assign rdbuf_rst   = rdbuf_cmd_sent & ~rdbuf_en;
-
-   rvdffsc_fpga  #(.WIDTH(1))              rdbuf_vldff  (.din(1'b1), .dout(rdbuf_vld), .en(rdbuf_en), .clear(rdbuf_rst), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(pt.DMA_BUS_TAG)) rdbuf_tagff  (.din(dma_axi_arid[pt.DMA_BUS_TAG-1:0]), .dout(rdbuf_tag[pt.DMA_BUS_TAG-1:0]), .en(rdbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(3))              rdbuf_szff   (.din(dma_axi_arsize[2:0]),  .dout(rdbuf_sz[2:0]),    .en(rdbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))              rdbuf_addrff (.din(dma_axi_araddr[31:0]), .dout(rdbuf_addr[31:0]), .en(rdbuf_en & dma_bus_clk_en), .*);
-
-   assign dma_axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent);
-   assign dma_axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent);
-   assign dma_axi_arready = ~(rdbuf_vld & ~rdbuf_cmd_sent);
-
-   //Generate a single request from read/write channel
-   assign bus_cmd_valid                     = (wrbuf_vld & wrbuf_data_vld) | rdbuf_vld;
-   assign bus_cmd_sent                      = bus_cmd_valid & dma_fifo_ready;
-   assign bus_cmd_write                     = axi_mstr_sel;
-   assign bus_cmd_posted_write              = '0;
-   assign bus_cmd_addr[31:0]                = axi_mstr_sel ? wrbuf_addr[31:0] : rdbuf_addr[31:0];
-   assign bus_cmd_sz[2:0]                   = axi_mstr_sel ? wrbuf_sz[2:0] : rdbuf_sz[2:0];
-   assign bus_cmd_wdata[63:0]               = wrbuf_data[63:0];
-   assign bus_cmd_byteen[7:0]               = wrbuf_byteen[7:0];
-   assign bus_cmd_tag[pt.DMA_BUS_TAG-1:0]   = axi_mstr_sel ? wrbuf_tag[pt.DMA_BUS_TAG-1:0] : rdbuf_tag[pt.DMA_BUS_TAG-1:0];
-   assign bus_cmd_mid[pt.DMA_BUS_ID-1:0]    = '0;
-   assign bus_cmd_prty[pt.DMA_BUS_PRTY-1:0] = '0;
-
-   // Sel=1 -> write has higher priority
-   assign axi_mstr_sel     = (wrbuf_vld & wrbuf_data_vld & rdbuf_vld) ? axi_mstr_priority : (wrbuf_vld & wrbuf_data_vld);
-   assign axi_mstr_prty_in = ~axi_mstr_priority;
-   assign axi_mstr_prty_en = bus_cmd_sent;
-   rvdffs_fpga #(.WIDTH(1)) mstr_prtyff(.din(axi_mstr_prty_in), .dout(axi_mstr_priority), .en(axi_mstr_prty_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-
-   assign axi_rsp_valid                   = fifo_valid[RspPtr] & ~fifo_dbg[RspPtr] & fifo_done_bus[RspPtr];
-   assign axi_rsp_rdata[63:0]             = fifo_data[RspPtr];
-   assign axi_rsp_write                   = fifo_write[RspPtr];
-   assign axi_rsp_error[1:0]              = fifo_error[RspPtr][0] ? 2'b10 : (fifo_error[RspPtr][1] ? 2'b11 : 2'b0);
-   assign axi_rsp_tag[pt.DMA_BUS_TAG-1:0] = fifo_tag[RspPtr];
-
-   // AXI response channel signals
-   assign dma_axi_bvalid                  = axi_rsp_valid & axi_rsp_write;
-   assign dma_axi_bresp[1:0]              = axi_rsp_error[1:0];
-   assign dma_axi_bid[pt.DMA_BUS_TAG-1:0] = axi_rsp_tag[pt.DMA_BUS_TAG-1:0];
-
-   assign dma_axi_rvalid                  = axi_rsp_valid & ~axi_rsp_write;
-   assign dma_axi_rresp[1:0]              = axi_rsp_error;
-   assign dma_axi_rdata[63:0]             = axi_rsp_rdata[63:0];
-   assign dma_axi_rlast                   = 1'b1;
-   assign dma_axi_rid[pt.DMA_BUS_TAG-1:0] = axi_rsp_tag[pt.DMA_BUS_TAG-1:0];
-
-   assign bus_posted_write_done = 1'b0;
-   assign bus_rsp_valid      = (dma_axi_bvalid | dma_axi_rvalid);
-   assign bus_rsp_sent       = (dma_axi_bvalid & dma_axi_bready) | (dma_axi_rvalid & dma_axi_rready);
-
-   assign dma_active  = wrbuf_vld | rdbuf_vld | (|fifo_valid[DEPTH-1:0]);
-
-
-`ifdef RV_ASSERT_ON
-
-   for (genvar i=0; i<DEPTH; i++) begin
-      assert_fifo_done_and_novalid: assert #0 (~fifo_done[i] | fifo_valid[i]);
-   end
-
-   // Assertion to check awvalid stays stable during entire bus clock
-   property dma_axi_awvalid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_awvalid != $past(dma_axi_awvalid)) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_awvalid_stable: assert property (dma_axi_awvalid_stable) else
-      $display("DMA AXI awvalid changed in middle of bus clock");
-
-   // Assertion to check awid stays stable during entire bus clock
-   property dma_axi_awid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_awvalid & (dma_axi_awid[pt.DMA_BUS_TAG-1:0] != $past(dma_axi_awid[pt.DMA_BUS_TAG-1:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_awid_stable: assert property (dma_axi_awid_stable) else
-      $display("DMA AXI awid changed in middle of bus clock");
-
-   // Assertion to check awaddr stays stable during entire bus clock
-   property dma_axi_awaddr_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_awvalid & (dma_axi_awaddr[31:0] != $past(dma_axi_awaddr[31:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_awaddr_stable: assert property (dma_axi_awaddr_stable) else
-      $display("DMA AXI awaddr changed in middle of bus clock");
-
-   // Assertion to check awsize stays stable during entire bus clock
-   property dma_axi_awsize_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_awvalid & (dma_axi_awsize[2:0] != $past(dma_axi_awsize[2:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_awsize_stable: assert property (dma_axi_awsize_stable) else
-      $display("DMA AXI awsize changed in middle of bus clock");
-
-   // Assertion to check wstrb stays stable during entire bus clock
-   property dma_axi_wstrb_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_wvalid & (dma_axi_wstrb[7:0] != $past(dma_axi_wstrb[7:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_wstrb_stable: assert property (dma_axi_wstrb_stable) else
-      $display("DMA AXI wstrb changed in middle of bus clock");
-
-   // Assertion to check wdata stays stable during entire bus clock
-   property dma_axi_wdata_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_wvalid & (dma_axi_wdata[63:0] != $past(dma_axi_wdata[63:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_wdata_stable: assert property (dma_axi_wdata_stable) else
-      $display("DMA AXI wdata changed in middle of bus clock");
-
-   // Assertion to check awvalid stays stable during entire bus clock
-   property dma_axi_arvalid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_arvalid != $past(dma_axi_arvalid)) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_arvalid_stable: assert property (dma_axi_arvalid_stable) else
-      $display("DMA AXI awvalid changed in middle of bus clock");
-
-   // Assertion to check awid stays stable during entire bus clock
-   property dma_axi_arid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_arvalid & (dma_axi_arid[pt.DMA_BUS_TAG-1:0] != $past(dma_axi_arid[pt.DMA_BUS_TAG-1:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_arid_stable: assert property (dma_axi_arid_stable) else
-      $display("DMA AXI awid changed in middle of bus clock");
-
-   // Assertion to check awaddr stays stable during entire bus clock
-   property dma_axi_araddr_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_arvalid & (dma_axi_araddr[31:0] != $past(dma_axi_araddr[31:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_araddr_stable: assert property (dma_axi_araddr_stable) else
-      $display("DMA AXI awaddr changed in middle of bus clock");
-
-   // Assertion to check awsize stays stable during entire bus clock
-   property dma_axi_arsize_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_awvalid & (dma_axi_arsize[2:0] != $past(dma_axi_arsize[2:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_arsize_stable: assert property (dma_axi_arsize_stable) else
-      $display("DMA AXI awsize changed in middle of bus clock");
-
-   // Assertion to check bvalid stays stable during entire bus clock
-   property dma_axi_bvalid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_bvalid != $past(dma_axi_bvalid)) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_bvalid_stable: assert property (dma_axi_bvalid_stable) else
-      $display("DMA AXI bvalid changed in middle of bus clock");
-
-   // Assertion to check bvalid stays stable if bready is low
-   property dma_axi_bvalid_stable_till_bready;
-      @(posedge clk) disable iff(~rst_l)  (~dma_axi_bvalid && $past(dma_axi_bvalid)) |-> $past(dma_axi_bready);
-   endproperty
-   assert_dma_axi_bvalid_stable_till_bready: assert property (dma_axi_bvalid_stable_till_bready) else
-      $display("DMA AXI bvalid deasserted without bready");
-
-   // Assertion to check bresp stays stable during entire bus clock
-   property dma_axi_bresp_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_bvalid & (dma_axi_bresp[1:0] != $past(dma_axi_bresp[1:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_bresp_stable: assert property (dma_axi_bresp_stable) else
-      $display("DMA AXI bresp changed in middle of bus clock");
-
-   // Assertion to check bid stays stable during entire bus clock
-   property dma_axi_bid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_bvalid & (dma_axi_bid[pt.DMA_BUS_TAG-1:0] != $past(dma_axi_bid[pt.DMA_BUS_TAG-1:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_bid_stable: assert property (dma_axi_bid_stable) else
-      $display("DMA AXI bid changed in middle of bus clock");
-
-   // Assertion to check rvalid stays stable during entire bus clock
-   property dma_axi_rvalid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_rvalid != $past(dma_axi_rvalid)) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_rvalid_stable: assert property (dma_axi_rvalid_stable) else
-      $display("DMA AXI bvalid changed in middle of bus clock");
-
-   // Assertion to check rvalid stays stable if bready is low
-   property dma_axi_rvalid_stable_till_ready;
-      @(posedge clk) disable iff(~rst_l)  (~dma_axi_rvalid && $past(dma_axi_rvalid)) |-> $past(dma_axi_rready);
-   endproperty
-   assert_dma_axi_rvalid_stable_till_ready: assert property (dma_axi_rvalid_stable_till_ready) else
-      $display("DMA AXI bvalid changed in middle of bus clock");
-
-   // Assertion to check rresp stays stable during entire bus clock
-   property dma_axi_rresp_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_rvalid & (dma_axi_rresp[1:0] != $past(dma_axi_rresp[1:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_rresp_stable: assert property (dma_axi_rresp_stable) else
-      $display("DMA AXI bresp changed in middle of bus clock");
-
-   // Assertion to check rid stays stable during entire bus clock
-   property dma_axi_rid_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_rvalid & (dma_axi_rid[pt.DMA_BUS_TAG-1:0] != $past(dma_axi_rid[pt.DMA_BUS_TAG-1:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_rid_stable: assert property (dma_axi_rid_stable) else
-      $display("DMA AXI bid changed in middle of bus clock");
-
-   // Assertion to check rdata stays stable during entire bus clock
-   property dma_axi_rdata_stable;
-      @(posedge clk) disable iff(~rst_l)  (dma_axi_rvalid & (dma_axi_rdata[63:0] != $past(dma_axi_rdata[63:0]))) |-> $past(dma_bus_clk_en);
-   endproperty
-   assert_dma_axi_rdata_stable: assert property (dma_axi_rdata_stable) else
-      $display("DMA AXI bid changed in middle of bus clock");
-
-`endif
-
-endmodule // eb1_dma_ctrl
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_exu.sv b/verilog/rtl/BrqRV_EB1/design/eb1_exu.sv
deleted file mode 100644
index 5df586a..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_exu.sv
+++ /dev/null
@@ -1,369 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)
-  (
-   input logic          clk,                                           // Top level clock
-   input logic          rst_l,                                         // Reset
-   input logic          scan_mode,                                     // Scan control
-
-   input logic  [1:0]   dec_data_en,                                   // Clock enable {x,r}, one cycle pulse
-   input logic  [1:0]   dec_ctl_en,                                    // Clock enable {x,r}, two cycle pulse
-   input logic  [31:0]  dbg_cmd_wrdata,                                // Debug data   to primary I0 RS1
-   input eb1_alu_pkt_t i0_ap,                                         // DEC alu {valid,predecodes}
-
-   input logic          dec_debug_wdata_rs1_d,                         // Debug select to primary I0 RS1
-
-   input eb1_predict_pkt_t dec_i0_predict_p_d,                        // DEC branch predict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   input logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   input logic  [31:0]  lsu_result_m,                                  // Load result M-stage
-   input logic  [31:0]  lsu_nonblock_load_data,                        // nonblock load data
-   input logic          dec_i0_rs1_en_d,                               // Qualify GPR RS1 data
-   input logic          dec_i0_rs2_en_d,                               // Qualify GPR RS2 data
-   input logic  [31:0]  gpr_i0_rs1_d,                                  // DEC data gpr
-   input logic  [31:0]  gpr_i0_rs2_d,                                  // DEC data gpr
-   input logic  [31:0]  dec_i0_immed_d,                                // DEC data immediate
-   input logic  [31:0]  dec_i0_result_r,                               // DEC result in R-stage
-   input logic  [12:1]  dec_i0_br_immed_d,                             // Branch immediate
-   input logic          dec_i0_alu_decode_d,                           // Valid to X-stage ALU
-   input logic          dec_i0_branch_d,                               // Branch in D-stage
-   input logic          dec_i0_select_pc_d,                            // PC select to RS1
-   input logic  [31:1]  dec_i0_pc_d,                                   // Instruction PC
-   input logic  [3:0]   dec_i0_rs1_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic  [3:0]   dec_i0_rs2_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic          dec_csr_ren_d,                                 // CSR read select
-   input logic  [31:0]  dec_csr_rddata_d,                              // CSR read data
-
-   input logic          dec_qual_lsu_d,                                // LSU instruction at D.  Use to quiet LSU operands
-   input eb1_mul_pkt_t mul_p,                                         // DEC {valid, operand signs, low, operand bypass}
-   input eb1_div_pkt_t div_p,                                         // DEC {valid, unsigned, rem}
-   input logic          dec_div_cancel,                                // Cancel the divide operation
-
-   input logic  [31:1]  pred_correct_npc_x,                            // DEC NPC for correctly predicted branch
-
-   input logic          dec_tlu_flush_lower_r,                         // Flush divide and secondary ALUs
-   input logic  [31:1]  dec_tlu_flush_path_r,                          // Redirect target
-
-
-   input logic         dec_extint_stall,                               // External stall mux select
-   input logic [31:2]  dec_tlu_meihap,                                 // External stall mux data
-
-
-   output logic [31:0]  exu_lsu_rs1_d,                                 // LSU operand
-   output logic [31:0]  exu_lsu_rs2_d,                                 // LSU operand
-
-   output logic         exu_flush_final,                               // Pipe is being flushed this cycle
-   output logic [31:1]  exu_flush_path_final,                          // Target for the oldest flush source
-
-   output logic [31:0]  exu_i0_result_x,                               // Primary ALU result to DEC
-   output logic [31:1]  exu_i0_pc_x,                                   // Primary PC  result to DEC
-   output logic [31:0]  exu_csr_rs1_x,                                 // RS1 source for a CSR instruction
-
-   output logic [31:1]  exu_npc_r,                                     // Divide NPC
-   output logic [1:0]   exu_i0_br_hist_r,                              // to DEC  I0 branch history
-   output logic         exu_i0_br_error_r,                             // to DEC  I0 branch error
-   output logic         exu_i0_br_start_error_r,                       // to DEC  I0 branch start error
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r,     // to DEC  I0 branch index
-   output logic         exu_i0_br_valid_r,                             // to DEC  I0 branch valid
-   output logic         exu_i0_br_mp_r,                                // to DEC  I0 branch mispredict
-   output logic         exu_i0_br_middle_r,                            // to DEC  I0 branch middle
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r,               // to DEC  I0 branch fghr
-   output logic         exu_i0_br_way_r,                               // to DEC  I0 branch way
-
-   output eb1_predict_pkt_t exu_mp_pkt,                               // Mispredict branch packet
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr,                    // Mispredict global history
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   output logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-
-   output logic         exu_pmu_i0_br_misp,                            // to PMU - I0 E4 branch mispredict
-   output logic         exu_pmu_i0_br_ataken,                          // to PMU - I0 E4 taken
-   output logic         exu_pmu_i0_pc4,                                // to PMU - I0 E4 PC
-
-
-   output logic [31:0]  exu_div_result,                                // Divide result
-   output logic         exu_div_wren                                   // Divide write enable to GPR
-  );
-
-
-
-
-   logic [31:0]                i0_rs1_bypass_data_d;
-   logic [31:0]                i0_rs2_bypass_data_d;
-   logic                       i0_rs1_bypass_en_d;
-   logic                       i0_rs2_bypass_en_d;
-   logic [31:0]                i0_rs1_d,  i0_rs2_d;
-   logic [31:0]                muldiv_rs1_d;
-   logic [31:1]                pred_correct_npc_r;
-   logic                       i0_pred_correct_upper_r;
-   logic [31:1]                i0_flush_path_upper_r;
-   logic                       x_data_en, x_data_en_q1, x_data_en_q2, r_data_en, r_data_en_q2;
-   logic                       x_ctl_en,  r_ctl_en;
-
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_d_ns, ghr_d;
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_x_ns, ghr_x;
-   logic                       i0_taken_d;
-   logic                       i0_taken_x;
-   logic                       i0_valid_d;
-   logic                       i0_valid_x;
-   logic [pt.BHT_GHR_SIZE-1:0] after_flush_eghr;
-
-   eb1_predict_pkt_t          final_predict_mp;
-   eb1_predict_pkt_t          i0_predict_newp_d;
-
-   logic                       flush_in_d;
-   logic [31:0]                alu_result_x;
-
-   logic                       mul_valid_x;
-   logic [31:0]                mul_result_x;
-
-   eb1_predict_pkt_t          i0_pp_r;
-
-   logic                       i0_flush_upper_d;
-   logic [31:1]                i0_flush_path_d;
-   eb1_predict_pkt_t          i0_predict_p_d;
-   logic                       i0_pred_correct_upper_d;
-
-   logic                       i0_flush_upper_x;
-   logic [31:1]                i0_flush_path_x;
-   eb1_predict_pkt_t          i0_predict_p_x;
-   logic                       i0_pred_correct_upper_x;
-   logic                       i0_branch_x;
-
-   localparam PREDPIPESIZE = pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1+pt.BHT_GHR_SIZE+pt.BTB_BTAG_SIZE;
-   logic [PREDPIPESIZE-1:0]    predpipe_d, predpipe_x, predpipe_r, final_predpipe_mp;
-
-
-
-
-   rvdffpcie #(31)                       i_flush_path_x_ff    (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_flush_path_d[31:1]         ),  .dout( i0_flush_path_x[31:1]      ) );
-   rvdffe #(32)                          i_csr_rs1_x_ff       (.*, .clk(clk),        .en ( x_data_en_q1  ),  .din ( i0_rs1_d[31:0]                ),  .dout( exu_csr_rs1_x[31:0]        ) );
-   rvdffppe #($bits(eb1_predict_pkt_t)) i_predictpacket_x_ff (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_predict_p_d                ),  .dout( i0_predict_p_x             ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_x_ff      (.*, .clk(clk),        .en ( x_data_en_q2  ),  .din ( predpipe_d                    ),  .dout( predpipe_x                 ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_r_ff      (.*, .clk(clk),        .en ( r_data_en_q2  ),  .din ( predpipe_x                    ),  .dout( predpipe_r                 ) );
-
-   rvdffe #(4+pt.BHT_GHR_SIZE)          i_x_ff               (.*, .clk(clk),        .en ( x_ctl_en      ),  .din ({i0_valid_d,i0_taken_d,i0_flush_upper_d,i0_pred_correct_upper_d,ghr_x_ns[pt.BHT_GHR_SIZE-1:0]} ),
-                                                                                                            .dout({i0_valid_x,i0_taken_x,i0_flush_upper_x,i0_pred_correct_upper_x,ghr_x[pt.BHT_GHR_SIZE-1:0]}    ) );
-
-   rvdffppe #($bits(eb1_predict_pkt_t)+1) i_r_ff0         (.*, .clk(clk),        .en ( r_ctl_en      ),  .din ({i0_pred_correct_upper_x, i0_predict_p_x}),
-                                                                                                          .dout({i0_pred_correct_upper_r, i0_pp_r       }) );
-
-   rvdffpcie #(31)                      i_flush_r_ff         (.*, .clk(clk),        .en ( r_data_en     ),  .din ( i0_flush_path_x[31:1]         ),  .dout( i0_flush_path_upper_r[31:1]) );
-   rvdffpcie #(31)                      i_npc_r_ff           (.*, .clk(clk),        .en ( r_data_en     ),  .din ( pred_correct_npc_x[31:1]      ),  .dout( pred_correct_npc_r[31:1]   ) );
-
-   rvdffie #(pt.BHT_GHR_SIZE+2,1)       i_misc_ff            (.*, .clk(clk),                                .din ({ghr_d_ns[pt.BHT_GHR_SIZE-1:0], mul_p.valid, dec_i0_branch_d}),
-                                                                                                            .dout({ghr_d[pt.BHT_GHR_SIZE-1:0]   , mul_valid_x, i0_branch_x}) );
-
-
-
-
-
-   assign predpipe_d[PREDPIPESIZE-1:0]
-                                   = {i0_predict_fghr_d, i0_predict_index_d, i0_predict_btag_d};
-
-
-   assign i0_rs1_bypass_en_d       = dec_i0_rs1_bypass_en_d[0] | dec_i0_rs1_bypass_en_d[1] | dec_i0_rs1_bypass_en_d[2] | dec_i0_rs1_bypass_en_d[3];
-   assign i0_rs2_bypass_en_d       = dec_i0_rs2_bypass_en_d[0] | dec_i0_rs2_bypass_en_d[1] | dec_i0_rs2_bypass_en_d[2] | dec_i0_rs2_bypass_en_d[3];
-
-   assign i0_rs1_bypass_data_d[31:0]=({32{dec_i0_rs1_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-   assign i0_rs2_bypass_data_d[31:0]=({32{dec_i0_rs2_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-
-   assign i0_rs1_d[31:0]           = ({32{ i0_rs1_bypass_en_d                                           }}             & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{~i0_rs1_bypass_en_d &  dec_i0_select_pc_d                     }}             & {dec_i0_pc_d[31:1],1'b0}  ) |    // for jal's
-                                     ({32{~i0_rs1_bypass_en_d &  dec_debug_wdata_rs1_d                  }}             & dbg_cmd_wrdata[31:0]      ) |
-                                     ({32{~i0_rs1_bypass_en_d & ~dec_debug_wdata_rs1_d & dec_i0_rs1_en_d}}             & gpr_i0_rs1_d[31:0]        );
-
-   assign i0_rs2_d[31:0]           = ({32{~i0_rs2_bypass_en_d & dec_i0_rs2_en_d}}                                      & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{~i0_rs2_bypass_en_d                  }}                                      & dec_i0_immed_d[31:0]      ) |
-                                     ({32{ i0_rs2_bypass_en_d                  }}                                      & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign exu_lsu_rs1_d[31:0]      = ({32{~i0_rs1_bypass_en_d & ~dec_extint_stall & dec_i0_rs1_en_d & dec_qual_lsu_d}} & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{                       dec_extint_stall                   & dec_qual_lsu_d}} & {dec_tlu_meihap[31:2],2'b0});
-
-   assign exu_lsu_rs2_d[31:0]      = ({32{~i0_rs2_bypass_en_d & ~dec_extint_stall & dec_i0_rs2_en_d & dec_qual_lsu_d}} & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{ i0_rs2_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign muldiv_rs1_d[31:0]       = ({32{~i0_rs1_bypass_en_d & dec_i0_rs1_en_d}}                                      & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d                  }}                                      & i0_rs1_bypass_data_d[31:0]);
-
-
-   assign x_data_en                =  dec_data_en[1];
-   assign x_data_en_q1             =  dec_data_en[1] & dec_csr_ren_d;
-   assign x_data_en_q2             =  dec_data_en[1] & dec_i0_branch_d;
-   assign r_data_en                =  dec_data_en[0];
-   assign r_data_en_q2             =  dec_data_en[0] & i0_branch_x;
-   assign x_ctl_en                 =  dec_ctl_en[1];
-   assign r_ctl_en                 =  dec_ctl_en[0];
-
-
-
-
-   eb1_exu_alu_ctl #(.pt(pt)) i_alu  (.*,
-                          .enable            ( x_data_en                   ),   // I
-                          .pp_in             ( i0_predict_newp_d           ),   // I
-                          .valid_in          ( dec_i0_alu_decode_d         ),   // I
-                          .flush_upper_x     ( i0_flush_upper_x            ),   // I
-                          .flush_lower_r     ( dec_tlu_flush_lower_r       ),   // I
-                          .a_in              ( i0_rs1_d[31:0]              ),   // I
-                          .b_in              ( i0_rs2_d[31:0]              ),   // I
-                          .pc_in             ( dec_i0_pc_d[31:1]           ),   // I
-                          .brimm_in          ( dec_i0_br_immed_d[12:1]     ),   // I
-                          .ap                ( i0_ap                       ),   // I
-                          .csr_ren_in        ( dec_csr_ren_d               ),   // I
-                          .csr_rddata_in     ( dec_csr_rddata_d[31:0]      ),   // I
-                          .result_ff         ( alu_result_x[31:0]          ),   // O
-                          .flush_upper_out   ( i0_flush_upper_d            ),   // O
-                          .flush_final_out   ( exu_flush_final             ),   // O
-                          .flush_path_out    ( i0_flush_path_d[31:1]       ),   // O
-                          .predict_p_out     ( i0_predict_p_d              ),   // O
-                          .pred_correct_out  ( i0_pred_correct_upper_d     ),   // O
-                          .pc_ff             ( exu_i0_pc_x[31:1]           ));  // O
-
-
-
-   eb1_exu_mul_ctl #(.pt(pt)) i_mul   (.*,
-                          .mul_p             ( mul_p              & {$bits(eb1_mul_pkt_t){mul_p.valid}} ),   // I
-                          .rs1_in            ( muldiv_rs1_d[31:0] & {32{mul_p.valid}}                    ),   // I
-                          .rs2_in            ( i0_rs2_d[31:0]     & {32{mul_p.valid}}                    ),   // I
-                          .result_x          ( mul_result_x[31:0]                                        ));  // O
-
-
-
-   eb1_exu_div_ctl #(.pt(pt)) i_div   (.*,
-                          .cancel            ( dec_div_cancel              ),   // I
-                          .dp                ( div_p                       ),   // I
-                          .dividend          ( muldiv_rs1_d[31:0]          ),   // I
-                          .divisor           ( i0_rs2_d[31:0]              ),   // I
-                          .finish_dly        ( exu_div_wren                ),   // O
-                          .out               ( exu_div_result[31:0]        ));  // O
-
-
-
-   assign exu_i0_result_x[31:0]    =  (mul_valid_x)  ?  mul_result_x[31:0]  :  alu_result_x[31:0];
-
-
-
-
-   always_comb begin
-      i0_predict_newp_d            =  dec_i0_predict_p_d;
-      i0_predict_newp_d.boffset    =  dec_i0_pc_d[1];  // from the start of inst
-   end
-
-
-   assign exu_pmu_i0_br_misp       =  i0_pp_r.misp;
-   assign exu_pmu_i0_br_ataken     =  i0_pp_r.ataken;
-   assign exu_pmu_i0_pc4           =  i0_pp_r.pc4;
-
-
-   assign i0_valid_d               =  i0_predict_p_d.valid  & dec_i0_alu_decode_d & ~dec_tlu_flush_lower_r;
-   assign i0_taken_d               = (i0_predict_p_d.ataken & dec_i0_alu_decode_d);
-
-if(pt.BTB_ENABLE==1) begin
-   // maintain GHR at D
-   assign ghr_d_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r &  i0_valid_d}} & {ghr_d[pt.BHT_GHR_SIZE-2:0], i0_taken_d}) |
-                                     ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r & ~i0_valid_d}} &  ghr_d[pt.BHT_GHR_SIZE-1:0]             ) |
-                                     ({pt.BHT_GHR_SIZE{ dec_tlu_flush_lower_r              }} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             );
-
-   // maintain GHR at X
-   assign ghr_x_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{ i0_valid_x}} & {ghr_x[pt.BHT_GHR_SIZE-2:0], i0_taken_x}) |
-                                     ({pt.BHT_GHR_SIZE{~i0_valid_x}} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             ) ;
-
-
-   assign exu_i0_br_valid_r                                 =  i0_pp_r.valid;
-   assign exu_i0_br_mp_r                                    =  i0_pp_r.misp;
-   assign exu_i0_br_way_r                                   =  i0_pp_r.way;
-   assign exu_i0_br_hist_r[1:0]                             =  {2{i0_pp_r.valid}} & i0_pp_r.hist[1:0];
-   assign exu_i0_br_error_r                                 =  i0_pp_r.br_error;
-   assign exu_i0_br_middle_r                                =  i0_pp_r.pc4 ^ i0_pp_r.boffset;
-   assign exu_i0_br_start_error_r                           =  i0_pp_r.br_start_error;
-
-   assign {exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0],
-           exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]}=  predpipe_r[PREDPIPESIZE-1:pt.BTB_BTAG_SIZE];
-
-
-   assign final_predict_mp                                  = (i0_flush_upper_x)  ?  i0_predict_p_x  :  '0;
-
-   assign final_predpipe_mp[PREDPIPESIZE-1:0]               = (i0_flush_upper_x)  ?  predpipe_x      :  '0;
-
-   assign after_flush_eghr[pt.BHT_GHR_SIZE-1:0]             = (i0_flush_upper_x & ~dec_tlu_flush_lower_r)  ?  ghr_d[pt.BHT_GHR_SIZE-1:0]  :  ghr_x[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign exu_mp_pkt.valid                                  =  final_predict_mp.valid;
-   assign exu_mp_pkt.way                                    =  final_predict_mp.way;
-   assign exu_mp_pkt.misp                                   =  final_predict_mp.misp;
-   assign exu_mp_pkt.pcall                                  =  final_predict_mp.pcall;
-   assign exu_mp_pkt.pja                                    =  final_predict_mp.pja;
-   assign exu_mp_pkt.pret                                   =  final_predict_mp.pret;
-   assign exu_mp_pkt.ataken                                 =  final_predict_mp.ataken;
-   assign exu_mp_pkt.boffset                                =  final_predict_mp.boffset;
-   assign exu_mp_pkt.pc4                                    =  final_predict_mp.pc4;
-   assign exu_mp_pkt.hist[1:0]                              =  final_predict_mp.hist[1:0];
-   assign exu_mp_pkt.toffset[11:0]                          =  final_predict_mp.toffset[11:0];
-
-   assign exu_mp_fghr[pt.BHT_GHR_SIZE-1:0]                  =  after_flush_eghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign {exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],
-           exu_mp_btag[pt.BTB_BTAG_SIZE-1:0]}               =  final_predpipe_mp[PREDPIPESIZE-pt.BHT_GHR_SIZE-1:0];
-
-   assign exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]                  =  final_predpipe_mp[PREDPIPESIZE-1:pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+pt.BTB_BTAG_SIZE+1]; // mp ghr for bht write
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign ghr_d_ns = '0;
-   assign ghr_x_ns = '0;
-   assign exu_mp_pkt = '0;
-   assign exu_mp_eghr = '0;
-   assign exu_mp_fghr = '0;
-   assign exu_mp_index = '0;
-   assign exu_mp_btag = '0;
-   assign exu_i0_br_hist_r = '0;
-   assign exu_i0_br_error_r = '0;
-   assign exu_i0_br_start_error_r = '0;
-   assign exu_i0_br_index_r = '0;
-   assign exu_i0_br_valid_r = '0;
-   assign exu_i0_br_mp_r = '0;
-   assign exu_i0_br_middle_r = '0;
-   assign exu_i0_br_fghr_r = '0;
-   assign exu_i0_br_way_r = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   assign exu_flush_path_final[31:1] = ( {31{ dec_tlu_flush_lower_r                   }} & dec_tlu_flush_path_r[31:1] ) |
-                                       ( {31{~dec_tlu_flush_lower_r & i0_flush_upper_d}} & i0_flush_path_d[31:1]      );
-
-   assign exu_npc_r[31:1]            = (i0_pred_correct_upper_r)  ?  pred_correct_npc_r[31:1]    :  i0_flush_path_upper_r[31:1];
-
-
-endmodule // eb1_exu
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_exu_alu_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_exu_alu_ctl.sv
deleted file mode 100644
index 9d05f43..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_exu_alu_ctl.sv
+++ /dev/null
@@ -1,597 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_alu_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)
-  (
-   input  logic                  clk,                // Top level clock
-   input  logic                  rst_l,              // Reset
-   input  logic                  scan_mode,          // Scan control
-
-   input  logic                  flush_upper_x,      // Branch flush from previous cycle
-   input  logic                  flush_lower_r,      // Master flush of entire pipeline
-   input  logic                  enable,             // Clock enable
-   input  logic                  valid_in,           // Valid
-   input  eb1_alu_pkt_t         ap,                 // predecodes
-   input  logic                  csr_ren_in,         // CSR select
-   input  logic        [31:0]    csr_rddata_in,      // CSR data
-   input  logic signed [31:0]    a_in,               // A operand
-   input  logic        [31:0]    b_in,               // B operand
-   input  logic        [31:1]    pc_in,              // for pc=pc+2,4 calculations
-   input  eb1_predict_pkt_t     pp_in,              // Predicted branch structure
-   input  logic        [12:1]    brimm_in,           // Branch offset
-
-
-   output logic        [31:0]    result_ff,          // final result
-   output logic                  flush_upper_out,    // Branch flush
-   output logic                  flush_final_out,    // Branch flush or flush entire pipeline
-   output logic        [31:1]    flush_path_out,     // Branch flush PC
-   output logic        [31:1]    pc_ff,              // flopped PC
-   output logic                  pred_correct_out,   // NPC control
-   output eb1_predict_pkt_t     predict_p_out       // Predicted branch structure
-  );
-
-
-   logic               [31:0]    zba_a_in;
-   logic               [31:0]    aout;
-   logic                         cout,ov,neg;
-   logic               [31:0]    lout;
-   logic               [31:0]    sout;
-   logic                         sel_shift;
-   logic                         sel_adder;
-   logic                         slt_one;
-   logic                         actual_taken;
-   logic               [31:1]    pcout;
-   logic                         cond_mispredict;
-   logic                         target_mispredict;
-   logic                         eq, ne, lt, ge;
-   logic                         any_jal;
-   logic               [1:0]     newhist;
-   logic                         sel_pc;
-   logic               [31:0]    csr_write_data;
-   logic               [31:0]    result;
-
-
-
-
-   // *** Start - BitManip ***
-
-   // Zbb
-   logic                  ap_clz;
-   logic                  ap_ctz;
-   logic                  ap_pcnt;
-   logic                  ap_sext_b;
-   logic                  ap_sext_h;
-   logic                  ap_min;
-   logic                  ap_max;
-   logic                  ap_pack;
-   logic                  ap_packu;
-   logic                  ap_packh;
-   logic                  ap_rol;
-   logic                  ap_ror;
-   logic                  ap_rev;
-   logic                  ap_rev8;
-   logic                  ap_orc_b;
-   logic                  ap_orc16;
-   logic                  ap_zbb;
-
-   // Zbs
-   logic                  ap_sbset;
-   logic                  ap_sbclr;
-   logic                  ap_sbinv;
-   logic                  ap_sbext;
-
-   // Zbr
-   logic                  ap_slo;
-   logic                  ap_sro;
-
-   // Zba
-   logic                  ap_sh1add;
-   logic                  ap_sh2add;
-   logic                  ap_sh3add;
-   logic                  ap_zba;
-
-
-
-   if (pt.BITMANIP_ZBB == 1)
-     begin
-       assign ap_clz          =  ap.clz;
-       assign ap_ctz          =  ap.ctz;
-       assign ap_pcnt         =  ap.pcnt;
-       assign ap_sext_b       =  ap.sext_b;
-       assign ap_sext_h       =  ap.sext_h;
-       assign ap_min          =  ap.min;
-       assign ap_max          =  ap.max;
-     end
-   else
-     begin
-       assign ap_clz          =  1'b0;
-       assign ap_ctz          =  1'b0;
-       assign ap_pcnt         =  1'b0;
-       assign ap_sext_b       =  1'b0;
-       assign ap_sext_h       =  1'b0;
-       assign ap_min          =  1'b0;
-       assign ap_max          =  1'b0;
-     end
-
-
-   if ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     begin
-       assign ap_pack         =  ap.pack;
-       assign ap_packu        =  ap.packu;
-       assign ap_packh        =  ap.packh;
-       assign ap_rol          =  ap.rol;
-       assign ap_ror          =  ap.ror;
-       assign ap_rev          =  ap.grev & (b_in[4:0] == 5'b11111);
-       assign ap_rev8         =  ap.grev & (b_in[4:0] == 5'b11000);
-       assign ap_orc_b        =  ap.gorc & (b_in[4:0] == 5'b00111);
-       assign ap_orc16        =  ap.gorc & (b_in[4:0] == 5'b10000);
-       assign ap_zbb          =  ap.zbb;
-     end
-   else
-     begin
-       assign ap_pack         =  1'b0;
-       assign ap_packu        =  1'b0;
-       assign ap_packh        =  1'b0;
-       assign ap_rol          =  1'b0;
-       assign ap_ror          =  1'b0;
-       assign ap_rev          =  1'b0;
-       assign ap_rev8         =  1'b0;
-       assign ap_orc_b        =  1'b0;
-       assign ap_orc16        =  1'b0;
-       assign ap_zbb          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBS == 1)
-     begin
-       assign ap_sbset        =  ap.sbset;
-       assign ap_sbclr        =  ap.sbclr;
-       assign ap_sbinv        =  ap.sbinv;
-       assign ap_sbext        =  ap.sbext;
-     end
-   else
-     begin
-       assign ap_sbset        =  1'b0;
-       assign ap_sbclr        =  1'b0;
-       assign ap_sbinv        =  1'b0;
-       assign ap_sbext        =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_slo          =  ap.slo;
-       assign ap_sro          =  ap.sro;
-     end
-   else
-     begin
-       assign ap_slo          =  1'b0;
-       assign ap_sro          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBA == 1)
-     begin
-       assign ap_sh1add       =  ap.sh1add;
-       assign ap_sh2add       =  ap.sh2add;
-       assign ap_sh3add       =  ap.sh3add;
-       assign ap_zba          =  ap.zba;
-     end
-   else
-     begin
-       assign ap_sh1add       =  1'b0;
-       assign ap_sh2add       =  1'b0;
-       assign ap_sh3add       =  1'b0;
-       assign ap_zba          =  1'b0;
-     end
-
-
-
-
-   // *** End   - BitManip ***
-
-
-
-
-   rvdffpcie #(31) i_pc_ff      (.*, .clk(clk), .en(enable),              .din(pc_in[31:1]),    .dout(pc_ff[31:1]));   // any PC is run through here - doesn't have to be alu
-   rvdffe    #(32) i_result_ff  (.*, .clk(clk), .en(enable & valid_in),   .din(result[31:0]),   .dout(result_ff[31:0]));
-
-
-
-   // immediates are just muxed into rs2
-
-   // add    =>  add=1;
-   // sub    =>  add=1; sub=1;
-
-   // and    =>  lctl=3
-   // or     =>  lctl=2
-   // xor    =>  lctl=1
-
-   // sll    =>  sctl=3
-   // srl    =>  sctl=2
-   // sra    =>  sctl=1
-
-   // slt    =>  slt
-
-   // lui    =>  lctl=2; or x0, imm20 previously << 12
-   // auipc  =>  add;   add pc, imm20 previously << 12
-
-   // beq    =>  bctl=4; add; add x0, pc, sext(offset[12:1])
-   // bne    =>  bctl=3; add; add x0, pc, sext(offset[12:1])
-   // blt    =>  bctl=2; add; add x0, pc, sext(offset[12:1])
-   // bge    =>  bctl=1; add; add x0, pc, sext(offset[12:1])
-
-   // jal    =>  rs1=pc {pc[31:1],1'b0},  rs2=sext(offset20:1]);   rd=pc+[2,4]
-   // jalr   =>  rs1=rs1,                 rs2=sext(offset20:1]);   rd=pc+[2,4]
-
-
-
-   assign zba_a_in[31:0]      = ( {32{ ap_sh1add}} & {a_in[30:0],1'b0} ) |
-                                ( {32{ ap_sh2add}} & {a_in[29:0],2'b0} ) |
-                                ( {32{ ap_sh3add}} & {a_in[28:0],3'b0} ) |
-                                ( {32{~ap_zba   }} &  a_in[31:0]       );
-
-   logic        [31:0]    bm;
-
-   assign bm[31:0]            = ( ap.sub )  ?  ~b_in[31:0]  :  b_in[31:0];
-
-   assign {cout, aout[31:0]}  = {1'b0, zba_a_in[31:0]} + {1'b0, bm[31:0]} + {32'b0, ap.sub};
-
-   assign ov                  = (~a_in[31] & ~bm[31] &  aout[31]) |
-                                ( a_in[31] &  bm[31] & ~aout[31] );
-
-   assign lt                  = (~ap.unsign & (neg ^ ov)) |
-                                ( ap.unsign & ~cout);
-
-   assign eq                  = (a_in[31:0] == b_in[31:0]);
-   assign ne                  = ~eq;
-   assign neg                 =  aout[31];
-   assign ge                  = ~lt;
-
-
-
-   assign lout[31:0]          =  ( {32{csr_ren_in       }} &  csr_rddata_in[31:0]       ) |
-                                 ( {32{ap.land & ~ap_zbb}} &  a_in[31:0] &  b_in[31:0]  ) |
-                                 ( {32{ap.lor  & ~ap_zbb}} & (a_in[31:0] |  b_in[31:0]) ) |
-                                 ( {32{ap.lxor & ~ap_zbb}} & (a_in[31:0] ^  b_in[31:0]) ) |
-                                 ( {32{ap.land &  ap_zbb}} &  a_in[31:0] & ~b_in[31:0]  ) |
-                                 ( {32{ap.lor  &  ap_zbb}} & (a_in[31:0] | ~b_in[31:0]) ) |
-                                 ( {32{ap.lxor &  ap_zbb}} & (a_in[31:0] ^ ~b_in[31:0]) );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SLO,SRO      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ROL,ROR      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBEXT        * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     shift_amount;
-   logic        [31:0]    shift_mask;
-   logic        [62:0]    shift_extend;
-   logic        [62:0]    shift_long;
-
-
-   assign shift_amount[5:0]            = ( { 6{ap.sll}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |   // [5] unused
-                                         ( { 6{ap.srl}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap.sra}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_rol}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_ror}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_slo}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_sro}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_sbext}} &          {1'b0,b_in[4:0]}  );
-
-
-   assign shift_mask[31:0]             = ( 32'hffffffff << ({5{ap.sll | ap_slo}} & b_in[4:0]) );
-
-
-   assign shift_extend[31:0]           =  a_in[31:0];
-
-   assign shift_extend[62:32]          = ( {31{ap.sra}} & {31{a_in[31]}} ) |
-                                         ( {31{ap.sll}} &     a_in[30:0] ) |
-                                         ( {31{ap_rol}} &     a_in[30:0] ) |
-                                         ( {31{ap_ror}} &     a_in[30:0] ) |
-                                         ( {31{ap_slo}} &     a_in[30:0] ) |
-                                         ( {31{ap_sro}} & {31{  1'b1  }} );
-
-
-   assign shift_long[62:0]    = ( shift_extend[62:0] >> shift_amount[4:0] );   // 62-32 unused
-
-   assign sout[31:0]          = ( shift_long[31:0] & shift_mask[31:0] ) | ( {32{ap_slo}} & ~shift_mask[31:0] );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLZ,CTZ      * * * * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_clz_ctz_sel;
-   logic        [31:0]    bitmanip_a_reverse_ff;
-   logic        [31:0]    bitmanip_lzd_in;
-   logic        [5:0]     bitmanip_dw_lzd_enc;
-   logic        [5:0]     bitmanip_clz_ctz_result;
-
-   assign bitmanip_clz_ctz_sel         =  ap_clz | ap_ctz;
-
-   assign bitmanip_a_reverse_ff[31:0]  = {a_in[0],  a_in[1],  a_in[2],  a_in[3],  a_in[4],  a_in[5],  a_in[6],  a_in[7],
-                                          a_in[8],  a_in[9],  a_in[10], a_in[11], a_in[12], a_in[13], a_in[14], a_in[15],
-                                          a_in[16], a_in[17], a_in[18], a_in[19], a_in[20], a_in[21], a_in[22], a_in[23],
-                                          a_in[24], a_in[25], a_in[26], a_in[27], a_in[28], a_in[29], a_in[30], a_in[31]};
-
-   assign bitmanip_lzd_in[31:0]        = ( {32{ap_clz}} & a_in[31:0]                 ) |
-                                         ( {32{ap_ctz}} & bitmanip_a_reverse_ff[31:0]);
-
-   logic        [31:0]    bitmanip_lzd_os;
-   integer                i;
-   logic                  found;
-
-   always_comb
-     begin
-        bitmanip_lzd_os[31:0]   =  bitmanip_lzd_in[31:0];
-        bitmanip_dw_lzd_enc[5:0]=  6'b0;
-        found = 1'b0;
-
-        for (int i=0; i<32 && found==0; i++) begin
-           if (bitmanip_lzd_os[31] == 1'b0) begin
-              bitmanip_dw_lzd_enc[5:0]=  bitmanip_dw_lzd_enc[5:0] + 6'b00_0001;
-              bitmanip_lzd_os[31:0]   =  bitmanip_lzd_os[31:0] << 1;
-           end
-           else
-              found=1'b1;
-        end
-     end
-
-
-
-   assign bitmanip_clz_ctz_result[5:0] = {6{bitmanip_clz_ctz_sel}} & {bitmanip_dw_lzd_enc[5],( {5{~bitmanip_dw_lzd_enc[5]}} & bitmanip_dw_lzd_enc[4:0] )};
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PCNT         * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     bitmanip_pcnt;
-   logic        [5:0]     bitmanip_pcnt_result;
-
-
-   integer                bitmanip_pcnt_i;
-
-   always_comb
-     begin
-       bitmanip_pcnt[5:0]               =  6'b0;
-
-       for (bitmanip_pcnt_i=0; bitmanip_pcnt_i<32; bitmanip_pcnt_i++)
-         begin
-            bitmanip_pcnt[5:0]          =  bitmanip_pcnt[5:0] + {5'b0,a_in[bitmanip_pcnt_i]};
-         end      // FOR    bitmanip_pcnt_i
-     end          // ALWAYS_COMB
-
-
-   assign bitmanip_pcnt_result[5:0]    =  {6{ap_pcnt}} & bitmanip_pcnt[5:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SEXT_B,SEXT_H  * * * * * * * * * * * * * * * * *
-
-   logic       [31:0]     bitmanip_sext_result;
-
-   assign bitmanip_sext_result[31:0]   = ( {32{ap_sext_b}} & { {24{a_in[7]}} ,a_in[7:0]  } ) |
-                                         ( {32{ap_sext_h}} & { {16{a_in[15]}},a_in[15:0] } );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  MIN,MAX,MINU,MAXU  * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_minmax_sel;
-   logic        [31:0]    bitmanip_minmax_result;
-
-   assign bitmanip_minmax_sel          =  ap_min | ap_max;
-
-
-   logic                  bitmanip_minmax_sel_a;
-
-   assign bitmanip_minmax_sel_a        =  ge  ^ ap_min;
-
-   assign bitmanip_minmax_result[31:0] = ({32{bitmanip_minmax_sel &  bitmanip_minmax_sel_a}}  &  a_in[31:0]) |
-                                         ({32{bitmanip_minmax_sel & ~bitmanip_minmax_sel_a}}  &  b_in[31:0]);
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PACK, PACKU, PACKH * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_pack_result;
-   logic        [31:0]    bitmanip_packu_result;
-   logic        [31:0]    bitmanip_packh_result;
-
-   assign bitmanip_pack_result[31:0]   = {32{ap_pack}}  & {b_in[15:0], a_in[15:0]};
-   assign bitmanip_packu_result[31:0]  = {32{ap_packu}} & {b_in[31:16],a_in[31:16]};
-   assign bitmanip_packh_result[31:0]  = {32{ap_packh}} & {16'b0,b_in[7:0],a_in[7:0]};
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  REV, REV8, ORC_B * * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_rev_result;
-   logic        [31:0]    bitmanip_rev8_result;
-   logic        [31:0]    bitmanip_orc_b_result;
-   logic        [31:0]    bitmanip_orc16_result;
-
-   assign bitmanip_rev_result[31:0]    = {32{ap_rev}}   &
-                                         {a_in[00],a_in[01],a_in[02],a_in[03],a_in[04],a_in[05],a_in[06],a_in[07],
-                                          a_in[08],a_in[09],a_in[10],a_in[11],a_in[12],a_in[13],a_in[14],a_in[15],
-                                          a_in[16],a_in[17],a_in[18],a_in[19],a_in[20],a_in[21],a_in[22],a_in[23],
-                                          a_in[24],a_in[25],a_in[26],a_in[27],a_in[28],a_in[29],a_in[30],a_in[31]};
-
-   assign bitmanip_rev8_result[31:0]   = {32{ap_rev8}}  & {a_in[7:0],a_in[15:8],a_in[23:16],a_in[31:24]};
-
-
-// uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-// {
-//      uint32_t x = rs1;
-//      int shamt = rs2 & 31;                                                        ORC.B  ORC16
-//      if (shamt &  1) x |= ((x & 0x55555555) <<  1) | ((x & 0xAAAAAAAA) >>  1);      1      0
-//      if (shamt &  2) x |= ((x & 0x33333333) <<  2) | ((x & 0xCCCCCCCC) >>  2);      1      0
-//      if (shamt &  4) x |= ((x & 0x0F0F0F0F) <<  4) | ((x & 0xF0F0F0F0) >>  4);      1      0
-//      if (shamt &  8) x |= ((x & 0x00FF00FF) <<  8) | ((x & 0xFF00FF00) >>  8);      0      0
-//      if (shamt & 16) x |= ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);      0      1
-//      return x;
-// }
-
-
-// BEFORE              31  ,   30  ,   29  ,   28  ,    27  ,   26,     25,     24
-// shamt[0]  b =    a31|a30,a31|a30,a29|a28,a29|a28, a27|a26,a27|a26,a25|a24,a25|a24
-// shamt[1]  c =    b31|b29,b30|b28,b31|b29,b30|b28, b27|b25,b26|b24,b27|b25,b26|b24
-// shamt[2]  d =    c31|c27,c30|c26,c29|c25,c28|c24, c31|c27,c30|c26,c29|c25,c28|c24
-//
-// Expand d31 =        c31         |         c27;
-//            =   b31   |   b29    |    b27   |   b25;
-//            = a31|a30 | a29|a28  |  a27|a26 | a25|a24
-
-   assign bitmanip_orc_b_result[31:0]  = {32{ap_orc_b}} & { {8{| a_in[31:24]}}, {8{| a_in[23:16]}}, {8{| a_in[15:8]}}, {8{| a_in[7:0]}} };
-
-   assign bitmanip_orc16_result[31:0]  = {32{ap_orc16}} & {     {a_in[31:16] | a_in[15:0]},             {a_in[31:16] | a_in[15:0]}      };
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBSET, ZBCLR, ZBINV  * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_sb_1hot;
-   logic        [31:0]    bitmanip_sb_data;
-
-   assign bitmanip_sb_1hot[31:0]       = ( 32'h00000001 << b_in[4:0] );
-
-   assign bitmanip_sb_data[31:0]       = ( {32{ap_sbset}} & ( a_in[31:0] |  bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbclr}} & ( a_in[31:0] & ~bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbinv}} & ( a_in[31:0] ^  bitmanip_sb_1hot[31:0]) );
-
-
-
-
-
-
-   assign sel_shift           =  ap.sll  | ap.srl | ap.sra | ap_slo | ap_sro | ap_rol | ap_ror;
-   assign sel_adder           = (ap.add  | ap.sub | ap_zba) & ~ap.slt & ~ap_min & ~ap_max;
-   assign sel_pc              =  ap.jal  | pp_in.pcall | pp_in.pja | pp_in.pret;
-   assign csr_write_data[31:0]= (ap.csr_imm)  ?  b_in[31:0]  :  a_in[31:0];
-
-   assign slt_one             =  ap.slt & lt;
-
-
-
-   assign result[31:0]        =                        lout[31:0]             |
-                                ({32{sel_shift}}    &  sout[31:0]           ) |
-                                ({32{sel_adder}}    &  aout[31:0]           ) |
-                                ({32{sel_pc}}       & {pcout[31:1],1'b0}    ) |
-                                ({32{ap.csr_write}} &  csr_write_data[31:0] ) |
-                                                      {31'b0, slt_one}        |
-                                ({32{ap_sbext}}     & {31'b0, sout[0]}      ) |
-                                                      {26'b0, bitmanip_clz_ctz_result[5:0]} |
-                                                      {26'b0, bitmanip_pcnt_result[5:0]}    |
-                                                       bitmanip_sext_result[31:0]    |
-                                                       bitmanip_minmax_result[31:0]  |
-                                                       bitmanip_pack_result[31:0]    |
-                                                       bitmanip_packu_result[31:0]   |
-                                                       bitmanip_packh_result[31:0]   |
-                                                       bitmanip_rev_result[31:0]     |
-                                                       bitmanip_rev8_result[31:0]    |
-                                                       bitmanip_orc_b_result[31:0]   |
-                                                       bitmanip_orc16_result[31:0]   |
-                                                       bitmanip_sb_data[31:0];
-
-
-
-   // *** branch handling ***
-
-   assign any_jal             =  ap.jal      |
-                                 pp_in.pcall |
-                                 pp_in.pja   |
-                                 pp_in.pret;
-
-   assign actual_taken        = (ap.beq & eq) |
-                                (ap.bne & ne) |
-                                (ap.blt & lt) |
-                                (ap.bge & ge) |
-                                 any_jal;
-
-   // for a conditional br pcout[] will be the opposite of the branch prediction
-   // for jal or pcall, it will be the link address pc+2 or pc+4
-
-   rvbradder ibradder (
-                     .pc     ( pc_in[31:1]    ),
-                     .offset ( brimm_in[12:1] ),
-                     .dout   ( pcout[31:1]    ));
-
-
-   // pred_correct is for the npc logic
-   // pred_correct indicates not to use the flush_path
-   // for any_jal pred_correct==0
-
-   assign pred_correct_out    = (valid_in & ap.predict_nt & ~actual_taken & ~any_jal) |
-                                (valid_in & ap.predict_t  &  actual_taken & ~any_jal);
-
-
-   // for any_jal adder output is the flush path
-   assign flush_path_out[31:1]= (any_jal) ? aout[31:1] : pcout[31:1];
-
-
-   // pcall and pret are included here
-   assign cond_mispredict     = (ap.predict_t  & ~actual_taken) |
-                                (ap.predict_nt &  actual_taken);
-
-
-   // target mispredicts on ret's
-
-   assign target_mispredict   =  pp_in.pret & (pp_in.prett[31:1] != aout[31:1]);
-
-   assign flush_upper_out     =   (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x   & ~flush_lower_r;
-   assign flush_final_out     = ( (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x ) |  flush_lower_r;
-
-
-   // .i 3
-   // .o 2
-   // .ilb hist[1] hist[0] taken
-   // .ob newhist[1] newhist[0]
-   // .type fd
-   //
-   // 00 0 01
-   // 01 0 01
-   // 10 0 00
-   // 11 0 10
-   // 00 1 10
-   // 01 1 00
-   // 10 1 11
-   // 11 1 11
-
-   assign newhist[1]          = ( pp_in.hist[1] &  pp_in.hist[0]) | (~pp_in.hist[0] & actual_taken);
-   assign newhist[0]          = (~pp_in.hist[1] & ~actual_taken)  | ( pp_in.hist[1] & actual_taken);
-
-   always_comb begin
-      predict_p_out           =  pp_in;
-
-      predict_p_out.misp      = ~flush_upper_x & ~flush_lower_r & (cond_mispredict | target_mispredict);
-      predict_p_out.ataken    =  actual_taken;
-      predict_p_out.hist[1]   =  newhist[1];
-      predict_p_out.hist[0]   =  newhist[0];
-
-   end
-
-
-
-endmodule // eb1_exu_alu_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_exu_div_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_exu_div_ctl.sv
deleted file mode 100644
index a3b438e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_exu_div_ctl.sv
+++ /dev/null
@@ -1,1801 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_div_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)
-  (
-   input logic           clk,                       // Top level clock
-   input logic           rst_l,                     // Reset
-   input logic           scan_mode,                 // Scan mode
-
-   input eb1_div_pkt_t  dp,                        // valid, sign, rem
-   input logic  [31:0]   dividend,                  // Numerator
-   input logic  [31:0]   divisor,                   // Denominator
-
-   input logic           cancel,                    // Cancel divide
-
-
-   output logic          finish_dly,                // Finish to match data
-   output logic [31:0]   out                        // Result
-  );
-
-
-   logic [31:0]          out_raw;
-
-   assign out[31:0] = {32{finish_dly}} & out_raw[31:0];     // Qualification added to quiet result bus while divide is iterating
-
-
-
-   if (pt.DIV_NEW == 0)
-      begin
-        eb1_exu_div_existing_1bit_cheapshortq   i_existing_1bit_div_cheapshortq (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 1) )
-      begin
-        eb1_exu_div_new_1bit_fullshortq         i_new_1bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 2) )
-      begin
-        eb1_exu_div_new_2bit_fullshortq         i_new_2bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 3) )
-      begin
-        eb1_exu_div_new_3bit_fullshortq         i_new_3bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 4) )
-      begin
-        eb1_exu_div_new_4bit_fullshortq         i_new_4bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-
-endmodule // eb1_exu_div_ctl
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_existing_1bit_cheapshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic         div_clken;
-   logic         run_in, run_state;
-   logic  [5:0]  count_in, count;
-   logic [32:0]  m_ff;
-   logic         qff_enable;
-   logic         aff_enable;
-   logic [32:0]  q_in, q_ff;
-   logic [32:0]  a_in, a_ff;
-   logic [32:0]  m_eff;
-   logic [32:0]  a_shift;
-   logic         dividend_neg_ff, divisor_neg_ff;
-   logic [31:0]  dividend_comp;
-   logic [31:0]  dividend_eff;
-   logic [31:0]  q_ff_comp;
-   logic [31:0]  q_ff_eff;
-   logic [31:0]  a_ff_comp;
-   logic [31:0]  a_ff_eff;
-   logic         sign_ff, sign_eff;
-   logic         rem_ff;
-   logic         add;
-   logic [32:0]  a_eff;
-   logic [64:0]  a_eff_shift;
-   logic         rem_correct;
-   logic         valid_ff_x;
-   logic         valid_x;
-   logic         finish;
-   logic         finish_ff;
-
-   logic         smallnum_case, smallnum_case_ff;
-   logic  [3:0]  smallnum, smallnum_ff;
-   logic         m_already_comp;
-
-   logic [4:0]   a_cls;
-   logic [4:0]   b_cls;
-   logic [5:0]   shortq_shift;
-   logic [5:0]   shortq_shift_ff;
-   logic [5:0]   shortq;
-   logic         shortq_enable;
-   logic         shortq_enable_ff;
-   logic [32:0]  short_dividend;
-   logic [3:0]   shortq_raw;
-   logic [3:0]   shortq_shift_xx;
-
-
-
-   rvdffe #(23) i_misc_ff        (.*, .clk(clk), .en(div_clken),   .din ({valid_in & ~cancel,
-                                                                          finish   & ~cancel,
-                                                                          run_in,
-                                                                          count_in[5:0],
-                                                                          (valid_in & dividend_in[31]) | (~valid_in & dividend_neg_ff),
-                                                                          (valid_in & divisor_in[31] ) | (~valid_in & divisor_neg_ff ),
-                                                                          (valid_in & sign_eff       ) | (~valid_in & sign_ff        ),
-                                                                          (valid_in & rem_in         ) | (~valid_in & rem_ff         ),
-                                                                          smallnum_case,
-                                                                          smallnum[3:0],
-                                                                          shortq_enable,
-                                                                          shortq_shift[3:0]}),
-
-                                                                   .dout({valid_ff_x,
-                                                                          finish_ff,
-                                                                          run_state,
-                                                                          count[5:0],
-                                                                          dividend_neg_ff,
-                                                                          divisor_neg_ff,
-                                                                          sign_ff,
-                                                                          rem_ff,
-                                                                          smallnum_case_ff,
-                                                                          smallnum_ff[3:0],
-                                                                          shortq_enable_ff,
-                                                                          shortq_shift_xx[3:0]}));
-
-
-   rvdffe #(33) mff              (.*, .clk(clk), .en(valid_in),    .din({signed_in & divisor_in[31], divisor_in[31:0]}),   .dout(m_ff[32:0]));
-   rvdffe #(33) qff              (.*, .clk(clk), .en(qff_enable),  .din(q_in[32:0]),                                       .dout(q_ff[32:0]));
-   rvdffe #(33) aff              (.*, .clk(clk), .en(aff_enable),  .din(a_in[32:0]),                                       .dout(a_ff[32:0]));
-
-   rvtwoscomp #(32) i_dividend_comp (.din(q_ff[31:0]),    .dout(dividend_comp[31:0]));
-   rvtwoscomp #(32) i_q_ff_comp     (.din(q_ff[31:0]),    .dout(q_ff_comp[31:0]));
-   rvtwoscomp #(32) i_a_ff_comp     (.din(a_ff[31:0]),    .dout(a_ff_comp[31:0]));
-
-
-   assign valid_x                 = valid_ff_x & ~cancel;
-
-
-   // START - short circuit logic for small numbers {{
-
-   // small number divides - any 4b / 4b is done in 1 cycle (divisor != 0)
-   // to generate espresso equations:
-   // 1.  smalldiv > smalldiv.e
-   // 2.  espresso -Dso -oeqntott smalldiv.e | addassign > smalldiv
-
-   // smallnum case does not cover divide by 0
-   assign smallnum_case           = ((q_ff[31:4] == 28'b0) & (m_ff[31:4] == 28'b0) & (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x) |
-                                    ((q_ff[31:0] == 32'b0) &                         (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x);
-
-
-   assign smallnum[3]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           );
-
-
-   assign smallnum[2]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] & ~m_ff[2]                      );
-
-
-   assign smallnum[1]             = ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                                  ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] & ~m_ff[3] &                       ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2]                      );
-
-
-   assign smallnum[0]             = (            q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[0] &            ~m_ff[3] &             m_ff[1] &  m_ff[0]) |
-                                    (            q_ff[2] &                       ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                                  q_ff[0] & ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] & ~q_ff[1] &            ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &                                             ~m_ff[2] & ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] &  m_ff[2] &  m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &             q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] & ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &             m_ff[0]) |
-                                    (           ~q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                                             ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] &             q_ff[1] &                       ~m_ff[2] &            ~m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &  m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                        m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &             q_ff[1] &             m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                        q_ff[0] &            ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &            ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &             q_ff[0] &  m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[1] &            ~m_ff[3] &             m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] &  q_ff[0] &            ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] &  m_ff[3]                                 );
-
-
-   // END   - short circuit logic for small numbers }}
-
-
-   // *** Start Short Q *** {{
-
-   assign short_dividend[31:0]    =  q_ff[31:0];
-   assign short_dividend[32]      =  sign_ff & q_ff[31];
-
-
-   //    A       B
-   //   210     210    SH
-   //   ---     ---    --
-   //   1xx     000     0
-   //   1xx     001     8
-   //   1xx     01x    16
-   //   1xx     1xx    24
-   //   01x     000     8
-   //   01x     001    16
-   //   01x     01x    24
-   //   01x     1xx    32
-   //   001     000    16
-   //   001     001    24
-   //   001     01x    32
-   //   001     1xx    32
-   //   000     000    24
-   //   000     001    32
-   //   000     01x    32
-   //   000     1xx    32
-
-   assign a_cls[4:3]              =  2'b0;
-   assign a_cls[2]                =  (~short_dividend[32] & (short_dividend[31:24] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[31:23] != {9{1'b1}}));
-   assign a_cls[1]                =  (~short_dividend[32] & (short_dividend[23:16] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[22:15] != {8{1'b1}}));
-   assign a_cls[0]                =  (~short_dividend[32] & (short_dividend[15:08] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[14:07] != {8{1'b1}}));
-
-   assign b_cls[4:3]              =  2'b0;
-   assign b_cls[2]                =  (~m_ff[32]           & (          m_ff[31:24] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[31:24] != {8{1'b1}}));
-   assign b_cls[1]                =  (~m_ff[32]           & (          m_ff[23:16] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[23:16] != {8{1'b1}}));
-   assign b_cls[0]                =  (~m_ff[32]           & (          m_ff[15:08] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[15:08] != {8{1'b1}}));
-
-   assign shortq_raw[3]           = ( (a_cls[2:1] == 2'b01 ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 32
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b001) );
-
-   assign shortq_raw[2]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 24
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[1]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:1] == 2'b01 ) ) |   // Shift by 16
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[0]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:0] == 3'b001) ) |   // Shift by  8
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b000) );
-
-
-   assign shortq_enable           =  valid_ff_x & (m_ff[31:0] != 32'b0) & (shortq_raw[3:0] != 4'b0);
-
-   assign shortq_shift[3:0]       = ({4{shortq_enable}} & shortq_raw[3:0]);
-
-   assign shortq[5:0]             =  6'b0;
-   assign shortq_shift[5:4]       =  2'b0;
-   assign shortq_shift_ff[5]      =  1'b0;
-
-   assign shortq_shift_ff[4:0]    = ({5{shortq_shift_xx[3]}} & 5'b1_1111) |   // 31
-                                    ({5{shortq_shift_xx[2]}} & 5'b1_1000) |   // 24
-                                    ({5{shortq_shift_xx[1]}} & 5'b1_0000) |   // 16
-                                    ({5{shortq_shift_xx[0]}} & 5'b0_1000);    //  8
-
-   // *** End   Short *** }}
-
-
-
-
-
-   assign div_clken               =  valid_in | run_state | finish | finish_ff;
-
-   assign run_in                  = (valid_in | run_state) & ~finish & ~cancel;
-
-   assign count_in[5:0]           = {6{run_state & ~finish & ~cancel & ~shortq_enable}} & (count[5:0] + {1'b0,shortq_shift_ff[4:0]} + 6'd1);
-
-
-   assign finish                  = (smallnum_case | ((~rem_ff) ? (count[5:0] == 6'd32) : (count[5:0] == 6'd33)));
-
-   assign valid_out               =  finish_ff & ~cancel;
-
-   assign sign_eff                =  signed_in & (divisor_in[31:0] != 32'b0);
-
-
-   assign q_in[32:0]              = ({33{~run_state                                   }} &  {1'b0,dividend_in[31:0]}) |
-                                    ({33{ run_state &  (valid_ff_x | shortq_enable_ff)}} &  ({dividend_eff[31:0], ~a_in[32]} << shortq_shift_ff[4:0])) |
-                                    ({33{ run_state & ~(valid_ff_x | shortq_enable_ff)}} &  {q_ff[31:0], ~a_in[32]});
-
-   assign qff_enable              =  valid_in | (run_state & ~shortq_enable);
-
-
-
-
-   assign dividend_eff[31:0]      = (sign_ff & dividend_neg_ff) ? dividend_comp[31:0] : q_ff[31:0];
-
-
-   assign m_eff[32:0]             = ( add ) ? m_ff[32:0] : ~m_ff[32:0];
-
-   assign a_eff_shift[64:0]       = {33'b0, dividend_eff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_eff[32:0]             = ({33{ rem_correct                    }} &  a_ff[32:0]            ) |
-                                    ({33{~rem_correct & ~shortq_enable_ff}} & {a_ff[31:0], q_ff[32]} ) |
-                                    ({33{~rem_correct &  shortq_enable_ff}} &  a_eff_shift[64:32]    );
-
-   assign a_shift[32:0]           = {33{run_state}} & a_eff[32:0];
-
-   assign a_in[32:0]              = {33{run_state}} & (a_shift[32:0] + m_eff[32:0] + {32'b0,~add});
-
-   assign aff_enable              =  valid_in | (run_state & ~shortq_enable & (count[5:0]!=6'd33)) | rem_correct;
-
-
-   assign m_already_comp          = (divisor_neg_ff & sign_ff);
-
-   // if m already complemented, then invert operation add->sub, sub->add
-   assign add                     = (a_ff[32] | rem_correct) ^ m_already_comp;
-
-   assign rem_correct             = (count[5:0] == 6'd33) & rem_ff & a_ff[32];
-
-
-
-   assign q_ff_eff[31:0]          = (sign_ff & (dividend_neg_ff ^ divisor_neg_ff)) ? q_ff_comp[31:0] : q_ff[31:0];
-
-   assign a_ff_eff[31:0]          = (sign_ff &  dividend_neg_ff) ? a_ff_comp[31:0] : a_ff[31:0];
-
-   assign data_out[31:0]          = ({32{ smallnum_case_ff          }} & {28'b0, smallnum_ff[3:0]}) |
-                                    ({32{                     rem_ff}} &  a_ff_eff[31:0]          ) |
-                                    ({32{~smallnum_case_ff & ~rem_ff}} &  q_ff_eff[31:0]          );
-
-
-
-
-endmodule // eb1_exu_div_existing_1bit_cheapshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_1bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in, b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic                   quotient_set;
-   logic        [32:0]     adder_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {6'b0,1'b1} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[30:0],1'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & ~quotient_set & ~shortq_enable_ff;
-   assign r_adder_sel            =  running_state &  quotient_set & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff          ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[30:0] ,a_ff[31]} ) |
-                                   ( {32{r_adder_sel     }} &  adder_out[31:0]       ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]     ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]            );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[30:0], quotient_set}  ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]} ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                  );
-
-
-
-   assign adder_out[32:0]        = {r_ff[31:0],a_ff[31]} + {b_ff[32:0] };
-
-
-   assign quotient_set           = (~adder_out[32] ^ dividend_sign_ff) | ( (a_ff[30:0] == 31'b0) & (adder_out[32:0] == 33'b0) );
-
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_1bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_2bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [34:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder1_sel, r_adder2_sel, r_adder3_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [3:1]     quotient_raw;
-   logic         [1:0]     quotient_new;
-   logic        [32:0]     adder1_out;
-   logic        [33:0]     adder2_out;
-   logic        [34:0]     adder3_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:1]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(18) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:1],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:1], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b10} + {2'b0,shortq_shift_ff[4:1],1'b0});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:1],1'b0};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[29:0],2'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[1:0] == 2'b00) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[1:0] == 2'b01) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[1:0] == 2'b10) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[1:0] == 2'b11) & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff             ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[29:0] ,a_ff[31:30]} ) |
-                                   ( {32{r_adder1_sel    }} &  adder1_out[31:0]         ) |
-                                   ( {32{r_adder2_sel    }} &  adder2_out[31:0]         ) |
-                                   ( {32{r_adder3_sel    }} &  adder3_out[31:0]         ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]        ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]               );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[29:0], quotient_new[1:0]} ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                      );
-
-
-   assign b_ff[34:33]            = {b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[32:0]       = {         r_ff[30:0],a_ff[31:30]}  +                       b_ff[32:0];
-   assign adder2_out[33:0]       = {         r_ff[31:0],a_ff[31:30]}  + {b_ff[32:0],1'b0};
-   assign adder3_out[34:0]       = {r_ff[31],r_ff[31:0],a_ff[31:30]}  + {b_ff[33:0],1'b0}  +  b_ff[34:0];
-
-
-   assign quotient_raw[1]        = (~adder1_out[32] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[32:0] == 33'b0) );
-   assign quotient_raw[2]        = (~adder2_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[33:0] == 34'b0) );
-   assign quotient_raw[3]        = (~adder3_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[34:0] == 35'b0) );
-
-   assign quotient_new[1]        = quotient_raw[3] |  quotient_raw[2];
-   assign quotient_new[0]        = quotient_raw[3] |(~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);   // [0] is unused
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_2bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_3bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [32:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [36:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder1_sel, r_adder2_sel, r_adder3_sel, r_adder4_sel, r_adder5_sel, r_adder6_sel, r_adder7_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [7:1]     quotient_raw;
-   logic         [2:0]     quotient_new;
-   logic        [33:0]     adder1_out;
-   logic        [34:0]     adder2_out;
-   logic        [35:0]     adder3_out;
-   logic        [36:0]     adder4_out;
-   logic        [36:0]     adder5_out;
-   logic        [36:0]     adder6_out;
-   logic        [36:0]     adder7_out;
-
-   logic        [65:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(33) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[32:0]),           .dout(a_ff[32:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd33);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b11} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[65:0]       = { {33{dividend_sign_ff}} , a_ff[32:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[32:0]             = ( {33{~a_shift & ~shortq_enable_ff}} & {signed_in & dividend_in[31],dividend_in[31:0]} ) |
-                                   ( {33{ a_shift                    }} & {a_ff[29:0],3'b0}  ) |
-                                   ( {33{            shortq_enable_ff}} &  ar_shifted[32:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[2:0] == 3'b000) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[2:0] == 3'b001) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[2:0] == 3'b010) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[2:0] == 3'b011) & ~shortq_enable_ff;
-   assign r_adder4_sel           =  running_state & (quotient_new[2:0] == 3'b100) & ~shortq_enable_ff;
-   assign r_adder5_sel           =  running_state & (quotient_new[2:0] == 3'b101) & ~shortq_enable_ff;
-   assign r_adder6_sel           =  running_state & (quotient_new[2:0] == 3'b110) & ~shortq_enable_ff;
-   assign r_adder7_sel           =  running_state & (quotient_new[2:0] == 3'b111) & ~shortq_enable_ff;
-
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[29:0] ,a_ff[32:30]} ) |
-                                   ( {33{r_adder1_sel    }} &  adder1_out[32:0]         ) |
-                                   ( {33{r_adder2_sel    }} &  adder2_out[32:0]         ) |
-                                   ( {33{r_adder3_sel    }} &  adder3_out[32:0]         ) |
-                                   ( {33{r_adder4_sel    }} &  adder4_out[32:0]         ) |
-                                   ( {33{r_adder5_sel    }} &  adder5_out[32:0]         ) |
-                                   ( {33{r_adder6_sel    }} &  adder6_out[32:0]         ) |
-                                   ( {33{r_adder7_sel    }} &  adder7_out[32:0]         ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[65:33]        ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}         );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[28:0], quotient_new[2:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[36:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[33:0]       = {         r_ff[30:0],a_ff[32:30]}  +                                              b_ff[33:0];
-   assign adder2_out[34:0]       = {         r_ff[31:0],a_ff[32:30]}  +                        {b_ff[33:0],1'b0};
-   assign adder3_out[35:0]       = {         r_ff[32:0],a_ff[32:30]}  +                        {b_ff[34:0],1'b0}  +  b_ff[35:0];
-   assign adder4_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0};
-   assign adder5_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +                        b_ff[36:0];
-   assign adder6_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0};
-   assign adder7_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0}  +  b_ff[36:0];
-
-   assign quotient_raw[1]        = (~adder1_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[33:0] == 34'b0) );
-   assign quotient_raw[2]        = (~adder2_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[34:0] == 35'b0) );
-   assign quotient_raw[3]        = (~adder3_out[35] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[35:0] == 36'b0) );
-   assign quotient_raw[4]        = (~adder4_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder4_out[36:0] == 37'b0) );
-   assign quotient_raw[5]        = (~adder5_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder5_out[36:0] == 37'b0) );
-   assign quotient_raw[6]        = (~adder6_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder6_out[36:0] == 37'b0) );
-   assign quotient_raw[7]        = (~adder7_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder7_out[36:0] == 37'b0) );
-
-   assign quotient_new[2]        = quotient_raw[7] |   quotient_raw[6] | quotient_raw[5]  |   quotient_raw[4];
-   assign quotient_new[1]        = quotient_raw[7] |   quotient_raw[6] |                    (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[3] & quotient_raw[2]);
-   assign quotient_new[0]        = quotient_raw[7] | (~quotient_raw[6] & quotient_raw[5]) | (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd03) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd27);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_3bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_4bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [37:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder01_sel, r_adder02_sel, r_adder03_sel;
-   logic                   r_adder04_sel, r_adder05_sel, r_adder06_sel, r_adder07_sel;
-   logic                   r_adder08_sel, r_adder09_sel, r_adder10_sel, r_adder11_sel;
-   logic                   r_adder12_sel, r_adder13_sel, r_adder14_sel, r_adder15_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic        [15:1]     quotient_raw;
-   logic         [3:0]     quotient_new;
-   logic        [34:0]     adder01_out;
-   logic        [35:0]     adder02_out;
-   logic        [36:0]     adder03_out;
-   logic        [37:0]     adder04_out;
-   logic        [37:0]     adder05_out;
-   logic        [37:0]     adder06_out;
-   logic        [37:0]     adder07_out;
-   logic        [37:0]     adder08_out;
-   logic        [37:0]     adder09_out;
-   logic        [37:0]     adder10_out;
-   logic        [37:0]     adder11_out;
-   logic        [37:0]     adder12_out;
-   logic        [37:0]     adder13_out;
-   logic        [37:0]     adder14_out;
-   logic        [37:0]     adder15_out;
-
-   logic        [64:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),     .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                       .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),        .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),        .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),       .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),       .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + 7'd4 + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[64:0]       = { {33{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[27:0],4'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[3:0] == 4'd00) & ~shortq_enable_ff;
-   assign r_adder01_sel          =  running_state & (quotient_new[3:0] == 4'd01) & ~shortq_enable_ff;
-   assign r_adder02_sel          =  running_state & (quotient_new[3:0] == 4'd02) & ~shortq_enable_ff;
-   assign r_adder03_sel          =  running_state & (quotient_new[3:0] == 4'd03) & ~shortq_enable_ff;
-   assign r_adder04_sel          =  running_state & (quotient_new[3:0] == 4'd04) & ~shortq_enable_ff;
-   assign r_adder05_sel          =  running_state & (quotient_new[3:0] == 4'd05) & ~shortq_enable_ff;
-   assign r_adder06_sel          =  running_state & (quotient_new[3:0] == 4'd06) & ~shortq_enable_ff;
-   assign r_adder07_sel          =  running_state & (quotient_new[3:0] == 4'd07) & ~shortq_enable_ff;
-   assign r_adder08_sel          =  running_state & (quotient_new[3:0] == 4'd08) & ~shortq_enable_ff;
-   assign r_adder09_sel          =  running_state & (quotient_new[3:0] == 4'd09) & ~shortq_enable_ff;
-   assign r_adder10_sel          =  running_state & (quotient_new[3:0] == 4'd10) & ~shortq_enable_ff;
-   assign r_adder11_sel          =  running_state & (quotient_new[3:0] == 4'd11) & ~shortq_enable_ff;
-   assign r_adder12_sel          =  running_state & (quotient_new[3:0] == 4'd12) & ~shortq_enable_ff;
-   assign r_adder13_sel          =  running_state & (quotient_new[3:0] == 4'd13) & ~shortq_enable_ff;
-   assign r_adder14_sel          =  running_state & (quotient_new[3:0] == 4'd14) & ~shortq_enable_ff;
-   assign r_adder15_sel          =  running_state & (quotient_new[3:0] == 4'd15) & ~shortq_enable_ff;
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[28:0],a_ff[31:28]} ) |
-                                   ( {33{r_adder01_sel   }} &  adder01_out[32:0]       ) |
-                                   ( {33{r_adder02_sel   }} &  adder02_out[32:0]       ) |
-                                   ( {33{r_adder03_sel   }} &  adder03_out[32:0]       ) |
-                                   ( {33{r_adder04_sel   }} &  adder04_out[32:0]       ) |
-                                   ( {33{r_adder05_sel   }} &  adder05_out[32:0]       ) |
-                                   ( {33{r_adder06_sel   }} &  adder06_out[32:0]       ) |
-                                   ( {33{r_adder07_sel   }} &  adder07_out[32:0]       ) |
-                                   ( {33{r_adder08_sel   }} &  adder08_out[32:0]       ) |
-                                   ( {33{r_adder09_sel   }} &  adder09_out[32:0]       ) |
-                                   ( {33{r_adder10_sel   }} &  adder10_out[32:0]       ) |
-                                   ( {33{r_adder11_sel   }} &  adder11_out[32:0]       ) |
-                                   ( {33{r_adder12_sel   }} &  adder12_out[32:0]       ) |
-                                   ( {33{r_adder13_sel   }} &  adder13_out[32:0]       ) |
-                                   ( {33{r_adder14_sel   }} &  adder14_out[32:0]       ) |
-                                   ( {33{r_adder15_sel   }} &  adder15_out[32:0]       ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[64:32]       ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}        );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[27:0], quotient_new[3:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[37:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder01_out[34:0]      = {         r_ff[30:0],a_ff[31:28]}  +                                                                   b_ff[34:0];
-   assign adder02_out[35:0]      = {         r_ff[31:0],a_ff[31:28]}  +                                             {b_ff[34:0],1'b0};
-   assign adder03_out[36:0]      = {         r_ff[32:0],a_ff[31:28]}  +                                             {b_ff[35:0],1'b0}  +  b_ff[36:0];
-   assign adder04_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0};
-   assign adder05_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder06_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder07_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder08_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0};
-   assign adder09_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                                              b_ff[37:0];
-   assign adder10_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0};
-   assign adder11_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder12_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0};
-   assign adder13_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder14_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder15_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-
-   assign quotient_raw[01]       = (~adder01_out[34] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder01_out[34:0] == 35'b0) );
-   assign quotient_raw[02]       = (~adder02_out[35] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder02_out[35:0] == 36'b0) );
-   assign quotient_raw[03]       = (~adder03_out[36] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder03_out[36:0] == 37'b0) );
-   assign quotient_raw[04]       = (~adder04_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder04_out[37:0] == 38'b0) );
-   assign quotient_raw[05]       = (~adder05_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder05_out[37:0] == 38'b0) );
-   assign quotient_raw[06]       = (~adder06_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder06_out[37:0] == 38'b0) );
-   assign quotient_raw[07]       = (~adder07_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder07_out[37:0] == 38'b0) );
-   assign quotient_raw[08]       = (~adder08_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder08_out[37:0] == 38'b0) );
-   assign quotient_raw[09]       = (~adder09_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder09_out[37:0] == 38'b0) );
-   assign quotient_raw[10]       = (~adder10_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder10_out[37:0] == 38'b0) );
-   assign quotient_raw[11]       = (~adder11_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder11_out[37:0] == 38'b0) );
-   assign quotient_raw[12]       = (~adder12_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder12_out[37:0] == 38'b0) );
-   assign quotient_raw[13]       = (~adder13_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder13_out[37:0] == 38'b0) );
-   assign quotient_raw[14]       = (~adder14_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder14_out[37:0] == 38'b0) );
-   assign quotient_raw[15]       = (~adder15_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder15_out[37:0] == 38'b0) );
-
-
-   assign quotient_new[0]        = ( quotient_raw[15:01] == 15'b000_0000_0000_0001 ) |  //  1
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[1]        = ( quotient_raw[15:02] == 14'b000_0000_0000_001  ) |  //  2
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[2]        = ( quotient_raw[15:04] == 12'b000_0000_0000_1    ) |  //  4
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[3]        = ( quotient_raw[15:08] ==  8'b000_0000_1         ) |  //  8
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd28);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_4bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-module eb1_exu_div_cls
-  (
-   input  logic [32:0] operand,
-
-   output logic [4:0]  cls                  // Count leading sign bits - "n" format ignoring [32]
-   );
-
-
-   logic [4:0]   cls_zeros;
-   logic [4:0]   cls_ones;
-
-
-assign cls_zeros[4:0]             = ({5{operand[31]    ==  {           1'b1} }} & 5'd00) |
-                                    ({5{operand[31:30] ==  {{ 1{1'b0}},1'b1} }} & 5'd01) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b0}},1'b1} }} & 5'd02) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b0}},1'b1} }} & 5'd03) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b0}},1'b1} }} & 5'd04) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b0}},1'b1} }} & 5'd05) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b0}},1'b1} }} & 5'd06) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b0}},1'b1} }} & 5'd07) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b0}},1'b1} }} & 5'd08) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b0}},1'b1} }} & 5'd09) |
-                                    ({5{operand[31:21] ==  {{10{1'b0}},1'b1} }} & 5'd10) |
-                                    ({5{operand[31:20] ==  {{11{1'b0}},1'b1} }} & 5'd11) |
-                                    ({5{operand[31:19] ==  {{12{1'b0}},1'b1} }} & 5'd12) |
-                                    ({5{operand[31:18] ==  {{13{1'b0}},1'b1} }} & 5'd13) |
-                                    ({5{operand[31:17] ==  {{14{1'b0}},1'b1} }} & 5'd14) |
-                                    ({5{operand[31:16] ==  {{15{1'b0}},1'b1} }} & 5'd15) |
-                                    ({5{operand[31:15] ==  {{16{1'b0}},1'b1} }} & 5'd16) |
-                                    ({5{operand[31:14] ==  {{17{1'b0}},1'b1} }} & 5'd17) |
-                                    ({5{operand[31:13] ==  {{18{1'b0}},1'b1} }} & 5'd18) |
-                                    ({5{operand[31:12] ==  {{19{1'b0}},1'b1} }} & 5'd19) |
-                                    ({5{operand[31:11] ==  {{20{1'b0}},1'b1} }} & 5'd20) |
-                                    ({5{operand[31:10] ==  {{21{1'b0}},1'b1} }} & 5'd21) |
-                                    ({5{operand[31:09] ==  {{22{1'b0}},1'b1} }} & 5'd22) |
-                                    ({5{operand[31:08] ==  {{23{1'b0}},1'b1} }} & 5'd23) |
-                                    ({5{operand[31:07] ==  {{24{1'b0}},1'b1} }} & 5'd24) |
-                                    ({5{operand[31:06] ==  {{25{1'b0}},1'b1} }} & 5'd25) |
-                                    ({5{operand[31:05] ==  {{26{1'b0}},1'b1} }} & 5'd26) |
-                                    ({5{operand[31:04] ==  {{27{1'b0}},1'b1} }} & 5'd27) |
-                                    ({5{operand[31:03] ==  {{28{1'b0}},1'b1} }} & 5'd28) |
-                                    ({5{operand[31:02] ==  {{29{1'b0}},1'b1} }} & 5'd29) |
-                                    ({5{operand[31:01] ==  {{30{1'b0}},1'b1} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{31{1'b0}},1'b1} }} & 5'd31) |
-                                    ({5{operand[31:00] ==  {{32{1'b0}}     } }} & 5'd00);    // Don't care case as it will be handled as special case
-
-
-assign cls_ones[4:0]              = ({5{operand[31:30] ==  {{ 1{1'b1}},1'b0} }} & 5'd00) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b1}},1'b0} }} & 5'd01) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b1}},1'b0} }} & 5'd02) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b1}},1'b0} }} & 5'd03) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b1}},1'b0} }} & 5'd04) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b1}},1'b0} }} & 5'd05) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b1}},1'b0} }} & 5'd06) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b1}},1'b0} }} & 5'd07) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b1}},1'b0} }} & 5'd08) |
-                                    ({5{operand[31:21] ==  {{10{1'b1}},1'b0} }} & 5'd09) |
-                                    ({5{operand[31:20] ==  {{11{1'b1}},1'b0} }} & 5'd10) |
-                                    ({5{operand[31:19] ==  {{12{1'b1}},1'b0} }} & 5'd11) |
-                                    ({5{operand[31:18] ==  {{13{1'b1}},1'b0} }} & 5'd12) |
-                                    ({5{operand[31:17] ==  {{14{1'b1}},1'b0} }} & 5'd13) |
-                                    ({5{operand[31:16] ==  {{15{1'b1}},1'b0} }} & 5'd14) |
-                                    ({5{operand[31:15] ==  {{16{1'b1}},1'b0} }} & 5'd15) |
-                                    ({5{operand[31:14] ==  {{17{1'b1}},1'b0} }} & 5'd16) |
-                                    ({5{operand[31:13] ==  {{18{1'b1}},1'b0} }} & 5'd17) |
-                                    ({5{operand[31:12] ==  {{19{1'b1}},1'b0} }} & 5'd18) |
-                                    ({5{operand[31:11] ==  {{20{1'b1}},1'b0} }} & 5'd19) |
-                                    ({5{operand[31:10] ==  {{21{1'b1}},1'b0} }} & 5'd20) |
-                                    ({5{operand[31:09] ==  {{22{1'b1}},1'b0} }} & 5'd21) |
-                                    ({5{operand[31:08] ==  {{23{1'b1}},1'b0} }} & 5'd22) |
-                                    ({5{operand[31:07] ==  {{24{1'b1}},1'b0} }} & 5'd23) |
-                                    ({5{operand[31:06] ==  {{25{1'b1}},1'b0} }} & 5'd24) |
-                                    ({5{operand[31:05] ==  {{26{1'b1}},1'b0} }} & 5'd25) |
-                                    ({5{operand[31:04] ==  {{27{1'b1}},1'b0} }} & 5'd26) |
-                                    ({5{operand[31:03] ==  {{28{1'b1}},1'b0} }} & 5'd27) |
-                                    ({5{operand[31:02] ==  {{29{1'b1}},1'b0} }} & 5'd28) |
-                                    ({5{operand[31:01] ==  {{30{1'b1}},1'b0} }} & 5'd29) |
-                                    ({5{operand[31:00] ==  {{31{1'b1}},1'b0} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{32{1'b1}}     } }} & 5'd31);
-
-
-assign cls[4:0]                   =  operand[32]  ?  cls_ones[4:0]  :  cls_zeros[4:0];
-
-endmodule // eb1_exu_div_cls
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_exu_mul_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_exu_mul_ctl.sv
deleted file mode 100644
index 345d5f4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_exu_mul_ctl.sv
+++ /dev/null
@@ -1,627 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_mul_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic          clk,              // Top level clock
-   input logic          rst_l,            // Reset
-   input logic          scan_mode,        // Scan mode
-
-   input eb1_mul_pkt_t mul_p,            // {Valid, RS1 signed operand, RS2 signed operand, Select low 32-bits of result}
-
-   input logic [31:0]   rs1_in,           // A operand
-   input logic [31:0]   rs2_in,           // B operand
-
-
-   output logic [31:0]  result_x          // Result
-  );
-
-
-   logic                mul_x_enable;
-   logic                bit_x_enable;
-   logic signed [32:0]  rs1_ext_in;
-   logic signed [32:0]  rs2_ext_in;
-   logic        [65:0]  prod_x;
-   logic                low_x;
-
-
-
-   // *** Start - BitManip ***
-
-   logic                bitmanip_sel_d;
-   logic                bitmanip_sel_x;
-   logic        [31:0]  bitmanip_d;
-   logic        [31:0]  bitmanip_x;
-
-
-
-   // ZBE
-   logic                ap_bext;
-   logic                ap_bdep;
-
-   // ZBC
-   logic                ap_clmul;
-   logic                ap_clmulh;
-   logic                ap_clmulr;
-
-   // ZBP
-   logic                ap_grev;
-   logic                ap_gorc;
-   logic                ap_shfl;
-   logic                ap_unshfl;
-
-   // ZBR
-   logic                ap_crc32_b;
-   logic                ap_crc32_h;
-   logic                ap_crc32_w;
-   logic                ap_crc32c_b;
-   logic                ap_crc32c_h;
-   logic                ap_crc32c_w;
-
-   // ZBF
-   logic                ap_bfp;
-
-
-   if (pt.BITMANIP_ZBE == 1)
-     begin
-       assign ap_bext         =  mul_p.bext;
-       assign ap_bdep         =  mul_p.bdep;
-     end
-   else
-     begin
-       assign ap_bext         =  1'b0;
-       assign ap_bdep         =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBC == 1)
-     begin
-       assign ap_clmul        =  mul_p.clmul;
-       assign ap_clmulh       =  mul_p.clmulh;
-       assign ap_clmulr       =  mul_p.clmulr;
-     end
-   else
-     begin
-       assign ap_clmul        =  1'b0;
-       assign ap_clmulh       =  1'b0;
-       assign ap_clmulr       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_grev         =  mul_p.grev;
-       assign ap_gorc         =  mul_p.gorc;
-       assign ap_shfl         =  mul_p.shfl;
-       assign ap_unshfl       =  mul_p.unshfl;
-     end
-   else
-     begin
-       assign ap_grev         =  1'b0;
-       assign ap_gorc         =  1'b0;
-       assign ap_shfl         =  1'b0;
-       assign ap_unshfl       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBR == 1)
-     begin
-       assign ap_crc32_b      =  mul_p.crc32_b;
-       assign ap_crc32_h      =  mul_p.crc32_h;
-       assign ap_crc32_w      =  mul_p.crc32_w;
-       assign ap_crc32c_b     =  mul_p.crc32c_b;
-       assign ap_crc32c_h     =  mul_p.crc32c_h;
-       assign ap_crc32c_w     =  mul_p.crc32c_w;
-     end
-   else
-     begin
-       assign ap_crc32_b      =  1'b0;
-       assign ap_crc32_h      =  1'b0;
-       assign ap_crc32_w      =  1'b0;
-       assign ap_crc32c_b     =  1'b0;
-       assign ap_crc32c_h     =  1'b0;
-       assign ap_crc32c_w     =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBF == 1)
-     begin
-       assign ap_bfp          =  mul_p.bfp;
-     end
-   else
-     begin
-       assign ap_bfp          =  1'b0;
-     end
-
-
-   // *** End   - BitManip ***
-
-
-
-   assign mul_x_enable           =  mul_p.valid;
-   assign bit_x_enable           =  mul_p.valid;
-
-   assign rs1_ext_in[32]         =  mul_p.rs1_sign & rs1_in[31];
-   assign rs2_ext_in[32]         =  mul_p.rs2_sign & rs2_in[31];
-
-   assign rs1_ext_in[31:0]       =  rs1_in[31:0];
-   assign rs2_ext_in[31:0]       =  rs2_in[31:0];
-
-
-
-   // --------------------------- Multiply       ----------------------------------
-
-
-   logic signed [32:0]  rs1_x;
-   logic signed [32:0]  rs2_x;
-
-   rvdffe #(34) i_a_x_ff         (.*, .clk(clk),  .din({mul_p.low,rs1_ext_in[32:0]}),        .dout({low_x,rs1_x[32:0]}),                 .en(mul_x_enable));
-   rvdffe #(33) i_b_x_ff         (.*, .clk(clk),  .din(           rs2_ext_in[32:0] ),        .dout(       rs2_x[32:0] ),                 .en(mul_x_enable));
-
-
-   assign prod_x[65:0]           =  rs1_x  *  rs2_x;
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BEXT, BDEP   * * * * * * * * * * * * * * * * * *
-
-
-   // *** BEXT == "gather"  ***
-
-   logic        [31:0]    bext_d;
-   logic                  bext_test_bit_d;
-   integer                bext_i, bext_j;
-
-
-   always_comb
-     begin
-
-       bext_j                    =      0;
-       bext_test_bit_d           =   1'b0;
-       bext_d[31:0]              =  32'b0;
-
-       for (bext_i=0; bext_i<32; bext_i++)
-         begin
-             bext_test_bit_d     =  rs2_in[bext_i];
-             if (bext_test_bit_d)
-               begin
-                  bext_d[bext_j] =  rs1_in[bext_i];
-                  bext_j         =  bext_j + 1;
-               end  // IF  bext_test_bit
-         end        // FOR bext_i
-     end            // ALWAYS_COMB
-
-
-
-   // *** BDEP == "scatter" ***
-
-   logic        [31:0]    bdep_d;
-   logic                  bdep_test_bit_d;
-   integer                bdep_i, bdep_j;
-
-
-   always_comb
-     begin
-
-       bdep_j                    =      0;
-       bdep_test_bit_d           =   1'b0;
-       bdep_d[31:0]              =  32'b0;
-
-       for (bdep_i=0; bdep_i<32; bdep_i++)
-         begin
-             bdep_test_bit_d     =  rs2_in[bdep_i];
-             if (bdep_test_bit_d)
-               begin
-                  bdep_d[bdep_i] =  rs1_in[bdep_j];
-                  bdep_j         =  bdep_j + 1;
-               end  // IF  bdep_test_bit
-         end        // FOR bdep_i
-     end            // ALWAYS_COMB
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLMUL, CLMULH, CLMULR  * * * * * * * * * * * * *
-
-   logic        [62:0]    clmul_raw_d;
-
-
-   assign clmul_raw_d[62:0]      = ( {63{rs2_in[00]}} & {31'b0,rs1_in[31:0]      } ) ^
-                                   ( {63{rs2_in[01]}} & {30'b0,rs1_in[31:0], 1'b0} ) ^
-                                   ( {63{rs2_in[02]}} & {29'b0,rs1_in[31:0], 2'b0} ) ^
-                                   ( {63{rs2_in[03]}} & {28'b0,rs1_in[31:0], 3'b0} ) ^
-                                   ( {63{rs2_in[04]}} & {27'b0,rs1_in[31:0], 4'b0} ) ^
-                                   ( {63{rs2_in[05]}} & {26'b0,rs1_in[31:0], 5'b0} ) ^
-                                   ( {63{rs2_in[06]}} & {25'b0,rs1_in[31:0], 6'b0} ) ^
-                                   ( {63{rs2_in[07]}} & {24'b0,rs1_in[31:0], 7'b0} ) ^
-                                   ( {63{rs2_in[08]}} & {23'b0,rs1_in[31:0], 8'b0} ) ^
-                                   ( {63{rs2_in[09]}} & {22'b0,rs1_in[31:0], 9'b0} ) ^
-                                   ( {63{rs2_in[10]}} & {21'b0,rs1_in[31:0],10'b0} ) ^
-                                   ( {63{rs2_in[11]}} & {20'b0,rs1_in[31:0],11'b0} ) ^
-                                   ( {63{rs2_in[12]}} & {19'b0,rs1_in[31:0],12'b0} ) ^
-                                   ( {63{rs2_in[13]}} & {18'b0,rs1_in[31:0],13'b0} ) ^
-                                   ( {63{rs2_in[14]}} & {17'b0,rs1_in[31:0],14'b0} ) ^
-                                   ( {63{rs2_in[15]}} & {16'b0,rs1_in[31:0],15'b0} ) ^
-                                   ( {63{rs2_in[16]}} & {15'b0,rs1_in[31:0],16'b0} ) ^
-                                   ( {63{rs2_in[17]}} & {14'b0,rs1_in[31:0],17'b0} ) ^
-                                   ( {63{rs2_in[18]}} & {13'b0,rs1_in[31:0],18'b0} ) ^
-                                   ( {63{rs2_in[19]}} & {12'b0,rs1_in[31:0],19'b0} ) ^
-                                   ( {63{rs2_in[20]}} & {11'b0,rs1_in[31:0],20'b0} ) ^
-                                   ( {63{rs2_in[21]}} & {10'b0,rs1_in[31:0],21'b0} ) ^
-                                   ( {63{rs2_in[22]}} & { 9'b0,rs1_in[31:0],22'b0} ) ^
-                                   ( {63{rs2_in[23]}} & { 8'b0,rs1_in[31:0],23'b0} ) ^
-                                   ( {63{rs2_in[24]}} & { 7'b0,rs1_in[31:0],24'b0} ) ^
-                                   ( {63{rs2_in[25]}} & { 6'b0,rs1_in[31:0],25'b0} ) ^
-                                   ( {63{rs2_in[26]}} & { 5'b0,rs1_in[31:0],26'b0} ) ^
-                                   ( {63{rs2_in[27]}} & { 4'b0,rs1_in[31:0],27'b0} ) ^
-                                   ( {63{rs2_in[28]}} & { 3'b0,rs1_in[31:0],28'b0} ) ^
-                                   ( {63{rs2_in[29]}} & { 2'b0,rs1_in[31:0],29'b0} ) ^
-                                   ( {63{rs2_in[30]}} & { 1'b0,rs1_in[31:0],30'b0} ) ^
-                                   ( {63{rs2_in[31]}} & {      rs1_in[31:0],31'b0} );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GREV         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t grev32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x = ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x = ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x = ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x = ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x = ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    grev1_d;
-   logic        [31:0]    grev2_d;
-   logic        [31:0]    grev4_d;
-   logic        [31:0]    grev8_d;
-   logic        [31:0]    grev_d;
-
-
-   assign grev1_d[31:0]       = (rs2_in[0])  ?  {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                 rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                 rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                 rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]}  :  rs1_in[31:0];
-
-   assign grev2_d[31:0]       = (rs2_in[1])  ?  {grev1_d[29:28],grev1_d[31:30],grev1_d[25:24],grev1_d[27:26],
-                                                 grev1_d[21:20],grev1_d[23:22],grev1_d[17:16],grev1_d[19:18],
-                                                 grev1_d[13:12],grev1_d[15:14],grev1_d[09:08],grev1_d[11:10],
-                                                 grev1_d[05:04],grev1_d[07:06],grev1_d[01:00],grev1_d[03:02]}  :  grev1_d[31:0];
-
-   assign grev4_d[31:0]       = (rs2_in[2])  ?  {grev2_d[27:24],grev2_d[31:28],grev2_d[19:16],grev2_d[23:20],
-                                                 grev2_d[11:08],grev2_d[15:12],grev2_d[03:00],grev2_d[07:04]}  :  grev2_d[31:0];
-
-   assign grev8_d[31:0]       = (rs2_in[3])  ?  {grev4_d[23:16],grev4_d[31:24],grev4_d[07:00],grev4_d[15:08]}  :  grev4_d[31:0];
-
-   assign grev_d[31:0]        = (rs2_in[4])  ?  {grev8_d[15:00],grev8_d[31:16]}  :  grev8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GORC         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x |= ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x |= ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x |= ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x |= ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x |= ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    gorc1_d;
-   logic        [31:0]    gorc2_d;
-   logic        [31:0]    gorc4_d;
-   logic        [31:0]    gorc8_d;
-   logic        [31:0]    gorc_d;
-
-
-   assign gorc1_d[31:0]       = ( {32{rs2_in[0]}} & {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                     rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                     rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                     rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]} ) | rs1_in[31:0];
-
-   assign gorc2_d[31:0]       = ( {32{rs2_in[1]}} & {gorc1_d[29:28],gorc1_d[31:30],gorc1_d[25:24],gorc1_d[27:26],
-                                                     gorc1_d[21:20],gorc1_d[23:22],gorc1_d[17:16],gorc1_d[19:18],
-                                                     gorc1_d[13:12],gorc1_d[15:14],gorc1_d[09:08],gorc1_d[11:10],
-                                                     gorc1_d[05:04],gorc1_d[07:06],gorc1_d[01:00],gorc1_d[03:02]} ) | gorc1_d[31:0];
-
-   assign gorc4_d[31:0]       = ( {32{rs2_in[2]}} & {gorc2_d[27:24],gorc2_d[31:28],gorc2_d[19:16],gorc2_d[23:20],
-                                                     gorc2_d[11:08],gorc2_d[15:12],gorc2_d[03:00],gorc2_d[07:04]} ) | gorc2_d[31:0];
-
-   assign gorc8_d[31:0]       = ( {32{rs2_in[3]}} & {gorc4_d[23:16],gorc4_d[31:24],gorc4_d[07:00],gorc4_d[15:08]} ) | gorc4_d[31:0];
-
-   assign gorc_d[31:0]        = ( {32{rs2_in[4]}} & {gorc8_d[15:00],gorc8_d[31:16]} ) | gorc8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SHFL, UNSHLF * * * * * * * * * * * * * * * * * *
-
-   // uint32_t shuffle32_stage (uint32_t src, uint32_t maskL, uint32_t maskR, int N)
-   // {
-   //     uint32_t x  = src & ~(maskL | maskR);
-   //     x          |= ((src << N) & maskL) | ((src >> N) & maskR);
-   //     return x;
-   // }
-   //
-   //
-   //
-   // uint32_t shfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    shfl8_d;
-   logic        [31:0]    shfl4_d;
-   logic        [31:0]    shfl2_d;
-   logic        [31:0]    shfl_d;
-
-
-
-   assign shfl8_d[31:0]       = (rs2_in[3])  ?  {rs1_in[31:24],rs1_in[15:08],rs1_in[23:16],rs1_in[07:00]}      :  rs1_in[31:0];
-
-   assign shfl4_d[31:0]       = (rs2_in[2])  ?  {shfl8_d[31:28],shfl8_d[23:20],shfl8_d[27:24],shfl8_d[19:16],
-                                                 shfl8_d[15:12],shfl8_d[07:04],shfl8_d[11:08],shfl8_d[03:00]}  :  shfl8_d[31:0];
-
-   assign shfl2_d[31:0]       = (rs2_in[1])  ?  {shfl4_d[31:30],shfl4_d[27:26],shfl4_d[29:28],shfl4_d[25:24],
-                                                 shfl4_d[23:22],shfl4_d[19:18],shfl4_d[21:20],shfl4_d[17:16],
-                                                 shfl4_d[15:14],shfl4_d[11:10],shfl4_d[13:12],shfl4_d[09:08],
-                                                 shfl4_d[07:06],shfl4_d[03:02],shfl4_d[05:04],shfl4_d[01:00]}  :  shfl4_d[31:0];
-
-   assign shfl_d[31:0]        = (rs2_in[0])  ?  {shfl2_d[31],shfl2_d[29],shfl2_d[30],shfl2_d[28],shfl2_d[27],shfl2_d[25],shfl2_d[26],shfl2_d[24],
-                                                 shfl2_d[23],shfl2_d[21],shfl2_d[22],shfl2_d[20],shfl2_d[19],shfl2_d[17],shfl2_d[18],shfl2_d[16],
-                                                 shfl2_d[15],shfl2_d[13],shfl2_d[14],shfl2_d[12],shfl2_d[11],shfl2_d[09],shfl2_d[10],shfl2_d[08],
-                                                 shfl2_d[07],shfl2_d[05],shfl2_d[06],shfl2_d[04],shfl2_d[03],shfl2_d[01],shfl2_d[02],shfl2_d[00]}  :  shfl2_d[31:0];
-
-
-
-
-   // uint32_t unshfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    unshfl1_d;
-   logic        [31:0]    unshfl2_d;
-   logic        [31:0]    unshfl4_d;
-   logic        [31:0]    unshfl_d;
-
-
-   assign unshfl1_d[31:0]     = (rs2_in[0])  ?  {rs1_in[31],rs1_in[29],rs1_in[30],rs1_in[28],rs1_in[27],rs1_in[25],rs1_in[26],rs1_in[24],
-                                                 rs1_in[23],rs1_in[21],rs1_in[22],rs1_in[20],rs1_in[19],rs1_in[17],rs1_in[18],rs1_in[16],
-                                                 rs1_in[15],rs1_in[13],rs1_in[14],rs1_in[12],rs1_in[11],rs1_in[09],rs1_in[10],rs1_in[08],
-                                                 rs1_in[07],rs1_in[05],rs1_in[06],rs1_in[04],rs1_in[03],rs1_in[01],rs1_in[02],rs1_in[00]}  :  rs1_in[31:0];
-
-   assign unshfl2_d[31:0]     = (rs2_in[1])  ?  {unshfl1_d[31:30],unshfl1_d[27:26],unshfl1_d[29:28],unshfl1_d[25:24],
-                                                 unshfl1_d[23:22],unshfl1_d[19:18],unshfl1_d[21:20],unshfl1_d[17:16],
-                                                 unshfl1_d[15:14],unshfl1_d[11:10],unshfl1_d[13:12],unshfl1_d[09:08],
-                                                 unshfl1_d[07:06],unshfl1_d[03:02],unshfl1_d[05:04],unshfl1_d[01:00]}  :  unshfl1_d[31:0];
-
-   assign unshfl4_d[31:0]     = (rs2_in[2])  ?  {unshfl2_d[31:28],unshfl2_d[23:20],unshfl2_d[27:24],unshfl2_d[19:16],
-                                                 unshfl2_d[15:12],unshfl2_d[07:04],unshfl2_d[11:08],unshfl2_d[03:00]}  :  unshfl2_d[31:0];
-
-   assign unshfl_d[31:0]      = (rs2_in[3])  ?  {unshfl4_d[31:24],unshfl4_d[15:08],unshfl4_d[23:16],unshfl4_d[07:00]}  :  unshfl4_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CRC32, CRC32c  * * * * * * * * * * * * * * * * *
-
-   // ***  computed from   https: //crccalc.com  ***
-   //
-   // "a" is 8'h61 = 8'b0110_0001    (8'h61 ^ 8'hff = 8'h9e)
-   //
-   // Input must first be XORed with 32'hffff_ffff
-   //
-   //
-   // CRC32
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     e8b7be43      ffffff9e   174841bc
-   // "aa"    078a19d7      ffff9e9e   f875e628
-   // "aaaa"  ad98e545      9e9e9e9e   5267a1ba
-   //
-   //
-   //
-   // CRC32c
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     c1d04330      ffffff9e   3e2fbccf
-   // "aa"    f1f2dac2      ffff9e9e   0e0d253d
-   // "aaaa"  6a52eeb0      9e9e9e9e   95ad114f
-
-
-   logic                  crc32_all;
-   logic        [31:0]    crc32_poly_rev;
-   logic        [31:0]    crc32c_poly_rev;
-   integer                crc32_bi, crc32_hi, crc32_wi, crc32c_bi, crc32c_hi, crc32c_wi;
-   logic        [31:0]    crc32_bd, crc32_hd, crc32_wd, crc32c_bd, crc32c_hd, crc32c_wd;
-
-
-   assign crc32_all              =  ap_crc32_b  | ap_crc32_h  | ap_crc32_w | ap_crc32c_b | ap_crc32c_h | ap_crc32c_w;
-
-   assign crc32_poly_rev[31:0]   =  32'hEDB88320;    // bit reverse of 32'h04C11DB7
-   assign crc32c_poly_rev[31:0]  =  32'h82F63B78;    // bit reverse of 32'h1EDC6F41
-
-
-   always_comb
-     begin
-       crc32_bd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_bi=0; crc32_bi<8; crc32_bi++)
-         begin
-            crc32_bd[31:0] = (crc32_bd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_bd[0]}});
-         end      // FOR    crc32_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_hd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_hi=0; crc32_hi<16; crc32_hi++)
-         begin
-            crc32_hd[31:0] = (crc32_hd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_hd[0]}});
-         end      // FOR    crc32_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_wd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_wi=0; crc32_wi<32; crc32_wi++)
-         begin
-            crc32_wd[31:0] = (crc32_wd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_wd[0]}});
-         end      // FOR    crc32_wi
-     end          // ALWAYS_COMB
-
-
-
-
-   always_comb
-     begin
-       crc32c_bd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_bi=0; crc32c_bi<8; crc32c_bi++)
-         begin
-            crc32c_bd[31:0] = (crc32c_bd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_bd[0]}});
-         end      // FOR    crc32c_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_hd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_hi=0; crc32c_hi<16; crc32c_hi++)
-         begin
-            crc32c_hd[31:0] = (crc32c_hd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_hd[0]}});
-         end      // FOR    crc32c_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_wd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_wi=0; crc32c_wi<32; crc32c_wi++)
-         begin
-            crc32c_wd[31:0] = (crc32c_wd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_wd[0]}});
-         end      // FOR    crc32c_wi
-     end          // ALWAYS_COMB
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BFP          * * * * * * * * * * * * * * * * * *
-
-   logic        [4:0]     bfp_len;
-   logic        [4:0]     bfp_off;
-   logic        [31:0]    bfp_len_mask_;
-   logic        [15:0]    bfp_preshift_data;
-   logic        [63:0]    bfp_shift_data;
-   logic        [63:0]    bfp_shift_mask;
-   logic        [31:0]    bfp_result_d;
-
-
-   assign bfp_len[3:0]           =  rs2_in[27:24];
-   assign bfp_len[4]             = (bfp_len[3:0] == 4'b0);   // If LEN field is zero, then LEN=16
-   assign bfp_off[4:0]           =  rs2_in[20:16];
-
-   assign bfp_len_mask_[31:0]    =  32'hffff_ffff  <<  bfp_len[4:0];
-   assign bfp_preshift_data[15:0]=  rs2_in[15:0] & ~bfp_len_mask_[15:0];
-
-   assign bfp_shift_data[63:0]   = {16'b0,bfp_preshift_data[15:0], 16'b0,bfp_preshift_data[15:0]}  <<  bfp_off[4:0];
-   assign bfp_shift_mask[63:0]   = {bfp_len_mask_[31:0],           bfp_len_mask_[31:0]}            <<  bfp_off[4:0];
-
-   assign bfp_result_d[31:0]     = bfp_shift_data[63:32] | (rs1_in[31:0] & bfp_shift_mask[63:32]);
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  Common logic * * * * * * * * * * * * * * * * * *
-
-
-   assign bitmanip_sel_d         =  ap_bext | ap_bdep | ap_clmul | ap_clmulh | ap_clmulr | ap_grev | ap_gorc | ap_shfl | ap_unshfl | crc32_all | ap_bfp;
-
-   assign bitmanip_d[31:0]       = ( {32{ap_bext}}     &       bext_d[31:0]        ) |
-                                   ( {32{ap_bdep}}     &       bdep_d[31:0]        ) |
-                                   ( {32{ap_clmul}}    &       clmul_raw_d[31:0]   ) |
-                                   ( {32{ap_clmulh}}   & {1'b0,clmul_raw_d[62:32]} ) |
-                                   ( {32{ap_clmulr}}   &       clmul_raw_d[62:31]  ) |
-                                   ( {32{ap_grev}}     &       grev_d[31:0]        ) |
-                                   ( {32{ap_gorc}}     &       gorc_d[31:0]        ) |
-                                   ( {32{ap_shfl}}     &       shfl_d[31:0]        ) |
-                                   ( {32{ap_unshfl}}   &       unshfl_d[31:0]      ) |
-                                   ( {32{ap_crc32_b}}  &       crc32_bd[31:0]      ) |
-                                   ( {32{ap_crc32_h}}  &       crc32_hd[31:0]      ) |
-                                   ( {32{ap_crc32_w}}  &       crc32_wd[31:0]      ) |
-                                   ( {32{ap_crc32c_b}} &       crc32c_bd[31:0]     ) |
-                                   ( {32{ap_crc32c_h}} &       crc32c_hd[31:0]     ) |
-                                   ( {32{ap_crc32c_w}} &       crc32c_wd[31:0]     ) |
-                                   ( {32{ap_bfp}}      &       bfp_result_d[31:0]  );
-
-
-
-   rvdffe #(33) i_bitmanip_ff    (.*, .clk(clk),  .din({bitmanip_sel_d,bitmanip_d[31:0]}),   .dout({bitmanip_sel_x,bitmanip_x[31:0]}),   .en(bit_x_enable));
-
-
-
-
-   assign result_x[31:0]         =  ( {32{~bitmanip_sel_x & ~low_x}} & prod_x[63:32]    ) |
-                                    ( {32{~bitmanip_sel_x &  low_x}} & prod_x[31:0]     ) |
-                                                                       bitmanip_x[31:0];
-
-
-
-endmodule  // eb1_exu_mul_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu.sv
deleted file mode 100644
index 6208094..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu.sv
+++ /dev/null
@@ -1,371 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-//********************************************************************************
-// Function: Top level file for Icache, Fetch, Branch prediction & Aligner
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic rst_l,                        // reset, active low
-
-   input logic dec_i0_decode_d,              // Valid instruction at D and not blocked
-
-   input logic exu_flush_final, // flush, includes upper and lower
-   input logic dec_tlu_i0_commit_cmt , // committed i0
-   input logic dec_tlu_flush_err_wb , // flush due to parity error.
-   input logic dec_tlu_flush_noredir_wb, // don't fetch, validated with exu_flush_final
-   input logic [31:1] exu_flush_path_final, // flush fetch address
-
-   input logic [31:0]  dec_tlu_mrac_ff ,// Side_effect , cacheable for each region
-   input logic         dec_tlu_fence_i_wb, // fence.i, invalidate icache, validated with exu_flush_final
-   input logic         dec_tlu_flush_leak_one_wb, // ignore bp for leak one fetches
-
-   input logic                       dec_tlu_bpred_disable,     // disable all branch prediction
-   input logic                       dec_tlu_core_ecc_disable,  // disable ecc checking and flagging
-   input logic                       dec_tlu_force_halt,        // force halt
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-   input  logic                      ifu_bus_clk_en,
-
-   input  logic                      dma_iccm_req,
-   input  logic [31:0]               dma_mem_addr,
-   input  logic [2:0]                dma_mem_sz,
-   input  logic                      dma_mem_write,
-   input  logic [63:0]               dma_mem_wdata,
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-
-   input  logic                      dma_iccm_stall_any,
-   output logic                      iccm_dma_ecc_error,
-   output logic                      iccm_dma_rvalid,
-   output logic [63:0]               iccm_dma_rdata,
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,
-
-   output logic       ifu_pmu_instr_aligned,
-   output logic       ifu_pmu_fetch_stall,
-   output logic       ifu_ic_error_start,     // has all of the I$ ecc/parity for data/tag
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]              ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]                     ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   output logic [70:0]               ifu_ic_debug_rd_data,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select the premux data.
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]               iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-
-   output logic                      ifu_iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-
-// Perf counter sigs
-   output logic       ifu_pmu_ic_miss, // ic miss
-   output logic       ifu_pmu_ic_hit, // ic hit
-   output logic       ifu_pmu_bus_error, // iside bus error
-   output logic       ifu_pmu_bus_busy,  // iside bus busy
-   output logic       ifu_pmu_bus_trxn, // iside bus transactions
-
-
-   output logic       ifu_i0_icaf,         // Instruction 0 access fault. From Aligner to Decode
-   output logic [1:0] ifu_i0_icaf_type, // Instruction 0 access fault type
-
-   output logic  ifu_i0_valid,        // Instruction 0 valid. From Aligner to Decode
-   output logic  ifu_i0_icaf_second,  // Instruction 0 has access fault on second 2B of 4B inst
-   output logic  ifu_i0_dbecc,        // Instruction 0 has double bit ecc error
-   output logic  iccm_dma_sb_error,   // Single Bit ECC error from a DMA access
-   output logic[31:0] ifu_i0_instr,   // Instruction 0 . From Aligner to Decode
-   output logic[31:1] ifu_i0_pc,      // Instruction 0 pc. From Aligner to Decode
-   output logic ifu_i0_pc4,           // Instruction 0 is 4 byte. From Aligner to Decode
-
-   output logic ifu_miss_state_idle,   // There is no outstanding miss. Cache miss state is idle.
-
-   output eb1_br_pkt_t i0_brp,           // Instruction 0 branch packet. From Aligner to Decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr, // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag, // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // slot0 update/error pkt
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   input dec_tlu_flush_lower_wb,
-
-   output logic [15:0] ifu_i0_cinst,
-
-
-/// Icache debug
-   input  eb1_cache_debug_pkt_t        dec_tlu_ic_diag_pkt ,
-   output logic                    ifu_ic_debug_rd_data_valid,
-   output logic                                iccm_buf_correct_ecc,
-   output logic                                iccm_correction_state,
-
-   input logic scan_mode
-   );
-
-   localparam TAGWIDTH = 2 ;
-   localparam IDWIDTH  = 2 ;
-
-   logic                   ifu_fb_consume1, ifu_fb_consume2;
-   logic [31:1]            ifc_fetch_addr_f;
-   logic [31:1]            ifc_fetch_addr_bf;
-
-   logic [1:0]   ifu_fetch_val;  // valids on a 2B boundary, left justified [7] implies valid fetch
-   logic [31:1]  ifu_fetch_pc;   // starting pc of fetch
-
-   logic iccm_rd_ecc_single_err, ic_error_start;
-   assign ifu_iccm_rd_ecc_single_err = iccm_rd_ecc_single_err;
-   assign ifu_ic_error_start = ic_error_start;
-
-
-   logic        ic_write_stall;
-   logic        ic_dma_active;
-   logic        ifc_dma_access_ok;
-   logic [1:0]  ic_access_fault_f;
-   logic [1:0]  ic_access_fault_type_f;
-   logic        ifu_ic_mb_empty;
-
-   logic ic_hit_f;
-
-   logic [1:0] ifu_bp_way_f; // way indication; right justified
-   logic       ifu_bp_hit_taken_f; // kill next fetch; taken target found
-   logic [31:1] ifu_bp_btb_target_f; //  predicted target PC
-   logic        ifu_bp_inst_mask_f; // tell ic which valids to kill because of a taken branch; right justified
-   logic [1:0]  ifu_bp_hist1_f; // history counters for all 4 potential branches; right justified
-   logic [1:0]  ifu_bp_hist0_f; // history counters for all 4 potential branches; right justified
-   logic [11:0] ifu_bp_poffset_f; // predicted target
-   logic [1:0]  ifu_bp_ret_f; // predicted ret ; right justified
-   logic [1:0]  ifu_bp_pc4_f; // pc4 indication; right justified
-   logic [1:0]  ifu_bp_valid_f; // branch valid, right justified
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f;
-   logic [1:0] [$clog2(pt.BTB_SIZE)-1:0] ifu_bp_fa_index_f;
-
-
-   // fetch control
-   eb1_ifu_ifc_ctl #(.pt(pt)) ifc (.*
-                    );
-
-   // branch predictor
-   if (pt.BTB_ENABLE==1) begin  : bpred
-      eb1_ifu_bp_ctl #(.pt(pt)) bp (.*);
-   end
-   else begin : bpred
-      assign ifu_bp_hit_taken_f = '0;
-      // verif wires
-      logic btb_wr_en_way0, btb_wr_en_way1,dec_tlu_error_wb;
-      logic [16+pt.BTB_BTAG_SIZE:0] btb_wr_data;
-      assign btb_wr_en_way0 = '0;
-      assign btb_wr_en_way1 = '0;
-      assign btb_wr_data = '0;
-      assign dec_tlu_error_wb ='0;
-      assign ifu_bp_inst_mask_f = 1'b1;
-   end
-
-
-   logic [1:0]   ic_fetch_val_f;
-   logic [31:0] ic_data_f;
-   logic [31:0] ifu_fetch_data_f;
-   logic ifc_fetch_req_f;
-   logic ifc_fetch_req_f_raw;
-   logic [1:0] iccm_rd_ecc_double_err;  // This fetch has an iccm double error.
-
-   logic ifu_async_error_start;
-
-
-   assign ifu_fetch_data_f[31:0] = ic_data_f[31:0];
-   assign ifu_fetch_val[1:0] = ic_fetch_val_f[1:0];
-   assign ifu_fetch_pc[31:1] = ifc_fetch_addr_f[31:1];
-
- logic                       ifc_fetch_uncacheable_bf;      // The fetch request is uncacheable space. BF stage
- logic                       ifc_fetch_req_bf;              // Fetch request. Comes with the address.  BF stage
- logic                       ifc_fetch_req_bf_raw;          // Fetch request without some qualifications. Used for clock-gating. BF stage
- logic                       ifc_iccm_access_bf;            // This request is to the ICCM. Do not generate misses to the bus.
- logic                       ifc_region_acc_fault_bf;       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   // aligner
-
-   eb1_ifu_aln_ctl #(.pt(pt)) aln (
-                                    .*
-                                    );
-
-
-   // icache
-   eb1_ifu_mem_ctl #(.pt(pt)) mem_ctl
-     (.*,
-      .ic_data_f(ic_data_f[31:0])
-      );
-
-
-
-   // Performance debug info
-   //
-   //
-`ifdef DUMP_BTB_ON
-   logic              exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_way; // conditional branch mispredict
-   logic exu_mp_ataken; // direction is actual taken
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-
-   assign exu_mp_valid = exu_mp_pkt.misp; // conditional branch mispredict
-   assign exu_mp_ataken = exu_mp_pkt.ataken;  // direction is actual taken
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // branch is a jump always
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_f;
- `define DEC `CPU_TOP.dec
- `define EXU `CPU_TOP.exu
-   eb1_btb_addr_hash f2hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   logic [31:0] mppc_ns, mppc;
-   logic        exu_flush_final_d1;
-   assign mppc_ns[31:1] = `EXU.i0_flush_upper_x ? `EXU.exu_i0_pc_x : `EXU.dec_i0_pc_d;
-   assign mppc_ns[0] = 1'b0;
-   rvdff #(33)  junk_ff (.*, .clk(active_clk), .din({mppc_ns[31:0], exu_flush_final}), .dout({mppc[31:0], exu_flush_final_d1}));
-   logic  tmp_bnk;
-   assign tmp_bnk = bpred.bp.btb_sel_f[1];
-
-   always @(negedge clk) begin
-      if(`DEC.tlu.mcyclel[31:0] == 32'h0000_0010) begin
-         $display("BTB_CONFIG: %d",pt.BTB_SIZE);
-         `ifndef BP_NOGSHARE
-         $display("BHT_CONFIG: %d gshare: 1",pt.BHT_SIZE);
-         `else
-         $display("BHT_CONFIG: %d gshare: 0",pt.BHT_SIZE);
-         `endif
-         $display("RS_CONFIG: %d", pt.RET_STACK_SIZE);
-      end
-       if(exu_flush_final_d1 & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error) & (exu_mp_pkt.misp | exu_mp_pkt.ataken))
-         $display("%7d BTB_MP  : index: %0h bank: %0h call: %b ret: %b ataken: %b hist: %h valid: %b tag: %h targ: %h eghr: %b pred: %b ghr_index: %h brpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha, exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO], 1'b0, exu_mp_call, exu_mp_ret, exu_mp_ataken, exu_mp_hist[1:0], exu_mp_valid, exu_mp_btag[pt.BTB_BTAG_SIZE-1:0], {exu_flush_path_final[31:1], 1'b0}, exu_mp_eghr[pt.BHT_GHR_SIZE-1:0], exu_mp_valid, bpred.bp.bht_wr_addr0, mppc[31:0], exu_mp_pkt.way);
-
-     for(int i = 0; i < 8; i++) begin
-      if(ifu_bp_valid_f[i] & ifc_fetch_req_f)
-        $display("%7d BTB_HIT : index: %0h bank: %0h call: %b ret: %b taken: %b strength: %b tag: %h targ: %0h ghr: %4b ghr_index: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],bpred.bp.btb_sel_f[1], bpred.bp.btb_rd_call_f, bpred.bp.btb_rd_ret_f, ifu_bp_hist1_f[tmp_bnk], ifu_bp_hist0_f[tmp_bnk], bpred.bp.fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0], {ifu_bp_btb_target_f[31:1], 1'b0}, bpred.bp.fghr[pt.BHT_GHR_SIZE-1:0], bpred.bp.bht_rd_addr_f, ifu_bp_way_f[tmp_bnk]);
-     end
-      if(dec_tlu_br0_r_pkt.valid & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error))
-        $display("%7d BTB_UPD0: ghr_index: %0h bank: %0h hist: %h  way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,bpred.bp.br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO],{dec_tlu_br0_r_pkt.middle}, dec_tlu_br0_r_pkt.hist, dec_tlu_br0_r_pkt.way);
-
-      if(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error)
-        $display("%7d BTB_ERR0: index: %0h bank: %0h start: %b rfpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],1'b0, dec_tlu_br0_r_pkt.br_start_error, {exu_flush_path_final[31:1], 1'b0}, dec_tlu_br0_r_pkt.way);
-   end // always @ (negedge clk)
-      function [1:0] encode4_2;
-      input [3:0] in;
-
-      encode4_2[1] = in[3] | in[2];
-      encode4_2[0] = in[3] | in[1];
-
-   endfunction
-`endif
-endmodule // eb1_ifu
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_aln_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_aln_ctl.sv
deleted file mode 100644
index 2d4e822..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_aln_ctl.sv
+++ /dev/null
@@ -1,700 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Instruction aligner
-//********************************************************************************
-module eb1_ifu_aln_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-
-   input logic                                    scan_mode,                // Flop scan mode control
-   input logic                                    rst_l,                    // reset, active low
-   input logic                                    clk,                      // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                    active_clk,               // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-
-   input logic                                    ifu_async_error_start,    // ecc/parity related errors with current fetch - not sent down the pipe
-
-   input logic [1:0]                              iccm_rd_ecc_double_err,   // This fetch has a double ICCM ecc  error.
-
-   input logic [1:0]                              ic_access_fault_f,        // Instruction access fault for the current fetch.
-   input logic [1:0]                              ic_access_fault_type_f,   // Instruction access fault types
-
-   input logic                                    exu_flush_final,          // Flush from the pipeline.
-
-   input logic                                    dec_i0_decode_d,          // Valid instruction at D-stage and not blocked
-
-   input logic [31:0]                             ifu_fetch_data_f,         // fetch data in memory format - not right justified
-
-   input logic [1:0]                              ifu_fetch_val,            // valids on a 2B boundary, right justified
-   input logic [31:1]                             ifu_fetch_pc,             // starting pc of fetch
-
-
-
-   output logic                                   ifu_i0_valid,             // Instruction 0 is valid
-   output logic                                   ifu_i0_icaf,              // Instruction 0 has access fault
-   output logic [1:0]                             ifu_i0_icaf_type,         // Instruction 0 access fault type
-   output logic                                   ifu_i0_icaf_second,       // Instruction 0 has access fault on second 2B of 4B inst
-
-   output logic                                   ifu_i0_dbecc,             // Instruction 0 has double bit ecc error
-   output logic [31:0]                            ifu_i0_instr,             // Instruction 0
-   output logic [31:1]                            ifu_i0_pc,                // Instruction 0 PC
-   output logic                                   ifu_i0_pc4,
-
-   output logic                                   ifu_fb_consume1,          // Consumed one buffer. To fetch control fetch for buffer mass balance
-   output logic                                   ifu_fb_consume2,          // Consumed two buffers.To fetch control fetch for buffer mass balance
-
-
-   input logic [pt.BHT_GHR_SIZE-1:0]              ifu_bp_fghr_f,            // fetch GHR
-   input logic [31:1]                             ifu_bp_btb_target_f,      // predicted RET target
-   input logic [11:0]                             ifu_bp_poffset_f,         // predicted target offset
-   input logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f,        // predicted branch index (fully associative option)
-
-   input logic [1:0]                              ifu_bp_hist0_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_hist1_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_pc4_f,             // pc4 indication, right justified
-   input logic [1:0]                              ifu_bp_way_f,             // way indication, right justified
-   input logic [1:0]                              ifu_bp_valid_f,           // branch valid, right justified
-   input logic [1:0]                              ifu_bp_ret_f,             // predicted ret indication, right justified
-
-
-   output eb1_br_pkt_t                           i0_brp,                   // Branch packet for I0.
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]   ifu_i0_bp_index,          // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0]             ifu_i0_bp_fghr,           // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0]            ifu_i0_bp_btag,           // BP tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   output logic                                   ifu_pmu_instr_aligned,    // number of inst aligned this cycle
-
-   output logic [15:0]                            ifu_i0_cinst              // 16b compress inst for i0
-   );
-
-
-
-   logic                                          ifvalid;
-   logic                                          shift_f1_f0, shift_f2_f0, shift_f2_f1;
-   logic                                          fetch_to_f0, fetch_to_f1, fetch_to_f2;
-
-   logic [1:0]                                    f2val_in, f2val;
-   logic [1:0]                                    f1val_in, f1val;
-   logic [1:0]                                    f0val_in, f0val;
-   logic [1:0]                                    sf1val, sf0val;
-
-   logic [31:0]                                   aligndata;
-   logic                                          first4B, first2B;
-
-   logic [31:0]                                   uncompress0;
-   logic                                          i0_shift;
-   logic                                          shift_2B, shift_4B;
-   logic                                          f1_shift_2B;
-   logic                                          f2_valid, sf1_valid, sf0_valid;
-
-   logic [31:0]                                   ifirst;
-   logic [1:0]                                    alignval;
-   logic [31:1]                                   firstpc, secondpc;
-
-   logic [11:0]                                   f1poffset;
-   logic [11:0]                                   f0poffset;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f1fghr;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f0fghr;
-   logic [1:0]                                    f1hist1;
-   logic [1:0]                                    f0hist1;
-   logic [1:0]                                    f1hist0;
-   logic [1:0]                                    f0hist0;
-
-   logic [1:0][$clog2(pt.BTB_SIZE)-1:0]           f0index, f1index, alignindex;
-
-   logic [1:0]                                    f1ictype;
-   logic [1:0]                                    f0ictype;
-
-   logic [1:0]                                    f1pc4;
-   logic [1:0]                                    f0pc4;
-
-   logic [1:0]                                    f1ret;
-   logic [1:0]                                    f0ret;
-   logic [1:0]                                    f1way;
-   logic [1:0]                                    f0way;
-
-   logic [1:0]                                    f1brend;
-   logic [1:0]                                    f0brend;
-
-   logic [1:0]                                    alignbrend;
-   logic [1:0]                                    alignpc4;
-
-   logic [1:0]                                    alignret;
-   logic [1:0]                                    alignway;
-   logic [1:0]                                    alignhist1;
-   logic [1:0]                                    alignhist0;
-   logic [1:1]                                    alignfromf1;
-   logic                                          i0_ends_f1;
-   logic                                          i0_br_start_error;
-
-   logic [31:1]                                   f1prett;
-   logic [31:1]                                   f0prett;
-   logic [1:0]                                    f1dbecc;
-   logic [1:0]                                    f0dbecc;
-   logic [1:0]                                    f1icaf;
-   logic [1:0]                                    f0icaf;
-
-   logic [1:0]                                    aligndbecc;
-   logic [1:0]                                    alignicaf;
-   logic                                          i0_brp_pc4;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]          firstpc_hash, secondpc_hash;
-
-   logic                                          first_legal;
-
-   logic [1:0]                                    wrptr, wrptr_in;
-   logic [1:0]                                    rdptr, rdptr_in;
-   logic [2:0]                                    qwen;
-   logic [31:0]                                   q2,q1,q0;
-   logic                                          q2off_in, q2off;
-   logic                                          q1off_in, q1off;
-   logic                                          q0off_in, q0off;
-   logic                                          f0_shift_2B;
-
-   logic [31:0]                                   q0eff;
-   logic [31:0]                                   q0final;
-   logic                                          q0ptr;
-   logic [1:0]                                    q0sel;
-
-   logic [31:0]                                   q1eff;
-   logic [15:0]                                   q1final;
-   logic                                          q1ptr;
-   logic [1:0]                                    q1sel;
-
-   logic [2:0]                                    qren;
-
-   logic                                          consume_fb1, consume_fb0;
-   logic [1:0]                                    icaf_eff;
-
-   localparam                                     BRDATA_SIZE  = pt.BTB_ENABLE ? 16+($clog2(pt.BTB_SIZE)*2*pt.BTB_FULLYA) : 2;
-   localparam                                     BRDATA_WIDTH = pt.BTB_ENABLE ? 8+($clog2(pt.BTB_SIZE)*pt.BTB_FULLYA) : 1;
-   logic [BRDATA_SIZE-1:0]                        brdata_in, brdata2, brdata1, brdata0;
-   logic [BRDATA_SIZE-1:0]                        brdata1eff, brdata0eff;
-   logic [BRDATA_SIZE-1:0]                        brdata1final, brdata0final;
-
-   localparam                                     MHI   = 1+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-   localparam                                     MSIZE = 2+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-
-   logic [MHI:0]                                  misc_data_in, misc2, misc1, misc0;
-   logic [MHI:0]                                  misc1eff, misc0eff;
-
-   logic [pt.BTB_BTAG_SIZE-1:0]                  firstbrtag_hash, secondbrtag_hash;
-
-   logic                                         error_stall_in, error_stall;
-
-   assign error_stall_in = (error_stall | ifu_async_error_start) & ~exu_flush_final;
-
-   rvdff #(.WIDTH(7))  bundle1ff (.*,
-                                  .clk(active_clk),
-                                  .din ({wrptr_in[1:0],rdptr_in[1:0],q2off_in,q1off_in,q0off_in}),
-                                  .dout({wrptr[1:0],   rdptr[1:0],   q2off,   q1off,   q0off})
-                                  );
-
-   rvdffie #(.WIDTH(7),.OVERRIDE(1))  bundle2ff (.*,
-                                                 .din ({error_stall_in,f2val_in[1:0],f1val_in[1:0],f0val_in[1:0]}),
-                                                 .dout({error_stall,   f2val[1:0],   f1val[1:0],   f0val[1:0]   })
-                                                 );
-
-if(pt.BTB_ENABLE==1) begin
-   rvdffe #(BRDATA_SIZE)  brdata2ff   (.*, .clk(clk), .en(qwen[2]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata2[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata1ff   (.*, .clk(clk), .en(qwen[1]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata1[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata0ff   (.*, .clk(clk), .en(qwen[0]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata0[BRDATA_SIZE-1:0]));
-   rvdffe #(MSIZE)        misc2ff     (.*, .clk(clk), .en(qwen[2]),        .din(misc_data_in[MHI:0]),        .dout(misc2[MHI:0]));
-   rvdffe #(MSIZE)        misc1ff     (.*, .clk(clk), .en(qwen[1]),        .din(misc_data_in[MHI:0]),        .dout(misc1[MHI:0]));
-   rvdffe #(MSIZE)        misc0ff     (.*, .clk(clk), .en(qwen[0]),        .din(misc_data_in[MHI:0]),        .dout(misc0[MHI:0]));
-end
-else begin
-
-   rvdffie #((MSIZE*3)+(BRDATA_SIZE*3))    miscff      (.*,
-                                                        .din({qwen[2] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc2[MHI:0], brdata2[BRDATA_SIZE-1:0]},
-                                                              qwen[1] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc1[MHI:0], brdata1[BRDATA_SIZE-1:0]},
-                                                              qwen[0] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc0[MHI:0], brdata0[BRDATA_SIZE-1:0]}}),
-                                                        .dout({misc2[MHI:0],misc1[MHI:0],misc0[MHI:0],
-                                                               brdata2[BRDATA_SIZE-1:0], brdata1[BRDATA_SIZE-1:0], brdata0[BRDATA_SIZE-1:0]})
-                                                        );
-end
-
-  logic [31:1] q2pc, q1pc, q0pc;
-
-   rvdffe #(31)           q2pcff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_pc[31:1]),     .dout(q2pc[31:1]));
-   rvdffe #(31)           q1pcff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_pc[31:1]),     .dout(q1pc[31:1]));
-   rvdffe #(31)           q0pcff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_pc[31:1]),     .dout(q0pc[31:1]));
-
-   rvdffe #(32)           q2ff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_data_f[31:0]),     .dout(q2[31:0]));
-   rvdffe #(32)           q1ff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_data_f[31:0]),     .dout(q1[31:0]));
-   rvdffe #(32)           q0ff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_data_f[31:0]),     .dout(q0[31:0]));
-
-
-   // new queue control logic
-
-   assign qren[2:0]          = {  rdptr[1:0] == 2'b10,
-                                  rdptr[1:0] == 2'b01,
-                                  rdptr[1:0] == 2'b00 };
-
-   assign qwen[2:0]          = { (wrptr[1:0] == 2'b10) & ifvalid,
-                                 (wrptr[1:0] == 2'b01) & ifvalid,
-                                 (wrptr[1:0] == 2'b00) & ifvalid };
-
-
-   assign rdptr_in[1:0]      = ({2{ qren[0]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[0]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{~ifu_fb_consume1 & ~ifu_fb_consume2 & ~exu_flush_final}} & rdptr[1:0]);
-
-   assign wrptr_in[1:0]      = ({2{ qwen[0] & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qwen[1] & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qwen[2] & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{~ifvalid & ~exu_flush_final}} & wrptr[1:0]);
-
-
-
-   assign q2off_in          = ( ~qwen[2] & (rdptr[1:0]==2'd2)  &  (q2off | f0_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd1)  &  (q2off | f1_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd0)  &   q2off                );
-
-   assign q1off_in          = ( ~qwen[1] & (rdptr[1:0]==2'd1)  &  (q1off | f0_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd0)  &  (q1off | f1_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd2)  &   q1off                );
-
-   assign q0off_in          = ( ~qwen[0] & (rdptr[1:0]==2'd0)  &  (q0off | f0_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd2)  &  (q0off | f1_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd1)  &   q0off                );
-
-
-
-   assign q0ptr              = ( (rdptr[1:0]==2'b00) & q0off ) |
-                               ( (rdptr[1:0]==2'b01) & q1off ) |
-                               ( (rdptr[1:0]==2'b10) & q2off );
-
-   assign q1ptr              = ( (rdptr[1:0]==2'b00) & q1off ) |
-                               ( (rdptr[1:0]==2'b01) & q2off ) |
-                               ( (rdptr[1:0]==2'b10) & q0off );
-
-   assign q0sel[1:0]         = {q0ptr,~q0ptr};
-
-   assign q1sel[1:0]         = {q1ptr,~q1ptr};
-
-   // end new queue control logic
-
-
-   // misc data that is associated with each fetch buffer
-
-   if(pt.BTB_ENABLE==1)
-     assign misc_data_in[MHI:0] = {
-
-                                    ic_access_fault_type_f[1:0],
-                                    ifu_bp_btb_target_f[31:1],
-                                    ifu_bp_poffset_f[11:0],
-                                    ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0]
-                                    };
-   else
-     assign misc_data_in[MHI:0] = {
-                                    ic_access_fault_type_f[1:0]
-                                    };
-
-
-   assign {misc1eff[MHI:0],misc0eff[MHI:0]} = (({MSIZE*2{qren[0]}} & {misc1[MHI:0],misc0[MHI:0]}) |
-                                               ({MSIZE*2{qren[1]}} & {misc2[MHI:0],misc1[MHI:0]}) |
-                                               ({MSIZE*2{qren[2]}} & {misc0[MHI:0],misc2[MHI:0]}));
-
-   if(pt.BTB_ENABLE==1) begin
-   assign {
-            f1ictype[1:0],
-            f1prett[31:1],
-            f1poffset[11:0],
-            f1fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc1eff[MHI:0];
-
-   assign {
-            f0ictype[1:0],
-            f0prett[31:1],
-            f0poffset[11:0],
-            f0fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc0eff[MHI:0];
-
-      if(pt.BTB_FULLYA) begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               ifu_bp_fa_index_f[1], iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               ifu_bp_fa_index_f[0], iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0index[1],f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0index[0],f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1index[1],f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1index[0],f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-      else begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-
-
-
-
-   assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-   assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // if (pt.BTB_ENABLE==1)
-   else begin
-      assign {
-               f1ictype[1:0]
-               } = misc1eff[MHI:0];
-
-      assign {
-               f0ictype[1:0]
-               } = misc0eff[MHI:0];
-
-      assign brdata_in[BRDATA_SIZE-1:0] = {
-                                            iccm_rd_ecc_double_err[1],ic_access_fault_f[1],
-                                            iccm_rd_ecc_double_err[0],ic_access_fault_f[0]
-                                            };
-      assign {f0dbecc[1],f0icaf[1],
-              f0dbecc[0],f0icaf[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-      assign {f1dbecc[1],f1icaf[1],
-              f1dbecc[0],f1icaf[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                          ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-      assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-      assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // possible states of { sf0_valid, sf1_valid, f2_valid }
-   //
-   // 000    if->f0
-   // 100    if->f1
-   // 101    illegal
-   // 010    if->f1, f1->f0
-   // 110    if->f2
-   // 001    if->f1, f2->f0
-   // 011    if->f2, f2->f1, f1->f0
-   // 111   !if,     no shift
-
-   assign f2_valid           =  f2val[0];
-   assign sf1_valid          =  sf1val[0];
-   assign sf0_valid          =  sf0val[0];
-
-   // interface to fetch
-
-   assign consume_fb0        = ~sf0val[0] & f0val[0];
-
-   assign consume_fb1        = ~sf1val[0] & f1val[0];
-
-   assign ifu_fb_consume1    =  consume_fb0 & ~consume_fb1 & ~exu_flush_final;
-   assign ifu_fb_consume2    =  consume_fb0 &  consume_fb1 & ~exu_flush_final;
-
-   assign ifvalid            =  ifu_fetch_val[0];
-
-   assign shift_f1_f0        =  ~sf0_valid &  sf1_valid;
-   assign shift_f2_f0        =  ~sf0_valid & ~sf1_valid &  f2_valid;
-   assign shift_f2_f1        =  ~sf0_valid &  sf1_valid &  f2_valid;
-
-   assign fetch_to_f0        =  ~sf0_valid & ~sf1_valid & ~f2_valid & ifvalid;
-
-   assign fetch_to_f1        = (~sf0_valid & ~sf1_valid &  f2_valid & ifvalid)  |
-                               (~sf0_valid &  sf1_valid & ~f2_valid & ifvalid)  |
-                               ( sf0_valid & ~sf1_valid & ~f2_valid & ifvalid);
-
-   assign fetch_to_f2        = (~sf0_valid &  sf1_valid &  f2_valid & ifvalid)  |
-                               ( sf0_valid &  sf1_valid & ~f2_valid & ifvalid);
-
-
-   assign f2val_in[1:0]      = ({2{ fetch_to_f2 &                               ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{~fetch_to_f2 & ~shift_f2_f1 & ~shift_f2_f0 & ~exu_flush_final}} & f2val[1:0]        );
-
-
-   assign sf1val[1:0]        = ({2{ f1_shift_2B}} & {1'b0,f1val[1]}) |
-                               ({2{~f1_shift_2B}} & f1val[1:0]     );
-
-   assign f1val_in[1:0]      = ({2{ fetch_to_f1                               & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f1                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{~fetch_to_f1 & ~shift_f2_f1 & ~shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       );
-
-
-
-   assign sf0val[1:0]        = ({2{ shift_2B            }} & {1'b0,f0val[1]}) |
-                               ({2{~shift_2B & ~shift_4B}} & f0val[1:0]);
-
-   assign f0val_in[1:0]      = ({2{fetch_to_f0                                & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f0                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{                               shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       ) |
-                               ({2{~fetch_to_f0 & ~shift_f2_f0 & ~shift_f1_f0 & ~exu_flush_final}} & sf0val[1:0]       );
-
-   assign {q1eff[31:0],q0eff[31:0]} = (({64{qren[0]}} & {q1[31:0],q0[31:0]}) |
-                                       ({64{qren[1]}} & {q2[31:0],q1[31:0]}) |
-                                       ({64{qren[2]}} & {q0[31:0],q2[31:0]}));
-
-   assign q0final[31:0]      = ({32{q0sel[0]}} & {      q0eff[31:0]}) |
-                               ({32{q0sel[1]}} & {16'b0,q0eff[31:16]});
-
-   assign q1final[15:0]      = ({16{q1sel[0]}} & q1eff[15:0] ) |
-                               ({16{q1sel[1]}} & q1eff[31:16]);
-   logic [31:1] q0pceff, q0pcfinal;
-   logic [31:1] q1pceff;
-
-   assign {q1pceff[31:1],q0pceff[31:1]} = (({62{qren[0]}} & {q1pc[31:1],q0pc[31:1]}) |
-                                           ({62{qren[1]}} & {q2pc[31:1],q1pc[31:1]}) |
-                                           ({62{qren[2]}} & {q0pc[31:1],q2pc[31:1]}));
-
-
-   assign q0pcfinal[31:1]      = ({31{q0sel[0]}} & ( q0pceff[31:1])) |
-                                 ({31{q0sel[1]}} & ( q0pceff[31:1] + 31'd1));
-
-   assign aligndata[31:0]    = ({32{ f0val[1]           }} & {q0final[31:0]}) |
-                               ({32{~f0val[1] & f0val[0]}} & {q1final[15:0],q0final[15:0]});
-
-   assign alignval[1:0]      = ({ 2{ f0val[1]           }} & {2'b11}) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1val[0],1'b1});
-
-   assign alignicaf[1:0]    = ({ 2{ f0val[1]           }} &  f0icaf[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1icaf[0],f0icaf[0]});
-
-   assign aligndbecc[1:0]    = ({ 2{ f0val[1]           }} &  f0dbecc[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1dbecc[0],f0dbecc[0]});
-
-   if (pt.BTB_ENABLE==1) begin
-
-   // for branch prediction
-
-   assign alignbrend[1:0]    = ({ 2{ f0val[1]           }} &  f0brend[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1brend[0],f0brend[0]});
-
-   assign alignpc4[1:0]      = ({ 2{ f0val[1]           }} &  f0pc4[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1pc4[0],f0pc4[0]});
-
-      if(pt.BTB_FULLYA) begin
-         assign alignindex[0]      = f0index[0];
-         assign alignindex[1]      = f0val[1] ? f0index[1] : f1index[0];
-      end
-
-   assign alignret[1:0]      = ({ 2{ f0val[1]           }} &  f0ret[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1ret[0],f0ret[0]});
-
-   assign alignway[1:0]      = ({ 2{ f0val[1]           }} &  f0way[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1way[0],f0way[0]});
-
-   assign alignhist1[1:0]    = ({ 2{ f0val[1]           }} &  f0hist1[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist1[0],f0hist1[0]});
-
-   assign alignhist0[1:0]    = ({ 2{ f0val[1]           }} &  f0hist0[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist0[0],f0hist0[0]});
-
-   assign secondpc[31:1]     = ({31{ f0val[1]           }} &  (q0pceff[31:1] + 31'd1)) |
-                               // you need the base pc for 2nd one only (4B max, 2B for the 1st and 2B for the 2nd)
-                               ({31{~f0val[1] & f0val[0]}} &   q1pceff[31:1]      );
-
-
-   assign firstpc[31:1]      =  q0pcfinal[31:1];
-      end // if (pt.BTB_ENABLE==1)
-
-   assign alignfromf1[1]     =      ~f0val[1] & f0val[0];
-
-
-   assign ifu_i0_pc[31:1]    =  q0pcfinal[31:1];
-
-
-   assign ifu_i0_pc4         =  first4B;
-
-
-   assign ifu_i0_cinst[15:0] = aligndata[15:0];
-
-   assign first4B            = (aligndata[1:0] == 2'b11);
-   assign first2B            = ~first4B;
-
-   assign ifu_i0_valid       = (first4B & alignval[1]) |
-                               (first2B & alignval[0]);
-
-   // inst access fault on any byte of inst results in access fault for the inst
-   assign ifu_i0_icaf        = (first4B & (|alignicaf[1:0])) |
-                               (first2B &   alignicaf[0]   );
-
-   assign ifu_i0_icaf_type[1:0] = (first4B & ~f0val[1] & f0val[0] & ~alignicaf[0] & ~aligndbecc[0]) ? f1ictype[1:0] : f0ictype[1:0];
-
-
-   assign icaf_eff[1:0] = alignicaf[1:0] | aligndbecc[1:0];
-
-   assign ifu_i0_icaf_second = first4B & ~icaf_eff[0] & icaf_eff[1];
-
-   assign ifu_i0_dbecc       = (first4B & (|aligndbecc[1:0])) |
-                               (first2B &   aligndbecc[0]   );
-
-
-   assign ifirst[31:0]       =  aligndata[31:0];
-
-
-   assign ifu_i0_instr[31:0] = ({32{first4B & alignval[1]}} & ifirst[31:0]) |
-                               ({32{first2B & alignval[0]}} & uncompress0[31:0]);
-
-if(pt.BTB_ENABLE==1) begin
-
-   // if you detect br does not start on instruction boundary
-
-   eb1_btb_addr_hash #(.pt(pt)) firsthash (.pc(firstpc [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(firstpc_hash [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   eb1_btb_addr_hash #(.pt(pt)) secondhash(.pc(secondpc[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   if(pt.BTB_FULLYA) begin
-      assign firstbrtag_hash = firstpc;
-      assign secondbrtag_hash = secondpc;
-   end
-   else begin
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash_fold #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-   end // else: !if(pt.BTB_FULLYA)
-
-
-   // start_indexing - you want pc to be based on where the end of branch is prediction
-   // normal indexing pc based that's incorrect now for pc4 cases it's pc4 + 2
-
-   always_comb begin
-
-      i0_brp                 = '0;
-
-      i0_br_start_error      = (first4B & alignval[1] & alignbrend[0]);
-
-      i0_brp.valid           = (first2B & alignbrend[0]) |
-                               (first4B & alignbrend[1]) |
-                                i0_br_start_error;
-
-      i0_brp_pc4             = (first2B & alignpc4[0]) |
-                               (first4B & alignpc4[1]);
-
-      i0_brp.ret             = (first2B & alignret[0]) |
-                               (first4B & alignret[1]);
-
-      i0_brp.way             = (first2B | alignbrend[0])  ?  alignway[0]  :  alignway[1];
-
-      i0_brp.hist[1]         = (first2B & alignhist1[0]) |
-                               (first4B & alignhist1[1]);
-
-      i0_brp.hist[0]         = (first2B & alignhist0[0]) |
-                               (first4B & alignhist0[1]);
-
-      i0_ends_f1             =  first4B & alignfromf1[1];
-
-      i0_brp.toffset[11:0]   = (i0_ends_f1)  ?  f1poffset[11:0]  :  f0poffset[11:0];
-
-      i0_brp.prett[31:1]     = (i0_ends_f1)  ?  f1prett[31:1]    :  f0prett[31:1];
-
-      i0_brp.br_start_error  = i0_br_start_error;
-
-      i0_brp.bank            = (first2B | alignbrend[0])  ?  firstpc[1]  :  secondpc[1];
-
-      i0_brp.br_error        = (i0_brp.valid &  i0_brp_pc4 &  first2B) |
-                               (i0_brp.valid & ~i0_brp_pc4 &  first4B);
-
-      if(pt.BTB_FULLYA)
-        ifu_i0_fa_index = (first2B | alignbrend[0])  ?  alignindex[0]  :  alignindex[1];
-      else
-        ifu_i0_fa_index = '0;
-
- end
-
-
-   assign ifu_i0_bp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = (first2B | alignbrend[0])  ?  firstpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  :
-                                                                                         secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign ifu_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0]            = (i0_ends_f1)               ?  f1fghr[pt.BHT_GHR_SIZE-1:0]  :
-                                                                                         f0fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign ifu_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0]           = (first2B | alignbrend[0])  ?  firstbrtag_hash[pt.BTB_BTAG_SIZE-1:0]  :
-                                                                                         secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0];
-end
-else begin
-   assign i0_brp = '0;
-   assign ifu_i0_bp_index = '0;
-   assign ifu_i0_bp_fghr = '0;
-   assign ifu_i0_bp_btag = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // decompress
-
-   // quiet inputs for 4B inst
-   eb1_ifu_compress_ctl compress0 (.din((first2B) ? aligndata[15:0] : '0), .dout(uncompress0[31:0]));
-
-
-
-   assign i0_shift           =  dec_i0_decode_d & ~error_stall;
-
-   assign ifu_pmu_instr_aligned = i0_shift;
-
-
-   // compute how many bytes are being shifted from f0
-
-   assign shift_2B           =  i0_shift & first2B;
-
-   assign shift_4B           =  i0_shift & first4B;
-
-   // exact equations for the queue logic
-   assign f0_shift_2B        = (shift_2B & f0val[0]            ) |
-                               (shift_4B & f0val[0] & ~f0val[1]);
-
-
-   // f0 valid states
-   //     11
-   //     10
-   //     00
-
-   assign f1_shift_2B        =  f0val[0] & ~f0val[1] & shift_4B;
-
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_bp_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_bp_ctl.sv
deleted file mode 100644
index eae8a4e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_bp_ctl.sv
+++ /dev/null
@@ -1,884 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Branch predictor
-// Comments:
-//
-//
-//  Bank3 : Bank2 : Bank1 : Bank0
-//  FA  C       8       4       0
-//********************************************************************************
-
-module eb1_ifu_bp_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-
-   input logic clk,
-   input logic rst_l,
-
-   input logic ic_hit_f,      // Icache hit, enables F address capture
-
-   input logic [31:1] ifc_fetch_addr_f, // look up btb address
-   input logic ifc_fetch_req_f,  // F1 valid
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // BP commit update packet, includes errors
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associative btb error index
-
-   input logic dec_tlu_flush_lower_wb, // used to move EX4 RS to EX1 and F
-   input logic dec_tlu_flush_leak_one_wb, // don't hit for leak one fetches
-
-   input logic dec_tlu_bpred_disable, // disable all branch prediction
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr (for patching fghr)
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input logic exu_flush_final, // all flushes
-
-   output logic ifu_bp_hit_taken_f, // btb hit, select target
-   output logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-   output logic ifu_bp_inst_mask_f, // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f, // fetch ghr
-
-   output logic [1:0] ifu_bp_way_f, // way
-   output logic [1:0] ifu_bp_ret_f, // predicted ret
-   output logic [1:0] ifu_bp_hist1_f, // history counters for all 4 potential branches, bit 1, right justified
-   output logic [1:0] ifu_bp_hist0_f, // history counters for all 4 potential branches, bit 0, right justified
-   output logic [1:0] ifu_bp_pc4_f, // pc4 indication, right justified
-   output logic [1:0] ifu_bp_valid_f, // branch valid, right justified
-   output logic [11:0] ifu_bp_poffset_f, // predicted target
-
-   output logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f, // predicted branch index (fully associative option)
-
-   input  logic       scan_mode
-   );
-
-
-   localparam BTB_DWIDTH =  pt.BTB_TOFFSET_SIZE+pt.BTB_BTAG_SIZE+5;
-   localparam BTB_DWIDTH_TOP =  int'(pt.BTB_TOFFSET_SIZE)+int'(pt.BTB_BTAG_SIZE)+4;
-   localparam BTB_FA_INDEX = $clog2(pt.BTB_SIZE)-1;
-   localparam FA_CMP_LOWER = $clog2(pt.ICACHE_LN_SZ);
-   localparam FA_TAG_END_UPPER= 5+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER)-1; // must cast to int or vcs build fails
-   localparam FA_TAG_START_LOWER = 3+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER);
-   localparam FA_TAG_END_LOWER = 5+int'(pt.BTB_TOFFSET_SIZE);
-
-   localparam TAG_START=BTB_DWIDTH-1;
-   localparam PC4=4;
-   localparam BOFF=3;
-   localparam CALL=2;
-   localparam RET=1;
-   localparam BV=0;
-
-   localparam LRU_SIZE=pt.BTB_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP = (pt.BHT_ARRAY_DEPTH > 16 ) ? 16 : pt.BHT_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP_INNER_HI =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+3 : pt.BHT_ADDR_HI;
-   localparam NUM_BHT_LOOP_OUTER_LO =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+4 : pt.BHT_ADDR_LO;
-   localparam BHT_NO_ADDR_MATCH  = ( pt.BHT_ARRAY_DEPTH <= 16 );
-
-
-   logic exu_mp_valid_write;
-   logic exu_mp_ataken;
-   logic exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-   logic                                   dec_tlu_br0_v_wb; // WB stage history update
-   logic [1:0]                             dec_tlu_br0_hist_wb; // new history
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_tlu_br0_addr_wb; // addr
-   logic                                   dec_tlu_br0_error_wb; // error; invalidate bank
-   logic                                   dec_tlu_br0_start_error_wb; // error; invalidate all 4 banks in fg
-   logic [pt.BHT_GHR_SIZE-1:0]             exu_i0_br_fghr_wb;
-
-   logic use_mp_way, use_mp_way_p1;
-   logic [pt.RET_STACK_SIZE-1:0][31:0] rets_out, rets_in;
-   logic [pt.RET_STACK_SIZE-1:0]        rsenable;
-
-
-   logic [11:0]       btb_rd_tgt_f;
-   logic              btb_rd_pc4_f, btb_rd_call_f, btb_rd_ret_f;
-   logic [1:1]        bp_total_branch_offset_f;
-
-   logic [31:1]       bp_btb_target_adder_f;
-   logic [31:1]       bp_rs_call_target_f;
-   logic              rs_push, rs_pop, rs_hold;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_p1_f, btb_wr_addr, btb_rd_addr_f;
-   logic [pt.BTB_BTAG_SIZE-1:0] btb_wr_tag, fetch_rd_tag_f, fetch_rd_tag_p1_f;
-   logic [BTB_DWIDTH-1:0]        btb_wr_data;
-   logic               btb_wr_en_way0, btb_wr_en_way1;
-
-
-   logic               dec_tlu_error_wb, btb_valid, dec_tlu_br0_middle_wb;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]        btb_error_addr_wb;
-   logic branch_error_collision_f, fetch_mp_collision_f, branch_error_collision_p1_f, fetch_mp_collision_p1_f;
-
-   logic  branch_error_bank_conflict_f;
-   logic [pt.BHT_GHR_SIZE-1:0] merged_ghr, fghr_ns, fghr;
-   logic [1:0] num_valids;
-   logic [LRU_SIZE-1:0] btb_lru_b0_f, btb_lru_b0_hold, btb_lru_b0_ns,
-                        fetch_wrindex_dec, fetch_wrindex_p1_dec, fetch_wrlru_b0, fetch_wrlru_p1_b0,
-                        mp_wrindex_dec, mp_wrlru_b0;
-   logic                btb_lru_rd_f, btb_lru_rd_p1_f, lru_update_valid_f;
-   logic  tag_match_way0_f, tag_match_way1_f;
-   logic [1:0] way_raw, bht_dir_f, btb_sel_f, wayhit_f, vwayhit_f, wayhit_p1_f;
-   logic [1:0] bht_valid_f, bht_force_taken_f;
-
-   logic leak_one_f, leak_one_f_d1;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way0_out ;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way1_out ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_p1_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_p1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_vbank0_rd_data_f, btb_vbank1_rd_data_f;
-
-   logic                                         final_h;
-   logic                                         btb_fg_crossing_f;
-   logic                                         middle_of_bank;
-
-
-   logic [1:0]                                   bht_vbank0_rd_data_f, bht_vbank1_rd_data_f;
-   logic                                         branch_error_bank_conflict_p1_f;
-   logic                                         tag_match_way0_p1_f, tag_match_way1_p1_f;
-
-   logic [1:0]                                   btb_vlru_rd_f, fetch_start_f, tag_match_vway1_expanded_f, tag_match_way0_expanded_p1_f, tag_match_way1_expanded_p1_f;
-   logic [31:2] fetch_addr_p1_f;
-
-
-   logic exu_mp_way, exu_mp_way_f, dec_tlu_br0_way_wb, dec_tlu_way_wb;
-   logic                [BTB_DWIDTH-1:0] btb_bank0e_rd_data_f, btb_bank0e_rd_data_p1_f;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0o_rd_data_f;
-
-   logic [1:0] tag_match_way0_expanded_f, tag_match_way1_expanded_f;
-
-
-    logic [1:0]                                  bht_bank0_rd_data_f;
-    logic [1:0]                                  bht_bank1_rd_data_f;
-    logic [1:0]                                  bht_bank0_rd_data_p1_f;
-   genvar                                        j, i;
-
-   assign exu_mp_valid = exu_mp_pkt.misp & ~leak_one_f; // conditional branch mispredict
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // repl way
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-   assign exu_mp_ataken = exu_mp_pkt.ataken;
-
-
-   assign dec_tlu_br0_v_wb = dec_tlu_br0_r_pkt.valid;
-   assign dec_tlu_br0_hist_wb[1:0]  = dec_tlu_br0_r_pkt.hist[1:0];
-   assign dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign dec_tlu_br0_error_wb = dec_tlu_br0_r_pkt.br_error;
-   assign dec_tlu_br0_middle_wb = dec_tlu_br0_r_pkt.middle;
-   assign dec_tlu_br0_way_wb = dec_tlu_br0_r_pkt.way;
-   assign dec_tlu_br0_start_error_wb = dec_tlu_br0_r_pkt.br_start_error;
-   assign exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0] = exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0];
-
-
-
-
-   // ----------------------------------------------------------------------
-   // READ
-   // ----------------------------------------------------------------------
-
-   // hash the incoming fetch PC, first guess at hashing algorithm
-   eb1_btb_addr_hash #(.pt(pt)) f1hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-
-   assign fetch_addr_p1_f[31:2] = ifc_fetch_addr_f[31:2] + 30'b1;
-   eb1_btb_addr_hash #(.pt(pt)) f1hash_p1(.pc(fetch_addr_p1_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   assign btb_sel_f[1] = ~bht_dir_f[0];
-   assign btb_sel_f[0] =  bht_dir_f[0];
-
-   assign fetch_start_f[1:0] = {ifc_fetch_addr_f[1], ~ifc_fetch_addr_f[1]};
-
-   // Errors colliding with fetches must kill the btb/bht hit.
-
-   assign branch_error_collision_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-   assign branch_error_collision_p1_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-
-   assign branch_error_bank_conflict_f = branch_error_collision_f & dec_tlu_error_wb;
-   assign branch_error_bank_conflict_p1_f = branch_error_collision_p1_f & dec_tlu_error_wb;
-
-   // set on leak one, hold until next flush without leak one
-   assign leak_one_f = (dec_tlu_flush_leak_one_wb & dec_tlu_flush_lower_wb) | (leak_one_f_d1 & ~dec_tlu_flush_lower_wb);
-
-logic exu_flush_final_d1;
-
- if(!pt.BTB_FULLYA) begin
-   assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                    exu_mp_valid & ifc_fetch_req_f &
-                                    (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                    );
-   assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                       exu_mp_valid & ifc_fetch_req_f &
-                                       (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                       );
-   // 2 -way SA, figure out the way hit and mux accordingly
-   assign tag_match_way0_f = btb_bank0_rd_data_way0_f[BV] & (btb_bank0_rd_data_way0_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_f = btb_bank0_rd_data_way1_f[BV] & (btb_bank0_rd_data_way1_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way0_p1_f = btb_bank0_rd_data_way0_p1_f[BV] & (btb_bank0_rd_data_way0_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_p1_f = btb_bank0_rd_data_way1_p1_f[BV] & (btb_bank0_rd_data_way1_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   // Both ways could hit, use the offset bit to reorder
-
-   assign tag_match_way0_expanded_f[1:0] = {tag_match_way0_f &  (btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4]),
-                                             tag_match_way0_f & ~(btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4])};
-
-   assign tag_match_way1_expanded_f[1:0] = {tag_match_way1_f &  (btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4]),
-                                             tag_match_way1_f & ~(btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4])};
-
-   assign tag_match_way0_expanded_p1_f[1:0] = {tag_match_way0_p1_f &  (btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4]),
-                                                tag_match_way0_p1_f & ~(btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4])};
-
-   assign tag_match_way1_expanded_p1_f[1:0] = {tag_match_way1_p1_f &  (btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4]),
-                                                tag_match_way1_p1_f & ~(btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4])};
-
-   assign wayhit_f[1:0] = tag_match_way0_expanded_f[1:0] | tag_match_way1_expanded_f[1:0];
-   assign wayhit_p1_f[1:0] = tag_match_way0_expanded_p1_f[1:0] | tag_match_way1_expanded_p1_f[1:0];
-
-   assign btb_bank0o_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[1]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[1]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-   assign btb_bank0e_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[0]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[0]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-
-   assign btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_p1_f[0]}} & btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0]) |
-                                                               ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_p1_f[0]}} & btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0]) );
-
-   // virtual bank order
-
-   assign btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0e_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) );
-   assign btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0]) );
-
-   assign way_raw[1:0] =  tag_match_vway1_expanded_f[1:0] | (~vwayhit_f[1:0] & btb_vlru_rd_f[1:0]);
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-   // update lru
-   // mp
-
-   // create a onehot lru write vector
-   assign mp_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   // fetch
-   assign fetch_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign fetch_wrindex_p1_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign mp_wrlru_b0[LRU_SIZE-1:0] = mp_wrindex_dec[LRU_SIZE-1:0] & {LRU_SIZE{exu_mp_valid}};
-
-
-   assign btb_lru_b0_hold[LRU_SIZE-1:0] = ~mp_wrlru_b0[LRU_SIZE-1:0] & ~fetch_wrlru_b0[LRU_SIZE-1:0];
-
-   // Forward the mp lru information to the fetch, avoids multiple way hits later
-   assign use_mp_way = fetch_mp_collision_f;
-   assign use_mp_way_p1 = fetch_mp_collision_p1_f;
-
-   assign lru_update_valid_f = (vwayhit_f[0] | vwayhit_f[1]) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   assign fetch_wrlru_b0[LRU_SIZE-1:0] = fetch_wrindex_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-   assign fetch_wrlru_p1_b0[LRU_SIZE-1:0] = fetch_wrindex_p1_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-
-   assign btb_lru_b0_ns[LRU_SIZE-1:0] = ( (btb_lru_b0_hold[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]) |
-                                          (mp_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{~exu_mp_way}}) |
-                                          (fetch_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_f}}) |
-                                          (fetch_wrlru_p1_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_p1_f}}) );
-
-
-
-   assign btb_lru_rd_f = use_mp_way ? exu_mp_way_f : |(fetch_wrindex_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   assign btb_lru_rd_p1_f = use_mp_way_p1 ? exu_mp_way_f : |(fetch_wrindex_p1_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   // rotated
-   assign btb_vlru_rd_f[1:0] = ( ({2{fetch_start_f[0]}} & {btb_lru_rd_f, btb_lru_rd_f}) |
-                                  ({2{fetch_start_f[1]}} & {btb_lru_rd_p1_f, btb_lru_rd_f}));
-
-   assign tag_match_vway1_expanded_f[1:0] = ( ({2{fetch_start_f[0]}} & {tag_match_way1_expanded_f[1:0]}) |
-                                               ({2{fetch_start_f[1]}} & {tag_match_way1_expanded_p1_f[0], tag_match_way1_expanded_f[1]}) );
-
-
-   rvdffe #(LRU_SIZE) btb_lru_ff (.*, .en(ifc_fetch_req_f | exu_mp_valid),
-                                    .din(btb_lru_b0_ns[(LRU_SIZE)-1:0]),
-                                   .dout(btb_lru_b0_f[(LRU_SIZE)-1:0]));
-
- end // if (!pt.BTB_FULLYA)
-   // Detect end of cache line and mask as needed
-   logic eoc_near;
-   logic eoc_mask;
-   assign eoc_near = &ifc_fetch_addr_f[pt.ICACHE_BEAT_ADDR_HI:3];
-   assign eoc_mask = ~eoc_near| (|(~ifc_fetch_addr_f[2:1]));
-
-
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-
-   // mux out critical hit bank for pc computation
-   // This is only useful for the first taken branch in the fetch group
-   logic [16:1] btb_sel_data_f;
-
-   assign btb_rd_tgt_f[11:0] = btb_sel_data_f[16:5];
-   assign btb_rd_pc4_f       = btb_sel_data_f[4];
-   assign btb_rd_call_f      = btb_sel_data_f[2];
-   assign btb_rd_ret_f       = btb_sel_data_f[1];
-
-   assign btb_sel_data_f[16:1] = ( ({16{btb_sel_f[1]}} & btb_vbank1_rd_data_f[16:1]) |
-                                    ({16{btb_sel_f[0]}} & btb_vbank0_rd_data_f[16:1]) );
-
-
-   logic [1:0] hist0_raw, hist1_raw, pc4_raw, pret_raw;
-
-   // a valid taken target needs to kill the next fetch as we compute the target address
-   assign ifu_bp_hit_taken_f = |(vwayhit_f[1:0] & hist1_raw[1:0]) & ifc_fetch_req_f & ~leak_one_f_d1 & ~dec_tlu_bpred_disable;
-
-
-   // Don't put calls/rets/ja in the predictor, force the bht taken instead
-   assign bht_force_taken_f[1:0] = {(btb_vbank1_rd_data_f[CALL] | btb_vbank1_rd_data_f[RET]),
-                                     (btb_vbank0_rd_data_f[CALL] | btb_vbank0_rd_data_f[RET])};
-
-
-   // taken and valid, otherwise, branch errors must clear the bht
-   assign bht_valid_f[1:0] = vwayhit_f[1:0];
-
-   assign bht_vbank0_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank0_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank1_rd_data_f[1:0]) );
-
-   assign bht_vbank1_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank1_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank0_rd_data_p1_f[1:0]) );
-
-
-   assign bht_dir_f[1:0] = {(bht_force_taken_f[1] | bht_vbank1_rd_data_f[1]) & bht_valid_f[1],
-                             (bht_force_taken_f[0] | bht_vbank0_rd_data_f[1]) & bht_valid_f[0]};
-
-   assign ifu_bp_inst_mask_f = (ifu_bp_hit_taken_f & btb_sel_f[1]) | ~ifu_bp_hit_taken_f;
-
-
-
-
-   // Branch prediction info is sent with the 2byte lane associated with the end of the branch.
-   // Cases
-   //       BANK1         BANK0
-   // -------------------------------
-   // |      :       |      :       |
-   // -------------------------------
-   //         <------------>                   : PC4 branch, offset, should be in B1 (indicated on [2])
-   //                <------------>            : PC4 branch, no offset, indicate PC4, VALID, HIST on [1]
-   //                       <------------>     : PC4 branch, offset, indicate PC4, VALID, HIST on [0]
-   //                <------>                  : PC2 branch, offset, indicate VALID, HIST on [1]
-   //                       <------>           : PC2 branch, no offset, indicate VALID, HIST on [0]
-   //
-
-
-
-   assign hist1_raw[1:0] = bht_force_taken_f[1:0] | {bht_vbank1_rd_data_f[1],
-                                                      bht_vbank0_rd_data_f[1]};
-
-   assign hist0_raw[1:0] = {bht_vbank1_rd_data_f[0],
-                            bht_vbank0_rd_data_f[0]};
-
-
-   assign pc4_raw[1:0] = {vwayhit_f[1] & btb_vbank1_rd_data_f[PC4],
-                          vwayhit_f[0] & btb_vbank0_rd_data_f[PC4]};
-
-   assign pret_raw[1:0] = {vwayhit_f[1] & ~btb_vbank1_rd_data_f[CALL] & btb_vbank1_rd_data_f[RET],
-                           vwayhit_f[0] & ~btb_vbank0_rd_data_f[CALL] & btb_vbank0_rd_data_f[RET]};
-
-   // GHR
-
-
-  // count the valids with masking based on first taken
-   assign num_valids[1:0] = countones(bht_valid_f[1:0]);
-
-   // Note that the following property holds
-   // P: prior ghr, H: history bit of last valid branch in line (could be 1 or 0)
-   // Num valid branches   What new GHR must be
-   // 2                    0H
-   // 1                    PH
-   // 0                    PP
-
-   assign final_h = |(btb_sel_f[1:0] & bht_dir_f[1:0]);
-
-   assign merged_ghr[pt.BHT_GHR_SIZE-1:0] = (
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h2}} & {fghr[pt.BHT_GHR_SIZE-3:0], 1'b0, final_h}) | // 0H
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h1}} & {fghr[pt.BHT_GHR_SIZE-2:0], final_h}) | // PH
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h0}} & {fghr[pt.BHT_GHR_SIZE-1:0]}) ); // PP
-
-   logic [pt.BHT_GHR_SIZE-1:0] exu_flush_ghr;
-   assign exu_flush_ghr[pt.BHT_GHR_SIZE-1:0] = exu_mp_fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign fghr_ns[pt.BHT_GHR_SIZE-1:0] = ( ({pt.BHT_GHR_SIZE{exu_flush_final_d1}} & exu_flush_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1}} & merged_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ~(ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1)}} & fghr[pt.BHT_GHR_SIZE-1:0]));
-
-   rvdffie #(.WIDTH(pt.BHT_GHR_SIZE+3),.OVERRIDE(1)) fetchghr (.*,
-                                          .din ({exu_flush_final, exu_mp_way, leak_one_f, fghr_ns[pt.BHT_GHR_SIZE-1:0]}),
-                                          .dout({exu_flush_final_d1, exu_mp_way_f, leak_one_f_d1, fghr[pt.BHT_GHR_SIZE-1:0]}));
-
-   assign ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0] = fghr[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign ifu_bp_way_f[1:0] = way_raw[1:0];
-   assign ifu_bp_hist1_f[1:0]    = hist1_raw[1:0];
-   assign ifu_bp_hist0_f[1:0]    = hist0_raw[1:0];
-   assign ifu_bp_pc4_f[1:0]     = pc4_raw[1:0];
-
-   assign ifu_bp_valid_f[1:0]   = vwayhit_f[1:0] & ~{2{dec_tlu_bpred_disable}};
-   assign ifu_bp_ret_f[1:0]     = pret_raw[1:0];
-
-
-   // compute target
-   // Form the fetch group offset based on the btb hit location and the location of the branch within the 4 byte chunk
-
-//  .i 5
-//  .o 3
-//  .ilb bht_dir_f[1] bht_dir_f[0] fetch_start_f[1] fetch_start_f[0] btb_rd_pc4_f
-//  .ob bloc_f[1] bloc_f[0] use_fa_plus
-//  .type fr
-//
-//
-//  ## rotdir[1:0]  fs   pc4  off fapl
-//    -1            01 -  01  0
-//    10            01 -  10  0
-//
-//    -1            10 -  10  0
-//    10            10 0  01  1
-//    10            10 1  01  0
-logic [1:0] bloc_f;
-logic use_fa_plus;
-assign bloc_f[1] = (bht_dir_f[0] & ~fetch_start_f[0]) | (~bht_dir_f[0]
-     & fetch_start_f[0]);
-assign bloc_f[0] = (bht_dir_f[0] & fetch_start_f[0]) | (~bht_dir_f[0]
-     & ~fetch_start_f[0]);
-assign use_fa_plus = (~bht_dir_f[0] & ~fetch_start_f[0] & ~btb_rd_pc4_f);
-
-
-
-
-    assign btb_fg_crossing_f = fetch_start_f[0] & btb_sel_f[0] & btb_rd_pc4_f;
-
-   assign bp_total_branch_offset_f =  bloc_f[1] ^ btb_rd_pc4_f;
-
-   logic [31:2] adder_pc_in_f, ifc_fetch_adder_prior;
-   rvdfflie #(.WIDTH(30), .LEFT(19)) faddrf_ff (.*, .en(ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f), .din(ifc_fetch_addr_f[31:2]), .dout(ifc_fetch_adder_prior[31:2]));
-
-
-   assign ifu_bp_poffset_f[11:0] = btb_rd_tgt_f[11:0];
-
-   assign adder_pc_in_f[31:2] = ( ({30{ use_fa_plus}} & fetch_addr_p1_f[31:2]) |
-                                   ({30{ btb_fg_crossing_f}} & ifc_fetch_adder_prior[31:2]) |
-                                   ({30{~btb_fg_crossing_f & ~use_fa_plus}} & ifc_fetch_addr_f[31:2]));
-
-   rvbradder predtgt_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                         .offset(btb_rd_tgt_f[11:0]),
-                         .dout(bp_btb_target_adder_f[31:1])
-                         );
-   // mux in the return stack address here for a predicted return assuming the RS is valid, quite if no prediction
-   assign ifu_bp_btb_target_f[31:1] = (({31{btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0] & ifu_bp_hit_taken_f}} & rets_out[0][31:1]) |
-                                       ({31{~(btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0]) & ifu_bp_hit_taken_f}} & bp_btb_target_adder_f[31:1]) );
-
-
-   // ----------------------------------------------------------------------
-   // Return Stack
-   // ----------------------------------------------------------------------
-
-   rvbradder rs_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                    .offset({11'b0,  ~btb_rd_pc4_f}),
-                    .dout(bp_rs_call_target_f[31:1])
-                         );
-
-   assign rs_push = (btb_rd_call_f & ~btb_rd_ret_f & ifu_bp_hit_taken_f);
-   assign rs_pop = (btb_rd_ret_f & ~btb_rd_call_f & ifu_bp_hit_taken_f);
-   assign rs_hold = ~rs_push & ~rs_pop;
-
-
-
-   // Fetch based (bit 0 is a valid)
-   assign rets_in[0][31:0] = ( ({32{rs_push}} & {bp_rs_call_target_f[31:1], 1'b1}) | // target[31:1], valid
-                               ({32{rs_pop}}  & rets_out[1][31:0]) );
-
-   assign rsenable[0] = ~rs_hold;
-
-   for (i=0; i<pt.RET_STACK_SIZE; i++) begin : retstack
-
-      // for the last entry in the stack, we don't have a pop position
-      if(i==pt.RET_STACK_SIZE-1) begin
-         assign rets_in[i][31:0] = rets_out[i-1][31:0];
-         assign rsenable[i] = rs_push;
-      end
-      else if(i>0) begin
-        assign rets_in[i][31:0] = ( ({32{rs_push}} & rets_out[i-1][31:0]) |
-                                    ({32{rs_pop}}  & rets_out[i+1][31:0]) );
-         assign rsenable[i] = rs_push | rs_pop;
-      end
-      rvdffe #(32) rets_ff (.*, .en(rsenable[i]), .din(rets_in[i][31:0]), .dout(rets_out[i][31:0]));
-
-   end : retstack
-
-   // ----------------------------------------------------------------------
-   // WRITE
-   // ----------------------------------------------------------------------
-
-
-   assign dec_tlu_error_wb = dec_tlu_br0_start_error_wb | dec_tlu_br0_error_wb;
-
-   assign btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign dec_tlu_way_wb = dec_tlu_br0_way_wb;
-
-   assign btb_valid = exu_mp_valid & ~dec_tlu_error_wb;
-
-   assign btb_wr_tag[pt.BTB_BTAG_SIZE-1:0] = exu_mp_btag[pt.BTB_BTAG_SIZE-1:0];
-
-   if(!pt.BTB_FULLYA) begin
-
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagf  (.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({fetch_addr_p1_f[ pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) rdtagf(.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                             .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                               .pc({fetch_addr_p1_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-
-      assign btb_wr_en_way0 = ( ({{~exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{~dec_tlu_way_wb & dec_tlu_error_wb}}));
-
-      assign btb_wr_en_way1 = ( ({{exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{dec_tlu_way_wb & dec_tlu_error_wb}}));
-      assign btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_error_wb ? btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] : exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-
-      assign vwayhit_f[1:0] = ( ({2{fetch_start_f[0]}} & {wayhit_f[1:0]}) |
-                                ({2{fetch_start_f[1]}} & {wayhit_p1_f[0], wayhit_f[1]})) & {eoc_mask, 1'b1};
-
-   end // if (!pt.BTB_FULLYA)
-
-   assign btb_wr_data[BTB_DWIDTH-1:0] = {btb_wr_tag[pt.BTB_BTAG_SIZE-1:0], exu_mp_tgt[pt.BTB_TOFFSET_SIZE-1:0], exu_mp_pc4, exu_mp_boffset,
-                                                exu_mp_call | exu_mp_ja, exu_mp_ret | exu_mp_ja, btb_valid} ;
-
-   assign exu_mp_valid_write = exu_mp_valid & exu_mp_ataken & ~exu_mp_pkt.valid;
-   logic [1:0] bht_wr_data0, bht_wr_data2;
-   logic [1:0] bht_wr_en0, bht_wr_en2;
-
-   assign middle_of_bank = exu_mp_pc4 ^ exu_mp_boffset;
-   assign bht_wr_en0[1:0] = {2{exu_mp_valid & ~exu_mp_call & ~exu_mp_ret & ~exu_mp_ja}} & {middle_of_bank, ~middle_of_bank};
-   assign bht_wr_en2[1:0] = {2{dec_tlu_br0_v_wb}} & {dec_tlu_br0_middle_wb, ~dec_tlu_br0_middle_wb} ;
-
-   // Experiments show this is the best priority scheme for same bank/index writes at the same time.
-   assign bht_wr_data0[1:0] = exu_mp_hist[1:0]; // lowest priority
-   assign bht_wr_data2[1:0] = dec_tlu_br0_hist_wb[1:0]; // highest priority
-
-
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] bht_rd_addr_f, bht_rd_addr_p1_f, bht_wr_addr0, bht_wr_addr2;
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] mp_hashed, br0_hashed_wb, bht_rd_addr_hashed_f, bht_rd_addr_hashed_p1_f;
-   eb1_btb_ghr_hash #(.pt(pt)) mpghrhs  (.hashin(exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]), .hash(mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) br0ghrhs (.hashin(dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0]), .hash(br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs (.hashin(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs_p1 (.hashin(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-
-   assign bht_wr_addr0[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_wr_addr2[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-
-
-   // ----------------------------------------------------------------------
-   // Structures. Using FLOPS
-   // ----------------------------------------------------------------------
-   // BTB
-   // Entry -> tag[pt.BTB_BTAG_SIZE-1:0], toffset[11:0], pc4, boffset, call, ret, valid
-
-   if(!pt.BTB_FULLYA) begin
-
-      for (j=0 ; j<LRU_SIZE ; j++) begin : BTB_FLOPS
-         // Way 0
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way0 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way0)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way0_out[j]));
-
-         // Way 1
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way1 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way1)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way1_out[j]));
-
-      end
-
-
-    always_comb begin : BTB_rd_mux
-        btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] = '0 ;
-
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-    end
-end // if (!pt.BTB_FULLYA)
-
-
-
-
-
-      if(pt.BTB_FULLYA) begin : fa
-
-         logic found1, hit0, hit1;
-         logic btb_used_reset, write_used;
-         logic [$clog2(pt.BTB_SIZE)-1:0] btb_fa_wr_addr0, hit0_index, hit1_index;
-
-         logic [pt.BTB_SIZE-1:0]         btb_tag_hit, btb_offset_0, btb_offset_1, btb_used_ns, btb_used,
-                                         wr0_en, btb_upper_hit;
-         logic [pt.BTB_SIZE-1:0][BTB_DWIDTH-1:0] btbdata;
-
-         // Fully Associative tag hash uses bits 31:3. Bits 2:1 are the offset bits used for the 4 tag comp banks
-         // Full tag used to speed up lookup. There is one 31:3 cmp per entry, and 4 2:1 cmps per entry.
-
-         logic [FA_CMP_LOWER-1:1]  ifc_fetch_addr_p1_f;
-
-
-         assign ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1] = ifc_fetch_addr_f[FA_CMP_LOWER-1:1] + 1'b1;
-
-         assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == ifc_fetch_addr_f[31:1]) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-         assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == {ifc_fetch_addr_f[31:FA_CMP_LOWER], ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]}) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-
-      always_comb begin
-         btb_vbank0_rd_data_f = '0;
-         btb_vbank1_rd_data_f = '0;
-         btb_tag_hit = '0;
-         btb_upper_hit = '0;
-         btb_offset_0 = '0;
-         btb_offset_1 = '0;
-
-         found1 = 1'b0;
-         hit0 = 1'b0;
-         hit1 = 1'b0;
-         hit0_index = '0;
-         hit1_index = '0;
-         btb_fa_wr_addr0 = '0;
-
-         for(int i=0; i<pt.BTB_SIZE; i++) begin
-            // Break the cmp into chunks for lower area.
-            // Chunk1: FA 31:6 or 31:5 depending on icache line size
-            // Chunk2: FA 5:1 or 4:1 depending on icache line size
-            btb_upper_hit[i] = (btbdata[i][BTB_DWIDTH_TOP:FA_TAG_END_UPPER] == ifc_fetch_addr_f[31:FA_CMP_LOWER]) & btbdata[i][0] & ~wr0_en[i];
-            btb_offset_0[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-            btb_offset_1[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-
-            if(~hit0) begin
-               if(btb_offset_0[i]) begin
-                  hit0_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  // hit unless we are also writing this entry at the same time
-                  hit0 = 1'b1;
-               end
-            end
-            if(~hit1) begin
-               if(btb_offset_1[i]) begin
-                  hit1_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  hit1 = 1'b1;
-               end
-            end
-
-
-            // Mux out the 2 potential branches
-            if(btb_offset_0[i] == 1'b1)
-              btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_f ? btb_wr_data : btbdata[i];
-            if(btb_offset_1[i] == 1'b1)
-              btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_p1_f ? btb_wr_data : btbdata[i];
-
-            // find the first zero from bit zero in the used vector, this is the write address
-            if(~found1) begin
-               if(~btb_used[i]) begin
-                  btb_fa_wr_addr0[BTB_FA_INDEX:0] = i[BTB_FA_INDEX:0];
-                  found1 = 1'b1;
-               end
-            end
-         end
-      end // always_comb begin
-
-`ifdef RV_ASSERT_ON
-   btbhitonehot0: assert #0 ($onehot0(btb_offset_0));
-   btbhitonehot1: assert #0 ($onehot0(btb_offset_1));
-`endif
-
-   assign vwayhit_f[1:0] = {hit1, hit0} & {eoc_mask, 1'b1};
-
-   // way bit is reused as the predicted bit
-   assign way_raw[1:0] =  vwayhit_f[1:0] | {fetch_mp_collision_p1_f, fetch_mp_collision_f};
-
-   for (j=0 ; j<pt.BTB_SIZE ; j++) begin : BTB_FAFLOPS
-
-      assign wr0_en[j] = ((btb_fa_wr_addr0[BTB_FA_INDEX:0] == j) & (exu_mp_valid_write & ~exu_mp_pkt.way)) |
-                         ((dec_fa_error_index == j) & dec_tlu_error_wb);
-
-      rvdffe #(BTB_DWIDTH) btb_fa (.*, .clk(clk),
-                                   .en  (wr0_en[j]),
-                                   .din (btb_wr_data[BTB_DWIDTH-1:0]),
-                                   .dout(btbdata[j]));
-   end // block: BTB_FAFLOPS
-
-   assign ifu_bp_fa_index_f[1] = hit1 ? hit1_index : '0;
-   assign ifu_bp_fa_index_f[0] = hit0 ? hit0_index : '0;
-
-   assign btb_used_reset = &btb_used[pt.BTB_SIZE-1:0];
-   assign btb_used_ns[pt.BTB_SIZE-1:0] = ({pt.BTB_SIZE{vwayhit_f[1]}} & (32'b1 << hit1_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{vwayhit_f[0]}} & (32'b1 << hit0_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{exu_mp_valid_write & ~exu_mp_pkt.way & ~dec_tlu_error_wb}} & (32'b1 << btb_fa_wr_addr0[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{btb_used_reset}} & {pt.BTB_SIZE{1'b0}}) |
-                                         ({pt.BTB_SIZE{~btb_used_reset & dec_tlu_error_wb}} & (btb_used[pt.BTB_SIZE-1:0] & ~(32'b1 << dec_fa_error_index[BTB_FA_INDEX:0]))) |
-                                         (~{pt.BTB_SIZE{btb_used_reset | dec_tlu_error_wb}} & btb_used[pt.BTB_SIZE-1:0]);
-
-   assign write_used = btb_used_reset | ifu_bp_hit_taken_f | exu_mp_valid_write | dec_tlu_error_wb;
-
-
-   rvdffe #(pt.BTB_SIZE) btb_usedf (.*, .clk(clk),
-                    .en  (write_used),
-                    .din (btb_used_ns[pt.BTB_SIZE-1:0]),
-                    .dout(btb_used[pt.BTB_SIZE-1:0]));
-
-end // block: fa
-
-
-   //-----------------------------------------------------------------------------
-   // BHT
-   // 2 bit Entry -> direction, strength
-   //
-   //-----------------------------------------------------------------------------
-
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0][1:0]      bht_bank_wr_data ;
-   logic [1:0] [pt.BHT_ARRAY_DEPTH-1:0] [1:0]                bht_bank_rd_data_out ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clken ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clk   ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0]           bht_bank_sel   ;
-
-   for ( i=0; i<2; i++) begin : BANKS
-     for (genvar k=0 ; k < (pt.BHT_ARRAY_DEPTH)/NUM_BHT_LOOP ; k++) begin : BHT_CLK_GROUP
-     assign bht_bank_clken[i][k]  = (bht_wr_en0[i] & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH)) |
-                                    (bht_wr_en2[i] & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH));
-`ifndef RV_FPGA_OPTIMIZE
-     rvclkhdr bht_bank_grp_cgc ( .en(bht_bank_clken[i][k]), .l1clk(bht_bank_clk[i][k]), .* ); // ifndef RV_FPGA_OPTIMIZE
-`endif
-
-     for (j=0 ; j<NUM_BHT_LOOP ; j++) begin : BHT_FLOPS
-       assign   bht_bank_sel[i][k][j]    = (bht_wr_en0[i] & (bht_wr_addr0[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) |
-                                           (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ;
-
-       assign bht_bank_wr_data[i][k][j]  = (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI:pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ? bht_wr_data2[1:0] :
-                                                                                                                      bht_wr_data0[1:0]   ;
-
-
-          rvdffs_fpga #(2) bht_bank (.*,
-                    .clk        (bht_bank_clk[i][k]),
-                    .en         (bht_bank_sel[i][k][j]),
-                    .rawclk     (clk),
-                    .clken      (bht_bank_sel[i][k][j]),
-                    .din        (bht_bank_wr_data[i][k][j]),
-                    .dout       (bht_bank_rd_data_out[i][(16*k)+j]));
-
-      end // block: BHT_FLOPS
-   end // block: BHT_CLK_GROUP
- end // block: BANKS
-
-    always_comb begin : BHT_rd_mux
-     bht_bank0_rd_data_f[1:0] = '0 ;
-     bht_bank1_rd_data_f[1:0] = '0 ;
-     bht_bank0_rd_data_p1_f[1:0] = '0 ;
-     for (int j=0; j< pt.BHT_ARRAY_DEPTH; j++) begin
-       if (bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_f[1:0] = bht_bank_rd_data_out[0][j];
-         bht_bank1_rd_data_f[1:0] = bht_bank_rd_data_out[1][j];
-       end
-       if (bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_p1_f[1:0] = bht_bank_rd_data_out[0][j];
-       end
-      end
-    end // block: BHT_rd_mux
-
-
-function [1:0] countones;
-      input [1:0] valid;
-
-      begin
-
-countones[1:0] = {2'b0, valid[1]} +
-                 {2'b0, valid[0]};
-      end
-   endfunction
-endmodule // eb1_ifu_bp_ctl
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_compress_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_compress_ctl.sv
deleted file mode 100644
index a55e30f..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_compress_ctl.sv
+++ /dev/null
@@ -1,383 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-// purpose of this file is to convert 16b RISCV compressed instruction into 32b equivalent
-
-module eb1_ifu_compress_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input  logic [15:0] din,        // 16-bit   compressed instruction
-   output logic [31:0] dout        // 32-bit uncompressed instruction
-   );
-
-
-   logic               legal;
-
-   logic [15:0]  i;
-
-   logic [31:0]  o,l1,l2,l3;
-
-
-   assign i[15:0] = din[15:0];
-
-
-   logic [4:0]   rs2d,rdd,rdpd,rs2pd;
-
-   logic rdrd;
-   logic rdrs1;
-   logic rs2rs2;
-   logic rdprd;
-   logic rdprs1;
-   logic rs2prs2;
-   logic rs2prd;
-   logic uimm9_2;
-   logic ulwimm6_2;
-   logic ulwspimm7_2;
-   logic rdeq2;
-   logic rdeq1;
-   logic rs1eq2;
-   logic sbroffset8_1;
-   logic simm9_4;
-   logic simm5_0;
-   logic sjaloffset11_1;
-   logic sluimm17_12;
-   logic uimm5_0;
-   logic uswimm6_2;
-   logic uswspimm7_2;
-
-
-
-   // form the opcodes
-
-   // formats
-   //
-   // c.add rd 11:7 rs2  6:2
-   // c.and rdp 9:7 rs2p 4:2
-   //
-   // add rs2 24:20 rs1 19:15  rd 11:7
-
-   assign rs2d[4:0] = i[6:2];
-
-   assign rdd[4:0] = i[11:7];
-
-   assign rdpd[4:0] = {2'b01, i[9:7]};
-
-   assign rs2pd[4:0] = {2'b01, i[4:2]};
-
-
-
-   // merge in rd, rs1, rs2
-
-
-   // rd
-   assign l1[6:0] = o[6:0];
-
-   assign l1[11:7] = o[11:7] |
-                     ({5{rdrd}} & rdd[4:0]) |
-                     ({5{rdprd}} & rdpd[4:0]) |
-                     ({5{rs2prd}} & rs2pd[4:0]) |
-                     ({5{rdeq1}} & 5'd1) |
-                     ({5{rdeq2}} & 5'd2);
-
-
-   // rs1
-   assign l1[14:12] = o[14:12];
-   assign l1[19:15] = o[19:15] |
-                      ({5{rdrs1}} & rdd[4:0]) |
-                      ({5{rdprs1}} & rdpd[4:0]) |
-                      ({5{rs1eq2}} & 5'd2);
-
-
-   // rs2
-   assign l1[24:20] = o[24:20] |
-                      ({5{rs2rs2}} & rs2d[4:0]) |
-                      ({5{rs2prs2}} & rs2pd[4:0]);
-
-   assign l1[31:25] = o[31:25];
-
-   logic [5:0] simm5d;
-   logic [9:2] uimm9d;
-
-   logic [9:4] simm9d;
-   logic [6:2] ulwimm6d;
-   logic [7:2] ulwspimm7d;
-   logic [5:0] uimm5d;
-   logic [20:1] sjald;
-
-   logic [31:12] sluimmd;
-
-   // merge in immediates + jal offset
-
-   assign simm5d[5:0] = { i[12], i[6:2] };
-
-   assign uimm9d[9:2] = { i[10:7], i[12:11], i[5], i[6] };
-
-   assign simm9d[9:4] = { i[12], i[4:3], i[5], i[2], i[6] };
-
-   assign ulwimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign ulwspimm7d[7:2] = { i[3:2], i[12], i[6:4] };
-
-   assign uimm5d[5:0] = { i[12], i[6:2] };
-
-   assign sjald[11:1] = { i[12], i[8], i[10:9], i[6], i[7], i[2], i[11], i[5:4], i[3] };
-
-   assign sjald[20:12] =  {9{i[12]}};
-
-
-
-   assign sluimmd[31:12] = { {15{i[12]}}, i[6:2] };
-
-
-   assign l2[31:20] = ( l1[31:20] ) |
-                      ( {12{simm5_0}}   &  {{7{simm5d[5]}},simm5d[4:0]} ) |
-                      ( {12{uimm9_2}}   &  {2'b0,uimm9d[9:2],2'b0} ) |
-                      ( {12{simm9_4}}   &   {{3{simm9d[9]}},simm9d[8:4],4'b0} ) |
-                      ( {12{ulwimm6_2}} &   {5'b0,ulwimm6d[6:2],2'b0} ) |
-                      ( {12{ulwspimm7_2}}  & {4'b0,ulwspimm7d[7:2],2'b0} ) |
-                      ( {12{uimm5_0}}      &    {6'b0,uimm5d[5:0]} ) |
-                      ( {12{sjaloffset11_1}} &  {sjald[20],sjald[10:1],sjald[11]} ) |
-                      ( {12{sluimm17_12}}    &  sluimmd[31:20] );
-
-
-
-   assign l2[19:12] = ( l1[19:12] ) |
-                      ( {8{sjaloffset11_1}} & sjald[19:12] ) |
-                      ( {8{sluimm17_12}} & sluimmd[19:12] );
-
-
-   assign l2[11:0] = l1[11:0];
-
-
-   // merge in branch offset and store immediates
-
-   logic [8:1]   sbr8d;
-   logic [6:2]   uswimm6d;
-   logic [7:2]   uswspimm7d;
-
-
-   assign sbr8d[8:1] =   { i[12], i[6], i[5], i[2], i[11], i[10], i[4], i[3] };
-
-   assign uswimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign uswspimm7d[7:2] = { i[8:7], i[12:9] };
-
-   assign l3[31:25] = ( l2[31:25] ) |
-                      ( {7{sbroffset8_1}} & { {4{sbr8d[8]}},sbr8d[7:5] } ) |
-                      ( {7{uswimm6_2}}    & { 5'b0, uswimm6d[6:5] } ) |
-                      ( {7{uswspimm7_2}} & { 4'b0, uswspimm7d[7:5] } );
-
-
-   assign l3[24:12] = l2[24:12];
-
-   assign l3[11:7] = ( l2[11:7] ) |
-                     ( {5{sbroffset8_1}} & { sbr8d[4:1], sbr8d[8] } ) |
-                     ( {5{uswimm6_2}} & { uswimm6d[4:2], 2'b0 } ) |
-                     ( {5{uswspimm7_2}} & { uswspimm7d[4:2], 2'b0 } );
-
-   assign l3[6:0] = l2[6:0];
-
-
-   assign dout[31:0] = l3[31:0] & {32{legal}};
-
-
-// file "cdecode" is human readable file that has all of the compressed instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "cdecode" except legal equation:
-
-// 1) coredecode -in cdecode > cdecode.e
-
-// 2) espresso -Dso -oeqntott cdecode.e | addassign > compress_equations
-
-// to generate the legal (16b compressed instruction is legal)  equation below:
-
-// 1) coredecode -in cdecode -legal > clegal.e
-
-// 2) espresso -Dso -oeqntott clegal.e | addassign > clegal_equation
-
-
-
-
-
-// espresso decodes
-assign rdrd = (!i[14]&i[6]&i[1]) | (!i[15]&i[14]&i[11]&i[0]) | (!i[14]&i[5]&i[1]) | (
-    !i[15]&i[14]&i[10]&i[0]) | (!i[14]&i[4]&i[1]) | (!i[15]&i[14]&i[9]
-    &i[0]) | (!i[14]&i[3]&i[1]) | (!i[15]&i[14]&!i[8]&i[0]) | (!i[14]
-    &i[2]&i[1]) | (!i[15]&i[14]&i[7]&i[0]) | (!i[15]&i[1]) | (!i[15]
-    &!i[13]&i[0]);
-
-assign rdrs1 = (!i[14]&i[12]&i[11]&i[1]) | (!i[14]&i[12]&i[10]&i[1]) | (!i[14]
-    &i[12]&i[9]&i[1]) | (!i[14]&i[12]&i[8]&i[1]) | (!i[14]&i[12]&i[7]
-    &i[1]) | (!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[6]&i[1]) | (!i[14]&i[12]&i[5]&i[1]) | (!i[14]&i[12]&i[4]
-    &i[1]) | (!i[14]&i[12]&i[3]&i[1]) | (!i[14]&i[12]&i[2]&i[1]) | (
-    !i[15]&!i[14]&!i[13]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign rs2rs2 = (i[15]&i[6]&i[1]) | (i[15]&i[5]&i[1]) | (i[15]&i[4]&i[1]) | (
-    i[15]&i[3]&i[1]) | (i[15]&i[2]&i[1]) | (i[15]&i[14]&i[1]);
-
-assign rdprd = (i[15]&!i[14]&!i[13]&i[0]);
-
-assign rdprs1 = (i[15]&!i[13]&i[0]) | (i[15]&i[14]&i[0]) | (i[14]&!i[1]&!i[0]);
-
-assign rs2prs2 = (i[15]&!i[14]&!i[13]&i[11]&i[10]&i[0]) | (i[15]&!i[1]&!i[0]);
-
-assign rs2prd = (!i[15]&!i[1]&!i[0]);
-
-assign uimm9_2 = (!i[14]&!i[1]&!i[0]);
-
-assign ulwimm6_2 = (!i[15]&i[14]&!i[1]&!i[0]);
-
-assign ulwspimm7_2 = (!i[15]&i[14]&i[1]);
-
-assign rdeq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign rdeq1 = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (!i[15]&!i[14]&i[13]);
-
-assign rs1eq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]) | (i[14]
-    &i[1]) | (!i[14]&!i[1]&!i[0]);
-
-assign sbroffset8_1 = (i[15]&i[14]&i[0]);
-
-assign simm9_4 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign simm5_0 = (!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (!i[15]&!i[13]&i[0]);
-
-assign sjaloffset11_1 = (!i[14]&i[13]);
-
-assign sluimm17_12 = (!i[15]&i[14]&i[13]&i[7]) | (!i[15]&i[14]&i[13]&!i[8]) | (
-    !i[15]&i[14]&i[13]&i[9]) | (!i[15]&i[14]&i[13]&i[10]) | (!i[15]&i[14]
-    &i[13]&i[11]);
-
-assign uimm5_0 = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign uswimm6_2 = (i[15]&!i[1]&!i[0]);
-
-assign uswspimm7_2 = (i[15]&i[14]&i[1]);
-
-assign o[31]  = 1'b0;
-
-assign o[30] = (i[15]&!i[14]&!i[13]&i[10]&!i[6]&!i[5]&i[0]) | (i[15]&!i[14]
-    &!i[13]&!i[11]&i[10]&i[0]);
-
-assign o[29]  = 1'b0;
-
-assign o[28]  = 1'b0;
-
-assign o[27]  = 1'b0;
-
-assign o[26]  = 1'b0;
-
-assign o[25]  = 1'b0;
-
-assign o[24]  = 1'b0;
-
-assign o[23]  = 1'b0;
-
-assign o[22]  = 1'b0;
-
-assign o[21]  = 1'b0;
-
-assign o[20] = (!i[14]&i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]
-    &!i[3]&!i[2]&i[1]);
-
-assign o[19]  = 1'b0;
-
-assign o[18]  = 1'b0;
-
-assign o[17]  = 1'b0;
-
-assign o[16]  = 1'b0;
-
-assign o[15]  = 1'b0;
-
-assign o[14] = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (i[15]&!i[14]&!i[13]&!i[10]
-    &i[0]) | (i[15]&!i[14]&!i[13]&i[6]&i[0]) | (i[15]&!i[14]&!i[13]&i[5]
-    &i[0]);
-
-assign o[13] = (i[15]&!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (i[15]&!i[14]&!i[13]
-    &i[11]&i[6]&i[0]) | (i[14]&!i[0]);
-
-assign o[12] = (i[15]&!i[14]&!i[13]&i[6]&i[5]&i[0]) | (i[15]&!i[14]&!i[13]&!i[11]
-    &i[0]) | (i[15]&!i[14]&!i[13]&!i[10]&i[0]) | (!i[15]&!i[14]&i[1]) | (
-    i[15]&i[14]&i[13]);
-
-assign o[11]  = 1'b0;
-
-assign o[10]  = 1'b0;
-
-assign o[9]  = 1'b0;
-
-assign o[8]  = 1'b0;
-
-assign o[7]  = 1'b0;
-
-assign o[6] = (i[15]&!i[14]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&!i[0]) | (!i[14]&i[13]) | (
-    i[15]&i[14]&i[0]);
-
-assign o[5] = (i[15]&!i[0]) | (i[15]&i[11]&i[10]) | (i[13]&!i[8]) | (i[13]&i[7]) | (
-    i[13]&i[9]) | (i[13]&i[10]) | (i[13]&i[11]) | (!i[14]&i[13]) | (
-    i[15]&i[14]);
-
-assign o[4] = (!i[14]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[0]) | (!i[15]&!i[14]
-    &!i[0]) | (!i[14]&i[6]&!i[0]) | (!i[15]&i[14]&i[0]) | (!i[14]&i[5]
-    &!i[0]) | (!i[14]&i[4]&!i[0]) | (!i[14]&!i[13]&i[0]) | (!i[14]&i[3]
-    &!i[0]) | (!i[14]&i[2]&!i[0]);
-
-assign o[3] = (!i[14]&i[13]);
-
-assign o[2] = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (i[15]&!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]
-    &!i[0]) | (!i[15]&i[13]&!i[8]) | (!i[15]&i[13]&i[7]) | (!i[15]&i[13]
-    &i[9]) | (!i[15]&i[13]&i[10]) | (!i[15]&i[13]&i[11]) | (!i[14]&i[13]);
-
-// 32b instruction has lower two bits 2'b11
-
-assign o[1]  = 1'b1;
-
-assign o[0]  = 1'b1;
-
-assign legal = (!i[13]&!i[12]&i[11]&i[1]&!i[0]) | (!i[13]&!i[12]&i[6]&i[1]&!i[0]) | (
-    !i[15]&!i[13]&i[11]&!i[1]) | (!i[13]&!i[12]&i[5]&i[1]&!i[0]) | (
-    !i[13]&!i[12]&i[10]&i[1]&!i[0]) | (!i[15]&!i[13]&i[6]&!i[1]) | (
-    i[15]&!i[12]&!i[1]&i[0]) | (!i[13]&!i[12]&i[9]&i[1]&!i[0]) | (!i[12]
-    &i[6]&!i[1]&i[0]) | (!i[15]&!i[13]&i[5]&!i[1]) | (!i[13]&!i[12]&i[8]
-    &i[1]&!i[0]) | (!i[12]&i[5]&!i[1]&i[0]) | (!i[15]&!i[13]&i[10]&!i[1]) | (
-    !i[13]&!i[12]&i[7]&i[1]&!i[0]) | (i[12]&i[11]&!i[10]&!i[1]&i[0]) | (
-    !i[15]&!i[13]&i[9]&!i[1]) | (!i[13]&!i[12]&i[4]&i[1]&!i[0]) | (i[13]
-    &i[12]&!i[1]&i[0]) | (!i[15]&!i[13]&i[8]&!i[1]) | (!i[13]&!i[12]&i[3]
-    &i[1]&!i[0]) | (i[13]&i[4]&!i[1]&i[0]) | (!i[13]&!i[12]&i[2]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[7]&!i[1]) | (i[13]&i[3]&!i[1]&i[0]) | (
-    i[13]&i[2]&!i[1]&i[0]) | (i[14]&!i[13]&!i[1]) | (!i[14]&!i[12]&!i[1]
-    &i[0]) | (i[15]&!i[13]&i[12]&i[1]&!i[0]) | (!i[15]&!i[13]&!i[12]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[12]&!i[1]) | (i[14]&!i[13]&!i[0]);
-
-
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_ic_mem.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_ic_mem.sv
deleted file mode 100644
index f849bc0..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_ic_mem.sv
+++ /dev/null
@@ -1,1458 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-////////////////////////////////////////////////////
-//   ICACHE DATA & TAG MODULE WRAPPER              //
-/////////////////////////////////////////////////////
-module eb1_ifu_ic_mem
-import eb1_pkg::*;
- #(
-`include "eb1_param.vh"
- )
-  (
-      input logic                                   clk,                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-      input logic                                   active_clk,         // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-      input logic                                   rst_l,              // reset, active low
-      input logic                                   clk_override,       // Override non-functional clock gating
-      input logic                                   dec_tlu_core_ecc_disable,  // Disable ECC checking
-
-      input logic [31:1]                            ic_rw_addr,
-      input logic [pt.ICACHE_NUM_WAYS-1:0]          ic_wr_en  ,         // Which way to write
-      input logic                                   ic_rd_en  ,         // Read enable
-      input logic [pt.ICACHE_INDEX_HI:3]            ic_debug_addr,      // Read/Write addresss to the Icache.
-      input logic                                   ic_debug_rd_en,     // Icache debug rd
-      input logic                                   ic_debug_wr_en,     // Icache debug wr
-      input logic                                   ic_debug_tag_array, // Debug tag array
-      input logic [pt.ICACHE_NUM_WAYS-1:0]          ic_debug_way,       // Debug way. Rd or Wr.
-      input logic [63:0]                            ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-      input logic                                   ic_sel_premux_data, // Select the pre_muxed data
-
-      input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]  ic_wr_data,         // Data to fill to the Icache. With ECC
-      output logic [63:0]                           ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      output logic [70:0]                           ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      output logic [25:0]                           ictag_debug_rd_data,// Debug icache tag.
-      input logic  [70:0]                           ic_debug_wr_data,   // Debug wr cache.
-
-      output logic [pt.ICACHE_BANKS_WAY-1:0]        ic_eccerr,          // ecc error per bank
-      output logic [pt.ICACHE_BANKS_WAY-1:0]        ic_parerr,          // ecc error per bank
-      input logic [pt.ICACHE_NUM_WAYS-1:0]          ic_tag_valid,       // Valid from the I$ tag valid outside (in flops).
-      input eb1_ic_data_ext_in_pkt_t [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,   // this is being driven by the top level for soc testing/etc
-      input eb1_ic_tag_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0]                          ic_tag_ext_in_pkt,    // this is being driven by the top level for soc testing/etc
-
-      output logic [pt.ICACHE_NUM_WAYS-1:0]         ic_rd_hit,          // ic_rd_hit[3:0]
-      output logic                                  ic_tag_perr,        // Tag Parity error
-      input  logic                                  scan_mode           // Flop scan mode control
-      ) ;
-
-
-
-
-   eb1_IC_TAG #(.pt(pt)) ic_tag_inst
-          (
-           .*,
-           .ic_wr_en     (ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]),
-           .ic_debug_addr(ic_debug_addr[pt.ICACHE_INDEX_HI:3]),
-           .ic_rw_addr   (ic_rw_addr[31:3])
-           ) ;
-
-   eb1_IC_DATA #(.pt(pt)) ic_data_inst
-          (
-           .*,
-           .ic_wr_en     (ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]),
-           .ic_debug_addr(ic_debug_addr[pt.ICACHE_INDEX_HI:3]),
-           .ic_rw_addr   (ic_rw_addr[31:1])
-           ) ;
-
- endmodule
-
-
-/////////////////////////////////////////////////
-////// ICACHE DATA MODULE    ////////////////////
-/////////////////////////////////////////////////
-module eb1_IC_DATA
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-     (
-      input logic clk,
-      input logic active_clk,
-      input logic rst_l,
-      input logic clk_override,
-
-      input logic [31:1]                  ic_rw_addr,
-      input logic [pt.ICACHE_NUM_WAYS-1:0]ic_wr_en,
-      input logic                          ic_rd_en,           // Read enable
-
-      input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]    ic_wr_data,         // Data to fill to the Icache. With ECC
-      output logic [63:0]                             ic_rd_data ,                                 // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      input  logic [70:0]                             ic_debug_wr_data,   // Debug wr cache.
-      output logic [70:0]                             ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      output logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-      output logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    // ecc error per bank
-      input logic [pt.ICACHE_INDEX_HI:3]     ic_debug_addr,     // Read/Write addresss to the Icache.
-      input logic                            ic_debug_rd_en,      // Icache debug rd
-      input logic                            ic_debug_wr_en,      // Icache debug wr
-      input logic                            ic_debug_tag_array,  // Debug tag array
-      input logic [pt.ICACHE_NUM_WAYS-1:0]   ic_debug_way,        // Debug way. Rd or Wr.
-      input logic [63:0]                     ic_premux_data,      // Premux data to be muxed with each way of the Icache.
-      input logic                            ic_sel_premux_data,  // Select the pre_muxed data
-
-      input logic [pt.ICACHE_NUM_WAYS-1:0]ic_rd_hit,
-      input eb1_ic_data_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,   // this is being driven by the top level for soc testing/etc
-      input  logic                         scan_mode
-
-      ) ;
-
-   logic [pt.ICACHE_TAG_INDEX_LO-1:1]                                             ic_rw_addr_ff;
-   logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_WAYS-1:0]                        ic_b_sb_wren;    //bank x ways
-   logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_WAYS-1:0]                        ic_b_sb_rden;    //bank x ways
-
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_rden;       //bank
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_rden_ff;    //bank
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_debug_sel_sb;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][70:0]                  wb_dout ;       //  ways x bank
-   logic [pt.ICACHE_BANKS_WAY-1:0][70:0]                                          ic_sb_wr_data, ic_bank_wr_data, wb_dout_ecc_bank;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [141:0]                                         wb_dout_way_pre;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [63:0]                                          wb_dout_way, wb_dout_way_with_premux;
-   logic [141:0]                                                                  wb_dout_ecc;
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                bank_check_en;
-
-   logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_WAYS-1:0]                        ic_bank_way_clken;
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_bank_way_clken_final;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                        ic_bank_way_clken_final_up;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_debug_rd_way_en;    // debug wr_way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_debug_rd_way_en_ff; // debug wr_way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_debug_wr_way_en;    // debug wr_way
-   logic [pt.ICACHE_INDEX_HI:1]                                                   ic_rw_addr_q;
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]       [pt.ICACHE_INDEX_HI : pt.ICACHE_DATA_INDEX_LO] ic_rw_addr_bank_q;
-
-   logic [pt.ICACHE_TAG_LO-1 : pt.ICACHE_DATA_INDEX_LO]                           ic_rw_addr_q_inc;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_rd_hit_q;
-
-
-
-      logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_sram_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_read_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_write_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0] [31 : pt.ICACHE_DATA_INDEX_LO]  wb_index_hold;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en;     //bank
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en_ff;  //bank
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 index_valid;  //bank
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_clear_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match_index_only;
-
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_sram_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_read_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_write_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0] [31 : pt.ICACHE_DATA_INDEX_LO]  wb_index_hold_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en_up;     //bank
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en_ff_up;  //bank
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 index_valid_up;  //bank
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_clear_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match_index_only_up;
-
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr;
-   logic [pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr_index_only;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr_up;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr_index_only_up;
-
-
-
-   logic                                                                          ic_rd_en_with_debug;
-   logic                                                                          ic_rw_addr_wrap, ic_cacheline_wrap_ff;
-   logic                                                                          ic_debug_rd_en_ff;
-
-
-//-----------------------------------------------------------
-// ----------- Logic section starts here --------------------
-//-----------------------------------------------------------
-   assign  ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_rd_en & ~ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-   assign  ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ~ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-   logic end_of_cache_line;
-   assign end_of_cache_line = (pt.ICACHE_LN_SZ==7'h40) ? (&ic_rw_addr_q[5:4]) : ic_rw_addr_q[4];
-   always_comb begin : clkens
-      ic_bank_way_clken  = '0;
-
-      for ( int i=0; i<pt.ICACHE_BANKS_WAY; i++) begin: wr_ens
-       ic_b_sb_wren[i]        =  ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]  |
-                                       (ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{ic_debug_addr[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == i}}) ;
-       ic_debug_sel_sb[i]     = (ic_debug_addr[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == i );
-       ic_sb_wr_data[i]       = (ic_debug_sel_sb[i] & ic_debug_wr_en) ? ic_debug_wr_data : ic_bank_wr_data[i] ;
-       ic_b_rden[i]           =  ic_rd_en_with_debug & ( ( ~ic_rw_addr_q[pt.ICACHE_BANK_HI] & (i==0)) |
-                                                        (( ic_rw_addr_q[pt.ICACHE_BANK_HI] & ic_rw_addr_q[2:1] == 2'b11) & (i==0) & ~end_of_cache_line) |
-                                                         (  ic_rw_addr_q[pt.ICACHE_BANK_HI] & (i==1)) |
-                                                         ((~ic_rw_addr_q[pt.ICACHE_BANK_HI] & ic_rw_addr_q[2:1] == 2'b11) & (i==1)) ) ;
-
-
-
-       ic_b_sb_rden[i]        =  {pt.ICACHE_NUM_WAYS{ic_b_rden[i]}}   ;
-
-       for ( int j=0; j<pt.ICACHE_NUM_WAYS; j++) begin: way_clkens
-         ic_bank_way_clken[i][j] |= ic_b_sb_rden[i][j] | clk_override | ic_b_sb_wren[i][j];
-       end
-     end // block: wr_ens
-   end // block: clkens
-
-// bank read enables
-  assign ic_rd_en_with_debug                          = (ic_rd_en   | ic_debug_rd_en ) & ~(|ic_wr_en);
-  assign ic_rw_addr_q[pt.ICACHE_INDEX_HI:1] = (ic_debug_rd_en | ic_debug_wr_en) ?
-                                              {ic_debug_addr[pt.ICACHE_INDEX_HI:3],2'b0} :
-                                              ic_rw_addr[pt.ICACHE_INDEX_HI:1] ;
-
-   assign ic_rw_addr_q_inc[pt.ICACHE_TAG_LO-1:pt.ICACHE_DATA_INDEX_LO] = ic_rw_addr_q[pt.ICACHE_TAG_LO-1 : pt.ICACHE_DATA_INDEX_LO] + 1 ;
-   assign ic_rw_addr_wrap                                        = ic_rw_addr_q[pt.ICACHE_BANK_HI] & (ic_rw_addr_q[2:1] == 2'b11) & ic_rd_en_with_debug & ~(|ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]);
-   assign ic_cacheline_wrap_ff                                   = ic_rw_addr_ff[pt.ICACHE_TAG_INDEX_LO-1:pt.ICACHE_BANK_LO] == {(pt.ICACHE_TAG_INDEX_LO - pt.ICACHE_BANK_LO){1'b1}};
-
-
-   assign ic_rw_addr_bank_q[0] = ~ic_rw_addr_wrap ? ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO] : {ic_rw_addr_q[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] , ic_rw_addr_q_inc[pt.ICACHE_TAG_INDEX_LO-1: pt.ICACHE_DATA_INDEX_LO] } ;
-   assign ic_rw_addr_bank_q[1] = ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO];
-
-
-   rvdffie #(.WIDTH(int'(pt.ICACHE_TAG_INDEX_LO+pt.ICACHE_BANKS_WAY+pt.ICACHE_NUM_WAYS)),.OVERRIDE(1)) miscff
-            (.*,
-             .din({ ic_b_rden[pt.ICACHE_BANKS_WAY-1:0],   ic_rw_addr_q[pt.ICACHE_TAG_INDEX_LO-1:1], ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0],   ic_debug_rd_en}),
-             .dout({ic_b_rden_ff[pt.ICACHE_BANKS_WAY-1:0],ic_rw_addr_ff[pt.ICACHE_TAG_INDEX_LO-1:1],ic_debug_rd_way_en_ff[pt.ICACHE_NUM_WAYS-1:0],ic_debug_rd_en_ff})
-             );
-
- if (pt.ICACHE_WAYPACK == 0 ) begin : PACKED_0
-
-
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr_in_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]       sel_bypass_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]       sel_bypass_ff_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][(71*pt.ICACHE_NUM_WAYS)-1:0]    sel_bypass_data_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                 any_bypass_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                 any_addr_match_up;
-
-`define eb1_IC_DATA_SRAM(depth,width)                                                                               \
-           ram_``depth``x``width ic_bank_sb_way_data (                                                               \
-                                     .ME(ic_bank_way_clken_final_up[i][k]),                                          \
-                                     .WE (ic_b_sb_wren[k][i]),                                                       \
-                                     .D  (ic_sb_wr_data[k][``width-1:0]),                                            \
-                                     .ADR(ic_rw_addr_bank_q[k][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO]),         \
-                                     .Q  (wb_dout_pre_up[i][k]),                                                     \
-                                     .CLK (clk),                                                                     \
-                                     .ROP ( ),                                                                       \
-                                     .TEST1(ic_data_ext_in_pkt[i][k].TEST1),                                         \
-                                     .RME(ic_data_ext_in_pkt[i][k].RME),                                             \
-                                     .RM(ic_data_ext_in_pkt[i][k].RM),                                               \
-                                                                                                                     \
-                                     .LS(ic_data_ext_in_pkt[i][k].LS),                                               \
-                                     .DS(ic_data_ext_in_pkt[i][k].DS),                                               \
-                                     .SD(ic_data_ext_in_pkt[i][k].SD),                                               \
-                                                                                                                     \
-                                     .TEST_RNM(ic_data_ext_in_pkt[i][k].TEST_RNM),                                   \
-                                     .BC1(ic_data_ext_in_pkt[i][k].BC1),                                             \
-                                     .BC2(ic_data_ext_in_pkt[i][k].BC2)                                              \
-                                    );  \
-if (pt.ICACHE_BYPASS_ENABLE == 1) begin \
-                 assign wrptr_in_up[i][k] = (wrptr_up[i][k] == (pt.ICACHE_NUM_BYPASS-1)) ? '0 : (wrptr_up[i][k] + 1'd1);                                    \
-                 rvdffs  #(pt.ICACHE_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk),  .en(|write_bypass_en_up[i][k]), .din (wrptr_in_up[i][k]), .dout(wrptr_up[i][k])) ;     \
-                 assign ic_b_sram_en_up[i][k]              = ic_bank_way_clken[k][i];                             \
-                 assign ic_b_read_en_up[i][k]              =  ic_b_sram_en_up[i][k] &   ic_b_sb_rden[k][i];       \
-                 assign ic_b_write_en_up[i][k]             =  ic_b_sram_en_up[i][k] &   ic_b_sb_wren[k][i];       \
-                 assign ic_bank_way_clken_final_up[i][k]   =  ic_b_sram_en_up[i][k] &    ~(|sel_bypass_up[i][k]); \
-                 assign ic_b_rw_addr_up[i][k] = {ic_rw_addr[31:pt.ICACHE_INDEX_HI+1],ic_rw_addr_bank_q[k]};       \
-                 assign ic_b_rw_addr_index_only_up[i][k] = ic_rw_addr_bank_q[k];                                  \
-                 always_comb begin                                                                                \
-                    any_addr_match_up[i][k] = '0;                                                                 \
-                    for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                              \
-                       any_addr_match_up[i][k] |= ic_b_addr_match_up[i][k][l];                                    \
-                    end                                                                                           \
-                 end                                                                                              \
-                // it is an error to ever have 2 entries with the same index and both valid                       \
-                for (genvar l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin: BYPASS                                       \
-                   // full match up to bit 31                                                                     \
-                   assign ic_b_addr_match_up[i][k][l] = (wb_index_hold_up[i][k][l] ==  ic_b_rw_addr_up[i][k]) & index_valid_up[i][k][l];            \
-                   assign ic_b_addr_match_index_only_up[i][k][l] = (wb_index_hold_up[i][k][l][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO] ==  ic_b_rw_addr_index_only_up[i][k]) & index_valid_up[i][k][l];            \
-                                                                                                                                                    \
-                   assign ic_b_clear_en_up[i][k][l]   = ic_b_write_en_up[i][k] &   ic_b_addr_match_index_only_up[i][k][l];                                     \
-                                                                                                                                                    \
-                   assign sel_bypass_up[i][k][l]      = ic_b_read_en_up[i][k]  &   ic_b_addr_match_up[i][k][l] ;                                    \
-                                                                                                                                                    \
-                   assign write_bypass_en_up[i][k][l] = ic_b_read_en_up[i][k]  &  ~any_addr_match_up[i][k] & (wrptr_up[i][k] == l);                 \
-                                                                                                                                                    \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                                 .din(write_bypass_en_up[i][k][l]), .dout(write_bypass_en_ff_up[i][k][l])) ; \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en_up[i][k][l] | ic_b_clear_en_up[i][k][l]),   .din(~ic_b_clear_en_up[i][k][l]),  .dout(index_valid_up[i][k][l])) ;       \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                                 .din(sel_bypass_up[i][k][l]),      .dout(sel_bypass_ff_up[i][k][l])) ;     \
-                   rvdffe #((31-pt.ICACHE_DATA_INDEX_LO+1)) ic_addr_index    (.*, .en(write_bypass_en_up[i][k][l]),    .din (ic_b_rw_addr_up[i][k]), .dout(wb_index_hold_up[i][k][l]));         \
-                   rvdffe #(``width)                             rd_data_hold_ff  (.*, .en(write_bypass_en_ff_up[i][k][l]), .din (wb_dout_pre_up[i][k]),  .dout(wb_dout_hold_up[i][k][l]));     \
-                end                                                                                                                       \
-                always_comb begin                                                                                                         \
-                 any_bypass_up[i][k] = '0;                                                                                                \
-                 sel_bypass_data_up[i][k] = '0;                                                                                           \
-                 for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                                                         \
-                    any_bypass_up[i][k]      |=  sel_bypass_ff_up[i][k][l];                                                               \
-                    sel_bypass_data_up[i][k] |= (sel_bypass_ff_up[i][k][l]) ? wb_dout_hold_up[i][k][l] : '0;                              \
-                 end                                                                                                                      \
-                 wb_dout[i][k]   =   any_bypass_up[i][k] ?  sel_bypass_data_up[i][k] :  wb_dout_pre_up[i][k] ;                            \
-                 end                                                                                                                      \
-             end                                                                                                                          \
-             else begin                                                                                                                   \
-                 assign wb_dout[i][k]                      =   wb_dout_pre_up[i][k] ;                                                     \
-                 assign ic_bank_way_clken_final_up[i][k]   =  ic_bank_way_clken[i][k];                                                    \
-             end
-
-
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-      for (genvar k=0; k<pt.ICACHE_BANKS_WAY; k++) begin: BANKS_WAY   // 16B subbank
-      if (pt.ICACHE_ECC) begin : ECC1
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [71-1:0]        wb_dout_pre_up;           // data and its bit enables
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [71-1:0]  wb_dout_hold_up;
-
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           `eb1_IC_DATA_SRAM(8192,71)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           `eb1_IC_DATA_SRAM(4096,71)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           `eb1_IC_DATA_SRAM(2048,71)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           `eb1_IC_DATA_SRAM(1024,71)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           `eb1_IC_DATA_SRAM(512,71)
-        end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           `eb1_IC_DATA_SRAM(256,71)
-         end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           `eb1_IC_DATA_SRAM(128,71)
-         end
-         else  begin : size_64
-           `eb1_IC_DATA_SRAM(64,71)
-         end
-      end // if (pt.ICACHE_ECC)
-
-     else  begin  : ECC0
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [68-1:0]        wb_dout_pre_up;           // data and its bit enables
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [68-1:0]  wb_dout_hold_up;
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           `eb1_IC_DATA_SRAM(8192,68)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           `eb1_IC_DATA_SRAM(4096,68)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           `eb1_IC_DATA_SRAM(2048,68)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           `eb1_IC_DATA_SRAM(1024,68)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           `eb1_IC_DATA_SRAM(512,68)
-        end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           `eb1_IC_DATA_SRAM(256,68)
-         end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           `eb1_IC_DATA_SRAM(128,68)
-         end
-         else  begin : size_64
-           `eb1_IC_DATA_SRAM(64,68)
-         end
-      end // else: !if(pt.ICACHE_ECC)
-      end // block: BANKS_WAY
-   end // block: WAYS
-
- end // block: PACKED_0
-
- // WAY PACKED
- else begin : PACKED_1
-
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr;
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr_in;
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                       sel_bypass;
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                       sel_bypass_ff;
-
-
-    logic [pt.ICACHE_BANKS_WAY-1:0][(71*pt.ICACHE_NUM_WAYS)-1:0]  sel_bypass_data;
-    logic [pt.ICACHE_BANKS_WAY-1:0]                               any_bypass;
-    logic [pt.ICACHE_BANKS_WAY-1:0]                               any_addr_match;
-
-
-// SRAM macros
-
-`define eb1_PACKED_IC_DATA_SRAM(depth,width,waywidth)                                                                                                 \
-            ram_be_``depth``x``width  ic_bank_sb_way_data (                                                                                           \
-                            .CLK   (clk),                                                                                                             \
-                            .WE    (|ic_b_sb_wren[k]),                                                    // OR of all the ways in the bank           \
-                            .WEM   (ic_b_sb_bit_en_vec[k]),                                               // 284 bits of bit enables                  \
-                            .D     ({pt.ICACHE_NUM_WAYS{ic_sb_wr_data[k][``waywidth-1:0]}}),                                                          \
-                            .ADR   (ic_rw_addr_bank_q[k][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO]),                                                \
-                            .Q     (wb_packeddout_pre[k]),                                                                                            \
-                            .ME    (|ic_bank_way_clken_final[k]),                                                                                     \
-                            .ROP   ( ),                                                                                                               \
-                            .TEST1  (ic_data_ext_in_pkt[0][k].TEST1),                                                                                 \
-                            .RME   (ic_data_ext_in_pkt[0][k].RME),                                                                                    \
-                            .RM    (ic_data_ext_in_pkt[0][k].RM),                                                                                     \
-                                                                                                                                                      \
-                            .LS    (ic_data_ext_in_pkt[0][k].LS),                                                                                     \
-                            .DS    (ic_data_ext_in_pkt[0][k].DS),                                                                                     \
-                            .SD    (ic_data_ext_in_pkt[0][k].SD),                                                                                     \
-                                                                                                                                                      \
-                            .TEST_RNM (ic_data_ext_in_pkt[0][k].TEST_RNM),                                                                            \
-                            .BC1      (ic_data_ext_in_pkt[0][k].BC1),                                                                                 \
-                            .BC2      (ic_data_ext_in_pkt[0][k].BC2)                                                                                  \
-                           );                                                                                                                         \
-                                                                                                                                                      \
-              if (pt.ICACHE_BYPASS_ENABLE == 1) begin                                                                                                                                                 \
-                                                                                                                                                                                                      \
-                 assign wrptr_in[k] = (wrptr[k] == (pt.ICACHE_NUM_BYPASS-1)) ? '0 : (wrptr[k] + 1'd1);                                                                                                \
-                                                                                                                                                                                                      \
-                 rvdffs  #(pt.ICACHE_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk), .en(|write_bypass_en[k]), .din (wrptr_in[k]), .dout(wrptr[k])) ;                                                                       \
-                                                                                                                                                                                                      \
-                 assign ic_b_sram_en[k]              = |ic_bank_way_clken[k];                                                                                                                         \
-                                                                                                                                                                                                      \
-                                                                                                                                                                                                      \
-                 assign ic_b_read_en[k]              =  ic_b_sram_en[k]  &  (|ic_b_sb_rden[k]) ;                                                                                                              \
-                 assign ic_b_write_en[k]             =  ic_b_sram_en[k] &   (|ic_b_sb_wren[k]);                                                                                                       \
-                 assign ic_bank_way_clken_final[k]   =  ic_b_sram_en[k] &    ~(|sel_bypass[k]);                                                                                                       \
-                                                                                                                                                                                                      \
-                 assign ic_b_rw_addr[k] = {ic_rw_addr[31:pt.ICACHE_INDEX_HI+1],ic_rw_addr_bank_q[k]};                                                                                                 \
-                 assign ic_b_rw_addr_index_only[k] = ic_rw_addr_bank_q[k];                                                                                                    \
-                                                                                                                                                                                                      \
-                 always_comb begin                                                                                                                                                                    \
-                    any_addr_match[k] = '0;                                                                                                                                                           \
-                                                                                                                                                                                                      \
-                    for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                                                                                                                  \
-                       any_addr_match[k] |= ic_b_addr_match[k][l];                                                                                                                                    \
-                    end                                                                                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                // it is an error to ever have 2 entries with the same index and both valid                                                                                                           \
-                for (genvar l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin: BYPASS                                                                                                                           \
-                                                                                                                                                                                                      \
-                   // full match up to bit 31                                                                                                                                                         \
-                   assign ic_b_addr_match[k][l] = (wb_index_hold[k][l] ==  ic_b_rw_addr[k]) & index_valid[k][l];                                                                                      \
-                   assign ic_b_addr_match_index_only[k][l] = (wb_index_hold[k][l][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO] ==  ic_b_rw_addr_index_only[k]) & index_valid[k][l];                    \
-                                                                                                                                                                                                      \
-                   assign ic_b_clear_en[k][l]   = ic_b_write_en[k] &   ic_b_addr_match_index_only[k][l];                                                                                                              \
-                                                                                                                                                                                                      \
-                   assign sel_bypass[k][l]      = ic_b_read_en[k]  &   ic_b_addr_match[k][l] ;                                                                                                        \
-                                                                                                                                                                                                      \
-                   assign write_bypass_en[k][l] = ic_b_read_en[k]  &  ~any_addr_match[k] & (wrptr[k] == l);                                                                                           \
-                                                                                                                                                                                                      \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                     .din(write_bypass_en[k][l]), .dout(write_bypass_en_ff[k][l])) ;                            \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en[k][l] | ic_b_clear_en[k][l]),   .din(~ic_b_clear_en[k][l]),  .dout(index_valid[k][l])) ;                                   \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                     .din(sel_bypass[k][l]),      .dout(sel_bypass_ff[k][l])) ;                                 \
-                                                                                                                                                                                                      \
-                   rvdffe #((31-pt.ICACHE_DATA_INDEX_LO+1)) ic_addr_index    (.*, .en(write_bypass_en[k][l]),    .din (ic_b_rw_addr[k]),      .dout(wb_index_hold[k][l]));                            \
-                   rvdffe #((``waywidth*pt.ICACHE_NUM_WAYS))        rd_data_hold_ff  (.*, .en(write_bypass_en_ff[k][l]), .din (wb_packeddout_pre[k]), .dout(wb_packeddout_hold[k][l]));                       \
-                                                                                                                                                                                                      \
-                end // block: BYPASS                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                always_comb begin                                                                                                                                                                     \
-                 any_bypass[k] = '0;                                                                                                                                                                  \
-                 sel_bypass_data[k] = '0;                                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                                                                                                                     \
-                    any_bypass[k]      |=  sel_bypass_ff[k][l];                                                                                                                                       \
-                      sel_bypass_data[k] |= (sel_bypass_ff[k][l]) ? wb_packeddout_hold[k][l] : '0;                                                                                                    \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                   wb_packeddout[k]   =   any_bypass[k] ?  sel_bypass_data[k] :  wb_packeddout_pre[k] ;                                                                                               \
-                end // always_comb begin                                                                                                                                                              \
-                                                                                                                                                                                                      \
-             end // if (pt.ICACHE_BYPASS_ENABLE == 1)                                                                                                                                                 \
-             else begin                                                                                                                                                                               \
-                 assign wb_packeddout[k]   =   wb_packeddout_pre[k] ;                                                                                                                                 \
-                 assign ic_bank_way_clken_final[k]   =  |ic_bank_way_clken[k] ;                                                                                                                       \
-             end
-
- // generate IC DATA PACKED SRAMS for 2/4 ways
-  for (genvar k=0; k<pt.ICACHE_BANKS_WAY; k++) begin: BANKS_WAY   // 16B subbank
-     if (pt.ICACHE_ECC) begin : ECC1
-        logic [pt.ICACHE_BANKS_WAY-1:0] [(71*pt.ICACHE_NUM_WAYS)-1:0]        wb_packeddout, ic_b_sb_bit_en_vec, wb_packeddout_pre;           // data and its bit enables
-
-        logic [pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [(71*pt.ICACHE_NUM_WAYS)-1:0]  wb_packeddout_hold;
-
-        for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-           assign ic_b_sb_bit_en_vec[k][(71*i)+70:71*i] = {71{ic_b_sb_wren[k][i]}};
-        end
-
-        // SRAMS with ECC (single/double detect; no correct)
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,284,71)    // 64b data + 7b ecc
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,142,71)
-           end // block: WAYS
-        end // block: size_8192
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,142,71)
-           end // block: WAYS
-        end // block: size_4096
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,142,71)
-           end // block: WAYS
-        end // block: size_2048
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,142,71)
-           end // block: WAYS
-        end // block: size_1024
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,142,71)
-           end // block: WAYS
-        end // block: size_512
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,142,71)
-           end // block: WAYS
-        end // block: size_256
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,142,71)
-           end // block: WAYS
-        end // block: size_128
-
-        else  begin : size_64
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,142,71)
-           end // block: WAYS
-        end // block: size_64
-
-
-       for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-          assign wb_dout[i][k][70:0]  = wb_packeddout[k][(71*i)+70:71*i];
-       end : WAYS
-
-       end // if (pt.ICACHE_ECC)
-
-
-     else  begin  : ECC0
-        logic [pt.ICACHE_BANKS_WAY-1:0] [(68*pt.ICACHE_NUM_WAYS)-1:0]        wb_packeddout, ic_b_sb_bit_en_vec, wb_packeddout_pre;           // data and its bit enables
-
-        logic [pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [(68*pt.ICACHE_NUM_WAYS)-1:0]  wb_packeddout_hold;
-
-        for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-           assign ic_b_sb_bit_en_vec[k][(68*i)+67:68*i] = {68{ic_b_sb_wren[k][i]}};
-        end
-
-        // SRAMs with parity
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,272,68)    // 64b data + 4b parity
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,136,68)
-           end // block: WAYS
-        end // block: size_8192
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,136,68)
-           end // block: WAYS
-        end // block: size_4096
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,136,68)
-           end // block: WAYS
-        end // block: size_2048
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,136,68)
-           end // block: WAYS
-        end // block: size_1024
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,136,68)
-           end // block: WAYS
-        end // block: size_512
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,136,68)
-           end // block: WAYS
-        end // block: size_256
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,136,68)
-           end // block: WAYS
-        end // block: size_128
-
-        else  begin : size_64
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,136,68)
-           end // block: WAYS
-        end // block: size_64
-
-       for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-          assign wb_dout[i][k][67:0]  = wb_packeddout[k][(68*i)+67:68*i];
-       end
-     end // block: ECC0
-     end // block: BANKS_WAY
- end // block: PACKED_1
-
-
-   assign ic_rd_hit_q[pt.ICACHE_NUM_WAYS-1:0] = ic_debug_rd_en_ff ? ic_debug_rd_way_en_ff[pt.ICACHE_NUM_WAYS-1:0] : ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] ;
-
-
- if ( pt.ICACHE_ECC ) begin : ECC1_MUX
-
-   assign ic_bank_wr_data[1] = ic_wr_data[1][70:0];
-   assign ic_bank_wr_data[0] = ic_wr_data[0][70:0];
-
-    always_comb begin : rd_mux
-      wb_dout_way_pre[pt.ICACHE_NUM_WAYS-1:0] = '0;
-
-      for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways
-        for ( int j=0; j<pt.ICACHE_BANKS_WAY; j++) begin : banks
-         wb_dout_way_pre[i][70:0]      |=  ({71{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j))}}   &  wb_dout[i][j]);
-         wb_dout_way_pre[i][141 : 71]  |=  ({71{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j-1))}} &  wb_dout[i][j]);
-        end
-      end
-    end
-
-    for ( genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux1
-      assign wb_dout_way[i][63:0] = (ic_rw_addr_ff[2:1] == 2'b00) ? wb_dout_way_pre[i][63:0]   :
-                                    (ic_rw_addr_ff[2:1] == 2'b01) ?{wb_dout_way_pre[i][86:71], wb_dout_way_pre[i][63:16]} :
-                                    (ic_rw_addr_ff[2:1] == 2'b10) ?{wb_dout_way_pre[i][102:71],wb_dout_way_pre[i][63:32]} :
-                                                                   {wb_dout_way_pre[i][119:71],wb_dout_way_pre[i][63:48]};
-
-      assign wb_dout_way_with_premux[i][63:0]  =  ic_sel_premux_data ? ic_premux_data[63:0] : wb_dout_way[i][63:0] ;
-   end
-
-   always_comb begin : rd_out
-      ic_debug_rd_data[70:0]     = '0;
-      ic_rd_data[63:0]           = '0;
-      wb_dout_ecc[141:0]         = '0;
-      for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux2
-         ic_rd_data[63:0]       |= ({64{ic_rd_hit_q[i] | ic_sel_premux_data}}) &  wb_dout_way_with_premux[i][63:0];
-         ic_debug_rd_data[70:0] |= ({71{ic_rd_hit_q[i]}}) & wb_dout_way_pre[i][70:0];
-         wb_dout_ecc[141:0]     |= {142{ic_rd_hit_q[i]}}  & wb_dout_way_pre[i];
-      end
-   end
-
-
- for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_ecc_error
-    assign bank_check_en[i]    = |ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] & ((i==0) | (~ic_cacheline_wrap_ff & (ic_b_rden_ff[pt.ICACHE_BANKS_WAY-1:0] == {pt.ICACHE_BANKS_WAY{1'b1}})));  // always check the lower address bank, and drop the upper address bank on a CL wrap
-    assign wb_dout_ecc_bank[i] = wb_dout_ecc[(71*i)+70:(71*i)];
-
-   rvecc_decode_64  ecc_decode_64 (
-                           .en               (bank_check_en[i]),
-                           .din              (wb_dout_ecc_bank[i][63 : 0]),                // [134:71],  [63:0]
-                           .ecc_in           (wb_dout_ecc_bank[i][70 : 64]),               // [141:135] [70:64]
-                           .ecc_error        (ic_eccerr[i]));
-
-   // or the sb and db error detects into 1 signal called aligndataperr[i] where i corresponds to 2B position
-  assign  ic_parerr[i]  = '0 ;
-  end // block: ic_ecc_error
-
-end // if ( pt.ICACHE_ECC )
-
-else  begin : ECC0_MUX
-   assign ic_bank_wr_data[1] = ic_wr_data[1][70:0];
-   assign ic_bank_wr_data[0] = ic_wr_data[0][70:0];
-
-   always_comb begin : rd_mux
-      wb_dout_way_pre[pt.ICACHE_NUM_WAYS-1:0] = '0;
-
-   for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways
-     for ( int j=0; j<pt.ICACHE_BANKS_WAY; j++) begin : banks
-         wb_dout_way_pre[i][67:0]         |=  ({68{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j))}}   &  wb_dout[i][j][67:0]);
-         wb_dout_way_pre[i][135 : 68]     |=  ({68{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j-1))}} &  wb_dout[i][j][67:0]);
-      end
-     end
-   end
-   // When we straddle the banks like this - the ECC we capture is not correct ??
-   for ( genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux1
-      assign wb_dout_way[i][63:0] = (ic_rw_addr_ff[2:1] == 2'b00) ? wb_dout_way_pre[i][63:0]   :
-                                    (ic_rw_addr_ff[2:1] == 2'b01) ?{wb_dout_way_pre[i][83:68],  wb_dout_way_pre[i][63:16]} :
-                                    (ic_rw_addr_ff[2:1] == 2'b10) ?{wb_dout_way_pre[i][99:68],  wb_dout_way_pre[i][63:32]} :
-                                                                   {wb_dout_way_pre[i][115:68], wb_dout_way_pre[i][63:48]};
-
-      assign wb_dout_way_with_premux[i][63:0]      =  ic_sel_premux_data ? ic_premux_data[63:0]  : wb_dout_way[i][63:0] ;
-   end
-
-   always_comb begin : rd_out
-      ic_rd_data[63:0]   = '0;
-      ic_debug_rd_data[70:0]   = '0;
-      wb_dout_ecc[135:0] = '0;
-
-      for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux2
-         ic_rd_data[63:0]   |= ({64{ic_rd_hit_q[i] | ic_sel_premux_data}} &  wb_dout_way_with_premux[i][63:0]);
-         ic_debug_rd_data[70:0] |= ({71{ic_rd_hit_q[i]}}) & {3'b0,wb_dout_way_pre[i][67:0]};
-         wb_dout_ecc[135:0] |= {136{ic_rd_hit_q[i]}}  & wb_dout_way_pre[i][135:0];
-      end
-   end
-
-   assign wb_dout_ecc_bank[0] =  wb_dout_ecc[67:0];
-   assign wb_dout_ecc_bank[1] =  wb_dout_ecc[135:68];
-
-   logic [pt.ICACHE_BANKS_WAY-1:0][3:0] ic_parerr_bank;
-
-  for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_par_error
-    assign bank_check_en[i]    = |ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] & ((i==0) | (~ic_cacheline_wrap_ff & (ic_b_rden_ff[pt.ICACHE_BANKS_WAY-1:0] == {pt.ICACHE_BANKS_WAY{1'b1}})));  // always check the lower address bank, and drop the upper address bank on a CL wrap
-     for (genvar j=0; j<4; j++)  begin : parity
-      rveven_paritycheck pchk (
-                           .data_in   (wb_dout_ecc_bank[i][16*(j+1)-1: 16*j]),
-                           .parity_in (wb_dout_ecc_bank[i][64+j]),
-                           .parity_err(ic_parerr_bank[i][j] )
-                           );
-        end
-     assign ic_eccerr [i] = '0 ;
-  end
-
-     assign ic_parerr[1] = (|ic_parerr_bank[1][3:0]) & bank_check_en[1];
-     assign ic_parerr[0] = (|ic_parerr_bank[0][3:0]) & bank_check_en[0];
-
-end // else: !if( pt.ICACHE_ECC )
-
-
-endmodule // eb1_IC_DATA
-
-//=============================================================================================================================================================
-///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ END OF IC DATA MODULE \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
-//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-//=============================================================================================================================================================
-
-/////////////////////////////////////////////////
-////// ICACHE TAG MODULE     ////////////////////
-/////////////////////////////////////////////////
-module eb1_IC_TAG
-import eb1_pkg::*;
- #(
-`include "eb1_param.vh"
- )
-     (
-      input logic                                                   clk,
-      input logic                                                   active_clk,
-      input logic                                                   rst_l,
-      input logic                                                   clk_override,
-      input logic                                                   dec_tlu_core_ecc_disable,
-
-      input logic [31:3]                                            ic_rw_addr,
-
-      input logic [pt.ICACHE_NUM_WAYS-1:0]                         ic_wr_en,             // way
-      input logic [pt.ICACHE_NUM_WAYS-1:0]                         ic_tag_valid,
-      input logic                                                  ic_rd_en,
-
-      input logic [pt.ICACHE_INDEX_HI:3]                           ic_debug_addr,        // Read/Write addresss to the Icache.
-      input logic                                                  ic_debug_rd_en,       // Icache debug rd
-      input logic                                                  ic_debug_wr_en,       // Icache debug wr
-      input logic                                                  ic_debug_tag_array,   // Debug tag array
-      input logic [pt.ICACHE_NUM_WAYS-1:0]                         ic_debug_way,         // Debug way. Rd or Wr.
-      input eb1_ic_tag_ext_in_pkt_t   [pt.ICACHE_NUM_WAYS-1:0]    ic_tag_ext_in_pkt,
-
-      output logic [25:0]                                          ictag_debug_rd_data,
-      input  logic [70:0]                                          ic_debug_wr_data,     // Debug wr cache.
-
-      output logic [pt.ICACHE_NUM_WAYS-1:0]                        ic_rd_hit,
-      output logic                                                 ic_tag_perr,
-      input  logic                                                 scan_mode
-   ) ;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] [25:0]                           ic_tag_data_raw;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [25:0]                           ic_tag_data_raw_pre;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [36:pt.ICACHE_TAG_LO]            w_tout;
-   logic [25:0]                                                    ic_tag_wr_data ;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [31:0]                           ic_tag_corrected_data_unc;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [06:0]                           ic_tag_corrected_ecc_unc;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_single_ecc_error;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_double_ecc_error;
-   logic [6:0]                                                     ic_tag_ecc;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_way_perr ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_debug_rd_way_en ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_debug_rd_way_en_ff ;
-
-   logic [pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO]              ic_rw_addr_q;
-   logic [31:pt.ICACHE_TAG_LO]                                     ic_rw_addr_ff;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_rden_q;          // way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_wren;          // way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_wren_q;        // way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_clken;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_debug_wr_way_en;   // debug wr_way
-   logic                                                           ic_rd_en_ff;
-   logic                                                           ic_tag_parity;
-
-
-   assign  ic_tag_wren [pt.ICACHE_NUM_WAYS-1:0]  = ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{(ic_rw_addr[pt.ICACHE_BEAT_ADDR_HI:4] == {pt.ICACHE_BEAT_BITS-1{1'b1}})}} ;
-   assign  ic_tag_clken[pt.ICACHE_NUM_WAYS-1:0]  = {pt.ICACHE_NUM_WAYS{ic_rd_en | clk_override}} | ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0];
-
-   rvdff #(1) rd_en_ff (.*, .clk(active_clk),
-                    .din (ic_rd_en),
-                    .dout(ic_rd_en_ff)) ;
-
-
-   rvdffie #(32-pt.ICACHE_TAG_LO) adr_ff (.*,
-                                          .din ({ic_rw_addr[31:pt.ICACHE_TAG_LO]}),
-                                          .dout({ic_rw_addr_ff[31:pt.ICACHE_TAG_LO]})
-                                          );
-
-   localparam PAD_BITS = 21 - (32 - pt.ICACHE_TAG_LO);  // sizing for a max tag width.
-
-   // tags
-   assign  ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_rd_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-   assign  ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-   assign  ic_tag_wren_q[pt.ICACHE_NUM_WAYS-1:0]  =  ic_tag_wren[pt.ICACHE_NUM_WAYS-1:0]          |
-                                  ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0]   ;
-
-   assign  ic_tag_rden_q[pt.ICACHE_NUM_WAYS-1:0]  =  ({pt.ICACHE_NUM_WAYS{ic_rd_en }}  | ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0] ) &  {pt.ICACHE_NUM_WAYS{~(|ic_wr_en)  & ~ic_debug_wr_en}};
-
-if (pt.ICACHE_TAG_LO == 11) begin: SMALLEST
- if (pt.ICACHE_ECC) begin : ECC1_W
-           rvecc_encode  tag_ecc_encode (
-                                  .din    ({{pt.ICACHE_TAG_LO{1'b0}}, ic_rw_addr[31:pt.ICACHE_TAG_LO]}),
-                                  .ecc_out({ ic_tag_ecc[6:0]}));
-
-   assign  ic_tag_wr_data[25:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[68:64], ic_debug_wr_data[31:11]} :
-                                  {ic_tag_ecc[4:0], ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
- end
-
- else begin : ECC0_W
-           rveven_paritygen #(32-pt.ICACHE_TAG_LO) pargen  (.data_in   (ic_rw_addr[31:pt.ICACHE_TAG_LO]),
-                                                 .parity_out(ic_tag_parity));
-
-   assign  ic_tag_wr_data[21:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[64], ic_debug_wr_data[31:11]} :
-                                  {ic_tag_parity, ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
- end // else: !if(pt.ICACHE_ECC)
-
-end // block: SMALLEST
-
-
-else begin: OTHERS
-  if(pt.ICACHE_ECC) begin :ECC1_W
-           rvecc_encode  tag_ecc_encode (
-                                  .din    ({{pt.ICACHE_TAG_LO{1'b0}}, ic_rw_addr[31:pt.ICACHE_TAG_LO]}),
-                                  .ecc_out({ ic_tag_ecc[6:0]}));
-
-   assign  ic_tag_wr_data[25:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[68:64],ic_debug_wr_data[31:11]} :
-                                  {ic_tag_ecc[4:0], {PAD_BITS{1'b0}},ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
-
-  end
-  else  begin :ECC0_W
-   logic   ic_tag_parity ;
-           rveven_paritygen #(32-pt.ICACHE_TAG_LO) pargen  (.data_in   (ic_rw_addr[31:pt.ICACHE_TAG_LO]),
-                                                 .parity_out(ic_tag_parity));
-   assign  ic_tag_wr_data[21:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[64], ic_debug_wr_data[31:11]} :
-                                  {ic_tag_parity, {PAD_BITS{1'b0}},ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
-  end // else: !if(pt.ICACHE_ECC)
-
-end // block: OTHERS
-
-
-    assign ic_rw_addr_q[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] = (ic_debug_rd_en | ic_debug_wr_en) ?
-                                                ic_debug_addr[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] :
-                                                ic_rw_addr[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] ;
-
-   rvdff #(pt.ICACHE_NUM_WAYS) tag_rd_wy_ff (.*, .clk(active_clk),
-                    .din ({ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0]}),
-                    .dout({ic_debug_rd_way_en_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
- if (pt.ICACHE_WAYPACK == 0 ) begin : PACKED_0
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] ic_b_sram_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                                               ic_b_read_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                                               ic_b_write_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0] [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   wb_index_hold;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                               [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   ic_b_rw_addr;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en;     //bank
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en_ff;  //bank
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 index_valid;  //bank
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_clear_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_addr_match;
-
-
-
-
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0] wrptr;
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0] wrptr_in;
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0]       sel_bypass;
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0]       sel_bypass_ff;
-
-
-
-    logic [pt.ICACHE_NUM_WAYS-1:0][25:0]  sel_bypass_data;
-    logic [pt.ICACHE_NUM_WAYS-1:0]        any_bypass;
-    logic [pt.ICACHE_NUM_WAYS-1:0]        any_addr_match;
-    logic [pt.ICACHE_NUM_WAYS-1:0]        ic_tag_clken_final;
-
-      `define eb1_IC_TAG_SRAM(depth,width)                                                                                                      \
-                                  ram_``depth``x``width  ic_way_tag (                                                                           \
-                                .ME(ic_tag_clken_final[i]),                                                                                     \
-                                .WE (ic_tag_wren_q[i]),                                                                                         \
-                                .D  (ic_tag_wr_data[``width-1:0]),                                                                              \
-                                .ADR(ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]),                                                  \
-                                .Q  (ic_tag_data_raw_pre[i][``width-1:0]),                                                                      \
-                                .CLK (clk),                                                                                                     \
-                                .ROP ( ),                                                                                                       \
-                                                                                                                                                \
-                                .TEST1(ic_tag_ext_in_pkt[i].TEST1),                                                                             \
-                                .RME(ic_tag_ext_in_pkt[i].RME),                                                                                 \
-                                .RM(ic_tag_ext_in_pkt[i].RM),                                                                                   \
-                                                                                                                                                \
-                                .LS(ic_tag_ext_in_pkt[i].LS),                                                                                   \
-                                .DS(ic_tag_ext_in_pkt[i].DS),                                                                                   \
-                                .SD(ic_tag_ext_in_pkt[i].SD),                                                                                   \
-                                                                                                                                                \
-                                .TEST_RNM(ic_tag_ext_in_pkt[i].TEST_RNM),                                                                       \
-                                .BC1(ic_tag_ext_in_pkt[i].BC1),                                                                                 \
-                                .BC2(ic_tag_ext_in_pkt[i].BC2)                                                                                  \
-                                                                                                                                                \
-                               );                                                                                                               \
-                                                                                                                                                \
-                                                                                                                                                \
-                                                                                                                                                \
-                                                                                                                                                \
-              if (pt.ICACHE_TAG_BYPASS_ENABLE == 1) begin                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 assign wrptr_in[i] = (wrptr[i] == (pt.ICACHE_TAG_NUM_BYPASS-1)) ? '0 : (wrptr[i] + 1'd1);                                                                                            \
-                                                                                                                                                                                                      \
-                 rvdffs  #(pt.ICACHE_TAG_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk), .en(|write_bypass_en[i]), .din (wrptr_in[i]), .dout(wrptr[i])) ;                                           \
-                                                                                                                                                                                                      \
-                 assign ic_b_sram_en[i]              = ic_tag_clken[i];                                                                                                                               \
-                                                                                                                                                                                                      \
-                 assign ic_b_read_en[i]              =  ic_b_sram_en[i] &   (ic_tag_rden_q[i]);                                                                                                       \
-                 assign ic_b_write_en[i]             =  ic_b_sram_en[i] &   (ic_tag_wren_q[i]);                                                                                                       \
-                 assign ic_tag_clken_final[i]        =  ic_b_sram_en[i] &    ~(|sel_bypass[i]);                                                                                                       \
-                                                                                                                                                                                                      \
-                 // LSB is pt.ICACHE_TAG_INDEX_LO]                                                                                                                                                    \
-                 assign ic_b_rw_addr[i] = {ic_rw_addr_q};                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 always_comb begin                                                                                                                                                                    \
-                    any_addr_match[i] = '0;                                                                                                                                                           \
-                                                                                                                                                                                                      \
-                    for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                              \
-                       any_addr_match[i] |= (ic_b_addr_match[i][l] & index_valid[i][l]);                                                                                                              \
-                    end                                                                                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                // it is an error to ever have 2 entries with the same index and both valid                                                                                                           \
-                for (genvar l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin: BYPASS                                                                                                                       \
-                                                                                                                                                                                                      \
-                   assign ic_b_addr_match[i][l] = (wb_index_hold[i][l] ==  ic_b_rw_addr[i]) & index_valid[i][l];                                                                                      \
-                                                                                                                                                                                                      \
-                   assign ic_b_clear_en[i][l]   = ic_b_write_en[i] &   ic_b_addr_match[i][l];                                                                                                         \
-                                                                                                                                                                                                      \
-                   assign sel_bypass[i][l]      = ic_b_read_en[i]  &   ic_b_addr_match[i][l] ;                                                                                                        \
-                                                                                                                                                                                                      \
-                   assign write_bypass_en[i][l] = ic_b_read_en[i]  &  ~any_addr_match[i] & (wrptr[i] == l);                                                                                           \
-                                                                                                                                                                                                      \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                     .din(write_bypass_en[i][l]), .dout(write_bypass_en_ff[i][l])) ;                            \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en[i][l] | ic_b_clear_en[i][l]),         .din(~ic_b_clear_en[i][l]),  .dout(index_valid[i][l])) ;                             \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                     .din(sel_bypass[i][l]),      .dout(sel_bypass_ff[i][l])) ;                                 \
-                                                                                                                                                                                                      \
-                   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1))  ic_addr_index   (.*, .en(write_bypass_en[i][l]),    .din (ic_b_rw_addr[i]),        .dout(wb_index_hold[i][l]));   \
-                   rvdffe #(``width)                                                           rd_data_hold_ff (.*, .en(write_bypass_en_ff[i][l]), .din (ic_tag_data_raw_pre[i][``width-1:0]), .dout(wb_dout_hold[i][l]));            \
-                                                                                                                                                                                                      \
-                end // block: BYPASS                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                always_comb begin                                                                                                                                                                     \
-                 any_bypass[i] = '0;                                                                                                                                                                  \
-                 sel_bypass_data[i] = '0;                                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                                 \
-                    any_bypass[i]      |=  sel_bypass_ff[i][l];                                                                                                                                       \
-                    sel_bypass_data[i] |= (sel_bypass_ff[i][l]) ? wb_dout_hold[i][l] : '0;                                                                                                            \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                   ic_tag_data_raw[i]   =   any_bypass[i] ?  sel_bypass_data[i] :  ic_tag_data_raw_pre[i] ;                                                                                           \
-                end // always_comb begin                                                                                                                                                              \
-                                                                                                                                                                                                      \
-             end // if (pt.ICACHE_BYPASS_ENABLE == 1)                                                                                                                                                 \
-             else begin                                                                                                                                                                               \
-                 assign ic_tag_data_raw[i]   =   ic_tag_data_raw_pre[i] ;                                                                                                                             \
-                 assign ic_tag_clken_final[i]       =   ic_tag_clken[i];                                                                                                                              \
-             end
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-
-   if (pt.ICACHE_ECC) begin  : ECC1
-      logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0][25 :0] wb_dout_hold;
-
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-                 `eb1_IC_TAG_SRAM(32,26)
-      end // if (pt.ICACHE_TAG_DEPTH == 32)
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-                 `eb1_IC_TAG_SRAM(64,26)
-      end // if (pt.ICACHE_TAG_DEPTH == 64)
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-                 `eb1_IC_TAG_SRAM(128,26)
-      end // if (pt.ICACHE_TAG_DEPTH == 128)
-       if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-                 `eb1_IC_TAG_SRAM(256,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 256)
-       if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-                 `eb1_IC_TAG_SRAM(512,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 512)
-       if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-                 `eb1_IC_TAG_SRAM(1024,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 1024)
-       if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-                 `eb1_IC_TAG_SRAM(2048,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 2048)
-       if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-                 `eb1_IC_TAG_SRAM(4096,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 4096)
-
-         assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-         assign w_tout[i][36:32]              = ic_tag_data_raw[i][25:21] ;
-
-         rvecc_decode  ecc_decode (
-                           .en(~dec_tlu_core_ecc_disable & ic_rd_en_ff),
-                           .sed_ded ( 1'b1 ),    // 1 : means only detection
-                           .din({11'b0,ic_tag_data_raw[i][20:0]}),
-                           .ecc_in({2'b0, ic_tag_data_raw[i][25:21]}),
-                           .dout(ic_tag_corrected_data_unc[i][31:0]),
-                           .ecc_out(ic_tag_corrected_ecc_unc[i][6:0]),
-                           .single_ecc_error(ic_tag_single_ecc_error[i]),
-                           .double_ecc_error(ic_tag_double_ecc_error[i]));
-
-          assign ic_tag_way_perr[i]= ic_tag_single_ecc_error[i] | ic_tag_double_ecc_error[i]  ;
-      end
-      else  begin : ECC0
-      logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0][21 :0] wb_dout_hold;
-      assign ic_tag_data_raw_pre[i][25:22] = '0 ;
-
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-                 `eb1_IC_TAG_SRAM(32,22)
-      end // if (pt.ICACHE_TAG_DEPTH == 32)
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-                 `eb1_IC_TAG_SRAM(64,22)
-      end // if (pt.ICACHE_TAG_DEPTH == 64)
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-                 `eb1_IC_TAG_SRAM(128,22)
-      end // if (pt.ICACHE_TAG_DEPTH == 128)
-       if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-                 `eb1_IC_TAG_SRAM(256,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 256)
-       if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-                 `eb1_IC_TAG_SRAM(512,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 512)
-       if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-                 `eb1_IC_TAG_SRAM(1024,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 1024)
-       if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-                 `eb1_IC_TAG_SRAM(2048,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 2048)
-       if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-                 `eb1_IC_TAG_SRAM(4096,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 4096)
-
-         assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-         assign w_tout[i][32]                 = ic_tag_data_raw[i][21] ;
-
-         rveven_paritycheck #(32-pt.ICACHE_TAG_LO) parcheck(.data_in   (w_tout[i][31:pt.ICACHE_TAG_LO]),
-                                                   .parity_in (w_tout[i][32]),
-                                                   .parity_err(ic_tag_way_perr[i]));
-      end // else: !if(pt.ICACHE_ECC)
-
-   end // block: WAYS
- end // block: PACKED_0
-
-
- else begin : PACKED_1
-
-
-   logic                                                                                ic_b_sram_en;
-   logic                                                                                ic_b_read_en;
-   logic                                                                                ic_b_write_en;
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0] [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   wb_index_hold;
-   logic                                [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   ic_b_rw_addr;
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en;     //bank
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en_ff;  //bank
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 index_valid;  //bank
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_clear_en;
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_addr_match;
-
-
-
-
-    logic [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0]  wrptr;
-    logic [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0]  wrptr_in;
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]        sel_bypass;
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]        sel_bypass_ff;
-
-
-
-    logic [(26*pt.ICACHE_NUM_WAYS)-1:0]  sel_bypass_data;
-    logic                                any_bypass;
-    logic                                any_addr_match;
-    logic                                ic_tag_clken_final;
-
-`define eb1_IC_TAG_PACKED_SRAM(depth,width)                                                               \
-                  ram_be_``depth``x``width  ic_way_tag (                                                   \
-                                .ME  ( ic_tag_clken_final),                                                \
-                                .WE  (|ic_tag_wren_q[pt.ICACHE_NUM_WAYS-1:0]),                             \
-                                .WEM (ic_tag_wren_biten_vec[``width-1:0]),                                 \
-                                                                                                           \
-                                .D   ({pt.ICACHE_NUM_WAYS{ic_tag_wr_data[``width/pt.ICACHE_NUM_WAYS-1:0]}}), \
-                                .ADR (ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]),            \
-                                .Q   (ic_tag_data_raw_packed_pre[``width-1:0]),                            \
-                                .CLK (clk),                                                                \
-                                .ROP ( ),                                                                  \
-                                                                                                           \
-                                .TEST1     (ic_tag_ext_in_pkt[0].TEST1),                                   \
-                                .RME      (ic_tag_ext_in_pkt[0].RME),                                      \
-                                .RM       (ic_tag_ext_in_pkt[0].RM),                                       \
-                                                                                                           \
-                                .LS       (ic_tag_ext_in_pkt[0].LS),                                       \
-                                .DS       (ic_tag_ext_in_pkt[0].DS),                                       \
-                                .SD       (ic_tag_ext_in_pkt[0].SD),                                       \
-                                                                                                           \
-                                .TEST_RNM (ic_tag_ext_in_pkt[0].TEST_RNM),                                 \
-                                .BC1      (ic_tag_ext_in_pkt[0].BC1),                                      \
-                                .BC2      (ic_tag_ext_in_pkt[0].BC2)                                       \
-                                                                                                           \
-                               );                                                                          \
-                                                                                                           \
-              if (pt.ICACHE_TAG_BYPASS_ENABLE == 1) begin                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 assign wrptr_in = (wrptr == (pt.ICACHE_TAG_NUM_BYPASS-1)) ? '0 : (wrptr + 1'd1);                                                                                                     \
-                                                                                                                                                                                                      \
-                 rvdffs  #(pt.ICACHE_TAG_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk), .en(|write_bypass_en), .din (wrptr_in), .dout(wrptr)) ;                                                    \
-                                                                                                                                                                                                      \
-                 assign ic_b_sram_en              = |ic_tag_clken;                                                                                                                                    \
-                                                                                                                                                                                                      \
-                 assign ic_b_read_en              =  ic_b_sram_en &   (|ic_tag_rden_q);                                                                                                               \
-                 assign ic_b_write_en             =  ic_b_sram_en &   (|ic_tag_wren_q);                                                                                                               \
-                 assign ic_tag_clken_final        =  ic_b_sram_en &    ~(|sel_bypass);                                                                                                                \
-                                                                                                                                                                                                      \
-                 // LSB is pt.ICACHE_TAG_INDEX_LO]                                                                                                                                                    \
-                 assign ic_b_rw_addr = {ic_rw_addr_q};                                                                                                                                                \
-                                                                                                                                                                                                      \
-                 always_comb begin                                                                                                                                                                    \
-                    any_addr_match = '0;                                                                                                                                                              \
-                                                                                                                                                                                                      \
-                    for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                              \
-                       any_addr_match |= ic_b_addr_match[l];                                                                                                                                          \
-                    end                                                                                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                // it is an error to ever have 2 entries with the same index and both valid                                                                                                           \
-                for (genvar l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin: BYPASS                                                                                                                       \
-                                                                                                                                                                                                      \
-                   assign ic_b_addr_match[l] = (wb_index_hold[l] ==  ic_b_rw_addr) & index_valid[l];                                                                                                  \
-                                                                                                                                                                                                      \
-                   assign ic_b_clear_en[l]   = ic_b_write_en &   ic_b_addr_match[l];                                                                                                                  \
-                                                                                                                                                                                                      \
-                   assign sel_bypass[l]      = ic_b_read_en  &   ic_b_addr_match[l] ;                                                                                                                 \
-                                                                                                                                                                                                      \
-                   assign write_bypass_en[l] = ic_b_read_en  &  ~any_addr_match & (wrptr == l);                                                                                                       \
-                                                                                                                                                                                                      \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                     .din(write_bypass_en[l]), .dout(write_bypass_en_ff[l])) ;                                  \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en[l] | ic_b_clear_en[l]),         .din(~ic_b_clear_en[l]),  .dout(index_valid[l])) ;                                         \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                     .din(sel_bypass[l]),      .dout(sel_bypass_ff[l])) ;                                               \
-                                                                                                                                                                                                      \
-                   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1)) ic_addr_index    (.*, .en(write_bypass_en[l]),    .din (ic_b_rw_addr),               .dout(wb_index_hold[l]));          \
-                   rvdffe #(``width)                                                          rd_data_hold_ff  (.*, .en(write_bypass_en_ff[l]), .din (ic_tag_data_raw_packed_pre[``width-1:0]), .dout(wb_packeddout_hold[l]));        \
-                                                                                                                                                                                                      \
-                end // block: BYPASS                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                always_comb begin                                                                                                                                                                     \
-                 any_bypass = '0;                                                                                                                                                                     \
-                 sel_bypass_data = '0;                                                                                                                                                                \
-                                                                                                                                                                                                      \
-                 for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                                 \
-                    any_bypass      |=  sel_bypass_ff[l];                                                                                                                                             \
-                    sel_bypass_data |= (sel_bypass_ff[l]) ? wb_packeddout_hold[l] : '0;                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                   ic_tag_data_raw_packed   =   any_bypass ?  sel_bypass_data :  ic_tag_data_raw_packed_pre ;                                                                                         \
-                end // always_comb begin                                                                                                                                                              \
-                                                                                                                                                                                                      \
-             end // if (pt.ICACHE_BYPASS_ENABLE == 1)                                                                                                                                                 \
-             else begin                                                                                                                                                                               \
-                 assign ic_tag_data_raw_packed   =   ic_tag_data_raw_packed_pre ;                                                                                                                     \
-                 assign ic_tag_clken_final       =   |ic_tag_clken;                                                                                                                                   \
-             end
-
-   if (pt.ICACHE_ECC) begin  : ECC1
-    logic [(26*pt.ICACHE_NUM_WAYS)-1 :0]  ic_tag_data_raw_packed, ic_tag_wren_biten_vec, ic_tag_data_raw_packed_pre;           // data and its bit enables
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0][(26*pt.ICACHE_NUM_WAYS)-1 :0] wb_packeddout_hold;
-    for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-        assign ic_tag_wren_biten_vec[(26*i)+25:26*i] = {26{ic_tag_wren_q[i]}};
-     end
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,104)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,52)
-        end // block: WAYS
-      end // if (pt.ICACHE_TAG_DEPTH == 32
-
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,104)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,52)
-        end // block: WAYS
-      end // block: size_64
-
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,104)
-      end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,52)
-      end // block: WAYS
-
-      end // block: size_128
-
-      if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,52)
-        end // block: WAYS
-      end // block: size_256
-
-      if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,52)
-        end // block: WAYS
-      end // block: size_512
-
-      if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-         if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,52)
-        end // block: WAYS
-      end // block: size_1024
-
-      if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,52)
-        end // block: WAYS
-      end // block: size_2048
-
-      if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,52)
-        end // block: WAYS
-      end // block: size_4096
-
-        for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin
-          assign ic_tag_data_raw[i]  = ic_tag_data_raw_packed[(26*i)+25:26*i];
-          assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-          assign w_tout[i][36:32]              = ic_tag_data_raw[i][25:21] ;
-          rvecc_decode  ecc_decode (
-                           .en(~dec_tlu_core_ecc_disable & ic_rd_en_ff),
-                           .sed_ded ( 1'b1 ),    // 1 : means only detection
-                           .din({11'b0,ic_tag_data_raw[i][20:0]}),
-                           .ecc_in({2'b0, ic_tag_data_raw[i][25:21]}),
-                           .dout(ic_tag_corrected_data_unc[i][31:0]),
-                           .ecc_out(ic_tag_corrected_ecc_unc[i][6:0]),
-                           .single_ecc_error(ic_tag_single_ecc_error[i]),
-                           .double_ecc_error(ic_tag_double_ecc_error[i]));
-
-          assign ic_tag_way_perr[i]= ic_tag_single_ecc_error[i] | ic_tag_double_ecc_error[i]  ;
-     end // for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++)
-
-   end // block: ECC1
-
-
-   else  begin : ECC0
-    logic [(22*pt.ICACHE_NUM_WAYS)-1 :0]  ic_tag_data_raw_packed, ic_tag_wren_biten_vec, ic_tag_data_raw_packed_pre;           // data and its bit enables
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0][(22*pt.ICACHE_NUM_WAYS)-1 :0] wb_packeddout_hold;
-    for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-        assign ic_tag_wren_biten_vec[(22*i)+21:22*i] = {22{ic_tag_wren_q[i]}};
-     end
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,88)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,44)
-        end // block: WAYS
-      end // if (pt.ICACHE_TAG_DEPTH == 32
-
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,88)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,44)
-        end // block: WAYS
-      end // block: size_64
-
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,88)
-      end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,44)
-      end // block: WAYS
-
-      end // block: size_128
-
-      if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,44)
-        end // block: WAYS
-      end // block: size_256
-
-      if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,44)
-        end // block: WAYS
-      end // block: size_512
-
-      if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-         if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,44)
-        end // block: WAYS
-      end // block: size_1024
-
-      if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,44)
-        end // block: WAYS
-      end // block: size_2048
-
-      if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,44)
-        end // block: WAYS
-      end // block: size_4096
-
-      for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin
-          assign ic_tag_data_raw[i]  = ic_tag_data_raw_packed[(22*i)+21:22*i];
-          assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-          assign w_tout[i][32]                 = ic_tag_data_raw[i][21] ;
-          assign w_tout[i][36:33]              = '0 ;
-
-
-          rveven_paritycheck #(32-pt.ICACHE_TAG_LO) parcheck(.data_in   (w_tout[i][31:pt.ICACHE_TAG_LO]),
-                                                   .parity_in (w_tout[i][32]),
-                                                   .parity_err(ic_tag_way_perr[i]));
-      end
-
-
-   end // block: ECC0
- end // block: PACKED_1
-
-
-   always_comb begin : tag_rd_out
-      ictag_debug_rd_data[25:0] = '0;
-      for ( int j=0; j<pt.ICACHE_NUM_WAYS; j++) begin: debug_rd_out
-         ictag_debug_rd_data[25:0] |=  pt.ICACHE_ECC ? ({26{ic_debug_rd_way_en_ff[j]}} & ic_tag_data_raw[j] ) : {4'b0, ({22{ic_debug_rd_way_en_ff[j]}} & ic_tag_data_raw[j][21:0])};
-      end
-   end
-
-
-   for ( genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : ic_rd_hit_loop
-      assign ic_rd_hit[i] = (w_tout[i][31:pt.ICACHE_TAG_LO] == ic_rw_addr_ff[31:pt.ICACHE_TAG_LO]) & ic_tag_valid[i];
-   end
-
-   assign  ic_tag_perr  = | (ic_tag_way_perr[pt.ICACHE_NUM_WAYS-1:0] & ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0] ) ;
-endmodule // eb1_IC_TAG
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_iccm_mem.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_iccm_mem.sv
deleted file mode 100644
index 8b1bdf4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_iccm_mem.sv
+++ /dev/null
@@ -1,525 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Icache closely coupled memory --- ICCM
-//********************************************************************************
-
-module eb1_ifu_iccm_mem
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
- `ifdef USE_POWER_PINS
-   input logic 					vccd1,
-   input logic						vssd1,
- `endif
-   input logic                                        clk,                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                        active_clk,                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                                        rst_l,                               // reset, active low
-   input logic                                        clk_override,                        // Override non-functional clock gating
-
-   input logic                                        iccm_wren,                           // ICCM write enable
-   input logic                                        iccm_rden,                           // ICCM read enable
-   input logic [pt.ICCM_BITS-1:1]                     iccm_rw_addr,                        // ICCM read/write address
-   input logic                                        iccm_buf_correct_ecc,                // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM under a correction - This is needed to guard replacements when hit
-   input logic [2:0]                                  iccm_wr_size,                        // ICCM write size
-   input logic [77:0]                                 iccm_wr_data,                        // ICCM write data
-
-   input eb1_ccm_ext_in_pkt_t [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,                    // External packet
-
-   output logic [63:0]                                iccm_rd_data,                        // ICCM read data
-   output logic [77:0]                                iccm_rd_data_ecc,                    // ICCM read ecc
-   input  logic                                       scan_mode                            // Scan mode control
-
-);
-
-
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                wren_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                rden_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                iccm_clken;
-   logic [pt.ICCM_NUM_BANKS-1:0] [pt.ICCM_BITS-1:pt.ICCM_BANK_INDEX_LO] addr_bank;
-
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_dout, iccm_bank_dout_fn;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data;
-   logic [pt.ICCM_BITS-1:1]              addr_bank_inc;
-   logic [pt.ICCM_BANK_HI : 2]           iccm_rd_addr_hi_q;
-   logic [pt.ICCM_BANK_HI : 1]           iccm_rd_addr_lo_q;
-   logic             [63:0]              iccm_rd_data_pre;
-   logic             [63:0]              iccm_data;
-   logic [1:0]                           addr_incr;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data_vec;
-
-   // logic to handle hard persisten faults
-   logic [1:0] [pt.ICCM_BITS-1:2]        redundant_address;
-   logic [1:0] [38:0]                    redundant_data;
-   logic [1:0]                           redundant_valid;
-   logic [pt.ICCM_NUM_BANKS-1:0]         sel_red1, sel_red0, sel_red1_q, sel_red0_q;
-
-
-   logic [38:0]                          redundant_data0_in, redundant_data1_in;
-   logic                                 redundant_lru, redundant_lru_in, redundant_lru_en;
-   logic                                 redundant_data0_en;
-   logic                                 redundant_data1_en;
-   logic                                 r0_addr_en, r1_addr_en;
-
-   // Testing persistent flip
-   //   logic [3:0]                              not_iccm_bank_dout;
-   //   logic [15:3]                     ecc_insert_flip_in, ecc_insert_flip;
-   //   logic                                 flip_en, flip_match, flip_match_q;
-   //
-   //   assign      flip_in = (iccm_rw_addr[3:2] != 2'b00);    // dont flip when bank0 - this is to make some progress in DMA streaming cases
-   //   assign      flip_en = iccm_rden;
-   //
-   //   rvdffs #(1) flipmatch  (.*,
-   //                   .clk(clk),
-   //                   .din(flip_in),
-   //                   .en(flip_en),
-   //                   .dout(flip_match_q));
-   //
-   // end of testing flip
-
-
-   assign addr_incr[1:0]                    = (iccm_wr_size[1:0] == 2'b11) ?  2'b10: 2'b01;
-   assign addr_bank_inc[pt.ICCM_BITS-1 : 1] = iccm_rw_addr[pt.ICCM_BITS-1 : 1] + addr_incr[1:0];
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS/2; i++) begin: mem_bank_data
-      assign iccm_bank_wr_data_vec[(2*i)]   = iccm_wr_data[38:0];
-      assign iccm_bank_wr_data_vec[(2*i)+1] = iccm_wr_data[77:39];
-   end
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS; i++) begin: mem_bank
-      assign wren_bank[i]         = iccm_wren & ((iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_bank_wr_data[i] = iccm_bank_wr_data_vec[i];
-      assign rden_bank[i]         = iccm_rden & ( (iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_clken[i]        =  wren_bank[i] | rden_bank[i] | clk_override;
-      assign addr_bank[i][pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] = wren_bank[i] ? iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                      ((addr_bank_inc[pt.ICCM_BANK_HI:2] == i) ?
-                                                                                                    addr_bank_inc[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                                    iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO]);
- `ifdef VERILATOR
-
-    /*eb1_ram #(.depth(1<<pt.ICCM_INDEX_BITS), .width(39)) iccm_bank (
-                                     // Primary ports
-                                     .ME(iccm_clken[i]),
-                                     .CLK(clk),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );*/
-                                      sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i]),
-									.dout0(iccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-                                    
- `else
-
-     if (pt.ICCM_INDEX_BITS == 6 ) begin : iccm
-               ram_64x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-   else if (pt.ICCM_INDEX_BITS == 7 ) begin : iccm
-               ram_128x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-     else if (pt.ICCM_INDEX_BITS == 8 ) begin : iccm
-               /*ram_256x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );*/
-                                      sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i][31:0]),
-									.dout0(iccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 9 ) begin : iccm
-               ram_512x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 10 ) begin : iccm
-              /* ram_1024x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-                                     );*/
-                                     
-                                     sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i]),
-									.dout0(iccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 11 ) begin : iccm
-               ram_2048x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 12 ) begin : iccm
-               ram_4096x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 13 ) begin : iccm
-               ram_8192x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 14 ) begin : iccm
-               ram_16384x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else begin : iccm
-               ram_32768x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-`endif
-
-   // match the redundant rows
-   assign sel_red1[i]  = (redundant_valid[1]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[1][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[1][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   assign sel_red0[i]  = (redundant_valid[0]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[0][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[0][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   rvdff #(1) selred0  (.*,
-                   .clk(active_clk),
-                   .din(sel_red0[i]),
-                   .dout(sel_red0_q[i]));
-
-   rvdff #(1) selred1  (.*,
-                   .clk(active_clk),
-                   .din(sel_red1[i]),
-                   .dout(sel_red1_q[i]));
-
-
-  // muxing out the memory data with the redundant data if the address matches
-   assign iccm_bank_dout_fn[i][38:0] = ({39{sel_red1_q[i]}}                         & redundant_data[1][38:0]) |
-                                       ({39{sel_red0_q[i]}}                         & redundant_data[0][38:0]) |
-                                       ({39{~sel_red0_q[i] & ~sel_red1_q[i]}}       & iccm_bank_dout[i][38:0]);
-
-  end : mem_bank
-// This section does the redundancy for tolerating single bit errors
-// 2x 39 bit data values with address[hi:2] and a valid bit is needed to CAM and sub out the reads/writes to the particular locations
-// Also a LRU flop is kept to decide which of the redundant element to replace.
-   assign r0_addr_en              = ~redundant_lru & iccm_buf_correct_ecc;
-   assign r1_addr_en              = redundant_lru  & iccm_buf_correct_ecc;
-   assign redundant_lru_en         = iccm_buf_correct_ecc | (((|sel_red0[pt.ICCM_NUM_BANKS-1:0]) | (|sel_red1[pt.ICCM_NUM_BANKS-1:0])) & iccm_rden & iccm_correction_state);
-   assign redundant_lru_in        = iccm_buf_correct_ecc ? ~redundant_lru : (|sel_red0[pt.ICCM_NUM_BANKS-1:0]) ? 1'b1 : 1'b0;
-
-   rvdffs #() red_lru  (.*,                               // LRU flop for the redundant replacements
-                   .clk(active_clk),
-                   .en(redundant_lru_en),
-                   .din(redundant_lru_in),
-                   .dout(redundant_lru));
-
-    rvdffs #(pt.ICCM_BITS-2) r0_address  (.*,                 // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r0_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[0][pt.ICCM_BITS-1:2]));
-
-   rvdffs #(pt.ICCM_BITS-2) r1_address  (.*,                   // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[1][pt.ICCM_BITS-1:2]));
-
-    rvdffs #(1) r0_valid  (.*,
-                   .clk(active_clk),                                  // Redundant Row 0 Valid
-                   .en(r0_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[0]));
-
-   rvdffs #(1) r1_valid  (.*,                                   // Redundant Row 1 Valid
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[1]));
-
-
-
-   // We will have to update the Redundant copies in addition to the memory on subsequent writes to this memory location.
-   // The data gets updated on : 1) correction cycle, 2) Future writes - this could be W writes from DMA ( match up till addr[2]) or DW writes ( match till address[3])
-   // The data to pick also depends on the current address[2], size and the addr[2] stored in the address field of the redundant flop. Correction cycle is always W write and the data is splat on both legs, so choosing lower Word
-
-    assign redundant_data0_en      = ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[0][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[0][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[0] & iccm_wren) |
-                                      (~redundant_lru & iccm_buf_correct_ecc);
-
-    assign redundant_data0_in[38:0] = (((iccm_rw_addr[2] == redundant_address[0][2]) & iccm_rw_addr[2]) | (redundant_address[0][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r0_data  (.*,                                 // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data0_en),
-                   .din(redundant_data0_in[38:0]),
-                   .dout(redundant_data[0][38:0]));
-
-   assign redundant_data1_en      =  ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[1][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[1][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[1] & iccm_wren) |
-                                     (redundant_lru & iccm_buf_correct_ecc);
-
-   assign redundant_data1_in[38:0] = (((iccm_rw_addr[2] == redundant_address[1][2]) & iccm_rw_addr[2]) | (redundant_address[1][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r1_data  (.*,                                  // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data1_en),
-                   .din(redundant_data1_in[38:0]),
-                   .dout(redundant_data[1][38:0]));
-
-
-   rvdffs  #(pt.ICCM_BANK_HI)   rd_addr_lo_ff (.*, .clk(active_clk), .din(iccm_rw_addr [pt.ICCM_BANK_HI:1]), .dout(iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:1]), .en(1'b1));   // bit 0 of address is always 0
-   rvdffs  #(pt.ICCM_BANK_BITS) rd_addr_hi_ff (.*, .clk(active_clk), .din(addr_bank_inc[pt.ICCM_BANK_HI:2]), .dout(iccm_rd_addr_hi_q[pt.ICCM_BANK_HI:2]), .en(1'b1));
-
-   assign iccm_rd_data_pre[63:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][31:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][31:0]};
-   assign iccm_data[63:0]        = 64'({16'b0, (iccm_rd_data_pre[63:0] >> (16*iccm_rd_addr_lo_q[1]))});
-   assign iccm_rd_data[63:0]     = {iccm_data[63:0]};
-   assign iccm_rd_data_ecc[77:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][38:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][38:0]};
-
-endmodule // eb1_ifu_iccm_mem
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_ifc_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_ifc_ctl.sv
deleted file mode 100644
index d5f59a8..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_ifc_ctl.sv
+++ /dev/null
@@ -1,246 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// eb1_ifu_ifc_ctl.sv
-// Function: Fetch pipe control
-//
-// Comments:
-//********************************************************************************
-
-module eb1_ifu_ifc_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,                         // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic free_l2clk,                  // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic rst_l, // reset enable, from core pin
-   input logic scan_mode, // scan
-
-   input logic ic_hit_f,      // Icache hit
-   input logic ifu_ic_mb_empty, // Miss buffer empty
-
-   input logic ifu_fb_consume1,  // Aligner consumed 1 fetch buffer
-   input logic ifu_fb_consume2,  // Aligner consumed 2 fetch buffers
-
-   input logic dec_tlu_flush_noredir_wb, // Don't fetch on flush
-   input logic exu_flush_final, // FLush
-   input logic [31:1] exu_flush_path_final, // Flush path
-
-   input logic ifu_bp_hit_taken_f, // btb hit, select the target path
-   input logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-
-   input logic ic_dma_active, // IC DMA active, stop fetching
-   input logic ic_write_stall, // IC is writing, stop fetching
-   input logic dma_iccm_stall_any, // force a stall in the fetch pipe for DMA ICCM access
-
-   input logic [31:0]  dec_tlu_mrac_ff ,   // side_effect and cacheable for each region
-
-   output logic [31:1] ifc_fetch_addr_f, // fetch addr F
-   output logic [31:1] ifc_fetch_addr_bf, // fetch addr BF
-
-   output logic  ifc_fetch_req_f,  // fetch request valid F
-
-   output logic  ifu_pmu_fetch_stall, // pmu event measuring fetch stall
-
-   output logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. BF stage
-   output logic                      ifc_fetch_req_bf,              // Fetch request. Comes with the address.  BF stage
-   output logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. BF stage
-   output logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   output logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   output logic  ifc_dma_access_ok // fetch is not accessing the ICCM, DMA can proceed
-
-   
-
-   );
-
-   logic [31:1]  fetch_addr_bf;
-   logic [31:1]  fetch_addr_next;
-   logic [3:0]   fb_write_f, fb_write_ns;
-
-   logic     fb_full_f_ns, fb_full_f;
-   logic     fb_right, fb_right2, fb_left, wfm, idle;
-   logic     sel_last_addr_bf, sel_next_addr_bf;
-   logic     miss_f, miss_a;
-   logic     flush_fb, dma_iccm_stall_any_f;
-   logic     mb_empty_mod, goto_idle, leave_idle;
-   logic     fetch_bf_en;
-   logic         line_wrap;
-   logic         fetch_addr_next_1;
-
-   // FSM assignment
-    typedef enum logic [1:0] { IDLE  = 2'b00 ,
-                               FETCH = 2'b01 ,
-                               STALL = 2'b10 ,
-                               WFM   = 2'b11   } state_t ;
-   state_t state      ;
-   state_t next_state ;
-
-   logic     dma_stall;
-   assign dma_stall = ic_dma_active | dma_iccm_stall_any_f;
-
-
-
-   // Fetch address mux
-   // - flush
-   // - Miss *or* flush during WFM (icache miss buffer is blocking)
-   // - Sequential
-
-if(pt.BTB_ENABLE==1) begin
-   logic sel_btb_addr_bf;
-
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_btb_addr_bf  = ~exu_flush_final & ifc_fetch_req_f & ifu_bp_hit_taken_f & ic_hit_f;
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_btb_addr_bf}} & {ifu_bp_btb_target_f[31:1]})| // BTB target
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-
-end // if (pt.BTB_ENABLE=1)
-   else begin
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-end
-   assign fetch_addr_next[31:1] = {({ifc_fetch_addr_f[31:2]} + 31'b1), fetch_addr_next_1 };
-   assign line_wrap = (fetch_addr_next[pt.ICACHE_TAG_INDEX_LO] ^ ifc_fetch_addr_f[pt.ICACHE_TAG_INDEX_LO]);
-
-   assign fetch_addr_next_1 = line_wrap ? 1'b0 : ifc_fetch_addr_f[1];
-
-   assign ifc_fetch_req_bf_raw = ~idle;
-   assign ifc_fetch_req_bf =  ifc_fetch_req_bf_raw &
-
-                 ~(fb_full_f_ns & ~(ifu_fb_consume2 | ifu_fb_consume1)) &
-                 ~dma_stall &
-                 ~ic_write_stall &
-                 ~dec_tlu_flush_noredir_wb ;
-
-
-   assign fetch_bf_en = exu_flush_final | ifc_fetch_req_f;
-
-   assign miss_f = ifc_fetch_req_f & ~ic_hit_f & ~exu_flush_final;
-
-   assign mb_empty_mod = (ifu_ic_mb_empty | exu_flush_final) & ~dma_stall & ~miss_f & ~miss_a;
-
-   // Halt flushes and takes us to IDLE
-   assign goto_idle = exu_flush_final & dec_tlu_flush_noredir_wb;
-   // If we're in IDLE, and we get a flush, goto FETCH
-   assign leave_idle = exu_flush_final & ~dec_tlu_flush_noredir_wb & idle;
-
-//.i 7
-//.o 2
-//.ilb state[1] state[0] reset_delayed miss_f mb_empty_mod  goto_idle leave_idle
-//.ob next_state[1] next_state[0]
-//.type fr
-//
-//# fetch 01, stall 10, wfm 11, idle 00
-//-- 1---- 01
-//-- 0--1- 00
-//00 0--00 00
-//00 0--01 01
-//
-//01 01-0- 11
-//01 00-0- 01
-//
-//11 0-10- 01
-//11 0-00- 11
-
-   assign next_state[1] = (~state[1] & state[0] & miss_f & ~goto_idle) |
-              (state[1] & ~mb_empty_mod & ~goto_idle);
-
-   assign next_state[0] = (~goto_idle & leave_idle) | (state[0] & ~goto_idle);
-
-   assign flush_fb = exu_flush_final;
-
-   // model fb write logic to mass balance the fetch buffers
-   assign fb_right = ( ifu_fb_consume1 & ~ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)) | // Consumed and no new fetch
-              (ifu_fb_consume2 &  ifc_fetch_req_f); // Consumed 2 and new fetch
-
-
-   assign fb_right2 = (ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)); // Consumed 2 and no new fetch
-
-   assign fb_left = ifc_fetch_req_f & ~(ifu_fb_consume1 | ifu_fb_consume2) & ~miss_f;
-
-// CBH
-   assign fb_write_ns[3:0] = ( ({4{(flush_fb)}} & 4'b0001) |
-                   ({4{~flush_fb & fb_right }} & {1'b0, fb_write_f[3:1]}) |
-                   ({4{~flush_fb & fb_right2}} & {2'b0, fb_write_f[3:2]}) |
-                   ({4{~flush_fb & fb_left  }} & {fb_write_f[2:0], 1'b0}) |
-                   ({4{~flush_fb & ~fb_right & ~fb_right2 & ~fb_left}}  & fb_write_f[3:0]));
-
-
-   assign fb_full_f_ns = fb_write_ns[3];
-
-   assign idle     = state      == IDLE  ;
-   assign wfm      = state      == WFM   ;
-
-   rvdffie #(10) fbwrite_ff (.*, .clk(free_l2clk),
-                          .din( {dma_iccm_stall_any, miss_f, ifc_fetch_req_bf, next_state[1:0], fb_full_f_ns, fb_write_ns[3:0]}),
-                          .dout({dma_iccm_stall_any_f, miss_a, ifc_fetch_req_f, state[1:0], fb_full_f, fb_write_f[3:0]}));
-
-   assign ifu_pmu_fetch_stall = wfm | 
-                (ifc_fetch_req_bf_raw & ( (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1 | exu_flush_final)) |
-                  dma_stall));
-
-
-
-   assign ifc_fetch_addr_bf[31:1] = fetch_addr_bf[31:1];
-
-   rvdffpcie #(31) faddrf1_ff  (.*, .en(fetch_bf_en), .din(fetch_addr_bf[31:1]), .dout(ifc_fetch_addr_f[31:1]));
-
-
- if (pt.ICCM_ENABLE)  begin
-   logic iccm_acc_in_region_bf;
-   logic iccm_acc_in_range_bf;
-   rvrangecheck #( .CCM_SADR    (pt.ICCM_SADR),
-                   .CCM_SIZE    (pt.ICCM_SIZE) ) iccm_rangecheck (
-                                     .addr     ({ifc_fetch_addr_bf[31:1],1'b0}) ,
-                                     .in_range (iccm_acc_in_range_bf) ,
-                                     .in_region(iccm_acc_in_region_bf)
-                                     );
-
-   assign ifc_iccm_access_bf = iccm_acc_in_range_bf ;
-
-  assign ifc_dma_access_ok = ( (~ifc_iccm_access_bf |
-                 (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1)) |
-                 (wfm  & ~ifc_fetch_req_bf) |
-                 idle ) & ~exu_flush_final) |
-                  dma_iccm_stall_any_f;
-
-  assign ifc_region_acc_fault_bf = ~iccm_acc_in_range_bf & iccm_acc_in_region_bf ;
- end
- else  begin
-   assign ifc_iccm_access_bf = 1'b0 ;
-   assign ifc_dma_access_ok  = 1'b0 ;
-   assign ifc_region_acc_fault_bf  = 1'b0 ;
- end
-
-   assign ifc_fetch_uncacheable_bf =  ~dec_tlu_mrac_ff[{ifc_fetch_addr_bf[31:28] , 1'b0 }]  ; // bit 0 of each region description is the cacheable bit
-
-endmodule // eb1_ifu_ifc_ctl
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_mem_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_ifu_mem_ctl.sv
deleted file mode 100644
index 77c9ebd..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_ifu_mem_ctl.sv
+++ /dev/null
@@ -1,1672 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-
-//********************************************************************************
-// Function: Icache , iccm  control
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu_mem_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,                                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                                          // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic rst_l,                                               // reset, active low
-
-   input logic                       exu_flush_final,               // Flush from the pipeline., includes flush lower
-   input logic                       dec_tlu_flush_lower_wb,        // Flush lower from the pipeline.
-   input logic                       dec_tlu_flush_err_wb,          // Flush from the pipeline due to perr.
-   input logic                       dec_tlu_i0_commit_cmt,         // committed i0 instruction
-   input logic                       dec_tlu_force_halt,            // force halt.
-
-   input logic [31:1]                ifc_fetch_addr_bf,             // Fetch Address byte aligned always.      F1 stage.
-   input logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. F1 stage
-   input logic                       ifc_fetch_req_bf,              // Fetch request. Comes with the address.  F1 stage
-   input logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. F1 stage
-   input logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   input logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-   input logic                       ifc_dma_access_ok,             // It is OK to give dma access to the ICCM. (ICCM is not busy this cycle).
-   input logic                       dec_tlu_fence_i_wb,            // Fence.i instruction is committing. Clear all Icache valids.
-   input logic                       ifu_bp_hit_taken_f,            // Branch is predicted taken. Kill the fetch next cycle.
-
-   input logic                       ifu_bp_inst_mask_f,            // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic                      ifu_miss_state_idle,           // No icache misses are outstanding.
-   output logic                      ifu_ic_mb_empty,               // Continue with normal fetching. This does not mean that miss is finished.
-   output logic                      ic_dma_active  ,               // In the middle of servicing dma request to ICCM. Do not make any new requests.
-   output logic                      ic_write_stall,                // Stall fetch the cycle we are writing the cache.
-
-/// PMU signals
-   output logic                      ifu_pmu_ic_miss,               // IC miss event
-   output logic                      ifu_pmu_ic_hit,                // IC hit event
-   output logic                      ifu_pmu_bus_error,             // Bus error event
-   output logic                      ifu_pmu_bus_busy,              // Bus busy event
-   output logic                      ifu_pmu_bus_trxn,              // Bus transaction
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-    input  logic                     ifu_bus_clk_en,
-
-
-   input  logic                      dma_iccm_req,      //  dma iccm command (read or write)
-   input  logic [31:0]               dma_mem_addr,      //  dma address
-   input  logic [2:0]                dma_mem_sz,        //  size
-   input  logic                      dma_mem_write,     //  write
-   input  logic [63:0]               dma_mem_wdata,     //  write data
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-   output logic                      iccm_dma_ecc_error,//   Data read from iccm has an ecc error
-   output logic                      iccm_dma_rvalid,   //   Data read from iccm is valid
-   output logic [63:0]               iccm_dma_rdata,    //   dma data read from iccm
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,        //   iccm ready to accept new command.
-
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] [70:0]               ic_wr_data,           // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,  // Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,     // Debug wr cache.
-   output logic [70:0]               ifu_ic_debug_rd_data, // debug data read
-
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-   input  logic [1:0]                ifu_fetch_val,
-   // IFU control signals
-   output logic                      ic_hit_f,               // Hit in Icache(if Icache access) or ICCM access( ICCM always has ic_hit_f)
-   output logic [1:0]                ic_access_fault_f,      // Access fault (bus error or ICCM access in region but out of offset range).
-   output logic [1:0]                ic_access_fault_type_f, // Access fault types
-   output logic                      iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-   output logic [1:0]                iccm_rd_ecc_double_err, // This fetch has a double ICCM ecc  error.
-   output logic                      ic_error_start,         // This has any I$ errors ( data/tag/ecc/parity )
-
-   output logic                      ifu_async_error_start,  // Or of the sb iccm, and all the icache errors sent to aligner to stop
-   output logic                      iccm_dma_sb_error,      // Single Bit ECC error from a DMA access
-   output logic [1:0]                ic_fetch_val_f,         // valid bytes for fetch. To the Aligner.
-   output logic [31:0]               ic_data_f,              // Data read from Icache or ICCM. To the Aligner.
-   output logic [63:0]               ic_premux_data,         // Premuxed data to be muxed with Icache data
-   output logic                      ic_sel_premux_data,     // Select premux data.
-
-/////  Debug
-   input  eb1_cache_debug_pkt_t     dec_tlu_ic_diag_pkt ,       // Icache/tag debug read/write packet
-   input  logic                      dec_tlu_core_ecc_disable,   // disable the ecc checking and flagging
-   output logic                      ifu_ic_debug_rd_data_valid, // debug data valid.
-   output logic                      iccm_buf_correct_ecc,
-   output logic                      iccm_correction_state,
-
-
-   input  logic         scan_mode
-   );
-
-//  Create different defines for ICACHE and ICCM enable combinations
-
- localparam   NUM_OF_BEATS = 8 ;
-
-
-
-   logic [31:3]    ifu_ic_req_addr_f;
-   logic           uncacheable_miss_in ;
-   logic           uncacheable_miss_ff;
-
-
-
-   logic           bus_ifu_wr_en     ;
-   logic           bus_ifu_wr_en_ff  ;
-   logic           bus_ifu_wr_en_ff_q  ;
-   logic           bus_ifu_wr_en_ff_wo_err  ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     bus_ic_wr_en ;
-
-   logic           reset_tag_valid_for_miss  ;
-
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_in;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_rep_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_ff;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_hit_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_in;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_ff;
-
-
-   logic           ifu_wr_data_comb_err ;
-   logic           ifu_byp_data_err_new;
-   logic  [1:0]    ifu_byp_data_err_f;
-   logic           ifu_wr_cumulative_err_data;
-   logic           ifu_wr_cumulative_err;
-   logic           ifu_wr_data_comb_err_ff;
-   logic           scnd_miss_index_match ;
-
-
-   logic           ifc_dma_access_q_ok;
-   logic           ifc_iccm_access_f ;
-   logic           ifc_region_acc_fault_f;
-   logic           ifc_region_acc_fault_final_f;
-   logic  [1:0]    ifc_bus_acc_fault_f;
-   logic           ic_act_miss_f;
-   logic           ic_miss_under_miss_f;
-   logic           ic_ignore_2nd_miss_f;
-   logic           ic_act_hit_f;
-   logic           miss_pending;
-   logic [31:1]    imb_in , imb_ff  ;
-   logic [31:pt.ICACHE_BEAT_ADDR_HI+1]    miss_addr_in , miss_addr  ;
-   logic           miss_wrap_f ;
-   logic           flush_final_f;
-   logic           ifc_fetch_req_f;
-   logic           ifc_fetch_req_f_raw;
-   logic           fetch_req_f_qual   ;
-   logic           ifc_fetch_req_qual_bf ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     replace_way_mb_any;
-   logic           last_beat;
-   logic           reset_beat_cnt  ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_req_addr_bits_hi_3 ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_wr_addr_bits_hi_3 ;
-   logic [31:1]    ifu_fetch_addr_int_f ;
-   logic [31:1]    ifu_ic_rw_int_addr ;
-   logic           crit_wd_byp_ok_ff ;
-   logic           ic_crit_wd_rdy_new_ff;
-   logic   [79:0]  ic_byp_data_only_pre_new;
-   logic   [79:0]  ic_byp_data_only_new;
-   logic           ic_byp_hit_f ;
-   logic           ic_valid ;
-   logic           ic_valid_ff;
-   logic           reset_all_tags;
-   logic           ic_valid_w_debug;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren,ifu_tag_wren_ff;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_tag_wr_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_way_ff;
-   logic           ic_debug_rd_en_ff   ;
-   logic           fetch_bf_f_c1_clken ;
-   logic           fetch_bf_f_c1_clk;
-   logic           debug_c1_clken;
-   logic           debug_c1_clk;
-
-   logic           reset_ic_in ;
-   logic           reset_ic_ff ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]     vaddr_f ;
-   logic [31:1]    ifu_status_wr_addr;
-   logic           sel_mb_addr ;
-   logic           sel_mb_addr_ff ;
-   logic           sel_mb_status_addr ;
-   logic [63:0]    ic_final_data;
-
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_w_debug ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_w_debug ;
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]                              way_status_new_ff ;
-   logic                                    way_status_wr_en_ff ;
-   logic [pt.ICACHE_TAG_DEPTH-1:0][pt.ICACHE_STATUS_BITS-1:0]        way_status_out ;
-   logic [1:0]                              ic_debug_way_enc;
-
-   logic [pt.IFU_BUS_TAG-1:0]             ifu_bus_rid_ff;
-
-   logic         fetch_req_icache_f;
-   logic         fetch_req_iccm_f;
-   logic         ic_iccm_hit_f;
-   logic         fetch_uncacheable_ff;
-   logic         way_status_wr_en;
-   logic         sel_byp_data;
-   logic         sel_ic_data;
-   logic         sel_iccm_data;
-   logic         ic_rd_parity_final_err;
-   logic         ic_act_miss_f_delayed;
-   logic         bus_ifu_wr_data_error;
-   logic         bus_ifu_wr_data_error_ff;
-   logic         way_status_wr_en_w_debug;
-   logic         ic_debug_tag_val_rd_out;
-   logic         ifu_pmu_ic_miss_in;
-   logic         ifu_pmu_ic_hit_in;
-   logic         ifu_pmu_bus_error_in;
-   logic         ifu_pmu_bus_trxn_in;
-   logic         ifu_pmu_bus_busy_in;
-   logic         ic_debug_ict_array_sel_in;
-   logic         ic_debug_ict_array_sel_ff;
-   logic         debug_data_clken;
-   logic         last_data_recieved_in ;
-   logic         last_data_recieved_ff ;
-
-   logic                          ifu_bus_rvalid           ;
-   logic                          ifu_bus_rvalid_ff        ;
-   logic                          ifu_bus_rvalid_unq_ff    ;
-   logic                          ifu_bus_arready_unq       ;
-   logic                          ifu_bus_arready_unq_ff    ;
-   logic                          ifu_bus_arvalid           ;
-   logic                          ifu_bus_arvalid_ff        ;
-   logic                          ifu_bus_arready           ;
-   logic                          ifu_bus_arready_ff        ;
-   logic [63:0]                   ifu_bus_rdata_ff        ;
-   logic [1:0]                    ifu_bus_rresp_ff          ;
-   logic                          ifu_bus_rsp_valid ;
-   logic                          ifu_bus_rsp_ready ;
-   logic [pt.IFU_BUS_TAG-1:0]     ifu_bus_rsp_tag;
-   logic [63:0]                   ifu_bus_rsp_rdata;
-   logic [1:0]                    ifu_bus_rsp_opc;
-
-   logic [pt.ICACHE_NUM_BEATS-1:0]    write_fill_data;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    wr_data_c1_clk;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]    byp_fetch_index;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_1;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]    byp_fetch_index_inc;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_1;
-   logic          miss_buff_hit_unq_f ;
-   logic          stream_hit_f ;
-   logic          stream_miss_f ;
-   logic          stream_eol_f ;
-   logic          crit_byp_hit_f ;
-   logic [pt.IFU_BUS_TAG-1:0] other_tag ;
-   logic [(2*pt.ICACHE_NUM_BEATS)-1:0] [31:0] ic_miss_buff_data;
-   logic [63:0] ic_miss_buff_half;
-   logic        scnd_miss_req, scnd_miss_req_q;
-   logic        scnd_miss_req_in;
-
-
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_ff;
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_in;
-   logic [38:0]                         iccm_ecc_corr_data_ff;
-   logic                                iccm_ecc_write_status     ;
-   logic                                iccm_rd_ecc_single_err_ff   ;
-   logic                                iccm_error_start;     // start the error fsm
-   logic                                perr_state_en;
-   logic                                miss_state_en;
-
-   logic        busclk;
-   logic        busclk_force;
-   logic        busclk_reset;
-   logic        bus_ifu_bus_clk_en_ff;
-   logic        bus_ifu_bus_clk_en ;
-
-   logic        ifc_bus_ic_req_ff_in;
-   logic        ifu_bus_cmd_valid ;
-   logic        ifu_bus_cmd_ready ;
-
-   logic        bus_inc_data_beat_cnt     ;
-   logic        bus_reset_data_beat_cnt   ;
-   logic        bus_hold_data_beat_cnt    ;
-
-   logic        bus_inc_cmd_beat_cnt     ;
-   logic        bus_reset_cmd_beat_cnt_0   ;
-   logic        bus_reset_cmd_beat_cnt_secondlast   ;
-   logic        bus_hold_cmd_beat_cnt    ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_data_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_data_beat_count      ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_cmd_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_cmd_beat_count      ;
-
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_rd_addr_count;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_rd_addr_count;
-
-
-   logic        bus_cmd_sent           ;
-   logic        bus_last_data_beat     ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren            ;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren_last       ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]       wren_reset_miss      ;
-   logic        ifc_dma_access_ok_d;
-   logic        ifc_dma_access_ok_prev;
-
-   logic   bus_cmd_req_in ;
-   logic   bus_cmd_req_hold ;
-
-   logic   second_half_available ;
-   logic   write_ic_16_bytes ;
-
-   logic   ifc_region_acc_fault_final_bf;
-   logic   ifc_region_acc_fault_memory_bf;
-   logic   ifc_region_acc_fault_memory_f;
-   logic   ifc_region_acc_okay;
-
-   logic   iccm_correct_ecc;
-   logic   dma_sb_err_state, dma_sb_err_state_ff;
-   logic   two_byte_instr;
-
-   typedef enum logic [2:0] {IDLE=3'b000, CRIT_BYP_OK=3'b001, HIT_U_MISS=3'b010, MISS_WAIT=3'b011,CRIT_WRD_RDY=3'b100,SCND_MISS=3'b101,STREAM=3'b110 , STALL_SCND_MISS=3'b111} miss_state_t;
-   miss_state_t miss_state, miss_nxtstate;
-
-   typedef enum logic [1:0] {ERR_STOP_IDLE=2'b00, ERR_FETCH1=2'b01 , ERR_FETCH2=2'b10 , ERR_STOP_FETCH=2'b11} err_stop_state_t;
-   err_stop_state_t err_stop_state, err_stop_nxtstate;
-   logic   err_stop_state_en ;
-   logic   err_stop_fetch ;
-
-   logic   ic_crit_wd_rdy;         // Critical fetch is ready to be bypassed.
-
-   logic   ifu_bp_hit_taken_q_f;
-   logic   ifu_bus_rvalid_unq;
-   logic   bus_cmd_beat_en;
-
-
-// ---- Clock gating section -----
-// c1 clock enables
-
-
-   assign fetch_bf_f_c1_clken  = ifc_fetch_req_bf_raw | ifc_fetch_req_f | miss_pending | exu_flush_final | scnd_miss_req;
-   assign debug_c1_clken       = ic_debug_rd_en | ic_debug_wr_en ;
-   // C1 - 1 clock pulse for data
-`ifdef RV_FPGA_OPTIMIZE
-   assign fetch_bf_f_c1_clk = 1'b0;
-   assign debug_c1_clk      = 1'b0;
-`else
-   rvclkhdr fetch_bf_f_c1_cgc    ( .en(fetch_bf_f_c1_clken),     .l1clk(fetch_bf_f_c1_clk), .* );
-   rvclkhdr debug_c1_cgc         ( .en(debug_c1_clken),          .l1clk(debug_c1_clk), .* );
-`endif
-
-
-// ------ end clock gating section ------------------------
-
-   logic [1:0]    iccm_single_ecc_error;
-   logic          dma_iccm_req_f ;
-   assign iccm_dma_sb_error     = (|iccm_single_ecc_error[1:0] )  & dma_iccm_req_f ;
-   assign ifu_async_error_start = iccm_rd_ecc_single_err | ic_error_start;
-
-
-   typedef enum logic [2:0] {ERR_IDLE=3'b000, IC_WFF=3'b001 , ECC_WFF=3'b010 , ECC_CORR=3'b011, DMA_SB_ERR=3'b100} perr_state_t;
-   perr_state_t perr_state, perr_nxtstate;
-
-
-   assign ic_dma_active = iccm_correct_ecc | (perr_state == DMA_SB_ERR) | (err_stop_state == ERR_STOP_FETCH) | err_stop_fetch |
-                          dec_tlu_flush_err_wb; // The last term is to give a error-correction a chance to finish before refetch starts
-
-   assign scnd_miss_req_in     = ifu_bus_rsp_valid & bus_ifu_bus_clk_en & ifu_bus_rsp_ready &
-                                 (&bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]) &
-                                 ~uncacheable_miss_ff &  ((miss_state == SCND_MISS) | (miss_nxtstate == SCND_MISS)) & ~exu_flush_final;
-
-   assign ifu_bp_hit_taken_q_f = ifu_bp_hit_taken_f & ic_hit_f ;
-
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   // FIFO state machine
-   always_comb begin : MISS_SM
-      miss_nxtstate   = IDLE;
-      miss_state_en   = 1'b0;
-      case (miss_state)
-         IDLE: begin : idle
-                  miss_nxtstate = (ic_act_miss_f & ~exu_flush_final) ? CRIT_BYP_OK : HIT_U_MISS ;
-                  miss_state_en = ic_act_miss_f & ~dec_tlu_force_halt ;
-         end
-         CRIT_BYP_OK: begin : crit_byp_ok
-                  miss_nxtstate =  (dec_tlu_force_halt ) ?                                                                             IDLE :
-                                  ( ic_byp_hit_f &  (last_data_recieved_ff | (bus_ifu_wr_en_ff & last_beat)) &  uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f &  ~last_data_recieved_ff                                &  uncacheable_miss_ff) ? MISS_WAIT :
-                                  (~ic_byp_hit_f &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       &  uncacheable_miss_ff) ? CRIT_WRD_RDY :
-                                  (                                      (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f  &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  ( bus_ifu_wr_en_ff &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  (~ic_byp_hit_f  &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( (exu_flush_final | ifu_bp_hit_taken_q_f)  & ~(bus_ifu_wr_en_ff & last_beat)                      ) ? HIT_U_MISS : IDLE;
-                  miss_state_en =  dec_tlu_force_halt | exu_flush_final | ic_byp_hit_f | ifu_bp_hit_taken_q_f | (bus_ifu_wr_en_ff & last_beat) | (bus_ifu_wr_en_ff & ~uncacheable_miss_ff)  ;
-         end
-         CRIT_WRD_RDY: begin : crit_wrd_rdy
-                  miss_nxtstate =  IDLE ;
-                  miss_state_en =  exu_flush_final | flush_final_f | ic_byp_hit_f | dec_tlu_force_halt  ;
-         end
-         STREAM: begin : stream
-                  miss_nxtstate =  ((exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ) & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =    exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f   |  (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         MISS_WAIT: begin : miss_wait
-                  miss_nxtstate =  (exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =   exu_flush_final | (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         HIT_U_MISS: begin : hit_u_miss
-                  miss_nxtstate =  ic_miss_under_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? SCND_MISS :
-                                   ic_ignore_2nd_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? STALL_SCND_MISS : IDLE  ;
-                  miss_state_en = (bus_ifu_wr_en_ff & last_beat) | ic_miss_under_miss_f | ic_ignore_2nd_miss_f | dec_tlu_force_halt;
-         end
-         SCND_MISS: begin : scnd_miss
-                  miss_nxtstate   = dec_tlu_force_halt ? IDLE  :
-                                    exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : CRIT_BYP_OK;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         STALL_SCND_MISS: begin : stall_scnd_miss
-                  miss_nxtstate   =  dec_tlu_force_halt ? IDLE  :
-                                     exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : IDLE;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         default: begin : def_case
-                  miss_nxtstate   = IDLE;
-                  miss_state_en   = 1'b0;
-         end
-      endcase
-   end
-   rvdffs #(($bits(miss_state_t))) miss_state_ff (.clk(active_clk), .din(miss_nxtstate), .dout({miss_state}), .en(miss_state_en),   .*);
-
-  logic    sel_hold_imb     ;
-
-   assign miss_pending       =  (miss_state != IDLE) ;
-   assign crit_wd_byp_ok_ff  =  (miss_state == CRIT_BYP_OK) | ((miss_state == CRIT_WRD_RDY) & ~flush_final_f);
-   assign sel_hold_imb       =  (miss_pending & ~(bus_ifu_wr_en_ff & last_beat) & ~((miss_state == CRIT_WRD_RDY) & exu_flush_final) &
-                              ~((miss_state == CRIT_WRD_RDY) & crit_byp_hit_f) ) | ic_act_miss_f |
-                                (miss_pending & (miss_nxtstate == CRIT_WRD_RDY)) ;
-
-
-   logic         sel_hold_imb_scnd;
-   logic  [31:1] imb_scnd_in;
-   logic  [31:1] imb_scnd_ff;
-   logic         uncacheable_miss_scnd_in ;
-   logic         uncacheable_miss_scnd_ff ;
-
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_in;
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_ff;
-
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_in;
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_ff;
-
-   assign sel_hold_imb_scnd                                =((miss_state == SCND_MISS) | ic_miss_under_miss_f) & ~flush_final_f ;
-   assign way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0] = (miss_state == SCND_MISS) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] : {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]          = (miss_state == SCND_MISS) ? tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]          : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}});
-   assign uncacheable_miss_scnd_in   = sel_hold_imb_scnd ? uncacheable_miss_scnd_ff : ifc_fetch_uncacheable_bf ;
-
-
-   rvdff_fpga #(1)  unc_miss_scnd_ff    (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din (uncacheable_miss_scnd_in), .dout(uncacheable_miss_scnd_ff));
-   rvdffpcie #(31) imb_f_scnd_ff       (.*, .en(fetch_bf_f_c1_clken),  .din ({imb_scnd_in[31:1]}), .dout({imb_scnd_ff[31:1]}));
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_scnd_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_scnd_ff      (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-
-
-
-   assign ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] = bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] ;
-   assign ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3]  = ifu_bus_rid_ff[pt.ICACHE_BEAT_BITS-1:0] & {pt.ICACHE_BEAT_BITS{bus_ifu_wr_en_ff}};
-   // NOTE: Cacheline size is 16 bytes in this example.
-   // Tag     Index  Bank Offset
-   // [31:16] [15:5] [4]  [3:0]
-
-
-   assign fetch_req_icache_f   = ifc_fetch_req_f & ~ifc_iccm_access_f & ~ifc_region_acc_fault_final_f;
-   assign fetch_req_iccm_f     = ifc_fetch_req_f &  ifc_iccm_access_f;
-
-   assign ic_iccm_hit_f        = fetch_req_iccm_f  &  (~miss_pending | (miss_state==HIT_U_MISS) | (miss_state==STREAM));
-   assign ic_byp_hit_f         = (crit_byp_hit_f | stream_hit_f)  & fetch_req_icache_f &  miss_pending ;
-   assign ic_act_hit_f         = (|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) & fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff;
-   assign ic_act_miss_f        = (((~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & ~miss_pending) | scnd_miss_req) & ~ifc_region_acc_fault_final_f;
-   assign ic_miss_under_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   (imb_ff[31:pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO]) & ~uncacheable_miss_ff & ~sel_mb_addr_ff & ~ifc_region_acc_fault_final_f;
-   assign ic_ignore_2nd_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   ((imb_ff[31:pt.ICACHE_TAG_INDEX_LO] == ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO])  |   uncacheable_miss_ff) ;
-   assign ic_hit_f             =  ic_act_hit_f | ic_byp_hit_f | ic_iccm_hit_f | (ifc_region_acc_fault_final_f & ifc_fetch_req_f);
-
-   assign uncacheable_miss_in   = scnd_miss_req ? uncacheable_miss_scnd_ff : sel_hold_imb ? uncacheable_miss_ff : ifc_fetch_uncacheable_bf ;
-   assign imb_in[31:1]          = scnd_miss_req ? imb_scnd_ff[31:1]        : sel_hold_imb ? imb_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign imb_scnd_in[31:1]     = sel_hold_imb_scnd ? imb_scnd_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign scnd_miss_index_match  =  (imb_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == imb_scnd_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]) & scnd_miss_req & ~ifu_wr_cumulative_err_data;
-   assign way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0] = (scnd_miss_req & ~scnd_miss_index_match) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                        (scnd_miss_req &  scnd_miss_index_match) ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                         miss_pending                            ? way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                                                                  {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]          = scnd_miss_req ? (tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0] | ({pt.ICACHE_NUM_WAYS {scnd_miss_index_match}} & replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0])) :
-                                                         miss_pending ? tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]  : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}}) ;
-
-   assign reset_ic_in           = miss_pending & ~scnd_miss_req_q &  (reset_all_tags |  reset_ic_ff) ;
-
-
-
-   rvdffpcie #(31) ifu_fetch_addr_f_ff (.*, .en(fetch_bf_f_c1_clken), .din ({ifc_fetch_addr_bf[31:1]}), .dout({ifu_fetch_addr_int_f[31:1]}));
-
-   assign vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] = ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1] ;
-
-   rvdffpcie #(31) imb_f_ff        (.*, .en(fetch_bf_f_c1_clken), .din (imb_in[31:1]), .dout(imb_ff[31:1]));
-   rvdff_fpga #(1) unc_miss_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ( uncacheable_miss_in),               .dout( uncacheable_miss_ff));
-
-
-   assign miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]      = (~miss_pending                    ) ? imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] : miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] ;
-
-
-   rvdfflie #(.WIDTH(31-pt.ICACHE_BEAT_ADDR_HI),.LEFT(31-pt.ICACHE_BEAT_ADDR_HI-8)) miss_f_ff       (.*, .en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .din ({miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]}), .dout({miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1]}));
-
-
-
-
-
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_ff (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_ff      (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-   assign ifc_fetch_req_qual_bf  = ifc_fetch_req_bf  & ~((miss_state == CRIT_WRD_RDY) & flush_final_f) & ~stream_miss_f ;// & ~exu_flush_final ;
-
-   assign ifc_fetch_req_f       = ifc_fetch_req_f_raw & ~exu_flush_final ;
-
-   rvdff_fpga #(1) ifu_iccm_acc_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_iccm_access_bf),      .dout(ifc_iccm_access_f));
-   rvdff_fpga #(1) ifu_iccm_reg_acc_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_final_bf), .dout(ifc_region_acc_fault_final_f));
-   rvdff_fpga #(1) rgn_acc_ff          (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_bf),       .dout(ifc_region_acc_fault_f));
-
-
-   assign ifu_ic_req_addr_f[31:3]  = {miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] };
-   assign ifu_ic_mb_empty          = (((miss_state == HIT_U_MISS) | (miss_state == STREAM)) & ~(bus_ifu_wr_en_ff & last_beat)) |  ~miss_pending ;
-   assign ifu_miss_state_idle      = (miss_state == IDLE) ;
-
-
-   assign sel_mb_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff) | reset_tag_valid_for_miss) ;
-   assign ifu_ic_rw_int_addr[31:1] = ({31{ sel_mb_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_addr}}  &  ifc_fetch_addr_bf[31:1] )   ;
-
-   assign sel_mb_status_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff & last_beat & bus_ifu_wr_en_ff_q) | reset_tag_valid_for_miss) ;
-   assign ifu_status_wr_addr[31:1] = ({31{ sel_mb_status_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_status_addr}}  &  ifu_fetch_addr_int_f[31:1] )   ;
-
-
-  assign ic_rw_addr[31:1]      = ifu_ic_rw_int_addr[31:1] ;
-
-
-if (pt.ICACHE_ECC == 1) begin: icache_ecc_1
-   logic [6:0]       ic_wr_ecc;
-   logic [6:0]       ic_miss_buff_ecc;
-   logic [141:0]     ic_wr_16bytes_data ;
-   logic [70:0]      ifu_ic_debug_rd_data_in   ;
-
-                rvecc_encode_64  ic_ecc_encode_64_bus (
-                           .din    (ifu_bus_rdata_ff[63:0]),
-                           .ecc_out(ic_wr_ecc[6:0]));
-                rvecc_encode_64  ic_ecc_encode_64_buff (
-                           .din    (ic_miss_buff_half[63:0]),
-                           .ecc_out(ic_miss_buff_ecc[6:0]));
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  ic_wr_16bytes_data[((71*i)+70): (71*i)];
-   end
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_eccerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f)  | ic_rd_parity_final_err;
-
-
-
-  assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {2'b0,ictag_debug_rd_data[25:21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}}, way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                     ic_debug_rd_data[70:0];
-
-  rvdffe #(71) ifu_debug_data_ff (.*,
-                                  .en (debug_data_clken),
-                                  .din ({
-                                         ifu_ic_debug_rd_data_in[70:0]
-                                         }),
-                                  .dout({
-                                         ifu_ic_debug_rd_data[70:0]
-                                         })
-                                  );
-
-  assign ic_wr_16bytes_data[141:0] =  ifu_bus_rid_ff[0] ? {ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_ecc[6:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_ecc[6:0] ,  ic_miss_buff_half[63:0] , ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] } ;
-
-
-end
-else begin : icache_parity_1
-   logic [3:0]   ic_wr_parity;
-   logic [3:0]   ic_miss_buff_parity;
-   logic [135:0] ic_wr_16bytes_data ;
-   logic [70:0]  ifu_ic_debug_rd_data_in   ;
-    for (genvar i=0 ; i < 4 ; i++) begin : DATA_PGEN
-       rveven_paritygen #(16) par_bus  (.data_in   (ifu_bus_rdata_ff[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_wr_parity[i]));
-       rveven_paritygen #(16) par_buff  (.data_in   (ic_miss_buff_half[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_miss_buff_parity[i]));
-    end
-
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  {3'b0, ic_wr_16bytes_data[((68*i)+67): (68*i)]};
-   end
-
-
-
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_parerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f) | ic_rd_parity_final_err;
-
-   assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {6'b0,ictag_debug_rd_data[21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}},way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                      ic_debug_rd_data[70:0] ;
-
-   rvdffe #(71) ifu_debug_data_ff (.*,
-                                   .en (debug_data_clken),
-                                   .din ({
-                                          ifu_ic_debug_rd_data_in[70:0]
-                                          }),
-                                   .dout({
-                                          ifu_ic_debug_rd_data[70:0]
-                                          })
-                                   );
-
-   assign ic_wr_16bytes_data[135:0] =  ifu_bus_rid_ff[0] ? {ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_parity[3:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_parity[3:0] ,  ic_miss_buff_half[63:0] , ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] } ;
-
-end
-
-
-  assign ifu_wr_data_comb_err       =  bus_ifu_wr_data_error_ff ;
-  assign ifu_wr_cumulative_err      = (ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff) & ~reset_beat_cnt;
-  assign ifu_wr_cumulative_err_data =  ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff ;
-
-
-  assign sel_byp_data     =  (ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK));
-  assign sel_ic_data      = ~(ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK) | (miss_state == MISS_WAIT)) & ~fetch_req_iccm_f & ~ifc_region_acc_fault_final_f;
-
- if (pt.ICCM_ICACHE==1) begin: iccm_icache
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_iccm_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-
-  assign ic_sel_premux_data = sel_iccm_data | sel_byp_data ;
- end
-
-if (pt.ICCM_ONLY == 1 ) begin: iccm_only
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-  assign ic_premux_data = '0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-if (pt.ICACHE_ONLY == 1 ) begin: icache_only
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_sel_premux_data =  sel_byp_data ;
-end
-
-
-if (pt.NO_ICCM_NO_ICACHE == 1 ) begin: no_iccm_no_icache
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_premux_data = 0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-
-  assign ifc_bus_acc_fault_f[1:0]   =  {2{ic_byp_hit_f}} & ifu_byp_data_err_f[1:0] ;
-  assign ic_data_f[31:0]      = ic_final_data[31:0];
-
-
-
-assign fetch_req_f_qual       = ic_hit_f & ~exu_flush_final;
-assign ic_access_fault_f[1:0]  = ({2{ifc_region_acc_fault_final_f}} | ifc_bus_acc_fault_f[1:0])  & {2{~exu_flush_final}};
-assign ic_access_fault_type_f[1:0] = |iccm_rd_ecc_double_err       ? 2'b01 :
-                                     ifc_region_acc_fault_f        ? 2'b10 :
-                                     ifc_region_acc_fault_memory_f ? 2'b11 :  2'b00 ;
-
-  // right justified
-
-assign ic_fetch_val_f[1] = fetch_req_f_qual & ifu_bp_inst_mask_f & ~(vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}}) & (err_stop_state != ERR_FETCH2);
-assign ic_fetch_val_f[0] = fetch_req_f_qual ;
-assign two_byte_instr    =  (ic_data_f[1:0] != 2'b11 )  ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-//  Create full buffer...                                                          //
-/////////////////////////////////////////////////////////////////////////////////////
-     logic [63:0]       ic_miss_buff_data_in;
-     assign ic_miss_buff_data_in[63:0] = ifu_bus_rsp_rdata[63:0];
-
-     for (genvar i=0; i<pt.ICACHE_NUM_BEATS; i++) begin :  wr_flop
-
-        assign write_fill_data[i]        =   bus_ifu_wr_en & (  (pt.IFU_BUS_TAG)'(i)  == ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0]);
-
-        rvdffe #(32) byp_data_0_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[31:0]),
-                                    .dout(ic_miss_buff_data[i*2][31:0])
-                                    );
-
-        rvdffe #(32) byp_data_1_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[63:32]),
-                                    .dout(ic_miss_buff_data[i*2+1][31:0])
-                                    );
-
-        assign ic_miss_buff_data_valid_in[i]  = write_fill_data[i] ? 1'b1  : (ic_miss_buff_data_valid[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_valid_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_valid_in[i]),
-                  .dout(ic_miss_buff_data_valid[i]));
-
-        assign ic_miss_buff_data_error_in[i]  = write_fill_data[i] ? bus_ifu_wr_data_error  : (ic_miss_buff_data_error[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_error_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_error_in[i] ),
-                  .dout(ic_miss_buff_data_error[i]));
-     end
-
-/////////////////////////////////////////////////////////////////////////////////////
-// New bypass ready                                                                //
-/////////////////////////////////////////////////////////////////////////////////////
-   logic   [pt.ICACHE_BEAT_ADDR_HI:1]  bypass_index;
-   logic   [pt.ICACHE_BEAT_ADDR_HI:3]  bypass_index_5_3_inc;
-   logic   bypass_data_ready_in;
-   logic   ic_crit_wd_rdy_new_in;
-
-   assign bypass_index[pt.ICACHE_BEAT_ADDR_HI:1] = imb_ff[pt.ICACHE_BEAT_ADDR_HI:1] ;
-   assign bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3] = bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] + 1 ;
-
-
-   assign bypass_data_ready_in = ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] &  bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      &  bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid_in[bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  bypass_index[2] & bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & (bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}})))   ;
-
-
-
-   assign    ic_crit_wd_rdy_new_in = ( bypass_data_ready_in & crit_wd_byp_ok_ff   &  uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (                        crit_wd_byp_ok_ff   & ~uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (ic_crit_wd_rdy_new_ff & ~fetch_req_icache_f & crit_wd_byp_ok_ff    &  ~exu_flush_final) ;
-
-
-  assign byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:1]          =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1]       ;
-  assign byp_fetch_index_0[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b0} ;
-  assign byp_fetch_index_1[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b1} ;
-  assign byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]      =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3]+1'b1 ;
-  assign byp_fetch_index_inc_0[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b0} ;
-  assign byp_fetch_index_inc_1[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b1} ;
-
-  assign  ifu_byp_data_err_new = (~ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 (~ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] & (ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] | ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )) ;
-
-  assign  ifu_byp_data_err_f[1:0]  =   (ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  ? 2'b11 :
-                                      ( ifu_fetch_addr_int_f[2] &  ifu_fetch_addr_int_f[1] &   ~(ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] ) & (~miss_wrap_f & ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]])) ? 2'b10 : 2'b00;
-
-
-
-
-
-  assign ic_byp_data_only_pre_new[79:0] =  ({80{~ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_0][15:0],ic_miss_buff_data[byp_fetch_index_1][31:0]     , ic_miss_buff_data[byp_fetch_index_0][31:0]}) |
-                                           ({80{ ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_1][15:0],ic_miss_buff_data[byp_fetch_index_inc_0][31:0] , ic_miss_buff_data[byp_fetch_index_1][31:0]}) ;
-
-  assign ic_byp_data_only_new[79:0]      = ~ifu_fetch_addr_int_f[1] ? {ic_byp_data_only_pre_new[79:0]} :
-                                                                      {16'b0,ic_byp_data_only_pre_new[79:16]} ;
-
-  assign miss_wrap_f      =  (imb_ff[pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[pt.ICACHE_TAG_INDEX_LO] ) ;
-
-  assign miss_buff_hit_unq_f  = ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     &  byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] &  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_BITS{1'b1}})))   ;
-
-  assign stream_hit_f     =  (miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) ;
-  assign stream_miss_f    = ~(miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) & ifc_fetch_req_f;
-  assign stream_eol_f     =  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:2] == {pt.ICACHE_BEAT_BITS+1{1'b1}}) & ifc_fetch_req_f & stream_hit_f;
-
-  assign crit_byp_hit_f   =  (miss_buff_hit_unq_f ) & ((miss_state == CRIT_WRD_RDY) | (miss_state==CRIT_BYP_OK)) ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Figure out if you have the data to write.                                       //
-/////////////////////////////////////////////////////////////////////////////////////
-
-assign other_tag[pt.IFU_BUS_TAG-1:0] = {ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:1] , ~ifu_bus_rid_ff[0] } ;
-assign second_half_available      = ic_miss_buff_data_valid[other_tag] ;
-assign write_ic_16_bytes          = second_half_available & bus_ifu_wr_en_ff ;
-assign ic_miss_buff_half[63:0]    = {ic_miss_buff_data[{other_tag,1'b1}],ic_miss_buff_data[{other_tag,1'b0}] } ;
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Parity checking logic for Icache logic.                                         //
-/////////////////////////////////////////////////////////////////////////////////////
-
-
-assign ic_rd_parity_final_err = ic_tag_perr & ~exu_flush_final & sel_ic_data & ~(ifc_region_acc_fault_final_f | (|ifc_bus_acc_fault_f)) &
-                                      (fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff);
-
-logic [pt.ICACHE_NUM_WAYS-1:0]                   perr_err_inv_way;
-logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]   perr_ic_index_ff;
-logic                                         perr_sel_invalidate;
-logic                                         perr_sb_write_status   ;
-
-
-
-   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1)) perr_dat_ff    (.din(ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]), .dout(perr_ic_index_ff[pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]), .en(perr_sb_write_status),  .*);
-
-   assign perr_err_inv_way[pt.ICACHE_NUM_WAYS-1:0]   =  {pt.ICACHE_NUM_WAYS{perr_sel_invalidate}} ;
-   assign iccm_correct_ecc     = (perr_state == ECC_CORR);
-   assign dma_sb_err_state     = (perr_state == DMA_SB_ERR);
-   assign iccm_buf_correct_ecc = iccm_correct_ecc & ~dma_sb_err_state_ff;
-
-
-
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-
-
-   // FIFO state machine
-   always_comb begin  : ERROR_SM
-      perr_nxtstate            = ERR_IDLE;
-      perr_state_en            = 1'b0;
-      perr_sb_write_status     = 1'b0;
-      perr_sel_invalidate      = 1'b0;
-
-      case (perr_state)
-         ERR_IDLE: begin : err_idle
-                  perr_nxtstate         =  iccm_dma_sb_error ? DMA_SB_ERR : (ic_error_start & ~exu_flush_final) ? IC_WFF : ECC_WFF;
-                  perr_state_en         =  (((iccm_error_start | ic_error_start) & ~exu_flush_final) | iccm_dma_sb_error) & ~dec_tlu_force_halt;
-                  perr_sb_write_status  =  perr_state_en;
-         end
-         IC_WFF: begin : icache_wff    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  perr_nxtstate       =  ERR_IDLE ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt ;
-                  perr_sel_invalidate =  (dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb);
-         end
-         ECC_WFF: begin : ecc_wff
-                  perr_nxtstate       =  ((~dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb ) | dec_tlu_force_halt) ? ERR_IDLE : ECC_CORR ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt  ;
-         end
-         DMA_SB_ERR : begin : dma_sb_ecc
-                 perr_nxtstate       = dec_tlu_force_halt ? ERR_IDLE : ECC_CORR;
-                 perr_state_en       = 1'b1;
-         end
-         ECC_CORR: begin : ecc_corr
-                  perr_nxtstate       =  ERR_IDLE  ;
-                  perr_state_en       =   1'b1   ;
-         end
-         default: begin : def_case
-                  perr_nxtstate            = ERR_IDLE;
-                  perr_state_en            = 1'b0;
-                  perr_sb_write_status     = 1'b0;
-                  perr_sel_invalidate      = 1'b0;
-         end
-      endcase
-   end
-
-   rvdffs #(($bits(perr_state_t))) perr_state_ff (.clk(active_clk), .din(perr_nxtstate), .dout({perr_state}), .en(perr_state_en),   .*);
-
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   always_comb begin  : ERROR_STOP_FETCH
-      err_stop_nxtstate            = ERR_STOP_IDLE;
-      err_stop_state_en            = 1'b0;
-      err_stop_fetch               = 1'b0;
-      iccm_correction_state        = 1'b0;
-
-      case (err_stop_state)
-         ERR_STOP_IDLE: begin : err_stop_idle
-                  err_stop_nxtstate         =  ERR_FETCH1;
-                  err_stop_state_en         =  dec_tlu_flush_err_wb & (perr_state  == ECC_WFF) & ~dec_tlu_force_halt;
-         end
-         ERR_FETCH1: begin : err_fetch1    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))   ?  ERR_STOP_FETCH : ifu_fetch_val[0] ? ERR_FETCH2 :  ERR_FETCH1;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | ifu_bp_hit_taken_q_f | dec_tlu_force_halt;
-                  err_stop_fetch          =   ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))  & ~(exu_flush_final | dec_tlu_i0_commit_cmt);
-                  iccm_correction_state   = 1'b1;
-
-        end
-         ERR_FETCH2: begin : err_fetch2    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ifu_fetch_val[0] ?  ERR_STOP_FETCH : ERR_FETCH2;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | dec_tlu_force_halt ;
-                  err_stop_fetch          =   ifu_fetch_val[0] & ~exu_flush_final & ~dec_tlu_i0_commit_cmt ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         ERR_STOP_FETCH: begin : ecc_wff
-                  err_stop_nxtstate       =  ( (dec_tlu_flush_lower_wb & ~dec_tlu_flush_err_wb) | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : dec_tlu_flush_err_wb ? ERR_FETCH1 : ERR_STOP_FETCH ;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb |  dec_tlu_i0_commit_cmt | dec_tlu_force_halt   ;
-                  err_stop_fetch          =  1'b1;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         default: begin : def_case
-                  err_stop_nxtstate            = ERR_STOP_IDLE;
-                  err_stop_state_en            = 1'b0;
-                  err_stop_fetch               = 1'b0 ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-      endcase
-   end
-   rvdffs #(($bits(err_stop_state_t))) err_stop_state_ff (.clk(active_clk), .din(err_stop_nxtstate), .dout({err_stop_state}), .en(err_stop_state_en),   .*);
-
-
-
-   assign bus_ifu_bus_clk_en =  ifu_bus_clk_en ;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign busclk = 1'b0;
-   assign busclk_force = 1'b0;
-`else
-   rvclkhdr bus_clk_f(.en(bus_ifu_bus_clk_en), .l1clk(busclk), .*);
-   rvclkhdr bus_clk(.en(bus_ifu_bus_clk_en | dec_tlu_force_halt), .l1clk(busclk_force), .*);
-`endif
-
-
-
-   assign  scnd_miss_req = scnd_miss_req_q & ~exu_flush_final;
-
-   assign  ifc_bus_ic_req_ff_in  = (ic_act_miss_f | bus_cmd_req_hold | ifu_bus_cmd_valid) & ~dec_tlu_force_halt & ~((bus_cmd_beat_count== {pt.ICACHE_BEAT_BITS{1'b1}}) & ifu_bus_cmd_valid & ifu_bus_cmd_ready & miss_pending);
-
-   rvdff_fpga #(1) bus_ic_req_ff2(.*, .clk(busclk_force), .clken(bus_ifu_bus_clk_en | dec_tlu_force_halt), .rawclk(clk), .din(ifc_bus_ic_req_ff_in), .dout(ifu_bus_cmd_valid));
-
-   assign    bus_cmd_req_in  = (ic_act_miss_f | bus_cmd_req_hold) & ~bus_cmd_sent & ~dec_tlu_force_halt ; // hold until first command sent
-
-
-
-    // AXI command signals
-    //  Read Channel
-    assign ifu_axi_arvalid               =  ifu_bus_cmd_valid ;
-    assign ifu_axi_arid[pt.IFU_BUS_TAG-1:0] = ((pt.IFU_BUS_TAG)'(bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0])) & {pt.IFU_BUS_TAG{ifu_bus_cmd_valid}};
-    assign ifu_axi_araddr[31:0]          =   {ifu_ic_req_addr_f[31:3],3'b0}  & {32{ifu_bus_cmd_valid}};
-    assign ifu_axi_arsize[2:0]           =  3'b011;
-    assign ifu_axi_arprot[2:0]           = 3'b101;
-    assign ifu_axi_arcache[3:0]          = 4'b1111;
-    assign ifu_axi_arregion[3:0]         = ifu_ic_req_addr_f[31:28];
-    assign ifu_axi_arlen[7:0]            = '0;
-    assign ifu_axi_arburst[1:0]          = 2'b01;
-    assign ifu_axi_arqos[3:0]            = '0;
-    assign ifu_axi_arlock                = '0;
-    assign ifu_axi_rready                = 1'b1;
-
-    //  Write Channel
-    assign ifu_axi_awvalid                  = '0 ;
-    assign ifu_axi_awid[pt.IFU_BUS_TAG-1:0] = '0 ;
-    assign ifu_axi_awaddr[31:0]             = '0 ;
-    assign ifu_axi_awsize[2:0]              = '0 ;
-    assign ifu_axi_awprot[2:0]              = '0;
-    assign ifu_axi_awcache[3:0]             = '0 ;
-    assign ifu_axi_awregion[3:0]            = '0 ;
-    assign ifu_axi_awlen[7:0]               = '0;
-    assign ifu_axi_awburst[1:0]             = '0 ;
-    assign ifu_axi_awqos[3:0]               = '0;
-    assign ifu_axi_awlock                   = '0;
-
-    assign ifu_axi_wvalid                =  '0;
-    assign ifu_axi_wstrb[7:0]            =  '0;
-    assign ifu_axi_wdata[63:0]           =  '0;
-    assign ifu_axi_wlast                 =  '0;
-    assign ifu_axi_bready                =  '0;
-
-
-   assign ifu_bus_arready_unq     =  ifu_axi_arready ;
-   assign ifu_bus_rvalid_unq      =  ifu_axi_rvalid ;
-   assign ifu_bus_arvalid         =  ifu_axi_arvalid ;
-
-   rvdff_fpga #(1)               bus_rdy_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arready_unq),            .dout(ifu_bus_arready_unq_ff));
-   rvdff_fpga #(1)               bus_rsp_vld_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_rvalid_unq),             .dout(ifu_bus_rvalid_unq_ff));
-   rvdff_fpga #(1)               bus_cmd_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arvalid),                .dout(ifu_bus_arvalid_ff));
-   rvdff_fpga #(2)               bus_rsp_cmd_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rresp[1:0]),             .dout(ifu_bus_rresp_ff[1:0]));
-   rvdff_fpga #(pt.IFU_BUS_TAG)  bus_rsp_tag_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rid[pt.IFU_BUS_TAG-1:0]),.dout(ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:0]));
-   rvdffe #(64)                  bus_data_ff     (.*, .clk(clk),     .din(ifu_axi_rdata[63:0]),            .dout(ifu_bus_rdata_ff[63:0]), .en(ifu_bus_clk_en & ifu_axi_rvalid));
-
-   assign ifu_bus_cmd_ready = ifu_axi_arready ;
-   assign ifu_bus_rsp_valid = ifu_axi_rvalid ;
-   assign ifu_bus_rsp_ready = ifu_axi_rready ;
-   assign ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0] = ifu_axi_rid[pt.IFU_BUS_TAG-1:0] ;
-   assign ifu_bus_rsp_rdata[63:0] = ifu_axi_rdata[63:0] ;
-   assign ifu_bus_rsp_opc[1:0] = {ifu_axi_rresp[1:0]} ;
-
-
-
-
-
-
-
-
-
-   // Create write signals so we can write to the miss-buffer directly from the bus.
-
-   assign ifu_bus_rvalid            =  ifu_bus_rsp_valid & bus_ifu_bus_clk_en ;
-
-
-
-   assign ifu_bus_arready            =  ifu_bus_arready_unq    & bus_ifu_bus_clk_en    ;
-   assign ifu_bus_arready_ff         =  ifu_bus_arready_unq_ff & bus_ifu_bus_clk_en_ff ;
-
-   assign ifu_bus_rvalid_ff          =  ifu_bus_rvalid_unq_ff & bus_ifu_bus_clk_en_ff ;
-   assign bus_cmd_sent               =  ifu_bus_arvalid & ifu_bus_arready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_inc_data_beat_cnt      = (bus_ifu_wr_en_ff & ~bus_last_data_beat & ~dec_tlu_force_halt) ;
-   assign bus_reset_data_beat_cnt    =  ic_act_miss_f | (bus_ifu_wr_en_ff &  bus_last_data_beat) | dec_tlu_force_halt;
-   assign bus_hold_data_beat_cnt     = ~bus_inc_data_beat_cnt & ~bus_reset_data_beat_cnt ;
-
-   assign bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] = ({pt.ICACHE_BEAT_BITS{bus_reset_data_beat_cnt}} & (pt.ICACHE_BEAT_BITS)'(0)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_data_beat_cnt}}   & (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_data_beat_cnt}}  &  bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-
-   assign last_data_recieved_in =  (bus_ifu_wr_en_ff &  bus_last_data_beat & ~scnd_miss_req) | (last_data_recieved_ff & ~ic_act_miss_f) ;
-
-
-
-// Request Address Count
-   assign bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] = (~miss_pending                    ) ? imb_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           ( bus_cmd_sent                    ) ? (bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] + 3'b001) :
-                                                                                                  bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0];
-
-   rvdff_fpga #(pt.ICACHE_BEAT_BITS)  bus_rd_addr_ff (.*,  .clk(busclk_reset),  .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .din ({bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}), .dout({bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-
-// command beat Count
-   assign bus_inc_cmd_beat_cnt              =  ifu_bus_cmd_valid    &  ifu_bus_cmd_ready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_reset_cmd_beat_cnt_0          =  (ic_act_miss_f        & ~uncacheable_miss_in) | dec_tlu_force_halt ;
-   assign bus_reset_cmd_beat_cnt_secondlast =  ic_act_miss_f        &  uncacheable_miss_in ;
-   assign bus_hold_cmd_beat_cnt             = ~bus_inc_cmd_beat_cnt & ~(ic_act_miss_f | scnd_miss_req | dec_tlu_force_halt) ;
-   assign bus_cmd_beat_en                   =  bus_inc_cmd_beat_cnt | ic_act_miss_f | dec_tlu_force_halt;
-
-   assign bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] =  ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_0}}       & (pt.ICACHE_BEAT_BITS)'(0) ) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_secondlast}} & (pt.ICACHE_BEAT_BITS)'(pt.ICACHE_SCND_LAST)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_cmd_beat_cnt}}              & (bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}}, 1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_cmd_beat_cnt}}             &  bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]) ;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign busclk_reset = 1'b0;
-`else
-   rvclkhdr bus_clk_reset(.en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .l1clk(busclk_reset), .*);
-`endif
-
-
-
-   rvdffs_fpga #(pt.ICACHE_BEAT_BITS)  bus_cmd_beat_ff (.*, .clk(busclk_reset), .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .en (bus_cmd_beat_en), .din ({bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}),
-                    .dout({bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-    assign bus_last_data_beat     =  uncacheable_miss_ff ? (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] == {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1}) : (&bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-   assign  bus_ifu_wr_en            =  ifu_bus_rvalid     & miss_pending ;
-   assign  bus_ifu_wr_en_ff         =  ifu_bus_rvalid_ff  & miss_pending ;
-   assign  bus_ifu_wr_en_ff_q       =  ifu_bus_rvalid_ff  & miss_pending & ~uncacheable_miss_ff & ~(|ifu_bus_rresp_ff[1:0]) & write_ic_16_bytes; // qualify with no-error conditions ;
-   assign  bus_ifu_wr_en_ff_wo_err  =  ifu_bus_rvalid_ff & miss_pending &  ~uncacheable_miss_ff;
-
-
-   rvdffie #(10) misc_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {ic_act_miss_f,        ifu_wr_cumulative_err,exu_flush_final,  ic_crit_wd_rdy_new_in,bus_ifu_bus_clk_en,   scnd_miss_req_in,bus_cmd_req_in,  last_data_recieved_in,
-ifc_dma_access_ok_d,   dma_iccm_req}),
-         .dout({ic_act_miss_f_delayed,ifu_wr_data_comb_err_ff,  flush_final_f,ic_crit_wd_rdy_new_ff,bus_ifu_bus_clk_en_ff,scnd_miss_req_q, bus_cmd_req_hold,last_data_recieved_ff,
-ifc_dma_access_ok_prev,dma_iccm_req_f})
-         );
-
-   rvdffie #(.WIDTH(pt.ICACHE_BEAT_BITS+5),.OVERRIDE(1)) misc1_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {reset_ic_in,sel_mb_addr,   bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],ifc_region_acc_fault_memory_bf,ic_debug_rd_en,       ic_debug_rd_en_ff}),
-         .dout({reset_ic_ff,sel_mb_addr_ff,bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],    ifc_region_acc_fault_memory_f, ic_debug_rd_en_ff,ifu_ic_debug_rd_data_valid})
-         );
-
-   assign    reset_tag_valid_for_miss = ic_act_miss_f_delayed & (miss_state == CRIT_BYP_OK) & ~uncacheable_miss_ff;
-   assign    bus_ifu_wr_data_error    = |ifu_bus_rsp_opc[1:0] &  ifu_bus_rvalid  & miss_pending;
-   assign    bus_ifu_wr_data_error_ff = |ifu_bus_rresp_ff[1:0] &  ifu_bus_rvalid_ff  & miss_pending;
-
-
-   assign ic_crit_wd_rdy   =  ic_crit_wd_rdy_new_in | ic_crit_wd_rdy_new_ff ;
-   assign last_beat        =  bus_last_data_beat & bus_ifu_wr_en_ff;
-   assign reset_beat_cnt    = bus_reset_data_beat_cnt ;
-
-// DMA
-   // Making sure that the dma_access is allowed when we have 2 back to back dma_access_ok. Also gating with current state == idle
-   assign ifc_dma_access_ok_d  = ifc_dma_access_ok &  ~iccm_correct_ecc & ~iccm_dma_sb_error;
-   assign ifc_dma_access_q_ok  = ifc_dma_access_ok &  ~iccm_correct_ecc & ifc_dma_access_ok_prev &  (perr_state == ERR_IDLE)  & ~iccm_dma_sb_error;
-   assign iccm_ready           = ifc_dma_access_q_ok ;
-
-   logic [1:0]        iccm_ecc_word_enable;
-
-    if (pt.ICCM_ENABLE == 1 ) begin: iccm_enabled
-         logic  [3:2] dma_mem_addr_ff  ;
-         logic  iccm_dma_rden    ;
-
-         logic  iccm_dma_ecc_error_in;
-         logic  [13:0] dma_mem_ecc;
-         logic  [63:0] iccm_dma_rdata_in;
-         logic  [31:0] iccm_dma_rdata_1_muxed;
-         logic [1:0] [31:0] iccm_corrected_data;
-         logic [1:0] [06:0] iccm_corrected_ecc;
-
-
-         logic [1:0]        iccm_double_ecc_error;
-
-
-         logic [pt.ICCM_BITS-1:2]       iccm_rw_addr_f;
-
-         logic [31:0]       iccm_corrected_data_f_mux;
-         logic [06:0]       iccm_corrected_ecc_f_mux;
-         logic              iccm_dma_rvalid_in;
-         logic [77:0]       iccm_rdmux_data;
-         logic              iccm_rd_ecc_single_err_hold_in ;
-         logic [2:0]        dma_mem_tag_ff;
-
-
-
-
-         assign iccm_wren          =  (ifc_dma_access_q_ok & dma_iccm_req &  dma_mem_write) | iccm_correct_ecc;
-         assign iccm_rden          =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write) | (ifc_iccm_access_bf & ifc_fetch_req_bf);
-         assign iccm_dma_rden      =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write)                     ;
-         assign iccm_wr_size[2:0]  =  {3{dma_iccm_req}}    & dma_mem_sz[2:0] ;
-
-         rvecc_encode  iccm_ecc_encode0 (
-                           .din(dma_mem_wdata[31:0]),
-                           .ecc_out(dma_mem_ecc[6:0]));
-
-         rvecc_encode  iccm_ecc_encode1 (
-                           .din(dma_mem_wdata[63:32]),
-                           .ecc_out(dma_mem_ecc[13:7]));
-
-        assign iccm_wr_data[77:0]   =  (iccm_correct_ecc & ~(ifc_dma_access_q_ok & dma_iccm_req)) ?  {iccm_ecc_corr_data_ff[38:0], iccm_ecc_corr_data_ff[38:0]} :
-                                       {dma_mem_ecc[13:7],dma_mem_wdata[63:32], dma_mem_ecc[6:0],dma_mem_wdata[31:0]};
-
-         assign iccm_dma_rdata_1_muxed[31:0] = dma_mem_addr_ff[2] ?  iccm_corrected_data[0][31:0] : iccm_corrected_data[1][31:0] ;
-         assign iccm_dma_rdata_in[63:0]      = iccm_dma_ecc_error_in ? {2{dma_mem_addr[31:0]}} : {iccm_dma_rdata_1_muxed[31:0], iccm_corrected_data[0]};
-         assign iccm_dma_ecc_error_in   =   |(iccm_double_ecc_error[1:0]);
-
-         rvdffe    #(64) dma_data_ff      (.*, .clk(clk), .en(iccm_dma_rvalid_in),  .din(iccm_dma_rdata_in[63:0]), .dout(iccm_dma_rdata[63:0]));
-         rvdffie   #(11) dma_misc_bits    (.*, .clk(free_l2clk), .din({dma_mem_tag[2:0],
-                                                                       dma_mem_tag_ff[2:0],
-                                                                       dma_mem_addr[3:2],
-                                                                       iccm_dma_rden,
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_ecc_error_in }),
-                                                                .dout({dma_mem_tag_ff[2:0],
-                                                                       iccm_dma_rtag[2:0],
-                                                                       dma_mem_addr_ff[3:2],
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_rvalid,
-                                                                       iccm_dma_ecc_error }));
-
-         assign iccm_rw_addr[pt.ICCM_BITS-1:1]    = (  ifc_dma_access_q_ok & dma_iccm_req  & ~iccm_correct_ecc) ? dma_mem_addr[pt.ICCM_BITS-1:1] :
-                                                 (~(ifc_dma_access_q_ok & dma_iccm_req) &  iccm_correct_ecc) ? {iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2],1'b0} : ifc_fetch_addr_bf[pt.ICCM_BITS-1:1] ;
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// ECC checking logic for ICCM data.                                               //
-/////////////////////////////////////////////////////////////////////////////////////
-
-  logic [3:0] ic_fetch_val_int_f;
-  logic [3:0] ic_fetch_val_shift_right;
-  assign ic_fetch_val_int_f[3:0] = {2'b00 , ic_fetch_val_f[1:0] } ;
-  assign ic_fetch_val_shift_right[3:0] = {ic_fetch_val_int_f << ifu_fetch_addr_int_f[1] } ;
-
-   assign iccm_rdmux_data[77:0] = iccm_rd_data_ecc[77:0];
-   for (genvar i=0; i < 2 ; i++) begin : ICCM_ECC_CHECK
-      assign iccm_ecc_word_enable[i] = ((|ic_fetch_val_shift_right[(2*i+1):(2*i)] & ~exu_flush_final & sel_iccm_data) | iccm_dma_rvalid_in) & ~dec_tlu_core_ecc_disable;
-   rvecc_decode  ecc_decode (
-                           .en(iccm_ecc_word_enable[i]),
-                           .sed_ded ( 1'b0 ),    // 1 : means only detection
-                           .din(iccm_rdmux_data[(39*i+31):(39*i)]),
-                           .ecc_in(iccm_rdmux_data[(39*i+38):(39*i+32)]),
-                           .dout(iccm_corrected_data[i][31:0]),
-                           .ecc_out(iccm_corrected_ecc[i][6:0]),
-                           .single_ecc_error(iccm_single_ecc_error[i]),
-                           .double_ecc_error(iccm_double_ecc_error[i]));
-end
-
-  assign iccm_rd_ecc_single_err  = (|iccm_single_ecc_error[1:0] ) & ifc_iccm_access_f & ifc_fetch_req_f;
-  assign iccm_rd_ecc_double_err[1:0]  = ~ifu_fetch_addr_int_f[1] ? ({iccm_double_ecc_error[0], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} :
-                                                                   ({iccm_double_ecc_error[1], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} ;
-
-  assign iccm_corrected_data_f_mux[31:0] = iccm_single_ecc_error[0] ? iccm_corrected_data[0] : iccm_corrected_data[1];
-  assign iccm_corrected_ecc_f_mux[6:0]   = iccm_single_ecc_error[0] ? iccm_corrected_ecc[0]  : iccm_corrected_ecc[1];
-
-  assign iccm_ecc_write_status           = ((iccm_rd_ecc_single_err & ~iccm_rd_ecc_single_err_ff)  & ~exu_flush_final) | iccm_dma_sb_error;
-  assign iccm_rd_ecc_single_err_hold_in  = (iccm_rd_ecc_single_err | iccm_rd_ecc_single_err_ff) & ~exu_flush_final ;
-  assign iccm_error_start                =  iccm_rd_ecc_single_err;
-  assign iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2] = iccm_single_ecc_error[0] ? iccm_rw_addr_f[pt.ICCM_BITS-1:2] : iccm_rw_addr_f[pt.ICCM_BITS-1:2] + 1'b1 ;
-
-   rvdffie #(pt.ICCM_BITS-1) iccm_index_f   (.*, .clk(free_l2clk), .din({iccm_rw_addr[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_hold_in
-                                                                                                       }),
-                                                                  .dout({iccm_rw_addr_f[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_ff}));
-
-   rvdffe #((39+(pt.ICCM_BITS-2)))      ecc_dat0_ff  (
-                                                      .clk(clk),
-                                                      .din({iccm_corrected_ecc_f_mux[6:0],  iccm_corrected_data_f_mux[31:0],iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2]}),
-                                                      .dout({iccm_ecc_corr_data_ff[38:0]   ,iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]}),
-                                                      .en(iccm_ecc_write_status),
-                                                      .*
-                                                      );
-
-     end else begin : iccm_disabled
-         assign iccm_dma_rvalid = 1'b0 ;
-         assign iccm_dma_ecc_error = 1'b0 ;
-         assign iccm_dma_rdata[63:0] = '0 ;
-         assign iccm_single_ecc_error = '0 ;
-         assign iccm_dma_rtag         = '0 ;
-
-
-
-
-
-
-         assign iccm_rd_ecc_single_err                 = 1'b0 ;
-         assign iccm_rd_ecc_double_err                 = '0 ;
-         assign iccm_rd_ecc_single_err_ff              = 1'b0 ;
-         assign iccm_error_start                         = 1'b0;
-         assign iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]  =  '0;
-         assign iccm_ecc_corr_data_ff[38:0]            =  '0;
-         assign iccm_ecc_write_status                  =  '0;
-
-
-
-
-
-
-    end
-
-
-////// ICCM signals
-
-
- assign   ic_rd_en    =  (ifc_fetch_req_bf & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf  &
-                            ~(((miss_state == STREAM) & ~miss_state_en)                                       |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en)                                  |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)                              |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en)                                    |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT))  ))  |
-                             ( ifc_fetch_req_bf & exu_flush_final  & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf )     ;
-
-logic   ic_real_rd_wp_unused;
-assign  ic_real_rd_wp_unused  =  (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & ~ic_act_miss_f &
-                            ~(((miss_state == STREAM) & ~miss_state_en) |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en & ~(miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en) |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)  |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_nxtstate == STREAM) &  miss_state_en)  |
-                              ((miss_state == SCND_MISS) & ~miss_state_en))) |
-                          (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & exu_flush_final)  ;
-
-
-assign ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{write_ic_16_bytes}};
-assign ic_write_stall                =  write_ic_16_bytes &  ~((((miss_state== CRIT_BYP_OK) | ((miss_state==STREAM) & ~(exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ))) & ~(bus_ifu_wr_en_ff & last_beat & ~uncacheable_miss_ff)));
-
-
-
-
-///////////////////////////////////////////////////////////////
-// Icache status and LRU
-///////////////////////////////////////////////////////////////
-logic [pt.ICACHE_NUM_WAYS-1:0] ic_tag_valid_unq;
-if (pt.ICACHE_ENABLE == 1 ) begin: icache_enabled
-   assign  ic_valid  = ~ifu_wr_cumulative_err_data & ~(reset_ic_in | reset_ic_ff) & ~reset_tag_valid_for_miss;
-
-   assign ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                           ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                           ifu_status_wr_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-
-   // status
-
-         assign way_status_wr_en_w_debug = way_status_wr_en | (ic_debug_wr_en  & ic_debug_tag_array);
-
-         assign way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]  = (ic_debug_wr_en  & ic_debug_tag_array) ? (pt.ICACHE_STATUS_BITS == 1) ? ic_debug_wr_data[4] : ic_debug_wr_data[6:4] :
-                                                way_status_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-   rvdffie #(.WIDTH(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+1+pt.ICACHE_STATUS_BITS),.OVERRIDE(1))  status_misc_ff
-     (.*,
-      .clk(free_l2clk),
-      .din({ ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO], way_status_wr_en_w_debug, way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]}),
-      .dout({ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],      way_status_wr_en_ff,      way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]} )
-      );
-
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clken;
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clk;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/8 ; i++) begin : CLK_GRP_WAY_STATUS
-      assign way_status_clken[i] = (ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+3] == i );
-     `ifdef RV_FPGA_OPTIMIZE
-        assign way_status_clk[i] = 1'b0;
-     `else
-           rvclkhdr way_status_cgc ( .en(way_status_clken[i]),   .l1clk(way_status_clk[i]), .* );
-     `endif
-
-
-      for (genvar j=0 ; j<8 ; j++) begin : WAY_STATUS
-         rvdffs_fpga #(pt.ICACHE_STATUS_BITS) ic_way_status (.*,
-                   .clk(way_status_clk[i]),
-                   .clken(way_status_clken[i]),
-                   .rawclk(clk),
-                   .en(((ifu_status_wr_addr_ff[pt.ICACHE_TAG_INDEX_LO+2:pt.ICACHE_TAG_INDEX_LO] == j) & way_status_wr_en_ff)),
-                   .din(way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]),
-                   .dout(way_status_out[8*i+j]));
-      end  // WAY_STATUS
-   end  // CLK_GRP_WAY_STATUS
-
-  always_comb begin : way_status_out_mux
-      way_status[pt.ICACHE_STATUS_BITS-1:0] = '0 ;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : status_mux_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : mux_out
-         way_status[pt.ICACHE_STATUS_BITS-1:0] =  way_status_out[j];
-        end
-      end
-  end
-
-         assign ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                        ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                        ifu_ic_rw_int_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-         assign ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0] = ifu_tag_wren[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] ;
-
-         assign ic_valid_w_debug = (ic_debug_wr_en & ic_debug_tag_array) ? ic_debug_wr_data[0] : ic_valid;
-
-         rvdffie #(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+pt.ICACHE_NUM_WAYS+1) tag_addr_ff (.*,
-                                                                                              .clk(free_l2clk),
-                                                                                              .din({ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                    ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                    ic_valid_w_debug}),
-                                                                                              .dout({ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                     ifu_tag_wren_ff[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                     ic_valid_ff})
-                                                                                              );
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_DEPTH-1:0] ic_tag_valid_out ;
-
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clken ;
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clk   ;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/32 ; i++) begin : CLK_GRP_TAG_VALID
-      for (genvar j=0; j<pt.ICACHE_NUM_WAYS; j++) begin : way_clken
-      if (pt.ICACHE_TAG_DEPTH == 32 ) begin
-        assign tag_valid_clken[i][j] =  ifu_tag_wren_ff[j] | perr_err_inv_way[j] | reset_all_tags;
-      end else begin
-         assign tag_valid_clken[i][j] = (((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  ifu_tag_wren_ff[j] ) |
-                                        ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  perr_err_inv_way[j]) | reset_all_tags);
-      end
-
-     `ifdef RV_FPGA_OPTIMIZE
-        assign tag_valid_clk[i][j]  = 1'b0;
-     `else
-           rvclkhdr way_status_cgc ( .en(tag_valid_clken[i][j]),   .l1clk(tag_valid_clk[i][j]), .* );
-     `endif
-
-
-
-      for (genvar k=0 ; k<32 ; k++) begin : TAG_VALID
-         rvdffs_fpga #(1) ic_way_tagvalid_dup (.*,
-                   .clk(tag_valid_clk[i][j]),
-                   .clken(tag_valid_clken[i][j]),
-                   .rawclk(clk),
-                   .en(((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & ifu_tag_wren_ff[j] ) |
-                       ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & perr_err_inv_way[j]) | reset_all_tags),
-                   .din(ic_valid_ff & ~reset_all_tags & ~perr_sel_invalidate),
-                   .dout(ic_tag_valid_out[j][32*i+k]));
-      end
-      end
-   end
-
-
-  always_comb begin : tag_valid_out_mux
-      ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] = '0;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : tag_valid_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : valid_out
-           for ( int k=0; k<pt.ICACHE_NUM_WAYS; k++) begin
-             ic_tag_valid_unq[k] |= ic_tag_valid_out[k][j];
-        end
-      end
-      end
-  end
-   //   four-way set associative - three bits
-//   each bit represents one branch point in a binary decision tree; let 1
-//   represent that the left side has been referenced more recently than the
-//   right side, and 0 vice-versa
-//
-//              are all 4 ways valid?
-//                   /       \
-//                  |        no, use an invalid way.
-//                  |
-//                  |
-//             bit_0 == 0?             state | replace      ref to | next state
-//               /       \             ------+--------      -------+-----------
-//              y         n             x00  |  way_0      way_0 |    _11
-//             /           \            x10  |  way_1      way_1 |    _01
-//      bit_1 == 0?    bit_2 == 0?      0x1  |  way_2      way_2 |    1_0
-//        /    \          /    \        1x1  |  way_3      way_3 |    0_0
-//       y      n        y      n
-//      /        \      /        \        ('x' means don't care       ('_' means unchanged)
-//    way_0    way_1  way_2     way_3      don't care)
-
-   if (pt.ICACHE_NUM_WAYS == 4) begin: four_way_plru
-   assign replace_way_mb_any[3] = ( way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[3]& tagv_mb_ff[2] &  tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[2] = (~way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[2]& tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[1] = ( way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[1]& tagv_mb_ff[0] ) ;
-   assign replace_way_mb_any[0] = (~way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[0] ) ;
-
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{~exu_flush_final & ic_rd_hit[0]}} & {way_status[2] , 1'b1 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[1]}} & {way_status[2] , 1'b0 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[2]}} & {1'b1 ,way_status[1]  , 1'b0}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[3]}} & {1'b0 ,way_status[1]  , 1'b0}) ;
-
-  assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{replace_way_mb_any[0]}} & {way_status_mb_ff[2] , 1'b1 , 1'b1}) |
-                                   ({3{replace_way_mb_any[1]}} & {way_status_mb_ff[2] , 1'b0 , 1'b1}) |
-                                   ({3{replace_way_mb_any[2]}} & {1'b1 ,way_status_mb_ff[1]  , 1'b0}) |
-                                   ({3{replace_way_mb_any[3]}} & {1'b0 ,way_status_mb_ff[1]  , 1'b0}) ;
-  end
-   else begin : two_ways_plru
-      assign replace_way_mb_any[0]                      = (~way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[0];
-      assign replace_way_mb_any[1]                      = ( way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[1] & tagv_mb_ff[0];
-      assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ic_rd_hit[0];
-      assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = replace_way_mb_any[0];
-
-   end
-  // Make sure to select the way_status_hit_new even when in hit_under_miss.
-  assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = (bus_ifu_wr_en_ff_q  & last_beat )  ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                          way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-
-  assign way_status_wr_en  = (bus_ifu_wr_en_ff_q  & last_beat) | ic_act_hit_f;
-
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin  : bus_wren_loop
-      assign bus_wren[i]           = bus_ifu_wr_en_ff_q & replace_way_mb_any[i] & miss_pending ;
-      assign bus_wren_last[i]      = bus_ifu_wr_en_ff_wo_err & replace_way_mb_any[i] & miss_pending & bus_last_data_beat;
-      assign ifu_tag_wren[i]       = bus_wren_last[i] | wren_reset_miss[i];
-      assign wren_reset_miss[i]    = replace_way_mb_any[i] & reset_tag_valid_for_miss ;
-
-   end
-   assign bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_wren[pt.ICACHE_NUM_WAYS-1:0];
-
-
-end else begin: icache_disabled
-   assign ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]      = '0;
-   assign way_status[pt.ICACHE_STATUS_BITS-1:0]         = '0;
-   assign replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0]    = '0;
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = '0;
-   assign way_status_wr_en                           = '0;
-   assign bus_wren[pt.ICACHE_NUM_WAYS-1:0]              = '0;
-
-end
-
-   assign ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0] = ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{(~fetch_uncacheable_ff & ifc_fetch_req_f_raw) }} ;
-   assign ic_debug_tag_val_rd_out           = |(ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] &  ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{ic_debug_rd_en_ff}}) ;
-///////////////////////////////////////////
-// PMU signals
-///////////////////////////////////////////
-
- assign ifu_pmu_ic_miss_in   = ic_act_miss_f ;
- assign ifu_pmu_ic_hit_in    = ic_act_hit_f  ;
- assign ifu_pmu_bus_error_in = |ifc_bus_acc_fault_f;
- assign ifu_pmu_bus_trxn_in  = bus_cmd_sent ;
- assign ifu_pmu_bus_busy_in  = ifu_bus_arvalid_ff & ~ifu_bus_arready_ff & miss_pending ;
-
-   rvdffie #(9) ifu_pmu_sigs_ff (.*,
-                    .clk (free_l2clk),
-                    .din ({ifc_fetch_uncacheable_bf, ifc_fetch_req_qual_bf, dma_sb_err_state, dec_tlu_fence_i_wb,
-                           ifu_pmu_ic_miss_in,
-                           ifu_pmu_ic_hit_in,
-                           ifu_pmu_bus_error_in,
-                           ifu_pmu_bus_busy_in,
-                           ifu_pmu_bus_trxn_in
-                          }),
-                    .dout({fetch_uncacheable_ff, ifc_fetch_req_f_raw, dma_sb_err_state_ff, reset_all_tags,
-                           ifu_pmu_ic_miss,
-                           ifu_pmu_ic_hit,
-                           ifu_pmu_bus_error,
-                           ifu_pmu_bus_busy,
-                           ifu_pmu_bus_trxn
-                           }));
-
-
-///////////////////////////////////////////////////////
-// Cache debug logic                                 //
-///////////////////////////////////////////////////////
-assign ic_debug_addr[pt.ICACHE_INDEX_HI:3] = dec_tlu_ic_diag_pkt.icache_dicawics[pt.ICACHE_INDEX_HI-3:0] ;
-assign ic_debug_way_enc[01:00]             = dec_tlu_ic_diag_pkt.icache_dicawics[15:14] ;
-
-
-assign ic_debug_tag_array       = dec_tlu_ic_diag_pkt.icache_dicawics[16] ;
-assign ic_debug_rd_en           = dec_tlu_ic_diag_pkt.icache_rd_valid ;
-assign ic_debug_wr_en           = dec_tlu_ic_diag_pkt.icache_wr_valid ;
-
-
-assign ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]        = {(ic_debug_way_enc[1:0] == 2'b11),
-                                                      (ic_debug_way_enc[1:0] == 2'b10),
-                                                      (ic_debug_way_enc[1:0] == 2'b01),
-                                                      (ic_debug_way_enc[1:0] == 2'b00) };
-
-assign ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] = {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-assign ic_debug_ict_array_sel_in      =  ic_debug_rd_en & ic_debug_tag_array ;
-
-rvdff_fpga #(01+pt.ICACHE_NUM_WAYS) ifu_debug_sel_ff (.*, .clk (debug_c1_clk),
-                    .clken(debug_c1_clken), .rawclk(clk),
-                    .din ({ic_debug_ict_array_sel_in,
-                           ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]
-                          }),
-                    .dout({ic_debug_ict_array_sel_ff,
-                           ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]
-                           }));
-
-
-
-
-assign debug_data_clken  =  ic_debug_rd_en_ff;
-
-
-
-
-// memory protection  - equation to look identical to the LSU equation
-   assign ifc_region_acc_okay = (~(|{pt.INST_ACCESS_ENABLE0,pt.INST_ACCESS_ENABLE1,pt.INST_ACCESS_ENABLE2,pt.INST_ACCESS_ENABLE3,pt.INST_ACCESS_ENABLE4,pt.INST_ACCESS_ENABLE5,pt.INST_ACCESS_ENABLE6,pt.INST_ACCESS_ENABLE7})) |
-                               (pt.INST_ACCESS_ENABLE0 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK0)) == (pt.INST_ACCESS_ADDR0 | pt.INST_ACCESS_MASK0)) |
-                               (pt.INST_ACCESS_ENABLE1 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK1)) == (pt.INST_ACCESS_ADDR1 | pt.INST_ACCESS_MASK1)) |
-                               (pt.INST_ACCESS_ENABLE2 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK2)) == (pt.INST_ACCESS_ADDR2 | pt.INST_ACCESS_MASK2)) |
-                               (pt.INST_ACCESS_ENABLE3 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK3)) == (pt.INST_ACCESS_ADDR3 | pt.INST_ACCESS_MASK3)) |
-                               (pt.INST_ACCESS_ENABLE4 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK4)) == (pt.INST_ACCESS_ADDR4 | pt.INST_ACCESS_MASK4)) |
-                               (pt.INST_ACCESS_ENABLE5 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK5)) == (pt.INST_ACCESS_ADDR5 | pt.INST_ACCESS_MASK5)) |
-                               (pt.INST_ACCESS_ENABLE6 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK6)) == (pt.INST_ACCESS_ADDR6 | pt.INST_ACCESS_MASK6)) |
-                               (pt.INST_ACCESS_ENABLE7 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK7)) == (pt.INST_ACCESS_ADDR7 | pt.INST_ACCESS_MASK7));
-
-   assign ifc_region_acc_fault_memory_bf   =  ~ifc_iccm_access_bf & ~ifc_region_acc_okay & ifc_fetch_req_bf;
-
-   assign ifc_region_acc_fault_final_bf = ifc_region_acc_fault_bf | ifc_region_acc_fault_memory_bf;
-
-
-
-
-endmodule  // eb1_ifu_mem_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lib.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lib.sv
deleted file mode 100644
index 3aee6f3..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lib.sv
+++ /dev/null
@@ -1,64 +0,0 @@
-module eb1_btb_tag_hash #(
-`include "eb1_param.vh"
- ) (
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-endmodule
-
-module eb1_btb_tag_hash_fold  #(
-`include "eb1_param.vh"
- )(
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-
-endmodule
-
-module eb1_btb_addr_hash  #(
-`include "eb1_param.vh"
- )(
-                        input logic [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO] pc,
-                        output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hash
-                        );
-
-
-if(pt.BTB_FOLD2_INDEX_HASH) begin : fold2
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-   else begin
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX2_HI:pt.BTB_INDEX2_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-
-endmodule
-
-module eb1_btb_ghr_hash  #(
-`include "eb1_param.vh"
- )(
-                       input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hashin,
-                       input logic [pt.BHT_GHR_SIZE-1:0] ghr,
-                       output logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] hash
-                       );
-
-   // The hash function is too complex to write in verilog for all cases.
-   // The config script generates the logic string based on the bp config.
-   if(pt.BHT_GHR_HASH_1) begin : ghrhash_cfg1
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { ghr[pt.BHT_GHR_SIZE-1:pt.BTB_INDEX1_HI-1], hashin[pt.BTB_INDEX1_HI:2]^ghr[pt.BTB_INDEX1_HI-2:0]};
-   end
-   else begin : ghrhash_cfg2
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { hashin[pt.BHT_GHR_SIZE+1:2]^ghr[pt.BHT_GHR_SIZE-1:0]};
-   end
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu.sv
deleted file mode 100644
index 31d1148..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu.sv
+++ /dev/null
@@ -1,425 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-
-module eb1_lsu
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-
-   input logic                             clk_override,             // Override non-functional clock gating
-   input logic                             dec_tlu_flush_lower_r,    // I0/I1 writeback flush. This is used to flush the old packets only
-   input logic                             dec_tlu_i0_kill_writeb_r, // I0 is flushed, don't writeback any results to arch state
-   input logic                             dec_tlu_force_halt,       // This will be high till TLU goes to debug halt
-
-   // chicken signals
-   input logic                             dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                             dec_tlu_wb_coalescing_disable,     // disable the write buffer coalesce
-   input logic                             dec_tlu_sideeffect_posted_disable, // disable the posted sideeffect load store to the bus
-   input logic                             dec_tlu_core_ecc_disable,          // disable the generation of the ecc
-
-   input logic [31:0]                      exu_lsu_rs1_d,        // address rs operand
-   input logic [31:0]                      exu_lsu_rs2_d,        // store data
-   input logic [11:0]                      dec_lsu_offset_d,     // address offset operand
-
-   input                                   eb1_lsu_pkt_t lsu_p,  // lsu control packet
-   input logic                             dec_lsu_valid_raw_d,   // Raw valid for address computation
-   input logic [31:0]                      dec_tlu_mrac_ff,       // CSR for memory region control
-
-   output logic [31:0]                     lsu_result_m,          // lsu load data
-   output logic [31:0]                     lsu_result_corr_r,     // This is the ECC corrected data going to RF
-   output logic                            lsu_load_stall_any,    // This is for blocking loads in the decode
-   output logic                            lsu_store_stall_any,   // This is for blocking stores in the decode
-   output logic                            lsu_fastint_stall_any, // Stall the fastint in decode-1 stage
-   output logic                            lsu_idle_any,          // lsu buffers are empty and no instruction in the pipeline. Doesn't include DMA
-   output logic                            lsu_active,            // Used to turn off top level clk
-
-   output logic [31:1]                     lsu_fir_addr,        // fast interrupt address
-   output logic [1:0]                      lsu_fir_error,       // Error during fast interrupt lookup
-
-   output logic                            lsu_single_ecc_error_incr,     // Increment the ecc counter
-   output eb1_lsu_error_pkt_t             lsu_error_pkt_r,               // lsu exception packet
-   output logic                            lsu_imprecise_error_load_any,  // bus load imprecise error
-   output logic                            lsu_imprecise_error_store_any, // bus store imprecise error
-   output logic [31:0]                     lsu_imprecise_error_addr_any,  // bus store imprecise error address
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,      // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,        // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,        // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,    // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,   // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,   // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,     // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,         // Data of the non block load
-
-   output logic                            lsu_pmu_load_external_m,        // PMU : Bus loads
-   output logic                            lsu_pmu_store_external_m,       // PMU : Bus loads
-   output logic                            lsu_pmu_misaligned_m,           // PMU : misaligned
-   output logic                            lsu_pmu_bus_trxn,               // PMU : bus transaction
-   output logic                            lsu_pmu_bus_misaligned,         // PMU : misaligned access going to the bus
-   output logic                            lsu_pmu_bus_error,              // PMU : bus sending error back
-   output logic                            lsu_pmu_bus_busy,               // PMU : bus is not ready
-
-   // Trigger signals
-   input                                   eb1_trigger_pkt_t [3:0] trigger_pkt_any, // Trigger info from the decode
-   output logic [3:0]                      lsu_trigger_match_m,                      // lsu trigger hit (one bit per trigger)
-
-   // DCCM ports
-   output logic                            dccm_wren,       // DCCM write enable
-   output logic                            dccm_rden,       // DCCM read enable
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo, // DCCM write address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi, // DCCM write address hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo, // DCCM read address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi, // DCCM read address hi bank (hi and low same if aligned read)
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo, // DCCM write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi, // DCCM write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo, // DCCM read data low bank
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi, // DCCM read data hi bank
-
-   // PIC ports
-   output logic                            picm_wren,    // PIC memory write enable
-   output logic                            picm_rden,    // PIC memory read enable
-   output logic                            picm_mken,    // Need to read the mask for stores to determine which bits to write/forward
-   output logic [31:0]                     picm_rdaddr,  // address for pic read access
-   output logic [31:0]                     picm_wraddr,  // address for pic write access
-   output logic [31:0]                     picm_wr_data, // PIC memory write data
-   input logic [31:0]                      picm_rd_data, // PIC memory read/mask data
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   input logic                             lsu_bus_clk_en,    // external drives a clock_en to control bus ratio
-
-   // DMA slave
-   input logic                             dma_dccm_req,       // DMA read/write to dccm
-   input logic [2:0]                       dma_mem_tag,        // DMA request tag
-   input logic [31:0]                      dma_mem_addr,       // DMA address
-   input logic [2:0]                       dma_mem_sz,         // DMA access size
-   input logic                             dma_mem_write,      // DMA access is a write
-   input logic [63:0]                      dma_mem_wdata,      // DMA write data
-
-   output logic                            dccm_dma_rvalid,     // lsu data valid for DMA dccm read
-   output logic                            dccm_dma_ecc_error,  // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,       // DMA request tag
-   output logic [63:0]                     dccm_dma_rdata,      // lsu data for DMA dccm read
-   output logic                            dccm_ready,          // lsu ready for DMA access
-
-   input logic                             scan_mode,           // scan mode
-   input logic                             clk,                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                             active_clk,          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                             rst_l                // reset, active low
-
-   );
-
-
-   logic        lsu_dccm_rden_m;
-   logic        lsu_dccm_rden_r;
-   logic [31:0] store_data_m;
-   logic [31:0] store_data_r;
-   logic [31:0] store_data_hi_r, store_data_lo_r;
-   logic [31:0] store_datafn_hi_r, store_datafn_lo_r;
-   logic [31:0] sec_data_lo_m, sec_data_hi_m;
-   logic [31:0] sec_data_lo_r, sec_data_hi_r;
-
-   logic [31:0] lsu_ld_data_m;
-   logic [31:0] dccm_rdata_hi_m, dccm_rdata_lo_m;
-   logic [6:0]  dccm_data_ecc_hi_m, dccm_data_ecc_lo_m;
-   logic        lsu_single_ecc_error_m;
-   logic        lsu_double_ecc_error_m;
-
-   logic [31:0] lsu_ld_data_r;
-   logic [31:0] lsu_ld_data_corr_r;
-   logic [31:0] dccm_rdata_hi_r, dccm_rdata_lo_r;
-   logic [6:0]  dccm_data_ecc_hi_r, dccm_data_ecc_lo_r;
-   logic        single_ecc_error_hi_r, single_ecc_error_lo_r;
-   logic        lsu_single_ecc_error_r;
-   logic        lsu_double_ecc_error_r;
-   logic        ld_single_ecc_error_r, ld_single_ecc_error_r_ff;
-
-   logic [31:0] picm_mask_data_m;
-
-   logic [31:0] lsu_addr_d, lsu_addr_m, lsu_addr_r;
-   logic [31:0] end_addr_d, end_addr_m, end_addr_r;
-
-   eb1_lsu_pkt_t    lsu_pkt_d, lsu_pkt_m, lsu_pkt_r;
-   logic        lsu_i0_valid_d, lsu_i0_valid_m, lsu_i0_valid_r;
-
-   // Store Buffer signals
-   logic        store_stbuf_reqvld_r;
-   logic        ldst_stbuf_reqvld_r;
-
-   logic        lsu_commit_r;
-   logic        lsu_exc_m;
-
-   logic        addr_in_dccm_d, addr_in_dccm_m, addr_in_dccm_r;
-   logic        addr_in_pic_d, addr_in_pic_m, addr_in_pic_r;
-   logic        ldst_dual_d, ldst_dual_m, ldst_dual_r;
-   logic        addr_external_m;
-
-   logic                          stbuf_reqvld_any;
-   logic                          stbuf_reqvld_flushed_any;
-   logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff, sec_data_hi_r_ff;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff, sec_data_ecc_lo_r_ff;
-
-   logic                          lsu_cmpen_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m;
-
-   logic        lsu_stbuf_commit_any;
-   logic        lsu_stbuf_empty_any;   // This is for blocking loads
-   logic        lsu_stbuf_full_any;
-
-    // Bus signals
-   logic        lsu_busreq_r;
-   logic        lsu_bus_buffer_pend_any;
-   logic        lsu_bus_buffer_empty_any;
-   logic        lsu_bus_buffer_full_any;
-   logic        lsu_busreq_m;
-   logic [31:0] bus_read_data_m;
-
-   logic        flush_m_up, flush_r;
-   logic        is_sideeffects_m;
-   logic [2:0]  dma_mem_tag_d, dma_mem_tag_m;
-   logic        ldst_nodma_mtor;
-   logic        dma_dccm_wen, dma_pic_wen;
-   logic [31:0] dma_dccm_wdata_lo, dma_dccm_wdata_hi;
-   logic [pt.DCCM_ECC_WIDTH-1:0] dma_dccm_wdata_ecc_lo, dma_dccm_wdata_ecc_hi;
-
-   // Clocks
-   logic        lsu_busm_clken;
-   logic        lsu_bus_obuf_c1_clken;
-   logic        lsu_c1_m_clk, lsu_c1_r_clk;
-   logic        lsu_c2_m_clk, lsu_c2_r_clk;
-   logic        lsu_store_c1_m_clk, lsu_store_c1_r_clk;
-
-   logic        lsu_stbuf_c1_clk;
-   logic        lsu_bus_ibuf_c1_clk, lsu_bus_obuf_c1_clk, lsu_bus_buf_c1_clk;
-   logic        lsu_busm_clk;
-   logic        lsu_free_c2_clk;
-
-   logic        lsu_raw_fwd_lo_m, lsu_raw_fwd_hi_m;
-   logic        lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r;
-
-   assign       lsu_raw_fwd_lo_m = (|stbuf_fwdbyteen_lo_m[pt.DCCM_BYTE_WIDTH-1:0]);
-   assign       lsu_raw_fwd_hi_m = (|stbuf_fwdbyteen_hi_m[pt.DCCM_BYTE_WIDTH-1:0]);
-
-   eb1_lsu_lsc_ctl #(.pt(pt)) lsu_lsc_ctl (.*);
-
-   // block stores in decode  - for either bus or stbuf reasons
-   assign lsu_store_stall_any = lsu_stbuf_full_any | lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_load_stall_any = lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_fastint_stall_any = ld_single_ecc_error_r;    // Stall the fastint in decode-1 stage
-
-   // Ready to accept dma trxns
-   // There can't be any inpipe forwarding from non-dma packet to dma packet since they can be flushed so we can't have st in r when dma is in m
-   assign dma_mem_tag_d[2:0]   = dma_mem_tag[2:0];
-   assign ldst_nodma_mtor = (lsu_pkt_m.valid & ~lsu_pkt_m.dma & (addr_in_dccm_m | addr_in_pic_m) & lsu_pkt_m.store);
-
-   assign dccm_ready = ~(dec_lsu_valid_raw_d | ldst_nodma_mtor | ld_single_ecc_error_r_ff);
-
-   assign dma_dccm_wen = dma_dccm_req & dma_mem_write & addr_in_dccm_d & dma_mem_sz[1];   // Perform DMA writes only for word/dword
-   assign dma_pic_wen  = dma_dccm_req & dma_mem_write & addr_in_pic_d;
-   assign {dma_dccm_wdata_hi[31:0], dma_dccm_wdata_lo[31:0]} = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-
-
-   // Generate per cycle flush signals
-   assign flush_m_up = dec_tlu_flush_lower_r;
-   assign flush_r    = dec_tlu_i0_kill_writeb_r;
-
-   // lsu idle
-   // lsu halt idle. This is used for entering the halt mode. Also, DMA accesses are allowed during fence.
-   // Indicates non-idle if there is a instruction valid in d-r or read/write buffers are non-empty since they can come with error
-   // Store buffer now have only non-dma dccm stores
-   // stbuf_empty not needed since it has only dccm stores
-   assign lsu_idle_any = ~((lsu_pkt_m.valid & ~lsu_pkt_m.dma) |
-                           (lsu_pkt_r.valid & ~lsu_pkt_r.dma)) &
-                           lsu_bus_buffer_empty_any;
-
-   assign lsu_active = (lsu_pkt_m.valid | lsu_pkt_r.valid | ld_single_ecc_error_r_ff) | ~lsu_bus_buffer_empty_any;  // This includes DMA. Used for gating top clock
-
-   // Instantiate the store buffer
-   assign store_stbuf_reqvld_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~flush_r & (~lsu_pkt_r.dma | ((lsu_pkt_r.by | lsu_pkt_r.half) & ~lsu_double_ecc_error_r));
-
-   // Disable Forwarding for now
-   assign lsu_cmpen_m = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & (addr_in_dccm_m | addr_in_pic_m);
-
-   // Bus signals
-   assign lsu_busreq_m = lsu_pkt_m.valid & ((lsu_pkt_m.load | lsu_pkt_m.store) & addr_external_m) & ~flush_m_up & ~lsu_exc_m & ~lsu_pkt_m.fast_int;
-
-   // Dual signals
-   assign ldst_dual_d  = (lsu_addr_d[2] != end_addr_d[2]);
-   assign ldst_dual_m  = (lsu_addr_m[2] != end_addr_m[2]);
-   assign ldst_dual_r  = (lsu_addr_r[2] != end_addr_r[2]);
-
-   // PMU signals
-   assign lsu_pmu_misaligned_m     = lsu_pkt_m.valid & ((lsu_pkt_m.half & lsu_addr_m[0]) | (lsu_pkt_m.word & (|lsu_addr_m[1:0])));
-   assign lsu_pmu_load_external_m  = lsu_pkt_m.valid & lsu_pkt_m.load & addr_external_m;
-   assign lsu_pmu_store_external_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_external_m;
-
-   eb1_lsu_dccm_ctl #(.pt(pt)) dccm_ctl (
-      .lsu_addr_d(lsu_addr_d[31:0]),
-      .end_addr_d(end_addr_d[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .lsu_addr_r(lsu_addr_r[31:0]),
-
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_stbuf #(.pt(pt)) stbuf (
-      .lsu_addr_d(lsu_addr_d[pt.LSU_SB_BITS-1:0]),
-      .end_addr_d(end_addr_d[pt.LSU_SB_BITS-1:0]),
-
-      .*
-
-   );
-
-   eb1_lsu_ecc #(.pt(pt)) ecc (
-      .lsu_addr_r(lsu_addr_r[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_trigger #(.pt(pt)) trigger (
-      .store_data_m(store_data_m[31:0]),
-      .*
-   );
-
-   // Clk domain
-   eb1_lsu_clkdomain #(.pt(pt)) clkdomain (.*);
-
-   // Bus interface
-   eb1_lsu_bus_intf #(.pt(pt)) bus_intf (
-      .lsu_addr_m(lsu_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .lsu_addr_r(lsu_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .end_addr_m(end_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .end_addr_r(end_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .store_data_r(store_data_r[31:0] & {32{lsu_busreq_r}}),
-      .*
-   );
-
-   //Flops
-   rvdff #(3) dma_mem_tag_mff     (.*, .din(dma_mem_tag_d[2:0]), .dout(dma_mem_tag_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(2) lsu_raw_fwd_r_ff    (.*, .din({lsu_raw_fwd_hi_m, lsu_raw_fwd_lo_m}),     .dout({lsu_raw_fwd_hi_r, lsu_raw_fwd_lo_r}),     .clk(lsu_c2_r_clk));
-
-`ifdef RV_ASSERT_ON
-   logic [1:0] store_data_bypass_sel;
-   assign store_data_bypass_sel[1:0] =  {lsu_p.store_data_bypass_d, lsu_p.store_data_bypass_m};
-
-   property exception_no_lsu_flush;
-      @(posedge clk)  disable iff(~rst_l) lsu_lsc_ctl.lsu_error_pkt_m.exc_valid |-> ##[1:2] (flush_r );
-   endproperty
-   assert_exception_no_lsu_flush: assert property (exception_no_lsu_flush) else
-      $display("No flush within 2 cycles of exception");
-
-   // offset should be zero for fast interrupt
-   property offset_0_fastint;
-      @(posedge clk) disable iff(~rst_l) (lsu_p.valid & lsu_p.fast_int) |-> (dec_lsu_offset_d[11:0] == 12'b0);
-   endproperty
-   assert_offset_0_fastint: assert property (offset_0_fastint) else
-      $display("dec_tlu_offset_d not zero for fast interrupt redirect");
-
-   // DMA req should assert dccm rden/wren
-   property dmareq_dccm_wren_or_rden;
-      @(posedge clk) disable iff(~rst_l) dma_dccm_req |-> (dccm_rden | dccm_wren | addr_in_pic_d);
-   endproperty
-   assert_dmareq_dccm_wren_or_rden: assert property(dmareq_dccm_wren_or_rden) else
-      $display("dccm rden or wren not asserted during DMA request");
-
-   // fastint_stall should cause load/store stall next cycle
-   property fastint_stall_imply_loadstore_stall;
-      @(posedge clk) disable iff(~rst_l) (lsu_fastint_stall_any & (lsu_commit_r | lsu_pkt_r.dma)) |-> ##1 ((lsu_load_stall_any | lsu_store_stall_any) | ~ld_single_ecc_error_r_ff);
-   endproperty
-   assert_fastint_stall_imply_loadstore_stall: assert property (fastint_stall_imply_loadstore_stall) else
-      $display("fastint_stall should be followed by lsu_load/store_stall_any");
-
-   // Single ECC error implies rfnpc flush
-   property single_ecc_error_rfnpc_flush;
-      @(posedge clk) disable iff(~rst_l) (lsu_error_pkt_r.single_ecc_error & lsu_pkt_r.load) |=> ~lsu_commit_r;
-   endproperty
-   assert_single_ecc_error_rfnpc_flush: assert property (single_ecc_error_rfnpc_flush) else
-     $display("LSU commit next cycle after single ecc error");
-
-`endif
-
-endmodule // eb1_lsu
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_addrcheck.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_addrcheck.sv
deleted file mode 100644
index 010779b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_addrcheck.sv
+++ /dev/null
@@ -1,191 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Checks the memory map for the address
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_addrcheck
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic          lsu_c2_m_clk,              // clock
-   input logic          rst_l,                     // reset
-
-   input logic [31:0]   start_addr_d,              // start address for lsu
-   input logic [31:0]   end_addr_d,                // end address for lsu
-   input eb1_lsu_pkt_t lsu_pkt_d,                 // packet in d
-   input logic [31:0]   dec_tlu_mrac_ff,           // CSR read
-   input logic [3:0]    rs1_region_d,              // address rs operand [31:28]
-
-   input logic [31:0]   rs1_d,                     // address rs operand
-
-   output logic         is_sideeffects_m,          // is sideffects space
-   output logic         addr_in_dccm_d,            // address in dccm
-   output logic         addr_in_pic_d,             // address in pic
-   output logic         addr_external_d,           // address in external
-
-   output logic         access_fault_d,            // access fault
-   output logic         misaligned_fault_d,        // misaligned
-   output logic [3:0]   exc_mscause_d,             // mscause for access/misaligned faults
-
-   output logic         fir_dccm_access_error_d,   // Fast interrupt dccm access error
-   output logic         fir_nondccm_access_error_d,// Fast interrupt dccm access error
-
-   input  logic         scan_mode                  // Scan mode
-);
-
-
-   logic        non_dccm_access_ok;
-   logic        is_sideeffects_d, is_aligned_d;
-   logic        start_addr_in_dccm_d, end_addr_in_dccm_d;
-   logic        start_addr_in_dccm_region_d, end_addr_in_dccm_region_d;
-   logic        start_addr_in_pic_d, end_addr_in_pic_d;
-   logic        start_addr_in_pic_region_d, end_addr_in_pic_region_d;
-   logic [4:0]  csr_idx;
-   logic        addr_in_iccm;
-   logic        start_addr_dccm_or_pic;
-   logic        base_reg_dccm_or_pic;
-   logic        unmapped_access_fault_d, mpu_access_fault_d, picm_access_fault_d, regpred_access_fault_d;
-   logic        regcross_misaligned_fault_d, sideeffect_misaligned_fault_d;
-   logic [3:0]  access_fault_mscause_d;
-   logic [3:0]  misaligned_fault_mscause_d;
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Start address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) start_addr_dccm_rangecheck (
-         .addr(start_addr_d[31:0]),
-         .in_range(start_addr_in_dccm_d),
-         .in_region(start_addr_in_dccm_region_d)
-      );
-
-      // End address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) end_addr_dccm_rangecheck (
-         .addr(end_addr_d[31:0]),
-         .in_range(end_addr_in_dccm_d),
-         .in_region(end_addr_in_dccm_region_d)
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign start_addr_in_dccm_d = '0;
-      assign start_addr_in_dccm_region_d = '0;
-      assign end_addr_in_dccm_d = '0;
-      assign end_addr_in_dccm_region_d = '0;
-   end
-
-   if (pt.ICCM_ENABLE == 1) begin : check_iccm
-      assign addr_in_iccm =  (start_addr_d[31:28] == pt.ICCM_REGION);
-   end else begin
-     assign addr_in_iccm = 1'b0;
-   end
-
-   // PIC memory check
-   // Start address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) start_addr_pic_rangecheck (
-      .addr(start_addr_d[31:0]),
-      .in_range(start_addr_in_pic_d),
-      .in_region(start_addr_in_pic_region_d)
-   );
-
-   // End address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) end_addr_pic_rangecheck (
-      .addr(end_addr_d[31:0]),
-      .in_range(end_addr_in_pic_d),
-      .in_region(end_addr_in_pic_region_d)
-   );
-
-   assign start_addr_dccm_or_pic  = start_addr_in_dccm_region_d | start_addr_in_pic_region_d;
-   assign base_reg_dccm_or_pic    = ((rs1_region_d[3:0] == pt.DCCM_REGION) & pt.DCCM_ENABLE) | (rs1_region_d[3:0] == pt.PIC_REGION);
-   assign addr_in_dccm_d          = (start_addr_in_dccm_d & end_addr_in_dccm_d);
-   assign addr_in_pic_d           = (start_addr_in_pic_d & end_addr_in_pic_d);
-
-   assign addr_external_d   = ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d);
-   assign csr_idx[4:0]       = {start_addr_d[31:28], 1'b1};
-   assign is_sideeffects_d = dec_tlu_mrac_ff[csr_idx] & ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d | addr_in_iccm) & lsu_pkt_d.valid & (lsu_pkt_d.store | lsu_pkt_d.load);  //every region has the 2 LSB indicating ( 1: sideeffects/no_side effects, and 0: cacheable ). Ignored in internal regions
-   assign is_aligned_d    = (lsu_pkt_d.word & (start_addr_d[1:0] == 2'b0)) |
-                              (lsu_pkt_d.half & (start_addr_d[0] == 1'b0)) |
-                              lsu_pkt_d.by;
-
-   assign non_dccm_access_ok = (~(|{pt.DATA_ACCESS_ENABLE0,pt.DATA_ACCESS_ENABLE1,pt.DATA_ACCESS_ENABLE2,pt.DATA_ACCESS_ENABLE3,pt.DATA_ACCESS_ENABLE4,pt.DATA_ACCESS_ENABLE5,pt.DATA_ACCESS_ENABLE6,pt.DATA_ACCESS_ENABLE7})) |
-                               (((pt.DATA_ACCESS_ENABLE0 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7)))   &
-                                ((pt.DATA_ACCESS_ENABLE0 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7))));
-
-   // Access fault logic
-   // 0. Unmapped local memory : Addr in dccm region but not in dccm offset OR Addr in picm region but not in picm offset OR DCCM -> PIC cross when DCCM/PIC in same region
-   // 1. Uncorrectable (double bit) ECC error
-   // 3. Address is not in a populated non-dccm region
-   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   // 6. Ld/St access to picm are not word aligned or word size
-   assign regpred_access_fault_d  = (start_addr_dccm_or_pic ^ base_reg_dccm_or_pic);                   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   assign picm_access_fault_d     = (addr_in_pic_d & ((start_addr_d[1:0] != 2'b0) | ~lsu_pkt_d.word));                                               // 6. Ld/St access to picm are not word aligned or word size
-
-   if (pt.DCCM_ENABLE & (pt.DCCM_REGION == pt.PIC_REGION)) begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~(start_addr_in_dccm_d | start_addr_in_pic_d)) |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (end_addr_in_dccm_region_d & ~(end_addr_in_dccm_d | end_addr_in_pic_d))       |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (start_addr_in_dccm_d & end_addr_in_pic_d)                                    |   // 0. DCCM -> PIC cross when DCCM/PIC in same region
-                                        (start_addr_in_pic_d  & end_addr_in_dccm_d));                                     // 0. DCCM -> PIC cross when DCCM/PIC in same region
-      assign mpu_access_fault_d      = (~start_addr_in_dccm_region_d & ~non_dccm_access_ok);                              // 3. Address is not in a populated non-dccm region
-   end else begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d)                              |   // 0. Addr in dccm region but not in dccm offset
-                                        (end_addr_in_dccm_region_d & ~end_addr_in_dccm_d)                                  |   // 0. Addr in dccm region but not in dccm offset
-                                        (start_addr_in_pic_region_d & ~start_addr_in_pic_d)                                |   // 0. Addr in picm region but not in picm offset
-                                        (end_addr_in_pic_region_d & ~end_addr_in_pic_d));                                      // 0. Addr in picm region but not in picm offset
-      assign mpu_access_fault_d      = (~start_addr_in_pic_region_d & ~start_addr_in_dccm_region_d & ~non_dccm_access_ok);     // 3. Address is not in a populated non-dccm region
-   end
-
-   assign access_fault_d = (unmapped_access_fault_d | mpu_access_fault_d | picm_access_fault_d | regpred_access_fault_d) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign access_fault_mscause_d[3:0] = unmapped_access_fault_d ? 4'h2 : mpu_access_fault_d ? 4'h3 : regpred_access_fault_d ? 4'h5 : picm_access_fault_d ? 4'h6 : 4'h0;
-
-   // Misaligned happens due to 2 reasons
-   // 0. Region cross
-   // 1. sideeffects access which are not aligned
-   assign regcross_misaligned_fault_d = (start_addr_d[31:28] != end_addr_d[31:28]);
-   assign sideeffect_misaligned_fault_d = (is_sideeffects_d & ~is_aligned_d);
-   assign misaligned_fault_d = (regcross_misaligned_fault_d | (sideeffect_misaligned_fault_d & addr_external_d)) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign misaligned_fault_mscause_d[3:0] = regcross_misaligned_fault_d ? 4'h2 : sideeffect_misaligned_fault_d ? 4'h1 : 4'h0;
-
-   assign exc_mscause_d[3:0] = misaligned_fault_d ? misaligned_fault_mscause_d[3:0] : access_fault_mscause_d[3:0];
-
-   // Fast interrupt error logic
-   assign fir_dccm_access_error_d    = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d) |
-                                        (end_addr_in_dccm_region_d   & ~end_addr_in_dccm_d)) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-   assign fir_nondccm_access_error_d = ~(start_addr_in_dccm_region_d & end_addr_in_dccm_region_d) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-
-   rvdff #(.WIDTH(1))   is_sideeffects_mff (.din(is_sideeffects_d), .dout(is_sideeffects_m), .clk(lsu_c2_m_clk), .*);
-
-endmodule // eb1_lsu_addrcheck
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_bus_buffer.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_bus_buffer.sv
deleted file mode 100644
index 1293f6e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_bus_buffer.sv
+++ /dev/null
@@ -1,936 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-
-module eb1_lsu_bus_buffer
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // Don't block the sideeffect load store to the bus
-   input logic                          dec_tlu_force_halt,
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,
-   input logic                          lsu_busm_clken,
-   input logic                          lsu_c2_r_clk,
-   input logic                          lsu_bus_ibuf_c1_clk,
-   input logic                          lsu_bus_obuf_c1_clk,
-   input logic                          lsu_bus_buf_c1_clk,
-   input logic                          lsu_free_c2_clk,
-   input logic                          lsu_busm_clk,
-
-
-   input logic                          dec_lsu_valid_raw_d,            // Raw valid for address computation
-   input eb1_lsu_pkt_t                 lsu_pkt_m,                      // lsu packet flowing down the pipe
-   input eb1_lsu_pkt_t                 lsu_pkt_r,                      // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   store_data_r,                   // store data flowing down the pipe
-
-   input logic                          no_word_merge_r,                // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          no_dword_merge_r,               // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          lsu_busreq_m,                   // bus request is in m
-   output logic                         lsu_busreq_r,                   // bus request is in r
-   input logic                          ld_full_hit_m,                  // load can get all its byte from a write buffer entry
-   input logic                          flush_m_up,                     // flush
-   input logic                          flush_r,                        // flush
-   input logic                          lsu_commit_r,                   // lsu instruction in r commits
-   input logic                          is_sideeffects_r,               // lsu attribute is side_effects
-   input logic                          ldst_dual_d,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_m,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_r,                    // load/store is unaligned at 32 bit boundary
-
-   input logic [7:0]                    ldst_byteen_ext_m,              // HI and LO signals
-
-   output logic                         lsu_bus_buffer_pend_any,          // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,          // bus buffer is full
-   output logic                         lsu_bus_buffer_empty_any,         // bus buffer is empty
-
-   output logic [3:0]                   ld_byte_hit_buf_lo, ld_byte_hit_buf_hi,    // Byte enables for forwarding data
-   output logic [31:0]                  ld_fwddata_buf_lo, ld_fwddata_buf_hi,      // load forwarding data
-
-   output logic                         lsu_imprecise_error_load_any,     // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,    // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,     // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,     // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,       // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,       // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,   // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,  // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,  // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,    // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,        // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-
-   input logic                             lsu_bus_clk_en,
-   input logic                             lsu_bus_clk_en_q
-
-);
-
-   // For Ld: IDLE -> WAIT -> CMD -> RESP -> DONE_PARTIAL(?) -> DONE_WAIT(?) -> DONE -> IDLE
-   // For St: IDLE -> WAIT -> CMD -> RESP(?) -> IDLE
-   typedef enum logic [2:0] {IDLE=3'b000, WAIT=3'b001, CMD=3'b010, RESP=3'b011, DONE_PARTIAL=3'b100, DONE_WAIT=3'b101, DONE=3'b110} state_t;
-
-   localparam DEPTH     = pt.LSU_NUM_NBLOAD;
-   localparam DEPTH_LOG2 = pt.LSU_NUM_NBLOAD_WIDTH;
-   localparam TIMER     = 8;   // This can be only power of 2
-   localparam TIMER_MAX = TIMER - 1;  // Maximum value of timer
-   localparam TIMER_LOG2 = (TIMER < 2) ? 1 : $clog2(TIMER);
-
-   logic [3:0]                          ldst_byteen_hi_m, ldst_byteen_lo_m;
-   logic [DEPTH-1:0]                    ld_addr_hitvec_lo, ld_addr_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvec_lo, ld_byte_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvecfn_lo, ld_byte_hitvecfn_hi;
-
-   logic                                ld_addr_ibuf_hit_lo, ld_addr_ibuf_hit_hi;
-   logic [3:0]                          ld_byte_ibuf_hit_lo, ld_byte_ibuf_hit_hi;
-
-   logic [3:0]                          ldst_byteen_r;
-   logic [3:0]                          ldst_byteen_hi_r, ldst_byteen_lo_r;
-   logic [31:0]                         store_data_hi_r, store_data_lo_r;
-   logic                                is_aligned_r;                   // Aligned load/store
-   logic                                ldst_samedw_r;
-
-   logic                                lsu_nonblock_load_valid_r;
-   logic [31:0]                         lsu_nonblock_load_data_hi, lsu_nonblock_load_data_lo, lsu_nonblock_data_unalgn;
-   logic [1:0]                          lsu_nonblock_addr_offset;
-   logic [1:0]                          lsu_nonblock_sz;
-   logic                                lsu_nonblock_unsign;
-   logic                                lsu_nonblock_load_data_ready;
-
-   logic [DEPTH-1:0]                    CmdPtr0Dec, CmdPtr1Dec;
-   logic [DEPTH-1:0]                    RspPtrDec;
-   logic [DEPTH_LOG2-1:0]               CmdPtr0, CmdPtr1;
-   logic [DEPTH_LOG2-1:0]               RspPtr;
-   logic [DEPTH_LOG2-1:0]               WrPtr0_m, WrPtr0_r;
-   logic [DEPTH_LOG2-1:0]               WrPtr1_m, WrPtr1_r;
-   logic                                found_wrptr0, found_wrptr1, found_cmdptr0, found_cmdptr1;
-   logic [3:0]                          buf_numvld_any, buf_numvld_wrcmd_any, buf_numvld_cmd_any, buf_numvld_pend_any;
-   logic                                any_done_wait_state;
-   logic                                bus_sideeffect_pend;
-   logic                                bus_coalescing_disable;
-
-   logic                                bus_addr_match_pending;
-   logic                                bus_cmd_sent, bus_cmd_ready;
-   logic                                bus_wcmd_sent, bus_wdata_sent;
-   logic                                bus_rsp_read, bus_rsp_write;
-   logic [pt.LSU_BUS_TAG-1:0]           bus_rsp_read_tag, bus_rsp_write_tag;
-   logic                                bus_rsp_read_error, bus_rsp_write_error;
-   logic [63:0]                         bus_rsp_rdata;
-
-   // Bus buffer signals
-   state_t [DEPTH-1:0]                  buf_state;
-   logic   [DEPTH-1:0][1:0]             buf_sz;
-   logic   [DEPTH-1:0][31:0]            buf_addr;
-   logic   [DEPTH-1:0][3:0]             buf_byteen;
-   logic   [DEPTH-1:0]                  buf_sideeffect;
-   logic   [DEPTH-1:0]                  buf_write;
-   logic   [DEPTH-1:0]                  buf_unsign;
-   logic   [DEPTH-1:0]                  buf_dual;
-   logic   [DEPTH-1:0]                  buf_samedw;
-   logic   [DEPTH-1:0]                  buf_nomerge;
-   logic   [DEPTH-1:0]                  buf_dualhi;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag;
-   logic   [DEPTH-1:0]                  buf_ldfwd;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag;
-   logic   [DEPTH-1:0]                  buf_error;
-   logic   [DEPTH-1:0][31:0]            buf_data;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age, buf_age_younger;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage, buf_rsp_pickage;
-
-   state_t [DEPTH-1:0]                  buf_nxtstate;
-   logic   [DEPTH-1:0]                  buf_rst;
-   logic   [DEPTH-1:0]                  buf_state_en;
-   logic   [DEPTH-1:0]                  buf_cmd_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_resp_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_dual_in;
-   logic   [DEPTH-1:0]                  buf_samedw_in;
-   logic   [DEPTH-1:0]                  buf_nomerge_in;
-   logic   [DEPTH-1:0]                  buf_sideeffect_in;
-   logic   [DEPTH-1:0]                  buf_unsign_in;
-   logic   [DEPTH-1:0][1:0]             buf_sz_in;
-   logic   [DEPTH-1:0]                  buf_write_in;
-   logic   [DEPTH-1:0]                  buf_wr_en;
-   logic   [DEPTH-1:0]                  buf_dualhi_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag_in;
-   logic   [DEPTH-1:0]                  buf_ldfwd_en;
-   logic   [DEPTH-1:0]                  buf_ldfwd_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag_in;
-   logic   [DEPTH-1:0][3:0]             buf_byteen_in;
-   logic   [DEPTH-1:0][31:0]            buf_addr_in;
-   logic   [DEPTH-1:0][31:0]            buf_data_in;
-   logic   [DEPTH-1:0]                  buf_error_en;
-   logic   [DEPTH-1:0]                  buf_data_en;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_ageQ;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_set;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspageQ;
-
-   // Input buffer signals
-   logic                               ibuf_valid;
-   logic                               ibuf_dual;
-   logic                               ibuf_samedw;
-   logic                               ibuf_nomerge;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag;
-   logic                               ibuf_sideeffect;
-   logic                               ibuf_unsign;
-   logic                               ibuf_write;
-   logic [1:0]                         ibuf_sz;
-   logic [3:0]                         ibuf_byteen;
-   logic [31:0]                        ibuf_addr;
-   logic [31:0]                        ibuf_data;
-   logic [TIMER_LOG2-1:0]              ibuf_timer;
-
-   logic                               ibuf_byp;
-   logic                               ibuf_wr_en;
-   logic                               ibuf_rst;
-   logic                               ibuf_force_drain;
-   logic                               ibuf_drain_vld;
-   logic [DEPTH-1:0]                   ibuf_drainvec_vld;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag_in;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag_in;
-   logic [1:0]                         ibuf_sz_in;
-   logic [31:0]                        ibuf_addr_in;
-   logic [3:0]                         ibuf_byteen_in;
-   logic [31:0]                        ibuf_data_in;
-   logic [TIMER_LOG2-1:0]              ibuf_timer_in;
-   logic [3:0]                         ibuf_byteen_out;
-   logic [31:0]                        ibuf_data_out;
-   logic                               ibuf_merge_en, ibuf_merge_in;
-
-   // Output buffer signals
-   logic                               obuf_valid;
-   logic                               obuf_write;
-   logic                               obuf_nosend;
-   logic                               obuf_rdrsp_pend;
-   logic                               obuf_sideeffect;
-   logic [31:0]                        obuf_addr;
-   logic [63:0]                        obuf_data;
-   logic [1:0]                         obuf_sz;
-   logic [7:0]                         obuf_byteen;
-   logic                               obuf_merge;
-   logic                               obuf_cmd_done, obuf_data_done;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag;
-
-   logic                               ibuf_buf_byp;
-   logic                               obuf_force_wr_en;
-   logic                               obuf_wr_wait;
-   logic                               obuf_wr_en, obuf_wr_enQ;
-   logic                               obuf_rst;
-   logic                               obuf_write_in;
-   logic                               obuf_nosend_in;
-   logic                               obuf_rdrsp_pend_en;
-   logic                               obuf_rdrsp_pend_in;
-   logic                               obuf_sideeffect_in;
-   logic                               obuf_aligned_in;
-   logic [31:0]                        obuf_addr_in;
-   logic [63:0]                        obuf_data_in;
-   logic [1:0]                         obuf_sz_in;
-   logic [7:0]                         obuf_byteen_in;
-   logic                               obuf_merge_in;
-   logic                               obuf_cmd_done_in, obuf_data_done_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag_in;
-
-   logic                               obuf_merge_en;
-   logic [TIMER_LOG2-1:0]              obuf_wr_timer, obuf_wr_timer_in;
-   logic [7:0]                         obuf_byteen0_in, obuf_byteen1_in;
-   logic [63:0]                        obuf_data0_in, obuf_data1_in;
-
-   logic                               lsu_axi_awvalid_q, lsu_axi_awready_q;
-   logic                               lsu_axi_wvalid_q, lsu_axi_wready_q;
-   logic                               lsu_axi_arvalid_q, lsu_axi_arready_q;
-   logic                               lsu_axi_bvalid_q, lsu_axi_bready_q;
-   logic                               lsu_axi_rvalid_q, lsu_axi_rready_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_axi_bid_q, lsu_axi_rid_q;
-   logic [1:0]                         lsu_axi_bresp_q, lsu_axi_rresp_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_imprecise_error_store_tag;
-   logic [63:0]                        lsu_axi_rdata_q;
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic start
-   //------------------------------------------------------------------------------
-
-   // Function to do 8 to 3 bit encoding
-   function automatic logic [2:0] f_Enc8to3;
-      input logic [7:0] Dec_value;
-
-      logic [2:0]       Enc_value;
-      Enc_value[0] = Dec_value[1] | Dec_value[3] | Dec_value[5] | Dec_value[7];
-      Enc_value[1] = Dec_value[2] | Dec_value[3] | Dec_value[6] | Dec_value[7];
-      Enc_value[2] = Dec_value[4] | Dec_value[5] | Dec_value[6] | Dec_value[7];
-
-      return Enc_value[2:0];
-   endfunction // f_Enc8to3
-
-   // Buffer hit logic for bus load forwarding
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   for (genvar i=0; i<DEPTH; i++) begin
-      assign ld_addr_hitvec_lo[i] = (lsu_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-      assign ld_addr_hitvec_hi[i] = (end_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-   end
-
-   for (genvar j=0; j<4; j++) begin
-     assign ld_byte_hit_buf_lo[j] = |(ld_byte_hitvecfn_lo[j]) | ld_byte_ibuf_hit_lo[j];
-     assign ld_byte_hit_buf_hi[j] = |(ld_byte_hitvecfn_hi[j]) | ld_byte_ibuf_hit_hi[j];
-     for (genvar i=0; i<DEPTH; i++) begin
-         assign ld_byte_hitvec_lo[j][i] = ld_addr_hitvec_lo[i] & buf_byteen[i][j] & ldst_byteen_lo_m[j];
-         assign ld_byte_hitvec_hi[j][i] = ld_addr_hitvec_hi[i] & buf_byteen[i][j] & ldst_byteen_hi_m[j];
-
-         assign ld_byte_hitvecfn_lo[j][i] = ld_byte_hitvec_lo[j][i] & ~(|(ld_byte_hitvec_lo[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_lo[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-         assign ld_byte_hitvecfn_hi[j][i] = ld_byte_hitvec_hi[j][i] & ~(|(ld_byte_hitvec_hi[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_hi[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-      end
-   end
-
-   // Hit in the ibuf
-   assign ld_addr_ibuf_hit_lo = (lsu_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-   assign ld_addr_ibuf_hit_hi = (end_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin
-      assign ld_byte_ibuf_hit_lo[i] = ld_addr_ibuf_hit_lo & ibuf_byteen[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_ibuf_hit_hi[i] = ld_addr_ibuf_hit_hi & ibuf_byteen[i] & ldst_byteen_hi_m[i];
-   end
-
-   always_comb begin
-      ld_fwddata_buf_lo[31:0] = {{8{ld_byte_ibuf_hit_lo[3]}},{8{ld_byte_ibuf_hit_lo[2]}},{8{ld_byte_ibuf_hit_lo[1]}},{8{ld_byte_ibuf_hit_lo[0]}}} & ibuf_data[31:0];
-      ld_fwddata_buf_hi[31:0] = {{8{ld_byte_ibuf_hit_hi[3]}},{8{ld_byte_ibuf_hit_hi[2]}},{8{ld_byte_ibuf_hit_hi[1]}},{8{ld_byte_ibuf_hit_hi[0]}}} & ibuf_data[31:0];
-      for (int i=0; i<DEPTH; i++) begin
-         ld_fwddata_buf_lo[7:0]   |= {8{ld_byte_hitvecfn_lo[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_lo[15:8]  |= {8{ld_byte_hitvecfn_lo[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_lo[23:16] |= {8{ld_byte_hitvecfn_lo[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_lo[31:24] |= {8{ld_byte_hitvecfn_lo[3][i]}} & buf_data[i][31:24];
-
-         ld_fwddata_buf_hi[7:0]   |= {8{ld_byte_hitvecfn_hi[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_hi[15:8]  |= {8{ld_byte_hitvecfn_hi[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_hi[23:16] |= {8{ld_byte_hitvecfn_hi[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_hi[31:24] |= {8{ld_byte_hitvecfn_hi[3][i]}} & buf_data[i][31:24];
-      end
-   end
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic end
-   //------------------------------------------------------------------------------
-
-   assign bus_coalescing_disable = dec_tlu_wb_coalescing_disable | pt.BUILD_AHB_LITE;
-
-   // Get the hi/lo byte enable
-   assign ldst_byteen_r[3:0] = ({4{lsu_pkt_r.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_r.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_r.word}} & 4'b1111);
-
-   assign {ldst_byteen_hi_r[3:0], ldst_byteen_lo_r[3:0]} = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-   assign {store_data_hi_r[31:0], store_data_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-   assign ldst_samedw_r    = (lsu_addr_r[3] == end_addr_r[3]);
-   assign is_aligned_r    = (lsu_pkt_r.word & (lsu_addr_r[1:0] == 2'b0)) |
-                            (lsu_pkt_r.half & (lsu_addr_r[0] == 1'b0))   |
-                            lsu_pkt_r.by;
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign ibuf_byp = lsu_busreq_r & (lsu_pkt_r.load | no_word_merge_r) & ~ibuf_valid;
-   assign ibuf_wr_en = lsu_busreq_r & lsu_commit_r & ~ibuf_byp;
-   assign ibuf_rst   = (ibuf_drain_vld & ~ibuf_wr_en) | dec_tlu_force_halt;
-   assign ibuf_force_drain = lsu_busreq_m & ~lsu_busreq_r & ibuf_valid & (lsu_pkt_m.load | (ibuf_addr[31:2] != lsu_addr_m[31:2]));  // Move the ibuf to buf if there is a non-colaescable ld/st in m but nothing in r
-   assign ibuf_drain_vld = ibuf_valid & (((ibuf_wr_en | (ibuf_timer == TIMER_MAX)) & ~(ibuf_merge_en & ibuf_merge_in)) | ibuf_byp | ibuf_force_drain | ibuf_sideeffect | ~ibuf_write | bus_coalescing_disable);
-   assign ibuf_tag_in[DEPTH_LOG2-1:0] = (ibuf_merge_en & ibuf_merge_in) ? ibuf_tag[DEPTH_LOG2-1:0] : (ldst_dual_r ? WrPtr1_r : WrPtr0_r);
-   assign ibuf_dualtag_in[DEPTH_LOG2-1:0] = WrPtr0_r;
-   assign ibuf_sz_in[1:0]   = {lsu_pkt_r.word, lsu_pkt_r.half};
-   assign ibuf_addr_in[31:0] = ldst_dual_r ? end_addr_r[31:0] : lsu_addr_r[31:0];
-   assign ibuf_byteen_in[3:0] = (ibuf_merge_en & ibuf_merge_in) ? (ibuf_byteen[3:0] | ldst_byteen_lo_r[3:0]) : (ldst_dual_r ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_data_in[(8*i)+7:(8*i)] = (ibuf_merge_en & ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                             (ldst_dual_r ? store_data_hi_r[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)]);
-   end
-   assign ibuf_timer_in = ibuf_wr_en ? '0 : (ibuf_timer < TIMER_MAX) ? (ibuf_timer + 1'b1) : ibuf_timer;
-
-
-   assign ibuf_merge_en = lsu_busreq_r & lsu_commit_r & lsu_pkt_r.store & ibuf_valid & ibuf_write & (lsu_addr_r[31:2] == ibuf_addr[31:2]) & ~is_sideeffects_r & ~bus_coalescing_disable;
-   assign ibuf_merge_in = ~ldst_dual_r;   // If it's a unaligned store, merge needs to happen on the way out of ibuf
-
-   // ibuf signals going to bus buffer after merging
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_byteen_out[i] = (ibuf_merge_en & ~ibuf_merge_in) ? (ibuf_byteen[i] | ldst_byteen_lo_r[i]) : ibuf_byteen[i];
-      assign ibuf_data_out[(8*i)+7:(8*i)] = (ibuf_merge_en & ~ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                                                        ibuf_data[(8*i)+7:(8*i)];
-   end
-
-   rvdffsc #(.WIDTH(1))              ibuf_valid_ff     (.din(1'b1),                      .dout(ibuf_valid),      .en(ibuf_wr_en), .clear(ibuf_rst), .clk(lsu_free_c2_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_tagff        (.din(ibuf_tag_in),               .dout(ibuf_tag),        .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_dualtagff    (.din(ibuf_dualtag_in),           .dout(ibuf_dualtag),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_dualff       (.din(ldst_dual_r),               .dout(ibuf_dual),       .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_samedwff     (.din(ldst_samedw_r),             .dout(ibuf_samedw),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_nomergeff    (.din(no_dword_merge_r),          .dout(ibuf_nomerge),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_sideeffectff (.din(is_sideeffects_r),          .dout(ibuf_sideeffect), .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_unsignff     (.din(lsu_pkt_r.unsign),          .dout(ibuf_unsign),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_writeff      (.din(lsu_pkt_r.store),           .dout(ibuf_write),      .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(2))              ibuf_szff         (.din(ibuf_sz_in[1:0]),           .dout(ibuf_sz),         .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_addrff       (.din(ibuf_addr_in[31:0]),        .dout(ibuf_addr),       .en(ibuf_wr_en),                                              .*);
-   rvdffs  #(.WIDTH(4))              ibuf_byteenff     (.din(ibuf_byteen_in[3:0]),       .dout(ibuf_byteen),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_dataff       (.din(ibuf_data_in[31:0]),        .dout(ibuf_data),       .en(ibuf_wr_en),                                              .*);
-   rvdff   #(.WIDTH(TIMER_LOG2))     ibuf_timerff      (.din(ibuf_timer_in),             .dout(ibuf_timer),                                         .clk(lsu_free_c2_clk),     .*);
-
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic ends here
-   //------------------------------------------------------------------------------
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign obuf_wr_wait = (buf_numvld_wrcmd_any[3:0] == 4'b1) & (buf_numvld_cmd_any[3:0] == 4'b1) & (obuf_wr_timer != TIMER_MAX) &
-                         ~bus_coalescing_disable & ~buf_nomerge[CmdPtr0] & ~buf_sideeffect[CmdPtr0] & ~obuf_force_wr_en;
-   assign obuf_wr_timer_in = obuf_wr_en ? 3'b0: (((buf_numvld_cmd_any > 4'b0) & (obuf_wr_timer < TIMER_MAX)) ? (obuf_wr_timer + 1'b1) : obuf_wr_timer);
-   assign obuf_force_wr_en = lsu_busreq_m & ~lsu_busreq_r & ~ibuf_valid & (buf_numvld_cmd_any[3:0] == 4'b1) & (lsu_addr_m[31:2] != buf_addr[CmdPtr0][31:2]);   // Entry in m can't merge with entry going to obuf and there is no entry in between
-   assign ibuf_buf_byp = ibuf_byp & (buf_numvld_pend_any[3:0] == 4'b0) & (~lsu_pkt_r.store | no_dword_merge_r);
-
-   assign obuf_wr_en = ((ibuf_buf_byp & lsu_commit_r & ~(is_sideeffects_r & bus_sideeffect_pend)) |
-                        ((buf_state[CmdPtr0] == CMD) & found_cmdptr0 & ~buf_cmd_state_bus_en[CmdPtr0] & ~(buf_sideeffect[CmdPtr0] & bus_sideeffect_pend) &
-                         (~(buf_dual[CmdPtr0] & buf_samedw[CmdPtr0] & ~buf_write[CmdPtr0]) | found_cmdptr1 | buf_nomerge[CmdPtr0] | obuf_force_wr_en))) &
-                       (bus_cmd_ready | ~obuf_valid | obuf_nosend) & ~obuf_wr_wait  & ~bus_addr_match_pending & lsu_bus_clk_en;
-
-   assign obuf_rst   = ((bus_cmd_sent | (obuf_valid & obuf_nosend)) & ~obuf_wr_en & lsu_bus_clk_en) | dec_tlu_force_halt;
-
-   assign obuf_write_in      = ibuf_buf_byp ? lsu_pkt_r.store : buf_write[CmdPtr0];
-   assign obuf_sideeffect_in = ibuf_buf_byp ? is_sideeffects_r : buf_sideeffect[CmdPtr0];
-   assign obuf_addr_in[31:0] = ibuf_buf_byp ? lsu_addr_r[31:0] : buf_addr[CmdPtr0];
-   assign obuf_sz_in[1:0]    = ibuf_buf_byp ? {lsu_pkt_r.word, lsu_pkt_r.half} : buf_sz[CmdPtr0];
-   assign obuf_merge_in      = obuf_merge_en;
-   assign obuf_tag0_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr0_r) : (pt.LSU_BUS_TAG)'(CmdPtr0);
-   assign obuf_tag1_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr1_r) : (pt.LSU_BUS_TAG)'(CmdPtr1);
-
-   assign obuf_cmd_done_in    = ~(obuf_wr_en | obuf_rst) & (obuf_cmd_done | bus_wcmd_sent);
-   assign obuf_data_done_in   = ~(obuf_wr_en | obuf_rst) & (obuf_data_done | bus_wdata_sent);
-
-   assign obuf_aligned_in    = ibuf_buf_byp ? is_aligned_r : ((obuf_sz_in[1:0] == 2'b0) |
-                                                              (obuf_sz_in[0] & ~obuf_addr_in[0]) |
-                                                              (obuf_sz_in[1] & ~(|obuf_addr_in[1:0])));
-
-   assign obuf_rdrsp_pend_in  = ((~(obuf_wr_en & ~obuf_nosend_in) & obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))) | (bus_cmd_sent & ~obuf_write)) & ~dec_tlu_force_halt;
-   assign obuf_rdrsp_pend_en  = lsu_bus_clk_en | dec_tlu_force_halt;
-   assign obuf_rdrsp_tag_in[pt.LSU_BUS_TAG-1:0] = (bus_cmd_sent & ~obuf_write) ? obuf_tag0[pt.LSU_BUS_TAG-1:0] : obuf_rdrsp_tag[pt.LSU_BUS_TAG-1:0];
-   // No ld to ld fwd for aligned
-   assign obuf_nosend_in      = (obuf_addr_in[31:3] == obuf_addr[31:3]) & obuf_aligned_in & ~obuf_sideeffect & ~obuf_write & ~obuf_write_in & ~dec_tlu_external_ldfwd_disable &
-                                ((obuf_valid & ~obuf_nosend) | (obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))));
-
-   assign obuf_byteen0_in[7:0] = ibuf_buf_byp ? (lsu_addr_r[2] ? {ldst_byteen_lo_r[3:0],4'b0} : {4'b0,ldst_byteen_lo_r[3:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_byteen[CmdPtr0],4'b0} : {4'b0,buf_byteen[CmdPtr0]});
-   assign obuf_byteen1_in[7:0] = ibuf_buf_byp ? (end_addr_r[2] ? {ldst_byteen_hi_r[3:0],4'b0} : {4'b0,ldst_byteen_hi_r[3:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_byteen[CmdPtr1],4'b0} : {4'b0,buf_byteen[CmdPtr1]});
-   assign obuf_data0_in[63:0]  = ibuf_buf_byp ? (lsu_addr_r[2] ? {store_data_lo_r[31:0],32'b0} : {32'b0,store_data_lo_r[31:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_data[CmdPtr0],32'b0} : {32'b0,buf_data[CmdPtr0]});
-   assign obuf_data1_in[63:0]  = ibuf_buf_byp ? (end_addr_r[2] ? {store_data_hi_r[31:0],32'b0} :{32'b0,store_data_hi_r[31:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_data[CmdPtr1],32'b0} : {32'b0,buf_data[CmdPtr1]});
-
-   for (genvar i=0 ;i<8; i++) begin
-      assign obuf_byteen_in[i] = obuf_byteen0_in[i] | (obuf_merge_en & obuf_byteen1_in[i]);
-      assign obuf_data_in[(8*i)+7:(8*i)] = (obuf_merge_en & obuf_byteen1_in[i]) ? obuf_data1_in[(8*i)+7:(8*i)] : obuf_data0_in[(8*i)+7:(8*i)];
-   end
-
-   // No store obuf merging for AXI since all stores are sent non-posted. Can't track the second id right now
-   assign obuf_merge_en = ((CmdPtr0 != CmdPtr1) & found_cmdptr0 & found_cmdptr1 & (buf_state[CmdPtr0] == CMD) & (buf_state[CmdPtr1] == CMD) &
-                           ~buf_cmd_state_bus_en[CmdPtr0] & ~buf_sideeffect[CmdPtr0] &
-                           (~buf_write[CmdPtr0] & buf_dual[CmdPtr0] & ~buf_dualhi[CmdPtr0] & buf_samedw[CmdPtr0])) |  // CmdPtr0/CmdPtr1 are for same load which is within a DW
-                          (ibuf_buf_byp & ldst_samedw_r & ldst_dual_r);
-
-
-   rvdff_fpga  #(.WIDTH(1))              obuf_wren_ff      (.din(obuf_wr_en),                  .dout(obuf_wr_enQ),                                        .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-   rvdffsc     #(.WIDTH(1))              obuf_valid_ff     (.din(1'b1),                        .dout(obuf_valid),      .en(obuf_wr_en), .clear(obuf_rst), .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_nosend_ff    (.din(obuf_nosend_in),              .dout(obuf_nosend),     .en(obuf_wr_en),                   .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_rdrsp_pend_ff(.din(obuf_rdrsp_pend_in),          .dout(obuf_rdrsp_pend), .en(obuf_rdrsp_pend_en),           .clk(lsu_free_c2_clk),                                                  .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_cmd_done_ff  (.din(obuf_cmd_done_in),            .dout(obuf_cmd_done),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_data_done_ff (.din(obuf_data_done_in),           .dout(obuf_data_done),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) obuf_rdrsp_tagff  (.din(obuf_rdrsp_tag_in),           .dout(obuf_rdrsp_tag),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag0ff       (.din(obuf_tag0_in),                .dout(obuf_tag0),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag1ff       (.din(obuf_tag1_in),                .dout(obuf_tag1),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_mergeff      (.din(obuf_merge_in),               .dout(obuf_merge),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_writeff      (.din(obuf_write_in),               .dout(obuf_write),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_sideeffectff (.din(obuf_sideeffect_in),          .dout(obuf_sideeffect), .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))              obuf_szff         (.din(obuf_sz_in[1:0]),             .dout(obuf_sz),         .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))              obuf_byteenff     (.din(obuf_byteen_in[7:0]),         .dout(obuf_byteen),     .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffe     #(.WIDTH(32))              obuf_addrff       (.din(obuf_addr_in[31:0]),          .dout(obuf_addr),       .en(obuf_wr_en),                                                                                           .*);
-   rvdffe     #(.WIDTH(64))              obuf_dataff       (.din(obuf_data_in[63:0]),          .dout(obuf_data),       .en(obuf_wr_en),                                                                                           .*);
-   rvdff_fpga #(.WIDTH(TIMER_LOG2))      obuf_timerff      (.din(obuf_wr_timer_in),            .dout(obuf_wr_timer),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic ends here
-   //------------------------------------------------------------------------------
-
-   // Find the entry to allocate and entry to send
-   always_comb begin
-      WrPtr0_m[DEPTH_LOG2-1:0] = '0;
-      WrPtr1_m[DEPTH_LOG2-1:0] = '0;
-      found_wrptr0  = '0;
-      found_wrptr1  = '0;
-
-      // Find first write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr0) begin
-            WrPtr0_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr0 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-
-      // Find second write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr1) begin
-            WrPtr1_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr1 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_m & (WrPtr0_m == i))                                         |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-   end
-
-   // Get the command ptr
-   for (genvar i=0; i<DEPTH; i++) begin
-      // These should be one-hot
-      assign CmdPtr0Dec[i] = ~(|buf_age[i]) & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign CmdPtr1Dec[i] = ~(|(buf_age[i] & ~CmdPtr0Dec)) & ~CmdPtr0Dec[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign RspPtrDec[i]  = ~(|buf_rsp_pickage[i]) & (buf_state[i] == DONE_WAIT);
-   end
-
-   assign found_cmdptr0 = |CmdPtr0Dec;
-   assign found_cmdptr1 = |CmdPtr1Dec;
-   assign CmdPtr0 = f_Enc8to3(8'(CmdPtr0Dec[DEPTH-1:0]));
-   assign CmdPtr1 = f_Enc8to3(8'(CmdPtr1Dec[DEPTH-1:0]));
-   assign RspPtr  = f_Enc8to3(8'(RspPtrDec[DEPTH-1:0]));
-
-   // Age vector
-   for (genvar i=0; i<DEPTH; i++) begin: GenAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_age_in[i][j] = (((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                    (((buf_state[j] == WAIT) | ((buf_state[j] == CMD) & ~buf_cmd_state_bus_en[j]))                   |       // Set age bit for older entries
-                                     (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (i == WrPtr0_r) & (j == ibuf_tag))  |       // Set case for dual lo
-                                     (ibuf_byp & lsu_busreq_r & ldst_dual_r & (i == WrPtr1_r) & (j == WrPtr0_r))))                      |     // ibuf bypass case
-                                   buf_age[i][j];
-
-
-         assign buf_age[i][j]    = buf_ageQ[i][j] & ~((buf_state[j] == CMD) & buf_cmd_state_bus_en[j]) & ~dec_tlu_force_halt;  // Reset case
-
-         assign buf_age_younger[i][j] = (i == j) ? 1'b0: (~buf_age[i][j] & (buf_state[j] != IDLE));   // Younger entries
-      end
-   end
-
-   // Age vector for responses
-   for (genvar i=0; i<DEPTH; i++) begin: GenRspAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_rspage_set[i][j] = ((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                           (~((buf_state[j] == IDLE) | (buf_state[j] == DONE))                                         |       // Set age bit for older entries
-                                            (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (DEPTH_LOG2'(i) == WrPtr0_r) & (DEPTH_LOG2'(j) == ibuf_tag))  |       // Set case for dual lo
-                                            (ibuf_byp & lsu_busreq_r & ldst_dual_r & (DEPTH_LOG2'(i) == WrPtr1_r) & (DEPTH_LOG2'(j) == WrPtr0_r)));
-         assign buf_rspage_in[i][j] = buf_rspage_set[i][j] | buf_rspage[i][j];
-         assign buf_rspage[i][j]    = buf_rspageQ[i][j] & ~((buf_state[j] == DONE) | (buf_state[j] == IDLE)) & ~dec_tlu_force_halt;  // Reset case
-         assign buf_rsp_pickage[i][j] = buf_rspageQ[i][j] & (buf_state[j] == DONE_WAIT);
-     end
-   end
-
-   //------------------------------------------------------------------------------
-   // Buffer logic
-   //------------------------------------------------------------------------------
-   for (genvar i=0; i<DEPTH; i++) begin
-
-      assign ibuf_drainvec_vld[i] = (ibuf_drain_vld & (i == ibuf_tag));
-      assign buf_byteen_in[i]     = ibuf_drainvec_vld[i] ? ibuf_byteen_out[3:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-      assign buf_addr_in[i]       = ibuf_drainvec_vld[i] ? ibuf_addr[31:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? end_addr_r[31:0] : lsu_addr_r[31:0]);
-      assign buf_dual_in[i]       = ibuf_drainvec_vld[i] ? ibuf_dual : ldst_dual_r;
-      assign buf_samedw_in[i]     = ibuf_drainvec_vld[i] ? ibuf_samedw : ldst_samedw_r;
-      assign buf_nomerge_in[i]    = ibuf_drainvec_vld[i] ? (ibuf_nomerge | ibuf_force_drain) : no_dword_merge_r;
-      assign buf_dualhi_in[i]     = ibuf_drainvec_vld[i] ? ibuf_dual : (ibuf_byp & ldst_dual_r & (i == WrPtr1_r));   // If it's dual, ibuf will always have the high
-      assign buf_dualtag_in[i]    = ibuf_drainvec_vld[i] ? ibuf_dualtag : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? WrPtr0_r : WrPtr1_r);
-      assign buf_sideeffect_in[i] = ibuf_drainvec_vld[i] ? ibuf_sideeffect : is_sideeffects_r;
-      assign buf_unsign_in[i]     = ibuf_drainvec_vld[i] ? ibuf_unsign : lsu_pkt_r.unsign;
-      assign buf_sz_in[i]         = ibuf_drainvec_vld[i] ? ibuf_sz : {lsu_pkt_r.word, lsu_pkt_r.half};
-      assign buf_write_in[i]      = ibuf_drainvec_vld[i] ? ibuf_write : lsu_pkt_r.store;
-
-      // Buffer entry state machine
-      always_comb begin
-         buf_nxtstate[i]          = IDLE;
-         buf_state_en[i]          = '0;
-         buf_resp_state_bus_en[i] = '0;
-         buf_state_bus_en[i]      = '0;
-         buf_wr_en[i]             = '0;
-         buf_data_in[i]           = '0;
-         buf_data_en[i]           = '0;
-         buf_error_en[i]          = '0;
-         buf_rst[i]               = dec_tlu_force_halt;
-         buf_ldfwd_en[i]          = dec_tlu_force_halt;
-         buf_ldfwd_in[i]          = '0;
-         buf_ldfwdtag_in[i]       = '0;
-
-         case (buf_state[i])
-            IDLE: begin
-                     buf_nxtstate[i] = lsu_bus_clk_en ? CMD : WAIT;
-                     buf_state_en[i] = (lsu_busreq_r & lsu_commit_r & (((ibuf_byp | ldst_dual_r) & ~ibuf_merge_en & (i == WrPtr0_r)) | (ibuf_byp & ldst_dual_r & (i == WrPtr1_r)))) |
-                                       (ibuf_drain_vld & (i == ibuf_tag));
-                     buf_wr_en[i]    = buf_state_en[i];
-                     buf_data_en[i]  = buf_state_en[i];
-                     buf_data_in[i]   = (ibuf_drain_vld & (i == ibuf_tag)) ? ibuf_data_out[31:0] : store_data_lo_r[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            WAIT: begin
-                     buf_nxtstate[i] = dec_tlu_force_halt ? IDLE : CMD;
-                     buf_state_en[i] = lsu_bus_clk_en | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            CMD: begin
-                     buf_nxtstate[i]          = dec_tlu_force_halt ? IDLE : (obuf_nosend & bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag)) ? DONE_WAIT : RESP;
-                     buf_cmd_state_bus_en[i]  = ((obuf_tag0 == i) | (obuf_merge & (obuf_tag1 == i))) & obuf_valid & obuf_wr_enQ;  // Just use the recently written obuf_valid
-                     buf_state_bus_en[i]      = buf_cmd_state_bus_en[i];
-                     buf_state_en[i]          = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_ldfwd_in[i]          = 1'b1;
-                     buf_ldfwd_en[i]          = buf_state_en[i] & ~buf_write[i] & obuf_nosend & ~dec_tlu_force_halt;
-                     buf_ldfwdtag_in[i]       = DEPTH_LOG2'(obuf_rdrsp_tag[pt.LSU_BUS_TAG-2:0]);
-                     buf_data_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read;
-                     buf_error_en[i]          = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read_error;
-                     buf_data_in[i]           = buf_error_en[i] ? bus_rsp_rdata[31:0] : (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]);
-            end
-            RESP: begin
-                     buf_nxtstate[i]           = (dec_tlu_force_halt | (buf_write[i] & ~bus_rsp_write_error)) ? IDLE :    // Side-effect writes will be non-posted
-                                                      (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & (buf_state[buf_dualtag[i]] != DONE_PARTIAL)) ? DONE_PARTIAL : // Goto DONE_PARTIAL if this is the first return of dual
-                                                           (buf_ldfwd[i] | any_done_wait_state |
-                                                            (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & buf_ldfwd[buf_dualtag[i]] &
-                                                             (buf_state[buf_dualtag[i]] == DONE_PARTIAL) & any_done_wait_state)) ? DONE_WAIT : DONE;
-                     buf_resp_state_bus_en[i]  = (bus_rsp_write & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))) |
-                                                 (bus_rsp_read  & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(i)) |
-                                                                   (buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                   (buf_dual[i] & buf_dualhi[i] & ~buf_write[i] & buf_samedw[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])))));
-                     buf_state_bus_en[i]       = buf_resp_state_bus_en[i];
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_data_en[i]            = buf_state_bus_en[i] & bus_rsp_read & lsu_bus_clk_en;
-                      // Need to capture the error for stores as well for AXI
-                     buf_error_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & ((bus_rsp_read_error  & (bus_rsp_read_tag  == (pt.LSU_BUS_TAG)'(i))) |
-                                                                                         (bus_rsp_read_error  & buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                                         (bus_rsp_write_error & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))));
-                     buf_data_in[i][31:0]      = (buf_state_en[i] & ~buf_error_en[i]) ? (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]) : bus_rsp_rdata[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_PARTIAL: begin   // Other part of dual load hasn't returned
-                     buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : (buf_ldfwd[i] | buf_ldfwd[buf_dualtag[i]] | any_done_wait_state) ? DONE_WAIT : DONE;
-                     buf_state_bus_en[i]       = bus_rsp_read & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])) |
-                                                                 (buf_ldfwd[buf_dualtag[i]] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[buf_dualtag[i]]))));
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_WAIT: begin  // WAIT state if there are multiple outstanding nb returns
-                      buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : DONE;
-                      buf_state_en[i]           = ((RspPtr == DEPTH_LOG2'(i)) | (buf_dual[i] & (buf_dualtag[i] == RspPtr))) | dec_tlu_force_halt;
-                      buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE: begin
-                     buf_nxtstate[i]           = IDLE;
-                     buf_rst[i]                = 1'b1;
-                     buf_state_en[i]           = 1'b1;
-                     buf_ldfwd_in[i]           = 1'b0;
-                     buf_ldfwd_en[i]           = buf_state_en[i];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            default : begin
-                     buf_nxtstate[i]          = IDLE;
-                     buf_state_en[i]          = '0;
-                     buf_resp_state_bus_en[i] = '0;
-                     buf_state_bus_en[i]      = '0;
-                     buf_wr_en[i]             = '0;
-                     buf_data_in[i]           = '0;
-                     buf_data_en[i]           = '0;
-                     buf_error_en[i]          = '0;
-                     buf_rst[i]               = '0;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-         endcase
-      end
-
-      rvdffs  #(.WIDTH($bits(state_t))) buf_state_ff     (.din(buf_nxtstate[i]),             .dout({buf_state[i]}),    .en(buf_state_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_ageff        (.din(buf_age_in[i]),               .dout(buf_ageQ[i]),                                                                    .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_rspageff     (.din(buf_rspage_in[i]),            .dout(buf_rspageQ[i]),                                                                 .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_dualtagff    (.din(buf_dualtag_in[i]),           .dout(buf_dualtag[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualff       (.din(buf_dual_in[i]),              .dout(buf_dual[i]),       .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_samedwff     (.din(buf_samedw_in[i]),            .dout(buf_samedw[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_nomergeff    (.din(buf_nomerge_in[i]),           .dout(buf_nomerge[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualhiff     (.din(buf_dualhi_in[i]),            .dout(buf_dualhi[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_ldfwdff      (.din(buf_ldfwd_in[i]),             .dout(buf_ldfwd[i]),      .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_ldfwdtagff   (.din(buf_ldfwdtag_in[i]),          .dout(buf_ldfwdtag[i]),   .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_sideeffectff (.din(buf_sideeffect_in[i]),        .dout(buf_sideeffect[i]), .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_unsignff     (.din(buf_unsign_in[i]),            .dout(buf_unsign[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_writeff      (.din(buf_write_in[i]),             .dout(buf_write[i]),      .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(2))              buf_szff         (.din(buf_sz_in[i]),                .dout(buf_sz[i]),         .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_addrff       (.din(buf_addr_in[i][31:0]),        .dout(buf_addr[i]),       .en(buf_wr_en[i]),                                                                     .*);
-      rvdffs  #(.WIDTH(4))              buf_byteenff     (.din(buf_byteen_in[i][3:0]),       .dout(buf_byteen[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_dataff       (.din(buf_data_in[i][31:0]),        .dout(buf_data[i]),       .en(buf_data_en[i]),                                                                   .*);
-      rvdffsc #(.WIDTH(1))              buf_errorff      (.din(1'b1),                        .dout(buf_error[i]),      .en(buf_error_en[i]),                    .clear(buf_rst[i]), .clk(lsu_bus_buf_c1_clk), .*);
-
-   end
-
-   // buffer full logic
-   always_comb begin
-      buf_numvld_any[3:0] =  ({1'b0,lsu_busreq_m} << ldst_dual_m) +
-                             ({1'b0,lsu_busreq_r} << ldst_dual_r) +
-                             ibuf_valid;
-      buf_numvld_wrcmd_any[3:0] = 4'b0;
-      buf_numvld_cmd_any[3:0] = 4'b0;
-      buf_numvld_pend_any[3:0] = 4'b0;
-      any_done_wait_state = 1'b0;
-      for (int i=0; i<DEPTH; i++) begin
-         buf_numvld_any[3:0] += {3'b0, (buf_state[i] != IDLE)};
-         buf_numvld_wrcmd_any[3:0] += {3'b0, (buf_write[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_cmd_any[3:0]   += {3'b0, ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_pend_any[3:0]   += {3'b0, ((buf_state[i] == WAIT) | ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i]))};
-         any_done_wait_state |= (buf_state[i] == DONE_WAIT);
-      end
-   end
-
-   assign lsu_bus_buffer_pend_any = (buf_numvld_pend_any != 0);
-   assign lsu_bus_buffer_full_any = (ldst_dual_d & dec_lsu_valid_raw_d) ? (buf_numvld_any[3:0] >= (DEPTH-1)) : (buf_numvld_any[3:0] == DEPTH);
-   assign lsu_bus_buffer_empty_any = ~(|buf_state[DEPTH-1:0]) & ~ibuf_valid & ~obuf_valid;
-
-
-   // Non blocking ports
-   assign lsu_nonblock_load_valid_m = lsu_busreq_m & lsu_pkt_m.valid & lsu_pkt_m.load & ~flush_m_up & ~ld_full_hit_m;
-   assign lsu_nonblock_load_tag_m[DEPTH_LOG2-1:0] = WrPtr0_m[DEPTH_LOG2-1:0];
-   assign lsu_nonblock_load_inv_r = lsu_nonblock_load_valid_r & ~lsu_commit_r;
-   assign lsu_nonblock_load_inv_tag_r[DEPTH_LOG2-1:0] = WrPtr0_r[DEPTH_LOG2-1:0];      // r tag needs to be accurate even if there is no invalidate
-
-   always_comb begin
-      lsu_nonblock_load_data_ready = '0;
-      lsu_nonblock_load_data_error = '0;
-      lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0] = '0;
-      lsu_nonblock_load_data_lo[31:0] = '0;
-      lsu_nonblock_load_data_hi[31:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-          // Use buf_rst[i] instead of buf_state_en[i] for timing
-          lsu_nonblock_load_data_ready      |= (buf_state[i] == DONE) & ~buf_write[i];
-          lsu_nonblock_load_data_error      |= (buf_state[i] == DONE) & buf_error[i] & ~buf_write[i];
-          lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0]   |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_lo[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_hi[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (buf_dual[i] & buf_dualhi[i]))}};
-      end
-   end
-
-   assign lsu_nonblock_addr_offset[1:0] = buf_addr[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_sz[1:0]          = buf_sz[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_unsign           = buf_unsign[lsu_nonblock_load_data_tag];
-   assign lsu_nonblock_data_unalgn[31:0] = 32'({lsu_nonblock_load_data_hi[31:0], lsu_nonblock_load_data_lo[31:0]} >> 8*lsu_nonblock_addr_offset[1:0]);
-
-   assign lsu_nonblock_load_data_valid = lsu_nonblock_load_data_ready & ~lsu_nonblock_load_data_error;
-   assign lsu_nonblock_load_data[31:0] = ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {24'b0,lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {16'b0,lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {{24{lsu_nonblock_data_unalgn[7]}}, lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {{16{lsu_nonblock_data_unalgn[15]}},lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{(lsu_nonblock_sz[1:0] == 2'b10)}} & lsu_nonblock_data_unalgn[31:0]);
-
-   // Determine if there is a pending return to sideeffect load/store
-   always_comb begin
-      bus_sideeffect_pend = obuf_valid & obuf_sideeffect & dec_tlu_sideeffect_posted_disable;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_sideeffect_pend |= ((buf_state[i] == RESP) & buf_sideeffect[i] & dec_tlu_sideeffect_posted_disable);
-      end
-   end
-
-   // We have no ordering rules for AXI. Need to check outstanding trxns to same address for AXI
-   always_comb begin
-      bus_addr_match_pending = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_addr_match_pending |= (obuf_valid & (obuf_addr[31:3] == buf_addr[i][31:3]) & (buf_state[i] == RESP) & ~((obuf_tag0 == (pt.LSU_BUS_TAG)'(i)) | (obuf_merge & (obuf_tag1 == (pt.LSU_BUS_TAG)'(i)))));
-      end
-   end
-
-   // Generic bus signals
-   assign bus_cmd_ready                      = obuf_write ? ((obuf_cmd_done | obuf_data_done) ? (obuf_cmd_done ? lsu_axi_wready : lsu_axi_awready) : (lsu_axi_awready & lsu_axi_wready)) : lsu_axi_arready;
-   assign bus_wcmd_sent                      = lsu_axi_awvalid & lsu_axi_awready;
-   assign bus_wdata_sent                     = lsu_axi_wvalid & lsu_axi_wready;
-   assign bus_cmd_sent                       = ((obuf_cmd_done | bus_wcmd_sent) & (obuf_data_done | bus_wdata_sent)) | (lsu_axi_arvalid & lsu_axi_arready);
-
-   assign bus_rsp_read                       = lsu_axi_rvalid & lsu_axi_rready;
-   assign bus_rsp_write                      = lsu_axi_bvalid & lsu_axi_bready;
-   assign bus_rsp_read_tag[pt.LSU_BUS_TAG-1:0]  = lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_tag[pt.LSU_BUS_TAG-1:0] = lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_error                = bus_rsp_write & (lsu_axi_bresp[1:0] != 2'b0);
-   assign bus_rsp_read_error                 = bus_rsp_read  & (lsu_axi_rresp[1:0] != 2'b0);
-   assign bus_rsp_rdata[63:0]                = lsu_axi_rdata[63:0];
-
-   // AXI command signals
-   assign lsu_axi_awvalid               = obuf_valid & obuf_write & ~obuf_cmd_done & ~bus_addr_match_pending;
-   assign lsu_axi_awid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_awaddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_awsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_awprot[2:0]           = 3'b001;
-   assign lsu_axi_awcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_awregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_awlen[7:0]            = '0;
-   assign lsu_axi_awburst[1:0]          = 2'b01;
-   assign lsu_axi_awqos[3:0]            = '0;
-   assign lsu_axi_awlock                = '0;
-
-   assign lsu_axi_wvalid                = obuf_valid & obuf_write & ~obuf_data_done & ~bus_addr_match_pending;
-   assign lsu_axi_wstrb[7:0]            = obuf_byteen[7:0] & {8{obuf_write}};
-   assign lsu_axi_wdata[63:0]           = obuf_data[63:0];
-   assign lsu_axi_wlast                 = '1;
-
-   assign lsu_axi_arvalid               = obuf_valid & ~obuf_write & ~obuf_nosend & ~bus_addr_match_pending;
-   assign lsu_axi_arid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_araddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_arsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_arprot[2:0]           = 3'b001;
-   assign lsu_axi_arcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_arregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_arlen[7:0]            = '0;
-   assign lsu_axi_arburst[1:0]          = 2'b01;
-   assign lsu_axi_arqos[3:0]            = '0;
-   assign lsu_axi_arlock                = '0;
-
-   assign lsu_axi_bready = 1;
-   assign lsu_axi_rready = 1;
-
-   always_comb begin
-      lsu_imprecise_error_store_any = '0;
-      lsu_imprecise_error_store_tag = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         lsu_imprecise_error_store_any |= lsu_bus_clk_en_q & (buf_state[i] == DONE) & buf_error[i] & buf_write[i];
-         lsu_imprecise_error_store_tag |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & buf_error[i] & buf_write[i])}};
-      end
-   end
-   assign lsu_imprecise_error_load_any       = lsu_nonblock_load_data_error & ~lsu_imprecise_error_store_any;   // This is to make sure we send only one imprecise error for load/store
-   assign lsu_imprecise_error_addr_any[31:0] = lsu_imprecise_error_store_any ? buf_addr[lsu_imprecise_error_store_tag] : buf_addr[lsu_nonblock_load_data_tag];
-
-   // PMU signals
-   assign lsu_pmu_bus_trxn  = (lsu_axi_awvalid & lsu_axi_awready) | (lsu_axi_wvalid & lsu_axi_wready) | (lsu_axi_arvalid & lsu_axi_arready);
-   assign lsu_pmu_bus_misaligned = lsu_busreq_r & ldst_dual_r & lsu_commit_r;
-   assign lsu_pmu_bus_error = lsu_imprecise_error_load_any | lsu_imprecise_error_store_any;
-   assign lsu_pmu_bus_busy  = (lsu_axi_awvalid & ~lsu_axi_awready) | (lsu_axi_wvalid & ~lsu_axi_wready) | (lsu_axi_arvalid & ~lsu_axi_arready);
-
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awvalid_ff (.din(lsu_axi_awvalid),                .dout(lsu_axi_awvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awready_ff (.din(lsu_axi_awready),                .dout(lsu_axi_awready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wvalid_ff  (.din(lsu_axi_wvalid),                 .dout(lsu_axi_wvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wready_ff  (.din(lsu_axi_wready),                 .dout(lsu_axi_wready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arvalid_ff (.din(lsu_axi_arvalid),                .dout(lsu_axi_arvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arready_ff (.din(lsu_axi_arready),                .dout(lsu_axi_arready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bvalid_ff  (.din(lsu_axi_bvalid),                 .dout(lsu_axi_bvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bready_ff  (.din(lsu_axi_bready),                 .dout(lsu_axi_bready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_bresp_ff   (.din(lsu_axi_bresp[1:0]),             .dout(lsu_axi_bresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_bid_ff     (.din(lsu_axi_bid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_bid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))             lsu_axi_rdata_ff   (.din(lsu_axi_rdata[63:0]),            .dout(lsu_axi_rdata_q[63:0]),            .en((lsu_axi_rvalid | clk_override) & lsu_bus_clk_en), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rvalid_ff  (.din(lsu_axi_rvalid),                 .dout(lsu_axi_rvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rready_ff  (.din(lsu_axi_rready),                 .dout(lsu_axi_rready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_rresp_ff   (.din(lsu_axi_rresp[1:0]),             .dout(lsu_axi_rresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_rid_ff     (.din(lsu_axi_rid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_rid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr0_rff (.din(WrPtr0_m), .dout(WrPtr0_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr1_rff (.din(WrPtr1_m), .dout(WrPtr1_r), .clk(lsu_c2_r_clk), .*);
-
-   rvdff #(.WIDTH(1)) lsu_busreq_rff (.din(lsu_busreq_m & ~flush_r & ~ld_full_hit_m),      .dout(lsu_busreq_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(1)) lsu_nonblock_load_valid_rff  (.din(lsu_nonblock_load_valid_m),  .dout(lsu_nonblock_load_valid_r), .clk(lsu_c2_r_clk), .*);
-
-`ifdef RV_ASSERT_ON
-
-   for (genvar i=0; i<4; i++) begin: GenByte
-      assert_ld_byte_hitvecfn_lo_onehot: assert #0 ($onehot0(ld_byte_hitvecfn_lo[i][DEPTH-1:0]));
-      assert_ld_byte_hitvecfn_hi_onehot: assert #0 ($onehot0(ld_byte_hitvecfn_hi[i][DEPTH-1:0]));
-   end
-
-   for (genvar i=0; i<DEPTH; i++) begin: GenAssertAge
-      assert_bufempty_agevec: assert #0 (~(lsu_bus_buffer_empty_any & |(buf_age[i])));
-   end
-
-   assert_CmdPtr0Dec_onehot: assert #0 ($onehot0(CmdPtr0Dec[DEPTH-1:0] & ~{DEPTH{dec_tlu_force_halt}}));
-   assert_CmdPtr1Dec_onehot: assert #0 ($onehot0(CmdPtr1Dec[DEPTH-1:0] & ~{DEPTH{dec_tlu_force_halt}}));
-
-`endif
-
-endmodule // eb1_lsu_bus_buffer
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_bus_intf.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_bus_intf.sv
deleted file mode 100644
index fe80ab0..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_bus_intf.sv
+++ /dev/null
@@ -1,365 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_bus_intf
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // disable the posted sideeffect load store to the bus
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,              // obuf clock enable
-   input logic                          lsu_busm_clken,                     // bus clock enable
-
-   input logic                          lsu_c1_r_clk,                       // r pipe single pulse clock
-   input logic                          lsu_c2_r_clk,                       // r pipe double pulse clock
-   input logic                          lsu_bus_ibuf_c1_clk,                // ibuf single pulse clock
-   input logic                          lsu_bus_obuf_c1_clk,                // obuf single pulse clock
-   input logic                          lsu_bus_buf_c1_clk,                 // buf  single pulse clock
-   input logic                          lsu_free_c2_clk,                    // free clock double pulse clock
-   input logic                          active_clk,                         // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                          lsu_busm_clk,                       // bus clock
-
-   input logic                          dec_lsu_valid_raw_d,               // Raw valid for address computation
-   input logic                          lsu_busreq_m,                      // bus request is in m
-
-   input                                eb1_lsu_pkt_t lsu_pkt_m,          // lsu packet flowing down the pipe
-   input                                eb1_lsu_pkt_t lsu_pkt_r,          // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   end_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   store_data_r,                      // store data flowing down the pipe
-   input logic                          dec_tlu_force_halt,
-
-   input logic                          lsu_commit_r,                      // lsu instruction in r commits
-   input logic                          is_sideeffects_m,                  // lsu attribute is side_effects
-   input logic                          flush_m_up,                        // flush
-   input logic                          flush_r,                           // flush
-   input logic                          ldst_dual_d, ldst_dual_m, ldst_dual_r,
-
-   output logic                         lsu_busreq_r,                      // bus request is in r
-   output logic                         lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,           // write buffer is full
-   output logic                         lsu_bus_buffer_empty_any,          // write buffer is empty
-   output logic [31:0]                  bus_read_data_m,                   // the bus return data
-
-
-   output logic                         lsu_imprecise_error_load_any,      // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,     // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,      // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,   // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,     // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,     // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r, // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,// the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,// non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,  // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,      // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                        lsu_axi_awvalid,
-   input  logic                        lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_awid,
-   output logic [31:0]                 lsu_axi_awaddr,
-   output logic [3:0]                  lsu_axi_awregion,
-   output logic [7:0]                  lsu_axi_awlen,
-   output logic [2:0]                  lsu_axi_awsize,
-   output logic [1:0]                  lsu_axi_awburst,
-   output logic                        lsu_axi_awlock,
-   output logic [3:0]                  lsu_axi_awcache,
-   output logic [2:0]                  lsu_axi_awprot,
-   output logic [3:0]                  lsu_axi_awqos,
-
-   output logic                        lsu_axi_wvalid,
-   input  logic                        lsu_axi_wready,
-   output logic [63:0]                 lsu_axi_wdata,
-   output logic [7:0]                  lsu_axi_wstrb,
-   output logic                        lsu_axi_wlast,
-
-   input  logic                        lsu_axi_bvalid,
-   output logic                        lsu_axi_bready,
-   input  logic [1:0]                  lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                        lsu_axi_arvalid,
-   input  logic                        lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_arid,
-   output logic [31:0]                 lsu_axi_araddr,
-   output logic [3:0]                  lsu_axi_arregion,
-   output logic [7:0]                  lsu_axi_arlen,
-   output logic [2:0]                  lsu_axi_arsize,
-   output logic [1:0]                  lsu_axi_arburst,
-   output logic                        lsu_axi_arlock,
-   output logic [3:0]                  lsu_axi_arcache,
-   output logic [2:0]                  lsu_axi_arprot,
-   output logic [3:0]                  lsu_axi_arqos,
-
-   input  logic                        lsu_axi_rvalid,
-   output logic                        lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_rid,
-   input  logic [63:0]                 lsu_axi_rdata,
-   input  logic [1:0]                  lsu_axi_rresp,
-
-   input logic                         lsu_bus_clk_en
-
-);
-
-
-
-   logic              lsu_bus_clk_en_q;
-
-   logic [3:0]        ldst_byteen_m, ldst_byteen_r;
-   logic [7:0]        ldst_byteen_ext_m, ldst_byteen_ext_r;
-   logic [3:0]        ldst_byteen_hi_m, ldst_byteen_hi_r;
-   logic [3:0]        ldst_byteen_lo_m, ldst_byteen_lo_r;
-   logic              is_sideeffects_r;
-
-   logic [63:0]       store_data_ext_r;
-   logic [31:0]       store_data_hi_r;
-   logic [31:0]       store_data_lo_r;
-
-   logic              addr_match_dw_lo_r_m;
-   logic              addr_match_word_lo_r_m;
-   logic              no_word_merge_r, no_dword_merge_r;
-
-   logic              ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-   logic [3:0]        ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-
-   logic [3:0]        ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [3:0]        ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   logic [3:0]        ld_byte_hit_buf_lo, ld_byte_hit_buf_hi;
-   logic [31:0]       ld_fwddata_buf_lo, ld_fwddata_buf_hi;
-
-   logic [63:0]       ld_fwddata_lo, ld_fwddata_hi;
-   logic [63:0]       ld_fwddata_m;
-
-   logic              ld_full_hit_hi_m, ld_full_hit_lo_m;
-   logic              ld_full_hit_m;
-
-   assign ldst_byteen_m[3:0] = ({4{lsu_pkt_m.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}} & 4'b1111);
-
-   // Read/Write Buffer
-   eb1_lsu_bus_buffer #(.pt(pt)) bus_buffer (
-      .*
-   );
-
-   // Logic to determine if dc5 store can be coalesced or not with younger stores. Bypass ibuf if cannot colaesced
-   assign addr_match_dw_lo_r_m = (lsu_addr_r[31:3] == lsu_addr_m[31:3]);
-   assign addr_match_word_lo_r_m = addr_match_dw_lo_r_m & ~(lsu_addr_r[2]^lsu_addr_m[2]);
-
-   assign no_word_merge_r  = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_word_lo_r_m);
-   assign no_dword_merge_r = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_dw_lo_r_m);
-
-   // Create Hi/Lo signals
-   assign ldst_byteen_ext_m[7:0] = {4'b0,ldst_byteen_m[3:0]} << lsu_addr_m[1:0];
-   assign ldst_byteen_ext_r[7:0] = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-   assign store_data_ext_r[63:0] = {32'b0,store_data_r[31:0]} << {lsu_addr_r[1:0],3'b0};
-
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign store_data_hi_r[31:0]   = store_data_ext_r[63:32];
-   assign store_data_lo_r[31:0]   = store_data_ext_r[31:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin: GenBusBufFwd
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i] & ldst_byteen_hi_m[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i] & ldst_byteen_hi_m[i];
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i] |
-                                 ld_byte_hit_buf_lo[i];
-
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i] |
-                                 ld_byte_hit_buf_hi[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      // Final muxing between m/r
-      assign ld_fwddata_lo[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : ld_fwddata_buf_lo[(8*i)+7:(8*i)];
-
-      assign ld_fwddata_hi[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : ld_fwddata_buf_hi[(8*i)+7:(8*i)];
-
-   end
-
-   always_comb begin
-      ld_full_hit_lo_m = 1'b1;
-      ld_full_hit_hi_m = 1'b1;
-      for (int i=0; i<4; i++) begin
-         ld_full_hit_lo_m &= (ld_byte_hit_lo[i] | ~ldst_byteen_lo_m[i]);
-         ld_full_hit_hi_m &= (ld_byte_hit_hi[i] | ~ldst_byteen_hi_m[i]);
-      end
-   end
-
-   // This will be high if all the bytes of load hit the stores in pipe/write buffer (m/r/wrbuf)
-   assign ld_full_hit_m = ld_full_hit_lo_m & ld_full_hit_hi_m & lsu_busreq_m & lsu_pkt_m.load & ~is_sideeffects_m;
-
-   assign ld_fwddata_m[63:0] = {ld_fwddata_hi[31:0], ld_fwddata_lo[31:0]} >> (8*lsu_addr_m[1:0]);
-   assign bus_read_data_m[31:0]                        = ld_fwddata_m[31:0];
-
-   // Fifo flops
-
-   rvdff #(.WIDTH(1)) clken_ff (.din(lsu_bus_clk_en), .dout(lsu_bus_clk_en_q), .clk(active_clk), .*);
-
-   rvdff #(.WIDTH(1)) is_sideeffects_rff (.din(is_sideeffects_m), .dout(is_sideeffects_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(4) lsu_byten_rff (.*, .din(ldst_byteen_m[3:0]), .dout(ldst_byteen_r[3:0]), .clk(lsu_c1_r_clk));
-
-`ifdef RV_ASSERT_ON
-
-  // Assertion to check AXI write address is aligned to size
-  property lsu_axi_awaddr_aligned;
-    @(posedge lsu_busm_clk) disable iff(~rst_l) lsu_axi_awvalid |-> ((lsu_axi_awsize[2:0] == 3'h0)                                   |
-                                                                     ((lsu_axi_awsize[2:0] == 3'h1) & (lsu_axi_awaddr[0] == 1'b0))   |
-                                                                     ((lsu_axi_awsize[2:0] == 3'h2) & (lsu_axi_awaddr[1:0] == 2'b0)) |
-                                                                     ((lsu_axi_awsize[2:0] == 3'h3) & (lsu_axi_awaddr[2:0] == 3'b0)));
-  endproperty
-  assert_lsu_axi_awaddr_aligned: assert property (lsu_axi_awaddr_aligned) else
-    $display("Assertion lsu_axi_awaddr_aligned failed: lsu_axi_awvalid=1'b%b, lsu_axi_awsize=3'h%h, lsu_axi_awaddr=32'h%h",lsu_axi_awvalid, lsu_axi_awsize[2:0], lsu_axi_awaddr[31:0]);
-  // Assertion to check awvalid stays stable during entire bus clock
-
-  // Assertion to check AXI read address is aligned to size
-  property lsu_axi_araddr_aligned;
-    @(posedge lsu_busm_clk) disable iff(~rst_l) lsu_axi_arvalid |-> ((lsu_axi_arsize[2:0] == 3'h0)                                   |
-                                                                     ((lsu_axi_arsize[2:0] == 3'h1) & (lsu_axi_araddr[0] == 1'b0))   |
-                                                                     ((lsu_axi_arsize[2:0] == 3'h2) & (lsu_axi_araddr[1:0] == 2'b0)) |
-                                                                     ((lsu_axi_arsize[2:0] == 3'h3) & (lsu_axi_araddr[2:0] == 3'b0)));
-  endproperty
-  assert_lsu_axi_araddr_aligned: assert property (lsu_axi_araddr_aligned) else
-    $display("Assertion lsu_axi_araddr_aligned failed: lsu_axi_awvalid=1'b%b, lsu_axi_awsize=3'h%h, lsu_axi_araddr=32'h%h",lsu_axi_awvalid, lsu_axi_awsize[2:0], lsu_axi_araddr[31:0]);
-
-  // Assertion to check awvalid stays stable during entire bus clock
- property lsu_axi_awvalid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid != $past(lsu_axi_awvalid)) |-> ($past(lsu_bus_clk_en) | dec_tlu_force_halt);
-  endproperty
-  assert_lsu_axi_awvalid_stable: assert property (lsu_axi_awvalid_stable) else
-     $display("LSU AXI awvalid changed in middle of bus clock");
-
-  // Assertion to check awid stays stable during entire bus clock
-  property lsu_axi_awid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_awid[pt.LSU_BUS_TAG-1:0] != $past(lsu_axi_awid[pt.LSU_BUS_TAG-1:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_awid_stable: assert property (lsu_axi_awid_stable) else
-     $display("LSU AXI awid changed in middle of bus clock");
-
-  // Assertion to check awaddr stays stable during entire bus clock
-  property lsu_axi_awaddr_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_awaddr[31:0] != $past(lsu_axi_awaddr[31:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_awaddr_stable: assert property (lsu_axi_awaddr_stable) else
-     $display("LSU AXI awaddr changed in middle of bus clock");
-
-  // Assertion to check awsize stays stable during entire bus clock
-  property lsu_axi_awsize_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_awsize[2:0] != $past(lsu_axi_awsize[2:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_awsize_stable: assert property (lsu_axi_awsize_stable) else
-     $display("LSU AXI awsize changed in middle of bus clock");
-
-  // Assertion to check wstrb stays stable during entire bus clock
-  property lsu_axi_wstrb_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_wvalid & (lsu_axi_wstrb[7:0] != $past(lsu_axi_wstrb[7:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_wstrb_stable: assert property (lsu_axi_wstrb_stable) else
-     $display("LSU AXI wstrb changed in middle of bus clock");
-
-  // Assertion to check wdata stays stable during entire bus clock
-  property lsu_axi_wdata_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_wvalid & (lsu_axi_wdata[63:0] != $past(lsu_axi_wdata[63:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_wdata_stable: assert property (lsu_axi_wdata_stable) else
-     $display("LSU AXI wdata changed in middle of bus clock");
-
-  // Assertion to check awvalid stays stable during entire bus clock
-  property lsu_axi_arvalid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_arvalid != $past(lsu_axi_arvalid)) |-> ($past(lsu_bus_clk_en) | dec_tlu_force_halt);
-  endproperty
-  assert_lsu_axi_arvalid_stable: assert property (lsu_axi_arvalid_stable) else
-     $display("LSU AXI awvalid changed in middle of bus clock");
-
-  // Assertion to check awid stays stable during entire bus clock
-  property lsu_axi_arid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_arvalid & (lsu_axi_arid[pt.LSU_BUS_TAG-1:0] != $past(lsu_axi_arid[pt.LSU_BUS_TAG-1:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_arid_stable: assert property (lsu_axi_arid_stable) else
-     $display("LSU AXI awid changed in middle of bus clock");
-
-  // Assertion to check awaddr stays stable during entire bus clock
-  property lsu_axi_araddr_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_arvalid & (lsu_axi_araddr[31:0] != $past(lsu_axi_araddr[31:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_araddr_stable: assert property (lsu_axi_araddr_stable) else
-     $display("LSU AXI awaddr changed in middle of bus clock");
-
-  // Assertion to check awsize stays stable during entire bus clock
-  property lsu_axi_arsize_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_arsize[2:0] != $past(lsu_axi_arsize[2:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_arsize_stable: assert property (lsu_axi_arsize_stable) else
-     $display("LSU AXI awsize changed in middle of bus clock");
-
-`endif
-
-endmodule // eb1_lsu_bus_intf
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_clkdomain.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_clkdomain.sv
deleted file mode 100644
index afa1be9..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_clkdomain.sv
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Clock Generation Block
-// Comments: All the clocks are generate here
-//
-// //********************************************************************************
-
-
-module eb1_lsu_clkdomain
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)(
-   input logic      clk,                               // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic      active_clk,                        // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic      rst_l,                             // reset, active low
-   input logic      dec_tlu_force_halt,                // This will be high till TLU goes to debug halt
-
-   // Inputs
-   input logic      clk_override,                      // chciken bit to turn off clock gating
-   input logic      dma_dccm_req,                      // dma is active
-   input logic      ldst_stbuf_reqvld_r,               // allocating in to the store queue
-
-   input logic      stbuf_reqvld_any,                  // stbuf is draining
-   input logic      stbuf_reqvld_flushed_any,          // instruction going to stbuf is flushed
-   input logic      lsu_busreq_r,                      // busreq in r
-   input logic      lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   input logic      lsu_bus_buffer_empty_any,          // external bus buffer is empty
-   input logic      lsu_stbuf_empty_any,               // stbuf is empty
-
-   input logic      lsu_bus_clk_en,                    // bus clock enable
-
-   input eb1_lsu_pkt_t  lsu_p,                        // lsu packet in decode
-   input eb1_lsu_pkt_t  lsu_pkt_d,                    // lsu packet in d
-   input eb1_lsu_pkt_t  lsu_pkt_m,                    // lsu packet in m
-   input eb1_lsu_pkt_t  lsu_pkt_r,                    // lsu packet in r
-
-   // Outputs
-   output logic     lsu_bus_obuf_c1_clken,             // obuf clock enable
-   output logic     lsu_busm_clken,                    // bus clock enable
-
-   output logic     lsu_c1_m_clk,                      // m pipe single pulse clock
-   output logic     lsu_c1_r_clk,                      // r pipe single pulse clock
-
-   output logic     lsu_c2_m_clk,                      // m pipe double pulse clock
-   output logic     lsu_c2_r_clk,                      // r pipe double pulse clock
-
-   output logic     lsu_store_c1_m_clk,                // store in m
-   output logic     lsu_store_c1_r_clk,                // store in r
-
-   output logic     lsu_stbuf_c1_clk,
-   output logic     lsu_bus_obuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_ibuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_buf_c1_clk,                // ibuf clock
-   output logic     lsu_busm_clk,                      // bus clock
-
-   output logic     lsu_free_c2_clk,                   // free double pulse clock
-
-   input  logic     scan_mode                          // Scan mode
-);
-
-   logic lsu_c1_m_clken, lsu_c1_r_clken;
-   logic lsu_c2_m_clken, lsu_c2_r_clken;
-   logic lsu_c1_m_clken_q, lsu_c1_r_clken_q;
-   logic lsu_store_c1_m_clken, lsu_store_c1_r_clken;
-
-
-   logic lsu_stbuf_c1_clken;
-   logic lsu_bus_ibuf_c1_clken, lsu_bus_buf_c1_clken;
-
-   logic lsu_free_c1_clken, lsu_free_c1_clken_q, lsu_free_c2_clken;
-
-   //-------------------------------------------------------------------------------------------
-   // Clock Enable logic
-   //-------------------------------------------------------------------------------------------
-
-   assign lsu_c1_m_clken = lsu_p.valid | dma_dccm_req | clk_override;
-   assign lsu_c1_r_clken = lsu_pkt_m.valid | lsu_c1_m_clken_q | clk_override;
-
-   assign lsu_c2_m_clken = lsu_c1_m_clken | lsu_c1_m_clken_q | clk_override;
-   assign lsu_c2_r_clken = lsu_c1_r_clken | lsu_c1_r_clken_q | clk_override;
-
-   assign lsu_store_c1_m_clken = ((lsu_c1_m_clken & lsu_pkt_d.store) | clk_override) ;
-   assign lsu_store_c1_r_clken = ((lsu_c1_r_clken & lsu_pkt_m.store) | clk_override) ;
-
-   assign lsu_stbuf_c1_clken = ldst_stbuf_reqvld_r | stbuf_reqvld_any | stbuf_reqvld_flushed_any | clk_override;
-   assign lsu_bus_ibuf_c1_clken = lsu_busreq_r | clk_override;
-   assign lsu_bus_obuf_c1_clken = (lsu_bus_buffer_pend_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-   assign lsu_bus_buf_c1_clken  = ~lsu_bus_buffer_empty_any | lsu_busreq_r | dec_tlu_force_halt | clk_override;
-
-   assign lsu_free_c1_clken = (lsu_p.valid | lsu_pkt_d.valid | lsu_pkt_m.valid | lsu_pkt_r.valid) |
-                              ~lsu_bus_buffer_empty_any | ~lsu_stbuf_empty_any | clk_override;
-   assign lsu_free_c2_clken = lsu_free_c1_clken | lsu_free_c1_clken_q | clk_override;
-
-    // Flops
-   rvdff #(1) lsu_free_c1_clkenff (.din(lsu_free_c1_clken), .dout(lsu_free_c1_clken_q), .clk(active_clk), .*);
-
-   rvdff #(1) lsu_c1_m_clkenff (.din(lsu_c1_m_clken), .dout(lsu_c1_m_clken_q), .clk(lsu_free_c2_clk), .*);
-   rvdff #(1) lsu_c1_r_clkenff (.din(lsu_c1_r_clken), .dout(lsu_c1_r_clken_q), .clk(lsu_free_c2_clk), .*);
-
-   // Clock Headers
-   rvoclkhdr lsu_c1m_cgc ( .en(lsu_c1_m_clken), .l1clk(lsu_c1_m_clk), .* );
-   rvoclkhdr lsu_c1r_cgc ( .en(lsu_c1_r_clken), .l1clk(lsu_c1_r_clk), .* );
-
-   rvoclkhdr lsu_c2m_cgc ( .en(lsu_c2_m_clken), .l1clk(lsu_c2_m_clk), .* );
-   rvoclkhdr lsu_c2r_cgc ( .en(lsu_c2_r_clken), .l1clk(lsu_c2_r_clk), .* );
-
-   rvoclkhdr lsu_store_c1m_cgc (.en(lsu_store_c1_m_clken), .l1clk(lsu_store_c1_m_clk), .*);
-   rvoclkhdr lsu_store_c1r_cgc (.en(lsu_store_c1_r_clken), .l1clk(lsu_store_c1_r_clk), .*);
-
-   rvoclkhdr lsu_stbuf_c1_cgc ( .en(lsu_stbuf_c1_clken), .l1clk(lsu_stbuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_ibuf_c1_cgc ( .en(lsu_bus_ibuf_c1_clken), .l1clk(lsu_bus_ibuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_buf_c1_cgc  ( .en(lsu_bus_buf_c1_clken),  .l1clk(lsu_bus_buf_c1_clk), .* );
-
-   assign lsu_busm_clken = (~lsu_bus_buffer_empty_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign lsu_busm_clk = 1'b0;
-   assign lsu_bus_obuf_c1_clk = 1'b0;
-`else
-   rvclkhdr  lsu_bus_obuf_c1_cgc ( .en(lsu_bus_obuf_c1_clken), .l1clk(lsu_bus_obuf_c1_clk), .* );
-   rvclkhdr  lsu_busm_cgc (.en(lsu_busm_clken), .l1clk(lsu_busm_clk), .*);
-`endif
-
-   rvoclkhdr lsu_free_cgc (.en(lsu_free_c2_clken), .l1clk(lsu_free_c2_clk), .*);
-
-endmodule
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_dccm_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_dccm_ctl.sv
deleted file mode 100644
index ba070bc..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_dccm_ctl.sv
+++ /dev/null
@@ -1,425 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-module eb1_lsu_dccm_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic                             lsu_c2_m_clk,            // clocks
-   input logic                             lsu_c2_r_clk,            // clocks
-   input logic                             lsu_c1_r_clk,            // clocks
-   input logic                             lsu_store_c1_r_clk,      // clocks
-   input logic                             lsu_free_c2_clk,         // clocks
-   input logic                             clk_override,            // Override non-functional clock gating
-   input logic                             clk,                     // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   input logic                             rst_l,                   // reset, active low
-
-   input                                   eb1_lsu_pkt_t lsu_pkt_r,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_m,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_d,// lsu packets
-   input logic                             addr_in_dccm_d,          // address maps to dccm
-   input logic                             addr_in_pic_d,           // address maps to pic
-   input logic                             addr_in_pic_m,           // address maps to pic
-   input logic                             addr_in_dccm_m, addr_in_dccm_r,   // address in dccm per pipe stage
-   input logic                             addr_in_pic_r,                    // address in pic  per pipe stage
-   input logic                             lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r,
-   input logic                             lsu_commit_r,            // lsu instruction in r commits
-   input logic                             ldst_dual_m, ldst_dual_r,// load/store is unaligned at 32 bit boundary per pipe stage
-
-   // lsu address down the pipe
-   input logic [31:0]                      lsu_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          lsu_addr_m,
-   input logic [31:0]                      lsu_addr_r,
-
-   // lsu address down the pipe - needed to check unaligned
-   input logic [pt.DCCM_BITS-1:0]          end_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_m,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_r,
-
-
-   input logic                             stbuf_reqvld_any,        // write enable
-   input logic [pt.LSU_SB_BITS-1:0]        stbuf_addr_any,          // stbuf address (aligned)
-
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_data_any,          // the read out from stbuf
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     stbuf_ecc_any,           // the encoded data with ECC bits
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_hi_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_lo_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_hi_m,    // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_lo_m,    // stbuf fowarding to load
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_r,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_r,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_r,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_r,           // right justified, ie load byte will have data at 7:0
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_corr_r,      // right justified & ECC corrected, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_r,  // lsu has a DED
-   input logic                             single_ecc_error_hi_r,   // sec detected on hi dccm bank
-   input logic                             single_ecc_error_lo_r,   // sec detected on lower dccm bank
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_hi_r_ff,    // the encoded data with ECC bits
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_lo_r_ff,    // the encoded data with ECC bits
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_m,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_m,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_m,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_m,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_m,           // right justified, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_m,  // lsu has a DED
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_m,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_m,           // corrected dccm data
-
-   input logic [31:0]                      store_data_m,            // Store data M-stage
-   input logic                             dma_dccm_wen,            // Perform DMA writes only for word/dword
-   input logic                             dma_pic_wen,             // Perform PIC writes
-   input logic [2:0]                       dma_mem_tag_m,           // DMA Buffer entry number M-stage
-   input logic [31:0]                      dma_mem_addr,            // DMA request address
-   input logic [63:0]                      dma_mem_wdata,           // DMA write data
-   input logic [31:0]                      dma_dccm_wdata_lo,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [31:0]                      dma_dccm_wdata_hi,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_hi,   // ECC bits for the DMA wdata
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_lo,   // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_hi_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_hi_r,       // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_lo_r,       // data from the dccm
-   output logic [31:0]                     store_data_r,            // raw store data to be sent to bus
-   output logic                            ld_single_ecc_error_r,
-   output logic                            ld_single_ecc_error_r_ff,
-
-   output logic [31:0]                     picm_mask_data_m,        // pic data to stbuf
-   output logic                            lsu_stbuf_commit_any,    // stbuf wins the dccm port or is to pic
-   output logic                            lsu_dccm_rden_m,         // dccm read
-   output logic                            lsu_dccm_rden_r,         // dccm read
-
-   output logic                            dccm_dma_rvalid,         // dccm serviving the dma load
-   output logic                            dccm_dma_ecc_error,      // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,           // DMA return tag
-   output logic [63:0]                     dccm_dma_rdata,          // dccm data to dma request
-
-   // DCCM ports
-   output logic                            dccm_wren,               // dccm interface -- write
-   output logic                            dccm_rden,               // dccm interface -- write
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo,         // dccm interface -- wr addr for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi,         // dccm interface -- wr addr for hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo,         // dccm interface -- read address for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi,         // dccm interface -- read address for hi bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,         // dccm write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,         // dccm write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo,         // dccm read data back from the dccm
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi,         // dccm read data back from the dccm
-
-   // PIC ports
-   output logic                            picm_wren,               // write to pic
-   output logic                            picm_rden,               // read to pick
-   output logic                            picm_mken,               // write to pic need a mask
-   output logic [31:0]                     picm_rdaddr,             // address for pic read access
-   output logic [31:0]                     picm_wraddr,             // address for pic write access
-   output logic [31:0]                     picm_wr_data,            // write data
-   input logic [31:0]                      picm_rd_data,            // read data
-
-   input logic                             scan_mode                // scan mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-
-   logic                           lsu_dccm_rden_d, lsu_dccm_wren_d;
-   logic                           ld_single_ecc_error_lo_r, ld_single_ecc_error_hi_r;
-   logic                           ld_single_ecc_error_lo_r_ns, ld_single_ecc_error_hi_r_ns;
-   logic                           ld_single_ecc_error_lo_r_ff, ld_single_ecc_error_hi_r_ff;
-   logic                           lsu_double_ecc_error_r_ff;
-   logic [pt.DCCM_BITS-1:0]        ld_sec_addr_lo_r_ff, ld_sec_addr_hi_r_ff;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r_in, store_data_hi_r_in ;
-   logic [63:0]                    picm_rd_data_m;
-
-   logic                           dccm_wr_bypass_d_m_hi, dccm_wr_bypass_d_r_hi;
-   logic                           dccm_wr_bypass_d_m_lo, dccm_wr_bypass_d_r_lo;
-   logic                           kill_ecc_corr_lo_r, kill_ecc_corr_hi_r;
-
-    // byte_en flowing down
-   logic [3:0]                     store_byteen_m ,store_byteen_r;
-   logic [7:0]                     store_byteen_ext_m, store_byteen_ext_r;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic [63:0]  lsu_rdata_r, lsu_rdata_corr_r;
-      logic [63:0]  dccm_rdata_r, dccm_rdata_corr_r;
-      logic [63:0]  stbuf_fwddata_r;
-      logic [7:0]   stbuf_fwdbyteen_r;
-      logic [31:0]  stbuf_fwddata_lo_r, stbuf_fwddata_hi_r;
-      logic [3:0]   stbuf_fwdbyteen_lo_r, stbuf_fwdbyteen_hi_r;
-      logic [31:0]  lsu_rdata_lo_r, lsu_rdata_hi_r;
-      logic [63:0]  picm_rd_data_r;
-      logic [63:32] lsu_ld_data_r_nc, lsu_ld_data_corr_r_nc;
-      logic [2:0]   dma_mem_tag_r;
-      logic         stbuf_fwddata_en;
-
-      assign dccm_dma_rvalid      = lsu_pkt_r.valid & lsu_pkt_r.load & lsu_pkt_r.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_r;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_r[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_r ? lsu_rdata_corr_r[63:0] : {2{lsu_rdata_corr_r[31:0]}};
-      assign {lsu_ld_data_r_nc[63:32], lsu_ld_data_r[31:0]}           = lsu_rdata_r[63:0] >> 8*lsu_addr_r[1:0];
-      assign {lsu_ld_data_corr_r_nc[63:32], lsu_ld_data_corr_r[31:0]} = lsu_rdata_corr_r[63:0] >> 8*lsu_addr_r[1:0];
-
-      assign picm_rd_data_r[63:32]   = picm_rd_data_r[31:0];
-      assign dccm_rdata_r[63:0]      = {dccm_rdata_hi_r[31:0],dccm_rdata_lo_r[31:0]};
-      assign dccm_rdata_corr_r[63:0] = {sec_data_hi_r[31:0],sec_data_lo_r[31:0]};
-      assign stbuf_fwddata_r[63:0]   = {stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]};
-      assign stbuf_fwdbyteen_r[7:0]  = {stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]};
-      assign stbuf_fwddata_en        = (|stbuf_fwdbyteen_hi_m[3:0]) | (|stbuf_fwdbyteen_lo_m[3:0]) | clk_override;
-
-      for (genvar i=0; i<8; i++) begin: GenDMAData
-         assign lsu_rdata_corr_r[(8*i)+7:8*i]  = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_corr_r[(8*i)+7:8*i]));
-
-         assign lsu_rdata_r[(8*i)+7:8*i]       = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_r[(8*i)+7:8*i]));
-      end
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_hi_r_ff    (.*, .din(dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((lsu_dccm_rden_m & ldst_dual_m) | clk_override));
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_lo_r_ff    (.*, .din(dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_dccm_rden_m | clk_override));
-      rvdffe #(2*pt.DCCM_ECC_WIDTH)  dccm_data_ecc_r_ff  (.*, .din({dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0]}),
-                                                              .dout({dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0]}),                                  .en(lsu_dccm_rden_m | clk_override));
-      rvdff #(8)                   stbuf_fwdbyteen_ff    (.*, .din({stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]}), .dout({stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]}), .clk(lsu_c2_r_clk));
-      rvdffe #(64)                 stbuf_fwddata_ff      (.*, .din({stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]}),   .dout({stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]}),   .en(stbuf_fwddata_en));
-      rvdffe #(32)                 picm_rddata_rff       (.*, .din(picm_rd_data_m[31:0]),                                   .dout(picm_rd_data_r[31:0]),                                   .en(addr_in_pic_m | clk_override));
-      rvdff #(3)                   dma_mem_tag_rff       (.*, .din(dma_mem_tag_m[2:0]),                                     .dout(dma_mem_tag_r[2:0]),                                     .clk(lsu_c1_r_clk));
-
-   end else begin: L2U_Plus1_0
-
-      logic [63:0]  lsu_rdata_m, lsu_rdata_corr_m;
-      logic [63:0]  dccm_rdata_m, dccm_rdata_corr_m;
-      logic [63:0]  stbuf_fwddata_m;
-      logic [7:0]   stbuf_fwdbyteen_m;
-      logic [63:32] lsu_ld_data_m_nc, lsu_ld_data_corr_m_nc;
-      logic [31:0]  lsu_ld_data_corr_m;
-
-      assign dccm_dma_rvalid      = lsu_pkt_m.valid & lsu_pkt_m.load & lsu_pkt_m.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_m;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_m[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_m ? lsu_rdata_corr_m[63:0] : {2{lsu_rdata_corr_m[31:0]}};
-      assign {lsu_ld_data_m_nc[63:32], lsu_ld_data_m[31:0]} = lsu_rdata_m[63:0] >> 8*lsu_addr_m[1:0];
-      assign {lsu_ld_data_corr_m_nc[63:32], lsu_ld_data_corr_m[31:0]} = lsu_rdata_corr_m[63:0] >> 8*lsu_addr_m[1:0];
-
-      assign dccm_rdata_m[63:0]      = {dccm_rdata_hi_m[31:0],dccm_rdata_lo_m[31:0]};
-      assign dccm_rdata_corr_m[63:0] = {sec_data_hi_m[31:0],sec_data_lo_m[31:0]};
-      assign stbuf_fwddata_m[63:0]   = {stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]};
-      assign stbuf_fwdbyteen_m[7:0]  = {stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]};
-
-      for (genvar i=0; i<8; i++) begin: GenLoop
-         assign lsu_rdata_corr_m[(8*i)+7:8*i] = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_corr_m[(8*i)+7:8*i]));
-
-         assign lsu_rdata_m[(8*i)+7:8*i]      = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_m[(8*i)+7:8*i]));
-      end
-
-      rvdffe #(32) lsu_ld_data_corr_rff(.*, .din(lsu_ld_data_corr_m[31:0]), .dout(lsu_ld_data_corr_r[31:0]), .en((lsu_pkt_m.valid & lsu_pkt_m.load & (addr_in_pic_m | addr_in_dccm_m)) | clk_override));
-   end
-
-   assign kill_ecc_corr_lo_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign kill_ecc_corr_hi_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign ld_single_ecc_error_lo_r = lsu_pkt_r.load & single_ecc_error_lo_r & ~lsu_raw_fwd_lo_r;
-   assign ld_single_ecc_error_hi_r = lsu_pkt_r.load & single_ecc_error_hi_r & ~lsu_raw_fwd_hi_r;
-   assign ld_single_ecc_error_r    = (ld_single_ecc_error_lo_r | ld_single_ecc_error_hi_r) & ~lsu_double_ecc_error_r;
-
-   assign ld_single_ecc_error_lo_r_ns = ld_single_ecc_error_lo_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_lo_r;
-   assign ld_single_ecc_error_hi_r_ns = ld_single_ecc_error_hi_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_hi_r;
-   assign ld_single_ecc_error_r_ff = (ld_single_ecc_error_lo_r_ff | ld_single_ecc_error_hi_r_ff) & ~lsu_double_ecc_error_r_ff;
-
-   assign lsu_stbuf_commit_any = stbuf_reqvld_any &
-                                 (~(lsu_dccm_rden_d | lsu_dccm_wren_d | ld_single_ecc_error_r_ff) |
-                                  (lsu_dccm_rden_d & ~((stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == lsu_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]) |
-                                                       (stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == end_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]))));
-
-   // No need to read for aligned word/dword stores since ECC will come by new data completely
-   assign lsu_dccm_rden_d = lsu_pkt_d.valid & (lsu_pkt_d.load | (lsu_pkt_d.store & (~(lsu_pkt_d.word | lsu_pkt_d.dword) | (lsu_addr_d[1:0] != 2'b0)))) & addr_in_dccm_d;
-
-   // DMA will read/write in decode stage
-   assign lsu_dccm_wren_d = dma_dccm_wen;
-
-   // DCCM inputs
-   assign dccm_wren                             = lsu_dccm_wren_d | lsu_stbuf_commit_any | ld_single_ecc_error_r_ff;
-   assign dccm_rden                             = lsu_dccm_rden_d & addr_in_dccm_d;
-   assign dccm_wr_addr_lo[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? lsu_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_wr_addr_hi[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? end_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_lo[pt.DCCM_BITS-1:0]     = lsu_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_hi[pt.DCCM_BITS-1:0]     = end_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-   assign dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-
-   // DCCM outputs
-   assign store_byteen_m[3:0] = {4{lsu_pkt_m.store}} &
-                                (({4{lsu_pkt_m.by}}    & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}}  & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}}  & 4'b1111));
-
-   assign store_byteen_r[3:0] =  {4{lsu_pkt_r.store}} &
-                                 (({4{lsu_pkt_r.by}}    & 4'b0001) |
-                                  ({4{lsu_pkt_r.half}}  & 4'b0011) |
-                                  ({4{lsu_pkt_r.word}}  & 4'b1111));
-
-   assign store_byteen_ext_m[7:0] = {4'b0,store_byteen_m[3:0]} << lsu_addr_m[1:0];      // The packet in m
-   assign store_byteen_ext_r[7:0] = {4'b0,store_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-
-
-   assign dccm_wr_bypass_d_m_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-   assign dccm_wr_bypass_d_m_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-
-   assign dccm_wr_bypass_d_r_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-   assign dccm_wr_bypass_d_r_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic        dccm_wren_Q;
-      logic [31:0] dccm_wr_data_Q;
-      logic        dccm_wr_bypass_d_m_lo_Q, dccm_wr_bypass_d_m_hi_Q;
-      logic [31:0] store_data_pre_hi_r, store_data_pre_lo_r;
-
-      assign {store_data_pre_hi_r[31:0], store_data_pre_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-          assign store_data_lo_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]);
-          assign store_data_hi_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]);
-
-          assign store_datafn_lo_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]));
-          assign store_datafn_hi_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]));
-      end
-
-      rvdff #(1)   dccm_wren_ff       (.*, .din(lsu_stbuf_commit_any),  .dout(dccm_wren_Q),             .clk(lsu_free_c2_clk));   // ECC load errors writing to dccm shouldn't fwd to stores in pipe
-      rvdffe #(32) dccm_wrdata_ff     (.*, .din(stbuf_data_any[31:0]),  .dout(dccm_wr_data_Q[31:0]),    .en(lsu_stbuf_commit_any | clk_override), .clk(clk));
-      rvdff #(1)   dccm_wrbyp_dm_loff (.*, .din(dccm_wr_bypass_d_m_lo), .dout(dccm_wr_bypass_d_m_lo_Q), .clk(lsu_free_c2_clk));
-      rvdff #(1)   dccm_wrbyp_dm_hiff (.*, .din(dccm_wr_bypass_d_m_hi), .dout(dccm_wr_bypass_d_m_hi_Q), .clk(lsu_free_c2_clk));
-      rvdff #(32)  store_data_rff     (.*, .din(store_data_m[31:0]),    .dout(store_data_r[31:0]),      .clk(lsu_store_c1_r_clk));
-
-   end else begin: L2U1_Plus1_0
-
-      logic [31:0] store_data_hi_m, store_data_lo_m;
-      logic [63:0] store_data_mask;
-      assign {store_data_hi_m[31:0] , store_data_lo_m[31:0]} = {32'b0,store_data_m[31:0]} << 8*lsu_addr_m[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_hi_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i+4] ? store_data_hi_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_hi)   ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_hi_m[(8*i)+7:(8*i)]);
-         assign store_data_lo_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i]   ? store_data_lo_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_lo) ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_lo_m[(8*i)+7:(8*i)]);
-
-         assign store_datafn_lo_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo & ~store_byteen_ext_r[i])   ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)];
-         assign store_datafn_hi_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi & ~store_byteen_ext_r[i+4]) ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_hi_r[(8*i)+7:(8*i)];
-      end // for (genvar i=0; i<BYTE_WIDTH; i++)
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_mask[(8*i)+7:(8*i)] = {8{store_byteen_r[i]}};
-      end
-      assign store_data_r[31:0]      = 32'({store_data_hi_r[31:0],store_data_lo_r[31:0]} >> 8*lsu_addr_r[1:0]) & store_data_mask[31:0];
-
-      rvdffe #(pt.DCCM_DATA_WIDTH) store_data_hi_rff (.*, .din(store_data_hi_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((ldst_dual_m & lsu_pkt_m.valid & lsu_pkt_m.store) | clk_override), .clk(clk));
-      rvdff  #(pt.DCCM_DATA_WIDTH) store_data_lo_rff (.*, .din(store_data_lo_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .clk(lsu_store_c1_r_clk));
-
-   end
-
-   assign dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_lo[pt.DCCM_DATA_WIDTH-1:0]; // for ld choose dccm_out
-   assign dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_hi[pt.DCCM_DATA_WIDTH-1:0]; // for ld this is used for ecc
-
-   assign dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-   assign dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-
-   // PIC signals. PIC ignores the lower 2 bits of address since PIC memory registers are 32-bits
-   assign picm_wren          = (lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_pic_r & lsu_commit_r) | dma_pic_wen;
-   assign picm_rden          = lsu_pkt_d.valid & lsu_pkt_d.load  & addr_in_pic_d;
-   assign picm_mken          = lsu_pkt_d.valid & lsu_pkt_d.store & addr_in_pic_d;  // Get the mask for stores
-   assign picm_rdaddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},lsu_addr_d[pt.PIC_BITS-1:0]};
-
-   assign picm_wraddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},(dma_pic_wen ? dma_mem_addr[pt.PIC_BITS-1:0] : lsu_addr_r[pt.PIC_BITS-1:0])};
-
-   assign picm_wr_data[31:0] = dma_pic_wen ? dma_mem_wdata[31:0] : store_datafn_lo_r[31:0];
-
-   assign picm_mask_data_m[31:0] = picm_rd_data_m[31:0];
-   assign picm_rd_data_m[63:0]   = {picm_rd_data[31:0],picm_rd_data[31:0]};
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      rvdff #(1) dccm_rden_mff (.*, .din(lsu_dccm_rden_d), .dout(lsu_dccm_rden_m), .clk(lsu_c2_m_clk));
-      rvdff #(1) dccm_rden_rff (.*, .din(lsu_dccm_rden_m), .dout(lsu_dccm_rden_r), .clk(lsu_c2_r_clk));
-
-      // ECC correction flops since dccm write happens next cycle
-      // We are writing to dccm in r+1 for ecc correction since fast_int needs to be blocked in decode - 1. We can probably write in r for plus0 configuration since we know ecc error in M.
-      // In that case these (_ff) flops are needed only in plus1 configuration
-      rvdff #(1) ld_double_ecc_error_rff    (.*, .din(lsu_double_ecc_error_r),   .dout(lsu_double_ecc_error_r_ff),   .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_hi_rff (.*, .din(ld_single_ecc_error_hi_r_ns), .dout(ld_single_ecc_error_hi_r_ff), .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_lo_rff (.*, .din(ld_single_ecc_error_lo_r_ns), .dout(ld_single_ecc_error_lo_r_ff), .clk(lsu_free_c2_clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_hi_rff (.*, .din(end_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_lo_rff (.*, .din(lsu_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-
-   end else begin: Gen_dccm_disable
-      assign lsu_dccm_rden_m = '0;
-      assign lsu_dccm_rden_r = '0;
-
-      assign lsu_double_ecc_error_r_ff = 1'b0;
-      assign ld_single_ecc_error_hi_r_ff = 1'b0;
-      assign ld_single_ecc_error_lo_r_ff = 1'b0;
-      assign ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] = '0;
-      assign ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] = '0;
-   end
-
-`ifdef RV_ASSERT_ON
-
-   // Load single ECC error correction implies commit/dma
-   property ld_single_ecc_error_commit;
-      @(posedge clk) disable iff(~rst_l) (ld_single_ecc_error_r_ff & dccm_wren) |-> ($past(lsu_commit_r | lsu_pkt_r.dma));
-   endproperty
-   assert_ld_single_ecc_error_commit: assert property (ld_single_ecc_error_commit) else
-     $display("No commit or DMA but ECC correction happened");
-
-
-`endif
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_dccm_mem.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_dccm_mem.sv
deleted file mode 100644
index ac4765b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_dccm_mem.sv
+++ /dev/null
@@ -1,351 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-`define eb1_LOCAL_DCCM_RAM_TEST_PORTS    .TEST1(dccm_ext_in_pkt[i].TEST1),                      \
-                                     .RME(dccm_ext_in_pkt[i].RME),                      \
-                                     .RM(dccm_ext_in_pkt[i].RM),                        \
-                                     .LS(dccm_ext_in_pkt[i].LS),                        \
-                                     .DS(dccm_ext_in_pkt[i].DS),                        \
-                                     .SD(dccm_ext_in_pkt[i].SD),                        \
-                                     .TEST_RNM(dccm_ext_in_pkt[i].TEST_RNM),            \
-                                     .BC1(dccm_ext_in_pkt[i].BC1),                      \
-                                     .BC2(dccm_ext_in_pkt[i].BC2),                      \
-
-
-
-module eb1_lsu_dccm_mem
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-`ifdef USE_POWER_PINS
-   input logic 	vccd1,
-   input logic		vssd1,
- `endif
-   input logic         clk,                                             // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic         active_clk,                                      // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic         rst_l,                                           // reset, active low
-   input logic         clk_override,                                    // Override non-functional clock gating
-
-   input logic         dccm_wren,                                       // write enable
-   input logic         dccm_rden,                                       // read enable
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,                     // read address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,                     // read address for the upper bank in case of a misaligned access
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,              // write data
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,              // write data
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,    // the dccm packet from the soc
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_lo,              // read data from the lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_hi,              // read data from the hi bank
-
-   input  logic         scan_mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-   localparam DCCM_INDEX_BITS = (pt.DCCM_BITS - pt.DCCM_BANK_BITS - pt.DCCM_WIDTH_BITS);
-   localparam DCCM_INDEX_DEPTH = ((pt.DCCM_SIZE)*1024)/((pt.DCCM_BYTE_WIDTH)*(pt.DCCM_NUM_BANKS));  // Depth of memory bank
-
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        wren_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        rden_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+2)] addr_bank;
-   logic [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)]           rd_addr_even, rd_addr_odd;
-   logic                                                                rd_unaligned, wr_unaligned;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_FDATA_WIDTH-1:0]              dccm_bank_dout;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]                                      wrdata;
-
-   logic [pt.DCCM_NUM_BANKS-1:0][pt.DCCM_FDATA_WIDTH-1:0]               wr_data_bank;
-
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_lo_q;
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_hi_q;
-
-   logic [pt.DCCM_NUM_BANKS-1:0]            dccm_clken;
-
-   assign rd_unaligned = (dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-   assign wr_unaligned = (dccm_wr_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_wr_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-
-   // Align the read data
-   assign dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_lo_q[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-   assign dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-
-
-   // 8 Banks, 16KB each (2048 x 72)
-   for (genvar i=0; i<pt.DCCM_NUM_BANKS; i++) begin: mem_bank
-      assign  wren_bank[i]        = dccm_wren & ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_wr_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  rden_bank[i]        = dccm_rden & ((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_rd_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  addr_bank[i][(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] = wren_bank[i] ? (((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ?
-                                                                                                        dccm_wr_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_wr_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS])  :
-                                                                                                  (((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & rd_unaligned) ?
-                                                                                                        dccm_rd_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_rd_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS]);
-
-      assign wr_data_bank[i]     = ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ? dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] : dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0];
-
-      // clock gating section
-      assign  dccm_clken[i] = (wren_bank[i] | rden_bank[i] | clk_override) ;
-      // end clock gating section
-
-`ifdef VERILATOR
-
-       /* eb1_ram #(DCCM_INDEX_DEPTH,39)  ram (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-            
-              */                    
-                                  sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-                                  					`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i]),
-									.dout0(dccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-
-`else
-
-      if (DCCM_INDEX_DEPTH == 32768) begin : dccm
-         ram_32768x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 16384) begin : dccm
-         ram_16384x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 8192) begin : dccm
-         ram_8192x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 4096) begin : dccm
-         ram_4096x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 3072) begin : dccm
-         ram_3072x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 2048) begin : dccm
-         ram_2048x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 1024) begin : dccm
-         /*ram_1024x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-                                 */
-                                 sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i]),
-									.dout0(dccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 512) begin : dccm
-         ram_512x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-      else if (DCCM_INDEX_DEPTH == 256) begin : dccm
-         /*ram_256x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );*/
-                                sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i][31:0]),
-									.dout0(dccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 128) begin : dccm
-         ram_128x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-`endif
-
-   end : mem_bank
-
-   // Flops
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_lo_ff (.*, .din(dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_lo_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_hi_ff (.*, .din(dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-
-`undef eb1_LOCAL_DCCM_RAM_TEST_PORTS
-
-endmodule // eb1_lsu_dccm_mem
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_ecc.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_ecc.sv
deleted file mode 100644
index c91a01f..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_ecc.sv
+++ /dev/null
@@ -1,241 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_ecc
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-   input logic                           clk,                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                           lsu_c2_r_clk,       // clock
-   input logic                           clk_override,       // Override non-functional clock gating
-   input logic                           rst_l,              // reset, active low
-   input logic                           scan_mode,          // scan mode
-
-   input eb1_lsu_pkt_t                  lsu_pkt_m,          // packet in m
-   input eb1_lsu_pkt_t                  lsu_pkt_r,          // packet in r
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  stbuf_data_any,
-
-   input logic                           dec_tlu_core_ecc_disable,  // disables the ecc computation and error flagging
-
-   input logic                           lsu_dccm_rden_r,          // dccm rden
-   input logic                           addr_in_dccm_r,           // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_r,               // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_r,               // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_r,          // data from the dccm
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_r,          // data from the dccm
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_r,       // data from the dccm + ecc
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_r,       // data from the dccm + ecc
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r_ff,         // corrected dccm data R+1 stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff,         // corrected dccm data R+1 stage
-
-   input logic                           ld_single_ecc_error_r,     // ld has a single ecc error
-   input logic                           ld_single_ecc_error_r_ff,  // ld has a single ecc error
-   input logic                           lsu_dccm_rden_m,           // dccm rden
-   input logic                           addr_in_dccm_m,            // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_m,                // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_m,                // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_m,           // raw data from mem
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_m,           // raw data from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_m,        // ecc read out from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_m,        // ecc read out from mem
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_m,             // corrected dccm data M-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_m,             // corrected dccm data M-stage
-
-   input logic                           dma_dccm_wen,              // Perform DMA writes only for word/dword
-   input logic  [31:0]                   dma_dccm_wdata_lo,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   input logic  [31:0]                   dma_dccm_wdata_hi,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_hi,     // ECC bits for the DMA wdata
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_lo,     // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any,             // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff,      // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_lo_r_ff,      // Encoded data with ECC bits
-
-   output logic                          single_ecc_error_hi_r,                   // sec detected
-   output logic                          single_ecc_error_lo_r,                   // sec detected on lower dccm bank
-   output logic                          lsu_single_ecc_error_r,                  // or of the 2
-   output logic                          lsu_double_ecc_error_r,                   // double error detected
-
-   output logic                          lsu_single_ecc_error_m,                  // or of the 2
-   output logic                          lsu_double_ecc_error_m                   // double error detected
-
- );
-
-   logic                           is_ldst_r;
-   logic                           is_ldst_hi_any, is_ldst_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_wdata_hi_any, dccm_wdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  dccm_wdata_ecc_hi_any, dccm_wdata_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_rdata_hi_any, dccm_rdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]   dccm_data_ecc_hi_any, dccm_data_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  sec_data_hi_any, sec_data_lo_any;
-   logic                           single_ecc_error_hi_any, single_ecc_error_lo_any;
-   logic                           double_ecc_error_hi_any, double_ecc_error_lo_any;
-
-   logic                           double_ecc_error_hi_m, double_ecc_error_lo_m;
-   logic                           double_ecc_error_hi_r, double_ecc_error_lo_r;
-
-   logic [6:0]                     ecc_out_hi_nc, ecc_out_lo_nc;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic        ldst_dual_m, ldst_dual_r;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_r, is_ldst_lo_r;
-
-      assign ldst_dual_r                                 = (lsu_addr_r[2] != end_addr_r[2]);
-      assign is_ldst_r                                   = lsu_pkt_r.valid & (lsu_pkt_r.load | lsu_pkt_r.store) & addr_in_dccm_r & lsu_dccm_rden_r;
-      assign is_ldst_lo_r                                = is_ldst_r & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_r                                = is_ldst_r & ldst_dual_r & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_r;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_r;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_hi_r                       = single_ecc_error_hi_any;
-      assign double_ecc_error_hi_r                       = double_ecc_error_hi_any;
-      assign sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_lo_r                       = single_ecc_error_lo_any;
-      assign double_ecc_error_lo_r                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_r                      = single_ecc_error_hi_r | single_ecc_error_lo_r;
-      assign lsu_double_ecc_error_r                      = double_ecc_error_hi_r | double_ecc_error_lo_r;
-
-   end else begin: L2U_Plus1_0
-
-      logic        ldst_dual_m;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_m, is_ldst_lo_m;
-
-      assign ldst_dual_m                                 = (lsu_addr_m[2] != end_addr_m[2]);
-      assign is_ldst_m                                   = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & addr_in_dccm_m & lsu_dccm_rden_m;
-      assign is_ldst_lo_m                                = is_ldst_m & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_m                                = is_ldst_m & (ldst_dual_m | lsu_pkt_m.dma) & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_m;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_m;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_hi_m                       = double_ecc_error_hi_any;
-      assign sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_lo_m                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_m                      = single_ecc_error_hi_any | single_ecc_error_lo_any;
-      assign lsu_double_ecc_error_m                      = double_ecc_error_hi_m   | double_ecc_error_lo_m;
-
-      // Flops
-      rvdff  #(1) lsu_single_ecc_err_r    (.din(lsu_single_ecc_error_m), .dout(lsu_single_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(1) lsu_double_ecc_err_r    (.din(lsu_double_ecc_error_m), .dout(lsu_double_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_lo_rff (.din(single_ecc_error_lo_any),  .dout(single_ecc_error_lo_r),  .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_hi_rff (.din(single_ecc_error_hi_any),  .dout(single_ecc_error_hi_r),  .clk(lsu_c2_r_clk), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rff (.din(sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rff (.din(sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-
-   end
-
-   // Logic for ECC generation during write
-   assign dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0] : stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]);
-   assign dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0] : 32'h0);
-
-   assign sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0]         = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-
-   // Instantiate ECC blocks
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-
-      //Detect/Repair for Hi
-      rvecc_decode lsu_ecc_decode_hi (
-         // Inputs
-         .en(is_ldst_hi_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_in(dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_hi_nc[6:0]),
-         .single_ecc_error(single_ecc_error_hi_any),
-         .double_ecc_error(double_ecc_error_hi_any),
-         .*
-      );
-
-      //Detect/Repair for Lo
-      rvecc_decode lsu_ecc_decode_lo (
-         // Inputs
-         .en(is_ldst_lo_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] ),
-         .ecc_in(dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_lo_nc[6:0]),
-         .single_ecc_error(single_ecc_error_lo_any),
-         .double_ecc_error(double_ecc_error_lo_any),
-         .*
-      );
-
-      rvecc_encode lsu_ecc_encode_hi (
-         //Inputs
-         .din(dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-      rvecc_encode lsu_ecc_encode_lo (
-         //Inputs
-         .din(dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign single_ecc_error_hi_any = '0;
-      assign double_ecc_error_hi_any = '0;
-      assign single_ecc_error_lo_any = '0;
-      assign double_ecc_error_lo_any = '0;
-   end
-
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rplus1ff (.din(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rplus1ff (.din(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-
-
-endmodule // eb1_lsu_ecc
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_lsc_ctl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_lsc_ctl.sv
deleted file mode 100644
index 7b0517b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_lsc_ctl.sv
+++ /dev/null
@@ -1,341 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU control
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_lsc_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic                rst_l,                     // reset, active low
-   input logic                clk_override,              // Override non-functional clock gating
-   input logic                clk,                       // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   // clocks per pipe
-   input logic                lsu_c1_m_clk,
-   input logic                lsu_c1_r_clk,
-   input logic                lsu_c2_m_clk,
-   input logic                lsu_c2_r_clk,
-   input logic                lsu_store_c1_m_clk,
-
-   input logic [31:0]         lsu_ld_data_r,             // Load data R-stage
-   input logic [31:0]         lsu_ld_data_corr_r,        // ECC corrected data R-stage
-   input logic                lsu_single_ecc_error_r,    // ECC single bit error R-stage
-   input logic                lsu_double_ecc_error_r,    // ECC double bit error R-stage
-
-   input logic [31:0]         lsu_ld_data_m,             // Load data M-stage
-   input logic                lsu_single_ecc_error_m,    // ECC single bit error M-stage
-   input logic                lsu_double_ecc_error_m,    // ECC double bit error M-stage
-
-   input logic                flush_m_up,                // Flush M and D stage
-   input logic                flush_r,                   // Flush R-stage
-   input logic                ldst_dual_d,               // load/store is unaligned at 32 bit boundary D-stage
-   input logic                ldst_dual_m,               // load/store is unaligned at 32 bit boundary M-stage
-   input logic                ldst_dual_r,               // load/store is unaligned at 32 bit boundary R-stage
-
-   input logic [31:0]         exu_lsu_rs1_d,             // address
-   input logic [31:0]         exu_lsu_rs2_d,             // store data
-
-   input eb1_lsu_pkt_t       lsu_p,                     // lsu control packet
-   input logic                dec_lsu_valid_raw_d,       // Raw valid for address computation
-   input logic [11:0]         dec_lsu_offset_d,          // 12b offset for load/store addresses
-
-   input  logic [31:0]        picm_mask_data_m,          // PIC data M-stage
-   input  logic [31:0]        bus_read_data_m,           // the bus return data
-   output logic [31:0]        lsu_result_m,              // lsu load data
-   output logic [31:0]        lsu_result_corr_r,         // This is the ECC corrected data going to RF
-   // lsu address down the pipe
-   output logic [31:0]        lsu_addr_d,
-   output logic [31:0]        lsu_addr_m,
-   output logic [31:0]        lsu_addr_r,
-   // lsu address down the pipe - needed to check unaligned
-   output logic [31:0]        end_addr_d,
-   output logic [31:0]        end_addr_m,
-   output logic [31:0]        end_addr_r,
-   // store data down the pipe
-   output logic [31:0]        store_data_m,
-
-   input  logic [31:0]         dec_tlu_mrac_ff,          // CSR for memory region control
-   output logic                lsu_exc_m,                // Access or misaligned fault
-   output logic                is_sideeffects_m,         // is sideffects space
-   output logic                lsu_commit_r,             // lsu instruction in r commits
-   output logic                lsu_single_ecc_error_incr,// LSU inc SB error counter
-   output eb1_lsu_error_pkt_t lsu_error_pkt_r,          // lsu exception packet
-
-   output logic [31:1]         lsu_fir_addr,             // fast interrupt address
-   output logic [1:0]          lsu_fir_error,            // Error during fast interrupt lookup
-
-   // address in dccm/pic/external per pipe stage
-   output logic               addr_in_dccm_d,
-   output logic               addr_in_dccm_m,
-   output logic               addr_in_dccm_r,
-
-   output logic               addr_in_pic_d,
-   output logic               addr_in_pic_m,
-   output logic               addr_in_pic_r,
-
-   output logic               addr_external_m,
-
-   // DMA slave
-   input logic                dma_dccm_req,
-   input logic [31:0]         dma_mem_addr,
-   input logic [2:0]          dma_mem_sz,
-   input logic                dma_mem_write,
-   input logic [63:0]         dma_mem_wdata,
-
-   // Store buffer related signals
-   output eb1_lsu_pkt_t      lsu_pkt_d,
-   output eb1_lsu_pkt_t      lsu_pkt_m,
-   output eb1_lsu_pkt_t      lsu_pkt_r,
-
-   input  logic               scan_mode                  // Scan mode
-
-   );
-
-   logic [31:3]        end_addr_pre_m, end_addr_pre_r;
-   logic [31:0]        full_addr_d;
-   logic [31:0]        full_end_addr_d;
-   logic [31:0]        lsu_rs1_d;
-   logic [11:0]        lsu_offset_d;
-   logic [31:0]        rs1_d;
-   logic [11:0]        offset_d;
-   logic [12:0]        end_addr_offset_d;
-   logic [2:0]         addr_offset_d;
-
-   logic [63:0]        dma_mem_wdata_shifted;
-   logic               addr_external_d;
-   logic               addr_external_r;
-   logic               access_fault_d, misaligned_fault_d;
-   logic               access_fault_m, misaligned_fault_m;
-
-   logic               fir_dccm_access_error_d, fir_nondccm_access_error_d;
-   logic               fir_dccm_access_error_m, fir_nondccm_access_error_m;
-
-   logic [3:0]         exc_mscause_d, exc_mscause_m;
-   logic [31:0]        rs1_d_raw;
-   logic [31:0]        store_data_d, store_data_pre_m, store_data_m_in;
-   logic [31:0]        bus_read_data_r;
-
-   eb1_lsu_pkt_t           dma_pkt_d;
-   eb1_lsu_pkt_t           lsu_pkt_m_in, lsu_pkt_r_in;
-   eb1_lsu_error_pkt_t     lsu_error_pkt_m;
-
-
-   // Premux the rs1/offset for dma
-   assign lsu_rs1_d[31:0]    = dec_lsu_valid_raw_d ? exu_lsu_rs1_d[31:0] : dma_mem_addr[31:0];
-   assign lsu_offset_d[11:0] = dec_lsu_offset_d[11:0] & {12{dec_lsu_valid_raw_d}};
-   assign rs1_d_raw[31:0]    = lsu_rs1_d[31:0];
-   assign offset_d[11:0]     = lsu_offset_d[11:0];
-
-   assign rs1_d[31:0] = (lsu_pkt_d.load_ldst_bypass_d) ? lsu_result_m[31:0] : rs1_d_raw[31:0];
-
-   // generate the ls address
-   rvlsadder   lsadder  (.rs1(rs1_d[31:0]),
-                       .offset(offset_d[11:0]),
-                       .dout(full_addr_d[31:0])
-                       );
-
-   // Module to generate the memory map of the address
-   eb1_lsu_addrcheck addrcheck (
-              .start_addr_d(full_addr_d[31:0]),
-              .end_addr_d(full_end_addr_d[31:0]),
-              .rs1_region_d(rs1_d[31:28]),
-              .*
-  );
-
-   // Calculate start/end address for load/store
-   assign addr_offset_d[2:0]      = ({3{lsu_pkt_d.half}} & 3'b01) | ({3{lsu_pkt_d.word}} & 3'b11) | ({3{lsu_pkt_d.dword}} & 3'b111);
-   assign end_addr_offset_d[12:0] = {offset_d[11],offset_d[11:0]} + {9'b0,addr_offset_d[2:0]};
-   assign full_end_addr_d[31:0]   = rs1_d[31:0] + {{19{end_addr_offset_d[12]}},end_addr_offset_d[12:0]};
-   assign end_addr_d[31:0]        = full_end_addr_d[31:0];
-   assign lsu_exc_m               = access_fault_m | misaligned_fault_m;
-
-   // Goes to TLU to increment the ECC error counter
-   assign lsu_single_ecc_error_incr = (lsu_single_ecc_error_r & ~lsu_double_ecc_error_r) & (lsu_commit_r | lsu_pkt_r.dma) & lsu_pkt_r.valid;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic               access_fault_r, misaligned_fault_r;
-      logic [3:0]         exc_mscause_r;
-      logic               fir_dccm_access_error_r, fir_nondccm_access_error_r;
-
-      // Generate exception packet
-      assign lsu_error_pkt_r.exc_valid = (access_fault_r | misaligned_fault_r | lsu_double_ecc_error_r) & lsu_pkt_r.valid & ~lsu_pkt_r.dma & ~lsu_pkt_r.fast_int;
-      assign lsu_error_pkt_r.single_ecc_error = lsu_single_ecc_error_r & ~lsu_error_pkt_r.exc_valid & ~lsu_pkt_r.dma;
-      assign lsu_error_pkt_r.inst_type = lsu_pkt_r.store;
-      assign lsu_error_pkt_r.exc_type  = ~misaligned_fault_r;
-      assign lsu_error_pkt_r.mscause[3:0] = (lsu_double_ecc_error_r & ~misaligned_fault_r & ~access_fault_r) ? 4'h1 : exc_mscause_r[3:0];
-      assign lsu_error_pkt_r.addr[31:0] = lsu_addr_r[31:0];
-
-      assign lsu_fir_error[1:0] = fir_nondccm_access_error_r ? 2'b11 : (fir_dccm_access_error_r ? 2'b10 : ((lsu_pkt_r.fast_int & lsu_double_ecc_error_r) ? 2'b01 : 2'b00));
-
-      rvdff #(1) access_fault_rff             (.din(access_fault_m),             .dout(access_fault_r),             .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) misaligned_fault_rff         (.din(misaligned_fault_m),         .dout(misaligned_fault_r),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(4) exc_mscause_rff              (.din(exc_mscause_m[3:0]),         .dout(exc_mscause_r[3:0]),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_m),    .dout(fir_dccm_access_error_r),    .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_m), .dout(fir_nondccm_access_error_r), .clk(lsu_c1_r_clk), .*);
-
-   end else begin: L2U_Plus1_0
-      logic [1:0] lsu_fir_error_m;
-
-      // Generate exception packet
-      assign lsu_error_pkt_m.exc_valid = (access_fault_m | misaligned_fault_m | lsu_double_ecc_error_m) & lsu_pkt_m.valid & ~lsu_pkt_m.dma & ~lsu_pkt_m.fast_int & ~flush_m_up;
-      assign lsu_error_pkt_m.single_ecc_error = lsu_single_ecc_error_m & ~lsu_error_pkt_m.exc_valid & ~lsu_pkt_m.dma;
-      assign lsu_error_pkt_m.inst_type = lsu_pkt_m.store;
-      assign lsu_error_pkt_m.exc_type  = ~misaligned_fault_m;
-      assign lsu_error_pkt_m.mscause[3:0] = (lsu_double_ecc_error_m & ~misaligned_fault_m & ~access_fault_m) ? 4'h1 : exc_mscause_m[3:0];
-      assign lsu_error_pkt_m.addr[31:0] = lsu_addr_m[31:0];
-
-      assign lsu_fir_error_m[1:0] = fir_nondccm_access_error_m ? 2'b11 : (fir_dccm_access_error_m ? 2'b10 : ((lsu_pkt_m.fast_int & lsu_double_ecc_error_m) ? 2'b01 : 2'b00));
-
-      rvdff  #(1)                             lsu_exc_valid_rff       (.*, .din(lsu_error_pkt_m.exc_valid),                        .dout(lsu_error_pkt_r.exc_valid),                        .clk(lsu_c2_r_clk));
-      rvdff  #(1)                             lsu_single_ecc_error_rff(.*, .din(lsu_error_pkt_m.single_ecc_error),                 .dout(lsu_error_pkt_r.single_ecc_error),                 .clk(lsu_c2_r_clk));
-      rvdffe #($bits(eb1_lsu_error_pkt_t)-2) lsu_error_pkt_rff       (.*, .din(lsu_error_pkt_m[$bits(eb1_lsu_error_pkt_t)-1:2]), .dout(lsu_error_pkt_r[$bits(eb1_lsu_error_pkt_t)-1:2]), .en(lsu_error_pkt_m.exc_valid | lsu_error_pkt_m.single_ecc_error | clk_override));
-      rvdff #(2)                              lsu_fir_error_rff       (.*, .din(lsu_fir_error_m[1:0]),                             .dout(lsu_fir_error[1:0]),                               .clk(lsu_c2_r_clk));
-   end
-
-   //Create DMA packet
-   always_comb begin
-      dma_pkt_d = '0;
-      dma_pkt_d.valid   = dma_dccm_req;
-      dma_pkt_d.dma     = 1'b1;
-      dma_pkt_d.store   = dma_mem_write;
-      dma_pkt_d.load    = ~dma_mem_write;
-      dma_pkt_d.by      = (dma_mem_sz[2:0] == 3'b0);
-      dma_pkt_d.half    = (dma_mem_sz[2:0] == 3'b1);
-      dma_pkt_d.word    = (dma_mem_sz[2:0] == 3'b10);
-      dma_pkt_d.dword   = (dma_mem_sz[2:0] == 3'b11);
-   end
-
-   always_comb begin
-      lsu_pkt_d = dec_lsu_valid_raw_d ? lsu_p : dma_pkt_d;
-      lsu_pkt_m_in = lsu_pkt_d;
-      lsu_pkt_r_in = lsu_pkt_m;
-
-      lsu_pkt_d.valid = (lsu_p.valid & ~(flush_m_up & ~lsu_p.fast_int)) | dma_dccm_req;
-      lsu_pkt_m_in.valid = lsu_pkt_d.valid & ~(flush_m_up & ~lsu_pkt_d.dma);
-      lsu_pkt_r_in.valid = lsu_pkt_m.valid & ~(flush_m_up & ~lsu_pkt_m.dma) ;
-   end
-
-   // C2 clock for valid and C1 for other bits of packet
-   rvdff #(1) lsu_pkt_vldmff (.*, .din(lsu_pkt_m_in.valid), .dout(lsu_pkt_m.valid), .clk(lsu_c2_m_clk));
-   rvdff #(1) lsu_pkt_vldrff (.*, .din(lsu_pkt_r_in.valid), .dout(lsu_pkt_r.valid), .clk(lsu_c2_r_clk));
-
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_mff (.*, .din(lsu_pkt_m_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_m[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_m_clk));
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_rff (.*, .din(lsu_pkt_r_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_r[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_r_clk));
-
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_r, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_r[31:0];
-      assign lsu_ld_datafn_corr_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this is really R stage signal
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_r[7:0]}) |
-                                  ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_r[15:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_r[7]}}, lsu_ld_datafn_r[7:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_r[15]}},lsu_ld_datafn_r[15:0]}) |
-                                  ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_r[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-
-   end else begin: L2U1_Plus1_0 // block: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_m, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_m[31:0] = addr_external_m ? bus_read_data_m[31:0] : lsu_ld_data_m[31:0];
-      assign lsu_ld_datafn_corr_r[31:0] = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this result must look at prior stores and merge them in
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {24'b0,lsu_ld_datafn_m[7:0]}) |
-                                  ({32{ lsu_pkt_m.unsign & lsu_pkt_m.half}} & {16'b0,lsu_ld_datafn_m[15:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {{24{  lsu_ld_datafn_m[7]}}, lsu_ld_datafn_m[7:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.half}} & {{16{  lsu_ld_datafn_m[15]}},lsu_ld_datafn_m[15:0]}) |
-                                  ({32{lsu_pkt_m.word}}                     & lsu_ld_datafn_m[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-   end
-
-   // Fast interrupt address
-   assign lsu_fir_addr[31:1]    = lsu_ld_data_corr_r[31:1];
-
-   // absence load/store all 0's
-   assign lsu_addr_d[31:0] = full_addr_d[31:0];
-
-   // Interrupt as a flush source allows the WB to occur
-   assign lsu_commit_r = lsu_pkt_r.valid & (lsu_pkt_r.store | lsu_pkt_r.load) & ~flush_r & ~lsu_pkt_r.dma;
-
-   assign dma_mem_wdata_shifted[63:0] = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-   assign store_data_d[31:0] = dma_dccm_req ? dma_mem_wdata_shifted[31:0] : exu_lsu_rs2_d[31:0];  // Write to PIC still happens in r stage
-
-   assign store_data_m_in[31:0] = (lsu_pkt_d.store_data_bypass_d) ? lsu_result_m[31:0] : store_data_d[31:0];
-
-   assign store_data_m[31:0] = (picm_mask_data_m[31:0] | {32{~addr_in_pic_m}}) & ((lsu_pkt_m.store_data_bypass_m) ? lsu_result_m[31:0] : store_data_pre_m[31:0]);
-
-
-   rvdff #(32)  sdmff (.*, .din(store_data_m_in[31:0]), .dout(store_data_pre_m[31:0]),                       .clk(lsu_store_c1_m_clk));
-
-   rvdff #(32) samff (.*, .din(lsu_addr_d[31:0]), .dout(lsu_addr_m[31:0]), .clk(lsu_c1_m_clk));
-   rvdff #(32) sarff (.*, .din(lsu_addr_m[31:0]), .dout(lsu_addr_r[31:0]), .clk(lsu_c1_r_clk));
-
-   assign end_addr_m[31:3] = ldst_dual_m ? end_addr_pre_m[31:3] : lsu_addr_m[31:3];       // This is for power saving
-   assign end_addr_r[31:3] = ldst_dual_r ? end_addr_pre_r[31:3] : lsu_addr_r[31:3];       // This is for power saving
-
-   rvdffe #(29) end_addr_hi_mff (.*, .din(end_addr_d[31:3]), .dout(end_addr_pre_m[31:3]), .en((lsu_pkt_d.valid & ldst_dual_d) | clk_override));
-   rvdffe #(29) end_addr_hi_rff (.*, .din(end_addr_m[31:3]), .dout(end_addr_pre_r[31:3]), .en((lsu_pkt_m.valid & ldst_dual_m) | clk_override));
-
-   rvdff #(3)  end_addr_lo_mff (.*, .din(end_addr_d[2:0]), .dout(end_addr_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(3)  end_addr_lo_rff (.*, .din(end_addr_m[2:0]), .dout(end_addr_r[2:0]), .clk(lsu_c1_r_clk));
-
-   rvdff #(1) addr_in_dccm_mff(.din(addr_in_dccm_d), .dout(addr_in_dccm_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_dccm_rff(.din(addr_in_dccm_m), .dout(addr_in_dccm_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_in_pic_mff(.din(addr_in_pic_d), .dout(addr_in_pic_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_pic_rff(.din(addr_in_pic_m), .dout(addr_in_pic_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_external_mff(.din(addr_external_d), .dout(addr_external_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_external_rff(.din(addr_external_m), .dout(addr_external_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) access_fault_mff     (.din(access_fault_d),     .dout(access_fault_m),     .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) misaligned_fault_mff (.din(misaligned_fault_d), .dout(misaligned_fault_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(4) exc_mscause_mff      (.din(exc_mscause_d[3:0]), .dout(exc_mscause_m[3:0]), .clk(lsu_c1_m_clk), .*);
-
-   rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_d),    .dout(fir_dccm_access_error_m),    .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_d), .dout(fir_nondccm_access_error_m), .clk(lsu_c1_m_clk), .*);
-
-   rvdffe #(32) bus_read_data_r_ff (.*, .din(bus_read_data_m[31:0]), .dout(bus_read_data_r[31:0]), .en(addr_external_m | clk_override));
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_stbuf.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_stbuf.sv
deleted file mode 100644
index 1704a45..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_stbuf.sv
+++ /dev/null
@@ -1,351 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Store Buffer
-// Comments: Dual writes and single drain
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-module eb1_lsu_stbuf
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-   input logic                           clk,                         // core clock
-   input logic                           rst_l,                       // reset
-
-   input logic                           lsu_stbuf_c1_clk,            // stbuf clock
-   input logic                           lsu_free_c2_clk,             // free clk
-
-   // Store Buffer input
-   input logic                           store_stbuf_reqvld_r,        // core instruction goes to stbuf
-   input logic                           lsu_commit_r,                // lsu commits
-   input logic                           dec_lsu_valid_raw_d,         // Speculative decode valid
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_hi_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_hi_r,           // merged data from the dccm for stores
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_lo_r,           // merged data from the dccm for stores
-
-   // Store Buffer output
-   output logic                          stbuf_reqvld_any,            // stbuf is draining
-   output logic                          stbuf_reqvld_flushed_any,    // Top entry is flushed
-   output logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any,              // address
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any,              // stbuf data
-
-   input  logic                          lsu_stbuf_commit_any,        // pop the stbuf as it commite
-   output logic                          lsu_stbuf_full_any,          // stbuf is full
-   output logic                          lsu_stbuf_empty_any,         // stbuf is empty
-   output logic                          ldst_stbuf_reqvld_r,         // needed for clocking
-
-   input logic [pt.LSU_SB_BITS-1:0]      lsu_addr_d,                  // lsu address D-stage
-   input logic [31:0]                    lsu_addr_m,                  // lsu address M-stage
-   input logic [31:0]                    lsu_addr_r,                  // lsu address R-stage
-
-   input logic [pt.LSU_SB_BITS-1:0]      end_addr_d,                  // lsu end address D-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_m,                  // lsu end address M-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_r,                  // lsu end address R-stage - needed to check unaligned
-
-   input logic                           ldst_dual_d, ldst_dual_m, ldst_dual_r,
-   input logic                           addr_in_dccm_m,              // address is in dccm
-   input logic                           addr_in_dccm_r,              // address is in dccm
-
-   // Forwarding signals
-   input logic                           lsu_cmpen_m,                 // needed for forwarding stbuf - load
-   input eb1_lsu_pkt_t                  lsu_pkt_m,                   // LSU packet M-stage
-   input eb1_lsu_pkt_t                  lsu_pkt_r,                   // LSU packet R-stage
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m,          // stbuf data
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m,          // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m,        // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m,        // stbuf data
-
-   input  logic       scan_mode                                       // Scan mode
-
-);
-
-
-   localparam DEPTH      = pt.LSU_STBUF_DEPTH;
-   localparam DATA_WIDTH = pt.DCCM_DATA_WIDTH;
-   localparam BYTE_WIDTH = pt.DCCM_BYTE_WIDTH;
-   localparam DEPTH_LOG2 = $clog2(DEPTH);
-
-   // These are the fields in the store queue
-   logic [DEPTH-1:0]                     stbuf_vld;
-   logic [DEPTH-1:0]                     stbuf_dma_kill;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addr;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteen;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_data;
-
-   logic [DEPTH-1:0]                     sel_lo;
-   logic [DEPTH-1:0]                     stbuf_wr_en;
-   logic [DEPTH-1:0]                     stbuf_dma_kill_en;
-   logic [DEPTH-1:0]                     stbuf_reset;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addrin;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_datain;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteenin;
-
-   logic [7:0]             store_byteen_ext_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_lo_r;
-
-   logic                   WrPtrEn, RdPtrEn;
-   logic [DEPTH_LOG2-1:0]  WrPtr, RdPtr;
-   logic [DEPTH_LOG2-1:0]  NxtWrPtr, NxtRdPtr;
-   logic [DEPTH_LOG2-1:0]  WrPtrPlus1, WrPtrPlus2, RdPtrPlus1;
-
-   logic                   dual_stbuf_write_r;
-
-   logic                   isdccmst_m, isdccmst_r;
-   logic [3:0]             stbuf_numvld_any, stbuf_specvld_any;
-   logic [1:0]             stbuf_specvld_m, stbuf_specvld_r;
-
-   logic [pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] cmpaddr_hi_m, cmpaddr_lo_m;
-
-   // variables to detect matching from the store queue
-   logic [DEPTH-1:0]                 stbuf_match_hi, stbuf_match_lo;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0] stbuf_fwdbyteenvec_hi, stbuf_fwdbyteenvec_lo;
-   logic [DATA_WIDTH-1:0]            stbuf_fwddata_hi_pre_m, stbuf_fwddata_lo_pre_m;
-   logic [BYTE_WIDTH-1:0]            stbuf_fwdbyteen_hi_pre_m, stbuf_fwdbyteen_lo_pre_m;
-
-   // logic to detect matching from the pipe - needed for store - load forwarding
-   logic [BYTE_WIDTH-1:0]  ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-   logic                   ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_lo_r;
-   // byte_en flowing down
-   logic [7:0]             ldst_byteen_r;
-   logic [7:0]             ldst_byteen_ext_r;
-   // fwd data through the pipe
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   // coalescing signals
-   logic [DEPTH-1:0]      store_matchvec_lo_r, store_matchvec_hi_r;
-   logic                  store_coalesce_lo_r, store_coalesce_hi_r;
-
-   //----------------------------------------
-   // Logic starts here
-   //----------------------------------------
-   // Create high/low byte enables
-   assign store_byteen_ext_r[7:0]           = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-   assign store_byteen_hi_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[7:4] & {4{lsu_pkt_r.store}};
-   assign store_byteen_lo_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[3:0] & {4{lsu_pkt_r.store}};
-
-   assign RdPtrPlus1[DEPTH_LOG2-1:0]     = RdPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus1[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus2[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 2'b10;
-
-   // ecc error on both hi/lo
-   assign dual_stbuf_write_r   = ldst_dual_r & store_stbuf_reqvld_r;
-   assign ldst_stbuf_reqvld_r  = ((lsu_commit_r | lsu_pkt_r.dma) & store_stbuf_reqvld_r);
-
-  // Store Buffer coalescing
-   for (genvar i=0; i<DEPTH; i++) begin: FindMatchEntry
-       assign store_matchvec_lo_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == lsu_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & ~stbuf_reset[i];
-       assign store_matchvec_hi_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == end_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & dual_stbuf_write_r & ~stbuf_reset[i];
-   end: FindMatchEntry
-
-   assign store_coalesce_lo_r = |store_matchvec_lo_r[DEPTH-1:0];
-   assign store_coalesce_hi_r = |store_matchvec_hi_r[DEPTH-1:0];
-
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Allocate new in this entry if :
-      // 1. wrptr, single allocate, lo did not coalesce
-      // 2. wrptr, double allocate, lo ^ hi coalesced
-      // 3. wrptr + 1, double alloacte, niether lo or hi coalesced
-      // Also update if there is a hi or a lo coalesce to this entry
-      // Store Buffer instantiation
-      for (genvar i=0; i<DEPTH; i++) begin: GenStBuf
-         assign stbuf_wr_en[i] = ldst_stbuf_reqvld_r & (
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  ~store_coalesce_lo_r)   |                                                    // Allocate : new Lo
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  dual_stbuf_write_r & ~store_coalesce_hi_r) |                               // Allocate : only 1 new Write Either
-                                   ( (i == WrPtrPlus1[DEPTH_LOG2-1:0]) &  dual_stbuf_write_r & ~(store_coalesce_lo_r | store_coalesce_hi_r)) |     // Allocate2 : 2 new so Write Hi
-                                   store_matchvec_lo_r[i] | store_matchvec_hi_r[i]);                                                                 // Coalesced Write Lo or Hi
-         assign stbuf_reset[i] = (lsu_stbuf_commit_any | stbuf_reqvld_flushed_any) & (i == RdPtr[DEPTH_LOG2-1:0]);
-
-         // Mux select for start/end address
-         assign sel_lo[i]                         = ((~ldst_dual_r | store_stbuf_reqvld_r) & (i == WrPtr[DEPTH_LOG2-1:0]) & ~store_coalesce_lo_r) |   // lo allocated new entry
-                                                    store_matchvec_lo_r[i];                                                                                                           // lo coalesced in to this entry
-         assign stbuf_addrin[i][pt.LSU_SB_BITS-1:0]  = sel_lo[i] ? lsu_addr_r[pt.LSU_SB_BITS-1:0]       : end_addr_r[pt.LSU_SB_BITS-1:0];
-         assign stbuf_byteenin[i][BYTE_WIDTH-1:0] = sel_lo[i] ? (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_lo_r[BYTE_WIDTH-1:0])          : (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_hi_r[BYTE_WIDTH-1:0]);
-         assign stbuf_datain[i][7:0]              = sel_lo[i] ? ((~stbuf_byteen[i][0] | store_byteen_lo_r[0]) ? store_datafn_lo_r[7:0]   : stbuf_data[i][7:0])    :
-                                                                ((~stbuf_byteen[i][0] | store_byteen_hi_r[0]) ? store_datafn_hi_r[7:0]   : stbuf_data[i][7:0]);
-         assign stbuf_datain[i][15:8]             = sel_lo[i] ? ((~stbuf_byteen[i][1] | store_byteen_lo_r[1]) ? store_datafn_lo_r[15:8]  : stbuf_data[i][15:8])    :
-                                                                ((~stbuf_byteen[i][1] | store_byteen_hi_r[1]) ? store_datafn_hi_r[15:8]  : stbuf_data[i][15:8]);
-         assign stbuf_datain[i][23:16]            = sel_lo[i] ? ((~stbuf_byteen[i][2] | store_byteen_lo_r[2]) ? store_datafn_lo_r[23:16] : stbuf_data[i][23:16])    :
-                                                                ((~stbuf_byteen[i][2] | store_byteen_hi_r[2]) ? store_datafn_hi_r[23:16] : stbuf_data[i][23:16]);
-         assign stbuf_datain[i][31:24]            = sel_lo[i] ? ((~stbuf_byteen[i][3] | store_byteen_lo_r[3]) ? store_datafn_lo_r[31:24] : stbuf_data[i][31:24])    :
-                                                                ((~stbuf_byteen[i][3] | store_byteen_hi_r[3]) ? store_datafn_hi_r[31:24] : stbuf_data[i][31:24]);
-
-         rvdffsc #(.WIDTH(1))              stbuf_vldff         (.din(1'b1),                                .dout(stbuf_vld[i]),                      .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffsc #(.WIDTH(1))              stbuf_killff        (.din(1'b1),                                .dout(stbuf_dma_kill[i]),                 .en(stbuf_dma_kill_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffe  #(.WIDTH(pt.LSU_SB_BITS)) stbuf_addrff        (.din(stbuf_addrin[i][pt.LSU_SB_BITS-1:0]), .dout(stbuf_addr[i][pt.LSU_SB_BITS-1:0]), .en(stbuf_wr_en[i]), .*);
-         rvdffsc #(.WIDTH(BYTE_WIDTH))     stbuf_byteenff      (.din(stbuf_byteenin[i][BYTE_WIDTH-1:0]),   .dout(stbuf_byteen[i][BYTE_WIDTH-1:0]),   .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_stbuf_c1_clk), .*);
-         rvdffe  #(.WIDTH(DATA_WIDTH))     stbuf_dataff        (.din(stbuf_datain[i][DATA_WIDTH-1:0]),     .dout(stbuf_data[i][DATA_WIDTH-1:0]),     .en(stbuf_wr_en[i]), .*);
-      end
-   end else begin: Gen_dccm_disable
-      assign stbuf_wr_en[DEPTH-1:0] = '0;
-      assign stbuf_reset[DEPTH-1:0] = '0;
-      assign stbuf_vld[DEPTH-1:0]   = '0;
-      assign stbuf_dma_kill[DEPTH-1:0] = '0;
-      assign stbuf_addr[DEPTH-1:0]  = '0;
-      assign stbuf_byteen[DEPTH-1:0] = '0;
-      assign stbuf_data[DEPTH-1:0]   = '0;
-   end
-
-   // Store Buffer drain logic
-   assign stbuf_reqvld_flushed_any            = stbuf_vld[RdPtr] & stbuf_dma_kill[RdPtr];
-   assign stbuf_reqvld_any                    = stbuf_vld[RdPtr] & ~stbuf_dma_kill[RdPtr] & ~(|stbuf_dma_kill_en[DEPTH-1:0]);  // Don't drain if some kill bit is being set this cycle
-   assign stbuf_addr_any[pt.LSU_SB_BITS-1:0]  = stbuf_addr[RdPtr][pt.LSU_SB_BITS-1:0];
-   assign stbuf_data_any[DATA_WIDTH-1:0]      = stbuf_data[RdPtr][DATA_WIDTH-1:0];
-
-   // Update the RdPtr/WrPtr logic
-   // Need to revert the WrPtr for flush cases. Also revert the pipe WrPtrs
-   assign WrPtrEn                  = (ldst_stbuf_reqvld_r  & ~dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r))  |  // writing 1 and did not coalesce
-                                     (ldst_stbuf_reqvld_r  &  dual_stbuf_write_r & ~(store_coalesce_hi_r & store_coalesce_lo_r));    // writing 2 and atleast 1 did not coalesce
-   assign NxtWrPtr[DEPTH_LOG2-1:0] = (ldst_stbuf_reqvld_r & dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r)) ? WrPtrPlus2[DEPTH_LOG2-1:0] : WrPtrPlus1[DEPTH_LOG2-1:0];
-   assign RdPtrEn                  = lsu_stbuf_commit_any | stbuf_reqvld_flushed_any;
-   assign NxtRdPtr[DEPTH_LOG2-1:0] = RdPtrPlus1[DEPTH_LOG2-1:0];
-
-   always_comb begin
-      stbuf_numvld_any[3:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_numvld_any[3:0] += {3'b0, stbuf_vld[i]};
-      end
-   end
-
-    // These go to store buffer to detect full
-   assign isdccmst_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_in_dccm_m & ~lsu_pkt_m.dma;
-   assign isdccmst_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~lsu_pkt_r.dma;
-
-   assign stbuf_specvld_m[1:0] = {1'b0,isdccmst_m} << (isdccmst_m & ldst_dual_m);
-   assign stbuf_specvld_r[1:0] = {1'b0,isdccmst_r} << (isdccmst_r & ldst_dual_r);
-   assign stbuf_specvld_any[3:0] = stbuf_numvld_any[3:0] +  {2'b0, stbuf_specvld_m[1:0]} + {2'b0, stbuf_specvld_r[1:0]};
-
-   assign lsu_stbuf_full_any  = (~ldst_dual_d & dec_lsu_valid_raw_d) ? (stbuf_specvld_any[3:0] >= DEPTH) : (stbuf_specvld_any[3:0] >= (DEPTH-1));
-   assign lsu_stbuf_empty_any = (stbuf_numvld_any[3:0] == 4'b0);
-
-   // Load forwarding logic from the store queue
-   assign cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = end_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   assign cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = lsu_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   always_comb begin: GenLdFwd
-      stbuf_fwdbyteen_hi_pre_m[BYTE_WIDTH-1:0]   = '0;
-      stbuf_fwdbyteen_lo_pre_m[BYTE_WIDTH-1:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_match_hi[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-         stbuf_match_lo[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-
-         // Kill the store buffer entry if there is a dma store since it already updated the dccm
-         stbuf_dma_kill_en[i] = (stbuf_match_hi[i] | stbuf_match_lo[i]) & lsu_pkt_m.valid & lsu_pkt_m.dma & lsu_pkt_m.store;
-
-         for (int j=0; j<BYTE_WIDTH; j++) begin
-            stbuf_fwdbyteenvec_hi[i][j] = stbuf_match_hi[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_hi_pre_m[j]  |= stbuf_fwdbyteenvec_hi[i][j];
-
-            stbuf_fwdbyteenvec_lo[i][j] = stbuf_match_lo[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_lo_pre_m[j]  |= stbuf_fwdbyteenvec_lo[i][j];
-         end
-      end
-   end // block: GenLdFwd
-
-   always_comb begin: GenLdData
-      stbuf_fwddata_hi_pre_m[31:0]   = '0;
-      stbuf_fwddata_lo_pre_m[31:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_fwddata_hi_pre_m[31:0] |= {32{stbuf_match_hi[i]}} & stbuf_data[i][31:0];
-         stbuf_fwddata_lo_pre_m[31:0] |= {32{stbuf_match_lo[i]}} & stbuf_data[i][31:0];
-
-      end
-
-   end // block: GenLdData
-
-   // Create Hi/Lo signals - needed for the pipe forwarding
-   assign ldst_byteen_r[7:0] =  ({8{lsu_pkt_r.by}}    & 8'b0000_0001) |
-                                 ({8{lsu_pkt_r.half}}  & 8'b0000_0011) |
-                                 ({8{lsu_pkt_r.word}}  & 8'b0000_1111) |
-                                 ({8{lsu_pkt_r.dword}} & 8'b1111_1111);
-
-   assign ldst_byteen_ext_r[7:0] = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-
-   for (genvar i=0; i<BYTE_WIDTH; i++) begin
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-       assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-       assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign stbuf_fwdbyteen_hi_m[i] = ld_byte_hit_hi[i] | stbuf_fwdbyteen_hi_pre_m[i];
-      assign stbuf_fwdbyteen_lo_m[i] = ld_byte_hit_lo[i] | stbuf_fwdbyteen_lo_pre_m[i];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_lo_m[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : stbuf_fwddata_lo_pre_m[(8*i)+7:(8*i)];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_hi_m[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : stbuf_fwddata_hi_pre_m[(8*i)+7:(8*i)];
-   end
-
-   // Flops
-   rvdffs #(.WIDTH(DEPTH_LOG2)) WrPtrff (.din(NxtWrPtr[DEPTH_LOG2-1:0]), .dout(WrPtr[DEPTH_LOG2-1:0]), .en(WrPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-   rvdffs #(.WIDTH(DEPTH_LOG2)) RdPtrff (.din(NxtRdPtr[DEPTH_LOG2-1:0]), .dout(RdPtr[DEPTH_LOG2-1:0]), .en(RdPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-
-`ifdef RV_ASSERT_ON
-
-   assert_stbuf_overflow: assert #0 (stbuf_specvld_any[2:0] <= DEPTH);
-   property stbuf_wren_store_dccm;
-      @(posedge clk)  disable iff(~rst_l) (|stbuf_wr_en[DEPTH-1:0]) |-> (lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r);
-   endproperty
-   assert_stbuf_wren_store_dccm: assert property (stbuf_wren_store_dccm) else
-      $display("Illegal store buffer write");
-
-`endif
-
-endmodule
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_trigger.sv b/verilog/rtl/BrqRV_EB1/design/eb1_lsu_trigger.sv
deleted file mode 100644
index d3c5058..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_lsu_trigger.sv
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU Trigger logic
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_trigger
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,            // trigger packet from dec
-   input eb1_lsu_pkt_t           lsu_pkt_m,                  // lsu packet
-   input logic [31:0]             lsu_addr_m,                 // address
-   input logic [31:0]             store_data_m,               // store data
-
-   output logic [3:0]             lsu_trigger_match_m         // match result
-);
-
-   logic               trigger_enable;
-   logic [3:0][31:0]  lsu_match_data;
-   logic [3:0]        lsu_trigger_data_match;
-   logic [31:0]       store_data_trigger_m;
-   logic [31:0]       ldst_addr_trigger_m;
-
-   // Generate the trigger enable (This is for power)
-   always_comb begin
-      trigger_enable = 1'b0;
-      for (int i=0; i<4; i++) begin
-         trigger_enable |= trigger_pkt_any[i].m;
-      end
-   end
-
-   assign store_data_trigger_m[31:0] = {({16{lsu_pkt_m.word}} & store_data_m[31:16]),({8{(lsu_pkt_m.half | lsu_pkt_m.word)}} & store_data_m[15:8]), store_data_m[7:0]} & {32{trigger_enable}};
-   assign ldst_addr_trigger_m[31:0]  = lsu_addr_m[31:0] & {32{trigger_enable}};
-
-
-   for (genvar i=0; i<4; i++) begin
-      assign lsu_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select}} & ldst_addr_trigger_m[31:0]) |
-                                       ({32{trigger_pkt_any[i].select & trigger_pkt_any[i].store}} & store_data_trigger_m[31:0]);
-
-      rvmaskandmatch trigger_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(lsu_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(lsu_trigger_data_match[i]));
-
-      assign lsu_trigger_match_m[i] = lsu_pkt_m.valid & ~lsu_pkt_m.dma & trigger_enable &
-                                        ((trigger_pkt_any[i].store & lsu_pkt_m.store) | (trigger_pkt_any[i].load & lsu_pkt_m.load & ~trigger_pkt_any[i].select)) &
-                                        lsu_trigger_data_match[i];
-   end
-
-
-endmodule // eb1_lsu_trigger
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_mem.sv b/verilog/rtl/BrqRV_EB1/design/eb1_mem.sv
deleted file mode 100644
index fb3024a..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_mem.sv
+++ /dev/null
@@ -1,142 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-module eb1_mem
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-
-   input logic         vccd1,
-   input logic		vssd1,
-   input logic         clk,
-   input logic         rst_l,
-   input logic         dccm_clk_override,
-   input logic         icm_clk_override,
-   input logic         dec_tlu_core_ecc_disable,
-
-   //DCCM ports
-   input logic         dccm_wren,
-   input logic         dccm_rden,
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,
-
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_lo,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_hi,
-
-//`ifdef pt.DCCM_ENABLE
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
-
-//`endif
-
-   //ICCM ports
-   input eb1_ccm_ext_in_pkt_t   [pt.ICCM_NUM_BANKS-1:0]  iccm_ext_in_pkt,
-
-   input logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,
-   input logic                                        iccm_buf_correct_ecc,                    // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM is doing a single bit error correct cycle
-   input logic         iccm_wren,
-   input logic         iccm_rden,
-   input logic [2:0]   iccm_wr_size,
-   input logic [77:0]  iccm_wr_data,
-
-   output logic [63:0] iccm_rd_data,
-   output logic [77:0] iccm_rd_data_ecc,
-
-   // Icache and Itag Ports
-
-   input  logic [31:1]  ic_rw_addr,
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]   ic_tag_valid,
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]   ic_wr_en,
-   input  logic         ic_rd_en,
-   input  logic [63:0] ic_premux_data,      // Premux data to be muxed with each way of the Icache.
-   input  logic         ic_sel_premux_data, // Premux data sel
-   input eb1_ic_data_ext_in_pkt_t   [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]         ic_data_ext_in_pkt,
-   input eb1_ic_tag_ext_in_pkt_t    [pt.ICACHE_NUM_WAYS-1:0]           ic_tag_ext_in_pkt,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-   output logic [70:0]               ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   input  logic                      ic_debug_rd_en,     // Icache debug rd
-   input  logic                      ic_debug_wr_en,     // Icache debug wr
-   input  logic                      ic_debug_tag_array, // Debug tag array
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-   output logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   output logic [25:0]               ictag_debug_rd_data,// Debug icache tag.
-
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    // ecc error per bank
-   output logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,          // parity error per bank
-   output logic [pt.ICACHE_NUM_WAYS-1:0]   ic_rd_hit,
-   output logic         ic_tag_perr,        // Icache Tag parity error
-
-
-   input  logic         scan_mode
-
-);
-
-   logic active_clk;
-   rvoclkhdr active_cg   ( .en(1'b1),         .l1clk(active_clk), .* );
-
-   // DCCM Instantiation
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      eb1_lsu_dccm_mem #(.pt(pt)) dccm (
-         .clk_override(dccm_clk_override),
-         .*
-      );
-   end else begin: Gen_dccm_disable
-      assign dccm_rd_data_lo = '0;
-      assign dccm_rd_data_hi = '0;
-   end
-
-if ( pt.ICACHE_ENABLE ) begin: icache
-   eb1_ifu_ic_mem #(.pt(pt)) icm  (
-      .clk_override(icm_clk_override),
-      .*
-   );
-end
-else  begin
-   assign   ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] = '0;
-   assign   ic_tag_perr    = '0 ;
-   assign   ic_rd_data  = '0 ;
-   assign   ictag_debug_rd_data  = '0 ;
-end // else: !if( pt.ICACHE_ENABLE )
-
-
-
-if (pt.ICCM_ENABLE) begin : iccm
-   eb1_ifu_iccm_mem  #(.pt(pt)) iccm (.*,
-                  .clk_override(icm_clk_override),
-                  .iccm_rw_addr(iccm_rw_addr[pt.ICCM_BITS-1:1]),
-                  .iccm_rd_data(iccm_rd_data[63:0])
-                   );
-end
-else  begin
-   assign  iccm_rd_data    = '0 ;
-   assign iccm_rd_data_ecc = '0 ;
-end
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_param.vh b/verilog/rtl/BrqRV_EB1/design/eb1_param.vh
deleted file mode 100644
index 77adbc4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_param.vh
+++ /dev/null
@@ -1,175 +0,0 @@
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-}
-// parameter eb1_param_t pt = 2271'h0404020000E0200000000000008081000030400040081E090B040100060210C00000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC103020401C213840103C3C01000000040818428042010840830C2010281840200081002008E0C0801004040800C01002100400606810104100C080C080200810A0AFFFF00000102101800000000000000000000000000000000000000000000000000000000000000000000000000000000007FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF8001080C080818080007806000003C043C04003E02008084021
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_pdef.vh b/verilog/rtl/BrqRV_EB1/design/eb1_pdef.vh
deleted file mode 100644
index af6de1e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_pdef.vh
+++ /dev/null
@@ -1,175 +0,0 @@
-typedef struct packed {
-	bit [7:0]      BHT_ADDR_HI;
-	bit [5:0]      BHT_ADDR_LO;
-	bit [14:0]     BHT_ARRAY_DEPTH;
-	bit [4:0]      BHT_GHR_HASH_1;
-	bit [7:0]      BHT_GHR_SIZE;
-	bit [15:0]     BHT_SIZE;
-	bit [4:0]      BITMANIP_ZBA;
-	bit [4:0]      BITMANIP_ZBB;
-	bit [4:0]      BITMANIP_ZBC;
-	bit [4:0]      BITMANIP_ZBE;
-	bit [4:0]      BITMANIP_ZBF;
-	bit [4:0]      BITMANIP_ZBP;
-	bit [4:0]      BITMANIP_ZBR;
-	bit [4:0]      BITMANIP_ZBS;
-	bit [8:0]      BTB_ADDR_HI;
-	bit [5:0]      BTB_ADDR_LO;
-	bit [12:0]     BTB_ARRAY_DEPTH;
-	bit [4:0]      BTB_BTAG_FOLD;
-	bit [8:0]      BTB_BTAG_SIZE;
-	bit [4:0]      BTB_ENABLE;
-	bit [4:0]      BTB_FOLD2_INDEX_HASH;
-	bit [4:0]      BTB_FULLYA;
-	bit [8:0]      BTB_INDEX1_HI;
-	bit [8:0]      BTB_INDEX1_LO;
-	bit [8:0]      BTB_INDEX2_HI;
-	bit [8:0]      BTB_INDEX2_LO;
-	bit [8:0]      BTB_INDEX3_HI;
-	bit [8:0]      BTB_INDEX3_LO;
-	bit [13:0]     BTB_SIZE;
-	bit [8:0]      BTB_TOFFSET_SIZE;
-	bit            BUILD_AHB_LITE;
-	bit [4:0]      BUILD_AXI4;
-	bit [4:0]      BUILD_AXI_NATIVE;
-	bit [5:0]      BUS_PRTY_DEFAULT;
-	bit [35:0]     DATA_ACCESS_ADDR0;
-	bit [35:0]     DATA_ACCESS_ADDR1;
-	bit [35:0]     DATA_ACCESS_ADDR2;
-	bit [35:0]     DATA_ACCESS_ADDR3;
-	bit [35:0]     DATA_ACCESS_ADDR4;
-	bit [35:0]     DATA_ACCESS_ADDR5;
-	bit [35:0]     DATA_ACCESS_ADDR6;
-	bit [35:0]     DATA_ACCESS_ADDR7;
-	bit [4:0]      DATA_ACCESS_ENABLE0;
-	bit [4:0]      DATA_ACCESS_ENABLE1;
-	bit [4:0]      DATA_ACCESS_ENABLE2;
-	bit [4:0]      DATA_ACCESS_ENABLE3;
-	bit [4:0]      DATA_ACCESS_ENABLE4;
-	bit [4:0]      DATA_ACCESS_ENABLE5;
-	bit [4:0]      DATA_ACCESS_ENABLE6;
-	bit [4:0]      DATA_ACCESS_ENABLE7;
-	bit [35:0]     DATA_ACCESS_MASK0;
-	bit [35:0]     DATA_ACCESS_MASK1;
-	bit [35:0]     DATA_ACCESS_MASK2;
-	bit [35:0]     DATA_ACCESS_MASK3;
-	bit [35:0]     DATA_ACCESS_MASK4;
-	bit [35:0]     DATA_ACCESS_MASK5;
-	bit [35:0]     DATA_ACCESS_MASK6;
-	bit [35:0]     DATA_ACCESS_MASK7;
-	bit [6:0]      DCCM_BANK_BITS;
-	bit [8:0]      DCCM_BITS;
-	bit [6:0]      DCCM_BYTE_WIDTH;
-	bit [9:0]      DCCM_DATA_WIDTH;
-	bit [6:0]      DCCM_ECC_WIDTH;
-	bit [4:0]      DCCM_ENABLE;
-	bit [9:0]      DCCM_FDATA_WIDTH;
-	bit [7:0]      DCCM_INDEX_BITS;
-	bit [8:0]      DCCM_NUM_BANKS;
-	bit [7:0]      DCCM_REGION;
-	bit [35:0]     DCCM_SADR;
-	bit [13:0]     DCCM_SIZE;
-	bit [5:0]      DCCM_WIDTH_BITS;
-	bit [6:0]      DIV_BIT;
-	bit [4:0]      DIV_NEW;
-	bit [6:0]      DMA_BUF_DEPTH;
-	bit [8:0]      DMA_BUS_ID;
-	bit [5:0]      DMA_BUS_PRTY;
-	bit [7:0]      DMA_BUS_TAG;
-	bit [4:0]      FAST_INTERRUPT_REDIRECT;
-	bit [4:0]      ICACHE_2BANKS;
-	bit [6:0]      ICACHE_BANK_BITS;
-	bit [6:0]      ICACHE_BANK_HI;
-	bit [5:0]      ICACHE_BANK_LO;
-	bit [7:0]      ICACHE_BANK_WIDTH;
-	bit [6:0]      ICACHE_BANKS_WAY;
-	bit [7:0]      ICACHE_BEAT_ADDR_HI;
-	bit [7:0]      ICACHE_BEAT_BITS;
-	bit [4:0]      ICACHE_BYPASS_ENABLE;
-	bit [17:0]     ICACHE_DATA_DEPTH;
-	bit [6:0]      ICACHE_DATA_INDEX_LO;
-	bit [10:0]     ICACHE_DATA_WIDTH;
-	bit [4:0]      ICACHE_ECC;
-	bit [4:0]      ICACHE_ENABLE;
-	bit [10:0]     ICACHE_FDATA_WIDTH;
-	bit [8:0]      ICACHE_INDEX_HI;
-	bit [10:0]     ICACHE_LN_SZ;
-	bit [7:0]      ICACHE_NUM_BEATS;
-	bit [7:0]      ICACHE_NUM_BYPASS;
-	bit [7:0]      ICACHE_NUM_BYPASS_WIDTH;
-	bit [6:0]      ICACHE_NUM_WAYS;
-	bit [4:0]      ICACHE_ONLY;
-	bit [7:0]      ICACHE_SCND_LAST;
-	bit [12:0]     ICACHE_SIZE;
-	bit [6:0]      ICACHE_STATUS_BITS;
-	bit [4:0]      ICACHE_TAG_BYPASS_ENABLE;
-	bit [16:0]     ICACHE_TAG_DEPTH;
-	bit [6:0]      ICACHE_TAG_INDEX_LO;
-	bit [8:0]      ICACHE_TAG_LO;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS_WIDTH;
-	bit [4:0]      ICACHE_WAYPACK;
-	bit [6:0]      ICCM_BANK_BITS;
-	bit [8:0]      ICCM_BANK_HI;
-	bit [8:0]      ICCM_BANK_INDEX_LO;
-	bit [8:0]      ICCM_BITS;
-	bit [4:0]      ICCM_ENABLE;
-	bit [4:0]      ICCM_ICACHE;
-	bit [7:0]      ICCM_INDEX_BITS;
-	bit [8:0]      ICCM_NUM_BANKS;
-	bit [4:0]      ICCM_ONLY;
-	bit [7:0]      ICCM_REGION;
-	bit [35:0]     ICCM_SADR;
-	bit [13:0]     ICCM_SIZE;
-	bit [4:0]      IFU_BUS_ID;
-	bit [5:0]      IFU_BUS_PRTY;
-	bit [7:0]      IFU_BUS_TAG;
-	bit [35:0]     INST_ACCESS_ADDR0;
-	bit [35:0]     INST_ACCESS_ADDR1;
-	bit [35:0]     INST_ACCESS_ADDR2;
-	bit [35:0]     INST_ACCESS_ADDR3;
-	bit [35:0]     INST_ACCESS_ADDR4;
-	bit [35:0]     INST_ACCESS_ADDR5;
-	bit [35:0]     INST_ACCESS_ADDR6;
-	bit [35:0]     INST_ACCESS_ADDR7;
-	bit [4:0]      INST_ACCESS_ENABLE0;
-	bit [4:0]      INST_ACCESS_ENABLE1;
-	bit [4:0]      INST_ACCESS_ENABLE2;
-	bit [4:0]      INST_ACCESS_ENABLE3;
-	bit [4:0]      INST_ACCESS_ENABLE4;
-	bit [4:0]      INST_ACCESS_ENABLE5;
-	bit [4:0]      INST_ACCESS_ENABLE6;
-	bit [4:0]      INST_ACCESS_ENABLE7;
-	bit [35:0]     INST_ACCESS_MASK0;
-	bit [35:0]     INST_ACCESS_MASK1;
-	bit [35:0]     INST_ACCESS_MASK2;
-	bit [35:0]     INST_ACCESS_MASK3;
-	bit [35:0]     INST_ACCESS_MASK4;
-	bit [35:0]     INST_ACCESS_MASK5;
-	bit [35:0]     INST_ACCESS_MASK6;
-	bit [35:0]     INST_ACCESS_MASK7;
-	bit [4:0]      LOAD_TO_USE_PLUS1;
-	bit [4:0]      LSU2DMA;
-	bit [4:0]      LSU_BUS_ID;
-	bit [5:0]      LSU_BUS_PRTY;
-	bit [7:0]      LSU_BUS_TAG;
-	bit [8:0]      LSU_NUM_NBLOAD;
-	bit [6:0]      LSU_NUM_NBLOAD_WIDTH;
-	bit [8:0]      LSU_SB_BITS;
-	bit [7:0]      LSU_STBUF_DEPTH;
-	bit [4:0]      NO_ICCM_NO_ICACHE;
-	bit [4:0]      PIC_2CYCLE;
-	bit [35:0]     PIC_BASE_ADDR;
-	bit [8:0]      PIC_BITS;
-	bit [7:0]      PIC_INT_WORDS;
-	bit [7:0]      PIC_REGION;
-	bit [12:0]     PIC_SIZE;
-	bit [11:0]     PIC_TOTAL_INT;
-	bit [12:0]     PIC_TOTAL_INT_PLUS1;
-	bit [7:0]      RET_STACK_SIZE;
-	bit [4:0]      SB_BUS_ID;
-	bit [5:0]      SB_BUS_PRTY;
-	bit [7:0]      SB_BUS_TAG;
-	bit [4:0]      TIMER_LEGAL_EN;
-} eb1_param_t;
-
diff --git a/verilog/rtl/BrqRV_EB1/design/eb1_pic_ctrl.sv b/verilog/rtl/BrqRV_EB1/design/eb1_pic_ctrl.sv
deleted file mode 100644
index 5608da4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/eb1_pic_ctrl.sv
+++ /dev/null
@@ -1,640 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Programmable Interrupt Controller
-// Comments:
-//********************************************************************************
-
-module eb1_pic_ctrl #(
-`include "eb1_param.vh"
- )
-                  (
-
-                     input  logic                   clk,                  // Core clock
-                     input  logic                   free_clk,             // free clock
-                     input  logic                   rst_l,                // Reset for all flops
-                     input  logic                   clk_override,         // Clock over-ride for gating
-                     input  logic                   io_clk_override,      // PIC IO  Clock over-ride for gating
-                     input  logic [pt.PIC_TOTAL_INT_PLUS1-1:0]   extintsrc_req,  // Interrupt requests
-                     input  logic [31:0]            picm_rdaddr,          // Address of the register
-                     input  logic [31:0]            picm_wraddr,          // Address of the register
-                     input  logic [31:0]            picm_wr_data,         // Data to be written to the register
-                     input  logic                   picm_wren,            // Write enable to the register
-                     input  logic                   picm_rden,            // Read enable for the register
-                     input  logic                   picm_mken,            // Read the Mask for the register
-                     input  logic [3:0]             meicurpl,             // Current Priority Level
-                     input  logic [3:0]             meipt,                // Current Priority Threshold
-
-                     output logic                   mexintpend,           // External Inerrupt request to the core
-                     output logic [7:0]             claimid,              // Claim Id of the requested interrupt
-                     output logic [3:0]             pl,                   // Priority level of the requested interrupt
-                     output logic [31:0]            picm_rd_data,         // Read data of the register
-                     output logic                   mhwakeup,             // Wake-up interrupt request
-                     input  logic                   scan_mode             // scan mode
-
-);
-
-localparam NUM_LEVELS            = $clog2(pt.PIC_TOTAL_INT_PLUS1);
-localparam INTPRIORITY_BASE_ADDR = pt.PIC_BASE_ADDR ;
-localparam INTPEND_BASE_ADDR     = pt.PIC_BASE_ADDR + 32'h00001000 ;
-localparam INTENABLE_BASE_ADDR   = pt.PIC_BASE_ADDR + 32'h00002000 ;
-localparam EXT_INTR_PIC_CONFIG   = pt.PIC_BASE_ADDR + 32'h00003000 ;
-localparam EXT_INTR_GW_CONFIG    = pt.PIC_BASE_ADDR + 32'h00004000 ;
-localparam EXT_INTR_GW_CLEAR     = pt.PIC_BASE_ADDR + 32'h00005000 ;
-
-
-localparam INTPEND_SIZE          = (pt.PIC_TOTAL_INT_PLUS1 < 32)  ? 32  :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 64)  ? 64  :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 128) ? 128 :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 256) ? 256 :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 512) ? 512 :  1024 ;
-
-localparam INT_GRPS              =   INTPEND_SIZE / 32 ;
-localparam INTPRIORITY_BITS      =  4 ;
-localparam ID_BITS               =  8 ;
-localparam int GW_CONFIG[pt.PIC_TOTAL_INT_PLUS1-1:0] = '{default:0} ;
-
-localparam INT_ENABLE_GRPS       =   (pt.PIC_TOTAL_INT_PLUS1 - 1)  / 4 ;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]           intenable_clk_enable ;
-logic [INT_ENABLE_GRPS:0]                    intenable_clk_enable_grp ;
-logic [INT_ENABLE_GRPS:0]                    gw_clk ;
-
-logic  addr_intpend_base_match;
-
-logic  raddr_config_pic_match ;
-logic  raddr_intenable_base_match;
-logic  raddr_intpriority_base_match;
-logic  raddr_config_gw_base_match ;
-
-logic  waddr_config_pic_match ;
-logic  waddr_intpriority_base_match;
-logic  waddr_intenable_base_match;
-logic  waddr_config_gw_base_match ;
-logic  addr_clear_gw_base_match ;
-
-logic  mexintpend_in;
-logic  mhwakeup_in ;
-logic  intpend_reg_read ;
-
-logic [31:0]                                 picm_rd_data_in, intpend_rd_out;
-logic                                        intenable_rd_out ;
-logic [INTPRIORITY_BITS-1:0]                 intpriority_rd_out;
-logic [1:0]                                  gw_config_rd_out;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpriority_reg;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpriority_reg_inv;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intpriority_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intpriority_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [1:0]                  gw_config_reg;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_config_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_config_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_clear_reg_we;
-
-logic [INTPEND_SIZE-1:0]                     intpend_reg_extended;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpend_w_prior_en;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [ID_BITS-1:0]          intpend_id;
-logic [INTPRIORITY_BITS-1:0]                 maxint;
-logic [INTPRIORITY_BITS-1:0]                 selected_int_priority;
-logic [INT_GRPS-1:0] [31:0]                  intpend_rd_part_out ;
-
-logic                                        config_reg;
-logic                                        intpriord;
-logic                                        config_reg_we ;
-logic                                        config_reg_re ;
-logic                                        config_reg_in ;
-logic                                        prithresh_reg_write , prithresh_reg_read;
-logic                                        intpriority_reg_read ;
-logic                                        intenable_reg_read   ;
-logic                                        gw_config_reg_read   ;
-logic                                        picm_wren_ff , picm_rden_ff ;
-logic [31:0]                                 picm_raddr_ff;
-logic [31:0]                                 picm_waddr_ff;
-logic [31:0]                                 picm_wr_data_ff;
-logic [3:0]                                  mask;
-logic                                        picm_mken_ff;
-logic [ID_BITS-1:0]                          claimid_in ;
-logic [INTPRIORITY_BITS-1:0]                 pl_in ;
-logic [INTPRIORITY_BITS-1:0]                 pl_in_q ;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        extintsrc_req_sync;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        extintsrc_req_gw;
-   logic                                                  picm_bypass_ff;
-
-// clkens
-   logic                                     pic_raddr_c1_clken;
-   logic                                     pic_waddr_c1_clken;
-   logic                                     pic_data_c1_clken;
-   logic                                     pic_pri_c1_clken;
-   logic                                     pic_int_c1_clken;
-   logic                                     gw_config_c1_clken;
-
-// clocks
-   logic                                     pic_raddr_c1_clk;
-   logic                                     pic_data_c1_clk;
-   logic                                     pic_pri_c1_clk;
-   logic                                     pic_int_c1_clk;
-   logic                                     gw_config_c1_clk;
-
-// ---- Clock gating section ------
-// c1 clock enables
-   assign pic_raddr_c1_clken  = picm_mken | picm_rden | clk_override;
-   assign pic_data_c1_clken   = picm_wren | clk_override;
-   assign pic_pri_c1_clken    = (waddr_intpriority_base_match & picm_wren_ff)  | (raddr_intpriority_base_match & picm_rden_ff) | clk_override;
-   assign pic_int_c1_clken    = (waddr_intenable_base_match   & picm_wren_ff)  | (raddr_intenable_base_match   & picm_rden_ff) | clk_override;
-   assign gw_config_c1_clken  = (waddr_config_gw_base_match   & picm_wren_ff)  | (raddr_config_gw_base_match   & picm_rden_ff) | clk_override;
-
-   // C1 - 1 clock pulse for data
-   rvoclkhdr pic_addr_c1_cgc   ( .en(pic_raddr_c1_clken),  .l1clk(pic_raddr_c1_clk), .* );
-   rvoclkhdr pic_data_c1_cgc   ( .en(pic_data_c1_clken),   .l1clk(pic_data_c1_clk), .* );
-   rvoclkhdr pic_pri_c1_cgc    ( .en(pic_pri_c1_clken),    .l1clk(pic_pri_c1_clk),  .* );
-   rvoclkhdr pic_int_c1_cgc    ( .en(pic_int_c1_clken),    .l1clk(pic_int_c1_clk),  .* );
-   rvoclkhdr gw_config_c1_cgc  ( .en(gw_config_c1_clken),  .l1clk(gw_config_c1_clk),  .* );
-
-// ------ end clock gating section ------------------------
-
-assign raddr_intenable_base_match   = (picm_raddr_ff[31:NUM_LEVELS+2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign raddr_intpriority_base_match = (picm_raddr_ff[31:NUM_LEVELS+2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign raddr_config_gw_base_match   = (picm_raddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS+2]) ;
-assign raddr_config_pic_match       = (picm_raddr_ff[31:0]            == EXT_INTR_PIC_CONFIG[31:0]) ;
-
-assign addr_intpend_base_match      = (picm_raddr_ff[31:6]            == INTPEND_BASE_ADDR[31:6]) ;
-
-assign waddr_config_pic_match       = (picm_waddr_ff[31:0]            == EXT_INTR_PIC_CONFIG[31:0]) ;
-assign addr_clear_gw_base_match     = (picm_waddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CLEAR[31:NUM_LEVELS+2]) ;
-assign waddr_intpriority_base_match = (picm_waddr_ff[31:NUM_LEVELS+2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign waddr_intenable_base_match   = (picm_waddr_ff[31:NUM_LEVELS+2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign waddr_config_gw_base_match   = (picm_waddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS+2]) ;
-
-   assign picm_bypass_ff = picm_rden_ff & picm_wren_ff & ( picm_raddr_ff[31:0] == picm_waddr_ff[31:0] );    // pic writes and reads to same address together
-
-
-rvdff #(32) picm_radd_flop  (.*, .din (picm_rdaddr),        .dout(picm_raddr_ff),         .clk(pic_raddr_c1_clk));
-rvdff #(32) picm_wadd_flop  (.*, .din (picm_wraddr),        .dout(picm_waddr_ff),         .clk(pic_data_c1_clk));
-rvdff  #(1) picm_wre_flop   (.*, .din (picm_wren),          .dout(picm_wren_ff),          .clk(free_clk));
-rvdff  #(1) picm_rde_flop   (.*, .din (picm_rden),          .dout(picm_rden_ff),          .clk(free_clk));
-rvdff  #(1) picm_mke_flop   (.*, .din (picm_mken),          .dout(picm_mken_ff),          .clk(free_clk));
-rvdff #(32) picm_dat_flop   (.*, .din (picm_wr_data[31:0]), .dout(picm_wr_data_ff[31:0]), .clk(pic_data_c1_clk));
-
-
-genvar p ;
-for (p=0; p<=INT_ENABLE_GRPS ; p++) begin  : IO_CLK_GRP
-   if (p==INT_ENABLE_GRPS) begin : LAST_GRP
-       assign intenable_clk_enable_grp[p] = |intenable_clk_enable[pt.PIC_TOTAL_INT_PLUS1-1 : p*4] | io_clk_override;
-       rvoclkhdr intenable_c1_cgc   ( .en(intenable_clk_enable_grp[p]),  .l1clk(gw_clk[p]), .* );
-   end else begin :  CLK_GRPS
-       assign intenable_clk_enable_grp[p] = |intenable_clk_enable[p*4+3 : p*4] | io_clk_override;
-       rvoclkhdr intenable_c1_cgc   ( .en(intenable_clk_enable_grp[p]),  .l1clk(gw_clk[p]), .* );
-   end
-end
-
-
-
-genvar i ;
-for (i=0; i<pt.PIC_TOTAL_INT_PLUS1 ; i++) begin  : SETREG
-
- if (i > 0 ) begin : NON_ZERO_INT
-     assign intpriority_reg_we[i] =  waddr_intpriority_base_match & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign intpriority_reg_re[i] =  raddr_intpriority_base_match & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign intenable_reg_we[i]   =  waddr_intenable_base_match   & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign intenable_reg_re[i]   =  raddr_intenable_base_match   & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign gw_config_reg_we[i]   =  waddr_config_gw_base_match   & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign gw_config_reg_re[i]   =  raddr_config_gw_base_match   & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign gw_clear_reg_we[i]    =  addr_clear_gw_base_match     & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff ;
-
-     rvdffs #(INTPRIORITY_BITS) intpriority_ff  (.*, .en( intpriority_reg_we[i]), .din (picm_wr_data_ff[INTPRIORITY_BITS-1:0]), .dout(intpriority_reg[i]), .clk(pic_pri_c1_clk));
-     rvdffs #(1)                 intenable_ff   (.*, .en( intenable_reg_we[i]),   .din (picm_wr_data_ff[0]),                    .dout(intenable_reg[i]),   .clk(pic_int_c1_clk));
-
-     assign intenable_clk_enable[i]  =  gw_config_reg[i][1] | intenable_reg_we[i] | intenable_reg[i] | gw_clear_reg_we[i] ;
-
-     rvsyncss_fpga  #(1) sync_inst
-     (
-      .gw_clk      (gw_clk[i/4]),
-      .rawclk      (clk),
-      .clken       (intenable_clk_enable_grp[i/4]),
-      .dout        (extintsrc_req_sync[i]),
-      .din         (extintsrc_req[i]),
-      .*) ;
-
-
-
-//     if (GW_CONFIG[i]) begin
-
-        rvdffs #(2)                 gw_config_ff   (.*, .en( gw_config_reg_we[i]),   .din (picm_wr_data_ff[1:0]),                  .dout(gw_config_reg[i]),   .clk(gw_config_c1_clk));
-
-        eb1_configurable_gw config_gw_inst(.*,
-                                            .gw_clk(gw_clk[i/4]),
-                                            .rawclk(clk),
-                                            .clken (intenable_clk_enable_grp[i/4]),
-                                            .extintsrc_req_sync(extintsrc_req_sync[i]) ,
-                                            .meigwctrl_polarity(gw_config_reg[i][0]) ,
-                                            .meigwctrl_type(gw_config_reg[i][1]) ,
-                                            .meigwclr(gw_clear_reg_we[i]) ,
-                                            .extintsrc_req_config(extintsrc_req_gw[i])
-                                            );
-
- end else begin : INT_ZERO
-     assign intpriority_reg_we[i] =  1'b0 ;
-     assign intpriority_reg_re[i] =  1'b0 ;
-     assign intenable_reg_we[i]   =  1'b0 ;
-     assign intenable_reg_re[i]   =  1'b0 ;
-
-     assign gw_config_reg_we[i]   =  1'b0 ;
-     assign gw_config_reg_re[i]   =  1'b0 ;
-     assign gw_clear_reg_we[i]    =  1'b0 ;
-
-     assign gw_config_reg[i]    = '0 ;
-
-     assign intpriority_reg[i] = {INTPRIORITY_BITS{1'b0}} ;
-     assign intenable_reg[i]   = 1'b0 ;
-     assign extintsrc_req_gw[i] = 1'b0 ;
-     assign extintsrc_req_sync[i]    = 1'b0 ;
-     assign intenable_clk_enable[i] = 1'b0;
- end
-
-
-    assign intpriority_reg_inv[i] =  intpriord ? ~intpriority_reg[i] : intpriority_reg[i] ;
-
-    assign intpend_w_prior_en[i]  =  {INTPRIORITY_BITS{(extintsrc_req_gw[i] & intenable_reg[i])}} & intpriority_reg_inv[i] ;
-    assign intpend_id[i]          =  i ;
-end
-
-
-        assign pl_in[INTPRIORITY_BITS-1:0]                  =      selected_int_priority[INTPRIORITY_BITS-1:0] ;
-
-
- genvar l, m , j, k;
-
-if (pt.PIC_2CYCLE == 1) begin : genblock
-        logic [NUM_LEVELS/2:0] [pt.PIC_TOTAL_INT_PLUS1+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en;
-        logic [NUM_LEVELS/2:0] [pt.PIC_TOTAL_INT_PLUS1+2:0] [ID_BITS-1:0]          level_intpend_id;
-        logic [NUM_LEVELS:NUM_LEVELS/2] [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] [INTPRIORITY_BITS-1:0] levelx_intpend_w_prior_en;
-        logic [NUM_LEVELS:NUM_LEVELS/2] [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] [ID_BITS-1:0]          levelx_intpend_id;
-
-        assign level_intpend_w_prior_en[0][pt.PIC_TOTAL_INT_PLUS1+2:0] = {4'b0,4'b0,4'b0,intpend_w_prior_en[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-        assign level_intpend_id[0][pt.PIC_TOTAL_INT_PLUS1+2:0]         = {8'b0,8'b0,8'b0,intpend_id[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-        logic [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0] [INTPRIORITY_BITS-1:0] l2_intpend_w_prior_en_ff;
-        logic [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0] [ID_BITS-1:0]          l2_intpend_id_ff;
-
-        assign levelx_intpend_w_prior_en[NUM_LEVELS/2][(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] = {{1*INTPRIORITY_BITS{1'b0}},l2_intpend_w_prior_en_ff[(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0]} ;
-        assign levelx_intpend_id[NUM_LEVELS/2][(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0]         = {{1*ID_BITS{1'b1}},l2_intpend_id_ff[(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0]} ;
-///  Do the prioritization of the interrupts here  ////////////
- for (l=0; l<NUM_LEVELS/2 ; l++) begin : TOP_LEVEL
-    for (m=0; m<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1)) ; m++) begin : COMPARE
-       if ( m == (pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1))) begin
-            assign level_intpend_w_prior_en[l+1][m+1] = '0 ;
-            assign level_intpend_id[l+1][m+1]         = '0 ;
-       end
-       eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l1 (
-                      .a_id(level_intpend_id[l][2*m]),
-                      .a_priority(level_intpend_w_prior_en[l][2*m]),
-                      .b_id(level_intpend_id[l][2*m+1]),
-                      .b_priority(level_intpend_w_prior_en[l][2*m+1]),
-                      .out_id(level_intpend_id[l+1][m]),
-                      .out_priority(level_intpend_w_prior_en[l+1][m])) ;
-
-    end
- end
-
-        for (i=0; i<=pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2) ; i++) begin : MIDDLE_FLOPS
-          rvdff #(INTPRIORITY_BITS) leveb1_intpend_prior_reg  (.*, .din (level_intpend_w_prior_en[NUM_LEVELS/2][i]), .dout(l2_intpend_w_prior_en_ff[i]),  .clk(free_clk));
-          rvdff #(ID_BITS)          leveb1_intpend_id_reg     (.*, .din (level_intpend_id[NUM_LEVELS/2][i]),         .dout(l2_intpend_id_ff[i]),          .clk(free_clk));
-        end
-
- for (j=NUM_LEVELS/2; j<NUM_LEVELS ; j++) begin : BOT_LEVELS
-    for (k=0; k<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(j+1)) ; k++) begin : COMPARE
-       if ( k == (pt.PIC_TOTAL_INT_PLUS1)/(2**(j+1))) begin
-            assign levelx_intpend_w_prior_en[j+1][k+1] = '0 ;
-            assign levelx_intpend_id[j+1][k+1]         = '0 ;
-       end
-            eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                        .INTPRIORITY_BITS(INTPRIORITY_BITS))
-                 cmp_l1 (
-                        .a_id(levelx_intpend_id[j][2*k]),
-                        .a_priority(levelx_intpend_w_prior_en[j][2*k]),
-                        .b_id(levelx_intpend_id[j][2*k+1]),
-                        .b_priority(levelx_intpend_w_prior_en[j][2*k+1]),
-                        .out_id(levelx_intpend_id[j+1][k]),
-                        .out_priority(levelx_intpend_w_prior_en[j+1][k])) ;
-    end
-  end
-        assign claimid_in[ID_BITS-1:0]                      =      levelx_intpend_id[NUM_LEVELS][0] ;   // This is the last level output
-        assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      levelx_intpend_w_prior_en[NUM_LEVELS][0] ;
-end
-else begin : genblock
-
-        logic [NUM_LEVELS:0] [pt.PIC_TOTAL_INT_PLUS1+1:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en;
-        logic [NUM_LEVELS:0] [pt.PIC_TOTAL_INT_PLUS1+1:0] [ID_BITS-1:0]          level_intpend_id;
-
-        assign level_intpend_w_prior_en[0][pt.PIC_TOTAL_INT_PLUS1+1:0] = {{2*INTPRIORITY_BITS{1'b0}},intpend_w_prior_en[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-        assign level_intpend_id[0][pt.PIC_TOTAL_INT_PLUS1+1:0] = {{2*ID_BITS{1'b1}},intpend_id[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-///  Do the prioritization of the interrupts here  ////////////
-// genvar l, m , j, k;  already declared outside ifdef
- for (l=0; l<NUM_LEVELS ; l++) begin : LEVEL
-    for (m=0; m<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1)) ; m++) begin : COMPARE
-       if ( m == (pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1))) begin
-            assign level_intpend_w_prior_en[l+1][m+1] = '0 ;
-            assign level_intpend_id[l+1][m+1]         = '0 ;
-       end
-       eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l1 (
-                      .a_id(level_intpend_id[l][2*m]),
-                      .a_priority(level_intpend_w_prior_en[l][2*m]),
-                      .b_id(level_intpend_id[l][2*m+1]),
-                      .b_priority(level_intpend_w_prior_en[l][2*m+1]),
-                      .out_id(level_intpend_id[l+1][m]),
-                      .out_priority(level_intpend_w_prior_en[l+1][m])) ;
-
-    end
- end
-        assign claimid_in[ID_BITS-1:0]                      =      level_intpend_id[NUM_LEVELS][0] ;   // This is the last level output
-        assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      level_intpend_w_prior_en[NUM_LEVELS][0] ;
-
-end
-
-
-
-///////////////////////////////////////////////////////////////////////
-// Config Reg`
-///////////////////////////////////////////////////////////////////////
-assign config_reg_we               =  waddr_config_pic_match & picm_wren_ff;
-assign config_reg_re               =  raddr_config_pic_match & picm_rden_ff;
-
-assign config_reg_in  =  picm_wr_data_ff[0] ;   //
-rvdffs #(1) config_reg_ff  (.*, .clk(free_clk), .en(config_reg_we), .din (config_reg_in), .dout(config_reg));
-
-assign intpriord  = config_reg ;
-
-
-
-//////////////////////////////////////////////////////////////////////////
-// Send the interrupt to the core if it is above the thresh-hold
-//////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/// ClaimId  Reg and Corresponding PL
-///////////////////////////////////////////////////////////
-//
-assign pl_in_q[INTPRIORITY_BITS-1:0] = intpriord ? ~pl_in : pl_in ;
-rvdff #(ID_BITS)          claimid_ff  (.*,  .din (claimid_in[ID_BITS-1:00]),     .dout(claimid[ID_BITS-1:00]),    .clk(free_clk));
-rvdff  #(INTPRIORITY_BITS) pl_ff      (.*, .din (pl_in_q[INTPRIORITY_BITS-1:0]), .dout(pl[INTPRIORITY_BITS-1:0]), .clk(free_clk));
-
-logic [INTPRIORITY_BITS-1:0] meipt_inv , meicurpl_inv ;
-assign meipt_inv[INTPRIORITY_BITS-1:0]    = intpriord ? ~meipt[INTPRIORITY_BITS-1:0]    : meipt[INTPRIORITY_BITS-1:0] ;
-assign meicurpl_inv[INTPRIORITY_BITS-1:0] = intpriord ? ~meicurpl[INTPRIORITY_BITS-1:0] : meicurpl[INTPRIORITY_BITS-1:0] ;
-assign mexintpend_in = (( selected_int_priority[INTPRIORITY_BITS-1:0] > meipt_inv[INTPRIORITY_BITS-1:0]) &
-                        ( selected_int_priority[INTPRIORITY_BITS-1:0] > meicurpl_inv[INTPRIORITY_BITS-1:0]) );
-rvdff #(1) mexintpend_ff  (.*, .clk(free_clk), .din (mexintpend_in), .dout(mexintpend));
-
-assign maxint[INTPRIORITY_BITS-1:0]      =  intpriord ? 0 : 15 ;
-assign mhwakeup_in = ( pl_in_q[INTPRIORITY_BITS-1:0] == maxint) ;
-rvdff #(1) wake_up_ff  (.*, .clk(free_clk), .din (mhwakeup_in), .dout(mhwakeup));
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////
-//  Reads of register.
-//  1- intpending
-//////////////////////////////////////////////////////////////////////////
-
-assign intpend_reg_read     =  addr_intpend_base_match      & picm_rden_ff ;
-assign intpriority_reg_read =  raddr_intpriority_base_match & picm_rden_ff;
-assign intenable_reg_read   =  raddr_intenable_base_match   & picm_rden_ff;
-assign gw_config_reg_read   =  raddr_config_gw_base_match   & picm_rden_ff;
-
-assign intpend_reg_extended[INTPEND_SIZE-1:0]  = {{INTPEND_SIZE-pt.PIC_TOTAL_INT_PLUS1{1'b0}},extintsrc_req_gw[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-   for (i=0; i<(INT_GRPS); i++) begin
-            assign intpend_rd_part_out[i] =  (({32{intpend_reg_read & picm_raddr_ff[5:2] == i}}) & intpend_reg_extended[((32*i)+31):(32*i)]) ;
-   end
-
-   always_comb begin : INTPEND_RD
-         intpend_rd_out =  '0 ;
-         for (int i=0; i<INT_GRPS; i++) begin
-               intpend_rd_out |=  intpend_rd_part_out[i] ;
-         end
-   end
-
-   always_comb begin : INTEN_RD
-         intenable_rd_out =  '0 ;
-         intpriority_rd_out =  '0 ;
-         gw_config_rd_out =  '0 ;
-         for (int i=0; i<pt.PIC_TOTAL_INT_PLUS1; i++) begin
-              if (intenable_reg_re[i]) begin
-               intenable_rd_out    =  intenable_reg[i]  ;
-              end
-              if (intpriority_reg_re[i]) begin
-               intpriority_rd_out  =  intpriority_reg[i] ;
-              end
-              if (gw_config_reg_re[i]) begin
-               gw_config_rd_out  =  gw_config_reg[i] ;
-              end
-         end
-   end
-
-
- assign picm_rd_data_in[31:0] = ({32{intpend_reg_read      }} &   intpend_rd_out                                                    ) |
-                                ({32{intpriority_reg_read  }} &  {{32-INTPRIORITY_BITS{1'b0}}, intpriority_rd_out                 } ) |
-                                ({32{intenable_reg_read    }} &  {31'b0 , intenable_rd_out                                        } ) |
-                                ({32{gw_config_reg_read    }} &  {30'b0 , gw_config_rd_out                                        } ) |
-                                ({32{config_reg_re         }} &  {31'b0 , config_reg                                              } ) |
-                                ({32{picm_mken_ff & mask[3]}} &  {30'b0 , 2'b11                                                   } ) |
-                                ({32{picm_mken_ff & mask[2]}} &  {31'b0 , 1'b1                                                    } ) |
-                                ({32{picm_mken_ff & mask[1]}} &  {28'b0 , 4'b1111                                                 } ) |
-                                ({32{picm_mken_ff & mask[0]}} &   32'b0                                                             ) ;
-
-
-assign picm_rd_data[31:0] = picm_bypass_ff ? picm_wr_data_ff[31:0] : picm_rd_data_in[31:0] ;
-
-logic [14:0] address;
-
-assign address[14:0] = picm_raddr_ff[14:0];
-
-// mask[3:0] = { 4'b1000 - 30b mask,4'b0100 - 31b mask, 4'b0010 - 28b mask, 4'b0001 - 32b mask }
-always_comb begin
-  case (address[14:0])
-    15'b011000000000000 : mask[3:0] = 4'b0100;
-    15'b100000000000100 : mask[3:0] = 4'b1000;
-    15'b100000000001000 : mask[3:0] = 4'b1000;
-    15'b100000000001100 : mask[3:0] = 4'b1000;
-    15'b100000000010000 : mask[3:0] = 4'b1000;
-    15'b100000000010100 : mask[3:0] = 4'b1000;
-    15'b100000000011000 : mask[3:0] = 4'b1000;
-    15'b100000000011100 : mask[3:0] = 4'b1000;
-    15'b100000000100000 : mask[3:0] = 4'b1000;
-    15'b100000000100100 : mask[3:0] = 4'b1000;
-    15'b100000000101000 : mask[3:0] = 4'b1000;
-    15'b100000000101100 : mask[3:0] = 4'b1000;
-    15'b100000000110000 : mask[3:0] = 4'b1000;
-    15'b100000000110100 : mask[3:0] = 4'b1000;
-    15'b100000000111000 : mask[3:0] = 4'b1000;
-    15'b100000000111100 : mask[3:0] = 4'b1000;
-    15'b100000001000000 : mask[3:0] = 4'b1000;
-    15'b100000001000100 : mask[3:0] = 4'b1000;
-    15'b100000001001000 : mask[3:0] = 4'b1000;
-    15'b100000001001100 : mask[3:0] = 4'b1000;
-    15'b100000001010000 : mask[3:0] = 4'b1000;
-    15'b100000001010100 : mask[3:0] = 4'b1000;
-    15'b100000001011000 : mask[3:0] = 4'b1000;
-    15'b100000001011100 : mask[3:0] = 4'b1000;
-    15'b100000001100000 : mask[3:0] = 4'b1000;
-    15'b100000001100100 : mask[3:0] = 4'b1000;
-    15'b100000001101000 : mask[3:0] = 4'b1000;
-    15'b100000001101100 : mask[3:0] = 4'b1000;
-    15'b100000001110000 : mask[3:0] = 4'b1000;
-    15'b100000001110100 : mask[3:0] = 4'b1000;
-    15'b100000001111000 : mask[3:0] = 4'b1000;
-    15'b100000001111100 : mask[3:0] = 4'b1000;
-    15'b010000000000100 : mask[3:0] = 4'b0100;
-    15'b010000000001000 : mask[3:0] = 4'b0100;
-    15'b010000000001100 : mask[3:0] = 4'b0100;
-    15'b010000000010000 : mask[3:0] = 4'b0100;
-    15'b010000000010100 : mask[3:0] = 4'b0100;
-    15'b010000000011000 : mask[3:0] = 4'b0100;
-    15'b010000000011100 : mask[3:0] = 4'b0100;
-    15'b010000000100000 : mask[3:0] = 4'b0100;
-    15'b010000000100100 : mask[3:0] = 4'b0100;
-    15'b010000000101000 : mask[3:0] = 4'b0100;
-    15'b010000000101100 : mask[3:0] = 4'b0100;
-    15'b010000000110000 : mask[3:0] = 4'b0100;
-    15'b010000000110100 : mask[3:0] = 4'b0100;
-    15'b010000000111000 : mask[3:0] = 4'b0100;
-    15'b010000000111100 : mask[3:0] = 4'b0100;
-    15'b010000001000000 : mask[3:0] = 4'b0100;
-    15'b010000001000100 : mask[3:0] = 4'b0100;
-    15'b010000001001000 : mask[3:0] = 4'b0100;
-    15'b010000001001100 : mask[3:0] = 4'b0100;
-    15'b010000001010000 : mask[3:0] = 4'b0100;
-    15'b010000001010100 : mask[3:0] = 4'b0100;
-    15'b010000001011000 : mask[3:0] = 4'b0100;
-    15'b010000001011100 : mask[3:0] = 4'b0100;
-    15'b010000001100000 : mask[3:0] = 4'b0100;
-    15'b010000001100100 : mask[3:0] = 4'b0100;
-    15'b010000001101000 : mask[3:0] = 4'b0100;
-    15'b010000001101100 : mask[3:0] = 4'b0100;
-    15'b010000001110000 : mask[3:0] = 4'b0100;
-    15'b010000001110100 : mask[3:0] = 4'b0100;
-    15'b010000001111000 : mask[3:0] = 4'b0100;
-    15'b010000001111100 : mask[3:0] = 4'b0100;
-    15'b000000000000100 : mask[3:0] = 4'b0010;
-    15'b000000000001000 : mask[3:0] = 4'b0010;
-    15'b000000000001100 : mask[3:0] = 4'b0010;
-    15'b000000000010000 : mask[3:0] = 4'b0010;
-    15'b000000000010100 : mask[3:0] = 4'b0010;
-    15'b000000000011000 : mask[3:0] = 4'b0010;
-    15'b000000000011100 : mask[3:0] = 4'b0010;
-    15'b000000000100000 : mask[3:0] = 4'b0010;
-    15'b000000000100100 : mask[3:0] = 4'b0010;
-    15'b000000000101000 : mask[3:0] = 4'b0010;
-    15'b000000000101100 : mask[3:0] = 4'b0010;
-    15'b000000000110000 : mask[3:0] = 4'b0010;
-    15'b000000000110100 : mask[3:0] = 4'b0010;
-    15'b000000000111000 : mask[3:0] = 4'b0010;
-    15'b000000000111100 : mask[3:0] = 4'b0010;
-    15'b000000001000000 : mask[3:0] = 4'b0010;
-    15'b000000001000100 : mask[3:0] = 4'b0010;
-    15'b000000001001000 : mask[3:0] = 4'b0010;
-    15'b000000001001100 : mask[3:0] = 4'b0010;
-    15'b000000001010000 : mask[3:0] = 4'b0010;
-    15'b000000001010100 : mask[3:0] = 4'b0010;
-    15'b000000001011000 : mask[3:0] = 4'b0010;
-    15'b000000001011100 : mask[3:0] = 4'b0010;
-    15'b000000001100000 : mask[3:0] = 4'b0010;
-    15'b000000001100100 : mask[3:0] = 4'b0010;
-    15'b000000001101000 : mask[3:0] = 4'b0010;
-    15'b000000001101100 : mask[3:0] = 4'b0010;
-    15'b000000001110000 : mask[3:0] = 4'b0010;
-    15'b000000001110100 : mask[3:0] = 4'b0010;
-    15'b000000001111000 : mask[3:0] = 4'b0010;
-    15'b000000001111100 : mask[3:0] = 4'b0010;
-    default           : mask[3:0] = 4'b0001;
-  endcase
-end
-
-endmodule
-
-
-module eb1_cmp_and_mux #(parameter ID_BITS=8,
-                               INTPRIORITY_BITS = 4)
-                    (
-                        input  logic [ID_BITS-1:0]       a_id,
-                        input  logic [INTPRIORITY_BITS-1:0] a_priority,
-
-                        input  logic [ID_BITS-1:0]       b_id,
-                        input  logic [INTPRIORITY_BITS-1:0] b_priority,
-
-                        output logic [ID_BITS-1:0]       out_id,
-                        output logic [INTPRIORITY_BITS-1:0] out_priority
-
-                    );
-
-logic   a_is_lt_b ;
-
-assign  a_is_lt_b  = ( a_priority[INTPRIORITY_BITS-1:0] < b_priority[INTPRIORITY_BITS-1:0] ) ;
-
-assign  out_id[ID_BITS-1:0]                = a_is_lt_b ? b_id[ID_BITS-1:0] :
-                                                         a_id[ID_BITS-1:0] ;
-assign  out_priority[INTPRIORITY_BITS-1:0] = a_is_lt_b ? b_priority[INTPRIORITY_BITS-1:0] :
-                                                         a_priority[INTPRIORITY_BITS-1:0] ;
-endmodule // cmp_and_mux
-
-
-module eb1_configurable_gw (
-                             input logic gw_clk,
-                             input logic rawclk,
-                             input logic clken,
-                             input logic rst_l,
-                             input logic extintsrc_req_sync ,
-                             input logic meigwctrl_polarity ,
-                             input logic meigwctrl_type ,
-                             input logic meigwclr ,
-
-                             output logic extintsrc_req_config
-                            );
-
-
-  logic  gw_int_pending_in , gw_int_pending ;
-
-  assign gw_int_pending_in =  (extintsrc_req_sync ^ meigwctrl_polarity) | (gw_int_pending & ~meigwclr) ;
-  rvdff_fpga #(1) int_pend_ff        (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (gw_int_pending_in),     .dout(gw_int_pending));
-
-
-  assign extintsrc_req_config =  meigwctrl_type ? ((extintsrc_req_sync ^  meigwctrl_polarity) | gw_int_pending) : (extintsrc_req_sync ^  meigwctrl_polarity) ;
-
-endmodule // configurable_gw
-
-
-
-
-
-
-
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu.sv b/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu.sv
deleted file mode 100644
index 5df586a..0000000
--- a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu.sv
+++ /dev/null
@@ -1,369 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)
-  (
-   input logic          clk,                                           // Top level clock
-   input logic          rst_l,                                         // Reset
-   input logic          scan_mode,                                     // Scan control
-
-   input logic  [1:0]   dec_data_en,                                   // Clock enable {x,r}, one cycle pulse
-   input logic  [1:0]   dec_ctl_en,                                    // Clock enable {x,r}, two cycle pulse
-   input logic  [31:0]  dbg_cmd_wrdata,                                // Debug data   to primary I0 RS1
-   input eb1_alu_pkt_t i0_ap,                                         // DEC alu {valid,predecodes}
-
-   input logic          dec_debug_wdata_rs1_d,                         // Debug select to primary I0 RS1
-
-   input eb1_predict_pkt_t dec_i0_predict_p_d,                        // DEC branch predict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   input logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   input logic  [31:0]  lsu_result_m,                                  // Load result M-stage
-   input logic  [31:0]  lsu_nonblock_load_data,                        // nonblock load data
-   input logic          dec_i0_rs1_en_d,                               // Qualify GPR RS1 data
-   input logic          dec_i0_rs2_en_d,                               // Qualify GPR RS2 data
-   input logic  [31:0]  gpr_i0_rs1_d,                                  // DEC data gpr
-   input logic  [31:0]  gpr_i0_rs2_d,                                  // DEC data gpr
-   input logic  [31:0]  dec_i0_immed_d,                                // DEC data immediate
-   input logic  [31:0]  dec_i0_result_r,                               // DEC result in R-stage
-   input logic  [12:1]  dec_i0_br_immed_d,                             // Branch immediate
-   input logic          dec_i0_alu_decode_d,                           // Valid to X-stage ALU
-   input logic          dec_i0_branch_d,                               // Branch in D-stage
-   input logic          dec_i0_select_pc_d,                            // PC select to RS1
-   input logic  [31:1]  dec_i0_pc_d,                                   // Instruction PC
-   input logic  [3:0]   dec_i0_rs1_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic  [3:0]   dec_i0_rs2_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic          dec_csr_ren_d,                                 // CSR read select
-   input logic  [31:0]  dec_csr_rddata_d,                              // CSR read data
-
-   input logic          dec_qual_lsu_d,                                // LSU instruction at D.  Use to quiet LSU operands
-   input eb1_mul_pkt_t mul_p,                                         // DEC {valid, operand signs, low, operand bypass}
-   input eb1_div_pkt_t div_p,                                         // DEC {valid, unsigned, rem}
-   input logic          dec_div_cancel,                                // Cancel the divide operation
-
-   input logic  [31:1]  pred_correct_npc_x,                            // DEC NPC for correctly predicted branch
-
-   input logic          dec_tlu_flush_lower_r,                         // Flush divide and secondary ALUs
-   input logic  [31:1]  dec_tlu_flush_path_r,                          // Redirect target
-
-
-   input logic         dec_extint_stall,                               // External stall mux select
-   input logic [31:2]  dec_tlu_meihap,                                 // External stall mux data
-
-
-   output logic [31:0]  exu_lsu_rs1_d,                                 // LSU operand
-   output logic [31:0]  exu_lsu_rs2_d,                                 // LSU operand
-
-   output logic         exu_flush_final,                               // Pipe is being flushed this cycle
-   output logic [31:1]  exu_flush_path_final,                          // Target for the oldest flush source
-
-   output logic [31:0]  exu_i0_result_x,                               // Primary ALU result to DEC
-   output logic [31:1]  exu_i0_pc_x,                                   // Primary PC  result to DEC
-   output logic [31:0]  exu_csr_rs1_x,                                 // RS1 source for a CSR instruction
-
-   output logic [31:1]  exu_npc_r,                                     // Divide NPC
-   output logic [1:0]   exu_i0_br_hist_r,                              // to DEC  I0 branch history
-   output logic         exu_i0_br_error_r,                             // to DEC  I0 branch error
-   output logic         exu_i0_br_start_error_r,                       // to DEC  I0 branch start error
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r,     // to DEC  I0 branch index
-   output logic         exu_i0_br_valid_r,                             // to DEC  I0 branch valid
-   output logic         exu_i0_br_mp_r,                                // to DEC  I0 branch mispredict
-   output logic         exu_i0_br_middle_r,                            // to DEC  I0 branch middle
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r,               // to DEC  I0 branch fghr
-   output logic         exu_i0_br_way_r,                               // to DEC  I0 branch way
-
-   output eb1_predict_pkt_t exu_mp_pkt,                               // Mispredict branch packet
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr,                    // Mispredict global history
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   output logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-
-   output logic         exu_pmu_i0_br_misp,                            // to PMU - I0 E4 branch mispredict
-   output logic         exu_pmu_i0_br_ataken,                          // to PMU - I0 E4 taken
-   output logic         exu_pmu_i0_pc4,                                // to PMU - I0 E4 PC
-
-
-   output logic [31:0]  exu_div_result,                                // Divide result
-   output logic         exu_div_wren                                   // Divide write enable to GPR
-  );
-
-
-
-
-   logic [31:0]                i0_rs1_bypass_data_d;
-   logic [31:0]                i0_rs2_bypass_data_d;
-   logic                       i0_rs1_bypass_en_d;
-   logic                       i0_rs2_bypass_en_d;
-   logic [31:0]                i0_rs1_d,  i0_rs2_d;
-   logic [31:0]                muldiv_rs1_d;
-   logic [31:1]                pred_correct_npc_r;
-   logic                       i0_pred_correct_upper_r;
-   logic [31:1]                i0_flush_path_upper_r;
-   logic                       x_data_en, x_data_en_q1, x_data_en_q2, r_data_en, r_data_en_q2;
-   logic                       x_ctl_en,  r_ctl_en;
-
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_d_ns, ghr_d;
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_x_ns, ghr_x;
-   logic                       i0_taken_d;
-   logic                       i0_taken_x;
-   logic                       i0_valid_d;
-   logic                       i0_valid_x;
-   logic [pt.BHT_GHR_SIZE-1:0] after_flush_eghr;
-
-   eb1_predict_pkt_t          final_predict_mp;
-   eb1_predict_pkt_t          i0_predict_newp_d;
-
-   logic                       flush_in_d;
-   logic [31:0]                alu_result_x;
-
-   logic                       mul_valid_x;
-   logic [31:0]                mul_result_x;
-
-   eb1_predict_pkt_t          i0_pp_r;
-
-   logic                       i0_flush_upper_d;
-   logic [31:1]                i0_flush_path_d;
-   eb1_predict_pkt_t          i0_predict_p_d;
-   logic                       i0_pred_correct_upper_d;
-
-   logic                       i0_flush_upper_x;
-   logic [31:1]                i0_flush_path_x;
-   eb1_predict_pkt_t          i0_predict_p_x;
-   logic                       i0_pred_correct_upper_x;
-   logic                       i0_branch_x;
-
-   localparam PREDPIPESIZE = pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1+pt.BHT_GHR_SIZE+pt.BTB_BTAG_SIZE;
-   logic [PREDPIPESIZE-1:0]    predpipe_d, predpipe_x, predpipe_r, final_predpipe_mp;
-
-
-
-
-   rvdffpcie #(31)                       i_flush_path_x_ff    (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_flush_path_d[31:1]         ),  .dout( i0_flush_path_x[31:1]      ) );
-   rvdffe #(32)                          i_csr_rs1_x_ff       (.*, .clk(clk),        .en ( x_data_en_q1  ),  .din ( i0_rs1_d[31:0]                ),  .dout( exu_csr_rs1_x[31:0]        ) );
-   rvdffppe #($bits(eb1_predict_pkt_t)) i_predictpacket_x_ff (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_predict_p_d                ),  .dout( i0_predict_p_x             ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_x_ff      (.*, .clk(clk),        .en ( x_data_en_q2  ),  .din ( predpipe_d                    ),  .dout( predpipe_x                 ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_r_ff      (.*, .clk(clk),        .en ( r_data_en_q2  ),  .din ( predpipe_x                    ),  .dout( predpipe_r                 ) );
-
-   rvdffe #(4+pt.BHT_GHR_SIZE)          i_x_ff               (.*, .clk(clk),        .en ( x_ctl_en      ),  .din ({i0_valid_d,i0_taken_d,i0_flush_upper_d,i0_pred_correct_upper_d,ghr_x_ns[pt.BHT_GHR_SIZE-1:0]} ),
-                                                                                                            .dout({i0_valid_x,i0_taken_x,i0_flush_upper_x,i0_pred_correct_upper_x,ghr_x[pt.BHT_GHR_SIZE-1:0]}    ) );
-
-   rvdffppe #($bits(eb1_predict_pkt_t)+1) i_r_ff0         (.*, .clk(clk),        .en ( r_ctl_en      ),  .din ({i0_pred_correct_upper_x, i0_predict_p_x}),
-                                                                                                          .dout({i0_pred_correct_upper_r, i0_pp_r       }) );
-
-   rvdffpcie #(31)                      i_flush_r_ff         (.*, .clk(clk),        .en ( r_data_en     ),  .din ( i0_flush_path_x[31:1]         ),  .dout( i0_flush_path_upper_r[31:1]) );
-   rvdffpcie #(31)                      i_npc_r_ff           (.*, .clk(clk),        .en ( r_data_en     ),  .din ( pred_correct_npc_x[31:1]      ),  .dout( pred_correct_npc_r[31:1]   ) );
-
-   rvdffie #(pt.BHT_GHR_SIZE+2,1)       i_misc_ff            (.*, .clk(clk),                                .din ({ghr_d_ns[pt.BHT_GHR_SIZE-1:0], mul_p.valid, dec_i0_branch_d}),
-                                                                                                            .dout({ghr_d[pt.BHT_GHR_SIZE-1:0]   , mul_valid_x, i0_branch_x}) );
-
-
-
-
-
-   assign predpipe_d[PREDPIPESIZE-1:0]
-                                   = {i0_predict_fghr_d, i0_predict_index_d, i0_predict_btag_d};
-
-
-   assign i0_rs1_bypass_en_d       = dec_i0_rs1_bypass_en_d[0] | dec_i0_rs1_bypass_en_d[1] | dec_i0_rs1_bypass_en_d[2] | dec_i0_rs1_bypass_en_d[3];
-   assign i0_rs2_bypass_en_d       = dec_i0_rs2_bypass_en_d[0] | dec_i0_rs2_bypass_en_d[1] | dec_i0_rs2_bypass_en_d[2] | dec_i0_rs2_bypass_en_d[3];
-
-   assign i0_rs1_bypass_data_d[31:0]=({32{dec_i0_rs1_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-   assign i0_rs2_bypass_data_d[31:0]=({32{dec_i0_rs2_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-
-   assign i0_rs1_d[31:0]           = ({32{ i0_rs1_bypass_en_d                                           }}             & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{~i0_rs1_bypass_en_d &  dec_i0_select_pc_d                     }}             & {dec_i0_pc_d[31:1],1'b0}  ) |    // for jal's
-                                     ({32{~i0_rs1_bypass_en_d &  dec_debug_wdata_rs1_d                  }}             & dbg_cmd_wrdata[31:0]      ) |
-                                     ({32{~i0_rs1_bypass_en_d & ~dec_debug_wdata_rs1_d & dec_i0_rs1_en_d}}             & gpr_i0_rs1_d[31:0]        );
-
-   assign i0_rs2_d[31:0]           = ({32{~i0_rs2_bypass_en_d & dec_i0_rs2_en_d}}                                      & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{~i0_rs2_bypass_en_d                  }}                                      & dec_i0_immed_d[31:0]      ) |
-                                     ({32{ i0_rs2_bypass_en_d                  }}                                      & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign exu_lsu_rs1_d[31:0]      = ({32{~i0_rs1_bypass_en_d & ~dec_extint_stall & dec_i0_rs1_en_d & dec_qual_lsu_d}} & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{                       dec_extint_stall                   & dec_qual_lsu_d}} & {dec_tlu_meihap[31:2],2'b0});
-
-   assign exu_lsu_rs2_d[31:0]      = ({32{~i0_rs2_bypass_en_d & ~dec_extint_stall & dec_i0_rs2_en_d & dec_qual_lsu_d}} & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{ i0_rs2_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign muldiv_rs1_d[31:0]       = ({32{~i0_rs1_bypass_en_d & dec_i0_rs1_en_d}}                                      & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d                  }}                                      & i0_rs1_bypass_data_d[31:0]);
-
-
-   assign x_data_en                =  dec_data_en[1];
-   assign x_data_en_q1             =  dec_data_en[1] & dec_csr_ren_d;
-   assign x_data_en_q2             =  dec_data_en[1] & dec_i0_branch_d;
-   assign r_data_en                =  dec_data_en[0];
-   assign r_data_en_q2             =  dec_data_en[0] & i0_branch_x;
-   assign x_ctl_en                 =  dec_ctl_en[1];
-   assign r_ctl_en                 =  dec_ctl_en[0];
-
-
-
-
-   eb1_exu_alu_ctl #(.pt(pt)) i_alu  (.*,
-                          .enable            ( x_data_en                   ),   // I
-                          .pp_in             ( i0_predict_newp_d           ),   // I
-                          .valid_in          ( dec_i0_alu_decode_d         ),   // I
-                          .flush_upper_x     ( i0_flush_upper_x            ),   // I
-                          .flush_lower_r     ( dec_tlu_flush_lower_r       ),   // I
-                          .a_in              ( i0_rs1_d[31:0]              ),   // I
-                          .b_in              ( i0_rs2_d[31:0]              ),   // I
-                          .pc_in             ( dec_i0_pc_d[31:1]           ),   // I
-                          .brimm_in          ( dec_i0_br_immed_d[12:1]     ),   // I
-                          .ap                ( i0_ap                       ),   // I
-                          .csr_ren_in        ( dec_csr_ren_d               ),   // I
-                          .csr_rddata_in     ( dec_csr_rddata_d[31:0]      ),   // I
-                          .result_ff         ( alu_result_x[31:0]          ),   // O
-                          .flush_upper_out   ( i0_flush_upper_d            ),   // O
-                          .flush_final_out   ( exu_flush_final             ),   // O
-                          .flush_path_out    ( i0_flush_path_d[31:1]       ),   // O
-                          .predict_p_out     ( i0_predict_p_d              ),   // O
-                          .pred_correct_out  ( i0_pred_correct_upper_d     ),   // O
-                          .pc_ff             ( exu_i0_pc_x[31:1]           ));  // O
-
-
-
-   eb1_exu_mul_ctl #(.pt(pt)) i_mul   (.*,
-                          .mul_p             ( mul_p              & {$bits(eb1_mul_pkt_t){mul_p.valid}} ),   // I
-                          .rs1_in            ( muldiv_rs1_d[31:0] & {32{mul_p.valid}}                    ),   // I
-                          .rs2_in            ( i0_rs2_d[31:0]     & {32{mul_p.valid}}                    ),   // I
-                          .result_x          ( mul_result_x[31:0]                                        ));  // O
-
-
-
-   eb1_exu_div_ctl #(.pt(pt)) i_div   (.*,
-                          .cancel            ( dec_div_cancel              ),   // I
-                          .dp                ( div_p                       ),   // I
-                          .dividend          ( muldiv_rs1_d[31:0]          ),   // I
-                          .divisor           ( i0_rs2_d[31:0]              ),   // I
-                          .finish_dly        ( exu_div_wren                ),   // O
-                          .out               ( exu_div_result[31:0]        ));  // O
-
-
-
-   assign exu_i0_result_x[31:0]    =  (mul_valid_x)  ?  mul_result_x[31:0]  :  alu_result_x[31:0];
-
-
-
-
-   always_comb begin
-      i0_predict_newp_d            =  dec_i0_predict_p_d;
-      i0_predict_newp_d.boffset    =  dec_i0_pc_d[1];  // from the start of inst
-   end
-
-
-   assign exu_pmu_i0_br_misp       =  i0_pp_r.misp;
-   assign exu_pmu_i0_br_ataken     =  i0_pp_r.ataken;
-   assign exu_pmu_i0_pc4           =  i0_pp_r.pc4;
-
-
-   assign i0_valid_d               =  i0_predict_p_d.valid  & dec_i0_alu_decode_d & ~dec_tlu_flush_lower_r;
-   assign i0_taken_d               = (i0_predict_p_d.ataken & dec_i0_alu_decode_d);
-
-if(pt.BTB_ENABLE==1) begin
-   // maintain GHR at D
-   assign ghr_d_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r &  i0_valid_d}} & {ghr_d[pt.BHT_GHR_SIZE-2:0], i0_taken_d}) |
-                                     ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r & ~i0_valid_d}} &  ghr_d[pt.BHT_GHR_SIZE-1:0]             ) |
-                                     ({pt.BHT_GHR_SIZE{ dec_tlu_flush_lower_r              }} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             );
-
-   // maintain GHR at X
-   assign ghr_x_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{ i0_valid_x}} & {ghr_x[pt.BHT_GHR_SIZE-2:0], i0_taken_x}) |
-                                     ({pt.BHT_GHR_SIZE{~i0_valid_x}} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             ) ;
-
-
-   assign exu_i0_br_valid_r                                 =  i0_pp_r.valid;
-   assign exu_i0_br_mp_r                                    =  i0_pp_r.misp;
-   assign exu_i0_br_way_r                                   =  i0_pp_r.way;
-   assign exu_i0_br_hist_r[1:0]                             =  {2{i0_pp_r.valid}} & i0_pp_r.hist[1:0];
-   assign exu_i0_br_error_r                                 =  i0_pp_r.br_error;
-   assign exu_i0_br_middle_r                                =  i0_pp_r.pc4 ^ i0_pp_r.boffset;
-   assign exu_i0_br_start_error_r                           =  i0_pp_r.br_start_error;
-
-   assign {exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0],
-           exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]}=  predpipe_r[PREDPIPESIZE-1:pt.BTB_BTAG_SIZE];
-
-
-   assign final_predict_mp                                  = (i0_flush_upper_x)  ?  i0_predict_p_x  :  '0;
-
-   assign final_predpipe_mp[PREDPIPESIZE-1:0]               = (i0_flush_upper_x)  ?  predpipe_x      :  '0;
-
-   assign after_flush_eghr[pt.BHT_GHR_SIZE-1:0]             = (i0_flush_upper_x & ~dec_tlu_flush_lower_r)  ?  ghr_d[pt.BHT_GHR_SIZE-1:0]  :  ghr_x[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign exu_mp_pkt.valid                                  =  final_predict_mp.valid;
-   assign exu_mp_pkt.way                                    =  final_predict_mp.way;
-   assign exu_mp_pkt.misp                                   =  final_predict_mp.misp;
-   assign exu_mp_pkt.pcall                                  =  final_predict_mp.pcall;
-   assign exu_mp_pkt.pja                                    =  final_predict_mp.pja;
-   assign exu_mp_pkt.pret                                   =  final_predict_mp.pret;
-   assign exu_mp_pkt.ataken                                 =  final_predict_mp.ataken;
-   assign exu_mp_pkt.boffset                                =  final_predict_mp.boffset;
-   assign exu_mp_pkt.pc4                                    =  final_predict_mp.pc4;
-   assign exu_mp_pkt.hist[1:0]                              =  final_predict_mp.hist[1:0];
-   assign exu_mp_pkt.toffset[11:0]                          =  final_predict_mp.toffset[11:0];
-
-   assign exu_mp_fghr[pt.BHT_GHR_SIZE-1:0]                  =  after_flush_eghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign {exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],
-           exu_mp_btag[pt.BTB_BTAG_SIZE-1:0]}               =  final_predpipe_mp[PREDPIPESIZE-pt.BHT_GHR_SIZE-1:0];
-
-   assign exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]                  =  final_predpipe_mp[PREDPIPESIZE-1:pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+pt.BTB_BTAG_SIZE+1]; // mp ghr for bht write
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign ghr_d_ns = '0;
-   assign ghr_x_ns = '0;
-   assign exu_mp_pkt = '0;
-   assign exu_mp_eghr = '0;
-   assign exu_mp_fghr = '0;
-   assign exu_mp_index = '0;
-   assign exu_mp_btag = '0;
-   assign exu_i0_br_hist_r = '0;
-   assign exu_i0_br_error_r = '0;
-   assign exu_i0_br_start_error_r = '0;
-   assign exu_i0_br_index_r = '0;
-   assign exu_i0_br_valid_r = '0;
-   assign exu_i0_br_mp_r = '0;
-   assign exu_i0_br_middle_r = '0;
-   assign exu_i0_br_fghr_r = '0;
-   assign exu_i0_br_way_r = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   assign exu_flush_path_final[31:1] = ( {31{ dec_tlu_flush_lower_r                   }} & dec_tlu_flush_path_r[31:1] ) |
-                                       ( {31{~dec_tlu_flush_lower_r & i0_flush_upper_d}} & i0_flush_path_d[31:1]      );
-
-   assign exu_npc_r[31:1]            = (i0_pred_correct_upper_r)  ?  pred_correct_npc_r[31:1]    :  i0_flush_path_upper_r[31:1];
-
-
-endmodule // eb1_exu
diff --git a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_alu_ctl.sv b/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_alu_ctl.sv
deleted file mode 100644
index 9d05f43..0000000
--- a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_alu_ctl.sv
+++ /dev/null
@@ -1,597 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_alu_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)
-  (
-   input  logic                  clk,                // Top level clock
-   input  logic                  rst_l,              // Reset
-   input  logic                  scan_mode,          // Scan control
-
-   input  logic                  flush_upper_x,      // Branch flush from previous cycle
-   input  logic                  flush_lower_r,      // Master flush of entire pipeline
-   input  logic                  enable,             // Clock enable
-   input  logic                  valid_in,           // Valid
-   input  eb1_alu_pkt_t         ap,                 // predecodes
-   input  logic                  csr_ren_in,         // CSR select
-   input  logic        [31:0]    csr_rddata_in,      // CSR data
-   input  logic signed [31:0]    a_in,               // A operand
-   input  logic        [31:0]    b_in,               // B operand
-   input  logic        [31:1]    pc_in,              // for pc=pc+2,4 calculations
-   input  eb1_predict_pkt_t     pp_in,              // Predicted branch structure
-   input  logic        [12:1]    brimm_in,           // Branch offset
-
-
-   output logic        [31:0]    result_ff,          // final result
-   output logic                  flush_upper_out,    // Branch flush
-   output logic                  flush_final_out,    // Branch flush or flush entire pipeline
-   output logic        [31:1]    flush_path_out,     // Branch flush PC
-   output logic        [31:1]    pc_ff,              // flopped PC
-   output logic                  pred_correct_out,   // NPC control
-   output eb1_predict_pkt_t     predict_p_out       // Predicted branch structure
-  );
-
-
-   logic               [31:0]    zba_a_in;
-   logic               [31:0]    aout;
-   logic                         cout,ov,neg;
-   logic               [31:0]    lout;
-   logic               [31:0]    sout;
-   logic                         sel_shift;
-   logic                         sel_adder;
-   logic                         slt_one;
-   logic                         actual_taken;
-   logic               [31:1]    pcout;
-   logic                         cond_mispredict;
-   logic                         target_mispredict;
-   logic                         eq, ne, lt, ge;
-   logic                         any_jal;
-   logic               [1:0]     newhist;
-   logic                         sel_pc;
-   logic               [31:0]    csr_write_data;
-   logic               [31:0]    result;
-
-
-
-
-   // *** Start - BitManip ***
-
-   // Zbb
-   logic                  ap_clz;
-   logic                  ap_ctz;
-   logic                  ap_pcnt;
-   logic                  ap_sext_b;
-   logic                  ap_sext_h;
-   logic                  ap_min;
-   logic                  ap_max;
-   logic                  ap_pack;
-   logic                  ap_packu;
-   logic                  ap_packh;
-   logic                  ap_rol;
-   logic                  ap_ror;
-   logic                  ap_rev;
-   logic                  ap_rev8;
-   logic                  ap_orc_b;
-   logic                  ap_orc16;
-   logic                  ap_zbb;
-
-   // Zbs
-   logic                  ap_sbset;
-   logic                  ap_sbclr;
-   logic                  ap_sbinv;
-   logic                  ap_sbext;
-
-   // Zbr
-   logic                  ap_slo;
-   logic                  ap_sro;
-
-   // Zba
-   logic                  ap_sh1add;
-   logic                  ap_sh2add;
-   logic                  ap_sh3add;
-   logic                  ap_zba;
-
-
-
-   if (pt.BITMANIP_ZBB == 1)
-     begin
-       assign ap_clz          =  ap.clz;
-       assign ap_ctz          =  ap.ctz;
-       assign ap_pcnt         =  ap.pcnt;
-       assign ap_sext_b       =  ap.sext_b;
-       assign ap_sext_h       =  ap.sext_h;
-       assign ap_min          =  ap.min;
-       assign ap_max          =  ap.max;
-     end
-   else
-     begin
-       assign ap_clz          =  1'b0;
-       assign ap_ctz          =  1'b0;
-       assign ap_pcnt         =  1'b0;
-       assign ap_sext_b       =  1'b0;
-       assign ap_sext_h       =  1'b0;
-       assign ap_min          =  1'b0;
-       assign ap_max          =  1'b0;
-     end
-
-
-   if ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     begin
-       assign ap_pack         =  ap.pack;
-       assign ap_packu        =  ap.packu;
-       assign ap_packh        =  ap.packh;
-       assign ap_rol          =  ap.rol;
-       assign ap_ror          =  ap.ror;
-       assign ap_rev          =  ap.grev & (b_in[4:0] == 5'b11111);
-       assign ap_rev8         =  ap.grev & (b_in[4:0] == 5'b11000);
-       assign ap_orc_b        =  ap.gorc & (b_in[4:0] == 5'b00111);
-       assign ap_orc16        =  ap.gorc & (b_in[4:0] == 5'b10000);
-       assign ap_zbb          =  ap.zbb;
-     end
-   else
-     begin
-       assign ap_pack         =  1'b0;
-       assign ap_packu        =  1'b0;
-       assign ap_packh        =  1'b0;
-       assign ap_rol          =  1'b0;
-       assign ap_ror          =  1'b0;
-       assign ap_rev          =  1'b0;
-       assign ap_rev8         =  1'b0;
-       assign ap_orc_b        =  1'b0;
-       assign ap_orc16        =  1'b0;
-       assign ap_zbb          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBS == 1)
-     begin
-       assign ap_sbset        =  ap.sbset;
-       assign ap_sbclr        =  ap.sbclr;
-       assign ap_sbinv        =  ap.sbinv;
-       assign ap_sbext        =  ap.sbext;
-     end
-   else
-     begin
-       assign ap_sbset        =  1'b0;
-       assign ap_sbclr        =  1'b0;
-       assign ap_sbinv        =  1'b0;
-       assign ap_sbext        =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_slo          =  ap.slo;
-       assign ap_sro          =  ap.sro;
-     end
-   else
-     begin
-       assign ap_slo          =  1'b0;
-       assign ap_sro          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBA == 1)
-     begin
-       assign ap_sh1add       =  ap.sh1add;
-       assign ap_sh2add       =  ap.sh2add;
-       assign ap_sh3add       =  ap.sh3add;
-       assign ap_zba          =  ap.zba;
-     end
-   else
-     begin
-       assign ap_sh1add       =  1'b0;
-       assign ap_sh2add       =  1'b0;
-       assign ap_sh3add       =  1'b0;
-       assign ap_zba          =  1'b0;
-     end
-
-
-
-
-   // *** End   - BitManip ***
-
-
-
-
-   rvdffpcie #(31) i_pc_ff      (.*, .clk(clk), .en(enable),              .din(pc_in[31:1]),    .dout(pc_ff[31:1]));   // any PC is run through here - doesn't have to be alu
-   rvdffe    #(32) i_result_ff  (.*, .clk(clk), .en(enable & valid_in),   .din(result[31:0]),   .dout(result_ff[31:0]));
-
-
-
-   // immediates are just muxed into rs2
-
-   // add    =>  add=1;
-   // sub    =>  add=1; sub=1;
-
-   // and    =>  lctl=3
-   // or     =>  lctl=2
-   // xor    =>  lctl=1
-
-   // sll    =>  sctl=3
-   // srl    =>  sctl=2
-   // sra    =>  sctl=1
-
-   // slt    =>  slt
-
-   // lui    =>  lctl=2; or x0, imm20 previously << 12
-   // auipc  =>  add;   add pc, imm20 previously << 12
-
-   // beq    =>  bctl=4; add; add x0, pc, sext(offset[12:1])
-   // bne    =>  bctl=3; add; add x0, pc, sext(offset[12:1])
-   // blt    =>  bctl=2; add; add x0, pc, sext(offset[12:1])
-   // bge    =>  bctl=1; add; add x0, pc, sext(offset[12:1])
-
-   // jal    =>  rs1=pc {pc[31:1],1'b0},  rs2=sext(offset20:1]);   rd=pc+[2,4]
-   // jalr   =>  rs1=rs1,                 rs2=sext(offset20:1]);   rd=pc+[2,4]
-
-
-
-   assign zba_a_in[31:0]      = ( {32{ ap_sh1add}} & {a_in[30:0],1'b0} ) |
-                                ( {32{ ap_sh2add}} & {a_in[29:0],2'b0} ) |
-                                ( {32{ ap_sh3add}} & {a_in[28:0],3'b0} ) |
-                                ( {32{~ap_zba   }} &  a_in[31:0]       );
-
-   logic        [31:0]    bm;
-
-   assign bm[31:0]            = ( ap.sub )  ?  ~b_in[31:0]  :  b_in[31:0];
-
-   assign {cout, aout[31:0]}  = {1'b0, zba_a_in[31:0]} + {1'b0, bm[31:0]} + {32'b0, ap.sub};
-
-   assign ov                  = (~a_in[31] & ~bm[31] &  aout[31]) |
-                                ( a_in[31] &  bm[31] & ~aout[31] );
-
-   assign lt                  = (~ap.unsign & (neg ^ ov)) |
-                                ( ap.unsign & ~cout);
-
-   assign eq                  = (a_in[31:0] == b_in[31:0]);
-   assign ne                  = ~eq;
-   assign neg                 =  aout[31];
-   assign ge                  = ~lt;
-
-
-
-   assign lout[31:0]          =  ( {32{csr_ren_in       }} &  csr_rddata_in[31:0]       ) |
-                                 ( {32{ap.land & ~ap_zbb}} &  a_in[31:0] &  b_in[31:0]  ) |
-                                 ( {32{ap.lor  & ~ap_zbb}} & (a_in[31:0] |  b_in[31:0]) ) |
-                                 ( {32{ap.lxor & ~ap_zbb}} & (a_in[31:0] ^  b_in[31:0]) ) |
-                                 ( {32{ap.land &  ap_zbb}} &  a_in[31:0] & ~b_in[31:0]  ) |
-                                 ( {32{ap.lor  &  ap_zbb}} & (a_in[31:0] | ~b_in[31:0]) ) |
-                                 ( {32{ap.lxor &  ap_zbb}} & (a_in[31:0] ^ ~b_in[31:0]) );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SLO,SRO      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ROL,ROR      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBEXT        * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     shift_amount;
-   logic        [31:0]    shift_mask;
-   logic        [62:0]    shift_extend;
-   logic        [62:0]    shift_long;
-
-
-   assign shift_amount[5:0]            = ( { 6{ap.sll}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |   // [5] unused
-                                         ( { 6{ap.srl}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap.sra}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_rol}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_ror}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_slo}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_sro}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_sbext}} &          {1'b0,b_in[4:0]}  );
-
-
-   assign shift_mask[31:0]             = ( 32'hffffffff << ({5{ap.sll | ap_slo}} & b_in[4:0]) );
-
-
-   assign shift_extend[31:0]           =  a_in[31:0];
-
-   assign shift_extend[62:32]          = ( {31{ap.sra}} & {31{a_in[31]}} ) |
-                                         ( {31{ap.sll}} &     a_in[30:0] ) |
-                                         ( {31{ap_rol}} &     a_in[30:0] ) |
-                                         ( {31{ap_ror}} &     a_in[30:0] ) |
-                                         ( {31{ap_slo}} &     a_in[30:0] ) |
-                                         ( {31{ap_sro}} & {31{  1'b1  }} );
-
-
-   assign shift_long[62:0]    = ( shift_extend[62:0] >> shift_amount[4:0] );   // 62-32 unused
-
-   assign sout[31:0]          = ( shift_long[31:0] & shift_mask[31:0] ) | ( {32{ap_slo}} & ~shift_mask[31:0] );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLZ,CTZ      * * * * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_clz_ctz_sel;
-   logic        [31:0]    bitmanip_a_reverse_ff;
-   logic        [31:0]    bitmanip_lzd_in;
-   logic        [5:0]     bitmanip_dw_lzd_enc;
-   logic        [5:0]     bitmanip_clz_ctz_result;
-
-   assign bitmanip_clz_ctz_sel         =  ap_clz | ap_ctz;
-
-   assign bitmanip_a_reverse_ff[31:0]  = {a_in[0],  a_in[1],  a_in[2],  a_in[3],  a_in[4],  a_in[5],  a_in[6],  a_in[7],
-                                          a_in[8],  a_in[9],  a_in[10], a_in[11], a_in[12], a_in[13], a_in[14], a_in[15],
-                                          a_in[16], a_in[17], a_in[18], a_in[19], a_in[20], a_in[21], a_in[22], a_in[23],
-                                          a_in[24], a_in[25], a_in[26], a_in[27], a_in[28], a_in[29], a_in[30], a_in[31]};
-
-   assign bitmanip_lzd_in[31:0]        = ( {32{ap_clz}} & a_in[31:0]                 ) |
-                                         ( {32{ap_ctz}} & bitmanip_a_reverse_ff[31:0]);
-
-   logic        [31:0]    bitmanip_lzd_os;
-   integer                i;
-   logic                  found;
-
-   always_comb
-     begin
-        bitmanip_lzd_os[31:0]   =  bitmanip_lzd_in[31:0];
-        bitmanip_dw_lzd_enc[5:0]=  6'b0;
-        found = 1'b0;
-
-        for (int i=0; i<32 && found==0; i++) begin
-           if (bitmanip_lzd_os[31] == 1'b0) begin
-              bitmanip_dw_lzd_enc[5:0]=  bitmanip_dw_lzd_enc[5:0] + 6'b00_0001;
-              bitmanip_lzd_os[31:0]   =  bitmanip_lzd_os[31:0] << 1;
-           end
-           else
-              found=1'b1;
-        end
-     end
-
-
-
-   assign bitmanip_clz_ctz_result[5:0] = {6{bitmanip_clz_ctz_sel}} & {bitmanip_dw_lzd_enc[5],( {5{~bitmanip_dw_lzd_enc[5]}} & bitmanip_dw_lzd_enc[4:0] )};
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PCNT         * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     bitmanip_pcnt;
-   logic        [5:0]     bitmanip_pcnt_result;
-
-
-   integer                bitmanip_pcnt_i;
-
-   always_comb
-     begin
-       bitmanip_pcnt[5:0]               =  6'b0;
-
-       for (bitmanip_pcnt_i=0; bitmanip_pcnt_i<32; bitmanip_pcnt_i++)
-         begin
-            bitmanip_pcnt[5:0]          =  bitmanip_pcnt[5:0] + {5'b0,a_in[bitmanip_pcnt_i]};
-         end      // FOR    bitmanip_pcnt_i
-     end          // ALWAYS_COMB
-
-
-   assign bitmanip_pcnt_result[5:0]    =  {6{ap_pcnt}} & bitmanip_pcnt[5:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SEXT_B,SEXT_H  * * * * * * * * * * * * * * * * *
-
-   logic       [31:0]     bitmanip_sext_result;
-
-   assign bitmanip_sext_result[31:0]   = ( {32{ap_sext_b}} & { {24{a_in[7]}} ,a_in[7:0]  } ) |
-                                         ( {32{ap_sext_h}} & { {16{a_in[15]}},a_in[15:0] } );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  MIN,MAX,MINU,MAXU  * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_minmax_sel;
-   logic        [31:0]    bitmanip_minmax_result;
-
-   assign bitmanip_minmax_sel          =  ap_min | ap_max;
-
-
-   logic                  bitmanip_minmax_sel_a;
-
-   assign bitmanip_minmax_sel_a        =  ge  ^ ap_min;
-
-   assign bitmanip_minmax_result[31:0] = ({32{bitmanip_minmax_sel &  bitmanip_minmax_sel_a}}  &  a_in[31:0]) |
-                                         ({32{bitmanip_minmax_sel & ~bitmanip_minmax_sel_a}}  &  b_in[31:0]);
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PACK, PACKU, PACKH * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_pack_result;
-   logic        [31:0]    bitmanip_packu_result;
-   logic        [31:0]    bitmanip_packh_result;
-
-   assign bitmanip_pack_result[31:0]   = {32{ap_pack}}  & {b_in[15:0], a_in[15:0]};
-   assign bitmanip_packu_result[31:0]  = {32{ap_packu}} & {b_in[31:16],a_in[31:16]};
-   assign bitmanip_packh_result[31:0]  = {32{ap_packh}} & {16'b0,b_in[7:0],a_in[7:0]};
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  REV, REV8, ORC_B * * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_rev_result;
-   logic        [31:0]    bitmanip_rev8_result;
-   logic        [31:0]    bitmanip_orc_b_result;
-   logic        [31:0]    bitmanip_orc16_result;
-
-   assign bitmanip_rev_result[31:0]    = {32{ap_rev}}   &
-                                         {a_in[00],a_in[01],a_in[02],a_in[03],a_in[04],a_in[05],a_in[06],a_in[07],
-                                          a_in[08],a_in[09],a_in[10],a_in[11],a_in[12],a_in[13],a_in[14],a_in[15],
-                                          a_in[16],a_in[17],a_in[18],a_in[19],a_in[20],a_in[21],a_in[22],a_in[23],
-                                          a_in[24],a_in[25],a_in[26],a_in[27],a_in[28],a_in[29],a_in[30],a_in[31]};
-
-   assign bitmanip_rev8_result[31:0]   = {32{ap_rev8}}  & {a_in[7:0],a_in[15:8],a_in[23:16],a_in[31:24]};
-
-
-// uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-// {
-//      uint32_t x = rs1;
-//      int shamt = rs2 & 31;                                                        ORC.B  ORC16
-//      if (shamt &  1) x |= ((x & 0x55555555) <<  1) | ((x & 0xAAAAAAAA) >>  1);      1      0
-//      if (shamt &  2) x |= ((x & 0x33333333) <<  2) | ((x & 0xCCCCCCCC) >>  2);      1      0
-//      if (shamt &  4) x |= ((x & 0x0F0F0F0F) <<  4) | ((x & 0xF0F0F0F0) >>  4);      1      0
-//      if (shamt &  8) x |= ((x & 0x00FF00FF) <<  8) | ((x & 0xFF00FF00) >>  8);      0      0
-//      if (shamt & 16) x |= ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);      0      1
-//      return x;
-// }
-
-
-// BEFORE              31  ,   30  ,   29  ,   28  ,    27  ,   26,     25,     24
-// shamt[0]  b =    a31|a30,a31|a30,a29|a28,a29|a28, a27|a26,a27|a26,a25|a24,a25|a24
-// shamt[1]  c =    b31|b29,b30|b28,b31|b29,b30|b28, b27|b25,b26|b24,b27|b25,b26|b24
-// shamt[2]  d =    c31|c27,c30|c26,c29|c25,c28|c24, c31|c27,c30|c26,c29|c25,c28|c24
-//
-// Expand d31 =        c31         |         c27;
-//            =   b31   |   b29    |    b27   |   b25;
-//            = a31|a30 | a29|a28  |  a27|a26 | a25|a24
-
-   assign bitmanip_orc_b_result[31:0]  = {32{ap_orc_b}} & { {8{| a_in[31:24]}}, {8{| a_in[23:16]}}, {8{| a_in[15:8]}}, {8{| a_in[7:0]}} };
-
-   assign bitmanip_orc16_result[31:0]  = {32{ap_orc16}} & {     {a_in[31:16] | a_in[15:0]},             {a_in[31:16] | a_in[15:0]}      };
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBSET, ZBCLR, ZBINV  * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_sb_1hot;
-   logic        [31:0]    bitmanip_sb_data;
-
-   assign bitmanip_sb_1hot[31:0]       = ( 32'h00000001 << b_in[4:0] );
-
-   assign bitmanip_sb_data[31:0]       = ( {32{ap_sbset}} & ( a_in[31:0] |  bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbclr}} & ( a_in[31:0] & ~bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbinv}} & ( a_in[31:0] ^  bitmanip_sb_1hot[31:0]) );
-
-
-
-
-
-
-   assign sel_shift           =  ap.sll  | ap.srl | ap.sra | ap_slo | ap_sro | ap_rol | ap_ror;
-   assign sel_adder           = (ap.add  | ap.sub | ap_zba) & ~ap.slt & ~ap_min & ~ap_max;
-   assign sel_pc              =  ap.jal  | pp_in.pcall | pp_in.pja | pp_in.pret;
-   assign csr_write_data[31:0]= (ap.csr_imm)  ?  b_in[31:0]  :  a_in[31:0];
-
-   assign slt_one             =  ap.slt & lt;
-
-
-
-   assign result[31:0]        =                        lout[31:0]             |
-                                ({32{sel_shift}}    &  sout[31:0]           ) |
-                                ({32{sel_adder}}    &  aout[31:0]           ) |
-                                ({32{sel_pc}}       & {pcout[31:1],1'b0}    ) |
-                                ({32{ap.csr_write}} &  csr_write_data[31:0] ) |
-                                                      {31'b0, slt_one}        |
-                                ({32{ap_sbext}}     & {31'b0, sout[0]}      ) |
-                                                      {26'b0, bitmanip_clz_ctz_result[5:0]} |
-                                                      {26'b0, bitmanip_pcnt_result[5:0]}    |
-                                                       bitmanip_sext_result[31:0]    |
-                                                       bitmanip_minmax_result[31:0]  |
-                                                       bitmanip_pack_result[31:0]    |
-                                                       bitmanip_packu_result[31:0]   |
-                                                       bitmanip_packh_result[31:0]   |
-                                                       bitmanip_rev_result[31:0]     |
-                                                       bitmanip_rev8_result[31:0]    |
-                                                       bitmanip_orc_b_result[31:0]   |
-                                                       bitmanip_orc16_result[31:0]   |
-                                                       bitmanip_sb_data[31:0];
-
-
-
-   // *** branch handling ***
-
-   assign any_jal             =  ap.jal      |
-                                 pp_in.pcall |
-                                 pp_in.pja   |
-                                 pp_in.pret;
-
-   assign actual_taken        = (ap.beq & eq) |
-                                (ap.bne & ne) |
-                                (ap.blt & lt) |
-                                (ap.bge & ge) |
-                                 any_jal;
-
-   // for a conditional br pcout[] will be the opposite of the branch prediction
-   // for jal or pcall, it will be the link address pc+2 or pc+4
-
-   rvbradder ibradder (
-                     .pc     ( pc_in[31:1]    ),
-                     .offset ( brimm_in[12:1] ),
-                     .dout   ( pcout[31:1]    ));
-
-
-   // pred_correct is for the npc logic
-   // pred_correct indicates not to use the flush_path
-   // for any_jal pred_correct==0
-
-   assign pred_correct_out    = (valid_in & ap.predict_nt & ~actual_taken & ~any_jal) |
-                                (valid_in & ap.predict_t  &  actual_taken & ~any_jal);
-
-
-   // for any_jal adder output is the flush path
-   assign flush_path_out[31:1]= (any_jal) ? aout[31:1] : pcout[31:1];
-
-
-   // pcall and pret are included here
-   assign cond_mispredict     = (ap.predict_t  & ~actual_taken) |
-                                (ap.predict_nt &  actual_taken);
-
-
-   // target mispredicts on ret's
-
-   assign target_mispredict   =  pp_in.pret & (pp_in.prett[31:1] != aout[31:1]);
-
-   assign flush_upper_out     =   (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x   & ~flush_lower_r;
-   assign flush_final_out     = ( (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x ) |  flush_lower_r;
-
-
-   // .i 3
-   // .o 2
-   // .ilb hist[1] hist[0] taken
-   // .ob newhist[1] newhist[0]
-   // .type fd
-   //
-   // 00 0 01
-   // 01 0 01
-   // 10 0 00
-   // 11 0 10
-   // 00 1 10
-   // 01 1 00
-   // 10 1 11
-   // 11 1 11
-
-   assign newhist[1]          = ( pp_in.hist[1] &  pp_in.hist[0]) | (~pp_in.hist[0] & actual_taken);
-   assign newhist[0]          = (~pp_in.hist[1] & ~actual_taken)  | ( pp_in.hist[1] & actual_taken);
-
-   always_comb begin
-      predict_p_out           =  pp_in;
-
-      predict_p_out.misp      = ~flush_upper_x & ~flush_lower_r & (cond_mispredict | target_mispredict);
-      predict_p_out.ataken    =  actual_taken;
-      predict_p_out.hist[1]   =  newhist[1];
-      predict_p_out.hist[0]   =  newhist[0];
-
-   end
-
-
-
-endmodule // eb1_exu_alu_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_div_ctl.sv b/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_div_ctl.sv
deleted file mode 100644
index a3b438e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_div_ctl.sv
+++ /dev/null
@@ -1,1801 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_div_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)
-  (
-   input logic           clk,                       // Top level clock
-   input logic           rst_l,                     // Reset
-   input logic           scan_mode,                 // Scan mode
-
-   input eb1_div_pkt_t  dp,                        // valid, sign, rem
-   input logic  [31:0]   dividend,                  // Numerator
-   input logic  [31:0]   divisor,                   // Denominator
-
-   input logic           cancel,                    // Cancel divide
-
-
-   output logic          finish_dly,                // Finish to match data
-   output logic [31:0]   out                        // Result
-  );
-
-
-   logic [31:0]          out_raw;
-
-   assign out[31:0] = {32{finish_dly}} & out_raw[31:0];     // Qualification added to quiet result bus while divide is iterating
-
-
-
-   if (pt.DIV_NEW == 0)
-      begin
-        eb1_exu_div_existing_1bit_cheapshortq   i_existing_1bit_div_cheapshortq (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 1) )
-      begin
-        eb1_exu_div_new_1bit_fullshortq         i_new_1bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 2) )
-      begin
-        eb1_exu_div_new_2bit_fullshortq         i_new_2bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 3) )
-      begin
-        eb1_exu_div_new_3bit_fullshortq         i_new_3bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 4) )
-      begin
-        eb1_exu_div_new_4bit_fullshortq         i_new_4bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-
-endmodule // eb1_exu_div_ctl
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_existing_1bit_cheapshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic         div_clken;
-   logic         run_in, run_state;
-   logic  [5:0]  count_in, count;
-   logic [32:0]  m_ff;
-   logic         qff_enable;
-   logic         aff_enable;
-   logic [32:0]  q_in, q_ff;
-   logic [32:0]  a_in, a_ff;
-   logic [32:0]  m_eff;
-   logic [32:0]  a_shift;
-   logic         dividend_neg_ff, divisor_neg_ff;
-   logic [31:0]  dividend_comp;
-   logic [31:0]  dividend_eff;
-   logic [31:0]  q_ff_comp;
-   logic [31:0]  q_ff_eff;
-   logic [31:0]  a_ff_comp;
-   logic [31:0]  a_ff_eff;
-   logic         sign_ff, sign_eff;
-   logic         rem_ff;
-   logic         add;
-   logic [32:0]  a_eff;
-   logic [64:0]  a_eff_shift;
-   logic         rem_correct;
-   logic         valid_ff_x;
-   logic         valid_x;
-   logic         finish;
-   logic         finish_ff;
-
-   logic         smallnum_case, smallnum_case_ff;
-   logic  [3:0]  smallnum, smallnum_ff;
-   logic         m_already_comp;
-
-   logic [4:0]   a_cls;
-   logic [4:0]   b_cls;
-   logic [5:0]   shortq_shift;
-   logic [5:0]   shortq_shift_ff;
-   logic [5:0]   shortq;
-   logic         shortq_enable;
-   logic         shortq_enable_ff;
-   logic [32:0]  short_dividend;
-   logic [3:0]   shortq_raw;
-   logic [3:0]   shortq_shift_xx;
-
-
-
-   rvdffe #(23) i_misc_ff        (.*, .clk(clk), .en(div_clken),   .din ({valid_in & ~cancel,
-                                                                          finish   & ~cancel,
-                                                                          run_in,
-                                                                          count_in[5:0],
-                                                                          (valid_in & dividend_in[31]) | (~valid_in & dividend_neg_ff),
-                                                                          (valid_in & divisor_in[31] ) | (~valid_in & divisor_neg_ff ),
-                                                                          (valid_in & sign_eff       ) | (~valid_in & sign_ff        ),
-                                                                          (valid_in & rem_in         ) | (~valid_in & rem_ff         ),
-                                                                          smallnum_case,
-                                                                          smallnum[3:0],
-                                                                          shortq_enable,
-                                                                          shortq_shift[3:0]}),
-
-                                                                   .dout({valid_ff_x,
-                                                                          finish_ff,
-                                                                          run_state,
-                                                                          count[5:0],
-                                                                          dividend_neg_ff,
-                                                                          divisor_neg_ff,
-                                                                          sign_ff,
-                                                                          rem_ff,
-                                                                          smallnum_case_ff,
-                                                                          smallnum_ff[3:0],
-                                                                          shortq_enable_ff,
-                                                                          shortq_shift_xx[3:0]}));
-
-
-   rvdffe #(33) mff              (.*, .clk(clk), .en(valid_in),    .din({signed_in & divisor_in[31], divisor_in[31:0]}),   .dout(m_ff[32:0]));
-   rvdffe #(33) qff              (.*, .clk(clk), .en(qff_enable),  .din(q_in[32:0]),                                       .dout(q_ff[32:0]));
-   rvdffe #(33) aff              (.*, .clk(clk), .en(aff_enable),  .din(a_in[32:0]),                                       .dout(a_ff[32:0]));
-
-   rvtwoscomp #(32) i_dividend_comp (.din(q_ff[31:0]),    .dout(dividend_comp[31:0]));
-   rvtwoscomp #(32) i_q_ff_comp     (.din(q_ff[31:0]),    .dout(q_ff_comp[31:0]));
-   rvtwoscomp #(32) i_a_ff_comp     (.din(a_ff[31:0]),    .dout(a_ff_comp[31:0]));
-
-
-   assign valid_x                 = valid_ff_x & ~cancel;
-
-
-   // START - short circuit logic for small numbers {{
-
-   // small number divides - any 4b / 4b is done in 1 cycle (divisor != 0)
-   // to generate espresso equations:
-   // 1.  smalldiv > smalldiv.e
-   // 2.  espresso -Dso -oeqntott smalldiv.e | addassign > smalldiv
-
-   // smallnum case does not cover divide by 0
-   assign smallnum_case           = ((q_ff[31:4] == 28'b0) & (m_ff[31:4] == 28'b0) & (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x) |
-                                    ((q_ff[31:0] == 32'b0) &                         (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x);
-
-
-   assign smallnum[3]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           );
-
-
-   assign smallnum[2]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] & ~m_ff[2]                      );
-
-
-   assign smallnum[1]             = ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                                  ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] & ~m_ff[3] &                       ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2]                      );
-
-
-   assign smallnum[0]             = (            q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[0] &            ~m_ff[3] &             m_ff[1] &  m_ff[0]) |
-                                    (            q_ff[2] &                       ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                                  q_ff[0] & ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] & ~q_ff[1] &            ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &                                             ~m_ff[2] & ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] &  m_ff[2] &  m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &             q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] & ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &             m_ff[0]) |
-                                    (           ~q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                                             ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] &             q_ff[1] &                       ~m_ff[2] &            ~m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &  m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                        m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &             q_ff[1] &             m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                        q_ff[0] &            ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &            ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &             q_ff[0] &  m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[1] &            ~m_ff[3] &             m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] &  q_ff[0] &            ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] &  m_ff[3]                                 );
-
-
-   // END   - short circuit logic for small numbers }}
-
-
-   // *** Start Short Q *** {{
-
-   assign short_dividend[31:0]    =  q_ff[31:0];
-   assign short_dividend[32]      =  sign_ff & q_ff[31];
-
-
-   //    A       B
-   //   210     210    SH
-   //   ---     ---    --
-   //   1xx     000     0
-   //   1xx     001     8
-   //   1xx     01x    16
-   //   1xx     1xx    24
-   //   01x     000     8
-   //   01x     001    16
-   //   01x     01x    24
-   //   01x     1xx    32
-   //   001     000    16
-   //   001     001    24
-   //   001     01x    32
-   //   001     1xx    32
-   //   000     000    24
-   //   000     001    32
-   //   000     01x    32
-   //   000     1xx    32
-
-   assign a_cls[4:3]              =  2'b0;
-   assign a_cls[2]                =  (~short_dividend[32] & (short_dividend[31:24] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[31:23] != {9{1'b1}}));
-   assign a_cls[1]                =  (~short_dividend[32] & (short_dividend[23:16] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[22:15] != {8{1'b1}}));
-   assign a_cls[0]                =  (~short_dividend[32] & (short_dividend[15:08] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[14:07] != {8{1'b1}}));
-
-   assign b_cls[4:3]              =  2'b0;
-   assign b_cls[2]                =  (~m_ff[32]           & (          m_ff[31:24] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[31:24] != {8{1'b1}}));
-   assign b_cls[1]                =  (~m_ff[32]           & (          m_ff[23:16] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[23:16] != {8{1'b1}}));
-   assign b_cls[0]                =  (~m_ff[32]           & (          m_ff[15:08] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[15:08] != {8{1'b1}}));
-
-   assign shortq_raw[3]           = ( (a_cls[2:1] == 2'b01 ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 32
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b001) );
-
-   assign shortq_raw[2]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 24
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[1]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:1] == 2'b01 ) ) |   // Shift by 16
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[0]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:0] == 3'b001) ) |   // Shift by  8
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b000) );
-
-
-   assign shortq_enable           =  valid_ff_x & (m_ff[31:0] != 32'b0) & (shortq_raw[3:0] != 4'b0);
-
-   assign shortq_shift[3:0]       = ({4{shortq_enable}} & shortq_raw[3:0]);
-
-   assign shortq[5:0]             =  6'b0;
-   assign shortq_shift[5:4]       =  2'b0;
-   assign shortq_shift_ff[5]      =  1'b0;
-
-   assign shortq_shift_ff[4:0]    = ({5{shortq_shift_xx[3]}} & 5'b1_1111) |   // 31
-                                    ({5{shortq_shift_xx[2]}} & 5'b1_1000) |   // 24
-                                    ({5{shortq_shift_xx[1]}} & 5'b1_0000) |   // 16
-                                    ({5{shortq_shift_xx[0]}} & 5'b0_1000);    //  8
-
-   // *** End   Short *** }}
-
-
-
-
-
-   assign div_clken               =  valid_in | run_state | finish | finish_ff;
-
-   assign run_in                  = (valid_in | run_state) & ~finish & ~cancel;
-
-   assign count_in[5:0]           = {6{run_state & ~finish & ~cancel & ~shortq_enable}} & (count[5:0] + {1'b0,shortq_shift_ff[4:0]} + 6'd1);
-
-
-   assign finish                  = (smallnum_case | ((~rem_ff) ? (count[5:0] == 6'd32) : (count[5:0] == 6'd33)));
-
-   assign valid_out               =  finish_ff & ~cancel;
-
-   assign sign_eff                =  signed_in & (divisor_in[31:0] != 32'b0);
-
-
-   assign q_in[32:0]              = ({33{~run_state                                   }} &  {1'b0,dividend_in[31:0]}) |
-                                    ({33{ run_state &  (valid_ff_x | shortq_enable_ff)}} &  ({dividend_eff[31:0], ~a_in[32]} << shortq_shift_ff[4:0])) |
-                                    ({33{ run_state & ~(valid_ff_x | shortq_enable_ff)}} &  {q_ff[31:0], ~a_in[32]});
-
-   assign qff_enable              =  valid_in | (run_state & ~shortq_enable);
-
-
-
-
-   assign dividend_eff[31:0]      = (sign_ff & dividend_neg_ff) ? dividend_comp[31:0] : q_ff[31:0];
-
-
-   assign m_eff[32:0]             = ( add ) ? m_ff[32:0] : ~m_ff[32:0];
-
-   assign a_eff_shift[64:0]       = {33'b0, dividend_eff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_eff[32:0]             = ({33{ rem_correct                    }} &  a_ff[32:0]            ) |
-                                    ({33{~rem_correct & ~shortq_enable_ff}} & {a_ff[31:0], q_ff[32]} ) |
-                                    ({33{~rem_correct &  shortq_enable_ff}} &  a_eff_shift[64:32]    );
-
-   assign a_shift[32:0]           = {33{run_state}} & a_eff[32:0];
-
-   assign a_in[32:0]              = {33{run_state}} & (a_shift[32:0] + m_eff[32:0] + {32'b0,~add});
-
-   assign aff_enable              =  valid_in | (run_state & ~shortq_enable & (count[5:0]!=6'd33)) | rem_correct;
-
-
-   assign m_already_comp          = (divisor_neg_ff & sign_ff);
-
-   // if m already complemented, then invert operation add->sub, sub->add
-   assign add                     = (a_ff[32] | rem_correct) ^ m_already_comp;
-
-   assign rem_correct             = (count[5:0] == 6'd33) & rem_ff & a_ff[32];
-
-
-
-   assign q_ff_eff[31:0]          = (sign_ff & (dividend_neg_ff ^ divisor_neg_ff)) ? q_ff_comp[31:0] : q_ff[31:0];
-
-   assign a_ff_eff[31:0]          = (sign_ff &  dividend_neg_ff) ? a_ff_comp[31:0] : a_ff[31:0];
-
-   assign data_out[31:0]          = ({32{ smallnum_case_ff          }} & {28'b0, smallnum_ff[3:0]}) |
-                                    ({32{                     rem_ff}} &  a_ff_eff[31:0]          ) |
-                                    ({32{~smallnum_case_ff & ~rem_ff}} &  q_ff_eff[31:0]          );
-
-
-
-
-endmodule // eb1_exu_div_existing_1bit_cheapshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_1bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in, b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic                   quotient_set;
-   logic        [32:0]     adder_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {6'b0,1'b1} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[30:0],1'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & ~quotient_set & ~shortq_enable_ff;
-   assign r_adder_sel            =  running_state &  quotient_set & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff          ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[30:0] ,a_ff[31]} ) |
-                                   ( {32{r_adder_sel     }} &  adder_out[31:0]       ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]     ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]            );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[30:0], quotient_set}  ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]} ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                  );
-
-
-
-   assign adder_out[32:0]        = {r_ff[31:0],a_ff[31]} + {b_ff[32:0] };
-
-
-   assign quotient_set           = (~adder_out[32] ^ dividend_sign_ff) | ( (a_ff[30:0] == 31'b0) & (adder_out[32:0] == 33'b0) );
-
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_1bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_2bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [34:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder1_sel, r_adder2_sel, r_adder3_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [3:1]     quotient_raw;
-   logic         [1:0]     quotient_new;
-   logic        [32:0]     adder1_out;
-   logic        [33:0]     adder2_out;
-   logic        [34:0]     adder3_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:1]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(18) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:1],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:1], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b10} + {2'b0,shortq_shift_ff[4:1],1'b0});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:1],1'b0};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[29:0],2'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[1:0] == 2'b00) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[1:0] == 2'b01) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[1:0] == 2'b10) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[1:0] == 2'b11) & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff             ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[29:0] ,a_ff[31:30]} ) |
-                                   ( {32{r_adder1_sel    }} &  adder1_out[31:0]         ) |
-                                   ( {32{r_adder2_sel    }} &  adder2_out[31:0]         ) |
-                                   ( {32{r_adder3_sel    }} &  adder3_out[31:0]         ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]        ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]               );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[29:0], quotient_new[1:0]} ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                      );
-
-
-   assign b_ff[34:33]            = {b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[32:0]       = {         r_ff[30:0],a_ff[31:30]}  +                       b_ff[32:0];
-   assign adder2_out[33:0]       = {         r_ff[31:0],a_ff[31:30]}  + {b_ff[32:0],1'b0};
-   assign adder3_out[34:0]       = {r_ff[31],r_ff[31:0],a_ff[31:30]}  + {b_ff[33:0],1'b0}  +  b_ff[34:0];
-
-
-   assign quotient_raw[1]        = (~adder1_out[32] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[32:0] == 33'b0) );
-   assign quotient_raw[2]        = (~adder2_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[33:0] == 34'b0) );
-   assign quotient_raw[3]        = (~adder3_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[34:0] == 35'b0) );
-
-   assign quotient_new[1]        = quotient_raw[3] |  quotient_raw[2];
-   assign quotient_new[0]        = quotient_raw[3] |(~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);   // [0] is unused
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_2bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_3bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [32:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [36:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder1_sel, r_adder2_sel, r_adder3_sel, r_adder4_sel, r_adder5_sel, r_adder6_sel, r_adder7_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [7:1]     quotient_raw;
-   logic         [2:0]     quotient_new;
-   logic        [33:0]     adder1_out;
-   logic        [34:0]     adder2_out;
-   logic        [35:0]     adder3_out;
-   logic        [36:0]     adder4_out;
-   logic        [36:0]     adder5_out;
-   logic        [36:0]     adder6_out;
-   logic        [36:0]     adder7_out;
-
-   logic        [65:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(33) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[32:0]),           .dout(a_ff[32:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd33);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b11} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[65:0]       = { {33{dividend_sign_ff}} , a_ff[32:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[32:0]             = ( {33{~a_shift & ~shortq_enable_ff}} & {signed_in & dividend_in[31],dividend_in[31:0]} ) |
-                                   ( {33{ a_shift                    }} & {a_ff[29:0],3'b0}  ) |
-                                   ( {33{            shortq_enable_ff}} &  ar_shifted[32:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[2:0] == 3'b000) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[2:0] == 3'b001) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[2:0] == 3'b010) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[2:0] == 3'b011) & ~shortq_enable_ff;
-   assign r_adder4_sel           =  running_state & (quotient_new[2:0] == 3'b100) & ~shortq_enable_ff;
-   assign r_adder5_sel           =  running_state & (quotient_new[2:0] == 3'b101) & ~shortq_enable_ff;
-   assign r_adder6_sel           =  running_state & (quotient_new[2:0] == 3'b110) & ~shortq_enable_ff;
-   assign r_adder7_sel           =  running_state & (quotient_new[2:0] == 3'b111) & ~shortq_enable_ff;
-
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[29:0] ,a_ff[32:30]} ) |
-                                   ( {33{r_adder1_sel    }} &  adder1_out[32:0]         ) |
-                                   ( {33{r_adder2_sel    }} &  adder2_out[32:0]         ) |
-                                   ( {33{r_adder3_sel    }} &  adder3_out[32:0]         ) |
-                                   ( {33{r_adder4_sel    }} &  adder4_out[32:0]         ) |
-                                   ( {33{r_adder5_sel    }} &  adder5_out[32:0]         ) |
-                                   ( {33{r_adder6_sel    }} &  adder6_out[32:0]         ) |
-                                   ( {33{r_adder7_sel    }} &  adder7_out[32:0]         ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[65:33]        ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}         );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[28:0], quotient_new[2:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[36:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[33:0]       = {         r_ff[30:0],a_ff[32:30]}  +                                              b_ff[33:0];
-   assign adder2_out[34:0]       = {         r_ff[31:0],a_ff[32:30]}  +                        {b_ff[33:0],1'b0};
-   assign adder3_out[35:0]       = {         r_ff[32:0],a_ff[32:30]}  +                        {b_ff[34:0],1'b0}  +  b_ff[35:0];
-   assign adder4_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0};
-   assign adder5_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +                        b_ff[36:0];
-   assign adder6_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0};
-   assign adder7_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0}  +  b_ff[36:0];
-
-   assign quotient_raw[1]        = (~adder1_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[33:0] == 34'b0) );
-   assign quotient_raw[2]        = (~adder2_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[34:0] == 35'b0) );
-   assign quotient_raw[3]        = (~adder3_out[35] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[35:0] == 36'b0) );
-   assign quotient_raw[4]        = (~adder4_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder4_out[36:0] == 37'b0) );
-   assign quotient_raw[5]        = (~adder5_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder5_out[36:0] == 37'b0) );
-   assign quotient_raw[6]        = (~adder6_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder6_out[36:0] == 37'b0) );
-   assign quotient_raw[7]        = (~adder7_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder7_out[36:0] == 37'b0) );
-
-   assign quotient_new[2]        = quotient_raw[7] |   quotient_raw[6] | quotient_raw[5]  |   quotient_raw[4];
-   assign quotient_new[1]        = quotient_raw[7] |   quotient_raw[6] |                    (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[3] & quotient_raw[2]);
-   assign quotient_new[0]        = quotient_raw[7] | (~quotient_raw[6] & quotient_raw[5]) | (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd03) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd27);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_3bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_4bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [37:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder01_sel, r_adder02_sel, r_adder03_sel;
-   logic                   r_adder04_sel, r_adder05_sel, r_adder06_sel, r_adder07_sel;
-   logic                   r_adder08_sel, r_adder09_sel, r_adder10_sel, r_adder11_sel;
-   logic                   r_adder12_sel, r_adder13_sel, r_adder14_sel, r_adder15_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic        [15:1]     quotient_raw;
-   logic         [3:0]     quotient_new;
-   logic        [34:0]     adder01_out;
-   logic        [35:0]     adder02_out;
-   logic        [36:0]     adder03_out;
-   logic        [37:0]     adder04_out;
-   logic        [37:0]     adder05_out;
-   logic        [37:0]     adder06_out;
-   logic        [37:0]     adder07_out;
-   logic        [37:0]     adder08_out;
-   logic        [37:0]     adder09_out;
-   logic        [37:0]     adder10_out;
-   logic        [37:0]     adder11_out;
-   logic        [37:0]     adder12_out;
-   logic        [37:0]     adder13_out;
-   logic        [37:0]     adder14_out;
-   logic        [37:0]     adder15_out;
-
-   logic        [64:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),     .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                       .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),        .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),        .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),       .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),       .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + 7'd4 + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[64:0]       = { {33{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[27:0],4'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[3:0] == 4'd00) & ~shortq_enable_ff;
-   assign r_adder01_sel          =  running_state & (quotient_new[3:0] == 4'd01) & ~shortq_enable_ff;
-   assign r_adder02_sel          =  running_state & (quotient_new[3:0] == 4'd02) & ~shortq_enable_ff;
-   assign r_adder03_sel          =  running_state & (quotient_new[3:0] == 4'd03) & ~shortq_enable_ff;
-   assign r_adder04_sel          =  running_state & (quotient_new[3:0] == 4'd04) & ~shortq_enable_ff;
-   assign r_adder05_sel          =  running_state & (quotient_new[3:0] == 4'd05) & ~shortq_enable_ff;
-   assign r_adder06_sel          =  running_state & (quotient_new[3:0] == 4'd06) & ~shortq_enable_ff;
-   assign r_adder07_sel          =  running_state & (quotient_new[3:0] == 4'd07) & ~shortq_enable_ff;
-   assign r_adder08_sel          =  running_state & (quotient_new[3:0] == 4'd08) & ~shortq_enable_ff;
-   assign r_adder09_sel          =  running_state & (quotient_new[3:0] == 4'd09) & ~shortq_enable_ff;
-   assign r_adder10_sel          =  running_state & (quotient_new[3:0] == 4'd10) & ~shortq_enable_ff;
-   assign r_adder11_sel          =  running_state & (quotient_new[3:0] == 4'd11) & ~shortq_enable_ff;
-   assign r_adder12_sel          =  running_state & (quotient_new[3:0] == 4'd12) & ~shortq_enable_ff;
-   assign r_adder13_sel          =  running_state & (quotient_new[3:0] == 4'd13) & ~shortq_enable_ff;
-   assign r_adder14_sel          =  running_state & (quotient_new[3:0] == 4'd14) & ~shortq_enable_ff;
-   assign r_adder15_sel          =  running_state & (quotient_new[3:0] == 4'd15) & ~shortq_enable_ff;
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[28:0],a_ff[31:28]} ) |
-                                   ( {33{r_adder01_sel   }} &  adder01_out[32:0]       ) |
-                                   ( {33{r_adder02_sel   }} &  adder02_out[32:0]       ) |
-                                   ( {33{r_adder03_sel   }} &  adder03_out[32:0]       ) |
-                                   ( {33{r_adder04_sel   }} &  adder04_out[32:0]       ) |
-                                   ( {33{r_adder05_sel   }} &  adder05_out[32:0]       ) |
-                                   ( {33{r_adder06_sel   }} &  adder06_out[32:0]       ) |
-                                   ( {33{r_adder07_sel   }} &  adder07_out[32:0]       ) |
-                                   ( {33{r_adder08_sel   }} &  adder08_out[32:0]       ) |
-                                   ( {33{r_adder09_sel   }} &  adder09_out[32:0]       ) |
-                                   ( {33{r_adder10_sel   }} &  adder10_out[32:0]       ) |
-                                   ( {33{r_adder11_sel   }} &  adder11_out[32:0]       ) |
-                                   ( {33{r_adder12_sel   }} &  adder12_out[32:0]       ) |
-                                   ( {33{r_adder13_sel   }} &  adder13_out[32:0]       ) |
-                                   ( {33{r_adder14_sel   }} &  adder14_out[32:0]       ) |
-                                   ( {33{r_adder15_sel   }} &  adder15_out[32:0]       ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[64:32]       ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}        );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[27:0], quotient_new[3:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[37:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder01_out[34:0]      = {         r_ff[30:0],a_ff[31:28]}  +                                                                   b_ff[34:0];
-   assign adder02_out[35:0]      = {         r_ff[31:0],a_ff[31:28]}  +                                             {b_ff[34:0],1'b0};
-   assign adder03_out[36:0]      = {         r_ff[32:0],a_ff[31:28]}  +                                             {b_ff[35:0],1'b0}  +  b_ff[36:0];
-   assign adder04_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0};
-   assign adder05_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder06_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder07_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder08_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0};
-   assign adder09_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                                              b_ff[37:0];
-   assign adder10_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0};
-   assign adder11_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder12_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0};
-   assign adder13_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder14_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder15_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-
-   assign quotient_raw[01]       = (~adder01_out[34] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder01_out[34:0] == 35'b0) );
-   assign quotient_raw[02]       = (~adder02_out[35] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder02_out[35:0] == 36'b0) );
-   assign quotient_raw[03]       = (~adder03_out[36] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder03_out[36:0] == 37'b0) );
-   assign quotient_raw[04]       = (~adder04_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder04_out[37:0] == 38'b0) );
-   assign quotient_raw[05]       = (~adder05_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder05_out[37:0] == 38'b0) );
-   assign quotient_raw[06]       = (~adder06_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder06_out[37:0] == 38'b0) );
-   assign quotient_raw[07]       = (~adder07_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder07_out[37:0] == 38'b0) );
-   assign quotient_raw[08]       = (~adder08_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder08_out[37:0] == 38'b0) );
-   assign quotient_raw[09]       = (~adder09_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder09_out[37:0] == 38'b0) );
-   assign quotient_raw[10]       = (~adder10_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder10_out[37:0] == 38'b0) );
-   assign quotient_raw[11]       = (~adder11_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder11_out[37:0] == 38'b0) );
-   assign quotient_raw[12]       = (~adder12_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder12_out[37:0] == 38'b0) );
-   assign quotient_raw[13]       = (~adder13_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder13_out[37:0] == 38'b0) );
-   assign quotient_raw[14]       = (~adder14_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder14_out[37:0] == 38'b0) );
-   assign quotient_raw[15]       = (~adder15_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder15_out[37:0] == 38'b0) );
-
-
-   assign quotient_new[0]        = ( quotient_raw[15:01] == 15'b000_0000_0000_0001 ) |  //  1
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[1]        = ( quotient_raw[15:02] == 14'b000_0000_0000_001  ) |  //  2
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[2]        = ( quotient_raw[15:04] == 12'b000_0000_0000_1    ) |  //  4
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[3]        = ( quotient_raw[15:08] ==  8'b000_0000_1         ) |  //  8
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd28);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_4bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-module eb1_exu_div_cls
-  (
-   input  logic [32:0] operand,
-
-   output logic [4:0]  cls                  // Count leading sign bits - "n" format ignoring [32]
-   );
-
-
-   logic [4:0]   cls_zeros;
-   logic [4:0]   cls_ones;
-
-
-assign cls_zeros[4:0]             = ({5{operand[31]    ==  {           1'b1} }} & 5'd00) |
-                                    ({5{operand[31:30] ==  {{ 1{1'b0}},1'b1} }} & 5'd01) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b0}},1'b1} }} & 5'd02) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b0}},1'b1} }} & 5'd03) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b0}},1'b1} }} & 5'd04) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b0}},1'b1} }} & 5'd05) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b0}},1'b1} }} & 5'd06) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b0}},1'b1} }} & 5'd07) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b0}},1'b1} }} & 5'd08) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b0}},1'b1} }} & 5'd09) |
-                                    ({5{operand[31:21] ==  {{10{1'b0}},1'b1} }} & 5'd10) |
-                                    ({5{operand[31:20] ==  {{11{1'b0}},1'b1} }} & 5'd11) |
-                                    ({5{operand[31:19] ==  {{12{1'b0}},1'b1} }} & 5'd12) |
-                                    ({5{operand[31:18] ==  {{13{1'b0}},1'b1} }} & 5'd13) |
-                                    ({5{operand[31:17] ==  {{14{1'b0}},1'b1} }} & 5'd14) |
-                                    ({5{operand[31:16] ==  {{15{1'b0}},1'b1} }} & 5'd15) |
-                                    ({5{operand[31:15] ==  {{16{1'b0}},1'b1} }} & 5'd16) |
-                                    ({5{operand[31:14] ==  {{17{1'b0}},1'b1} }} & 5'd17) |
-                                    ({5{operand[31:13] ==  {{18{1'b0}},1'b1} }} & 5'd18) |
-                                    ({5{operand[31:12] ==  {{19{1'b0}},1'b1} }} & 5'd19) |
-                                    ({5{operand[31:11] ==  {{20{1'b0}},1'b1} }} & 5'd20) |
-                                    ({5{operand[31:10] ==  {{21{1'b0}},1'b1} }} & 5'd21) |
-                                    ({5{operand[31:09] ==  {{22{1'b0}},1'b1} }} & 5'd22) |
-                                    ({5{operand[31:08] ==  {{23{1'b0}},1'b1} }} & 5'd23) |
-                                    ({5{operand[31:07] ==  {{24{1'b0}},1'b1} }} & 5'd24) |
-                                    ({5{operand[31:06] ==  {{25{1'b0}},1'b1} }} & 5'd25) |
-                                    ({5{operand[31:05] ==  {{26{1'b0}},1'b1} }} & 5'd26) |
-                                    ({5{operand[31:04] ==  {{27{1'b0}},1'b1} }} & 5'd27) |
-                                    ({5{operand[31:03] ==  {{28{1'b0}},1'b1} }} & 5'd28) |
-                                    ({5{operand[31:02] ==  {{29{1'b0}},1'b1} }} & 5'd29) |
-                                    ({5{operand[31:01] ==  {{30{1'b0}},1'b1} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{31{1'b0}},1'b1} }} & 5'd31) |
-                                    ({5{operand[31:00] ==  {{32{1'b0}}     } }} & 5'd00);    // Don't care case as it will be handled as special case
-
-
-assign cls_ones[4:0]              = ({5{operand[31:30] ==  {{ 1{1'b1}},1'b0} }} & 5'd00) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b1}},1'b0} }} & 5'd01) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b1}},1'b0} }} & 5'd02) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b1}},1'b0} }} & 5'd03) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b1}},1'b0} }} & 5'd04) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b1}},1'b0} }} & 5'd05) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b1}},1'b0} }} & 5'd06) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b1}},1'b0} }} & 5'd07) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b1}},1'b0} }} & 5'd08) |
-                                    ({5{operand[31:21] ==  {{10{1'b1}},1'b0} }} & 5'd09) |
-                                    ({5{operand[31:20] ==  {{11{1'b1}},1'b0} }} & 5'd10) |
-                                    ({5{operand[31:19] ==  {{12{1'b1}},1'b0} }} & 5'd11) |
-                                    ({5{operand[31:18] ==  {{13{1'b1}},1'b0} }} & 5'd12) |
-                                    ({5{operand[31:17] ==  {{14{1'b1}},1'b0} }} & 5'd13) |
-                                    ({5{operand[31:16] ==  {{15{1'b1}},1'b0} }} & 5'd14) |
-                                    ({5{operand[31:15] ==  {{16{1'b1}},1'b0} }} & 5'd15) |
-                                    ({5{operand[31:14] ==  {{17{1'b1}},1'b0} }} & 5'd16) |
-                                    ({5{operand[31:13] ==  {{18{1'b1}},1'b0} }} & 5'd17) |
-                                    ({5{operand[31:12] ==  {{19{1'b1}},1'b0} }} & 5'd18) |
-                                    ({5{operand[31:11] ==  {{20{1'b1}},1'b0} }} & 5'd19) |
-                                    ({5{operand[31:10] ==  {{21{1'b1}},1'b0} }} & 5'd20) |
-                                    ({5{operand[31:09] ==  {{22{1'b1}},1'b0} }} & 5'd21) |
-                                    ({5{operand[31:08] ==  {{23{1'b1}},1'b0} }} & 5'd22) |
-                                    ({5{operand[31:07] ==  {{24{1'b1}},1'b0} }} & 5'd23) |
-                                    ({5{operand[31:06] ==  {{25{1'b1}},1'b0} }} & 5'd24) |
-                                    ({5{operand[31:05] ==  {{26{1'b1}},1'b0} }} & 5'd25) |
-                                    ({5{operand[31:04] ==  {{27{1'b1}},1'b0} }} & 5'd26) |
-                                    ({5{operand[31:03] ==  {{28{1'b1}},1'b0} }} & 5'd27) |
-                                    ({5{operand[31:02] ==  {{29{1'b1}},1'b0} }} & 5'd28) |
-                                    ({5{operand[31:01] ==  {{30{1'b1}},1'b0} }} & 5'd29) |
-                                    ({5{operand[31:00] ==  {{31{1'b1}},1'b0} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{32{1'b1}}     } }} & 5'd31);
-
-
-assign cls[4:0]                   =  operand[32]  ?  cls_ones[4:0]  :  cls_zeros[4:0];
-
-endmodule // eb1_exu_div_cls
diff --git a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_mul_ctl.sv b/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_mul_ctl.sv
deleted file mode 100644
index 345d5f4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/exu/eb1_exu_mul_ctl.sv
+++ /dev/null
@@ -1,627 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_mul_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic          clk,              // Top level clock
-   input logic          rst_l,            // Reset
-   input logic          scan_mode,        // Scan mode
-
-   input eb1_mul_pkt_t mul_p,            // {Valid, RS1 signed operand, RS2 signed operand, Select low 32-bits of result}
-
-   input logic [31:0]   rs1_in,           // A operand
-   input logic [31:0]   rs2_in,           // B operand
-
-
-   output logic [31:0]  result_x          // Result
-  );
-
-
-   logic                mul_x_enable;
-   logic                bit_x_enable;
-   logic signed [32:0]  rs1_ext_in;
-   logic signed [32:0]  rs2_ext_in;
-   logic        [65:0]  prod_x;
-   logic                low_x;
-
-
-
-   // *** Start - BitManip ***
-
-   logic                bitmanip_sel_d;
-   logic                bitmanip_sel_x;
-   logic        [31:0]  bitmanip_d;
-   logic        [31:0]  bitmanip_x;
-
-
-
-   // ZBE
-   logic                ap_bext;
-   logic                ap_bdep;
-
-   // ZBC
-   logic                ap_clmul;
-   logic                ap_clmulh;
-   logic                ap_clmulr;
-
-   // ZBP
-   logic                ap_grev;
-   logic                ap_gorc;
-   logic                ap_shfl;
-   logic                ap_unshfl;
-
-   // ZBR
-   logic                ap_crc32_b;
-   logic                ap_crc32_h;
-   logic                ap_crc32_w;
-   logic                ap_crc32c_b;
-   logic                ap_crc32c_h;
-   logic                ap_crc32c_w;
-
-   // ZBF
-   logic                ap_bfp;
-
-
-   if (pt.BITMANIP_ZBE == 1)
-     begin
-       assign ap_bext         =  mul_p.bext;
-       assign ap_bdep         =  mul_p.bdep;
-     end
-   else
-     begin
-       assign ap_bext         =  1'b0;
-       assign ap_bdep         =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBC == 1)
-     begin
-       assign ap_clmul        =  mul_p.clmul;
-       assign ap_clmulh       =  mul_p.clmulh;
-       assign ap_clmulr       =  mul_p.clmulr;
-     end
-   else
-     begin
-       assign ap_clmul        =  1'b0;
-       assign ap_clmulh       =  1'b0;
-       assign ap_clmulr       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_grev         =  mul_p.grev;
-       assign ap_gorc         =  mul_p.gorc;
-       assign ap_shfl         =  mul_p.shfl;
-       assign ap_unshfl       =  mul_p.unshfl;
-     end
-   else
-     begin
-       assign ap_grev         =  1'b0;
-       assign ap_gorc         =  1'b0;
-       assign ap_shfl         =  1'b0;
-       assign ap_unshfl       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBR == 1)
-     begin
-       assign ap_crc32_b      =  mul_p.crc32_b;
-       assign ap_crc32_h      =  mul_p.crc32_h;
-       assign ap_crc32_w      =  mul_p.crc32_w;
-       assign ap_crc32c_b     =  mul_p.crc32c_b;
-       assign ap_crc32c_h     =  mul_p.crc32c_h;
-       assign ap_crc32c_w     =  mul_p.crc32c_w;
-     end
-   else
-     begin
-       assign ap_crc32_b      =  1'b0;
-       assign ap_crc32_h      =  1'b0;
-       assign ap_crc32_w      =  1'b0;
-       assign ap_crc32c_b     =  1'b0;
-       assign ap_crc32c_h     =  1'b0;
-       assign ap_crc32c_w     =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBF == 1)
-     begin
-       assign ap_bfp          =  mul_p.bfp;
-     end
-   else
-     begin
-       assign ap_bfp          =  1'b0;
-     end
-
-
-   // *** End   - BitManip ***
-
-
-
-   assign mul_x_enable           =  mul_p.valid;
-   assign bit_x_enable           =  mul_p.valid;
-
-   assign rs1_ext_in[32]         =  mul_p.rs1_sign & rs1_in[31];
-   assign rs2_ext_in[32]         =  mul_p.rs2_sign & rs2_in[31];
-
-   assign rs1_ext_in[31:0]       =  rs1_in[31:0];
-   assign rs2_ext_in[31:0]       =  rs2_in[31:0];
-
-
-
-   // --------------------------- Multiply       ----------------------------------
-
-
-   logic signed [32:0]  rs1_x;
-   logic signed [32:0]  rs2_x;
-
-   rvdffe #(34) i_a_x_ff         (.*, .clk(clk),  .din({mul_p.low,rs1_ext_in[32:0]}),        .dout({low_x,rs1_x[32:0]}),                 .en(mul_x_enable));
-   rvdffe #(33) i_b_x_ff         (.*, .clk(clk),  .din(           rs2_ext_in[32:0] ),        .dout(       rs2_x[32:0] ),                 .en(mul_x_enable));
-
-
-   assign prod_x[65:0]           =  rs1_x  *  rs2_x;
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BEXT, BDEP   * * * * * * * * * * * * * * * * * *
-
-
-   // *** BEXT == "gather"  ***
-
-   logic        [31:0]    bext_d;
-   logic                  bext_test_bit_d;
-   integer                bext_i, bext_j;
-
-
-   always_comb
-     begin
-
-       bext_j                    =      0;
-       bext_test_bit_d           =   1'b0;
-       bext_d[31:0]              =  32'b0;
-
-       for (bext_i=0; bext_i<32; bext_i++)
-         begin
-             bext_test_bit_d     =  rs2_in[bext_i];
-             if (bext_test_bit_d)
-               begin
-                  bext_d[bext_j] =  rs1_in[bext_i];
-                  bext_j         =  bext_j + 1;
-               end  // IF  bext_test_bit
-         end        // FOR bext_i
-     end            // ALWAYS_COMB
-
-
-
-   // *** BDEP == "scatter" ***
-
-   logic        [31:0]    bdep_d;
-   logic                  bdep_test_bit_d;
-   integer                bdep_i, bdep_j;
-
-
-   always_comb
-     begin
-
-       bdep_j                    =      0;
-       bdep_test_bit_d           =   1'b0;
-       bdep_d[31:0]              =  32'b0;
-
-       for (bdep_i=0; bdep_i<32; bdep_i++)
-         begin
-             bdep_test_bit_d     =  rs2_in[bdep_i];
-             if (bdep_test_bit_d)
-               begin
-                  bdep_d[bdep_i] =  rs1_in[bdep_j];
-                  bdep_j         =  bdep_j + 1;
-               end  // IF  bdep_test_bit
-         end        // FOR bdep_i
-     end            // ALWAYS_COMB
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLMUL, CLMULH, CLMULR  * * * * * * * * * * * * *
-
-   logic        [62:0]    clmul_raw_d;
-
-
-   assign clmul_raw_d[62:0]      = ( {63{rs2_in[00]}} & {31'b0,rs1_in[31:0]      } ) ^
-                                   ( {63{rs2_in[01]}} & {30'b0,rs1_in[31:0], 1'b0} ) ^
-                                   ( {63{rs2_in[02]}} & {29'b0,rs1_in[31:0], 2'b0} ) ^
-                                   ( {63{rs2_in[03]}} & {28'b0,rs1_in[31:0], 3'b0} ) ^
-                                   ( {63{rs2_in[04]}} & {27'b0,rs1_in[31:0], 4'b0} ) ^
-                                   ( {63{rs2_in[05]}} & {26'b0,rs1_in[31:0], 5'b0} ) ^
-                                   ( {63{rs2_in[06]}} & {25'b0,rs1_in[31:0], 6'b0} ) ^
-                                   ( {63{rs2_in[07]}} & {24'b0,rs1_in[31:0], 7'b0} ) ^
-                                   ( {63{rs2_in[08]}} & {23'b0,rs1_in[31:0], 8'b0} ) ^
-                                   ( {63{rs2_in[09]}} & {22'b0,rs1_in[31:0], 9'b0} ) ^
-                                   ( {63{rs2_in[10]}} & {21'b0,rs1_in[31:0],10'b0} ) ^
-                                   ( {63{rs2_in[11]}} & {20'b0,rs1_in[31:0],11'b0} ) ^
-                                   ( {63{rs2_in[12]}} & {19'b0,rs1_in[31:0],12'b0} ) ^
-                                   ( {63{rs2_in[13]}} & {18'b0,rs1_in[31:0],13'b0} ) ^
-                                   ( {63{rs2_in[14]}} & {17'b0,rs1_in[31:0],14'b0} ) ^
-                                   ( {63{rs2_in[15]}} & {16'b0,rs1_in[31:0],15'b0} ) ^
-                                   ( {63{rs2_in[16]}} & {15'b0,rs1_in[31:0],16'b0} ) ^
-                                   ( {63{rs2_in[17]}} & {14'b0,rs1_in[31:0],17'b0} ) ^
-                                   ( {63{rs2_in[18]}} & {13'b0,rs1_in[31:0],18'b0} ) ^
-                                   ( {63{rs2_in[19]}} & {12'b0,rs1_in[31:0],19'b0} ) ^
-                                   ( {63{rs2_in[20]}} & {11'b0,rs1_in[31:0],20'b0} ) ^
-                                   ( {63{rs2_in[21]}} & {10'b0,rs1_in[31:0],21'b0} ) ^
-                                   ( {63{rs2_in[22]}} & { 9'b0,rs1_in[31:0],22'b0} ) ^
-                                   ( {63{rs2_in[23]}} & { 8'b0,rs1_in[31:0],23'b0} ) ^
-                                   ( {63{rs2_in[24]}} & { 7'b0,rs1_in[31:0],24'b0} ) ^
-                                   ( {63{rs2_in[25]}} & { 6'b0,rs1_in[31:0],25'b0} ) ^
-                                   ( {63{rs2_in[26]}} & { 5'b0,rs1_in[31:0],26'b0} ) ^
-                                   ( {63{rs2_in[27]}} & { 4'b0,rs1_in[31:0],27'b0} ) ^
-                                   ( {63{rs2_in[28]}} & { 3'b0,rs1_in[31:0],28'b0} ) ^
-                                   ( {63{rs2_in[29]}} & { 2'b0,rs1_in[31:0],29'b0} ) ^
-                                   ( {63{rs2_in[30]}} & { 1'b0,rs1_in[31:0],30'b0} ) ^
-                                   ( {63{rs2_in[31]}} & {      rs1_in[31:0],31'b0} );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GREV         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t grev32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x = ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x = ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x = ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x = ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x = ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    grev1_d;
-   logic        [31:0]    grev2_d;
-   logic        [31:0]    grev4_d;
-   logic        [31:0]    grev8_d;
-   logic        [31:0]    grev_d;
-
-
-   assign grev1_d[31:0]       = (rs2_in[0])  ?  {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                 rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                 rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                 rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]}  :  rs1_in[31:0];
-
-   assign grev2_d[31:0]       = (rs2_in[1])  ?  {grev1_d[29:28],grev1_d[31:30],grev1_d[25:24],grev1_d[27:26],
-                                                 grev1_d[21:20],grev1_d[23:22],grev1_d[17:16],grev1_d[19:18],
-                                                 grev1_d[13:12],grev1_d[15:14],grev1_d[09:08],grev1_d[11:10],
-                                                 grev1_d[05:04],grev1_d[07:06],grev1_d[01:00],grev1_d[03:02]}  :  grev1_d[31:0];
-
-   assign grev4_d[31:0]       = (rs2_in[2])  ?  {grev2_d[27:24],grev2_d[31:28],grev2_d[19:16],grev2_d[23:20],
-                                                 grev2_d[11:08],grev2_d[15:12],grev2_d[03:00],grev2_d[07:04]}  :  grev2_d[31:0];
-
-   assign grev8_d[31:0]       = (rs2_in[3])  ?  {grev4_d[23:16],grev4_d[31:24],grev4_d[07:00],grev4_d[15:08]}  :  grev4_d[31:0];
-
-   assign grev_d[31:0]        = (rs2_in[4])  ?  {grev8_d[15:00],grev8_d[31:16]}  :  grev8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GORC         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x |= ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x |= ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x |= ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x |= ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x |= ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    gorc1_d;
-   logic        [31:0]    gorc2_d;
-   logic        [31:0]    gorc4_d;
-   logic        [31:0]    gorc8_d;
-   logic        [31:0]    gorc_d;
-
-
-   assign gorc1_d[31:0]       = ( {32{rs2_in[0]}} & {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                     rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                     rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                     rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]} ) | rs1_in[31:0];
-
-   assign gorc2_d[31:0]       = ( {32{rs2_in[1]}} & {gorc1_d[29:28],gorc1_d[31:30],gorc1_d[25:24],gorc1_d[27:26],
-                                                     gorc1_d[21:20],gorc1_d[23:22],gorc1_d[17:16],gorc1_d[19:18],
-                                                     gorc1_d[13:12],gorc1_d[15:14],gorc1_d[09:08],gorc1_d[11:10],
-                                                     gorc1_d[05:04],gorc1_d[07:06],gorc1_d[01:00],gorc1_d[03:02]} ) | gorc1_d[31:0];
-
-   assign gorc4_d[31:0]       = ( {32{rs2_in[2]}} & {gorc2_d[27:24],gorc2_d[31:28],gorc2_d[19:16],gorc2_d[23:20],
-                                                     gorc2_d[11:08],gorc2_d[15:12],gorc2_d[03:00],gorc2_d[07:04]} ) | gorc2_d[31:0];
-
-   assign gorc8_d[31:0]       = ( {32{rs2_in[3]}} & {gorc4_d[23:16],gorc4_d[31:24],gorc4_d[07:00],gorc4_d[15:08]} ) | gorc4_d[31:0];
-
-   assign gorc_d[31:0]        = ( {32{rs2_in[4]}} & {gorc8_d[15:00],gorc8_d[31:16]} ) | gorc8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SHFL, UNSHLF * * * * * * * * * * * * * * * * * *
-
-   // uint32_t shuffle32_stage (uint32_t src, uint32_t maskL, uint32_t maskR, int N)
-   // {
-   //     uint32_t x  = src & ~(maskL | maskR);
-   //     x          |= ((src << N) & maskL) | ((src >> N) & maskR);
-   //     return x;
-   // }
-   //
-   //
-   //
-   // uint32_t shfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    shfl8_d;
-   logic        [31:0]    shfl4_d;
-   logic        [31:0]    shfl2_d;
-   logic        [31:0]    shfl_d;
-
-
-
-   assign shfl8_d[31:0]       = (rs2_in[3])  ?  {rs1_in[31:24],rs1_in[15:08],rs1_in[23:16],rs1_in[07:00]}      :  rs1_in[31:0];
-
-   assign shfl4_d[31:0]       = (rs2_in[2])  ?  {shfl8_d[31:28],shfl8_d[23:20],shfl8_d[27:24],shfl8_d[19:16],
-                                                 shfl8_d[15:12],shfl8_d[07:04],shfl8_d[11:08],shfl8_d[03:00]}  :  shfl8_d[31:0];
-
-   assign shfl2_d[31:0]       = (rs2_in[1])  ?  {shfl4_d[31:30],shfl4_d[27:26],shfl4_d[29:28],shfl4_d[25:24],
-                                                 shfl4_d[23:22],shfl4_d[19:18],shfl4_d[21:20],shfl4_d[17:16],
-                                                 shfl4_d[15:14],shfl4_d[11:10],shfl4_d[13:12],shfl4_d[09:08],
-                                                 shfl4_d[07:06],shfl4_d[03:02],shfl4_d[05:04],shfl4_d[01:00]}  :  shfl4_d[31:0];
-
-   assign shfl_d[31:0]        = (rs2_in[0])  ?  {shfl2_d[31],shfl2_d[29],shfl2_d[30],shfl2_d[28],shfl2_d[27],shfl2_d[25],shfl2_d[26],shfl2_d[24],
-                                                 shfl2_d[23],shfl2_d[21],shfl2_d[22],shfl2_d[20],shfl2_d[19],shfl2_d[17],shfl2_d[18],shfl2_d[16],
-                                                 shfl2_d[15],shfl2_d[13],shfl2_d[14],shfl2_d[12],shfl2_d[11],shfl2_d[09],shfl2_d[10],shfl2_d[08],
-                                                 shfl2_d[07],shfl2_d[05],shfl2_d[06],shfl2_d[04],shfl2_d[03],shfl2_d[01],shfl2_d[02],shfl2_d[00]}  :  shfl2_d[31:0];
-
-
-
-
-   // uint32_t unshfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    unshfl1_d;
-   logic        [31:0]    unshfl2_d;
-   logic        [31:0]    unshfl4_d;
-   logic        [31:0]    unshfl_d;
-
-
-   assign unshfl1_d[31:0]     = (rs2_in[0])  ?  {rs1_in[31],rs1_in[29],rs1_in[30],rs1_in[28],rs1_in[27],rs1_in[25],rs1_in[26],rs1_in[24],
-                                                 rs1_in[23],rs1_in[21],rs1_in[22],rs1_in[20],rs1_in[19],rs1_in[17],rs1_in[18],rs1_in[16],
-                                                 rs1_in[15],rs1_in[13],rs1_in[14],rs1_in[12],rs1_in[11],rs1_in[09],rs1_in[10],rs1_in[08],
-                                                 rs1_in[07],rs1_in[05],rs1_in[06],rs1_in[04],rs1_in[03],rs1_in[01],rs1_in[02],rs1_in[00]}  :  rs1_in[31:0];
-
-   assign unshfl2_d[31:0]     = (rs2_in[1])  ?  {unshfl1_d[31:30],unshfl1_d[27:26],unshfl1_d[29:28],unshfl1_d[25:24],
-                                                 unshfl1_d[23:22],unshfl1_d[19:18],unshfl1_d[21:20],unshfl1_d[17:16],
-                                                 unshfl1_d[15:14],unshfl1_d[11:10],unshfl1_d[13:12],unshfl1_d[09:08],
-                                                 unshfl1_d[07:06],unshfl1_d[03:02],unshfl1_d[05:04],unshfl1_d[01:00]}  :  unshfl1_d[31:0];
-
-   assign unshfl4_d[31:0]     = (rs2_in[2])  ?  {unshfl2_d[31:28],unshfl2_d[23:20],unshfl2_d[27:24],unshfl2_d[19:16],
-                                                 unshfl2_d[15:12],unshfl2_d[07:04],unshfl2_d[11:08],unshfl2_d[03:00]}  :  unshfl2_d[31:0];
-
-   assign unshfl_d[31:0]      = (rs2_in[3])  ?  {unshfl4_d[31:24],unshfl4_d[15:08],unshfl4_d[23:16],unshfl4_d[07:00]}  :  unshfl4_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CRC32, CRC32c  * * * * * * * * * * * * * * * * *
-
-   // ***  computed from   https: //crccalc.com  ***
-   //
-   // "a" is 8'h61 = 8'b0110_0001    (8'h61 ^ 8'hff = 8'h9e)
-   //
-   // Input must first be XORed with 32'hffff_ffff
-   //
-   //
-   // CRC32
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     e8b7be43      ffffff9e   174841bc
-   // "aa"    078a19d7      ffff9e9e   f875e628
-   // "aaaa"  ad98e545      9e9e9e9e   5267a1ba
-   //
-   //
-   //
-   // CRC32c
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     c1d04330      ffffff9e   3e2fbccf
-   // "aa"    f1f2dac2      ffff9e9e   0e0d253d
-   // "aaaa"  6a52eeb0      9e9e9e9e   95ad114f
-
-
-   logic                  crc32_all;
-   logic        [31:0]    crc32_poly_rev;
-   logic        [31:0]    crc32c_poly_rev;
-   integer                crc32_bi, crc32_hi, crc32_wi, crc32c_bi, crc32c_hi, crc32c_wi;
-   logic        [31:0]    crc32_bd, crc32_hd, crc32_wd, crc32c_bd, crc32c_hd, crc32c_wd;
-
-
-   assign crc32_all              =  ap_crc32_b  | ap_crc32_h  | ap_crc32_w | ap_crc32c_b | ap_crc32c_h | ap_crc32c_w;
-
-   assign crc32_poly_rev[31:0]   =  32'hEDB88320;    // bit reverse of 32'h04C11DB7
-   assign crc32c_poly_rev[31:0]  =  32'h82F63B78;    // bit reverse of 32'h1EDC6F41
-
-
-   always_comb
-     begin
-       crc32_bd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_bi=0; crc32_bi<8; crc32_bi++)
-         begin
-            crc32_bd[31:0] = (crc32_bd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_bd[0]}});
-         end      // FOR    crc32_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_hd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_hi=0; crc32_hi<16; crc32_hi++)
-         begin
-            crc32_hd[31:0] = (crc32_hd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_hd[0]}});
-         end      // FOR    crc32_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_wd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_wi=0; crc32_wi<32; crc32_wi++)
-         begin
-            crc32_wd[31:0] = (crc32_wd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_wd[0]}});
-         end      // FOR    crc32_wi
-     end          // ALWAYS_COMB
-
-
-
-
-   always_comb
-     begin
-       crc32c_bd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_bi=0; crc32c_bi<8; crc32c_bi++)
-         begin
-            crc32c_bd[31:0] = (crc32c_bd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_bd[0]}});
-         end      // FOR    crc32c_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_hd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_hi=0; crc32c_hi<16; crc32c_hi++)
-         begin
-            crc32c_hd[31:0] = (crc32c_hd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_hd[0]}});
-         end      // FOR    crc32c_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_wd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_wi=0; crc32c_wi<32; crc32c_wi++)
-         begin
-            crc32c_wd[31:0] = (crc32c_wd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_wd[0]}});
-         end      // FOR    crc32c_wi
-     end          // ALWAYS_COMB
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BFP          * * * * * * * * * * * * * * * * * *
-
-   logic        [4:0]     bfp_len;
-   logic        [4:0]     bfp_off;
-   logic        [31:0]    bfp_len_mask_;
-   logic        [15:0]    bfp_preshift_data;
-   logic        [63:0]    bfp_shift_data;
-   logic        [63:0]    bfp_shift_mask;
-   logic        [31:0]    bfp_result_d;
-
-
-   assign bfp_len[3:0]           =  rs2_in[27:24];
-   assign bfp_len[4]             = (bfp_len[3:0] == 4'b0);   // If LEN field is zero, then LEN=16
-   assign bfp_off[4:0]           =  rs2_in[20:16];
-
-   assign bfp_len_mask_[31:0]    =  32'hffff_ffff  <<  bfp_len[4:0];
-   assign bfp_preshift_data[15:0]=  rs2_in[15:0] & ~bfp_len_mask_[15:0];
-
-   assign bfp_shift_data[63:0]   = {16'b0,bfp_preshift_data[15:0], 16'b0,bfp_preshift_data[15:0]}  <<  bfp_off[4:0];
-   assign bfp_shift_mask[63:0]   = {bfp_len_mask_[31:0],           bfp_len_mask_[31:0]}            <<  bfp_off[4:0];
-
-   assign bfp_result_d[31:0]     = bfp_shift_data[63:32] | (rs1_in[31:0] & bfp_shift_mask[63:32]);
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  Common logic * * * * * * * * * * * * * * * * * *
-
-
-   assign bitmanip_sel_d         =  ap_bext | ap_bdep | ap_clmul | ap_clmulh | ap_clmulr | ap_grev | ap_gorc | ap_shfl | ap_unshfl | crc32_all | ap_bfp;
-
-   assign bitmanip_d[31:0]       = ( {32{ap_bext}}     &       bext_d[31:0]        ) |
-                                   ( {32{ap_bdep}}     &       bdep_d[31:0]        ) |
-                                   ( {32{ap_clmul}}    &       clmul_raw_d[31:0]   ) |
-                                   ( {32{ap_clmulh}}   & {1'b0,clmul_raw_d[62:32]} ) |
-                                   ( {32{ap_clmulr}}   &       clmul_raw_d[62:31]  ) |
-                                   ( {32{ap_grev}}     &       grev_d[31:0]        ) |
-                                   ( {32{ap_gorc}}     &       gorc_d[31:0]        ) |
-                                   ( {32{ap_shfl}}     &       shfl_d[31:0]        ) |
-                                   ( {32{ap_unshfl}}   &       unshfl_d[31:0]      ) |
-                                   ( {32{ap_crc32_b}}  &       crc32_bd[31:0]      ) |
-                                   ( {32{ap_crc32_h}}  &       crc32_hd[31:0]      ) |
-                                   ( {32{ap_crc32_w}}  &       crc32_wd[31:0]      ) |
-                                   ( {32{ap_crc32c_b}} &       crc32c_bd[31:0]     ) |
-                                   ( {32{ap_crc32c_h}} &       crc32c_hd[31:0]     ) |
-                                   ( {32{ap_crc32c_w}} &       crc32c_wd[31:0]     ) |
-                                   ( {32{ap_bfp}}      &       bfp_result_d[31:0]  );
-
-
-
-   rvdffe #(33) i_bitmanip_ff    (.*, .clk(clk),  .din({bitmanip_sel_d,bitmanip_d[31:0]}),   .dout({bitmanip_sel_x,bitmanip_x[31:0]}),   .en(bit_x_enable));
-
-
-
-
-   assign result_x[31:0]         =  ( {32{~bitmanip_sel_x & ~low_x}} & prod_x[63:32]    ) |
-                                    ( {32{~bitmanip_sel_x &  low_x}} & prod_x[31:0]     ) |
-                                                                       bitmanip_x[31:0];
-
-
-
-endmodule  // eb1_exu_mul_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/flist.formal b/verilog/rtl/BrqRV_EB1/design/flist.formal
deleted file mode 100644
index b8b0a35..0000000
--- a/verilog/rtl/BrqRV_EB1/design/flist.formal
+++ /dev/null
@@ -1,63 +0,0 @@
-#-*-dotf-*-
-
-$RV_ROOT/design/include/eb1_def.sv
-
-+incdir+$RV_ROOT/design/lib
-+incdir+$RV_ROOT/design/include
-+incdir+$RV_ROOT/design/dmi
-
-//|+incdir+$SYNOPSYS_SYN_ROOT/dw/sim_ver
-//|-y $SYNOPSYS_SYN_ROOT/dw/sim_ver
-//|
-//|$SYNOPSYS_SYN_ROOT/dw/sim_ver/DW01_addsub.v
-//|$SYNOPSYS_SYN_ROOT/dw/sim_ver/DW_lzd.v
-//|$SYNOPSYS_SYN_ROOT/dw/sim_ver/DW_minmax.v
-//|$SYNOPSYS_SYN_ROOT/dw/sim_ver/DW02_mult.v
-
-+incdir+/wdc/apps/mentor/questa/formal/2019.2/share/MODIFIED/dw
-+incdir+/wdc/apps/mentor/questa/formal/2019.2/share/MODIFIED/dw/dw_datapath
-        /wdc/apps/mentor/questa/formal/2019.2/share/MODIFIED/dw/dw.remodel.v
-
-$RV_ROOT/design/eb1_brqrv_wrapper.sv
-$RV_ROOT/design/eb1_mem.sv
-$RV_ROOT/design/eb1_pic_ctrl.sv
-$RV_ROOT/design/eb1_brqrv.sv
-$RV_ROOT/design/eb1_dma_ctrl.sv
-$RV_ROOT/design/ifu/eb1_ifu_aln_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_compress_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_ifc_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_bp_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_ic_mem.sv
-$RV_ROOT/design/ifu/eb1_ifu_mem_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_iccm_mem.sv
-$RV_ROOT/design/ifu/eb1_ifu.sv
-$RV_ROOT/design/dec/eb1_dec_decode_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_gpr_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_ib_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_tlu_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_trigger.sv
-$RV_ROOT/design/dec/eb1_dec.sv
-$RV_ROOT/design/exu/eb1_exu_alu_ctl.sv
-$RV_ROOT/design/exu/eb1_exu_mul_ctl.sv
-$RV_ROOT/design/exu/eb1_exu_div_ctl.sv
-$RV_ROOT/design/exu/eb1_exu.sv
-$RV_ROOT/design/lsu/eb1_lsu.sv
-$RV_ROOT/design/lsu/eb1_lsu_clkdomain.sv
-$RV_ROOT/design/lsu/eb1_lsu_addrcheck.sv
-$RV_ROOT/design/lsu/eb1_lsu_lsc_ctl.sv
-$RV_ROOT/design/lsu/eb1_lsu_stbuf.sv
-$RV_ROOT/design/lsu/eb1_lsu_bus_buffer.sv
-$RV_ROOT/design/lsu/eb1_lsu_bus_intf.sv
-$RV_ROOT/design/lsu/eb1_lsu_ecc.sv
-$RV_ROOT/design/lsu/eb1_lsu_dccm_mem.sv
-$RV_ROOT/design/lsu/eb1_lsu_dccm_ctl.sv
-$RV_ROOT/design/lsu/eb1_lsu_trigger.sv
-$RV_ROOT/design/dbg/eb1_dbg.sv
-$RV_ROOT/design/dmi/dmi_wrapper.v
-$RV_ROOT/design/dmi/dmi_jtag_to_core_sync.v
-$RV_ROOT/design/dmi/rvjtag_tap.v
-$RV_ROOT/design/lib/eb1_lib.sv
-$RV_ROOT/design/lib/beh_lib.sv
-$RV_ROOT/design/lib/mem_lib.sv
-$RV_ROOT/design/lib/ahb_to_axi4.sv
-$RV_ROOT/design/lib/axi4_to_ahb.sv
diff --git a/verilog/rtl/BrqRV_EB1/design/flist.questa b/verilog/rtl/BrqRV_EB1/design/flist.questa
deleted file mode 100644
index 762c201..0000000
--- a/verilog/rtl/BrqRV_EB1/design/flist.questa
+++ /dev/null
@@ -1,61 +0,0 @@
-#-*-dotf-*-
-
-# $RV_ROOT/workspace/work/snapshots/default/common_defines.vh
-# $RV_ROOT/configs/snapshots/default/common_defines.vh
-$RV_ROOT/workspace/work/snapshots/default/common_defines.vh
-
-
-$RV_ROOT/design/include/eb1_def.sv
-
-# +incdir+$RV_ROOT/workspace/work/snapshots/default
-# +incdir+$RV_ROOT/configs/snapshots/default
-+incdir+$RV_ROOT/workspace/work/snapshots/default
-
-+incdir+$RV_ROOT/design/lib
-+incdir+$RV_ROOT/design/include
-+incdir+$RV_ROOT/design/dmi
-+incdir+$SYNOPSYS_SYN_ROOT/dw/sim_ver
--y $SYNOPSYS_SYN_ROOT/dw/sim_ver
-$RV_ROOT/design/eb1_brqrv_wrapper.sv
-$RV_ROOT/design/eb1_mem.sv
-$RV_ROOT/design/eb1_pic_ctrl.sv
-$RV_ROOT/design/eb1_brqrv.sv
-$RV_ROOT/design/eb1_dma_ctrl.sv
-$RV_ROOT/design/ifu/eb1_ifu_aln_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_compress_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_ifc_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_bp_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_ic_mem.sv
-$RV_ROOT/design/ifu/eb1_ifu_mem_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_iccm_mem.sv
-$RV_ROOT/design/ifu/eb1_ifu.sv
-$RV_ROOT/design/dec/eb1_dec_decode_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_gpr_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_ib_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_tlu_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_trigger.sv
-$RV_ROOT/design/dec/eb1_dec.sv
-$RV_ROOT/design/exu/eb1_exu_alu_ctl.sv
-$RV_ROOT/design/exu/eb1_exu_mul_ctl.sv
-$RV_ROOT/design/exu/eb1_exu_div_ctl.sv
-$RV_ROOT/design/exu/eb1_exu.sv
-$RV_ROOT/design/lsu/eb1_lsu.sv
-$RV_ROOT/design/lsu/eb1_lsu_clkdomain.sv
-$RV_ROOT/design/lsu/eb1_lsu_addrcheck.sv
-$RV_ROOT/design/lsu/eb1_lsu_lsc_ctl.sv
-$RV_ROOT/design/lsu/eb1_lsu_stbuf.sv
-$RV_ROOT/design/lsu/eb1_lsu_bus_buffer.sv
-$RV_ROOT/design/lsu/eb1_lsu_bus_intf.sv
-$RV_ROOT/design/lsu/eb1_lsu_ecc.sv
-$RV_ROOT/design/lsu/eb1_lsu_dccm_mem.sv
-$RV_ROOT/design/lsu/eb1_lsu_dccm_ctl.sv
-$RV_ROOT/design/lsu/eb1_lsu_trigger.sv
-$RV_ROOT/design/dbg/eb1_dbg.sv
-$RV_ROOT/design/dmi/dmi_wrapper.v
-$RV_ROOT/design/dmi/dmi_jtag_to_core_sync.v
-$RV_ROOT/design/dmi/rvjtag_tap.v
-$RV_ROOT/design/lib/eb1_lib.sv
-$RV_ROOT/design/lib/beh_lib.sv
-$RV_ROOT/design/lib/mem_lib.sv
-$RV_ROOT/design/lib/ahb_to_axi4.sv
-$RV_ROOT/design/lib/axi4_to_ahb.sv
diff --git a/verilog/rtl/BrqRV_EB1/design/iccm_controller.v b/verilog/rtl/BrqRV_EB1/design/iccm_controller.v
deleted file mode 100644
index c28bc9d..0000000
--- a/verilog/rtl/BrqRV_EB1/design/iccm_controller.v
+++ /dev/null
@@ -1,120 +0,0 @@
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-
-module eb1_iccm_controller (
-	clk_i,
-	rst_ni,
-	rx_dv_i,
-	rx_byte_i,
-	we_o,
-	addr_o,
-	wdata_o,
-	reset_o
-);
-	input wire clk_i;
-	input wire rst_ni;
-	input wire rx_dv_i;
-	input wire [7:0] rx_byte_i;
-	output wire we_o;
-	output wire [13:0] addr_o;
-	output wire [31:0] wdata_o;
-	output wire reset_o;
-	reg [1:0] ctrl_fsm_cs;
-	reg [1:0] ctrl_fsm_ns;
-	wire [7:0] rx_byte_d;
-	reg [7:0] rx_byte_q0;
-	reg [7:0] rx_byte_q1;
-	reg [7:0] rx_byte_q2;
-	reg [7:0] rx_byte_q3;
-	reg we_q;
-	reg we_d;
-	reg [13:0] addr_q;
-	reg [13:0] addr_d;
-	reg reset_q;
-	reg reset_d;
-	reg [1:0] byte_count;
-	localparam [1:0] DONE = 3;
-	localparam [1:0] LOAD = 1;
-	localparam [1:0] PROG = 2;
-	localparam [1:0] RESET = 0;
-	always @(*) begin
-		we_d = we_q;
-		addr_d = addr_q;
-		reset_d = reset_q;
-		ctrl_fsm_ns = ctrl_fsm_cs;
-		case (ctrl_fsm_cs)
-			RESET: begin
-				we_d = 1'b0;
-				reset_d = 1'b0;
-				if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = RESET;
-			end
-			LOAD:
-				if (((byte_count == 2'b11) && (rx_byte_q2 != 8'h0f)) && (rx_byte_d != 8'hff)) begin
-					we_d = 1'b1;
-					ctrl_fsm_ns = PROG;
-				end
-				else
-					ctrl_fsm_ns = DONE;
-			PROG: begin
-				we_d = 1'b0;
-				ctrl_fsm_ns = DONE;
-			end
-			DONE:
-				if (wdata_o == 32'h00000fff) begin
-					ctrl_fsm_ns = DONE;
-					reset_d = 1'b1;
-				end
-				else if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = DONE;
-			default: ctrl_fsm_ns = RESET;
-		endcase
-	end
-	assign rx_byte_d = rx_byte_i;
-	assign we_o = we_q;
-	assign addr_o = addr_q;
-	assign wdata_o = {rx_byte_q0, rx_byte_q1, rx_byte_q2, rx_byte_q3};
-	assign reset_o = reset_q;
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni) begin
-			we_q <= 1'b0;
-			addr_q <= 14'b00000000000000;
-			rx_byte_q0 <= 8'b00000000;
-			rx_byte_q1 <= 8'b00000000;
-			rx_byte_q2 <= 8'b00000000;
-			rx_byte_q3 <= 8'b00000000;
-			reset_q <= 1'b0;
-			byte_count <= 2'b00;
-			ctrl_fsm_cs <= RESET;
-		end
-		else begin
-			we_q <= we_d;
-			if (ctrl_fsm_cs == LOAD) begin
-				if (byte_count == 2'b00) begin
-					rx_byte_q0 <= rx_byte_d;
-					byte_count <= 2'b01;
-				end
-				else if (byte_count == 2'b01) begin
-					rx_byte_q1 <= rx_byte_d;
-					byte_count <= 2'b10;
-				end
-				else if (byte_count == 2'b10) begin
-					rx_byte_q2 <= rx_byte_d;
-					byte_count <= 2'b11;
-				end
-				else begin
-					rx_byte_q3 <= rx_byte_d;
-					byte_count <= 2'b00;
-				end
-				addr_q <= addr_d;
-			end
-			if (ctrl_fsm_cs == PROG)
-				addr_q <= addr_d + 2'h2;
-			reset_q <= reset_d;
-			ctrl_fsm_cs <= ctrl_fsm_ns;
-		end
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu.sv
deleted file mode 100644
index 6208094..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu.sv
+++ /dev/null
@@ -1,371 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-//********************************************************************************
-// Function: Top level file for Icache, Fetch, Branch prediction & Aligner
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic rst_l,                        // reset, active low
-
-   input logic dec_i0_decode_d,              // Valid instruction at D and not blocked
-
-   input logic exu_flush_final, // flush, includes upper and lower
-   input logic dec_tlu_i0_commit_cmt , // committed i0
-   input logic dec_tlu_flush_err_wb , // flush due to parity error.
-   input logic dec_tlu_flush_noredir_wb, // don't fetch, validated with exu_flush_final
-   input logic [31:1] exu_flush_path_final, // flush fetch address
-
-   input logic [31:0]  dec_tlu_mrac_ff ,// Side_effect , cacheable for each region
-   input logic         dec_tlu_fence_i_wb, // fence.i, invalidate icache, validated with exu_flush_final
-   input logic         dec_tlu_flush_leak_one_wb, // ignore bp for leak one fetches
-
-   input logic                       dec_tlu_bpred_disable,     // disable all branch prediction
-   input logic                       dec_tlu_core_ecc_disable,  // disable ecc checking and flagging
-   input logic                       dec_tlu_force_halt,        // force halt
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-   input  logic                      ifu_bus_clk_en,
-
-   input  logic                      dma_iccm_req,
-   input  logic [31:0]               dma_mem_addr,
-   input  logic [2:0]                dma_mem_sz,
-   input  logic                      dma_mem_write,
-   input  logic [63:0]               dma_mem_wdata,
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-
-   input  logic                      dma_iccm_stall_any,
-   output logic                      iccm_dma_ecc_error,
-   output logic                      iccm_dma_rvalid,
-   output logic [63:0]               iccm_dma_rdata,
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,
-
-   output logic       ifu_pmu_instr_aligned,
-   output logic       ifu_pmu_fetch_stall,
-   output logic       ifu_ic_error_start,     // has all of the I$ ecc/parity for data/tag
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]              ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]                     ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   output logic [70:0]               ifu_ic_debug_rd_data,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select the premux data.
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]               iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-
-   output logic                      ifu_iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-
-// Perf counter sigs
-   output logic       ifu_pmu_ic_miss, // ic miss
-   output logic       ifu_pmu_ic_hit, // ic hit
-   output logic       ifu_pmu_bus_error, // iside bus error
-   output logic       ifu_pmu_bus_busy,  // iside bus busy
-   output logic       ifu_pmu_bus_trxn, // iside bus transactions
-
-
-   output logic       ifu_i0_icaf,         // Instruction 0 access fault. From Aligner to Decode
-   output logic [1:0] ifu_i0_icaf_type, // Instruction 0 access fault type
-
-   output logic  ifu_i0_valid,        // Instruction 0 valid. From Aligner to Decode
-   output logic  ifu_i0_icaf_second,  // Instruction 0 has access fault on second 2B of 4B inst
-   output logic  ifu_i0_dbecc,        // Instruction 0 has double bit ecc error
-   output logic  iccm_dma_sb_error,   // Single Bit ECC error from a DMA access
-   output logic[31:0] ifu_i0_instr,   // Instruction 0 . From Aligner to Decode
-   output logic[31:1] ifu_i0_pc,      // Instruction 0 pc. From Aligner to Decode
-   output logic ifu_i0_pc4,           // Instruction 0 is 4 byte. From Aligner to Decode
-
-   output logic ifu_miss_state_idle,   // There is no outstanding miss. Cache miss state is idle.
-
-   output eb1_br_pkt_t i0_brp,           // Instruction 0 branch packet. From Aligner to Decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr, // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag, // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // slot0 update/error pkt
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   input dec_tlu_flush_lower_wb,
-
-   output logic [15:0] ifu_i0_cinst,
-
-
-/// Icache debug
-   input  eb1_cache_debug_pkt_t        dec_tlu_ic_diag_pkt ,
-   output logic                    ifu_ic_debug_rd_data_valid,
-   output logic                                iccm_buf_correct_ecc,
-   output logic                                iccm_correction_state,
-
-   input logic scan_mode
-   );
-
-   localparam TAGWIDTH = 2 ;
-   localparam IDWIDTH  = 2 ;
-
-   logic                   ifu_fb_consume1, ifu_fb_consume2;
-   logic [31:1]            ifc_fetch_addr_f;
-   logic [31:1]            ifc_fetch_addr_bf;
-
-   logic [1:0]   ifu_fetch_val;  // valids on a 2B boundary, left justified [7] implies valid fetch
-   logic [31:1]  ifu_fetch_pc;   // starting pc of fetch
-
-   logic iccm_rd_ecc_single_err, ic_error_start;
-   assign ifu_iccm_rd_ecc_single_err = iccm_rd_ecc_single_err;
-   assign ifu_ic_error_start = ic_error_start;
-
-
-   logic        ic_write_stall;
-   logic        ic_dma_active;
-   logic        ifc_dma_access_ok;
-   logic [1:0]  ic_access_fault_f;
-   logic [1:0]  ic_access_fault_type_f;
-   logic        ifu_ic_mb_empty;
-
-   logic ic_hit_f;
-
-   logic [1:0] ifu_bp_way_f; // way indication; right justified
-   logic       ifu_bp_hit_taken_f; // kill next fetch; taken target found
-   logic [31:1] ifu_bp_btb_target_f; //  predicted target PC
-   logic        ifu_bp_inst_mask_f; // tell ic which valids to kill because of a taken branch; right justified
-   logic [1:0]  ifu_bp_hist1_f; // history counters for all 4 potential branches; right justified
-   logic [1:0]  ifu_bp_hist0_f; // history counters for all 4 potential branches; right justified
-   logic [11:0] ifu_bp_poffset_f; // predicted target
-   logic [1:0]  ifu_bp_ret_f; // predicted ret ; right justified
-   logic [1:0]  ifu_bp_pc4_f; // pc4 indication; right justified
-   logic [1:0]  ifu_bp_valid_f; // branch valid, right justified
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f;
-   logic [1:0] [$clog2(pt.BTB_SIZE)-1:0] ifu_bp_fa_index_f;
-
-
-   // fetch control
-   eb1_ifu_ifc_ctl #(.pt(pt)) ifc (.*
-                    );
-
-   // branch predictor
-   if (pt.BTB_ENABLE==1) begin  : bpred
-      eb1_ifu_bp_ctl #(.pt(pt)) bp (.*);
-   end
-   else begin : bpred
-      assign ifu_bp_hit_taken_f = '0;
-      // verif wires
-      logic btb_wr_en_way0, btb_wr_en_way1,dec_tlu_error_wb;
-      logic [16+pt.BTB_BTAG_SIZE:0] btb_wr_data;
-      assign btb_wr_en_way0 = '0;
-      assign btb_wr_en_way1 = '0;
-      assign btb_wr_data = '0;
-      assign dec_tlu_error_wb ='0;
-      assign ifu_bp_inst_mask_f = 1'b1;
-   end
-
-
-   logic [1:0]   ic_fetch_val_f;
-   logic [31:0] ic_data_f;
-   logic [31:0] ifu_fetch_data_f;
-   logic ifc_fetch_req_f;
-   logic ifc_fetch_req_f_raw;
-   logic [1:0] iccm_rd_ecc_double_err;  // This fetch has an iccm double error.
-
-   logic ifu_async_error_start;
-
-
-   assign ifu_fetch_data_f[31:0] = ic_data_f[31:0];
-   assign ifu_fetch_val[1:0] = ic_fetch_val_f[1:0];
-   assign ifu_fetch_pc[31:1] = ifc_fetch_addr_f[31:1];
-
- logic                       ifc_fetch_uncacheable_bf;      // The fetch request is uncacheable space. BF stage
- logic                       ifc_fetch_req_bf;              // Fetch request. Comes with the address.  BF stage
- logic                       ifc_fetch_req_bf_raw;          // Fetch request without some qualifications. Used for clock-gating. BF stage
- logic                       ifc_iccm_access_bf;            // This request is to the ICCM. Do not generate misses to the bus.
- logic                       ifc_region_acc_fault_bf;       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   // aligner
-
-   eb1_ifu_aln_ctl #(.pt(pt)) aln (
-                                    .*
-                                    );
-
-
-   // icache
-   eb1_ifu_mem_ctl #(.pt(pt)) mem_ctl
-     (.*,
-      .ic_data_f(ic_data_f[31:0])
-      );
-
-
-
-   // Performance debug info
-   //
-   //
-`ifdef DUMP_BTB_ON
-   logic              exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_way; // conditional branch mispredict
-   logic exu_mp_ataken; // direction is actual taken
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-
-   assign exu_mp_valid = exu_mp_pkt.misp; // conditional branch mispredict
-   assign exu_mp_ataken = exu_mp_pkt.ataken;  // direction is actual taken
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // branch is a jump always
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_f;
- `define DEC `CPU_TOP.dec
- `define EXU `CPU_TOP.exu
-   eb1_btb_addr_hash f2hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   logic [31:0] mppc_ns, mppc;
-   logic        exu_flush_final_d1;
-   assign mppc_ns[31:1] = `EXU.i0_flush_upper_x ? `EXU.exu_i0_pc_x : `EXU.dec_i0_pc_d;
-   assign mppc_ns[0] = 1'b0;
-   rvdff #(33)  junk_ff (.*, .clk(active_clk), .din({mppc_ns[31:0], exu_flush_final}), .dout({mppc[31:0], exu_flush_final_d1}));
-   logic  tmp_bnk;
-   assign tmp_bnk = bpred.bp.btb_sel_f[1];
-
-   always @(negedge clk) begin
-      if(`DEC.tlu.mcyclel[31:0] == 32'h0000_0010) begin
-         $display("BTB_CONFIG: %d",pt.BTB_SIZE);
-         `ifndef BP_NOGSHARE
-         $display("BHT_CONFIG: %d gshare: 1",pt.BHT_SIZE);
-         `else
-         $display("BHT_CONFIG: %d gshare: 0",pt.BHT_SIZE);
-         `endif
-         $display("RS_CONFIG: %d", pt.RET_STACK_SIZE);
-      end
-       if(exu_flush_final_d1 & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error) & (exu_mp_pkt.misp | exu_mp_pkt.ataken))
-         $display("%7d BTB_MP  : index: %0h bank: %0h call: %b ret: %b ataken: %b hist: %h valid: %b tag: %h targ: %h eghr: %b pred: %b ghr_index: %h brpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha, exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO], 1'b0, exu_mp_call, exu_mp_ret, exu_mp_ataken, exu_mp_hist[1:0], exu_mp_valid, exu_mp_btag[pt.BTB_BTAG_SIZE-1:0], {exu_flush_path_final[31:1], 1'b0}, exu_mp_eghr[pt.BHT_GHR_SIZE-1:0], exu_mp_valid, bpred.bp.bht_wr_addr0, mppc[31:0], exu_mp_pkt.way);
-
-     for(int i = 0; i < 8; i++) begin
-      if(ifu_bp_valid_f[i] & ifc_fetch_req_f)
-        $display("%7d BTB_HIT : index: %0h bank: %0h call: %b ret: %b taken: %b strength: %b tag: %h targ: %0h ghr: %4b ghr_index: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],bpred.bp.btb_sel_f[1], bpred.bp.btb_rd_call_f, bpred.bp.btb_rd_ret_f, ifu_bp_hist1_f[tmp_bnk], ifu_bp_hist0_f[tmp_bnk], bpred.bp.fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0], {ifu_bp_btb_target_f[31:1], 1'b0}, bpred.bp.fghr[pt.BHT_GHR_SIZE-1:0], bpred.bp.bht_rd_addr_f, ifu_bp_way_f[tmp_bnk]);
-     end
-      if(dec_tlu_br0_r_pkt.valid & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error))
-        $display("%7d BTB_UPD0: ghr_index: %0h bank: %0h hist: %h  way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,bpred.bp.br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO],{dec_tlu_br0_r_pkt.middle}, dec_tlu_br0_r_pkt.hist, dec_tlu_br0_r_pkt.way);
-
-      if(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error)
-        $display("%7d BTB_ERR0: index: %0h bank: %0h start: %b rfpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],1'b0, dec_tlu_br0_r_pkt.br_start_error, {exu_flush_path_final[31:1], 1'b0}, dec_tlu_br0_r_pkt.way);
-   end // always @ (negedge clk)
-      function [1:0] encode4_2;
-      input [3:0] in;
-
-      encode4_2[1] = in[3] | in[2];
-      encode4_2[0] = in[3] | in[1];
-
-   endfunction
-`endif
-endmodule // eb1_ifu
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_aln_ctl.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_aln_ctl.sv
deleted file mode 100644
index 2d4e822..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_aln_ctl.sv
+++ /dev/null
@@ -1,700 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Instruction aligner
-//********************************************************************************
-module eb1_ifu_aln_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-
-   input logic                                    scan_mode,                // Flop scan mode control
-   input logic                                    rst_l,                    // reset, active low
-   input logic                                    clk,                      // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                    active_clk,               // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-
-   input logic                                    ifu_async_error_start,    // ecc/parity related errors with current fetch - not sent down the pipe
-
-   input logic [1:0]                              iccm_rd_ecc_double_err,   // This fetch has a double ICCM ecc  error.
-
-   input logic [1:0]                              ic_access_fault_f,        // Instruction access fault for the current fetch.
-   input logic [1:0]                              ic_access_fault_type_f,   // Instruction access fault types
-
-   input logic                                    exu_flush_final,          // Flush from the pipeline.
-
-   input logic                                    dec_i0_decode_d,          // Valid instruction at D-stage and not blocked
-
-   input logic [31:0]                             ifu_fetch_data_f,         // fetch data in memory format - not right justified
-
-   input logic [1:0]                              ifu_fetch_val,            // valids on a 2B boundary, right justified
-   input logic [31:1]                             ifu_fetch_pc,             // starting pc of fetch
-
-
-
-   output logic                                   ifu_i0_valid,             // Instruction 0 is valid
-   output logic                                   ifu_i0_icaf,              // Instruction 0 has access fault
-   output logic [1:0]                             ifu_i0_icaf_type,         // Instruction 0 access fault type
-   output logic                                   ifu_i0_icaf_second,       // Instruction 0 has access fault on second 2B of 4B inst
-
-   output logic                                   ifu_i0_dbecc,             // Instruction 0 has double bit ecc error
-   output logic [31:0]                            ifu_i0_instr,             // Instruction 0
-   output logic [31:1]                            ifu_i0_pc,                // Instruction 0 PC
-   output logic                                   ifu_i0_pc4,
-
-   output logic                                   ifu_fb_consume1,          // Consumed one buffer. To fetch control fetch for buffer mass balance
-   output logic                                   ifu_fb_consume2,          // Consumed two buffers.To fetch control fetch for buffer mass balance
-
-
-   input logic [pt.BHT_GHR_SIZE-1:0]              ifu_bp_fghr_f,            // fetch GHR
-   input logic [31:1]                             ifu_bp_btb_target_f,      // predicted RET target
-   input logic [11:0]                             ifu_bp_poffset_f,         // predicted target offset
-   input logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f,        // predicted branch index (fully associative option)
-
-   input logic [1:0]                              ifu_bp_hist0_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_hist1_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_pc4_f,             // pc4 indication, right justified
-   input logic [1:0]                              ifu_bp_way_f,             // way indication, right justified
-   input logic [1:0]                              ifu_bp_valid_f,           // branch valid, right justified
-   input logic [1:0]                              ifu_bp_ret_f,             // predicted ret indication, right justified
-
-
-   output eb1_br_pkt_t                           i0_brp,                   // Branch packet for I0.
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]   ifu_i0_bp_index,          // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0]             ifu_i0_bp_fghr,           // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0]            ifu_i0_bp_btag,           // BP tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   output logic                                   ifu_pmu_instr_aligned,    // number of inst aligned this cycle
-
-   output logic [15:0]                            ifu_i0_cinst              // 16b compress inst for i0
-   );
-
-
-
-   logic                                          ifvalid;
-   logic                                          shift_f1_f0, shift_f2_f0, shift_f2_f1;
-   logic                                          fetch_to_f0, fetch_to_f1, fetch_to_f2;
-
-   logic [1:0]                                    f2val_in, f2val;
-   logic [1:0]                                    f1val_in, f1val;
-   logic [1:0]                                    f0val_in, f0val;
-   logic [1:0]                                    sf1val, sf0val;
-
-   logic [31:0]                                   aligndata;
-   logic                                          first4B, first2B;
-
-   logic [31:0]                                   uncompress0;
-   logic                                          i0_shift;
-   logic                                          shift_2B, shift_4B;
-   logic                                          f1_shift_2B;
-   logic                                          f2_valid, sf1_valid, sf0_valid;
-
-   logic [31:0]                                   ifirst;
-   logic [1:0]                                    alignval;
-   logic [31:1]                                   firstpc, secondpc;
-
-   logic [11:0]                                   f1poffset;
-   logic [11:0]                                   f0poffset;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f1fghr;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f0fghr;
-   logic [1:0]                                    f1hist1;
-   logic [1:0]                                    f0hist1;
-   logic [1:0]                                    f1hist0;
-   logic [1:0]                                    f0hist0;
-
-   logic [1:0][$clog2(pt.BTB_SIZE)-1:0]           f0index, f1index, alignindex;
-
-   logic [1:0]                                    f1ictype;
-   logic [1:0]                                    f0ictype;
-
-   logic [1:0]                                    f1pc4;
-   logic [1:0]                                    f0pc4;
-
-   logic [1:0]                                    f1ret;
-   logic [1:0]                                    f0ret;
-   logic [1:0]                                    f1way;
-   logic [1:0]                                    f0way;
-
-   logic [1:0]                                    f1brend;
-   logic [1:0]                                    f0brend;
-
-   logic [1:0]                                    alignbrend;
-   logic [1:0]                                    alignpc4;
-
-   logic [1:0]                                    alignret;
-   logic [1:0]                                    alignway;
-   logic [1:0]                                    alignhist1;
-   logic [1:0]                                    alignhist0;
-   logic [1:1]                                    alignfromf1;
-   logic                                          i0_ends_f1;
-   logic                                          i0_br_start_error;
-
-   logic [31:1]                                   f1prett;
-   logic [31:1]                                   f0prett;
-   logic [1:0]                                    f1dbecc;
-   logic [1:0]                                    f0dbecc;
-   logic [1:0]                                    f1icaf;
-   logic [1:0]                                    f0icaf;
-
-   logic [1:0]                                    aligndbecc;
-   logic [1:0]                                    alignicaf;
-   logic                                          i0_brp_pc4;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]          firstpc_hash, secondpc_hash;
-
-   logic                                          first_legal;
-
-   logic [1:0]                                    wrptr, wrptr_in;
-   logic [1:0]                                    rdptr, rdptr_in;
-   logic [2:0]                                    qwen;
-   logic [31:0]                                   q2,q1,q0;
-   logic                                          q2off_in, q2off;
-   logic                                          q1off_in, q1off;
-   logic                                          q0off_in, q0off;
-   logic                                          f0_shift_2B;
-
-   logic [31:0]                                   q0eff;
-   logic [31:0]                                   q0final;
-   logic                                          q0ptr;
-   logic [1:0]                                    q0sel;
-
-   logic [31:0]                                   q1eff;
-   logic [15:0]                                   q1final;
-   logic                                          q1ptr;
-   logic [1:0]                                    q1sel;
-
-   logic [2:0]                                    qren;
-
-   logic                                          consume_fb1, consume_fb0;
-   logic [1:0]                                    icaf_eff;
-
-   localparam                                     BRDATA_SIZE  = pt.BTB_ENABLE ? 16+($clog2(pt.BTB_SIZE)*2*pt.BTB_FULLYA) : 2;
-   localparam                                     BRDATA_WIDTH = pt.BTB_ENABLE ? 8+($clog2(pt.BTB_SIZE)*pt.BTB_FULLYA) : 1;
-   logic [BRDATA_SIZE-1:0]                        brdata_in, brdata2, brdata1, brdata0;
-   logic [BRDATA_SIZE-1:0]                        brdata1eff, brdata0eff;
-   logic [BRDATA_SIZE-1:0]                        brdata1final, brdata0final;
-
-   localparam                                     MHI   = 1+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-   localparam                                     MSIZE = 2+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-
-   logic [MHI:0]                                  misc_data_in, misc2, misc1, misc0;
-   logic [MHI:0]                                  misc1eff, misc0eff;
-
-   logic [pt.BTB_BTAG_SIZE-1:0]                  firstbrtag_hash, secondbrtag_hash;
-
-   logic                                         error_stall_in, error_stall;
-
-   assign error_stall_in = (error_stall | ifu_async_error_start) & ~exu_flush_final;
-
-   rvdff #(.WIDTH(7))  bundle1ff (.*,
-                                  .clk(active_clk),
-                                  .din ({wrptr_in[1:0],rdptr_in[1:0],q2off_in,q1off_in,q0off_in}),
-                                  .dout({wrptr[1:0],   rdptr[1:0],   q2off,   q1off,   q0off})
-                                  );
-
-   rvdffie #(.WIDTH(7),.OVERRIDE(1))  bundle2ff (.*,
-                                                 .din ({error_stall_in,f2val_in[1:0],f1val_in[1:0],f0val_in[1:0]}),
-                                                 .dout({error_stall,   f2val[1:0],   f1val[1:0],   f0val[1:0]   })
-                                                 );
-
-if(pt.BTB_ENABLE==1) begin
-   rvdffe #(BRDATA_SIZE)  brdata2ff   (.*, .clk(clk), .en(qwen[2]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata2[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata1ff   (.*, .clk(clk), .en(qwen[1]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata1[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata0ff   (.*, .clk(clk), .en(qwen[0]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata0[BRDATA_SIZE-1:0]));
-   rvdffe #(MSIZE)        misc2ff     (.*, .clk(clk), .en(qwen[2]),        .din(misc_data_in[MHI:0]),        .dout(misc2[MHI:0]));
-   rvdffe #(MSIZE)        misc1ff     (.*, .clk(clk), .en(qwen[1]),        .din(misc_data_in[MHI:0]),        .dout(misc1[MHI:0]));
-   rvdffe #(MSIZE)        misc0ff     (.*, .clk(clk), .en(qwen[0]),        .din(misc_data_in[MHI:0]),        .dout(misc0[MHI:0]));
-end
-else begin
-
-   rvdffie #((MSIZE*3)+(BRDATA_SIZE*3))    miscff      (.*,
-                                                        .din({qwen[2] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc2[MHI:0], brdata2[BRDATA_SIZE-1:0]},
-                                                              qwen[1] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc1[MHI:0], brdata1[BRDATA_SIZE-1:0]},
-                                                              qwen[0] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc0[MHI:0], brdata0[BRDATA_SIZE-1:0]}}),
-                                                        .dout({misc2[MHI:0],misc1[MHI:0],misc0[MHI:0],
-                                                               brdata2[BRDATA_SIZE-1:0], brdata1[BRDATA_SIZE-1:0], brdata0[BRDATA_SIZE-1:0]})
-                                                        );
-end
-
-  logic [31:1] q2pc, q1pc, q0pc;
-
-   rvdffe #(31)           q2pcff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_pc[31:1]),     .dout(q2pc[31:1]));
-   rvdffe #(31)           q1pcff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_pc[31:1]),     .dout(q1pc[31:1]));
-   rvdffe #(31)           q0pcff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_pc[31:1]),     .dout(q0pc[31:1]));
-
-   rvdffe #(32)           q2ff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_data_f[31:0]),     .dout(q2[31:0]));
-   rvdffe #(32)           q1ff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_data_f[31:0]),     .dout(q1[31:0]));
-   rvdffe #(32)           q0ff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_data_f[31:0]),     .dout(q0[31:0]));
-
-
-   // new queue control logic
-
-   assign qren[2:0]          = {  rdptr[1:0] == 2'b10,
-                                  rdptr[1:0] == 2'b01,
-                                  rdptr[1:0] == 2'b00 };
-
-   assign qwen[2:0]          = { (wrptr[1:0] == 2'b10) & ifvalid,
-                                 (wrptr[1:0] == 2'b01) & ifvalid,
-                                 (wrptr[1:0] == 2'b00) & ifvalid };
-
-
-   assign rdptr_in[1:0]      = ({2{ qren[0]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[0]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{~ifu_fb_consume1 & ~ifu_fb_consume2 & ~exu_flush_final}} & rdptr[1:0]);
-
-   assign wrptr_in[1:0]      = ({2{ qwen[0] & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qwen[1] & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qwen[2] & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{~ifvalid & ~exu_flush_final}} & wrptr[1:0]);
-
-
-
-   assign q2off_in          = ( ~qwen[2] & (rdptr[1:0]==2'd2)  &  (q2off | f0_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd1)  &  (q2off | f1_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd0)  &   q2off                );
-
-   assign q1off_in          = ( ~qwen[1] & (rdptr[1:0]==2'd1)  &  (q1off | f0_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd0)  &  (q1off | f1_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd2)  &   q1off                );
-
-   assign q0off_in          = ( ~qwen[0] & (rdptr[1:0]==2'd0)  &  (q0off | f0_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd2)  &  (q0off | f1_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd1)  &   q0off                );
-
-
-
-   assign q0ptr              = ( (rdptr[1:0]==2'b00) & q0off ) |
-                               ( (rdptr[1:0]==2'b01) & q1off ) |
-                               ( (rdptr[1:0]==2'b10) & q2off );
-
-   assign q1ptr              = ( (rdptr[1:0]==2'b00) & q1off ) |
-                               ( (rdptr[1:0]==2'b01) & q2off ) |
-                               ( (rdptr[1:0]==2'b10) & q0off );
-
-   assign q0sel[1:0]         = {q0ptr,~q0ptr};
-
-   assign q1sel[1:0]         = {q1ptr,~q1ptr};
-
-   // end new queue control logic
-
-
-   // misc data that is associated with each fetch buffer
-
-   if(pt.BTB_ENABLE==1)
-     assign misc_data_in[MHI:0] = {
-
-                                    ic_access_fault_type_f[1:0],
-                                    ifu_bp_btb_target_f[31:1],
-                                    ifu_bp_poffset_f[11:0],
-                                    ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0]
-                                    };
-   else
-     assign misc_data_in[MHI:0] = {
-                                    ic_access_fault_type_f[1:0]
-                                    };
-
-
-   assign {misc1eff[MHI:0],misc0eff[MHI:0]} = (({MSIZE*2{qren[0]}} & {misc1[MHI:0],misc0[MHI:0]}) |
-                                               ({MSIZE*2{qren[1]}} & {misc2[MHI:0],misc1[MHI:0]}) |
-                                               ({MSIZE*2{qren[2]}} & {misc0[MHI:0],misc2[MHI:0]}));
-
-   if(pt.BTB_ENABLE==1) begin
-   assign {
-            f1ictype[1:0],
-            f1prett[31:1],
-            f1poffset[11:0],
-            f1fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc1eff[MHI:0];
-
-   assign {
-            f0ictype[1:0],
-            f0prett[31:1],
-            f0poffset[11:0],
-            f0fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc0eff[MHI:0];
-
-      if(pt.BTB_FULLYA) begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               ifu_bp_fa_index_f[1], iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               ifu_bp_fa_index_f[0], iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0index[1],f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0index[0],f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1index[1],f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1index[0],f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-      else begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-
-
-
-
-   assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-   assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // if (pt.BTB_ENABLE==1)
-   else begin
-      assign {
-               f1ictype[1:0]
-               } = misc1eff[MHI:0];
-
-      assign {
-               f0ictype[1:0]
-               } = misc0eff[MHI:0];
-
-      assign brdata_in[BRDATA_SIZE-1:0] = {
-                                            iccm_rd_ecc_double_err[1],ic_access_fault_f[1],
-                                            iccm_rd_ecc_double_err[0],ic_access_fault_f[0]
-                                            };
-      assign {f0dbecc[1],f0icaf[1],
-              f0dbecc[0],f0icaf[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-      assign {f1dbecc[1],f1icaf[1],
-              f1dbecc[0],f1icaf[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                          ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-      assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-      assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // possible states of { sf0_valid, sf1_valid, f2_valid }
-   //
-   // 000    if->f0
-   // 100    if->f1
-   // 101    illegal
-   // 010    if->f1, f1->f0
-   // 110    if->f2
-   // 001    if->f1, f2->f0
-   // 011    if->f2, f2->f1, f1->f0
-   // 111   !if,     no shift
-
-   assign f2_valid           =  f2val[0];
-   assign sf1_valid          =  sf1val[0];
-   assign sf0_valid          =  sf0val[0];
-
-   // interface to fetch
-
-   assign consume_fb0        = ~sf0val[0] & f0val[0];
-
-   assign consume_fb1        = ~sf1val[0] & f1val[0];
-
-   assign ifu_fb_consume1    =  consume_fb0 & ~consume_fb1 & ~exu_flush_final;
-   assign ifu_fb_consume2    =  consume_fb0 &  consume_fb1 & ~exu_flush_final;
-
-   assign ifvalid            =  ifu_fetch_val[0];
-
-   assign shift_f1_f0        =  ~sf0_valid &  sf1_valid;
-   assign shift_f2_f0        =  ~sf0_valid & ~sf1_valid &  f2_valid;
-   assign shift_f2_f1        =  ~sf0_valid &  sf1_valid &  f2_valid;
-
-   assign fetch_to_f0        =  ~sf0_valid & ~sf1_valid & ~f2_valid & ifvalid;
-
-   assign fetch_to_f1        = (~sf0_valid & ~sf1_valid &  f2_valid & ifvalid)  |
-                               (~sf0_valid &  sf1_valid & ~f2_valid & ifvalid)  |
-                               ( sf0_valid & ~sf1_valid & ~f2_valid & ifvalid);
-
-   assign fetch_to_f2        = (~sf0_valid &  sf1_valid &  f2_valid & ifvalid)  |
-                               ( sf0_valid &  sf1_valid & ~f2_valid & ifvalid);
-
-
-   assign f2val_in[1:0]      = ({2{ fetch_to_f2 &                               ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{~fetch_to_f2 & ~shift_f2_f1 & ~shift_f2_f0 & ~exu_flush_final}} & f2val[1:0]        );
-
-
-   assign sf1val[1:0]        = ({2{ f1_shift_2B}} & {1'b0,f1val[1]}) |
-                               ({2{~f1_shift_2B}} & f1val[1:0]     );
-
-   assign f1val_in[1:0]      = ({2{ fetch_to_f1                               & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f1                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{~fetch_to_f1 & ~shift_f2_f1 & ~shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       );
-
-
-
-   assign sf0val[1:0]        = ({2{ shift_2B            }} & {1'b0,f0val[1]}) |
-                               ({2{~shift_2B & ~shift_4B}} & f0val[1:0]);
-
-   assign f0val_in[1:0]      = ({2{fetch_to_f0                                & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f0                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{                               shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       ) |
-                               ({2{~fetch_to_f0 & ~shift_f2_f0 & ~shift_f1_f0 & ~exu_flush_final}} & sf0val[1:0]       );
-
-   assign {q1eff[31:0],q0eff[31:0]} = (({64{qren[0]}} & {q1[31:0],q0[31:0]}) |
-                                       ({64{qren[1]}} & {q2[31:0],q1[31:0]}) |
-                                       ({64{qren[2]}} & {q0[31:0],q2[31:0]}));
-
-   assign q0final[31:0]      = ({32{q0sel[0]}} & {      q0eff[31:0]}) |
-                               ({32{q0sel[1]}} & {16'b0,q0eff[31:16]});
-
-   assign q1final[15:0]      = ({16{q1sel[0]}} & q1eff[15:0] ) |
-                               ({16{q1sel[1]}} & q1eff[31:16]);
-   logic [31:1] q0pceff, q0pcfinal;
-   logic [31:1] q1pceff;
-
-   assign {q1pceff[31:1],q0pceff[31:1]} = (({62{qren[0]}} & {q1pc[31:1],q0pc[31:1]}) |
-                                           ({62{qren[1]}} & {q2pc[31:1],q1pc[31:1]}) |
-                                           ({62{qren[2]}} & {q0pc[31:1],q2pc[31:1]}));
-
-
-   assign q0pcfinal[31:1]      = ({31{q0sel[0]}} & ( q0pceff[31:1])) |
-                                 ({31{q0sel[1]}} & ( q0pceff[31:1] + 31'd1));
-
-   assign aligndata[31:0]    = ({32{ f0val[1]           }} & {q0final[31:0]}) |
-                               ({32{~f0val[1] & f0val[0]}} & {q1final[15:0],q0final[15:0]});
-
-   assign alignval[1:0]      = ({ 2{ f0val[1]           }} & {2'b11}) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1val[0],1'b1});
-
-   assign alignicaf[1:0]    = ({ 2{ f0val[1]           }} &  f0icaf[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1icaf[0],f0icaf[0]});
-
-   assign aligndbecc[1:0]    = ({ 2{ f0val[1]           }} &  f0dbecc[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1dbecc[0],f0dbecc[0]});
-
-   if (pt.BTB_ENABLE==1) begin
-
-   // for branch prediction
-
-   assign alignbrend[1:0]    = ({ 2{ f0val[1]           }} &  f0brend[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1brend[0],f0brend[0]});
-
-   assign alignpc4[1:0]      = ({ 2{ f0val[1]           }} &  f0pc4[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1pc4[0],f0pc4[0]});
-
-      if(pt.BTB_FULLYA) begin
-         assign alignindex[0]      = f0index[0];
-         assign alignindex[1]      = f0val[1] ? f0index[1] : f1index[0];
-      end
-
-   assign alignret[1:0]      = ({ 2{ f0val[1]           }} &  f0ret[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1ret[0],f0ret[0]});
-
-   assign alignway[1:0]      = ({ 2{ f0val[1]           }} &  f0way[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1way[0],f0way[0]});
-
-   assign alignhist1[1:0]    = ({ 2{ f0val[1]           }} &  f0hist1[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist1[0],f0hist1[0]});
-
-   assign alignhist0[1:0]    = ({ 2{ f0val[1]           }} &  f0hist0[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist0[0],f0hist0[0]});
-
-   assign secondpc[31:1]     = ({31{ f0val[1]           }} &  (q0pceff[31:1] + 31'd1)) |
-                               // you need the base pc for 2nd one only (4B max, 2B for the 1st and 2B for the 2nd)
-                               ({31{~f0val[1] & f0val[0]}} &   q1pceff[31:1]      );
-
-
-   assign firstpc[31:1]      =  q0pcfinal[31:1];
-      end // if (pt.BTB_ENABLE==1)
-
-   assign alignfromf1[1]     =      ~f0val[1] & f0val[0];
-
-
-   assign ifu_i0_pc[31:1]    =  q0pcfinal[31:1];
-
-
-   assign ifu_i0_pc4         =  first4B;
-
-
-   assign ifu_i0_cinst[15:0] = aligndata[15:0];
-
-   assign first4B            = (aligndata[1:0] == 2'b11);
-   assign first2B            = ~first4B;
-
-   assign ifu_i0_valid       = (first4B & alignval[1]) |
-                               (first2B & alignval[0]);
-
-   // inst access fault on any byte of inst results in access fault for the inst
-   assign ifu_i0_icaf        = (first4B & (|alignicaf[1:0])) |
-                               (first2B &   alignicaf[0]   );
-
-   assign ifu_i0_icaf_type[1:0] = (first4B & ~f0val[1] & f0val[0] & ~alignicaf[0] & ~aligndbecc[0]) ? f1ictype[1:0] : f0ictype[1:0];
-
-
-   assign icaf_eff[1:0] = alignicaf[1:0] | aligndbecc[1:0];
-
-   assign ifu_i0_icaf_second = first4B & ~icaf_eff[0] & icaf_eff[1];
-
-   assign ifu_i0_dbecc       = (first4B & (|aligndbecc[1:0])) |
-                               (first2B &   aligndbecc[0]   );
-
-
-   assign ifirst[31:0]       =  aligndata[31:0];
-
-
-   assign ifu_i0_instr[31:0] = ({32{first4B & alignval[1]}} & ifirst[31:0]) |
-                               ({32{first2B & alignval[0]}} & uncompress0[31:0]);
-
-if(pt.BTB_ENABLE==1) begin
-
-   // if you detect br does not start on instruction boundary
-
-   eb1_btb_addr_hash #(.pt(pt)) firsthash (.pc(firstpc [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(firstpc_hash [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   eb1_btb_addr_hash #(.pt(pt)) secondhash(.pc(secondpc[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   if(pt.BTB_FULLYA) begin
-      assign firstbrtag_hash = firstpc;
-      assign secondbrtag_hash = secondpc;
-   end
-   else begin
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash_fold #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-   end // else: !if(pt.BTB_FULLYA)
-
-
-   // start_indexing - you want pc to be based on where the end of branch is prediction
-   // normal indexing pc based that's incorrect now for pc4 cases it's pc4 + 2
-
-   always_comb begin
-
-      i0_brp                 = '0;
-
-      i0_br_start_error      = (first4B & alignval[1] & alignbrend[0]);
-
-      i0_brp.valid           = (first2B & alignbrend[0]) |
-                               (first4B & alignbrend[1]) |
-                                i0_br_start_error;
-
-      i0_brp_pc4             = (first2B & alignpc4[0]) |
-                               (first4B & alignpc4[1]);
-
-      i0_brp.ret             = (first2B & alignret[0]) |
-                               (first4B & alignret[1]);
-
-      i0_brp.way             = (first2B | alignbrend[0])  ?  alignway[0]  :  alignway[1];
-
-      i0_brp.hist[1]         = (first2B & alignhist1[0]) |
-                               (first4B & alignhist1[1]);
-
-      i0_brp.hist[0]         = (first2B & alignhist0[0]) |
-                               (first4B & alignhist0[1]);
-
-      i0_ends_f1             =  first4B & alignfromf1[1];
-
-      i0_brp.toffset[11:0]   = (i0_ends_f1)  ?  f1poffset[11:0]  :  f0poffset[11:0];
-
-      i0_brp.prett[31:1]     = (i0_ends_f1)  ?  f1prett[31:1]    :  f0prett[31:1];
-
-      i0_brp.br_start_error  = i0_br_start_error;
-
-      i0_brp.bank            = (first2B | alignbrend[0])  ?  firstpc[1]  :  secondpc[1];
-
-      i0_brp.br_error        = (i0_brp.valid &  i0_brp_pc4 &  first2B) |
-                               (i0_brp.valid & ~i0_brp_pc4 &  first4B);
-
-      if(pt.BTB_FULLYA)
-        ifu_i0_fa_index = (first2B | alignbrend[0])  ?  alignindex[0]  :  alignindex[1];
-      else
-        ifu_i0_fa_index = '0;
-
- end
-
-
-   assign ifu_i0_bp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = (first2B | alignbrend[0])  ?  firstpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  :
-                                                                                         secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign ifu_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0]            = (i0_ends_f1)               ?  f1fghr[pt.BHT_GHR_SIZE-1:0]  :
-                                                                                         f0fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign ifu_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0]           = (first2B | alignbrend[0])  ?  firstbrtag_hash[pt.BTB_BTAG_SIZE-1:0]  :
-                                                                                         secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0];
-end
-else begin
-   assign i0_brp = '0;
-   assign ifu_i0_bp_index = '0;
-   assign ifu_i0_bp_fghr = '0;
-   assign ifu_i0_bp_btag = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // decompress
-
-   // quiet inputs for 4B inst
-   eb1_ifu_compress_ctl compress0 (.din((first2B) ? aligndata[15:0] : '0), .dout(uncompress0[31:0]));
-
-
-
-   assign i0_shift           =  dec_i0_decode_d & ~error_stall;
-
-   assign ifu_pmu_instr_aligned = i0_shift;
-
-
-   // compute how many bytes are being shifted from f0
-
-   assign shift_2B           =  i0_shift & first2B;
-
-   assign shift_4B           =  i0_shift & first4B;
-
-   // exact equations for the queue logic
-   assign f0_shift_2B        = (shift_2B & f0val[0]            ) |
-                               (shift_4B & f0val[0] & ~f0val[1]);
-
-
-   // f0 valid states
-   //     11
-   //     10
-   //     00
-
-   assign f1_shift_2B        =  f0val[0] & ~f0val[1] & shift_4B;
-
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_bp_ctl.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_bp_ctl.sv
deleted file mode 100644
index eae8a4e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_bp_ctl.sv
+++ /dev/null
@@ -1,884 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Branch predictor
-// Comments:
-//
-//
-//  Bank3 : Bank2 : Bank1 : Bank0
-//  FA  C       8       4       0
-//********************************************************************************
-
-module eb1_ifu_bp_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-
-   input logic clk,
-   input logic rst_l,
-
-   input logic ic_hit_f,      // Icache hit, enables F address capture
-
-   input logic [31:1] ifc_fetch_addr_f, // look up btb address
-   input logic ifc_fetch_req_f,  // F1 valid
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // BP commit update packet, includes errors
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associative btb error index
-
-   input logic dec_tlu_flush_lower_wb, // used to move EX4 RS to EX1 and F
-   input logic dec_tlu_flush_leak_one_wb, // don't hit for leak one fetches
-
-   input logic dec_tlu_bpred_disable, // disable all branch prediction
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr (for patching fghr)
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input logic exu_flush_final, // all flushes
-
-   output logic ifu_bp_hit_taken_f, // btb hit, select target
-   output logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-   output logic ifu_bp_inst_mask_f, // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f, // fetch ghr
-
-   output logic [1:0] ifu_bp_way_f, // way
-   output logic [1:0] ifu_bp_ret_f, // predicted ret
-   output logic [1:0] ifu_bp_hist1_f, // history counters for all 4 potential branches, bit 1, right justified
-   output logic [1:0] ifu_bp_hist0_f, // history counters for all 4 potential branches, bit 0, right justified
-   output logic [1:0] ifu_bp_pc4_f, // pc4 indication, right justified
-   output logic [1:0] ifu_bp_valid_f, // branch valid, right justified
-   output logic [11:0] ifu_bp_poffset_f, // predicted target
-
-   output logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f, // predicted branch index (fully associative option)
-
-   input  logic       scan_mode
-   );
-
-
-   localparam BTB_DWIDTH =  pt.BTB_TOFFSET_SIZE+pt.BTB_BTAG_SIZE+5;
-   localparam BTB_DWIDTH_TOP =  int'(pt.BTB_TOFFSET_SIZE)+int'(pt.BTB_BTAG_SIZE)+4;
-   localparam BTB_FA_INDEX = $clog2(pt.BTB_SIZE)-1;
-   localparam FA_CMP_LOWER = $clog2(pt.ICACHE_LN_SZ);
-   localparam FA_TAG_END_UPPER= 5+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER)-1; // must cast to int or vcs build fails
-   localparam FA_TAG_START_LOWER = 3+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER);
-   localparam FA_TAG_END_LOWER = 5+int'(pt.BTB_TOFFSET_SIZE);
-
-   localparam TAG_START=BTB_DWIDTH-1;
-   localparam PC4=4;
-   localparam BOFF=3;
-   localparam CALL=2;
-   localparam RET=1;
-   localparam BV=0;
-
-   localparam LRU_SIZE=pt.BTB_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP = (pt.BHT_ARRAY_DEPTH > 16 ) ? 16 : pt.BHT_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP_INNER_HI =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+3 : pt.BHT_ADDR_HI;
-   localparam NUM_BHT_LOOP_OUTER_LO =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+4 : pt.BHT_ADDR_LO;
-   localparam BHT_NO_ADDR_MATCH  = ( pt.BHT_ARRAY_DEPTH <= 16 );
-
-
-   logic exu_mp_valid_write;
-   logic exu_mp_ataken;
-   logic exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-   logic                                   dec_tlu_br0_v_wb; // WB stage history update
-   logic [1:0]                             dec_tlu_br0_hist_wb; // new history
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_tlu_br0_addr_wb; // addr
-   logic                                   dec_tlu_br0_error_wb; // error; invalidate bank
-   logic                                   dec_tlu_br0_start_error_wb; // error; invalidate all 4 banks in fg
-   logic [pt.BHT_GHR_SIZE-1:0]             exu_i0_br_fghr_wb;
-
-   logic use_mp_way, use_mp_way_p1;
-   logic [pt.RET_STACK_SIZE-1:0][31:0] rets_out, rets_in;
-   logic [pt.RET_STACK_SIZE-1:0]        rsenable;
-
-
-   logic [11:0]       btb_rd_tgt_f;
-   logic              btb_rd_pc4_f, btb_rd_call_f, btb_rd_ret_f;
-   logic [1:1]        bp_total_branch_offset_f;
-
-   logic [31:1]       bp_btb_target_adder_f;
-   logic [31:1]       bp_rs_call_target_f;
-   logic              rs_push, rs_pop, rs_hold;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_p1_f, btb_wr_addr, btb_rd_addr_f;
-   logic [pt.BTB_BTAG_SIZE-1:0] btb_wr_tag, fetch_rd_tag_f, fetch_rd_tag_p1_f;
-   logic [BTB_DWIDTH-1:0]        btb_wr_data;
-   logic               btb_wr_en_way0, btb_wr_en_way1;
-
-
-   logic               dec_tlu_error_wb, btb_valid, dec_tlu_br0_middle_wb;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]        btb_error_addr_wb;
-   logic branch_error_collision_f, fetch_mp_collision_f, branch_error_collision_p1_f, fetch_mp_collision_p1_f;
-
-   logic  branch_error_bank_conflict_f;
-   logic [pt.BHT_GHR_SIZE-1:0] merged_ghr, fghr_ns, fghr;
-   logic [1:0] num_valids;
-   logic [LRU_SIZE-1:0] btb_lru_b0_f, btb_lru_b0_hold, btb_lru_b0_ns,
-                        fetch_wrindex_dec, fetch_wrindex_p1_dec, fetch_wrlru_b0, fetch_wrlru_p1_b0,
-                        mp_wrindex_dec, mp_wrlru_b0;
-   logic                btb_lru_rd_f, btb_lru_rd_p1_f, lru_update_valid_f;
-   logic  tag_match_way0_f, tag_match_way1_f;
-   logic [1:0] way_raw, bht_dir_f, btb_sel_f, wayhit_f, vwayhit_f, wayhit_p1_f;
-   logic [1:0] bht_valid_f, bht_force_taken_f;
-
-   logic leak_one_f, leak_one_f_d1;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way0_out ;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way1_out ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_p1_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_p1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_vbank0_rd_data_f, btb_vbank1_rd_data_f;
-
-   logic                                         final_h;
-   logic                                         btb_fg_crossing_f;
-   logic                                         middle_of_bank;
-
-
-   logic [1:0]                                   bht_vbank0_rd_data_f, bht_vbank1_rd_data_f;
-   logic                                         branch_error_bank_conflict_p1_f;
-   logic                                         tag_match_way0_p1_f, tag_match_way1_p1_f;
-
-   logic [1:0]                                   btb_vlru_rd_f, fetch_start_f, tag_match_vway1_expanded_f, tag_match_way0_expanded_p1_f, tag_match_way1_expanded_p1_f;
-   logic [31:2] fetch_addr_p1_f;
-
-
-   logic exu_mp_way, exu_mp_way_f, dec_tlu_br0_way_wb, dec_tlu_way_wb;
-   logic                [BTB_DWIDTH-1:0] btb_bank0e_rd_data_f, btb_bank0e_rd_data_p1_f;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0o_rd_data_f;
-
-   logic [1:0] tag_match_way0_expanded_f, tag_match_way1_expanded_f;
-
-
-    logic [1:0]                                  bht_bank0_rd_data_f;
-    logic [1:0]                                  bht_bank1_rd_data_f;
-    logic [1:0]                                  bht_bank0_rd_data_p1_f;
-   genvar                                        j, i;
-
-   assign exu_mp_valid = exu_mp_pkt.misp & ~leak_one_f; // conditional branch mispredict
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // repl way
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-   assign exu_mp_ataken = exu_mp_pkt.ataken;
-
-
-   assign dec_tlu_br0_v_wb = dec_tlu_br0_r_pkt.valid;
-   assign dec_tlu_br0_hist_wb[1:0]  = dec_tlu_br0_r_pkt.hist[1:0];
-   assign dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign dec_tlu_br0_error_wb = dec_tlu_br0_r_pkt.br_error;
-   assign dec_tlu_br0_middle_wb = dec_tlu_br0_r_pkt.middle;
-   assign dec_tlu_br0_way_wb = dec_tlu_br0_r_pkt.way;
-   assign dec_tlu_br0_start_error_wb = dec_tlu_br0_r_pkt.br_start_error;
-   assign exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0] = exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0];
-
-
-
-
-   // ----------------------------------------------------------------------
-   // READ
-   // ----------------------------------------------------------------------
-
-   // hash the incoming fetch PC, first guess at hashing algorithm
-   eb1_btb_addr_hash #(.pt(pt)) f1hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-
-   assign fetch_addr_p1_f[31:2] = ifc_fetch_addr_f[31:2] + 30'b1;
-   eb1_btb_addr_hash #(.pt(pt)) f1hash_p1(.pc(fetch_addr_p1_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   assign btb_sel_f[1] = ~bht_dir_f[0];
-   assign btb_sel_f[0] =  bht_dir_f[0];
-
-   assign fetch_start_f[1:0] = {ifc_fetch_addr_f[1], ~ifc_fetch_addr_f[1]};
-
-   // Errors colliding with fetches must kill the btb/bht hit.
-
-   assign branch_error_collision_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-   assign branch_error_collision_p1_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-
-   assign branch_error_bank_conflict_f = branch_error_collision_f & dec_tlu_error_wb;
-   assign branch_error_bank_conflict_p1_f = branch_error_collision_p1_f & dec_tlu_error_wb;
-
-   // set on leak one, hold until next flush without leak one
-   assign leak_one_f = (dec_tlu_flush_leak_one_wb & dec_tlu_flush_lower_wb) | (leak_one_f_d1 & ~dec_tlu_flush_lower_wb);
-
-logic exu_flush_final_d1;
-
- if(!pt.BTB_FULLYA) begin
-   assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                    exu_mp_valid & ifc_fetch_req_f &
-                                    (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                    );
-   assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                       exu_mp_valid & ifc_fetch_req_f &
-                                       (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                       );
-   // 2 -way SA, figure out the way hit and mux accordingly
-   assign tag_match_way0_f = btb_bank0_rd_data_way0_f[BV] & (btb_bank0_rd_data_way0_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_f = btb_bank0_rd_data_way1_f[BV] & (btb_bank0_rd_data_way1_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way0_p1_f = btb_bank0_rd_data_way0_p1_f[BV] & (btb_bank0_rd_data_way0_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_p1_f = btb_bank0_rd_data_way1_p1_f[BV] & (btb_bank0_rd_data_way1_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   // Both ways could hit, use the offset bit to reorder
-
-   assign tag_match_way0_expanded_f[1:0] = {tag_match_way0_f &  (btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4]),
-                                             tag_match_way0_f & ~(btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4])};
-
-   assign tag_match_way1_expanded_f[1:0] = {tag_match_way1_f &  (btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4]),
-                                             tag_match_way1_f & ~(btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4])};
-
-   assign tag_match_way0_expanded_p1_f[1:0] = {tag_match_way0_p1_f &  (btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4]),
-                                                tag_match_way0_p1_f & ~(btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4])};
-
-   assign tag_match_way1_expanded_p1_f[1:0] = {tag_match_way1_p1_f &  (btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4]),
-                                                tag_match_way1_p1_f & ~(btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4])};
-
-   assign wayhit_f[1:0] = tag_match_way0_expanded_f[1:0] | tag_match_way1_expanded_f[1:0];
-   assign wayhit_p1_f[1:0] = tag_match_way0_expanded_p1_f[1:0] | tag_match_way1_expanded_p1_f[1:0];
-
-   assign btb_bank0o_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[1]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[1]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-   assign btb_bank0e_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[0]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[0]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-
-   assign btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_p1_f[0]}} & btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0]) |
-                                                               ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_p1_f[0]}} & btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0]) );
-
-   // virtual bank order
-
-   assign btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0e_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) );
-   assign btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0]) );
-
-   assign way_raw[1:0] =  tag_match_vway1_expanded_f[1:0] | (~vwayhit_f[1:0] & btb_vlru_rd_f[1:0]);
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-   // update lru
-   // mp
-
-   // create a onehot lru write vector
-   assign mp_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   // fetch
-   assign fetch_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign fetch_wrindex_p1_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign mp_wrlru_b0[LRU_SIZE-1:0] = mp_wrindex_dec[LRU_SIZE-1:0] & {LRU_SIZE{exu_mp_valid}};
-
-
-   assign btb_lru_b0_hold[LRU_SIZE-1:0] = ~mp_wrlru_b0[LRU_SIZE-1:0] & ~fetch_wrlru_b0[LRU_SIZE-1:0];
-
-   // Forward the mp lru information to the fetch, avoids multiple way hits later
-   assign use_mp_way = fetch_mp_collision_f;
-   assign use_mp_way_p1 = fetch_mp_collision_p1_f;
-
-   assign lru_update_valid_f = (vwayhit_f[0] | vwayhit_f[1]) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   assign fetch_wrlru_b0[LRU_SIZE-1:0] = fetch_wrindex_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-   assign fetch_wrlru_p1_b0[LRU_SIZE-1:0] = fetch_wrindex_p1_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-
-   assign btb_lru_b0_ns[LRU_SIZE-1:0] = ( (btb_lru_b0_hold[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]) |
-                                          (mp_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{~exu_mp_way}}) |
-                                          (fetch_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_f}}) |
-                                          (fetch_wrlru_p1_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_p1_f}}) );
-
-
-
-   assign btb_lru_rd_f = use_mp_way ? exu_mp_way_f : |(fetch_wrindex_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   assign btb_lru_rd_p1_f = use_mp_way_p1 ? exu_mp_way_f : |(fetch_wrindex_p1_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   // rotated
-   assign btb_vlru_rd_f[1:0] = ( ({2{fetch_start_f[0]}} & {btb_lru_rd_f, btb_lru_rd_f}) |
-                                  ({2{fetch_start_f[1]}} & {btb_lru_rd_p1_f, btb_lru_rd_f}));
-
-   assign tag_match_vway1_expanded_f[1:0] = ( ({2{fetch_start_f[0]}} & {tag_match_way1_expanded_f[1:0]}) |
-                                               ({2{fetch_start_f[1]}} & {tag_match_way1_expanded_p1_f[0], tag_match_way1_expanded_f[1]}) );
-
-
-   rvdffe #(LRU_SIZE) btb_lru_ff (.*, .en(ifc_fetch_req_f | exu_mp_valid),
-                                    .din(btb_lru_b0_ns[(LRU_SIZE)-1:0]),
-                                   .dout(btb_lru_b0_f[(LRU_SIZE)-1:0]));
-
- end // if (!pt.BTB_FULLYA)
-   // Detect end of cache line and mask as needed
-   logic eoc_near;
-   logic eoc_mask;
-   assign eoc_near = &ifc_fetch_addr_f[pt.ICACHE_BEAT_ADDR_HI:3];
-   assign eoc_mask = ~eoc_near| (|(~ifc_fetch_addr_f[2:1]));
-
-
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-
-   // mux out critical hit bank for pc computation
-   // This is only useful for the first taken branch in the fetch group
-   logic [16:1] btb_sel_data_f;
-
-   assign btb_rd_tgt_f[11:0] = btb_sel_data_f[16:5];
-   assign btb_rd_pc4_f       = btb_sel_data_f[4];
-   assign btb_rd_call_f      = btb_sel_data_f[2];
-   assign btb_rd_ret_f       = btb_sel_data_f[1];
-
-   assign btb_sel_data_f[16:1] = ( ({16{btb_sel_f[1]}} & btb_vbank1_rd_data_f[16:1]) |
-                                    ({16{btb_sel_f[0]}} & btb_vbank0_rd_data_f[16:1]) );
-
-
-   logic [1:0] hist0_raw, hist1_raw, pc4_raw, pret_raw;
-
-   // a valid taken target needs to kill the next fetch as we compute the target address
-   assign ifu_bp_hit_taken_f = |(vwayhit_f[1:0] & hist1_raw[1:0]) & ifc_fetch_req_f & ~leak_one_f_d1 & ~dec_tlu_bpred_disable;
-
-
-   // Don't put calls/rets/ja in the predictor, force the bht taken instead
-   assign bht_force_taken_f[1:0] = {(btb_vbank1_rd_data_f[CALL] | btb_vbank1_rd_data_f[RET]),
-                                     (btb_vbank0_rd_data_f[CALL] | btb_vbank0_rd_data_f[RET])};
-
-
-   // taken and valid, otherwise, branch errors must clear the bht
-   assign bht_valid_f[1:0] = vwayhit_f[1:0];
-
-   assign bht_vbank0_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank0_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank1_rd_data_f[1:0]) );
-
-   assign bht_vbank1_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank1_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank0_rd_data_p1_f[1:0]) );
-
-
-   assign bht_dir_f[1:0] = {(bht_force_taken_f[1] | bht_vbank1_rd_data_f[1]) & bht_valid_f[1],
-                             (bht_force_taken_f[0] | bht_vbank0_rd_data_f[1]) & bht_valid_f[0]};
-
-   assign ifu_bp_inst_mask_f = (ifu_bp_hit_taken_f & btb_sel_f[1]) | ~ifu_bp_hit_taken_f;
-
-
-
-
-   // Branch prediction info is sent with the 2byte lane associated with the end of the branch.
-   // Cases
-   //       BANK1         BANK0
-   // -------------------------------
-   // |      :       |      :       |
-   // -------------------------------
-   //         <------------>                   : PC4 branch, offset, should be in B1 (indicated on [2])
-   //                <------------>            : PC4 branch, no offset, indicate PC4, VALID, HIST on [1]
-   //                       <------------>     : PC4 branch, offset, indicate PC4, VALID, HIST on [0]
-   //                <------>                  : PC2 branch, offset, indicate VALID, HIST on [1]
-   //                       <------>           : PC2 branch, no offset, indicate VALID, HIST on [0]
-   //
-
-
-
-   assign hist1_raw[1:0] = bht_force_taken_f[1:0] | {bht_vbank1_rd_data_f[1],
-                                                      bht_vbank0_rd_data_f[1]};
-
-   assign hist0_raw[1:0] = {bht_vbank1_rd_data_f[0],
-                            bht_vbank0_rd_data_f[0]};
-
-
-   assign pc4_raw[1:0] = {vwayhit_f[1] & btb_vbank1_rd_data_f[PC4],
-                          vwayhit_f[0] & btb_vbank0_rd_data_f[PC4]};
-
-   assign pret_raw[1:0] = {vwayhit_f[1] & ~btb_vbank1_rd_data_f[CALL] & btb_vbank1_rd_data_f[RET],
-                           vwayhit_f[0] & ~btb_vbank0_rd_data_f[CALL] & btb_vbank0_rd_data_f[RET]};
-
-   // GHR
-
-
-  // count the valids with masking based on first taken
-   assign num_valids[1:0] = countones(bht_valid_f[1:0]);
-
-   // Note that the following property holds
-   // P: prior ghr, H: history bit of last valid branch in line (could be 1 or 0)
-   // Num valid branches   What new GHR must be
-   // 2                    0H
-   // 1                    PH
-   // 0                    PP
-
-   assign final_h = |(btb_sel_f[1:0] & bht_dir_f[1:0]);
-
-   assign merged_ghr[pt.BHT_GHR_SIZE-1:0] = (
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h2}} & {fghr[pt.BHT_GHR_SIZE-3:0], 1'b0, final_h}) | // 0H
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h1}} & {fghr[pt.BHT_GHR_SIZE-2:0], final_h}) | // PH
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h0}} & {fghr[pt.BHT_GHR_SIZE-1:0]}) ); // PP
-
-   logic [pt.BHT_GHR_SIZE-1:0] exu_flush_ghr;
-   assign exu_flush_ghr[pt.BHT_GHR_SIZE-1:0] = exu_mp_fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign fghr_ns[pt.BHT_GHR_SIZE-1:0] = ( ({pt.BHT_GHR_SIZE{exu_flush_final_d1}} & exu_flush_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1}} & merged_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ~(ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1)}} & fghr[pt.BHT_GHR_SIZE-1:0]));
-
-   rvdffie #(.WIDTH(pt.BHT_GHR_SIZE+3),.OVERRIDE(1)) fetchghr (.*,
-                                          .din ({exu_flush_final, exu_mp_way, leak_one_f, fghr_ns[pt.BHT_GHR_SIZE-1:0]}),
-                                          .dout({exu_flush_final_d1, exu_mp_way_f, leak_one_f_d1, fghr[pt.BHT_GHR_SIZE-1:0]}));
-
-   assign ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0] = fghr[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign ifu_bp_way_f[1:0] = way_raw[1:0];
-   assign ifu_bp_hist1_f[1:0]    = hist1_raw[1:0];
-   assign ifu_bp_hist0_f[1:0]    = hist0_raw[1:0];
-   assign ifu_bp_pc4_f[1:0]     = pc4_raw[1:0];
-
-   assign ifu_bp_valid_f[1:0]   = vwayhit_f[1:0] & ~{2{dec_tlu_bpred_disable}};
-   assign ifu_bp_ret_f[1:0]     = pret_raw[1:0];
-
-
-   // compute target
-   // Form the fetch group offset based on the btb hit location and the location of the branch within the 4 byte chunk
-
-//  .i 5
-//  .o 3
-//  .ilb bht_dir_f[1] bht_dir_f[0] fetch_start_f[1] fetch_start_f[0] btb_rd_pc4_f
-//  .ob bloc_f[1] bloc_f[0] use_fa_plus
-//  .type fr
-//
-//
-//  ## rotdir[1:0]  fs   pc4  off fapl
-//    -1            01 -  01  0
-//    10            01 -  10  0
-//
-//    -1            10 -  10  0
-//    10            10 0  01  1
-//    10            10 1  01  0
-logic [1:0] bloc_f;
-logic use_fa_plus;
-assign bloc_f[1] = (bht_dir_f[0] & ~fetch_start_f[0]) | (~bht_dir_f[0]
-     & fetch_start_f[0]);
-assign bloc_f[0] = (bht_dir_f[0] & fetch_start_f[0]) | (~bht_dir_f[0]
-     & ~fetch_start_f[0]);
-assign use_fa_plus = (~bht_dir_f[0] & ~fetch_start_f[0] & ~btb_rd_pc4_f);
-
-
-
-
-    assign btb_fg_crossing_f = fetch_start_f[0] & btb_sel_f[0] & btb_rd_pc4_f;
-
-   assign bp_total_branch_offset_f =  bloc_f[1] ^ btb_rd_pc4_f;
-
-   logic [31:2] adder_pc_in_f, ifc_fetch_adder_prior;
-   rvdfflie #(.WIDTH(30), .LEFT(19)) faddrf_ff (.*, .en(ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f), .din(ifc_fetch_addr_f[31:2]), .dout(ifc_fetch_adder_prior[31:2]));
-
-
-   assign ifu_bp_poffset_f[11:0] = btb_rd_tgt_f[11:0];
-
-   assign adder_pc_in_f[31:2] = ( ({30{ use_fa_plus}} & fetch_addr_p1_f[31:2]) |
-                                   ({30{ btb_fg_crossing_f}} & ifc_fetch_adder_prior[31:2]) |
-                                   ({30{~btb_fg_crossing_f & ~use_fa_plus}} & ifc_fetch_addr_f[31:2]));
-
-   rvbradder predtgt_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                         .offset(btb_rd_tgt_f[11:0]),
-                         .dout(bp_btb_target_adder_f[31:1])
-                         );
-   // mux in the return stack address here for a predicted return assuming the RS is valid, quite if no prediction
-   assign ifu_bp_btb_target_f[31:1] = (({31{btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0] & ifu_bp_hit_taken_f}} & rets_out[0][31:1]) |
-                                       ({31{~(btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0]) & ifu_bp_hit_taken_f}} & bp_btb_target_adder_f[31:1]) );
-
-
-   // ----------------------------------------------------------------------
-   // Return Stack
-   // ----------------------------------------------------------------------
-
-   rvbradder rs_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                    .offset({11'b0,  ~btb_rd_pc4_f}),
-                    .dout(bp_rs_call_target_f[31:1])
-                         );
-
-   assign rs_push = (btb_rd_call_f & ~btb_rd_ret_f & ifu_bp_hit_taken_f);
-   assign rs_pop = (btb_rd_ret_f & ~btb_rd_call_f & ifu_bp_hit_taken_f);
-   assign rs_hold = ~rs_push & ~rs_pop;
-
-
-
-   // Fetch based (bit 0 is a valid)
-   assign rets_in[0][31:0] = ( ({32{rs_push}} & {bp_rs_call_target_f[31:1], 1'b1}) | // target[31:1], valid
-                               ({32{rs_pop}}  & rets_out[1][31:0]) );
-
-   assign rsenable[0] = ~rs_hold;
-
-   for (i=0; i<pt.RET_STACK_SIZE; i++) begin : retstack
-
-      // for the last entry in the stack, we don't have a pop position
-      if(i==pt.RET_STACK_SIZE-1) begin
-         assign rets_in[i][31:0] = rets_out[i-1][31:0];
-         assign rsenable[i] = rs_push;
-      end
-      else if(i>0) begin
-        assign rets_in[i][31:0] = ( ({32{rs_push}} & rets_out[i-1][31:0]) |
-                                    ({32{rs_pop}}  & rets_out[i+1][31:0]) );
-         assign rsenable[i] = rs_push | rs_pop;
-      end
-      rvdffe #(32) rets_ff (.*, .en(rsenable[i]), .din(rets_in[i][31:0]), .dout(rets_out[i][31:0]));
-
-   end : retstack
-
-   // ----------------------------------------------------------------------
-   // WRITE
-   // ----------------------------------------------------------------------
-
-
-   assign dec_tlu_error_wb = dec_tlu_br0_start_error_wb | dec_tlu_br0_error_wb;
-
-   assign btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign dec_tlu_way_wb = dec_tlu_br0_way_wb;
-
-   assign btb_valid = exu_mp_valid & ~dec_tlu_error_wb;
-
-   assign btb_wr_tag[pt.BTB_BTAG_SIZE-1:0] = exu_mp_btag[pt.BTB_BTAG_SIZE-1:0];
-
-   if(!pt.BTB_FULLYA) begin
-
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagf  (.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({fetch_addr_p1_f[ pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) rdtagf(.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                             .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                               .pc({fetch_addr_p1_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-
-      assign btb_wr_en_way0 = ( ({{~exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{~dec_tlu_way_wb & dec_tlu_error_wb}}));
-
-      assign btb_wr_en_way1 = ( ({{exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{dec_tlu_way_wb & dec_tlu_error_wb}}));
-      assign btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_error_wb ? btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] : exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-
-      assign vwayhit_f[1:0] = ( ({2{fetch_start_f[0]}} & {wayhit_f[1:0]}) |
-                                ({2{fetch_start_f[1]}} & {wayhit_p1_f[0], wayhit_f[1]})) & {eoc_mask, 1'b1};
-
-   end // if (!pt.BTB_FULLYA)
-
-   assign btb_wr_data[BTB_DWIDTH-1:0] = {btb_wr_tag[pt.BTB_BTAG_SIZE-1:0], exu_mp_tgt[pt.BTB_TOFFSET_SIZE-1:0], exu_mp_pc4, exu_mp_boffset,
-                                                exu_mp_call | exu_mp_ja, exu_mp_ret | exu_mp_ja, btb_valid} ;
-
-   assign exu_mp_valid_write = exu_mp_valid & exu_mp_ataken & ~exu_mp_pkt.valid;
-   logic [1:0] bht_wr_data0, bht_wr_data2;
-   logic [1:0] bht_wr_en0, bht_wr_en2;
-
-   assign middle_of_bank = exu_mp_pc4 ^ exu_mp_boffset;
-   assign bht_wr_en0[1:0] = {2{exu_mp_valid & ~exu_mp_call & ~exu_mp_ret & ~exu_mp_ja}} & {middle_of_bank, ~middle_of_bank};
-   assign bht_wr_en2[1:0] = {2{dec_tlu_br0_v_wb}} & {dec_tlu_br0_middle_wb, ~dec_tlu_br0_middle_wb} ;
-
-   // Experiments show this is the best priority scheme for same bank/index writes at the same time.
-   assign bht_wr_data0[1:0] = exu_mp_hist[1:0]; // lowest priority
-   assign bht_wr_data2[1:0] = dec_tlu_br0_hist_wb[1:0]; // highest priority
-
-
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] bht_rd_addr_f, bht_rd_addr_p1_f, bht_wr_addr0, bht_wr_addr2;
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] mp_hashed, br0_hashed_wb, bht_rd_addr_hashed_f, bht_rd_addr_hashed_p1_f;
-   eb1_btb_ghr_hash #(.pt(pt)) mpghrhs  (.hashin(exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]), .hash(mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) br0ghrhs (.hashin(dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0]), .hash(br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs (.hashin(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs_p1 (.hashin(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-
-   assign bht_wr_addr0[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_wr_addr2[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-
-
-   // ----------------------------------------------------------------------
-   // Structures. Using FLOPS
-   // ----------------------------------------------------------------------
-   // BTB
-   // Entry -> tag[pt.BTB_BTAG_SIZE-1:0], toffset[11:0], pc4, boffset, call, ret, valid
-
-   if(!pt.BTB_FULLYA) begin
-
-      for (j=0 ; j<LRU_SIZE ; j++) begin : BTB_FLOPS
-         // Way 0
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way0 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way0)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way0_out[j]));
-
-         // Way 1
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way1 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way1)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way1_out[j]));
-
-      end
-
-
-    always_comb begin : BTB_rd_mux
-        btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] = '0 ;
-
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-    end
-end // if (!pt.BTB_FULLYA)
-
-
-
-
-
-      if(pt.BTB_FULLYA) begin : fa
-
-         logic found1, hit0, hit1;
-         logic btb_used_reset, write_used;
-         logic [$clog2(pt.BTB_SIZE)-1:0] btb_fa_wr_addr0, hit0_index, hit1_index;
-
-         logic [pt.BTB_SIZE-1:0]         btb_tag_hit, btb_offset_0, btb_offset_1, btb_used_ns, btb_used,
-                                         wr0_en, btb_upper_hit;
-         logic [pt.BTB_SIZE-1:0][BTB_DWIDTH-1:0] btbdata;
-
-         // Fully Associative tag hash uses bits 31:3. Bits 2:1 are the offset bits used for the 4 tag comp banks
-         // Full tag used to speed up lookup. There is one 31:3 cmp per entry, and 4 2:1 cmps per entry.
-
-         logic [FA_CMP_LOWER-1:1]  ifc_fetch_addr_p1_f;
-
-
-         assign ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1] = ifc_fetch_addr_f[FA_CMP_LOWER-1:1] + 1'b1;
-
-         assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == ifc_fetch_addr_f[31:1]) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-         assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == {ifc_fetch_addr_f[31:FA_CMP_LOWER], ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]}) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-
-      always_comb begin
-         btb_vbank0_rd_data_f = '0;
-         btb_vbank1_rd_data_f = '0;
-         btb_tag_hit = '0;
-         btb_upper_hit = '0;
-         btb_offset_0 = '0;
-         btb_offset_1 = '0;
-
-         found1 = 1'b0;
-         hit0 = 1'b0;
-         hit1 = 1'b0;
-         hit0_index = '0;
-         hit1_index = '0;
-         btb_fa_wr_addr0 = '0;
-
-         for(int i=0; i<pt.BTB_SIZE; i++) begin
-            // Break the cmp into chunks for lower area.
-            // Chunk1: FA 31:6 or 31:5 depending on icache line size
-            // Chunk2: FA 5:1 or 4:1 depending on icache line size
-            btb_upper_hit[i] = (btbdata[i][BTB_DWIDTH_TOP:FA_TAG_END_UPPER] == ifc_fetch_addr_f[31:FA_CMP_LOWER]) & btbdata[i][0] & ~wr0_en[i];
-            btb_offset_0[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-            btb_offset_1[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-
-            if(~hit0) begin
-               if(btb_offset_0[i]) begin
-                  hit0_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  // hit unless we are also writing this entry at the same time
-                  hit0 = 1'b1;
-               end
-            end
-            if(~hit1) begin
-               if(btb_offset_1[i]) begin
-                  hit1_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  hit1 = 1'b1;
-               end
-            end
-
-
-            // Mux out the 2 potential branches
-            if(btb_offset_0[i] == 1'b1)
-              btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_f ? btb_wr_data : btbdata[i];
-            if(btb_offset_1[i] == 1'b1)
-              btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_p1_f ? btb_wr_data : btbdata[i];
-
-            // find the first zero from bit zero in the used vector, this is the write address
-            if(~found1) begin
-               if(~btb_used[i]) begin
-                  btb_fa_wr_addr0[BTB_FA_INDEX:0] = i[BTB_FA_INDEX:0];
-                  found1 = 1'b1;
-               end
-            end
-         end
-      end // always_comb begin
-
-`ifdef RV_ASSERT_ON
-   btbhitonehot0: assert #0 ($onehot0(btb_offset_0));
-   btbhitonehot1: assert #0 ($onehot0(btb_offset_1));
-`endif
-
-   assign vwayhit_f[1:0] = {hit1, hit0} & {eoc_mask, 1'b1};
-
-   // way bit is reused as the predicted bit
-   assign way_raw[1:0] =  vwayhit_f[1:0] | {fetch_mp_collision_p1_f, fetch_mp_collision_f};
-
-   for (j=0 ; j<pt.BTB_SIZE ; j++) begin : BTB_FAFLOPS
-
-      assign wr0_en[j] = ((btb_fa_wr_addr0[BTB_FA_INDEX:0] == j) & (exu_mp_valid_write & ~exu_mp_pkt.way)) |
-                         ((dec_fa_error_index == j) & dec_tlu_error_wb);
-
-      rvdffe #(BTB_DWIDTH) btb_fa (.*, .clk(clk),
-                                   .en  (wr0_en[j]),
-                                   .din (btb_wr_data[BTB_DWIDTH-1:0]),
-                                   .dout(btbdata[j]));
-   end // block: BTB_FAFLOPS
-
-   assign ifu_bp_fa_index_f[1] = hit1 ? hit1_index : '0;
-   assign ifu_bp_fa_index_f[0] = hit0 ? hit0_index : '0;
-
-   assign btb_used_reset = &btb_used[pt.BTB_SIZE-1:0];
-   assign btb_used_ns[pt.BTB_SIZE-1:0] = ({pt.BTB_SIZE{vwayhit_f[1]}} & (32'b1 << hit1_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{vwayhit_f[0]}} & (32'b1 << hit0_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{exu_mp_valid_write & ~exu_mp_pkt.way & ~dec_tlu_error_wb}} & (32'b1 << btb_fa_wr_addr0[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{btb_used_reset}} & {pt.BTB_SIZE{1'b0}}) |
-                                         ({pt.BTB_SIZE{~btb_used_reset & dec_tlu_error_wb}} & (btb_used[pt.BTB_SIZE-1:0] & ~(32'b1 << dec_fa_error_index[BTB_FA_INDEX:0]))) |
-                                         (~{pt.BTB_SIZE{btb_used_reset | dec_tlu_error_wb}} & btb_used[pt.BTB_SIZE-1:0]);
-
-   assign write_used = btb_used_reset | ifu_bp_hit_taken_f | exu_mp_valid_write | dec_tlu_error_wb;
-
-
-   rvdffe #(pt.BTB_SIZE) btb_usedf (.*, .clk(clk),
-                    .en  (write_used),
-                    .din (btb_used_ns[pt.BTB_SIZE-1:0]),
-                    .dout(btb_used[pt.BTB_SIZE-1:0]));
-
-end // block: fa
-
-
-   //-----------------------------------------------------------------------------
-   // BHT
-   // 2 bit Entry -> direction, strength
-   //
-   //-----------------------------------------------------------------------------
-
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0][1:0]      bht_bank_wr_data ;
-   logic [1:0] [pt.BHT_ARRAY_DEPTH-1:0] [1:0]                bht_bank_rd_data_out ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clken ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clk   ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0]           bht_bank_sel   ;
-
-   for ( i=0; i<2; i++) begin : BANKS
-     for (genvar k=0 ; k < (pt.BHT_ARRAY_DEPTH)/NUM_BHT_LOOP ; k++) begin : BHT_CLK_GROUP
-     assign bht_bank_clken[i][k]  = (bht_wr_en0[i] & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH)) |
-                                    (bht_wr_en2[i] & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH));
-`ifndef RV_FPGA_OPTIMIZE
-     rvclkhdr bht_bank_grp_cgc ( .en(bht_bank_clken[i][k]), .l1clk(bht_bank_clk[i][k]), .* ); // ifndef RV_FPGA_OPTIMIZE
-`endif
-
-     for (j=0 ; j<NUM_BHT_LOOP ; j++) begin : BHT_FLOPS
-       assign   bht_bank_sel[i][k][j]    = (bht_wr_en0[i] & (bht_wr_addr0[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) |
-                                           (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ;
-
-       assign bht_bank_wr_data[i][k][j]  = (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI:pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ? bht_wr_data2[1:0] :
-                                                                                                                      bht_wr_data0[1:0]   ;
-
-
-          rvdffs_fpga #(2) bht_bank (.*,
-                    .clk        (bht_bank_clk[i][k]),
-                    .en         (bht_bank_sel[i][k][j]),
-                    .rawclk     (clk),
-                    .clken      (bht_bank_sel[i][k][j]),
-                    .din        (bht_bank_wr_data[i][k][j]),
-                    .dout       (bht_bank_rd_data_out[i][(16*k)+j]));
-
-      end // block: BHT_FLOPS
-   end // block: BHT_CLK_GROUP
- end // block: BANKS
-
-    always_comb begin : BHT_rd_mux
-     bht_bank0_rd_data_f[1:0] = '0 ;
-     bht_bank1_rd_data_f[1:0] = '0 ;
-     bht_bank0_rd_data_p1_f[1:0] = '0 ;
-     for (int j=0; j< pt.BHT_ARRAY_DEPTH; j++) begin
-       if (bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_f[1:0] = bht_bank_rd_data_out[0][j];
-         bht_bank1_rd_data_f[1:0] = bht_bank_rd_data_out[1][j];
-       end
-       if (bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_p1_f[1:0] = bht_bank_rd_data_out[0][j];
-       end
-      end
-    end // block: BHT_rd_mux
-
-
-function [1:0] countones;
-      input [1:0] valid;
-
-      begin
-
-countones[1:0] = {2'b0, valid[1]} +
-                 {2'b0, valid[0]};
-      end
-   endfunction
-endmodule // eb1_ifu_bp_ctl
-
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_compress_ctl.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_compress_ctl.sv
deleted file mode 100644
index a55e30f..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_compress_ctl.sv
+++ /dev/null
@@ -1,383 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-// purpose of this file is to convert 16b RISCV compressed instruction into 32b equivalent
-
-module eb1_ifu_compress_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input  logic [15:0] din,        // 16-bit   compressed instruction
-   output logic [31:0] dout        // 32-bit uncompressed instruction
-   );
-
-
-   logic               legal;
-
-   logic [15:0]  i;
-
-   logic [31:0]  o,l1,l2,l3;
-
-
-   assign i[15:0] = din[15:0];
-
-
-   logic [4:0]   rs2d,rdd,rdpd,rs2pd;
-
-   logic rdrd;
-   logic rdrs1;
-   logic rs2rs2;
-   logic rdprd;
-   logic rdprs1;
-   logic rs2prs2;
-   logic rs2prd;
-   logic uimm9_2;
-   logic ulwimm6_2;
-   logic ulwspimm7_2;
-   logic rdeq2;
-   logic rdeq1;
-   logic rs1eq2;
-   logic sbroffset8_1;
-   logic simm9_4;
-   logic simm5_0;
-   logic sjaloffset11_1;
-   logic sluimm17_12;
-   logic uimm5_0;
-   logic uswimm6_2;
-   logic uswspimm7_2;
-
-
-
-   // form the opcodes
-
-   // formats
-   //
-   // c.add rd 11:7 rs2  6:2
-   // c.and rdp 9:7 rs2p 4:2
-   //
-   // add rs2 24:20 rs1 19:15  rd 11:7
-
-   assign rs2d[4:0] = i[6:2];
-
-   assign rdd[4:0] = i[11:7];
-
-   assign rdpd[4:0] = {2'b01, i[9:7]};
-
-   assign rs2pd[4:0] = {2'b01, i[4:2]};
-
-
-
-   // merge in rd, rs1, rs2
-
-
-   // rd
-   assign l1[6:0] = o[6:0];
-
-   assign l1[11:7] = o[11:7] |
-                     ({5{rdrd}} & rdd[4:0]) |
-                     ({5{rdprd}} & rdpd[4:0]) |
-                     ({5{rs2prd}} & rs2pd[4:0]) |
-                     ({5{rdeq1}} & 5'd1) |
-                     ({5{rdeq2}} & 5'd2);
-
-
-   // rs1
-   assign l1[14:12] = o[14:12];
-   assign l1[19:15] = o[19:15] |
-                      ({5{rdrs1}} & rdd[4:0]) |
-                      ({5{rdprs1}} & rdpd[4:0]) |
-                      ({5{rs1eq2}} & 5'd2);
-
-
-   // rs2
-   assign l1[24:20] = o[24:20] |
-                      ({5{rs2rs2}} & rs2d[4:0]) |
-                      ({5{rs2prs2}} & rs2pd[4:0]);
-
-   assign l1[31:25] = o[31:25];
-
-   logic [5:0] simm5d;
-   logic [9:2] uimm9d;
-
-   logic [9:4] simm9d;
-   logic [6:2] ulwimm6d;
-   logic [7:2] ulwspimm7d;
-   logic [5:0] uimm5d;
-   logic [20:1] sjald;
-
-   logic [31:12] sluimmd;
-
-   // merge in immediates + jal offset
-
-   assign simm5d[5:0] = { i[12], i[6:2] };
-
-   assign uimm9d[9:2] = { i[10:7], i[12:11], i[5], i[6] };
-
-   assign simm9d[9:4] = { i[12], i[4:3], i[5], i[2], i[6] };
-
-   assign ulwimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign ulwspimm7d[7:2] = { i[3:2], i[12], i[6:4] };
-
-   assign uimm5d[5:0] = { i[12], i[6:2] };
-
-   assign sjald[11:1] = { i[12], i[8], i[10:9], i[6], i[7], i[2], i[11], i[5:4], i[3] };
-
-   assign sjald[20:12] =  {9{i[12]}};
-
-
-
-   assign sluimmd[31:12] = { {15{i[12]}}, i[6:2] };
-
-
-   assign l2[31:20] = ( l1[31:20] ) |
-                      ( {12{simm5_0}}   &  {{7{simm5d[5]}},simm5d[4:0]} ) |
-                      ( {12{uimm9_2}}   &  {2'b0,uimm9d[9:2],2'b0} ) |
-                      ( {12{simm9_4}}   &   {{3{simm9d[9]}},simm9d[8:4],4'b0} ) |
-                      ( {12{ulwimm6_2}} &   {5'b0,ulwimm6d[6:2],2'b0} ) |
-                      ( {12{ulwspimm7_2}}  & {4'b0,ulwspimm7d[7:2],2'b0} ) |
-                      ( {12{uimm5_0}}      &    {6'b0,uimm5d[5:0]} ) |
-                      ( {12{sjaloffset11_1}} &  {sjald[20],sjald[10:1],sjald[11]} ) |
-                      ( {12{sluimm17_12}}    &  sluimmd[31:20] );
-
-
-
-   assign l2[19:12] = ( l1[19:12] ) |
-                      ( {8{sjaloffset11_1}} & sjald[19:12] ) |
-                      ( {8{sluimm17_12}} & sluimmd[19:12] );
-
-
-   assign l2[11:0] = l1[11:0];
-
-
-   // merge in branch offset and store immediates
-
-   logic [8:1]   sbr8d;
-   logic [6:2]   uswimm6d;
-   logic [7:2]   uswspimm7d;
-
-
-   assign sbr8d[8:1] =   { i[12], i[6], i[5], i[2], i[11], i[10], i[4], i[3] };
-
-   assign uswimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign uswspimm7d[7:2] = { i[8:7], i[12:9] };
-
-   assign l3[31:25] = ( l2[31:25] ) |
-                      ( {7{sbroffset8_1}} & { {4{sbr8d[8]}},sbr8d[7:5] } ) |
-                      ( {7{uswimm6_2}}    & { 5'b0, uswimm6d[6:5] } ) |
-                      ( {7{uswspimm7_2}} & { 4'b0, uswspimm7d[7:5] } );
-
-
-   assign l3[24:12] = l2[24:12];
-
-   assign l3[11:7] = ( l2[11:7] ) |
-                     ( {5{sbroffset8_1}} & { sbr8d[4:1], sbr8d[8] } ) |
-                     ( {5{uswimm6_2}} & { uswimm6d[4:2], 2'b0 } ) |
-                     ( {5{uswspimm7_2}} & { uswspimm7d[4:2], 2'b0 } );
-
-   assign l3[6:0] = l2[6:0];
-
-
-   assign dout[31:0] = l3[31:0] & {32{legal}};
-
-
-// file "cdecode" is human readable file that has all of the compressed instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "cdecode" except legal equation:
-
-// 1) coredecode -in cdecode > cdecode.e
-
-// 2) espresso -Dso -oeqntott cdecode.e | addassign > compress_equations
-
-// to generate the legal (16b compressed instruction is legal)  equation below:
-
-// 1) coredecode -in cdecode -legal > clegal.e
-
-// 2) espresso -Dso -oeqntott clegal.e | addassign > clegal_equation
-
-
-
-
-
-// espresso decodes
-assign rdrd = (!i[14]&i[6]&i[1]) | (!i[15]&i[14]&i[11]&i[0]) | (!i[14]&i[5]&i[1]) | (
-    !i[15]&i[14]&i[10]&i[0]) | (!i[14]&i[4]&i[1]) | (!i[15]&i[14]&i[9]
-    &i[0]) | (!i[14]&i[3]&i[1]) | (!i[15]&i[14]&!i[8]&i[0]) | (!i[14]
-    &i[2]&i[1]) | (!i[15]&i[14]&i[7]&i[0]) | (!i[15]&i[1]) | (!i[15]
-    &!i[13]&i[0]);
-
-assign rdrs1 = (!i[14]&i[12]&i[11]&i[1]) | (!i[14]&i[12]&i[10]&i[1]) | (!i[14]
-    &i[12]&i[9]&i[1]) | (!i[14]&i[12]&i[8]&i[1]) | (!i[14]&i[12]&i[7]
-    &i[1]) | (!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[6]&i[1]) | (!i[14]&i[12]&i[5]&i[1]) | (!i[14]&i[12]&i[4]
-    &i[1]) | (!i[14]&i[12]&i[3]&i[1]) | (!i[14]&i[12]&i[2]&i[1]) | (
-    !i[15]&!i[14]&!i[13]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign rs2rs2 = (i[15]&i[6]&i[1]) | (i[15]&i[5]&i[1]) | (i[15]&i[4]&i[1]) | (
-    i[15]&i[3]&i[1]) | (i[15]&i[2]&i[1]) | (i[15]&i[14]&i[1]);
-
-assign rdprd = (i[15]&!i[14]&!i[13]&i[0]);
-
-assign rdprs1 = (i[15]&!i[13]&i[0]) | (i[15]&i[14]&i[0]) | (i[14]&!i[1]&!i[0]);
-
-assign rs2prs2 = (i[15]&!i[14]&!i[13]&i[11]&i[10]&i[0]) | (i[15]&!i[1]&!i[0]);
-
-assign rs2prd = (!i[15]&!i[1]&!i[0]);
-
-assign uimm9_2 = (!i[14]&!i[1]&!i[0]);
-
-assign ulwimm6_2 = (!i[15]&i[14]&!i[1]&!i[0]);
-
-assign ulwspimm7_2 = (!i[15]&i[14]&i[1]);
-
-assign rdeq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign rdeq1 = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (!i[15]&!i[14]&i[13]);
-
-assign rs1eq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]) | (i[14]
-    &i[1]) | (!i[14]&!i[1]&!i[0]);
-
-assign sbroffset8_1 = (i[15]&i[14]&i[0]);
-
-assign simm9_4 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign simm5_0 = (!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (!i[15]&!i[13]&i[0]);
-
-assign sjaloffset11_1 = (!i[14]&i[13]);
-
-assign sluimm17_12 = (!i[15]&i[14]&i[13]&i[7]) | (!i[15]&i[14]&i[13]&!i[8]) | (
-    !i[15]&i[14]&i[13]&i[9]) | (!i[15]&i[14]&i[13]&i[10]) | (!i[15]&i[14]
-    &i[13]&i[11]);
-
-assign uimm5_0 = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign uswimm6_2 = (i[15]&!i[1]&!i[0]);
-
-assign uswspimm7_2 = (i[15]&i[14]&i[1]);
-
-assign o[31]  = 1'b0;
-
-assign o[30] = (i[15]&!i[14]&!i[13]&i[10]&!i[6]&!i[5]&i[0]) | (i[15]&!i[14]
-    &!i[13]&!i[11]&i[10]&i[0]);
-
-assign o[29]  = 1'b0;
-
-assign o[28]  = 1'b0;
-
-assign o[27]  = 1'b0;
-
-assign o[26]  = 1'b0;
-
-assign o[25]  = 1'b0;
-
-assign o[24]  = 1'b0;
-
-assign o[23]  = 1'b0;
-
-assign o[22]  = 1'b0;
-
-assign o[21]  = 1'b0;
-
-assign o[20] = (!i[14]&i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]
-    &!i[3]&!i[2]&i[1]);
-
-assign o[19]  = 1'b0;
-
-assign o[18]  = 1'b0;
-
-assign o[17]  = 1'b0;
-
-assign o[16]  = 1'b0;
-
-assign o[15]  = 1'b0;
-
-assign o[14] = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (i[15]&!i[14]&!i[13]&!i[10]
-    &i[0]) | (i[15]&!i[14]&!i[13]&i[6]&i[0]) | (i[15]&!i[14]&!i[13]&i[5]
-    &i[0]);
-
-assign o[13] = (i[15]&!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (i[15]&!i[14]&!i[13]
-    &i[11]&i[6]&i[0]) | (i[14]&!i[0]);
-
-assign o[12] = (i[15]&!i[14]&!i[13]&i[6]&i[5]&i[0]) | (i[15]&!i[14]&!i[13]&!i[11]
-    &i[0]) | (i[15]&!i[14]&!i[13]&!i[10]&i[0]) | (!i[15]&!i[14]&i[1]) | (
-    i[15]&i[14]&i[13]);
-
-assign o[11]  = 1'b0;
-
-assign o[10]  = 1'b0;
-
-assign o[9]  = 1'b0;
-
-assign o[8]  = 1'b0;
-
-assign o[7]  = 1'b0;
-
-assign o[6] = (i[15]&!i[14]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&!i[0]) | (!i[14]&i[13]) | (
-    i[15]&i[14]&i[0]);
-
-assign o[5] = (i[15]&!i[0]) | (i[15]&i[11]&i[10]) | (i[13]&!i[8]) | (i[13]&i[7]) | (
-    i[13]&i[9]) | (i[13]&i[10]) | (i[13]&i[11]) | (!i[14]&i[13]) | (
-    i[15]&i[14]);
-
-assign o[4] = (!i[14]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[0]) | (!i[15]&!i[14]
-    &!i[0]) | (!i[14]&i[6]&!i[0]) | (!i[15]&i[14]&i[0]) | (!i[14]&i[5]
-    &!i[0]) | (!i[14]&i[4]&!i[0]) | (!i[14]&!i[13]&i[0]) | (!i[14]&i[3]
-    &!i[0]) | (!i[14]&i[2]&!i[0]);
-
-assign o[3] = (!i[14]&i[13]);
-
-assign o[2] = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (i[15]&!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]
-    &!i[0]) | (!i[15]&i[13]&!i[8]) | (!i[15]&i[13]&i[7]) | (!i[15]&i[13]
-    &i[9]) | (!i[15]&i[13]&i[10]) | (!i[15]&i[13]&i[11]) | (!i[14]&i[13]);
-
-// 32b instruction has lower two bits 2'b11
-
-assign o[1]  = 1'b1;
-
-assign o[0]  = 1'b1;
-
-assign legal = (!i[13]&!i[12]&i[11]&i[1]&!i[0]) | (!i[13]&!i[12]&i[6]&i[1]&!i[0]) | (
-    !i[15]&!i[13]&i[11]&!i[1]) | (!i[13]&!i[12]&i[5]&i[1]&!i[0]) | (
-    !i[13]&!i[12]&i[10]&i[1]&!i[0]) | (!i[15]&!i[13]&i[6]&!i[1]) | (
-    i[15]&!i[12]&!i[1]&i[0]) | (!i[13]&!i[12]&i[9]&i[1]&!i[0]) | (!i[12]
-    &i[6]&!i[1]&i[0]) | (!i[15]&!i[13]&i[5]&!i[1]) | (!i[13]&!i[12]&i[8]
-    &i[1]&!i[0]) | (!i[12]&i[5]&!i[1]&i[0]) | (!i[15]&!i[13]&i[10]&!i[1]) | (
-    !i[13]&!i[12]&i[7]&i[1]&!i[0]) | (i[12]&i[11]&!i[10]&!i[1]&i[0]) | (
-    !i[15]&!i[13]&i[9]&!i[1]) | (!i[13]&!i[12]&i[4]&i[1]&!i[0]) | (i[13]
-    &i[12]&!i[1]&i[0]) | (!i[15]&!i[13]&i[8]&!i[1]) | (!i[13]&!i[12]&i[3]
-    &i[1]&!i[0]) | (i[13]&i[4]&!i[1]&i[0]) | (!i[13]&!i[12]&i[2]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[7]&!i[1]) | (i[13]&i[3]&!i[1]&i[0]) | (
-    i[13]&i[2]&!i[1]&i[0]) | (i[14]&!i[13]&!i[1]) | (!i[14]&!i[12]&!i[1]
-    &i[0]) | (i[15]&!i[13]&i[12]&i[1]&!i[0]) | (!i[15]&!i[13]&!i[12]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[12]&!i[1]) | (i[14]&!i[13]&!i[0]);
-
-
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_ic_mem.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_ic_mem.sv
deleted file mode 100644
index f849bc0..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_ic_mem.sv
+++ /dev/null
@@ -1,1458 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-////////////////////////////////////////////////////
-//   ICACHE DATA & TAG MODULE WRAPPER              //
-/////////////////////////////////////////////////////
-module eb1_ifu_ic_mem
-import eb1_pkg::*;
- #(
-`include "eb1_param.vh"
- )
-  (
-      input logic                                   clk,                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-      input logic                                   active_clk,         // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-      input logic                                   rst_l,              // reset, active low
-      input logic                                   clk_override,       // Override non-functional clock gating
-      input logic                                   dec_tlu_core_ecc_disable,  // Disable ECC checking
-
-      input logic [31:1]                            ic_rw_addr,
-      input logic [pt.ICACHE_NUM_WAYS-1:0]          ic_wr_en  ,         // Which way to write
-      input logic                                   ic_rd_en  ,         // Read enable
-      input logic [pt.ICACHE_INDEX_HI:3]            ic_debug_addr,      // Read/Write addresss to the Icache.
-      input logic                                   ic_debug_rd_en,     // Icache debug rd
-      input logic                                   ic_debug_wr_en,     // Icache debug wr
-      input logic                                   ic_debug_tag_array, // Debug tag array
-      input logic [pt.ICACHE_NUM_WAYS-1:0]          ic_debug_way,       // Debug way. Rd or Wr.
-      input logic [63:0]                            ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-      input logic                                   ic_sel_premux_data, // Select the pre_muxed data
-
-      input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]  ic_wr_data,         // Data to fill to the Icache. With ECC
-      output logic [63:0]                           ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      output logic [70:0]                           ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      output logic [25:0]                           ictag_debug_rd_data,// Debug icache tag.
-      input logic  [70:0]                           ic_debug_wr_data,   // Debug wr cache.
-
-      output logic [pt.ICACHE_BANKS_WAY-1:0]        ic_eccerr,          // ecc error per bank
-      output logic [pt.ICACHE_BANKS_WAY-1:0]        ic_parerr,          // ecc error per bank
-      input logic [pt.ICACHE_NUM_WAYS-1:0]          ic_tag_valid,       // Valid from the I$ tag valid outside (in flops).
-      input eb1_ic_data_ext_in_pkt_t [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,   // this is being driven by the top level for soc testing/etc
-      input eb1_ic_tag_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0]                          ic_tag_ext_in_pkt,    // this is being driven by the top level for soc testing/etc
-
-      output logic [pt.ICACHE_NUM_WAYS-1:0]         ic_rd_hit,          // ic_rd_hit[3:0]
-      output logic                                  ic_tag_perr,        // Tag Parity error
-      input  logic                                  scan_mode           // Flop scan mode control
-      ) ;
-
-
-
-
-   eb1_IC_TAG #(.pt(pt)) ic_tag_inst
-          (
-           .*,
-           .ic_wr_en     (ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]),
-           .ic_debug_addr(ic_debug_addr[pt.ICACHE_INDEX_HI:3]),
-           .ic_rw_addr   (ic_rw_addr[31:3])
-           ) ;
-
-   eb1_IC_DATA #(.pt(pt)) ic_data_inst
-          (
-           .*,
-           .ic_wr_en     (ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]),
-           .ic_debug_addr(ic_debug_addr[pt.ICACHE_INDEX_HI:3]),
-           .ic_rw_addr   (ic_rw_addr[31:1])
-           ) ;
-
- endmodule
-
-
-/////////////////////////////////////////////////
-////// ICACHE DATA MODULE    ////////////////////
-/////////////////////////////////////////////////
-module eb1_IC_DATA
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-     (
-      input logic clk,
-      input logic active_clk,
-      input logic rst_l,
-      input logic clk_override,
-
-      input logic [31:1]                  ic_rw_addr,
-      input logic [pt.ICACHE_NUM_WAYS-1:0]ic_wr_en,
-      input logic                          ic_rd_en,           // Read enable
-
-      input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]    ic_wr_data,         // Data to fill to the Icache. With ECC
-      output logic [63:0]                             ic_rd_data ,                                 // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      input  logic [70:0]                             ic_debug_wr_data,   // Debug wr cache.
-      output logic [70:0]                             ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-      output logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-      output logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    // ecc error per bank
-      input logic [pt.ICACHE_INDEX_HI:3]     ic_debug_addr,     // Read/Write addresss to the Icache.
-      input logic                            ic_debug_rd_en,      // Icache debug rd
-      input logic                            ic_debug_wr_en,      // Icache debug wr
-      input logic                            ic_debug_tag_array,  // Debug tag array
-      input logic [pt.ICACHE_NUM_WAYS-1:0]   ic_debug_way,        // Debug way. Rd or Wr.
-      input logic [63:0]                     ic_premux_data,      // Premux data to be muxed with each way of the Icache.
-      input logic                            ic_sel_premux_data,  // Select the pre_muxed data
-
-      input logic [pt.ICACHE_NUM_WAYS-1:0]ic_rd_hit,
-      input eb1_ic_data_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,   // this is being driven by the top level for soc testing/etc
-      input  logic                         scan_mode
-
-      ) ;
-
-   logic [pt.ICACHE_TAG_INDEX_LO-1:1]                                             ic_rw_addr_ff;
-   logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_WAYS-1:0]                        ic_b_sb_wren;    //bank x ways
-   logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_WAYS-1:0]                        ic_b_sb_rden;    //bank x ways
-
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_rden;       //bank
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_rden_ff;    //bank
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_debug_sel_sb;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][70:0]                  wb_dout ;       //  ways x bank
-   logic [pt.ICACHE_BANKS_WAY-1:0][70:0]                                          ic_sb_wr_data, ic_bank_wr_data, wb_dout_ecc_bank;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [141:0]                                         wb_dout_way_pre;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [63:0]                                          wb_dout_way, wb_dout_way_with_premux;
-   logic [141:0]                                                                  wb_dout_ecc;
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                bank_check_en;
-
-   logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_WAYS-1:0]                        ic_bank_way_clken;
-   logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_bank_way_clken_final;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                        ic_bank_way_clken_final_up;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_debug_rd_way_en;    // debug wr_way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_debug_rd_way_en_ff; // debug wr_way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_debug_wr_way_en;    // debug wr_way
-   logic [pt.ICACHE_INDEX_HI:1]                                                   ic_rw_addr_q;
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]       [pt.ICACHE_INDEX_HI : pt.ICACHE_DATA_INDEX_LO] ic_rw_addr_bank_q;
-
-   logic [pt.ICACHE_TAG_LO-1 : pt.ICACHE_DATA_INDEX_LO]                           ic_rw_addr_q_inc;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                 ic_rd_hit_q;
-
-
-
-      logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_sram_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_read_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_write_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0] [31 : pt.ICACHE_DATA_INDEX_LO]  wb_index_hold;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en;     //bank
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en_ff;  //bank
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 index_valid;  //bank
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_clear_en;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match;
-      logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match_index_only;
-
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_sram_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_read_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                                ic_b_write_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0] [31 : pt.ICACHE_DATA_INDEX_LO]  wb_index_hold_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en_up;     //bank
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 write_bypass_en_ff_up;  //bank
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 index_valid_up;  //bank
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_clear_en_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match_up;
-      logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                                 ic_b_addr_match_index_only_up;
-
-
-   logic [pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr;
-   logic [pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr_index_only;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr_up;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                 [31 : pt.ICACHE_DATA_INDEX_LO] ic_b_rw_addr_index_only_up;
-
-
-
-   logic                                                                          ic_rd_en_with_debug;
-   logic                                                                          ic_rw_addr_wrap, ic_cacheline_wrap_ff;
-   logic                                                                          ic_debug_rd_en_ff;
-
-
-//-----------------------------------------------------------
-// ----------- Logic section starts here --------------------
-//-----------------------------------------------------------
-   assign  ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_rd_en & ~ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-   assign  ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ~ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-   logic end_of_cache_line;
-   assign end_of_cache_line = (pt.ICACHE_LN_SZ==7'h40) ? (&ic_rw_addr_q[5:4]) : ic_rw_addr_q[4];
-   always_comb begin : clkens
-      ic_bank_way_clken  = '0;
-
-      for ( int i=0; i<pt.ICACHE_BANKS_WAY; i++) begin: wr_ens
-       ic_b_sb_wren[i]        =  ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]  |
-                                       (ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{ic_debug_addr[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == i}}) ;
-       ic_debug_sel_sb[i]     = (ic_debug_addr[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == i );
-       ic_sb_wr_data[i]       = (ic_debug_sel_sb[i] & ic_debug_wr_en) ? ic_debug_wr_data : ic_bank_wr_data[i] ;
-       ic_b_rden[i]           =  ic_rd_en_with_debug & ( ( ~ic_rw_addr_q[pt.ICACHE_BANK_HI] & (i==0)) |
-                                                        (( ic_rw_addr_q[pt.ICACHE_BANK_HI] & ic_rw_addr_q[2:1] == 2'b11) & (i==0) & ~end_of_cache_line) |
-                                                         (  ic_rw_addr_q[pt.ICACHE_BANK_HI] & (i==1)) |
-                                                         ((~ic_rw_addr_q[pt.ICACHE_BANK_HI] & ic_rw_addr_q[2:1] == 2'b11) & (i==1)) ) ;
-
-
-
-       ic_b_sb_rden[i]        =  {pt.ICACHE_NUM_WAYS{ic_b_rden[i]}}   ;
-
-       for ( int j=0; j<pt.ICACHE_NUM_WAYS; j++) begin: way_clkens
-         ic_bank_way_clken[i][j] |= ic_b_sb_rden[i][j] | clk_override | ic_b_sb_wren[i][j];
-       end
-     end // block: wr_ens
-   end // block: clkens
-
-// bank read enables
-  assign ic_rd_en_with_debug                          = (ic_rd_en   | ic_debug_rd_en ) & ~(|ic_wr_en);
-  assign ic_rw_addr_q[pt.ICACHE_INDEX_HI:1] = (ic_debug_rd_en | ic_debug_wr_en) ?
-                                              {ic_debug_addr[pt.ICACHE_INDEX_HI:3],2'b0} :
-                                              ic_rw_addr[pt.ICACHE_INDEX_HI:1] ;
-
-   assign ic_rw_addr_q_inc[pt.ICACHE_TAG_LO-1:pt.ICACHE_DATA_INDEX_LO] = ic_rw_addr_q[pt.ICACHE_TAG_LO-1 : pt.ICACHE_DATA_INDEX_LO] + 1 ;
-   assign ic_rw_addr_wrap                                        = ic_rw_addr_q[pt.ICACHE_BANK_HI] & (ic_rw_addr_q[2:1] == 2'b11) & ic_rd_en_with_debug & ~(|ic_wr_en[pt.ICACHE_NUM_WAYS-1:0]);
-   assign ic_cacheline_wrap_ff                                   = ic_rw_addr_ff[pt.ICACHE_TAG_INDEX_LO-1:pt.ICACHE_BANK_LO] == {(pt.ICACHE_TAG_INDEX_LO - pt.ICACHE_BANK_LO){1'b1}};
-
-
-   assign ic_rw_addr_bank_q[0] = ~ic_rw_addr_wrap ? ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO] : {ic_rw_addr_q[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] , ic_rw_addr_q_inc[pt.ICACHE_TAG_INDEX_LO-1: pt.ICACHE_DATA_INDEX_LO] } ;
-   assign ic_rw_addr_bank_q[1] = ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO];
-
-
-   rvdffie #(.WIDTH(int'(pt.ICACHE_TAG_INDEX_LO+pt.ICACHE_BANKS_WAY+pt.ICACHE_NUM_WAYS)),.OVERRIDE(1)) miscff
-            (.*,
-             .din({ ic_b_rden[pt.ICACHE_BANKS_WAY-1:0],   ic_rw_addr_q[pt.ICACHE_TAG_INDEX_LO-1:1], ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0],   ic_debug_rd_en}),
-             .dout({ic_b_rden_ff[pt.ICACHE_BANKS_WAY-1:0],ic_rw_addr_ff[pt.ICACHE_TAG_INDEX_LO-1:1],ic_debug_rd_way_en_ff[pt.ICACHE_NUM_WAYS-1:0],ic_debug_rd_en_ff})
-             );
-
- if (pt.ICACHE_WAYPACK == 0 ) begin : PACKED_0
-
-
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr_in_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]       sel_bypass_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]       sel_bypass_ff_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0][(71*pt.ICACHE_NUM_WAYS)-1:0]    sel_bypass_data_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                 any_bypass_up;
-    logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]                                 any_addr_match_up;
-
-`define eb1_IC_DATA_SRAM(depth,width)                                                                               \
-           ram_``depth``x``width ic_bank_sb_way_data (                                                               \
-                                     .ME(ic_bank_way_clken_final_up[i][k]),                                          \
-                                     .WE (ic_b_sb_wren[k][i]),                                                       \
-                                     .D  (ic_sb_wr_data[k][``width-1:0]),                                            \
-                                     .ADR(ic_rw_addr_bank_q[k][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO]),         \
-                                     .Q  (wb_dout_pre_up[i][k]),                                                     \
-                                     .CLK (clk),                                                                     \
-                                     .ROP ( ),                                                                       \
-                                     .TEST1(ic_data_ext_in_pkt[i][k].TEST1),                                         \
-                                     .RME(ic_data_ext_in_pkt[i][k].RME),                                             \
-                                     .RM(ic_data_ext_in_pkt[i][k].RM),                                               \
-                                                                                                                     \
-                                     .LS(ic_data_ext_in_pkt[i][k].LS),                                               \
-                                     .DS(ic_data_ext_in_pkt[i][k].DS),                                               \
-                                     .SD(ic_data_ext_in_pkt[i][k].SD),                                               \
-                                                                                                                     \
-                                     .TEST_RNM(ic_data_ext_in_pkt[i][k].TEST_RNM),                                   \
-                                     .BC1(ic_data_ext_in_pkt[i][k].BC1),                                             \
-                                     .BC2(ic_data_ext_in_pkt[i][k].BC2)                                              \
-                                    );  \
-if (pt.ICACHE_BYPASS_ENABLE == 1) begin \
-                 assign wrptr_in_up[i][k] = (wrptr_up[i][k] == (pt.ICACHE_NUM_BYPASS-1)) ? '0 : (wrptr_up[i][k] + 1'd1);                                    \
-                 rvdffs  #(pt.ICACHE_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk),  .en(|write_bypass_en_up[i][k]), .din (wrptr_in_up[i][k]), .dout(wrptr_up[i][k])) ;     \
-                 assign ic_b_sram_en_up[i][k]              = ic_bank_way_clken[k][i];                             \
-                 assign ic_b_read_en_up[i][k]              =  ic_b_sram_en_up[i][k] &   ic_b_sb_rden[k][i];       \
-                 assign ic_b_write_en_up[i][k]             =  ic_b_sram_en_up[i][k] &   ic_b_sb_wren[k][i];       \
-                 assign ic_bank_way_clken_final_up[i][k]   =  ic_b_sram_en_up[i][k] &    ~(|sel_bypass_up[i][k]); \
-                 assign ic_b_rw_addr_up[i][k] = {ic_rw_addr[31:pt.ICACHE_INDEX_HI+1],ic_rw_addr_bank_q[k]};       \
-                 assign ic_b_rw_addr_index_only_up[i][k] = ic_rw_addr_bank_q[k];                                  \
-                 always_comb begin                                                                                \
-                    any_addr_match_up[i][k] = '0;                                                                 \
-                    for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                              \
-                       any_addr_match_up[i][k] |= ic_b_addr_match_up[i][k][l];                                    \
-                    end                                                                                           \
-                 end                                                                                              \
-                // it is an error to ever have 2 entries with the same index and both valid                       \
-                for (genvar l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin: BYPASS                                       \
-                   // full match up to bit 31                                                                     \
-                   assign ic_b_addr_match_up[i][k][l] = (wb_index_hold_up[i][k][l] ==  ic_b_rw_addr_up[i][k]) & index_valid_up[i][k][l];            \
-                   assign ic_b_addr_match_index_only_up[i][k][l] = (wb_index_hold_up[i][k][l][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO] ==  ic_b_rw_addr_index_only_up[i][k]) & index_valid_up[i][k][l];            \
-                                                                                                                                                    \
-                   assign ic_b_clear_en_up[i][k][l]   = ic_b_write_en_up[i][k] &   ic_b_addr_match_index_only_up[i][k][l];                                     \
-                                                                                                                                                    \
-                   assign sel_bypass_up[i][k][l]      = ic_b_read_en_up[i][k]  &   ic_b_addr_match_up[i][k][l] ;                                    \
-                                                                                                                                                    \
-                   assign write_bypass_en_up[i][k][l] = ic_b_read_en_up[i][k]  &  ~any_addr_match_up[i][k] & (wrptr_up[i][k] == l);                 \
-                                                                                                                                                    \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                                 .din(write_bypass_en_up[i][k][l]), .dout(write_bypass_en_ff_up[i][k][l])) ; \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en_up[i][k][l] | ic_b_clear_en_up[i][k][l]),   .din(~ic_b_clear_en_up[i][k][l]),  .dout(index_valid_up[i][k][l])) ;       \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                                 .din(sel_bypass_up[i][k][l]),      .dout(sel_bypass_ff_up[i][k][l])) ;     \
-                   rvdffe #((31-pt.ICACHE_DATA_INDEX_LO+1)) ic_addr_index    (.*, .en(write_bypass_en_up[i][k][l]),    .din (ic_b_rw_addr_up[i][k]), .dout(wb_index_hold_up[i][k][l]));         \
-                   rvdffe #(``width)                             rd_data_hold_ff  (.*, .en(write_bypass_en_ff_up[i][k][l]), .din (wb_dout_pre_up[i][k]),  .dout(wb_dout_hold_up[i][k][l]));     \
-                end                                                                                                                       \
-                always_comb begin                                                                                                         \
-                 any_bypass_up[i][k] = '0;                                                                                                \
-                 sel_bypass_data_up[i][k] = '0;                                                                                           \
-                 for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                                                         \
-                    any_bypass_up[i][k]      |=  sel_bypass_ff_up[i][k][l];                                                               \
-                    sel_bypass_data_up[i][k] |= (sel_bypass_ff_up[i][k][l]) ? wb_dout_hold_up[i][k][l] : '0;                              \
-                 end                                                                                                                      \
-                 wb_dout[i][k]   =   any_bypass_up[i][k] ?  sel_bypass_data_up[i][k] :  wb_dout_pre_up[i][k] ;                            \
-                 end                                                                                                                      \
-             end                                                                                                                          \
-             else begin                                                                                                                   \
-                 assign wb_dout[i][k]                      =   wb_dout_pre_up[i][k] ;                                                     \
-                 assign ic_bank_way_clken_final_up[i][k]   =  ic_bank_way_clken[i][k];                                                    \
-             end
-
-
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-      for (genvar k=0; k<pt.ICACHE_BANKS_WAY; k++) begin: BANKS_WAY   // 16B subbank
-      if (pt.ICACHE_ECC) begin : ECC1
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [71-1:0]        wb_dout_pre_up;           // data and its bit enables
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [71-1:0]  wb_dout_hold_up;
-
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           `eb1_IC_DATA_SRAM(8192,71)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           `eb1_IC_DATA_SRAM(4096,71)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           `eb1_IC_DATA_SRAM(2048,71)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           `eb1_IC_DATA_SRAM(1024,71)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           `eb1_IC_DATA_SRAM(512,71)
-        end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           `eb1_IC_DATA_SRAM(256,71)
-         end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           `eb1_IC_DATA_SRAM(128,71)
-         end
-         else  begin : size_64
-           `eb1_IC_DATA_SRAM(64,71)
-         end
-      end // if (pt.ICACHE_ECC)
-
-     else  begin  : ECC0
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [68-1:0]        wb_dout_pre_up;           // data and its bit enables
-        logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [68-1:0]  wb_dout_hold_up;
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           `eb1_IC_DATA_SRAM(8192,68)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           `eb1_IC_DATA_SRAM(4096,68)
-        end
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           `eb1_IC_DATA_SRAM(2048,68)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           `eb1_IC_DATA_SRAM(1024,68)
-        end
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           `eb1_IC_DATA_SRAM(512,68)
-        end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           `eb1_IC_DATA_SRAM(256,68)
-         end
-         else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           `eb1_IC_DATA_SRAM(128,68)
-         end
-         else  begin : size_64
-           `eb1_IC_DATA_SRAM(64,68)
-         end
-      end // else: !if(pt.ICACHE_ECC)
-      end // block: BANKS_WAY
-   end // block: WAYS
-
- end // block: PACKED_0
-
- // WAY PACKED
- else begin : PACKED_1
-
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr;
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS_WIDTH-1:0] wrptr_in;
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                       sel_bypass;
-    logic [pt.ICACHE_BANKS_WAY-1:0][pt.ICACHE_NUM_BYPASS-1:0]                       sel_bypass_ff;
-
-
-    logic [pt.ICACHE_BANKS_WAY-1:0][(71*pt.ICACHE_NUM_WAYS)-1:0]  sel_bypass_data;
-    logic [pt.ICACHE_BANKS_WAY-1:0]                               any_bypass;
-    logic [pt.ICACHE_BANKS_WAY-1:0]                               any_addr_match;
-
-
-// SRAM macros
-
-`define eb1_PACKED_IC_DATA_SRAM(depth,width,waywidth)                                                                                                 \
-            ram_be_``depth``x``width  ic_bank_sb_way_data (                                                                                           \
-                            .CLK   (clk),                                                                                                             \
-                            .WE    (|ic_b_sb_wren[k]),                                                    // OR of all the ways in the bank           \
-                            .WEM   (ic_b_sb_bit_en_vec[k]),                                               // 284 bits of bit enables                  \
-                            .D     ({pt.ICACHE_NUM_WAYS{ic_sb_wr_data[k][``waywidth-1:0]}}),                                                          \
-                            .ADR   (ic_rw_addr_bank_q[k][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO]),                                                \
-                            .Q     (wb_packeddout_pre[k]),                                                                                            \
-                            .ME    (|ic_bank_way_clken_final[k]),                                                                                     \
-                            .ROP   ( ),                                                                                                               \
-                            .TEST1  (ic_data_ext_in_pkt[0][k].TEST1),                                                                                 \
-                            .RME   (ic_data_ext_in_pkt[0][k].RME),                                                                                    \
-                            .RM    (ic_data_ext_in_pkt[0][k].RM),                                                                                     \
-                                                                                                                                                      \
-                            .LS    (ic_data_ext_in_pkt[0][k].LS),                                                                                     \
-                            .DS    (ic_data_ext_in_pkt[0][k].DS),                                                                                     \
-                            .SD    (ic_data_ext_in_pkt[0][k].SD),                                                                                     \
-                                                                                                                                                      \
-                            .TEST_RNM (ic_data_ext_in_pkt[0][k].TEST_RNM),                                                                            \
-                            .BC1      (ic_data_ext_in_pkt[0][k].BC1),                                                                                 \
-                            .BC2      (ic_data_ext_in_pkt[0][k].BC2)                                                                                  \
-                           );                                                                                                                         \
-                                                                                                                                                      \
-              if (pt.ICACHE_BYPASS_ENABLE == 1) begin                                                                                                                                                 \
-                                                                                                                                                                                                      \
-                 assign wrptr_in[k] = (wrptr[k] == (pt.ICACHE_NUM_BYPASS-1)) ? '0 : (wrptr[k] + 1'd1);                                                                                                \
-                                                                                                                                                                                                      \
-                 rvdffs  #(pt.ICACHE_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk), .en(|write_bypass_en[k]), .din (wrptr_in[k]), .dout(wrptr[k])) ;                                                                       \
-                                                                                                                                                                                                      \
-                 assign ic_b_sram_en[k]              = |ic_bank_way_clken[k];                                                                                                                         \
-                                                                                                                                                                                                      \
-                                                                                                                                                                                                      \
-                 assign ic_b_read_en[k]              =  ic_b_sram_en[k]  &  (|ic_b_sb_rden[k]) ;                                                                                                              \
-                 assign ic_b_write_en[k]             =  ic_b_sram_en[k] &   (|ic_b_sb_wren[k]);                                                                                                       \
-                 assign ic_bank_way_clken_final[k]   =  ic_b_sram_en[k] &    ~(|sel_bypass[k]);                                                                                                       \
-                                                                                                                                                                                                      \
-                 assign ic_b_rw_addr[k] = {ic_rw_addr[31:pt.ICACHE_INDEX_HI+1],ic_rw_addr_bank_q[k]};                                                                                                 \
-                 assign ic_b_rw_addr_index_only[k] = ic_rw_addr_bank_q[k];                                                                                                    \
-                                                                                                                                                                                                      \
-                 always_comb begin                                                                                                                                                                    \
-                    any_addr_match[k] = '0;                                                                                                                                                           \
-                                                                                                                                                                                                      \
-                    for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                                                                                                                  \
-                       any_addr_match[k] |= ic_b_addr_match[k][l];                                                                                                                                    \
-                    end                                                                                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                // it is an error to ever have 2 entries with the same index and both valid                                                                                                           \
-                for (genvar l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin: BYPASS                                                                                                                           \
-                                                                                                                                                                                                      \
-                   // full match up to bit 31                                                                                                                                                         \
-                   assign ic_b_addr_match[k][l] = (wb_index_hold[k][l] ==  ic_b_rw_addr[k]) & index_valid[k][l];                                                                                      \
-                   assign ic_b_addr_match_index_only[k][l] = (wb_index_hold[k][l][pt.ICACHE_INDEX_HI:pt.ICACHE_DATA_INDEX_LO] ==  ic_b_rw_addr_index_only[k]) & index_valid[k][l];                    \
-                                                                                                                                                                                                      \
-                   assign ic_b_clear_en[k][l]   = ic_b_write_en[k] &   ic_b_addr_match_index_only[k][l];                                                                                                              \
-                                                                                                                                                                                                      \
-                   assign sel_bypass[k][l]      = ic_b_read_en[k]  &   ic_b_addr_match[k][l] ;                                                                                                        \
-                                                                                                                                                                                                      \
-                   assign write_bypass_en[k][l] = ic_b_read_en[k]  &  ~any_addr_match[k] & (wrptr[k] == l);                                                                                           \
-                                                                                                                                                                                                      \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                     .din(write_bypass_en[k][l]), .dout(write_bypass_en_ff[k][l])) ;                            \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en[k][l] | ic_b_clear_en[k][l]),   .din(~ic_b_clear_en[k][l]),  .dout(index_valid[k][l])) ;                                   \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                     .din(sel_bypass[k][l]),      .dout(sel_bypass_ff[k][l])) ;                                 \
-                                                                                                                                                                                                      \
-                   rvdffe #((31-pt.ICACHE_DATA_INDEX_LO+1)) ic_addr_index    (.*, .en(write_bypass_en[k][l]),    .din (ic_b_rw_addr[k]),      .dout(wb_index_hold[k][l]));                            \
-                   rvdffe #((``waywidth*pt.ICACHE_NUM_WAYS))        rd_data_hold_ff  (.*, .en(write_bypass_en_ff[k][l]), .din (wb_packeddout_pre[k]), .dout(wb_packeddout_hold[k][l]));                       \
-                                                                                                                                                                                                      \
-                end // block: BYPASS                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                always_comb begin                                                                                                                                                                     \
-                 any_bypass[k] = '0;                                                                                                                                                                  \
-                 sel_bypass_data[k] = '0;                                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 for (int l=0; l<pt.ICACHE_NUM_BYPASS; l++) begin                                                                                                                                     \
-                    any_bypass[k]      |=  sel_bypass_ff[k][l];                                                                                                                                       \
-                      sel_bypass_data[k] |= (sel_bypass_ff[k][l]) ? wb_packeddout_hold[k][l] : '0;                                                                                                    \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                   wb_packeddout[k]   =   any_bypass[k] ?  sel_bypass_data[k] :  wb_packeddout_pre[k] ;                                                                                               \
-                end // always_comb begin                                                                                                                                                              \
-                                                                                                                                                                                                      \
-             end // if (pt.ICACHE_BYPASS_ENABLE == 1)                                                                                                                                                 \
-             else begin                                                                                                                                                                               \
-                 assign wb_packeddout[k]   =   wb_packeddout_pre[k] ;                                                                                                                                 \
-                 assign ic_bank_way_clken_final[k]   =  |ic_bank_way_clken[k] ;                                                                                                                       \
-             end
-
- // generate IC DATA PACKED SRAMS for 2/4 ways
-  for (genvar k=0; k<pt.ICACHE_BANKS_WAY; k++) begin: BANKS_WAY   // 16B subbank
-     if (pt.ICACHE_ECC) begin : ECC1
-        logic [pt.ICACHE_BANKS_WAY-1:0] [(71*pt.ICACHE_NUM_WAYS)-1:0]        wb_packeddout, ic_b_sb_bit_en_vec, wb_packeddout_pre;           // data and its bit enables
-
-        logic [pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [(71*pt.ICACHE_NUM_WAYS)-1:0]  wb_packeddout_hold;
-
-        for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-           assign ic_b_sb_bit_en_vec[k][(71*i)+70:71*i] = {71{ic_b_sb_wren[k][i]}};
-        end
-
-        // SRAMS with ECC (single/double detect; no correct)
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,284,71)    // 64b data + 7b ecc
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,142,71)
-           end // block: WAYS
-        end // block: size_8192
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,142,71)
-           end // block: WAYS
-        end // block: size_4096
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,142,71)
-           end // block: WAYS
-        end // block: size_2048
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,142,71)
-           end // block: WAYS
-        end // block: size_1024
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,142,71)
-           end // block: WAYS
-        end // block: size_512
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,142,71)
-           end // block: WAYS
-        end // block: size_256
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,142,71)
-           end // block: WAYS
-        end // block: size_128
-
-        else  begin : size_64
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,284,71)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,142,71)
-           end // block: WAYS
-        end // block: size_64
-
-
-       for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-          assign wb_dout[i][k][70:0]  = wb_packeddout[k][(71*i)+70:71*i];
-       end : WAYS
-
-       end // if (pt.ICACHE_ECC)
-
-
-     else  begin  : ECC0
-        logic [pt.ICACHE_BANKS_WAY-1:0] [(68*pt.ICACHE_NUM_WAYS)-1:0]        wb_packeddout, ic_b_sb_bit_en_vec, wb_packeddout_pre;           // data and its bit enables
-
-        logic [pt.ICACHE_BANKS_WAY-1:0] [pt.ICACHE_NUM_BYPASS-1:0] [(68*pt.ICACHE_NUM_WAYS)-1:0]  wb_packeddout_hold;
-
-        for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-           assign ic_b_sb_bit_en_vec[k][(68*i)+67:68*i] = {68{ic_b_sb_wren[k][i]}};
-        end
-
-        // SRAMs with parity
-        if ($clog2(pt.ICACHE_DATA_DEPTH) == 13 )   begin : size_8192
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,272,68)    // 64b data + 4b parity
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(8192,136,68)
-           end // block: WAYS
-        end // block: size_8192
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 12 )   begin : size_4096
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(4096,136,68)
-           end // block: WAYS
-        end // block: size_4096
-
-        else if ($clog2(pt.ICACHE_DATA_DEPTH) == 11 ) begin : size_2048
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(2048,136,68)
-           end // block: WAYS
-        end // block: size_2048
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 10 ) begin : size_1024
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(1024,136,68)
-           end // block: WAYS
-        end // block: size_1024
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 9 ) begin : size_512
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(512,136,68)
-           end // block: WAYS
-        end // block: size_512
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 8 ) begin : size_256
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(256,136,68)
-           end // block: WAYS
-        end // block: size_256
-
-        else if ( $clog2(pt.ICACHE_DATA_DEPTH) == 7 ) begin : size_128
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(128,136,68)
-           end // block: WAYS
-        end // block: size_128
-
-        else  begin : size_64
-           if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,272,68)
-           end // block: WAYS
-           else   begin : WAYS
-              `eb1_PACKED_IC_DATA_SRAM(64,136,68)
-           end // block: WAYS
-        end // block: size_64
-
-       for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-          assign wb_dout[i][k][67:0]  = wb_packeddout[k][(68*i)+67:68*i];
-       end
-     end // block: ECC0
-     end // block: BANKS_WAY
- end // block: PACKED_1
-
-
-   assign ic_rd_hit_q[pt.ICACHE_NUM_WAYS-1:0] = ic_debug_rd_en_ff ? ic_debug_rd_way_en_ff[pt.ICACHE_NUM_WAYS-1:0] : ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] ;
-
-
- if ( pt.ICACHE_ECC ) begin : ECC1_MUX
-
-   assign ic_bank_wr_data[1] = ic_wr_data[1][70:0];
-   assign ic_bank_wr_data[0] = ic_wr_data[0][70:0];
-
-    always_comb begin : rd_mux
-      wb_dout_way_pre[pt.ICACHE_NUM_WAYS-1:0] = '0;
-
-      for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways
-        for ( int j=0; j<pt.ICACHE_BANKS_WAY; j++) begin : banks
-         wb_dout_way_pre[i][70:0]      |=  ({71{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j))}}   &  wb_dout[i][j]);
-         wb_dout_way_pre[i][141 : 71]  |=  ({71{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j-1))}} &  wb_dout[i][j]);
-        end
-      end
-    end
-
-    for ( genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux1
-      assign wb_dout_way[i][63:0] = (ic_rw_addr_ff[2:1] == 2'b00) ? wb_dout_way_pre[i][63:0]   :
-                                    (ic_rw_addr_ff[2:1] == 2'b01) ?{wb_dout_way_pre[i][86:71], wb_dout_way_pre[i][63:16]} :
-                                    (ic_rw_addr_ff[2:1] == 2'b10) ?{wb_dout_way_pre[i][102:71],wb_dout_way_pre[i][63:32]} :
-                                                                   {wb_dout_way_pre[i][119:71],wb_dout_way_pre[i][63:48]};
-
-      assign wb_dout_way_with_premux[i][63:0]  =  ic_sel_premux_data ? ic_premux_data[63:0] : wb_dout_way[i][63:0] ;
-   end
-
-   always_comb begin : rd_out
-      ic_debug_rd_data[70:0]     = '0;
-      ic_rd_data[63:0]           = '0;
-      wb_dout_ecc[141:0]         = '0;
-      for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux2
-         ic_rd_data[63:0]       |= ({64{ic_rd_hit_q[i] | ic_sel_premux_data}}) &  wb_dout_way_with_premux[i][63:0];
-         ic_debug_rd_data[70:0] |= ({71{ic_rd_hit_q[i]}}) & wb_dout_way_pre[i][70:0];
-         wb_dout_ecc[141:0]     |= {142{ic_rd_hit_q[i]}}  & wb_dout_way_pre[i];
-      end
-   end
-
-
- for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_ecc_error
-    assign bank_check_en[i]    = |ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] & ((i==0) | (~ic_cacheline_wrap_ff & (ic_b_rden_ff[pt.ICACHE_BANKS_WAY-1:0] == {pt.ICACHE_BANKS_WAY{1'b1}})));  // always check the lower address bank, and drop the upper address bank on a CL wrap
-    assign wb_dout_ecc_bank[i] = wb_dout_ecc[(71*i)+70:(71*i)];
-
-   rvecc_decode_64  ecc_decode_64 (
-                           .en               (bank_check_en[i]),
-                           .din              (wb_dout_ecc_bank[i][63 : 0]),                // [134:71],  [63:0]
-                           .ecc_in           (wb_dout_ecc_bank[i][70 : 64]),               // [141:135] [70:64]
-                           .ecc_error        (ic_eccerr[i]));
-
-   // or the sb and db error detects into 1 signal called aligndataperr[i] where i corresponds to 2B position
-  assign  ic_parerr[i]  = '0 ;
-  end // block: ic_ecc_error
-
-end // if ( pt.ICACHE_ECC )
-
-else  begin : ECC0_MUX
-   assign ic_bank_wr_data[1] = ic_wr_data[1][70:0];
-   assign ic_bank_wr_data[0] = ic_wr_data[0][70:0];
-
-   always_comb begin : rd_mux
-      wb_dout_way_pre[pt.ICACHE_NUM_WAYS-1:0] = '0;
-
-   for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways
-     for ( int j=0; j<pt.ICACHE_BANKS_WAY; j++) begin : banks
-         wb_dout_way_pre[i][67:0]         |=  ({68{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j))}}   &  wb_dout[i][j][67:0]);
-         wb_dout_way_pre[i][135 : 68]     |=  ({68{(ic_rw_addr_ff[pt.ICACHE_BANK_HI : pt.ICACHE_BANK_LO] == (pt.ICACHE_BANK_BITS)'(j-1))}} &  wb_dout[i][j][67:0]);
-      end
-     end
-   end
-   // When we straddle the banks like this - the ECC we capture is not correct ??
-   for ( genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux1
-      assign wb_dout_way[i][63:0] = (ic_rw_addr_ff[2:1] == 2'b00) ? wb_dout_way_pre[i][63:0]   :
-                                    (ic_rw_addr_ff[2:1] == 2'b01) ?{wb_dout_way_pre[i][83:68],  wb_dout_way_pre[i][63:16]} :
-                                    (ic_rw_addr_ff[2:1] == 2'b10) ?{wb_dout_way_pre[i][99:68],  wb_dout_way_pre[i][63:32]} :
-                                                                   {wb_dout_way_pre[i][115:68], wb_dout_way_pre[i][63:48]};
-
-      assign wb_dout_way_with_premux[i][63:0]      =  ic_sel_premux_data ? ic_premux_data[63:0]  : wb_dout_way[i][63:0] ;
-   end
-
-   always_comb begin : rd_out
-      ic_rd_data[63:0]   = '0;
-      ic_debug_rd_data[70:0]   = '0;
-      wb_dout_ecc[135:0] = '0;
-
-      for ( int i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : num_ways_mux2
-         ic_rd_data[63:0]   |= ({64{ic_rd_hit_q[i] | ic_sel_premux_data}} &  wb_dout_way_with_premux[i][63:0]);
-         ic_debug_rd_data[70:0] |= ({71{ic_rd_hit_q[i]}}) & {3'b0,wb_dout_way_pre[i][67:0]};
-         wb_dout_ecc[135:0] |= {136{ic_rd_hit_q[i]}}  & wb_dout_way_pre[i][135:0];
-      end
-   end
-
-   assign wb_dout_ecc_bank[0] =  wb_dout_ecc[67:0];
-   assign wb_dout_ecc_bank[1] =  wb_dout_ecc[135:68];
-
-   logic [pt.ICACHE_BANKS_WAY-1:0][3:0] ic_parerr_bank;
-
-  for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_par_error
-    assign bank_check_en[i]    = |ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] & ((i==0) | (~ic_cacheline_wrap_ff & (ic_b_rden_ff[pt.ICACHE_BANKS_WAY-1:0] == {pt.ICACHE_BANKS_WAY{1'b1}})));  // always check the lower address bank, and drop the upper address bank on a CL wrap
-     for (genvar j=0; j<4; j++)  begin : parity
-      rveven_paritycheck pchk (
-                           .data_in   (wb_dout_ecc_bank[i][16*(j+1)-1: 16*j]),
-                           .parity_in (wb_dout_ecc_bank[i][64+j]),
-                           .parity_err(ic_parerr_bank[i][j] )
-                           );
-        end
-     assign ic_eccerr [i] = '0 ;
-  end
-
-     assign ic_parerr[1] = (|ic_parerr_bank[1][3:0]) & bank_check_en[1];
-     assign ic_parerr[0] = (|ic_parerr_bank[0][3:0]) & bank_check_en[0];
-
-end // else: !if( pt.ICACHE_ECC )
-
-
-endmodule // eb1_IC_DATA
-
-//=============================================================================================================================================================
-///\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ END OF IC DATA MODULE \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
-//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
-//=============================================================================================================================================================
-
-/////////////////////////////////////////////////
-////// ICACHE TAG MODULE     ////////////////////
-/////////////////////////////////////////////////
-module eb1_IC_TAG
-import eb1_pkg::*;
- #(
-`include "eb1_param.vh"
- )
-     (
-      input logic                                                   clk,
-      input logic                                                   active_clk,
-      input logic                                                   rst_l,
-      input logic                                                   clk_override,
-      input logic                                                   dec_tlu_core_ecc_disable,
-
-      input logic [31:3]                                            ic_rw_addr,
-
-      input logic [pt.ICACHE_NUM_WAYS-1:0]                         ic_wr_en,             // way
-      input logic [pt.ICACHE_NUM_WAYS-1:0]                         ic_tag_valid,
-      input logic                                                  ic_rd_en,
-
-      input logic [pt.ICACHE_INDEX_HI:3]                           ic_debug_addr,        // Read/Write addresss to the Icache.
-      input logic                                                  ic_debug_rd_en,       // Icache debug rd
-      input logic                                                  ic_debug_wr_en,       // Icache debug wr
-      input logic                                                  ic_debug_tag_array,   // Debug tag array
-      input logic [pt.ICACHE_NUM_WAYS-1:0]                         ic_debug_way,         // Debug way. Rd or Wr.
-      input eb1_ic_tag_ext_in_pkt_t   [pt.ICACHE_NUM_WAYS-1:0]    ic_tag_ext_in_pkt,
-
-      output logic [25:0]                                          ictag_debug_rd_data,
-      input  logic [70:0]                                          ic_debug_wr_data,     // Debug wr cache.
-
-      output logic [pt.ICACHE_NUM_WAYS-1:0]                        ic_rd_hit,
-      output logic                                                 ic_tag_perr,
-      input  logic                                                 scan_mode
-   ) ;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] [25:0]                           ic_tag_data_raw;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [25:0]                           ic_tag_data_raw_pre;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [36:pt.ICACHE_TAG_LO]            w_tout;
-   logic [25:0]                                                    ic_tag_wr_data ;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [31:0]                           ic_tag_corrected_data_unc;
-   logic [pt.ICACHE_NUM_WAYS-1:0] [06:0]                           ic_tag_corrected_ecc_unc;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_single_ecc_error;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_double_ecc_error;
-   logic [6:0]                                                     ic_tag_ecc;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_way_perr ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_debug_rd_way_en ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_debug_rd_way_en_ff ;
-
-   logic [pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO]              ic_rw_addr_q;
-   logic [31:pt.ICACHE_TAG_LO]                                     ic_rw_addr_ff;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_rden_q;          // way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_wren;          // way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_wren_q;        // way
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_tag_clken;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                  ic_debug_wr_way_en;   // debug wr_way
-   logic                                                           ic_rd_en_ff;
-   logic                                                           ic_tag_parity;
-
-
-   assign  ic_tag_wren [pt.ICACHE_NUM_WAYS-1:0]  = ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{(ic_rw_addr[pt.ICACHE_BEAT_ADDR_HI:4] == {pt.ICACHE_BEAT_BITS-1{1'b1}})}} ;
-   assign  ic_tag_clken[pt.ICACHE_NUM_WAYS-1:0]  = {pt.ICACHE_NUM_WAYS{ic_rd_en | clk_override}} | ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0];
-
-   rvdff #(1) rd_en_ff (.*, .clk(active_clk),
-                    .din (ic_rd_en),
-                    .dout(ic_rd_en_ff)) ;
-
-
-   rvdffie #(32-pt.ICACHE_TAG_LO) adr_ff (.*,
-                                          .din ({ic_rw_addr[31:pt.ICACHE_TAG_LO]}),
-                                          .dout({ic_rw_addr_ff[31:pt.ICACHE_TAG_LO]})
-                                          );
-
-   localparam PAD_BITS = 21 - (32 - pt.ICACHE_TAG_LO);  // sizing for a max tag width.
-
-   // tags
-   assign  ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_rd_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-   assign  ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0] =  {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-   assign  ic_tag_wren_q[pt.ICACHE_NUM_WAYS-1:0]  =  ic_tag_wren[pt.ICACHE_NUM_WAYS-1:0]          |
-                                  ic_debug_wr_way_en[pt.ICACHE_NUM_WAYS-1:0]   ;
-
-   assign  ic_tag_rden_q[pt.ICACHE_NUM_WAYS-1:0]  =  ({pt.ICACHE_NUM_WAYS{ic_rd_en }}  | ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0] ) &  {pt.ICACHE_NUM_WAYS{~(|ic_wr_en)  & ~ic_debug_wr_en}};
-
-if (pt.ICACHE_TAG_LO == 11) begin: SMALLEST
- if (pt.ICACHE_ECC) begin : ECC1_W
-           rvecc_encode  tag_ecc_encode (
-                                  .din    ({{pt.ICACHE_TAG_LO{1'b0}}, ic_rw_addr[31:pt.ICACHE_TAG_LO]}),
-                                  .ecc_out({ ic_tag_ecc[6:0]}));
-
-   assign  ic_tag_wr_data[25:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[68:64], ic_debug_wr_data[31:11]} :
-                                  {ic_tag_ecc[4:0], ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
- end
-
- else begin : ECC0_W
-           rveven_paritygen #(32-pt.ICACHE_TAG_LO) pargen  (.data_in   (ic_rw_addr[31:pt.ICACHE_TAG_LO]),
-                                                 .parity_out(ic_tag_parity));
-
-   assign  ic_tag_wr_data[21:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[64], ic_debug_wr_data[31:11]} :
-                                  {ic_tag_parity, ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
- end // else: !if(pt.ICACHE_ECC)
-
-end // block: SMALLEST
-
-
-else begin: OTHERS
-  if(pt.ICACHE_ECC) begin :ECC1_W
-           rvecc_encode  tag_ecc_encode (
-                                  .din    ({{pt.ICACHE_TAG_LO{1'b0}}, ic_rw_addr[31:pt.ICACHE_TAG_LO]}),
-                                  .ecc_out({ ic_tag_ecc[6:0]}));
-
-   assign  ic_tag_wr_data[25:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[68:64],ic_debug_wr_data[31:11]} :
-                                  {ic_tag_ecc[4:0], {PAD_BITS{1'b0}},ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
-
-  end
-  else  begin :ECC0_W
-   logic   ic_tag_parity ;
-           rveven_paritygen #(32-pt.ICACHE_TAG_LO) pargen  (.data_in   (ic_rw_addr[31:pt.ICACHE_TAG_LO]),
-                                                 .parity_out(ic_tag_parity));
-   assign  ic_tag_wr_data[21:0] = (ic_debug_wr_en & ic_debug_tag_array) ?
-                                  {ic_debug_wr_data[64], ic_debug_wr_data[31:11]} :
-                                  {ic_tag_parity, {PAD_BITS{1'b0}},ic_rw_addr[31:pt.ICACHE_TAG_LO]} ;
-  end // else: !if(pt.ICACHE_ECC)
-
-end // block: OTHERS
-
-
-    assign ic_rw_addr_q[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] = (ic_debug_rd_en | ic_debug_wr_en) ?
-                                                ic_debug_addr[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] :
-                                                ic_rw_addr[pt.ICACHE_INDEX_HI: pt.ICACHE_TAG_INDEX_LO] ;
-
-   rvdff #(pt.ICACHE_NUM_WAYS) tag_rd_wy_ff (.*, .clk(active_clk),
-                    .din ({ic_debug_rd_way_en[pt.ICACHE_NUM_WAYS-1:0]}),
-                    .dout({ic_debug_rd_way_en_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
- if (pt.ICACHE_WAYPACK == 0 ) begin : PACKED_0
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] ic_b_sram_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                                               ic_b_read_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                                                                               ic_b_write_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0] [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   wb_index_hold;
-   logic [pt.ICACHE_NUM_WAYS-1:0]                               [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   ic_b_rw_addr;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en;     //bank
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en_ff;  //bank
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 index_valid;  //bank
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_clear_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_addr_match;
-
-
-
-
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0] wrptr;
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0] wrptr_in;
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0]       sel_bypass;
-    logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0]       sel_bypass_ff;
-
-
-
-    logic [pt.ICACHE_NUM_WAYS-1:0][25:0]  sel_bypass_data;
-    logic [pt.ICACHE_NUM_WAYS-1:0]        any_bypass;
-    logic [pt.ICACHE_NUM_WAYS-1:0]        any_addr_match;
-    logic [pt.ICACHE_NUM_WAYS-1:0]        ic_tag_clken_final;
-
-      `define eb1_IC_TAG_SRAM(depth,width)                                                                                                      \
-                                  ram_``depth``x``width  ic_way_tag (                                                                           \
-                                .ME(ic_tag_clken_final[i]),                                                                                     \
-                                .WE (ic_tag_wren_q[i]),                                                                                         \
-                                .D  (ic_tag_wr_data[``width-1:0]),                                                                              \
-                                .ADR(ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]),                                                  \
-                                .Q  (ic_tag_data_raw_pre[i][``width-1:0]),                                                                      \
-                                .CLK (clk),                                                                                                     \
-                                .ROP ( ),                                                                                                       \
-                                                                                                                                                \
-                                .TEST1(ic_tag_ext_in_pkt[i].TEST1),                                                                             \
-                                .RME(ic_tag_ext_in_pkt[i].RME),                                                                                 \
-                                .RM(ic_tag_ext_in_pkt[i].RM),                                                                                   \
-                                                                                                                                                \
-                                .LS(ic_tag_ext_in_pkt[i].LS),                                                                                   \
-                                .DS(ic_tag_ext_in_pkt[i].DS),                                                                                   \
-                                .SD(ic_tag_ext_in_pkt[i].SD),                                                                                   \
-                                                                                                                                                \
-                                .TEST_RNM(ic_tag_ext_in_pkt[i].TEST_RNM),                                                                       \
-                                .BC1(ic_tag_ext_in_pkt[i].BC1),                                                                                 \
-                                .BC2(ic_tag_ext_in_pkt[i].BC2)                                                                                  \
-                                                                                                                                                \
-                               );                                                                                                               \
-                                                                                                                                                \
-                                                                                                                                                \
-                                                                                                                                                \
-                                                                                                                                                \
-              if (pt.ICACHE_TAG_BYPASS_ENABLE == 1) begin                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 assign wrptr_in[i] = (wrptr[i] == (pt.ICACHE_TAG_NUM_BYPASS-1)) ? '0 : (wrptr[i] + 1'd1);                                                                                            \
-                                                                                                                                                                                                      \
-                 rvdffs  #(pt.ICACHE_TAG_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk), .en(|write_bypass_en[i]), .din (wrptr_in[i]), .dout(wrptr[i])) ;                                           \
-                                                                                                                                                                                                      \
-                 assign ic_b_sram_en[i]              = ic_tag_clken[i];                                                                                                                               \
-                                                                                                                                                                                                      \
-                 assign ic_b_read_en[i]              =  ic_b_sram_en[i] &   (ic_tag_rden_q[i]);                                                                                                       \
-                 assign ic_b_write_en[i]             =  ic_b_sram_en[i] &   (ic_tag_wren_q[i]);                                                                                                       \
-                 assign ic_tag_clken_final[i]        =  ic_b_sram_en[i] &    ~(|sel_bypass[i]);                                                                                                       \
-                                                                                                                                                                                                      \
-                 // LSB is pt.ICACHE_TAG_INDEX_LO]                                                                                                                                                    \
-                 assign ic_b_rw_addr[i] = {ic_rw_addr_q};                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 always_comb begin                                                                                                                                                                    \
-                    any_addr_match[i] = '0;                                                                                                                                                           \
-                                                                                                                                                                                                      \
-                    for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                              \
-                       any_addr_match[i] |= (ic_b_addr_match[i][l] & index_valid[i][l]);                                                                                                              \
-                    end                                                                                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                // it is an error to ever have 2 entries with the same index and both valid                                                                                                           \
-                for (genvar l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin: BYPASS                                                                                                                       \
-                                                                                                                                                                                                      \
-                   assign ic_b_addr_match[i][l] = (wb_index_hold[i][l] ==  ic_b_rw_addr[i]) & index_valid[i][l];                                                                                      \
-                                                                                                                                                                                                      \
-                   assign ic_b_clear_en[i][l]   = ic_b_write_en[i] &   ic_b_addr_match[i][l];                                                                                                         \
-                                                                                                                                                                                                      \
-                   assign sel_bypass[i][l]      = ic_b_read_en[i]  &   ic_b_addr_match[i][l] ;                                                                                                        \
-                                                                                                                                                                                                      \
-                   assign write_bypass_en[i][l] = ic_b_read_en[i]  &  ~any_addr_match[i] & (wrptr[i] == l);                                                                                           \
-                                                                                                                                                                                                      \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                     .din(write_bypass_en[i][l]), .dout(write_bypass_en_ff[i][l])) ;                            \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en[i][l] | ic_b_clear_en[i][l]),         .din(~ic_b_clear_en[i][l]),  .dout(index_valid[i][l])) ;                             \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                     .din(sel_bypass[i][l]),      .dout(sel_bypass_ff[i][l])) ;                                 \
-                                                                                                                                                                                                      \
-                   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1))  ic_addr_index   (.*, .en(write_bypass_en[i][l]),    .din (ic_b_rw_addr[i]),        .dout(wb_index_hold[i][l]));   \
-                   rvdffe #(``width)                                                           rd_data_hold_ff (.*, .en(write_bypass_en_ff[i][l]), .din (ic_tag_data_raw_pre[i][``width-1:0]), .dout(wb_dout_hold[i][l]));            \
-                                                                                                                                                                                                      \
-                end // block: BYPASS                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                always_comb begin                                                                                                                                                                     \
-                 any_bypass[i] = '0;                                                                                                                                                                  \
-                 sel_bypass_data[i] = '0;                                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                                 \
-                    any_bypass[i]      |=  sel_bypass_ff[i][l];                                                                                                                                       \
-                    sel_bypass_data[i] |= (sel_bypass_ff[i][l]) ? wb_dout_hold[i][l] : '0;                                                                                                            \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                   ic_tag_data_raw[i]   =   any_bypass[i] ?  sel_bypass_data[i] :  ic_tag_data_raw_pre[i] ;                                                                                           \
-                end // always_comb begin                                                                                                                                                              \
-                                                                                                                                                                                                      \
-             end // if (pt.ICACHE_BYPASS_ENABLE == 1)                                                                                                                                                 \
-             else begin                                                                                                                                                                               \
-                 assign ic_tag_data_raw[i]   =   ic_tag_data_raw_pre[i] ;                                                                                                                             \
-                 assign ic_tag_clken_final[i]       =   ic_tag_clken[i];                                                                                                                              \
-             end
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: WAYS
-
-   if (pt.ICACHE_ECC) begin  : ECC1
-      logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0][25 :0] wb_dout_hold;
-
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-                 `eb1_IC_TAG_SRAM(32,26)
-      end // if (pt.ICACHE_TAG_DEPTH == 32)
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-                 `eb1_IC_TAG_SRAM(64,26)
-      end // if (pt.ICACHE_TAG_DEPTH == 64)
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-                 `eb1_IC_TAG_SRAM(128,26)
-      end // if (pt.ICACHE_TAG_DEPTH == 128)
-       if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-                 `eb1_IC_TAG_SRAM(256,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 256)
-       if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-                 `eb1_IC_TAG_SRAM(512,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 512)
-       if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-                 `eb1_IC_TAG_SRAM(1024,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 1024)
-       if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-                 `eb1_IC_TAG_SRAM(2048,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 2048)
-       if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-                 `eb1_IC_TAG_SRAM(4096,26)
-       end // if (pt.ICACHE_TAG_DEPTH == 4096)
-
-         assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-         assign w_tout[i][36:32]              = ic_tag_data_raw[i][25:21] ;
-
-         rvecc_decode  ecc_decode (
-                           .en(~dec_tlu_core_ecc_disable & ic_rd_en_ff),
-                           .sed_ded ( 1'b1 ),    // 1 : means only detection
-                           .din({11'b0,ic_tag_data_raw[i][20:0]}),
-                           .ecc_in({2'b0, ic_tag_data_raw[i][25:21]}),
-                           .dout(ic_tag_corrected_data_unc[i][31:0]),
-                           .ecc_out(ic_tag_corrected_ecc_unc[i][6:0]),
-                           .single_ecc_error(ic_tag_single_ecc_error[i]),
-                           .double_ecc_error(ic_tag_double_ecc_error[i]));
-
-          assign ic_tag_way_perr[i]= ic_tag_single_ecc_error[i] | ic_tag_double_ecc_error[i]  ;
-      end
-      else  begin : ECC0
-      logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_NUM_BYPASS-1:0][21 :0] wb_dout_hold;
-      assign ic_tag_data_raw_pre[i][25:22] = '0 ;
-
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-                 `eb1_IC_TAG_SRAM(32,22)
-      end // if (pt.ICACHE_TAG_DEPTH == 32)
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-                 `eb1_IC_TAG_SRAM(64,22)
-      end // if (pt.ICACHE_TAG_DEPTH == 64)
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-                 `eb1_IC_TAG_SRAM(128,22)
-      end // if (pt.ICACHE_TAG_DEPTH == 128)
-       if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-                 `eb1_IC_TAG_SRAM(256,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 256)
-       if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-                 `eb1_IC_TAG_SRAM(512,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 512)
-       if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-                 `eb1_IC_TAG_SRAM(1024,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 1024)
-       if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-                 `eb1_IC_TAG_SRAM(2048,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 2048)
-       if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-                 `eb1_IC_TAG_SRAM(4096,22)
-       end // if (pt.ICACHE_TAG_DEPTH == 4096)
-
-         assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-         assign w_tout[i][32]                 = ic_tag_data_raw[i][21] ;
-
-         rveven_paritycheck #(32-pt.ICACHE_TAG_LO) parcheck(.data_in   (w_tout[i][31:pt.ICACHE_TAG_LO]),
-                                                   .parity_in (w_tout[i][32]),
-                                                   .parity_err(ic_tag_way_perr[i]));
-      end // else: !if(pt.ICACHE_ECC)
-
-   end // block: WAYS
- end // block: PACKED_0
-
-
- else begin : PACKED_1
-
-
-   logic                                                                                ic_b_sram_en;
-   logic                                                                                ic_b_read_en;
-   logic                                                                                ic_b_write_en;
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0] [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   wb_index_hold;
-   logic                                [pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]   ic_b_rw_addr;
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en;     //bank
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 write_bypass_en_ff;  //bank
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 index_valid;  //bank
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_clear_en;
-   logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]                                                 ic_b_addr_match;
-
-
-
-
-    logic [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0]  wrptr;
-    logic [pt.ICACHE_TAG_NUM_BYPASS_WIDTH-1:0]  wrptr_in;
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]        sel_bypass;
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0]        sel_bypass_ff;
-
-
-
-    logic [(26*pt.ICACHE_NUM_WAYS)-1:0]  sel_bypass_data;
-    logic                                any_bypass;
-    logic                                any_addr_match;
-    logic                                ic_tag_clken_final;
-
-`define eb1_IC_TAG_PACKED_SRAM(depth,width)                                                               \
-                  ram_be_``depth``x``width  ic_way_tag (                                                   \
-                                .ME  ( ic_tag_clken_final),                                                \
-                                .WE  (|ic_tag_wren_q[pt.ICACHE_NUM_WAYS-1:0]),                             \
-                                .WEM (ic_tag_wren_biten_vec[``width-1:0]),                                 \
-                                                                                                           \
-                                .D   ({pt.ICACHE_NUM_WAYS{ic_tag_wr_data[``width/pt.ICACHE_NUM_WAYS-1:0]}}), \
-                                .ADR (ic_rw_addr_q[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]),            \
-                                .Q   (ic_tag_data_raw_packed_pre[``width-1:0]),                            \
-                                .CLK (clk),                                                                \
-                                .ROP ( ),                                                                  \
-                                                                                                           \
-                                .TEST1     (ic_tag_ext_in_pkt[0].TEST1),                                   \
-                                .RME      (ic_tag_ext_in_pkt[0].RME),                                      \
-                                .RM       (ic_tag_ext_in_pkt[0].RM),                                       \
-                                                                                                           \
-                                .LS       (ic_tag_ext_in_pkt[0].LS),                                       \
-                                .DS       (ic_tag_ext_in_pkt[0].DS),                                       \
-                                .SD       (ic_tag_ext_in_pkt[0].SD),                                       \
-                                                                                                           \
-                                .TEST_RNM (ic_tag_ext_in_pkt[0].TEST_RNM),                                 \
-                                .BC1      (ic_tag_ext_in_pkt[0].BC1),                                      \
-                                .BC2      (ic_tag_ext_in_pkt[0].BC2)                                       \
-                                                                                                           \
-                               );                                                                          \
-                                                                                                           \
-              if (pt.ICACHE_TAG_BYPASS_ENABLE == 1) begin                                                                                                                                             \
-                                                                                                                                                                                                      \
-                 assign wrptr_in = (wrptr == (pt.ICACHE_TAG_NUM_BYPASS-1)) ? '0 : (wrptr + 1'd1);                                                                                                     \
-                                                                                                                                                                                                      \
-                 rvdffs  #(pt.ICACHE_TAG_NUM_BYPASS_WIDTH)  wrptr_ff(.*, .clk(active_clk), .en(|write_bypass_en), .din (wrptr_in), .dout(wrptr)) ;                                                    \
-                                                                                                                                                                                                      \
-                 assign ic_b_sram_en              = |ic_tag_clken;                                                                                                                                    \
-                                                                                                                                                                                                      \
-                 assign ic_b_read_en              =  ic_b_sram_en &   (|ic_tag_rden_q);                                                                                                               \
-                 assign ic_b_write_en             =  ic_b_sram_en &   (|ic_tag_wren_q);                                                                                                               \
-                 assign ic_tag_clken_final        =  ic_b_sram_en &    ~(|sel_bypass);                                                                                                                \
-                                                                                                                                                                                                      \
-                 // LSB is pt.ICACHE_TAG_INDEX_LO]                                                                                                                                                    \
-                 assign ic_b_rw_addr = {ic_rw_addr_q};                                                                                                                                                \
-                                                                                                                                                                                                      \
-                 always_comb begin                                                                                                                                                                    \
-                    any_addr_match = '0;                                                                                                                                                              \
-                                                                                                                                                                                                      \
-                    for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                              \
-                       any_addr_match |= ic_b_addr_match[l];                                                                                                                                          \
-                    end                                                                                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                // it is an error to ever have 2 entries with the same index and both valid                                                                                                           \
-                for (genvar l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin: BYPASS                                                                                                                       \
-                                                                                                                                                                                                      \
-                   assign ic_b_addr_match[l] = (wb_index_hold[l] ==  ic_b_rw_addr) & index_valid[l];                                                                                                  \
-                                                                                                                                                                                                      \
-                   assign ic_b_clear_en[l]   = ic_b_write_en &   ic_b_addr_match[l];                                                                                                                  \
-                                                                                                                                                                                                      \
-                   assign sel_bypass[l]      = ic_b_read_en  &   ic_b_addr_match[l] ;                                                                                                                 \
-                                                                                                                                                                                                      \
-                   assign write_bypass_en[l] = ic_b_read_en  &  ~any_addr_match & (wrptr == l);                                                                                                       \
-                                                                                                                                                                                                      \
-                   rvdff  #(1)  write_bypass_ff (.*, .clk(active_clk),                                                     .din(write_bypass_en[l]), .dout(write_bypass_en_ff[l])) ;                                  \
-                   rvdffs #(1)  index_val_ff    (.*, .clk(active_clk), .en(write_bypass_en[l] | ic_b_clear_en[l]),         .din(~ic_b_clear_en[l]),  .dout(index_valid[l])) ;                                         \
-                   rvdff  #(1)  sel_hold_ff     (.*, .clk(active_clk),                                                     .din(sel_bypass[l]),      .dout(sel_bypass_ff[l])) ;                                               \
-                                                                                                                                                                                                      \
-                   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1)) ic_addr_index    (.*, .en(write_bypass_en[l]),    .din (ic_b_rw_addr),               .dout(wb_index_hold[l]));          \
-                   rvdffe #(``width)                                                          rd_data_hold_ff  (.*, .en(write_bypass_en_ff[l]), .din (ic_tag_data_raw_packed_pre[``width-1:0]), .dout(wb_packeddout_hold[l]));        \
-                                                                                                                                                                                                      \
-                end // block: BYPASS                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                always_comb begin                                                                                                                                                                     \
-                 any_bypass = '0;                                                                                                                                                                     \
-                 sel_bypass_data = '0;                                                                                                                                                                \
-                                                                                                                                                                                                      \
-                 for (int l=0; l<pt.ICACHE_TAG_NUM_BYPASS; l++) begin                                                                                                                                 \
-                    any_bypass      |=  sel_bypass_ff[l];                                                                                                                                             \
-                    sel_bypass_data |= (sel_bypass_ff[l]) ? wb_packeddout_hold[l] : '0;                                                                                                               \
-                 end                                                                                                                                                                                  \
-                                                                                                                                                                                                      \
-                   ic_tag_data_raw_packed   =   any_bypass ?  sel_bypass_data :  ic_tag_data_raw_packed_pre ;                                                                                         \
-                end // always_comb begin                                                                                                                                                              \
-                                                                                                                                                                                                      \
-             end // if (pt.ICACHE_BYPASS_ENABLE == 1)                                                                                                                                                 \
-             else begin                                                                                                                                                                               \
-                 assign ic_tag_data_raw_packed   =   ic_tag_data_raw_packed_pre ;                                                                                                                     \
-                 assign ic_tag_clken_final       =   |ic_tag_clken;                                                                                                                                   \
-             end
-
-   if (pt.ICACHE_ECC) begin  : ECC1
-    logic [(26*pt.ICACHE_NUM_WAYS)-1 :0]  ic_tag_data_raw_packed, ic_tag_wren_biten_vec, ic_tag_data_raw_packed_pre;           // data and its bit enables
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0][(26*pt.ICACHE_NUM_WAYS)-1 :0] wb_packeddout_hold;
-    for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-        assign ic_tag_wren_biten_vec[(26*i)+25:26*i] = {26{ic_tag_wren_q[i]}};
-     end
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,104)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,52)
-        end // block: WAYS
-      end // if (pt.ICACHE_TAG_DEPTH == 32
-
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,104)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,52)
-        end // block: WAYS
-      end // block: size_64
-
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,104)
-      end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,52)
-      end // block: WAYS
-
-      end // block: size_128
-
-      if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,52)
-        end // block: WAYS
-      end // block: size_256
-
-      if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,52)
-        end // block: WAYS
-      end // block: size_512
-
-      if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-         if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,52)
-        end // block: WAYS
-      end // block: size_1024
-
-      if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,52)
-        end // block: WAYS
-      end // block: size_2048
-
-      if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,104)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,52)
-        end // block: WAYS
-      end // block: size_4096
-
-        for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin
-          assign ic_tag_data_raw[i]  = ic_tag_data_raw_packed[(26*i)+25:26*i];
-          assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-          assign w_tout[i][36:32]              = ic_tag_data_raw[i][25:21] ;
-          rvecc_decode  ecc_decode (
-                           .en(~dec_tlu_core_ecc_disable & ic_rd_en_ff),
-                           .sed_ded ( 1'b1 ),    // 1 : means only detection
-                           .din({11'b0,ic_tag_data_raw[i][20:0]}),
-                           .ecc_in({2'b0, ic_tag_data_raw[i][25:21]}),
-                           .dout(ic_tag_corrected_data_unc[i][31:0]),
-                           .ecc_out(ic_tag_corrected_ecc_unc[i][6:0]),
-                           .single_ecc_error(ic_tag_single_ecc_error[i]),
-                           .double_ecc_error(ic_tag_double_ecc_error[i]));
-
-          assign ic_tag_way_perr[i]= ic_tag_single_ecc_error[i] | ic_tag_double_ecc_error[i]  ;
-     end // for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++)
-
-   end // block: ECC1
-
-
-   else  begin : ECC0
-    logic [(22*pt.ICACHE_NUM_WAYS)-1 :0]  ic_tag_data_raw_packed, ic_tag_wren_biten_vec, ic_tag_data_raw_packed_pre;           // data and its bit enables
-    logic [pt.ICACHE_TAG_NUM_BYPASS-1:0][(22*pt.ICACHE_NUM_WAYS)-1 :0] wb_packeddout_hold;
-    for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin: BITEN
-        assign ic_tag_wren_biten_vec[(22*i)+21:22*i] = {22{ic_tag_wren_q[i]}};
-     end
-      if (pt.ICACHE_TAG_DEPTH == 32)   begin : size_32
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,88)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(32,44)
-        end // block: WAYS
-      end // if (pt.ICACHE_TAG_DEPTH == 32
-
-      if (pt.ICACHE_TAG_DEPTH == 64)   begin : size_64
-        if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,88)
-        end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(64,44)
-        end // block: WAYS
-      end // block: size_64
-
-      if (pt.ICACHE_TAG_DEPTH == 128)   begin : size_128
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,88)
-      end // block: WAYS
-      else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(128,44)
-      end // block: WAYS
-
-      end // block: size_128
-
-      if (pt.ICACHE_TAG_DEPTH == 256)   begin : size_256
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(256,44)
-        end // block: WAYS
-      end // block: size_256
-
-      if (pt.ICACHE_TAG_DEPTH == 512)   begin : size_512
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(512,44)
-        end // block: WAYS
-      end // block: size_512
-
-      if (pt.ICACHE_TAG_DEPTH == 1024)   begin : size_1024
-         if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(1024,44)
-        end // block: WAYS
-      end // block: size_1024
-
-      if (pt.ICACHE_TAG_DEPTH == 2048)   begin : size_2048
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(2048,44)
-        end // block: WAYS
-      end // block: size_2048
-
-      if (pt.ICACHE_TAG_DEPTH == 4096)   begin  : size_4096
-       if (pt.ICACHE_NUM_WAYS == 4) begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,88)
-        end // block: WAYS
-       else begin : WAYS
-                 `eb1_IC_TAG_PACKED_SRAM(4096,44)
-        end // block: WAYS
-      end // block: size_4096
-
-      for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin
-          assign ic_tag_data_raw[i]  = ic_tag_data_raw_packed[(22*i)+21:22*i];
-          assign w_tout[i][31:pt.ICACHE_TAG_LO] = ic_tag_data_raw[i][31-pt.ICACHE_TAG_LO:0] ;
-          assign w_tout[i][32]                 = ic_tag_data_raw[i][21] ;
-          assign w_tout[i][36:33]              = '0 ;
-
-
-          rveven_paritycheck #(32-pt.ICACHE_TAG_LO) parcheck(.data_in   (w_tout[i][31:pt.ICACHE_TAG_LO]),
-                                                   .parity_in (w_tout[i][32]),
-                                                   .parity_err(ic_tag_way_perr[i]));
-      end
-
-
-   end // block: ECC0
- end // block: PACKED_1
-
-
-   always_comb begin : tag_rd_out
-      ictag_debug_rd_data[25:0] = '0;
-      for ( int j=0; j<pt.ICACHE_NUM_WAYS; j++) begin: debug_rd_out
-         ictag_debug_rd_data[25:0] |=  pt.ICACHE_ECC ? ({26{ic_debug_rd_way_en_ff[j]}} & ic_tag_data_raw[j] ) : {4'b0, ({22{ic_debug_rd_way_en_ff[j]}} & ic_tag_data_raw[j][21:0])};
-      end
-   end
-
-
-   for ( genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin : ic_rd_hit_loop
-      assign ic_rd_hit[i] = (w_tout[i][31:pt.ICACHE_TAG_LO] == ic_rw_addr_ff[31:pt.ICACHE_TAG_LO]) & ic_tag_valid[i];
-   end
-
-   assign  ic_tag_perr  = | (ic_tag_way_perr[pt.ICACHE_NUM_WAYS-1:0] & ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0] ) ;
-endmodule // eb1_IC_TAG
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_iccm_mem.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_iccm_mem.sv
deleted file mode 100644
index 8b1bdf4..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_iccm_mem.sv
+++ /dev/null
@@ -1,525 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Icache closely coupled memory --- ICCM
-//********************************************************************************
-
-module eb1_ifu_iccm_mem
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
- `ifdef USE_POWER_PINS
-   input logic 					vccd1,
-   input logic						vssd1,
- `endif
-   input logic                                        clk,                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                        active_clk,                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                                        rst_l,                               // reset, active low
-   input logic                                        clk_override,                        // Override non-functional clock gating
-
-   input logic                                        iccm_wren,                           // ICCM write enable
-   input logic                                        iccm_rden,                           // ICCM read enable
-   input logic [pt.ICCM_BITS-1:1]                     iccm_rw_addr,                        // ICCM read/write address
-   input logic                                        iccm_buf_correct_ecc,                // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM under a correction - This is needed to guard replacements when hit
-   input logic [2:0]                                  iccm_wr_size,                        // ICCM write size
-   input logic [77:0]                                 iccm_wr_data,                        // ICCM write data
-
-   input eb1_ccm_ext_in_pkt_t [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,                    // External packet
-
-   output logic [63:0]                                iccm_rd_data,                        // ICCM read data
-   output logic [77:0]                                iccm_rd_data_ecc,                    // ICCM read ecc
-   input  logic                                       scan_mode                            // Scan mode control
-
-);
-
-
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                wren_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                rden_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                iccm_clken;
-   logic [pt.ICCM_NUM_BANKS-1:0] [pt.ICCM_BITS-1:pt.ICCM_BANK_INDEX_LO] addr_bank;
-
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_dout, iccm_bank_dout_fn;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data;
-   logic [pt.ICCM_BITS-1:1]              addr_bank_inc;
-   logic [pt.ICCM_BANK_HI : 2]           iccm_rd_addr_hi_q;
-   logic [pt.ICCM_BANK_HI : 1]           iccm_rd_addr_lo_q;
-   logic             [63:0]              iccm_rd_data_pre;
-   logic             [63:0]              iccm_data;
-   logic [1:0]                           addr_incr;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data_vec;
-
-   // logic to handle hard persisten faults
-   logic [1:0] [pt.ICCM_BITS-1:2]        redundant_address;
-   logic [1:0] [38:0]                    redundant_data;
-   logic [1:0]                           redundant_valid;
-   logic [pt.ICCM_NUM_BANKS-1:0]         sel_red1, sel_red0, sel_red1_q, sel_red0_q;
-
-
-   logic [38:0]                          redundant_data0_in, redundant_data1_in;
-   logic                                 redundant_lru, redundant_lru_in, redundant_lru_en;
-   logic                                 redundant_data0_en;
-   logic                                 redundant_data1_en;
-   logic                                 r0_addr_en, r1_addr_en;
-
-   // Testing persistent flip
-   //   logic [3:0]                              not_iccm_bank_dout;
-   //   logic [15:3]                     ecc_insert_flip_in, ecc_insert_flip;
-   //   logic                                 flip_en, flip_match, flip_match_q;
-   //
-   //   assign      flip_in = (iccm_rw_addr[3:2] != 2'b00);    // dont flip when bank0 - this is to make some progress in DMA streaming cases
-   //   assign      flip_en = iccm_rden;
-   //
-   //   rvdffs #(1) flipmatch  (.*,
-   //                   .clk(clk),
-   //                   .din(flip_in),
-   //                   .en(flip_en),
-   //                   .dout(flip_match_q));
-   //
-   // end of testing flip
-
-
-   assign addr_incr[1:0]                    = (iccm_wr_size[1:0] == 2'b11) ?  2'b10: 2'b01;
-   assign addr_bank_inc[pt.ICCM_BITS-1 : 1] = iccm_rw_addr[pt.ICCM_BITS-1 : 1] + addr_incr[1:0];
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS/2; i++) begin: mem_bank_data
-      assign iccm_bank_wr_data_vec[(2*i)]   = iccm_wr_data[38:0];
-      assign iccm_bank_wr_data_vec[(2*i)+1] = iccm_wr_data[77:39];
-   end
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS; i++) begin: mem_bank
-      assign wren_bank[i]         = iccm_wren & ((iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_bank_wr_data[i] = iccm_bank_wr_data_vec[i];
-      assign rden_bank[i]         = iccm_rden & ( (iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_clken[i]        =  wren_bank[i] | rden_bank[i] | clk_override;
-      assign addr_bank[i][pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] = wren_bank[i] ? iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                      ((addr_bank_inc[pt.ICCM_BANK_HI:2] == i) ?
-                                                                                                    addr_bank_inc[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                                    iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO]);
- `ifdef VERILATOR
-
-    /*eb1_ram #(.depth(1<<pt.ICCM_INDEX_BITS), .width(39)) iccm_bank (
-                                     // Primary ports
-                                     .ME(iccm_clken[i]),
-                                     .CLK(clk),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );*/
-                                      sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i]),
-									.dout0(iccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-                                    
- `else
-
-     if (pt.ICCM_INDEX_BITS == 6 ) begin : iccm
-               ram_64x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-   else if (pt.ICCM_INDEX_BITS == 7 ) begin : iccm
-               ram_128x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-     else if (pt.ICCM_INDEX_BITS == 8 ) begin : iccm
-               /*ram_256x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );*/
-                                      sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i][31:0]),
-									.dout0(iccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 9 ) begin : iccm
-               ram_512x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 10 ) begin : iccm
-              /* ram_1024x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-                                     );*/
-                                     
-                                     sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i]),
-									.dout0(iccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 11 ) begin : iccm
-               ram_2048x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 12 ) begin : iccm
-               ram_4096x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 13 ) begin : iccm
-               ram_8192x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 14 ) begin : iccm
-               ram_16384x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else begin : iccm
-               ram_32768x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-`endif
-
-   // match the redundant rows
-   assign sel_red1[i]  = (redundant_valid[1]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[1][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[1][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   assign sel_red0[i]  = (redundant_valid[0]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[0][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[0][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   rvdff #(1) selred0  (.*,
-                   .clk(active_clk),
-                   .din(sel_red0[i]),
-                   .dout(sel_red0_q[i]));
-
-   rvdff #(1) selred1  (.*,
-                   .clk(active_clk),
-                   .din(sel_red1[i]),
-                   .dout(sel_red1_q[i]));
-
-
-  // muxing out the memory data with the redundant data if the address matches
-   assign iccm_bank_dout_fn[i][38:0] = ({39{sel_red1_q[i]}}                         & redundant_data[1][38:0]) |
-                                       ({39{sel_red0_q[i]}}                         & redundant_data[0][38:0]) |
-                                       ({39{~sel_red0_q[i] & ~sel_red1_q[i]}}       & iccm_bank_dout[i][38:0]);
-
-  end : mem_bank
-// This section does the redundancy for tolerating single bit errors
-// 2x 39 bit data values with address[hi:2] and a valid bit is needed to CAM and sub out the reads/writes to the particular locations
-// Also a LRU flop is kept to decide which of the redundant element to replace.
-   assign r0_addr_en              = ~redundant_lru & iccm_buf_correct_ecc;
-   assign r1_addr_en              = redundant_lru  & iccm_buf_correct_ecc;
-   assign redundant_lru_en         = iccm_buf_correct_ecc | (((|sel_red0[pt.ICCM_NUM_BANKS-1:0]) | (|sel_red1[pt.ICCM_NUM_BANKS-1:0])) & iccm_rden & iccm_correction_state);
-   assign redundant_lru_in        = iccm_buf_correct_ecc ? ~redundant_lru : (|sel_red0[pt.ICCM_NUM_BANKS-1:0]) ? 1'b1 : 1'b0;
-
-   rvdffs #() red_lru  (.*,                               // LRU flop for the redundant replacements
-                   .clk(active_clk),
-                   .en(redundant_lru_en),
-                   .din(redundant_lru_in),
-                   .dout(redundant_lru));
-
-    rvdffs #(pt.ICCM_BITS-2) r0_address  (.*,                 // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r0_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[0][pt.ICCM_BITS-1:2]));
-
-   rvdffs #(pt.ICCM_BITS-2) r1_address  (.*,                   // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[1][pt.ICCM_BITS-1:2]));
-
-    rvdffs #(1) r0_valid  (.*,
-                   .clk(active_clk),                                  // Redundant Row 0 Valid
-                   .en(r0_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[0]));
-
-   rvdffs #(1) r1_valid  (.*,                                   // Redundant Row 1 Valid
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[1]));
-
-
-
-   // We will have to update the Redundant copies in addition to the memory on subsequent writes to this memory location.
-   // The data gets updated on : 1) correction cycle, 2) Future writes - this could be W writes from DMA ( match up till addr[2]) or DW writes ( match till address[3])
-   // The data to pick also depends on the current address[2], size and the addr[2] stored in the address field of the redundant flop. Correction cycle is always W write and the data is splat on both legs, so choosing lower Word
-
-    assign redundant_data0_en      = ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[0][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[0][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[0] & iccm_wren) |
-                                      (~redundant_lru & iccm_buf_correct_ecc);
-
-    assign redundant_data0_in[38:0] = (((iccm_rw_addr[2] == redundant_address[0][2]) & iccm_rw_addr[2]) | (redundant_address[0][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r0_data  (.*,                                 // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data0_en),
-                   .din(redundant_data0_in[38:0]),
-                   .dout(redundant_data[0][38:0]));
-
-   assign redundant_data1_en      =  ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[1][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[1][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[1] & iccm_wren) |
-                                     (redundant_lru & iccm_buf_correct_ecc);
-
-   assign redundant_data1_in[38:0] = (((iccm_rw_addr[2] == redundant_address[1][2]) & iccm_rw_addr[2]) | (redundant_address[1][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r1_data  (.*,                                  // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data1_en),
-                   .din(redundant_data1_in[38:0]),
-                   .dout(redundant_data[1][38:0]));
-
-
-   rvdffs  #(pt.ICCM_BANK_HI)   rd_addr_lo_ff (.*, .clk(active_clk), .din(iccm_rw_addr [pt.ICCM_BANK_HI:1]), .dout(iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:1]), .en(1'b1));   // bit 0 of address is always 0
-   rvdffs  #(pt.ICCM_BANK_BITS) rd_addr_hi_ff (.*, .clk(active_clk), .din(addr_bank_inc[pt.ICCM_BANK_HI:2]), .dout(iccm_rd_addr_hi_q[pt.ICCM_BANK_HI:2]), .en(1'b1));
-
-   assign iccm_rd_data_pre[63:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][31:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][31:0]};
-   assign iccm_data[63:0]        = 64'({16'b0, (iccm_rd_data_pre[63:0] >> (16*iccm_rd_addr_lo_q[1]))});
-   assign iccm_rd_data[63:0]     = {iccm_data[63:0]};
-   assign iccm_rd_data_ecc[77:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][38:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][38:0]};
-
-endmodule // eb1_ifu_iccm_mem
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_ifc_ctl.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_ifc_ctl.sv
deleted file mode 100644
index d5f59a8..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_ifc_ctl.sv
+++ /dev/null
@@ -1,246 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// eb1_ifu_ifc_ctl.sv
-// Function: Fetch pipe control
-//
-// Comments:
-//********************************************************************************
-
-module eb1_ifu_ifc_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,                         // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic free_l2clk,                  // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic rst_l, // reset enable, from core pin
-   input logic scan_mode, // scan
-
-   input logic ic_hit_f,      // Icache hit
-   input logic ifu_ic_mb_empty, // Miss buffer empty
-
-   input logic ifu_fb_consume1,  // Aligner consumed 1 fetch buffer
-   input logic ifu_fb_consume2,  // Aligner consumed 2 fetch buffers
-
-   input logic dec_tlu_flush_noredir_wb, // Don't fetch on flush
-   input logic exu_flush_final, // FLush
-   input logic [31:1] exu_flush_path_final, // Flush path
-
-   input logic ifu_bp_hit_taken_f, // btb hit, select the target path
-   input logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-
-   input logic ic_dma_active, // IC DMA active, stop fetching
-   input logic ic_write_stall, // IC is writing, stop fetching
-   input logic dma_iccm_stall_any, // force a stall in the fetch pipe for DMA ICCM access
-
-   input logic [31:0]  dec_tlu_mrac_ff ,   // side_effect and cacheable for each region
-
-   output logic [31:1] ifc_fetch_addr_f, // fetch addr F
-   output logic [31:1] ifc_fetch_addr_bf, // fetch addr BF
-
-   output logic  ifc_fetch_req_f,  // fetch request valid F
-
-   output logic  ifu_pmu_fetch_stall, // pmu event measuring fetch stall
-
-   output logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. BF stage
-   output logic                      ifc_fetch_req_bf,              // Fetch request. Comes with the address.  BF stage
-   output logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. BF stage
-   output logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   output logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   output logic  ifc_dma_access_ok // fetch is not accessing the ICCM, DMA can proceed
-
-   
-
-   );
-
-   logic [31:1]  fetch_addr_bf;
-   logic [31:1]  fetch_addr_next;
-   logic [3:0]   fb_write_f, fb_write_ns;
-
-   logic     fb_full_f_ns, fb_full_f;
-   logic     fb_right, fb_right2, fb_left, wfm, idle;
-   logic     sel_last_addr_bf, sel_next_addr_bf;
-   logic     miss_f, miss_a;
-   logic     flush_fb, dma_iccm_stall_any_f;
-   logic     mb_empty_mod, goto_idle, leave_idle;
-   logic     fetch_bf_en;
-   logic         line_wrap;
-   logic         fetch_addr_next_1;
-
-   // FSM assignment
-    typedef enum logic [1:0] { IDLE  = 2'b00 ,
-                               FETCH = 2'b01 ,
-                               STALL = 2'b10 ,
-                               WFM   = 2'b11   } state_t ;
-   state_t state      ;
-   state_t next_state ;
-
-   logic     dma_stall;
-   assign dma_stall = ic_dma_active | dma_iccm_stall_any_f;
-
-
-
-   // Fetch address mux
-   // - flush
-   // - Miss *or* flush during WFM (icache miss buffer is blocking)
-   // - Sequential
-
-if(pt.BTB_ENABLE==1) begin
-   logic sel_btb_addr_bf;
-
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_btb_addr_bf  = ~exu_flush_final & ifc_fetch_req_f & ifu_bp_hit_taken_f & ic_hit_f;
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_btb_addr_bf}} & {ifu_bp_btb_target_f[31:1]})| // BTB target
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-
-end // if (pt.BTB_ENABLE=1)
-   else begin
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-end
-   assign fetch_addr_next[31:1] = {({ifc_fetch_addr_f[31:2]} + 31'b1), fetch_addr_next_1 };
-   assign line_wrap = (fetch_addr_next[pt.ICACHE_TAG_INDEX_LO] ^ ifc_fetch_addr_f[pt.ICACHE_TAG_INDEX_LO]);
-
-   assign fetch_addr_next_1 = line_wrap ? 1'b0 : ifc_fetch_addr_f[1];
-
-   assign ifc_fetch_req_bf_raw = ~idle;
-   assign ifc_fetch_req_bf =  ifc_fetch_req_bf_raw &
-
-                 ~(fb_full_f_ns & ~(ifu_fb_consume2 | ifu_fb_consume1)) &
-                 ~dma_stall &
-                 ~ic_write_stall &
-                 ~dec_tlu_flush_noredir_wb ;
-
-
-   assign fetch_bf_en = exu_flush_final | ifc_fetch_req_f;
-
-   assign miss_f = ifc_fetch_req_f & ~ic_hit_f & ~exu_flush_final;
-
-   assign mb_empty_mod = (ifu_ic_mb_empty | exu_flush_final) & ~dma_stall & ~miss_f & ~miss_a;
-
-   // Halt flushes and takes us to IDLE
-   assign goto_idle = exu_flush_final & dec_tlu_flush_noredir_wb;
-   // If we're in IDLE, and we get a flush, goto FETCH
-   assign leave_idle = exu_flush_final & ~dec_tlu_flush_noredir_wb & idle;
-
-//.i 7
-//.o 2
-//.ilb state[1] state[0] reset_delayed miss_f mb_empty_mod  goto_idle leave_idle
-//.ob next_state[1] next_state[0]
-//.type fr
-//
-//# fetch 01, stall 10, wfm 11, idle 00
-//-- 1---- 01
-//-- 0--1- 00
-//00 0--00 00
-//00 0--01 01
-//
-//01 01-0- 11
-//01 00-0- 01
-//
-//11 0-10- 01
-//11 0-00- 11
-
-   assign next_state[1] = (~state[1] & state[0] & miss_f & ~goto_idle) |
-              (state[1] & ~mb_empty_mod & ~goto_idle);
-
-   assign next_state[0] = (~goto_idle & leave_idle) | (state[0] & ~goto_idle);
-
-   assign flush_fb = exu_flush_final;
-
-   // model fb write logic to mass balance the fetch buffers
-   assign fb_right = ( ifu_fb_consume1 & ~ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)) | // Consumed and no new fetch
-              (ifu_fb_consume2 &  ifc_fetch_req_f); // Consumed 2 and new fetch
-
-
-   assign fb_right2 = (ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)); // Consumed 2 and no new fetch
-
-   assign fb_left = ifc_fetch_req_f & ~(ifu_fb_consume1 | ifu_fb_consume2) & ~miss_f;
-
-// CBH
-   assign fb_write_ns[3:0] = ( ({4{(flush_fb)}} & 4'b0001) |
-                   ({4{~flush_fb & fb_right }} & {1'b0, fb_write_f[3:1]}) |
-                   ({4{~flush_fb & fb_right2}} & {2'b0, fb_write_f[3:2]}) |
-                   ({4{~flush_fb & fb_left  }} & {fb_write_f[2:0], 1'b0}) |
-                   ({4{~flush_fb & ~fb_right & ~fb_right2 & ~fb_left}}  & fb_write_f[3:0]));
-
-
-   assign fb_full_f_ns = fb_write_ns[3];
-
-   assign idle     = state      == IDLE  ;
-   assign wfm      = state      == WFM   ;
-
-   rvdffie #(10) fbwrite_ff (.*, .clk(free_l2clk),
-                          .din( {dma_iccm_stall_any, miss_f, ifc_fetch_req_bf, next_state[1:0], fb_full_f_ns, fb_write_ns[3:0]}),
-                          .dout({dma_iccm_stall_any_f, miss_a, ifc_fetch_req_f, state[1:0], fb_full_f, fb_write_f[3:0]}));
-
-   assign ifu_pmu_fetch_stall = wfm | 
-                (ifc_fetch_req_bf_raw & ( (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1 | exu_flush_final)) |
-                  dma_stall));
-
-
-
-   assign ifc_fetch_addr_bf[31:1] = fetch_addr_bf[31:1];
-
-   rvdffpcie #(31) faddrf1_ff  (.*, .en(fetch_bf_en), .din(fetch_addr_bf[31:1]), .dout(ifc_fetch_addr_f[31:1]));
-
-
- if (pt.ICCM_ENABLE)  begin
-   logic iccm_acc_in_region_bf;
-   logic iccm_acc_in_range_bf;
-   rvrangecheck #( .CCM_SADR    (pt.ICCM_SADR),
-                   .CCM_SIZE    (pt.ICCM_SIZE) ) iccm_rangecheck (
-                                     .addr     ({ifc_fetch_addr_bf[31:1],1'b0}) ,
-                                     .in_range (iccm_acc_in_range_bf) ,
-                                     .in_region(iccm_acc_in_region_bf)
-                                     );
-
-   assign ifc_iccm_access_bf = iccm_acc_in_range_bf ;
-
-  assign ifc_dma_access_ok = ( (~ifc_iccm_access_bf |
-                 (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1)) |
-                 (wfm  & ~ifc_fetch_req_bf) |
-                 idle ) & ~exu_flush_final) |
-                  dma_iccm_stall_any_f;
-
-  assign ifc_region_acc_fault_bf = ~iccm_acc_in_range_bf & iccm_acc_in_region_bf ;
- end
- else  begin
-   assign ifc_iccm_access_bf = 1'b0 ;
-   assign ifc_dma_access_ok  = 1'b0 ;
-   assign ifc_region_acc_fault_bf  = 1'b0 ;
- end
-
-   assign ifc_fetch_uncacheable_bf =  ~dec_tlu_mrac_ff[{ifc_fetch_addr_bf[31:28] , 1'b0 }]  ; // bit 0 of each region description is the cacheable bit
-
-endmodule // eb1_ifu_ifc_ctl
-
diff --git a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_mem_ctl.sv b/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_mem_ctl.sv
deleted file mode 100644
index 77c9ebd..0000000
--- a/verilog/rtl/BrqRV_EB1/design/ifu/eb1_ifu_mem_ctl.sv
+++ /dev/null
@@ -1,1672 +0,0 @@
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-
-//********************************************************************************
-// Function: Icache , iccm  control
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu_mem_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic clk,                                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                                          // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic rst_l,                                               // reset, active low
-
-   input logic                       exu_flush_final,               // Flush from the pipeline., includes flush lower
-   input logic                       dec_tlu_flush_lower_wb,        // Flush lower from the pipeline.
-   input logic                       dec_tlu_flush_err_wb,          // Flush from the pipeline due to perr.
-   input logic                       dec_tlu_i0_commit_cmt,         // committed i0 instruction
-   input logic                       dec_tlu_force_halt,            // force halt.
-
-   input logic [31:1]                ifc_fetch_addr_bf,             // Fetch Address byte aligned always.      F1 stage.
-   input logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. F1 stage
-   input logic                       ifc_fetch_req_bf,              // Fetch request. Comes with the address.  F1 stage
-   input logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. F1 stage
-   input logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   input logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-   input logic                       ifc_dma_access_ok,             // It is OK to give dma access to the ICCM. (ICCM is not busy this cycle).
-   input logic                       dec_tlu_fence_i_wb,            // Fence.i instruction is committing. Clear all Icache valids.
-   input logic                       ifu_bp_hit_taken_f,            // Branch is predicted taken. Kill the fetch next cycle.
-
-   input logic                       ifu_bp_inst_mask_f,            // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic                      ifu_miss_state_idle,           // No icache misses are outstanding.
-   output logic                      ifu_ic_mb_empty,               // Continue with normal fetching. This does not mean that miss is finished.
-   output logic                      ic_dma_active  ,               // In the middle of servicing dma request to ICCM. Do not make any new requests.
-   output logic                      ic_write_stall,                // Stall fetch the cycle we are writing the cache.
-
-/// PMU signals
-   output logic                      ifu_pmu_ic_miss,               // IC miss event
-   output logic                      ifu_pmu_ic_hit,                // IC hit event
-   output logic                      ifu_pmu_bus_error,             // Bus error event
-   output logic                      ifu_pmu_bus_busy,              // Bus busy event
-   output logic                      ifu_pmu_bus_trxn,              // Bus transaction
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-    input  logic                     ifu_bus_clk_en,
-
-
-   input  logic                      dma_iccm_req,      //  dma iccm command (read or write)
-   input  logic [31:0]               dma_mem_addr,      //  dma address
-   input  logic [2:0]                dma_mem_sz,        //  size
-   input  logic                      dma_mem_write,     //  write
-   input  logic [63:0]               dma_mem_wdata,     //  write data
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-   output logic                      iccm_dma_ecc_error,//   Data read from iccm has an ecc error
-   output logic                      iccm_dma_rvalid,   //   Data read from iccm is valid
-   output logic [63:0]               iccm_dma_rdata,    //   dma data read from iccm
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,        //   iccm ready to accept new command.
-
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] [70:0]               ic_wr_data,           // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,  // Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,     // Debug wr cache.
-   output logic [70:0]               ifu_ic_debug_rd_data, // debug data read
-
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-   input  logic [1:0]                ifu_fetch_val,
-   // IFU control signals
-   output logic                      ic_hit_f,               // Hit in Icache(if Icache access) or ICCM access( ICCM always has ic_hit_f)
-   output logic [1:0]                ic_access_fault_f,      // Access fault (bus error or ICCM access in region but out of offset range).
-   output logic [1:0]                ic_access_fault_type_f, // Access fault types
-   output logic                      iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-   output logic [1:0]                iccm_rd_ecc_double_err, // This fetch has a double ICCM ecc  error.
-   output logic                      ic_error_start,         // This has any I$ errors ( data/tag/ecc/parity )
-
-   output logic                      ifu_async_error_start,  // Or of the sb iccm, and all the icache errors sent to aligner to stop
-   output logic                      iccm_dma_sb_error,      // Single Bit ECC error from a DMA access
-   output logic [1:0]                ic_fetch_val_f,         // valid bytes for fetch. To the Aligner.
-   output logic [31:0]               ic_data_f,              // Data read from Icache or ICCM. To the Aligner.
-   output logic [63:0]               ic_premux_data,         // Premuxed data to be muxed with Icache data
-   output logic                      ic_sel_premux_data,     // Select premux data.
-
-/////  Debug
-   input  eb1_cache_debug_pkt_t     dec_tlu_ic_diag_pkt ,       // Icache/tag debug read/write packet
-   input  logic                      dec_tlu_core_ecc_disable,   // disable the ecc checking and flagging
-   output logic                      ifu_ic_debug_rd_data_valid, // debug data valid.
-   output logic                      iccm_buf_correct_ecc,
-   output logic                      iccm_correction_state,
-
-
-   input  logic         scan_mode
-   );
-
-//  Create different defines for ICACHE and ICCM enable combinations
-
- localparam   NUM_OF_BEATS = 8 ;
-
-
-
-   logic [31:3]    ifu_ic_req_addr_f;
-   logic           uncacheable_miss_in ;
-   logic           uncacheable_miss_ff;
-
-
-
-   logic           bus_ifu_wr_en     ;
-   logic           bus_ifu_wr_en_ff  ;
-   logic           bus_ifu_wr_en_ff_q  ;
-   logic           bus_ifu_wr_en_ff_wo_err  ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     bus_ic_wr_en ;
-
-   logic           reset_tag_valid_for_miss  ;
-
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_in;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_rep_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_ff;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_hit_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_in;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_ff;
-
-
-   logic           ifu_wr_data_comb_err ;
-   logic           ifu_byp_data_err_new;
-   logic  [1:0]    ifu_byp_data_err_f;
-   logic           ifu_wr_cumulative_err_data;
-   logic           ifu_wr_cumulative_err;
-   logic           ifu_wr_data_comb_err_ff;
-   logic           scnd_miss_index_match ;
-
-
-   logic           ifc_dma_access_q_ok;
-   logic           ifc_iccm_access_f ;
-   logic           ifc_region_acc_fault_f;
-   logic           ifc_region_acc_fault_final_f;
-   logic  [1:0]    ifc_bus_acc_fault_f;
-   logic           ic_act_miss_f;
-   logic           ic_miss_under_miss_f;
-   logic           ic_ignore_2nd_miss_f;
-   logic           ic_act_hit_f;
-   logic           miss_pending;
-   logic [31:1]    imb_in , imb_ff  ;
-   logic [31:pt.ICACHE_BEAT_ADDR_HI+1]    miss_addr_in , miss_addr  ;
-   logic           miss_wrap_f ;
-   logic           flush_final_f;
-   logic           ifc_fetch_req_f;
-   logic           ifc_fetch_req_f_raw;
-   logic           fetch_req_f_qual   ;
-   logic           ifc_fetch_req_qual_bf ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     replace_way_mb_any;
-   logic           last_beat;
-   logic           reset_beat_cnt  ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_req_addr_bits_hi_3 ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_wr_addr_bits_hi_3 ;
-   logic [31:1]    ifu_fetch_addr_int_f ;
-   logic [31:1]    ifu_ic_rw_int_addr ;
-   logic           crit_wd_byp_ok_ff ;
-   logic           ic_crit_wd_rdy_new_ff;
-   logic   [79:0]  ic_byp_data_only_pre_new;
-   logic   [79:0]  ic_byp_data_only_new;
-   logic           ic_byp_hit_f ;
-   logic           ic_valid ;
-   logic           ic_valid_ff;
-   logic           reset_all_tags;
-   logic           ic_valid_w_debug;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren,ifu_tag_wren_ff;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_tag_wr_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_way_ff;
-   logic           ic_debug_rd_en_ff   ;
-   logic           fetch_bf_f_c1_clken ;
-   logic           fetch_bf_f_c1_clk;
-   logic           debug_c1_clken;
-   logic           debug_c1_clk;
-
-   logic           reset_ic_in ;
-   logic           reset_ic_ff ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]     vaddr_f ;
-   logic [31:1]    ifu_status_wr_addr;
-   logic           sel_mb_addr ;
-   logic           sel_mb_addr_ff ;
-   logic           sel_mb_status_addr ;
-   logic [63:0]    ic_final_data;
-
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_w_debug ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_w_debug ;
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]                              way_status_new_ff ;
-   logic                                    way_status_wr_en_ff ;
-   logic [pt.ICACHE_TAG_DEPTH-1:0][pt.ICACHE_STATUS_BITS-1:0]        way_status_out ;
-   logic [1:0]                              ic_debug_way_enc;
-
-   logic [pt.IFU_BUS_TAG-1:0]             ifu_bus_rid_ff;
-
-   logic         fetch_req_icache_f;
-   logic         fetch_req_iccm_f;
-   logic         ic_iccm_hit_f;
-   logic         fetch_uncacheable_ff;
-   logic         way_status_wr_en;
-   logic         sel_byp_data;
-   logic         sel_ic_data;
-   logic         sel_iccm_data;
-   logic         ic_rd_parity_final_err;
-   logic         ic_act_miss_f_delayed;
-   logic         bus_ifu_wr_data_error;
-   logic         bus_ifu_wr_data_error_ff;
-   logic         way_status_wr_en_w_debug;
-   logic         ic_debug_tag_val_rd_out;
-   logic         ifu_pmu_ic_miss_in;
-   logic         ifu_pmu_ic_hit_in;
-   logic         ifu_pmu_bus_error_in;
-   logic         ifu_pmu_bus_trxn_in;
-   logic         ifu_pmu_bus_busy_in;
-   logic         ic_debug_ict_array_sel_in;
-   logic         ic_debug_ict_array_sel_ff;
-   logic         debug_data_clken;
-   logic         last_data_recieved_in ;
-   logic         last_data_recieved_ff ;
-
-   logic                          ifu_bus_rvalid           ;
-   logic                          ifu_bus_rvalid_ff        ;
-   logic                          ifu_bus_rvalid_unq_ff    ;
-   logic                          ifu_bus_arready_unq       ;
-   logic                          ifu_bus_arready_unq_ff    ;
-   logic                          ifu_bus_arvalid           ;
-   logic                          ifu_bus_arvalid_ff        ;
-   logic                          ifu_bus_arready           ;
-   logic                          ifu_bus_arready_ff        ;
-   logic [63:0]                   ifu_bus_rdata_ff        ;
-   logic [1:0]                    ifu_bus_rresp_ff          ;
-   logic                          ifu_bus_rsp_valid ;
-   logic                          ifu_bus_rsp_ready ;
-   logic [pt.IFU_BUS_TAG-1:0]     ifu_bus_rsp_tag;
-   logic [63:0]                   ifu_bus_rsp_rdata;
-   logic [1:0]                    ifu_bus_rsp_opc;
-
-   logic [pt.ICACHE_NUM_BEATS-1:0]    write_fill_data;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    wr_data_c1_clk;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]    byp_fetch_index;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_1;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]    byp_fetch_index_inc;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_1;
-   logic          miss_buff_hit_unq_f ;
-   logic          stream_hit_f ;
-   logic          stream_miss_f ;
-   logic          stream_eol_f ;
-   logic          crit_byp_hit_f ;
-   logic [pt.IFU_BUS_TAG-1:0] other_tag ;
-   logic [(2*pt.ICACHE_NUM_BEATS)-1:0] [31:0] ic_miss_buff_data;
-   logic [63:0] ic_miss_buff_half;
-   logic        scnd_miss_req, scnd_miss_req_q;
-   logic        scnd_miss_req_in;
-
-
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_ff;
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_in;
-   logic [38:0]                         iccm_ecc_corr_data_ff;
-   logic                                iccm_ecc_write_status     ;
-   logic                                iccm_rd_ecc_single_err_ff   ;
-   logic                                iccm_error_start;     // start the error fsm
-   logic                                perr_state_en;
-   logic                                miss_state_en;
-
-   logic        busclk;
-   logic        busclk_force;
-   logic        busclk_reset;
-   logic        bus_ifu_bus_clk_en_ff;
-   logic        bus_ifu_bus_clk_en ;
-
-   logic        ifc_bus_ic_req_ff_in;
-   logic        ifu_bus_cmd_valid ;
-   logic        ifu_bus_cmd_ready ;
-
-   logic        bus_inc_data_beat_cnt     ;
-   logic        bus_reset_data_beat_cnt   ;
-   logic        bus_hold_data_beat_cnt    ;
-
-   logic        bus_inc_cmd_beat_cnt     ;
-   logic        bus_reset_cmd_beat_cnt_0   ;
-   logic        bus_reset_cmd_beat_cnt_secondlast   ;
-   logic        bus_hold_cmd_beat_cnt    ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_data_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_data_beat_count      ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_cmd_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_cmd_beat_count      ;
-
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_rd_addr_count;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_rd_addr_count;
-
-
-   logic        bus_cmd_sent           ;
-   logic        bus_last_data_beat     ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren            ;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren_last       ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]       wren_reset_miss      ;
-   logic        ifc_dma_access_ok_d;
-   logic        ifc_dma_access_ok_prev;
-
-   logic   bus_cmd_req_in ;
-   logic   bus_cmd_req_hold ;
-
-   logic   second_half_available ;
-   logic   write_ic_16_bytes ;
-
-   logic   ifc_region_acc_fault_final_bf;
-   logic   ifc_region_acc_fault_memory_bf;
-   logic   ifc_region_acc_fault_memory_f;
-   logic   ifc_region_acc_okay;
-
-   logic   iccm_correct_ecc;
-   logic   dma_sb_err_state, dma_sb_err_state_ff;
-   logic   two_byte_instr;
-
-   typedef enum logic [2:0] {IDLE=3'b000, CRIT_BYP_OK=3'b001, HIT_U_MISS=3'b010, MISS_WAIT=3'b011,CRIT_WRD_RDY=3'b100,SCND_MISS=3'b101,STREAM=3'b110 , STALL_SCND_MISS=3'b111} miss_state_t;
-   miss_state_t miss_state, miss_nxtstate;
-
-   typedef enum logic [1:0] {ERR_STOP_IDLE=2'b00, ERR_FETCH1=2'b01 , ERR_FETCH2=2'b10 , ERR_STOP_FETCH=2'b11} err_stop_state_t;
-   err_stop_state_t err_stop_state, err_stop_nxtstate;
-   logic   err_stop_state_en ;
-   logic   err_stop_fetch ;
-
-   logic   ic_crit_wd_rdy;         // Critical fetch is ready to be bypassed.
-
-   logic   ifu_bp_hit_taken_q_f;
-   logic   ifu_bus_rvalid_unq;
-   logic   bus_cmd_beat_en;
-
-
-// ---- Clock gating section -----
-// c1 clock enables
-
-
-   assign fetch_bf_f_c1_clken  = ifc_fetch_req_bf_raw | ifc_fetch_req_f | miss_pending | exu_flush_final | scnd_miss_req;
-   assign debug_c1_clken       = ic_debug_rd_en | ic_debug_wr_en ;
-   // C1 - 1 clock pulse for data
-`ifdef RV_FPGA_OPTIMIZE
-   assign fetch_bf_f_c1_clk = 1'b0;
-   assign debug_c1_clk      = 1'b0;
-`else
-   rvclkhdr fetch_bf_f_c1_cgc    ( .en(fetch_bf_f_c1_clken),     .l1clk(fetch_bf_f_c1_clk), .* );
-   rvclkhdr debug_c1_cgc         ( .en(debug_c1_clken),          .l1clk(debug_c1_clk), .* );
-`endif
-
-
-// ------ end clock gating section ------------------------
-
-   logic [1:0]    iccm_single_ecc_error;
-   logic          dma_iccm_req_f ;
-   assign iccm_dma_sb_error     = (|iccm_single_ecc_error[1:0] )  & dma_iccm_req_f ;
-   assign ifu_async_error_start = iccm_rd_ecc_single_err | ic_error_start;
-
-
-   typedef enum logic [2:0] {ERR_IDLE=3'b000, IC_WFF=3'b001 , ECC_WFF=3'b010 , ECC_CORR=3'b011, DMA_SB_ERR=3'b100} perr_state_t;
-   perr_state_t perr_state, perr_nxtstate;
-
-
-   assign ic_dma_active = iccm_correct_ecc | (perr_state == DMA_SB_ERR) | (err_stop_state == ERR_STOP_FETCH) | err_stop_fetch |
-                          dec_tlu_flush_err_wb; // The last term is to give a error-correction a chance to finish before refetch starts
-
-   assign scnd_miss_req_in     = ifu_bus_rsp_valid & bus_ifu_bus_clk_en & ifu_bus_rsp_ready &
-                                 (&bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]) &
-                                 ~uncacheable_miss_ff &  ((miss_state == SCND_MISS) | (miss_nxtstate == SCND_MISS)) & ~exu_flush_final;
-
-   assign ifu_bp_hit_taken_q_f = ifu_bp_hit_taken_f & ic_hit_f ;
-
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   // FIFO state machine
-   always_comb begin : MISS_SM
-      miss_nxtstate   = IDLE;
-      miss_state_en   = 1'b0;
-      case (miss_state)
-         IDLE: begin : idle
-                  miss_nxtstate = (ic_act_miss_f & ~exu_flush_final) ? CRIT_BYP_OK : HIT_U_MISS ;
-                  miss_state_en = ic_act_miss_f & ~dec_tlu_force_halt ;
-         end
-         CRIT_BYP_OK: begin : crit_byp_ok
-                  miss_nxtstate =  (dec_tlu_force_halt ) ?                                                                             IDLE :
-                                  ( ic_byp_hit_f &  (last_data_recieved_ff | (bus_ifu_wr_en_ff & last_beat)) &  uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f &  ~last_data_recieved_ff                                &  uncacheable_miss_ff) ? MISS_WAIT :
-                                  (~ic_byp_hit_f &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       &  uncacheable_miss_ff) ? CRIT_WRD_RDY :
-                                  (                                      (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f  &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  ( bus_ifu_wr_en_ff &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  (~ic_byp_hit_f  &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( (exu_flush_final | ifu_bp_hit_taken_q_f)  & ~(bus_ifu_wr_en_ff & last_beat)                      ) ? HIT_U_MISS : IDLE;
-                  miss_state_en =  dec_tlu_force_halt | exu_flush_final | ic_byp_hit_f | ifu_bp_hit_taken_q_f | (bus_ifu_wr_en_ff & last_beat) | (bus_ifu_wr_en_ff & ~uncacheable_miss_ff)  ;
-         end
-         CRIT_WRD_RDY: begin : crit_wrd_rdy
-                  miss_nxtstate =  IDLE ;
-                  miss_state_en =  exu_flush_final | flush_final_f | ic_byp_hit_f | dec_tlu_force_halt  ;
-         end
-         STREAM: begin : stream
-                  miss_nxtstate =  ((exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ) & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =    exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f   |  (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         MISS_WAIT: begin : miss_wait
-                  miss_nxtstate =  (exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =   exu_flush_final | (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         HIT_U_MISS: begin : hit_u_miss
-                  miss_nxtstate =  ic_miss_under_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? SCND_MISS :
-                                   ic_ignore_2nd_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? STALL_SCND_MISS : IDLE  ;
-                  miss_state_en = (bus_ifu_wr_en_ff & last_beat) | ic_miss_under_miss_f | ic_ignore_2nd_miss_f | dec_tlu_force_halt;
-         end
-         SCND_MISS: begin : scnd_miss
-                  miss_nxtstate   = dec_tlu_force_halt ? IDLE  :
-                                    exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : CRIT_BYP_OK;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         STALL_SCND_MISS: begin : stall_scnd_miss
-                  miss_nxtstate   =  dec_tlu_force_halt ? IDLE  :
-                                     exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : IDLE;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         default: begin : def_case
-                  miss_nxtstate   = IDLE;
-                  miss_state_en   = 1'b0;
-         end
-      endcase
-   end
-   rvdffs #(($bits(miss_state_t))) miss_state_ff (.clk(active_clk), .din(miss_nxtstate), .dout({miss_state}), .en(miss_state_en),   .*);
-
-  logic    sel_hold_imb     ;
-
-   assign miss_pending       =  (miss_state != IDLE) ;
-   assign crit_wd_byp_ok_ff  =  (miss_state == CRIT_BYP_OK) | ((miss_state == CRIT_WRD_RDY) & ~flush_final_f);
-   assign sel_hold_imb       =  (miss_pending & ~(bus_ifu_wr_en_ff & last_beat) & ~((miss_state == CRIT_WRD_RDY) & exu_flush_final) &
-                              ~((miss_state == CRIT_WRD_RDY) & crit_byp_hit_f) ) | ic_act_miss_f |
-                                (miss_pending & (miss_nxtstate == CRIT_WRD_RDY)) ;
-
-
-   logic         sel_hold_imb_scnd;
-   logic  [31:1] imb_scnd_in;
-   logic  [31:1] imb_scnd_ff;
-   logic         uncacheable_miss_scnd_in ;
-   logic         uncacheable_miss_scnd_ff ;
-
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_in;
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_ff;
-
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_in;
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_ff;
-
-   assign sel_hold_imb_scnd                                =((miss_state == SCND_MISS) | ic_miss_under_miss_f) & ~flush_final_f ;
-   assign way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0] = (miss_state == SCND_MISS) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] : {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]          = (miss_state == SCND_MISS) ? tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]          : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}});
-   assign uncacheable_miss_scnd_in   = sel_hold_imb_scnd ? uncacheable_miss_scnd_ff : ifc_fetch_uncacheable_bf ;
-
-
-   rvdff_fpga #(1)  unc_miss_scnd_ff    (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din (uncacheable_miss_scnd_in), .dout(uncacheable_miss_scnd_ff));
-   rvdffpcie #(31) imb_f_scnd_ff       (.*, .en(fetch_bf_f_c1_clken),  .din ({imb_scnd_in[31:1]}), .dout({imb_scnd_ff[31:1]}));
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_scnd_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_scnd_ff      (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-
-
-
-   assign ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] = bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] ;
-   assign ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3]  = ifu_bus_rid_ff[pt.ICACHE_BEAT_BITS-1:0] & {pt.ICACHE_BEAT_BITS{bus_ifu_wr_en_ff}};
-   // NOTE: Cacheline size is 16 bytes in this example.
-   // Tag     Index  Bank Offset
-   // [31:16] [15:5] [4]  [3:0]
-
-
-   assign fetch_req_icache_f   = ifc_fetch_req_f & ~ifc_iccm_access_f & ~ifc_region_acc_fault_final_f;
-   assign fetch_req_iccm_f     = ifc_fetch_req_f &  ifc_iccm_access_f;
-
-   assign ic_iccm_hit_f        = fetch_req_iccm_f  &  (~miss_pending | (miss_state==HIT_U_MISS) | (miss_state==STREAM));
-   assign ic_byp_hit_f         = (crit_byp_hit_f | stream_hit_f)  & fetch_req_icache_f &  miss_pending ;
-   assign ic_act_hit_f         = (|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) & fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff;
-   assign ic_act_miss_f        = (((~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & ~miss_pending) | scnd_miss_req) & ~ifc_region_acc_fault_final_f;
-   assign ic_miss_under_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   (imb_ff[31:pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO]) & ~uncacheable_miss_ff & ~sel_mb_addr_ff & ~ifc_region_acc_fault_final_f;
-   assign ic_ignore_2nd_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   ((imb_ff[31:pt.ICACHE_TAG_INDEX_LO] == ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO])  |   uncacheable_miss_ff) ;
-   assign ic_hit_f             =  ic_act_hit_f | ic_byp_hit_f | ic_iccm_hit_f | (ifc_region_acc_fault_final_f & ifc_fetch_req_f);
-
-   assign uncacheable_miss_in   = scnd_miss_req ? uncacheable_miss_scnd_ff : sel_hold_imb ? uncacheable_miss_ff : ifc_fetch_uncacheable_bf ;
-   assign imb_in[31:1]          = scnd_miss_req ? imb_scnd_ff[31:1]        : sel_hold_imb ? imb_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign imb_scnd_in[31:1]     = sel_hold_imb_scnd ? imb_scnd_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign scnd_miss_index_match  =  (imb_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == imb_scnd_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]) & scnd_miss_req & ~ifu_wr_cumulative_err_data;
-   assign way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0] = (scnd_miss_req & ~scnd_miss_index_match) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                        (scnd_miss_req &  scnd_miss_index_match) ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                         miss_pending                            ? way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                                                                  {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]          = scnd_miss_req ? (tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0] | ({pt.ICACHE_NUM_WAYS {scnd_miss_index_match}} & replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0])) :
-                                                         miss_pending ? tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]  : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}}) ;
-
-   assign reset_ic_in           = miss_pending & ~scnd_miss_req_q &  (reset_all_tags |  reset_ic_ff) ;
-
-
-
-   rvdffpcie #(31) ifu_fetch_addr_f_ff (.*, .en(fetch_bf_f_c1_clken), .din ({ifc_fetch_addr_bf[31:1]}), .dout({ifu_fetch_addr_int_f[31:1]}));
-
-   assign vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] = ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1] ;
-
-   rvdffpcie #(31) imb_f_ff        (.*, .en(fetch_bf_f_c1_clken), .din (imb_in[31:1]), .dout(imb_ff[31:1]));
-   rvdff_fpga #(1) unc_miss_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ( uncacheable_miss_in),               .dout( uncacheable_miss_ff));
-
-
-   assign miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]      = (~miss_pending                    ) ? imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] : miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] ;
-
-
-   rvdfflie #(.WIDTH(31-pt.ICACHE_BEAT_ADDR_HI),.LEFT(31-pt.ICACHE_BEAT_ADDR_HI-8)) miss_f_ff       (.*, .en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .din ({miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]}), .dout({miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1]}));
-
-
-
-
-
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_ff (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_ff      (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-   assign ifc_fetch_req_qual_bf  = ifc_fetch_req_bf  & ~((miss_state == CRIT_WRD_RDY) & flush_final_f) & ~stream_miss_f ;// & ~exu_flush_final ;
-
-   assign ifc_fetch_req_f       = ifc_fetch_req_f_raw & ~exu_flush_final ;
-
-   rvdff_fpga #(1) ifu_iccm_acc_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_iccm_access_bf),      .dout(ifc_iccm_access_f));
-   rvdff_fpga #(1) ifu_iccm_reg_acc_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_final_bf), .dout(ifc_region_acc_fault_final_f));
-   rvdff_fpga #(1) rgn_acc_ff          (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_bf),       .dout(ifc_region_acc_fault_f));
-
-
-   assign ifu_ic_req_addr_f[31:3]  = {miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] };
-   assign ifu_ic_mb_empty          = (((miss_state == HIT_U_MISS) | (miss_state == STREAM)) & ~(bus_ifu_wr_en_ff & last_beat)) |  ~miss_pending ;
-   assign ifu_miss_state_idle      = (miss_state == IDLE) ;
-
-
-   assign sel_mb_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff) | reset_tag_valid_for_miss) ;
-   assign ifu_ic_rw_int_addr[31:1] = ({31{ sel_mb_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_addr}}  &  ifc_fetch_addr_bf[31:1] )   ;
-
-   assign sel_mb_status_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff & last_beat & bus_ifu_wr_en_ff_q) | reset_tag_valid_for_miss) ;
-   assign ifu_status_wr_addr[31:1] = ({31{ sel_mb_status_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_status_addr}}  &  ifu_fetch_addr_int_f[31:1] )   ;
-
-
-  assign ic_rw_addr[31:1]      = ifu_ic_rw_int_addr[31:1] ;
-
-
-if (pt.ICACHE_ECC == 1) begin: icache_ecc_1
-   logic [6:0]       ic_wr_ecc;
-   logic [6:0]       ic_miss_buff_ecc;
-   logic [141:0]     ic_wr_16bytes_data ;
-   logic [70:0]      ifu_ic_debug_rd_data_in   ;
-
-                rvecc_encode_64  ic_ecc_encode_64_bus (
-                           .din    (ifu_bus_rdata_ff[63:0]),
-                           .ecc_out(ic_wr_ecc[6:0]));
-                rvecc_encode_64  ic_ecc_encode_64_buff (
-                           .din    (ic_miss_buff_half[63:0]),
-                           .ecc_out(ic_miss_buff_ecc[6:0]));
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  ic_wr_16bytes_data[((71*i)+70): (71*i)];
-   end
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_eccerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f)  | ic_rd_parity_final_err;
-
-
-
-  assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {2'b0,ictag_debug_rd_data[25:21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}}, way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                     ic_debug_rd_data[70:0];
-
-  rvdffe #(71) ifu_debug_data_ff (.*,
-                                  .en (debug_data_clken),
-                                  .din ({
-                                         ifu_ic_debug_rd_data_in[70:0]
-                                         }),
-                                  .dout({
-                                         ifu_ic_debug_rd_data[70:0]
-                                         })
-                                  );
-
-  assign ic_wr_16bytes_data[141:0] =  ifu_bus_rid_ff[0] ? {ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_ecc[6:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_ecc[6:0] ,  ic_miss_buff_half[63:0] , ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] } ;
-
-
-end
-else begin : icache_parity_1
-   logic [3:0]   ic_wr_parity;
-   logic [3:0]   ic_miss_buff_parity;
-   logic [135:0] ic_wr_16bytes_data ;
-   logic [70:0]  ifu_ic_debug_rd_data_in   ;
-    for (genvar i=0 ; i < 4 ; i++) begin : DATA_PGEN
-       rveven_paritygen #(16) par_bus  (.data_in   (ifu_bus_rdata_ff[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_wr_parity[i]));
-       rveven_paritygen #(16) par_buff  (.data_in   (ic_miss_buff_half[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_miss_buff_parity[i]));
-    end
-
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  {3'b0, ic_wr_16bytes_data[((68*i)+67): (68*i)]};
-   end
-
-
-
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_parerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f) | ic_rd_parity_final_err;
-
-   assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {6'b0,ictag_debug_rd_data[21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}},way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                      ic_debug_rd_data[70:0] ;
-
-   rvdffe #(71) ifu_debug_data_ff (.*,
-                                   .en (debug_data_clken),
-                                   .din ({
-                                          ifu_ic_debug_rd_data_in[70:0]
-                                          }),
-                                   .dout({
-                                          ifu_ic_debug_rd_data[70:0]
-                                          })
-                                   );
-
-   assign ic_wr_16bytes_data[135:0] =  ifu_bus_rid_ff[0] ? {ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_parity[3:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_parity[3:0] ,  ic_miss_buff_half[63:0] , ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] } ;
-
-end
-
-
-  assign ifu_wr_data_comb_err       =  bus_ifu_wr_data_error_ff ;
-  assign ifu_wr_cumulative_err      = (ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff) & ~reset_beat_cnt;
-  assign ifu_wr_cumulative_err_data =  ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff ;
-
-
-  assign sel_byp_data     =  (ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK));
-  assign sel_ic_data      = ~(ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK) | (miss_state == MISS_WAIT)) & ~fetch_req_iccm_f & ~ifc_region_acc_fault_final_f;
-
- if (pt.ICCM_ICACHE==1) begin: iccm_icache
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_iccm_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-
-  assign ic_sel_premux_data = sel_iccm_data | sel_byp_data ;
- end
-
-if (pt.ICCM_ONLY == 1 ) begin: iccm_only
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-  assign ic_premux_data = '0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-if (pt.ICACHE_ONLY == 1 ) begin: icache_only
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_sel_premux_data =  sel_byp_data ;
-end
-
-
-if (pt.NO_ICCM_NO_ICACHE == 1 ) begin: no_iccm_no_icache
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_premux_data = 0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-
-  assign ifc_bus_acc_fault_f[1:0]   =  {2{ic_byp_hit_f}} & ifu_byp_data_err_f[1:0] ;
-  assign ic_data_f[31:0]      = ic_final_data[31:0];
-
-
-
-assign fetch_req_f_qual       = ic_hit_f & ~exu_flush_final;
-assign ic_access_fault_f[1:0]  = ({2{ifc_region_acc_fault_final_f}} | ifc_bus_acc_fault_f[1:0])  & {2{~exu_flush_final}};
-assign ic_access_fault_type_f[1:0] = |iccm_rd_ecc_double_err       ? 2'b01 :
-                                     ifc_region_acc_fault_f        ? 2'b10 :
-                                     ifc_region_acc_fault_memory_f ? 2'b11 :  2'b00 ;
-
-  // right justified
-
-assign ic_fetch_val_f[1] = fetch_req_f_qual & ifu_bp_inst_mask_f & ~(vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}}) & (err_stop_state != ERR_FETCH2);
-assign ic_fetch_val_f[0] = fetch_req_f_qual ;
-assign two_byte_instr    =  (ic_data_f[1:0] != 2'b11 )  ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-//  Create full buffer...                                                          //
-/////////////////////////////////////////////////////////////////////////////////////
-     logic [63:0]       ic_miss_buff_data_in;
-     assign ic_miss_buff_data_in[63:0] = ifu_bus_rsp_rdata[63:0];
-
-     for (genvar i=0; i<pt.ICACHE_NUM_BEATS; i++) begin :  wr_flop
-
-        assign write_fill_data[i]        =   bus_ifu_wr_en & (  (pt.IFU_BUS_TAG)'(i)  == ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0]);
-
-        rvdffe #(32) byp_data_0_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[31:0]),
-                                    .dout(ic_miss_buff_data[i*2][31:0])
-                                    );
-
-        rvdffe #(32) byp_data_1_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[63:32]),
-                                    .dout(ic_miss_buff_data[i*2+1][31:0])
-                                    );
-
-        assign ic_miss_buff_data_valid_in[i]  = write_fill_data[i] ? 1'b1  : (ic_miss_buff_data_valid[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_valid_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_valid_in[i]),
-                  .dout(ic_miss_buff_data_valid[i]));
-
-        assign ic_miss_buff_data_error_in[i]  = write_fill_data[i] ? bus_ifu_wr_data_error  : (ic_miss_buff_data_error[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_error_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_error_in[i] ),
-                  .dout(ic_miss_buff_data_error[i]));
-     end
-
-/////////////////////////////////////////////////////////////////////////////////////
-// New bypass ready                                                                //
-/////////////////////////////////////////////////////////////////////////////////////
-   logic   [pt.ICACHE_BEAT_ADDR_HI:1]  bypass_index;
-   logic   [pt.ICACHE_BEAT_ADDR_HI:3]  bypass_index_5_3_inc;
-   logic   bypass_data_ready_in;
-   logic   ic_crit_wd_rdy_new_in;
-
-   assign bypass_index[pt.ICACHE_BEAT_ADDR_HI:1] = imb_ff[pt.ICACHE_BEAT_ADDR_HI:1] ;
-   assign bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3] = bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] + 1 ;
-
-
-   assign bypass_data_ready_in = ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] &  bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      &  bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid_in[bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  bypass_index[2] & bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & (bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}})))   ;
-
-
-
-   assign    ic_crit_wd_rdy_new_in = ( bypass_data_ready_in & crit_wd_byp_ok_ff   &  uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (                        crit_wd_byp_ok_ff   & ~uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (ic_crit_wd_rdy_new_ff & ~fetch_req_icache_f & crit_wd_byp_ok_ff    &  ~exu_flush_final) ;
-
-
-  assign byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:1]          =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1]       ;
-  assign byp_fetch_index_0[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b0} ;
-  assign byp_fetch_index_1[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b1} ;
-  assign byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]      =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3]+1'b1 ;
-  assign byp_fetch_index_inc_0[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b0} ;
-  assign byp_fetch_index_inc_1[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b1} ;
-
-  assign  ifu_byp_data_err_new = (~ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 (~ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] & (ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] | ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )) ;
-
-  assign  ifu_byp_data_err_f[1:0]  =   (ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  ? 2'b11 :
-                                      ( ifu_fetch_addr_int_f[2] &  ifu_fetch_addr_int_f[1] &   ~(ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] ) & (~miss_wrap_f & ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]])) ? 2'b10 : 2'b00;
-
-
-
-
-
-  assign ic_byp_data_only_pre_new[79:0] =  ({80{~ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_0][15:0],ic_miss_buff_data[byp_fetch_index_1][31:0]     , ic_miss_buff_data[byp_fetch_index_0][31:0]}) |
-                                           ({80{ ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_1][15:0],ic_miss_buff_data[byp_fetch_index_inc_0][31:0] , ic_miss_buff_data[byp_fetch_index_1][31:0]}) ;
-
-  assign ic_byp_data_only_new[79:0]      = ~ifu_fetch_addr_int_f[1] ? {ic_byp_data_only_pre_new[79:0]} :
-                                                                      {16'b0,ic_byp_data_only_pre_new[79:16]} ;
-
-  assign miss_wrap_f      =  (imb_ff[pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[pt.ICACHE_TAG_INDEX_LO] ) ;
-
-  assign miss_buff_hit_unq_f  = ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     &  byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] &  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_BITS{1'b1}})))   ;
-
-  assign stream_hit_f     =  (miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) ;
-  assign stream_miss_f    = ~(miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) & ifc_fetch_req_f;
-  assign stream_eol_f     =  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:2] == {pt.ICACHE_BEAT_BITS+1{1'b1}}) & ifc_fetch_req_f & stream_hit_f;
-
-  assign crit_byp_hit_f   =  (miss_buff_hit_unq_f ) & ((miss_state == CRIT_WRD_RDY) | (miss_state==CRIT_BYP_OK)) ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Figure out if you have the data to write.                                       //
-/////////////////////////////////////////////////////////////////////////////////////
-
-assign other_tag[pt.IFU_BUS_TAG-1:0] = {ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:1] , ~ifu_bus_rid_ff[0] } ;
-assign second_half_available      = ic_miss_buff_data_valid[other_tag] ;
-assign write_ic_16_bytes          = second_half_available & bus_ifu_wr_en_ff ;
-assign ic_miss_buff_half[63:0]    = {ic_miss_buff_data[{other_tag,1'b1}],ic_miss_buff_data[{other_tag,1'b0}] } ;
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Parity checking logic for Icache logic.                                         //
-/////////////////////////////////////////////////////////////////////////////////////
-
-
-assign ic_rd_parity_final_err = ic_tag_perr & ~exu_flush_final & sel_ic_data & ~(ifc_region_acc_fault_final_f | (|ifc_bus_acc_fault_f)) &
-                                      (fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff);
-
-logic [pt.ICACHE_NUM_WAYS-1:0]                   perr_err_inv_way;
-logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]   perr_ic_index_ff;
-logic                                         perr_sel_invalidate;
-logic                                         perr_sb_write_status   ;
-
-
-
-   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1)) perr_dat_ff    (.din(ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]), .dout(perr_ic_index_ff[pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]), .en(perr_sb_write_status),  .*);
-
-   assign perr_err_inv_way[pt.ICACHE_NUM_WAYS-1:0]   =  {pt.ICACHE_NUM_WAYS{perr_sel_invalidate}} ;
-   assign iccm_correct_ecc     = (perr_state == ECC_CORR);
-   assign dma_sb_err_state     = (perr_state == DMA_SB_ERR);
-   assign iccm_buf_correct_ecc = iccm_correct_ecc & ~dma_sb_err_state_ff;
-
-
-
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-
-
-   // FIFO state machine
-   always_comb begin  : ERROR_SM
-      perr_nxtstate            = ERR_IDLE;
-      perr_state_en            = 1'b0;
-      perr_sb_write_status     = 1'b0;
-      perr_sel_invalidate      = 1'b0;
-
-      case (perr_state)
-         ERR_IDLE: begin : err_idle
-                  perr_nxtstate         =  iccm_dma_sb_error ? DMA_SB_ERR : (ic_error_start & ~exu_flush_final) ? IC_WFF : ECC_WFF;
-                  perr_state_en         =  (((iccm_error_start | ic_error_start) & ~exu_flush_final) | iccm_dma_sb_error) & ~dec_tlu_force_halt;
-                  perr_sb_write_status  =  perr_state_en;
-         end
-         IC_WFF: begin : icache_wff    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  perr_nxtstate       =  ERR_IDLE ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt ;
-                  perr_sel_invalidate =  (dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb);
-         end
-         ECC_WFF: begin : ecc_wff
-                  perr_nxtstate       =  ((~dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb ) | dec_tlu_force_halt) ? ERR_IDLE : ECC_CORR ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt  ;
-         end
-         DMA_SB_ERR : begin : dma_sb_ecc
-                 perr_nxtstate       = dec_tlu_force_halt ? ERR_IDLE : ECC_CORR;
-                 perr_state_en       = 1'b1;
-         end
-         ECC_CORR: begin : ecc_corr
-                  perr_nxtstate       =  ERR_IDLE  ;
-                  perr_state_en       =   1'b1   ;
-         end
-         default: begin : def_case
-                  perr_nxtstate            = ERR_IDLE;
-                  perr_state_en            = 1'b0;
-                  perr_sb_write_status     = 1'b0;
-                  perr_sel_invalidate      = 1'b0;
-         end
-      endcase
-   end
-
-   rvdffs #(($bits(perr_state_t))) perr_state_ff (.clk(active_clk), .din(perr_nxtstate), .dout({perr_state}), .en(perr_state_en),   .*);
-
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   always_comb begin  : ERROR_STOP_FETCH
-      err_stop_nxtstate            = ERR_STOP_IDLE;
-      err_stop_state_en            = 1'b0;
-      err_stop_fetch               = 1'b0;
-      iccm_correction_state        = 1'b0;
-
-      case (err_stop_state)
-         ERR_STOP_IDLE: begin : err_stop_idle
-                  err_stop_nxtstate         =  ERR_FETCH1;
-                  err_stop_state_en         =  dec_tlu_flush_err_wb & (perr_state  == ECC_WFF) & ~dec_tlu_force_halt;
-         end
-         ERR_FETCH1: begin : err_fetch1    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))   ?  ERR_STOP_FETCH : ifu_fetch_val[0] ? ERR_FETCH2 :  ERR_FETCH1;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | ifu_bp_hit_taken_q_f | dec_tlu_force_halt;
-                  err_stop_fetch          =   ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))  & ~(exu_flush_final | dec_tlu_i0_commit_cmt);
-                  iccm_correction_state   = 1'b1;
-
-        end
-         ERR_FETCH2: begin : err_fetch2    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ifu_fetch_val[0] ?  ERR_STOP_FETCH : ERR_FETCH2;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | dec_tlu_force_halt ;
-                  err_stop_fetch          =   ifu_fetch_val[0] & ~exu_flush_final & ~dec_tlu_i0_commit_cmt ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         ERR_STOP_FETCH: begin : ecc_wff
-                  err_stop_nxtstate       =  ( (dec_tlu_flush_lower_wb & ~dec_tlu_flush_err_wb) | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : dec_tlu_flush_err_wb ? ERR_FETCH1 : ERR_STOP_FETCH ;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb |  dec_tlu_i0_commit_cmt | dec_tlu_force_halt   ;
-                  err_stop_fetch          =  1'b1;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         default: begin : def_case
-                  err_stop_nxtstate            = ERR_STOP_IDLE;
-                  err_stop_state_en            = 1'b0;
-                  err_stop_fetch               = 1'b0 ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-      endcase
-   end
-   rvdffs #(($bits(err_stop_state_t))) err_stop_state_ff (.clk(active_clk), .din(err_stop_nxtstate), .dout({err_stop_state}), .en(err_stop_state_en),   .*);
-
-
-
-   assign bus_ifu_bus_clk_en =  ifu_bus_clk_en ;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign busclk = 1'b0;
-   assign busclk_force = 1'b0;
-`else
-   rvclkhdr bus_clk_f(.en(bus_ifu_bus_clk_en), .l1clk(busclk), .*);
-   rvclkhdr bus_clk(.en(bus_ifu_bus_clk_en | dec_tlu_force_halt), .l1clk(busclk_force), .*);
-`endif
-
-
-
-   assign  scnd_miss_req = scnd_miss_req_q & ~exu_flush_final;
-
-   assign  ifc_bus_ic_req_ff_in  = (ic_act_miss_f | bus_cmd_req_hold | ifu_bus_cmd_valid) & ~dec_tlu_force_halt & ~((bus_cmd_beat_count== {pt.ICACHE_BEAT_BITS{1'b1}}) & ifu_bus_cmd_valid & ifu_bus_cmd_ready & miss_pending);
-
-   rvdff_fpga #(1) bus_ic_req_ff2(.*, .clk(busclk_force), .clken(bus_ifu_bus_clk_en | dec_tlu_force_halt), .rawclk(clk), .din(ifc_bus_ic_req_ff_in), .dout(ifu_bus_cmd_valid));
-
-   assign    bus_cmd_req_in  = (ic_act_miss_f | bus_cmd_req_hold) & ~bus_cmd_sent & ~dec_tlu_force_halt ; // hold until first command sent
-
-
-
-    // AXI command signals
-    //  Read Channel
-    assign ifu_axi_arvalid               =  ifu_bus_cmd_valid ;
-    assign ifu_axi_arid[pt.IFU_BUS_TAG-1:0] = ((pt.IFU_BUS_TAG)'(bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0])) & {pt.IFU_BUS_TAG{ifu_bus_cmd_valid}};
-    assign ifu_axi_araddr[31:0]          =   {ifu_ic_req_addr_f[31:3],3'b0}  & {32{ifu_bus_cmd_valid}};
-    assign ifu_axi_arsize[2:0]           =  3'b011;
-    assign ifu_axi_arprot[2:0]           = 3'b101;
-    assign ifu_axi_arcache[3:0]          = 4'b1111;
-    assign ifu_axi_arregion[3:0]         = ifu_ic_req_addr_f[31:28];
-    assign ifu_axi_arlen[7:0]            = '0;
-    assign ifu_axi_arburst[1:0]          = 2'b01;
-    assign ifu_axi_arqos[3:0]            = '0;
-    assign ifu_axi_arlock                = '0;
-    assign ifu_axi_rready                = 1'b1;
-
-    //  Write Channel
-    assign ifu_axi_awvalid                  = '0 ;
-    assign ifu_axi_awid[pt.IFU_BUS_TAG-1:0] = '0 ;
-    assign ifu_axi_awaddr[31:0]             = '0 ;
-    assign ifu_axi_awsize[2:0]              = '0 ;
-    assign ifu_axi_awprot[2:0]              = '0;
-    assign ifu_axi_awcache[3:0]             = '0 ;
-    assign ifu_axi_awregion[3:0]            = '0 ;
-    assign ifu_axi_awlen[7:0]               = '0;
-    assign ifu_axi_awburst[1:0]             = '0 ;
-    assign ifu_axi_awqos[3:0]               = '0;
-    assign ifu_axi_awlock                   = '0;
-
-    assign ifu_axi_wvalid                =  '0;
-    assign ifu_axi_wstrb[7:0]            =  '0;
-    assign ifu_axi_wdata[63:0]           =  '0;
-    assign ifu_axi_wlast                 =  '0;
-    assign ifu_axi_bready                =  '0;
-
-
-   assign ifu_bus_arready_unq     =  ifu_axi_arready ;
-   assign ifu_bus_rvalid_unq      =  ifu_axi_rvalid ;
-   assign ifu_bus_arvalid         =  ifu_axi_arvalid ;
-
-   rvdff_fpga #(1)               bus_rdy_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arready_unq),            .dout(ifu_bus_arready_unq_ff));
-   rvdff_fpga #(1)               bus_rsp_vld_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_rvalid_unq),             .dout(ifu_bus_rvalid_unq_ff));
-   rvdff_fpga #(1)               bus_cmd_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arvalid),                .dout(ifu_bus_arvalid_ff));
-   rvdff_fpga #(2)               bus_rsp_cmd_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rresp[1:0]),             .dout(ifu_bus_rresp_ff[1:0]));
-   rvdff_fpga #(pt.IFU_BUS_TAG)  bus_rsp_tag_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rid[pt.IFU_BUS_TAG-1:0]),.dout(ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:0]));
-   rvdffe #(64)                  bus_data_ff     (.*, .clk(clk),     .din(ifu_axi_rdata[63:0]),            .dout(ifu_bus_rdata_ff[63:0]), .en(ifu_bus_clk_en & ifu_axi_rvalid));
-
-   assign ifu_bus_cmd_ready = ifu_axi_arready ;
-   assign ifu_bus_rsp_valid = ifu_axi_rvalid ;
-   assign ifu_bus_rsp_ready = ifu_axi_rready ;
-   assign ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0] = ifu_axi_rid[pt.IFU_BUS_TAG-1:0] ;
-   assign ifu_bus_rsp_rdata[63:0] = ifu_axi_rdata[63:0] ;
-   assign ifu_bus_rsp_opc[1:0] = {ifu_axi_rresp[1:0]} ;
-
-
-
-
-
-
-
-
-
-   // Create write signals so we can write to the miss-buffer directly from the bus.
-
-   assign ifu_bus_rvalid            =  ifu_bus_rsp_valid & bus_ifu_bus_clk_en ;
-
-
-
-   assign ifu_bus_arready            =  ifu_bus_arready_unq    & bus_ifu_bus_clk_en    ;
-   assign ifu_bus_arready_ff         =  ifu_bus_arready_unq_ff & bus_ifu_bus_clk_en_ff ;
-
-   assign ifu_bus_rvalid_ff          =  ifu_bus_rvalid_unq_ff & bus_ifu_bus_clk_en_ff ;
-   assign bus_cmd_sent               =  ifu_bus_arvalid & ifu_bus_arready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_inc_data_beat_cnt      = (bus_ifu_wr_en_ff & ~bus_last_data_beat & ~dec_tlu_force_halt) ;
-   assign bus_reset_data_beat_cnt    =  ic_act_miss_f | (bus_ifu_wr_en_ff &  bus_last_data_beat) | dec_tlu_force_halt;
-   assign bus_hold_data_beat_cnt     = ~bus_inc_data_beat_cnt & ~bus_reset_data_beat_cnt ;
-
-   assign bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] = ({pt.ICACHE_BEAT_BITS{bus_reset_data_beat_cnt}} & (pt.ICACHE_BEAT_BITS)'(0)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_data_beat_cnt}}   & (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_data_beat_cnt}}  &  bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-
-   assign last_data_recieved_in =  (bus_ifu_wr_en_ff &  bus_last_data_beat & ~scnd_miss_req) | (last_data_recieved_ff & ~ic_act_miss_f) ;
-
-
-
-// Request Address Count
-   assign bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] = (~miss_pending                    ) ? imb_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           ( bus_cmd_sent                    ) ? (bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] + 3'b001) :
-                                                                                                  bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0];
-
-   rvdff_fpga #(pt.ICACHE_BEAT_BITS)  bus_rd_addr_ff (.*,  .clk(busclk_reset),  .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .din ({bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}), .dout({bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-
-// command beat Count
-   assign bus_inc_cmd_beat_cnt              =  ifu_bus_cmd_valid    &  ifu_bus_cmd_ready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_reset_cmd_beat_cnt_0          =  (ic_act_miss_f        & ~uncacheable_miss_in) | dec_tlu_force_halt ;
-   assign bus_reset_cmd_beat_cnt_secondlast =  ic_act_miss_f        &  uncacheable_miss_in ;
-   assign bus_hold_cmd_beat_cnt             = ~bus_inc_cmd_beat_cnt & ~(ic_act_miss_f | scnd_miss_req | dec_tlu_force_halt) ;
-   assign bus_cmd_beat_en                   =  bus_inc_cmd_beat_cnt | ic_act_miss_f | dec_tlu_force_halt;
-
-   assign bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] =  ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_0}}       & (pt.ICACHE_BEAT_BITS)'(0) ) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_secondlast}} & (pt.ICACHE_BEAT_BITS)'(pt.ICACHE_SCND_LAST)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_cmd_beat_cnt}}              & (bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}}, 1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_cmd_beat_cnt}}             &  bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]) ;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign busclk_reset = 1'b0;
-`else
-   rvclkhdr bus_clk_reset(.en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .l1clk(busclk_reset), .*);
-`endif
-
-
-
-   rvdffs_fpga #(pt.ICACHE_BEAT_BITS)  bus_cmd_beat_ff (.*, .clk(busclk_reset), .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .en (bus_cmd_beat_en), .din ({bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}),
-                    .dout({bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-    assign bus_last_data_beat     =  uncacheable_miss_ff ? (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] == {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1}) : (&bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-   assign  bus_ifu_wr_en            =  ifu_bus_rvalid     & miss_pending ;
-   assign  bus_ifu_wr_en_ff         =  ifu_bus_rvalid_ff  & miss_pending ;
-   assign  bus_ifu_wr_en_ff_q       =  ifu_bus_rvalid_ff  & miss_pending & ~uncacheable_miss_ff & ~(|ifu_bus_rresp_ff[1:0]) & write_ic_16_bytes; // qualify with no-error conditions ;
-   assign  bus_ifu_wr_en_ff_wo_err  =  ifu_bus_rvalid_ff & miss_pending &  ~uncacheable_miss_ff;
-
-
-   rvdffie #(10) misc_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {ic_act_miss_f,        ifu_wr_cumulative_err,exu_flush_final,  ic_crit_wd_rdy_new_in,bus_ifu_bus_clk_en,   scnd_miss_req_in,bus_cmd_req_in,  last_data_recieved_in,
-ifc_dma_access_ok_d,   dma_iccm_req}),
-         .dout({ic_act_miss_f_delayed,ifu_wr_data_comb_err_ff,  flush_final_f,ic_crit_wd_rdy_new_ff,bus_ifu_bus_clk_en_ff,scnd_miss_req_q, bus_cmd_req_hold,last_data_recieved_ff,
-ifc_dma_access_ok_prev,dma_iccm_req_f})
-         );
-
-   rvdffie #(.WIDTH(pt.ICACHE_BEAT_BITS+5),.OVERRIDE(1)) misc1_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {reset_ic_in,sel_mb_addr,   bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],ifc_region_acc_fault_memory_bf,ic_debug_rd_en,       ic_debug_rd_en_ff}),
-         .dout({reset_ic_ff,sel_mb_addr_ff,bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],    ifc_region_acc_fault_memory_f, ic_debug_rd_en_ff,ifu_ic_debug_rd_data_valid})
-         );
-
-   assign    reset_tag_valid_for_miss = ic_act_miss_f_delayed & (miss_state == CRIT_BYP_OK) & ~uncacheable_miss_ff;
-   assign    bus_ifu_wr_data_error    = |ifu_bus_rsp_opc[1:0] &  ifu_bus_rvalid  & miss_pending;
-   assign    bus_ifu_wr_data_error_ff = |ifu_bus_rresp_ff[1:0] &  ifu_bus_rvalid_ff  & miss_pending;
-
-
-   assign ic_crit_wd_rdy   =  ic_crit_wd_rdy_new_in | ic_crit_wd_rdy_new_ff ;
-   assign last_beat        =  bus_last_data_beat & bus_ifu_wr_en_ff;
-   assign reset_beat_cnt    = bus_reset_data_beat_cnt ;
-
-// DMA
-   // Making sure that the dma_access is allowed when we have 2 back to back dma_access_ok. Also gating with current state == idle
-   assign ifc_dma_access_ok_d  = ifc_dma_access_ok &  ~iccm_correct_ecc & ~iccm_dma_sb_error;
-   assign ifc_dma_access_q_ok  = ifc_dma_access_ok &  ~iccm_correct_ecc & ifc_dma_access_ok_prev &  (perr_state == ERR_IDLE)  & ~iccm_dma_sb_error;
-   assign iccm_ready           = ifc_dma_access_q_ok ;
-
-   logic [1:0]        iccm_ecc_word_enable;
-
-    if (pt.ICCM_ENABLE == 1 ) begin: iccm_enabled
-         logic  [3:2] dma_mem_addr_ff  ;
-         logic  iccm_dma_rden    ;
-
-         logic  iccm_dma_ecc_error_in;
-         logic  [13:0] dma_mem_ecc;
-         logic  [63:0] iccm_dma_rdata_in;
-         logic  [31:0] iccm_dma_rdata_1_muxed;
-         logic [1:0] [31:0] iccm_corrected_data;
-         logic [1:0] [06:0] iccm_corrected_ecc;
-
-
-         logic [1:0]        iccm_double_ecc_error;
-
-
-         logic [pt.ICCM_BITS-1:2]       iccm_rw_addr_f;
-
-         logic [31:0]       iccm_corrected_data_f_mux;
-         logic [06:0]       iccm_corrected_ecc_f_mux;
-         logic              iccm_dma_rvalid_in;
-         logic [77:0]       iccm_rdmux_data;
-         logic              iccm_rd_ecc_single_err_hold_in ;
-         logic [2:0]        dma_mem_tag_ff;
-
-
-
-
-         assign iccm_wren          =  (ifc_dma_access_q_ok & dma_iccm_req &  dma_mem_write) | iccm_correct_ecc;
-         assign iccm_rden          =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write) | (ifc_iccm_access_bf & ifc_fetch_req_bf);
-         assign iccm_dma_rden      =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write)                     ;
-         assign iccm_wr_size[2:0]  =  {3{dma_iccm_req}}    & dma_mem_sz[2:0] ;
-
-         rvecc_encode  iccm_ecc_encode0 (
-                           .din(dma_mem_wdata[31:0]),
-                           .ecc_out(dma_mem_ecc[6:0]));
-
-         rvecc_encode  iccm_ecc_encode1 (
-                           .din(dma_mem_wdata[63:32]),
-                           .ecc_out(dma_mem_ecc[13:7]));
-
-        assign iccm_wr_data[77:0]   =  (iccm_correct_ecc & ~(ifc_dma_access_q_ok & dma_iccm_req)) ?  {iccm_ecc_corr_data_ff[38:0], iccm_ecc_corr_data_ff[38:0]} :
-                                       {dma_mem_ecc[13:7],dma_mem_wdata[63:32], dma_mem_ecc[6:0],dma_mem_wdata[31:0]};
-
-         assign iccm_dma_rdata_1_muxed[31:0] = dma_mem_addr_ff[2] ?  iccm_corrected_data[0][31:0] : iccm_corrected_data[1][31:0] ;
-         assign iccm_dma_rdata_in[63:0]      = iccm_dma_ecc_error_in ? {2{dma_mem_addr[31:0]}} : {iccm_dma_rdata_1_muxed[31:0], iccm_corrected_data[0]};
-         assign iccm_dma_ecc_error_in   =   |(iccm_double_ecc_error[1:0]);
-
-         rvdffe    #(64) dma_data_ff      (.*, .clk(clk), .en(iccm_dma_rvalid_in),  .din(iccm_dma_rdata_in[63:0]), .dout(iccm_dma_rdata[63:0]));
-         rvdffie   #(11) dma_misc_bits    (.*, .clk(free_l2clk), .din({dma_mem_tag[2:0],
-                                                                       dma_mem_tag_ff[2:0],
-                                                                       dma_mem_addr[3:2],
-                                                                       iccm_dma_rden,
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_ecc_error_in }),
-                                                                .dout({dma_mem_tag_ff[2:0],
-                                                                       iccm_dma_rtag[2:0],
-                                                                       dma_mem_addr_ff[3:2],
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_rvalid,
-                                                                       iccm_dma_ecc_error }));
-
-         assign iccm_rw_addr[pt.ICCM_BITS-1:1]    = (  ifc_dma_access_q_ok & dma_iccm_req  & ~iccm_correct_ecc) ? dma_mem_addr[pt.ICCM_BITS-1:1] :
-                                                 (~(ifc_dma_access_q_ok & dma_iccm_req) &  iccm_correct_ecc) ? {iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2],1'b0} : ifc_fetch_addr_bf[pt.ICCM_BITS-1:1] ;
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// ECC checking logic for ICCM data.                                               //
-/////////////////////////////////////////////////////////////////////////////////////
-
-  logic [3:0] ic_fetch_val_int_f;
-  logic [3:0] ic_fetch_val_shift_right;
-  assign ic_fetch_val_int_f[3:0] = {2'b00 , ic_fetch_val_f[1:0] } ;
-  assign ic_fetch_val_shift_right[3:0] = {ic_fetch_val_int_f << ifu_fetch_addr_int_f[1] } ;
-
-   assign iccm_rdmux_data[77:0] = iccm_rd_data_ecc[77:0];
-   for (genvar i=0; i < 2 ; i++) begin : ICCM_ECC_CHECK
-      assign iccm_ecc_word_enable[i] = ((|ic_fetch_val_shift_right[(2*i+1):(2*i)] & ~exu_flush_final & sel_iccm_data) | iccm_dma_rvalid_in) & ~dec_tlu_core_ecc_disable;
-   rvecc_decode  ecc_decode (
-                           .en(iccm_ecc_word_enable[i]),
-                           .sed_ded ( 1'b0 ),    // 1 : means only detection
-                           .din(iccm_rdmux_data[(39*i+31):(39*i)]),
-                           .ecc_in(iccm_rdmux_data[(39*i+38):(39*i+32)]),
-                           .dout(iccm_corrected_data[i][31:0]),
-                           .ecc_out(iccm_corrected_ecc[i][6:0]),
-                           .single_ecc_error(iccm_single_ecc_error[i]),
-                           .double_ecc_error(iccm_double_ecc_error[i]));
-end
-
-  assign iccm_rd_ecc_single_err  = (|iccm_single_ecc_error[1:0] ) & ifc_iccm_access_f & ifc_fetch_req_f;
-  assign iccm_rd_ecc_double_err[1:0]  = ~ifu_fetch_addr_int_f[1] ? ({iccm_double_ecc_error[0], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} :
-                                                                   ({iccm_double_ecc_error[1], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} ;
-
-  assign iccm_corrected_data_f_mux[31:0] = iccm_single_ecc_error[0] ? iccm_corrected_data[0] : iccm_corrected_data[1];
-  assign iccm_corrected_ecc_f_mux[6:0]   = iccm_single_ecc_error[0] ? iccm_corrected_ecc[0]  : iccm_corrected_ecc[1];
-
-  assign iccm_ecc_write_status           = ((iccm_rd_ecc_single_err & ~iccm_rd_ecc_single_err_ff)  & ~exu_flush_final) | iccm_dma_sb_error;
-  assign iccm_rd_ecc_single_err_hold_in  = (iccm_rd_ecc_single_err | iccm_rd_ecc_single_err_ff) & ~exu_flush_final ;
-  assign iccm_error_start                =  iccm_rd_ecc_single_err;
-  assign iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2] = iccm_single_ecc_error[0] ? iccm_rw_addr_f[pt.ICCM_BITS-1:2] : iccm_rw_addr_f[pt.ICCM_BITS-1:2] + 1'b1 ;
-
-   rvdffie #(pt.ICCM_BITS-1) iccm_index_f   (.*, .clk(free_l2clk), .din({iccm_rw_addr[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_hold_in
-                                                                                                       }),
-                                                                  .dout({iccm_rw_addr_f[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_ff}));
-
-   rvdffe #((39+(pt.ICCM_BITS-2)))      ecc_dat0_ff  (
-                                                      .clk(clk),
-                                                      .din({iccm_corrected_ecc_f_mux[6:0],  iccm_corrected_data_f_mux[31:0],iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2]}),
-                                                      .dout({iccm_ecc_corr_data_ff[38:0]   ,iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]}),
-                                                      .en(iccm_ecc_write_status),
-                                                      .*
-                                                      );
-
-     end else begin : iccm_disabled
-         assign iccm_dma_rvalid = 1'b0 ;
-         assign iccm_dma_ecc_error = 1'b0 ;
-         assign iccm_dma_rdata[63:0] = '0 ;
-         assign iccm_single_ecc_error = '0 ;
-         assign iccm_dma_rtag         = '0 ;
-
-
-
-
-
-
-         assign iccm_rd_ecc_single_err                 = 1'b0 ;
-         assign iccm_rd_ecc_double_err                 = '0 ;
-         assign iccm_rd_ecc_single_err_ff              = 1'b0 ;
-         assign iccm_error_start                         = 1'b0;
-         assign iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]  =  '0;
-         assign iccm_ecc_corr_data_ff[38:0]            =  '0;
-         assign iccm_ecc_write_status                  =  '0;
-
-
-
-
-
-
-    end
-
-
-////// ICCM signals
-
-
- assign   ic_rd_en    =  (ifc_fetch_req_bf & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf  &
-                            ~(((miss_state == STREAM) & ~miss_state_en)                                       |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en)                                  |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)                              |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en)                                    |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT))  ))  |
-                             ( ifc_fetch_req_bf & exu_flush_final  & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf )     ;
-
-logic   ic_real_rd_wp_unused;
-assign  ic_real_rd_wp_unused  =  (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & ~ic_act_miss_f &
-                            ~(((miss_state == STREAM) & ~miss_state_en) |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en & ~(miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en) |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)  |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_nxtstate == STREAM) &  miss_state_en)  |
-                              ((miss_state == SCND_MISS) & ~miss_state_en))) |
-                          (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & exu_flush_final)  ;
-
-
-assign ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{write_ic_16_bytes}};
-assign ic_write_stall                =  write_ic_16_bytes &  ~((((miss_state== CRIT_BYP_OK) | ((miss_state==STREAM) & ~(exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ))) & ~(bus_ifu_wr_en_ff & last_beat & ~uncacheable_miss_ff)));
-
-
-
-
-///////////////////////////////////////////////////////////////
-// Icache status and LRU
-///////////////////////////////////////////////////////////////
-logic [pt.ICACHE_NUM_WAYS-1:0] ic_tag_valid_unq;
-if (pt.ICACHE_ENABLE == 1 ) begin: icache_enabled
-   assign  ic_valid  = ~ifu_wr_cumulative_err_data & ~(reset_ic_in | reset_ic_ff) & ~reset_tag_valid_for_miss;
-
-   assign ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                           ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                           ifu_status_wr_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-
-   // status
-
-         assign way_status_wr_en_w_debug = way_status_wr_en | (ic_debug_wr_en  & ic_debug_tag_array);
-
-         assign way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]  = (ic_debug_wr_en  & ic_debug_tag_array) ? (pt.ICACHE_STATUS_BITS == 1) ? ic_debug_wr_data[4] : ic_debug_wr_data[6:4] :
-                                                way_status_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-   rvdffie #(.WIDTH(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+1+pt.ICACHE_STATUS_BITS),.OVERRIDE(1))  status_misc_ff
-     (.*,
-      .clk(free_l2clk),
-      .din({ ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO], way_status_wr_en_w_debug, way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]}),
-      .dout({ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],      way_status_wr_en_ff,      way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]} )
-      );
-
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clken;
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clk;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/8 ; i++) begin : CLK_GRP_WAY_STATUS
-      assign way_status_clken[i] = (ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+3] == i );
-     `ifdef RV_FPGA_OPTIMIZE
-        assign way_status_clk[i] = 1'b0;
-     `else
-           rvclkhdr way_status_cgc ( .en(way_status_clken[i]),   .l1clk(way_status_clk[i]), .* );
-     `endif
-
-
-      for (genvar j=0 ; j<8 ; j++) begin : WAY_STATUS
-         rvdffs_fpga #(pt.ICACHE_STATUS_BITS) ic_way_status (.*,
-                   .clk(way_status_clk[i]),
-                   .clken(way_status_clken[i]),
-                   .rawclk(clk),
-                   .en(((ifu_status_wr_addr_ff[pt.ICACHE_TAG_INDEX_LO+2:pt.ICACHE_TAG_INDEX_LO] == j) & way_status_wr_en_ff)),
-                   .din(way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]),
-                   .dout(way_status_out[8*i+j]));
-      end  // WAY_STATUS
-   end  // CLK_GRP_WAY_STATUS
-
-  always_comb begin : way_status_out_mux
-      way_status[pt.ICACHE_STATUS_BITS-1:0] = '0 ;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : status_mux_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : mux_out
-         way_status[pt.ICACHE_STATUS_BITS-1:0] =  way_status_out[j];
-        end
-      end
-  end
-
-         assign ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                        ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                        ifu_ic_rw_int_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-         assign ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0] = ifu_tag_wren[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] ;
-
-         assign ic_valid_w_debug = (ic_debug_wr_en & ic_debug_tag_array) ? ic_debug_wr_data[0] : ic_valid;
-
-         rvdffie #(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+pt.ICACHE_NUM_WAYS+1) tag_addr_ff (.*,
-                                                                                              .clk(free_l2clk),
-                                                                                              .din({ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                    ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                    ic_valid_w_debug}),
-                                                                                              .dout({ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                     ifu_tag_wren_ff[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                     ic_valid_ff})
-                                                                                              );
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_DEPTH-1:0] ic_tag_valid_out ;
-
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clken ;
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clk   ;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/32 ; i++) begin : CLK_GRP_TAG_VALID
-      for (genvar j=0; j<pt.ICACHE_NUM_WAYS; j++) begin : way_clken
-      if (pt.ICACHE_TAG_DEPTH == 32 ) begin
-        assign tag_valid_clken[i][j] =  ifu_tag_wren_ff[j] | perr_err_inv_way[j] | reset_all_tags;
-      end else begin
-         assign tag_valid_clken[i][j] = (((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  ifu_tag_wren_ff[j] ) |
-                                        ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  perr_err_inv_way[j]) | reset_all_tags);
-      end
-
-     `ifdef RV_FPGA_OPTIMIZE
-        assign tag_valid_clk[i][j]  = 1'b0;
-     `else
-           rvclkhdr way_status_cgc ( .en(tag_valid_clken[i][j]),   .l1clk(tag_valid_clk[i][j]), .* );
-     `endif
-
-
-
-      for (genvar k=0 ; k<32 ; k++) begin : TAG_VALID
-         rvdffs_fpga #(1) ic_way_tagvalid_dup (.*,
-                   .clk(tag_valid_clk[i][j]),
-                   .clken(tag_valid_clken[i][j]),
-                   .rawclk(clk),
-                   .en(((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & ifu_tag_wren_ff[j] ) |
-                       ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & perr_err_inv_way[j]) | reset_all_tags),
-                   .din(ic_valid_ff & ~reset_all_tags & ~perr_sel_invalidate),
-                   .dout(ic_tag_valid_out[j][32*i+k]));
-      end
-      end
-   end
-
-
-  always_comb begin : tag_valid_out_mux
-      ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] = '0;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : tag_valid_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : valid_out
-           for ( int k=0; k<pt.ICACHE_NUM_WAYS; k++) begin
-             ic_tag_valid_unq[k] |= ic_tag_valid_out[k][j];
-        end
-      end
-      end
-  end
-   //   four-way set associative - three bits
-//   each bit represents one branch point in a binary decision tree; let 1
-//   represent that the left side has been referenced more recently than the
-//   right side, and 0 vice-versa
-//
-//              are all 4 ways valid?
-//                   /       \
-//                  |        no, use an invalid way.
-//                  |
-//                  |
-//             bit_0 == 0?             state | replace      ref to | next state
-//               /       \             ------+--------      -------+-----------
-//              y         n             x00  |  way_0      way_0 |    _11
-//             /           \            x10  |  way_1      way_1 |    _01
-//      bit_1 == 0?    bit_2 == 0?      0x1  |  way_2      way_2 |    1_0
-//        /    \          /    \        1x1  |  way_3      way_3 |    0_0
-//       y      n        y      n
-//      /        \      /        \        ('x' means don't care       ('_' means unchanged)
-//    way_0    way_1  way_2     way_3      don't care)
-
-   if (pt.ICACHE_NUM_WAYS == 4) begin: four_way_plru
-   assign replace_way_mb_any[3] = ( way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[3]& tagv_mb_ff[2] &  tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[2] = (~way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[2]& tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[1] = ( way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[1]& tagv_mb_ff[0] ) ;
-   assign replace_way_mb_any[0] = (~way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[0] ) ;
-
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{~exu_flush_final & ic_rd_hit[0]}} & {way_status[2] , 1'b1 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[1]}} & {way_status[2] , 1'b0 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[2]}} & {1'b1 ,way_status[1]  , 1'b0}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[3]}} & {1'b0 ,way_status[1]  , 1'b0}) ;
-
-  assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{replace_way_mb_any[0]}} & {way_status_mb_ff[2] , 1'b1 , 1'b1}) |
-                                   ({3{replace_way_mb_any[1]}} & {way_status_mb_ff[2] , 1'b0 , 1'b1}) |
-                                   ({3{replace_way_mb_any[2]}} & {1'b1 ,way_status_mb_ff[1]  , 1'b0}) |
-                                   ({3{replace_way_mb_any[3]}} & {1'b0 ,way_status_mb_ff[1]  , 1'b0}) ;
-  end
-   else begin : two_ways_plru
-      assign replace_way_mb_any[0]                      = (~way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[0];
-      assign replace_way_mb_any[1]                      = ( way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[1] & tagv_mb_ff[0];
-      assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ic_rd_hit[0];
-      assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = replace_way_mb_any[0];
-
-   end
-  // Make sure to select the way_status_hit_new even when in hit_under_miss.
-  assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = (bus_ifu_wr_en_ff_q  & last_beat )  ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                          way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-
-  assign way_status_wr_en  = (bus_ifu_wr_en_ff_q  & last_beat) | ic_act_hit_f;
-
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin  : bus_wren_loop
-      assign bus_wren[i]           = bus_ifu_wr_en_ff_q & replace_way_mb_any[i] & miss_pending ;
-      assign bus_wren_last[i]      = bus_ifu_wr_en_ff_wo_err & replace_way_mb_any[i] & miss_pending & bus_last_data_beat;
-      assign ifu_tag_wren[i]       = bus_wren_last[i] | wren_reset_miss[i];
-      assign wren_reset_miss[i]    = replace_way_mb_any[i] & reset_tag_valid_for_miss ;
-
-   end
-   assign bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_wren[pt.ICACHE_NUM_WAYS-1:0];
-
-
-end else begin: icache_disabled
-   assign ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]      = '0;
-   assign way_status[pt.ICACHE_STATUS_BITS-1:0]         = '0;
-   assign replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0]    = '0;
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = '0;
-   assign way_status_wr_en                           = '0;
-   assign bus_wren[pt.ICACHE_NUM_WAYS-1:0]              = '0;
-
-end
-
-   assign ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0] = ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{(~fetch_uncacheable_ff & ifc_fetch_req_f_raw) }} ;
-   assign ic_debug_tag_val_rd_out           = |(ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] &  ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{ic_debug_rd_en_ff}}) ;
-///////////////////////////////////////////
-// PMU signals
-///////////////////////////////////////////
-
- assign ifu_pmu_ic_miss_in   = ic_act_miss_f ;
- assign ifu_pmu_ic_hit_in    = ic_act_hit_f  ;
- assign ifu_pmu_bus_error_in = |ifc_bus_acc_fault_f;
- assign ifu_pmu_bus_trxn_in  = bus_cmd_sent ;
- assign ifu_pmu_bus_busy_in  = ifu_bus_arvalid_ff & ~ifu_bus_arready_ff & miss_pending ;
-
-   rvdffie #(9) ifu_pmu_sigs_ff (.*,
-                    .clk (free_l2clk),
-                    .din ({ifc_fetch_uncacheable_bf, ifc_fetch_req_qual_bf, dma_sb_err_state, dec_tlu_fence_i_wb,
-                           ifu_pmu_ic_miss_in,
-                           ifu_pmu_ic_hit_in,
-                           ifu_pmu_bus_error_in,
-                           ifu_pmu_bus_busy_in,
-                           ifu_pmu_bus_trxn_in
-                          }),
-                    .dout({fetch_uncacheable_ff, ifc_fetch_req_f_raw, dma_sb_err_state_ff, reset_all_tags,
-                           ifu_pmu_ic_miss,
-                           ifu_pmu_ic_hit,
-                           ifu_pmu_bus_error,
-                           ifu_pmu_bus_busy,
-                           ifu_pmu_bus_trxn
-                           }));
-
-
-///////////////////////////////////////////////////////
-// Cache debug logic                                 //
-///////////////////////////////////////////////////////
-assign ic_debug_addr[pt.ICACHE_INDEX_HI:3] = dec_tlu_ic_diag_pkt.icache_dicawics[pt.ICACHE_INDEX_HI-3:0] ;
-assign ic_debug_way_enc[01:00]             = dec_tlu_ic_diag_pkt.icache_dicawics[15:14] ;
-
-
-assign ic_debug_tag_array       = dec_tlu_ic_diag_pkt.icache_dicawics[16] ;
-assign ic_debug_rd_en           = dec_tlu_ic_diag_pkt.icache_rd_valid ;
-assign ic_debug_wr_en           = dec_tlu_ic_diag_pkt.icache_wr_valid ;
-
-
-assign ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]        = {(ic_debug_way_enc[1:0] == 2'b11),
-                                                      (ic_debug_way_enc[1:0] == 2'b10),
-                                                      (ic_debug_way_enc[1:0] == 2'b01),
-                                                      (ic_debug_way_enc[1:0] == 2'b00) };
-
-assign ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] = {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-assign ic_debug_ict_array_sel_in      =  ic_debug_rd_en & ic_debug_tag_array ;
-
-rvdff_fpga #(01+pt.ICACHE_NUM_WAYS) ifu_debug_sel_ff (.*, .clk (debug_c1_clk),
-                    .clken(debug_c1_clken), .rawclk(clk),
-                    .din ({ic_debug_ict_array_sel_in,
-                           ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]
-                          }),
-                    .dout({ic_debug_ict_array_sel_ff,
-                           ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]
-                           }));
-
-
-
-
-assign debug_data_clken  =  ic_debug_rd_en_ff;
-
-
-
-
-// memory protection  - equation to look identical to the LSU equation
-   assign ifc_region_acc_okay = (~(|{pt.INST_ACCESS_ENABLE0,pt.INST_ACCESS_ENABLE1,pt.INST_ACCESS_ENABLE2,pt.INST_ACCESS_ENABLE3,pt.INST_ACCESS_ENABLE4,pt.INST_ACCESS_ENABLE5,pt.INST_ACCESS_ENABLE6,pt.INST_ACCESS_ENABLE7})) |
-                               (pt.INST_ACCESS_ENABLE0 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK0)) == (pt.INST_ACCESS_ADDR0 | pt.INST_ACCESS_MASK0)) |
-                               (pt.INST_ACCESS_ENABLE1 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK1)) == (pt.INST_ACCESS_ADDR1 | pt.INST_ACCESS_MASK1)) |
-                               (pt.INST_ACCESS_ENABLE2 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK2)) == (pt.INST_ACCESS_ADDR2 | pt.INST_ACCESS_MASK2)) |
-                               (pt.INST_ACCESS_ENABLE3 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK3)) == (pt.INST_ACCESS_ADDR3 | pt.INST_ACCESS_MASK3)) |
-                               (pt.INST_ACCESS_ENABLE4 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK4)) == (pt.INST_ACCESS_ADDR4 | pt.INST_ACCESS_MASK4)) |
-                               (pt.INST_ACCESS_ENABLE5 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK5)) == (pt.INST_ACCESS_ADDR5 | pt.INST_ACCESS_MASK5)) |
-                               (pt.INST_ACCESS_ENABLE6 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK6)) == (pt.INST_ACCESS_ADDR6 | pt.INST_ACCESS_MASK6)) |
-                               (pt.INST_ACCESS_ENABLE7 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK7)) == (pt.INST_ACCESS_ADDR7 | pt.INST_ACCESS_MASK7));
-
-   assign ifc_region_acc_fault_memory_bf   =  ~ifc_iccm_access_bf & ~ifc_region_acc_okay & ifc_fetch_req_bf;
-
-   assign ifc_region_acc_fault_final_bf = ifc_region_acc_fault_bf | ifc_region_acc_fault_memory_bf;
-
-
-
-
-endmodule  // eb1_ifu_mem_ctl
diff --git a/verilog/rtl/BrqRV_EB1/design/include/eb1_def.sv b/verilog/rtl/BrqRV_EB1/design/include/eb1_def.sv
deleted file mode 100644
index 15df549..0000000
--- a/verilog/rtl/BrqRV_EB1/design/include/eb1_def.sv
+++ /dev/null
@@ -1,405 +0,0 @@
-// performance monitor stuff
-//`ifndef eb1_DEF_SV
-//`define eb1_DEF_SV
-package eb1_pkg;
-
-typedef struct packed {
-                       logic  trace_rv_i_valid_ip;
-                       logic [31:0] trace_rv_i_insn_ip;
-                       logic [31:0] trace_rv_i_address_ip;
-                       logic  trace_rv_i_exception_ip;
-                       logic [4:0] trace_rv_i_ecause_ip;
-                       logic  trace_rv_i_interrupt_ip;
-                       logic [31:0] trace_rv_i_tval_ip;
-                       } eb1_trace_pkt_t;
-
-
-typedef enum logic [3:0] {
-                          NULL     = 4'b0000,
-                          MUL      = 4'b0001,
-                          LOAD     = 4'b0010,
-                          STORE    = 4'b0011,
-                          ALU      = 4'b0100,
-                          CSRREAD  = 4'b0101,
-                          CSRWRITE = 4'b0110,
-                          CSRRW    = 4'b0111,
-                          EBREAK   = 4'b1000,
-                          ECALL    = 4'b1001,
-                          FENCE    = 4'b1010,
-                          FENCEI   = 4'b1011,
-                          MRET     = 4'b1100,
-                          CONDBR   = 4'b1101,
-                          JAL      = 4'b1110,
-                          BITMANIPU = 4'b1111
-                          } eb1_inst_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic wb;
-                       logic [2:0] tag;
-                       logic [4:0] rd;
-                       } eb1_load_cam_pkt_t;
-
-typedef struct packed {
-                       logic pc0_call;
-                       logic pc0_ret;
-                       logic pc0_pc4;
-                       } eb1_rets_pkt_t;
-typedef struct packed {
-                       logic valid;
-                       logic [11:0] toffset;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic  bank;
-                       logic [31:1] prett;  // predicted ret target
-                       logic way;
-                       logic ret;
-                       } eb1_br_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic way;
-                       logic middle;
-                       } eb1_br_tlu_pkt_t;
-
-typedef struct packed {
-                       logic misp;
-                       logic ataken;
-                       logic boffset;
-                       logic pc4;
-                       logic [1:0] hist;
-                       logic [11:0] toffset;
-                       logic valid;
-                       logic br_error;
-                       logic br_start_error;
-                       logic pcall;
-                       logic pja;
-                       logic way;
-                       logic pret;
-                       // for power use the pret bit to clock the prett field
-                       logic [31:1] prett;
-                       } eb1_predict_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic icaf;
-                       logic icaf_second;
-                       logic [1:0] icaf_type;
-                       logic fence_i;
-                       logic [3:0] i0trigger;
-                       logic pmu_i0_br_unpred;     // pmu
-                       logic pmu_divide;
-                       // likely to change
-                       logic legal;
-                       logic pmu_lsu_misaligned;
-                       eb1_inst_pkt_t pmu_i0_itype;        // pmu - instruction type
-                       } eb1_trap_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic i0div;
-                       logic csrwen;
-                       logic csrwonly;
-                       logic [11:0] csrwaddr;
-                       // likely to change
-                       logic [4:0] i0rd;
-                       logic i0load;
-                       logic i0store;
-                       logic i0v;
-                       logic i0valid;
-                       } eb1_dest_pkt_t;
-
-typedef struct packed {
-                       logic mul;
-                       logic load;
-                       logic alu;
-                       } eb1_class_pkt_t;
-
-typedef struct packed {
-                       logic [4:0] rs1;
-                       logic [4:0] rs2;
-                       logic [4:0] rd;
-                       } eb1_reg_pkt_t;
-
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic srl;
-                       logic sra;
-                       logic beq;
-                       logic bne;
-                       logic blt;
-                       logic bge;
-                       logic add;
-                       logic sub;
-                       logic slt;
-                       logic unsign;
-                       logic jal;
-                       logic predict_t;
-                       logic predict_nt;
-                       logic csr_write;
-                       logic csr_imm;
-                       } eb1_alu_pkt_t;
-
-typedef struct packed {
-                       logic fast_int;
-/* verilator lint_off SYMRSVDWORD */
-                       logic stack;
-/* verilator lint_on SYMRSVDWORD */
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic dword;  // for dma
-                       logic load;
-                       logic store;
-                       logic unsign;
-                       logic dma;    // dma pkt
-                       logic store_data_bypass_d;
-                       logic load_ldst_bypass_d;
-                       logic store_data_bypass_m;
-                       logic valid;
-                       } eb1_lsu_pkt_t;
-
-typedef struct packed {
-                      logic inst_type;   //0: Load, 1: Store
-                      //logic dma_valid;
-                      logic exc_type;    //0: MisAligned, 1: Access Fault
-                      logic [3:0] mscause;
-                      logic [31:0] addr;
-                      logic single_ecc_error;
-                      logic exc_valid;
-                      } eb1_lsu_error_pkt_t;
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic zbs;
-                       logic bext;
-                       logic bdep;
-                       logic zbe;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic zbc;
-                       logic shfl;
-                       logic unshfl;
-                       logic zbp;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic zbr;
-                       logic bfp;
-                       logic zbf;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic alu;
-                       logic rs1;
-                       logic rs2;
-                       logic imm12;
-                       logic rd;
-                       logic shimm5;
-                       logic imm20;
-                       logic pc;
-                       logic load;
-                       logic store;
-                       logic lsu;
-                       logic add;
-                       logic sub;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic sra;
-                       logic srl;
-                       logic slt;
-                       logic unsign;
-                       logic condbr;
-                       logic beq;
-                       logic bne;
-                       logic bge;
-                       logic blt;
-                       logic jal;
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic csr_read;
-                       logic csr_clr;
-                       logic csr_set;
-                       logic csr_write;
-                       logic csr_imm;
-                       logic presync;
-                       logic postsync;
-                       logic ebreak;
-                       logic ecall;
-                       logic mret;
-                       logic mul;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic div;
-                       logic rem;
-                       logic fence;
-                       logic fence_i;
-                       logic pm_alu;
-                       logic legal;
-                       } eb1_dec_pkt_t;
-
-
-typedef struct packed {
-                       logic valid;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic bext;
-                       logic bdep;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic grev;
-                       logic gorc;
-                       logic shfl;
-                       logic unshfl;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic bfp;
-                       } eb1_mul_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic unsign;
-                       logic rem;
-                       } eb1_div_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ccm_ext_in_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_dccm_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_data_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_tag_ext_in_pkt_t;
-
-
-
-typedef struct packed {
-                        logic        select;
-                        logic        match;
-                        logic        store;
-                        logic        load;
-                        logic        execute;
-                        logic        m;
-                        logic [31:0] tdata2;
-            } eb1_trigger_pkt_t;
-
-
-typedef struct packed {
-                        logic [70:0]  icache_wrdata; // {dicad1[1:0], dicad0h[31:0], dicad0[31:0]}
-                        logic [16:0]  icache_dicawics; // Arraysel:24, Waysel:21:20, Index:16:3
-                        logic         icache_rd_valid;
-                        logic         icache_wr_valid;
-            } eb1_cache_debug_pkt_t;
-//`endif
-
-endpackage // eb1_pkg
diff --git a/verilog/rtl/BrqRV_EB1/design/lib/ahb_to_axi4.sv b/verilog/rtl/BrqRV_EB1/design/lib/ahb_to_axi4.sv
deleted file mode 100644
index 190ed8b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lib/ahb_to_axi4.sv
+++ /dev/null
@@ -1,289 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AHB to AXI4 Bridge
-// Comments:
-//
-//********************************************************************************
-module ahb_to_axi4
-import eb1_pkg::*;
-#(
-   TAG = 1,
-   `include "eb1_param.vh"
-)
-//   ,TAG  = 1)
-(
-   input                   clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-
-   // AXI signals
-   // AXI Write Channels
-   output logic            axi_awvalid,
-   input  logic            axi_awready,
-   output logic [TAG-1:0]  axi_awid,
-   output logic [31:0]     axi_awaddr,
-   output logic [2:0]      axi_awsize,
-   output logic [2:0]      axi_awprot,
-   output logic [7:0]      axi_awlen,
-   output logic [1:0]      axi_awburst,
-
-   output logic            axi_wvalid,
-   input  logic            axi_wready,
-   output logic [63:0]     axi_wdata,
-   output logic [7:0]      axi_wstrb,
-   output logic            axi_wlast,
-
-   input  logic            axi_bvalid,
-   output logic            axi_bready,
-   input  logic [1:0]      axi_bresp,
-   input  logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   output logic            axi_arvalid,
-   input  logic            axi_arready,
-   output logic [TAG-1:0]  axi_arid,
-   output logic [31:0]     axi_araddr,
-   output logic [2:0]      axi_arsize,
-   output logic [2:0]      axi_arprot,
-   output logic [7:0]      axi_arlen,
-   output logic [1:0]      axi_arburst,
-
-   input  logic            axi_rvalid,
-   output logic            axi_rready,
-   input  logic [TAG-1:0]  axi_rid,
-   input  logic [63:0]     axi_rdata,
-   input  logic [1:0]      axi_rresp,
-
-   // AHB-Lite signals
-   input logic [31:0]      ahb_haddr,     // ahb bus address
-   input logic [2:0]       ahb_hburst,    // tied to 0
-   input logic             ahb_hmastlock, // tied to 0
-   input logic [3:0]       ahb_hprot,     // tied to 4'b0011
-   input logic [2:0]       ahb_hsize,     // size of bus transaction (possible values 0,1,2,3)
-   input logic [1:0]       ahb_htrans,    // Transaction type (possible values 0,2 only right now)
-   input logic             ahb_hwrite,    // ahb bus write
-   input logic [63:0]      ahb_hwdata,    // ahb bus write data
-   input logic             ahb_hsel,      // this slave was selected
-   input logic             ahb_hreadyin,  // previous hready was accepted or not
-
-   output logic [63:0]      ahb_hrdata,      // ahb bus read data
-   output logic             ahb_hreadyout,   // slave ready to accept transaction
-   output logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   logic [7:0]       master_wstrb;
-
- typedef enum logic [1:0] {   IDLE   = 2'b00,    // Nothing in the buffer. No commands yet recieved
-                              WR     = 2'b01,    // Write Command recieved
-                              RD     = 2'b10,    // Read Command recieved
-                              PEND   = 2'b11     // Waiting on Read Data from core
-                            } state_t;
-   state_t      buf_state, buf_nxtstate;
-   logic        buf_state_en;
-
-   // Buffer signals (one entry buffer)
-   logic                    buf_read_error_in, buf_read_error;
-   logic [63:0]             buf_rdata;
-
-   logic                    ahb_hready;
-   logic                    ahb_hready_q;
-   logic [1:0]              ahb_htrans_in, ahb_htrans_q;
-   logic [2:0]              ahb_hsize_q;
-   logic                    ahb_hwrite_q;
-   logic [31:0]             ahb_haddr_q;
-   logic [63:0]             ahb_hwdata_q;
-   logic                    ahb_hresp_q;
-
-    //Miscellaneous signals
-   logic                    ahb_addr_in_dccm, ahb_addr_in_iccm, ahb_addr_in_pic;
-   logic                    ahb_addr_in_dccm_region_nc, ahb_addr_in_iccm_region_nc, ahb_addr_in_pic_region_nc;
-   // signals needed for the read data coming back from the core and to block any further commands as AHB is a blocking bus
-   logic                    buf_rdata_en;
-
-   logic                    ahb_addr_clk_en, buf_rdata_clk_en;
-   logic                    bus_clk, ahb_addr_clk, buf_rdata_clk;
-   // Command buffer is the holding station where we convert to AXI and send to core
-   logic                    cmdbuf_wr_en, cmdbuf_rst;
-   logic                    cmdbuf_full;
-   logic                    cmdbuf_vld, cmdbuf_write;
-   logic [1:0]              cmdbuf_size;
-   logic [7:0]              cmdbuf_wstrb;
-   logic [31:0]             cmdbuf_addr;
-   logic [63:0]             cmdbuf_wdata;
-
-// FSM to control the bus states and when to block the hready and load the command buffer
-   always_comb begin
-      buf_nxtstate      = IDLE;
-      buf_state_en      = 1'b0;
-      buf_rdata_en      = 1'b0;              // signal to load the buffer when the core sends read data back
-      buf_read_error_in = 1'b0;              // signal indicating that an error came back with the read from the core
-      cmdbuf_wr_en      = 1'b0;              // all clear from the gasket to load the buffer with the command for reads, command/dat for writes
-      case (buf_state)
-         IDLE: begin  // No commands recieved
-                  buf_nxtstate      = ahb_hwrite ? WR : RD;
-                  buf_state_en      = ahb_hready & ahb_htrans[1] & ahb_hsel;                 // only transition on a valid hrtans
-          end
-         WR: begin // Write command recieved last cycle
-                  buf_nxtstate      = (ahb_hresp | (ahb_htrans[1:0] == 2'b0) | ~ahb_hsel) ? IDLE : ahb_hwrite  ? WR : RD;
-                  buf_state_en      = (~cmdbuf_full | ahb_hresp) ;
-                  cmdbuf_wr_en      = ~cmdbuf_full & ~(ahb_hresp | ((ahb_htrans[1:0] == 2'b01) & ahb_hsel));   // Dont send command to the buffer in case of an error or when the master is not ready with the data now.
-         end
-         RD: begin // Read command recieved last cycle.
-                 buf_nxtstate      = ahb_hresp ? IDLE :PEND;                                       // If error go to idle, else wait for read data
-                 buf_state_en      = (~cmdbuf_full | ahb_hresp);                                   // only when command can go, or if its an error
-                 cmdbuf_wr_en      = ~ahb_hresp & ~cmdbuf_full;                                    // send command only when no error
-         end
-         PEND: begin // Read Command has been sent. Waiting on Data.
-                 buf_nxtstate      = IDLE;                                                          // go back for next command and present data next cycle
-                 buf_state_en      = axi_rvalid & ~cmdbuf_write;                                    // read data is back
-                 buf_rdata_en      = buf_state_en;                                                  // buffer the read data coming back from core
-                 buf_read_error_in = buf_state_en & |axi_rresp[1:0];                                // buffer error flag if return has Error ( ECC )
-         end
-     endcase
-   end // always_comb begin
-
-    rvdffs_fpga #($bits(state_t)) state_reg (.*, .din(buf_nxtstate), .dout({buf_state}), .en(buf_state_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk));
-
-   assign master_wstrb[7:0]   = ({8{ahb_hsize_q[2:0] == 3'b0}}  & (8'b1    << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b1}}  & (8'b11   << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b10}} & (8'b1111 << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b11}} & 8'b1111_1111);
-
-   // AHB signals
-   assign ahb_hreadyout       = ahb_hresp ? (ahb_hresp_q & ~ahb_hready_q) :
-                                         ((~cmdbuf_full | (buf_state == IDLE)) & ~(buf_state == RD | buf_state == PEND)  & ~buf_read_error);
-
-   assign ahb_hready          = ahb_hreadyout & ahb_hreadyin;
-   assign ahb_htrans_in[1:0]  = {2{ahb_hsel}} & ahb_htrans[1:0];
-   assign ahb_hrdata[63:0]    = buf_rdata[63:0];
-   assign ahb_hresp        = ((ahb_htrans_q[1:0] != 2'b0) & (buf_state != IDLE)  &
-
-                             ((~(ahb_addr_in_dccm | ahb_addr_in_iccm)) |                                                                                   // request not for ICCM or DCCM
-                             ((ahb_addr_in_iccm | (ahb_addr_in_dccm &  ahb_hwrite_q)) & ~((ahb_hsize_q[1:0] == 2'b10) | (ahb_hsize_q[1:0] == 2'b11))) |    // ICCM Rd/Wr OR DCCM Wr not the right size
-                             ((ahb_hsize_q[2:0] == 3'h1) & ahb_haddr_q[0])   |                                                                             // HW size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h2) & (|ahb_haddr_q[1:0])) |                                                                          // W size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h3) & (|ahb_haddr_q[2:0])))) |                                                                        // DW size but unaligned
-                             buf_read_error |                                                                                                              // Read ECC error
-                             (ahb_hresp_q & ~ahb_hready_q);
-
-   // Buffer signals - needed for the read data and ECC error response
-   rvdff_fpga  #(.WIDTH(64)) buf_rdata_ff     (.din(axi_rdata[63:0]),   .dout(buf_rdata[63:0]), .clk(buf_rdata_clk), .clken(buf_rdata_clk_en), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))  buf_read_error_ff(.din(buf_read_error_in), .dout(buf_read_error),  .clk(bus_clk),       .clken(bus_clk_en),       .rawclk(clk), .*);          // buf_read_error will be high only one cycle
-
-   // All the Master signals are captured before presenting it to the command buffer. We check for Hresp before sending it to the cmd buffer.
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),          .dout(ahb_hresp_q),       .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),         .dout(ahb_hready_q),      .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans_in[1:0]), .dout(ahb_htrans_q[1:0]), .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(3))  hsize_ff  (.din(ahb_hsize[2:0]),     .dout(ahb_hsize_q[2:0]),  .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),         .dout(ahb_hwrite_q),      .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(32)) haddr_ff  (.din(ahb_haddr[31:0]),    .dout(ahb_haddr_q[31:0]), .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-
-   // Address check  dccm
-   rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                  .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_dccm),
-      .in_region(ahb_addr_in_dccm_region_nc)
-   );
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE == 1) begin: GenICCM
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(ahb_haddr_q[31:0]),
-         .in_range(ahb_addr_in_iccm),
-         .in_region(ahb_addr_in_iccm_region_nc)
-      );
-   end else begin: GenNoICCM
-      assign ahb_addr_in_iccm = '0;
-      assign ahb_addr_in_iccm_region_nc = '0;
-   end
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_pic),
-      .in_region(ahb_addr_in_pic_region_nc)
-   );
-
-   // Command Buffer - Holding for the commands to be sent for the AXI. It will be converted to the AXI signals.
-   assign cmdbuf_rst         = (((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)) & ~cmdbuf_wr_en) | (ahb_hresp & ~cmdbuf_write);
-   assign cmdbuf_full        = (cmdbuf_vld & ~((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)));
-
-   rvdffsc_fpga #(.WIDTH(1))  cmdbuf_vldff      (.din(1'b1),              .dout(cmdbuf_vld),         .en(cmdbuf_wr_en), .clear(cmdbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(1))  cmdbuf_writeff    (.din(ahb_hwrite_q),      .dout(cmdbuf_write),       .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(2))  cmdbuf_sizeff     (.din(ahb_hsize_q[1:0]),  .dout(cmdbuf_size[1:0]),   .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))  cmdbuf_wstrbff    (.din(master_wstrb[7:0]), .dout(cmdbuf_wstrb[7:0]),  .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32)) cmdbuf_addrff     (.din(ahb_haddr_q[31:0]), .dout(cmdbuf_addr[31:0]),  .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffe       #(.WIDTH(64)) cmdbuf_wdataff    (.din(ahb_hwdata[63:0]),  .dout(cmdbuf_wdata[63:0]), .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-
-   // AXI Write Command Channel
-   assign axi_awvalid           = cmdbuf_vld & cmdbuf_write;
-   assign axi_awid[TAG-1:0]     = '0;
-   assign axi_awaddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_awsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_awprot[2:0]       = 3'b0;
-   assign axi_awlen[7:0]        = '0;
-   assign axi_awburst[1:0]      = 2'b01;
-   // AXI Write Data Channel - This is tied to the command channel as we only write the command buffer once we have the data.
-   assign axi_wvalid            = cmdbuf_vld & cmdbuf_write;
-   assign axi_wdata[63:0]       = cmdbuf_wdata[63:0];
-   assign axi_wstrb[7:0]        = cmdbuf_wstrb[7:0];
-   assign axi_wlast             = 1'b1;
-  // AXI Write Response - Always ready. AHB does not require a write response.
-   assign axi_bready            = 1'b1;
-   // AXI Read Channels
-   assign axi_arvalid           = cmdbuf_vld & ~cmdbuf_write;
-   assign axi_arid[TAG-1:0]     = '0;
-   assign axi_araddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_arsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_arprot            = 3'b0;
-   assign axi_arlen[7:0]        = '0;
-   assign axi_arburst[1:0]      = 2'b01;
-   // AXI Read Response Channel - Always ready as AHB reads are blocking and the the buffer is available for the read coming back always.
-   assign axi_rready            = 1'b1;
-
-   // Clock header logic
-   assign ahb_addr_clk_en = bus_clk_en & (ahb_hready & ahb_htrans[1]);
-   assign buf_rdata_clk_en    = bus_clk_en & buf_rdata_en;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign bus_clk = 1'b0;
-   assign ahb_addr_clk = 1'b0;
-   assign buf_rdata_clk = 1'b0;
-`else
-   rvclkhdr bus_cgc       (.en(bus_clk_en),       .l1clk(bus_clk),       .*);
-   rvclkhdr ahb_addr_cgc  (.en(ahb_addr_clk_en),  .l1clk(ahb_addr_clk),  .*);
-   rvclkhdr buf_rdata_cgc (.en(buf_rdata_clk_en), .l1clk(buf_rdata_clk), .*);
-`endif
-
-`ifdef RV_ASSERT_ON
-   property ahb_error_protocol;
-      @(posedge bus_clk) (ahb_hready & ahb_hresp) |-> (~$past(ahb_hready) & $past(ahb_hresp));
-   endproperty
-   assert_ahb_error_protocol: assert property (ahb_error_protocol) else
-      $display("Bus Error with hReady isn't preceded with Bus Error without hready");
-
-`endif
-
-endmodule // ahb_to_axi4
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/design/lib/axi4_to_ahb.sv b/verilog/rtl/BrqRV_EB1/design/lib/axi4_to_ahb.sv
deleted file mode 100644
index 18e5313..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lib/axi4_to_ahb.sv
+++ /dev/null
@@ -1,477 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AXI4 -> AHB Bridge
-// Comments:
-//
-//********************************************************************************
-module axi4_to_ahb
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-,parameter TAG  = 1) (
-
-   input                   clk,
-   input                   free_clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-   input                   dec_tlu_force_halt,
-
-   // AXI signals
-   // AXI Write Channels
-   input  logic            axi_awvalid,
-   output logic            axi_awready,
-   input  logic [TAG-1:0]  axi_awid,
-   input  logic [31:0]     axi_awaddr,
-   input  logic [2:0]      axi_awsize,
-   input  logic [2:0]      axi_awprot,
-
-   input  logic            axi_wvalid,
-   output logic            axi_wready,
-   input  logic [63:0]     axi_wdata,
-   input  logic [7:0]      axi_wstrb,
-   input  logic            axi_wlast,
-
-   output logic            axi_bvalid,
-   input  logic            axi_bready,
-   output logic [1:0]      axi_bresp,
-   output logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   input  logic            axi_arvalid,
-   output logic            axi_arready,
-   input  logic [TAG-1:0]  axi_arid,
-   input  logic [31:0]     axi_araddr,
-   input  logic [2:0]      axi_arsize,
-   input  logic [2:0]      axi_arprot,
-
-   output logic            axi_rvalid,
-   input  logic            axi_rready,
-   output logic [TAG-1:0]  axi_rid,
-   output logic [63:0]     axi_rdata,
-   output logic [1:0]      axi_rresp,
-   output logic            axi_rlast,
-
-   // AHB-Lite signals
-   output logic [31:0]     ahb_haddr,       // ahb bus address
-   output logic [2:0]      ahb_hburst,      // tied to 0
-   output logic            ahb_hmastlock,   // tied to 0
-   output logic [3:0]      ahb_hprot,       // tied to 4'b0011
-   output logic [2:0]      ahb_hsize,       // size of bus transaction (possible values 0,1,2,3)
-   output logic [1:0]      ahb_htrans,      // Transaction type (possible values 0,2 only right now)
-   output logic            ahb_hwrite,      // ahb bus write
-   output logic [63:0]     ahb_hwdata,      // ahb bus write data
-
-   input logic [63:0]      ahb_hrdata,      // ahb bus read data
-   input logic             ahb_hready,      // slave ready to accept transaction
-   input logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   localparam ID   = 1;
-   localparam PRTY = 1;
-   typedef enum logic [2:0] {IDLE=3'b000, CMD_RD=3'b001, CMD_WR=3'b010, DATA_RD=3'b011, DATA_WR=3'b100, DONE=3'b101, STREAM_RD=3'b110, STREAM_ERR_RD=3'b111} state_t;
-   state_t buf_state, buf_nxtstate;
-
-   logic             slave_valid;
-   logic             slave_ready;
-   logic [TAG-1:0]   slave_tag;
-   logic [63:0]      slave_rdata;
-   logic [3:0]       slave_opc;
-
-   logic             wrbuf_en, wrbuf_data_en;
-   logic             wrbuf_cmd_sent, wrbuf_rst;
-   logic             wrbuf_vld;
-   logic             wrbuf_data_vld;
-   logic [TAG-1:0]   wrbuf_tag;
-   logic [2:0]       wrbuf_size;
-   logic [31:0]      wrbuf_addr;
-   logic [63:0]      wrbuf_data;
-   logic [7:0]       wrbuf_byteen;
-
-   logic             master_valid;
-   logic             master_ready;
-   logic [TAG-1:0]   master_tag;
-   logic [31:0]      master_addr;
-   logic [63:0]      master_wdata;
-   logic [2:0]       master_size;
-   logic [2:0]       master_opc;
-   logic [7:0]       master_byteen;
-
-   // Buffer signals (one entry buffer)
-   logic [31:0]                buf_addr;
-   logic [1:0]                 buf_size;
-   logic                       buf_write;
-   logic [7:0]                 buf_byteen;
-   logic                       buf_aligned;
-   logic [63:0]                buf_data;
-   logic [TAG-1:0]             buf_tag;
-
-   //Miscellaneous signals
-   logic                       buf_rst;
-   logic [TAG-1:0]             buf_tag_in;
-   logic [31:0]                buf_addr_in;
-   logic [7:0]                 buf_byteen_in;
-   logic [63:0]                buf_data_in;
-   logic                       buf_write_in;
-   logic                       buf_aligned_in;
-   logic [2:0]                 buf_size_in;
-
-   logic                       buf_state_en;
-   logic                       buf_wr_en;
-   logic                       buf_data_wr_en;
-   logic                       slvbuf_error_en;
-   logic                       wr_cmd_vld;
-
-   logic                       cmd_done_rst, cmd_done, cmd_doneQ;
-   logic                       trxn_done;
-   logic [2:0]                 buf_cmd_byte_ptr, buf_cmd_byte_ptrQ, buf_cmd_nxtbyte_ptr;
-   logic                       buf_cmd_byte_ptr_en;
-   logic                       found;
-
-   logic                       slave_valid_pre;
-   logic                       ahb_hready_q;
-   logic                       ahb_hresp_q;
-   logic [1:0]                 ahb_htrans_q;
-   logic                       ahb_hwrite_q;
-   logic [63:0]                ahb_hrdata_q;
-
-
-   logic                       slvbuf_write;
-   logic                       slvbuf_error;
-   logic [TAG-1:0]             slvbuf_tag;
-
-   logic                       slvbuf_error_in;
-   logic                       slvbuf_wr_en;
-   logic                       bypass_en;
-   logic                       rd_bypass_idle;
-
-   logic                       last_addr_en;
-   logic [31:0]                last_bus_addr;
-
-   // Clocks
-   logic                       buf_clken;
-   logic                       ahbm_data_clken;
-
-   logic                       buf_clk;
-   logic                       bus_clk;
-   logic                       ahbm_data_clk;
-
-   logic                       dec_tlu_force_halt_bus, dec_tlu_force_halt_bus_ns, dec_tlu_force_halt_bus_q;
-
-   // Function to get the length from byte enable
-   function automatic logic [1:0] get_write_size;
-      input logic [7:0] byteen;
-
-      logic [1:0]       size;
-
-      size[1:0] = (2'b11 & {2{(byteen[7:0] == 8'hff)}}) |
-                  (2'b10 & {2{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h0f))}}) |
-                  (2'b01 & {2{((byteen[7:0] == 8'hc0) | (byteen[7:0] == 8'h30) | (byteen[7:0] == 8'h0c) | (byteen[7:0] == 8'h03))}});
-
-      return size[1:0];
-   endfunction // get_write_size
-
-   // Function to get the length from byte enable
-   function automatic logic [2:0] get_write_addr;
-      input logic [7:0] byteen;
-
-      logic [2:0]       addr;
-
-      addr[2:0] = (3'h0 & {3{((byteen[7:0] == 8'hff) | (byteen[7:0] == 8'h0f) | (byteen[7:0] == 8'h03))}}) |
-                  (3'h2 & {3{(byteen[7:0] == 8'h0c)}})                                                     |
-                  (3'h4 & {3{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h03))}})                          |
-                  (3'h6 & {3{(byteen[7:0] == 8'hc0)}});
-
-      return addr[2:0];
-   endfunction // get_write_addr
-
-   // Function to get the next byte pointer
-   function automatic logic [2:0] get_nxtbyte_ptr (logic [2:0] current_byte_ptr, logic [7:0] byteen, logic get_next);
-      logic [2:0] start_ptr;
-      logic       found;
-      found = '0;
-      //get_nxtbyte_ptr[2:0] = current_byte_ptr[2:0];
-      start_ptr[2:0] = get_next ? (current_byte_ptr[2:0] + 3'b1) : current_byte_ptr[2:0];
-      for (int j=0; j<8; j++) begin
-         if (~found) begin
-            get_nxtbyte_ptr[2:0] = 3'(j);
-            found |= (byteen[j] & (3'(j) >= start_ptr[2:0])) ;
-         end
-      end
-   endfunction // get_nextbyte_ptr
-
-   // Create bus synchronized version of force halt
-   assign dec_tlu_force_halt_bus = dec_tlu_force_halt | dec_tlu_force_halt_bus_q;
-   assign dec_tlu_force_halt_bus_ns = ~bus_clk_en & dec_tlu_force_halt_bus;
-   rvdff  #(.WIDTH(1))   force_halt_busff(.din(dec_tlu_force_halt_bus_ns), .dout(dec_tlu_force_halt_bus_q), .clk(free_clk), .*);
-
-   // Write buffer
-   assign wrbuf_en       = axi_awvalid & axi_awready & master_ready;
-   assign wrbuf_data_en  = axi_wvalid & axi_wready & master_ready;
-   assign wrbuf_cmd_sent = master_valid & master_ready & (master_opc[2:1] == 2'b01);
-   assign wrbuf_rst      = (wrbuf_cmd_sent & ~wrbuf_en) | dec_tlu_force_halt_bus;
-
-   assign axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_arready = ~(wrbuf_vld & wrbuf_data_vld) & master_ready;
-   assign axi_rlast   = 1'b1;
-
-   assign wr_cmd_vld          = (wrbuf_vld & wrbuf_data_vld);
-   assign master_valid        = wr_cmd_vld | axi_arvalid;
-   assign master_tag[TAG-1:0] = wr_cmd_vld ? wrbuf_tag[TAG-1:0] : axi_arid[TAG-1:0];
-   assign master_opc[2:0]     = wr_cmd_vld ? 3'b011 : 3'b0;
-   assign master_addr[31:0]   = wr_cmd_vld ? wrbuf_addr[31:0] : axi_araddr[31:0];
-   assign master_size[2:0]    = wr_cmd_vld ? wrbuf_size[2:0] : axi_arsize[2:0];
-   assign master_byteen[7:0]  = wrbuf_byteen[7:0];
-   assign master_wdata[63:0]  = wrbuf_data[63:0];
-
-   // AXI response channel signals
-   assign axi_bvalid       = slave_valid & slave_ready & slave_opc[3];
-   assign axi_bresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_bid[TAG-1:0] = slave_tag[TAG-1:0];
-
-   assign axi_rvalid       = slave_valid & slave_ready & (slave_opc[3:2] == 2'b0);
-   assign axi_rresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_rid[TAG-1:0] = slave_tag[TAG-1:0];
-   assign axi_rdata[63:0]  = slave_rdata[63:0];
-   assign slave_ready        = axi_bready & axi_rready;
-
- // FIFO state machine
-   always_comb begin
-      buf_nxtstate   = IDLE;
-      buf_state_en   = 1'b0;
-      buf_wr_en      = 1'b0;
-      buf_data_wr_en = 1'b0;
-      slvbuf_error_in   = 1'b0;
-      slvbuf_error_en   = 1'b0;
-      buf_write_in   = 1'b0;
-      cmd_done       = 1'b0;
-      trxn_done      = 1'b0;
-      buf_cmd_byte_ptr_en = 1'b0;
-      buf_cmd_byte_ptr[2:0] = '0;
-      slave_valid_pre   = 1'b0;
-      master_ready   = 1'b0;
-      ahb_htrans[1:0]  = 2'b0;
-      slvbuf_wr_en     = 1'b0;
-      bypass_en        = 1'b0;
-      rd_bypass_idle   = 1'b0;
-
-      case (buf_state)
-         IDLE: begin
-                  master_ready   = 1'b1;
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_nxtstate = buf_write_in ? CMD_WR : CMD_RD;
-                  buf_state_en = master_valid & master_ready;
-                  buf_wr_en    = buf_state_en;
-                  buf_data_wr_en = buf_state_en & (buf_nxtstate == CMD_WR);
-                  buf_cmd_byte_ptr_en   = buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = buf_write_in ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) : master_addr[2:0];
-                  bypass_en       = buf_state_en;
-                  rd_bypass_idle  = bypass_en & (buf_nxtstate == CMD_RD);
-                  ahb_htrans[1:0] = {2{bypass_en}} & 2'b10;
-          end
-         CMD_RD: begin
-                  buf_nxtstate    = (master_valid & (master_opc[2:0] == 3'b000))? STREAM_RD : DATA_RD;
-                  buf_state_en    = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  cmd_done        = buf_state_en & ~master_valid;
-                  slvbuf_wr_en    = buf_state_en;
-                  master_ready  = buf_state_en & (buf_nxtstate == STREAM_RD);
-                  buf_wr_en       = master_ready;
-                  bypass_en       = master_ready & master_valid;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en | bypass_en}};
-         end
-         STREAM_RD: begin
-                  master_ready  =  (ahb_hready_q & ~ahb_hresp_q) & ~(master_valid & master_opc[2:1] == 2'b01);
-                  buf_wr_en       = (master_valid & master_ready & (master_opc[2:0] == 3'b000)); // update the fifo if we are streaming the read commands
-                  buf_nxtstate    = ahb_hresp_q ? STREAM_ERR_RD : (buf_wr_en ? STREAM_RD : DATA_RD);            // assuming that the master accpets the slave response right away.
-                  buf_state_en    = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en  = buf_state_en;
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-                  slave_valid_pre  = buf_state_en & ~ahb_hresp_q;             // send a response right away if we are not going through an error response.
-                  cmd_done        = buf_state_en & ~master_valid;                     // last one of the stream should not send a htrans
-                  bypass_en       = master_ready & master_valid & (buf_nxtstate == STREAM_RD) & buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~((buf_nxtstate != STREAM_RD) & buf_state_en)}};
-                  slvbuf_wr_en    = buf_wr_en;                                         // shifting the contents from the buf to slv_buf for streaming cases
-         end // case: STREAM_RD
-         STREAM_ERR_RD: begin
-                  buf_nxtstate = DATA_RD;
-                  buf_state_en = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  slave_valid_pre = buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;     // Overwrite slvbuf with buffer
-                  buf_cmd_byte_ptr[2:0] = buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en}};
-         end
-         DATA_RD: begin
-                  buf_nxtstate   = DONE;
-                  buf_state_en   = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en = buf_state_en;
-                  slvbuf_error_in= ahb_hresp_q;
-                  slvbuf_error_en= buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;
-
-         end
-         CMD_WR: begin
-                  buf_nxtstate = DATA_WR;
-                  trxn_done    = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_state_en = trxn_done;
-                  buf_cmd_byte_ptr_en = buf_state_en;
-                  slvbuf_wr_en    = buf_state_en;
-                  buf_cmd_byte_ptr    = trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-                  cmd_done            = trxn_done & (buf_aligned | (buf_cmd_byte_ptrQ == 3'b111) |
-                                                     (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0));
-                  ahb_htrans[1:0] = {2{~(cmd_done | cmd_doneQ)}} & 2'b10;
-         end
-         DATA_WR: begin
-                  buf_state_en = (cmd_doneQ & ahb_hready_q) | ahb_hresp_q;
-                  master_ready = buf_state_en & ~ahb_hresp_q & slave_ready;   // Ready to accept new command if current command done and no error
-                  buf_nxtstate = (ahb_hresp_q | ~slave_ready) ? DONE :
-                                  ((master_valid & master_ready) ? ((master_opc[2:1] == 2'b01) ? CMD_WR : CMD_RD) : IDLE);
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_wr_en = buf_state_en & ((buf_nxtstate == CMD_WR) | (buf_nxtstate == CMD_RD));
-                  buf_data_wr_en = buf_wr_en;
-
-                  cmd_done     = (ahb_hresp_q | (ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) &
-                                 ((buf_cmd_byte_ptrQ == 3'b111) | (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0))));
-                  bypass_en       = buf_state_en & buf_write_in & (buf_nxtstate == CMD_WR);   // Only bypass for writes for the time being
-                  ahb_htrans[1:0] = {2{(~(cmd_done | cmd_doneQ) | bypass_en)}} & 2'b10;
-                  slave_valid_pre  = buf_state_en & (buf_nxtstate != DONE);
-
-                  trxn_done = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_cmd_byte_ptr_en = trxn_done | bypass_en;
-                  buf_cmd_byte_ptr = bypass_en ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) :
-                                                 trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-            end
-         DONE: begin
-                  buf_nxtstate = IDLE;
-                  buf_state_en = slave_ready;
-                  slvbuf_error_en = 1'b1;
-                  slave_valid_pre = 1'b1;
-         end
-      endcase
-   end
-
-   assign buf_rst              = dec_tlu_force_halt_bus;
-   assign cmd_done_rst         = slave_valid_pre;
-   assign buf_addr_in[31:3]    = master_addr[31:3];
-   assign buf_addr_in[2:0]     = (buf_aligned_in & (master_opc[2:1] == 2'b01)) ? get_write_addr(master_byteen[7:0]) : master_addr[2:0];
-   assign buf_tag_in[TAG-1:0]  = master_tag[TAG-1:0];
-   assign buf_byteen_in[7:0]   = wrbuf_byteen[7:0];
-   assign buf_data_in[63:0]    = (buf_state == DATA_RD) ? ahb_hrdata_q[63:0] : master_wdata[63:0];
-   assign buf_size_in[1:0]     = (buf_aligned_in & (master_size[1:0] == 2'b11) & (master_opc[2:1] == 2'b01)) ? get_write_size(master_byteen[7:0]) : master_size[1:0];
-   assign buf_aligned_in       = (master_opc[2:0] == 3'b0)    |   // reads are always aligned since they are either DW or sideeffects
-                                 (master_size[1:0] == 2'b0) |  (master_size[1:0] == 2'b01) | (master_size[1:0] == 2'b10) | // Always aligned for Byte/HW/Word since they can be only for non-idempotent. IFU/SB are always aligned
-                                 ((master_size[1:0] == 2'b11) &
-                                  ((master_byteen[7:0] == 8'h3)  | (master_byteen[7:0] == 8'hc)   | (master_byteen[7:0] == 8'h30) | (master_byteen[7:0] == 8'hc0) |
-                                   (master_byteen[7:0] == 8'hf)  | (master_byteen[7:0] == 8'hf0)  | (master_byteen[7:0] == 8'hff)));
-
-   // Generate the ahb signals
-   assign ahb_haddr[31:3] = bypass_en ? master_addr[31:3]  : buf_addr[31:3];
-   assign ahb_haddr[2:0]  = {3{(ahb_htrans == 2'b10)}} & buf_cmd_byte_ptr[2:0];    // Trxn should be aligned during IDLE
-   assign ahb_hsize[2:0]  = bypass_en ? {1'b0, ({2{buf_aligned_in}} & buf_size_in[1:0])} :
-                                        {1'b0, ({2{buf_aligned}} & buf_size[1:0])};   // Send the full size for aligned trxn
-   assign ahb_hburst[2:0] = 3'b0;
-   assign ahb_hmastlock   = 1'b0;
-   assign ahb_hprot[3:0]  = {3'b001,~axi_arprot[2]};
-   assign ahb_hwrite      = bypass_en ? (master_opc[2:1] == 2'b01) : buf_write;
-   assign ahb_hwdata[63:0] = buf_data[63:0];
-
-   assign slave_valid          = slave_valid_pre;// & (~slvbuf_posted_write | slvbuf_error);
-   assign slave_opc[3:2]       = slvbuf_write ? 2'b11 : 2'b00;
-   assign slave_opc[1:0]       = {2{slvbuf_error}} & 2'b10;
-   assign slave_rdata[63:0]    = slvbuf_error ? {2{last_bus_addr[31:0]}} : ((buf_state == DONE) ? buf_data[63:0] : ahb_hrdata_q[63:0]);
-   assign slave_tag[TAG-1:0]   = slvbuf_tag[TAG-1:0];
-
-   assign last_addr_en = (ahb_htrans[1:0] != 2'b0) & ahb_hready & ahb_hwrite ;
-
-
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_vldff     (.din(1'b1),              .dout(wrbuf_vld),          .en(wrbuf_en),      .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_data_vldff(.din(1'b1),              .dout(wrbuf_data_vld),     .en(wrbuf_data_en), .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(TAG)) wrbuf_tagff     (.din(axi_awid[TAG-1:0]), .dout(wrbuf_tag[TAG-1:0]), .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(3))   wrbuf_sizeff    (.din(axi_awsize[2:0]),   .dout(wrbuf_size[2:0]),    .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))  wrbuf_addrff    (.din(axi_awaddr[31:0]),  .dout(wrbuf_addr[31:0]),   .en(wrbuf_en & bus_clk_en),            .clk(clk), .*);
-   rvdffe       #(.WIDTH(64))  wrbuf_dataff    (.din(axi_wdata[63:0]),   .dout(wrbuf_data[63:0]),   .en(wrbuf_data_en & bus_clk_en),       .clk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))   wrbuf_byteenff  (.din(axi_wstrb[7:0]),    .dout(wrbuf_byteen[7:0]),  .en(wrbuf_data_en),                    .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffs_fpga #(.WIDTH(32))   last_bus_addrff (.din(ahb_haddr[31:0]),   .dout(last_bus_addr[31:0]), .en(last_addr_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH($bits(state_t))) buf_state_ff  (.din(buf_nxtstate),        .dout({buf_state}),      .en(buf_state_en), .clear(buf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_writeff   (.din(buf_write_in),        .dout(buf_write),        .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG))             buf_tagff     (.din(buf_tag_in[TAG-1:0]), .dout(buf_tag[TAG-1:0]), .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(32))              buf_addrff    (.din(buf_addr_in[31:0]),   .dout(buf_addr[31:0]),   .en(buf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))               buf_sizeff    (.din(buf_size_in[1:0]),    .dout(buf_size[1:0]),    .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_alignedff (.din(buf_aligned_in),      .dout(buf_aligned),      .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))               buf_byteenff  (.din(buf_byteen_in[7:0]),  .dout(buf_byteen[7:0]),  .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))              buf_dataff    (.din(buf_data_in[63:0]),   .dout(buf_data[63:0]),   .en(buf_data_wr_en & bus_clk_en),   .clk(clk), .*);
-
-
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_writeff  (.din(buf_write),        .dout(slvbuf_write),        .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG)) slvbuf_tagff    (.din(buf_tag[TAG-1:0]), .dout(slvbuf_tag[TAG-1:0]), .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_errorff  (.din(slvbuf_error_in),  .dout(slvbuf_error),        .en(slvbuf_error_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH(1)) buf_cmd_doneff     (.din(1'b1),                  .dout(cmd_doneQ),              .en(cmd_done),            .clear(cmd_done_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(3))  buf_cmd_byte_ptrff (.din(buf_cmd_byte_ptr[2:0]), .dout(buf_cmd_byte_ptrQ[2:0]), .en(buf_cmd_byte_ptr_en),                       .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),       .dout(ahb_hready_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans[1:0]),  .dout(ahb_htrans_q[1:0]),  .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),       .dout(ahb_hwrite_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),        .dout(ahb_hresp_q),        .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(64)) hrdata_ff (.din(ahb_hrdata[63:0]), .dout(ahb_hrdata_q[63:0]), .clk(ahbm_data_clk), .clken(ahbm_data_clken), .rawclk(clk), .*);
-
-   // Clock headers
-   // clock enables for ahbm addr/data
-   assign buf_clken       = bus_clk_en & (buf_wr_en | slvbuf_wr_en | clk_override);
-   assign ahbm_data_clken = bus_clk_en & ((buf_state != IDLE) | clk_override);
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign bus_clk = 1'b0;
-   assign buf_clk = 1'b0;
-   assign ahbm_data_clk = 1'b0;
-`else
-   rvclkhdr bus_cgc       (.en(bus_clk_en),      .l1clk(bus_clk),       .*);
-   rvclkhdr buf_cgc       (.en(buf_clken),       .l1clk(buf_clk), .*);
-   rvclkhdr ahbm_data_cgc (.en(ahbm_data_clken), .l1clk(ahbm_data_clk), .*);
-`endif
-
-`ifdef RV_ASSERT_ON
-   property ahb_trxn_aligned;
-     @(posedge bus_clk) ahb_htrans[1]  |-> ((ahb_hsize[2:0] == 3'h0)                              |
-                                        ((ahb_hsize[2:0] == 3'h1) & (ahb_haddr[0] == 1'b0))   |
-                                        ((ahb_hsize[2:0] == 3'h2) & (ahb_haddr[1:0] == 2'b0)) |
-                                        ((ahb_hsize[2:0] == 3'h3) & (ahb_haddr[2:0] == 3'b0)));
-   endproperty
-   assert_ahb_trxn_aligned: assert property (ahb_trxn_aligned) else
-     $display("Assertion ahb_trxn_aligned failed: ahb_htrans=2'h%h, ahb_hsize=3'h%h, ahb_haddr=32'h%h",ahb_htrans[1:0], ahb_hsize[2:0], ahb_haddr[31:0]);
-
-   property ahb_error_protocol;
-      @(posedge bus_clk) (ahb_hready & ahb_hresp) |-> (~$past(ahb_hready) & $past(ahb_hresp));
-   endproperty
-   assert_ahb_error_protocol: assert property (ahb_error_protocol) else
-      $display("Bus Error with hReady isn't preceded with Bus Error without hready");
-`endif
-
-endmodule // axi4_to_ahb
diff --git a/verilog/rtl/BrqRV_EB1/design/lib/beh_lib.sv b/verilog/rtl/BrqRV_EB1/design/lib/beh_lib.sv
deleted file mode 100644
index 1cffe5b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lib/beh_lib.sv
+++ /dev/null
@@ -1,819 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// all flops call the rvdff flop
-
-`include "common_defines.vh"
-
-module rvdff #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic                   rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-`ifdef RV_CLOCKGATE
-   always @(posedge tb_top.clk) begin
-      #0 $strobe("CG: %0t %m din %x dout %x clk %b width %d",$time,din,dout,clk,WIDTH);
-   end
-`endif
-
-   always_ff @(posedge clk or negedge rst_l) begin
-      if (rst_l == 0)
-        dout[WIDTH-1:0] <= 0;
-      else
-        dout[WIDTH-1:0] <= din[WIDTH-1:0];
-   end
-
-end
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-   rvdff #(WIDTH) dffs (.din((en) ? din[WIDTH-1:0] : dout[WIDTH-1:0]), .*);
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   assign din_new = {WIDTH{~clear}} & (en ? din[WIDTH-1:0] : dout[WIDTH-1:0]);
-   rvdff #(WIDTH) dffsc (.din(din_new[WIDTH-1:0]), .*);
-end
-endmodule
-
-// _fpga versions
-module rvdff_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   `ifdef RV_FPGA_OPTIMIZE
-    rvdffs #(WIDTH) dffs (.clk(rawclk), .en(clken), .*);
-`else
-    rvdff #(WIDTH)  dff (.*);
-`endif
-end
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-`ifdef RV_FPGA_OPTIMIZE
-   rvdffs #(WIDTH)   dffs (.clk(rawclk), .en(clken & en), .*);
-`else
-   rvdffs #(WIDTH)   dffs (.*);
-`endif
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic             clk,
-     input logic             clken,
-     input logic             rawclk,
-     input logic             rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-`ifdef RV_FPGA_OPTIMIZE
-   rvdffs  #(WIDTH)   dffs  (.clk(rawclk), .din(din[WIDTH-1:0] & {WIDTH{~clear}}),.en((en | clear) & clken), .*);
-`else
-   rvdffsc #(WIDTH)   dffsc (.*);
-`endif
-end
-endmodule
-
-
-module rvdffe #( parameter WIDTH=1, SHORT=0, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic           en,
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-
-if (SHORT == 1) begin : genblock
-   if (1) begin : genblock
-      assign dout = din;
-   end
-end
-else begin : genblock
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 8 || OVERRIDE==1) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdffe must be WIDTH >= 8");
-`endif
-end // else: !if(SHORT == 1)
-
-endmodule // rvdffe
-
-
-module rvdffpcie #( parameter WIDTH=31 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH == 31) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-
-      rvdfflie #(.WIDTH(WIDTH), .LEFT(19)) dff (.*);
-
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdffpcie width must be 31");
-`endif
-endmodule
-
-// format: { LEFT, EXTRA }
-// LEFT # of bits will be done with rvdffie, all else EXTRA with rvdffe
-module rvdfflie #( parameter WIDTH=16, LEFT=8 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam EXTRA = WIDTH-LEFT;
-
-
-
-
-
-
-
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam XMSB = LLSB-1;
-   localparam XLSB = LLSB-EXTRA;
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 16 && LEFT >= 8 && EXTRA >= 8) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-
-      rvdffiee #(LEFT)  dff_left  (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-
-      rvdffe  #(EXTRA)  dff_extra (.*, .din(din[XMSB:XLSB]), .dout(dout[XMSB:XLSB]));
-
-
-
-
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdfflie musb be WIDTH >= 16 && LEFT >= 8 && EXTRA >= 8");
-`endif
-endmodule
-
-
-
-
-// special power flop for predict packet
-// format: { LEFT, RIGHT==31 }
-// LEFT # of bits will be done with rvdffe; RIGHT is enabled by LEFT[LSB] & en
-module rvdffppe #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam RIGHT = 31;
-   localparam LEFT = WIDTH - RIGHT;
-
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam RMSB = LLSB-1;
-   localparam RLSB = LLSB-RIGHT;
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH>=32 && LEFT>=8 && RIGHT>=8) begin: genblock
-`endif
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-      rvdffe #(LEFT)     dff_left (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-      rvdffe #(RIGHT)   dff_right (.*, .din(din[RMSB:RLSB]), .dout(dout[RMSB:RLSB]), .en(en & din[LLSB]));  // qualify with pret
-
-
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: must be WIDTH>=32 && LEFT>=8 && RIGHT>=8");
-`endif
-endmodule
-
-
-
-
-module rvdffie #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      en;
-
-
-
-
-
-
-
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 8 || OVERRIDE==1) begin: genblock
-`endif
-
-      assign en = |(din ^ dout);
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .* );
-`else
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-     $error("%m: rvdffie must be WIDTH >= 8");
-`endif
-
-
-endmodule
-
-// ie flop but it has an .en input
-module rvdffiee #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic           scan_mode,
-     input  logic           en,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      final_en;
-
-`ifndef RV_PHYSICAL
-   if (WIDTH >= 8 || OVERRIDE==1) begin: genblock
-`endif
-
-      assign final_en = (|(din ^ dout)) & en;
-
-`ifdef RV_FPGA_OPTIMIZE
-      rvdffs #(WIDTH) dff ( .*, .en(final_en) );
-`else
-      rvdffe #(WIDTH) dff (.*,  .en(final_en));
-`endif
-
-`ifndef RV_PHYSICAL
-   end
-   else
-      $error("%m: rvdffie width must be >= 8");
-`endif
-
-endmodule
-
-
-
-module rvsyncss #(parameter WIDTH = 251)
-   (
-     input  logic                 clk,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff #(WIDTH) sync_ff1  (.*, .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff #(WIDTH) sync_ff2  (.*, .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvsyncss_fpga #(parameter WIDTH = 251)
-   (
-     input  logic                 gw_clk,
-     input  logic                 rawclk,
-     input  logic                 clken,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff_fpga #(WIDTH) sync_ff1  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff_fpga #(WIDTH) sync_ff2  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvlsadder
-  (
-    input logic [31:0] rs1,
-    input logic [11:0] offset,
-
-    output logic [31:0] dout
-    );
-
-   logic                cout;
-   logic                sign;
-
-   logic [31:12]        rs1_inc;
-   logic [31:12]        rs1_dec;
-
-   assign {cout,dout[11:0]} = {1'b0,rs1[11:0]} + {1'b0,offset[11:0]};
-
-   assign rs1_inc[31:12] = rs1[31:12] + 1;
-
-   assign rs1_dec[31:12] = rs1[31:12] - 1;
-
-   assign sign = offset[11];
-
-   assign dout[31:12] = ({20{  sign ^~  cout}} &     rs1[31:12]) |
-                        ({20{ ~sign &   cout}}  & rs1_inc[31:12]) |
-                        ({20{  sign &  ~cout}}  & rs1_dec[31:12]);
-
-endmodule // rvlsadder
-
-// assume we only maintain pc[31:1] in the pipe
-
-module rvbradder
-  (
-    input [31:1] pc,
-    input [12:1] offset,
-
-    output [31:1] dout
-    );
-
-   logic          cout;
-   logic          sign;
-
-   logic [31:13]  pc_inc;
-   logic [31:13]  pc_dec;
-
-   assign {cout,dout[12:1]} = {1'b0,pc[12:1]} + {1'b0,offset[12:1]};
-
-   assign pc_inc[31:13] = pc[31:13] + 1;
-
-   assign pc_dec[31:13] = pc[31:13] - 1;
-
-   assign sign = offset[12];
-
-
-   assign dout[31:13] = ({19{  sign ^~  cout}} &     pc[31:13]) |
-                        ({19{ ~sign &   cout}}  & pc_inc[31:13]) |
-                        ({19{  sign &  ~cout}}  & pc_dec[31:13]);
-
-
-endmodule // rvbradder
-
-
-// 2s complement circuit
-module rvtwoscomp #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:1]          dout_temp;   // holding for all other bits except for the lsb. LSB is always din
-
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : flip_after_first_one
-      assign dout_temp[i] = (|din[i-1:0]) ? ~din[i] : din[i];
-   end : flip_after_first_one
-
-   assign dout[WIDTH-1:0]  = { dout_temp[WIDTH-1:1], din[0] };
-
-endmodule  // 2'scomp
-
-// find first
-module rvfindfirst1 #( parameter WIDTH=32, SHIFT=$clog2(WIDTH) )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [SHIFT-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[SHIFT-1:0] = {SHIFT{1'b0}};
-      done    = 1'b0;
-
-      for ( int i = WIDTH-1; i > 0; i-- )  begin : find_first_one
-         done |= din[i];
-         dout[SHIFT-1:0] += done ? 1'b0 : 1'b1;
-      end : find_first_one
-   end
-endmodule // rvfindfirst1
-
-module rvfindfirst1hot #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[WIDTH-1:0] = {WIDTH{1'b0}};
-      done    = 1'b0;
-      for ( int i = 0; i < WIDTH; i++ )  begin : find_first_one
-         dout[i] = ~done & din[i];
-         done   |= din[i];
-      end : find_first_one
-   end
-endmodule // rvfindfirst1hot
-
-// mask and match function matches bits after finding the first 0 position
-// find first starting from LSB. Skip that location and match the rest of the bits
-module rvmaskandmatch #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] mask,     // this will have the mask in the lower bit positions
-     input  logic [WIDTH-1:0] data,     // this is what needs to be matched on the upper bits with the mask's upper bits
-     input  logic             masken,   // when 1 : do mask. 0 : full match
-     output logic             match
-     );
-
-   logic [WIDTH-1:0]          matchvec;
-   logic                      masken_or_fullmask;
-
-   assign masken_or_fullmask = masken &  ~(&mask[WIDTH-1:0]);
-
-   assign matchvec[0]        = masken_or_fullmask | (mask[0] == data[0]);
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : match_after_first_zero
-      assign matchvec[i] = (&mask[i-1:0] & masken_or_fullmask) ? 1'b1 : (mask[i] == data[i]);
-   end : match_after_first_zero
-
-   assign match  = &matchvec[WIDTH-1:0];    // all bits either matched or were masked off
-
-endmodule // rvmaskandmatch
-
-
-
-
-// Check if the S_ADDR <= addr < E_ADDR
-module rvrangecheck  #(CCM_SADR = 32'h0,
-                       CCM_SIZE  = 128) (
-   input  logic [31:0]   addr,                             // Address to be checked for range
-   output logic          in_range,                            // S_ADDR <= start_addr < E_ADDR
-   output logic          in_region
-);
-
-   localparam REGION_BITS = 4;
-   localparam MASK_BITS = 10 + $clog2(CCM_SIZE);
-
-   logic [31:0]          start_addr;
-   logic [3:0]           region;
-
-   assign start_addr[31:0]        = CCM_SADR;
-   assign region[REGION_BITS-1:0] = start_addr[31:(32-REGION_BITS)];
-
-   assign in_region = (addr[31:(32-REGION_BITS)] == region[REGION_BITS-1:0]);
-   if (CCM_SIZE  == 48)
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]) & ~(&addr[MASK_BITS-1 : MASK_BITS-2]);
-   else
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]);
-
-endmodule  // rvrangechecker
-
-// 16 bit even parity generator
-module rveven_paritygen #(WIDTH = 16)  (
-                                         input  logic [WIDTH-1:0]  data_in,         // Data
-                                         output logic              parity_out       // generated even parity
-                                         );
-
-   assign  parity_out =  ^(data_in[WIDTH-1:0]) ;
-
-endmodule  // rveven_paritygen
-
-module rveven_paritycheck #(WIDTH = 16)  (
-                                           input  logic [WIDTH-1:0]  data_in,         // Data
-                                           input  logic              parity_in,
-                                           output logic              parity_err       // Parity error
-                                           );
-
-   assign  parity_err =  ^(data_in[WIDTH-1:0]) ^ parity_in ;
-
-endmodule  // rveven_paritycheck
-
-module rvecc_encode  (
-                      input [31:0] din,
-                      output [6:0] ecc_out
-                      );
-logic [5:0] ecc_out_temp;
-
-   assign ecc_out_temp[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_out_temp[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_out_temp[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_out_temp[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   assign ecc_out[6:0] = {(^din[31:0])^(^ecc_out_temp[5:0]),ecc_out_temp[5:0]};
-
-endmodule // rvecc_encode
-
-module rvecc_decode  (
-                      input         en,
-                      input [31:0]  din,
-                      input [6:0]   ecc_in,
-                      input         sed_ded,    // only do detection and no correction. Used for the I$
-                      output [31:0] dout,
-                      output [6:0]  ecc_out,
-                      output        single_ecc_error,
-                      output        double_ecc_error
-
-                      );
-
-   logic [6:0]                      ecc_check;
-   logic [38:0]                     error_mask;
-   logic [38:0]                     din_plus_parity, dout_plus_parity;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   // This is the parity bit
-   assign ecc_check[6] = ((^din[31:0])^(^ecc_in[6:0])) & ~sed_ded;
-
-   assign single_ecc_error = en & (ecc_check[6:0] != 0) & ecc_check[6];   // this will never be on for sed_ded
-   assign double_ecc_error = en & (ecc_check[6:0] != 0) & ~ecc_check[6];  // all errors in the sed_ded case will be recorded as DE
-
-   // Generate the mask for error correctiong
-   for (genvar i=1; i<40; i++) begin
-      assign error_mask[i-1] = (ecc_check[5:0] == i);
-   end
-
-   // Generate the corrected data
-   assign din_plus_parity[38:0] = {ecc_in[6], din[31:26], ecc_in[5], din[25:11], ecc_in[4], din[10:4], ecc_in[3], din[3:1], ecc_in[2], din[0], ecc_in[1:0]};
-
-   assign dout_plus_parity[38:0] = single_ecc_error ? (error_mask[38:0] ^ din_plus_parity[38:0]) : din_plus_parity[38:0];
-   assign dout[31:0]             = {dout_plus_parity[37:32], dout_plus_parity[30:16], dout_plus_parity[14:8], dout_plus_parity[6:4], dout_plus_parity[2]};
-   assign ecc_out[6:0]           = {(dout_plus_parity[38] ^ (ecc_check[6:0] == 7'b1000000)), dout_plus_parity[31], dout_plus_parity[15], dout_plus_parity[7], dout_plus_parity[3], dout_plus_parity[1:0]};
-
-endmodule // rvecc_decode
-
-module rvecc_encode_64  (
-                      input [63:0] din,
-                      output [6:0] ecc_out
-                      );
-  assign ecc_out[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_out[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_out[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_out[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[6] = din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-endmodule // rvecc_encode_64
-
-
-module rvecc_decode_64  (
-                      input         en,
-                      input [63:0]  din,
-                      input [6:0]   ecc_in,
-                      output        ecc_error
-                      );
-
-   logic [6:0]                      ecc_check;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[6] = ecc_in[6]^din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_error = en & (ecc_check[6:0] != 0);  // all errors in the sed_ded case will be recorded as DE
-
- endmodule // rvecc_decode_64
-
-// Skywater cell
-//sky130_fd_sc_hd__dlclkp_1 CG( .CLK(clk), .GCLK(l1clk), .GATE(en_i | test_en_i));
-
-
-/*module `TEC_RV_ICG 
-  (
-   input logic SE, EN, CK,
-   output Q
-   );
-
-   logic  en_ff;
-   logic  enable;
-
-   assign      enable = EN | SE;
-
-`ifdef VERILATOR
-   always @(negedge CK) begin
-      en_ff <= enable;
-   end
-`else
-   always @(CK, enable) begin
-      if(!CK)
-        en_ff = enable;
-   end
-`endif
-   assign Q = CK & en_ff;
-
-endmodule
-*/
-
-`ifndef RV_FPGA_OPTIMIZE
-module rvclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .CLK(clk), .GCLK(l1clk), .GATE(en)); /*clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));*/
-
-endmodule // rvclkhdr
-`endif
-
-module rvoclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign l1clk = clk;
-`else
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .CLK(clk), .GCLK(l1clk), .GATE(en)); //clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));
-`endif
-
-endmodule
-
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/lib/eb1_lib.sv b/verilog/rtl/BrqRV_EB1/design/lib/eb1_lib.sv
deleted file mode 100644
index 3aee6f3..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lib/eb1_lib.sv
+++ /dev/null
@@ -1,64 +0,0 @@
-module eb1_btb_tag_hash #(
-`include "eb1_param.vh"
- ) (
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-endmodule
-
-module eb1_btb_tag_hash_fold  #(
-`include "eb1_param.vh"
- )(
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-
-endmodule
-
-module eb1_btb_addr_hash  #(
-`include "eb1_param.vh"
- )(
-                        input logic [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO] pc,
-                        output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hash
-                        );
-
-
-if(pt.BTB_FOLD2_INDEX_HASH) begin : fold2
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-   else begin
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX2_HI:pt.BTB_INDEX2_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-
-endmodule
-
-module eb1_btb_ghr_hash  #(
-`include "eb1_param.vh"
- )(
-                       input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hashin,
-                       input logic [pt.BHT_GHR_SIZE-1:0] ghr,
-                       output logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] hash
-                       );
-
-   // The hash function is too complex to write in verilog for all cases.
-   // The config script generates the logic string based on the bp config.
-   if(pt.BHT_GHR_HASH_1) begin : ghrhash_cfg1
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { ghr[pt.BHT_GHR_SIZE-1:pt.BTB_INDEX1_HI-1], hashin[pt.BTB_INDEX1_HI:2]^ghr[pt.BTB_INDEX1_HI-2:0]};
-   end
-   else begin : ghrhash_cfg2
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { hashin[pt.BHT_GHR_SIZE+1:2]^ghr[pt.BHT_GHR_SIZE-1:0]};
-   end
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/lib/mem_lib.sv b/verilog/rtl/BrqRV_EB1/design/lib/mem_lib.sv
deleted file mode 100644
index a3eb4c5..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lib/mem_lib.sv
+++ /dev/null
@@ -1,242 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-`define eb1_LOCAL_RAM_TEST_IO          \
-input logic WE,              \
-input logic ME,              \
-input logic CLK,             \
-input logic TEST1,           \
-input logic RME,             \
-input logic  [3:0] RM,       \
-input logic LS,              \
-input logic DS,              \
-input logic SD,              \
-input logic TEST_RNM,        \
-input logic BC1,             \
-input logic BC2,             \
-output logic ROP
-
-`define eb1_RAM(depth, width)              \
-module ram_``depth``x``width(               \
-   input logic [$clog2(depth)-1:0] ADR,     \
-   input logic [(width-1):0] D,             \
-   output logic [(width-1):0] Q,            \
-    `eb1_LOCAL_RAM_TEST_IO                 \
-);                                          \
-reg [(width-1):0] ram_core [(depth-1):0];   \
-`ifdef GTLSIM                               \
-integer i;                                  \
-initial begin                               \
-   for (i=0; i<depth; i=i+1)                \
-     ram_core[i] = '0;                      \
-end                                         \
-`endif                                      \
-always @(posedge CLK) begin                 \
-`ifdef GTLSIM                               \
-   if (ME && WE) ram_core[ADR] <= D;        \
-`else                                       \
-   if (ME && WE) begin ram_core[ADR] <= D; Q <= 'x; end  \
-`endif                                      \
-   if (ME && ~WE) Q <= ram_core[ADR];       \
-end                                         \
-assign ROP = ME;                            \
-                                            \
-endmodule
-
-`define eb1_RAM_BE(depth, width)           \
-module ram_be_``depth``x``width(            \
-   input logic [$clog2(depth)-1:0] ADR,     \
-   input logic [(width-1):0] D, WEM,        \
-   output logic [(width-1):0] Q,            \
-    `eb1_LOCAL_RAM_TEST_IO                 \
-);                                          \
-reg [(width-1):0] ram_core [(depth-1):0];   \
-`ifdef GTLSIM                               \
-integer i;                                  \
-initial begin                               \
-   for (i=0; i<depth; i=i+1)                \
-     ram_core[i] = '0;                      \
-end                                         \
-`endif                                      \
-always @(posedge CLK) begin                 \
-`ifdef GTLSIM                               \
-   if (ME && WE)       ram_core[ADR] <= D & WEM | ~WEM & ram_core[ADR];      \
-`else                                       \
-   if (ME && WE) begin ram_core[ADR] <= D & WEM | ~WEM & ram_core[ADR]; Q <= 'x; end  \
-`endif                                      \
-   if (ME && ~WE) Q <= ram_core[ADR];          \
-end                                         \
-assign ROP = ME;                            \
-                                            \
-endmodule
-
-// parameterizable RAM for verilator sims
-module eb1_ram #(depth=4096, width=39) (
-input logic [$clog2(depth)-1:0] ADR,
-input logic [(width-1):0] D,
-output logic [(width-1):0] Q,
- `eb1_LOCAL_RAM_TEST_IO
-);
-reg [(width-1):0] ram_core [(depth-1):0];
-
-always @(posedge CLK) begin
-`ifdef GTLSIM
-   if (ME && WE)       ram_core[ADR] <= D;
-`else
-   if (ME && WE) begin ram_core[ADR] <= D; Q <= 'x; end
-`endif
-   if (ME && ~WE) Q <= ram_core[ADR];
-end
-endmodule
-
-//=========================================================================================================================
-//=================================== START OF CCM  =======================================================================
-//============= Possible sram sizes for a 39 bit wide memory ( 4 bytes + 7 bits ECC ) =====================================
-//-------------------------------------------------------------------------------------------------------------------------
-`eb1_RAM(32768, 39)
-`eb1_RAM(16384, 39)
-`eb1_RAM(8192, 39)
-`eb1_RAM(4096, 39)
-`eb1_RAM(3072, 39)
-`eb1_RAM(2048, 39)
-`eb1_RAM(1536, 39)     // need this for the 48KB DCCM option)
-`eb1_RAM(1024, 39)
-`eb1_RAM(768, 39)
-`eb1_RAM(512, 39)
-`eb1_RAM(256, 39)
-`eb1_RAM(128, 39)
-`eb1_RAM(1024, 20)
-`eb1_RAM(512, 20)
-`eb1_RAM(256, 20)
-`eb1_RAM(128, 20)
-`eb1_RAM(64, 20)
-`eb1_RAM(4096, 34)
-`eb1_RAM(2048, 34)
-`eb1_RAM(1024, 34)
-`eb1_RAM(512, 34)
-`eb1_RAM(256, 34)
-`eb1_RAM(128, 34)
-`eb1_RAM(64, 34)
-`eb1_RAM(8192, 68)
-`eb1_RAM(4096, 68)
-`eb1_RAM(2048, 68)
-`eb1_RAM(1024, 68)
-`eb1_RAM(512, 68)
-`eb1_RAM(256, 68)
-`eb1_RAM(128, 68)
-`eb1_RAM(64, 68)
-`eb1_RAM(8192, 71)
-`eb1_RAM(4096, 71)
-`eb1_RAM(2048, 71)
-`eb1_RAM(1024, 71)
-`eb1_RAM(512, 71)
-`eb1_RAM(256, 71)
-`eb1_RAM(128, 71)
-`eb1_RAM(64, 71)
-`eb1_RAM(4096, 42)
-`eb1_RAM(2048, 42)
-`eb1_RAM(1024, 42)
-`eb1_RAM(512, 42)
-`eb1_RAM(256, 42)
-`eb1_RAM(128, 42)
-`eb1_RAM(64, 42)
-`eb1_RAM(4096, 22)
-`eb1_RAM(2048, 22)
-`eb1_RAM(1024, 22)
-`eb1_RAM(512, 22)
-`eb1_RAM(256, 22)
-`eb1_RAM(128, 22)
-`eb1_RAM(64, 22)
-`eb1_RAM(1024, 26)
-`eb1_RAM(4096, 26)
-`eb1_RAM(2048, 26)
-`eb1_RAM(512, 26)
-`eb1_RAM(256, 26)
-`eb1_RAM(128, 26)
-`eb1_RAM(64, 26)
-`eb1_RAM(32, 26)
-`eb1_RAM(32, 22)
-`eb1_RAM_BE(8192, 142)
-`eb1_RAM_BE(4096, 142)
-`eb1_RAM_BE(2048, 142)
-`eb1_RAM_BE(1024, 142)
-`eb1_RAM_BE(512, 142)
-`eb1_RAM_BE(256, 142)
-`eb1_RAM_BE(128, 142)
-`eb1_RAM_BE(64, 142)
-`eb1_RAM_BE(8192, 284)
-`eb1_RAM_BE(4096, 284)
-`eb1_RAM_BE(2048, 284)
-`eb1_RAM_BE(1024, 284)
-`eb1_RAM_BE(512, 284)
-`eb1_RAM_BE(256, 284)
-`eb1_RAM_BE(128, 284)
-`eb1_RAM_BE(64, 284)
-`eb1_RAM_BE(8192, 136)
-`eb1_RAM_BE(4096, 136)
-`eb1_RAM_BE(2048, 136)
-`eb1_RAM_BE(1024, 136)
-`eb1_RAM_BE(512, 136)
-`eb1_RAM_BE(256, 136)
-`eb1_RAM_BE(128, 136)
-`eb1_RAM_BE(64, 136)
-`eb1_RAM_BE(8192, 272)
-`eb1_RAM_BE(4096, 272)
-`eb1_RAM_BE(2048, 272)
-`eb1_RAM_BE(1024, 272)
-`eb1_RAM_BE(512, 272)
-`eb1_RAM_BE(256, 272)
-`eb1_RAM_BE(128, 272)
-`eb1_RAM_BE(64, 272)
-`eb1_RAM_BE(4096, 52)
-`eb1_RAM_BE(2048, 52)
-`eb1_RAM_BE(1024, 52)
-`eb1_RAM_BE(512, 52)
-`eb1_RAM_BE(256, 52)
-`eb1_RAM_BE(128, 52)
-`eb1_RAM_BE(64, 52)
-`eb1_RAM_BE(32, 52)
-`eb1_RAM_BE(4096, 104)
-`eb1_RAM_BE(2048, 104)
-`eb1_RAM_BE(1024, 104)
-`eb1_RAM_BE(512, 104)
-`eb1_RAM_BE(256, 104)
-`eb1_RAM_BE(128, 104)
-`eb1_RAM_BE(64, 104)
-`eb1_RAM_BE(32, 104)
-`eb1_RAM_BE(4096, 44)
-`eb1_RAM_BE(2048, 44)
-`eb1_RAM_BE(1024, 44)
-`eb1_RAM_BE(512, 44)
-`eb1_RAM_BE(256, 44)
-`eb1_RAM_BE(128, 44)
-`eb1_RAM_BE(64, 44)
-`eb1_RAM_BE(32, 44)
-`eb1_RAM_BE(4096, 88)
-`eb1_RAM_BE(2048, 88)
-`eb1_RAM_BE(1024, 88)
-`eb1_RAM_BE(512, 88)
-`eb1_RAM_BE(256, 88)
-`eb1_RAM_BE(128, 88)
-`eb1_RAM_BE(64, 88)
-`eb1_RAM_BE(32, 88)
-`eb1_RAM(64, 39)
-
-
-`undef eb1_RAM
-`undef eb1_RAM_BE
-`undef eb1_LOCAL_RAM_TEST_IO
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu.sv
deleted file mode 100644
index 31d1148..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu.sv
+++ /dev/null
@@ -1,425 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-
-module eb1_lsu
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-
-   input logic                             clk_override,             // Override non-functional clock gating
-   input logic                             dec_tlu_flush_lower_r,    // I0/I1 writeback flush. This is used to flush the old packets only
-   input logic                             dec_tlu_i0_kill_writeb_r, // I0 is flushed, don't writeback any results to arch state
-   input logic                             dec_tlu_force_halt,       // This will be high till TLU goes to debug halt
-
-   // chicken signals
-   input logic                             dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                             dec_tlu_wb_coalescing_disable,     // disable the write buffer coalesce
-   input logic                             dec_tlu_sideeffect_posted_disable, // disable the posted sideeffect load store to the bus
-   input logic                             dec_tlu_core_ecc_disable,          // disable the generation of the ecc
-
-   input logic [31:0]                      exu_lsu_rs1_d,        // address rs operand
-   input logic [31:0]                      exu_lsu_rs2_d,        // store data
-   input logic [11:0]                      dec_lsu_offset_d,     // address offset operand
-
-   input                                   eb1_lsu_pkt_t lsu_p,  // lsu control packet
-   input logic                             dec_lsu_valid_raw_d,   // Raw valid for address computation
-   input logic [31:0]                      dec_tlu_mrac_ff,       // CSR for memory region control
-
-   output logic [31:0]                     lsu_result_m,          // lsu load data
-   output logic [31:0]                     lsu_result_corr_r,     // This is the ECC corrected data going to RF
-   output logic                            lsu_load_stall_any,    // This is for blocking loads in the decode
-   output logic                            lsu_store_stall_any,   // This is for blocking stores in the decode
-   output logic                            lsu_fastint_stall_any, // Stall the fastint in decode-1 stage
-   output logic                            lsu_idle_any,          // lsu buffers are empty and no instruction in the pipeline. Doesn't include DMA
-   output logic                            lsu_active,            // Used to turn off top level clk
-
-   output logic [31:1]                     lsu_fir_addr,        // fast interrupt address
-   output logic [1:0]                      lsu_fir_error,       // Error during fast interrupt lookup
-
-   output logic                            lsu_single_ecc_error_incr,     // Increment the ecc counter
-   output eb1_lsu_error_pkt_t             lsu_error_pkt_r,               // lsu exception packet
-   output logic                            lsu_imprecise_error_load_any,  // bus load imprecise error
-   output logic                            lsu_imprecise_error_store_any, // bus store imprecise error
-   output logic [31:0]                     lsu_imprecise_error_addr_any,  // bus store imprecise error address
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,      // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,        // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,        // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,    // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,   // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,   // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,     // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,         // Data of the non block load
-
-   output logic                            lsu_pmu_load_external_m,        // PMU : Bus loads
-   output logic                            lsu_pmu_store_external_m,       // PMU : Bus loads
-   output logic                            lsu_pmu_misaligned_m,           // PMU : misaligned
-   output logic                            lsu_pmu_bus_trxn,               // PMU : bus transaction
-   output logic                            lsu_pmu_bus_misaligned,         // PMU : misaligned access going to the bus
-   output logic                            lsu_pmu_bus_error,              // PMU : bus sending error back
-   output logic                            lsu_pmu_bus_busy,               // PMU : bus is not ready
-
-   // Trigger signals
-   input                                   eb1_trigger_pkt_t [3:0] trigger_pkt_any, // Trigger info from the decode
-   output logic [3:0]                      lsu_trigger_match_m,                      // lsu trigger hit (one bit per trigger)
-
-   // DCCM ports
-   output logic                            dccm_wren,       // DCCM write enable
-   output logic                            dccm_rden,       // DCCM read enable
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo, // DCCM write address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi, // DCCM write address hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo, // DCCM read address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi, // DCCM read address hi bank (hi and low same if aligned read)
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo, // DCCM write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi, // DCCM write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo, // DCCM read data low bank
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi, // DCCM read data hi bank
-
-   // PIC ports
-   output logic                            picm_wren,    // PIC memory write enable
-   output logic                            picm_rden,    // PIC memory read enable
-   output logic                            picm_mken,    // Need to read the mask for stores to determine which bits to write/forward
-   output logic [31:0]                     picm_rdaddr,  // address for pic read access
-   output logic [31:0]                     picm_wraddr,  // address for pic write access
-   output logic [31:0]                     picm_wr_data, // PIC memory write data
-   input logic [31:0]                      picm_rd_data, // PIC memory read/mask data
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   input logic                             lsu_bus_clk_en,    // external drives a clock_en to control bus ratio
-
-   // DMA slave
-   input logic                             dma_dccm_req,       // DMA read/write to dccm
-   input logic [2:0]                       dma_mem_tag,        // DMA request tag
-   input logic [31:0]                      dma_mem_addr,       // DMA address
-   input logic [2:0]                       dma_mem_sz,         // DMA access size
-   input logic                             dma_mem_write,      // DMA access is a write
-   input logic [63:0]                      dma_mem_wdata,      // DMA write data
-
-   output logic                            dccm_dma_rvalid,     // lsu data valid for DMA dccm read
-   output logic                            dccm_dma_ecc_error,  // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,       // DMA request tag
-   output logic [63:0]                     dccm_dma_rdata,      // lsu data for DMA dccm read
-   output logic                            dccm_ready,          // lsu ready for DMA access
-
-   input logic                             scan_mode,           // scan mode
-   input logic                             clk,                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                             active_clk,          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                             rst_l                // reset, active low
-
-   );
-
-
-   logic        lsu_dccm_rden_m;
-   logic        lsu_dccm_rden_r;
-   logic [31:0] store_data_m;
-   logic [31:0] store_data_r;
-   logic [31:0] store_data_hi_r, store_data_lo_r;
-   logic [31:0] store_datafn_hi_r, store_datafn_lo_r;
-   logic [31:0] sec_data_lo_m, sec_data_hi_m;
-   logic [31:0] sec_data_lo_r, sec_data_hi_r;
-
-   logic [31:0] lsu_ld_data_m;
-   logic [31:0] dccm_rdata_hi_m, dccm_rdata_lo_m;
-   logic [6:0]  dccm_data_ecc_hi_m, dccm_data_ecc_lo_m;
-   logic        lsu_single_ecc_error_m;
-   logic        lsu_double_ecc_error_m;
-
-   logic [31:0] lsu_ld_data_r;
-   logic [31:0] lsu_ld_data_corr_r;
-   logic [31:0] dccm_rdata_hi_r, dccm_rdata_lo_r;
-   logic [6:0]  dccm_data_ecc_hi_r, dccm_data_ecc_lo_r;
-   logic        single_ecc_error_hi_r, single_ecc_error_lo_r;
-   logic        lsu_single_ecc_error_r;
-   logic        lsu_double_ecc_error_r;
-   logic        ld_single_ecc_error_r, ld_single_ecc_error_r_ff;
-
-   logic [31:0] picm_mask_data_m;
-
-   logic [31:0] lsu_addr_d, lsu_addr_m, lsu_addr_r;
-   logic [31:0] end_addr_d, end_addr_m, end_addr_r;
-
-   eb1_lsu_pkt_t    lsu_pkt_d, lsu_pkt_m, lsu_pkt_r;
-   logic        lsu_i0_valid_d, lsu_i0_valid_m, lsu_i0_valid_r;
-
-   // Store Buffer signals
-   logic        store_stbuf_reqvld_r;
-   logic        ldst_stbuf_reqvld_r;
-
-   logic        lsu_commit_r;
-   logic        lsu_exc_m;
-
-   logic        addr_in_dccm_d, addr_in_dccm_m, addr_in_dccm_r;
-   logic        addr_in_pic_d, addr_in_pic_m, addr_in_pic_r;
-   logic        ldst_dual_d, ldst_dual_m, ldst_dual_r;
-   logic        addr_external_m;
-
-   logic                          stbuf_reqvld_any;
-   logic                          stbuf_reqvld_flushed_any;
-   logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff, sec_data_hi_r_ff;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff, sec_data_ecc_lo_r_ff;
-
-   logic                          lsu_cmpen_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m;
-
-   logic        lsu_stbuf_commit_any;
-   logic        lsu_stbuf_empty_any;   // This is for blocking loads
-   logic        lsu_stbuf_full_any;
-
-    // Bus signals
-   logic        lsu_busreq_r;
-   logic        lsu_bus_buffer_pend_any;
-   logic        lsu_bus_buffer_empty_any;
-   logic        lsu_bus_buffer_full_any;
-   logic        lsu_busreq_m;
-   logic [31:0] bus_read_data_m;
-
-   logic        flush_m_up, flush_r;
-   logic        is_sideeffects_m;
-   logic [2:0]  dma_mem_tag_d, dma_mem_tag_m;
-   logic        ldst_nodma_mtor;
-   logic        dma_dccm_wen, dma_pic_wen;
-   logic [31:0] dma_dccm_wdata_lo, dma_dccm_wdata_hi;
-   logic [pt.DCCM_ECC_WIDTH-1:0] dma_dccm_wdata_ecc_lo, dma_dccm_wdata_ecc_hi;
-
-   // Clocks
-   logic        lsu_busm_clken;
-   logic        lsu_bus_obuf_c1_clken;
-   logic        lsu_c1_m_clk, lsu_c1_r_clk;
-   logic        lsu_c2_m_clk, lsu_c2_r_clk;
-   logic        lsu_store_c1_m_clk, lsu_store_c1_r_clk;
-
-   logic        lsu_stbuf_c1_clk;
-   logic        lsu_bus_ibuf_c1_clk, lsu_bus_obuf_c1_clk, lsu_bus_buf_c1_clk;
-   logic        lsu_busm_clk;
-   logic        lsu_free_c2_clk;
-
-   logic        lsu_raw_fwd_lo_m, lsu_raw_fwd_hi_m;
-   logic        lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r;
-
-   assign       lsu_raw_fwd_lo_m = (|stbuf_fwdbyteen_lo_m[pt.DCCM_BYTE_WIDTH-1:0]);
-   assign       lsu_raw_fwd_hi_m = (|stbuf_fwdbyteen_hi_m[pt.DCCM_BYTE_WIDTH-1:0]);
-
-   eb1_lsu_lsc_ctl #(.pt(pt)) lsu_lsc_ctl (.*);
-
-   // block stores in decode  - for either bus or stbuf reasons
-   assign lsu_store_stall_any = lsu_stbuf_full_any | lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_load_stall_any = lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_fastint_stall_any = ld_single_ecc_error_r;    // Stall the fastint in decode-1 stage
-
-   // Ready to accept dma trxns
-   // There can't be any inpipe forwarding from non-dma packet to dma packet since they can be flushed so we can't have st in r when dma is in m
-   assign dma_mem_tag_d[2:0]   = dma_mem_tag[2:0];
-   assign ldst_nodma_mtor = (lsu_pkt_m.valid & ~lsu_pkt_m.dma & (addr_in_dccm_m | addr_in_pic_m) & lsu_pkt_m.store);
-
-   assign dccm_ready = ~(dec_lsu_valid_raw_d | ldst_nodma_mtor | ld_single_ecc_error_r_ff);
-
-   assign dma_dccm_wen = dma_dccm_req & dma_mem_write & addr_in_dccm_d & dma_mem_sz[1];   // Perform DMA writes only for word/dword
-   assign dma_pic_wen  = dma_dccm_req & dma_mem_write & addr_in_pic_d;
-   assign {dma_dccm_wdata_hi[31:0], dma_dccm_wdata_lo[31:0]} = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-
-
-   // Generate per cycle flush signals
-   assign flush_m_up = dec_tlu_flush_lower_r;
-   assign flush_r    = dec_tlu_i0_kill_writeb_r;
-
-   // lsu idle
-   // lsu halt idle. This is used for entering the halt mode. Also, DMA accesses are allowed during fence.
-   // Indicates non-idle if there is a instruction valid in d-r or read/write buffers are non-empty since they can come with error
-   // Store buffer now have only non-dma dccm stores
-   // stbuf_empty not needed since it has only dccm stores
-   assign lsu_idle_any = ~((lsu_pkt_m.valid & ~lsu_pkt_m.dma) |
-                           (lsu_pkt_r.valid & ~lsu_pkt_r.dma)) &
-                           lsu_bus_buffer_empty_any;
-
-   assign lsu_active = (lsu_pkt_m.valid | lsu_pkt_r.valid | ld_single_ecc_error_r_ff) | ~lsu_bus_buffer_empty_any;  // This includes DMA. Used for gating top clock
-
-   // Instantiate the store buffer
-   assign store_stbuf_reqvld_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~flush_r & (~lsu_pkt_r.dma | ((lsu_pkt_r.by | lsu_pkt_r.half) & ~lsu_double_ecc_error_r));
-
-   // Disable Forwarding for now
-   assign lsu_cmpen_m = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & (addr_in_dccm_m | addr_in_pic_m);
-
-   // Bus signals
-   assign lsu_busreq_m = lsu_pkt_m.valid & ((lsu_pkt_m.load | lsu_pkt_m.store) & addr_external_m) & ~flush_m_up & ~lsu_exc_m & ~lsu_pkt_m.fast_int;
-
-   // Dual signals
-   assign ldst_dual_d  = (lsu_addr_d[2] != end_addr_d[2]);
-   assign ldst_dual_m  = (lsu_addr_m[2] != end_addr_m[2]);
-   assign ldst_dual_r  = (lsu_addr_r[2] != end_addr_r[2]);
-
-   // PMU signals
-   assign lsu_pmu_misaligned_m     = lsu_pkt_m.valid & ((lsu_pkt_m.half & lsu_addr_m[0]) | (lsu_pkt_m.word & (|lsu_addr_m[1:0])));
-   assign lsu_pmu_load_external_m  = lsu_pkt_m.valid & lsu_pkt_m.load & addr_external_m;
-   assign lsu_pmu_store_external_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_external_m;
-
-   eb1_lsu_dccm_ctl #(.pt(pt)) dccm_ctl (
-      .lsu_addr_d(lsu_addr_d[31:0]),
-      .end_addr_d(end_addr_d[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .lsu_addr_r(lsu_addr_r[31:0]),
-
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_stbuf #(.pt(pt)) stbuf (
-      .lsu_addr_d(lsu_addr_d[pt.LSU_SB_BITS-1:0]),
-      .end_addr_d(end_addr_d[pt.LSU_SB_BITS-1:0]),
-
-      .*
-
-   );
-
-   eb1_lsu_ecc #(.pt(pt)) ecc (
-      .lsu_addr_r(lsu_addr_r[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_trigger #(.pt(pt)) trigger (
-      .store_data_m(store_data_m[31:0]),
-      .*
-   );
-
-   // Clk domain
-   eb1_lsu_clkdomain #(.pt(pt)) clkdomain (.*);
-
-   // Bus interface
-   eb1_lsu_bus_intf #(.pt(pt)) bus_intf (
-      .lsu_addr_m(lsu_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .lsu_addr_r(lsu_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .end_addr_m(end_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .end_addr_r(end_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .store_data_r(store_data_r[31:0] & {32{lsu_busreq_r}}),
-      .*
-   );
-
-   //Flops
-   rvdff #(3) dma_mem_tag_mff     (.*, .din(dma_mem_tag_d[2:0]), .dout(dma_mem_tag_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(2) lsu_raw_fwd_r_ff    (.*, .din({lsu_raw_fwd_hi_m, lsu_raw_fwd_lo_m}),     .dout({lsu_raw_fwd_hi_r, lsu_raw_fwd_lo_r}),     .clk(lsu_c2_r_clk));
-
-`ifdef RV_ASSERT_ON
-   logic [1:0] store_data_bypass_sel;
-   assign store_data_bypass_sel[1:0] =  {lsu_p.store_data_bypass_d, lsu_p.store_data_bypass_m};
-
-   property exception_no_lsu_flush;
-      @(posedge clk)  disable iff(~rst_l) lsu_lsc_ctl.lsu_error_pkt_m.exc_valid |-> ##[1:2] (flush_r );
-   endproperty
-   assert_exception_no_lsu_flush: assert property (exception_no_lsu_flush) else
-      $display("No flush within 2 cycles of exception");
-
-   // offset should be zero for fast interrupt
-   property offset_0_fastint;
-      @(posedge clk) disable iff(~rst_l) (lsu_p.valid & lsu_p.fast_int) |-> (dec_lsu_offset_d[11:0] == 12'b0);
-   endproperty
-   assert_offset_0_fastint: assert property (offset_0_fastint) else
-      $display("dec_tlu_offset_d not zero for fast interrupt redirect");
-
-   // DMA req should assert dccm rden/wren
-   property dmareq_dccm_wren_or_rden;
-      @(posedge clk) disable iff(~rst_l) dma_dccm_req |-> (dccm_rden | dccm_wren | addr_in_pic_d);
-   endproperty
-   assert_dmareq_dccm_wren_or_rden: assert property(dmareq_dccm_wren_or_rden) else
-      $display("dccm rden or wren not asserted during DMA request");
-
-   // fastint_stall should cause load/store stall next cycle
-   property fastint_stall_imply_loadstore_stall;
-      @(posedge clk) disable iff(~rst_l) (lsu_fastint_stall_any & (lsu_commit_r | lsu_pkt_r.dma)) |-> ##1 ((lsu_load_stall_any | lsu_store_stall_any) | ~ld_single_ecc_error_r_ff);
-   endproperty
-   assert_fastint_stall_imply_loadstore_stall: assert property (fastint_stall_imply_loadstore_stall) else
-      $display("fastint_stall should be followed by lsu_load/store_stall_any");
-
-   // Single ECC error implies rfnpc flush
-   property single_ecc_error_rfnpc_flush;
-      @(posedge clk) disable iff(~rst_l) (lsu_error_pkt_r.single_ecc_error & lsu_pkt_r.load) |=> ~lsu_commit_r;
-   endproperty
-   assert_single_ecc_error_rfnpc_flush: assert property (single_ecc_error_rfnpc_flush) else
-     $display("LSU commit next cycle after single ecc error");
-
-`endif
-
-endmodule // eb1_lsu
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_addrcheck.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_addrcheck.sv
deleted file mode 100644
index 010779b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_addrcheck.sv
+++ /dev/null
@@ -1,191 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Checks the memory map for the address
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_addrcheck
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic          lsu_c2_m_clk,              // clock
-   input logic          rst_l,                     // reset
-
-   input logic [31:0]   start_addr_d,              // start address for lsu
-   input logic [31:0]   end_addr_d,                // end address for lsu
-   input eb1_lsu_pkt_t lsu_pkt_d,                 // packet in d
-   input logic [31:0]   dec_tlu_mrac_ff,           // CSR read
-   input logic [3:0]    rs1_region_d,              // address rs operand [31:28]
-
-   input logic [31:0]   rs1_d,                     // address rs operand
-
-   output logic         is_sideeffects_m,          // is sideffects space
-   output logic         addr_in_dccm_d,            // address in dccm
-   output logic         addr_in_pic_d,             // address in pic
-   output logic         addr_external_d,           // address in external
-
-   output logic         access_fault_d,            // access fault
-   output logic         misaligned_fault_d,        // misaligned
-   output logic [3:0]   exc_mscause_d,             // mscause for access/misaligned faults
-
-   output logic         fir_dccm_access_error_d,   // Fast interrupt dccm access error
-   output logic         fir_nondccm_access_error_d,// Fast interrupt dccm access error
-
-   input  logic         scan_mode                  // Scan mode
-);
-
-
-   logic        non_dccm_access_ok;
-   logic        is_sideeffects_d, is_aligned_d;
-   logic        start_addr_in_dccm_d, end_addr_in_dccm_d;
-   logic        start_addr_in_dccm_region_d, end_addr_in_dccm_region_d;
-   logic        start_addr_in_pic_d, end_addr_in_pic_d;
-   logic        start_addr_in_pic_region_d, end_addr_in_pic_region_d;
-   logic [4:0]  csr_idx;
-   logic        addr_in_iccm;
-   logic        start_addr_dccm_or_pic;
-   logic        base_reg_dccm_or_pic;
-   logic        unmapped_access_fault_d, mpu_access_fault_d, picm_access_fault_d, regpred_access_fault_d;
-   logic        regcross_misaligned_fault_d, sideeffect_misaligned_fault_d;
-   logic [3:0]  access_fault_mscause_d;
-   logic [3:0]  misaligned_fault_mscause_d;
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Start address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) start_addr_dccm_rangecheck (
-         .addr(start_addr_d[31:0]),
-         .in_range(start_addr_in_dccm_d),
-         .in_region(start_addr_in_dccm_region_d)
-      );
-
-      // End address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) end_addr_dccm_rangecheck (
-         .addr(end_addr_d[31:0]),
-         .in_range(end_addr_in_dccm_d),
-         .in_region(end_addr_in_dccm_region_d)
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign start_addr_in_dccm_d = '0;
-      assign start_addr_in_dccm_region_d = '0;
-      assign end_addr_in_dccm_d = '0;
-      assign end_addr_in_dccm_region_d = '0;
-   end
-
-   if (pt.ICCM_ENABLE == 1) begin : check_iccm
-      assign addr_in_iccm =  (start_addr_d[31:28] == pt.ICCM_REGION);
-   end else begin
-     assign addr_in_iccm = 1'b0;
-   end
-
-   // PIC memory check
-   // Start address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) start_addr_pic_rangecheck (
-      .addr(start_addr_d[31:0]),
-      .in_range(start_addr_in_pic_d),
-      .in_region(start_addr_in_pic_region_d)
-   );
-
-   // End address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) end_addr_pic_rangecheck (
-      .addr(end_addr_d[31:0]),
-      .in_range(end_addr_in_pic_d),
-      .in_region(end_addr_in_pic_region_d)
-   );
-
-   assign start_addr_dccm_or_pic  = start_addr_in_dccm_region_d | start_addr_in_pic_region_d;
-   assign base_reg_dccm_or_pic    = ((rs1_region_d[3:0] == pt.DCCM_REGION) & pt.DCCM_ENABLE) | (rs1_region_d[3:0] == pt.PIC_REGION);
-   assign addr_in_dccm_d          = (start_addr_in_dccm_d & end_addr_in_dccm_d);
-   assign addr_in_pic_d           = (start_addr_in_pic_d & end_addr_in_pic_d);
-
-   assign addr_external_d   = ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d);
-   assign csr_idx[4:0]       = {start_addr_d[31:28], 1'b1};
-   assign is_sideeffects_d = dec_tlu_mrac_ff[csr_idx] & ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d | addr_in_iccm) & lsu_pkt_d.valid & (lsu_pkt_d.store | lsu_pkt_d.load);  //every region has the 2 LSB indicating ( 1: sideeffects/no_side effects, and 0: cacheable ). Ignored in internal regions
-   assign is_aligned_d    = (lsu_pkt_d.word & (start_addr_d[1:0] == 2'b0)) |
-                              (lsu_pkt_d.half & (start_addr_d[0] == 1'b0)) |
-                              lsu_pkt_d.by;
-
-   assign non_dccm_access_ok = (~(|{pt.DATA_ACCESS_ENABLE0,pt.DATA_ACCESS_ENABLE1,pt.DATA_ACCESS_ENABLE2,pt.DATA_ACCESS_ENABLE3,pt.DATA_ACCESS_ENABLE4,pt.DATA_ACCESS_ENABLE5,pt.DATA_ACCESS_ENABLE6,pt.DATA_ACCESS_ENABLE7})) |
-                               (((pt.DATA_ACCESS_ENABLE0 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7)))   &
-                                ((pt.DATA_ACCESS_ENABLE0 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7))));
-
-   // Access fault logic
-   // 0. Unmapped local memory : Addr in dccm region but not in dccm offset OR Addr in picm region but not in picm offset OR DCCM -> PIC cross when DCCM/PIC in same region
-   // 1. Uncorrectable (double bit) ECC error
-   // 3. Address is not in a populated non-dccm region
-   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   // 6. Ld/St access to picm are not word aligned or word size
-   assign regpred_access_fault_d  = (start_addr_dccm_or_pic ^ base_reg_dccm_or_pic);                   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   assign picm_access_fault_d     = (addr_in_pic_d & ((start_addr_d[1:0] != 2'b0) | ~lsu_pkt_d.word));                                               // 6. Ld/St access to picm are not word aligned or word size
-
-   if (pt.DCCM_ENABLE & (pt.DCCM_REGION == pt.PIC_REGION)) begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~(start_addr_in_dccm_d | start_addr_in_pic_d)) |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (end_addr_in_dccm_region_d & ~(end_addr_in_dccm_d | end_addr_in_pic_d))       |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (start_addr_in_dccm_d & end_addr_in_pic_d)                                    |   // 0. DCCM -> PIC cross when DCCM/PIC in same region
-                                        (start_addr_in_pic_d  & end_addr_in_dccm_d));                                     // 0. DCCM -> PIC cross when DCCM/PIC in same region
-      assign mpu_access_fault_d      = (~start_addr_in_dccm_region_d & ~non_dccm_access_ok);                              // 3. Address is not in a populated non-dccm region
-   end else begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d)                              |   // 0. Addr in dccm region but not in dccm offset
-                                        (end_addr_in_dccm_region_d & ~end_addr_in_dccm_d)                                  |   // 0. Addr in dccm region but not in dccm offset
-                                        (start_addr_in_pic_region_d & ~start_addr_in_pic_d)                                |   // 0. Addr in picm region but not in picm offset
-                                        (end_addr_in_pic_region_d & ~end_addr_in_pic_d));                                      // 0. Addr in picm region but not in picm offset
-      assign mpu_access_fault_d      = (~start_addr_in_pic_region_d & ~start_addr_in_dccm_region_d & ~non_dccm_access_ok);     // 3. Address is not in a populated non-dccm region
-   end
-
-   assign access_fault_d = (unmapped_access_fault_d | mpu_access_fault_d | picm_access_fault_d | regpred_access_fault_d) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign access_fault_mscause_d[3:0] = unmapped_access_fault_d ? 4'h2 : mpu_access_fault_d ? 4'h3 : regpred_access_fault_d ? 4'h5 : picm_access_fault_d ? 4'h6 : 4'h0;
-
-   // Misaligned happens due to 2 reasons
-   // 0. Region cross
-   // 1. sideeffects access which are not aligned
-   assign regcross_misaligned_fault_d = (start_addr_d[31:28] != end_addr_d[31:28]);
-   assign sideeffect_misaligned_fault_d = (is_sideeffects_d & ~is_aligned_d);
-   assign misaligned_fault_d = (regcross_misaligned_fault_d | (sideeffect_misaligned_fault_d & addr_external_d)) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign misaligned_fault_mscause_d[3:0] = regcross_misaligned_fault_d ? 4'h2 : sideeffect_misaligned_fault_d ? 4'h1 : 4'h0;
-
-   assign exc_mscause_d[3:0] = misaligned_fault_d ? misaligned_fault_mscause_d[3:0] : access_fault_mscause_d[3:0];
-
-   // Fast interrupt error logic
-   assign fir_dccm_access_error_d    = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d) |
-                                        (end_addr_in_dccm_region_d   & ~end_addr_in_dccm_d)) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-   assign fir_nondccm_access_error_d = ~(start_addr_in_dccm_region_d & end_addr_in_dccm_region_d) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-
-   rvdff #(.WIDTH(1))   is_sideeffects_mff (.din(is_sideeffects_d), .dout(is_sideeffects_m), .clk(lsu_c2_m_clk), .*);
-
-endmodule // eb1_lsu_addrcheck
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_bus_buffer.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_bus_buffer.sv
deleted file mode 100644
index 1293f6e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_bus_buffer.sv
+++ /dev/null
@@ -1,936 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-
-module eb1_lsu_bus_buffer
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // Don't block the sideeffect load store to the bus
-   input logic                          dec_tlu_force_halt,
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,
-   input logic                          lsu_busm_clken,
-   input logic                          lsu_c2_r_clk,
-   input logic                          lsu_bus_ibuf_c1_clk,
-   input logic                          lsu_bus_obuf_c1_clk,
-   input logic                          lsu_bus_buf_c1_clk,
-   input logic                          lsu_free_c2_clk,
-   input logic                          lsu_busm_clk,
-
-
-   input logic                          dec_lsu_valid_raw_d,            // Raw valid for address computation
-   input eb1_lsu_pkt_t                 lsu_pkt_m,                      // lsu packet flowing down the pipe
-   input eb1_lsu_pkt_t                 lsu_pkt_r,                      // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   store_data_r,                   // store data flowing down the pipe
-
-   input logic                          no_word_merge_r,                // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          no_dword_merge_r,               // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          lsu_busreq_m,                   // bus request is in m
-   output logic                         lsu_busreq_r,                   // bus request is in r
-   input logic                          ld_full_hit_m,                  // load can get all its byte from a write buffer entry
-   input logic                          flush_m_up,                     // flush
-   input logic                          flush_r,                        // flush
-   input logic                          lsu_commit_r,                   // lsu instruction in r commits
-   input logic                          is_sideeffects_r,               // lsu attribute is side_effects
-   input logic                          ldst_dual_d,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_m,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_r,                    // load/store is unaligned at 32 bit boundary
-
-   input logic [7:0]                    ldst_byteen_ext_m,              // HI and LO signals
-
-   output logic                         lsu_bus_buffer_pend_any,          // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,          // bus buffer is full
-   output logic                         lsu_bus_buffer_empty_any,         // bus buffer is empty
-
-   output logic [3:0]                   ld_byte_hit_buf_lo, ld_byte_hit_buf_hi,    // Byte enables for forwarding data
-   output logic [31:0]                  ld_fwddata_buf_lo, ld_fwddata_buf_hi,      // load forwarding data
-
-   output logic                         lsu_imprecise_error_load_any,     // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,    // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,     // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,     // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,       // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,       // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,   // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,  // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,  // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,    // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,        // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-
-   input logic                             lsu_bus_clk_en,
-   input logic                             lsu_bus_clk_en_q
-
-);
-
-   // For Ld: IDLE -> WAIT -> CMD -> RESP -> DONE_PARTIAL(?) -> DONE_WAIT(?) -> DONE -> IDLE
-   // For St: IDLE -> WAIT -> CMD -> RESP(?) -> IDLE
-   typedef enum logic [2:0] {IDLE=3'b000, WAIT=3'b001, CMD=3'b010, RESP=3'b011, DONE_PARTIAL=3'b100, DONE_WAIT=3'b101, DONE=3'b110} state_t;
-
-   localparam DEPTH     = pt.LSU_NUM_NBLOAD;
-   localparam DEPTH_LOG2 = pt.LSU_NUM_NBLOAD_WIDTH;
-   localparam TIMER     = 8;   // This can be only power of 2
-   localparam TIMER_MAX = TIMER - 1;  // Maximum value of timer
-   localparam TIMER_LOG2 = (TIMER < 2) ? 1 : $clog2(TIMER);
-
-   logic [3:0]                          ldst_byteen_hi_m, ldst_byteen_lo_m;
-   logic [DEPTH-1:0]                    ld_addr_hitvec_lo, ld_addr_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvec_lo, ld_byte_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvecfn_lo, ld_byte_hitvecfn_hi;
-
-   logic                                ld_addr_ibuf_hit_lo, ld_addr_ibuf_hit_hi;
-   logic [3:0]                          ld_byte_ibuf_hit_lo, ld_byte_ibuf_hit_hi;
-
-   logic [3:0]                          ldst_byteen_r;
-   logic [3:0]                          ldst_byteen_hi_r, ldst_byteen_lo_r;
-   logic [31:0]                         store_data_hi_r, store_data_lo_r;
-   logic                                is_aligned_r;                   // Aligned load/store
-   logic                                ldst_samedw_r;
-
-   logic                                lsu_nonblock_load_valid_r;
-   logic [31:0]                         lsu_nonblock_load_data_hi, lsu_nonblock_load_data_lo, lsu_nonblock_data_unalgn;
-   logic [1:0]                          lsu_nonblock_addr_offset;
-   logic [1:0]                          lsu_nonblock_sz;
-   logic                                lsu_nonblock_unsign;
-   logic                                lsu_nonblock_load_data_ready;
-
-   logic [DEPTH-1:0]                    CmdPtr0Dec, CmdPtr1Dec;
-   logic [DEPTH-1:0]                    RspPtrDec;
-   logic [DEPTH_LOG2-1:0]               CmdPtr0, CmdPtr1;
-   logic [DEPTH_LOG2-1:0]               RspPtr;
-   logic [DEPTH_LOG2-1:0]               WrPtr0_m, WrPtr0_r;
-   logic [DEPTH_LOG2-1:0]               WrPtr1_m, WrPtr1_r;
-   logic                                found_wrptr0, found_wrptr1, found_cmdptr0, found_cmdptr1;
-   logic [3:0]                          buf_numvld_any, buf_numvld_wrcmd_any, buf_numvld_cmd_any, buf_numvld_pend_any;
-   logic                                any_done_wait_state;
-   logic                                bus_sideeffect_pend;
-   logic                                bus_coalescing_disable;
-
-   logic                                bus_addr_match_pending;
-   logic                                bus_cmd_sent, bus_cmd_ready;
-   logic                                bus_wcmd_sent, bus_wdata_sent;
-   logic                                bus_rsp_read, bus_rsp_write;
-   logic [pt.LSU_BUS_TAG-1:0]           bus_rsp_read_tag, bus_rsp_write_tag;
-   logic                                bus_rsp_read_error, bus_rsp_write_error;
-   logic [63:0]                         bus_rsp_rdata;
-
-   // Bus buffer signals
-   state_t [DEPTH-1:0]                  buf_state;
-   logic   [DEPTH-1:0][1:0]             buf_sz;
-   logic   [DEPTH-1:0][31:0]            buf_addr;
-   logic   [DEPTH-1:0][3:0]             buf_byteen;
-   logic   [DEPTH-1:0]                  buf_sideeffect;
-   logic   [DEPTH-1:0]                  buf_write;
-   logic   [DEPTH-1:0]                  buf_unsign;
-   logic   [DEPTH-1:0]                  buf_dual;
-   logic   [DEPTH-1:0]                  buf_samedw;
-   logic   [DEPTH-1:0]                  buf_nomerge;
-   logic   [DEPTH-1:0]                  buf_dualhi;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag;
-   logic   [DEPTH-1:0]                  buf_ldfwd;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag;
-   logic   [DEPTH-1:0]                  buf_error;
-   logic   [DEPTH-1:0][31:0]            buf_data;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age, buf_age_younger;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage, buf_rsp_pickage;
-
-   state_t [DEPTH-1:0]                  buf_nxtstate;
-   logic   [DEPTH-1:0]                  buf_rst;
-   logic   [DEPTH-1:0]                  buf_state_en;
-   logic   [DEPTH-1:0]                  buf_cmd_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_resp_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_dual_in;
-   logic   [DEPTH-1:0]                  buf_samedw_in;
-   logic   [DEPTH-1:0]                  buf_nomerge_in;
-   logic   [DEPTH-1:0]                  buf_sideeffect_in;
-   logic   [DEPTH-1:0]                  buf_unsign_in;
-   logic   [DEPTH-1:0][1:0]             buf_sz_in;
-   logic   [DEPTH-1:0]                  buf_write_in;
-   logic   [DEPTH-1:0]                  buf_wr_en;
-   logic   [DEPTH-1:0]                  buf_dualhi_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag_in;
-   logic   [DEPTH-1:0]                  buf_ldfwd_en;
-   logic   [DEPTH-1:0]                  buf_ldfwd_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag_in;
-   logic   [DEPTH-1:0][3:0]             buf_byteen_in;
-   logic   [DEPTH-1:0][31:0]            buf_addr_in;
-   logic   [DEPTH-1:0][31:0]            buf_data_in;
-   logic   [DEPTH-1:0]                  buf_error_en;
-   logic   [DEPTH-1:0]                  buf_data_en;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_ageQ;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_set;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspageQ;
-
-   // Input buffer signals
-   logic                               ibuf_valid;
-   logic                               ibuf_dual;
-   logic                               ibuf_samedw;
-   logic                               ibuf_nomerge;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag;
-   logic                               ibuf_sideeffect;
-   logic                               ibuf_unsign;
-   logic                               ibuf_write;
-   logic [1:0]                         ibuf_sz;
-   logic [3:0]                         ibuf_byteen;
-   logic [31:0]                        ibuf_addr;
-   logic [31:0]                        ibuf_data;
-   logic [TIMER_LOG2-1:0]              ibuf_timer;
-
-   logic                               ibuf_byp;
-   logic                               ibuf_wr_en;
-   logic                               ibuf_rst;
-   logic                               ibuf_force_drain;
-   logic                               ibuf_drain_vld;
-   logic [DEPTH-1:0]                   ibuf_drainvec_vld;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag_in;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag_in;
-   logic [1:0]                         ibuf_sz_in;
-   logic [31:0]                        ibuf_addr_in;
-   logic [3:0]                         ibuf_byteen_in;
-   logic [31:0]                        ibuf_data_in;
-   logic [TIMER_LOG2-1:0]              ibuf_timer_in;
-   logic [3:0]                         ibuf_byteen_out;
-   logic [31:0]                        ibuf_data_out;
-   logic                               ibuf_merge_en, ibuf_merge_in;
-
-   // Output buffer signals
-   logic                               obuf_valid;
-   logic                               obuf_write;
-   logic                               obuf_nosend;
-   logic                               obuf_rdrsp_pend;
-   logic                               obuf_sideeffect;
-   logic [31:0]                        obuf_addr;
-   logic [63:0]                        obuf_data;
-   logic [1:0]                         obuf_sz;
-   logic [7:0]                         obuf_byteen;
-   logic                               obuf_merge;
-   logic                               obuf_cmd_done, obuf_data_done;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag;
-
-   logic                               ibuf_buf_byp;
-   logic                               obuf_force_wr_en;
-   logic                               obuf_wr_wait;
-   logic                               obuf_wr_en, obuf_wr_enQ;
-   logic                               obuf_rst;
-   logic                               obuf_write_in;
-   logic                               obuf_nosend_in;
-   logic                               obuf_rdrsp_pend_en;
-   logic                               obuf_rdrsp_pend_in;
-   logic                               obuf_sideeffect_in;
-   logic                               obuf_aligned_in;
-   logic [31:0]                        obuf_addr_in;
-   logic [63:0]                        obuf_data_in;
-   logic [1:0]                         obuf_sz_in;
-   logic [7:0]                         obuf_byteen_in;
-   logic                               obuf_merge_in;
-   logic                               obuf_cmd_done_in, obuf_data_done_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag_in;
-
-   logic                               obuf_merge_en;
-   logic [TIMER_LOG2-1:0]              obuf_wr_timer, obuf_wr_timer_in;
-   logic [7:0]                         obuf_byteen0_in, obuf_byteen1_in;
-   logic [63:0]                        obuf_data0_in, obuf_data1_in;
-
-   logic                               lsu_axi_awvalid_q, lsu_axi_awready_q;
-   logic                               lsu_axi_wvalid_q, lsu_axi_wready_q;
-   logic                               lsu_axi_arvalid_q, lsu_axi_arready_q;
-   logic                               lsu_axi_bvalid_q, lsu_axi_bready_q;
-   logic                               lsu_axi_rvalid_q, lsu_axi_rready_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_axi_bid_q, lsu_axi_rid_q;
-   logic [1:0]                         lsu_axi_bresp_q, lsu_axi_rresp_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_imprecise_error_store_tag;
-   logic [63:0]                        lsu_axi_rdata_q;
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic start
-   //------------------------------------------------------------------------------
-
-   // Function to do 8 to 3 bit encoding
-   function automatic logic [2:0] f_Enc8to3;
-      input logic [7:0] Dec_value;
-
-      logic [2:0]       Enc_value;
-      Enc_value[0] = Dec_value[1] | Dec_value[3] | Dec_value[5] | Dec_value[7];
-      Enc_value[1] = Dec_value[2] | Dec_value[3] | Dec_value[6] | Dec_value[7];
-      Enc_value[2] = Dec_value[4] | Dec_value[5] | Dec_value[6] | Dec_value[7];
-
-      return Enc_value[2:0];
-   endfunction // f_Enc8to3
-
-   // Buffer hit logic for bus load forwarding
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   for (genvar i=0; i<DEPTH; i++) begin
-      assign ld_addr_hitvec_lo[i] = (lsu_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-      assign ld_addr_hitvec_hi[i] = (end_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-   end
-
-   for (genvar j=0; j<4; j++) begin
-     assign ld_byte_hit_buf_lo[j] = |(ld_byte_hitvecfn_lo[j]) | ld_byte_ibuf_hit_lo[j];
-     assign ld_byte_hit_buf_hi[j] = |(ld_byte_hitvecfn_hi[j]) | ld_byte_ibuf_hit_hi[j];
-     for (genvar i=0; i<DEPTH; i++) begin
-         assign ld_byte_hitvec_lo[j][i] = ld_addr_hitvec_lo[i] & buf_byteen[i][j] & ldst_byteen_lo_m[j];
-         assign ld_byte_hitvec_hi[j][i] = ld_addr_hitvec_hi[i] & buf_byteen[i][j] & ldst_byteen_hi_m[j];
-
-         assign ld_byte_hitvecfn_lo[j][i] = ld_byte_hitvec_lo[j][i] & ~(|(ld_byte_hitvec_lo[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_lo[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-         assign ld_byte_hitvecfn_hi[j][i] = ld_byte_hitvec_hi[j][i] & ~(|(ld_byte_hitvec_hi[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_hi[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-      end
-   end
-
-   // Hit in the ibuf
-   assign ld_addr_ibuf_hit_lo = (lsu_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-   assign ld_addr_ibuf_hit_hi = (end_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin
-      assign ld_byte_ibuf_hit_lo[i] = ld_addr_ibuf_hit_lo & ibuf_byteen[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_ibuf_hit_hi[i] = ld_addr_ibuf_hit_hi & ibuf_byteen[i] & ldst_byteen_hi_m[i];
-   end
-
-   always_comb begin
-      ld_fwddata_buf_lo[31:0] = {{8{ld_byte_ibuf_hit_lo[3]}},{8{ld_byte_ibuf_hit_lo[2]}},{8{ld_byte_ibuf_hit_lo[1]}},{8{ld_byte_ibuf_hit_lo[0]}}} & ibuf_data[31:0];
-      ld_fwddata_buf_hi[31:0] = {{8{ld_byte_ibuf_hit_hi[3]}},{8{ld_byte_ibuf_hit_hi[2]}},{8{ld_byte_ibuf_hit_hi[1]}},{8{ld_byte_ibuf_hit_hi[0]}}} & ibuf_data[31:0];
-      for (int i=0; i<DEPTH; i++) begin
-         ld_fwddata_buf_lo[7:0]   |= {8{ld_byte_hitvecfn_lo[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_lo[15:8]  |= {8{ld_byte_hitvecfn_lo[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_lo[23:16] |= {8{ld_byte_hitvecfn_lo[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_lo[31:24] |= {8{ld_byte_hitvecfn_lo[3][i]}} & buf_data[i][31:24];
-
-         ld_fwddata_buf_hi[7:0]   |= {8{ld_byte_hitvecfn_hi[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_hi[15:8]  |= {8{ld_byte_hitvecfn_hi[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_hi[23:16] |= {8{ld_byte_hitvecfn_hi[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_hi[31:24] |= {8{ld_byte_hitvecfn_hi[3][i]}} & buf_data[i][31:24];
-      end
-   end
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic end
-   //------------------------------------------------------------------------------
-
-   assign bus_coalescing_disable = dec_tlu_wb_coalescing_disable | pt.BUILD_AHB_LITE;
-
-   // Get the hi/lo byte enable
-   assign ldst_byteen_r[3:0] = ({4{lsu_pkt_r.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_r.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_r.word}} & 4'b1111);
-
-   assign {ldst_byteen_hi_r[3:0], ldst_byteen_lo_r[3:0]} = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-   assign {store_data_hi_r[31:0], store_data_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-   assign ldst_samedw_r    = (lsu_addr_r[3] == end_addr_r[3]);
-   assign is_aligned_r    = (lsu_pkt_r.word & (lsu_addr_r[1:0] == 2'b0)) |
-                            (lsu_pkt_r.half & (lsu_addr_r[0] == 1'b0))   |
-                            lsu_pkt_r.by;
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign ibuf_byp = lsu_busreq_r & (lsu_pkt_r.load | no_word_merge_r) & ~ibuf_valid;
-   assign ibuf_wr_en = lsu_busreq_r & lsu_commit_r & ~ibuf_byp;
-   assign ibuf_rst   = (ibuf_drain_vld & ~ibuf_wr_en) | dec_tlu_force_halt;
-   assign ibuf_force_drain = lsu_busreq_m & ~lsu_busreq_r & ibuf_valid & (lsu_pkt_m.load | (ibuf_addr[31:2] != lsu_addr_m[31:2]));  // Move the ibuf to buf if there is a non-colaescable ld/st in m but nothing in r
-   assign ibuf_drain_vld = ibuf_valid & (((ibuf_wr_en | (ibuf_timer == TIMER_MAX)) & ~(ibuf_merge_en & ibuf_merge_in)) | ibuf_byp | ibuf_force_drain | ibuf_sideeffect | ~ibuf_write | bus_coalescing_disable);
-   assign ibuf_tag_in[DEPTH_LOG2-1:0] = (ibuf_merge_en & ibuf_merge_in) ? ibuf_tag[DEPTH_LOG2-1:0] : (ldst_dual_r ? WrPtr1_r : WrPtr0_r);
-   assign ibuf_dualtag_in[DEPTH_LOG2-1:0] = WrPtr0_r;
-   assign ibuf_sz_in[1:0]   = {lsu_pkt_r.word, lsu_pkt_r.half};
-   assign ibuf_addr_in[31:0] = ldst_dual_r ? end_addr_r[31:0] : lsu_addr_r[31:0];
-   assign ibuf_byteen_in[3:0] = (ibuf_merge_en & ibuf_merge_in) ? (ibuf_byteen[3:0] | ldst_byteen_lo_r[3:0]) : (ldst_dual_r ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_data_in[(8*i)+7:(8*i)] = (ibuf_merge_en & ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                             (ldst_dual_r ? store_data_hi_r[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)]);
-   end
-   assign ibuf_timer_in = ibuf_wr_en ? '0 : (ibuf_timer < TIMER_MAX) ? (ibuf_timer + 1'b1) : ibuf_timer;
-
-
-   assign ibuf_merge_en = lsu_busreq_r & lsu_commit_r & lsu_pkt_r.store & ibuf_valid & ibuf_write & (lsu_addr_r[31:2] == ibuf_addr[31:2]) & ~is_sideeffects_r & ~bus_coalescing_disable;
-   assign ibuf_merge_in = ~ldst_dual_r;   // If it's a unaligned store, merge needs to happen on the way out of ibuf
-
-   // ibuf signals going to bus buffer after merging
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_byteen_out[i] = (ibuf_merge_en & ~ibuf_merge_in) ? (ibuf_byteen[i] | ldst_byteen_lo_r[i]) : ibuf_byteen[i];
-      assign ibuf_data_out[(8*i)+7:(8*i)] = (ibuf_merge_en & ~ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                                                        ibuf_data[(8*i)+7:(8*i)];
-   end
-
-   rvdffsc #(.WIDTH(1))              ibuf_valid_ff     (.din(1'b1),                      .dout(ibuf_valid),      .en(ibuf_wr_en), .clear(ibuf_rst), .clk(lsu_free_c2_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_tagff        (.din(ibuf_tag_in),               .dout(ibuf_tag),        .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_dualtagff    (.din(ibuf_dualtag_in),           .dout(ibuf_dualtag),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_dualff       (.din(ldst_dual_r),               .dout(ibuf_dual),       .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_samedwff     (.din(ldst_samedw_r),             .dout(ibuf_samedw),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_nomergeff    (.din(no_dword_merge_r),          .dout(ibuf_nomerge),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_sideeffectff (.din(is_sideeffects_r),          .dout(ibuf_sideeffect), .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_unsignff     (.din(lsu_pkt_r.unsign),          .dout(ibuf_unsign),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_writeff      (.din(lsu_pkt_r.store),           .dout(ibuf_write),      .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(2))              ibuf_szff         (.din(ibuf_sz_in[1:0]),           .dout(ibuf_sz),         .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_addrff       (.din(ibuf_addr_in[31:0]),        .dout(ibuf_addr),       .en(ibuf_wr_en),                                              .*);
-   rvdffs  #(.WIDTH(4))              ibuf_byteenff     (.din(ibuf_byteen_in[3:0]),       .dout(ibuf_byteen),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_dataff       (.din(ibuf_data_in[31:0]),        .dout(ibuf_data),       .en(ibuf_wr_en),                                              .*);
-   rvdff   #(.WIDTH(TIMER_LOG2))     ibuf_timerff      (.din(ibuf_timer_in),             .dout(ibuf_timer),                                         .clk(lsu_free_c2_clk),     .*);
-
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic ends here
-   //------------------------------------------------------------------------------
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign obuf_wr_wait = (buf_numvld_wrcmd_any[3:0] == 4'b1) & (buf_numvld_cmd_any[3:0] == 4'b1) & (obuf_wr_timer != TIMER_MAX) &
-                         ~bus_coalescing_disable & ~buf_nomerge[CmdPtr0] & ~buf_sideeffect[CmdPtr0] & ~obuf_force_wr_en;
-   assign obuf_wr_timer_in = obuf_wr_en ? 3'b0: (((buf_numvld_cmd_any > 4'b0) & (obuf_wr_timer < TIMER_MAX)) ? (obuf_wr_timer + 1'b1) : obuf_wr_timer);
-   assign obuf_force_wr_en = lsu_busreq_m & ~lsu_busreq_r & ~ibuf_valid & (buf_numvld_cmd_any[3:0] == 4'b1) & (lsu_addr_m[31:2] != buf_addr[CmdPtr0][31:2]);   // Entry in m can't merge with entry going to obuf and there is no entry in between
-   assign ibuf_buf_byp = ibuf_byp & (buf_numvld_pend_any[3:0] == 4'b0) & (~lsu_pkt_r.store | no_dword_merge_r);
-
-   assign obuf_wr_en = ((ibuf_buf_byp & lsu_commit_r & ~(is_sideeffects_r & bus_sideeffect_pend)) |
-                        ((buf_state[CmdPtr0] == CMD) & found_cmdptr0 & ~buf_cmd_state_bus_en[CmdPtr0] & ~(buf_sideeffect[CmdPtr0] & bus_sideeffect_pend) &
-                         (~(buf_dual[CmdPtr0] & buf_samedw[CmdPtr0] & ~buf_write[CmdPtr0]) | found_cmdptr1 | buf_nomerge[CmdPtr0] | obuf_force_wr_en))) &
-                       (bus_cmd_ready | ~obuf_valid | obuf_nosend) & ~obuf_wr_wait  & ~bus_addr_match_pending & lsu_bus_clk_en;
-
-   assign obuf_rst   = ((bus_cmd_sent | (obuf_valid & obuf_nosend)) & ~obuf_wr_en & lsu_bus_clk_en) | dec_tlu_force_halt;
-
-   assign obuf_write_in      = ibuf_buf_byp ? lsu_pkt_r.store : buf_write[CmdPtr0];
-   assign obuf_sideeffect_in = ibuf_buf_byp ? is_sideeffects_r : buf_sideeffect[CmdPtr0];
-   assign obuf_addr_in[31:0] = ibuf_buf_byp ? lsu_addr_r[31:0] : buf_addr[CmdPtr0];
-   assign obuf_sz_in[1:0]    = ibuf_buf_byp ? {lsu_pkt_r.word, lsu_pkt_r.half} : buf_sz[CmdPtr0];
-   assign obuf_merge_in      = obuf_merge_en;
-   assign obuf_tag0_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr0_r) : (pt.LSU_BUS_TAG)'(CmdPtr0);
-   assign obuf_tag1_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr1_r) : (pt.LSU_BUS_TAG)'(CmdPtr1);
-
-   assign obuf_cmd_done_in    = ~(obuf_wr_en | obuf_rst) & (obuf_cmd_done | bus_wcmd_sent);
-   assign obuf_data_done_in   = ~(obuf_wr_en | obuf_rst) & (obuf_data_done | bus_wdata_sent);
-
-   assign obuf_aligned_in    = ibuf_buf_byp ? is_aligned_r : ((obuf_sz_in[1:0] == 2'b0) |
-                                                              (obuf_sz_in[0] & ~obuf_addr_in[0]) |
-                                                              (obuf_sz_in[1] & ~(|obuf_addr_in[1:0])));
-
-   assign obuf_rdrsp_pend_in  = ((~(obuf_wr_en & ~obuf_nosend_in) & obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))) | (bus_cmd_sent & ~obuf_write)) & ~dec_tlu_force_halt;
-   assign obuf_rdrsp_pend_en  = lsu_bus_clk_en | dec_tlu_force_halt;
-   assign obuf_rdrsp_tag_in[pt.LSU_BUS_TAG-1:0] = (bus_cmd_sent & ~obuf_write) ? obuf_tag0[pt.LSU_BUS_TAG-1:0] : obuf_rdrsp_tag[pt.LSU_BUS_TAG-1:0];
-   // No ld to ld fwd for aligned
-   assign obuf_nosend_in      = (obuf_addr_in[31:3] == obuf_addr[31:3]) & obuf_aligned_in & ~obuf_sideeffect & ~obuf_write & ~obuf_write_in & ~dec_tlu_external_ldfwd_disable &
-                                ((obuf_valid & ~obuf_nosend) | (obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))));
-
-   assign obuf_byteen0_in[7:0] = ibuf_buf_byp ? (lsu_addr_r[2] ? {ldst_byteen_lo_r[3:0],4'b0} : {4'b0,ldst_byteen_lo_r[3:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_byteen[CmdPtr0],4'b0} : {4'b0,buf_byteen[CmdPtr0]});
-   assign obuf_byteen1_in[7:0] = ibuf_buf_byp ? (end_addr_r[2] ? {ldst_byteen_hi_r[3:0],4'b0} : {4'b0,ldst_byteen_hi_r[3:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_byteen[CmdPtr1],4'b0} : {4'b0,buf_byteen[CmdPtr1]});
-   assign obuf_data0_in[63:0]  = ibuf_buf_byp ? (lsu_addr_r[2] ? {store_data_lo_r[31:0],32'b0} : {32'b0,store_data_lo_r[31:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_data[CmdPtr0],32'b0} : {32'b0,buf_data[CmdPtr0]});
-   assign obuf_data1_in[63:0]  = ibuf_buf_byp ? (end_addr_r[2] ? {store_data_hi_r[31:0],32'b0} :{32'b0,store_data_hi_r[31:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_data[CmdPtr1],32'b0} : {32'b0,buf_data[CmdPtr1]});
-
-   for (genvar i=0 ;i<8; i++) begin
-      assign obuf_byteen_in[i] = obuf_byteen0_in[i] | (obuf_merge_en & obuf_byteen1_in[i]);
-      assign obuf_data_in[(8*i)+7:(8*i)] = (obuf_merge_en & obuf_byteen1_in[i]) ? obuf_data1_in[(8*i)+7:(8*i)] : obuf_data0_in[(8*i)+7:(8*i)];
-   end
-
-   // No store obuf merging for AXI since all stores are sent non-posted. Can't track the second id right now
-   assign obuf_merge_en = ((CmdPtr0 != CmdPtr1) & found_cmdptr0 & found_cmdptr1 & (buf_state[CmdPtr0] == CMD) & (buf_state[CmdPtr1] == CMD) &
-                           ~buf_cmd_state_bus_en[CmdPtr0] & ~buf_sideeffect[CmdPtr0] &
-                           (~buf_write[CmdPtr0] & buf_dual[CmdPtr0] & ~buf_dualhi[CmdPtr0] & buf_samedw[CmdPtr0])) |  // CmdPtr0/CmdPtr1 are for same load which is within a DW
-                          (ibuf_buf_byp & ldst_samedw_r & ldst_dual_r);
-
-
-   rvdff_fpga  #(.WIDTH(1))              obuf_wren_ff      (.din(obuf_wr_en),                  .dout(obuf_wr_enQ),                                        .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-   rvdffsc     #(.WIDTH(1))              obuf_valid_ff     (.din(1'b1),                        .dout(obuf_valid),      .en(obuf_wr_en), .clear(obuf_rst), .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_nosend_ff    (.din(obuf_nosend_in),              .dout(obuf_nosend),     .en(obuf_wr_en),                   .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_rdrsp_pend_ff(.din(obuf_rdrsp_pend_in),          .dout(obuf_rdrsp_pend), .en(obuf_rdrsp_pend_en),           .clk(lsu_free_c2_clk),                                                  .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_cmd_done_ff  (.din(obuf_cmd_done_in),            .dout(obuf_cmd_done),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_data_done_ff (.din(obuf_data_done_in),           .dout(obuf_data_done),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) obuf_rdrsp_tagff  (.din(obuf_rdrsp_tag_in),           .dout(obuf_rdrsp_tag),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag0ff       (.din(obuf_tag0_in),                .dout(obuf_tag0),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag1ff       (.din(obuf_tag1_in),                .dout(obuf_tag1),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_mergeff      (.din(obuf_merge_in),               .dout(obuf_merge),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_writeff      (.din(obuf_write_in),               .dout(obuf_write),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_sideeffectff (.din(obuf_sideeffect_in),          .dout(obuf_sideeffect), .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))              obuf_szff         (.din(obuf_sz_in[1:0]),             .dout(obuf_sz),         .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))              obuf_byteenff     (.din(obuf_byteen_in[7:0]),         .dout(obuf_byteen),     .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffe     #(.WIDTH(32))              obuf_addrff       (.din(obuf_addr_in[31:0]),          .dout(obuf_addr),       .en(obuf_wr_en),                                                                                           .*);
-   rvdffe     #(.WIDTH(64))              obuf_dataff       (.din(obuf_data_in[63:0]),          .dout(obuf_data),       .en(obuf_wr_en),                                                                                           .*);
-   rvdff_fpga #(.WIDTH(TIMER_LOG2))      obuf_timerff      (.din(obuf_wr_timer_in),            .dout(obuf_wr_timer),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic ends here
-   //------------------------------------------------------------------------------
-
-   // Find the entry to allocate and entry to send
-   always_comb begin
-      WrPtr0_m[DEPTH_LOG2-1:0] = '0;
-      WrPtr1_m[DEPTH_LOG2-1:0] = '0;
-      found_wrptr0  = '0;
-      found_wrptr1  = '0;
-
-      // Find first write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr0) begin
-            WrPtr0_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr0 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-
-      // Find second write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr1) begin
-            WrPtr1_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr1 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_m & (WrPtr0_m == i))                                         |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-   end
-
-   // Get the command ptr
-   for (genvar i=0; i<DEPTH; i++) begin
-      // These should be one-hot
-      assign CmdPtr0Dec[i] = ~(|buf_age[i]) & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign CmdPtr1Dec[i] = ~(|(buf_age[i] & ~CmdPtr0Dec)) & ~CmdPtr0Dec[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign RspPtrDec[i]  = ~(|buf_rsp_pickage[i]) & (buf_state[i] == DONE_WAIT);
-   end
-
-   assign found_cmdptr0 = |CmdPtr0Dec;
-   assign found_cmdptr1 = |CmdPtr1Dec;
-   assign CmdPtr0 = f_Enc8to3(8'(CmdPtr0Dec[DEPTH-1:0]));
-   assign CmdPtr1 = f_Enc8to3(8'(CmdPtr1Dec[DEPTH-1:0]));
-   assign RspPtr  = f_Enc8to3(8'(RspPtrDec[DEPTH-1:0]));
-
-   // Age vector
-   for (genvar i=0; i<DEPTH; i++) begin: GenAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_age_in[i][j] = (((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                    (((buf_state[j] == WAIT) | ((buf_state[j] == CMD) & ~buf_cmd_state_bus_en[j]))                   |       // Set age bit for older entries
-                                     (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (i == WrPtr0_r) & (j == ibuf_tag))  |       // Set case for dual lo
-                                     (ibuf_byp & lsu_busreq_r & ldst_dual_r & (i == WrPtr1_r) & (j == WrPtr0_r))))                      |     // ibuf bypass case
-                                   buf_age[i][j];
-
-
-         assign buf_age[i][j]    = buf_ageQ[i][j] & ~((buf_state[j] == CMD) & buf_cmd_state_bus_en[j]) & ~dec_tlu_force_halt;  // Reset case
-
-         assign buf_age_younger[i][j] = (i == j) ? 1'b0: (~buf_age[i][j] & (buf_state[j] != IDLE));   // Younger entries
-      end
-   end
-
-   // Age vector for responses
-   for (genvar i=0; i<DEPTH; i++) begin: GenRspAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_rspage_set[i][j] = ((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                           (~((buf_state[j] == IDLE) | (buf_state[j] == DONE))                                         |       // Set age bit for older entries
-                                            (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (DEPTH_LOG2'(i) == WrPtr0_r) & (DEPTH_LOG2'(j) == ibuf_tag))  |       // Set case for dual lo
-                                            (ibuf_byp & lsu_busreq_r & ldst_dual_r & (DEPTH_LOG2'(i) == WrPtr1_r) & (DEPTH_LOG2'(j) == WrPtr0_r)));
-         assign buf_rspage_in[i][j] = buf_rspage_set[i][j] | buf_rspage[i][j];
-         assign buf_rspage[i][j]    = buf_rspageQ[i][j] & ~((buf_state[j] == DONE) | (buf_state[j] == IDLE)) & ~dec_tlu_force_halt;  // Reset case
-         assign buf_rsp_pickage[i][j] = buf_rspageQ[i][j] & (buf_state[j] == DONE_WAIT);
-     end
-   end
-
-   //------------------------------------------------------------------------------
-   // Buffer logic
-   //------------------------------------------------------------------------------
-   for (genvar i=0; i<DEPTH; i++) begin
-
-      assign ibuf_drainvec_vld[i] = (ibuf_drain_vld & (i == ibuf_tag));
-      assign buf_byteen_in[i]     = ibuf_drainvec_vld[i] ? ibuf_byteen_out[3:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-      assign buf_addr_in[i]       = ibuf_drainvec_vld[i] ? ibuf_addr[31:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? end_addr_r[31:0] : lsu_addr_r[31:0]);
-      assign buf_dual_in[i]       = ibuf_drainvec_vld[i] ? ibuf_dual : ldst_dual_r;
-      assign buf_samedw_in[i]     = ibuf_drainvec_vld[i] ? ibuf_samedw : ldst_samedw_r;
-      assign buf_nomerge_in[i]    = ibuf_drainvec_vld[i] ? (ibuf_nomerge | ibuf_force_drain) : no_dword_merge_r;
-      assign buf_dualhi_in[i]     = ibuf_drainvec_vld[i] ? ibuf_dual : (ibuf_byp & ldst_dual_r & (i == WrPtr1_r));   // If it's dual, ibuf will always have the high
-      assign buf_dualtag_in[i]    = ibuf_drainvec_vld[i] ? ibuf_dualtag : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? WrPtr0_r : WrPtr1_r);
-      assign buf_sideeffect_in[i] = ibuf_drainvec_vld[i] ? ibuf_sideeffect : is_sideeffects_r;
-      assign buf_unsign_in[i]     = ibuf_drainvec_vld[i] ? ibuf_unsign : lsu_pkt_r.unsign;
-      assign buf_sz_in[i]         = ibuf_drainvec_vld[i] ? ibuf_sz : {lsu_pkt_r.word, lsu_pkt_r.half};
-      assign buf_write_in[i]      = ibuf_drainvec_vld[i] ? ibuf_write : lsu_pkt_r.store;
-
-      // Buffer entry state machine
-      always_comb begin
-         buf_nxtstate[i]          = IDLE;
-         buf_state_en[i]          = '0;
-         buf_resp_state_bus_en[i] = '0;
-         buf_state_bus_en[i]      = '0;
-         buf_wr_en[i]             = '0;
-         buf_data_in[i]           = '0;
-         buf_data_en[i]           = '0;
-         buf_error_en[i]          = '0;
-         buf_rst[i]               = dec_tlu_force_halt;
-         buf_ldfwd_en[i]          = dec_tlu_force_halt;
-         buf_ldfwd_in[i]          = '0;
-         buf_ldfwdtag_in[i]       = '0;
-
-         case (buf_state[i])
-            IDLE: begin
-                     buf_nxtstate[i] = lsu_bus_clk_en ? CMD : WAIT;
-                     buf_state_en[i] = (lsu_busreq_r & lsu_commit_r & (((ibuf_byp | ldst_dual_r) & ~ibuf_merge_en & (i == WrPtr0_r)) | (ibuf_byp & ldst_dual_r & (i == WrPtr1_r)))) |
-                                       (ibuf_drain_vld & (i == ibuf_tag));
-                     buf_wr_en[i]    = buf_state_en[i];
-                     buf_data_en[i]  = buf_state_en[i];
-                     buf_data_in[i]   = (ibuf_drain_vld & (i == ibuf_tag)) ? ibuf_data_out[31:0] : store_data_lo_r[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            WAIT: begin
-                     buf_nxtstate[i] = dec_tlu_force_halt ? IDLE : CMD;
-                     buf_state_en[i] = lsu_bus_clk_en | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            CMD: begin
-                     buf_nxtstate[i]          = dec_tlu_force_halt ? IDLE : (obuf_nosend & bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag)) ? DONE_WAIT : RESP;
-                     buf_cmd_state_bus_en[i]  = ((obuf_tag0 == i) | (obuf_merge & (obuf_tag1 == i))) & obuf_valid & obuf_wr_enQ;  // Just use the recently written obuf_valid
-                     buf_state_bus_en[i]      = buf_cmd_state_bus_en[i];
-                     buf_state_en[i]          = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_ldfwd_in[i]          = 1'b1;
-                     buf_ldfwd_en[i]          = buf_state_en[i] & ~buf_write[i] & obuf_nosend & ~dec_tlu_force_halt;
-                     buf_ldfwdtag_in[i]       = DEPTH_LOG2'(obuf_rdrsp_tag[pt.LSU_BUS_TAG-2:0]);
-                     buf_data_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read;
-                     buf_error_en[i]          = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read_error;
-                     buf_data_in[i]           = buf_error_en[i] ? bus_rsp_rdata[31:0] : (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]);
-            end
-            RESP: begin
-                     buf_nxtstate[i]           = (dec_tlu_force_halt | (buf_write[i] & ~bus_rsp_write_error)) ? IDLE :    // Side-effect writes will be non-posted
-                                                      (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & (buf_state[buf_dualtag[i]] != DONE_PARTIAL)) ? DONE_PARTIAL : // Goto DONE_PARTIAL if this is the first return of dual
-                                                           (buf_ldfwd[i] | any_done_wait_state |
-                                                            (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & buf_ldfwd[buf_dualtag[i]] &
-                                                             (buf_state[buf_dualtag[i]] == DONE_PARTIAL) & any_done_wait_state)) ? DONE_WAIT : DONE;
-                     buf_resp_state_bus_en[i]  = (bus_rsp_write & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))) |
-                                                 (bus_rsp_read  & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(i)) |
-                                                                   (buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                   (buf_dual[i] & buf_dualhi[i] & ~buf_write[i] & buf_samedw[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])))));
-                     buf_state_bus_en[i]       = buf_resp_state_bus_en[i];
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_data_en[i]            = buf_state_bus_en[i] & bus_rsp_read & lsu_bus_clk_en;
-                      // Need to capture the error for stores as well for AXI
-                     buf_error_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & ((bus_rsp_read_error  & (bus_rsp_read_tag  == (pt.LSU_BUS_TAG)'(i))) |
-                                                                                         (bus_rsp_read_error  & buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                                         (bus_rsp_write_error & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))));
-                     buf_data_in[i][31:0]      = (buf_state_en[i] & ~buf_error_en[i]) ? (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]) : bus_rsp_rdata[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_PARTIAL: begin   // Other part of dual load hasn't returned
-                     buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : (buf_ldfwd[i] | buf_ldfwd[buf_dualtag[i]] | any_done_wait_state) ? DONE_WAIT : DONE;
-                     buf_state_bus_en[i]       = bus_rsp_read & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])) |
-                                                                 (buf_ldfwd[buf_dualtag[i]] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[buf_dualtag[i]]))));
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_WAIT: begin  // WAIT state if there are multiple outstanding nb returns
-                      buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : DONE;
-                      buf_state_en[i]           = ((RspPtr == DEPTH_LOG2'(i)) | (buf_dual[i] & (buf_dualtag[i] == RspPtr))) | dec_tlu_force_halt;
-                      buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE: begin
-                     buf_nxtstate[i]           = IDLE;
-                     buf_rst[i]                = 1'b1;
-                     buf_state_en[i]           = 1'b1;
-                     buf_ldfwd_in[i]           = 1'b0;
-                     buf_ldfwd_en[i]           = buf_state_en[i];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            default : begin
-                     buf_nxtstate[i]          = IDLE;
-                     buf_state_en[i]          = '0;
-                     buf_resp_state_bus_en[i] = '0;
-                     buf_state_bus_en[i]      = '0;
-                     buf_wr_en[i]             = '0;
-                     buf_data_in[i]           = '0;
-                     buf_data_en[i]           = '0;
-                     buf_error_en[i]          = '0;
-                     buf_rst[i]               = '0;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-         endcase
-      end
-
-      rvdffs  #(.WIDTH($bits(state_t))) buf_state_ff     (.din(buf_nxtstate[i]),             .dout({buf_state[i]}),    .en(buf_state_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_ageff        (.din(buf_age_in[i]),               .dout(buf_ageQ[i]),                                                                    .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_rspageff     (.din(buf_rspage_in[i]),            .dout(buf_rspageQ[i]),                                                                 .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_dualtagff    (.din(buf_dualtag_in[i]),           .dout(buf_dualtag[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualff       (.din(buf_dual_in[i]),              .dout(buf_dual[i]),       .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_samedwff     (.din(buf_samedw_in[i]),            .dout(buf_samedw[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_nomergeff    (.din(buf_nomerge_in[i]),           .dout(buf_nomerge[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualhiff     (.din(buf_dualhi_in[i]),            .dout(buf_dualhi[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_ldfwdff      (.din(buf_ldfwd_in[i]),             .dout(buf_ldfwd[i]),      .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_ldfwdtagff   (.din(buf_ldfwdtag_in[i]),          .dout(buf_ldfwdtag[i]),   .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_sideeffectff (.din(buf_sideeffect_in[i]),        .dout(buf_sideeffect[i]), .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_unsignff     (.din(buf_unsign_in[i]),            .dout(buf_unsign[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_writeff      (.din(buf_write_in[i]),             .dout(buf_write[i]),      .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(2))              buf_szff         (.din(buf_sz_in[i]),                .dout(buf_sz[i]),         .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_addrff       (.din(buf_addr_in[i][31:0]),        .dout(buf_addr[i]),       .en(buf_wr_en[i]),                                                                     .*);
-      rvdffs  #(.WIDTH(4))              buf_byteenff     (.din(buf_byteen_in[i][3:0]),       .dout(buf_byteen[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_dataff       (.din(buf_data_in[i][31:0]),        .dout(buf_data[i]),       .en(buf_data_en[i]),                                                                   .*);
-      rvdffsc #(.WIDTH(1))              buf_errorff      (.din(1'b1),                        .dout(buf_error[i]),      .en(buf_error_en[i]),                    .clear(buf_rst[i]), .clk(lsu_bus_buf_c1_clk), .*);
-
-   end
-
-   // buffer full logic
-   always_comb begin
-      buf_numvld_any[3:0] =  ({1'b0,lsu_busreq_m} << ldst_dual_m) +
-                             ({1'b0,lsu_busreq_r} << ldst_dual_r) +
-                             ibuf_valid;
-      buf_numvld_wrcmd_any[3:0] = 4'b0;
-      buf_numvld_cmd_any[3:0] = 4'b0;
-      buf_numvld_pend_any[3:0] = 4'b0;
-      any_done_wait_state = 1'b0;
-      for (int i=0; i<DEPTH; i++) begin
-         buf_numvld_any[3:0] += {3'b0, (buf_state[i] != IDLE)};
-         buf_numvld_wrcmd_any[3:0] += {3'b0, (buf_write[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_cmd_any[3:0]   += {3'b0, ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_pend_any[3:0]   += {3'b0, ((buf_state[i] == WAIT) | ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i]))};
-         any_done_wait_state |= (buf_state[i] == DONE_WAIT);
-      end
-   end
-
-   assign lsu_bus_buffer_pend_any = (buf_numvld_pend_any != 0);
-   assign lsu_bus_buffer_full_any = (ldst_dual_d & dec_lsu_valid_raw_d) ? (buf_numvld_any[3:0] >= (DEPTH-1)) : (buf_numvld_any[3:0] == DEPTH);
-   assign lsu_bus_buffer_empty_any = ~(|buf_state[DEPTH-1:0]) & ~ibuf_valid & ~obuf_valid;
-
-
-   // Non blocking ports
-   assign lsu_nonblock_load_valid_m = lsu_busreq_m & lsu_pkt_m.valid & lsu_pkt_m.load & ~flush_m_up & ~ld_full_hit_m;
-   assign lsu_nonblock_load_tag_m[DEPTH_LOG2-1:0] = WrPtr0_m[DEPTH_LOG2-1:0];
-   assign lsu_nonblock_load_inv_r = lsu_nonblock_load_valid_r & ~lsu_commit_r;
-   assign lsu_nonblock_load_inv_tag_r[DEPTH_LOG2-1:0] = WrPtr0_r[DEPTH_LOG2-1:0];      // r tag needs to be accurate even if there is no invalidate
-
-   always_comb begin
-      lsu_nonblock_load_data_ready = '0;
-      lsu_nonblock_load_data_error = '0;
-      lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0] = '0;
-      lsu_nonblock_load_data_lo[31:0] = '0;
-      lsu_nonblock_load_data_hi[31:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-          // Use buf_rst[i] instead of buf_state_en[i] for timing
-          lsu_nonblock_load_data_ready      |= (buf_state[i] == DONE) & ~buf_write[i];
-          lsu_nonblock_load_data_error      |= (buf_state[i] == DONE) & buf_error[i] & ~buf_write[i];
-          lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0]   |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_lo[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_hi[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (buf_dual[i] & buf_dualhi[i]))}};
-      end
-   end
-
-   assign lsu_nonblock_addr_offset[1:0] = buf_addr[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_sz[1:0]          = buf_sz[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_unsign           = buf_unsign[lsu_nonblock_load_data_tag];
-   assign lsu_nonblock_data_unalgn[31:0] = 32'({lsu_nonblock_load_data_hi[31:0], lsu_nonblock_load_data_lo[31:0]} >> 8*lsu_nonblock_addr_offset[1:0]);
-
-   assign lsu_nonblock_load_data_valid = lsu_nonblock_load_data_ready & ~lsu_nonblock_load_data_error;
-   assign lsu_nonblock_load_data[31:0] = ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {24'b0,lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {16'b0,lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {{24{lsu_nonblock_data_unalgn[7]}}, lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {{16{lsu_nonblock_data_unalgn[15]}},lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{(lsu_nonblock_sz[1:0] == 2'b10)}} & lsu_nonblock_data_unalgn[31:0]);
-
-   // Determine if there is a pending return to sideeffect load/store
-   always_comb begin
-      bus_sideeffect_pend = obuf_valid & obuf_sideeffect & dec_tlu_sideeffect_posted_disable;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_sideeffect_pend |= ((buf_state[i] == RESP) & buf_sideeffect[i] & dec_tlu_sideeffect_posted_disable);
-      end
-   end
-
-   // We have no ordering rules for AXI. Need to check outstanding trxns to same address for AXI
-   always_comb begin
-      bus_addr_match_pending = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_addr_match_pending |= (obuf_valid & (obuf_addr[31:3] == buf_addr[i][31:3]) & (buf_state[i] == RESP) & ~((obuf_tag0 == (pt.LSU_BUS_TAG)'(i)) | (obuf_merge & (obuf_tag1 == (pt.LSU_BUS_TAG)'(i)))));
-      end
-   end
-
-   // Generic bus signals
-   assign bus_cmd_ready                      = obuf_write ? ((obuf_cmd_done | obuf_data_done) ? (obuf_cmd_done ? lsu_axi_wready : lsu_axi_awready) : (lsu_axi_awready & lsu_axi_wready)) : lsu_axi_arready;
-   assign bus_wcmd_sent                      = lsu_axi_awvalid & lsu_axi_awready;
-   assign bus_wdata_sent                     = lsu_axi_wvalid & lsu_axi_wready;
-   assign bus_cmd_sent                       = ((obuf_cmd_done | bus_wcmd_sent) & (obuf_data_done | bus_wdata_sent)) | (lsu_axi_arvalid & lsu_axi_arready);
-
-   assign bus_rsp_read                       = lsu_axi_rvalid & lsu_axi_rready;
-   assign bus_rsp_write                      = lsu_axi_bvalid & lsu_axi_bready;
-   assign bus_rsp_read_tag[pt.LSU_BUS_TAG-1:0]  = lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_tag[pt.LSU_BUS_TAG-1:0] = lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_error                = bus_rsp_write & (lsu_axi_bresp[1:0] != 2'b0);
-   assign bus_rsp_read_error                 = bus_rsp_read  & (lsu_axi_rresp[1:0] != 2'b0);
-   assign bus_rsp_rdata[63:0]                = lsu_axi_rdata[63:0];
-
-   // AXI command signals
-   assign lsu_axi_awvalid               = obuf_valid & obuf_write & ~obuf_cmd_done & ~bus_addr_match_pending;
-   assign lsu_axi_awid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_awaddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_awsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_awprot[2:0]           = 3'b001;
-   assign lsu_axi_awcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_awregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_awlen[7:0]            = '0;
-   assign lsu_axi_awburst[1:0]          = 2'b01;
-   assign lsu_axi_awqos[3:0]            = '0;
-   assign lsu_axi_awlock                = '0;
-
-   assign lsu_axi_wvalid                = obuf_valid & obuf_write & ~obuf_data_done & ~bus_addr_match_pending;
-   assign lsu_axi_wstrb[7:0]            = obuf_byteen[7:0] & {8{obuf_write}};
-   assign lsu_axi_wdata[63:0]           = obuf_data[63:0];
-   assign lsu_axi_wlast                 = '1;
-
-   assign lsu_axi_arvalid               = obuf_valid & ~obuf_write & ~obuf_nosend & ~bus_addr_match_pending;
-   assign lsu_axi_arid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_araddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_arsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_arprot[2:0]           = 3'b001;
-   assign lsu_axi_arcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_arregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_arlen[7:0]            = '0;
-   assign lsu_axi_arburst[1:0]          = 2'b01;
-   assign lsu_axi_arqos[3:0]            = '0;
-   assign lsu_axi_arlock                = '0;
-
-   assign lsu_axi_bready = 1;
-   assign lsu_axi_rready = 1;
-
-   always_comb begin
-      lsu_imprecise_error_store_any = '0;
-      lsu_imprecise_error_store_tag = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         lsu_imprecise_error_store_any |= lsu_bus_clk_en_q & (buf_state[i] == DONE) & buf_error[i] & buf_write[i];
-         lsu_imprecise_error_store_tag |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & buf_error[i] & buf_write[i])}};
-      end
-   end
-   assign lsu_imprecise_error_load_any       = lsu_nonblock_load_data_error & ~lsu_imprecise_error_store_any;   // This is to make sure we send only one imprecise error for load/store
-   assign lsu_imprecise_error_addr_any[31:0] = lsu_imprecise_error_store_any ? buf_addr[lsu_imprecise_error_store_tag] : buf_addr[lsu_nonblock_load_data_tag];
-
-   // PMU signals
-   assign lsu_pmu_bus_trxn  = (lsu_axi_awvalid & lsu_axi_awready) | (lsu_axi_wvalid & lsu_axi_wready) | (lsu_axi_arvalid & lsu_axi_arready);
-   assign lsu_pmu_bus_misaligned = lsu_busreq_r & ldst_dual_r & lsu_commit_r;
-   assign lsu_pmu_bus_error = lsu_imprecise_error_load_any | lsu_imprecise_error_store_any;
-   assign lsu_pmu_bus_busy  = (lsu_axi_awvalid & ~lsu_axi_awready) | (lsu_axi_wvalid & ~lsu_axi_wready) | (lsu_axi_arvalid & ~lsu_axi_arready);
-
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awvalid_ff (.din(lsu_axi_awvalid),                .dout(lsu_axi_awvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awready_ff (.din(lsu_axi_awready),                .dout(lsu_axi_awready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wvalid_ff  (.din(lsu_axi_wvalid),                 .dout(lsu_axi_wvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wready_ff  (.din(lsu_axi_wready),                 .dout(lsu_axi_wready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arvalid_ff (.din(lsu_axi_arvalid),                .dout(lsu_axi_arvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arready_ff (.din(lsu_axi_arready),                .dout(lsu_axi_arready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bvalid_ff  (.din(lsu_axi_bvalid),                 .dout(lsu_axi_bvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bready_ff  (.din(lsu_axi_bready),                 .dout(lsu_axi_bready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_bresp_ff   (.din(lsu_axi_bresp[1:0]),             .dout(lsu_axi_bresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_bid_ff     (.din(lsu_axi_bid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_bid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))             lsu_axi_rdata_ff   (.din(lsu_axi_rdata[63:0]),            .dout(lsu_axi_rdata_q[63:0]),            .en((lsu_axi_rvalid | clk_override) & lsu_bus_clk_en), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rvalid_ff  (.din(lsu_axi_rvalid),                 .dout(lsu_axi_rvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rready_ff  (.din(lsu_axi_rready),                 .dout(lsu_axi_rready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_rresp_ff   (.din(lsu_axi_rresp[1:0]),             .dout(lsu_axi_rresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_rid_ff     (.din(lsu_axi_rid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_rid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr0_rff (.din(WrPtr0_m), .dout(WrPtr0_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr1_rff (.din(WrPtr1_m), .dout(WrPtr1_r), .clk(lsu_c2_r_clk), .*);
-
-   rvdff #(.WIDTH(1)) lsu_busreq_rff (.din(lsu_busreq_m & ~flush_r & ~ld_full_hit_m),      .dout(lsu_busreq_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(1)) lsu_nonblock_load_valid_rff  (.din(lsu_nonblock_load_valid_m),  .dout(lsu_nonblock_load_valid_r), .clk(lsu_c2_r_clk), .*);
-
-`ifdef RV_ASSERT_ON
-
-   for (genvar i=0; i<4; i++) begin: GenByte
-      assert_ld_byte_hitvecfn_lo_onehot: assert #0 ($onehot0(ld_byte_hitvecfn_lo[i][DEPTH-1:0]));
-      assert_ld_byte_hitvecfn_hi_onehot: assert #0 ($onehot0(ld_byte_hitvecfn_hi[i][DEPTH-1:0]));
-   end
-
-   for (genvar i=0; i<DEPTH; i++) begin: GenAssertAge
-      assert_bufempty_agevec: assert #0 (~(lsu_bus_buffer_empty_any & |(buf_age[i])));
-   end
-
-   assert_CmdPtr0Dec_onehot: assert #0 ($onehot0(CmdPtr0Dec[DEPTH-1:0] & ~{DEPTH{dec_tlu_force_halt}}));
-   assert_CmdPtr1Dec_onehot: assert #0 ($onehot0(CmdPtr1Dec[DEPTH-1:0] & ~{DEPTH{dec_tlu_force_halt}}));
-
-`endif
-
-endmodule // eb1_lsu_bus_buffer
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_bus_intf.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_bus_intf.sv
deleted file mode 100644
index fe80ab0..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_bus_intf.sv
+++ /dev/null
@@ -1,365 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_bus_intf
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // disable the posted sideeffect load store to the bus
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,              // obuf clock enable
-   input logic                          lsu_busm_clken,                     // bus clock enable
-
-   input logic                          lsu_c1_r_clk,                       // r pipe single pulse clock
-   input logic                          lsu_c2_r_clk,                       // r pipe double pulse clock
-   input logic                          lsu_bus_ibuf_c1_clk,                // ibuf single pulse clock
-   input logic                          lsu_bus_obuf_c1_clk,                // obuf single pulse clock
-   input logic                          lsu_bus_buf_c1_clk,                 // buf  single pulse clock
-   input logic                          lsu_free_c2_clk,                    // free clock double pulse clock
-   input logic                          active_clk,                         // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                          lsu_busm_clk,                       // bus clock
-
-   input logic                          dec_lsu_valid_raw_d,               // Raw valid for address computation
-   input logic                          lsu_busreq_m,                      // bus request is in m
-
-   input                                eb1_lsu_pkt_t lsu_pkt_m,          // lsu packet flowing down the pipe
-   input                                eb1_lsu_pkt_t lsu_pkt_r,          // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   end_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   store_data_r,                      // store data flowing down the pipe
-   input logic                          dec_tlu_force_halt,
-
-   input logic                          lsu_commit_r,                      // lsu instruction in r commits
-   input logic                          is_sideeffects_m,                  // lsu attribute is side_effects
-   input logic                          flush_m_up,                        // flush
-   input logic                          flush_r,                           // flush
-   input logic                          ldst_dual_d, ldst_dual_m, ldst_dual_r,
-
-   output logic                         lsu_busreq_r,                      // bus request is in r
-   output logic                         lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,           // write buffer is full
-   output logic                         lsu_bus_buffer_empty_any,          // write buffer is empty
-   output logic [31:0]                  bus_read_data_m,                   // the bus return data
-
-
-   output logic                         lsu_imprecise_error_load_any,      // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,     // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,      // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,   // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,     // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,     // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r, // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,// the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,// non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,  // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,      // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                        lsu_axi_awvalid,
-   input  logic                        lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_awid,
-   output logic [31:0]                 lsu_axi_awaddr,
-   output logic [3:0]                  lsu_axi_awregion,
-   output logic [7:0]                  lsu_axi_awlen,
-   output logic [2:0]                  lsu_axi_awsize,
-   output logic [1:0]                  lsu_axi_awburst,
-   output logic                        lsu_axi_awlock,
-   output logic [3:0]                  lsu_axi_awcache,
-   output logic [2:0]                  lsu_axi_awprot,
-   output logic [3:0]                  lsu_axi_awqos,
-
-   output logic                        lsu_axi_wvalid,
-   input  logic                        lsu_axi_wready,
-   output logic [63:0]                 lsu_axi_wdata,
-   output logic [7:0]                  lsu_axi_wstrb,
-   output logic                        lsu_axi_wlast,
-
-   input  logic                        lsu_axi_bvalid,
-   output logic                        lsu_axi_bready,
-   input  logic [1:0]                  lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                        lsu_axi_arvalid,
-   input  logic                        lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_arid,
-   output logic [31:0]                 lsu_axi_araddr,
-   output logic [3:0]                  lsu_axi_arregion,
-   output logic [7:0]                  lsu_axi_arlen,
-   output logic [2:0]                  lsu_axi_arsize,
-   output logic [1:0]                  lsu_axi_arburst,
-   output logic                        lsu_axi_arlock,
-   output logic [3:0]                  lsu_axi_arcache,
-   output logic [2:0]                  lsu_axi_arprot,
-   output logic [3:0]                  lsu_axi_arqos,
-
-   input  logic                        lsu_axi_rvalid,
-   output logic                        lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_rid,
-   input  logic [63:0]                 lsu_axi_rdata,
-   input  logic [1:0]                  lsu_axi_rresp,
-
-   input logic                         lsu_bus_clk_en
-
-);
-
-
-
-   logic              lsu_bus_clk_en_q;
-
-   logic [3:0]        ldst_byteen_m, ldst_byteen_r;
-   logic [7:0]        ldst_byteen_ext_m, ldst_byteen_ext_r;
-   logic [3:0]        ldst_byteen_hi_m, ldst_byteen_hi_r;
-   logic [3:0]        ldst_byteen_lo_m, ldst_byteen_lo_r;
-   logic              is_sideeffects_r;
-
-   logic [63:0]       store_data_ext_r;
-   logic [31:0]       store_data_hi_r;
-   logic [31:0]       store_data_lo_r;
-
-   logic              addr_match_dw_lo_r_m;
-   logic              addr_match_word_lo_r_m;
-   logic              no_word_merge_r, no_dword_merge_r;
-
-   logic              ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-   logic [3:0]        ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-
-   logic [3:0]        ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [3:0]        ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   logic [3:0]        ld_byte_hit_buf_lo, ld_byte_hit_buf_hi;
-   logic [31:0]       ld_fwddata_buf_lo, ld_fwddata_buf_hi;
-
-   logic [63:0]       ld_fwddata_lo, ld_fwddata_hi;
-   logic [63:0]       ld_fwddata_m;
-
-   logic              ld_full_hit_hi_m, ld_full_hit_lo_m;
-   logic              ld_full_hit_m;
-
-   assign ldst_byteen_m[3:0] = ({4{lsu_pkt_m.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}} & 4'b1111);
-
-   // Read/Write Buffer
-   eb1_lsu_bus_buffer #(.pt(pt)) bus_buffer (
-      .*
-   );
-
-   // Logic to determine if dc5 store can be coalesced or not with younger stores. Bypass ibuf if cannot colaesced
-   assign addr_match_dw_lo_r_m = (lsu_addr_r[31:3] == lsu_addr_m[31:3]);
-   assign addr_match_word_lo_r_m = addr_match_dw_lo_r_m & ~(lsu_addr_r[2]^lsu_addr_m[2]);
-
-   assign no_word_merge_r  = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_word_lo_r_m);
-   assign no_dword_merge_r = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_dw_lo_r_m);
-
-   // Create Hi/Lo signals
-   assign ldst_byteen_ext_m[7:0] = {4'b0,ldst_byteen_m[3:0]} << lsu_addr_m[1:0];
-   assign ldst_byteen_ext_r[7:0] = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-   assign store_data_ext_r[63:0] = {32'b0,store_data_r[31:0]} << {lsu_addr_r[1:0],3'b0};
-
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign store_data_hi_r[31:0]   = store_data_ext_r[63:32];
-   assign store_data_lo_r[31:0]   = store_data_ext_r[31:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin: GenBusBufFwd
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i] & ldst_byteen_hi_m[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i] & ldst_byteen_hi_m[i];
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i] |
-                                 ld_byte_hit_buf_lo[i];
-
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i] |
-                                 ld_byte_hit_buf_hi[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      // Final muxing between m/r
-      assign ld_fwddata_lo[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : ld_fwddata_buf_lo[(8*i)+7:(8*i)];
-
-      assign ld_fwddata_hi[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : ld_fwddata_buf_hi[(8*i)+7:(8*i)];
-
-   end
-
-   always_comb begin
-      ld_full_hit_lo_m = 1'b1;
-      ld_full_hit_hi_m = 1'b1;
-      for (int i=0; i<4; i++) begin
-         ld_full_hit_lo_m &= (ld_byte_hit_lo[i] | ~ldst_byteen_lo_m[i]);
-         ld_full_hit_hi_m &= (ld_byte_hit_hi[i] | ~ldst_byteen_hi_m[i]);
-      end
-   end
-
-   // This will be high if all the bytes of load hit the stores in pipe/write buffer (m/r/wrbuf)
-   assign ld_full_hit_m = ld_full_hit_lo_m & ld_full_hit_hi_m & lsu_busreq_m & lsu_pkt_m.load & ~is_sideeffects_m;
-
-   assign ld_fwddata_m[63:0] = {ld_fwddata_hi[31:0], ld_fwddata_lo[31:0]} >> (8*lsu_addr_m[1:0]);
-   assign bus_read_data_m[31:0]                        = ld_fwddata_m[31:0];
-
-   // Fifo flops
-
-   rvdff #(.WIDTH(1)) clken_ff (.din(lsu_bus_clk_en), .dout(lsu_bus_clk_en_q), .clk(active_clk), .*);
-
-   rvdff #(.WIDTH(1)) is_sideeffects_rff (.din(is_sideeffects_m), .dout(is_sideeffects_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(4) lsu_byten_rff (.*, .din(ldst_byteen_m[3:0]), .dout(ldst_byteen_r[3:0]), .clk(lsu_c1_r_clk));
-
-`ifdef RV_ASSERT_ON
-
-  // Assertion to check AXI write address is aligned to size
-  property lsu_axi_awaddr_aligned;
-    @(posedge lsu_busm_clk) disable iff(~rst_l) lsu_axi_awvalid |-> ((lsu_axi_awsize[2:0] == 3'h0)                                   |
-                                                                     ((lsu_axi_awsize[2:0] == 3'h1) & (lsu_axi_awaddr[0] == 1'b0))   |
-                                                                     ((lsu_axi_awsize[2:0] == 3'h2) & (lsu_axi_awaddr[1:0] == 2'b0)) |
-                                                                     ((lsu_axi_awsize[2:0] == 3'h3) & (lsu_axi_awaddr[2:0] == 3'b0)));
-  endproperty
-  assert_lsu_axi_awaddr_aligned: assert property (lsu_axi_awaddr_aligned) else
-    $display("Assertion lsu_axi_awaddr_aligned failed: lsu_axi_awvalid=1'b%b, lsu_axi_awsize=3'h%h, lsu_axi_awaddr=32'h%h",lsu_axi_awvalid, lsu_axi_awsize[2:0], lsu_axi_awaddr[31:0]);
-  // Assertion to check awvalid stays stable during entire bus clock
-
-  // Assertion to check AXI read address is aligned to size
-  property lsu_axi_araddr_aligned;
-    @(posedge lsu_busm_clk) disable iff(~rst_l) lsu_axi_arvalid |-> ((lsu_axi_arsize[2:0] == 3'h0)                                   |
-                                                                     ((lsu_axi_arsize[2:0] == 3'h1) & (lsu_axi_araddr[0] == 1'b0))   |
-                                                                     ((lsu_axi_arsize[2:0] == 3'h2) & (lsu_axi_araddr[1:0] == 2'b0)) |
-                                                                     ((lsu_axi_arsize[2:0] == 3'h3) & (lsu_axi_araddr[2:0] == 3'b0)));
-  endproperty
-  assert_lsu_axi_araddr_aligned: assert property (lsu_axi_araddr_aligned) else
-    $display("Assertion lsu_axi_araddr_aligned failed: lsu_axi_awvalid=1'b%b, lsu_axi_awsize=3'h%h, lsu_axi_araddr=32'h%h",lsu_axi_awvalid, lsu_axi_awsize[2:0], lsu_axi_araddr[31:0]);
-
-  // Assertion to check awvalid stays stable during entire bus clock
- property lsu_axi_awvalid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid != $past(lsu_axi_awvalid)) |-> ($past(lsu_bus_clk_en) | dec_tlu_force_halt);
-  endproperty
-  assert_lsu_axi_awvalid_stable: assert property (lsu_axi_awvalid_stable) else
-     $display("LSU AXI awvalid changed in middle of bus clock");
-
-  // Assertion to check awid stays stable during entire bus clock
-  property lsu_axi_awid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_awid[pt.LSU_BUS_TAG-1:0] != $past(lsu_axi_awid[pt.LSU_BUS_TAG-1:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_awid_stable: assert property (lsu_axi_awid_stable) else
-     $display("LSU AXI awid changed in middle of bus clock");
-
-  // Assertion to check awaddr stays stable during entire bus clock
-  property lsu_axi_awaddr_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_awaddr[31:0] != $past(lsu_axi_awaddr[31:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_awaddr_stable: assert property (lsu_axi_awaddr_stable) else
-     $display("LSU AXI awaddr changed in middle of bus clock");
-
-  // Assertion to check awsize stays stable during entire bus clock
-  property lsu_axi_awsize_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_awsize[2:0] != $past(lsu_axi_awsize[2:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_awsize_stable: assert property (lsu_axi_awsize_stable) else
-     $display("LSU AXI awsize changed in middle of bus clock");
-
-  // Assertion to check wstrb stays stable during entire bus clock
-  property lsu_axi_wstrb_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_wvalid & (lsu_axi_wstrb[7:0] != $past(lsu_axi_wstrb[7:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_wstrb_stable: assert property (lsu_axi_wstrb_stable) else
-     $display("LSU AXI wstrb changed in middle of bus clock");
-
-  // Assertion to check wdata stays stable during entire bus clock
-  property lsu_axi_wdata_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_wvalid & (lsu_axi_wdata[63:0] != $past(lsu_axi_wdata[63:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_wdata_stable: assert property (lsu_axi_wdata_stable) else
-     $display("LSU AXI wdata changed in middle of bus clock");
-
-  // Assertion to check awvalid stays stable during entire bus clock
-  property lsu_axi_arvalid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_arvalid != $past(lsu_axi_arvalid)) |-> ($past(lsu_bus_clk_en) | dec_tlu_force_halt);
-  endproperty
-  assert_lsu_axi_arvalid_stable: assert property (lsu_axi_arvalid_stable) else
-     $display("LSU AXI awvalid changed in middle of bus clock");
-
-  // Assertion to check awid stays stable during entire bus clock
-  property lsu_axi_arid_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_arvalid & (lsu_axi_arid[pt.LSU_BUS_TAG-1:0] != $past(lsu_axi_arid[pt.LSU_BUS_TAG-1:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_arid_stable: assert property (lsu_axi_arid_stable) else
-     $display("LSU AXI awid changed in middle of bus clock");
-
-  // Assertion to check awaddr stays stable during entire bus clock
-  property lsu_axi_araddr_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_arvalid & (lsu_axi_araddr[31:0] != $past(lsu_axi_araddr[31:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_araddr_stable: assert property (lsu_axi_araddr_stable) else
-     $display("LSU AXI awaddr changed in middle of bus clock");
-
-  // Assertion to check awsize stays stable during entire bus clock
-  property lsu_axi_arsize_stable;
-     @(posedge clk) disable iff(~rst_l)  (lsu_axi_awvalid & (lsu_axi_arsize[2:0] != $past(lsu_axi_arsize[2:0]))) |-> $past(lsu_bus_clk_en);
-  endproperty
-  assert_lsu_axi_arsize_stable: assert property (lsu_axi_arsize_stable) else
-     $display("LSU AXI awsize changed in middle of bus clock");
-
-`endif
-
-endmodule // eb1_lsu_bus_intf
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_clkdomain.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_clkdomain.sv
deleted file mode 100644
index afa1be9..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_clkdomain.sv
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Clock Generation Block
-// Comments: All the clocks are generate here
-//
-// //********************************************************************************
-
-
-module eb1_lsu_clkdomain
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
-)(
-   input logic      clk,                               // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic      active_clk,                        // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic      rst_l,                             // reset, active low
-   input logic      dec_tlu_force_halt,                // This will be high till TLU goes to debug halt
-
-   // Inputs
-   input logic      clk_override,                      // chciken bit to turn off clock gating
-   input logic      dma_dccm_req,                      // dma is active
-   input logic      ldst_stbuf_reqvld_r,               // allocating in to the store queue
-
-   input logic      stbuf_reqvld_any,                  // stbuf is draining
-   input logic      stbuf_reqvld_flushed_any,          // instruction going to stbuf is flushed
-   input logic      lsu_busreq_r,                      // busreq in r
-   input logic      lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   input logic      lsu_bus_buffer_empty_any,          // external bus buffer is empty
-   input logic      lsu_stbuf_empty_any,               // stbuf is empty
-
-   input logic      lsu_bus_clk_en,                    // bus clock enable
-
-   input eb1_lsu_pkt_t  lsu_p,                        // lsu packet in decode
-   input eb1_lsu_pkt_t  lsu_pkt_d,                    // lsu packet in d
-   input eb1_lsu_pkt_t  lsu_pkt_m,                    // lsu packet in m
-   input eb1_lsu_pkt_t  lsu_pkt_r,                    // lsu packet in r
-
-   // Outputs
-   output logic     lsu_bus_obuf_c1_clken,             // obuf clock enable
-   output logic     lsu_busm_clken,                    // bus clock enable
-
-   output logic     lsu_c1_m_clk,                      // m pipe single pulse clock
-   output logic     lsu_c1_r_clk,                      // r pipe single pulse clock
-
-   output logic     lsu_c2_m_clk,                      // m pipe double pulse clock
-   output logic     lsu_c2_r_clk,                      // r pipe double pulse clock
-
-   output logic     lsu_store_c1_m_clk,                // store in m
-   output logic     lsu_store_c1_r_clk,                // store in r
-
-   output logic     lsu_stbuf_c1_clk,
-   output logic     lsu_bus_obuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_ibuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_buf_c1_clk,                // ibuf clock
-   output logic     lsu_busm_clk,                      // bus clock
-
-   output logic     lsu_free_c2_clk,                   // free double pulse clock
-
-   input  logic     scan_mode                          // Scan mode
-);
-
-   logic lsu_c1_m_clken, lsu_c1_r_clken;
-   logic lsu_c2_m_clken, lsu_c2_r_clken;
-   logic lsu_c1_m_clken_q, lsu_c1_r_clken_q;
-   logic lsu_store_c1_m_clken, lsu_store_c1_r_clken;
-
-
-   logic lsu_stbuf_c1_clken;
-   logic lsu_bus_ibuf_c1_clken, lsu_bus_buf_c1_clken;
-
-   logic lsu_free_c1_clken, lsu_free_c1_clken_q, lsu_free_c2_clken;
-
-   //-------------------------------------------------------------------------------------------
-   // Clock Enable logic
-   //-------------------------------------------------------------------------------------------
-
-   assign lsu_c1_m_clken = lsu_p.valid | dma_dccm_req | clk_override;
-   assign lsu_c1_r_clken = lsu_pkt_m.valid | lsu_c1_m_clken_q | clk_override;
-
-   assign lsu_c2_m_clken = lsu_c1_m_clken | lsu_c1_m_clken_q | clk_override;
-   assign lsu_c2_r_clken = lsu_c1_r_clken | lsu_c1_r_clken_q | clk_override;
-
-   assign lsu_store_c1_m_clken = ((lsu_c1_m_clken & lsu_pkt_d.store) | clk_override) ;
-   assign lsu_store_c1_r_clken = ((lsu_c1_r_clken & lsu_pkt_m.store) | clk_override) ;
-
-   assign lsu_stbuf_c1_clken = ldst_stbuf_reqvld_r | stbuf_reqvld_any | stbuf_reqvld_flushed_any | clk_override;
-   assign lsu_bus_ibuf_c1_clken = lsu_busreq_r | clk_override;
-   assign lsu_bus_obuf_c1_clken = (lsu_bus_buffer_pend_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-   assign lsu_bus_buf_c1_clken  = ~lsu_bus_buffer_empty_any | lsu_busreq_r | dec_tlu_force_halt | clk_override;
-
-   assign lsu_free_c1_clken = (lsu_p.valid | lsu_pkt_d.valid | lsu_pkt_m.valid | lsu_pkt_r.valid) |
-                              ~lsu_bus_buffer_empty_any | ~lsu_stbuf_empty_any | clk_override;
-   assign lsu_free_c2_clken = lsu_free_c1_clken | lsu_free_c1_clken_q | clk_override;
-
-    // Flops
-   rvdff #(1) lsu_free_c1_clkenff (.din(lsu_free_c1_clken), .dout(lsu_free_c1_clken_q), .clk(active_clk), .*);
-
-   rvdff #(1) lsu_c1_m_clkenff (.din(lsu_c1_m_clken), .dout(lsu_c1_m_clken_q), .clk(lsu_free_c2_clk), .*);
-   rvdff #(1) lsu_c1_r_clkenff (.din(lsu_c1_r_clken), .dout(lsu_c1_r_clken_q), .clk(lsu_free_c2_clk), .*);
-
-   // Clock Headers
-   rvoclkhdr lsu_c1m_cgc ( .en(lsu_c1_m_clken), .l1clk(lsu_c1_m_clk), .* );
-   rvoclkhdr lsu_c1r_cgc ( .en(lsu_c1_r_clken), .l1clk(lsu_c1_r_clk), .* );
-
-   rvoclkhdr lsu_c2m_cgc ( .en(lsu_c2_m_clken), .l1clk(lsu_c2_m_clk), .* );
-   rvoclkhdr lsu_c2r_cgc ( .en(lsu_c2_r_clken), .l1clk(lsu_c2_r_clk), .* );
-
-   rvoclkhdr lsu_store_c1m_cgc (.en(lsu_store_c1_m_clken), .l1clk(lsu_store_c1_m_clk), .*);
-   rvoclkhdr lsu_store_c1r_cgc (.en(lsu_store_c1_r_clken), .l1clk(lsu_store_c1_r_clk), .*);
-
-   rvoclkhdr lsu_stbuf_c1_cgc ( .en(lsu_stbuf_c1_clken), .l1clk(lsu_stbuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_ibuf_c1_cgc ( .en(lsu_bus_ibuf_c1_clken), .l1clk(lsu_bus_ibuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_buf_c1_cgc  ( .en(lsu_bus_buf_c1_clken),  .l1clk(lsu_bus_buf_c1_clk), .* );
-
-   assign lsu_busm_clken = (~lsu_bus_buffer_empty_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-
-`ifdef RV_FPGA_OPTIMIZE
-   assign lsu_busm_clk = 1'b0;
-   assign lsu_bus_obuf_c1_clk = 1'b0;
-`else
-   rvclkhdr  lsu_bus_obuf_c1_cgc ( .en(lsu_bus_obuf_c1_clken), .l1clk(lsu_bus_obuf_c1_clk), .* );
-   rvclkhdr  lsu_busm_cgc (.en(lsu_busm_clken), .l1clk(lsu_busm_clk), .*);
-`endif
-
-   rvoclkhdr lsu_free_cgc (.en(lsu_free_c2_clken), .l1clk(lsu_free_c2_clk), .*);
-
-endmodule
-
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_dccm_ctl.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_dccm_ctl.sv
deleted file mode 100644
index ba070bc..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_dccm_ctl.sv
+++ /dev/null
@@ -1,425 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-module eb1_lsu_dccm_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-  (
-   input logic                             lsu_c2_m_clk,            // clocks
-   input logic                             lsu_c2_r_clk,            // clocks
-   input logic                             lsu_c1_r_clk,            // clocks
-   input logic                             lsu_store_c1_r_clk,      // clocks
-   input logic                             lsu_free_c2_clk,         // clocks
-   input logic                             clk_override,            // Override non-functional clock gating
-   input logic                             clk,                     // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   input logic                             rst_l,                   // reset, active low
-
-   input                                   eb1_lsu_pkt_t lsu_pkt_r,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_m,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_d,// lsu packets
-   input logic                             addr_in_dccm_d,          // address maps to dccm
-   input logic                             addr_in_pic_d,           // address maps to pic
-   input logic                             addr_in_pic_m,           // address maps to pic
-   input logic                             addr_in_dccm_m, addr_in_dccm_r,   // address in dccm per pipe stage
-   input logic                             addr_in_pic_r,                    // address in pic  per pipe stage
-   input logic                             lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r,
-   input logic                             lsu_commit_r,            // lsu instruction in r commits
-   input logic                             ldst_dual_m, ldst_dual_r,// load/store is unaligned at 32 bit boundary per pipe stage
-
-   // lsu address down the pipe
-   input logic [31:0]                      lsu_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          lsu_addr_m,
-   input logic [31:0]                      lsu_addr_r,
-
-   // lsu address down the pipe - needed to check unaligned
-   input logic [pt.DCCM_BITS-1:0]          end_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_m,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_r,
-
-
-   input logic                             stbuf_reqvld_any,        // write enable
-   input logic [pt.LSU_SB_BITS-1:0]        stbuf_addr_any,          // stbuf address (aligned)
-
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_data_any,          // the read out from stbuf
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     stbuf_ecc_any,           // the encoded data with ECC bits
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_hi_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_lo_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_hi_m,    // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_lo_m,    // stbuf fowarding to load
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_r,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_r,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_r,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_r,           // right justified, ie load byte will have data at 7:0
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_corr_r,      // right justified & ECC corrected, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_r,  // lsu has a DED
-   input logic                             single_ecc_error_hi_r,   // sec detected on hi dccm bank
-   input logic                             single_ecc_error_lo_r,   // sec detected on lower dccm bank
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_hi_r_ff,    // the encoded data with ECC bits
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_lo_r_ff,    // the encoded data with ECC bits
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_m,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_m,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_m,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_m,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_m,           // right justified, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_m,  // lsu has a DED
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_m,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_m,           // corrected dccm data
-
-   input logic [31:0]                      store_data_m,            // Store data M-stage
-   input logic                             dma_dccm_wen,            // Perform DMA writes only for word/dword
-   input logic                             dma_pic_wen,             // Perform PIC writes
-   input logic [2:0]                       dma_mem_tag_m,           // DMA Buffer entry number M-stage
-   input logic [31:0]                      dma_mem_addr,            // DMA request address
-   input logic [63:0]                      dma_mem_wdata,           // DMA write data
-   input logic [31:0]                      dma_dccm_wdata_lo,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [31:0]                      dma_dccm_wdata_hi,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_hi,   // ECC bits for the DMA wdata
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_lo,   // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_hi_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_hi_r,       // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_lo_r,       // data from the dccm
-   output logic [31:0]                     store_data_r,            // raw store data to be sent to bus
-   output logic                            ld_single_ecc_error_r,
-   output logic                            ld_single_ecc_error_r_ff,
-
-   output logic [31:0]                     picm_mask_data_m,        // pic data to stbuf
-   output logic                            lsu_stbuf_commit_any,    // stbuf wins the dccm port or is to pic
-   output logic                            lsu_dccm_rden_m,         // dccm read
-   output logic                            lsu_dccm_rden_r,         // dccm read
-
-   output logic                            dccm_dma_rvalid,         // dccm serviving the dma load
-   output logic                            dccm_dma_ecc_error,      // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,           // DMA return tag
-   output logic [63:0]                     dccm_dma_rdata,          // dccm data to dma request
-
-   // DCCM ports
-   output logic                            dccm_wren,               // dccm interface -- write
-   output logic                            dccm_rden,               // dccm interface -- write
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo,         // dccm interface -- wr addr for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi,         // dccm interface -- wr addr for hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo,         // dccm interface -- read address for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi,         // dccm interface -- read address for hi bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,         // dccm write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,         // dccm write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo,         // dccm read data back from the dccm
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi,         // dccm read data back from the dccm
-
-   // PIC ports
-   output logic                            picm_wren,               // write to pic
-   output logic                            picm_rden,               // read to pick
-   output logic                            picm_mken,               // write to pic need a mask
-   output logic [31:0]                     picm_rdaddr,             // address for pic read access
-   output logic [31:0]                     picm_wraddr,             // address for pic write access
-   output logic [31:0]                     picm_wr_data,            // write data
-   input logic [31:0]                      picm_rd_data,            // read data
-
-   input logic                             scan_mode                // scan mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-
-   logic                           lsu_dccm_rden_d, lsu_dccm_wren_d;
-   logic                           ld_single_ecc_error_lo_r, ld_single_ecc_error_hi_r;
-   logic                           ld_single_ecc_error_lo_r_ns, ld_single_ecc_error_hi_r_ns;
-   logic                           ld_single_ecc_error_lo_r_ff, ld_single_ecc_error_hi_r_ff;
-   logic                           lsu_double_ecc_error_r_ff;
-   logic [pt.DCCM_BITS-1:0]        ld_sec_addr_lo_r_ff, ld_sec_addr_hi_r_ff;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r_in, store_data_hi_r_in ;
-   logic [63:0]                    picm_rd_data_m;
-
-   logic                           dccm_wr_bypass_d_m_hi, dccm_wr_bypass_d_r_hi;
-   logic                           dccm_wr_bypass_d_m_lo, dccm_wr_bypass_d_r_lo;
-   logic                           kill_ecc_corr_lo_r, kill_ecc_corr_hi_r;
-
-    // byte_en flowing down
-   logic [3:0]                     store_byteen_m ,store_byteen_r;
-   logic [7:0]                     store_byteen_ext_m, store_byteen_ext_r;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic [63:0]  lsu_rdata_r, lsu_rdata_corr_r;
-      logic [63:0]  dccm_rdata_r, dccm_rdata_corr_r;
-      logic [63:0]  stbuf_fwddata_r;
-      logic [7:0]   stbuf_fwdbyteen_r;
-      logic [31:0]  stbuf_fwddata_lo_r, stbuf_fwddata_hi_r;
-      logic [3:0]   stbuf_fwdbyteen_lo_r, stbuf_fwdbyteen_hi_r;
-      logic [31:0]  lsu_rdata_lo_r, lsu_rdata_hi_r;
-      logic [63:0]  picm_rd_data_r;
-      logic [63:32] lsu_ld_data_r_nc, lsu_ld_data_corr_r_nc;
-      logic [2:0]   dma_mem_tag_r;
-      logic         stbuf_fwddata_en;
-
-      assign dccm_dma_rvalid      = lsu_pkt_r.valid & lsu_pkt_r.load & lsu_pkt_r.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_r;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_r[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_r ? lsu_rdata_corr_r[63:0] : {2{lsu_rdata_corr_r[31:0]}};
-      assign {lsu_ld_data_r_nc[63:32], lsu_ld_data_r[31:0]}           = lsu_rdata_r[63:0] >> 8*lsu_addr_r[1:0];
-      assign {lsu_ld_data_corr_r_nc[63:32], lsu_ld_data_corr_r[31:0]} = lsu_rdata_corr_r[63:0] >> 8*lsu_addr_r[1:0];
-
-      assign picm_rd_data_r[63:32]   = picm_rd_data_r[31:0];
-      assign dccm_rdata_r[63:0]      = {dccm_rdata_hi_r[31:0],dccm_rdata_lo_r[31:0]};
-      assign dccm_rdata_corr_r[63:0] = {sec_data_hi_r[31:0],sec_data_lo_r[31:0]};
-      assign stbuf_fwddata_r[63:0]   = {stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]};
-      assign stbuf_fwdbyteen_r[7:0]  = {stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]};
-      assign stbuf_fwddata_en        = (|stbuf_fwdbyteen_hi_m[3:0]) | (|stbuf_fwdbyteen_lo_m[3:0]) | clk_override;
-
-      for (genvar i=0; i<8; i++) begin: GenDMAData
-         assign lsu_rdata_corr_r[(8*i)+7:8*i]  = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_corr_r[(8*i)+7:8*i]));
-
-         assign lsu_rdata_r[(8*i)+7:8*i]       = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_r[(8*i)+7:8*i]));
-      end
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_hi_r_ff    (.*, .din(dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((lsu_dccm_rden_m & ldst_dual_m) | clk_override));
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_lo_r_ff    (.*, .din(dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_dccm_rden_m | clk_override));
-      rvdffe #(2*pt.DCCM_ECC_WIDTH)  dccm_data_ecc_r_ff  (.*, .din({dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0]}),
-                                                              .dout({dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0]}),                                  .en(lsu_dccm_rden_m | clk_override));
-      rvdff #(8)                   stbuf_fwdbyteen_ff    (.*, .din({stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]}), .dout({stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]}), .clk(lsu_c2_r_clk));
-      rvdffe #(64)                 stbuf_fwddata_ff      (.*, .din({stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]}),   .dout({stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]}),   .en(stbuf_fwddata_en));
-      rvdffe #(32)                 picm_rddata_rff       (.*, .din(picm_rd_data_m[31:0]),                                   .dout(picm_rd_data_r[31:0]),                                   .en(addr_in_pic_m | clk_override));
-      rvdff #(3)                   dma_mem_tag_rff       (.*, .din(dma_mem_tag_m[2:0]),                                     .dout(dma_mem_tag_r[2:0]),                                     .clk(lsu_c1_r_clk));
-
-   end else begin: L2U_Plus1_0
-
-      logic [63:0]  lsu_rdata_m, lsu_rdata_corr_m;
-      logic [63:0]  dccm_rdata_m, dccm_rdata_corr_m;
-      logic [63:0]  stbuf_fwddata_m;
-      logic [7:0]   stbuf_fwdbyteen_m;
-      logic [63:32] lsu_ld_data_m_nc, lsu_ld_data_corr_m_nc;
-      logic [31:0]  lsu_ld_data_corr_m;
-
-      assign dccm_dma_rvalid      = lsu_pkt_m.valid & lsu_pkt_m.load & lsu_pkt_m.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_m;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_m[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_m ? lsu_rdata_corr_m[63:0] : {2{lsu_rdata_corr_m[31:0]}};
-      assign {lsu_ld_data_m_nc[63:32], lsu_ld_data_m[31:0]} = lsu_rdata_m[63:0] >> 8*lsu_addr_m[1:0];
-      assign {lsu_ld_data_corr_m_nc[63:32], lsu_ld_data_corr_m[31:0]} = lsu_rdata_corr_m[63:0] >> 8*lsu_addr_m[1:0];
-
-      assign dccm_rdata_m[63:0]      = {dccm_rdata_hi_m[31:0],dccm_rdata_lo_m[31:0]};
-      assign dccm_rdata_corr_m[63:0] = {sec_data_hi_m[31:0],sec_data_lo_m[31:0]};
-      assign stbuf_fwddata_m[63:0]   = {stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]};
-      assign stbuf_fwdbyteen_m[7:0]  = {stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]};
-
-      for (genvar i=0; i<8; i++) begin: GenLoop
-         assign lsu_rdata_corr_m[(8*i)+7:8*i] = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_corr_m[(8*i)+7:8*i]));
-
-         assign lsu_rdata_m[(8*i)+7:8*i]      = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_m[(8*i)+7:8*i]));
-      end
-
-      rvdffe #(32) lsu_ld_data_corr_rff(.*, .din(lsu_ld_data_corr_m[31:0]), .dout(lsu_ld_data_corr_r[31:0]), .en((lsu_pkt_m.valid & lsu_pkt_m.load & (addr_in_pic_m | addr_in_dccm_m)) | clk_override));
-   end
-
-   assign kill_ecc_corr_lo_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign kill_ecc_corr_hi_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign ld_single_ecc_error_lo_r = lsu_pkt_r.load & single_ecc_error_lo_r & ~lsu_raw_fwd_lo_r;
-   assign ld_single_ecc_error_hi_r = lsu_pkt_r.load & single_ecc_error_hi_r & ~lsu_raw_fwd_hi_r;
-   assign ld_single_ecc_error_r    = (ld_single_ecc_error_lo_r | ld_single_ecc_error_hi_r) & ~lsu_double_ecc_error_r;
-
-   assign ld_single_ecc_error_lo_r_ns = ld_single_ecc_error_lo_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_lo_r;
-   assign ld_single_ecc_error_hi_r_ns = ld_single_ecc_error_hi_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_hi_r;
-   assign ld_single_ecc_error_r_ff = (ld_single_ecc_error_lo_r_ff | ld_single_ecc_error_hi_r_ff) & ~lsu_double_ecc_error_r_ff;
-
-   assign lsu_stbuf_commit_any = stbuf_reqvld_any &
-                                 (~(lsu_dccm_rden_d | lsu_dccm_wren_d | ld_single_ecc_error_r_ff) |
-                                  (lsu_dccm_rden_d & ~((stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == lsu_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]) |
-                                                       (stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == end_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]))));
-
-   // No need to read for aligned word/dword stores since ECC will come by new data completely
-   assign lsu_dccm_rden_d = lsu_pkt_d.valid & (lsu_pkt_d.load | (lsu_pkt_d.store & (~(lsu_pkt_d.word | lsu_pkt_d.dword) | (lsu_addr_d[1:0] != 2'b0)))) & addr_in_dccm_d;
-
-   // DMA will read/write in decode stage
-   assign lsu_dccm_wren_d = dma_dccm_wen;
-
-   // DCCM inputs
-   assign dccm_wren                             = lsu_dccm_wren_d | lsu_stbuf_commit_any | ld_single_ecc_error_r_ff;
-   assign dccm_rden                             = lsu_dccm_rden_d & addr_in_dccm_d;
-   assign dccm_wr_addr_lo[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? lsu_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_wr_addr_hi[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? end_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_lo[pt.DCCM_BITS-1:0]     = lsu_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_hi[pt.DCCM_BITS-1:0]     = end_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-   assign dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-
-   // DCCM outputs
-   assign store_byteen_m[3:0] = {4{lsu_pkt_m.store}} &
-                                (({4{lsu_pkt_m.by}}    & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}}  & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}}  & 4'b1111));
-
-   assign store_byteen_r[3:0] =  {4{lsu_pkt_r.store}} &
-                                 (({4{lsu_pkt_r.by}}    & 4'b0001) |
-                                  ({4{lsu_pkt_r.half}}  & 4'b0011) |
-                                  ({4{lsu_pkt_r.word}}  & 4'b1111));
-
-   assign store_byteen_ext_m[7:0] = {4'b0,store_byteen_m[3:0]} << lsu_addr_m[1:0];      // The packet in m
-   assign store_byteen_ext_r[7:0] = {4'b0,store_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-
-
-   assign dccm_wr_bypass_d_m_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-   assign dccm_wr_bypass_d_m_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-
-   assign dccm_wr_bypass_d_r_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-   assign dccm_wr_bypass_d_r_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic        dccm_wren_Q;
-      logic [31:0] dccm_wr_data_Q;
-      logic        dccm_wr_bypass_d_m_lo_Q, dccm_wr_bypass_d_m_hi_Q;
-      logic [31:0] store_data_pre_hi_r, store_data_pre_lo_r;
-
-      assign {store_data_pre_hi_r[31:0], store_data_pre_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-          assign store_data_lo_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]);
-          assign store_data_hi_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]);
-
-          assign store_datafn_lo_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]));
-          assign store_datafn_hi_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]));
-      end
-
-      rvdff #(1)   dccm_wren_ff       (.*, .din(lsu_stbuf_commit_any),  .dout(dccm_wren_Q),             .clk(lsu_free_c2_clk));   // ECC load errors writing to dccm shouldn't fwd to stores in pipe
-      rvdffe #(32) dccm_wrdata_ff     (.*, .din(stbuf_data_any[31:0]),  .dout(dccm_wr_data_Q[31:0]),    .en(lsu_stbuf_commit_any | clk_override), .clk(clk));
-      rvdff #(1)   dccm_wrbyp_dm_loff (.*, .din(dccm_wr_bypass_d_m_lo), .dout(dccm_wr_bypass_d_m_lo_Q), .clk(lsu_free_c2_clk));
-      rvdff #(1)   dccm_wrbyp_dm_hiff (.*, .din(dccm_wr_bypass_d_m_hi), .dout(dccm_wr_bypass_d_m_hi_Q), .clk(lsu_free_c2_clk));
-      rvdff #(32)  store_data_rff     (.*, .din(store_data_m[31:0]),    .dout(store_data_r[31:0]),      .clk(lsu_store_c1_r_clk));
-
-   end else begin: L2U1_Plus1_0
-
-      logic [31:0] store_data_hi_m, store_data_lo_m;
-      logic [63:0] store_data_mask;
-      assign {store_data_hi_m[31:0] , store_data_lo_m[31:0]} = {32'b0,store_data_m[31:0]} << 8*lsu_addr_m[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_hi_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i+4] ? store_data_hi_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_hi)   ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_hi_m[(8*i)+7:(8*i)]);
-         assign store_data_lo_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i]   ? store_data_lo_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_lo) ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_lo_m[(8*i)+7:(8*i)]);
-
-         assign store_datafn_lo_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo & ~store_byteen_ext_r[i])   ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)];
-         assign store_datafn_hi_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi & ~store_byteen_ext_r[i+4]) ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_hi_r[(8*i)+7:(8*i)];
-      end // for (genvar i=0; i<BYTE_WIDTH; i++)
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_mask[(8*i)+7:(8*i)] = {8{store_byteen_r[i]}};
-      end
-      assign store_data_r[31:0]      = 32'({store_data_hi_r[31:0],store_data_lo_r[31:0]} >> 8*lsu_addr_r[1:0]) & store_data_mask[31:0];
-
-      rvdffe #(pt.DCCM_DATA_WIDTH) store_data_hi_rff (.*, .din(store_data_hi_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((ldst_dual_m & lsu_pkt_m.valid & lsu_pkt_m.store) | clk_override), .clk(clk));
-      rvdff  #(pt.DCCM_DATA_WIDTH) store_data_lo_rff (.*, .din(store_data_lo_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .clk(lsu_store_c1_r_clk));
-
-   end
-
-   assign dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_lo[pt.DCCM_DATA_WIDTH-1:0]; // for ld choose dccm_out
-   assign dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_hi[pt.DCCM_DATA_WIDTH-1:0]; // for ld this is used for ecc
-
-   assign dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-   assign dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-
-   // PIC signals. PIC ignores the lower 2 bits of address since PIC memory registers are 32-bits
-   assign picm_wren          = (lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_pic_r & lsu_commit_r) | dma_pic_wen;
-   assign picm_rden          = lsu_pkt_d.valid & lsu_pkt_d.load  & addr_in_pic_d;
-   assign picm_mken          = lsu_pkt_d.valid & lsu_pkt_d.store & addr_in_pic_d;  // Get the mask for stores
-   assign picm_rdaddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},lsu_addr_d[pt.PIC_BITS-1:0]};
-
-   assign picm_wraddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},(dma_pic_wen ? dma_mem_addr[pt.PIC_BITS-1:0] : lsu_addr_r[pt.PIC_BITS-1:0])};
-
-   assign picm_wr_data[31:0] = dma_pic_wen ? dma_mem_wdata[31:0] : store_datafn_lo_r[31:0];
-
-   assign picm_mask_data_m[31:0] = picm_rd_data_m[31:0];
-   assign picm_rd_data_m[63:0]   = {picm_rd_data[31:0],picm_rd_data[31:0]};
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      rvdff #(1) dccm_rden_mff (.*, .din(lsu_dccm_rden_d), .dout(lsu_dccm_rden_m), .clk(lsu_c2_m_clk));
-      rvdff #(1) dccm_rden_rff (.*, .din(lsu_dccm_rden_m), .dout(lsu_dccm_rden_r), .clk(lsu_c2_r_clk));
-
-      // ECC correction flops since dccm write happens next cycle
-      // We are writing to dccm in r+1 for ecc correction since fast_int needs to be blocked in decode - 1. We can probably write in r for plus0 configuration since we know ecc error in M.
-      // In that case these (_ff) flops are needed only in plus1 configuration
-      rvdff #(1) ld_double_ecc_error_rff    (.*, .din(lsu_double_ecc_error_r),   .dout(lsu_double_ecc_error_r_ff),   .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_hi_rff (.*, .din(ld_single_ecc_error_hi_r_ns), .dout(ld_single_ecc_error_hi_r_ff), .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_lo_rff (.*, .din(ld_single_ecc_error_lo_r_ns), .dout(ld_single_ecc_error_lo_r_ff), .clk(lsu_free_c2_clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_hi_rff (.*, .din(end_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_lo_rff (.*, .din(lsu_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-
-   end else begin: Gen_dccm_disable
-      assign lsu_dccm_rden_m = '0;
-      assign lsu_dccm_rden_r = '0;
-
-      assign lsu_double_ecc_error_r_ff = 1'b0;
-      assign ld_single_ecc_error_hi_r_ff = 1'b0;
-      assign ld_single_ecc_error_lo_r_ff = 1'b0;
-      assign ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] = '0;
-      assign ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] = '0;
-   end
-
-`ifdef RV_ASSERT_ON
-
-   // Load single ECC error correction implies commit/dma
-   property ld_single_ecc_error_commit;
-      @(posedge clk) disable iff(~rst_l) (ld_single_ecc_error_r_ff & dccm_wren) |-> ($past(lsu_commit_r | lsu_pkt_r.dma));
-   endproperty
-   assert_ld_single_ecc_error_commit: assert property (ld_single_ecc_error_commit) else
-     $display("No commit or DMA but ECC correction happened");
-
-
-`endif
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_dccm_mem.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_dccm_mem.sv
deleted file mode 100644
index ac4765b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_dccm_mem.sv
+++ /dev/null
@@ -1,351 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-`define eb1_LOCAL_DCCM_RAM_TEST_PORTS    .TEST1(dccm_ext_in_pkt[i].TEST1),                      \
-                                     .RME(dccm_ext_in_pkt[i].RME),                      \
-                                     .RM(dccm_ext_in_pkt[i].RM),                        \
-                                     .LS(dccm_ext_in_pkt[i].LS),                        \
-                                     .DS(dccm_ext_in_pkt[i].DS),                        \
-                                     .SD(dccm_ext_in_pkt[i].SD),                        \
-                                     .TEST_RNM(dccm_ext_in_pkt[i].TEST_RNM),            \
-                                     .BC1(dccm_ext_in_pkt[i].BC1),                      \
-                                     .BC2(dccm_ext_in_pkt[i].BC2),                      \
-
-
-
-module eb1_lsu_dccm_mem
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-`ifdef USE_POWER_PINS
-   input logic 	vccd1,
-   input logic		vssd1,
- `endif
-   input logic         clk,                                             // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic         active_clk,                                      // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic         rst_l,                                           // reset, active low
-   input logic         clk_override,                                    // Override non-functional clock gating
-
-   input logic         dccm_wren,                                       // write enable
-   input logic         dccm_rden,                                       // read enable
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,                     // read address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,                     // read address for the upper bank in case of a misaligned access
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,              // write data
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,              // write data
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,    // the dccm packet from the soc
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_lo,              // read data from the lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_hi,              // read data from the hi bank
-
-   input  logic         scan_mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-   localparam DCCM_INDEX_BITS = (pt.DCCM_BITS - pt.DCCM_BANK_BITS - pt.DCCM_WIDTH_BITS);
-   localparam DCCM_INDEX_DEPTH = ((pt.DCCM_SIZE)*1024)/((pt.DCCM_BYTE_WIDTH)*(pt.DCCM_NUM_BANKS));  // Depth of memory bank
-
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        wren_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        rden_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+2)] addr_bank;
-   logic [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)]           rd_addr_even, rd_addr_odd;
-   logic                                                                rd_unaligned, wr_unaligned;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_FDATA_WIDTH-1:0]              dccm_bank_dout;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]                                      wrdata;
-
-   logic [pt.DCCM_NUM_BANKS-1:0][pt.DCCM_FDATA_WIDTH-1:0]               wr_data_bank;
-
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_lo_q;
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_hi_q;
-
-   logic [pt.DCCM_NUM_BANKS-1:0]            dccm_clken;
-
-   assign rd_unaligned = (dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-   assign wr_unaligned = (dccm_wr_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_wr_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-
-   // Align the read data
-   assign dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_lo_q[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-   assign dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-
-
-   // 8 Banks, 16KB each (2048 x 72)
-   for (genvar i=0; i<pt.DCCM_NUM_BANKS; i++) begin: mem_bank
-      assign  wren_bank[i]        = dccm_wren & ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_wr_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  rden_bank[i]        = dccm_rden & ((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_rd_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  addr_bank[i][(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] = wren_bank[i] ? (((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ?
-                                                                                                        dccm_wr_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_wr_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS])  :
-                                                                                                  (((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & rd_unaligned) ?
-                                                                                                        dccm_rd_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_rd_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS]);
-
-      assign wr_data_bank[i]     = ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ? dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] : dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0];
-
-      // clock gating section
-      assign  dccm_clken[i] = (wren_bank[i] | rden_bank[i] | clk_override) ;
-      // end clock gating section
-
-`ifdef VERILATOR
-
-       /* eb1_ram #(DCCM_INDEX_DEPTH,39)  ram (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-            
-              */                    
-                                  sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-                                  					`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i]),
-									.dout0(dccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-
-`else
-
-      if (DCCM_INDEX_DEPTH == 32768) begin : dccm
-         ram_32768x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 16384) begin : dccm
-         ram_16384x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 8192) begin : dccm
-         ram_8192x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 4096) begin : dccm
-         ram_4096x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 3072) begin : dccm
-         ram_3072x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 2048) begin : dccm
-         ram_2048x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 1024) begin : dccm
-         /*ram_1024x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-                                 */
-                                 sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i]),
-									.dout0(dccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 512) begin : dccm
-         ram_512x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-      else if (DCCM_INDEX_DEPTH == 256) begin : dccm
-         /*ram_256x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );*/
-                                sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									`ifdef USE_POWER_PINS
-    									.vccd1(vccd1),
-    									.vssd1(vssd1),
-    									`endif
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i][31:0]),
-									.dout0(dccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 128) begin : dccm
-         ram_128x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-`endif
-
-   end : mem_bank
-
-   // Flops
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_lo_ff (.*, .din(dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_lo_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_hi_ff (.*, .din(dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-
-`undef eb1_LOCAL_DCCM_RAM_TEST_PORTS
-
-endmodule // eb1_lsu_dccm_mem
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_ecc.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_ecc.sv
deleted file mode 100644
index c91a01f..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_ecc.sv
+++ /dev/null
@@ -1,241 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_ecc
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-   input logic                           clk,                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                           lsu_c2_r_clk,       // clock
-   input logic                           clk_override,       // Override non-functional clock gating
-   input logic                           rst_l,              // reset, active low
-   input logic                           scan_mode,          // scan mode
-
-   input eb1_lsu_pkt_t                  lsu_pkt_m,          // packet in m
-   input eb1_lsu_pkt_t                  lsu_pkt_r,          // packet in r
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  stbuf_data_any,
-
-   input logic                           dec_tlu_core_ecc_disable,  // disables the ecc computation and error flagging
-
-   input logic                           lsu_dccm_rden_r,          // dccm rden
-   input logic                           addr_in_dccm_r,           // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_r,               // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_r,               // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_r,          // data from the dccm
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_r,          // data from the dccm
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_r,       // data from the dccm + ecc
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_r,       // data from the dccm + ecc
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r_ff,         // corrected dccm data R+1 stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff,         // corrected dccm data R+1 stage
-
-   input logic                           ld_single_ecc_error_r,     // ld has a single ecc error
-   input logic                           ld_single_ecc_error_r_ff,  // ld has a single ecc error
-   input logic                           lsu_dccm_rden_m,           // dccm rden
-   input logic                           addr_in_dccm_m,            // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_m,                // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_m,                // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_m,           // raw data from mem
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_m,           // raw data from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_m,        // ecc read out from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_m,        // ecc read out from mem
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_m,             // corrected dccm data M-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_m,             // corrected dccm data M-stage
-
-   input logic                           dma_dccm_wen,              // Perform DMA writes only for word/dword
-   input logic  [31:0]                   dma_dccm_wdata_lo,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   input logic  [31:0]                   dma_dccm_wdata_hi,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_hi,     // ECC bits for the DMA wdata
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_lo,     // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any,             // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff,      // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_lo_r_ff,      // Encoded data with ECC bits
-
-   output logic                          single_ecc_error_hi_r,                   // sec detected
-   output logic                          single_ecc_error_lo_r,                   // sec detected on lower dccm bank
-   output logic                          lsu_single_ecc_error_r,                  // or of the 2
-   output logic                          lsu_double_ecc_error_r,                   // double error detected
-
-   output logic                          lsu_single_ecc_error_m,                  // or of the 2
-   output logic                          lsu_double_ecc_error_m                   // double error detected
-
- );
-
-   logic                           is_ldst_r;
-   logic                           is_ldst_hi_any, is_ldst_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_wdata_hi_any, dccm_wdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  dccm_wdata_ecc_hi_any, dccm_wdata_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_rdata_hi_any, dccm_rdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]   dccm_data_ecc_hi_any, dccm_data_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  sec_data_hi_any, sec_data_lo_any;
-   logic                           single_ecc_error_hi_any, single_ecc_error_lo_any;
-   logic                           double_ecc_error_hi_any, double_ecc_error_lo_any;
-
-   logic                           double_ecc_error_hi_m, double_ecc_error_lo_m;
-   logic                           double_ecc_error_hi_r, double_ecc_error_lo_r;
-
-   logic [6:0]                     ecc_out_hi_nc, ecc_out_lo_nc;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic        ldst_dual_m, ldst_dual_r;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_r, is_ldst_lo_r;
-
-      assign ldst_dual_r                                 = (lsu_addr_r[2] != end_addr_r[2]);
-      assign is_ldst_r                                   = lsu_pkt_r.valid & (lsu_pkt_r.load | lsu_pkt_r.store) & addr_in_dccm_r & lsu_dccm_rden_r;
-      assign is_ldst_lo_r                                = is_ldst_r & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_r                                = is_ldst_r & ldst_dual_r & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_r;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_r;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_hi_r                       = single_ecc_error_hi_any;
-      assign double_ecc_error_hi_r                       = double_ecc_error_hi_any;
-      assign sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_lo_r                       = single_ecc_error_lo_any;
-      assign double_ecc_error_lo_r                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_r                      = single_ecc_error_hi_r | single_ecc_error_lo_r;
-      assign lsu_double_ecc_error_r                      = double_ecc_error_hi_r | double_ecc_error_lo_r;
-
-   end else begin: L2U_Plus1_0
-
-      logic        ldst_dual_m;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_m, is_ldst_lo_m;
-
-      assign ldst_dual_m                                 = (lsu_addr_m[2] != end_addr_m[2]);
-      assign is_ldst_m                                   = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & addr_in_dccm_m & lsu_dccm_rden_m;
-      assign is_ldst_lo_m                                = is_ldst_m & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_m                                = is_ldst_m & (ldst_dual_m | lsu_pkt_m.dma) & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_m;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_m;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_hi_m                       = double_ecc_error_hi_any;
-      assign sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_lo_m                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_m                      = single_ecc_error_hi_any | single_ecc_error_lo_any;
-      assign lsu_double_ecc_error_m                      = double_ecc_error_hi_m   | double_ecc_error_lo_m;
-
-      // Flops
-      rvdff  #(1) lsu_single_ecc_err_r    (.din(lsu_single_ecc_error_m), .dout(lsu_single_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(1) lsu_double_ecc_err_r    (.din(lsu_double_ecc_error_m), .dout(lsu_double_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_lo_rff (.din(single_ecc_error_lo_any),  .dout(single_ecc_error_lo_r),  .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_hi_rff (.din(single_ecc_error_hi_any),  .dout(single_ecc_error_hi_r),  .clk(lsu_c2_r_clk), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rff (.din(sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rff (.din(sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-
-   end
-
-   // Logic for ECC generation during write
-   assign dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0] : stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]);
-   assign dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0] : 32'h0);
-
-   assign sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0]         = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-
-   // Instantiate ECC blocks
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-
-      //Detect/Repair for Hi
-      rvecc_decode lsu_ecc_decode_hi (
-         // Inputs
-         .en(is_ldst_hi_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_in(dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_hi_nc[6:0]),
-         .single_ecc_error(single_ecc_error_hi_any),
-         .double_ecc_error(double_ecc_error_hi_any),
-         .*
-      );
-
-      //Detect/Repair for Lo
-      rvecc_decode lsu_ecc_decode_lo (
-         // Inputs
-         .en(is_ldst_lo_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] ),
-         .ecc_in(dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_lo_nc[6:0]),
-         .single_ecc_error(single_ecc_error_lo_any),
-         .double_ecc_error(double_ecc_error_lo_any),
-         .*
-      );
-
-      rvecc_encode lsu_ecc_encode_hi (
-         //Inputs
-         .din(dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-      rvecc_encode lsu_ecc_encode_lo (
-         //Inputs
-         .din(dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign single_ecc_error_hi_any = '0;
-      assign double_ecc_error_hi_any = '0;
-      assign single_ecc_error_lo_any = '0;
-      assign double_ecc_error_lo_any = '0;
-   end
-
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rplus1ff (.din(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rplus1ff (.din(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-
-
-endmodule // eb1_lsu_ecc
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_lsc_ctl.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_lsc_ctl.sv
deleted file mode 100644
index 7b0517b..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_lsc_ctl.sv
+++ /dev/null
@@ -1,341 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU control
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_lsc_ctl
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input logic                rst_l,                     // reset, active low
-   input logic                clk_override,              // Override non-functional clock gating
-   input logic                clk,                       // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   // clocks per pipe
-   input logic                lsu_c1_m_clk,
-   input logic                lsu_c1_r_clk,
-   input logic                lsu_c2_m_clk,
-   input logic                lsu_c2_r_clk,
-   input logic                lsu_store_c1_m_clk,
-
-   input logic [31:0]         lsu_ld_data_r,             // Load data R-stage
-   input logic [31:0]         lsu_ld_data_corr_r,        // ECC corrected data R-stage
-   input logic                lsu_single_ecc_error_r,    // ECC single bit error R-stage
-   input logic                lsu_double_ecc_error_r,    // ECC double bit error R-stage
-
-   input logic [31:0]         lsu_ld_data_m,             // Load data M-stage
-   input logic                lsu_single_ecc_error_m,    // ECC single bit error M-stage
-   input logic                lsu_double_ecc_error_m,    // ECC double bit error M-stage
-
-   input logic                flush_m_up,                // Flush M and D stage
-   input logic                flush_r,                   // Flush R-stage
-   input logic                ldst_dual_d,               // load/store is unaligned at 32 bit boundary D-stage
-   input logic                ldst_dual_m,               // load/store is unaligned at 32 bit boundary M-stage
-   input logic                ldst_dual_r,               // load/store is unaligned at 32 bit boundary R-stage
-
-   input logic [31:0]         exu_lsu_rs1_d,             // address
-   input logic [31:0]         exu_lsu_rs2_d,             // store data
-
-   input eb1_lsu_pkt_t       lsu_p,                     // lsu control packet
-   input logic                dec_lsu_valid_raw_d,       // Raw valid for address computation
-   input logic [11:0]         dec_lsu_offset_d,          // 12b offset for load/store addresses
-
-   input  logic [31:0]        picm_mask_data_m,          // PIC data M-stage
-   input  logic [31:0]        bus_read_data_m,           // the bus return data
-   output logic [31:0]        lsu_result_m,              // lsu load data
-   output logic [31:0]        lsu_result_corr_r,         // This is the ECC corrected data going to RF
-   // lsu address down the pipe
-   output logic [31:0]        lsu_addr_d,
-   output logic [31:0]        lsu_addr_m,
-   output logic [31:0]        lsu_addr_r,
-   // lsu address down the pipe - needed to check unaligned
-   output logic [31:0]        end_addr_d,
-   output logic [31:0]        end_addr_m,
-   output logic [31:0]        end_addr_r,
-   // store data down the pipe
-   output logic [31:0]        store_data_m,
-
-   input  logic [31:0]         dec_tlu_mrac_ff,          // CSR for memory region control
-   output logic                lsu_exc_m,                // Access or misaligned fault
-   output logic                is_sideeffects_m,         // is sideffects space
-   output logic                lsu_commit_r,             // lsu instruction in r commits
-   output logic                lsu_single_ecc_error_incr,// LSU inc SB error counter
-   output eb1_lsu_error_pkt_t lsu_error_pkt_r,          // lsu exception packet
-
-   output logic [31:1]         lsu_fir_addr,             // fast interrupt address
-   output logic [1:0]          lsu_fir_error,            // Error during fast interrupt lookup
-
-   // address in dccm/pic/external per pipe stage
-   output logic               addr_in_dccm_d,
-   output logic               addr_in_dccm_m,
-   output logic               addr_in_dccm_r,
-
-   output logic               addr_in_pic_d,
-   output logic               addr_in_pic_m,
-   output logic               addr_in_pic_r,
-
-   output logic               addr_external_m,
-
-   // DMA slave
-   input logic                dma_dccm_req,
-   input logic [31:0]         dma_mem_addr,
-   input logic [2:0]          dma_mem_sz,
-   input logic                dma_mem_write,
-   input logic [63:0]         dma_mem_wdata,
-
-   // Store buffer related signals
-   output eb1_lsu_pkt_t      lsu_pkt_d,
-   output eb1_lsu_pkt_t      lsu_pkt_m,
-   output eb1_lsu_pkt_t      lsu_pkt_r,
-
-   input  logic               scan_mode                  // Scan mode
-
-   );
-
-   logic [31:3]        end_addr_pre_m, end_addr_pre_r;
-   logic [31:0]        full_addr_d;
-   logic [31:0]        full_end_addr_d;
-   logic [31:0]        lsu_rs1_d;
-   logic [11:0]        lsu_offset_d;
-   logic [31:0]        rs1_d;
-   logic [11:0]        offset_d;
-   logic [12:0]        end_addr_offset_d;
-   logic [2:0]         addr_offset_d;
-
-   logic [63:0]        dma_mem_wdata_shifted;
-   logic               addr_external_d;
-   logic               addr_external_r;
-   logic               access_fault_d, misaligned_fault_d;
-   logic               access_fault_m, misaligned_fault_m;
-
-   logic               fir_dccm_access_error_d, fir_nondccm_access_error_d;
-   logic               fir_dccm_access_error_m, fir_nondccm_access_error_m;
-
-   logic [3:0]         exc_mscause_d, exc_mscause_m;
-   logic [31:0]        rs1_d_raw;
-   logic [31:0]        store_data_d, store_data_pre_m, store_data_m_in;
-   logic [31:0]        bus_read_data_r;
-
-   eb1_lsu_pkt_t           dma_pkt_d;
-   eb1_lsu_pkt_t           lsu_pkt_m_in, lsu_pkt_r_in;
-   eb1_lsu_error_pkt_t     lsu_error_pkt_m;
-
-
-   // Premux the rs1/offset for dma
-   assign lsu_rs1_d[31:0]    = dec_lsu_valid_raw_d ? exu_lsu_rs1_d[31:0] : dma_mem_addr[31:0];
-   assign lsu_offset_d[11:0] = dec_lsu_offset_d[11:0] & {12{dec_lsu_valid_raw_d}};
-   assign rs1_d_raw[31:0]    = lsu_rs1_d[31:0];
-   assign offset_d[11:0]     = lsu_offset_d[11:0];
-
-   assign rs1_d[31:0] = (lsu_pkt_d.load_ldst_bypass_d) ? lsu_result_m[31:0] : rs1_d_raw[31:0];
-
-   // generate the ls address
-   rvlsadder   lsadder  (.rs1(rs1_d[31:0]),
-                       .offset(offset_d[11:0]),
-                       .dout(full_addr_d[31:0])
-                       );
-
-   // Module to generate the memory map of the address
-   eb1_lsu_addrcheck addrcheck (
-              .start_addr_d(full_addr_d[31:0]),
-              .end_addr_d(full_end_addr_d[31:0]),
-              .rs1_region_d(rs1_d[31:28]),
-              .*
-  );
-
-   // Calculate start/end address for load/store
-   assign addr_offset_d[2:0]      = ({3{lsu_pkt_d.half}} & 3'b01) | ({3{lsu_pkt_d.word}} & 3'b11) | ({3{lsu_pkt_d.dword}} & 3'b111);
-   assign end_addr_offset_d[12:0] = {offset_d[11],offset_d[11:0]} + {9'b0,addr_offset_d[2:0]};
-   assign full_end_addr_d[31:0]   = rs1_d[31:0] + {{19{end_addr_offset_d[12]}},end_addr_offset_d[12:0]};
-   assign end_addr_d[31:0]        = full_end_addr_d[31:0];
-   assign lsu_exc_m               = access_fault_m | misaligned_fault_m;
-
-   // Goes to TLU to increment the ECC error counter
-   assign lsu_single_ecc_error_incr = (lsu_single_ecc_error_r & ~lsu_double_ecc_error_r) & (lsu_commit_r | lsu_pkt_r.dma) & lsu_pkt_r.valid;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic               access_fault_r, misaligned_fault_r;
-      logic [3:0]         exc_mscause_r;
-      logic               fir_dccm_access_error_r, fir_nondccm_access_error_r;
-
-      // Generate exception packet
-      assign lsu_error_pkt_r.exc_valid = (access_fault_r | misaligned_fault_r | lsu_double_ecc_error_r) & lsu_pkt_r.valid & ~lsu_pkt_r.dma & ~lsu_pkt_r.fast_int;
-      assign lsu_error_pkt_r.single_ecc_error = lsu_single_ecc_error_r & ~lsu_error_pkt_r.exc_valid & ~lsu_pkt_r.dma;
-      assign lsu_error_pkt_r.inst_type = lsu_pkt_r.store;
-      assign lsu_error_pkt_r.exc_type  = ~misaligned_fault_r;
-      assign lsu_error_pkt_r.mscause[3:0] = (lsu_double_ecc_error_r & ~misaligned_fault_r & ~access_fault_r) ? 4'h1 : exc_mscause_r[3:0];
-      assign lsu_error_pkt_r.addr[31:0] = lsu_addr_r[31:0];
-
-      assign lsu_fir_error[1:0] = fir_nondccm_access_error_r ? 2'b11 : (fir_dccm_access_error_r ? 2'b10 : ((lsu_pkt_r.fast_int & lsu_double_ecc_error_r) ? 2'b01 : 2'b00));
-
-      rvdff #(1) access_fault_rff             (.din(access_fault_m),             .dout(access_fault_r),             .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) misaligned_fault_rff         (.din(misaligned_fault_m),         .dout(misaligned_fault_r),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(4) exc_mscause_rff              (.din(exc_mscause_m[3:0]),         .dout(exc_mscause_r[3:0]),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_m),    .dout(fir_dccm_access_error_r),    .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_m), .dout(fir_nondccm_access_error_r), .clk(lsu_c1_r_clk), .*);
-
-   end else begin: L2U_Plus1_0
-      logic [1:0] lsu_fir_error_m;
-
-      // Generate exception packet
-      assign lsu_error_pkt_m.exc_valid = (access_fault_m | misaligned_fault_m | lsu_double_ecc_error_m) & lsu_pkt_m.valid & ~lsu_pkt_m.dma & ~lsu_pkt_m.fast_int & ~flush_m_up;
-      assign lsu_error_pkt_m.single_ecc_error = lsu_single_ecc_error_m & ~lsu_error_pkt_m.exc_valid & ~lsu_pkt_m.dma;
-      assign lsu_error_pkt_m.inst_type = lsu_pkt_m.store;
-      assign lsu_error_pkt_m.exc_type  = ~misaligned_fault_m;
-      assign lsu_error_pkt_m.mscause[3:0] = (lsu_double_ecc_error_m & ~misaligned_fault_m & ~access_fault_m) ? 4'h1 : exc_mscause_m[3:0];
-      assign lsu_error_pkt_m.addr[31:0] = lsu_addr_m[31:0];
-
-      assign lsu_fir_error_m[1:0] = fir_nondccm_access_error_m ? 2'b11 : (fir_dccm_access_error_m ? 2'b10 : ((lsu_pkt_m.fast_int & lsu_double_ecc_error_m) ? 2'b01 : 2'b00));
-
-      rvdff  #(1)                             lsu_exc_valid_rff       (.*, .din(lsu_error_pkt_m.exc_valid),                        .dout(lsu_error_pkt_r.exc_valid),                        .clk(lsu_c2_r_clk));
-      rvdff  #(1)                             lsu_single_ecc_error_rff(.*, .din(lsu_error_pkt_m.single_ecc_error),                 .dout(lsu_error_pkt_r.single_ecc_error),                 .clk(lsu_c2_r_clk));
-      rvdffe #($bits(eb1_lsu_error_pkt_t)-2) lsu_error_pkt_rff       (.*, .din(lsu_error_pkt_m[$bits(eb1_lsu_error_pkt_t)-1:2]), .dout(lsu_error_pkt_r[$bits(eb1_lsu_error_pkt_t)-1:2]), .en(lsu_error_pkt_m.exc_valid | lsu_error_pkt_m.single_ecc_error | clk_override));
-      rvdff #(2)                              lsu_fir_error_rff       (.*, .din(lsu_fir_error_m[1:0]),                             .dout(lsu_fir_error[1:0]),                               .clk(lsu_c2_r_clk));
-   end
-
-   //Create DMA packet
-   always_comb begin
-      dma_pkt_d = '0;
-      dma_pkt_d.valid   = dma_dccm_req;
-      dma_pkt_d.dma     = 1'b1;
-      dma_pkt_d.store   = dma_mem_write;
-      dma_pkt_d.load    = ~dma_mem_write;
-      dma_pkt_d.by      = (dma_mem_sz[2:0] == 3'b0);
-      dma_pkt_d.half    = (dma_mem_sz[2:0] == 3'b1);
-      dma_pkt_d.word    = (dma_mem_sz[2:0] == 3'b10);
-      dma_pkt_d.dword   = (dma_mem_sz[2:0] == 3'b11);
-   end
-
-   always_comb begin
-      lsu_pkt_d = dec_lsu_valid_raw_d ? lsu_p : dma_pkt_d;
-      lsu_pkt_m_in = lsu_pkt_d;
-      lsu_pkt_r_in = lsu_pkt_m;
-
-      lsu_pkt_d.valid = (lsu_p.valid & ~(flush_m_up & ~lsu_p.fast_int)) | dma_dccm_req;
-      lsu_pkt_m_in.valid = lsu_pkt_d.valid & ~(flush_m_up & ~lsu_pkt_d.dma);
-      lsu_pkt_r_in.valid = lsu_pkt_m.valid & ~(flush_m_up & ~lsu_pkt_m.dma) ;
-   end
-
-   // C2 clock for valid and C1 for other bits of packet
-   rvdff #(1) lsu_pkt_vldmff (.*, .din(lsu_pkt_m_in.valid), .dout(lsu_pkt_m.valid), .clk(lsu_c2_m_clk));
-   rvdff #(1) lsu_pkt_vldrff (.*, .din(lsu_pkt_r_in.valid), .dout(lsu_pkt_r.valid), .clk(lsu_c2_r_clk));
-
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_mff (.*, .din(lsu_pkt_m_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_m[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_m_clk));
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_rff (.*, .din(lsu_pkt_r_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_r[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_r_clk));
-
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_r, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_r[31:0];
-      assign lsu_ld_datafn_corr_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this is really R stage signal
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_r[7:0]}) |
-                                  ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_r[15:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_r[7]}}, lsu_ld_datafn_r[7:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_r[15]}},lsu_ld_datafn_r[15:0]}) |
-                                  ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_r[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-
-   end else begin: L2U1_Plus1_0 // block: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_m, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_m[31:0] = addr_external_m ? bus_read_data_m[31:0] : lsu_ld_data_m[31:0];
-      assign lsu_ld_datafn_corr_r[31:0] = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this result must look at prior stores and merge them in
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {24'b0,lsu_ld_datafn_m[7:0]}) |
-                                  ({32{ lsu_pkt_m.unsign & lsu_pkt_m.half}} & {16'b0,lsu_ld_datafn_m[15:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {{24{  lsu_ld_datafn_m[7]}}, lsu_ld_datafn_m[7:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.half}} & {{16{  lsu_ld_datafn_m[15]}},lsu_ld_datafn_m[15:0]}) |
-                                  ({32{lsu_pkt_m.word}}                     & lsu_ld_datafn_m[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-   end
-
-   // Fast interrupt address
-   assign lsu_fir_addr[31:1]    = lsu_ld_data_corr_r[31:1];
-
-   // absence load/store all 0's
-   assign lsu_addr_d[31:0] = full_addr_d[31:0];
-
-   // Interrupt as a flush source allows the WB to occur
-   assign lsu_commit_r = lsu_pkt_r.valid & (lsu_pkt_r.store | lsu_pkt_r.load) & ~flush_r & ~lsu_pkt_r.dma;
-
-   assign dma_mem_wdata_shifted[63:0] = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-   assign store_data_d[31:0] = dma_dccm_req ? dma_mem_wdata_shifted[31:0] : exu_lsu_rs2_d[31:0];  // Write to PIC still happens in r stage
-
-   assign store_data_m_in[31:0] = (lsu_pkt_d.store_data_bypass_d) ? lsu_result_m[31:0] : store_data_d[31:0];
-
-   assign store_data_m[31:0] = (picm_mask_data_m[31:0] | {32{~addr_in_pic_m}}) & ((lsu_pkt_m.store_data_bypass_m) ? lsu_result_m[31:0] : store_data_pre_m[31:0]);
-
-
-   rvdff #(32)  sdmff (.*, .din(store_data_m_in[31:0]), .dout(store_data_pre_m[31:0]),                       .clk(lsu_store_c1_m_clk));
-
-   rvdff #(32) samff (.*, .din(lsu_addr_d[31:0]), .dout(lsu_addr_m[31:0]), .clk(lsu_c1_m_clk));
-   rvdff #(32) sarff (.*, .din(lsu_addr_m[31:0]), .dout(lsu_addr_r[31:0]), .clk(lsu_c1_r_clk));
-
-   assign end_addr_m[31:3] = ldst_dual_m ? end_addr_pre_m[31:3] : lsu_addr_m[31:3];       // This is for power saving
-   assign end_addr_r[31:3] = ldst_dual_r ? end_addr_pre_r[31:3] : lsu_addr_r[31:3];       // This is for power saving
-
-   rvdffe #(29) end_addr_hi_mff (.*, .din(end_addr_d[31:3]), .dout(end_addr_pre_m[31:3]), .en((lsu_pkt_d.valid & ldst_dual_d) | clk_override));
-   rvdffe #(29) end_addr_hi_rff (.*, .din(end_addr_m[31:3]), .dout(end_addr_pre_r[31:3]), .en((lsu_pkt_m.valid & ldst_dual_m) | clk_override));
-
-   rvdff #(3)  end_addr_lo_mff (.*, .din(end_addr_d[2:0]), .dout(end_addr_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(3)  end_addr_lo_rff (.*, .din(end_addr_m[2:0]), .dout(end_addr_r[2:0]), .clk(lsu_c1_r_clk));
-
-   rvdff #(1) addr_in_dccm_mff(.din(addr_in_dccm_d), .dout(addr_in_dccm_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_dccm_rff(.din(addr_in_dccm_m), .dout(addr_in_dccm_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_in_pic_mff(.din(addr_in_pic_d), .dout(addr_in_pic_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_pic_rff(.din(addr_in_pic_m), .dout(addr_in_pic_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_external_mff(.din(addr_external_d), .dout(addr_external_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_external_rff(.din(addr_external_m), .dout(addr_external_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) access_fault_mff     (.din(access_fault_d),     .dout(access_fault_m),     .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) misaligned_fault_mff (.din(misaligned_fault_d), .dout(misaligned_fault_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(4) exc_mscause_mff      (.din(exc_mscause_d[3:0]), .dout(exc_mscause_m[3:0]), .clk(lsu_c1_m_clk), .*);
-
-   rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_d),    .dout(fir_dccm_access_error_m),    .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_d), .dout(fir_nondccm_access_error_m), .clk(lsu_c1_m_clk), .*);
-
-   rvdffe #(32) bus_read_data_r_ff (.*, .din(bus_read_data_m[31:0]), .dout(bus_read_data_r[31:0]), .en(addr_external_m | clk_override));
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_stbuf.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_stbuf.sv
deleted file mode 100644
index 1704a45..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_stbuf.sv
+++ /dev/null
@@ -1,351 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Store Buffer
-// Comments: Dual writes and single drain
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-module eb1_lsu_stbuf
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )
-(
-   input logic                           clk,                         // core clock
-   input logic                           rst_l,                       // reset
-
-   input logic                           lsu_stbuf_c1_clk,            // stbuf clock
-   input logic                           lsu_free_c2_clk,             // free clk
-
-   // Store Buffer input
-   input logic                           store_stbuf_reqvld_r,        // core instruction goes to stbuf
-   input logic                           lsu_commit_r,                // lsu commits
-   input logic                           dec_lsu_valid_raw_d,         // Speculative decode valid
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_hi_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_hi_r,           // merged data from the dccm for stores
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_lo_r,           // merged data from the dccm for stores
-
-   // Store Buffer output
-   output logic                          stbuf_reqvld_any,            // stbuf is draining
-   output logic                          stbuf_reqvld_flushed_any,    // Top entry is flushed
-   output logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any,              // address
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any,              // stbuf data
-
-   input  logic                          lsu_stbuf_commit_any,        // pop the stbuf as it commite
-   output logic                          lsu_stbuf_full_any,          // stbuf is full
-   output logic                          lsu_stbuf_empty_any,         // stbuf is empty
-   output logic                          ldst_stbuf_reqvld_r,         // needed for clocking
-
-   input logic [pt.LSU_SB_BITS-1:0]      lsu_addr_d,                  // lsu address D-stage
-   input logic [31:0]                    lsu_addr_m,                  // lsu address M-stage
-   input logic [31:0]                    lsu_addr_r,                  // lsu address R-stage
-
-   input logic [pt.LSU_SB_BITS-1:0]      end_addr_d,                  // lsu end address D-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_m,                  // lsu end address M-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_r,                  // lsu end address R-stage - needed to check unaligned
-
-   input logic                           ldst_dual_d, ldst_dual_m, ldst_dual_r,
-   input logic                           addr_in_dccm_m,              // address is in dccm
-   input logic                           addr_in_dccm_r,              // address is in dccm
-
-   // Forwarding signals
-   input logic                           lsu_cmpen_m,                 // needed for forwarding stbuf - load
-   input eb1_lsu_pkt_t                  lsu_pkt_m,                   // LSU packet M-stage
-   input eb1_lsu_pkt_t                  lsu_pkt_r,                   // LSU packet R-stage
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m,          // stbuf data
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m,          // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m,        // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m,        // stbuf data
-
-   input  logic       scan_mode                                       // Scan mode
-
-);
-
-
-   localparam DEPTH      = pt.LSU_STBUF_DEPTH;
-   localparam DATA_WIDTH = pt.DCCM_DATA_WIDTH;
-   localparam BYTE_WIDTH = pt.DCCM_BYTE_WIDTH;
-   localparam DEPTH_LOG2 = $clog2(DEPTH);
-
-   // These are the fields in the store queue
-   logic [DEPTH-1:0]                     stbuf_vld;
-   logic [DEPTH-1:0]                     stbuf_dma_kill;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addr;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteen;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_data;
-
-   logic [DEPTH-1:0]                     sel_lo;
-   logic [DEPTH-1:0]                     stbuf_wr_en;
-   logic [DEPTH-1:0]                     stbuf_dma_kill_en;
-   logic [DEPTH-1:0]                     stbuf_reset;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addrin;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_datain;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteenin;
-
-   logic [7:0]             store_byteen_ext_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_lo_r;
-
-   logic                   WrPtrEn, RdPtrEn;
-   logic [DEPTH_LOG2-1:0]  WrPtr, RdPtr;
-   logic [DEPTH_LOG2-1:0]  NxtWrPtr, NxtRdPtr;
-   logic [DEPTH_LOG2-1:0]  WrPtrPlus1, WrPtrPlus2, RdPtrPlus1;
-
-   logic                   dual_stbuf_write_r;
-
-   logic                   isdccmst_m, isdccmst_r;
-   logic [3:0]             stbuf_numvld_any, stbuf_specvld_any;
-   logic [1:0]             stbuf_specvld_m, stbuf_specvld_r;
-
-   logic [pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] cmpaddr_hi_m, cmpaddr_lo_m;
-
-   // variables to detect matching from the store queue
-   logic [DEPTH-1:0]                 stbuf_match_hi, stbuf_match_lo;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0] stbuf_fwdbyteenvec_hi, stbuf_fwdbyteenvec_lo;
-   logic [DATA_WIDTH-1:0]            stbuf_fwddata_hi_pre_m, stbuf_fwddata_lo_pre_m;
-   logic [BYTE_WIDTH-1:0]            stbuf_fwdbyteen_hi_pre_m, stbuf_fwdbyteen_lo_pre_m;
-
-   // logic to detect matching from the pipe - needed for store - load forwarding
-   logic [BYTE_WIDTH-1:0]  ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-   logic                   ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_lo_r;
-   // byte_en flowing down
-   logic [7:0]             ldst_byteen_r;
-   logic [7:0]             ldst_byteen_ext_r;
-   // fwd data through the pipe
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   // coalescing signals
-   logic [DEPTH-1:0]      store_matchvec_lo_r, store_matchvec_hi_r;
-   logic                  store_coalesce_lo_r, store_coalesce_hi_r;
-
-   //----------------------------------------
-   // Logic starts here
-   //----------------------------------------
-   // Create high/low byte enables
-   assign store_byteen_ext_r[7:0]           = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-   assign store_byteen_hi_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[7:4] & {4{lsu_pkt_r.store}};
-   assign store_byteen_lo_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[3:0] & {4{lsu_pkt_r.store}};
-
-   assign RdPtrPlus1[DEPTH_LOG2-1:0]     = RdPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus1[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus2[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 2'b10;
-
-   // ecc error on both hi/lo
-   assign dual_stbuf_write_r   = ldst_dual_r & store_stbuf_reqvld_r;
-   assign ldst_stbuf_reqvld_r  = ((lsu_commit_r | lsu_pkt_r.dma) & store_stbuf_reqvld_r);
-
-  // Store Buffer coalescing
-   for (genvar i=0; i<DEPTH; i++) begin: FindMatchEntry
-       assign store_matchvec_lo_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == lsu_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & ~stbuf_reset[i];
-       assign store_matchvec_hi_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == end_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & dual_stbuf_write_r & ~stbuf_reset[i];
-   end: FindMatchEntry
-
-   assign store_coalesce_lo_r = |store_matchvec_lo_r[DEPTH-1:0];
-   assign store_coalesce_hi_r = |store_matchvec_hi_r[DEPTH-1:0];
-
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Allocate new in this entry if :
-      // 1. wrptr, single allocate, lo did not coalesce
-      // 2. wrptr, double allocate, lo ^ hi coalesced
-      // 3. wrptr + 1, double alloacte, niether lo or hi coalesced
-      // Also update if there is a hi or a lo coalesce to this entry
-      // Store Buffer instantiation
-      for (genvar i=0; i<DEPTH; i++) begin: GenStBuf
-         assign stbuf_wr_en[i] = ldst_stbuf_reqvld_r & (
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  ~store_coalesce_lo_r)   |                                                    // Allocate : new Lo
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  dual_stbuf_write_r & ~store_coalesce_hi_r) |                               // Allocate : only 1 new Write Either
-                                   ( (i == WrPtrPlus1[DEPTH_LOG2-1:0]) &  dual_stbuf_write_r & ~(store_coalesce_lo_r | store_coalesce_hi_r)) |     // Allocate2 : 2 new so Write Hi
-                                   store_matchvec_lo_r[i] | store_matchvec_hi_r[i]);                                                                 // Coalesced Write Lo or Hi
-         assign stbuf_reset[i] = (lsu_stbuf_commit_any | stbuf_reqvld_flushed_any) & (i == RdPtr[DEPTH_LOG2-1:0]);
-
-         // Mux select for start/end address
-         assign sel_lo[i]                         = ((~ldst_dual_r | store_stbuf_reqvld_r) & (i == WrPtr[DEPTH_LOG2-1:0]) & ~store_coalesce_lo_r) |   // lo allocated new entry
-                                                    store_matchvec_lo_r[i];                                                                                                           // lo coalesced in to this entry
-         assign stbuf_addrin[i][pt.LSU_SB_BITS-1:0]  = sel_lo[i] ? lsu_addr_r[pt.LSU_SB_BITS-1:0]       : end_addr_r[pt.LSU_SB_BITS-1:0];
-         assign stbuf_byteenin[i][BYTE_WIDTH-1:0] = sel_lo[i] ? (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_lo_r[BYTE_WIDTH-1:0])          : (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_hi_r[BYTE_WIDTH-1:0]);
-         assign stbuf_datain[i][7:0]              = sel_lo[i] ? ((~stbuf_byteen[i][0] | store_byteen_lo_r[0]) ? store_datafn_lo_r[7:0]   : stbuf_data[i][7:0])    :
-                                                                ((~stbuf_byteen[i][0] | store_byteen_hi_r[0]) ? store_datafn_hi_r[7:0]   : stbuf_data[i][7:0]);
-         assign stbuf_datain[i][15:8]             = sel_lo[i] ? ((~stbuf_byteen[i][1] | store_byteen_lo_r[1]) ? store_datafn_lo_r[15:8]  : stbuf_data[i][15:8])    :
-                                                                ((~stbuf_byteen[i][1] | store_byteen_hi_r[1]) ? store_datafn_hi_r[15:8]  : stbuf_data[i][15:8]);
-         assign stbuf_datain[i][23:16]            = sel_lo[i] ? ((~stbuf_byteen[i][2] | store_byteen_lo_r[2]) ? store_datafn_lo_r[23:16] : stbuf_data[i][23:16])    :
-                                                                ((~stbuf_byteen[i][2] | store_byteen_hi_r[2]) ? store_datafn_hi_r[23:16] : stbuf_data[i][23:16]);
-         assign stbuf_datain[i][31:24]            = sel_lo[i] ? ((~stbuf_byteen[i][3] | store_byteen_lo_r[3]) ? store_datafn_lo_r[31:24] : stbuf_data[i][31:24])    :
-                                                                ((~stbuf_byteen[i][3] | store_byteen_hi_r[3]) ? store_datafn_hi_r[31:24] : stbuf_data[i][31:24]);
-
-         rvdffsc #(.WIDTH(1))              stbuf_vldff         (.din(1'b1),                                .dout(stbuf_vld[i]),                      .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffsc #(.WIDTH(1))              stbuf_killff        (.din(1'b1),                                .dout(stbuf_dma_kill[i]),                 .en(stbuf_dma_kill_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffe  #(.WIDTH(pt.LSU_SB_BITS)) stbuf_addrff        (.din(stbuf_addrin[i][pt.LSU_SB_BITS-1:0]), .dout(stbuf_addr[i][pt.LSU_SB_BITS-1:0]), .en(stbuf_wr_en[i]), .*);
-         rvdffsc #(.WIDTH(BYTE_WIDTH))     stbuf_byteenff      (.din(stbuf_byteenin[i][BYTE_WIDTH-1:0]),   .dout(stbuf_byteen[i][BYTE_WIDTH-1:0]),   .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_stbuf_c1_clk), .*);
-         rvdffe  #(.WIDTH(DATA_WIDTH))     stbuf_dataff        (.din(stbuf_datain[i][DATA_WIDTH-1:0]),     .dout(stbuf_data[i][DATA_WIDTH-1:0]),     .en(stbuf_wr_en[i]), .*);
-      end
-   end else begin: Gen_dccm_disable
-      assign stbuf_wr_en[DEPTH-1:0] = '0;
-      assign stbuf_reset[DEPTH-1:0] = '0;
-      assign stbuf_vld[DEPTH-1:0]   = '0;
-      assign stbuf_dma_kill[DEPTH-1:0] = '0;
-      assign stbuf_addr[DEPTH-1:0]  = '0;
-      assign stbuf_byteen[DEPTH-1:0] = '0;
-      assign stbuf_data[DEPTH-1:0]   = '0;
-   end
-
-   // Store Buffer drain logic
-   assign stbuf_reqvld_flushed_any            = stbuf_vld[RdPtr] & stbuf_dma_kill[RdPtr];
-   assign stbuf_reqvld_any                    = stbuf_vld[RdPtr] & ~stbuf_dma_kill[RdPtr] & ~(|stbuf_dma_kill_en[DEPTH-1:0]);  // Don't drain if some kill bit is being set this cycle
-   assign stbuf_addr_any[pt.LSU_SB_BITS-1:0]  = stbuf_addr[RdPtr][pt.LSU_SB_BITS-1:0];
-   assign stbuf_data_any[DATA_WIDTH-1:0]      = stbuf_data[RdPtr][DATA_WIDTH-1:0];
-
-   // Update the RdPtr/WrPtr logic
-   // Need to revert the WrPtr for flush cases. Also revert the pipe WrPtrs
-   assign WrPtrEn                  = (ldst_stbuf_reqvld_r  & ~dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r))  |  // writing 1 and did not coalesce
-                                     (ldst_stbuf_reqvld_r  &  dual_stbuf_write_r & ~(store_coalesce_hi_r & store_coalesce_lo_r));    // writing 2 and atleast 1 did not coalesce
-   assign NxtWrPtr[DEPTH_LOG2-1:0] = (ldst_stbuf_reqvld_r & dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r)) ? WrPtrPlus2[DEPTH_LOG2-1:0] : WrPtrPlus1[DEPTH_LOG2-1:0];
-   assign RdPtrEn                  = lsu_stbuf_commit_any | stbuf_reqvld_flushed_any;
-   assign NxtRdPtr[DEPTH_LOG2-1:0] = RdPtrPlus1[DEPTH_LOG2-1:0];
-
-   always_comb begin
-      stbuf_numvld_any[3:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_numvld_any[3:0] += {3'b0, stbuf_vld[i]};
-      end
-   end
-
-    // These go to store buffer to detect full
-   assign isdccmst_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_in_dccm_m & ~lsu_pkt_m.dma;
-   assign isdccmst_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~lsu_pkt_r.dma;
-
-   assign stbuf_specvld_m[1:0] = {1'b0,isdccmst_m} << (isdccmst_m & ldst_dual_m);
-   assign stbuf_specvld_r[1:0] = {1'b0,isdccmst_r} << (isdccmst_r & ldst_dual_r);
-   assign stbuf_specvld_any[3:0] = stbuf_numvld_any[3:0] +  {2'b0, stbuf_specvld_m[1:0]} + {2'b0, stbuf_specvld_r[1:0]};
-
-   assign lsu_stbuf_full_any  = (~ldst_dual_d & dec_lsu_valid_raw_d) ? (stbuf_specvld_any[3:0] >= DEPTH) : (stbuf_specvld_any[3:0] >= (DEPTH-1));
-   assign lsu_stbuf_empty_any = (stbuf_numvld_any[3:0] == 4'b0);
-
-   // Load forwarding logic from the store queue
-   assign cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = end_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   assign cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = lsu_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   always_comb begin: GenLdFwd
-      stbuf_fwdbyteen_hi_pre_m[BYTE_WIDTH-1:0]   = '0;
-      stbuf_fwdbyteen_lo_pre_m[BYTE_WIDTH-1:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_match_hi[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-         stbuf_match_lo[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-
-         // Kill the store buffer entry if there is a dma store since it already updated the dccm
-         stbuf_dma_kill_en[i] = (stbuf_match_hi[i] | stbuf_match_lo[i]) & lsu_pkt_m.valid & lsu_pkt_m.dma & lsu_pkt_m.store;
-
-         for (int j=0; j<BYTE_WIDTH; j++) begin
-            stbuf_fwdbyteenvec_hi[i][j] = stbuf_match_hi[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_hi_pre_m[j]  |= stbuf_fwdbyteenvec_hi[i][j];
-
-            stbuf_fwdbyteenvec_lo[i][j] = stbuf_match_lo[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_lo_pre_m[j]  |= stbuf_fwdbyteenvec_lo[i][j];
-         end
-      end
-   end // block: GenLdFwd
-
-   always_comb begin: GenLdData
-      stbuf_fwddata_hi_pre_m[31:0]   = '0;
-      stbuf_fwddata_lo_pre_m[31:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_fwddata_hi_pre_m[31:0] |= {32{stbuf_match_hi[i]}} & stbuf_data[i][31:0];
-         stbuf_fwddata_lo_pre_m[31:0] |= {32{stbuf_match_lo[i]}} & stbuf_data[i][31:0];
-
-      end
-
-   end // block: GenLdData
-
-   // Create Hi/Lo signals - needed for the pipe forwarding
-   assign ldst_byteen_r[7:0] =  ({8{lsu_pkt_r.by}}    & 8'b0000_0001) |
-                                 ({8{lsu_pkt_r.half}}  & 8'b0000_0011) |
-                                 ({8{lsu_pkt_r.word}}  & 8'b0000_1111) |
-                                 ({8{lsu_pkt_r.dword}} & 8'b1111_1111);
-
-   assign ldst_byteen_ext_r[7:0] = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-
-   for (genvar i=0; i<BYTE_WIDTH; i++) begin
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-       assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-       assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign stbuf_fwdbyteen_hi_m[i] = ld_byte_hit_hi[i] | stbuf_fwdbyteen_hi_pre_m[i];
-      assign stbuf_fwdbyteen_lo_m[i] = ld_byte_hit_lo[i] | stbuf_fwdbyteen_lo_pre_m[i];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_lo_m[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : stbuf_fwddata_lo_pre_m[(8*i)+7:(8*i)];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_hi_m[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : stbuf_fwddata_hi_pre_m[(8*i)+7:(8*i)];
-   end
-
-   // Flops
-   rvdffs #(.WIDTH(DEPTH_LOG2)) WrPtrff (.din(NxtWrPtr[DEPTH_LOG2-1:0]), .dout(WrPtr[DEPTH_LOG2-1:0]), .en(WrPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-   rvdffs #(.WIDTH(DEPTH_LOG2)) RdPtrff (.din(NxtRdPtr[DEPTH_LOG2-1:0]), .dout(RdPtr[DEPTH_LOG2-1:0]), .en(RdPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-
-`ifdef RV_ASSERT_ON
-
-   assert_stbuf_overflow: assert #0 (stbuf_specvld_any[2:0] <= DEPTH);
-   property stbuf_wren_store_dccm;
-      @(posedge clk)  disable iff(~rst_l) (|stbuf_wr_en[DEPTH-1:0]) |-> (lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r);
-   endproperty
-   assert_stbuf_wren_store_dccm: assert property (stbuf_wren_store_dccm) else
-      $display("Illegal store buffer write");
-
-`endif
-
-endmodule
-
diff --git a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_trigger.sv b/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_trigger.sv
deleted file mode 100644
index d3c5058..0000000
--- a/verilog/rtl/BrqRV_EB1/design/lsu/eb1_lsu_trigger.sv
+++ /dev/null
@@ -1,68 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU Trigger logic
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_trigger
-import eb1_pkg::*;
-#(
-`include "eb1_param.vh"
- )(
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,            // trigger packet from dec
-   input eb1_lsu_pkt_t           lsu_pkt_m,                  // lsu packet
-   input logic [31:0]             lsu_addr_m,                 // address
-   input logic [31:0]             store_data_m,               // store data
-
-   output logic [3:0]             lsu_trigger_match_m         // match result
-);
-
-   logic               trigger_enable;
-   logic [3:0][31:0]  lsu_match_data;
-   logic [3:0]        lsu_trigger_data_match;
-   logic [31:0]       store_data_trigger_m;
-   logic [31:0]       ldst_addr_trigger_m;
-
-   // Generate the trigger enable (This is for power)
-   always_comb begin
-      trigger_enable = 1'b0;
-      for (int i=0; i<4; i++) begin
-         trigger_enable |= trigger_pkt_any[i].m;
-      end
-   end
-
-   assign store_data_trigger_m[31:0] = {({16{lsu_pkt_m.word}} & store_data_m[31:16]),({8{(lsu_pkt_m.half | lsu_pkt_m.word)}} & store_data_m[15:8]), store_data_m[7:0]} & {32{trigger_enable}};
-   assign ldst_addr_trigger_m[31:0]  = lsu_addr_m[31:0] & {32{trigger_enable}};
-
-
-   for (genvar i=0; i<4; i++) begin
-      assign lsu_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select}} & ldst_addr_trigger_m[31:0]) |
-                                       ({32{trigger_pkt_any[i].select & trigger_pkt_any[i].store}} & store_data_trigger_m[31:0]);
-
-      rvmaskandmatch trigger_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(lsu_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(lsu_trigger_data_match[i]));
-
-      assign lsu_trigger_match_m[i] = lsu_pkt_m.valid & ~lsu_pkt_m.dma & trigger_enable &
-                                        ((trigger_pkt_any[i].store & lsu_pkt_m.store) | (trigger_pkt_any[i].load & lsu_pkt_m.load & ~trigger_pkt_any[i].select)) &
-                                        lsu_trigger_data_match[i];
-   end
-
-
-endmodule // eb1_lsu_trigger
diff --git a/verilog/rtl/BrqRV_EB1/design/openlane/BrqRV_EB1.sv b/verilog/rtl/BrqRV_EB1/design/openlane/BrqRV_EB1.sv
deleted file mode 100644
index ba95911..0000000
--- a/verilog/rtl/BrqRV_EB1/design/openlane/BrqRV_EB1.sv
+++ /dev/null
@@ -1,31596 +0,0 @@
-// performance monitor stuff
-//`ifndef eb1_DEF_SV
-//`define eb1_DEF_SV
-package eb1_pkg;
-
-typedef struct packed {
-                       logic  trace_rv_i_valid_ip;
-                       logic [31:0] trace_rv_i_insn_ip;
-                       logic [31:0] trace_rv_i_address_ip;
-                       logic  trace_rv_i_exception_ip;
-                       logic [4:0] trace_rv_i_ecause_ip;
-                       logic  trace_rv_i_interrupt_ip;
-                       logic [31:0] trace_rv_i_tval_ip;
-                       } eb1_trace_pkt_t;
-
-
-typedef enum logic [3:0] {
-                          NULL     = 4'b0000,
-                          MUL      = 4'b0001,
-                          LOAD     = 4'b0010,
-                          STORE    = 4'b0011,
-                          ALU      = 4'b0100,
-                          CSRREAD  = 4'b0101,
-                          CSRWRITE = 4'b0110,
-                          CSRRW    = 4'b0111,
-                          EBREAK   = 4'b1000,
-                          ECALL    = 4'b1001,
-                          FENCE    = 4'b1010,
-                          FENCEI   = 4'b1011,
-                          MRET     = 4'b1100,
-                          CONDBR   = 4'b1101,
-                          JAL      = 4'b1110,
-                          BITMANIPU = 4'b1111
-                          } eb1_inst_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic wb;
-                       logic [2:0] tag;
-                       logic [4:0] rd;
-                       } eb1_load_cam_pkt_t;
-
-typedef struct packed {
-                       logic pc0_call;
-                       logic pc0_ret;
-                       logic pc0_pc4;
-                       } eb1_rets_pkt_t;
-typedef struct packed {
-                       logic valid;
-                       logic [11:0] toffset;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic  bank;
-                       logic [31:1] prett;  // predicted ret target
-                       logic way;
-                       logic ret;
-                       } eb1_br_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic [1:0] hist;
-                       logic br_error;
-                       logic br_start_error;
-                       logic way;
-                       logic middle;
-                       } eb1_br_tlu_pkt_t;
-
-typedef struct packed {
-                       logic misp;
-                       logic ataken;
-                       logic boffset;
-                       logic pc4;
-                       logic [1:0] hist;
-                       logic [11:0] toffset;
-                       logic valid;
-                       logic br_error;
-                       logic br_start_error;
-                       logic pcall;
-                       logic pja;
-                       logic way;
-                       logic pret;
-                       // for power use the pret bit to clock the prett field
-                       logic [31:1] prett;
-                       } eb1_predict_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic icaf;
-                       logic icaf_second;
-                       logic [1:0] icaf_type;
-                       logic fence_i;
-                       logic [3:0] i0trigger;
-                       logic pmu_i0_br_unpred;     // pmu
-                       logic pmu_divide;
-                       // likely to change
-                       logic legal;
-                       logic pmu_lsu_misaligned;
-                       eb1_inst_pkt_t pmu_i0_itype;        // pmu - instruction type
-                       } eb1_trap_pkt_t;
-
-typedef struct packed {
-                       // unlikely to change
-                       logic i0div;
-                       logic csrwen;
-                       logic csrwonly;
-                       logic [11:0] csrwaddr;
-                       // likely to change
-                       logic [4:0] i0rd;
-                       logic i0load;
-                       logic i0store;
-                       logic i0v;
-                       logic i0valid;
-                       } eb1_dest_pkt_t;
-
-typedef struct packed {
-                       logic mul;
-                       logic load;
-                       logic alu;
-                       } eb1_class_pkt_t;
-
-typedef struct packed {
-                       logic [4:0] rs1;
-                       logic [4:0] rs2;
-                       logic [4:0] rd;
-                       } eb1_reg_pkt_t;
-
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic srl;
-                       logic sra;
-                       logic beq;
-                       logic bne;
-                       logic blt;
-                       logic bge;
-                       logic add;
-                       logic sub;
-                       logic slt;
-                       logic unsign;
-                       logic jal;
-                       logic predict_t;
-                       logic predict_nt;
-                       logic csr_write;
-                       logic csr_imm;
-                       } eb1_alu_pkt_t;
-
-typedef struct packed {
-                       logic fast_int;
-/* verilator lint_off SYMRSVDWORD */
-                       logic stack;
-/* verilator lint_on SYMRSVDWORD */
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic dword;  // for dma
-                       logic load;
-                       logic store;
-                       logic unsign;
-                       logic dma;    // dma pkt
-                       logic store_data_bypass_d;
-                       logic load_ldst_bypass_d;
-                       logic store_data_bypass_m;
-                       logic valid;
-                       } eb1_lsu_pkt_t;
-
-typedef struct packed {
-                      logic inst_type;   //0: Load, 1: Store
-                      //logic dma_valid;
-                      logic exc_type;    //0: MisAligned, 1: Access Fault
-                      logic [3:0] mscause;
-                      logic [31:0] addr;
-                      logic single_ecc_error;
-                      logic exc_valid;
-                      } eb1_lsu_error_pkt_t;
-
-typedef struct packed {
-                       logic clz;
-                       logic ctz;
-                       logic pcnt;
-                       logic sext_b;
-                       logic sext_h;
-                       logic slo;
-                       logic sro;
-                       logic min;
-                       logic max;
-                       logic pack;
-                       logic packu;
-                       logic packh;
-                       logic rol;
-                       logic ror;
-                       logic grev;
-                       logic gorc;
-                       logic zbb;
-                       logic sbset;
-                       logic sbclr;
-                       logic sbinv;
-                       logic sbext;
-                       logic zbs;
-                       logic bext;
-                       logic bdep;
-                       logic zbe;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic zbc;
-                       logic shfl;
-                       logic unshfl;
-                       logic zbp;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic zbr;
-                       logic bfp;
-                       logic zbf;
-                       logic sh1add;
-                       logic sh2add;
-                       logic sh3add;
-                       logic zba;
-                       logic alu;
-                       logic rs1;
-                       logic rs2;
-                       logic imm12;
-                       logic rd;
-                       logic shimm5;
-                       logic imm20;
-                       logic pc;
-                       logic load;
-                       logic store;
-                       logic lsu;
-                       logic add;
-                       logic sub;
-                       logic land;
-                       logic lor;
-                       logic lxor;
-                       logic sll;
-                       logic sra;
-                       logic srl;
-                       logic slt;
-                       logic unsign;
-                       logic condbr;
-                       logic beq;
-                       logic bne;
-                       logic bge;
-                       logic blt;
-                       logic jal;
-                       logic by;
-                       logic half;
-                       logic word;
-                       logic csr_read;
-                       logic csr_clr;
-                       logic csr_set;
-                       logic csr_write;
-                       logic csr_imm;
-                       logic presync;
-                       logic postsync;
-                       logic ebreak;
-                       logic ecall;
-                       logic mret;
-                       logic mul;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic div;
-                       logic rem;
-                       logic fence;
-                       logic fence_i;
-                       logic pm_alu;
-                       logic legal;
-                       } eb1_dec_pkt_t;
-
-
-typedef struct packed {
-                       logic valid;
-                       logic rs1_sign;
-                       logic rs2_sign;
-                       logic low;
-                       logic bext;
-                       logic bdep;
-                       logic clmul;
-                       logic clmulh;
-                       logic clmulr;
-                       logic grev;
-                       logic gorc;
-                       logic shfl;
-                       logic unshfl;
-                       logic crc32_b;
-                       logic crc32_h;
-                       logic crc32_w;
-                       logic crc32c_b;
-                       logic crc32c_h;
-                       logic crc32c_w;
-                       logic bfp;
-                       } eb1_mul_pkt_t;
-
-typedef struct packed {
-                       logic valid;
-                       logic unsign;
-                       logic rem;
-                       } eb1_div_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ccm_ext_in_pkt_t;
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_dccm_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_data_ext_in_pkt_t;
-
-
-typedef struct packed {
-                       logic        TEST1;
-                       logic        RME;
-                       logic [3:0]  RM;
-                       logic        LS;
-                       logic        DS;
-                       logic        SD;
-                       logic        TEST_RNM;
-                       logic        BC1;
-                       logic        BC2;
-                      } eb1_ic_tag_ext_in_pkt_t;
-
-
-
-typedef struct packed {
-                        logic        select;
-                        logic        match;
-                        logic        store;
-                        logic        load;
-                        logic        execute;
-                        logic        m;
-                        logic [31:0] tdata2;
-            } eb1_trigger_pkt_t;
-
-
-typedef struct packed {
-                        logic [70:0]  icache_wrdata; // {dicad1[1:0], dicad0h[31:0], dicad0[31:0]}
-                        logic [16:0]  icache_dicawics; // Arraysel:24, Waysel:21:20, Index:16:3
-                        logic         icache_rd_valid;
-                        logic         icache_wr_valid;
-            } eb1_cache_debug_pkt_t;
-//`endif
-typedef struct packed {
-	bit [7:0]      BHT_ADDR_HI;
-	bit [5:0]      BHT_ADDR_LO;
-	bit [14:0]     BHT_ARRAY_DEPTH;
-	bit [4:0]      BHT_GHR_HASH_1;
-	bit [7:0]      BHT_GHR_SIZE;
-	bit [15:0]     BHT_SIZE;
-	bit [4:0]      BITMANIP_ZBA;
-	bit [4:0]      BITMANIP_ZBB;
-	bit [4:0]      BITMANIP_ZBC;
-	bit [4:0]      BITMANIP_ZBE;
-	bit [4:0]      BITMANIP_ZBF;
-	bit [4:0]      BITMANIP_ZBP;
-	bit [4:0]      BITMANIP_ZBR;
-	bit [4:0]      BITMANIP_ZBS;
-	bit [8:0]      BTB_ADDR_HI;
-	bit [5:0]      BTB_ADDR_LO;
-	bit [12:0]     BTB_ARRAY_DEPTH;
-	bit [4:0]      BTB_BTAG_FOLD;
-	bit [8:0]      BTB_BTAG_SIZE;
-	bit [4:0]      BTB_ENABLE;
-	bit [4:0]      BTB_FOLD2_INDEX_HASH;
-	bit [4:0]      BTB_FULLYA;
-	bit [8:0]      BTB_INDEX1_HI;
-	bit [8:0]      BTB_INDEX1_LO;
-	bit [8:0]      BTB_INDEX2_HI;
-	bit [8:0]      BTB_INDEX2_LO;
-	bit [8:0]      BTB_INDEX3_HI;
-	bit [8:0]      BTB_INDEX3_LO;
-	bit [13:0]     BTB_SIZE;
-	bit [8:0]      BTB_TOFFSET_SIZE;
-	bit            BUILD_AHB_LITE;
-	bit [4:0]      BUILD_AXI4;
-	bit [4:0]      BUILD_AXI_NATIVE;
-	bit [5:0]      BUS_PRTY_DEFAULT;
-	bit [35:0]     DATA_ACCESS_ADDR0;
-	bit [35:0]     DATA_ACCESS_ADDR1;
-	bit [35:0]     DATA_ACCESS_ADDR2;
-	bit [35:0]     DATA_ACCESS_ADDR3;
-	bit [35:0]     DATA_ACCESS_ADDR4;
-	bit [35:0]     DATA_ACCESS_ADDR5;
-	bit [35:0]     DATA_ACCESS_ADDR6;
-	bit [35:0]     DATA_ACCESS_ADDR7;
-	bit [4:0]      DATA_ACCESS_ENABLE0;
-	bit [4:0]      DATA_ACCESS_ENABLE1;
-	bit [4:0]      DATA_ACCESS_ENABLE2;
-	bit [4:0]      DATA_ACCESS_ENABLE3;
-	bit [4:0]      DATA_ACCESS_ENABLE4;
-	bit [4:0]      DATA_ACCESS_ENABLE5;
-	bit [4:0]      DATA_ACCESS_ENABLE6;
-	bit [4:0]      DATA_ACCESS_ENABLE7;
-	bit [35:0]     DATA_ACCESS_MASK0;
-	bit [35:0]     DATA_ACCESS_MASK1;
-	bit [35:0]     DATA_ACCESS_MASK2;
-	bit [35:0]     DATA_ACCESS_MASK3;
-	bit [35:0]     DATA_ACCESS_MASK4;
-	bit [35:0]     DATA_ACCESS_MASK5;
-	bit [35:0]     DATA_ACCESS_MASK6;
-	bit [35:0]     DATA_ACCESS_MASK7;
-	bit [6:0]      DCCM_BANK_BITS;
-	bit [8:0]      DCCM_BITS;
-	bit [6:0]      DCCM_BYTE_WIDTH;
-	bit [9:0]      DCCM_DATA_WIDTH;
-	bit [6:0]      DCCM_ECC_WIDTH;
-	bit [4:0]      DCCM_ENABLE;
-	bit [9:0]      DCCM_FDATA_WIDTH;
-	bit [7:0]      DCCM_INDEX_BITS;
-	bit [8:0]      DCCM_NUM_BANKS;
-	bit [7:0]      DCCM_REGION;
-	bit [35:0]     DCCM_SADR;
-	bit [13:0]     DCCM_SIZE;
-	bit [5:0]      DCCM_WIDTH_BITS;
-	bit [6:0]      DIV_BIT;
-	bit [4:0]      DIV_NEW;
-	bit [6:0]      DMA_BUF_DEPTH;
-	bit [8:0]      DMA_BUS_ID;
-	bit [5:0]      DMA_BUS_PRTY;
-	bit [7:0]      DMA_BUS_TAG;
-	bit [4:0]      FAST_INTERRUPT_REDIRECT;
-	bit [4:0]      ICACHE_2BANKS;
-	bit [6:0]      ICACHE_BANK_BITS;
-	bit [6:0]      ICACHE_BANK_HI;
-	bit [5:0]      ICACHE_BANK_LO;
-	bit [7:0]      ICACHE_BANK_WIDTH;
-	bit [6:0]      ICACHE_BANKS_WAY;
-	bit [7:0]      ICACHE_BEAT_ADDR_HI;
-	bit [7:0]      ICACHE_BEAT_BITS;
-	bit [4:0]      ICACHE_BYPASS_ENABLE;
-	bit [17:0]     ICACHE_DATA_DEPTH;
-	bit [6:0]      ICACHE_DATA_INDEX_LO;
-	bit [10:0]     ICACHE_DATA_WIDTH;
-	bit [4:0]      ICACHE_ECC;
-	bit [4:0]      ICACHE_ENABLE;
-	bit [10:0]     ICACHE_FDATA_WIDTH;
-	bit [8:0]      ICACHE_INDEX_HI;
-	bit [10:0]     ICACHE_LN_SZ;
-	bit [7:0]      ICACHE_NUM_BEATS;
-	bit [7:0]      ICACHE_NUM_BYPASS;
-	bit [7:0]      ICACHE_NUM_BYPASS_WIDTH;
-	bit [6:0]      ICACHE_NUM_WAYS;
-	bit [4:0]      ICACHE_ONLY;
-	bit [7:0]      ICACHE_SCND_LAST;
-	bit [12:0]     ICACHE_SIZE;
-	bit [6:0]      ICACHE_STATUS_BITS;
-	bit [4:0]      ICACHE_TAG_BYPASS_ENABLE;
-	bit [16:0]     ICACHE_TAG_DEPTH;
-	bit [6:0]      ICACHE_TAG_INDEX_LO;
-	bit [8:0]      ICACHE_TAG_LO;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS;
-	bit [7:0]      ICACHE_TAG_NUM_BYPASS_WIDTH;
-	bit [4:0]      ICACHE_WAYPACK;
-	bit [6:0]      ICCM_BANK_BITS;
-	bit [8:0]      ICCM_BANK_HI;
-	bit [8:0]      ICCM_BANK_INDEX_LO;
-	bit [8:0]      ICCM_BITS;
-	bit [4:0]      ICCM_ENABLE;
-	bit [4:0]      ICCM_ICACHE;
-	bit [7:0]      ICCM_INDEX_BITS;
-	bit [8:0]      ICCM_NUM_BANKS;
-	bit [4:0]      ICCM_ONLY;
-	bit [7:0]      ICCM_REGION;
-	bit [35:0]     ICCM_SADR;
-	bit [13:0]     ICCM_SIZE;
-	bit [4:0]      IFU_BUS_ID;
-	bit [5:0]      IFU_BUS_PRTY;
-	bit [7:0]      IFU_BUS_TAG;
-	bit [35:0]     INST_ACCESS_ADDR0;
-	bit [35:0]     INST_ACCESS_ADDR1;
-	bit [35:0]     INST_ACCESS_ADDR2;
-	bit [35:0]     INST_ACCESS_ADDR3;
-	bit [35:0]     INST_ACCESS_ADDR4;
-	bit [35:0]     INST_ACCESS_ADDR5;
-	bit [35:0]     INST_ACCESS_ADDR6;
-	bit [35:0]     INST_ACCESS_ADDR7;
-	bit [4:0]      INST_ACCESS_ENABLE0;
-	bit [4:0]      INST_ACCESS_ENABLE1;
-	bit [4:0]      INST_ACCESS_ENABLE2;
-	bit [4:0]      INST_ACCESS_ENABLE3;
-	bit [4:0]      INST_ACCESS_ENABLE4;
-	bit [4:0]      INST_ACCESS_ENABLE5;
-	bit [4:0]      INST_ACCESS_ENABLE6;
-	bit [4:0]      INST_ACCESS_ENABLE7;
-	bit [35:0]     INST_ACCESS_MASK0;
-	bit [35:0]     INST_ACCESS_MASK1;
-	bit [35:0]     INST_ACCESS_MASK2;
-	bit [35:0]     INST_ACCESS_MASK3;
-	bit [35:0]     INST_ACCESS_MASK4;
-	bit [35:0]     INST_ACCESS_MASK5;
-	bit [35:0]     INST_ACCESS_MASK6;
-	bit [35:0]     INST_ACCESS_MASK7;
-	bit [4:0]      LOAD_TO_USE_PLUS1;
-	bit [4:0]      LSU2DMA;
-	bit [4:0]      LSU_BUS_ID;
-	bit [5:0]      LSU_BUS_PRTY;
-	bit [7:0]      LSU_BUS_TAG;
-	bit [8:0]      LSU_NUM_NBLOAD;
-	bit [6:0]      LSU_NUM_NBLOAD_WIDTH;
-	bit [8:0]      LSU_SB_BITS;
-	bit [7:0]      LSU_STBUF_DEPTH;
-	bit [4:0]      NO_ICCM_NO_ICACHE;
-	bit [4:0]      PIC_2CYCLE;
-	bit [35:0]     PIC_BASE_ADDR;
-	bit [8:0]      PIC_BITS;
-	bit [7:0]      PIC_INT_WORDS;
-	bit [7:0]      PIC_REGION;
-	bit [12:0]     PIC_SIZE;
-	bit [11:0]     PIC_TOTAL_INT;
-	bit [12:0]     PIC_TOTAL_INT_PLUS1;
-	bit [7:0]      RET_STACK_SIZE;
-	bit [4:0]      SB_BUS_ID;
-	bit [5:0]      SB_BUS_PRTY;
-	bit [7:0]      SB_BUS_TAG;
-	bit [4:0]      TIMER_LEGAL_EN;
-} eb1_param_t;
-
-
-endpackage // eb1_pkg
-
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-};
-
-parameter [2270:0] pt = 2271'h0404020000E0200000000000008081000030400040081E090B040100060210C00000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC103020401C213840103C3C01000000040818428042010840830C2010281840200081002008E0C0801004040800C01002100400606810104100C080C080200810A0AFFFF00000102101800000000000000000000000000000000000000000000000000000000000000000000000000000000007FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF8001080C080818080007806000003C043C04003E02008084021;
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-`define RV_ROOT "/home/hshabbir/caravel_BrqRV_EB1/verilog/rtl/BrqRV_EB1"
-`define RV_RET_STACK_SIZE 8
-`define RV_EXT_ADDRWIDTH 32
-`define RV_STERR_ROLLBACK 0
-`define SDVT_AHB 0
-`define RV_EXT_DATAWIDTH 64
-`define RV_LDERR_ROLLBACK 1
-`define CLOCK_PERIOD 100
-`define RV_ASSERT_ON 
-`define RV_BUILD_AXI4 1
-`define TOP tb_top
-`define RV_BUILD_AXI_NATIVE 1
-`define CPU_TOP `RV_TOP.brqrv
-`define RV_TOP `TOP.rvtop
-`define RV_UNUSED_REGION2 'h70000000
-`define RV_EXTERNAL_DATA 'hd0580000
-`define RV_SERIALIO 'he0580000
-`define RV_UNUSED_REGION7 'h20000000
-`define RV_UNUSED_REGION5 'h40000000
-`define RV_DEBUG_SB_MEM 'hb0580000
-`define RV_EXTERNAL_DATA_1 'hc0000000
-`define RV_UNUSED_REGION0 'h90000000
-`define RV_UNUSED_REGION3 'h60000000
-`define RV_UNUSED_REGION9 'h00000000
-`define RV_UNUSED_REGION8 'h10000000
-`define RV_UNUSED_REGION6 'h30000000
-`define RV_UNUSED_REGION1 'h80000000
-`define RV_UNUSED_REGION4 'h50000000
-`define RV_BHT_ADDR_LO 2
-`define RV_BHT_SIZE 256
-`define RV_BHT_GHR_HASH_1 
-`define RV_BHT_GHR_SIZE 7
-`define RV_BHT_ADDR_HI 8
-`define RV_BHT_HASH_STRING {hashin[7+1:2]^ghr[7-1:0]}// cf2
-`define RV_BHT_ARRAY_DEPTH 128
-`define RV_BHT_GHR_RANGE 6:0
-`define RV_INST_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK3 'hffffffff
-`define RV_INST_ACCESS_MASK7 'hffffffff
-`define RV_DATA_ACCESS_MASK0 'hffffffff
-`define RV_INST_ACCESS_ADDR6 'h00000000
-`define RV_INST_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_ENABLE6 1'h0
-`define RV_INST_ACCESS_ENABLE5 1'h0
-`define RV_DATA_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ENABLE1 1'h0
-`define RV_DATA_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_ADDR3 'h00000000
-`define RV_INST_ACCESS_ADDR7 'h00000000
-`define RV_INST_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_MASK2 'hffffffff
-`define RV_INST_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_ADDR2 'h00000000
-`define RV_INST_ACCESS_ENABLE2 1'h0
-`define RV_INST_ACCESS_ADDR1 'h00000000
-`define RV_INST_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ADDR6 'h00000000
-`define RV_DATA_ACCESS_ENABLE3 1'h0
-`define RV_INST_ACCESS_MASK0 'hffffffff
-`define RV_DATA_ACCESS_MASK7 'hffffffff
-`define RV_INST_ACCESS_MASK3 'hffffffff
-`define RV_DATA_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_ADDR3 'h00000000
-`define RV_DATA_ACCESS_ADDR7 'h00000000
-`define RV_DATA_ACCESS_ENABLE5 1'h0
-`define RV_INST_ACCESS_ENABLE6 1'h0
-`define RV_DATA_ACCESS_ENABLE1 1'h0
-`define RV_INST_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_MASK6 'hffffffff
-`define RV_DATA_ACCESS_MASK2 'hffffffff
-`define RV_DATA_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ENABLE4 1'h0
-`define RV_DATA_ACCESS_ADDR2 'h00000000
-`define RV_DATA_ACCESS_ADDR1 'h00000000
-`define RV_DATA_ACCESS_ENABLE2 1'h0
-`define RV_ICCM_BITS 12
-`define RV_ICCM_OFFSET 10'h0ffff000
-`define RV_ICCM_SIZE_4 
-`define RV_ICCM_BANK_BITS 2
-`define RV_ICCM_ENABLE 1
-`define RV_ICCM_SADR 32'haffff000
-`define RV_ICCM_DATA_CELL ram_256x39
-`define RV_ICCM_EADR 32'hafffffff
-`define RV_ICCM_RESERVED 'h400
-`define RV_ICCM_REGION 4'ha
-`define RV_ICCM_SIZE 4
-`define RV_ICCM_BANK_HI 3
-`define RV_ICCM_BANK_INDEX_LO 4
-`define RV_ICCM_ROWS 256
-`define RV_ICCM_INDEX_BITS 8
-`define RV_ICCM_NUM_BANKS 4
-`define RV_ICCM_NUM_BANKS_4 
-`define RV_LSU2DMA 0
-`define RV_LSU_NUM_NBLOAD_WIDTH 2
-`define RV_ICCM_ONLY 1
-`define RV_BITMANIP_ZBC 0
-`define RV_BITMANIP_ZBS 0
-`define RV_FPGA_OPTIMIZE 0
-`define RV_LSU_NUM_NBLOAD 4
-`define RV_DIV_BIT 3
-`define RV_DIV_NEW 1
-`define RV_DMA_BUF_DEPTH 5
-`define RV_FAST_INTERRUPT_REDIRECT 1
-`define RV_BITMANIP_ZBP 0
-`define RV_BITMANIP_ZBA 0
-`define RV_LSU_STBUF_DEPTH 4
-`define RV_BITMANIP_ZBB 0
-`define RV_BITMANIP_ZBR 0
-`define RV_BITMANIP_ZBE 0
-`define RV_TIMER_LEGAL_EN 1
-`define RV_BITMANIP_ZBF 0
-`define REGWIDTH 32
-`define RV_CONFIG_KEY 32'hdeadbeef
-`define RV_BTB_INDEX1_HI 8
-`define RV_BTB_SIZE 256
-`define RV_BTB_BTAG_SIZE 6
-`define RV_BTB_FOLD2_INDEX_HASH 0
-`define RV_BTB_INDEX3_LO 16
-`define RV_BTB_INDEX2_HI 15
-`define RV_BTB_ARRAY_DEPTH 128
-`define RV_BTB_INDEX1_LO 2
-`define RV_BTB_ADDR_LO 2
-`define RV_BTB_INDEX3_HI 22
-`define RV_BTB_ADDR_HI 8
-`define RV_BTB_TOFFSET_SIZE 12
-`define RV_BTB_INDEX2_LO 9
-`define RV_BTB_BTAG_FOLD 0
-`define RV_BTB_ENABLE 1
-`define RV_XLEN 32
-`define RV_IFU_BUS_TAG 3
-`define RV_LSU_BUS_ID 1
-`define RV_IFU_BUS_PRTY 2
-`define RV_LSU_BUS_TAG 3
-`define RV_IFU_BUS_ID 1
-`define RV_SB_BUS_PRTY 2
-`define RV_LSU_BUS_PRTY 2
-`define RV_DMA_BUS_ID 1
-`define RV_SB_BUS_ID 1
-`define RV_BUS_PRTY_DEFAULT 2'h3
-`define RV_DMA_BUS_PRTY 2
-`define RV_SB_BUS_TAG 1
-`define RV_DMA_BUS_TAG 1
-`define RV_ICACHE_TAG_NUM_BYPASS 2
-`define RV_ICACHE_STATUS_BITS 1
-`define RV_ICACHE_BEAT_ADDR_HI 5
-`define RV_ICACHE_SCND_LAST 6
-`define RV_ICACHE_TAG_LO 13
-`define RV_ICACHE_BANK_WIDTH 8
-`define RV_ICACHE_DATA_CELL ram_512x71
-`define RV_ICACHE_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_WAYPACK 1
-`define RV_ICACHE_LN_SZ 64
-`define RV_ICACHE_NUM_BEATS 8
-`define RV_ICACHE_NUM_LINES_WAY 128
-`define RV_ICACHE_NUM_LINES_BANK 64
-`define RV_ICACHE_TAG_DEPTH 128
-`define RV_ICACHE_DATA_DEPTH 512
-`define RV_ICACHE_DATA_WIDTH 64
-`define RV_ICACHE_TAG_CELL ram_128x25
-`define RV_ICACHE_NUM_BYPASS 2
-`define RV_ICACHE_FDATA_WIDTH 71
-`define RV_ICACHE_NUM_LINES 256
-`define RV_ICACHE_DATA_INDEX_LO 4
-`define RV_ICACHE_BANK_BITS 1
-`define RV_ICACHE_TAG_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_2BANKS 1
-`define RV_ICACHE_BANKS_WAY 2
-`define RV_ICACHE_BANK_LO 3
-`define RV_ICACHE_ECC 1
-`define RV_ICACHE_INDEX_HI 12
-`define RV_ICACHE_TAG_INDEX_LO 6
-`define RV_ICACHE_TAG_BYPASS_ENABLE 1
-`define RV_ICACHE_BANK_HI 3
-`define RV_ICACHE_BEAT_BITS 3
-`define RV_ICACHE_BYPASS_ENABLE 1
-`define RV_ICACHE_NUM_WAYS 2
-`define RV_ICACHE_SIZE 16
-`define RV_NMI_VEC 'h11110000
-`define RV_DCCM_EADR 32'hf0040fff
-`define RV_DCCM_SIZE 4
-`define RV_DCCM_REGION 4'hf
-`define RV_DCCM_RESERVED 'h400
-`define RV_DCCM_INDEX_BITS 8
-`define RV_DCCM_ROWS 256
-`define RV_DCCM_FDATA_WIDTH 39
-`define RV_DCCM_NUM_BANKS_4 
-`define RV_DCCM_NUM_BANKS 4
-`define RV_DCCM_BITS 12
-`define RV_DCCM_DATA_WIDTH 32
-`define RV_DCCM_SIZE_4 
-`define RV_DCCM_OFFSET 28'h40000
-`define RV_DCCM_WIDTH_BITS 2
-`define RV_DCCM_BYTE_WIDTH 4
-`define RV_DCCM_ENABLE 1
-`define RV_DCCM_ECC_WIDTH 7
-`define RV_DCCM_BANK_BITS 2
-`define RV_DCCM_DATA_CELL ram_256x39
-`define RV_DCCM_SADR 32'hf0040000
-`define RV_LSU_SB_BITS 12
-`define RV_RESET_VEC 'haffff000
-`define RV_PIC_BITS 15
-`define RV_PIC_MEIGWCTRL_OFFSET 'h4000
-`define RV_PIC_MEIGWCTRL_MASK 'h3
-`define RV_PIC_MEIGWCLR_OFFSET 'h5000
-`define RV_PIC_MEIE_MASK 'h1
-`define RV_PIC_MEIP_MASK 'h0
-`define RV_PIC_MEIPT_COUNT 31
-`define RV_PIC_MEIPL_COUNT 31
-`define RV_PIC_MEIPT_MASK 'h0
-`define RV_PIC_BASE_ADDR 32'hf00c0000
-`define RV_PIC_MEIPL_MASK 'hf
-`define RV_PIC_INT_WORDS 1
-`define RV_PIC_MPICCFG_MASK 'h1
-`define RV_PIC_MEIPT_OFFSET 'h3004
-`define RV_PIC_TOTAL_INT_PLUS1 32
-`define RV_PIC_MEIPL_OFFSET 'h0000
-`define RV_PIC_MEIE_COUNT 31
-`define RV_PIC_MEIGWCTRL_COUNT 31
-`define RV_PIC_REGION 4'hf
-`define RV_PIC_MEIGWCLR_MASK 'h0
-`define RV_PIC_SIZE 32
-`define RV_PIC_MEIE_OFFSET 'h2000
-`define RV_PIC_MPICCFG_OFFSET 'h3000
-`define RV_PIC_MPICCFG_COUNT 1
-`define RV_PIC_MEIP_OFFSET 'h1000
-`define RV_PIC_TOTAL_INT 31
-`define RV_PIC_OFFSET 10'hc0000
-`define RV_PIC_MEIGWCLR_COUNT 31
-`define RV_PIC_MEIP_COUNT 1
-`define RV_TARGET default
-`define RV_NUMIREGS 32
-`undef RV_ASSERT_ON
-
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-
-//// `include "common_defines.vh"
-`undef RV_ASSERT_ON
-`define TEC_RV_ICG sky130_fd_sc_hd__dlclkp_1
-`define RV_PHYSICAL 1
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top wrapper file with eb1_brqrv/mem instantiated inside
-// Comments:
-//
-//********************************************************************************
-module eb1_brqrv_wrapper
-import eb1_pkg::*;
- #(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-   input logic			             VPWR,
-   input logic				     VGND,
-   input logic                             clk,
-   input logic                             rst_l,
-   input logic                             dbg_rst_l,
-   input logic [31:1]                      rst_vec,
-   input logic                             nmi_int,
-   input logic [31:1]                      nmi_vec,
-   input logic [31:1]                      jtag_id,
-   input 				     uart_rx,
-
-
-   output logic [31:0]                     trace_rv_i_insn_ip,
-   output logic [31:0]                     trace_rv_i_address_ip,
-   output logic                            trace_rv_i_valid_ip,
-   output logic                            trace_rv_i_exception_ip,
-   output logic [4:0]                      trace_rv_i_ecause_ip,
-   output logic                            trace_rv_i_interrupt_ip,
-   output logic [31:0]                     trace_rv_i_tval_ip,
-
-   // Bus signals
-
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   input  logic                            ifu_axi_awready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   input  logic                            ifu_axi_wready,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   input  logic                            ifu_axi_bvalid,
-   output logic                            ifu_axi_bready,
-   input  logic [1:0]                      ifu_axi_bresp,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-   input  logic                            ifu_axi_rlast,
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            sb_axi_awvalid,
-   input  logic                            sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_awid,
-   output logic [31:0]                     sb_axi_awaddr,
-   output logic [3:0]                      sb_axi_awregion,
-   output logic [7:0]                      sb_axi_awlen,
-   output logic [2:0]                      sb_axi_awsize,
-   output logic [1:0]                      sb_axi_awburst,
-   output logic                            sb_axi_awlock,
-   output logic [3:0]                      sb_axi_awcache,
-   output logic [2:0]                      sb_axi_awprot,
-   output logic [3:0]                      sb_axi_awqos,
-
-   output logic                            sb_axi_wvalid,
-   input  logic                            sb_axi_wready,
-   output logic [63:0]                     sb_axi_wdata,
-   output logic [7:0]                      sb_axi_wstrb,
-   output logic                            sb_axi_wlast,
-
-   input  logic                            sb_axi_bvalid,
-   output logic                            sb_axi_bready,
-   input  logic [1:0]                      sb_axi_bresp,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_bid,
-
-   // AXI Read Channels
-   output logic                            sb_axi_arvalid,
-   input  logic                            sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_arid,
-   output logic [31:0]                     sb_axi_araddr,
-   output logic [3:0]                      sb_axi_arregion,
-   output logic [7:0]                      sb_axi_arlen,
-   output logic [2:0]                      sb_axi_arsize,
-   output logic [1:0]                      sb_axi_arburst,
-   output logic                            sb_axi_arlock,
-   output logic [3:0]                      sb_axi_arcache,
-   output logic [2:0]                      sb_axi_arprot,
-   output logic [3:0]                      sb_axi_arqos,
-
-   input  logic                            sb_axi_rvalid,
-   output logic                            sb_axi_rready,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_rid,
-   input  logic [63:0]                     sb_axi_rdata,
-   input  logic [1:0]                      sb_axi_rresp,
-   input  logic                            sb_axi_rlast,
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   input  logic                            dma_axi_awvalid,
-   output logic                            dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]       dma_axi_awid,
-   input  logic [31:0]                     dma_axi_awaddr,
-   input  logic [2:0]                      dma_axi_awsize,
-   input  logic [2:0]                      dma_axi_awprot,
-   input  logic [7:0]                      dma_axi_awlen,
-   input  logic [1:0]                      dma_axi_awburst,
-
-
-   input  logic                            dma_axi_wvalid,
-   output logic                            dma_axi_wready,
-   input  logic [63:0]                     dma_axi_wdata,
-   input  logic [7:0]                      dma_axi_wstrb,
-   input  logic                            dma_axi_wlast,
-
-   output logic                            dma_axi_bvalid,
-   input  logic                            dma_axi_bready,
-   output logic [1:0]                      dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]       dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                            dma_axi_arvalid,
-   output logic                            dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]       dma_axi_arid,
-   input  logic [31:0]                     dma_axi_araddr,
-   input  logic [2:0]                      dma_axi_arsize,
-   input  logic [2:0]                      dma_axi_arprot,
-   input  logic [7:0]                      dma_axi_arlen,
-   input  logic [1:0]                      dma_axi_arburst,
-
-   output logic                            dma_axi_rvalid,
-   input  logic                            dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]       dma_axi_rid,
-   output logic [63:0]                     dma_axi_rdata,
-   output logic [1:0]                      dma_axi_rresp,
-   output logic                            dma_axi_rlast,
-
-
-`ifdef RV_BUILD_AHB_LITE
- //// AHB LITE BUS
-   output logic [31:0]                     haddr,
-   output logic [2:0]                      hburst,
-   output logic                            hmastlock,
-   output logic [3:0]                      hprot,
-   output logic [2:0]                      hsize,
-   output logic [1:0]                      htrans,
-   output logic                            hwrite,
-
-   input logic [63:0]                      hrdata,
-   input logic                             hready,
-   input logic                             hresp,
-
-   // LSU AHB Master
-   output logic [31:0]                     lsu_haddr,
-   output logic [2:0]                      lsu_hburst,
-   output logic                            lsu_hmastlock,
-   output logic [3:0]                      lsu_hprot,
-   output logic [2:0]                      lsu_hsize,
-   output logic [1:0]                      lsu_htrans,
-   output logic                            lsu_hwrite,
-   output logic [63:0]                     lsu_hwdata,
-
-   input logic [63:0]                      lsu_hrdata,
-   input logic                             lsu_hready,
-   input logic                             lsu_hresp,
-   // Debug Syster Bus AHB
-   output logic [31:0]                     sb_haddr,
-   output logic [2:0]                      sb_hburst,
-   output logic                            sb_hmastlock,
-   output logic [3:0]                      sb_hprot,
-   output logic [2:0]                      sb_hsize,
-   output logic [1:0]                      sb_htrans,
-   output logic                            sb_hwrite,
-   output logic [63:0]                     sb_hwdata,
-
-   input  logic [63:0]                     sb_hrdata,
-   input  logic                            sb_hready,
-   input  logic                            sb_hresp,
-
-   // DMA Slave
-   input logic                             dma_hsel,
-   input logic [31:0]                      dma_haddr,
-   input logic [2:0]                       dma_hburst,
-   input logic                             dma_hmastlock,
-   input logic [3:0]                       dma_hprot,
-   input logic [2:0]                       dma_hsize,
-   input logic [1:0]                       dma_htrans,
-   input logic                             dma_hwrite,
-   input logic [63:0]                      dma_hwdata,
-   input logic                             dma_hreadyin,
-
-   output logic [63:0]                     dma_hrdata,
-   output logic                            dma_hreadyout,
-   output logic                            dma_hresp,
-`endif
-   // clk ratio signals
-   input logic                             lsu_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             ifu_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             dbg_bus_clk_en, // Clock ratio b/w cpu core clk & AHB master interface
-   input logic                             dma_bus_clk_en, // Clock ratio b/w cpu core clk & AHB slave interface
-
- // all of these test inputs are brought to top-level; must be tied off based on usage by physical design (ie. icache or not, iccm or not, dccm or not)
-
-   input                                   eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
-   input                                   eb1_ccm_ext_in_pkt_t  [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,
-   input                                   eb1_ic_data_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0] ic_data_ext_in_pkt,
-   input                                   eb1_ic_tag_ext_in_pkt_t  [pt.ICACHE_NUM_WAYS-1:0] ic_tag_ext_in_pkt,
-
-   input logic                             timer_int,
-   input logic                             soft_int,
-   input logic [pt.PIC_TOTAL_INT:1]        extintsrc_req,
-
-   output logic                            dec_tlu_perfcnt0, // toggles when slot0 perf counter 0 has an event inc
-   output logic                            dec_tlu_perfcnt1,
-   output logic                            dec_tlu_perfcnt2,
-   output logic                            dec_tlu_perfcnt3,
-
-   // ports added by the soc team
-   input logic                             jtag_tck,    // JTAG clk
-   input logic                             jtag_tms,    // JTAG TMS
-   input logic                             jtag_tdi,    // JTAG tdi
-   input logic                             jtag_trst_n, // JTAG Reset
-   output logic                            jtag_tdo,    // JTAG TDO
-
-   input logic [31:4] core_id,
-
-   // external MPC halt/run interface
-   input logic                             mpc_debug_halt_req, // Async halt request
-   input logic                             mpc_debug_run_req,  // Async run request
-   input logic                             mpc_reset_run_req,  // Run/halt after reset
-   output logic                            mpc_debug_halt_ack, // Halt ack
-   output logic                            mpc_debug_run_ack,  // Run ack
-   output logic                            debug_brkpt_status, // debug breakpoint
-
-   input logic                             i_cpu_halt_req,      // Async halt req to CPU
-   output logic                            o_cpu_halt_ack,      // core response to halt
-   output logic                            o_cpu_halt_status,   // 1'b1 indicates core is halted
-   output logic                            o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-   input logic                             i_cpu_run_req, // Async restart req to CPU
-   output logic                            o_cpu_run_ack, // Core response to run req
-   input logic                             scan_mode,     // To enable scan mode
-   input logic                             mbist_mode,     // to enable mbist
-   input [15:0] 			    CLKS_PER_BIT
-);
-
-   logic                             active_l2clk;
-   logic                             free_l2clk;
-
-   // DCCM ports
-   logic         dccm_wren;
-   logic         dccm_rden;
-   logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo;
-   logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi;
-   logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo;
-   logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi;
-
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_lo;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_hi;
-
-   // PIC ports
-
-   // Icache & Itag ports
-   logic [31:1]  ic_rw_addr;
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_wr_en  ;     // Which way to write
-   logic         ic_rd_en ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_tag_valid;   // Valid from the I$ tag valid outside (in flops).
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_rd_hit;      // ic_rd_hit[3:0]
-   logic         ic_tag_perr;                       // Ic tag parity error
-
-   logic [pt.ICACHE_INDEX_HI:3]  ic_debug_addr;     // Read/Write addresss to the Icache.
-   logic         ic_debug_rd_en;                    // Icache debug rd
-   logic         ic_debug_wr_en;                    // Icache debug wr
-   logic         ic_debug_tag_array;                // Debug tag array
-   logic [pt.ICACHE_NUM_WAYS-1:0]   ic_debug_way;   // Debug way. Rd or Wr.
-
-   logic [25:0]  ictag_debug_rd_data;               // Debug icache tag.
-   logic [pt.ICACHE_BANKS_WAY-1:0][70:0]  ic_wr_data;
-   logic [63:0]  ic_rd_data;
-   logic [70:0]  ic_debug_rd_data;                  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   logic [70:0]  ic_debug_wr_data;                  // Debug wr cache.
-
-   logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr;       // ecc error per bank
-   logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr;       // parity error per bank
-
-   logic [63:0]  ic_premux_data;
-   logic         ic_sel_premux_data;
-
-   // ICCM ports
-   logic [pt.ICCM_BITS-1:1]    iccm_rw_addr;
-   logic           iccm_wren;
-   logic           iccm_rden;
-   logic [2:0]     iccm_wr_size;
-   logic [77:0]    iccm_wr_data;
-   logic           iccm_buf_correct_ecc;
-   logic           iccm_correction_state;
-
-   logic [63:0]    iccm_rd_data;
-   logic [77:0]    iccm_rd_data_ecc;
- 
-   logic	 core_rst;
-   logic        core_rst_l;                         // Core reset including rst_l and dbg_rst_l
-   logic        jtag_tdoEn;
-
-   logic        dccm_clk_override;
-   logic        icm_clk_override;
-   logic        dec_tlu_core_ecc_disable;
-
-
-   // zero out the signals not presented at the wrapper instantiation level
-`ifdef RV_BUILD_AXI4
-
- //// AHB LITE BUS
-   logic [31:0]              haddr;
-   logic [2:0]               hburst;
-   logic                     hmastlock;
-   logic [3:0]               hprot;
-   logic [2:0]               hsize;
-   logic [1:0]               htrans;
-   logic                     hwrite;
-
-   logic [63:0]              hrdata;
-   logic                     hready;
-   logic                     hresp;
-
-   // LSU AHB Master
-   logic [31:0]              lsu_haddr;
-   logic [2:0]               lsu_hburst;
-   logic                     lsu_hmastlock;
-   logic [3:0]               lsu_hprot;
-   logic [2:0]               lsu_hsize;
-   logic [1:0]               lsu_htrans;
-   logic                     lsu_hwrite;
-   logic [63:0]              lsu_hwdata;
-
-   logic [63:0]              lsu_hrdata;
-   logic                     lsu_hready;
-   logic                     lsu_hresp;
-   // Debug Syster Bus AHB
-   logic [31:0]              sb_haddr;
-   logic [2:0]               sb_hburst;
-   logic                     sb_hmastlock;
-   logic [3:0]               sb_hprot;
-   logic [2:0]               sb_hsize;
-   logic [1:0]               sb_htrans;
-   logic                     sb_hwrite;
-   logic [63:0]              sb_hwdata;
-
-    logic [63:0]             sb_hrdata;
-    logic                    sb_hready;
-    logic                    sb_hresp;
-
-   // DMA Slave
-   logic                     dma_hsel;
-   logic [31:0]              dma_haddr;
-   logic [2:0]               dma_hburst;
-   logic                     dma_hmastlock;
-   logic [3:0]               dma_hprot;
-   logic [2:0]               dma_hsize;
-   logic [1:0]               dma_htrans;
-   logic                     dma_hwrite;
-   logic [63:0]              dma_hwdata;
-   logic                     dma_hreadyin;
-
-   logic [63:0]              dma_hrdata;
-   logic                     dma_hreadyout;
-   logic                     dma_hresp;
-
-
-
-   // AHB
-   assign  hrdata[63:0]                           = '0;
-   assign  hready                                 = '0;
-   assign  hresp                                  = '0;
-   // LSU
-   assign  lsu_hrdata[63:0]                       = '0;
-   assign  lsu_hready                             = '0;
-   assign  lsu_hresp                              = '0;
-   // Debu
-   assign  sb_hrdata[63:0]                        = '0;
-   assign  sb_hready                              = '0;
-   assign  sb_hresp                               = '0;
-
-   // DMA
-   assign  dma_hsel                               = '0;
-   assign  dma_haddr[31:0]                        = '0;
-   assign  dma_hburst[2:0]                        = '0;
-   assign  dma_hmastlock                          = '0;
-   assign  dma_hprot[3:0]                         = '0;
-   assign  dma_hsize[2:0]                         = '0;
-   assign  dma_htrans[1:0]                        = '0;
-   assign  dma_hwrite                             = '0;
-   assign  dma_hwdata[63:0]                       = '0;
-   assign  dma_hreadyin                           = '0;
-
-`endif //  `ifdef RV_BUILD_AXI4
-
-
-`ifdef RV_BUILD_AHB_LITE
-   wire                            lsu_axi_awvalid;
-   wire                            lsu_axi_awready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid;
-   wire [31:0]                     lsu_axi_awaddr;
-   wire [3:0]                      lsu_axi_awregion;
-   wire [7:0]                      lsu_axi_awlen;
-   wire [2:0]                      lsu_axi_awsize;
-   wire [1:0]                      lsu_axi_awburst;
-   wire                            lsu_axi_awlock;
-   wire [3:0]                      lsu_axi_awcache;
-   wire [2:0]                      lsu_axi_awprot;
-   wire [3:0]                      lsu_axi_awqos;
-
-   wire                            lsu_axi_wvalid;
-   wire                            lsu_axi_wready;
-   wire [63:0]                     lsu_axi_wdata;
-   wire [7:0]                      lsu_axi_wstrb;
-   wire                            lsu_axi_wlast;
-
-   wire                            lsu_axi_bvalid;
-   wire                            lsu_axi_bready;
-   wire [1:0]                      lsu_axi_bresp;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid;
-
-   // AXI Read Channels
-   wire                            lsu_axi_arvalid;
-   wire                            lsu_axi_arready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid;
-   wire [31:0]                     lsu_axi_araddr;
-   wire [3:0]                      lsu_axi_arregion;
-   wire [7:0]                      lsu_axi_arlen;
-   wire [2:0]                      lsu_axi_arsize;
-   wire [1:0]                      lsu_axi_arburst;
-   wire                            lsu_axi_arlock;
-   wire [3:0]                      lsu_axi_arcache;
-   wire [2:0]                      lsu_axi_arprot;
-   wire [3:0]                      lsu_axi_arqos;
-
-   wire                            lsu_axi_rvalid;
-   wire                            lsu_axi_rready;
-   wire [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid;
-   wire [63:0]                     lsu_axi_rdata;
-   wire [1:0]                      lsu_axi_rresp;
-   wire                            lsu_axi_rlast;
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   wire                            ifu_axi_awvalid;
-   wire                            ifu_axi_awready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid;
-   wire [31:0]                     ifu_axi_awaddr;
-   wire [3:0]                      ifu_axi_awregion;
-   wire [7:0]                      ifu_axi_awlen;
-   wire [2:0]                      ifu_axi_awsize;
-   wire [1:0]                      ifu_axi_awburst;
-   wire                            ifu_axi_awlock;
-   wire [3:0]                      ifu_axi_awcache;
-   wire [2:0]                      ifu_axi_awprot;
-   wire [3:0]                      ifu_axi_awqos;
-
-   wire                            ifu_axi_wvalid;
-   wire                            ifu_axi_wready;
-   wire [63:0]                     ifu_axi_wdata;
-   wire [7:0]                      ifu_axi_wstrb;
-   wire                            ifu_axi_wlast;
-
-   wire                            ifu_axi_bvalid;
-   wire                            ifu_axi_bready;
-   wire [1:0]                      ifu_axi_bresp;
-   wire [pt.IFU_BUS_TAG-1:0]      ifu_axi_bid;
-
-   // AXI Read Channels
-   wire                            ifu_axi_arvalid;
-   wire                            ifu_axi_arready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid;
-   wire [31:0]                     ifu_axi_araddr;
-   wire [3:0]                      ifu_axi_arregion;
-   wire [7:0]                      ifu_axi_arlen;
-   wire [2:0]                      ifu_axi_arsize;
-   wire [1:0]                      ifu_axi_arburst;
-   wire                            ifu_axi_arlock;
-   wire [3:0]                      ifu_axi_arcache;
-   wire [2:0]                      ifu_axi_arprot;
-   wire [3:0]                      ifu_axi_arqos;
-
-   wire                            ifu_axi_rvalid;
-   wire                            ifu_axi_rready;
-   wire [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid;
-   wire [63:0]                     ifu_axi_rdata;
-   wire [1:0]                      ifu_axi_rresp;
-   wire                            ifu_axi_rlast;
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   wire                            sb_axi_awvalid;
-   wire                            sb_axi_awready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_awid;
-   wire [31:0]                     sb_axi_awaddr;
-   wire [3:0]                      sb_axi_awregion;
-   wire [7:0]                      sb_axi_awlen;
-   wire [2:0]                      sb_axi_awsize;
-   wire [1:0]                      sb_axi_awburst;
-   wire                            sb_axi_awlock;
-   wire [3:0]                      sb_axi_awcache;
-   wire [2:0]                      sb_axi_awprot;
-   wire [3:0]                      sb_axi_awqos;
-
-   wire                            sb_axi_wvalid;
-   wire                            sb_axi_wready;
-   wire [63:0]                     sb_axi_wdata;
-   wire [7:0]                      sb_axi_wstrb;
-   wire                            sb_axi_wlast;
-
-   wire                            sb_axi_bvalid;
-   wire                            sb_axi_bready;
-   wire [1:0]                      sb_axi_bresp;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_bid;
-
-   // AXI Read Channels
-   wire                            sb_axi_arvalid;
-   wire                            sb_axi_arready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_arid;
-   wire [31:0]                     sb_axi_araddr;
-   wire [3:0]                      sb_axi_arregion;
-   wire [7:0]                      sb_axi_arlen;
-   wire [2:0]                      sb_axi_arsize;
-   wire [1:0]                      sb_axi_arburst;
-   wire                            sb_axi_arlock;
-   wire [3:0]                      sb_axi_arcache;
-   wire [2:0]                      sb_axi_arprot;
-   wire [3:0]                      sb_axi_arqos;
-
-   wire                            sb_axi_rvalid;
-   wire                            sb_axi_rready;
-   wire [pt.SB_BUS_TAG-1:0]        sb_axi_rid;
-   wire [63:0]                     sb_axi_rdata;
-   wire [1:0]                      sb_axi_rresp;
-   wire                            sb_axi_rlast;
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   wire                         dma_axi_awvalid;
-   wire                         dma_axi_awready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_awid;
-   wire [31:0]                  dma_axi_awaddr;
-   wire [2:0]                   dma_axi_awsize;
-   wire [2:0]                   dma_axi_awprot;
-   wire [7:0]                   dma_axi_awlen;
-   wire [1:0]                   dma_axi_awburst;
-
-
-   wire                         dma_axi_wvalid;
-   wire                         dma_axi_wready;
-   wire [63:0]                  dma_axi_wdata;
-   wire [7:0]                   dma_axi_wstrb;
-   wire                         dma_axi_wlast;
-
-   wire                         dma_axi_bvalid;
-   wire                         dma_axi_bready;
-   wire [1:0]                   dma_axi_bresp;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_bid;
-
-   // AXI Read Channels
-   wire                         dma_axi_arvalid;
-   wire                         dma_axi_arready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_arid;
-   wire [31:0]                  dma_axi_araddr;
-   wire [2:0]                   dma_axi_arsize;
-   wire [2:0]                   dma_axi_arprot;
-   wire [7:0]                   dma_axi_arlen;
-   wire [1:0]                   dma_axi_arburst;
-
-   wire                         dma_axi_rvalid;
-   wire                         dma_axi_rready;
-   wire [pt.DMA_BUS_TAG-1:0]    dma_axi_rid;
-   wire [63:0]                  dma_axi_rdata;
-   wire [1:0]                   dma_axi_rresp;
-   wire                         dma_axi_rlast;
-
-   // AXI
-   assign ifu_axi_awready = 1'b1;
-   assign ifu_axi_wready = 1'b1;
-   assign ifu_axi_bvalid = '0;
-   assign ifu_axi_bresp[1:0] = '0;
-   assign ifu_axi_bid[pt.IFU_BUS_TAG-1:0] = '0;
-
-`endif //  `ifdef RV_BUILD_AHB_LITE
-
-   logic                   dmi_reg_en;
-   logic [6:0]             dmi_reg_addr;
-   logic                   dmi_reg_wr_en;
-   logic [31:0]            dmi_reg_wdata;
-   logic [31:0]            dmi_reg_rdata;
-   logic rx_dv_i;
-   logic [7:0] rx_byte_i;
-   logic iccm_instr_we;
-   logic [13:0] iccm_instr_addr;
-   logic [31:0] iccm_instr_wdata;
-   // UART Receiver
-
-
-   // Instantiate the eb1_brqrv core
-   eb1_brqrv #(.pt(pt)) brqrv (
-                                .clk(clk),
-                                .rst_l(core_rst),
-                                .*
-                                );
-
-   // Instantiate the mem
-   eb1_mem  #(.pt(pt)) mem (
-                             .clk(active_l2clk),
-                             .rst_l(rst_l),
-                             .iccm_rw_addr((core_rst) ? iccm_rw_addr : iccm_instr_addr[10:0]),
-                             .iccm_wren((core_rst) ? iccm_wren : iccm_instr_we),
-                             .iccm_wr_data((core_rst) ? iccm_wr_data : {7'h0,iccm_instr_wdata,7'h0,iccm_instr_wdata}),
-                             .iccm_wr_size((core_rst) ? iccm_wr_size : 3'b010),
-                             .*
-                             );
-   
-   eb1_iccm_controller iccm_controller(
-		.clk_i(clk),
-		.rst_ni(rst_l),
-		.rx_dv_i(rx_dv_i),
-		.rx_byte_i(rx_byte_i),
-		.we_o(iccm_instr_we),
-		.addr_o(iccm_instr_addr),
-		.wdata_o(iccm_instr_wdata),
-		.reset_o(core_rst)
-	);                          
-   eb1_uart_rx_prog uart_rx_m(
-		.i_Clock(clk),
-		.rst_ni(rst_l),
-		.i_Rx_Serial(uart_rx),
-		.CLKS_PER_BIT(CLKS_PER_BIT),
-		.o_Rx_DV(rx_dv_i),
-		.o_Rx_Byte(rx_byte_i)
-	);
- 
-
-   //  JTAG/DMI instance
-   dmi_wrapper  dmi_wrapper (
-    // JTAG signals
-    .trst_n      (jtag_trst_n),     // JTAG reset
-    .tck         (jtag_tck),        // JTAG clock
-    .tms         (jtag_tms),        // Test mode select
-    .tdi         (jtag_tdi),        // Test Data Input
-    .tdo         (jtag_tdo),        // Test Data Output
-    .tdoEnable   (),
-    // Processor Signals
-    .core_rst_n  (dbg_rst_l),       // Debug reset, active low
-    .core_clk    (clk),             // Core clock
-    .jtag_id     (jtag_id),         // JTAG ID
-    .rd_data     (dmi_reg_rdata),   // Read data from  Processor
-    .reg_wr_data (dmi_reg_wdata),   // Write data to Processor
-    .reg_wr_addr (dmi_reg_addr),    // Write address to Processor
-    .reg_en      (dmi_reg_en),      // Write interface bit to Processor
-    .reg_wr_en   (dmi_reg_wr_en),   // Write enable to Processor
-    .dmi_hard_reset   ()
-   );
-
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file
-// Comments:
-//
-//********************************************************************************
-module eb1_brqrv
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic                  clk,
-   input logic                  rst_l,
-   input logic                  dbg_rst_l,
-   input logic [31:1]           rst_vec,
-   input logic                  nmi_int,
-   input logic [31:1]           nmi_vec,
-   output logic                 core_rst_l,   // This is "rst_l | dbg_rst_l"
-
-   output logic                 active_l2clk,
-   output logic                 free_l2clk,
-
-   output logic [31:0] trace_rv_i_insn_ip,
-   output logic [31:0] trace_rv_i_address_ip,
-   output logic   trace_rv_i_valid_ip,
-   output logic   trace_rv_i_exception_ip,
-   output logic [4:0]  trace_rv_i_ecause_ip,
-   output logic   trace_rv_i_interrupt_ip,
-   output logic [31:0] trace_rv_i_tval_ip,
-
-
-   output logic                 dccm_clk_override,
-   output logic                 icm_clk_override,
-   output logic                 dec_tlu_core_ecc_disable,
-
-   // external halt/run interface
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-   output logic o_cpu_halt_ack,    // Core Acknowledge to Halt request
-   output logic o_cpu_halt_status, // 1'b1 indicates processor is halted
-   output logic o_cpu_run_ack,     // Core Acknowledge to run request
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic dec_tlu_perfcnt0, // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,
-   output logic dec_tlu_perfcnt2,
-   output logic dec_tlu_perfcnt3,
-
-   // DCCM ports
-   output logic                          dccm_wren,
-   output logic                          dccm_rden,
-   output logic [pt.DCCM_BITS-1:0]          dccm_wr_addr_lo,
-   output logic [pt.DCCM_BITS-1:0]          dccm_wr_addr_hi,
-   output logic [pt.DCCM_BITS-1:0]          dccm_rd_addr_lo,
-   output logic [pt.DCCM_BITS-1:0]          dccm_rd_addr_hi,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_wr_data_lo,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_wr_data_hi,
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]    dccm_rd_data_lo,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]    dccm_rd_data_hi,
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]           iccm_rw_addr,
-   output logic                  iccm_wren,
-   output logic                  iccm_rden,
-   output logic [2:0]            iccm_wr_size,
-   output logic [77:0]           iccm_wr_data,
-   output logic                  iccm_buf_correct_ecc,
-   output logic                  iccm_correction_state,
-
-   input  logic [63:0]          iccm_rd_data,
-   input  logic [77:0]           iccm_rd_data_ecc,
-
-   // ICache , ITAG  ports
-   output logic [31:1]           ic_rw_addr,
-   output logic [pt.ICACHE_NUM_WAYS-1:0]            ic_tag_valid,
-   output logic [pt.ICACHE_NUM_WAYS-1:0]            ic_wr_en,
-   output logic                  ic_rd_en,
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select premux data
-
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]            ic_rd_hit,
-   input  logic                  ic_tag_perr,        // Icache Tag parity error
-
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   input  logic                            ifu_axi_awready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   input  logic                            ifu_axi_wready,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   input  logic                            ifu_axi_bvalid,
-   output logic                            ifu_axi_bready,
-   input  logic [1:0]                      ifu_axi_bresp,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-   input  logic                            ifu_axi_rlast,
-
-   //-------------------------- SB AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            sb_axi_awvalid,
-   input  logic                            sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_awid,
-   output logic [31:0]                     sb_axi_awaddr,
-   output logic [3:0]                      sb_axi_awregion,
-   output logic [7:0]                      sb_axi_awlen,
-   output logic [2:0]                      sb_axi_awsize,
-   output logic [1:0]                      sb_axi_awburst,
-   output logic                            sb_axi_awlock,
-   output logic [3:0]                      sb_axi_awcache,
-   output logic [2:0]                      sb_axi_awprot,
-   output logic [3:0]                      sb_axi_awqos,
-
-   output logic                            sb_axi_wvalid,
-   input  logic                            sb_axi_wready,
-   output logic [63:0]                     sb_axi_wdata,
-   output logic [7:0]                      sb_axi_wstrb,
-   output logic                            sb_axi_wlast,
-
-   input  logic                            sb_axi_bvalid,
-   output logic                            sb_axi_bready,
-   input  logic [1:0]                      sb_axi_bresp,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_bid,
-
-   // AXI Read Channels
-   output logic                            sb_axi_arvalid,
-   input  logic                            sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]        sb_axi_arid,
-   output logic [31:0]                     sb_axi_araddr,
-   output logic [3:0]                      sb_axi_arregion,
-   output logic [7:0]                      sb_axi_arlen,
-   output logic [2:0]                      sb_axi_arsize,
-   output logic [1:0]                      sb_axi_arburst,
-   output logic                            sb_axi_arlock,
-   output logic [3:0]                      sb_axi_arcache,
-   output logic [2:0]                      sb_axi_arprot,
-   output logic [3:0]                      sb_axi_arqos,
-
-   input  logic                            sb_axi_rvalid,
-   output logic                            sb_axi_rready,
-   input  logic [pt.SB_BUS_TAG-1:0]        sb_axi_rid,
-   input  logic [63:0]                     sb_axi_rdata,
-   input  logic [1:0]                      sb_axi_rresp,
-   input  logic                            sb_axi_rlast,
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-   input  logic                         dma_axi_awvalid,
-   output logic                         dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid,
-   input  logic [31:0]                  dma_axi_awaddr,
-   input  logic [2:0]                   dma_axi_awsize,
-   input  logic [2:0]                   dma_axi_awprot,
-   input  logic [7:0]                   dma_axi_awlen,
-   input  logic [1:0]                   dma_axi_awburst,
-
-
-   input  logic                         dma_axi_wvalid,
-   output logic                         dma_axi_wready,
-   input  logic [63:0]                  dma_axi_wdata,
-   input  logic [7:0]                   dma_axi_wstrb,
-   input  logic                         dma_axi_wlast,
-
-   output logic                         dma_axi_bvalid,
-   input  logic                         dma_axi_bready,
-   output logic [1:0]                   dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]    dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                         dma_axi_arvalid,
-   output logic                         dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid,
-   input  logic [31:0]                  dma_axi_araddr,
-   input  logic [2:0]                   dma_axi_arsize,
-   input  logic [2:0]                   dma_axi_arprot,
-   input  logic [7:0]                   dma_axi_arlen,
-   input  logic [1:0]                   dma_axi_arburst,
-
-   output logic                         dma_axi_rvalid,
-   input  logic                         dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]    dma_axi_rid,
-   output logic [63:0]                  dma_axi_rdata,
-   output logic [1:0]                   dma_axi_rresp,
-   output logic                         dma_axi_rlast,
-
-
- //// AHB LITE BUS
-   output logic [31:0]           haddr,
-   output logic [2:0]            hburst,
-   output logic                  hmastlock,
-   output logic [3:0]            hprot,
-   output logic [2:0]            hsize,
-   output logic [1:0]            htrans,
-   output logic                  hwrite,
-
-   input  logic [63:0]           hrdata,
-   input  logic                  hready,
-   input  logic                  hresp,
-
-   // LSU AHB Master
-   output logic [31:0]          lsu_haddr,
-   output logic [2:0]           lsu_hburst,
-   output logic                 lsu_hmastlock,
-   output logic [3:0]           lsu_hprot,
-   output logic [2:0]           lsu_hsize,
-   output logic [1:0]           lsu_htrans,
-   output logic                 lsu_hwrite,
-   output logic [63:0]          lsu_hwdata,
-
-   input  logic [63:0]          lsu_hrdata,
-   input  logic                 lsu_hready,
-   input  logic                 lsu_hresp,
-
-   //System Bus Debug Master
-   output logic [31:0]          sb_haddr,
-   output logic [2:0]           sb_hburst,
-   output logic                 sb_hmastlock,
-   output logic [3:0]           sb_hprot,
-   output logic [2:0]           sb_hsize,
-   output logic [1:0]           sb_htrans,
-   output logic                 sb_hwrite,
-   output logic [63:0]          sb_hwdata,
-
-   input  logic [63:0]          sb_hrdata,
-   input  logic                 sb_hready,
-   input  logic                 sb_hresp,
-
-   // DMA Slave
-   input logic                   dma_hsel,
-   input logic [31:0]            dma_haddr,
-   input logic [2:0]             dma_hburst,
-   input logic                   dma_hmastlock,
-   input logic [3:0]             dma_hprot,
-   input logic [2:0]             dma_hsize,
-   input logic [1:0]             dma_htrans,
-   input logic                   dma_hwrite,
-   input logic [63:0]            dma_hwdata,
-   input logic                   dma_hreadyin,
-
-   output  logic [63:0]          dma_hrdata,
-   output  logic                 dma_hreadyout,
-   output  logic                 dma_hresp,
-
-   input   logic                 lsu_bus_clk_en,
-   input   logic                 ifu_bus_clk_en,
-   input   logic                 dbg_bus_clk_en,
-   input   logic                 dma_bus_clk_en,
-
-   input logic                  dmi_reg_en,                // read or write
-   input logic [6:0]            dmi_reg_addr,              // address of DM register
-   input logic                  dmi_reg_wr_en,             // write instruction
-   input logic [31:0]           dmi_reg_wdata,             // write data
-   output logic [31:0]          dmi_reg_rdata,
-
-   input logic [pt.PIC_TOTAL_INT:1]           extintsrc_req,
-   input logic                   timer_int,
-   input logic                   soft_int,
-   input logic                   scan_mode
-);
-
-
-
-
-   logic [63:0]                  hwdata_nc;
-   //----------------------------------------------------------------------
-   //
-   //----------------------------------------------------------------------
-
-   logic                         ifu_pmu_instr_aligned;
-   logic                         ifu_ic_error_start;
-   logic                         ifu_iccm_rd_ecc_single_err;
-
-   logic                         lsu_axi_awready_ahb;
-   logic                         lsu_axi_wready_ahb;
-   logic                         lsu_axi_bvalid_ahb;
-   logic                         lsu_axi_bready_ahb;
-   logic [1:0]                   lsu_axi_bresp_ahb;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_bid_ahb;
-   logic                         lsu_axi_arready_ahb;
-   logic                         lsu_axi_rvalid_ahb;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_rid_ahb;
-   logic [63:0]                  lsu_axi_rdata_ahb;
-   logic [1:0]                   lsu_axi_rresp_ahb;
-   logic                         lsu_axi_rlast_ahb;
-
-   logic                         lsu_axi_awready_int;
-   logic                         lsu_axi_wready_int;
-   logic                         lsu_axi_bvalid_int;
-   logic                         lsu_axi_bready_int;
-   logic [1:0]                   lsu_axi_bresp_int;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_bid_int;
-   logic                         lsu_axi_arready_int;
-   logic                         lsu_axi_rvalid_int;
-   logic [pt.LSU_BUS_TAG-1:0]    lsu_axi_rid_int;
-   logic [63:0]                  lsu_axi_rdata_int;
-   logic [1:0]                   lsu_axi_rresp_int;
-   logic                         lsu_axi_rlast_int;
-   
-   logic                         ifu_axi_awready_ahb;
-   logic                         ifu_axi_wready_ahb;
-   logic                         ifu_axi_bvalid_ahb;
-   logic                         ifu_axi_bready_ahb;
-   logic [1:0]                   ifu_axi_bresp_ahb;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_bid_ahb;
-   logic                         ifu_axi_arready_ahb;
-   logic                         ifu_axi_rvalid_ahb;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_rid_ahb;
-   logic [63:0]                  ifu_axi_rdata_ahb;
-   logic [1:0]                   ifu_axi_rresp_ahb;
-   logic                         ifu_axi_rlast_ahb;
-
-   logic                         ifu_axi_awready_int;
-   logic                         ifu_axi_wready_int;
-   logic                         ifu_axi_bvalid_int;
-   logic                         ifu_axi_bready_int;
-   logic [1:0]                   ifu_axi_bresp_int;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_bid_int;
-   logic                         ifu_axi_arready_int;
-   logic                         ifu_axi_rvalid_int;
-   logic [pt.IFU_BUS_TAG-1:0]    ifu_axi_rid_int;
-   logic [63:0]                  ifu_axi_rdata_int;
-   logic [1:0]                   ifu_axi_rresp_int;
-   logic                         ifu_axi_rlast_int;
-
-   logic                         sb_axi_awready_ahb;
-   logic                         sb_axi_wready_ahb;
-   logic                         sb_axi_bvalid_ahb;
-   logic                         sb_axi_bready_ahb;
-   logic [1:0]                   sb_axi_bresp_ahb;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_bid_ahb;
-   logic                         sb_axi_arready_ahb;
-   logic                         sb_axi_rvalid_ahb;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_rid_ahb;
-   logic [63:0]                  sb_axi_rdata_ahb;
-   logic [1:0]                   sb_axi_rresp_ahb;
-   logic                         sb_axi_rlast_ahb;
-
-   logic                         sb_axi_awready_int;
-   logic                         sb_axi_wready_int;
-   logic                         sb_axi_bvalid_int;
-   logic                         sb_axi_bready_int;
-   logic [1:0]                   sb_axi_bresp_int;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_bid_int;
-   logic                         sb_axi_arready_int;
-   logic                         sb_axi_rvalid_int;
-   logic [pt.SB_BUS_TAG-1:0]     sb_axi_rid_int;
-   logic [63:0]                  sb_axi_rdata_int;
-   logic [1:0]                   sb_axi_rresp_int;
-   logic                         sb_axi_rlast_int;
-
-   logic                         dma_axi_awvalid_ahb;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid_ahb;
-   logic [31:0]                  dma_axi_awaddr_ahb;
-   logic [2:0]                   dma_axi_awsize_ahb;
-   logic [2:0]                   dma_axi_awprot_ahb;
-   logic [7:0]                   dma_axi_awlen_ahb;
-   logic [1:0]                   dma_axi_awburst_ahb;
-   logic                         dma_axi_wvalid_ahb;
-   logic [63:0]                  dma_axi_wdata_ahb;
-   logic [7:0]                   dma_axi_wstrb_ahb;
-   logic                         dma_axi_wlast_ahb;
-   logic                         dma_axi_bready_ahb;
-   logic                         dma_axi_arvalid_ahb;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid_ahb;
-   logic [31:0]                  dma_axi_araddr_ahb;
-   logic [2:0]                   dma_axi_arsize_ahb;
-   logic [2:0]                   dma_axi_arprot_ahb;
-   logic [7:0]                   dma_axi_arlen_ahb;
-   logic [1:0]                   dma_axi_arburst_ahb;
-   logic                         dma_axi_rready_ahb;
-
-   logic                         dma_axi_awvalid_int;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_awid_int;
-   logic [31:0]                  dma_axi_awaddr_int;
-   logic [2:0]                   dma_axi_awsize_int;
-   logic [2:0]                   dma_axi_awprot_int;
-   logic [7:0]                   dma_axi_awlen_int;
-   logic [1:0]                   dma_axi_awburst_int;
-   logic                         dma_axi_wvalid_int;
-   logic [63:0]                  dma_axi_wdata_int;
-   logic [7:0]                   dma_axi_wstrb_int;
-   logic                         dma_axi_wlast_int;
-   logic                         dma_axi_bready_int;
-   logic                         dma_axi_arvalid_int;
-   logic [pt.DMA_BUS_TAG-1:0]    dma_axi_arid_int;
-   logic [31:0]                  dma_axi_araddr_int;
-   logic [2:0]                   dma_axi_arsize_int;
-   logic [2:0]                   dma_axi_arprot_int;
-   logic [7:0]                   dma_axi_arlen_int;
-   logic [1:0]                   dma_axi_arburst_int;
-   logic                         dma_axi_rready_int;
-
-
-// Icache debug
-   logic [70:0] ifu_ic_debug_rd_data; // diagnostic icache read data
-   logic ifu_ic_debug_rd_data_valid; // diagnostic icache read data valid
-   eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt; // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-   logic         dec_i0_rs1_en_d;
-   logic         dec_i0_rs2_en_d;
-   logic  [31:0] gpr_i0_rs1_d;
-   logic  [31:0] gpr_i0_rs2_d;
-
-   logic [31:0] dec_i0_result_r;
-   logic [31:0] exu_i0_result_x;
-   logic [31:1] exu_i0_pc_x;
-   logic [31:1] exu_npc_r;
-
-   eb1_alu_pkt_t  i0_ap;
-
-   // Trigger signals
-   eb1_trigger_pkt_t [3:0]     trigger_pkt_any;
-   logic [3:0]             lsu_trigger_match_m;
-
-
-   logic [31:0] dec_i0_immed_d;
-   logic [12:1] dec_i0_br_immed_d;
-   logic         dec_i0_select_pc_d;
-
-   logic [31:1] dec_i0_pc_d;
-   logic [3:0]  dec_i0_rs1_bypass_en_d;
-   logic [3:0]  dec_i0_rs2_bypass_en_d;
-
-   logic         dec_i0_alu_decode_d;
-   logic         dec_i0_branch_d;
-
-   logic         ifu_miss_state_idle;
-   logic         dec_tlu_flush_noredir_r;
-   logic         dec_tlu_flush_leak_one_r;
-   logic         dec_tlu_flush_err_r;
-   logic         ifu_i0_valid;
-   logic [31:0]  ifu_i0_instr;
-   logic [31:1]  ifu_i0_pc;
-
-   logic        exu_flush_final;
-
-   logic [31:1] exu_flush_path_final;
-
-   logic [31:0] exu_lsu_rs1_d;
-   logic [31:0] exu_lsu_rs2_d;
-
-
-   eb1_lsu_pkt_t    lsu_p;
-   logic             dec_qual_lsu_d;
-
-   logic        dec_lsu_valid_raw_d;
-   logic [11:0] dec_lsu_offset_d;
-
-   logic [31:0]  lsu_result_m;
-   logic [31:0]  lsu_result_corr_r;     // This is the ECC corrected data going to RF
-   logic         lsu_single_ecc_error_incr;     // Increment the ecc counter
-   eb1_lsu_error_pkt_t lsu_error_pkt_r;
-   logic         lsu_imprecise_error_load_any;
-   logic         lsu_imprecise_error_store_any;
-   logic [31:0]  lsu_imprecise_error_addr_any;
-   logic         lsu_load_stall_any;       // This is for blocking loads
-   logic         lsu_store_stall_any;      // This is for blocking stores
-   logic         lsu_idle_any;             // doesn't include DMA
-   logic         lsu_active;               // lsu is active. used for clock
-
-
-   logic [31:1]  lsu_fir_addr;        // fast interrupt address
-   logic [1:0]   lsu_fir_error;       // Error during fast interrupt lookup
-
-   // Non-blocking loads
-   logic                                 lsu_nonblock_load_valid_m;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_tag_m;
-   logic                                 lsu_nonblock_load_inv_r;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_inv_tag_r;
-   logic                                 lsu_nonblock_load_data_valid;
-   logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]   lsu_nonblock_load_data_tag;
-   logic [31:0]                          lsu_nonblock_load_data;
-
-   logic        dec_csr_ren_d;
-   logic [31:0] dec_csr_rddata_d;
-
-   logic [31:0] exu_csr_rs1_x;
-
-   logic        dec_tlu_i0_commit_cmt;
-   logic        dec_tlu_flush_lower_r;
-   logic        dec_tlu_flush_lower_wb;
-   logic        dec_tlu_i0_kill_writeb_r;     // I0 is flushed, don't writeback any results to arch state
-   logic        dec_tlu_fence_i_r;            // flush is a fence_i rfnpc, flush icache
-
-   logic [31:1] dec_tlu_flush_path_r;
-   logic [31:0] dec_tlu_mrac_ff;        // CSR for memory region control
-
-   logic        ifu_i0_pc4;
-
-   eb1_mul_pkt_t  mul_p;
-
-   eb1_div_pkt_t  div_p;
-   logic           dec_div_cancel;
-
-   logic [31:0] exu_div_result;
-   logic exu_div_wren;
-
-   logic dec_i0_decode_d;
-
-
-   logic [31:1] pred_correct_npc_x;
-
-   eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt;
-
-   eb1_predict_pkt_t  exu_mp_pkt;
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr;
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_index;
-   logic [pt.BTB_BTAG_SIZE-1:0]          exu_mp_btag;
-
-   logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r;
-   logic [1:0]  exu_i0_br_hist_r;
-   logic        exu_i0_br_error_r;
-   logic        exu_i0_br_start_error_r;
-   logic        exu_i0_br_valid_r;
-   logic        exu_i0_br_mp_r;
-   logic        exu_i0_br_middle_r;
-
-   logic        exu_i0_br_way_r;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r;
-
-   logic        dma_dccm_req;
-   logic        dma_iccm_req;
-   logic [2:0]  dma_mem_tag;
-   logic [31:0] dma_mem_addr;
-   logic [2:0]  dma_mem_sz;
-   logic        dma_mem_write;
-   logic [63:0] dma_mem_wdata;
-
-   logic        dccm_dma_rvalid;
-   logic        dccm_dma_ecc_error;
-   logic [2:0]  dccm_dma_rtag;
-   logic [63:0] dccm_dma_rdata;
-   logic        iccm_dma_rvalid;
-   logic        iccm_dma_ecc_error;
-   logic [2:0]  iccm_dma_rtag;
-   logic [63:0] iccm_dma_rdata;
-
-   logic        dma_dccm_stall_any;       // Stall the ld/st in decode if asserted
-   logic        dma_iccm_stall_any;       // Stall the fetch
-   logic        dccm_ready;
-   logic        iccm_ready;
-
-   logic        dma_pmu_dccm_read;
-   logic        dma_pmu_dccm_write;
-   logic        dma_pmu_any_read;
-   logic        dma_pmu_any_write;
-
-   logic        ifu_i0_icaf;
-   logic [1:0]  ifu_i0_icaf_type;
-
-
-   logic        ifu_i0_icaf_second;
-   logic        ifu_i0_dbecc;
-   logic        iccm_dma_sb_error;
-
-   eb1_br_pkt_t i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag;
-
-   logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index; // Fully associative btb error index
-
-
-   eb1_predict_pkt_t dec_i0_predict_p_d;
-
-   logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d;                // DEC predict fghr
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d;     // DEC predict index
-   logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d;               // DEC predict branch tag
-
-   // PIC ports
-   logic                  picm_wren;
-   logic                  picm_rden;
-   logic                  picm_mken;
-   logic [31:0]           picm_rdaddr;
-   logic [31:0]           picm_wraddr;
-   logic [31:0]           picm_wr_data;
-   logic [31:0]           picm_rd_data;
-
-   // feature disable from mfdc
-   logic  dec_tlu_external_ldfwd_disable; // disable external load forwarding
-   logic  dec_tlu_bpred_disable;
-   logic  dec_tlu_wb_coalescing_disable;
-   logic  dec_tlu_sideeffect_posted_disable;
-   logic [2:0] dec_tlu_dma_qos_prty;         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   logic  dec_tlu_misc_clk_override;
-   logic  dec_tlu_ifu_clk_override;
-   logic  dec_tlu_lsu_clk_override;
-   logic  dec_tlu_bus_clk_override;
-   logic  dec_tlu_pic_clk_override;
-   logic  dec_tlu_dccm_clk_override;
-   logic  dec_tlu_icm_clk_override;
-
-   logic  dec_tlu_picio_clk_override;
-
-   assign        dccm_clk_override = dec_tlu_dccm_clk_override;   // dccm memory
-   assign        icm_clk_override = dec_tlu_icm_clk_override;    // icache/iccm memory
-
-   // -----------------------DEBUG  START -------------------------------
-
-   logic [31:0]            dbg_cmd_addr;              // the address of the debug command to used by the core
-   logic [31:0]            dbg_cmd_wrdata;            // If the debug command is a write command, this has the data to be written to the CSR/GPR
-   logic                   dbg_cmd_valid;             // commad is being driven by the dbg module. One pulse. Only dirven when core_halted has been seen
-   logic                   dbg_cmd_write;             // 1: write command; 0: read_command
-   logic [1:0]             dbg_cmd_type;              // 0:gpr 1:csr 2: memory
-   logic [1:0]             dbg_cmd_size;              // size of the abstract mem access debug command
-   logic                   dbg_halt_req;              // Sticky signal indicating that the debug module wants to start the entering of debug mode ( start the halting sequence )
-   logic                   dbg_resume_req;            // Sticky signal indicating that the debug module wants to resume from debug mode
-   logic                   dbg_core_rst_l;            // Core reset from DM
-
-   logic                   core_dbg_cmd_done;         // Final muxed cmd done to debug
-   logic                   core_dbg_cmd_fail;         // Final muxed cmd done to debug
-   logic [31:0]            core_dbg_rddata;           // Final muxed cmd done to debug
-
-   logic                   dma_dbg_cmd_done;          // Abstarct memory command sent to dma is done
-   logic                   dma_dbg_cmd_fail;          // Abstarct memory command sent to dma failed
-   logic [31:0]            dma_dbg_rddata;            // Read data for abstract memory access
-
-   logic                   dbg_dma_bubble;            // Debug needs a bubble to send a valid
-   logic                   dma_dbg_ready;             // DMA is ready to accept debug request
-
-   logic [31:0]            dec_dbg_rddata;            // The core drives this data ( intercepts the pipe and sends it here )
-   logic                   dec_dbg_cmd_done;          // This will be treated like a valid signal
-   logic                   dec_dbg_cmd_fail;          // Abstract command failed
-   logic                   dec_tlu_mpc_halted_only;   // Only halted due to MPC
-   logic                   dec_tlu_dbg_halted;        // The core has finished the queiscing sequence. Sticks this signal high
-   logic                   dec_tlu_resume_ack;
-   logic                   dec_tlu_debug_mode;        // Core is in debug mode
-   logic                   dec_debug_wdata_rs1_d;
-   logic                   dec_tlu_force_halt;        // halt has been forced
-
-   logic [1:0]             dec_data_en;
-   logic [1:0]             dec_ctl_en;
-
-   // PMU Signals
-   logic                   exu_pmu_i0_br_misp;
-   logic                   exu_pmu_i0_br_ataken;
-   logic                   exu_pmu_i0_pc4;
-
-   logic                   lsu_pmu_load_external_m;
-   logic                   lsu_pmu_store_external_m;
-   logic                   lsu_pmu_misaligned_m;
-   logic                   lsu_pmu_bus_trxn;
-   logic                   lsu_pmu_bus_misaligned;
-   logic                   lsu_pmu_bus_error;
-   logic                   lsu_pmu_bus_busy;
-
-   logic                   ifu_pmu_fetch_stall;
-   logic                   ifu_pmu_ic_miss;
-   logic                   ifu_pmu_ic_hit;
-   logic                   ifu_pmu_bus_error;
-   logic                   ifu_pmu_bus_busy;
-   logic                   ifu_pmu_bus_trxn;
-
-   logic                   active_state;
-   logic                   free_clk;
-   logic                   active_clk;
-   logic                   dec_pause_state_cg;
-
-   logic                   lsu_nonblock_load_data_error;
-
-   logic [15:0]            ifu_i0_cinst;
-
-// fast interrupt
-   logic [31:2]            dec_tlu_meihap;
-   logic                   dec_extint_stall;
-
-   eb1_trace_pkt_t  trace_rv_trace_pkt;
-
-
-   logic                   lsu_fastint_stall_any;
-
-   logic [7:0]  pic_claimid;
-   logic [3:0]  pic_pl, dec_tlu_meicurpl, dec_tlu_meipt;
-   logic        mexintpend;
-   logic        mhwakeup;
-
-   logic        dma_active;
-
-
-   logic        pause_state;
-   logic        halt_state;
-
-   logic        dec_tlu_core_empty;
-   
-
-   assign pause_state = dec_pause_state_cg & ~(dma_active | lsu_active) & dec_tlu_core_empty;
-
-   assign halt_state = o_cpu_halt_status & ~(dma_active | lsu_active);
-
-
-   assign active_state = (~(halt_state | pause_state) | dec_tlu_flush_lower_r | dec_tlu_flush_lower_wb)  | dec_tlu_misc_clk_override;
-
-   rvoclkhdr free_cg2   ( .clk(clk), .en(1'b1),         .l1clk(free_l2clk), .* );
-   rvoclkhdr active_cg2 ( .clk(clk), .en(active_state), .l1clk(active_l2clk), .* );
-
-// all other clock headers are 1st level
-   rvoclkhdr free_cg1   ( .clk(free_l2clk),     .en(1'b1), .l1clk(free_clk), .* );
-   rvoclkhdr active_cg1 ( .clk(active_l2clk),   .en(1'b1), .l1clk(active_clk), .* );
-
-
-   assign core_dbg_cmd_done = dma_dbg_cmd_done | dec_dbg_cmd_done;
-   assign core_dbg_cmd_fail = dma_dbg_cmd_fail | dec_dbg_cmd_fail;
-   assign core_dbg_rddata[31:0] = dma_dbg_cmd_done ? dma_dbg_rddata[31:0] : dec_dbg_rddata[31:0];
-
-   eb1_dbg #(.pt(pt)) dbg (
-      .rst_l(core_rst_l),
-      .clk(free_l2clk),
-      .clk_override(dec_tlu_misc_clk_override),
-
-      // AXI signals
-      .sb_axi_awready(sb_axi_awready_int),
-      .sb_axi_wready(sb_axi_wready_int),
-      .sb_axi_bvalid(sb_axi_bvalid_int),
-      .sb_axi_bresp(sb_axi_bresp_int[1:0]),
-
-      .sb_axi_arready(sb_axi_arready_int),
-      .sb_axi_rvalid(sb_axi_rvalid_int),
-      .sb_axi_rdata(sb_axi_rdata_int[63:0]),
-      .sb_axi_rresp(sb_axi_rresp_int[1:0]),
-      .*
-   );
-
-   // -----------------   DEBUG END -----------------------------
-
-   assign core_rst_l = rst_l & (dbg_core_rst_l | scan_mode);
-   // fetch
-   eb1_ifu #(.pt(pt)) ifu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .dec_tlu_flush_err_wb       (dec_tlu_flush_err_r      ),
-                            .dec_tlu_flush_noredir_wb   (dec_tlu_flush_noredir_r  ),
-                            .dec_tlu_fence_i_wb         (dec_tlu_fence_i_r        ),
-                            .dec_tlu_flush_leak_one_wb  (dec_tlu_flush_leak_one_r ),
-                            .dec_tlu_flush_lower_wb     (dec_tlu_flush_lower_r    ),
-
-                            // AXI signals
-                            .ifu_axi_arready(ifu_axi_arready_int),
-                            .ifu_axi_rvalid(ifu_axi_rvalid_int),
-                            .ifu_axi_rid(ifu_axi_rid_int[pt.IFU_BUS_TAG-1:0]),
-                            .ifu_axi_rdata(ifu_axi_rdata_int[63:0]),
-                            .ifu_axi_rresp(ifu_axi_rresp_int[1:0]),
-                            .exu_flush_final(exu_flush_final),
-
-                            .*
-                            );
-
-
-   eb1_dec #(.pt(pt)) dec (
-                            .clk(active_l2clk),
-                            .dbg_cmd_wrdata(dbg_cmd_wrdata[1:0]),
-                            .rst_l(core_rst_l),
-                            .i_cpu_halt_req(i_cpu_halt_req),
-                            .i_cpu_run_req(i_cpu_run_req),  
-                            .*
-                            );
-
-   eb1_exu #(.pt(pt)) exu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .*
-                            );
-
-   eb1_lsu #(.pt(pt)) lsu (
-                            .clk(active_l2clk),
-                            .rst_l(core_rst_l),
-                            .clk_override(dec_tlu_lsu_clk_override),
-                            .dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-
-                            // AXI signals
-                            .lsu_axi_awready(lsu_axi_awready_int),
-                            .lsu_axi_wready(lsu_axi_wready_int),
-                            .lsu_axi_bvalid(lsu_axi_bvalid_int),
-                            .lsu_axi_bid(lsu_axi_bid_int[pt.LSU_BUS_TAG-1:0]),
-                            .lsu_axi_bresp(lsu_axi_bresp_int[1:0]),
-
-                            .lsu_axi_arready(lsu_axi_arready_int),
-                            .lsu_axi_rvalid(lsu_axi_rvalid_int),
-                            .lsu_axi_rid(lsu_axi_rid_int[pt.LSU_BUS_TAG-1:0]),
-                            .lsu_axi_rdata(lsu_axi_rdata_int[63:0]),
-                            .lsu_axi_rresp(lsu_axi_rresp_int[1:0]),
-                            .lsu_axi_rlast(lsu_axi_rlast_int),
-
-                            .*
-
-                            );
-
-
-   eb1_pic_ctrl  #(.pt(pt)) pic_ctrl_inst (
-                                            .clk(free_l2clk),
-                                            .clk_override(dec_tlu_pic_clk_override),
-                                            .io_clk_override(dec_tlu_picio_clk_override),
-                                            .picm_mken (picm_mken),
-                                            .extintsrc_req({extintsrc_req[pt.PIC_TOTAL_INT:1],1'b0}),
-                                            .pl(pic_pl[3:0]),
-                                            .claimid(pic_claimid[7:0]),
-                                            .meicurpl(dec_tlu_meicurpl[3:0]),
-                                            .meipt(dec_tlu_meipt[3:0]),
-                                            .rst_l(core_rst_l),
-                                            .*);
-
-   eb1_dma_ctrl #(.pt(pt)) dma_ctrl (
-                                      .clk(free_l2clk),
-                                      .rst_l(core_rst_l),
-                                      .clk_override(dec_tlu_misc_clk_override),
-
-                                      // AXI signals
-                                      .dma_axi_awvalid(dma_axi_awvalid_int),
-                                      .dma_axi_awid(dma_axi_awid_int[pt.DMA_BUS_TAG-1:0]),
-                                      .dma_axi_awaddr(dma_axi_awaddr_int[31:0]),
-                                      .dma_axi_awsize(dma_axi_awsize_int[2:0]),
-                                      .dma_axi_wvalid(dma_axi_wvalid_int),
-                                      .dma_axi_wdata(dma_axi_wdata_int[63:0]),
-                                      .dma_axi_wstrb(dma_axi_wstrb_int[7:0]),
-                                      .dma_axi_bready(dma_axi_bready_int),
-
-                                      .dma_axi_arvalid(dma_axi_arvalid_int),
-                                      .dma_axi_arid(dma_axi_arid_int[pt.DMA_BUS_TAG-1:0]),
-                                      .dma_axi_araddr(dma_axi_araddr_int[31:0]),
-                                      .dma_axi_arsize(dma_axi_arsize_int[2:0]),
-                                      .dma_axi_rready(dma_axi_rready_int),
-
-                                      .*
-                                      );
-
-   if (pt.BUILD_AHB_LITE == 1) begin: Gen_AXI_To_AHB
-
-      // AXI4 -> AHB Gasket for LSU
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.LSU_BUS_TAG)) lsu_axi4_to_ahb (
-
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(lsu_bus_clk_en),
-         .dec_tlu_force_halt(dec_tlu_force_halt),
-
-         // AXI Write Channels
-         .axi_awvalid(lsu_axi_awvalid),
-         .axi_awready(lsu_axi_awready_ahb),
-         .axi_awid(lsu_axi_awid[pt.LSU_BUS_TAG-1:0]),
-         .axi_awaddr(lsu_axi_awaddr[31:0]),
-         .axi_awsize(lsu_axi_awsize[2:0]),
-         .axi_awprot(lsu_axi_awprot[2:0]),
-
-         .axi_wvalid(lsu_axi_wvalid),
-         .axi_wready(lsu_axi_wready_ahb),
-         .axi_wdata(lsu_axi_wdata[63:0]),
-         .axi_wstrb(lsu_axi_wstrb[7:0]),
-         .axi_wlast(lsu_axi_wlast),
-
-         .axi_bvalid(lsu_axi_bvalid_ahb),
-         .axi_bready(lsu_axi_bready),
-         .axi_bresp(lsu_axi_bresp_ahb[1:0]),
-         .axi_bid(lsu_axi_bid_ahb[pt.LSU_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(lsu_axi_arvalid),
-         .axi_arready(lsu_axi_arready_ahb),
-         .axi_arid(lsu_axi_arid[pt.LSU_BUS_TAG-1:0]),
-         .axi_araddr(lsu_axi_araddr[31:0]),
-         .axi_arsize(lsu_axi_arsize[2:0]),
-         .axi_arprot(lsu_axi_arprot[2:0]),
-
-         .axi_rvalid(lsu_axi_rvalid_ahb),
-         .axi_rready(lsu_axi_rready),
-         .axi_rid(lsu_axi_rid_ahb[pt.LSU_BUS_TAG-1:0]),
-         .axi_rdata(lsu_axi_rdata_ahb[63:0]),
-         .axi_rresp(lsu_axi_rresp_ahb[1:0]),
-         .axi_rlast(lsu_axi_rlast_ahb),
-
-         // AHB-LITE signals
-         .ahb_haddr(lsu_haddr[31:0]),
-         .ahb_hburst(lsu_hburst),
-         .ahb_hmastlock(lsu_hmastlock),
-         .ahb_hprot(lsu_hprot[3:0]),
-         .ahb_hsize(lsu_hsize[2:0]),
-         .ahb_htrans(lsu_htrans[1:0]),
-         .ahb_hwrite(lsu_hwrite),
-         .ahb_hwdata(lsu_hwdata[63:0]),
-
-         .ahb_hrdata(lsu_hrdata[63:0]),
-         .ahb_hready(lsu_hready),
-         .ahb_hresp(lsu_hresp),
-
-         .*
-      );
-
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.IFU_BUS_TAG)) ifu_axi4_to_ahb (
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(ifu_bus_clk_en),
-         .dec_tlu_force_halt(dec_tlu_force_halt),
-
-          // AHB-Lite signals
-         .ahb_haddr(haddr[31:0]),
-         .ahb_hburst(hburst),
-         .ahb_hmastlock(hmastlock),
-         .ahb_hprot(hprot[3:0]),
-         .ahb_hsize(hsize[2:0]),
-         .ahb_htrans(htrans[1:0]),
-         .ahb_hwrite(hwrite),
-         .ahb_hwdata(hwdata_nc[63:0]),
-
-         .ahb_hrdata(hrdata[63:0]),
-         .ahb_hready(hready),
-         .ahb_hresp(hresp),
-
-         // AXI Write Channels
-         .axi_awvalid(ifu_axi_awvalid),
-         .axi_awready(ifu_axi_awready_ahb),
-         .axi_awid(ifu_axi_awid[pt.IFU_BUS_TAG-1:0]),
-         .axi_awaddr(ifu_axi_awaddr[31:0]),
-         .axi_awsize(ifu_axi_awsize[2:0]),
-         .axi_awprot(ifu_axi_awprot[2:0]),
-
-         .axi_wvalid(ifu_axi_wvalid),
-         .axi_wready(ifu_axi_wready_ahb),
-         .axi_wdata(ifu_axi_wdata[63:0]),
-         .axi_wstrb(ifu_axi_wstrb[7:0]),
-         .axi_wlast(ifu_axi_wlast),
-
-         .axi_bvalid(ifu_axi_bvalid_ahb),
-         .axi_bready(1'b1),
-         .axi_bresp(ifu_axi_bresp_ahb[1:0]),
-         .axi_bid(ifu_axi_bid_ahb[pt.IFU_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(ifu_axi_arvalid),
-         .axi_arready(ifu_axi_arready_ahb),
-         .axi_arid(ifu_axi_arid[pt.IFU_BUS_TAG-1:0]),
-         .axi_araddr(ifu_axi_araddr[31:0]),
-         .axi_arsize(ifu_axi_arsize[2:0]),
-         .axi_arprot(ifu_axi_arprot[2:0]),
-
-         .axi_rvalid(ifu_axi_rvalid_ahb),
-         .axi_rready(ifu_axi_rready),
-         .axi_rid(ifu_axi_rid_ahb[pt.IFU_BUS_TAG-1:0]),
-         .axi_rdata(ifu_axi_rdata_ahb[63:0]),
-         .axi_rresp(ifu_axi_rresp_ahb[1:0]),
-         .axi_rlast(ifu_axi_rlast_ahb),
-         .*
-      );
-
-      // AXI4 -> AHB Gasket for System Bus
-      axi4_to_ahb #(.pt(pt),
-                    .TAG(pt.SB_BUS_TAG)) sb_axi4_to_ahb (
-         .clk(free_l2clk),
-         .free_clk(free_clk),
-         .rst_l(dbg_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(dbg_bus_clk_en),
-         .dec_tlu_force_halt(1'b0),
-
-         // AXI Write Channels
-         .axi_awvalid(sb_axi_awvalid),
-         .axi_awready(sb_axi_awready_ahb),
-         .axi_awid(sb_axi_awid[pt.SB_BUS_TAG-1:0]),
-         .axi_awaddr(sb_axi_awaddr[31:0]),
-         .axi_awsize(sb_axi_awsize[2:0]),
-         .axi_awprot(sb_axi_awprot[2:0]),
-
-         .axi_wvalid(sb_axi_wvalid),
-         .axi_wready(sb_axi_wready_ahb),
-         .axi_wdata(sb_axi_wdata[63:0]),
-         .axi_wstrb(sb_axi_wstrb[7:0]),
-         .axi_wlast(sb_axi_wlast),
-
-         .axi_bvalid(sb_axi_bvalid_ahb),
-         .axi_bready(sb_axi_bready),
-         .axi_bresp(sb_axi_bresp_ahb[1:0]),
-         .axi_bid(sb_axi_bid_ahb[pt.SB_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(sb_axi_arvalid),
-         .axi_arready(sb_axi_arready_ahb),
-         .axi_arid(sb_axi_arid[pt.SB_BUS_TAG-1:0]),
-         .axi_araddr(sb_axi_araddr[31:0]),
-         .axi_arsize(sb_axi_arsize[2:0]),
-         .axi_arprot(sb_axi_arprot[2:0]),
-
-         .axi_rvalid(sb_axi_rvalid_ahb),
-         .axi_rready(sb_axi_rready),
-         .axi_rid(sb_axi_rid_ahb[pt.SB_BUS_TAG-1:0]),
-         .axi_rdata(sb_axi_rdata_ahb[63:0]),
-         .axi_rresp(sb_axi_rresp_ahb[1:0]),
-         .axi_rlast(sb_axi_rlast_ahb),
-         // AHB-LITE signals
-         .ahb_haddr(sb_haddr[31:0]),
-         .ahb_hburst(sb_hburst),
-         .ahb_hmastlock(sb_hmastlock),
-         .ahb_hprot(sb_hprot[3:0]),
-         .ahb_hsize(sb_hsize[2:0]),
-         .ahb_htrans(sb_htrans[1:0]),
-         .ahb_hwrite(sb_hwrite),
-         .ahb_hwdata(sb_hwdata[63:0]),
-
-         .ahb_hrdata(sb_hrdata[63:0]),
-         .ahb_hready(sb_hready),
-         .ahb_hresp(sb_hresp),
-
-         .*
-      );
-
-      //AHB -> AXI4 Gasket for DMA
-      ahb_to_axi4 #(.pt(pt),
-                    .TAG(pt.DMA_BUS_TAG)) dma_ahb_to_axi4 (
-         .clk(free_l2clk),
-         .rst_l(core_rst_l),
-         .clk_override(dec_tlu_bus_clk_override),
-         .bus_clk_en(dma_bus_clk_en),
-
-         // AXI Write Channels
-         .axi_awvalid(dma_axi_awvalid_ahb),
-         .axi_awready(dma_axi_awready),
-         .axi_awid(dma_axi_awid_ahb[pt.DMA_BUS_TAG-1:0]),
-         .axi_awaddr(dma_axi_awaddr_ahb[31:0]),
-         .axi_awsize(dma_axi_awsize_ahb[2:0]),
-         .axi_awprot(dma_axi_awprot_ahb[2:0]),
-         .axi_awlen(dma_axi_awlen_ahb[7:0]),
-         .axi_awburst(dma_axi_awburst_ahb[1:0]),
-
-         .axi_wvalid(dma_axi_wvalid_ahb),
-         .axi_wready(dma_axi_wready),
-         .axi_wdata(dma_axi_wdata_ahb[63:0]),
-         .axi_wstrb(dma_axi_wstrb_ahb[7:0]),
-         .axi_wlast(dma_axi_wlast_ahb),
-
-         .axi_bvalid(dma_axi_bvalid),
-         .axi_bready(dma_axi_bready_ahb),
-         .axi_bresp(dma_axi_bresp[1:0]),
-         .axi_bid(dma_axi_bid[pt.DMA_BUS_TAG-1:0]),
-
-         // AXI Read Channels
-         .axi_arvalid(dma_axi_arvalid_ahb),
-         .axi_arready(dma_axi_arready),
-         .axi_arid(dma_axi_arid_ahb[pt.DMA_BUS_TAG-1:0]),
-         .axi_araddr(dma_axi_araddr_ahb[31:0]),
-         .axi_arsize(dma_axi_arsize_ahb[2:0]),
-         .axi_arprot(dma_axi_arprot_ahb[2:0]),
-         .axi_arlen(dma_axi_arlen_ahb[7:0]),
-         .axi_arburst(dma_axi_arburst_ahb[1:0]),
-
-         .axi_rvalid(dma_axi_rvalid),
-         .axi_rready(dma_axi_rready_ahb),
-         .axi_rid(dma_axi_rid[pt.DMA_BUS_TAG-1:0]),
-         .axi_rdata(dma_axi_rdata[63:0]),
-         .axi_rresp(dma_axi_rresp[1:0]),
-
-          // AHB signals
-         .ahb_haddr(dma_haddr[31:0]),
-         .ahb_hburst(dma_hburst),
-         .ahb_hmastlock(dma_hmastlock),
-         .ahb_hprot(dma_hprot[3:0]),
-         .ahb_hsize(dma_hsize[2:0]),
-         .ahb_htrans(dma_htrans[1:0]),
-         .ahb_hwrite(dma_hwrite),
-         .ahb_hwdata(dma_hwdata[63:0]),
-
-         .ahb_hrdata(dma_hrdata[63:0]),
-         .ahb_hreadyout(dma_hreadyout),
-         .ahb_hresp(dma_hresp),
-         .ahb_hreadyin(dma_hreadyin),
-         .ahb_hsel(dma_hsel),
-         .*
-      );
-
-   end
-
-   // Drive the final AXI inputs
-   assign lsu_axi_awready_int                 = pt.BUILD_AHB_LITE ? lsu_axi_awready_ahb : lsu_axi_awready;
-   assign lsu_axi_wready_int                  = pt.BUILD_AHB_LITE ? lsu_axi_wready_ahb : lsu_axi_wready;
-   assign lsu_axi_bvalid_int                  = pt.BUILD_AHB_LITE ? lsu_axi_bvalid_ahb : lsu_axi_bvalid;
-   assign lsu_axi_bready_int                  = pt.BUILD_AHB_LITE ? lsu_axi_bready_ahb : lsu_axi_bready;
-   assign lsu_axi_bresp_int[1:0]              = pt.BUILD_AHB_LITE ? lsu_axi_bresp_ahb[1:0] : lsu_axi_bresp[1:0];
-   assign lsu_axi_bid_int[pt.LSU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? lsu_axi_bid_ahb[pt.LSU_BUS_TAG-1:0] : lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign lsu_axi_arready_int                 = pt.BUILD_AHB_LITE ? lsu_axi_arready_ahb : lsu_axi_arready;
-   assign lsu_axi_rvalid_int                  = pt.BUILD_AHB_LITE ? lsu_axi_rvalid_ahb : lsu_axi_rvalid;
-   assign lsu_axi_rid_int[pt.LSU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? lsu_axi_rid_ahb[pt.LSU_BUS_TAG-1:0] : lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign lsu_axi_rdata_int[63:0]             = pt.BUILD_AHB_LITE ? lsu_axi_rdata_ahb[63:0] : lsu_axi_rdata[63:0];
-   assign lsu_axi_rresp_int[1:0]              = pt.BUILD_AHB_LITE ? lsu_axi_rresp_ahb[1:0] : lsu_axi_rresp[1:0];
-   assign lsu_axi_rlast_int                   = pt.BUILD_AHB_LITE ? lsu_axi_rlast_ahb : lsu_axi_rlast;
-
-   assign ifu_axi_awready_int                 = pt.BUILD_AHB_LITE ? ifu_axi_awready_ahb : ifu_axi_awready;
-   assign ifu_axi_wready_int                  = pt.BUILD_AHB_LITE ? ifu_axi_wready_ahb : ifu_axi_wready;
-   assign ifu_axi_bvalid_int                  = pt.BUILD_AHB_LITE ? ifu_axi_bvalid_ahb : ifu_axi_bvalid;
-   assign ifu_axi_bready_int                  = pt.BUILD_AHB_LITE ? ifu_axi_bready_ahb : ifu_axi_bready;
-   assign ifu_axi_bresp_int[1:0]              = pt.BUILD_AHB_LITE ? ifu_axi_bresp_ahb[1:0] : ifu_axi_bresp[1:0];
-   assign ifu_axi_bid_int[pt.IFU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? ifu_axi_bid_ahb[pt.IFU_BUS_TAG-1:0] : ifu_axi_bid[pt.IFU_BUS_TAG-1:0];
-   assign ifu_axi_arready_int                 = pt.BUILD_AHB_LITE ? ifu_axi_arready_ahb : ifu_axi_arready;
-   assign ifu_axi_rvalid_int                  = pt.BUILD_AHB_LITE ? ifu_axi_rvalid_ahb : ifu_axi_rvalid;
-   assign ifu_axi_rid_int[pt.IFU_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? ifu_axi_rid_ahb[pt.IFU_BUS_TAG-1:0] : ifu_axi_rid[pt.IFU_BUS_TAG-1:0];
-   assign ifu_axi_rdata_int[63:0]             = pt.BUILD_AHB_LITE ? ifu_axi_rdata_ahb[63:0] : ifu_axi_rdata[63:0];
-   assign ifu_axi_rresp_int[1:0]              = pt.BUILD_AHB_LITE ? ifu_axi_rresp_ahb[1:0] : ifu_axi_rresp[1:0];
-   assign ifu_axi_rlast_int                   = pt.BUILD_AHB_LITE ? ifu_axi_rlast_ahb : ifu_axi_rlast;
-
-   assign sb_axi_awready_int                  = pt.BUILD_AHB_LITE ? sb_axi_awready_ahb : sb_axi_awready;
-   assign sb_axi_wready_int                   = pt.BUILD_AHB_LITE ? sb_axi_wready_ahb : sb_axi_wready;
-   assign sb_axi_bvalid_int                   = pt.BUILD_AHB_LITE ? sb_axi_bvalid_ahb : sb_axi_bvalid;
-   assign sb_axi_bready_int                   = pt.BUILD_AHB_LITE ? sb_axi_bready_ahb : sb_axi_bready;
-   assign sb_axi_bresp_int[1:0]               = pt.BUILD_AHB_LITE ? sb_axi_bresp_ahb[1:0] : sb_axi_bresp[1:0];
-   assign sb_axi_bid_int[pt.SB_BUS_TAG-1:0]   = pt.BUILD_AHB_LITE ? sb_axi_bid_ahb[pt.SB_BUS_TAG-1:0] : sb_axi_bid[pt.SB_BUS_TAG-1:0];
-   assign sb_axi_arready_int                  = pt.BUILD_AHB_LITE ? sb_axi_arready_ahb : sb_axi_arready;
-   assign sb_axi_rvalid_int                   = pt.BUILD_AHB_LITE ? sb_axi_rvalid_ahb : sb_axi_rvalid;
-   assign sb_axi_rid_int[pt.SB_BUS_TAG-1:0]   = pt.BUILD_AHB_LITE ? sb_axi_rid_ahb[pt.SB_BUS_TAG-1:0] : sb_axi_rid[pt.SB_BUS_TAG-1:0];
-   assign sb_axi_rdata_int[63:0]              = pt.BUILD_AHB_LITE ? sb_axi_rdata_ahb[63:0] : sb_axi_rdata[63:0];
-   assign sb_axi_rresp_int[1:0]               = pt.BUILD_AHB_LITE ? sb_axi_rresp_ahb[1:0] : sb_axi_rresp[1:0];
-   assign sb_axi_rlast_int                    = pt.BUILD_AHB_LITE ? sb_axi_rlast_ahb : sb_axi_rlast;
-
-   assign dma_axi_awvalid_int                  = pt.BUILD_AHB_LITE ? dma_axi_awvalid_ahb : dma_axi_awvalid;
-   assign dma_axi_awid_int[pt.DMA_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? dma_axi_awid_ahb[pt.DMA_BUS_TAG-1:0] : dma_axi_awid[pt.DMA_BUS_TAG-1:0];
-   assign dma_axi_awaddr_int[31:0]             = pt.BUILD_AHB_LITE ? dma_axi_awaddr_ahb[31:0] : dma_axi_awaddr[31:0];
-   assign dma_axi_awsize_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_awsize_ahb[2:0] : dma_axi_awsize[2:0];
-   assign dma_axi_awprot_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_awprot_ahb[2:0] : dma_axi_awprot[2:0];
-   assign dma_axi_awlen_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_awlen_ahb[7:0] : dma_axi_awlen[7:0];
-   assign dma_axi_awburst_int[1:0]             = pt.BUILD_AHB_LITE ? dma_axi_awburst_ahb[1:0] : dma_axi_awburst[1:0];
-   assign dma_axi_wvalid_int                   = pt.BUILD_AHB_LITE ? dma_axi_wvalid_ahb : dma_axi_wvalid;
-   assign dma_axi_wdata_int[63:0]              = pt.BUILD_AHB_LITE ? dma_axi_wdata_ahb[63:0] : dma_axi_wdata;
-   assign dma_axi_wstrb_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_wstrb_ahb[7:0] : dma_axi_wstrb[7:0];
-   assign dma_axi_wlast_int                    = pt.BUILD_AHB_LITE ? dma_axi_wlast_ahb : dma_axi_wlast;
-   assign dma_axi_bready_int                   = pt.BUILD_AHB_LITE ? dma_axi_bready_ahb : dma_axi_bready;
-   assign dma_axi_arvalid_int                  = pt.BUILD_AHB_LITE ? dma_axi_arvalid_ahb : dma_axi_arvalid;
-   assign dma_axi_arid_int[pt.DMA_BUS_TAG-1:0] = pt.BUILD_AHB_LITE ? dma_axi_arid_ahb[pt.DMA_BUS_TAG-1:0] : dma_axi_arid[pt.DMA_BUS_TAG-1:0];
-   assign dma_axi_araddr_int[31:0]             = pt.BUILD_AHB_LITE ? dma_axi_araddr_ahb[31:0] : dma_axi_araddr[31:0];
-   assign dma_axi_arsize_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_arsize_ahb[2:0] : dma_axi_arsize[2:0];
-   assign dma_axi_arprot_int[2:0]              = pt.BUILD_AHB_LITE ? dma_axi_arprot_ahb[2:0] : dma_axi_arprot[2:0];
-   assign dma_axi_arlen_int[7:0]               = pt.BUILD_AHB_LITE ? dma_axi_arlen_ahb[7:0] : dma_axi_arlen[7:0];
-   assign dma_axi_arburst_int[1:0]             = pt.BUILD_AHB_LITE ? dma_axi_arburst_ahb[1:0] : dma_axi_arburst[1:0];
-   assign dma_axi_rready_int                   = pt.BUILD_AHB_LITE ? dma_axi_rready_ahb : dma_axi_rready;
-
- 
-if  (pt.BUILD_AHB_LITE == 1) begin
-
-   end // if (pt.BUILD_AHB_LITE == 1)
-
-
-      // unpack packet
-      // also need retires_p==3
-
-      assign trace_rv_i_insn_ip[31:0]     = trace_rv_trace_pkt.trace_rv_i_insn_ip[31:0];
-
-      assign trace_rv_i_address_ip[31:0]  = trace_rv_trace_pkt.trace_rv_i_address_ip[31:0];
-
-      assign trace_rv_i_valid_ip     = trace_rv_trace_pkt.trace_rv_i_valid_ip;
-
-      assign trace_rv_i_exception_ip = trace_rv_trace_pkt.trace_rv_i_exception_ip;
-
-      assign trace_rv_i_ecause_ip[4:0]    = trace_rv_trace_pkt.trace_rv_i_ecause_ip[4:0];
-
-      assign trace_rv_i_interrupt_ip = trace_rv_trace_pkt.trace_rv_i_interrupt_ip;
-
-      assign trace_rv_i_tval_ip[31:0]     = trace_rv_trace_pkt.trace_rv_i_tval_ip[31:0];
-			
-endmodule // eb1_brqrv
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2018
-//  Owner : Anusha Narayanamoorthy
-//  Description:  
-//                Wrapper module for JTAG_TAP and DMI synchronizer
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_wrapper(
-
-  // JTAG signals
-  input              trst_n,              // JTAG reset
-  input              tck,                 // JTAG clock
-  input              tms,                 // Test mode select   
-  input              tdi,                 // Test Data Input
-  output             tdo,                 // Test Data Output           
-  output             tdoEnable,           // Test Data Output enable             
-
-  // Processor Signals
-  input              core_rst_n,          // Core reset                  
-  input              core_clk,            // Core clock                  
-  input [31:1]       jtag_id,             // JTAG ID
-  input [31:0]       rd_data,             // 32 bit Read data from  Processor                       
-  output [31:0]      reg_wr_data,         // 32 bit Write data to Processor                      
-  output [6:0]       reg_wr_addr,         // 7 bit reg address to Processor                   
-  output             reg_en,              // 1 bit  Read enable to Processor                                    
-  output             reg_wr_en,           // 1 bit  Write enable to Processor 
-  output             dmi_hard_reset  
-);
-
-
-  
-
-
-  //Wire Declaration
-  wire                     rd_en;
-  wire                     wr_en;
-  wire                     dmireset;
-
- 
-  //jtag_tap instantiation
- rvjtag_tap i_jtag_tap(
-   .trst(trst_n),                      // dedicated JTAG TRST (active low) pad signal or asynchronous active low power on reset
-   .tck(tck),                          // dedicated JTAG TCK pad signal
-   .tms(tms),                          // dedicated JTAG TMS pad signal
-   .tdi(tdi),                          // dedicated JTAG TDI pad signal
-   .tdo(tdo),                          // dedicated JTAG TDO pad signal
-   .tdoEnable(tdoEnable),              // enable for TDO pad
-   .wr_data(reg_wr_data),              // 32 bit Write data
-   .wr_addr(reg_wr_addr),              // 7 bit Write address
-   .rd_en(rd_en),                      // 1 bit  read enable
-   .wr_en(wr_en),                      // 1 bit  Write enable
-   .rd_data(rd_data),                  // 32 bit Read data
-   .rd_status(2'b0),
-   .idle(3'h0),                         // no need to wait to sample data
-   .dmi_stat(2'b0),                     // no need to wait or error possible
-   .version(4'h1),                      // debug spec 0.13 compliant
-   .jtag_id(jtag_id),
-   .dmi_hard_reset(dmi_hard_reset),
-   .dmi_reset(dmireset)
-);
-
-
-  // dmi_jtag_to_core_sync instantiation
-  dmi_jtag_to_core_sync i_dmi_jtag_to_core_sync(
-    .wr_en(wr_en),                          // 1 bit  Write enable
-    .rd_en(rd_en),                          // 1 bit  Read enable
-
-    .rst_n(core_rst_n),
-    .clk(core_clk),
-    .reg_en(reg_en),                          // 1 bit  Write interface bit
-    .reg_wr_en(reg_wr_en)                          // 1 bit  Write enable
-  );
-
-endmodule
-
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-  
-module eb1_uart_rx_prog (
-   input         i_Clock,
-   input         rst_ni,
-   input         i_Rx_Serial,
-   input  [15:0] CLKS_PER_BIT,
-   output        o_Rx_DV,
-   output  [7:0] o_Rx_Byte
-   );
-    
-  parameter s_IDLE         = 3'b000;
-  parameter s_RX_START_BIT = 3'b001;
-  parameter s_RX_DATA_BITS = 3'b010;
-  parameter s_RX_STOP_BIT  = 3'b011;
-  parameter s_CLEANUP      = 3'b100;
-   
-  reg           r_Rx_Data_R;
-  reg           r_Rx_Data;
-   
-  reg [15:0]     r_Clock_Count;
-  reg [2:0]     r_Bit_Index; //8 bits total
-  reg [7:0]     r_Rx_Byte;
-  reg           r_Rx_DV;
-  reg [2:0]     r_SM_Main;
-   
-  // Purpose: Double-register the incoming data.
-  // This allows it to be used in the UART RX Clock Domain.
-  // (It removes problems caused by metastability)
-  always @(posedge i_Clock)
-    if(rst_ni == 1'b0) begin
-    	r_Rx_Data_R <= 1'b1;
-    	r_Rx_Data   <= 1'b1;
-    end
-    else begin
-      r_Rx_Data_R <= i_Rx_Serial;
-      r_Rx_Data   <= r_Rx_Data_R;
-    end
-   
-   
-  // Purpose: Control RX state machine
-  always @(posedge i_Clock or negedge rst_ni)
-    begin
-      if (rst_ni == 1'b0) begin
-        r_SM_Main <= s_IDLE;
-        r_Rx_DV       <= 1'b0;
-        r_Clock_Count <= 16'h0000;
-        r_Bit_Index   <= 3'b000;
-        r_Rx_Byte     <= 8'h00;
-      end else begin       
-      case (r_SM_Main)
-        s_IDLE :
-          begin
-            r_Rx_DV       <= 1'b0;
-            r_Clock_Count <= 0;
-            r_Bit_Index   <= 0;
-             
-            if (r_Rx_Data == 1'b0)          // Start bit detected
-              r_SM_Main <= s_RX_START_BIT;
-            else
-              r_SM_Main <= s_IDLE;
-          end
-         
-        // Check middle of start bit to make sure it's still low
-        s_RX_START_BIT :
-          begin
-            if (r_Clock_Count == ((CLKS_PER_BIT-1)>>1))
-              begin
-                if (r_Rx_Data == 1'b0)
-                  begin
-                    r_Clock_Count <= 0;  // reset counter, found the middle
-                    r_SM_Main     <= s_RX_DATA_BITS;
-                  end
-                else
-                  r_SM_Main <= s_IDLE;
-              end
-            else
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_START_BIT;
-              end
-          end // case: s_RX_START_BIT
-         
-         
-        // Wait CLKS_PER_BIT-1 clock cycles to sample serial data
-        s_RX_DATA_BITS :
-          begin
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_DATA_BITS;
-              end
-            else
-              begin
-                r_Clock_Count          <= 0;
-                r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
-                 
-                // Check if we have received all bits
-                if (r_Bit_Index < 7)
-                  begin
-                    r_Bit_Index <= r_Bit_Index + 1;
-                    r_SM_Main   <= s_RX_DATA_BITS;
-                  end
-                else
-                  begin
-                    r_Bit_Index <= 0;
-                    r_SM_Main   <= s_RX_STOP_BIT;
-                  end
-              end
-          end // case: s_RX_DATA_BITS
-     
-     
-        // Receive Stop bit.  Stop bit = 1
-        s_RX_STOP_BIT :
-          begin
-            // Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_STOP_BIT;
-              end
-            else
-              begin
-                r_Rx_DV       <= 1'b1;
-                r_Clock_Count <= 0;
-                r_SM_Main     <= s_CLEANUP;
-              end
-          end // case: s_RX_STOP_BIT
-     
-         
-        // Stay here 1 clock
-        s_CLEANUP :
-          begin
-            r_SM_Main <= s_IDLE;
-            r_Rx_DV   <= 1'b0;
-          end
-         
-         
-        default :
-          r_SM_Main <= s_IDLE;
-         
-      endcase
-      end
-    end   
-   
-  assign o_Rx_DV   = r_Rx_DV;
-  assign o_Rx_Byte = r_Rx_Byte;
-   
-endmodule // uart_rx
-
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-
-module eb1_iccm_controller (
-	clk_i,
-	rst_ni,
-	rx_dv_i,
-	rx_byte_i,
-	we_o,
-	addr_o,
-	wdata_o,
-	reset_o
-);
-	input wire clk_i;
-	input wire rst_ni;
-	input wire rx_dv_i;
-	input wire [7:0] rx_byte_i;
-	output wire we_o;
-	output wire [13:0] addr_o;
-	output wire [31:0] wdata_o;
-	output wire reset_o;
-	reg [1:0] ctrl_fsm_cs;
-	reg [1:0] ctrl_fsm_ns;
-	wire [7:0] rx_byte_d;
-	reg [7:0] rx_byte_q0;
-	reg [7:0] rx_byte_q1;
-	reg [7:0] rx_byte_q2;
-	reg [7:0] rx_byte_q3;
-	reg we_q;
-	reg we_d;
-	reg [13:0] addr_q;
-	reg [13:0] addr_d;
-	reg reset_q;
-	reg reset_d;
-	reg [1:0] byte_count;
-	localparam [1:0] DONE = 3;
-	localparam [1:0] LOAD = 1;
-	localparam [1:0] PROG = 2;
-	localparam [1:0] RESET = 0;
-	always @(*) begin
-		we_d = we_q;
-		addr_d = addr_q;
-		reset_d = reset_q;
-		ctrl_fsm_ns = ctrl_fsm_cs;
-		case (ctrl_fsm_cs)
-			RESET: begin
-				we_d = 1'b0;
-				reset_d = 1'b0;
-				if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = RESET;
-			end
-			LOAD:
-				if (((byte_count == 2'b11) && (rx_byte_q2 != 8'h0f)) && (rx_byte_d != 8'hff)) begin
-					we_d = 1'b1;
-					ctrl_fsm_ns = PROG;
-				end
-				else
-					ctrl_fsm_ns = DONE;
-			PROG: begin
-				we_d = 1'b0;
-				ctrl_fsm_ns = DONE;
-			end
-			DONE:
-				if (wdata_o == 32'h00000fff) begin
-					ctrl_fsm_ns = DONE;
-					reset_d = 1'b1;
-				end
-				else if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = DONE;
-			default: ctrl_fsm_ns = RESET;
-		endcase
-	end
-	assign rx_byte_d = rx_byte_i;
-	assign we_o = we_q;
-	assign addr_o = addr_q;
-	assign wdata_o = {rx_byte_q0, rx_byte_q1, rx_byte_q2, rx_byte_q3};
-	assign reset_o = reset_q;
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni) begin
-			we_q <= 1'b0;
-			addr_q <= 14'b00000000000000;
-			rx_byte_q0 <= 8'b00000000;
-			rx_byte_q1 <= 8'b00000000;
-			rx_byte_q2 <= 8'b00000000;
-			rx_byte_q3 <= 8'b00000000;
-			reset_q <= 1'b0;
-			byte_count <= 2'b00;
-			ctrl_fsm_cs <= RESET;
-		end
-		else begin
-			we_q <= we_d;
-			if (ctrl_fsm_cs == LOAD) begin
-				if (byte_count == 2'b00) begin
-					rx_byte_q0 <= rx_byte_d;
-					byte_count <= 2'b01;
-				end
-				else if (byte_count == 2'b01) begin
-					rx_byte_q1 <= rx_byte_d;
-					byte_count <= 2'b10;
-				end
-				else if (byte_count == 2'b10) begin
-					rx_byte_q2 <= rx_byte_d;
-					byte_count <= 2'b11;
-				end
-				else begin
-					rx_byte_q3 <= rx_byte_d;
-					byte_count <= 2'b00;
-				end
-				addr_q <= addr_d;
-			end
-			if (ctrl_fsm_cs == PROG)
-				addr_q <= addr_d + 2'h2;
-			reset_q <= reset_d;
-			ctrl_fsm_cs <= ctrl_fsm_ns;
-		end
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-module eb1_mem
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-
-   input logic         VPWR,
-   input logic		VGND,
-   input logic         clk,
-   input logic         rst_l,
-   input logic         dccm_clk_override,
-   input logic         icm_clk_override,
-   input logic         dec_tlu_core_ecc_disable,
-
-   //DCCM ports
-   input logic         dccm_wren,
-   input logic         dccm_rden,
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,
-
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_lo,
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_rd_data_hi,
-
-//`ifdef pt.DCCM_ENABLE
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,
-
-//`endif
-
-   //ICCM ports
-   input eb1_ccm_ext_in_pkt_t   [pt.ICCM_NUM_BANKS-1:0]  iccm_ext_in_pkt,
-
-   input logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,
-   input logic                                        iccm_buf_correct_ecc,                    // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM is doing a single bit error correct cycle
-   input logic         iccm_wren,
-   input logic         iccm_rden,
-   input logic [2:0]   iccm_wr_size,
-   input logic [77:0]  iccm_wr_data,
-
-   output logic [63:0] iccm_rd_data,
-   output logic [77:0] iccm_rd_data_ecc,
-
-   // Icache and Itag Ports
-
-   input  logic [31:1]  ic_rw_addr,
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]   ic_tag_valid,
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]   ic_wr_en,
-   input  logic         ic_rd_en,
-   input  logic [63:0] ic_premux_data,      // Premux data to be muxed with each way of the Icache.
-   input  logic         ic_sel_premux_data, // Premux data sel
-   input eb1_ic_data_ext_in_pkt_t   [pt.ICACHE_NUM_WAYS-1:0][pt.ICACHE_BANKS_WAY-1:0]         ic_data_ext_in_pkt,
-   input eb1_ic_tag_ext_in_pkt_t    [pt.ICACHE_NUM_WAYS-1:0]           ic_tag_ext_in_pkt,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-   output logic [70:0]               ic_debug_rd_data ,  // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   input  logic                      ic_debug_rd_en,     // Icache debug rd
-   input  logic                      ic_debug_wr_en,     // Icache debug wr
-   input  logic                      ic_debug_tag_array, // Debug tag array
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-   output logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   output logic [25:0]               ictag_debug_rd_data,// Debug icache tag.
-
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    // ecc error per bank
-   output logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,          // parity error per bank
-   output logic [pt.ICACHE_NUM_WAYS-1:0]   ic_rd_hit,
-   output logic         ic_tag_perr,        // Icache Tag parity error
-
-
-   input  logic         scan_mode
-
-);
-
-   logic active_clk;
-   rvoclkhdr active_cg   ( .en(1'b1),         .l1clk(active_clk), .* );
-
-   // DCCM Instantiation
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      eb1_lsu_dccm_mem #(.pt(pt)) dccm (
-         .clk_override(dccm_clk_override),
-         .*
-      );
-   end else begin: Gen_dccm_disable
-      assign dccm_rd_data_lo = '0;
-      assign dccm_rd_data_hi = '0;
-   end
-
-if ( pt.ICACHE_ENABLE ) begin: icache
-   eb1_ifu_ic_mem #(.pt(pt)) icm  (
-      .clk_override(icm_clk_override),
-      .*
-   );
-end
-else  begin
-   assign   ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0] = '0;
-   assign   ic_tag_perr    = '0 ;
-   assign   ic_rd_data  = '0 ;
-   assign   ictag_debug_rd_data  = '0 ;
-end // else: !if( pt.ICACHE_ENABLE )
-
-
-
-if (pt.ICCM_ENABLE) begin : iccm
-   eb1_ifu_iccm_mem  #(.pt(pt)) iccm (.*,
-                  .clk_override(icm_clk_override),
-                  .iccm_rw_addr(iccm_rw_addr[pt.ICCM_BITS-1:1]),
-                  .iccm_rd_data(iccm_rd_data[63:0])
-                   );
-end
-else  begin
-   assign  iccm_rd_data    = '0 ;
-   assign iccm_rd_data_ecc = '0 ;
-end
-
-
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Programmable Interrupt Controller
-// Comments:
-//********************************************************************************
-
-module eb1_pic_ctrl
-import eb1_pkg::*; 
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-                  (
-
-                     input  logic                   clk,                  // Core clock
-                     input  logic                   free_clk,             // free clock
-                     input  logic                   rst_l,                // Reset for all flops
-                     input  logic                   clk_override,         // Clock over-ride for gating
-                     input  logic                   io_clk_override,      // PIC IO  Clock over-ride for gating
-                     input  logic [pt.PIC_TOTAL_INT_PLUS1-1:0]   extintsrc_req,  // Interrupt requests
-                     input  logic [31:0]            picm_rdaddr,          // Address of the register
-                     input  logic [31:0]            picm_wraddr,          // Address of the register
-                     input  logic [31:0]            picm_wr_data,         // Data to be written to the register
-                     input  logic                   picm_wren,            // Write enable to the register
-                     input  logic                   picm_rden,            // Read enable for the register
-                     input  logic                   picm_mken,            // Read the Mask for the register
-                     input  logic [3:0]             meicurpl,             // Current Priority Level
-                     input  logic [3:0]             meipt,                // Current Priority Threshold
-
-                     output logic                   mexintpend,           // External Inerrupt request to the core
-                     output logic [7:0]             claimid,              // Claim Id of the requested interrupt
-                     output logic [3:0]             pl,                   // Priority level of the requested interrupt
-                     output logic [31:0]            picm_rd_data,         // Read data of the register
-                     output logic                   mhwakeup,             // Wake-up interrupt request
-                     input  logic                   scan_mode             // scan mode
-
-);
-
-localparam NUM_LEVELS            = $clog2(pt.PIC_TOTAL_INT_PLUS1);
-localparam INTPRIORITY_BASE_ADDR = pt.PIC_BASE_ADDR ;
-localparam INTPEND_BASE_ADDR     = pt.PIC_BASE_ADDR + 32'h00001000 ;
-localparam INTENABLE_BASE_ADDR   = pt.PIC_BASE_ADDR + 32'h00002000 ;
-localparam EXT_INTR_PIC_CONFIG   = pt.PIC_BASE_ADDR + 32'h00003000 ;
-localparam EXT_INTR_GW_CONFIG    = pt.PIC_BASE_ADDR + 32'h00004000 ;
-localparam EXT_INTR_GW_CLEAR     = pt.PIC_BASE_ADDR + 32'h00005000 ;
-
-
-localparam INTPEND_SIZE          = (pt.PIC_TOTAL_INT_PLUS1 < 32)  ? 32  :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 64)  ? 64  :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 128) ? 128 :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 256) ? 256 :
-                                   (pt.PIC_TOTAL_INT_PLUS1 < 512) ? 512 :  1024 ;
-
-localparam INT_GRPS              =   INTPEND_SIZE / 32 ;
-localparam INTPRIORITY_BITS      =  4 ;
-localparam ID_BITS               =  8 ;
-localparam int GW_CONFIG[pt.PIC_TOTAL_INT_PLUS1-1:0] = '{default:0} ;
-
-localparam INT_ENABLE_GRPS       =   (pt.PIC_TOTAL_INT_PLUS1 - 1)  / 4 ;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]           intenable_clk_enable ;
-logic [INT_ENABLE_GRPS:0]                    intenable_clk_enable_grp ;
-logic [INT_ENABLE_GRPS:0]                    gw_clk ;
-
-logic  addr_intpend_base_match;
-
-logic  raddr_config_pic_match ;
-logic  raddr_intenable_base_match;
-logic  raddr_intpriority_base_match;
-logic  raddr_config_gw_base_match ;
-
-logic  waddr_config_pic_match ;
-logic  waddr_intpriority_base_match;
-logic  waddr_intenable_base_match;
-logic  waddr_config_gw_base_match ;
-logic  addr_clear_gw_base_match ;
-
-logic  mexintpend_in;
-logic  mhwakeup_in ;
-logic  intpend_reg_read ;
-
-logic [31:0]                                 picm_rd_data_in, intpend_rd_out;
-logic                                        intenable_rd_out ;
-logic [INTPRIORITY_BITS-1:0]                 intpriority_rd_out;
-logic [1:0]                                  gw_config_rd_out;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpriority_reg;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpriority_reg_inv;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intpriority_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intpriority_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [1:0]                  gw_config_reg;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        intenable_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_config_reg_we;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_config_reg_re;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        gw_clear_reg_we;
-
-logic [INTPEND_SIZE-1:0]                     intpend_reg_extended;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [INTPRIORITY_BITS-1:0] intpend_w_prior_en;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0] [ID_BITS-1:0]          intpend_id;
-logic [INTPRIORITY_BITS-1:0]                 maxint;
-logic [INTPRIORITY_BITS-1:0]                 selected_int_priority;
-logic [INT_GRPS-1:0] [31:0]                  intpend_rd_part_out ;
-
-logic                                        config_reg;
-logic                                        intpriord;
-logic                                        config_reg_we ;
-logic                                        config_reg_re ;
-logic                                        config_reg_in ;
-logic                                        prithresh_reg_write , prithresh_reg_read;
-logic                                        intpriority_reg_read ;
-logic                                        intenable_reg_read   ;
-logic                                        gw_config_reg_read   ;
-logic                                        picm_wren_ff , picm_rden_ff ;
-logic [31:0]                                 picm_raddr_ff;
-logic [31:0]                                 picm_waddr_ff;
-logic [31:0]                                 picm_wr_data_ff;
-logic [3:0]                                  mask;
-logic                                        picm_mken_ff;
-logic [ID_BITS-1:0]                          claimid_in ;
-logic [INTPRIORITY_BITS-1:0]                 pl_in ;
-logic [INTPRIORITY_BITS-1:0]                 pl_in_q ;
-
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        extintsrc_req_sync;
-logic [pt.PIC_TOTAL_INT_PLUS1-1:0]                        extintsrc_req_gw;
-   logic                                                  picm_bypass_ff;
-
-// clkens
-   logic                                     pic_raddr_c1_clken;
-   logic                                     pic_waddr_c1_clken;
-   logic                                     pic_data_c1_clken;
-   logic                                     pic_pri_c1_clken;
-   logic                                     pic_int_c1_clken;
-   logic                                     gw_config_c1_clken;
-
-// clocks
-   logic                                     pic_raddr_c1_clk;
-   logic                                     pic_data_c1_clk;
-   logic                                     pic_pri_c1_clk;
-   logic                                     pic_int_c1_clk;
-   logic                                     gw_config_c1_clk;
-
-// ---- Clock gating section ------
-// c1 clock enables
-   assign pic_raddr_c1_clken  = picm_mken | picm_rden | clk_override;
-   assign pic_data_c1_clken   = picm_wren | clk_override;
-   assign pic_pri_c1_clken    = (waddr_intpriority_base_match & picm_wren_ff)  | (raddr_intpriority_base_match & picm_rden_ff) | clk_override;
-   assign pic_int_c1_clken    = (waddr_intenable_base_match   & picm_wren_ff)  | (raddr_intenable_base_match   & picm_rden_ff) | clk_override;
-   assign gw_config_c1_clken  = (waddr_config_gw_base_match   & picm_wren_ff)  | (raddr_config_gw_base_match   & picm_rden_ff) | clk_override;
-
-   // C1 - 1 clock pulse for data
-   rvoclkhdr pic_addr_c1_cgc   ( .en(pic_raddr_c1_clken),  .l1clk(pic_raddr_c1_clk), .* );
-   rvoclkhdr pic_data_c1_cgc   ( .en(pic_data_c1_clken),   .l1clk(pic_data_c1_clk), .* );
-   rvoclkhdr pic_pri_c1_cgc    ( .en(pic_pri_c1_clken),    .l1clk(pic_pri_c1_clk),  .* );
-   rvoclkhdr pic_int_c1_cgc    ( .en(pic_int_c1_clken),    .l1clk(pic_int_c1_clk),  .* );
-   rvoclkhdr gw_config_c1_cgc  ( .en(gw_config_c1_clken),  .l1clk(gw_config_c1_clk),  .* );
-
-// ------ end clock gating section ------------------------
-
-assign raddr_intenable_base_match   = (picm_raddr_ff[31:NUM_LEVELS+2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign raddr_intpriority_base_match = (picm_raddr_ff[31:NUM_LEVELS+2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign raddr_config_gw_base_match   = (picm_raddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS+2]) ;
-assign raddr_config_pic_match       = (picm_raddr_ff[31:0]            == EXT_INTR_PIC_CONFIG[31:0]) ;
-
-assign addr_intpend_base_match      = (picm_raddr_ff[31:6]            == INTPEND_BASE_ADDR[31:6]) ;
-
-assign waddr_config_pic_match       = (picm_waddr_ff[31:0]            == EXT_INTR_PIC_CONFIG[31:0]) ;
-assign addr_clear_gw_base_match     = (picm_waddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CLEAR[31:NUM_LEVELS+2]) ;
-assign waddr_intpriority_base_match = (picm_waddr_ff[31:NUM_LEVELS+2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign waddr_intenable_base_match   = (picm_waddr_ff[31:NUM_LEVELS+2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS+2]) ;
-assign waddr_config_gw_base_match   = (picm_waddr_ff[31:NUM_LEVELS+2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS+2]) ;
-
-   assign picm_bypass_ff = picm_rden_ff & picm_wren_ff & ( picm_raddr_ff[31:0] == picm_waddr_ff[31:0] );    // pic writes and reads to same address together
-
-
-rvdff #(32) picm_radd_flop  (.*, .din (picm_rdaddr),        .dout(picm_raddr_ff),         .clk(pic_raddr_c1_clk));
-rvdff #(32) picm_wadd_flop  (.*, .din (picm_wraddr),        .dout(picm_waddr_ff),         .clk(pic_data_c1_clk));
-rvdff  #(1) picm_wre_flop   (.*, .din (picm_wren),          .dout(picm_wren_ff),          .clk(free_clk));
-rvdff  #(1) picm_rde_flop   (.*, .din (picm_rden),          .dout(picm_rden_ff),          .clk(free_clk));
-rvdff  #(1) picm_mke_flop   (.*, .din (picm_mken),          .dout(picm_mken_ff),          .clk(free_clk));
-rvdff #(32) picm_dat_flop   (.*, .din (picm_wr_data[31:0]), .dout(picm_wr_data_ff[31:0]), .clk(pic_data_c1_clk));
-
-
-genvar p ;
-for (p=0; p<=INT_ENABLE_GRPS ; p++) begin  : IO_CLK_GRP
-   if (p==INT_ENABLE_GRPS) begin : LAST_GRP
-       assign intenable_clk_enable_grp[p] = |intenable_clk_enable[pt.PIC_TOTAL_INT_PLUS1-1 : p*4] | io_clk_override;
-       rvoclkhdr intenable_c1_cgc   ( .en(intenable_clk_enable_grp[p]),  .l1clk(gw_clk[p]), .* );
-   end else begin :  CLK_GRPS
-       assign intenable_clk_enable_grp[p] = |intenable_clk_enable[p*4+3 : p*4] | io_clk_override;
-       rvoclkhdr intenable_c1_cgc   ( .en(intenable_clk_enable_grp[p]),  .l1clk(gw_clk[p]), .* );
-   end
-end
-
-
-
-genvar i ;
-for (i=0; i<pt.PIC_TOTAL_INT_PLUS1 ; i++) begin  : SETREG
-
- if (i > 0 ) begin : NON_ZERO_INT
-     assign intpriority_reg_we[i] =  waddr_intpriority_base_match & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign intpriority_reg_re[i] =  raddr_intpriority_base_match & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign intenable_reg_we[i]   =  waddr_intenable_base_match   & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign intenable_reg_re[i]   =  raddr_intenable_base_match   & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign gw_config_reg_we[i]   =  waddr_config_gw_base_match   & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff;
-     assign gw_config_reg_re[i]   =  raddr_config_gw_base_match   & (picm_raddr_ff[NUM_LEVELS+1:2] == i) & picm_rden_ff;
-
-     assign gw_clear_reg_we[i]    =  addr_clear_gw_base_match     & (picm_waddr_ff[NUM_LEVELS+1:2] == i) & picm_wren_ff ;
-
-     rvdffs #(INTPRIORITY_BITS) intpriority_ff  (.*, .en( intpriority_reg_we[i]), .din (picm_wr_data_ff[INTPRIORITY_BITS-1:0]), .dout(intpriority_reg[i]), .clk(pic_pri_c1_clk));
-     rvdffs #(1)                 intenable_ff   (.*, .en( intenable_reg_we[i]),   .din (picm_wr_data_ff[0]),                    .dout(intenable_reg[i]),   .clk(pic_int_c1_clk));
-
-     assign intenable_clk_enable[i]  =  gw_config_reg[i][1] | intenable_reg_we[i] | intenable_reg[i] | gw_clear_reg_we[i] ;
-
-     rvsyncss_fpga  #(1) sync_inst
-     (
-      .gw_clk      (gw_clk[i/4]),
-      .rawclk      (clk),
-      .clken       (intenable_clk_enable_grp[i/4]),
-      .dout        (extintsrc_req_sync[i]),
-      .din         (extintsrc_req[i]),
-      .*) ;
-
-
-
-//     if (GW_CONFIG[i]) begin
-
-        rvdffs #(2)                 gw_config_ff   (.*, .en( gw_config_reg_we[i]),   .din (picm_wr_data_ff[1:0]),                  .dout(gw_config_reg[i]),   .clk(gw_config_c1_clk));
-
-        eb1_configurable_gw config_gw_inst(.*,
-                                            .gw_clk(gw_clk[i/4]),
-                                            .rawclk(clk),
-                                            .clken (intenable_clk_enable_grp[i/4]),
-                                            .extintsrc_req_sync(extintsrc_req_sync[i]) ,
-                                            .meigwctrl_polarity(gw_config_reg[i][0]) ,
-                                            .meigwctrl_type(gw_config_reg[i][1]) ,
-                                            .meigwclr(gw_clear_reg_we[i]) ,
-                                            .extintsrc_req_config(extintsrc_req_gw[i])
-                                            );
-
- end else begin : INT_ZERO
-     assign intpriority_reg_we[i] =  1'b0 ;
-     assign intpriority_reg_re[i] =  1'b0 ;
-     assign intenable_reg_we[i]   =  1'b0 ;
-     assign intenable_reg_re[i]   =  1'b0 ;
-
-     assign gw_config_reg_we[i]   =  1'b0 ;
-     assign gw_config_reg_re[i]   =  1'b0 ;
-     assign gw_clear_reg_we[i]    =  1'b0 ;
-
-     assign gw_config_reg[i]    = '0 ;
-
-     assign intpriority_reg[i] = {INTPRIORITY_BITS{1'b0}} ;
-     assign intenable_reg[i]   = 1'b0 ;
-     assign extintsrc_req_gw[i] = 1'b0 ;
-     assign extintsrc_req_sync[i]    = 1'b0 ;
-     assign intenable_clk_enable[i] = 1'b0;
- end
-
-
-    assign intpriority_reg_inv[i] =  intpriord ? ~intpriority_reg[i] : intpriority_reg[i] ;
-
-    assign intpend_w_prior_en[i]  =  {INTPRIORITY_BITS{(extintsrc_req_gw[i] & intenable_reg[i])}} & intpriority_reg_inv[i] ;
-    assign intpend_id[i]          =  i ;
-end
-
-
-        assign pl_in[INTPRIORITY_BITS-1:0]                  =      selected_int_priority[INTPRIORITY_BITS-1:0] ;
-
-
- genvar l, m , j, k;
-
-if (pt.PIC_2CYCLE == 1) begin : genblock
-        logic [NUM_LEVELS/2:0] [pt.PIC_TOTAL_INT_PLUS1+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en;
-        logic [NUM_LEVELS/2:0] [pt.PIC_TOTAL_INT_PLUS1+2:0] [ID_BITS-1:0]          level_intpend_id;
-        logic [NUM_LEVELS:NUM_LEVELS/2] [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] [INTPRIORITY_BITS-1:0] levelx_intpend_w_prior_en;
-        logic [NUM_LEVELS:NUM_LEVELS/2] [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] [ID_BITS-1:0]          levelx_intpend_id;
-
-        assign level_intpend_w_prior_en[0][pt.PIC_TOTAL_INT_PLUS1+2:0] = {4'b0,4'b0,4'b0,intpend_w_prior_en[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-        assign level_intpend_id[0][pt.PIC_TOTAL_INT_PLUS1+2:0]         = {8'b0,8'b0,8'b0,intpend_id[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-        logic [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0] [INTPRIORITY_BITS-1:0] l2_intpend_w_prior_en_ff;
-        logic [(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0] [ID_BITS-1:0]          l2_intpend_id_ff;
-
-        assign levelx_intpend_w_prior_en[NUM_LEVELS/2][(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0] = {{1*INTPRIORITY_BITS{1'b0}},l2_intpend_w_prior_en_ff[(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0]} ;
-        assign levelx_intpend_id[NUM_LEVELS/2][(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2))+1:0]         = {{1*ID_BITS{1'b1}},l2_intpend_id_ff[(pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2)):0]} ;
-///  Do the prioritization of the interrupts here  ////////////
- for (l=0; l<NUM_LEVELS/2 ; l++) begin : TOP_LEVEL
-    for (m=0; m<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1)) ; m++) begin : COMPARE
-       if ( m == (pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1))) begin
-            assign level_intpend_w_prior_en[l+1][m+1] = '0 ;
-            assign level_intpend_id[l+1][m+1]         = '0 ;
-       end
-       eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l1 (
-                      .a_id(level_intpend_id[l][2*m]),
-                      .a_priority(level_intpend_w_prior_en[l][2*m]),
-                      .b_id(level_intpend_id[l][2*m+1]),
-                      .b_priority(level_intpend_w_prior_en[l][2*m+1]),
-                      .out_id(level_intpend_id[l+1][m]),
-                      .out_priority(level_intpend_w_prior_en[l+1][m])) ;
-
-    end
- end
-
-        for (i=0; i<=pt.PIC_TOTAL_INT_PLUS1/2**(NUM_LEVELS/2) ; i++) begin : MIDDLE_FLOPS
-          rvdff #(INTPRIORITY_BITS) leveb1_intpend_prior_reg  (.*, .din (level_intpend_w_prior_en[NUM_LEVELS/2][i]), .dout(l2_intpend_w_prior_en_ff[i]),  .clk(free_clk));
-          rvdff #(ID_BITS)          leveb1_intpend_id_reg     (.*, .din (level_intpend_id[NUM_LEVELS/2][i]),         .dout(l2_intpend_id_ff[i]),          .clk(free_clk));
-        end
-
- for (j=NUM_LEVELS/2; j<NUM_LEVELS ; j++) begin : BOT_LEVELS
-    for (k=0; k<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(j+1)) ; k++) begin : COMPARE
-       if ( k == (pt.PIC_TOTAL_INT_PLUS1)/(2**(j+1))) begin
-            assign levelx_intpend_w_prior_en[j+1][k+1] = '0 ;
-            assign levelx_intpend_id[j+1][k+1]         = '0 ;
-       end
-            eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                        .INTPRIORITY_BITS(INTPRIORITY_BITS))
-                 cmp_l1 (
-                        .a_id(levelx_intpend_id[j][2*k]),
-                        .a_priority(levelx_intpend_w_prior_en[j][2*k]),
-                        .b_id(levelx_intpend_id[j][2*k+1]),
-                        .b_priority(levelx_intpend_w_prior_en[j][2*k+1]),
-                        .out_id(levelx_intpend_id[j+1][k]),
-                        .out_priority(levelx_intpend_w_prior_en[j+1][k])) ;
-    end
-  end
-        assign claimid_in[ID_BITS-1:0]                      =      levelx_intpend_id[NUM_LEVELS][0] ;   // This is the last level output
-        assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      levelx_intpend_w_prior_en[NUM_LEVELS][0] ;
-end
-else begin : genblock
-
-        logic [NUM_LEVELS:0] [pt.PIC_TOTAL_INT_PLUS1+1:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en;
-        logic [NUM_LEVELS:0] [pt.PIC_TOTAL_INT_PLUS1+1:0] [ID_BITS-1:0]          level_intpend_id;
-
-        assign level_intpend_w_prior_en[0][pt.PIC_TOTAL_INT_PLUS1+1:0] = {{2*INTPRIORITY_BITS{1'b0}},intpend_w_prior_en[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-        assign level_intpend_id[0][pt.PIC_TOTAL_INT_PLUS1+1:0] = {{2*ID_BITS{1'b1}},intpend_id[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-///  Do the prioritization of the interrupts here  ////////////
-// genvar l, m , j, k;  already declared outside ifdef
- for (l=0; l<NUM_LEVELS ; l++) begin : LEVEL
-    for (m=0; m<=(pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1)) ; m++) begin : COMPARE
-       if ( m == (pt.PIC_TOTAL_INT_PLUS1)/(2**(l+1))) begin
-            assign level_intpend_w_prior_en[l+1][m+1] = '0 ;
-            assign level_intpend_id[l+1][m+1]         = '0 ;
-       end
-       eb1_cmp_and_mux  #(.ID_BITS(ID_BITS),
-                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l1 (
-                      .a_id(level_intpend_id[l][2*m]),
-                      .a_priority(level_intpend_w_prior_en[l][2*m]),
-                      .b_id(level_intpend_id[l][2*m+1]),
-                      .b_priority(level_intpend_w_prior_en[l][2*m+1]),
-                      .out_id(level_intpend_id[l+1][m]),
-                      .out_priority(level_intpend_w_prior_en[l+1][m])) ;
-
-    end
- end
-        assign claimid_in[ID_BITS-1:0]                      =      level_intpend_id[NUM_LEVELS][0] ;   // This is the last level output
-        assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      level_intpend_w_prior_en[NUM_LEVELS][0] ;
-
-end
-
-
-
-///////////////////////////////////////////////////////////////////////
-// Config Reg`
-///////////////////////////////////////////////////////////////////////
-assign config_reg_we               =  waddr_config_pic_match & picm_wren_ff;
-assign config_reg_re               =  raddr_config_pic_match & picm_rden_ff;
-
-assign config_reg_in  =  picm_wr_data_ff[0] ;   //
-rvdffs #(1) config_reg_ff  (.*, .clk(free_clk), .en(config_reg_we), .din (config_reg_in), .dout(config_reg));
-
-assign intpriord  = config_reg ;
-
-
-
-//////////////////////////////////////////////////////////////////////////
-// Send the interrupt to the core if it is above the thresh-hold
-//////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////
-/// ClaimId  Reg and Corresponding PL
-///////////////////////////////////////////////////////////
-//
-assign pl_in_q[INTPRIORITY_BITS-1:0] = intpriord ? ~pl_in : pl_in ;
-rvdff #(ID_BITS)          claimid_ff  (.*,  .din (claimid_in[ID_BITS-1:00]),     .dout(claimid[ID_BITS-1:00]),    .clk(free_clk));
-rvdff  #(INTPRIORITY_BITS) pl_ff      (.*, .din (pl_in_q[INTPRIORITY_BITS-1:0]), .dout(pl[INTPRIORITY_BITS-1:0]), .clk(free_clk));
-
-logic [INTPRIORITY_BITS-1:0] meipt_inv , meicurpl_inv ;
-assign meipt_inv[INTPRIORITY_BITS-1:0]    = intpriord ? ~meipt[INTPRIORITY_BITS-1:0]    : meipt[INTPRIORITY_BITS-1:0] ;
-assign meicurpl_inv[INTPRIORITY_BITS-1:0] = intpriord ? ~meicurpl[INTPRIORITY_BITS-1:0] : meicurpl[INTPRIORITY_BITS-1:0] ;
-assign mexintpend_in = (( selected_int_priority[INTPRIORITY_BITS-1:0] > meipt_inv[INTPRIORITY_BITS-1:0]) &
-                        ( selected_int_priority[INTPRIORITY_BITS-1:0] > meicurpl_inv[INTPRIORITY_BITS-1:0]) );
-rvdff #(1) mexintpend_ff  (.*, .clk(free_clk), .din (mexintpend_in), .dout(mexintpend));
-
-assign maxint[INTPRIORITY_BITS-1:0]      =  intpriord ? 0 : 15 ;
-assign mhwakeup_in = ( pl_in_q[INTPRIORITY_BITS-1:0] == maxint) ;
-rvdff #(1) wake_up_ff  (.*, .clk(free_clk), .din (mhwakeup_in), .dout(mhwakeup));
-
-
-
-
-
-//////////////////////////////////////////////////////////////////////////
-//  Reads of register.
-//  1- intpending
-//////////////////////////////////////////////////////////////////////////
-
-assign intpend_reg_read     =  addr_intpend_base_match      & picm_rden_ff ;
-assign intpriority_reg_read =  raddr_intpriority_base_match & picm_rden_ff;
-assign intenable_reg_read   =  raddr_intenable_base_match   & picm_rden_ff;
-assign gw_config_reg_read   =  raddr_config_gw_base_match   & picm_rden_ff;
-
-assign intpend_reg_extended[INTPEND_SIZE-1:0]  = {{INTPEND_SIZE-pt.PIC_TOTAL_INT_PLUS1{1'b0}},extintsrc_req_gw[pt.PIC_TOTAL_INT_PLUS1-1:0]} ;
-
-   for (i=0; i<(INT_GRPS); i++) begin
-            assign intpend_rd_part_out[i] =  (({32{intpend_reg_read & picm_raddr_ff[5:2] == i}}) & intpend_reg_extended[((32*i)+31):(32*i)]) ;
-   end
-
-   always_comb begin : INTPEND_RD
-         intpend_rd_out =  '0 ;
-         for (int i=0; i<INT_GRPS; i++) begin
-               intpend_rd_out |=  intpend_rd_part_out[i] ;
-         end
-   end
-
-   always_comb begin : INTEN_RD
-         intenable_rd_out =  '0 ;
-         intpriority_rd_out =  '0 ;
-         gw_config_rd_out =  '0 ;
-         for (int i=0; i<pt.PIC_TOTAL_INT_PLUS1; i++) begin
-              if (intenable_reg_re[i]) begin
-               intenable_rd_out    =  intenable_reg[i]  ;
-              end
-              if (intpriority_reg_re[i]) begin
-               intpriority_rd_out  =  intpriority_reg[i] ;
-              end
-              if (gw_config_reg_re[i]) begin
-               gw_config_rd_out  =  gw_config_reg[i] ;
-              end
-         end
-   end
-
-
- assign picm_rd_data_in[31:0] = ({32{intpend_reg_read      }} &   intpend_rd_out                                                    ) |
-                                ({32{intpriority_reg_read  }} &  {{32-INTPRIORITY_BITS{1'b0}}, intpriority_rd_out                 } ) |
-                                ({32{intenable_reg_read    }} &  {31'b0 , intenable_rd_out                                        } ) |
-                                ({32{gw_config_reg_read    }} &  {30'b0 , gw_config_rd_out                                        } ) |
-                                ({32{config_reg_re         }} &  {31'b0 , config_reg                                              } ) |
-                                ({32{picm_mken_ff & mask[3]}} &  {30'b0 , 2'b11                                                   } ) |
-                                ({32{picm_mken_ff & mask[2]}} &  {31'b0 , 1'b1                                                    } ) |
-                                ({32{picm_mken_ff & mask[1]}} &  {28'b0 , 4'b1111                                                 } ) |
-                                ({32{picm_mken_ff & mask[0]}} &   32'b0                                                             ) ;
-
-
-assign picm_rd_data[31:0] = picm_bypass_ff ? picm_wr_data_ff[31:0] : picm_rd_data_in[31:0] ;
-
-logic [14:0] address;
-
-assign address[14:0] = picm_raddr_ff[14:0];
-
-// mask[3:0] = { 4'b1000 - 30b mask,4'b0100 - 31b mask, 4'b0010 - 28b mask, 4'b0001 - 32b mask }
-always_comb begin
-  case (address[14:0])
-    15'b011000000000000 : mask[3:0] = 4'b0100;
-    15'b100000000000100 : mask[3:0] = 4'b1000;
-    15'b100000000001000 : mask[3:0] = 4'b1000;
-    15'b100000000001100 : mask[3:0] = 4'b1000;
-    15'b100000000010000 : mask[3:0] = 4'b1000;
-    15'b100000000010100 : mask[3:0] = 4'b1000;
-    15'b100000000011000 : mask[3:0] = 4'b1000;
-    15'b100000000011100 : mask[3:0] = 4'b1000;
-    15'b100000000100000 : mask[3:0] = 4'b1000;
-    15'b100000000100100 : mask[3:0] = 4'b1000;
-    15'b100000000101000 : mask[3:0] = 4'b1000;
-    15'b100000000101100 : mask[3:0] = 4'b1000;
-    15'b100000000110000 : mask[3:0] = 4'b1000;
-    15'b100000000110100 : mask[3:0] = 4'b1000;
-    15'b100000000111000 : mask[3:0] = 4'b1000;
-    15'b100000000111100 : mask[3:0] = 4'b1000;
-    15'b100000001000000 : mask[3:0] = 4'b1000;
-    15'b100000001000100 : mask[3:0] = 4'b1000;
-    15'b100000001001000 : mask[3:0] = 4'b1000;
-    15'b100000001001100 : mask[3:0] = 4'b1000;
-    15'b100000001010000 : mask[3:0] = 4'b1000;
-    15'b100000001010100 : mask[3:0] = 4'b1000;
-    15'b100000001011000 : mask[3:0] = 4'b1000;
-    15'b100000001011100 : mask[3:0] = 4'b1000;
-    15'b100000001100000 : mask[3:0] = 4'b1000;
-    15'b100000001100100 : mask[3:0] = 4'b1000;
-    15'b100000001101000 : mask[3:0] = 4'b1000;
-    15'b100000001101100 : mask[3:0] = 4'b1000;
-    15'b100000001110000 : mask[3:0] = 4'b1000;
-    15'b100000001110100 : mask[3:0] = 4'b1000;
-    15'b100000001111000 : mask[3:0] = 4'b1000;
-    15'b100000001111100 : mask[3:0] = 4'b1000;
-    15'b010000000000100 : mask[3:0] = 4'b0100;
-    15'b010000000001000 : mask[3:0] = 4'b0100;
-    15'b010000000001100 : mask[3:0] = 4'b0100;
-    15'b010000000010000 : mask[3:0] = 4'b0100;
-    15'b010000000010100 : mask[3:0] = 4'b0100;
-    15'b010000000011000 : mask[3:0] = 4'b0100;
-    15'b010000000011100 : mask[3:0] = 4'b0100;
-    15'b010000000100000 : mask[3:0] = 4'b0100;
-    15'b010000000100100 : mask[3:0] = 4'b0100;
-    15'b010000000101000 : mask[3:0] = 4'b0100;
-    15'b010000000101100 : mask[3:0] = 4'b0100;
-    15'b010000000110000 : mask[3:0] = 4'b0100;
-    15'b010000000110100 : mask[3:0] = 4'b0100;
-    15'b010000000111000 : mask[3:0] = 4'b0100;
-    15'b010000000111100 : mask[3:0] = 4'b0100;
-    15'b010000001000000 : mask[3:0] = 4'b0100;
-    15'b010000001000100 : mask[3:0] = 4'b0100;
-    15'b010000001001000 : mask[3:0] = 4'b0100;
-    15'b010000001001100 : mask[3:0] = 4'b0100;
-    15'b010000001010000 : mask[3:0] = 4'b0100;
-    15'b010000001010100 : mask[3:0] = 4'b0100;
-    15'b010000001011000 : mask[3:0] = 4'b0100;
-    15'b010000001011100 : mask[3:0] = 4'b0100;
-    15'b010000001100000 : mask[3:0] = 4'b0100;
-    15'b010000001100100 : mask[3:0] = 4'b0100;
-    15'b010000001101000 : mask[3:0] = 4'b0100;
-    15'b010000001101100 : mask[3:0] = 4'b0100;
-    15'b010000001110000 : mask[3:0] = 4'b0100;
-    15'b010000001110100 : mask[3:0] = 4'b0100;
-    15'b010000001111000 : mask[3:0] = 4'b0100;
-    15'b010000001111100 : mask[3:0] = 4'b0100;
-    15'b000000000000100 : mask[3:0] = 4'b0010;
-    15'b000000000001000 : mask[3:0] = 4'b0010;
-    15'b000000000001100 : mask[3:0] = 4'b0010;
-    15'b000000000010000 : mask[3:0] = 4'b0010;
-    15'b000000000010100 : mask[3:0] = 4'b0010;
-    15'b000000000011000 : mask[3:0] = 4'b0010;
-    15'b000000000011100 : mask[3:0] = 4'b0010;
-    15'b000000000100000 : mask[3:0] = 4'b0010;
-    15'b000000000100100 : mask[3:0] = 4'b0010;
-    15'b000000000101000 : mask[3:0] = 4'b0010;
-    15'b000000000101100 : mask[3:0] = 4'b0010;
-    15'b000000000110000 : mask[3:0] = 4'b0010;
-    15'b000000000110100 : mask[3:0] = 4'b0010;
-    15'b000000000111000 : mask[3:0] = 4'b0010;
-    15'b000000000111100 : mask[3:0] = 4'b0010;
-    15'b000000001000000 : mask[3:0] = 4'b0010;
-    15'b000000001000100 : mask[3:0] = 4'b0010;
-    15'b000000001001000 : mask[3:0] = 4'b0010;
-    15'b000000001001100 : mask[3:0] = 4'b0010;
-    15'b000000001010000 : mask[3:0] = 4'b0010;
-    15'b000000001010100 : mask[3:0] = 4'b0010;
-    15'b000000001011000 : mask[3:0] = 4'b0010;
-    15'b000000001011100 : mask[3:0] = 4'b0010;
-    15'b000000001100000 : mask[3:0] = 4'b0010;
-    15'b000000001100100 : mask[3:0] = 4'b0010;
-    15'b000000001101000 : mask[3:0] = 4'b0010;
-    15'b000000001101100 : mask[3:0] = 4'b0010;
-    15'b000000001110000 : mask[3:0] = 4'b0010;
-    15'b000000001110100 : mask[3:0] = 4'b0010;
-    15'b000000001111000 : mask[3:0] = 4'b0010;
-    15'b000000001111100 : mask[3:0] = 4'b0010;
-    default           : mask[3:0] = 4'b0001;
-  endcase
-end
-
-endmodule
-
-
-module eb1_cmp_and_mux #(parameter ID_BITS=8,
-                               INTPRIORITY_BITS = 4)
-                    (
-                        input  logic [ID_BITS-1:0]       a_id,
-                        input  logic [INTPRIORITY_BITS-1:0] a_priority,
-
-                        input  logic [ID_BITS-1:0]       b_id,
-                        input  logic [INTPRIORITY_BITS-1:0] b_priority,
-
-                        output logic [ID_BITS-1:0]       out_id,
-                        output logic [INTPRIORITY_BITS-1:0] out_priority
-
-                    );
-
-logic   a_is_lt_b ;
-
-assign  a_is_lt_b  = ( a_priority[INTPRIORITY_BITS-1:0] < b_priority[INTPRIORITY_BITS-1:0] ) ;
-
-assign  out_id[ID_BITS-1:0]                = a_is_lt_b ? b_id[ID_BITS-1:0] :
-                                                         a_id[ID_BITS-1:0] ;
-assign  out_priority[INTPRIORITY_BITS-1:0] = a_is_lt_b ? b_priority[INTPRIORITY_BITS-1:0] :
-                                                         a_priority[INTPRIORITY_BITS-1:0] ;
-endmodule // cmp_and_mux
-
-
-module eb1_configurable_gw (
-                             input logic gw_clk,
-                             input logic rawclk,
-                             input logic clken,
-                             input logic rst_l,
-                             input logic extintsrc_req_sync ,
-                             input logic meigwctrl_polarity ,
-                             input logic meigwctrl_type ,
-                             input logic meigwclr ,
-
-                             output logic extintsrc_req_config
-                            );
-
-
-  logic  gw_int_pending_in , gw_int_pending ;
-
-  assign gw_int_pending_in =  (extintsrc_req_sync ^ meigwctrl_polarity) | (gw_int_pending & ~meigwclr) ;
-  rvdff_fpga #(1) int_pend_ff        (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (gw_int_pending_in),     .dout(gw_int_pending));
-
-
-  assign extintsrc_req_config =  meigwctrl_type ? ((extintsrc_req_sync ^  meigwctrl_polarity) | gw_int_pending) : (extintsrc_req_sync ^  meigwctrl_polarity) ;
-
-endmodule // configurable_gw
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AHB to AXI4 Bridge
-// Comments:
-//
-//********************************************************************************
-module ahb_to_axi4
-import eb1_pkg::*;
-#(
-   TAG = 1,
-   parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-//   ,TAG  = 1)
-(
-   input                   clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-
-   // AXI signals
-   // AXI Write Channels
-   output logic            axi_awvalid,
-   input  logic            axi_awready,
-   output logic [TAG-1:0]  axi_awid,
-   output logic [31:0]     axi_awaddr,
-   output logic [2:0]      axi_awsize,
-   output logic [2:0]      axi_awprot,
-   output logic [7:0]      axi_awlen,
-   output logic [1:0]      axi_awburst,
-
-   output logic            axi_wvalid,
-   input  logic            axi_wready,
-   output logic [63:0]     axi_wdata,
-   output logic [7:0]      axi_wstrb,
-   output logic            axi_wlast,
-
-   input  logic            axi_bvalid,
-   output logic            axi_bready,
-   input  logic [1:0]      axi_bresp,
-   input  logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   output logic            axi_arvalid,
-   input  logic            axi_arready,
-   output logic [TAG-1:0]  axi_arid,
-   output logic [31:0]     axi_araddr,
-   output logic [2:0]      axi_arsize,
-   output logic [2:0]      axi_arprot,
-   output logic [7:0]      axi_arlen,
-   output logic [1:0]      axi_arburst,
-
-   input  logic            axi_rvalid,
-   output logic            axi_rready,
-   input  logic [TAG-1:0]  axi_rid,
-   input  logic [63:0]     axi_rdata,
-   input  logic [1:0]      axi_rresp,
-
-   // AHB-Lite signals
-   input logic [31:0]      ahb_haddr,     // ahb bus address
-   input logic [2:0]       ahb_hburst,    // tied to 0
-   input logic             ahb_hmastlock, // tied to 0
-   input logic [3:0]       ahb_hprot,     // tied to 4'b0011
-   input logic [2:0]       ahb_hsize,     // size of bus transaction (possible values 0,1,2,3)
-   input logic [1:0]       ahb_htrans,    // Transaction type (possible values 0,2 only right now)
-   input logic             ahb_hwrite,    // ahb bus write
-   input logic [63:0]      ahb_hwdata,    // ahb bus write data
-   input logic             ahb_hsel,      // this slave was selected
-   input logic             ahb_hreadyin,  // previous hready was accepted or not
-
-   output logic [63:0]      ahb_hrdata,      // ahb bus read data
-   output logic             ahb_hreadyout,   // slave ready to accept transaction
-   output logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   logic [7:0]       master_wstrb;
-
- typedef enum logic [1:0] {   IDLE   = 2'b00,    // Nothing in the buffer. No commands yet recieved
-                              WR     = 2'b01,    // Write Command recieved
-                              RD     = 2'b10,    // Read Command recieved
-                              PEND   = 2'b11     // Waiting on Read Data from core
-                            } state_t;
-   state_t      buf_state, buf_nxtstate;
-   logic        buf_state_en;
-
-   // Buffer signals (one entry buffer)
-   logic                    buf_read_error_in, buf_read_error;
-   logic [63:0]             buf_rdata;
-
-   logic                    ahb_hready;
-   logic                    ahb_hready_q;
-   logic [1:0]              ahb_htrans_in, ahb_htrans_q;
-   logic [2:0]              ahb_hsize_q;
-   logic                    ahb_hwrite_q;
-   logic [31:0]             ahb_haddr_q;
-   logic [63:0]             ahb_hwdata_q;
-   logic                    ahb_hresp_q;
-
-    //Miscellaneous signals
-   logic                    ahb_addr_in_dccm, ahb_addr_in_iccm, ahb_addr_in_pic;
-   logic                    ahb_addr_in_dccm_region_nc, ahb_addr_in_iccm_region_nc, ahb_addr_in_pic_region_nc;
-   // signals needed for the read data coming back from the core and to block any further commands as AHB is a blocking bus
-   logic                    buf_rdata_en;
-
-   logic                    ahb_addr_clk_en, buf_rdata_clk_en;
-   logic                    bus_clk, ahb_addr_clk, buf_rdata_clk;
-   // Command buffer is the holding station where we convert to AXI and send to core
-   logic                    cmdbuf_wr_en, cmdbuf_rst;
-   logic                    cmdbuf_full;
-   logic                    cmdbuf_vld, cmdbuf_write;
-   logic [1:0]              cmdbuf_size;
-   logic [7:0]              cmdbuf_wstrb;
-   logic [31:0]             cmdbuf_addr;
-   logic [63:0]             cmdbuf_wdata;
-
-// FSM to control the bus states and when to block the hready and load the command buffer
-   always_comb begin
-      buf_nxtstate      = IDLE;
-      buf_state_en      = 1'b0;
-      buf_rdata_en      = 1'b0;              // signal to load the buffer when the core sends read data back
-      buf_read_error_in = 1'b0;              // signal indicating that an error came back with the read from the core
-      cmdbuf_wr_en      = 1'b0;              // all clear from the gasket to load the buffer with the command for reads, command/dat for writes
-      case (buf_state)
-         IDLE: begin  // No commands recieved
-                  buf_nxtstate      = ahb_hwrite ? WR : RD;
-                  buf_state_en      = ahb_hready & ahb_htrans[1] & ahb_hsel;                 // only transition on a valid hrtans
-          end
-         WR: begin // Write command recieved last cycle
-                  buf_nxtstate      = (ahb_hresp | (ahb_htrans[1:0] == 2'b0) | ~ahb_hsel) ? IDLE : ahb_hwrite  ? WR : RD;
-                  buf_state_en      = (~cmdbuf_full | ahb_hresp) ;
-                  cmdbuf_wr_en      = ~cmdbuf_full & ~(ahb_hresp | ((ahb_htrans[1:0] == 2'b01) & ahb_hsel));   // Dont send command to the buffer in case of an error or when the master is not ready with the data now.
-         end
-         RD: begin // Read command recieved last cycle.
-                 buf_nxtstate      = ahb_hresp ? IDLE :PEND;                                       // If error go to idle, else wait for read data
-                 buf_state_en      = (~cmdbuf_full | ahb_hresp);                                   // only when command can go, or if its an error
-                 cmdbuf_wr_en      = ~ahb_hresp & ~cmdbuf_full;                                    // send command only when no error
-         end
-         PEND: begin // Read Command has been sent. Waiting on Data.
-                 buf_nxtstate      = IDLE;                                                          // go back for next command and present data next cycle
-                 buf_state_en      = axi_rvalid & ~cmdbuf_write;                                    // read data is back
-                 buf_rdata_en      = buf_state_en;                                                  // buffer the read data coming back from core
-                 buf_read_error_in = buf_state_en & |axi_rresp[1:0];                                // buffer error flag if return has Error ( ECC )
-         end
-     endcase
-   end // always_comb begin
-
-    rvdffs_fpga #($bits(state_t)) state_reg (.*, .din(buf_nxtstate), .dout({buf_state}), .en(buf_state_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk));
-
-   assign master_wstrb[7:0]   = ({8{ahb_hsize_q[2:0] == 3'b0}}  & (8'b1    << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b1}}  & (8'b11   << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b10}} & (8'b1111 << ahb_haddr_q[2:0])) |
-                                ({8{ahb_hsize_q[2:0] == 3'b11}} & 8'b1111_1111);
-
-   // AHB signals
-   assign ahb_hreadyout       = ahb_hresp ? (ahb_hresp_q & ~ahb_hready_q) :
-                                         ((~cmdbuf_full | (buf_state == IDLE)) & ~(buf_state == RD | buf_state == PEND)  & ~buf_read_error);
-
-   assign ahb_hready          = ahb_hreadyout & ahb_hreadyin;
-   assign ahb_htrans_in[1:0]  = {2{ahb_hsel}} & ahb_htrans[1:0];
-   assign ahb_hrdata[63:0]    = buf_rdata[63:0];
-   assign ahb_hresp        = ((ahb_htrans_q[1:0] != 2'b0) & (buf_state != IDLE)  &
-
-                             ((~(ahb_addr_in_dccm | ahb_addr_in_iccm)) |                                                                                   // request not for ICCM or DCCM
-                             ((ahb_addr_in_iccm | (ahb_addr_in_dccm &  ahb_hwrite_q)) & ~((ahb_hsize_q[1:0] == 2'b10) | (ahb_hsize_q[1:0] == 2'b11))) |    // ICCM Rd/Wr OR DCCM Wr not the right size
-                             ((ahb_hsize_q[2:0] == 3'h1) & ahb_haddr_q[0])   |                                                                             // HW size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h2) & (|ahb_haddr_q[1:0])) |                                                                          // W size but unaligned
-                             ((ahb_hsize_q[2:0] == 3'h3) & (|ahb_haddr_q[2:0])))) |                                                                        // DW size but unaligned
-                             buf_read_error |                                                                                                              // Read ECC error
-                             (ahb_hresp_q & ~ahb_hready_q);
-
-   // Buffer signals - needed for the read data and ECC error response
-   rvdff_fpga  #(.WIDTH(64)) buf_rdata_ff     (.din(axi_rdata[63:0]),   .dout(buf_rdata[63:0]), .clk(buf_rdata_clk), .clken(buf_rdata_clk_en), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))  buf_read_error_ff(.din(buf_read_error_in), .dout(buf_read_error),  .clk(bus_clk),       .clken(bus_clk_en),       .rawclk(clk), .*);          // buf_read_error will be high only one cycle
-
-   // All the Master signals are captured before presenting it to the command buffer. We check for Hresp before sending it to the cmd buffer.
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),          .dout(ahb_hresp_q),       .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),         .dout(ahb_hready_q),      .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans_in[1:0]), .dout(ahb_htrans_q[1:0]), .clk(bus_clk),      .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(3))  hsize_ff  (.din(ahb_hsize[2:0]),     .dout(ahb_hsize_q[2:0]),  .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),         .dout(ahb_hwrite_q),      .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(32)) haddr_ff  (.din(ahb_haddr[31:0]),    .dout(ahb_haddr_q[31:0]), .clk(ahb_addr_clk), .clken(ahb_addr_clk_en), .rawclk(clk), .*);
-
-   // Address check  dccm
-   rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                  .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_dccm),
-      .in_region(ahb_addr_in_dccm_region_nc)
-   );
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE == 1) begin: GenICCM
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(ahb_haddr_q[31:0]),
-         .in_range(ahb_addr_in_iccm),
-         .in_region(ahb_addr_in_iccm_region_nc)
-      );
-   end else begin: GenNoICCM
-      assign ahb_addr_in_iccm = '0;
-      assign ahb_addr_in_iccm_region_nc = '0;
-   end
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(ahb_haddr_q[31:0]),
-      .in_range(ahb_addr_in_pic),
-      .in_region(ahb_addr_in_pic_region_nc)
-   );
-
-   // Command Buffer - Holding for the commands to be sent for the AXI. It will be converted to the AXI signals.
-   assign cmdbuf_rst         = (((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)) & ~cmdbuf_wr_en) | (ahb_hresp & ~cmdbuf_write);
-   assign cmdbuf_full        = (cmdbuf_vld & ~((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)));
-
-   rvdffsc_fpga #(.WIDTH(1))  cmdbuf_vldff      (.din(1'b1),              .dout(cmdbuf_vld),         .en(cmdbuf_wr_en), .clear(cmdbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(1))  cmdbuf_writeff    (.din(ahb_hwrite_q),      .dout(cmdbuf_write),       .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(2))  cmdbuf_sizeff     (.din(ahb_hsize_q[1:0]),  .dout(cmdbuf_size[1:0]),   .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))  cmdbuf_wstrbff    (.din(master_wstrb[7:0]), .dout(cmdbuf_wstrb[7:0]),  .en(cmdbuf_wr_en),                     .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32)) cmdbuf_addrff     (.din(ahb_haddr_q[31:0]), .dout(cmdbuf_addr[31:0]),  .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffe       #(.WIDTH(64)) cmdbuf_wdataff    (.din(ahb_hwdata[63:0]),  .dout(cmdbuf_wdata[63:0]), .en(cmdbuf_wr_en & bus_clk_en),        .clk(clk), .*);
-
-   // AXI Write Command Channel
-   assign axi_awvalid           = cmdbuf_vld & cmdbuf_write;
-   assign axi_awid[TAG-1:0]     = '0;
-   assign axi_awaddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_awsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_awprot[2:0]       = 3'b0;
-   assign axi_awlen[7:0]        = '0;
-   assign axi_awburst[1:0]      = 2'b01;
-   // AXI Write Data Channel - This is tied to the command channel as we only write the command buffer once we have the data.
-   assign axi_wvalid            = cmdbuf_vld & cmdbuf_write;
-   assign axi_wdata[63:0]       = cmdbuf_wdata[63:0];
-   assign axi_wstrb[7:0]        = cmdbuf_wstrb[7:0];
-   assign axi_wlast             = 1'b1;
-  // AXI Write Response - Always ready. AHB does not require a write response.
-   assign axi_bready            = 1'b1;
-   // AXI Read Channels
-   assign axi_arvalid           = cmdbuf_vld & ~cmdbuf_write;
-   assign axi_arid[TAG-1:0]     = '0;
-   assign axi_araddr[31:0]      = cmdbuf_addr[31:0];
-   assign axi_arsize[2:0]       = {1'b0, cmdbuf_size[1:0]};
-   assign axi_arprot            = 3'b0;
-   assign axi_arlen[7:0]        = '0;
-   assign axi_arburst[1:0]      = 2'b01;
-   // AXI Read Response Channel - Always ready as AHB reads are blocking and the the buffer is available for the read coming back always.
-   assign axi_rready            = 1'b1;
-
-   // Clock header logic
-   assign ahb_addr_clk_en = bus_clk_en & (ahb_hready & ahb_htrans[1]);
-   assign buf_rdata_clk_en    = bus_clk_en & buf_rdata_en;
-
-   rvclkhdr bus_cgc       (.en(bus_clk_en),       .l1clk(bus_clk),       .*);
-   rvclkhdr ahb_addr_cgc  (.en(ahb_addr_clk_en),  .l1clk(ahb_addr_clk),  .*);
-   rvclkhdr buf_rdata_cgc (.en(buf_rdata_clk_en), .l1clk(buf_rdata_clk), .*);
-
-
-endmodule // ahb_to_axi4
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2018 MERL Corporation or it's affiliates.
-// 
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-// http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//------------------------------------------------------------------------------------
-//
-//  Copyright MERL, 2019
-//  Owner : Alex Grobman
-//  Description:  
-//                This module Synchronizes the signals between JTAG (TCK) and
-//                processor (Core_clk)
-//
-//-------------------------------------------------------------------------------------
-
-module dmi_jtag_to_core_sync (
-// JTAG signals
-input       rd_en,      // 1 bit  Read Enable from JTAG
-input       wr_en,      // 1 bit  Write enable from JTAG
-
-// Processor Signals
-input       rst_n,      // Core reset
-input       clk,        // Core clock
-
-output      reg_en,     // 1 bit  Write interface bit to Processor
-output      reg_wr_en   // 1 bit  Write enable to Processor
-);
-  
-wire        c_rd_en;
-wire        c_wr_en;
-reg [2:0]   rden, wren;
- 
-
-// Outputs
-assign reg_en    = c_wr_en | c_rd_en;
-assign reg_wr_en = c_wr_en;
-
-
-// synchronizers  
-always @ ( posedge clk or negedge rst_n) begin
-    if(!rst_n) begin
-        rden <= '0;
-        wren <= '0;
-    end
-    else begin
-        rden <= {rden[1:0], rd_en};
-        wren <= {wren[1:0], wr_en};
-    end
-end
-
-assign c_rd_en = rden[1] & ~rden[2];
-assign c_wr_en = wren[1] & ~wren[2];
- 
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Owner:
-// Function: AXI4 -> AHB Bridge
-// Comments:
-//
-//********************************************************************************
-module axi4_to_ahb
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-}
-,parameter TAG  = 1) (
-
-   input                   clk,
-   input                   free_clk,
-   input                   rst_l,
-   input                   scan_mode,
-   input                   bus_clk_en,
-   input                   clk_override,
-   input                   dec_tlu_force_halt,
-
-   // AXI signals
-   // AXI Write Channels
-   input  logic            axi_awvalid,
-   output logic            axi_awready,
-   input  logic [TAG-1:0]  axi_awid,
-   input  logic [31:0]     axi_awaddr,
-   input  logic [2:0]      axi_awsize,
-   input  logic [2:0]      axi_awprot,
-
-   input  logic            axi_wvalid,
-   output logic            axi_wready,
-   input  logic [63:0]     axi_wdata,
-   input  logic [7:0]      axi_wstrb,
-   input  logic            axi_wlast,
-
-   output logic            axi_bvalid,
-   input  logic            axi_bready,
-   output logic [1:0]      axi_bresp,
-   output logic [TAG-1:0]  axi_bid,
-
-   // AXI Read Channels
-   input  logic            axi_arvalid,
-   output logic            axi_arready,
-   input  logic [TAG-1:0]  axi_arid,
-   input  logic [31:0]     axi_araddr,
-   input  logic [2:0]      axi_arsize,
-   input  logic [2:0]      axi_arprot,
-
-   output logic            axi_rvalid,
-   input  logic            axi_rready,
-   output logic [TAG-1:0]  axi_rid,
-   output logic [63:0]     axi_rdata,
-   output logic [1:0]      axi_rresp,
-   output logic            axi_rlast,
-
-   // AHB-Lite signals
-   output logic [31:0]     ahb_haddr,       // ahb bus address
-   output logic [2:0]      ahb_hburst,      // tied to 0
-   output logic            ahb_hmastlock,   // tied to 0
-   output logic [3:0]      ahb_hprot,       // tied to 4'b0011
-   output logic [2:0]      ahb_hsize,       // size of bus transaction (possible values 0,1,2,3)
-   output logic [1:0]      ahb_htrans,      // Transaction type (possible values 0,2 only right now)
-   output logic            ahb_hwrite,      // ahb bus write
-   output logic [63:0]     ahb_hwdata,      // ahb bus write data
-
-   input logic [63:0]      ahb_hrdata,      // ahb bus read data
-   input logic             ahb_hready,      // slave ready to accept transaction
-   input logic             ahb_hresp        // slave response (high indicates erro)
-
-);
-
-   localparam ID   = 1;
-   localparam PRTY = 1;
-   typedef enum logic [2:0] {IDLE=3'b000, CMD_RD=3'b001, CMD_WR=3'b010, DATA_RD=3'b011, DATA_WR=3'b100, DONE=3'b101, STREAM_RD=3'b110, STREAM_ERR_RD=3'b111} state_t;
-   state_t buf_state, buf_nxtstate;
-
-   logic             slave_valid;
-   logic             slave_ready;
-   logic [TAG-1:0]   slave_tag;
-   logic [63:0]      slave_rdata;
-   logic [3:0]       slave_opc;
-
-   logic             wrbuf_en, wrbuf_data_en;
-   logic             wrbuf_cmd_sent, wrbuf_rst;
-   logic             wrbuf_vld;
-   logic             wrbuf_data_vld;
-   logic [TAG-1:0]   wrbuf_tag;
-   logic [2:0]       wrbuf_size;
-   logic [31:0]      wrbuf_addr;
-   logic [63:0]      wrbuf_data;
-   logic [7:0]       wrbuf_byteen;
-
-   logic             master_valid;
-   logic             master_ready;
-   logic [TAG-1:0]   master_tag;
-   logic [31:0]      master_addr;
-   logic [63:0]      master_wdata;
-   logic [2:0]       master_size;
-   logic [2:0]       master_opc;
-   logic [7:0]       master_byteen;
-
-   // Buffer signals (one entry buffer)
-   logic [31:0]                buf_addr;
-   logic [1:0]                 buf_size;
-   logic                       buf_write;
-   logic [7:0]                 buf_byteen;
-   logic                       buf_aligned;
-   logic [63:0]                buf_data;
-   logic [TAG-1:0]             buf_tag;
-
-   //Miscellaneous signals
-   logic                       buf_rst;
-   logic [TAG-1:0]             buf_tag_in;
-   logic [31:0]                buf_addr_in;
-   logic [7:0]                 buf_byteen_in;
-   logic [63:0]                buf_data_in;
-   logic                       buf_write_in;
-   logic                       buf_aligned_in;
-   logic [2:0]                 buf_size_in;
-
-   logic                       buf_state_en;
-   logic                       buf_wr_en;
-   logic                       buf_data_wr_en;
-   logic                       slvbuf_error_en;
-   logic                       wr_cmd_vld;
-
-   logic                       cmd_done_rst, cmd_done, cmd_doneQ;
-   logic                       trxn_done;
-   logic [2:0]                 buf_cmd_byte_ptr, buf_cmd_byte_ptrQ, buf_cmd_nxtbyte_ptr;
-   logic                       buf_cmd_byte_ptr_en;
-   logic                       found;
-
-   logic                       slave_valid_pre;
-   logic                       ahb_hready_q;
-   logic                       ahb_hresp_q;
-   logic [1:0]                 ahb_htrans_q;
-   logic                       ahb_hwrite_q;
-   logic [63:0]                ahb_hrdata_q;
-
-
-   logic                       slvbuf_write;
-   logic                       slvbuf_error;
-   logic [TAG-1:0]             slvbuf_tag;
-
-   logic                       slvbuf_error_in;
-   logic                       slvbuf_wr_en;
-   logic                       bypass_en;
-   logic                       rd_bypass_idle;
-
-   logic                       last_addr_en;
-   logic [31:0]                last_bus_addr;
-
-   // Clocks
-   logic                       buf_clken;
-   logic                       ahbm_data_clken;
-
-   logic                       buf_clk;
-   logic                       bus_clk;
-   logic                       ahbm_data_clk;
-
-   logic                       dec_tlu_force_halt_bus, dec_tlu_force_halt_bus_ns, dec_tlu_force_halt_bus_q;
-
-   // Function to get the length from byte enable
-   function automatic logic [1:0] get_write_size;
-      input logic [7:0] byteen;
-
-      logic [1:0]       size;
-
-      size[1:0] = (2'b11 & {2{(byteen[7:0] == 8'hff)}}) |
-                  (2'b10 & {2{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h0f))}}) |
-                  (2'b01 & {2{((byteen[7:0] == 8'hc0) | (byteen[7:0] == 8'h30) | (byteen[7:0] == 8'h0c) | (byteen[7:0] == 8'h03))}});
-
-      return size[1:0];
-   endfunction // get_write_size
-
-   // Function to get the length from byte enable
-   function automatic logic [2:0] get_write_addr;
-      input logic [7:0] byteen;
-
-      logic [2:0]       addr;
-
-      addr[2:0] = (3'h0 & {3{((byteen[7:0] == 8'hff) | (byteen[7:0] == 8'h0f) | (byteen[7:0] == 8'h03))}}) |
-                  (3'h2 & {3{(byteen[7:0] == 8'h0c)}})                                                     |
-                  (3'h4 & {3{((byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h03))}})                          |
-                  (3'h6 & {3{(byteen[7:0] == 8'hc0)}});
-
-      return addr[2:0];
-   endfunction // get_write_addr
-
-   // Function to get the next byte pointer
-   function automatic logic [2:0] get_nxtbyte_ptr (logic [2:0] current_byte_ptr, logic [7:0] byteen, logic get_next);
-      logic [2:0] start_ptr;
-      logic       found;
-      found = '0;
-      //get_nxtbyte_ptr[2:0] = current_byte_ptr[2:0];
-      start_ptr[2:0] = get_next ? (current_byte_ptr[2:0] + 3'b1) : current_byte_ptr[2:0];
-      for (int j=0; j<8; j++) begin
-         if (~found) begin
-            get_nxtbyte_ptr[2:0] = 3'(j);
-            found |= (byteen[j] & (3'(j) >= start_ptr[2:0])) ;
-         end
-      end
-   endfunction // get_nextbyte_ptr
-
-   // Create bus synchronized version of force halt
-   assign dec_tlu_force_halt_bus = dec_tlu_force_halt | dec_tlu_force_halt_bus_q;
-   assign dec_tlu_force_halt_bus_ns = ~bus_clk_en & dec_tlu_force_halt_bus;
-   rvdff  #(.WIDTH(1))   force_halt_busff(.din(dec_tlu_force_halt_bus_ns), .dout(dec_tlu_force_halt_bus_q), .clk(free_clk), .*);
-
-   // Write buffer
-   assign wrbuf_en       = axi_awvalid & axi_awready & master_ready;
-   assign wrbuf_data_en  = axi_wvalid & axi_wready & master_ready;
-   assign wrbuf_cmd_sent = master_valid & master_ready & (master_opc[2:1] == 2'b01);
-   assign wrbuf_rst      = (wrbuf_cmd_sent & ~wrbuf_en) | dec_tlu_force_halt_bus;
-
-   assign axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent) & master_ready;
-   assign axi_arready = ~(wrbuf_vld & wrbuf_data_vld) & master_ready;
-   assign axi_rlast   = 1'b1;
-
-   assign wr_cmd_vld          = (wrbuf_vld & wrbuf_data_vld);
-   assign master_valid        = wr_cmd_vld | axi_arvalid;
-   assign master_tag[TAG-1:0] = wr_cmd_vld ? wrbuf_tag[TAG-1:0] : axi_arid[TAG-1:0];
-   assign master_opc[2:0]     = wr_cmd_vld ? 3'b011 : 3'b0;
-   assign master_addr[31:0]   = wr_cmd_vld ? wrbuf_addr[31:0] : axi_araddr[31:0];
-   assign master_size[2:0]    = wr_cmd_vld ? wrbuf_size[2:0] : axi_arsize[2:0];
-   assign master_byteen[7:0]  = wrbuf_byteen[7:0];
-   assign master_wdata[63:0]  = wrbuf_data[63:0];
-
-   // AXI response channel signals
-   assign axi_bvalid       = slave_valid & slave_ready & slave_opc[3];
-   assign axi_bresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_bid[TAG-1:0] = slave_tag[TAG-1:0];
-
-   assign axi_rvalid       = slave_valid & slave_ready & (slave_opc[3:2] == 2'b0);
-   assign axi_rresp[1:0]   = slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b0);
-   assign axi_rid[TAG-1:0] = slave_tag[TAG-1:0];
-   assign axi_rdata[63:0]  = slave_rdata[63:0];
-   assign slave_ready        = axi_bready & axi_rready;
-
- // FIFO state machine
-   always_comb begin
-      buf_nxtstate   = IDLE;
-      buf_state_en   = 1'b0;
-      buf_wr_en      = 1'b0;
-      buf_data_wr_en = 1'b0;
-      slvbuf_error_in   = 1'b0;
-      slvbuf_error_en   = 1'b0;
-      buf_write_in   = 1'b0;
-      cmd_done       = 1'b0;
-      trxn_done      = 1'b0;
-      buf_cmd_byte_ptr_en = 1'b0;
-      buf_cmd_byte_ptr[2:0] = '0;
-      slave_valid_pre   = 1'b0;
-      master_ready   = 1'b0;
-      ahb_htrans[1:0]  = 2'b0;
-      slvbuf_wr_en     = 1'b0;
-      bypass_en        = 1'b0;
-      rd_bypass_idle   = 1'b0;
-
-      case (buf_state)
-         IDLE: begin
-                  master_ready   = 1'b1;
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_nxtstate = buf_write_in ? CMD_WR : CMD_RD;
-                  buf_state_en = master_valid & master_ready;
-                  buf_wr_en    = buf_state_en;
-                  buf_data_wr_en = buf_state_en & (buf_nxtstate == CMD_WR);
-                  buf_cmd_byte_ptr_en   = buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = buf_write_in ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) : master_addr[2:0];
-                  bypass_en       = buf_state_en;
-                  rd_bypass_idle  = bypass_en & (buf_nxtstate == CMD_RD);
-                  ahb_htrans[1:0] = {2{bypass_en}} & 2'b10;
-          end
-         CMD_RD: begin
-                  buf_nxtstate    = (master_valid & (master_opc[2:0] == 3'b000))? STREAM_RD : DATA_RD;
-                  buf_state_en    = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  cmd_done        = buf_state_en & ~master_valid;
-                  slvbuf_wr_en    = buf_state_en;
-                  master_ready  = buf_state_en & (buf_nxtstate == STREAM_RD);
-                  buf_wr_en       = master_ready;
-                  bypass_en       = master_ready & master_valid;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en | bypass_en}};
-         end
-         STREAM_RD: begin
-                  master_ready  =  (ahb_hready_q & ~ahb_hresp_q) & ~(master_valid & master_opc[2:1] == 2'b01);
-                  buf_wr_en       = (master_valid & master_ready & (master_opc[2:0] == 3'b000)); // update the fifo if we are streaming the read commands
-                  buf_nxtstate    = ahb_hresp_q ? STREAM_ERR_RD : (buf_wr_en ? STREAM_RD : DATA_RD);            // assuming that the master accpets the slave response right away.
-                  buf_state_en    = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en  = buf_state_en;
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-                  slave_valid_pre  = buf_state_en & ~ahb_hresp_q;             // send a response right away if we are not going through an error response.
-                  cmd_done        = buf_state_en & ~master_valid;                     // last one of the stream should not send a htrans
-                  bypass_en       = master_ready & master_valid & (buf_nxtstate == STREAM_RD) & buf_state_en;
-                  buf_cmd_byte_ptr[2:0] = bypass_en ? master_addr[2:0] : buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~((buf_nxtstate != STREAM_RD) & buf_state_en)}};
-                  slvbuf_wr_en    = buf_wr_en;                                         // shifting the contents from the buf to slv_buf for streaming cases
-         end // case: STREAM_RD
-         STREAM_ERR_RD: begin
-                  buf_nxtstate = DATA_RD;
-                  buf_state_en = ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) & ~ahb_hwrite_q;
-                  slave_valid_pre = buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;     // Overwrite slvbuf with buffer
-                  buf_cmd_byte_ptr[2:0] = buf_addr[2:0];
-                  ahb_htrans[1:0] = 2'b10 & {2{~buf_state_en}};
-         end
-         DATA_RD: begin
-                  buf_nxtstate   = DONE;
-                  buf_state_en   = (ahb_hready_q | ahb_hresp_q);
-                  buf_data_wr_en = buf_state_en;
-                  slvbuf_error_in= ahb_hresp_q;
-                  slvbuf_error_en= buf_state_en;
-                  slvbuf_wr_en   = buf_state_en;
-
-         end
-         CMD_WR: begin
-                  buf_nxtstate = DATA_WR;
-                  trxn_done    = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_state_en = trxn_done;
-                  buf_cmd_byte_ptr_en = buf_state_en;
-                  slvbuf_wr_en    = buf_state_en;
-                  buf_cmd_byte_ptr    = trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-                  cmd_done            = trxn_done & (buf_aligned | (buf_cmd_byte_ptrQ == 3'b111) |
-                                                     (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0));
-                  ahb_htrans[1:0] = {2{~(cmd_done | cmd_doneQ)}} & 2'b10;
-         end
-         DATA_WR: begin
-                  buf_state_en = (cmd_doneQ & ahb_hready_q) | ahb_hresp_q;
-                  master_ready = buf_state_en & ~ahb_hresp_q & slave_ready;   // Ready to accept new command if current command done and no error
-                  buf_nxtstate = (ahb_hresp_q | ~slave_ready) ? DONE :
-                                  ((master_valid & master_ready) ? ((master_opc[2:1] == 2'b01) ? CMD_WR : CMD_RD) : IDLE);
-                  slvbuf_error_in = ahb_hresp_q;
-                  slvbuf_error_en = buf_state_en;
-
-                  buf_write_in = (master_opc[2:1] == 2'b01);
-                  buf_wr_en = buf_state_en & ((buf_nxtstate == CMD_WR) | (buf_nxtstate == CMD_RD));
-                  buf_data_wr_en = buf_wr_en;
-
-                  cmd_done     = (ahb_hresp_q | (ahb_hready_q & (ahb_htrans_q[1:0] != 2'b0) &
-                                 ((buf_cmd_byte_ptrQ == 3'b111) | (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1)] == 1'b0))));
-                  bypass_en       = buf_state_en & buf_write_in & (buf_nxtstate == CMD_WR);   // Only bypass for writes for the time being
-                  ahb_htrans[1:0] = {2{(~(cmd_done | cmd_doneQ) | bypass_en)}} & 2'b10;
-                  slave_valid_pre  = buf_state_en & (buf_nxtstate != DONE);
-
-                  trxn_done = ahb_hready_q & ahb_hwrite_q & (ahb_htrans_q[1:0] != 2'b0);
-                  buf_cmd_byte_ptr_en = trxn_done | bypass_en;
-                  buf_cmd_byte_ptr = bypass_en ? get_nxtbyte_ptr(3'b0,buf_byteen_in[7:0],1'b0) :
-                                                 trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0],buf_byteen[7:0],1'b1) : buf_cmd_byte_ptrQ;
-            end
-         DONE: begin
-                  buf_nxtstate = IDLE;
-                  buf_state_en = slave_ready;
-                  slvbuf_error_en = 1'b1;
-                  slave_valid_pre = 1'b1;
-         end
-      endcase
-   end
-
-   assign buf_rst              = dec_tlu_force_halt_bus;
-   assign cmd_done_rst         = slave_valid_pre;
-   assign buf_addr_in[31:3]    = master_addr[31:3];
-   assign buf_addr_in[2:0]     = (buf_aligned_in & (master_opc[2:1] == 2'b01)) ? get_write_addr(master_byteen[7:0]) : master_addr[2:0];
-   assign buf_tag_in[TAG-1:0]  = master_tag[TAG-1:0];
-   assign buf_byteen_in[7:0]   = wrbuf_byteen[7:0];
-   assign buf_data_in[63:0]    = (buf_state == DATA_RD) ? ahb_hrdata_q[63:0] : master_wdata[63:0];
-   assign buf_size_in[1:0]     = (buf_aligned_in & (master_size[1:0] == 2'b11) & (master_opc[2:1] == 2'b01)) ? get_write_size(master_byteen[7:0]) : master_size[1:0];
-   assign buf_aligned_in       = (master_opc[2:0] == 3'b0)    |   // reads are always aligned since they are either DW or sideeffects
-                                 (master_size[1:0] == 2'b0) |  (master_size[1:0] == 2'b01) | (master_size[1:0] == 2'b10) | // Always aligned for Byte/HW/Word since they can be only for non-idempotent. IFU/SB are always aligned
-                                 ((master_size[1:0] == 2'b11) &
-                                  ((master_byteen[7:0] == 8'h3)  | (master_byteen[7:0] == 8'hc)   | (master_byteen[7:0] == 8'h30) | (master_byteen[7:0] == 8'hc0) |
-                                   (master_byteen[7:0] == 8'hf)  | (master_byteen[7:0] == 8'hf0)  | (master_byteen[7:0] == 8'hff)));
-
-   // Generate the ahb signals
-   assign ahb_haddr[31:3] = bypass_en ? master_addr[31:3]  : buf_addr[31:3];
-   assign ahb_haddr[2:0]  = {3{(ahb_htrans == 2'b10)}} & buf_cmd_byte_ptr[2:0];    // Trxn should be aligned during IDLE
-   assign ahb_hsize[2:0]  = bypass_en ? {1'b0, ({2{buf_aligned_in}} & buf_size_in[1:0])} :
-                                        {1'b0, ({2{buf_aligned}} & buf_size[1:0])};   // Send the full size for aligned trxn
-   assign ahb_hburst[2:0] = 3'b0;
-   assign ahb_hmastlock   = 1'b0;
-   assign ahb_hprot[3:0]  = {3'b001,~axi_arprot[2]};
-   assign ahb_hwrite      = bypass_en ? (master_opc[2:1] == 2'b01) : buf_write;
-   assign ahb_hwdata[63:0] = buf_data[63:0];
-
-   assign slave_valid          = slave_valid_pre;// & (~slvbuf_posted_write | slvbuf_error);
-   assign slave_opc[3:2]       = slvbuf_write ? 2'b11 : 2'b00;
-   assign slave_opc[1:0]       = {2{slvbuf_error}} & 2'b10;
-   assign slave_rdata[63:0]    = slvbuf_error ? {2{last_bus_addr[31:0]}} : ((buf_state == DONE) ? buf_data[63:0] : ahb_hrdata_q[63:0]);
-   assign slave_tag[TAG-1:0]   = slvbuf_tag[TAG-1:0];
-
-   assign last_addr_en = (ahb_htrans[1:0] != 2'b0) & ahb_hready & ahb_hwrite ;
-
-
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_vldff     (.din(1'b1),              .dout(wrbuf_vld),          .en(wrbuf_en),      .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga #(.WIDTH(1))   wrbuf_data_vldff(.din(1'b1),              .dout(wrbuf_data_vld),     .en(wrbuf_data_en), .clear(wrbuf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(TAG)) wrbuf_tagff     (.din(axi_awid[TAG-1:0]), .dout(wrbuf_tag[TAG-1:0]), .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(3))   wrbuf_sizeff    (.din(axi_awsize[2:0]),   .dout(wrbuf_size[2:0]),    .en(wrbuf_en),                         .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))  wrbuf_addrff    (.din(axi_awaddr[31:0]),  .dout(wrbuf_addr[31:0]),   .en(wrbuf_en & bus_clk_en),            .clk(clk), .*);
-   rvdffe       #(.WIDTH(64))  wrbuf_dataff    (.din(axi_wdata[63:0]),   .dout(wrbuf_data[63:0]),   .en(wrbuf_data_en & bus_clk_en),       .clk(clk), .*);
-   rvdffs_fpga  #(.WIDTH(8))   wrbuf_byteenff  (.din(axi_wstrb[7:0]),    .dout(wrbuf_byteen[7:0]),  .en(wrbuf_data_en),                    .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffs_fpga #(.WIDTH(32))   last_bus_addrff (.din(ahb_haddr[31:0]),   .dout(last_bus_addr[31:0]), .en(last_addr_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH($bits(state_t))) buf_state_ff  (.din(buf_nxtstate),        .dout({buf_state}),      .en(buf_state_en), .clear(buf_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_writeff   (.din(buf_write_in),        .dout(buf_write),        .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG))             buf_tagff     (.din(buf_tag_in[TAG-1:0]), .dout(buf_tag[TAG-1:0]), .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(32))              buf_addrff    (.din(buf_addr_in[31:0]),   .dout(buf_addr[31:0]),   .en(buf_wr_en & bus_clk_en),        .clk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))               buf_sizeff    (.din(buf_size_in[1:0]),    .dout(buf_size[1:0]),    .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))               buf_alignedff (.din(buf_aligned_in),      .dout(buf_aligned),      .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))               buf_byteenff  (.din(buf_byteen_in[7:0]),  .dout(buf_byteen[7:0]),  .en(buf_wr_en),                     .clk(buf_clk), .clken(buf_clken),  .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))              buf_dataff    (.din(buf_data_in[63:0]),   .dout(buf_data[63:0]),   .en(buf_data_wr_en & bus_clk_en),   .clk(clk), .*);
-
-
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_writeff  (.din(buf_write),        .dout(slvbuf_write),        .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(TAG)) slvbuf_tagff    (.din(buf_tag[TAG-1:0]), .dout(slvbuf_tag[TAG-1:0]), .en(slvbuf_wr_en),    .clk(buf_clk), .clken(buf_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))   slvbuf_errorff  (.din(slvbuf_error_in),  .dout(slvbuf_error),        .en(slvbuf_error_en), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdffsc_fpga #(.WIDTH(1)) buf_cmd_doneff     (.din(1'b1),                  .dout(cmd_doneQ),              .en(cmd_done),            .clear(cmd_done_rst), .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(3))  buf_cmd_byte_ptrff (.din(buf_cmd_byte_ptr[2:0]), .dout(buf_cmd_byte_ptrQ[2:0]), .en(buf_cmd_byte_ptr_en),                       .clk(bus_clk), .clken(bus_clk_en), .rawclk(clk), .*);
-
-   rvdff_fpga #(.WIDTH(1))  hready_ff (.din(ahb_hready),       .dout(ahb_hready_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(2))  htrans_ff (.din(ahb_htrans[1:0]),  .dout(ahb_htrans_q[1:0]),  .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hwrite_ff (.din(ahb_hwrite),       .dout(ahb_hwrite_q),       .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))  hresp_ff  (.din(ahb_hresp),        .dout(ahb_hresp_q),        .clk(bus_clk),       .clken(bus_clk_en),      .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(64)) hrdata_ff (.din(ahb_hrdata[63:0]), .dout(ahb_hrdata_q[63:0]), .clk(ahbm_data_clk), .clken(ahbm_data_clken), .rawclk(clk), .*);
-
-   // Clock headers
-   // clock enables for ahbm addr/data
-   assign buf_clken       = bus_clk_en & (buf_wr_en | slvbuf_wr_en | clk_override);
-   assign ahbm_data_clken = bus_clk_en & ((buf_state != IDLE) | clk_override);
-
-
-   rvclkhdr bus_cgc       (.en(bus_clk_en),      .l1clk(bus_clk),       .*);
-   rvclkhdr buf_cgc       (.en(buf_clken),       .l1clk(buf_clk), .*);
-   rvclkhdr ahbm_data_cgc (.en(ahbm_data_clken), .l1clk(ahbm_data_clk), .*);
-
-
-endmodule // axi4_to_ahb
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file to control the debug mode
-// Comments: Responsible to put the rest of the core in quiesce mode,
-//           Send the commands/address. sends WrData and Recieve read Data.
-//           And then Resume the core to do the normal mode
-// Author  :
-//********************************************************************************
-module eb1_dbg
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   // outputs to the core for command and data interface
-   output logic [31:0]                 dbg_cmd_addr,
-   output logic [31:0]                 dbg_cmd_wrdata,
-   output logic                        dbg_cmd_valid,
-   output logic                        dbg_cmd_write,             // 1: write command, 0: read_command
-   output logic [1:0]                  dbg_cmd_type,              // 0:gpr 1:csr 2: memory
-   output logic [1:0]                  dbg_cmd_size,              // size of the abstract mem access debug command
-   output logic                        dbg_core_rst_l,            // core reset from dm
-
-   // inputs back from the core/dec
-   input logic [31:0]                  core_dbg_rddata,
-   input logic                         core_dbg_cmd_done,         // This will be treated like a valid signal
-   input logic                         core_dbg_cmd_fail,         // Exception during command run
-
-   // Signals to dma to get a bubble
-   output logic                        dbg_dma_bubble,            // Debug needs a bubble to send a valid
-   input  logic                        dma_dbg_ready,             // DMA is ready to accept debug request
-
-   // interface with the rest of the core to halt/resume handshaking
-   output logic                        dbg_halt_req,              // This is a pulse
-   output logic                        dbg_resume_req,            // Debug sends a resume requests. Pulse
-   input  logic                        dec_tlu_debug_mode,        // Core is in debug mode
-   input  logic                        dec_tlu_dbg_halted,        // The core has finished the queiscing sequence. Core is halted now
-   input  logic                        dec_tlu_mpc_halted_only,   // Only halted due to MPC
-   input  logic                        dec_tlu_resume_ack,        // core sends back an ack for the resume (pulse)
-
-   // inputs from the JTAG
-   input logic                         dmi_reg_en,                // read or write
-   input logic [6:0]                   dmi_reg_addr,              // address of DM register
-   input logic                         dmi_reg_wr_en,             // write instruction
-   input logic [31:0]                  dmi_reg_wdata,             // write data
-
-   // output
-   output logic [31:0]                 dmi_reg_rdata,             // read data
-
-   // AXI Write Channels
-   output logic                        sb_axi_awvalid,
-   input  logic                        sb_axi_awready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_awid,
-   output logic [31:0]                 sb_axi_awaddr,
-   output logic [3:0]                  sb_axi_awregion,
-   output logic [7:0]                  sb_axi_awlen,
-   output logic [2:0]                  sb_axi_awsize,
-   output logic [1:0]                  sb_axi_awburst,
-   output logic                        sb_axi_awlock,
-   output logic [3:0]                  sb_axi_awcache,
-   output logic [2:0]                  sb_axi_awprot,
-   output logic [3:0]                  sb_axi_awqos,
-
-   output logic                        sb_axi_wvalid,
-   input  logic                        sb_axi_wready,
-   output logic [63:0]                 sb_axi_wdata,
-   output logic [7:0]                  sb_axi_wstrb,
-   output logic                        sb_axi_wlast,
-
-   input  logic                        sb_axi_bvalid,
-   output logic                        sb_axi_bready,
-   input  logic [1:0]                  sb_axi_bresp,
-
-   // AXI Read Channels
-   output logic                        sb_axi_arvalid,
-   input  logic                        sb_axi_arready,
-   output logic [pt.SB_BUS_TAG-1:0]    sb_axi_arid,
-   output logic [31:0]                 sb_axi_araddr,
-   output logic [3:0]                  sb_axi_arregion,
-   output logic [7:0]                  sb_axi_arlen,
-   output logic [2:0]                  sb_axi_arsize,
-   output logic [1:0]                  sb_axi_arburst,
-   output logic                        sb_axi_arlock,
-   output logic [3:0]                  sb_axi_arcache,
-   output logic [2:0]                  sb_axi_arprot,
-   output logic [3:0]                  sb_axi_arqos,
-
-   input  logic                        sb_axi_rvalid,
-   output logic                        sb_axi_rready,
-   input  logic [63:0]                 sb_axi_rdata,
-   input  logic [1:0]                  sb_axi_rresp,
-
-   input logic                         dbg_bus_clk_en,
-
-   // general inputs
-   input logic                         clk,
-   input logic                         rst_l,        // This includes both top rst and debug rst
-   input logic                         dbg_rst_l,
-   input logic                         clk_override,
-   input logic                         scan_mode
-);
-
-
-   typedef enum logic [3:0] {IDLE=4'h0, HALTING=4'h1, HALTED=4'h2, CORE_CMD_START=4'h3, CORE_CMD_WAIT=4'h4, SB_CMD_START=4'h5, SB_CMD_SEND=4'h6, SB_CMD_RESP=4'h7, CMD_DONE=4'h8, RESUMING=4'h9} state_t;
-   typedef enum logic [3:0] {SBIDLE=4'h0, WAIT_RD=4'h1, WAIT_WR=4'h2, CMD_RD=4'h3, CMD_WR=4'h4, CMD_WR_ADDR=4'h5, CMD_WR_DATA=4'h6, RSP_RD=4'h7, RSP_WR=4'h8, DONE=4'h9} sb_state_t;
-
-   state_t       dbg_state;
-   state_t       dbg_nxtstate;
-   logic         dbg_state_en;
-   // these are the registers that the debug module implements
-   logic [31:0]  dmstatus_reg;        // [26:24]-dmerr, [17:16]-resume ack, [9:8]-halted, [3:0]-version
-   logic [31:0]  dmcontrol_reg;       // dmcontrol register has only 6 bits implemented. 31: haltreq, 30: resumereq, 29: haltreset, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   logic [31:0]  command_reg;
-   logic [31:0]  abstractcs_reg;      // bits implemted are [12] - busy and [10:8]= command error
-   logic [31:0]  haltsum0_reg;
-   logic [31:0]  data0_reg;
-   logic [31:0]  data1_reg;
-
-   // data 0
-   logic [31:0]  data0_din;
-   logic         data0_reg_wren, data0_reg_wren0, data0_reg_wren1, data0_reg_wren2;
-   // data 1
-   logic [31:0]  data1_din;
-   logic         data1_reg_wren, data1_reg_wren0, data1_reg_wren1;
-   // abstractcs
-   logic         abstractcs_busy_wren;
-   logic         abstractcs_busy_din;
-   logic [2:0]   abstractcs_error_din;
-   logic         abstractcs_error_sel0, abstractcs_error_sel1, abstractcs_error_seb1, abstractcs_error_sel3, abstractcs_error_sel4, abstractcs_error_sel5, abstractcs_error_sel6;
-   logic         dbg_sb_bus_error;
-   // abstractauto
-   logic         abstractauto_reg_wren;
-   logic [1:0]   abstractauto_reg;
-
-   // dmstatus
-   logic         dmstatus_resumeack_wren;
-   logic         dmstatus_resumeack_din;
-   logic         dmstatus_haveresetn_wren;
-   logic         dmstatus_resumeack;
-   logic         dmstatus_unavail;
-   logic         dmstatus_running;
-   logic         dmstatus_halted;
-   logic         dmstatus_havereset, dmstatus_haveresetn;
-
-   // dmcontrol
-   logic         resumereq;
-   logic         dmcontrol_wren, dmcontrol_wren_Q;
-   // command
-   logic         execute_command_ns, execute_command;
-   logic         command_wren, command_regno_wren;
-   logic         command_transfer_din;
-   logic         command_postexec_din;
-   logic [31:0]  command_din;
-   logic [3:0]   dbg_cmd_addr_incr;
-   logic [31:0]  dbg_cmd_curr_addr;
-   logic [31:0]  dbg_cmd_next_addr;
-
-   // needed to send the read data back for dmi reads
-   logic  [31:0] dmi_reg_rdata_din;
-
-   sb_state_t    sb_state;
-   sb_state_t    sb_nxtstate;
-   logic         sb_state_en;
-
-   //System bus section
-   logic              sbcs_wren;
-   logic              sbcs_sbbusy_wren;
-   logic              sbcs_sbbusy_din;
-   logic              sbcs_sbbusyerror_wren;
-   logic              sbcs_sbbusyerror_din;
-
-   logic              sbcs_sberror_wren;
-   logic [2:0]        sbcs_sberror_din;
-   logic              sbcs_unaligned;
-   logic              sbcs_illegal_size;
-   logic [19:15]      sbcs_reg_int;
-
-   // data
-   logic              sbdata0_reg_wren0;
-   logic              sbdata0_reg_wren1;
-   logic              sbdata0_reg_wren;
-   logic [31:0]       sbdata0_din;
-
-   logic              sbdata1_reg_wren0;
-   logic              sbdata1_reg_wren1;
-   logic              sbdata1_reg_wren;
-   logic [31:0]       sbdata1_din;
-
-   logic              sbaddress0_reg_wren0;
-   logic              sbaddress0_reg_wren1;
-   logic              sbaddress0_reg_wren;
-   logic [31:0]       sbaddress0_reg_din;
-   logic [3:0]        sbaddress0_incr;
-   logic              sbreadonaddr_access;
-   logic              sbreadondata_access;
-   logic              sbdata0wr_access;
-
-   logic              sb_abmem_cmd_done_in, sb_abmem_data_done_in;
-   logic              sb_abmem_cmd_done_en, sb_abmem_data_done_en;
-   logic              sb_abmem_cmd_done, sb_abmem_data_done;
-   logic [31:0]       abmem_addr;
-   logic              abmem_addr_in_dccm_region, abmem_addr_in_iccm_region, abmem_addr_in_pic_region;
-   logic              abmem_addr_core_local;
-   logic              abmem_addr_external;
-
-   logic              sb_cmd_pending, sb_abmem_cmd_pending;
-   logic              sb_abmem_cmd_write;
-   logic [2:0]        sb_abmem_cmd_size;
-   logic [31:0]       sb_abmem_cmd_addr;
-   logic [31:0]       sb_abmem_cmd_wdata;
-
-   logic [2:0]        sb_cmd_size;
-   logic [31:0]       sb_cmd_addr;
-   logic [63:0]       sb_cmd_wdata;
-
-   logic              sb_bus_cmd_read, sb_bus_cmd_write_addr, sb_bus_cmd_write_data;
-   logic              sb_bus_rsp_read, sb_bus_rsp_write;
-   logic              sb_bus_rsp_error;
-   logic [63:0]       sb_bus_rdata;
-
-   //registers
-   logic [31:0]       sbcs_reg;
-   logic [31:0]       sbaddress0_reg;
-   logic [31:0]       sbdata0_reg;
-   logic [31:0]       sbdata1_reg;
-
-   logic              sb_abmem_cmd_arvalid, sb_abmem_cmd_awvalid, sb_abmem_cmd_wvalid;
-   logic              sb_abmem_read_pend;
-   logic              sb_cmd_awvalid, sb_cmd_wvalid, sb_cmd_arvalid;
-   logic              sb_read_pend;
-   logic [31:0]       sb_axi_addr;
-   logic [63:0]       sb_axi_wrdata;
-   logic [2:0]        sb_axi_size;
-
-   logic              dbg_dm_rst_l;
-
-   //clken
-   logic              dbg_free_clken;
-   logic              dbg_free_clk;
-
-   logic              sb_free_clken;
-   logic              sb_free_clk;
-
-   // clocking
-   // used for the abstract commands.
-   assign dbg_free_clken  = dmi_reg_en | execute_command | (dbg_state != IDLE) | dbg_state_en | dec_tlu_dbg_halted | dec_tlu_mpc_halted_only | dec_tlu_debug_mode | dbg_halt_req | clk_override;
-
-   // used for the system bus
-   assign sb_free_clken = dmi_reg_en | execute_command | sb_state_en | (sb_state != SBIDLE) | clk_override;
-
-   rvoclkhdr dbg_free_cgc    (.en(dbg_free_clken), .l1clk(dbg_free_clk), .*);
-   rvoclkhdr sb_free_cgc     (.en(sb_free_clken), .l1clk(sb_free_clk), .*);
-
-   // end clocking section
-
-   // Reset logic
-   assign dbg_dm_rst_l = dbg_rst_l & (dmcontrol_reg[0] | scan_mode);
-   assign dbg_core_rst_l = ~dmcontrol_reg[1] | scan_mode;
-
-   // system bus register
-   // sbcs[31:29], sbcs - [22]:sbbusyerror, [21]: sbbusy, [20]:sbreadonaddr, [19:17]:sbaccess, [16]:sbautoincrement, [15]:sbreadondata, [14:12]:sberror, sbsize=32, 128=0, 64/32/16/8 are legal
-   assign        sbcs_reg[31:29] = 3'b1;
-   assign        sbcs_reg[28:23] = '0;
-   assign        sbcs_reg[19:15] = {sbcs_reg_int[19], ~sbcs_reg_int[18], sbcs_reg_int[17:15]};
-   assign        sbcs_reg[11:5]  = 7'h20;
-   assign        sbcs_reg[4:0]   = 5'b01111;
-   assign        sbcs_wren = (dmi_reg_addr ==  7'h38) & dmi_reg_en & dmi_reg_wr_en & (sb_state == SBIDLE);
-   assign        sbcs_sbbusyerror_wren = (sbcs_wren & dmi_reg_wdata[22]) |
-                                         (sbcs_reg[21] & dmi_reg_en & ((dmi_reg_wr_en & (dmi_reg_addr == 7'h39)) | (dmi_reg_addr == 7'h3c) | (dmi_reg_addr == 7'h3d)));
-   assign        sbcs_sbbusyerror_din = ~(sbcs_wren & dmi_reg_wdata[22]);   // Clear when writing one
-
-   rvdffs #(1) sbcs_sbbusyerror_reg  (.din(sbcs_sbbusyerror_din),  .dout(sbcs_reg[22]),    .en(sbcs_sbbusyerror_wren), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbbusy_reg       (.din(sbcs_sbbusy_din),       .dout(sbcs_reg[21]),    .en(sbcs_sbbusy_wren),      .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(1) sbcs_sbreadonaddr_reg (.din(dmi_reg_wdata[20]),     .dout(sbcs_reg[20]),    .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(5) sbcs_misc_reg         (.din({dmi_reg_wdata[19],~dmi_reg_wdata[18],dmi_reg_wdata[17:15]}),
-                                      .dout(sbcs_reg_int[19:15]), .en(sbcs_wren),             .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-   rvdffs #(3) sbcs_error_reg        (.din(sbcs_sberror_din[2:0]), .dout(sbcs_reg[14:12]), .en(sbcs_sberror_wren),     .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sbcs_unaligned =    ((sbcs_reg[19:17] == 3'b001) &  sbaddress0_reg[0]) |
-                              ((sbcs_reg[19:17] == 3'b010) &  (|sbaddress0_reg[1:0])) |
-                              ((sbcs_reg[19:17] == 3'b011) &  (|sbaddress0_reg[2:0]));
-
-   assign sbcs_illegal_size = sbcs_reg[19];    // Anything bigger than 64 bits is illegal
-
-   assign sbaddress0_incr[3:0] = ({4{(sbcs_reg[19:17] == 3'h0)}} &  4'b0001) |
-                                 ({4{(sbcs_reg[19:17] == 3'h1)}} &  4'b0010) |
-                                 ({4{(sbcs_reg[19:17] == 3'h2)}} &  4'b0100) |
-                                 ({4{(sbcs_reg[19:17] == 3'h3)}} &  4'b1000);
-
-   // sbdata
-   assign        sbdata0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);   // write data only when single read is 0
-   assign        sbdata0_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata0_reg_wren    = sbdata0_reg_wren0 | sbdata0_reg_wren1;
-
-   assign        sbdata1_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h3d);   // write data only when single read is 0;
-   assign        sbdata1_reg_wren1   = (sb_state == RSP_RD) & sb_state_en & ~sbcs_sberror_wren;
-   assign        sbdata1_reg_wren    = sbdata1_reg_wren0 | sbdata1_reg_wren1;
-
-   assign        sbdata0_din[31:0]   = ({32{sbdata0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata0_reg_wren1}} & sb_bus_rdata[31:0]);
-   assign        sbdata1_din[31:0]   = ({32{sbdata1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                       ({32{sbdata1_reg_wren1}} & sb_bus_rdata[63:32]);
-
-   rvdffe #(32)    dbg_sbdata0_reg    (.*, .din(sbdata0_din[31:0]), .dout(sbdata0_reg[31:0]), .en(sbdata0_reg_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(32)    dbg_sbdata1_reg    (.*, .din(sbdata1_din[31:0]), .dout(sbdata1_reg[31:0]), .en(sbdata1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-    // sbaddress
-   assign        sbaddress0_reg_wren0   = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39);
-   assign        sbaddress0_reg_wren    = sbaddress0_reg_wren0 | sbaddress0_reg_wren1;
-   assign        sbaddress0_reg_din[31:0]= ({32{sbaddress0_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                                           ({32{sbaddress0_reg_wren1}} & (sbaddress0_reg[31:0] + {28'b0,sbaddress0_incr[3:0]}));
-   rvdffe #(32)    dbg_sbaddress0_reg    (.*, .din(sbaddress0_reg_din[31:0]), .dout(sbaddress0_reg[31:0]), .en(sbaddress0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   assign sbreadonaddr_access = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h39) & sbcs_reg[20];   // if readonaddr is set the next command will start upon writing of addr0
-   assign sbreadondata_access = dmi_reg_en & ~dmi_reg_wr_en & (dmi_reg_addr == 7'h3c) & sbcs_reg[15];  // if readondata is set the next command will start upon reading of data0
-   assign sbdata0wr_access  = dmi_reg_en &  dmi_reg_wr_en & (dmi_reg_addr == 7'h3c);                   // write to sbdata0 will start write command to system bus
-
-   // memory mapped registers
-   // dmcontrol register has only 5 bits implemented. 31: haltreq, 30: resumereq, 28: ackhavereset, 1: ndmreset, 0: dmactive.
-   // rest all the bits are zeroed out
-   // dmactive flop is reset based on core rst_l, all other flops use dm_rst_l
-   assign dmcontrol_wren      = (dmi_reg_addr ==  7'h10) & dmi_reg_en & dmi_reg_wr_en;
-   assign dmcontrol_reg[29]   = '0;
-   assign dmcontrol_reg[27:2] = '0;
-   assign resumereq           = dmcontrol_reg[30] & ~dmcontrol_reg[31] & dmcontrol_wren_Q;
-   rvdffs #(4) dmcontrolff (.din({dmi_reg_wdata[31:30],dmi_reg_wdata[28],dmi_reg_wdata[1]}), .dout({dmcontrol_reg[31:30], dmcontrol_reg[28], dmcontrol_reg[1]}), .en(dmcontrol_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs #(1) dmcontrol_dmactive_ff (.din(dmi_reg_wdata[0]), .dout(dmcontrol_reg[0]), .en(dmcontrol_wren), .rst_l(dbg_rst_l), .clk(dbg_free_clk));
-   rvdff  #(1) dmcontrol_wrenff(.din(dmcontrol_wren), .dout(dmcontrol_wren_Q), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // dmstatus register bits that are implemented
-   // [19:18]-havereset,[17:16]-resume ack, [9:8]-halted, [3:0]-version
-   // rest all the bits are zeroed out
-   //assign dmstatus_wren       = (dmi_reg_addr[31:0] ==  32'h11) & dmi_reg_en;
-   assign dmstatus_reg[31:20] = '0;
-   assign dmstatus_reg[19:18] = {2{dmstatus_havereset}};
-   assign dmstatus_reg[15:14] = '0;
-   assign dmstatus_reg[7]     = '1;
-   assign dmstatus_reg[6:4]   = '0;
-   assign dmstatus_reg[17:16] = {2{dmstatus_resumeack}};
-   assign dmstatus_reg[13:12] = {2{dmstatus_unavail}};
-   assign dmstatus_reg[11:10] = {2{dmstatus_running}};
-   assign dmstatus_reg[9:8]   = {2{dmstatus_halted}};
-   assign dmstatus_reg[3:0]   = 4'h2;
-
-   assign dmstatus_resumeack_wren = ((dbg_state == RESUMING) & dec_tlu_resume_ack) | (dmstatus_resumeack & resumereq & dmstatus_halted);
-   assign dmstatus_resumeack_din  = (dbg_state == RESUMING) & dec_tlu_resume_ack;
-
-   assign dmstatus_haveresetn_wren  = (dmi_reg_addr == 7'h10) & dmi_reg_wdata[28] & dmi_reg_en & dmi_reg_wr_en & dmcontrol_reg[0];   // clear the havereset
-   assign dmstatus_havereset        = ~dmstatus_haveresetn;
-
-   assign dmstatus_unavail = dmcontrol_reg[1] | ~rst_l;
-   assign dmstatus_running = ~(dmstatus_unavail | dmstatus_halted);
-
-   rvdffs  #(1) dmstatus_resumeack_reg  (.din(dmstatus_resumeack_din), .dout(dmstatus_resumeack), .en(dmstatus_resumeack_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff   #(1) dmstatus_halted_reg     (.din(dec_tlu_dbg_halted & ~dec_tlu_mpc_halted_only),     .dout(dmstatus_halted), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdffs  #(1) dmstatus_haveresetn_reg (.din(1'b1), .dout(dmstatus_haveresetn), .en(dmstatus_haveresetn_wren), .rst_l(rst_l), .clk(dbg_free_clk));
-
-   // haltsum0 register
-   assign haltsum0_reg[31:1] = '0;
-   assign haltsum0_reg[0]    = dmstatus_halted;
-
-   // abstractcs register
-   // bits implemted are [12] - busy and [10:8]= command error
-   assign        abstractcs_reg[31:13] = '0;
-   assign        abstractcs_reg[11]    = '0;
-   assign        abstractcs_reg[7:4]   = '0;
-   assign        abstractcs_reg[3:0]   = 4'h2;    // One data register
-
-   assign        abstractcs_error_sel0 = abstractcs_reg[12] & ~(|abstractcs_reg[10:8]) & dmi_reg_en & ((dmi_reg_wr_en & ((dmi_reg_addr == 7'h16) | (dmi_reg_addr == 7'h17)) | (dmi_reg_addr == 7'h18)) |
-                                                                                                       (dmi_reg_addr == 7'h4) | (dmi_reg_addr == 7'h5));
-   assign        abstractcs_error_sel1 = execute_command & ~(|abstractcs_reg[10:8]) &
-                                         ((~((command_reg[31:24] == 8'b0) | (command_reg[31:24] == 8'h2)))                      |   // Illegal command
-                                          (((command_reg[22:20] == 3'b011) | (command_reg[22])) & (command_reg[31:24] == 8'h2)) |   // Illegal abstract memory size (can't be DW or higher)
-                                          ((command_reg[22:20] != 3'b010) & ((command_reg[31:24] == 8'h0) & command_reg[17]))   |   // Illegal abstract reg size
-                                          ((command_reg[31:24] == 8'h0) & command_reg[18]));                                          //postexec for abstract register access
-   assign        abstractcs_error_seb1 = ((core_dbg_cmd_done & core_dbg_cmd_fail) |                   // exception from core
-                                          (execute_command & (command_reg[31:24] == 8'h0) &           // unimplemented regs
-                                                (((command_reg[15:12] == 4'h1) & (command_reg[11:5] != 0)) | (command_reg[15:13] != 0)))) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel3 = execute_command & (dbg_state != HALTED) & ~(|abstractcs_reg[10:8]);
-   assign        abstractcs_error_sel4 = dbg_sb_bus_error & dbg_bus_clk_en & ~(|abstractcs_reg[10:8]);// sb bus error for abstract memory command
-   assign        abstractcs_error_sel5 = execute_command & (command_reg[31:24] == 8'h2) & ~(|abstractcs_reg[10:8]) &
-                                         (((command_reg[22:20] == 3'b001) & data1_reg[0]) | ((command_reg[22:20] == 3'b010) & (|data1_reg[1:0])));  //Unaligned address for abstract memory
-   assign        abstractcs_error_sel6 = (dmi_reg_addr ==  7'h16) & dmi_reg_en & dmi_reg_wr_en;
-
-   assign        abstractcs_error_din[2:0]  = abstractcs_error_sel0 ? 3'b001 :                  // writing command or abstractcs while a command was executing. Or accessing data0
-                                                 abstractcs_error_sel1 ? 3'b010 :               // writing a illegal command type to cmd field of command
-                                                    abstractcs_error_seb1 ? 3'b011 :            // exception while running command
-                                                       abstractcs_error_sel3 ? 3'b100 :         // writing a comnand when not in the halted state
-                                                          abstractcs_error_sel4 ? 3'b101 :      // Bus error
-                                                             abstractcs_error_sel5 ? 3'b111 :   // unaligned or illegal size abstract memory command
-                                                                abstractcs_error_sel6 ? (~dmi_reg_wdata[10:8] & abstractcs_reg[10:8]) :   //W1C
-                                                                                        abstractcs_reg[10:8];                             //hold
-
-   rvdffs #(1) dmabstractcs_busy_reg  (.din(abstractcs_busy_din), .dout(abstractcs_reg[12]), .en(abstractcs_busy_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-   rvdff  #(3) dmabstractcs_error_reg (.din(abstractcs_error_din[2:0]), .dout(abstractcs_reg[10:8]), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-    // abstract auto reg
-   assign abstractauto_reg_wren  = dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h18) & ~abstractcs_reg[12];
-   rvdffs #(2) dbg_abstractauto_reg (.*, .din(dmi_reg_wdata[1:0]), .dout(abstractauto_reg[1:0]), .en(abstractauto_reg_wren), .rst_l(dbg_dm_rst_l), .clk(dbg_free_clk));
-
-   // command register - implemented all the bits in this register
-   // command[16] = 1: write, 0: read
-   assign execute_command_ns = command_wren |
-                               (dmi_reg_en & ~abstractcs_reg[12] & (((dmi_reg_addr == 7'h4) & abstractauto_reg[0]) | ((dmi_reg_addr == 7'h5) & abstractauto_reg[1])));
-   assign command_wren = (dmi_reg_addr ==  7'h17) & dmi_reg_en & dmi_reg_wr_en;
-   assign command_regno_wren = command_wren | ((command_reg[31:24] == 8'h0) & command_reg[19] & (dbg_state == CMD_DONE) & ~(|abstractcs_reg[10:8]));  // aarpostincrement
-   assign command_postexec_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[18];
-   assign command_transfer_din = (dmi_reg_wdata[31:24] == 8'h0) & dmi_reg_wdata[17];
-   assign command_din[31:16] = {dmi_reg_wdata[31:24],1'b0,dmi_reg_wdata[22:19],command_postexec_din,command_transfer_din, dmi_reg_wdata[16]};
-   assign command_din[15:0] =  command_wren ? dmi_reg_wdata[15:0] : dbg_cmd_next_addr[15:0];
-   rvdff  #(1)  execute_commandff   (.*, .din(execute_command_ns), .dout(execute_command), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_reg       (.*, .din(command_din[31:16]), .dout(command_reg[31:16]), .en(command_wren), .rst_l(dbg_dm_rst_l));
-   rvdffe #(16) dmcommand_regno_reg (.*, .din(command_din[15:0]),  .dout(command_reg[15:0]),  .en(command_regno_wren), .rst_l(dbg_dm_rst_l));
-
-  // data0 reg
-   assign data0_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h4) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data0_reg_wren1   = core_dbg_cmd_done & (dbg_state == CORE_CMD_WAIT) & ~command_reg[16];
-   assign data0_reg_wren    = data0_reg_wren0 | data0_reg_wren1 | data0_reg_wren2;
-
-   assign data0_din[31:0]   = ({32{data0_reg_wren0}} & dmi_reg_wdata[31:0])   |
-                              ({32{data0_reg_wren1}} & core_dbg_rddata[31:0]) |
-                              ({32{data0_reg_wren2}} & sb_bus_rdata[31:0]);
-
-   rvdffe #(32) dbg_data0_reg (.*, .din(data0_din[31:0]), .dout(data0_reg[31:0]), .en(data0_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   // data 1
-   assign data1_reg_wren0   = (dmi_reg_en & dmi_reg_wr_en & (dmi_reg_addr == 7'h5) & (dbg_state == HALTED) & ~abstractcs_reg[12]);
-   assign data1_reg_wren1   = (dbg_state == CMD_DONE) & (command_reg[31:24] == 8'h2) & command_reg[19] & ~(|abstractcs_reg[10:8]);   // aampostincrement
-   assign data1_reg_wren    = data1_reg_wren0 | data1_reg_wren1;
-
-   assign data1_din[31:0]   = ({32{data1_reg_wren0}} & dmi_reg_wdata[31:0]) |
-                              ({32{data1_reg_wren1}} & dbg_cmd_next_addr[31:0]);
-
-   rvdffe #(32)    dbg_data1_reg    (.*, .din(data1_din[31:0]), .dout(data1_reg[31:0]), .en(data1_reg_wren), .rst_l(dbg_dm_rst_l));
-
-   rvdffs #(1) sb_abmem_cmd_doneff  (.din(sb_abmem_cmd_done_in),  .dout(sb_abmem_cmd_done),  .en(sb_abmem_cmd_done_en),  .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-   rvdffs #(1) sb_abmem_data_doneff (.din(sb_abmem_data_done_in), .dout(sb_abmem_data_done), .en(sb_abmem_data_done_en), .clk(dbg_free_clk), .rst_l(dbg_dm_rst_l), .*);
-
-   // FSM to control the debug mode entry, command send/recieve, and Resume flow.
-   always_comb begin
-      dbg_nxtstate            = IDLE;
-      dbg_state_en            = 1'b0;
-      abstractcs_busy_wren    = 1'b0;
-      abstractcs_busy_din     = 1'b0;
-      dbg_halt_req            = dmcontrol_wren_Q & dmcontrol_reg[31];      // single pulse output to the core. Need to drive every time this register is written since core might be halted due to MPC
-      dbg_resume_req          = 1'b0;                                      // single pulse output to the core
-      dbg_sb_bus_error        = 1'b0;
-      data0_reg_wren2         = 1'b0;
-      sb_abmem_cmd_done_in    = 1'b0;
-      sb_abmem_data_done_in   = 1'b0;
-      sb_abmem_cmd_done_en    = 1'b0;
-      sb_abmem_data_done_en   = 1'b0;
-
-       case (dbg_state)
-            IDLE: begin
-                     dbg_nxtstate         = (dmstatus_reg[9] | dec_tlu_mpc_halted_only) ? HALTED : HALTING;         // initiate the halt command to the core
-                     dbg_state_en         = dmcontrol_reg[31] | dmstatus_reg[9] | dec_tlu_mpc_halted_only;      // when the jtag writes the halt bit in the DM register, OR when the status indicates H
-                     dbg_halt_req         = dmcontrol_reg[31];               // only when jtag has written the halt_req bit in the control. Removed debug mode qualification during MPC changes
-            end
-            HALTING : begin
-                     dbg_nxtstate         = HALTED;                                 // Goto HALTED once the core sends an ACK
-                     dbg_state_en         = dmstatus_reg[9] | dec_tlu_mpc_halted_only;     // core indicates halted
-            end
-            HALTED: begin
-                     // wait for halted to go away before send to resume. Else start of new command
-                     dbg_nxtstate         = dmstatus_reg[9] ? (resumereq ? RESUMING : (((command_reg[31:24] == 8'h2) & abmem_addr_external) ? SB_CMD_START : CORE_CMD_START)) :
-                                                                                    (dmcontrol_reg[31] ? HALTING : IDLE);       // This is MPC halted case
-                     dbg_state_en         = (dmstatus_reg[9] & resumereq) | execute_command | ~(dmstatus_reg[9] | dec_tlu_mpc_halted_only);
-                     abstractcs_busy_wren = dbg_state_en & ((dbg_nxtstate == CORE_CMD_START) | (dbg_nxtstate == SB_CMD_START));                 // write busy when a new command was written by jtag
-                     abstractcs_busy_din  = 1'b1;
-                     dbg_resume_req       = dbg_state_en & (dbg_nxtstate == RESUMING);                       // single cycle pulse to core if resuming
-            end
-            CORE_CMD_START: begin
-                     // Don't execute the command if cmderror or transfer=0 for abstract register access
-                     dbg_nxtstate         = ((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17])) ? CMD_DONE : CORE_CMD_WAIT;     // new command sent to the core
-                     dbg_state_en         = dbg_cmd_valid | (|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]);
-            end
-            CORE_CMD_WAIT: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = core_dbg_cmd_done;                   // go to done state for one cycle after completing current command
-            end
-            SB_CMD_START: begin
-                     dbg_nxtstate         = (|abstractcs_reg[10:8]) ? CMD_DONE : SB_CMD_SEND;
-                     dbg_state_en         = (dbg_bus_clk_en & ~sb_cmd_pending) | (|abstractcs_reg[10:8]);
-            end
-            SB_CMD_SEND: begin
-                     sb_abmem_cmd_done_in = 1'b1;
-                     sb_abmem_data_done_in= 1'b1;
-                     sb_abmem_cmd_done_en = (sb_bus_cmd_read | sb_bus_cmd_write_addr) & dbg_bus_clk_en;
-                     sb_abmem_data_done_en= (sb_bus_cmd_read | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-                     dbg_nxtstate         = SB_CMD_RESP;
-                     dbg_state_en         = (sb_abmem_cmd_done | sb_abmem_cmd_done_en) & (sb_abmem_data_done | sb_abmem_data_done_en) & dbg_bus_clk_en;
-            end
-            SB_CMD_RESP: begin
-                     dbg_nxtstate         = CMD_DONE;
-                     dbg_state_en         = (sb_bus_rsp_read | sb_bus_rsp_write) & dbg_bus_clk_en;
-                     dbg_sb_bus_error     = (sb_bus_rsp_read | sb_bus_rsp_write) & sb_bus_rsp_error & dbg_bus_clk_en;
-                     data0_reg_wren2      = dbg_state_en & ~sb_abmem_cmd_write & ~dbg_sb_bus_error;
-            end
-            CMD_DONE: begin
-                     dbg_nxtstate         = HALTED;
-                     dbg_state_en         = 1'b1;
-                     abstractcs_busy_wren = dbg_state_en;                    // remove the busy bit from the abstracts ( bit 12 )
-                     abstractcs_busy_din  = 1'b0;
-                     sb_abmem_cmd_done_in = 1'b0;
-                     sb_abmem_data_done_in= 1'b0;
-                     sb_abmem_cmd_done_en = 1'b1;
-                     sb_abmem_data_done_en= 1'b1;
-            end
-            RESUMING : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = dmstatus_reg[17];             // resume ack has been updated in the dmstatus register
-           end
-           default : begin
-                     dbg_nxtstate            = IDLE;
-                     dbg_state_en            = 1'b0;
-                     abstractcs_busy_wren    = 1'b0;
-                     abstractcs_busy_din     = 1'b0;
-                     dbg_halt_req            = 1'b0;         // single pulse output to the core
-                     dbg_resume_req          = 1'b0;         // single pulse output to the core
-                     dbg_sb_bus_error        = 1'b0;
-                     data0_reg_wren2         = 1'b0;
-                     sb_abmem_cmd_done_in    = 1'b0;
-                     sb_abmem_data_done_in   = 1'b0;
-                     sb_abmem_cmd_done_en    = 1'b0;
-                     sb_abmem_data_done_en   = 1'b0;
-          end
-         endcase
-   end // always_comb begin
-
-   assign dmi_reg_rdata_din[31:0] = ({32{dmi_reg_addr == 7'h4}}  & data0_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h5}}  & data1_reg[31:0])      |
-                                    ({32{dmi_reg_addr == 7'h10}} & {2'b0,dmcontrol_reg[29],1'b0,dmcontrol_reg[27:0]})  |  // Read0 to Write only bits
-                                    ({32{dmi_reg_addr == 7'h11}} & dmstatus_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h16}} & abstractcs_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h17}} & command_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h18}} & {30'h0,abstractauto_reg[1:0]})    |
-                                    ({32{dmi_reg_addr == 7'h40}} & haltsum0_reg[31:0])   |
-                                    ({32{dmi_reg_addr == 7'h38}} & sbcs_reg[31:0])       |
-                                    ({32{dmi_reg_addr == 7'h39}} & sbaddress0_reg[31:0]) |
-                                    ({32{dmi_reg_addr == 7'h3c}} & sbdata0_reg[31:0])    |
-                                    ({32{dmi_reg_addr == 7'h3d}} & sbdata1_reg[31:0]);
-
-
-   rvdffs #($bits(state_t)) dbg_state_reg    (.din(dbg_nxtstate), .dout({dbg_state}), .en(dbg_state_en), .rst_l(dbg_dm_rst_l & rst_l), .clk(dbg_free_clk));
-   rvdffe #(32)             dmi_rddata_reg   (.din(dmi_reg_rdata_din[31:0]), .dout(dmi_reg_rdata[31:0]), .en(dmi_reg_en), .rst_l(dbg_dm_rst_l), .clk(clk), .*);
-
-   assign abmem_addr[31:0]      = data1_reg[31:0];
-   assign abmem_addr_core_local = (abmem_addr_in_dccm_region | abmem_addr_in_iccm_region | abmem_addr_in_pic_region);
-   assign abmem_addr_external   = ~abmem_addr_core_local;
-
-   assign abmem_addr_in_dccm_region = (abmem_addr[31:28] == pt.DCCM_REGION) & pt.DCCM_ENABLE;
-   assign abmem_addr_in_iccm_region = (abmem_addr[31:28] == pt.ICCM_REGION) & pt.ICCM_ENABLE;
-   assign abmem_addr_in_pic_region  = (abmem_addr[31:28] == pt.PIC_REGION);
-
-   // interface for the core
-   assign dbg_cmd_addr[31:0]    = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {20'b0, command_reg[11:0]};
-   assign dbg_cmd_wrdata[31:0]  = data0_reg[31:0];
-   assign dbg_cmd_valid         = (dbg_state == CORE_CMD_START) & ~((|abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h0) & ~command_reg[17]) | ((command_reg[31:24] == 8'h2) & abmem_addr_external)) & dma_dbg_ready;
-   assign dbg_cmd_write         = command_reg[16];
-   assign dbg_cmd_type[1:0]     = (command_reg[31:24] == 8'h2) ? 2'b10 : {1'b0, (command_reg[15:12] == 4'b0)};
-   assign dbg_cmd_size[1:0]     = command_reg[21:20];
-
-   assign dbg_cmd_addr_incr[3:0]  = (command_reg[31:24] == 8'h2) ? (4'h1 << sb_abmem_cmd_size[1:0]) : 4'h1;
-   assign dbg_cmd_curr_addr[31:0] = (command_reg[31:24] == 8'h2) ? data1_reg[31:0]  : {16'b0, command_reg[15:0]};
-   assign dbg_cmd_next_addr[31:0] = dbg_cmd_curr_addr[31:0] + {28'h0,dbg_cmd_addr_incr[3:0]};
-
-   // Ask DMA to stop taking bus trxns since debug request is done
-   assign dbg_dma_bubble = ((dbg_state == CORE_CMD_START) & ~(|abstractcs_reg[10:8])) | (dbg_state == CORE_CMD_WAIT);
-
-   assign sb_cmd_pending       = (sb_state == CMD_RD) | (sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR) | (sb_state == CMD_WR_DATA) | (sb_state == RSP_RD) | (sb_state == RSP_WR);
-   assign sb_abmem_cmd_pending = (dbg_state == SB_CMD_START) | (dbg_state == SB_CMD_SEND) | (dbg_state== SB_CMD_RESP);
-
-
-  // system bus FSM
-  always_comb begin
-      sb_nxtstate            = SBIDLE;
-      sb_state_en            = 1'b0;
-      sbcs_sbbusy_wren       = 1'b0;
-      sbcs_sbbusy_din        = 1'b0;
-      sbcs_sberror_wren      = 1'b0;
-      sbcs_sberror_din[2:0]  = 3'b0;
-      sbaddress0_reg_wren1   = 1'b0;
-      case (sb_state)
-            SBIDLE: begin
-                     sb_nxtstate            = sbdata0wr_access ? WAIT_WR : WAIT_RD;
-                     sb_state_en            = (sbdata0wr_access | sbreadondata_access | sbreadonaddr_access) & ~(|sbcs_reg[14:12]) & ~sbcs_reg[22];
-                     sbcs_sbbusy_wren       = sb_state_en;                                                 // set the single read bit if it is a singlread command
-                     sbcs_sbbusy_din        = 1'b1;
-                     sbcs_sberror_wren      = sbcs_wren & (|dmi_reg_wdata[14:12]);                                            // write to clear the error bits
-                     sbcs_sberror_din[2:0]  = ~dmi_reg_wdata[14:12] & sbcs_reg[14:12];
-            end
-            WAIT_RD: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_RD;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            WAIT_WR: begin
-                     sb_nxtstate           = (sbcs_unaligned | sbcs_illegal_size) ? DONE : CMD_WR;
-                     sb_state_en           = (dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_wren     = sbcs_unaligned | sbcs_illegal_size;
-                     sbcs_sberror_din[2:0] = sbcs_unaligned ? 3'b011 : 3'b100;
-            end
-            CMD_RD : begin
-                     sb_nxtstate           = RSP_RD;
-                     sb_state_en           = sb_bus_cmd_read & dbg_bus_clk_en;
-            end
-            CMD_WR : begin
-                     sb_nxtstate           = (sb_bus_cmd_write_addr & sb_bus_cmd_write_data) ? RSP_WR : (sb_bus_cmd_write_data ? CMD_WR_ADDR : CMD_WR_DATA);
-                     sb_state_en           = (sb_bus_cmd_write_addr | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-            end
-            CMD_WR_ADDR : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_addr & dbg_bus_clk_en;
-            end
-            CMD_WR_DATA : begin
-                     sb_nxtstate           = RSP_WR;
-                     sb_state_en           = sb_bus_cmd_write_data & dbg_bus_clk_en;
-            end
-            RSP_RD: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_read & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            RSP_WR: begin
-                     sb_nxtstate           = DONE;
-                     sb_state_en           = sb_bus_rsp_write & dbg_bus_clk_en;
-                     sbcs_sberror_wren     = sb_state_en & sb_bus_rsp_error;
-                     sbcs_sberror_din[2:0] = 3'b010;
-            end
-            DONE: begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b1;
-                     sbcs_sbbusy_wren       = 1'b1;                           // reset the single read
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbaddress0_reg_wren1   = sbcs_reg[16] & (sbcs_reg[14:12] == 3'b0);    // auto increment was set and no error. Update to new address after completing the current command
-            end
-            default : begin
-                     sb_nxtstate            = SBIDLE;
-                     sb_state_en            = 1'b0;
-                     sbcs_sbbusy_wren       = 1'b0;
-                     sbcs_sbbusy_din        = 1'b0;
-                     sbcs_sberror_wren      = 1'b0;
-                     sbcs_sberror_din[2:0]  = 3'b0;
-                     sbaddress0_reg_wren1   = 1'b0;
-           end
-         endcase
-   end // always_comb begin
-
-   rvdffs #($bits(sb_state_t)) sb_state_reg (.din(sb_nxtstate), .dout({sb_state}), .en(sb_state_en), .rst_l(dbg_dm_rst_l), .clk(sb_free_clk));
-
-   assign sb_abmem_cmd_write      = command_reg[16];
-   assign sb_abmem_cmd_size[2:0]  = {1'b0, command_reg[21:20]};
-   assign sb_abmem_cmd_addr[31:0] = abmem_addr[31:0];
-   assign sb_abmem_cmd_wdata[31:0] = data0_reg[31:0];
-
-   assign sb_cmd_size[2:0]   = sbcs_reg[19:17];
-   assign sb_cmd_wdata[63:0] = {sbdata1_reg[31:0], sbdata0_reg[31:0]};
-   assign sb_cmd_addr[31:0]  = sbaddress0_reg[31:0];
-
-   assign sb_abmem_cmd_awvalid    = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_cmd_done;
-   assign sb_abmem_cmd_wvalid     = (dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write & ~sb_abmem_data_done;
-   assign sb_abmem_cmd_arvalid    = (dbg_state == SB_CMD_SEND) & ~sb_abmem_cmd_write & ~sb_abmem_cmd_done & ~sb_abmem_data_done;
-   assign sb_abmem_read_pend      = (dbg_state == SB_CMD_RESP) & ~sb_abmem_cmd_write;
-
-   assign sb_cmd_awvalid     = ((sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR));
-   assign sb_cmd_wvalid      = ((sb_state == CMD_WR) | (sb_state == CMD_WR_DATA));
-   assign sb_cmd_arvalid     = (sb_state == CMD_RD);
-   assign sb_read_pend       = (sb_state == RSP_RD);
-
-   assign sb_axi_size[2:0]    = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_size[2:0] : sb_cmd_size[2:0];
-   assign sb_axi_addr[31:0]   = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid | sb_abmem_cmd_arvalid | sb_abmem_read_pend) ? sb_abmem_cmd_addr[31:0] : sb_cmd_addr[31:0];
-   assign sb_axi_wrdata[63:0] = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid) ? {2{sb_abmem_cmd_wdata[31:0]}} : sb_cmd_wdata[63:0];
-
-   // Generic bus response signals
-   assign sb_bus_cmd_read       = sb_axi_arvalid & sb_axi_arready;
-   assign sb_bus_cmd_write_addr = sb_axi_awvalid & sb_axi_awready;
-   assign sb_bus_cmd_write_data = sb_axi_wvalid  & sb_axi_wready;
-
-   assign sb_bus_rsp_read  = sb_axi_rvalid & sb_axi_rready;
-   assign sb_bus_rsp_write = sb_axi_bvalid & sb_axi_bready;
-   assign sb_bus_rsp_error = (sb_bus_rsp_read & (|(sb_axi_rresp[1:0]))) | (sb_bus_rsp_write & (|(sb_axi_bresp[1:0])));
-
-   // AXI Request signals
-   assign sb_axi_awvalid              = sb_abmem_cmd_awvalid | sb_cmd_awvalid;
-   assign sb_axi_awaddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_awid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_awsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_awprot[2:0]          = 3'b001;
-   assign sb_axi_awcache[3:0]         = 4'b1111;
-   assign sb_axi_awregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_awlen[7:0]           = '0;
-   assign sb_axi_awburst[1:0]         = 2'b01;
-   assign sb_axi_awqos[3:0]           = '0;
-   assign sb_axi_awlock               = '0;
-
-   assign sb_axi_wvalid       = sb_abmem_cmd_wvalid | sb_cmd_wvalid;
-   assign sb_axi_wdata[63:0]  = ({64{(sb_axi_size[2:0] == 3'h0)}} & {8{sb_axi_wrdata[7:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h1)}} & {4{sb_axi_wrdata[15:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h2)}} & {2{sb_axi_wrdata[31:0]}}) |
-                                ({64{(sb_axi_size[2:0] == 3'h3)}} & {sb_axi_wrdata[63:0]});
-   assign sb_axi_wstrb[7:0]   = ({8{(sb_axi_size[2:0] == 3'h0)}} & (8'h1 << sb_axi_addr[2:0])) |
-                                ({8{(sb_axi_size[2:0] == 3'h1)}} & (8'h3 << {sb_axi_addr[2:1],1'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h2)}} & (8'hf << {sb_axi_addr[2],2'b0})) |
-                                ({8{(sb_axi_size[2:0] == 3'h3)}} & 8'hff);
-   assign sb_axi_wlast        = '1;
-
-   assign sb_axi_arvalid              = sb_abmem_cmd_arvalid | sb_cmd_arvalid;
-   assign sb_axi_araddr[31:0]         = sb_axi_addr[31:0];
-   assign sb_axi_arid[pt.SB_BUS_TAG-1:0] = '0;
-   assign sb_axi_arsize[2:0]          = sb_axi_size[2:0];
-   assign sb_axi_arprot[2:0]          = 3'b001;
-   assign sb_axi_arcache[3:0]         = 4'b0;
-   assign sb_axi_arregion[3:0]        = sb_axi_addr[31:28];
-   assign sb_axi_arlen[7:0]           = '0;
-   assign sb_axi_arburst[1:0]         = 2'b01;
-   assign sb_axi_arqos[3:0]           = '0;
-   assign sb_axi_arlock               = '0;
-
-   // AXI Response signals
-   assign sb_axi_bready = 1'b1;
-
-   assign sb_axi_rready = 1'b1;
-   assign sb_bus_rdata[63:0] = ({64{sb_axi_size == 3'h0}} & ((sb_axi_rdata[63:0] >>  8*sb_axi_addr[2:0]) & 64'hff))       |
-                               ({64{sb_axi_size == 3'h1}} & ((sb_axi_rdata[63:0] >> 16*sb_axi_addr[2:1]) & 64'hffff))    |
-                               ({64{sb_axi_size == 3'h2}} & ((sb_axi_rdata[63:0] >> 32*sb_axi_addr[2]) & 64'hffff_ffff)) |
-                               ({64{sb_axi_size == 3'h3}} & sb_axi_rdata[63:0]);
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// dec: decode unit - decode, bypassing, ARF, interrupts
-//
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Decode
-// Comments: Decode, dependency scoreboard, ARF
-//
-//
-// A -> D -> EX1 ... WB
-//
-//********************************************************************************
-
-module eb1_dec
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_clk,                     // Clock always.                  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic lsu_fastint_stall_any,        // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-   output logic dec_extint_stall,            // Stall on external interrupt
-
-   output logic dec_i0_decode_d,             // Valid instruction at D-stage and not blocked
-   output logic dec_pause_state_cg,          // to top for active state clock gating
-
-   output logic dec_tlu_core_empty,
-
-   input logic rst_l,                        // reset, active low
-   input logic [31:1] rst_vec,               // reset vector, from core pins
-
-   input logic        nmi_int,               // NMI pin
-   input logic [31:1] nmi_vec,               // NMI vector, from pins
-
-   input logic  i_cpu_halt_req,              // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,               // Asynchronous Restart request to CPU
-
-   output logic o_cpu_halt_status,           // Halt status of core (pmu/fw)
-   output logic o_cpu_halt_ack,              // Halt request ack
-   output logic o_cpu_run_ack,               // Run request ack
-   output logic o_debug_mode_status,         // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id,               // CORE ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req,           // Async halt request
-   input logic mpc_debug_run_req,            // Async run request
-   input logic mpc_reset_run_req,            // Run/halt after reset
-   output logic mpc_debug_halt_ack,          // Halt ack
-   output logic mpc_debug_run_ack,           // Run ack
-   output logic debug_brkpt_status,          // debug breakpoint
-
-    input logic       exu_pmu_i0_br_misp,    // slot 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // slot 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // slot 0 4 byte branch
-
-
-   input logic                                lsu_nonblock_load_valid_m,      // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,        // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,        // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,    // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,   // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,   // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,     // -> corresponding tag
-   input logic [31:0]                         lsu_nonblock_load_data,         // nonblock load data
-
-   input logic       lsu_pmu_bus_trxn,           // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned,     // D side bus misaligned
-   input logic       lsu_pmu_bus_error,          // D side bus error
-   input logic       lsu_pmu_bus_busy,           // D side bus busy
-   input logic       lsu_pmu_misaligned_m,       // D side load or store misaligned
-   input logic       lsu_pmu_load_external_m,    // D side bus load
-   input logic       lsu_pmu_store_external_m,   // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr,          // Fast int address
-   input logic [1:0] lsu_fir_error,          // Fast int lookup error
-
-   input logic       ifu_pmu_instr_aligned,  // aligned instructions
-   input logic       ifu_pmu_fetch_stall,    // fetch unit stalled
-   input logic       ifu_pmu_ic_miss,        // icache miss
-   input logic       ifu_pmu_ic_hit,         // icache hit
-   input logic       ifu_pmu_bus_error,      // Instruction side bus error
-   input logic       ifu_pmu_bus_busy,       // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn,       // Instruction side bus transaction
-
-   input logic       ifu_ic_error_start,     // IC single bit error
-   input logic       ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-   input logic [3:0]  lsu_trigger_match_m,
-   input logic        dbg_cmd_valid,         // debugger abstract command valid
-   input logic        dbg_cmd_write,         // command is a write
-   input logic  [1:0] dbg_cmd_type,          // command type
-   input logic [31:0] dbg_cmd_addr,          // command address
-   input logic  [1:0] dbg_cmd_wrdata,        // command write data, for fence/fence_i
-
-
-   input logic        ifu_i0_icaf,           // icache access fault
-   input logic [1:0]  ifu_i0_icaf_type,      // icache access fault type
-
-   input logic   ifu_i0_icaf_second,         // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,               // icache/iccm double-bit error
-
-   input logic lsu_idle_any,                 // lsu idle for halting
-
-   input eb1_br_pkt_t i0_brp,                                  // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,            // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,           // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_lsu_error_pkt_t lsu_error_pkt_r,         // LSU exception/error packet
-   input logic         lsu_single_ecc_error_incr,      // LSU inc SB error counter
-
-   input logic         lsu_imprecise_error_load_any,   // LSU imprecise load bus error
-   input logic         lsu_imprecise_error_store_any,  // LSU imprecise store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any,   // LSU imprecise bus error address
-
-   input logic [31:0]  exu_div_result,      // final div result
-   input logic         exu_div_wren,        // Divide write enable to GPR
-
-   input logic [31:0] exu_csr_rs1_x,        // rs1 for csr instruction
-
-   input logic [31:0] lsu_result_m,         // load result
-   input logic [31:0] lsu_result_corr_r,    // load result - corrected load data
-
-   input logic        lsu_load_stall_any,   // This is for blocking loads
-   input logic        lsu_store_stall_any,  // This is for blocking stores
-   input logic        dma_dccm_stall_any,   // stall any load/store at decode, pmu event
-   input logic        dma_iccm_stall_any,   // iccm stalled, pmu event
-
-   input logic       iccm_dma_sb_error,     // ICCM DMA single bit error
-
-   input logic exu_flush_final,             // slot0 flush
-
-   input logic [31:1] exu_npc_r,            // next PC
-
-   input logic [31:0] exu_i0_result_x,      // alu result x
-
-
-   input logic         ifu_i0_valid,                  // fetch valids to instruction buffer
-   input logic [31:0]  ifu_i0_instr,                  // fetch inst's to instruction buffer
-   input logic [31:1]  ifu_i0_pc,                     // pc's for instruction buffer
-   input logic         ifu_i0_pc4,                    // indication of 4B or 2B for corresponding inst
-   input logic  [31:1] exu_i0_pc_x,                   // pc's for e1 from the alu's
-
-   input logic mexintpend,                            // External interrupt pending
-   input logic timer_int,                             // Timer interrupt pending (from pin)
-   input logic soft_int,                              // Software interrupt pending (from pin)
-
-   input logic [7:0] pic_claimid,                     // PIC claimid
-   input logic [3:0] pic_pl,                          // PIC priv level
-   input logic       mhwakeup,                        // High priority wakeup
-
-   output logic [3:0] dec_tlu_meicurpl,               // to PIC, Current priv level
-   output logic [3:0] dec_tlu_meipt,                  // to PIC
-
-   input logic [70:0] ifu_ic_debug_rd_data,           // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid,            // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-
-
-// Debug start
-   input logic dbg_halt_req,                 // DM requests a halt
-   input logic dbg_resume_req,               // DM requests a resume
-   input logic ifu_miss_state_idle,          // I-side miss buffer empty
-
-   output logic dec_tlu_dbg_halted,          // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode,          // Core is in debug mode
-   output logic dec_tlu_resume_ack,          // Resume acknowledge
-   output logic dec_tlu_flush_noredir_r,     // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only,     // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r,    // single step
-   output logic dec_tlu_flush_err_r,         // iside perr/ecc rfpc
-   output logic [31:2] dec_tlu_meihap,       // Fast ext int base
-
-   output logic dec_debug_wdata_rs1_d,       // insert debug write data into rs1 at decode
-
-   output logic [31:0] dec_dbg_rddata,       // debug command read data
-
-   output logic dec_dbg_cmd_done,            // abstract command is done
-   output logic dec_dbg_cmd_fail,            // abstract command failed (illegal reg address)
-
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // info needed by debug trigger blocks
-
-   output logic dec_tlu_force_halt,          // halt has been forced
-// Debug end
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r,             // history
-   input logic        exu_i0_br_error_r,            // error
-   input logic        exu_i0_br_start_error_r,      // start error
-   input logic        exu_i0_br_valid_r,            // valid
-   input logic        exu_i0_br_mp_r,               // mispredict
-   input logic        exu_i0_br_middle_r,           // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r,         // way hit or repl
-
-   output logic         dec_i0_rs1_en_d,            // Qualify GPR RS1 data
-   output logic         dec_i0_rs2_en_d,            // Qualify GPR RS2 data
-   output logic  [31:0] gpr_i0_rs1_d,               // gpr rs1 data
-   output logic  [31:0] gpr_i0_rs2_d,               // gpr rs2 data
-
-   output logic [31:0] dec_i0_immed_d,              // immediate data
-   output logic [12:1] dec_i0_br_immed_d,           // br immediate data
-
-   output        eb1_alu_pkt_t i0_ap,              // alu packet
-
-   output logic          dec_i0_alu_decode_d,       // schedule on D-stage alu
-   output logic          dec_i0_branch_d,           // Branch in D-stage
-
-   output logic          dec_i0_select_pc_d,        // select pc onto rs1 for jal's
-
-   output logic [31:1]  dec_i0_pc_d,                // pc's at decode
-   output logic [3:0]   dec_i0_rs1_bypass_en_d,     // rs1 bypass enable
-   output logic [3:0]   dec_i0_rs2_bypass_en_d,     // rs2 bypass enable
-
-   output logic [31:0]  dec_i0_result_r,            // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                  // lsu packet
-   output logic             dec_qual_lsu_d,         // LSU instruction at D.  Use to quiet LSU operands
-   output eb1_mul_pkt_t    mul_p,                  // mul packet
-   output eb1_div_pkt_t    div_p,                  // div packet
-   output logic             dec_div_cancel,         // cancel divide operation
-
-   output logic [11:0] dec_lsu_offset_d,            // 12b offset for load/store addresses
-
-   output logic        dec_csr_ren_d,               // CSR read enable
-   output logic [31:0] dec_csr_rddata_d,            // CSR read data
-
-   output logic        dec_tlu_flush_lower_r,       // tlu flush due to late mp, exception, rfpc, or int
-   output logic        dec_tlu_flush_lower_wb,
-   output logic [31:1] dec_tlu_flush_path_r,        // tlu flush target
-   output logic        dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic        dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-
-   output logic [31:1] pred_correct_npc_x,          // npc if prediction is correct at e2 stage
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt,      // slot 0 branch predictor update packet
-
-   output logic dec_tlu_perfcnt0,                   // toggles when slot0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1,                   // toggles when slot0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2,                   // toggles when slot0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3,                   // toggles when slot0 perf counter 3 has an event inc
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,                        // prediction packet to alus
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic dec_lsu_valid_raw_d,
-
-   output logic [31:0] dec_tlu_mrac_ff,              // CSR for memory region control
-
-   output logic [1:0] dec_data_en,                   // clock-gate control logic
-   output logic [1:0] dec_ctl_en,
-
-   input logic [15:0] ifu_i0_cinst,                  // 16b compressed instruction
-
-   output eb1_trace_pkt_t  trace_rv_trace_pkt,      // trace packet
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable,     // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable,           // disable core ECC
-   output logic  dec_tlu_bpred_disable,              // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,      // disable writebuffer coalescing
-   output logic [2:0]  dec_tlu_dma_qos_prty,         // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override,          // override misc clock domain gating
-   output logic  dec_tlu_ifu_clk_override,           // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,           // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,           // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,           // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,         // override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override,          // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override,           // override ICCM clock domain gating
-
-   output logic  dec_tlu_i0_commit_cmt,              // committed i0 instruction
-   input  logic  scan_mode                           // Flop scan mode control
- 
-
-   );
-
-
-   logic  dec_tlu_dec_clk_override;      // to and from dec blocks
-   logic  clk_override;
-
-   logic               dec_ib0_valid_d;
-
-   logic               dec_pmu_instr_decoded;
-   logic               dec_pmu_decode_stall;
-   logic               dec_pmu_presync_stall;
-   logic               dec_pmu_postsync_stall;
-
-   logic dec_tlu_wr_pause_r;             // CSR write to pause reg is at R.
-
-   logic [4:0]  dec_i0_rs1_d;
-   logic [4:0]  dec_i0_rs2_d;
-
-   logic [31:0] dec_i0_instr_d;
-
-   logic  dec_tlu_trace_disable;
-   logic  dec_tlu_pipelining_disable;
-
-
-   logic [4:0]  dec_i0_waddr_r;
-   logic        dec_i0_wen_r;
-   logic [31:0] dec_i0_wdata_r;
-   logic        dec_csr_wen_r;           // csr write enable at wb
-   logic [11:0] dec_csr_wraddr_r;        // write address for csryes
-   logic [31:0] dec_csr_wrdata_r;        // csr write data at wb
-
-   logic [11:0] dec_csr_rdaddr_d;        // read address for csr
-   logic        dec_csr_legal_d;         // csr indicates legal operation
-
-   logic        dec_csr_wen_unq_d;       // valid csr with write - for csr legal
-   logic        dec_csr_any_unq_d;       // valid csr - for csr legal
-   logic        dec_csr_stall_int_ff;    // csr is mie/mstatus
-
-   eb1_trap_pkt_t dec_tlu_packet_r;
-
-   logic        dec_i0_pc4_d;
-   logic        dec_tlu_presync_d;
-   logic        dec_tlu_postsync_d;
-   logic        dec_tlu_debug_stall;
-
-   logic [31:0] dec_illegal_inst;
-
-   logic                      dec_i0_icaf_d;
-
-   logic                      dec_i0_dbecc_d;
-   logic                      dec_i0_icaf_second_d;
-   logic [3:0]                dec_i0_trigger_match_d;
-   logic                      dec_debug_fence_d;
-   logic                      dec_nonblock_load_wen;
-   logic [4:0]                dec_nonblock_load_waddr;
-   logic                      dec_tlu_flush_pause_r;
-   eb1_br_pkt_t                   dec_i0_brp;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index;
-   logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr;
-   logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag;
-   logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index;          // Fully associt btb index
-
-   logic [31:1]               dec_tlu_i0_pc_r;
-   logic                      dec_tlu_i0_kill_writeb_wb;
-   logic                      dec_tlu_i0_valid_r;
-
-   logic                      dec_pause_state;
-
-   logic [1:0]                dec_i0_icaf_type_d;   // i0 instruction access fault type
-
-   logic                      dec_tlu_flush_extint; // Fast ext int started
-
-   logic [31:0]               dec_i0_inst_wb;
-   logic [31:1]               dec_i0_pc_wb;
-   logic                      dec_tlu_i0_valid_wb1,  dec_tlu_int_valid_wb1;
-   logic [4:0]                dec_tlu_exc_cause_wb1;
-   logic [31:0]               dec_tlu_mtval_wb1;
-   logic                      dec_tlu_i0_exc_valid_wb1;
-
-   logic [4:0]                div_waddr_wb;
-   logic                      dec_div_active;
-
-   logic                      dec_debug_valid_d;
-
-
-// Adding signals for vector
-   
-   //logic stall_scalar;
-   
-   
-   
-   assign clk_override = dec_tlu_dec_clk_override;
-
-
-   assign dec_dbg_rddata[31:0] = dec_i0_wdata_r[31:0];
-
-
-   eb1_dec_ib_ctl #(.pt(pt)) instbuff (.*);
-
-
-   eb1_dec_decode_ctl #(.pt(pt)) decode (.*);
-
-
-   eb1_dec_tlu_ctl #(.pt(pt)) tlu (.*);
-
-
-   eb1_dec_gpr_ctl #(.pt(pt)) arf (.*,
-                    // inputs
-                    .raddr0(dec_i0_rs1_d[4:0]),
-                    .raddr1(dec_i0_rs2_d[4:0]),
-
-                    .wen0(dec_i0_wen_r),          .waddr0(dec_i0_waddr_r[4:0]),          .wd0(dec_i0_wdata_r[31:0]),
-                    .wen1(dec_nonblock_load_wen), .waddr1(dec_nonblock_load_waddr[4:0]), .wd1(lsu_nonblock_load_data[31:0]),
-                    .wen2(exu_div_wren),          .waddr2(div_waddr_wb),                 .wd2(exu_div_result[31:0]),
-
-                    // outputs
-                    .rd0(gpr_i0_rs1_d[31:0]), .rd1(gpr_i0_rs2_d[31:0])
-                    );
-
-
-// Trigger
-
-   eb1_dec_trigger #(.pt(pt)) dec_trigger (.*);
-
-
-
-
-// trace
-   assign trace_rv_trace_pkt.trace_rv_i_insn_ip      =   dec_i0_inst_wb[31:0];
-   assign trace_rv_trace_pkt.trace_rv_i_address_ip   = { dec_i0_pc_wb[31:1], 1'b0};
-
-   assign trace_rv_trace_pkt.trace_rv_i_valid_ip     = dec_tlu_int_valid_wb1 | dec_tlu_i0_valid_wb1 | dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_exception_ip = dec_tlu_int_valid_wb1 |  dec_tlu_i0_exc_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_ecause_ip    = dec_tlu_exc_cause_wb1[4:0];     // replicate across ports
-   assign trace_rv_trace_pkt.trace_rv_i_interrupt_ip = dec_tlu_int_valid_wb1;
-   assign trace_rv_trace_pkt.trace_rv_i_tval_ip      = dec_tlu_mtval_wb1[31:0];        // replicate across ports
-
-
-
-// end trace
-
-
-endmodule // eb1_dec
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_dec_decode_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic dec_tlu_trace_disable,
-   input logic dec_debug_valid_d,
-
-   input logic dec_tlu_flush_extint,         // Flush external interrupt
-
-   input logic dec_tlu_force_halt,           // invalidate nonblock load cam on a force halt event
-
-   output logic dec_extint_stall,            // Stall from external interrupt
-
-   input  logic [15:0] ifu_i0_cinst,         // 16b compressed instruction
-   output logic [31:0] dec_i0_inst_wb,       // 32b instruction at wb+1 for trace encoder
-   output logic [31:1] dec_i0_pc_wb,         // 31b pc at wb+1 for trace encoder
-
-
-   input logic                                lsu_nonblock_load_valid_m,       // valid nonblock load at m
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_tag_m,         // -> corresponding tag
-   input logic                                lsu_nonblock_load_inv_r,         // invalidate request for nonblock load r
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_inv_tag_r,     // -> corresponding tag
-   input logic                                lsu_nonblock_load_data_valid,    // valid nonblock load data back
-   input logic                                lsu_nonblock_load_data_error,    // nonblock load bus error
-   input logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0]  lsu_nonblock_load_data_tag,      // -> corresponding tag
-
-
-   input logic [3:0] dec_i0_trigger_match_d,          // i0 decode trigger matches
-
-   input logic dec_tlu_wr_pause_r,                    // pause instruction at r
-   input logic dec_tlu_pipelining_disable,            // pipeline disable - presync, i0 decode only
-
-   input logic [3:0]  lsu_trigger_match_m,            // lsu trigger matches
-
-   input logic lsu_pmu_misaligned_m,                  // perf mon: load/store misalign
-   input logic dec_tlu_debug_stall,                   // debug stall decode
-   input logic dec_tlu_flush_leak_one_r,              // leak1 instruction
-
-   input logic dec_debug_fence_d,                     // debug fence instruction
-
-   input logic [1:0] dbg_cmd_wrdata,                  // disambiguate fence, fence_i
-
-   input logic dec_i0_icaf_d,                         // icache access fault
-   input logic dec_i0_icaf_second_d,                  // i0 instruction access fault on second 2B of 4B inst
-   input logic [1:0] dec_i0_icaf_type_d,              // i0 instruction access fault type
-
-   input logic dec_i0_dbecc_d,                        // icache/iccm double-bit error
-
-   input eb1_br_pkt_t dec_i0_brp,                    // branch packet
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   input logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,  // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag, // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   input logic lsu_idle_any,                          // lsu idle: if fence instr & ~lsu_idle then stall decode
-
-   input logic lsu_load_stall_any,                    // stall any load at decode
-   input logic lsu_store_stall_any,                   // stall any store at decode
-   input logic dma_dccm_stall_any,                    // stall any load/store at decode
-
-   input logic exu_div_wren,                          // nonblocking divide write enable to GPR.
-
-   input logic dec_tlu_i0_kill_writeb_wb,             // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_wb,                // trap lower flush
-   input logic dec_tlu_i0_kill_writeb_r,              // I0 is flushed, don't writeback any results to arch state
-   input logic dec_tlu_flush_lower_r,                 // trap lower flush
-   input logic dec_tlu_flush_pause_r,                 // don't clear pause state on initial lower flush
-   input logic dec_tlu_presync_d,                     // CSR read needs to be presync'd
-   input logic dec_tlu_postsync_d,                    // CSR ops that need to be postsync'd
-
-   input logic dec_i0_pc4_d,                          // inst is 4B inst else 2B
-
-   input logic [31:0] dec_csr_rddata_d,               // csr read data at wb
-   input logic dec_csr_legal_d,                       // csr indicates legal operation
-
-   input logic [31:0] exu_csr_rs1_x,                  // rs1 for csr instr
-
-   input logic [31:0] lsu_result_m,                   // load result
-   input logic [31:0] lsu_result_corr_r,              // load result - corrected data for writing gpr's, not for bypassing
-
-   input logic exu_flush_final,                       // lower flush or i0 flush at X or D
-
-   input logic [31:1] exu_i0_pc_x,                    // pcs at e1
-
-   input logic [31:0] dec_i0_instr_d,                 // inst at decode
-
-   input logic  dec_ib0_valid_d,                      // inst valid at decode
-
-   input logic [31:0] exu_i0_result_x,                // from primary alu's
-
-   input logic  clk,                                  // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic  active_clk,                           // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic  free_l2clk,                           // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic  clk_override,                         // Override non-functional clock gating
-   input logic  rst_l,                                // Flop reset
-
-
-
-   output logic        dec_i0_rs1_en_d,               // rs1 enable at decode
-   output logic        dec_i0_rs2_en_d,               // rs2 enable at decode
-
-   output logic [4:0]  dec_i0_rs1_d,                  // rs1 logical source
-   output logic [4:0]  dec_i0_rs2_d,                  // rs2 logical source
-
-   output logic [31:0] dec_i0_immed_d,                // 32b immediate data decode
-
-
-   output logic [12:1] dec_i0_br_immed_d,             // 12b branch immediate
-
-   output eb1_alu_pkt_t i0_ap,                       // alu packets
-
-   output logic        dec_i0_decode_d,               // i0 decode
-
-   output logic        dec_i0_alu_decode_d,           // decode to D-stage alu
-   output logic        dec_i0_branch_d,               // Branch in D-stage
-
-   output logic [4:0]  dec_i0_waddr_r,                // i0 logical source to write to gpr's
-   output logic        dec_i0_wen_r,                  // i0 write enable
-   output logic [31:0] dec_i0_wdata_r,                // i0 write data
-
-   output logic        dec_i0_select_pc_d,            // i0 select pc for rs1 - branches
-
-   output logic [3:0]    dec_i0_rs1_bypass_en_d,      // i0 rs1 bypass enable
-   output logic [3:0]    dec_i0_rs2_bypass_en_d,      // i0 rs2 bypass enable
-   output logic [31:0]   dec_i0_result_r,             // Result R-stage
-
-   output eb1_lsu_pkt_t    lsu_p,                    // load/store packet
-   output logic             dec_qual_lsu_d,           // LSU instruction at D.  Use to quiet LSU operands
-
-   output eb1_mul_pkt_t    mul_p,                    // multiply packet
-
-   output eb1_div_pkt_t    div_p,                    // divide packet
-   output logic [4:0]       div_waddr_wb,             // DIV write address to GPR
-   output logic             dec_div_cancel,           // cancel the divide operation
-
-   output logic        dec_lsu_valid_raw_d,
-   output logic [11:0] dec_lsu_offset_d,
-
-   output logic        dec_csr_ren_d,                 // valid csr decode
-   output logic        dec_csr_wen_unq_d,             // valid csr with write - for csr legal
-   output logic        dec_csr_any_unq_d,             // valid csr - for csr legal
-   output logic [11:0] dec_csr_rdaddr_d,              // read address for csr
-   output logic        dec_csr_wen_r,                 // csr write enable at r
-   output logic [11:0] dec_csr_wraddr_r,              // write address for csr
-   output logic [31:0] dec_csr_wrdata_r,              // csr write data at r
-   output logic        dec_csr_stall_int_ff,          // csr is mie/mstatus
-
-   output              dec_tlu_i0_valid_r,            // i0 valid inst at c
-
-   output eb1_trap_pkt_t   dec_tlu_packet_r,              // trap packet
-
-   output logic [31:1] dec_tlu_i0_pc_r,               // i0 trap pc
-
-   output logic [31:0] dec_illegal_inst,              // illegal inst
-   output logic [31:1] pred_correct_npc_x,            // npc e2 if the prediction is correct
-
-   output eb1_predict_pkt_t dec_i0_predict_p_d,      // i0 predict packet decode
-   output logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d, // i0 predict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d, // i0 predict index
-   output logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d, // i0_predict branch tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   output logic [1:0] dec_data_en,                    // clock-gating logic
-   output logic [1:0] dec_ctl_en,
-
-   output logic       dec_pmu_instr_decoded,          // number of instructions decode this cycle encoded
-   output logic       dec_pmu_decode_stall,           // decode is stalled
-   output logic       dec_pmu_presync_stall,          // decode has presync stall
-   output logic       dec_pmu_postsync_stall,         // decode has postsync stall
-
-   output logic       dec_nonblock_load_wen,          // write enable for nonblock load
-   output logic [4:0] dec_nonblock_load_waddr,        // logical write addr for nonblock load
-   output logic       dec_pause_state,                // core in pause state
-   output logic       dec_pause_state_cg,             // pause state for clock-gating
-
-   output logic       dec_div_active,                 // non-block divide is active
-
-   input  logic       scan_mode
-   
-   );
-
-
-
-
-   eb1_dec_pkt_t           i0_dp_raw, i0_dp;
-
-   logic [31:0]        i0;
-   logic               i0_valid_d;
-
-   logic [31:0]        i0_result_r;
-
-   logic [2:0]         i0_rs1bypass, i0_rs2bypass;
-
-   logic               i0_jalimm20;
-   logic               i0_uiimm20;
-
-   logic               lsu_decode_d;
-   logic [31:0]        i0_immed_d;
-   logic               i0_presync;
-   logic               i0_postsync;
-
-   logic               postsync_stall;
-   logic               ps_stall;
-
-   logic               prior_inflight, prior_inflight_wb;
-
-   logic               csr_clr_d, csr_set_d, csr_write_d;
-
-   logic               csr_clr_x,csr_set_x,csr_write_x,csr_imm_x;
-   logic [31:0]        csr_mask_x;
-   logic [31:0]        write_csr_data_x;
-   logic [31:0]        write_csr_data_in;
-   logic [31:0]        write_csr_data;
-   logic               csr_data_wen;
-
-   logic [4:0]         csrimm_x;
-
-   logic [31:0]        csr_rddata_x;
-
-   logic               mul_decode_d;
-   logic               div_decode_d;
-   logic               div_e1_to_r;
-   logic               div_flush;
-   logic               div_active_in;
-   logic               div_active;
-   logic               i0_nonblock_div_stall;
-   logic               i0_div_prior_div_stall;
-   logic               nonblock_div_cancel;
-
-   logic               i0_legal;
-   logic               shift_illegal;
-   logic               illegal_inst_en;
-   logic               illegal_lockout_in, illegal_lockout;
-   logic               i0_legal_decode_d;
-   logic               i0_exulegal_decode_d, i0_exudecode_d, i0_exublock_d;
-
-   logic [12:1]        last_br_immed_d;
-   logic               i0_rs1_depend_i0_x, i0_rs1_depend_i0_r;
-   logic               i0_rs2_depend_i0_x, i0_rs2_depend_i0_r;
-
-   logic               i0_div_decode_d;
-   logic               i0_load_block_d;
-   logic [1:0]         i0_rs1_depth_d, i0_rs2_depth_d;
-
-   logic               i0_load_stall_d;
-   logic               i0_store_stall_d;
-
-   logic               i0_predict_nt, i0_predict_t;
-
-   logic               i0_notbr_error, i0_br_toffset_error;
-   logic               i0_ret_error;
-   logic               i0_br_error;
-   logic               i0_br_error_all;
-   logic [11:0]        i0_br_offset;
-
-   logic [20:1]        i0_pcall_imm;                          // predicted jal's
-   logic               i0_pcall_12b_offset;
-   logic               i0_pcall_raw;
-   logic               i0_pcall_case;
-   logic               i0_pcall;
-
-   logic               i0_pja_raw;
-   logic               i0_pja_case;
-   logic               i0_pja;
-
-   logic               i0_pret_case;
-   logic               i0_pret_raw, i0_pret;
-
-   logic               i0_jal;                                // jal's that are not predicted
-
-
-   logic               i0_predict_br;
-
-   logic               store_data_bypass_d, store_data_bypass_m;
-
-   eb1_class_pkt_t         i0_rs1_class_d, i0_rs2_class_d;
-
-   eb1_class_pkt_t         i0_d_c, i0_x_c, i0_r_c;
-
-
-   logic               i0_ap_pc2, i0_ap_pc4;
-
-   logic               i0_rd_en_d;
-
-   logic               load_ldst_bypass_d;
-
-   logic               leak1_i0_stall_in, leak1_i0_stall;
-   logic               leak1_i1_stall_in, leak1_i1_stall;
-   logic               leak1_mode;
-
-   logic               i0_csr_write_only_d;
-
-   logic               prior_inflight_x, prior_inflight_eff;
-   logic               any_csr_d;
-
-   logic               prior_csr_write;
-
-   logic [3:0]        i0_pipe_en;
-   logic              i0_r_ctl_en,  i0_x_ctl_en,  i0_wb_ctl_en;
-   logic              i0_x_data_en, i0_r_data_en, i0_wb_data_en;
-
-   logic              debug_fence_i;
-   logic              debug_fence;
-
-   logic              i0_csr_write;
-   logic              presync_stall;
-
-   logic              i0_instr_error;
-   logic              i0_icaf_d;
-
-   logic              clear_pause;
-   logic              pause_state_in, pause_state;
-   logic              pause_stall;
-
-   logic              i0_brp_valid;
-   logic              nonblock_load_cancel;
-   logic              lsu_idle;
-   logic              lsu_pmu_misaligned_r;
-   logic              csr_ren_qual_d;
-   logic              csr_read_x;
-   logic              i0_block_d;
-   logic              i0_block_raw_d;  // This is use to create the raw valid
-   logic              ps_stall_in;
-   logic [31:0]       i0_result_x;
-
-   eb1_dest_pkt_t         d_d, x_d, r_d, wbd;
-   eb1_dest_pkt_t         x_d_in, r_d_in;
-
-   eb1_trap_pkt_t         d_t, x_t, x_t_in, r_t_in, r_t;
-
-   logic [3:0]        lsu_trigger_match_r;
-
-   logic [31:1]       dec_i0_pc_r;
-
-   logic csr_read, csr_write;
-   logic i0_br_unpred;
-
-   logic nonblock_load_valid_m_delay;
-   logic i0_wen_r;
-
-   logic tlu_wr_pause_r1;
-   logic tlu_wr_pause_r2;
-
-   logic flush_final_r;
-
-   logic bitmanip_zbb_legal;
-   logic bitmanip_zbs_legal;
-   logic bitmanip_zbe_legal;
-   logic bitmanip_zbc_legal;
-   logic bitmanip_zbp_legal;
-   logic bitmanip_zbr_legal;
-   logic bitmanip_zbf_legal;
-   logic bitmanip_zba_legal;
-   logic bitmanip_zbb_zbp_legal;
-   logic bitmanip_legal;
-
-   logic              data_gate_en;
-   logic              data_gate_clk;
-
-
-   localparam NBLOAD_SIZE     = pt.LSU_NUM_NBLOAD;
-   localparam NBLOAD_SIZE_MSB = int'(pt.LSU_NUM_NBLOAD)-1;
-   localparam NBLOAD_TAG_MSB  = pt.LSU_NUM_NBLOAD_WIDTH-1;
-
-
-   logic                     cam_write, cam_inv_reset, cam_data_reset;
-   logic [NBLOAD_TAG_MSB:0]  cam_write_tag, cam_inv_reset_tag, cam_data_reset_tag;
-   logic [NBLOAD_SIZE_MSB:0] cam_wen;
-
-   logic [NBLOAD_TAG_MSB:0]  load_data_tag;
-   logic [NBLOAD_SIZE_MSB:0] nonblock_load_write;
-
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_in;
-   eb1_load_cam_pkt_t [NBLOAD_SIZE_MSB:0] cam_raw;
-
-   logic [4:0] nonblock_load_rd;
-   logic i0_nonblock_load_stall;
-   logic i0_nonblock_boundary_stall;
-
-   logic i0_rs1_nonblock_load_bypass_en_d, i0_rs2_nonblock_load_bypass_en_d;
-
-   logic i0_load_kill_wen_r;
-
-   logic found;
-
-   logic [NBLOAD_SIZE_MSB:0] cam_inv_reset_val, cam_data_reset_val;
-
-   logic debug_fence_raw;
-
-   logic [31:0] i0_result_r_raw;
-   logic [31:0] i0_result_corr_r;
-
-   logic [12:1] last_br_immed_x;
-
-   logic [31:0]        i0_inst_d;
-   logic [31:0]        i0_inst_x;
-   logic [31:0]        i0_inst_r;
-   logic [31:0]        i0_inst_wb_in;
-   logic [31:0]        i0_inst_wb;
-
-   logic [31:1]        i0_pc_wb;
-
-   logic               i0_wb_en;
-
-   logic               trace_enable;
-
-   logic               debug_valid_x;
-
-   eb1_inst_pkt_t i0_itype;
-   eb1_reg_pkt_t i0r;
-   
-
-
-   rvdffie  #(8) misc1ff (.*,
-                          .clk(free_l2clk),
-                          .din( {leak1_i1_stall_in,leak1_i0_stall_in,dec_tlu_flush_extint,pause_state_in ,dec_tlu_wr_pause_r, tlu_wr_pause_r1,illegal_lockout_in,ps_stall_in}),
-                          .dout({leak1_i1_stall,   leak1_i0_stall,   dec_extint_stall,    pause_state,       tlu_wr_pause_r1,tlu_wr_pause_r2,illegal_lockout,   ps_stall   })
-                          );
-
-   rvdffie  #(8) misc2ff (.*,
-                          .clk(free_l2clk),
-                          .din( {lsu_trigger_match_m[3:0],lsu_pmu_misaligned_m,div_active_in,exu_flush_final,  dec_debug_valid_d}),
-                          .dout({lsu_trigger_match_r[3:0],lsu_pmu_misaligned_r,div_active,       flush_final_r,    debug_valid_x})
-                          );
-
-if(pt.BTB_ENABLE==1) begin
-// branch prediction
-
-
-   // in leak1_mode, ignore any predictions for i0, treat branch as if we haven't seen it before
-   // in leak1 mode, also ignore branch errors for i0
-   assign i0_brp_valid                        =  dec_i0_brp.valid & ~leak1_mode & ~i0_icaf_d;
-
-   assign dec_i0_predict_p_d.misp        =  '0;
-   assign dec_i0_predict_p_d.ataken      =  '0;
-   assign dec_i0_predict_p_d.boffset     =  '0;
-
-   assign dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-   assign dec_i0_predict_p_d.pja         =  i0_pja;
-   assign dec_i0_predict_p_d.pret        =  i0_pret;
-   assign dec_i0_predict_p_d.prett[31:1] =  dec_i0_brp.prett[31:1];
-   assign dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   assign dec_i0_predict_p_d.hist[1:0]   =  dec_i0_brp.hist[1:0];
-   assign dec_i0_predict_p_d.valid       =  i0_brp_valid & i0_legal_decode_d;
-   assign i0_notbr_error                 =  i0_brp_valid & ~(i0_dp_raw.condbr | i0_pcall_raw | i0_pja_raw | i0_pret_raw);
-
-   // no toffset error for a pret
-   assign i0_br_toffset_error                               =  i0_brp_valid & dec_i0_brp.hist[1] & (dec_i0_brp.toffset[11:0] != i0_br_offset[11:0]) & ~i0_pret_raw;
-   assign i0_ret_error                                      =  i0_brp_valid & (dec_i0_brp.ret ^ i0_pret_raw);
-   assign i0_br_error                                       =  dec_i0_brp.br_error | i0_notbr_error | i0_br_toffset_error | i0_ret_error;
-   assign dec_i0_predict_p_d.br_error                       =  i0_br_error & i0_legal_decode_d & ~leak1_mode;
-   assign dec_i0_predict_p_d.br_start_error                 =  dec_i0_brp.br_start_error & i0_legal_decode_d & ~leak1_mode;
-   assign i0_predict_index_d[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] =  dec_i0_bp_index;
-
-   assign i0_predict_btag_d[pt.BTB_BTAG_SIZE-1:0]           =  dec_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0];
-   assign i0_br_error_all                                   = (i0_br_error | dec_i0_brp.br_start_error) & ~leak1_mode;
-   assign dec_i0_predict_p_d.toffset[11:0]                  =  i0_br_offset[11:0];
-   assign i0_predict_fghr_d[pt.BHT_GHR_SIZE-1:0]            =  dec_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0];
-   assign dec_i0_predict_p_d.way                            =  dec_i0_brp.way;
-
-
-   if(pt.BTB_FULLYA) begin
-      logic btb_error_found, btb_error_found_f;
-      logic [$clog2(pt.BTB_SIZE)-1:0] fa_error_index_ns;
-
-      assign btb_error_found = (i0_br_error_all | btb_error_found_f) & ~dec_tlu_flush_lower_r;
-      assign fa_error_index_ns = (i0_br_error_all & ~btb_error_found_f) ? dec_i0_bp_fa_index : dec_fa_error_index;
-
-      rvdff #($clog2(pt.BTB_SIZE)+1) btberrorfa_f   (.*, .clk(active_clk),
-                                                         .din({btb_error_found,    fa_error_index_ns}),
-                                                         .dout({btb_error_found_f, dec_fa_error_index}));
-
-
-   end
-   else
-     assign dec_fa_error_index = 'b0;
-
-
-   //   end
-end // if (pt.BTB_ENABLE==1)
-else begin
-
-   always_comb begin
-      dec_i0_predict_p_d = '0;
-      dec_i0_predict_p_d.pcall       =  i0_pcall;  // don't mark as pcall if branch error
-      dec_i0_predict_p_d.pja         =  i0_pja;
-      dec_i0_predict_p_d.pret        =  i0_pret;
-      dec_i0_predict_p_d.pc4         =  dec_i0_pc4_d;
-   end
-
-   assign i0_br_error_all = '0;
-   assign i0_predict_index_d = '0;
-   assign i0_predict_btag_d = '0;
-   assign i0_predict_fghr_d = '0;
-   assign i0_brp_valid = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // on br error turn anything into a nop
-   // on i0 instruction fetch access fault turn anything into a nop
-   // nop =>   alu rs1 imm12 rd lor
-
-   assign i0_icaf_d = dec_i0_icaf_d | dec_i0_dbecc_d;
-
-   assign i0_instr_error = i0_icaf_d;
-
-   always_comb begin
-      i0_dp = i0_dp_raw;
-      if (i0_br_error_all | i0_instr_error) begin
-         i0_dp          =   '0;
-         i0_dp.alu      = 1'b1;
-         i0_dp.rs1      = 1'b1;
-         i0_dp.rs2      = 1'b1;
-         i0_dp.lor      = 1'b1;
-         i0_dp.legal    = 1'b1;
-         i0_dp.postsync = 1'b1;
-      end
-   end
-
-   assign i0[31:0] = dec_i0_instr_d[31:0];
-
-   assign dec_i0_select_pc_d = i0_dp.pc;
-
-   // branches that can be predicted
-
-   assign i0_predict_br =  i0_dp.condbr | i0_pcall | i0_pja | i0_pret;
-
-   assign i0_predict_nt = ~(dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-   assign i0_predict_t  =  (dec_i0_brp.hist[1] & i0_brp_valid) & i0_predict_br;
-
-   assign i0_ap.add     =  i0_dp.add;
-   assign i0_ap.sub     =  i0_dp.sub;
-   assign i0_ap.land    =  i0_dp.land;
-   assign i0_ap.lor     =  i0_dp.lor;
-   assign i0_ap.lxor    =  i0_dp.lxor;
-   assign i0_ap.sll     =  i0_dp.sll;
-   assign i0_ap.srl     =  i0_dp.srl;
-   assign i0_ap.sra     =  i0_dp.sra;
-   assign i0_ap.slt     =  i0_dp.slt;
-   assign i0_ap.unsign  =  i0_dp.unsign;
-   assign i0_ap.beq     =  i0_dp.beq;
-   assign i0_ap.bne     =  i0_dp.bne;
-   assign i0_ap.blt     =  i0_dp.blt;
-   assign i0_ap.bge     =  i0_dp.bge;
-
-   assign i0_ap.clz     =  i0_dp.clz;
-   assign i0_ap.ctz     =  i0_dp.ctz;
-   assign i0_ap.pcnt    =  i0_dp.pcnt;
-   assign i0_ap.sext_b  =  i0_dp.sext_b;
-   assign i0_ap.sext_h  =  i0_dp.sext_h;
-   assign i0_ap.sh1add  =  i0_dp.sh1add;
-   assign i0_ap.sh2add  =  i0_dp.sh2add;
-   assign i0_ap.sh3add  =  i0_dp.sh3add;
-   assign i0_ap.zba     =  i0_dp.zba;
-   assign i0_ap.slo     =  i0_dp.slo;
-   assign i0_ap.sro     =  i0_dp.sro;
-   assign i0_ap.min     =  i0_dp.min;
-   assign i0_ap.max     =  i0_dp.max;
-   assign i0_ap.pack    =  i0_dp.pack;
-   assign i0_ap.packu   =  i0_dp.packu;
-   assign i0_ap.packh   =  i0_dp.packh;
-   assign i0_ap.rol     =  i0_dp.rol;
-   assign i0_ap.ror     =  i0_dp.ror;
-   assign i0_ap.grev    =  i0_dp.grev;
-   assign i0_ap.gorc    =  i0_dp.gorc;
-   assign i0_ap.zbb     =  i0_dp.zbb;
-   assign i0_ap.sbset   =  i0_dp.sbset;
-   assign i0_ap.sbclr   =  i0_dp.sbclr;
-   assign i0_ap.sbinv   =  i0_dp.sbinv;
-   assign i0_ap.sbext   =  i0_dp.sbext;
-
-   assign i0_ap.csr_write =  i0_csr_write_only_d;
-   assign i0_ap.csr_imm   =  i0_dp.csr_imm;
-   assign i0_ap.jal       =  i0_jal;
-
-   assign i0_ap_pc2 = ~dec_i0_pc4_d;
-   assign i0_ap_pc4 =  dec_i0_pc4_d;
-
-   assign i0_ap.predict_nt = i0_predict_nt;
-   assign i0_ap.predict_t  = i0_predict_t;
-
-
-// non block load cam logic
-
-   always_comb begin
-      found = 0;
-      cam_wen[NBLOAD_SIZE_MSB:0] = '0;
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         if (~found) begin
-            if (~cam[i].valid) begin
-               cam_wen[i] = cam_write;
-               found = 1'b1;
-            end
-            else begin
-               cam_wen[i] = 0;
-            end
-         end
-         else
-            cam_wen[i] = 0;
-      end
-   end
-
-
-   assign cam_write          = lsu_nonblock_load_valid_m;
-   assign cam_write_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_tag_m[NBLOAD_TAG_MSB:0];
-
-   assign cam_inv_reset          = lsu_nonblock_load_inv_r;
-   assign cam_inv_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0];
-
-   assign cam_data_reset          = lsu_nonblock_load_data_valid | lsu_nonblock_load_data_error;
-   assign cam_data_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-   assign nonblock_load_rd[4:0] = (x_d.i0load) ? x_d.i0rd[4:0] : 5'b0;  // rd data
-
-
-   // checks
-
-
-
-
-    // case of multiple loads to same dest ie. x1 ... you have to invalidate the older one
-
-   for (genvar i=0; i<NBLOAD_SIZE; i++) begin : cam_array
-
-      assign cam_inv_reset_val[i] = cam_inv_reset   & (cam_inv_reset_tag[NBLOAD_TAG_MSB:0]  == cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid;
-
-      assign cam_data_reset_val[i] = cam_data_reset & (cam_data_reset_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-      always_comb begin
-
-         cam[i] = cam_raw[i];
-
-         if (cam_data_reset_val[i])
-           cam[i].valid = 1'b0;
-
-         cam_in[i] = '0;
-
-         if (cam_wen[i]) begin
-            cam_in[i].valid    = 1'b1;
-            cam_in[i].wb       = 1'b0;
-            cam_in[i].tag[NBLOAD_TAG_MSB:0] = cam_write_tag[NBLOAD_TAG_MSB:0];
-            cam_in[i].rd[4:0]  = nonblock_load_rd[4:0];
-         end
-         else if ( (cam_inv_reset_val[i]) |
-                   (i0_wen_r & (r_d_in.i0rd[4:0] == cam[i].rd[4:0]) & cam[i].wb) )
-           cam_in[i].valid = 1'b0;
-         else
-           cam_in[i] = cam[i];
-
-         if (nonblock_load_valid_m_delay & (lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0]==cam[i].tag[NBLOAD_TAG_MSB:0]) & cam[i].valid)
-           cam_in[i].wb = 1'b1;
-
-         // force debug halt forces cam valids to 0; highest priority
-         if (dec_tlu_force_halt)
-           cam_in[i].valid = 1'b0;
-      end
-
-
-   rvdffie #( $bits(eb1_load_cam_pkt_t) ) cam_ff (.*, .din(cam_in[i]), .dout(cam_raw[i]));
-
-
-   assign nonblock_load_write[i] = (load_data_tag[NBLOAD_TAG_MSB:0] == cam_raw[i].tag[NBLOAD_TAG_MSB:0]) & cam_raw[i].valid;
-
-
-end : cam_array
-
-
-
-   assign load_data_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-
-
-
-   assign nonblock_load_cancel = ((r_d_in.i0rd[4:0] == dec_nonblock_load_waddr[4:0]) & i0_wen_r);     // cancel if any younger inst (including another nonblock) committing this cycle
-
-
-   assign dec_nonblock_load_wen = lsu_nonblock_load_data_valid & |nonblock_load_write[NBLOAD_SIZE_MSB:0] & ~nonblock_load_cancel;
-
-   always_comb begin
-
-      dec_nonblock_load_waddr[4:0] = '0;
-      i0_nonblock_load_stall = i0_nonblock_boundary_stall;
-
-      for (int i=0; i<NBLOAD_SIZE; i++) begin
-         dec_nonblock_load_waddr[4:0] |= ({5{nonblock_load_write[i]}} & cam[i].rd[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs1_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs1[4:0]);
-         i0_nonblock_load_stall |= dec_i0_rs2_en_d & cam[i].valid & (cam[i].rd[4:0] == i0r.rs2[4:0]);
-      end
-
-   end
-
-   assign i0_nonblock_boundary_stall = ((nonblock_load_rd[4:0]==i0r.rs1[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs1_en_d) |
-                                       ((nonblock_load_rd[4:0]==i0r.rs2[4:0]) & lsu_nonblock_load_valid_m & dec_i0_rs2_en_d);
-
-
-
-// don't writeback a nonblock load
-
-   rvdffs #(1) wbnbloaddelayff (.*, .clk(active_clk), .en(i0_r_ctl_en ), .din(lsu_nonblock_load_valid_m),        .dout(nonblock_load_valid_m_delay) );
-
-   assign i0_load_kill_wen_r = nonblock_load_valid_m_delay &  r_d.i0load;
-
-
-
-// end non block load cam logic
-
-// pmu start
-
-
-
-
-   assign csr_read = csr_ren_qual_d;
-   assign csr_write = dec_csr_wen_unq_d;
-
-   assign i0_br_unpred = i0_dp.jal & ~i0_predict_br;
-
-   // the classes must be mutually exclusive with one another
-
-   always_comb begin
-      i0_itype = NULL;
-
-      if (i0_legal_decode_d) begin
-         if (i0_dp.mul)                  i0_itype = MUL;
-         if (i0_dp.load)                 i0_itype = LOAD;
-         if (i0_dp.store)                i0_itype = STORE;
-         if (i0_dp.pm_alu)               i0_itype = ALU;
-         if (i0_dp.zbb | i0_dp.zbs |
-             i0_dp.zbe | i0_dp.zbc |
-             i0_dp.zbp | i0_dp.zbr |
-             i0_dp.zbf | i0_dp.zba)
-                                         i0_itype = BITMANIPU;
-         if ( csr_read & ~csr_write)     i0_itype = CSRREAD;
-         if (~csr_read &  csr_write)     i0_itype = CSRWRITE;
-         if ( csr_read &  csr_write)     i0_itype = CSRRW;
-         if (i0_dp.ebreak)               i0_itype = EBREAK;
-         if (i0_dp.ecall)                i0_itype = ECALL;
-         if (i0_dp.fence)                i0_itype = FENCE;
-         if (i0_dp.fence_i)              i0_itype = FENCEI;  // fencei will set this even with fence attribute
-         if (i0_dp.mret)                 i0_itype = MRET;
-         if (i0_dp.condbr)               i0_itype = CONDBR;
-         if (i0_dp.jal)                  i0_itype = JAL;
-      end
-   end
-
-
-
-
-
-// end pmu
-
-
-   eb1_dec_dec_ctl i0_dec (.inst(i0[31:0]),.out(i0_dp_raw));
-   
-
-
-   rvdff #(1) lsu_idle_ff (.*, .clk(active_clk), .din(lsu_idle_any), .dout(lsu_idle));
-
-
-
-   assign leak1_i1_stall_in = (dec_tlu_flush_leak_one_r | (leak1_i1_stall & ~dec_tlu_flush_lower_r));
-
-
-   assign leak1_mode = leak1_i1_stall;
-
-   assign leak1_i0_stall_in = ((dec_i0_decode_d & leak1_i1_stall) | (leak1_i0_stall & ~dec_tlu_flush_lower_r));
-
-
-
-
-   // 12b jal's can be predicted - these are calls
-
-   assign i0_pcall_imm[20:1] = {i0[31],i0[19:12],i0[20],i0[30:21]};
-
-   assign i0_pcall_12b_offset = (i0_pcall_imm[12]) ? (i0_pcall_imm[20:13] == 8'hff) : (i0_pcall_imm[20:13] == 8'h0);
-
-   assign i0_pcall_case  = i0_pcall_12b_offset & i0_dp_raw.imm20 &  (i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-   assign i0_pja_case    = i0_pcall_12b_offset & i0_dp_raw.imm20 & ~(i0r.rd[4:0] == 5'd1 | i0r.rd[4:0] == 5'd5);
-
-   assign i0_pcall_raw   = i0_dp_raw.jal &   i0_pcall_case;   // this includes ja
-   assign i0_pcall       = i0_dp.jal     &   i0_pcall_case;
-
-   assign i0_pja_raw     = i0_dp_raw.jal &   i0_pja_case;
-   assign i0_pja         = i0_dp.jal     &   i0_pja_case;
-
-
-   assign i0_br_offset[11:0] = (i0_pcall_raw | i0_pja_raw) ? i0_pcall_imm[12:1] : {i0[31],i0[7],i0[30:25],i0[11:8]};
-
-   assign i0_pret_case = (i0_dp_raw.jal & i0_dp_raw.imm12 & (i0r.rd[4:0] == 5'b0) & (i0r.rs1[4:0] == 5'd1 | i0r.rs1[4:0] == 5'd5));  // jalr with rd==0, rs1==1 or rs1==5 is a ret
-
-   assign i0_pret_raw = i0_dp_raw.jal &   i0_pret_case;
-   assign i0_pret     = i0_dp.jal     &   i0_pret_case;
-
-   assign i0_jal      = i0_dp.jal     &  ~i0_pcall_case & ~i0_pja_case & ~i0_pret_case;
-
-   // lsu stuff
-   // load/store mutually exclusive
-   assign dec_lsu_offset_d[11:0] = ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.load}} &               i0[31:20]) |
-                                   ({12{ ~dec_extint_stall & i0_dp.lsu & i0_dp.store}} &             {i0[31:25],i0[11:7]});
-
-
-
-   assign div_p.valid    =  div_decode_d;
-
-   assign div_p.unsign   =  i0_dp.unsign;
-   assign div_p.rem      =  i0_dp.rem;
-
-
-   assign mul_p.valid    =  mul_decode_d;
-
-   assign mul_p.rs1_sign =  i0_dp.rs1_sign;
-   assign mul_p.rs2_sign =  i0_dp.rs2_sign;
-   assign mul_p.low      =  i0_dp.low;
-   assign mul_p.bext     =  i0_dp.bext;
-   assign mul_p.bdep     =  i0_dp.bdep;
-   assign mul_p.clmul    =  i0_dp.clmul;
-   assign mul_p.clmulh   =  i0_dp.clmulh;
-   assign mul_p.clmulr   =  i0_dp.clmulr;
-   assign mul_p.grev     =  i0_dp.grev;
-   assign mul_p.gorc     =  i0_dp.gorc;
-   assign mul_p.shfl     =  i0_dp.shfl;
-   assign mul_p.unshfl   =  i0_dp.unshfl;
-   assign mul_p.crc32_b  =  i0_dp.crc32_b;
-   assign mul_p.crc32_h  =  i0_dp.crc32_h;
-   assign mul_p.crc32_w  =  i0_dp.crc32_w;
-   assign mul_p.crc32c_b =  i0_dp.crc32c_b;
-   assign mul_p.crc32c_h =  i0_dp.crc32c_h;
-   assign mul_p.crc32c_w =  i0_dp.crc32c_w;
-   assign mul_p.bfp      =  i0_dp.bfp;
-
-   always_comb  begin
-      lsu_p = '0;
-
-      if (dec_extint_stall) begin
-         lsu_p.load = 1'b1;
-         lsu_p.word = 1'b1;
-         lsu_p.fast_int = 1'b1;
-         lsu_p.valid = 1'b1;
-      end
-      else begin
-         lsu_p.valid = lsu_decode_d;
-
-         lsu_p.load                         =  i0_dp.load ;
-         lsu_p.store                        =  i0_dp.store;
-         lsu_p.by                           =  i0_dp.by   ;
-         lsu_p.half                         =  i0_dp.half ;
-         lsu_p.word                         =  i0_dp.word ;
-         lsu_p.stack                        = (i0r.rs1[4:0]==5'd2);   // stack reference
-
-         lsu_p.load_ldst_bypass_d          =  load_ldst_bypass_d ;
-         lsu_p.store_data_bypass_d         =  store_data_bypass_d;
-         lsu_p.store_data_bypass_m         =  store_data_bypass_m;
-
-         lsu_p.unsign  =  i0_dp.unsign;
-      end
-   end
-
-
-   assign  dec_lsu_valid_raw_d    = (i0_valid_d & (i0_dp_raw.load | i0_dp_raw.store) & ~dma_dccm_stall_any & ~i0_block_raw_d) | dec_extint_stall;
-
-
-
-   assign i0r.rs1[4:0] = i0[19:15];
-   assign i0r.rs2[4:0] = i0[24:20];
-   assign i0r.rd[4:0]  = i0[11:7];
-
-
-   assign dec_i0_rs1_en_d   =  (i0_dp.rs1 & (i0r.rs1[4:0] != 5'd0));  // if rs1_en=0 then read will be all 0's
-   assign dec_i0_rs2_en_d   =  (i0_dp.rs2 & (i0r.rs2[4:0] != 5'd0));
-   assign i0_rd_en_d        =  (i0_dp.rd  & (i0r.rd[4:0]  != 5'd0));
-
-   assign dec_i0_rs1_d[4:0] =  i0r.rs1[4:0];
-   assign dec_i0_rs2_d[4:0] =  i0r.rs2[4:0];
-
-
-   assign i0_jalimm20       =  i0_dp.jal & i0_dp.imm20;   // jal
-   assign i0_uiimm20        = ~i0_dp.jal & i0_dp.imm20;
-
-
-   // csr logic
-
-   assign dec_csr_ren_d  = i0_dp.csr_read & i0_valid_d;
-   assign csr_ren_qual_d = i0_dp.csr_read & i0_legal_decode_d;
-
-   assign csr_clr_d =   i0_dp.csr_clr   & i0_legal_decode_d;
-   assign csr_set_d   = i0_dp.csr_set   & i0_legal_decode_d;
-   assign csr_write_d = i0_csr_write    & i0_legal_decode_d;
-
-   assign i0_csr_write_only_d = i0_csr_write & ~i0_dp.csr_read;
-
-   assign dec_csr_wen_unq_d = (i0_dp.csr_clr | i0_dp.csr_set | i0_csr_write) & i0_valid_d;   // for csr legal, can't write read-only csr
-
-   assign dec_csr_any_unq_d = any_csr_d & i0_valid_d;
-
-
-   assign dec_csr_rdaddr_d[11:0] =  {12{dec_csr_any_unq_d}} & i0[31:20];
-   assign dec_csr_wraddr_r[11:0] =  {12{r_d.csrwen & r_d.i0valid}} & r_d.csrwaddr[11:0];
-
-
-   // make sure csr doesn't write same cycle as dec_tlu_flush_lower_wb
-   // also use valid so it's flushable
-   assign dec_csr_wen_r = r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_r;
-
-   // If we are writing MIE or MSTATUS, hold off the external interrupt for a cycle on the write.
-   assign dec_csr_stall_int_ff = ((r_d.csrwaddr[11:0] == 12'h300) | (r_d.csrwaddr[11:0] == 12'h304)) & r_d.csrwen & r_d.i0valid & ~dec_tlu_i0_kill_writeb_wb;
-
-
-   rvdff #(5) csrmiscff (.*,
-                        .clk (active_clk),
-                        .din ({csr_ren_qual_d, csr_clr_d, csr_set_d, csr_write_d, i0_dp.csr_imm}),
-                        .dout({csr_read_x,     csr_clr_x, csr_set_x, csr_write_x, csr_imm_x})
-                       );
-
-
-
-
-   // perform the update operation if any
-
-   rvdffe #(37) csr_rddata_x_ff (.*, .en(i0_x_data_en & any_csr_d), .din( {i0[19:15],dec_csr_rddata_d[31:0]}), .dout({csrimm_x[4:0],csr_rddata_x[31:0]}));
-
-
-   assign csr_mask_x[31:0]       = ({32{ csr_imm_x}} & {27'b0,csrimm_x[4:0]}) |
-                                   ({32{~csr_imm_x}} &  exu_csr_rs1_x[31:0] );
-
-
-   assign write_csr_data_x[31:0] = ({32{csr_clr_x}}   & (csr_rddata_x[31:0] & ~csr_mask_x[31:0])) |
-                                   ({32{csr_set_x}}   & (csr_rddata_x[31:0] |  csr_mask_x[31:0])) |
-                                   ({32{csr_write_x}} & (                      csr_mask_x[31:0]));
-
-
-// pause instruction
-
-
-
-
-   assign clear_pause = (dec_tlu_flush_lower_r & ~dec_tlu_flush_pause_r) |
-                        (pause_state & (write_csr_data[31:1] == 31'b0));        // if 0 or 1 then exit pause state - 1 cycle pause
-
-   assign pause_state_in = (dec_tlu_wr_pause_r | pause_state) & ~clear_pause;
-
-
-
-   assign dec_pause_state = pause_state;
-
-
-
-      assign dec_pause_state_cg = pause_state & ~tlu_wr_pause_r1 & ~tlu_wr_pause_r2;
-
-// end pause
-
-
-   assign csr_data_wen = ((csr_clr_x | csr_set_x | csr_write_x) & csr_read_x) | dec_tlu_wr_pause_r | pause_state;
-
-   assign write_csr_data_in[31:0] = (pause_state)         ? (write_csr_data[31:0] - 32'b1) :
-                                    (dec_tlu_wr_pause_r) ? dec_csr_wrdata_r[31:0] : write_csr_data_x[31:0];
-
-   // will hold until write-back at which time the CSR will be updated while GPR is possibly written with prior CSR
-   rvdffe #(32) write_csr_ff (.*, .clk(free_l2clk), .en(csr_data_wen), .din(write_csr_data_in[31:0]), .dout(write_csr_data[31:0]));
-
-   assign pause_stall = pause_state;
-
-   // for csr write only data is produced by the alu
-   assign dec_csr_wrdata_r[31:0]  = (r_d.csrwonly & r_d.i0valid) ? i0_result_corr_r[31:0] : write_csr_data[31:0];
-
-
-
-   assign dec_i0_immed_d[31:0] =  i0_immed_d[31:0];
-
-   assign     i0_immed_d[31:0] = ({32{i0_dp.imm12}}                         & { {20{i0[31]}},i0[31:20] }) |  // jalr
-                                 ({32{i0_dp.shimm5}}                        & {  27'b0,      i0[24:20] }) |
-                                 ({32{i0_jalimm20}}                         & { {12{i0[31]}},i0[19:12],i0[20],i0[30:21],1'b0}) |
-                                 ({32{i0_uiimm20}}                          & { i0[31:12],12'b0 }) |
-                                 ({32{i0_csr_write_only_d & i0_dp.csr_imm}} & {  27'b0,      i0[19:15]});  // for csr's that only write csr, dont read csr
-
-
-   // all conditional branches are currently predict_nt
-   // change this to generate the sequential address for all other cases for NPC requirements at commit
-   assign dec_i0_br_immed_d[12:1] = (i0_ap.predict_nt & ~i0_dp.jal) ? i0_br_offset[11:0] : {10'b0,i0_ap_pc4,i0_ap_pc2};
-
-
-   assign last_br_immed_d[12:1] = ((i0_ap.predict_nt) ? {10'b0,i0_ap_pc4,i0_ap_pc2} : i0_br_offset[11:0] );
-
-   assign i0_valid_d = dec_ib0_valid_d;
-
-   // load_stall includes bus_barrier
-
-   assign i0_load_stall_d = (i0_dp.load ) & (lsu_load_stall_any | dma_dccm_stall_any);
-
-   assign i0_store_stall_d =  i0_dp.store & (lsu_store_stall_any | dma_dccm_stall_any);
-
-
-
-// some CSR reads need to be presync'd
-   assign i0_presync = i0_dp.presync | dec_tlu_presync_d | debug_fence_i | debug_fence_raw | dec_tlu_pipelining_disable;  // both fence's presync
-
-// some CSR writes need to be postsync'd
-   assign i0_postsync = i0_dp.postsync | dec_tlu_postsync_d | debug_fence_i | // only fence_i postsync
-                        (i0_csr_write_only_d & (i0[31:20] == 12'h7c2));   // wr_pause must postsync
-
-
-// debug fence csr
-   assign debug_fence_i     = dec_debug_fence_d & dbg_cmd_wrdata[0];
-   assign debug_fence_raw   = dec_debug_fence_d & dbg_cmd_wrdata[1];
-
-   assign debug_fence       = debug_fence_raw | debug_fence_i;    // fence_i causes a fence
-
-   assign i0_csr_write = i0_dp.csr_write & ~dec_debug_fence_d;
-// end debug
-
-
-   // lets make ebreak, ecall, mret postsync, so break sync into pre and post
-
-   assign presync_stall      = (i0_presync & prior_inflight_eff);
-
-   assign prior_inflight_eff = (i0_dp.div)  ?  prior_inflight_x  :  prior_inflight;
-
-   assign i0_div_prior_div_stall = i0_dp.div & div_active;
-
-   // Raw block has everything excepts the stalls coming from the lsu
-   assign i0_block_raw_d = (i0_dp.csr_read & prior_csr_write) |
-                            dec_extint_stall |
-                            pause_stall |
-                            leak1_i0_stall |
-                            dec_tlu_debug_stall |
-                            postsync_stall |
-                            presync_stall  |
-                            ((i0_dp.fence | debug_fence) & ~lsu_idle) |
-                            i0_nonblock_load_stall |
-                            i0_load_block_d |
-                            i0_nonblock_div_stall |
-                            i0_div_prior_div_stall;
-
-   assign i0_block_d    = i0_block_raw_d | i0_store_stall_d | i0_load_stall_d;
-   assign i0_exublock_d = i0_block_raw_d;
-
-
-   // block reads if there is a prior csr write in the pipeline
-   assign prior_csr_write = x_d.csrwonly |
-                            r_d.csrwonly |
-                            wbd.csrwonly;
-
-
-
-   if       (pt.BITMANIP_ZBB == 1)
-     assign bitmanip_zbb_legal      =  1'b1;
-   else
-     assign bitmanip_zbb_legal      = ~(i0_dp.zbb & ~i0_dp.zbp);
-
-   if       (pt.BITMANIP_ZBS == 1)
-     assign bitmanip_zbs_legal      =  1'b1;
-   else
-     assign bitmanip_zbs_legal      = ~i0_dp.zbs;
-
-   if       (pt.BITMANIP_ZBE == 1)
-     assign bitmanip_zbe_legal      =  1'b1;
-   else
-     assign bitmanip_zbe_legal      = ~i0_dp.zbe;
-
-   if       (pt.BITMANIP_ZBC == 1)
-     assign bitmanip_zbc_legal      =  1'b1;
-   else
-     assign bitmanip_zbc_legal      = ~i0_dp.zbc;
-
-   if       (pt.BITMANIP_ZBP == 1)
-     assign bitmanip_zbp_legal      =  1'b1;
-   else
-     assign bitmanip_zbp_legal      = ~(i0_dp.zbp & ~i0_dp.zbb);
-
-   if       (pt.BITMANIP_ZBR == 1)
-     assign bitmanip_zbr_legal      =  1'b1;
-   else
-     assign bitmanip_zbr_legal      = ~i0_dp.zbr;
-
-   if       (pt.BITMANIP_ZBF == 1)
-     assign bitmanip_zbf_legal      =  1'b1;
-   else
-     assign bitmanip_zbf_legal      = ~i0_dp.zbf;
-
-   if (pt.BITMANIP_ZBA == 1)
-     assign bitmanip_zba_legal      =  1'b1;
-   else
-     assign bitmanip_zba_legal      = ~i0_dp.zba;
-
-   if     ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     assign bitmanip_zbb_zbp_legal  =  1'b1;
-   else
-     assign bitmanip_zbb_zbp_legal  = ~(i0_dp.zbb & i0_dp.zbp);
-
-
-   assign any_csr_d      =  i0_dp.csr_read | i0_csr_write;
-   assign bitmanip_legal =  bitmanip_zbb_legal & bitmanip_zbs_legal & bitmanip_zbe_legal & bitmanip_zbc_legal & bitmanip_zbp_legal & bitmanip_zbr_legal & bitmanip_zbf_legal & bitmanip_zba_legal & bitmanip_zbb_zbp_legal;
-
-   assign i0_legal       =  (i0_dp.legal) & (~any_csr_d | dec_csr_legal_d) & bitmanip_legal;
-
-
-
-   // illegal inst handling
-
-
-   assign shift_illegal      = dec_i0_decode_d & ~i0_legal;
-
-   assign illegal_inst_en    = shift_illegal & ~illegal_lockout;
-
-   rvdffe #(32) illegal_any_ff (.*, .en(illegal_inst_en), .din(i0_inst_d[31:0]), .dout(dec_illegal_inst[31:0]));
-
-   assign illegal_lockout_in = (shift_illegal | illegal_lockout) & ~flush_final_r;
-
-
-
-   // allow illegals to flow down the pipe
-   assign dec_i0_decode_d = i0_valid_d & ~i0_block_d    & ~dec_tlu_flush_lower_r & ~flush_final_r;
-   assign i0_exudecode_d  = i0_valid_d & ~i0_exublock_d & ~dec_tlu_flush_lower_r & ~flush_final_r;
-
-   // define i0 legal decode
-   assign i0_legal_decode_d    = dec_i0_decode_d & i0_legal;
-   assign i0_exulegal_decode_d = i0_exudecode_d  & i0_legal;
-
-
-   // performance monitor signals
-   assign dec_pmu_instr_decoded = dec_i0_decode_d;
-
-   assign dec_pmu_decode_stall = i0_valid_d & ~dec_i0_decode_d;
-
-   assign dec_pmu_postsync_stall = postsync_stall & i0_valid_d;
-   assign dec_pmu_presync_stall  = presync_stall & i0_valid_d;
-
-
-
-   // illegals will postsync
-   assign ps_stall_in =  ( dec_i0_decode_d & (i0_postsync | ~i0_legal) ) |
-                         ( ps_stall & prior_inflight_x                 );
-
-
-
-   assign postsync_stall =  ps_stall;
-
-
-   assign prior_inflight_x    =  x_d.i0valid;
-   assign prior_inflight_wb   =  r_d.i0valid;
-
-   assign prior_inflight = prior_inflight_x | prior_inflight_wb;
-
-   assign dec_i0_alu_decode_d = i0_exulegal_decode_d & i0_dp.alu;
-   assign dec_i0_branch_d     = i0_dp.condbr | i0_dp.jal | i0_br_error_all;
-
-   assign lsu_decode_d = i0_legal_decode_d    & i0_dp.lsu;
-   assign mul_decode_d = i0_exulegal_decode_d & i0_dp.mul;
-   assign div_decode_d = i0_exulegal_decode_d & i0_dp.div;
-
-   assign dec_qual_lsu_d = i0_dp.lsu;
-
-
-
-
-
-// scheduling logic for alu
-
-   assign i0_rs1_depend_i0_x  = dec_i0_rs1_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs1[4:0]);
-   assign i0_rs1_depend_i0_r  = dec_i0_rs1_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_depend_i0_x  = dec_i0_rs2_en_d & x_d.i0v & (x_d.i0rd[4:0] == i0r.rs2[4:0]);
-   assign i0_rs2_depend_i0_r  = dec_i0_rs2_en_d & r_d.i0v & (r_d.i0rd[4:0] == i0r.rs2[4:0]);
-
-
-// order the producers as follows:  , i0_x, i0_r, i0_wb
-
-   assign {i0_rs1_class_d, i0_rs1_depth_d[1:0]} = (i0_rs1_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs1_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-   assign {i0_rs2_class_d, i0_rs2_depth_d[1:0]} = (i0_rs2_depend_i0_x ) ? { i0_x_c,  2'd1  } :
-                                                  (i0_rs2_depend_i0_r ) ? { i0_r_c,  2'd2  } : '0;
-
-
-// stores will bypass load data in the lsu pipe
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin : genblock
-      assign i0_load_block_d = (i0_rs1_class_d.load & i0_rs1_depth_d[0]) |
-                               (i0_rs2_class_d.load & i0_rs2_depth_d[0] & ~i0_dp.store);
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[1] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[1] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-   end
-   else begin : genblock
-
-      assign i0_load_block_d = 1'b0;
-
-      assign load_ldst_bypass_d    =  (i0_dp.load | i0_dp.store) & i0_rs1_depth_d[0] & i0_rs1_class_d.load;
-
-      assign store_data_bypass_d =                  i0_dp.store  & i0_rs2_depth_d[0] & i0_rs2_class_d.load;
-
-      assign store_data_bypass_m = 1'b0;
-   end
-
-
-
-
-
-
-   assign dec_tlu_i0_valid_r     =  r_d.i0valid & ~dec_tlu_flush_lower_wb;
-
-
-   assign d_t.legal              =  i0_legal_decode_d;
-   assign d_t.icaf               =  i0_icaf_d & i0_legal_decode_d;                // dbecc is icaf exception
-   assign d_t.icaf_second        =  dec_i0_icaf_second_d & i0_legal_decode_d;     // this includes icaf and dbecc
-   assign d_t.icaf_type[1:0]     =  dec_i0_icaf_type_d[1:0];
-
-   assign d_t.fence_i            = (i0_dp.fence_i | debug_fence_i) & i0_legal_decode_d;
-
-// put pmu info into the trap packet
-   assign d_t.pmu_i0_itype       =  i0_itype;
-   assign d_t.pmu_i0_br_unpred   =  i0_br_unpred;
-   assign d_t.pmu_divide         =  1'b0;
-   assign d_t.pmu_lsu_misaligned =  1'b0;
-
-   assign d_t.i0trigger[3:0]     =  dec_i0_trigger_match_d[3:0] & {4{dec_i0_decode_d}};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_xff (.*, .en(i0_x_ctl_en), .din(d_t),  .dout(x_t));
-
-   always_comb begin
-      x_t_in = x_t;
-      x_t_in.i0trigger[3:0] = x_t.i0trigger & ~{4{dec_tlu_flush_lower_wb}};
-   end
-
-
-   rvdfflie  #( .WIDTH($bits(eb1_trap_pkt_t)),.LEFT(9) ) trap_r_ff (.*, .en(i0_x_ctl_en), .din(x_t_in),  .dout(r_t));
-
-
-    always_comb begin
-
-      r_t_in                             =  r_t;
-
-      r_t_in.i0trigger[3:0]              = ({4{(r_d.i0load | r_d.i0store)}} & lsu_trigger_match_r[3:0]) | r_t.i0trigger[3:0];
-      r_t_in.pmu_lsu_misaligned          = lsu_pmu_misaligned_r;   // only valid if a load/store is valid in DC3 stage
-
-      if (dec_tlu_flush_lower_wb) r_t_in = '0 ;
-
-   end
-
-
-   always_comb begin
-
-      dec_tlu_packet_r                 =  r_t_in;
-      dec_tlu_packet_r.pmu_divide      =  r_d.i0div & r_d.i0valid;
-
-   end
-
-
-// end tlu stuff
-
-
-   assign i0_d_c.mul                =  i0_dp.mul  & i0_legal_decode_d;
-   assign i0_d_c.load               =  i0_dp.load & i0_legal_decode_d;
-   assign i0_d_c.alu                =  i0_dp.alu  & i0_legal_decode_d;
-
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_x_c_ff   (.*, .en(i0_x_ctl_en),  .clk(active_clk), .din(i0_d_c),  .dout(i0_x_c));
-   rvdffs #( $bits(eb1_class_pkt_t) ) i0_r_c_ff   (.*, .en(i0_r_ctl_en),  .clk(active_clk), .din(i0_x_c),  .dout(i0_r_c));
-
-
-   assign d_d.i0rd[4:0]             =  i0r.rd[4:0];
-   assign d_d.i0v                   =  i0_rd_en_d  & i0_legal_decode_d;
-   assign d_d.i0valid               =  dec_i0_decode_d;  // has flush_final_r
-
-   assign d_d.i0load                =  i0_dp.load  & i0_legal_decode_d;
-   assign d_d.i0store               =  i0_dp.store & i0_legal_decode_d;
-   assign d_d.i0div                 =  i0_dp.div   & i0_legal_decode_d;
-
-
-   assign d_d.csrwen                =  dec_csr_wen_unq_d   & i0_legal_decode_d;
-   assign d_d.csrwonly              =  i0_csr_write_only_d & dec_i0_decode_d;
-   assign d_d.csrwaddr[11:0]        =  (d_d.csrwen) ? i0[31:20] : '0;    // csr write address for rd==0 case
-
-
-   rvdff  #(3) i0cgff               (.*, .clk(active_clk),            .din(i0_pipe_en[3:1]), .dout(i0_pipe_en[2:0]));
-
-   assign i0_pipe_en[3]             =  dec_i0_decode_d;
-
-   assign i0_x_ctl_en               = (|i0_pipe_en[3:2] | clk_override);
-   assign i0_r_ctl_en               = (|i0_pipe_en[2:1] | clk_override);
-   assign i0_wb_ctl_en              = (|i0_pipe_en[1:0] | clk_override);
-   assign i0_x_data_en              = ( i0_pipe_en[3]   | clk_override);
-   assign i0_r_data_en              = ( i0_pipe_en[2]   | clk_override);
-   assign i0_wb_data_en             = ( i0_pipe_en[1]   | clk_override);
-
-   assign dec_data_en[1:0]          = {i0_x_data_en, i0_r_data_en};
-   assign dec_ctl_en[1:0]           = {i0_x_ctl_en,  i0_r_ctl_en};
-
-
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)),.LEFT(15) ) e1ff (.*, .en(i0_x_ctl_en), .din(d_d),  .dout(x_d));
-
-   always_comb begin
-      x_d_in = x_d;
-
-      x_d_in.i0v         = x_d.i0v     & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-      x_d_in.i0valid     = x_d.i0valid & ~dec_tlu_flush_lower_wb & ~dec_tlu_flush_lower_r;
-   end
-
-   rvdfflie #( .WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15) ) r_d_ff (.*, .en(i0_r_ctl_en), .din(x_d_in), .dout(r_d));
-
-
-   always_comb begin
-
-        r_d_in = r_d;
-
-
-      // for the bench
-      r_d_in.i0rd[4:0]   =  r_d.i0rd[4:0];
-
-      r_d_in.i0v         = (r_d.i0v      & ~dec_tlu_flush_lower_wb);
-      r_d_in.i0valid     = (r_d.i0valid  & ~dec_tlu_flush_lower_wb);
-
-      r_d_in.i0load      =  r_d.i0load   & ~dec_tlu_flush_lower_wb;
-      r_d_in.i0store     =  r_d.i0store  & ~dec_tlu_flush_lower_wb;
-
-   end
-
-
-   rvdfflie #(.WIDTH($bits(eb1_dest_pkt_t)), .LEFT(15)) wbff (.*, .en(i0_wb_ctl_en), .din(r_d_in), .dout(wbd));
-
-   assign dec_i0_waddr_r[4:0]       =  r_d_in.i0rd[4:0];
-
-   assign     i0_wen_r              =  r_d_in.i0v & ~dec_tlu_i0_kill_writeb_r;
-   assign dec_i0_wen_r              =  i0_wen_r   & ~r_d_in.i0div & ~i0_load_kill_wen_r;  // don't write a nonblock load 1st time down the pipe
-   assign dec_i0_wdata_r[31:0]      =  i0_result_corr_r[31:0];
-
-
-   // divide stuff
-   assign div_e1_to_r         = (x_d.i0div & x_d.i0valid) |
-                                (r_d.i0div & r_d.i0valid);
-
-   assign div_active_in = i0_div_decode_d | (div_active & ~exu_div_wren & ~nonblock_div_cancel);
-
-
-   assign dec_div_active = div_active;
-
-   // nonblocking div scheme
-
-   assign i0_nonblock_div_stall  = (dec_i0_rs1_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs1[4:0])) |
-                                   (dec_i0_rs2_en_d & div_active & (div_waddr_wb[4:0] == i0r.rs2[4:0]));
-
-
-   assign div_flush              = (x_d.i0div & x_d.i0valid & (x_d.i0rd[4:0]==5'b0)                           ) |
-                                   (x_d.i0div & x_d.i0valid & dec_tlu_flush_lower_r                           ) |
-                                   (r_d.i0div & r_d.i0valid & dec_tlu_flush_lower_r & dec_tlu_i0_kill_writeb_r);
-
-
-   // cancel if any younger inst committing this cycle to same dest as nonblock divide
-   assign nonblock_div_cancel    = (div_active &  div_flush) |
-                                   (div_active & ~div_e1_to_r & (r_d.i0rd[4:0] == div_waddr_wb[4:0]) & i0_wen_r);
-
-   assign dec_div_cancel         =  nonblock_div_cancel;
-
-
-
-   assign i0_div_decode_d            =  i0_legal_decode_d & i0_dp.div;
-
-// for load_to_use_plus1, the load result data is merged in R stage instead of D
-
-   if ( pt.LOAD_TO_USE_PLUS1 == 1 ) begin : genblock1
-      assign i0_result_x[31:0]          = exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = (r_d.i0v & r_d.i0load) ? lsu_result_m[31:0] : i0_result_r_raw[31:0];
-   end
-   else begin : genblock1
-      assign i0_result_x[31:0]          = (x_d.i0v & x_d.i0load) ? lsu_result_m[31:0] : exu_i0_result_x[31:0];
-      assign i0_result_r[31:0]          = i0_result_r_raw[31:0];
-   end
-
-
-   rvdffe #(32) i0_result_r_ff       (.*, .en(i0_r_data_en & (x_d.i0v | x_d.csrwen | debug_valid_x)),  .din(i0_result_x[31:0]),       .dout(i0_result_r_raw[31:0]));
-
-   // correct lsu load data - don't use for bypass, do pass down the pipe
-   assign i0_result_corr_r[31:0]     = (r_d.i0v & r_d.i0load) ? lsu_result_corr_r[31:0] : i0_result_r_raw[31:0];
-
-
-   rvdffe #(12) e1brpcff             (.*, .en(i0_x_data_en), .din(last_br_immed_d[12:1] ), .dout(last_br_immed_x[12:1]));
-
-
-
-   assign i0_wb_en                   =  i0_wb_data_en;
-
-   assign i0_inst_wb_in[31:0]        =  i0_inst_r[31:0];
-   assign i0_inst_d[31:0]            = (dec_i0_pc4_d)    ?  i0[31:0]                                  :  {16'b0, ifu_i0_cinst[15:0]};
-
-
-   assign trace_enable = ~dec_tlu_trace_disable;
-
-
-   rvdffe #(.WIDTH(5),.OVERRIDE(1))  i0rdff  (.*, .en(i0_div_decode_d),        .din(i0r.rd[4:0]),             .dout(div_waddr_wb[4:0]));
-
-   rvdffe #(32) i0xinstff            (.*, .en(i0_x_data_en & trace_enable),    .din(i0_inst_d[31:0]),         .dout(i0_inst_x[31:0]));
-   rvdffe #(32) i0cinstff            (.*, .en(i0_r_data_en & trace_enable),    .din(i0_inst_x[31:0]),         .dout(i0_inst_r[31:0]));
-
-   rvdffe #(32) i0wbinstff           (.*, .en(i0_wb_en & trace_enable),        .din(i0_inst_wb_in[31:0]),     .dout(i0_inst_wb[31:0]));
-   rvdffe #(31) i0wbpcff             (.*, .en(i0_wb_en & trace_enable),        .din(dec_tlu_i0_pc_r[31:1]),   .dout(  i0_pc_wb[31:1]));
-
-   assign dec_i0_inst_wb[31:0] = i0_inst_wb[31:0];
-   assign dec_i0_pc_wb[31:1] = i0_pc_wb[31:1];
-
-
-
-   rvdffpcie #(31) i0_pc_r_ff           (.*, .en(i0_r_data_en), .din(exu_i0_pc_x[31:1]), .dout(dec_i0_pc_r[31:1]));
-
-   assign dec_tlu_i0_pc_r[31:1]      = dec_i0_pc_r[31:1];
-
-
-   rvbradder ibradder_correct (
-                     .pc(exu_i0_pc_x[31:1]),
-                     .offset(last_br_immed_x[12:1]),
-                     .dout(pred_correct_npc_x[31:1]));
-
-
-
-   // add nonblock load rs1/rs2 bypass cases
-
-   assign i0_rs1_nonblock_load_bypass_en_d  = dec_i0_rs1_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs1[4:0]);
-
-   assign i0_rs2_nonblock_load_bypass_en_d  = dec_i0_rs2_en_d & dec_nonblock_load_wen & (dec_nonblock_load_waddr[4:0] == i0r.rs2[4:0]);
-
-
-
-   // bit 2 is priority match, bit 0 lowest priority, i0_x, i0_r
-
-   assign i0_rs1bypass[2]                =  i0_rs1_depth_d[0] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul                      );
-   assign i0_rs1bypass[1]                =  i0_rs1_depth_d[0] & (                                          i0_rs1_class_d.load);
-   assign i0_rs1bypass[0]                =  i0_rs1_depth_d[1] & (i0_rs1_class_d.alu | i0_rs1_class_d.mul | i0_rs1_class_d.load);
-
-   assign i0_rs2bypass[2]                =  i0_rs2_depth_d[0] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul                      );
-   assign i0_rs2bypass[1]                =  i0_rs2_depth_d[0] & (                                          i0_rs2_class_d.load);
-   assign i0_rs2bypass[0]                =  i0_rs2_depth_d[1] & (i0_rs2_class_d.alu | i0_rs2_class_d.mul | i0_rs2_class_d.load);
-
-
-   assign dec_i0_rs1_bypass_en_d[3]      =  i0_rs1_nonblock_load_bypass_en_d & ~i0_rs1bypass[0] & ~i0_rs1bypass[1] & ~i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[2]      =  i0_rs1bypass[2];
-   assign dec_i0_rs1_bypass_en_d[1]      =  i0_rs1bypass[1];
-   assign dec_i0_rs1_bypass_en_d[0]      =  i0_rs1bypass[0];
-
-   assign dec_i0_rs2_bypass_en_d[3]      =  i0_rs2_nonblock_load_bypass_en_d & ~i0_rs2bypass[0] & ~i0_rs2bypass[1] & ~i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[2]      =  i0_rs2bypass[2];
-   assign dec_i0_rs2_bypass_en_d[1]      =  i0_rs2bypass[1];
-   assign dec_i0_rs2_bypass_en_d[0]      =  i0_rs2bypass[0];
-
-
-   assign dec_i0_result_r[31:0]          =  i0_result_r[31:0];
-
-
-endmodule // eb1_dec_decode_ctl
-
-
-
-
-
-// file "decode" is human readable file that has all of the instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "decode" except legal equation:
-
-// 1) coredecode -in decode > coredecode.e
-
-// 2) espresso -Dso -oeqntott coredecode.e | addassign -pre out.  > equations
-
-// to generate the legal (32b instruction is legal) equation below:
-
-// 1) coredecode -in decode -legal > legal.e
-
-// 2) espresso -Dso -oeqntott legal.e | addassign -pre out. > legal_equation
-
-module eb1_dec_dec_ctl
-import eb1_pkg::*;
-  (
-   input logic [31:0] inst,
-
-   output eb1_dec_pkt_t out
-   );
-
-   logic [31:0] i;
-
-
-   assign i[31:0] = inst[31:0];
-
-
-assign out.alu = (i[30]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[5]&i[4]) | (i[29]
-    &!i[27]&!i[24]&i[4]) | (!i[25]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[25]
-    &i[13]&i[12]) | (i[27]&i[25]&i[14]&i[4]) | (i[29]&i[27]&!i[14]&i[4]) | (
-    i[29]&!i[14]&i[5]&i[4]) | (!i[27]&!i[25]&i[14]&i[4]) | (i[30]&!i[29]
-    &!i[13]&i[4]) | (!i[30]&!i[27]&!i[25]&i[4]) | (i[13]&!i[5]&i[4]) | (
-    !i[12]&!i[5]&i[4]) | (i[2]) | (i[6]) | (i[30]&i[24]&i[23]&i[22]&i[21]
-    &i[20]&!i[5]&i[4]) | (!i[30]&i[29]&!i[24]&!i[23]&i[22]&i[21]&i[20]
-    &!i[5]&i[4]) | (!i[30]&i[24]&!i[23]&!i[22]&!i[21]&!i[20]&!i[5]&i[4]);
-
-assign out.rs1 = (!i[14]&!i[13]&!i[2]) | (!i[13]&i[11]&!i[2]) | (i[19]&i[13]&!i[2]) | (
-    !i[13]&i[10]&!i[2]) | (i[18]&i[13]&!i[2]) | (!i[13]&i[9]&!i[2]) | (
-    i[17]&i[13]&!i[2]) | (!i[13]&i[8]&!i[2]) | (i[16]&i[13]&!i[2]) | (
-    !i[13]&i[7]&!i[2]) | (i[15]&i[13]&!i[2]) | (!i[4]&!i[3]) | (!i[6]
-    &!i[2]);
-
-assign out.rs2 = (i[5]&!i[4]&!i[2]) | (!i[6]&i[5]&!i[2]);
-
-assign out.imm12 = (!i[4]&!i[3]&i[2]) | (i[13]&!i[5]&i[4]&!i[2]) | (!i[13]&!i[12]
-    &i[6]&i[4]) | (!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.rd = (!i[5]&!i[2]) | (i[5]&i[2]) | (i[4]);
-
-assign out.shimm5 = (i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.imm20 = (i[5]&i[3]) | (i[4]&i[2]);
-
-assign out.pc = (!i[5]&!i[3]&i[2]) | (i[5]&i[3]);
-
-assign out.load = (!i[5]&!i[4]&!i[2]);
-
-assign out.store = (!i[6]&i[5]&!i[4]);
-
-assign out.lsu = (!i[6]&!i[4]&!i[2]);
-
-assign out.add = (!i[14]&!i[13]&!i[12]&!i[5]&i[4]) | (!i[5]&!i[3]&i[2]) | (!i[30]
-    &!i[25]&!i[14]&!i[13]&!i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sub = (i[30]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (!i[29]&!i[25]&!i[14]
-    &i[13]&!i[6]&i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]) | (
-    !i[14]&i[13]&!i[5]&i[4]&!i[2]) | (i[6]&!i[4]&!i[2]);
-
-assign out.land = (!i[27]&!i[25]&i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[14]&i[13]&i[12]
-    &!i[5]&!i[2]);
-
-assign out.lor = (!i[6]&i[3]) | (!i[29]&!i[27]&!i[25]&i[14]&i[13]&!i[12]&!i[6]&!i[2]) | (
-    i[5]&i[4]&i[2]) | (!i[13]&!i[12]&i[6]&i[4]) | (i[14]&i[13]&!i[12]
-    &!i[5]&!i[2]);
-
-assign out.lxor = (!i[29]&!i[27]&!i[25]&i[14]&!i[13]&!i[12]&i[4]&!i[2]) | (i[14]
-    &!i[13]&!i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sll = (!i[29]&!i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sra = (i[30]&!i[29]&!i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.srl = (!i[30]&!i[29]&!i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.slt = (!i[29]&!i[25]&!i[14]&i[13]&!i[6]&i[4]&!i[2]) | (!i[14]&i[13]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.unsign = (!i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]) | (!i[14]&i[13]
-    &i[12]&!i[5]&!i[2]) | (i[13]&i[6]&!i[4]&!i[2]) | (i[14]&!i[5]&!i[4]) | (
-    !i[25]&!i[14]&i[13]&i[12]&!i[6]&!i[2]) | (i[27]&i[25]&i[14]&i[13]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.condbr = (i[6]&!i[4]&!i[2]);
-
-assign out.beq = (!i[14]&!i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bne = (!i[14]&i[12]&i[6]&!i[4]&!i[2]);
-
-assign out.bge = (i[14]&i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.blt = (i[14]&!i[12]&i[5]&!i[4]&!i[2]);
-
-assign out.jal = (i[6]&i[2]);
-
-assign out.by = (!i[13]&!i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.half = (i[12]&!i[6]&!i[4]&!i[2]);
-
-assign out.word = (i[13]&!i[6]&!i[4]);
-
-assign out.csr_read = (i[13]&i[6]&i[4]) | (i[7]&i[6]&i[4]) | (i[8]&i[6]&i[4]) | (
-    i[9]&i[6]&i[4]) | (i[10]&i[6]&i[4]) | (i[11]&i[6]&i[4]);
-
-assign out.csr_clr = (i[15]&i[13]&i[12]&i[6]&i[4]) | (i[16]&i[13]&i[12]&i[6]&i[4]) | (
-    i[17]&i[13]&i[12]&i[6]&i[4]) | (i[18]&i[13]&i[12]&i[6]&i[4]) | (
-    i[19]&i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_set = (i[15]&!i[12]&i[6]&i[4]) | (i[16]&!i[12]&i[6]&i[4]) | (i[17]
-    &!i[12]&i[6]&i[4]) | (i[18]&!i[12]&i[6]&i[4]) | (i[19]&!i[12]&i[6]
-    &i[4]);
-
-assign out.csr_write = (!i[13]&i[12]&i[6]&i[4]);
-
-assign out.csr_imm = (i[14]&!i[13]&i[6]&i[4]) | (i[15]&i[14]&i[6]&i[4]) | (i[16]
-    &i[14]&i[6]&i[4]) | (i[17]&i[14]&i[6]&i[4]) | (i[18]&i[14]&i[6]&i[4]) | (
-    i[19]&i[14]&i[6]&i[4]);
-
-assign out.presync = (!i[5]&i[3]) | (!i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (
-    !i[13]&i[9]&i[6]&i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]
-    &i[6]&i[4]) | (i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (
-    i[17]&i[13]&i[6]&i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]
-    &i[4]);
-
-assign out.postsync = (i[12]&!i[5]&i[3]) | (!i[22]&!i[13]&!i[12]&i[6]&i[4]) | (
-    !i[13]&i[7]&i[6]&i[4]) | (!i[13]&i[8]&i[6]&i[4]) | (!i[13]&i[9]&i[6]
-    &i[4]) | (!i[13]&i[10]&i[6]&i[4]) | (!i[13]&i[11]&i[6]&i[4]) | (
-    i[15]&i[13]&i[6]&i[4]) | (i[16]&i[13]&i[6]&i[4]) | (i[17]&i[13]&i[6]
-    &i[4]) | (i[18]&i[13]&i[6]&i[4]) | (i[19]&i[13]&i[6]&i[4]);
-
-assign out.ebreak = (!i[22]&i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.ecall = (!i[21]&!i[20]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mret = (i[29]&!i[13]&!i[12]&i[6]&i[4]);
-
-assign out.mul = (!i[30]&i[27]&i[24]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&i[23]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[29]&i[27]&!i[24]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[27]&i[13]
-    &!i[6]&i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[22]&!i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&!i[22]&i[21]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (i[30]&i[29]&i[27]&!i[23]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]&i[23]&i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[2]) | (i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&!i[27]
-    &i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[29]&i[27]&i[14]
-    &!i[6]&i[5]&!i[2]);
-
-assign out.rs1_sign = (!i[27]&i[25]&!i[14]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]) | (
-    !i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.rs2_sign = (!i[27]&i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.low = (i[25]&!i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.div = (!i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.rem = (!i[27]&i[25]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.fence = (!i[5]&i[3]);
-
-assign out.fence_i = (i[12]&!i[5]&i[3]);
-
-assign out.clz = (i[30]&!i[27]&!i[24]&!i[22]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.ctz = (i[30]&!i[27]&!i[24]&!i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.pcnt = (i[30]&!i[27]&!i[24]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_b = (i[30]&!i[27]&i[22]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.sext_h = (i[30]&!i[27]&i[22]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.slo = (!i[30]&i[29]&!i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sro = (!i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.min = (i[27]&i[25]&i[14]&!i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.max = (i[27]&i[25]&i[14]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.pack = (!i[30]&i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packu = (i[30]&i[27]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.packh = (!i[30]&i[27]&!i[25]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.rol = (i[30]&!i[27]&!i[14]&i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.ror = (i[30]&i[29]&!i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbb = (i[30]&!i[27]&!i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    !i[30]&i[27]&i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]) | (i[30]&i[29]&!i[27]
-    &i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[27]&!i[13]&!i[12]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[14]&!i[13]&!i[12]&!i[6]&i[5]&!i[2]) | (i[30]
-    &!i[27]&i[13]&!i[6]&i[5]&i[4]&!i[2]) | (i[30]&i[29]&!i[27]&!i[6]&i[5]
-    &i[4]&!i[2]) | (i[30]&i[29]&i[24]&i[23]&i[22]&i[21]&i[20]&i[14]&!i[13]
-    &i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[29]&i[27]&!i[24]&!i[23]&i[22]
-    &i[21]&i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&i[27]
-    &i[24]&!i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (
-    i[30]&i[29]&i[24]&i[23]&!i[22]&!i[21]&!i[20]&i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]) | (i[27]&i[25]&i[14]&!i[6]&i[5]&!i[2]);
-
-assign out.sbset = (!i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbclr = (i[30]&!i[29]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbinv = (i[30]&i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.sbext = (i[30]&!i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbs = (i[29]&i[27]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]) | (i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.bext = (!i[30]&i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.bdep = (i[30]&i[27]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbe = (i[27]&!i[25]&i[13]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmul = (i[27]&i[25]&!i[14]&!i[13]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.clmulh = (i[27]&!i[14]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.clmulr = (i[27]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.zbc = (i[27]&i[25]&!i[14]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.grev = (i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.gorc = (!i[30]&i[29]&i[27]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.shfl = (!i[30]&!i[29]&i[27]&!i[25]&!i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.unshfl = (!i[30]&!i[29]&i[27]&!i[25]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.zbp = (!i[30]&i[29]&!i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (!i[30]&!i[29]
-    &i[27]&!i[13]&i[12]&!i[5]&i[4]&!i[2]) | (i[30]&!i[27]&i[13]&!i[6]
-    &i[5]&i[4]&!i[2]) | (i[27]&!i[25]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (
-    i[30]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]) | (i[29]&!i[27]&i[12]&!i[6]
-    &i[5]&i[4]&!i[2]) | (!i[30]&!i[29]&i[27]&!i[25]&i[12]&!i[6]&i[5]&i[4]
-    &!i[2]) | (i[29]&i[14]&!i[13]&i[12]&!i[6]&i[4]&!i[2]);
-
-assign out.crc32_b = (i[30]&!i[27]&i[24]&!i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]
-    &!i[5]&i[4]&!i[2]);
-
-assign out.crc32_h = (i[30]&!i[27]&i[24]&!i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32_w = (i[30]&!i[27]&i[24]&!i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]
-    &!i[2]);
-
-assign out.crc32c_b = (i[30]&!i[27]&i[23]&!i[21]&!i[20]&!i[14]&!i[13]&i[12]&!i[5]
-    &i[4]&!i[2]);
-
-assign out.crc32c_h = (i[30]&!i[27]&i[23]&i[20]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.crc32c_w = (i[30]&!i[27]&i[23]&i[21]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.zbr = (i[30]&!i[27]&i[24]&!i[14]&!i[13]&i[12]&!i[5]&i[4]&!i[2]);
-
-assign out.bfp = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.zbf = (i[30]&i[27]&i[13]&i[12]&!i[6]&i[5]&!i[2]);
-
-assign out.sh1add = (i[29]&!i[14]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.sh2add = (i[29]&i[14]&!i[13]&!i[12]&i[5]&i[4]&!i[2]);
-
-assign out.sh3add = (i[29]&i[14]&i[13]&!i[6]&i[5]&!i[2]);
-
-assign out.zba = (i[29]&!i[12]&!i[6]&i[5]&i[4]&!i[2]);
-
-assign out.pm_alu = (i[28]&i[22]&!i[13]&!i[12]&i[4]) | (!i[30]&!i[29]&!i[27]&!i[25]
-    &!i[6]&i[4]) | (!i[29]&!i[27]&!i[25]&!i[13]&i[12]&!i[6]&i[4]) | (
-    !i[29]&!i[27]&!i[25]&!i[14]&!i[6]&i[4]) | (i[13]&!i[5]&i[4]) | (i[4]
-    &i[2]) | (!i[12]&!i[5]&i[4]);
-
-
-assign out.legal = (!i[31]&!i[30]&!i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]
-    &i[22]&!i[21]&i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&i[29]&i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]
-    &!i[9]&!i[8]&!i[7]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]&!i[21]
-    &!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[11]&!i[10]&!i[9]&!i[8]
-    &!i[7]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]
-    &!i[25]&i[24]&!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&i[24]&!i[22]&!i[21]&!i[6]&!i[5]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[23]
-    &!i[22]&!i[20]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]
-    &!i[28]&!i[26]&!i[25]&!i[24]&!i[23]&!i[21]&!i[6]&!i[5]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[25]&i[13]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[26]&!i[25]&!i[24]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&i[14]&!i[12]&!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]
-    &!i[30]&!i[28]&!i[27]&!i[26]&!i[25]&i[13]&!i[12]&!i[6]&i[4]&!i[3]
-    &i[1]&i[0]) | (!i[31]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[13]&!i[12]
-    &!i[6]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[28]&!i[27]&!i[26]&!i[25]
-    &i[14]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[29]
-    &!i[28]&!i[26]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[26]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]
-    &i[0]) | (!i[31]&i[30]&!i[28]&i[27]&!i[26]&!i[25]&!i[13]&i[12]&!i[6]
-    &i[4]&!i[3]&i[1]&i[0]) | (!i[31]&i[29]&!i[28]&i[27]&!i[26]&!i[25]
-    &!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]&!i[28]&!i[27]
-    &!i[26]&!i[25]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[30]
-    &!i[29]&!i[28]&!i[27]&!i[26]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[14]&!i[13]&!i[12]&i[6]&i[5]&!i[4]&!i[3]&i[1]&i[0]) | (!i[31]&!i[29]
-    &!i[28]&!i[26]&!i[25]&i[14]&!i[6]&i[5]&i[4]&!i[3]&i[1]&i[0]) | (
-    !i[31]&i[29]&!i[28]&!i[26]&!i[25]&!i[13]&i[12]&i[5]&i[4]&!i[3]&!i[2]
-    &i[1]&i[0]) | (i[14]&i[6]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[14]
-    &!i[13]&i[5]&!i[4]&!i[3]&!i[2]&i[1]&i[0]) | (!i[12]&!i[6]&!i[5]&i[4]
-    &!i[3]&i[1]&i[0]) | (!i[13]&i[12]&i[6]&i[5]&!i[3]&!i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[27]&!i[26]&!i[25]&!i[24]&!i[23]&!i[22]
-    &!i[21]&!i[20]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]&!i[13]&!i[11]
-    &!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (
-    !i[31]&!i[30]&!i[29]&!i[28]&!i[19]&!i[18]&!i[17]&!i[16]&!i[15]&!i[14]
-    &!i[13]&!i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]&i[3]
-    &i[2]&i[1]&i[0]) | (i[13]&i[6]&i[5]&i[4]&!i[3]&!i[2]&i[1]&i[0]) | (
-    i[6]&i[5]&!i[4]&i[3]&i[2]&i[1]&i[0]) | (!i[14]&!i[12]&!i[6]&!i[4]
-    &!i[3]&!i[2]&i[1]&i[0]) | (!i[13]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]
-    &i[0]) | (i[13]&!i[6]&!i[5]&i[4]&!i[3]&i[1]&i[0]) | (!i[6]&i[4]&!i[3]
-    &i[2]&i[1]&i[0]);
-
-
-endmodule // eb1_dec_dec_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_gpr_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})  (
-    input logic [4:0]  raddr0,       // logical read addresses
-    input logic [4:0]  raddr1,
-
-    input logic        wen0,         // write enable
-    input logic [4:0]  waddr0,       // write address
-    input logic [31:0] wd0,          // write data
-
-    input logic        wen1,         // write enable
-    input logic [4:0]  waddr1,       // write address
-    input logic [31:0] wd1,          // write data
-
-    input logic        wen2,         // write enable
-    input logic [4:0]  waddr2,       // write address
-    input logic [31:0] wd2,          // write data
-
-    input logic        clk,
-    input logic        rst_l,
-
-    output logic [31:0] rd0,         // read data
-    output logic [31:0] rd1,
-
-    input  logic        scan_mode
-);
-
-   logic [31:1] [31:0] gpr_out;      // 31 x 32 bit GPRs
-   logic [31:1] [31:0] gpr_in;
-   logic [31:1] w0v,w1v,w2v;
-   logic [31:1] gpr_wr_en;
-
-   // GPR Write Enables
-   assign gpr_wr_en[31:1] = (w0v[31:1] | w1v[31:1] | w2v[31:1]);
-   for ( genvar j=1; j<32; j++ )  begin : gpr
-      rvdffe #(32) gprff (.*, .en(gpr_wr_en[j]), .din(gpr_in[j][31:0]), .dout(gpr_out[j][31:0]));
-   end : gpr
-
-   // the read out
-   always_comb begin
-      rd0[31:0] = 32'b0;
-      rd1[31:0] = 32'b0;
-      w0v[31:1] = 31'b0;
-      w1v[31:1] = 31'b0;
-      w2v[31:1] = 31'b0;
-      gpr_in[31:1] = '0;
-
-      // GPR Read logic
-      for (int j=1; j<32; j++ )  begin
-         rd0[31:0] |= ({32{(raddr0[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-         rd1[31:0] |= ({32{(raddr1[4:0]== 5'(j))}} & gpr_out[j][31:0]);
-      end
-
-     // GPR Write logic
-     for (int j=1; j<32; j++ )  begin
-         w0v[j]     = wen0  & (waddr0[4:0]== 5'(j) );
-         w1v[j]     = wen1  & (waddr1[4:0]== 5'(j) );
-         w2v[j]     = wen2  & (waddr2[4:0]== 5'(j) );
-         gpr_in[j]  =    ({32{w0v[j]}} & wd0[31:0]) |
-                         ({32{w1v[j]}} & wd1[31:0]) |
-                         ({32{w2v[j]}} & wd2[31:0]);
-     end
-   end // always_comb begin
-
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-module eb1_dec_ib_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic                 dbg_cmd_valid,                      // valid dbg cmd
-
-   input logic                 dbg_cmd_write,                      // dbg cmd is write
-   input logic [1:0]           dbg_cmd_type,                       // dbg type
-   input logic [31:0]          dbg_cmd_addr,                       // expand to 31:0
-
-   input eb1_br_pkt_t i0_brp,                                     // i0 branch packet from aligner
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index,    // BP index
-   input logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr,               // BP FGHR
-   input logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag,              // BP tag
-   input logic [$clog2(pt.BTB_SIZE)-1:0] ifu_i0_fa_index,          // Fully associt btb index
-
-   input logic       ifu_i0_pc4,                                   // i0 is 4B inst else 2B
-   input logic       ifu_i0_valid,                                 // i0 valid from ifu
-   input logic       ifu_i0_icaf,                                  // i0 instruction access fault
-   input logic [1:0] ifu_i0_icaf_type,                             // i0 instruction access fault type
-
-   input logic   ifu_i0_icaf_second,                               // i0 has access fault on second 2B of 4B inst
-   input logic   ifu_i0_dbecc,                                     // i0 double-bit error
-   input logic [31:0]  ifu_i0_instr,                               // i0 instruction from the aligner
-   input logic [31:1]  ifu_i0_pc,                                  // i0 pc from the aligner
-
-
-   output logic dec_ib0_valid_d,                                   // ib0 valid
-   output logic dec_debug_valid_d,                                 // Debug read or write at D-stage
-
-
-   output logic [31:0] dec_i0_instr_d,                             // i0 inst at decode
-
-   output logic [31:1] dec_i0_pc_d,                                // i0 pc at decode
-
-   output logic dec_i0_pc4_d,                                      // i0 is 4B inst else 2B
-
-   output eb1_br_pkt_t dec_i0_brp,                                // i0 branch packet at decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_i0_bp_index,   // i0 branch index
-   output logic [pt.BHT_GHR_SIZE-1:0] dec_i0_bp_fghr,              // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] dec_i0_bp_btag,             // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0] dec_i0_bp_fa_index,          // Fully associt btb index
-
-   output logic dec_i0_icaf_d,                                     // i0 instruction access fault at decode
-   output logic dec_i0_icaf_second_d,                              // i0 instruction access fault on second 2B of 4B inst
-   output logic [1:0] dec_i0_icaf_type_d,                          // i0 instruction access fault type
-   output logic dec_i0_dbecc_d,                                    // i0 double-bit error at decode
-   output logic dec_debug_wdata_rs1_d,                             // put debug write data onto rs1 source: machine is halted
-
-   output logic dec_debug_fence_d                                  // debug fence inst
-
-   );
-
-
-   logic         debug_valid;
-   logic [4:0]   dreg;
-   logic [11:0]  dcsr;
-   logic [31:0]  ib0, ib0_debug_in;
-
-   logic         debug_read;
-   logic         debug_write;
-   logic         debug_read_gpr;
-   logic         debug_write_gpr;
-   logic         debug_read_csr;
-   logic         debug_write_csr;
-
-   logic [34:0]  ifu_i0_pcdata, pc0;
-
-   assign ifu_i0_pcdata[34:0] = { ifu_i0_icaf_second, ifu_i0_dbecc, ifu_i0_icaf,
-                                  ifu_i0_pc[31:1], ifu_i0_pc4 };
-
-   assign pc0[34:0] = ifu_i0_pcdata[34:0];
-
-   assign dec_i0_icaf_second_d = pc0[34];   // icaf's can only decode as i0
-
-   assign dec_i0_dbecc_d = pc0[33];
-
-   assign dec_i0_icaf_d = pc0[32];
-   assign dec_i0_pc_d[31:1] = pc0[31:1];
-   assign dec_i0_pc4_d = pc0[0];
-
-   assign dec_i0_icaf_type_d[1:0] = ifu_i0_icaf_type[1:0];
-
-// GPR accesses
-
-// put reg to read on rs1
-// read ->   or %x0,  %reg,%x0      {000000000000,reg[4:0],110000000110011}
-
-// put write date on rs1
-// write ->  or %reg, %x0, %x0      {00000000000000000110,reg[4:0],0110011}
-
-
-// CSR accesses
-// csr is of form rd, csr, rs1
-
-// read  -> csrrs %x0, %csr, %x0     {csr[11:0],00000010000001110011}
-
-// put write data on rs1
-// write -> csrrw %x0, %csr, %x0     {csr[11:0],00000001000001110011}
-
-// abstract memory command not done here
-   assign debug_valid = dbg_cmd_valid & (dbg_cmd_type[1:0] != 2'h2);
-
-
-   assign debug_read  = debug_valid & ~dbg_cmd_write;
-   assign debug_write = debug_valid &  dbg_cmd_write;
-
-   assign debug_read_gpr  = debug_read  & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_write_gpr = debug_write & (dbg_cmd_type[1:0]==2'h0);
-   assign debug_read_csr  = debug_read  & (dbg_cmd_type[1:0]==2'h1);
-   assign debug_write_csr = debug_write & (dbg_cmd_type[1:0]==2'h1);
-
-   assign dreg[4:0]  = dbg_cmd_addr[4:0];
-   assign dcsr[11:0] = dbg_cmd_addr[11:0];
-
-
-   assign ib0_debug_in[31:0] = ({32{debug_read_gpr}}  & {12'b000000000000,dreg[4:0],15'b110000000110011}) |
-                               ({32{debug_write_gpr}} & {20'b00000000000000000110,dreg[4:0],7'b0110011}) |
-                               ({32{debug_read_csr}}  & {dcsr[11:0],20'b00000010000001110011}) |
-                               ({32{debug_write_csr}} & {dcsr[11:0],20'b00000001000001110011});
-
-
-
-   // machine is in halted state, pipe empty, write will always happen next cycle
-
-   assign dec_debug_wdata_rs1_d = debug_write_gpr | debug_write_csr;
-
-
-   // special fence csr for use only in debug mode
-
-   assign dec_debug_fence_d = debug_write_csr & (dcsr[11:0] == 12'h7c4);
-
-   assign ib0[31:0] = (debug_valid) ? ib0_debug_in[31:0] : ifu_i0_instr[31:0];
-
-   assign dec_ib0_valid_d = ifu_i0_valid | debug_valid;
-
-   assign dec_debug_valid_d = debug_valid;
-
-   assign dec_i0_instr_d[31:0] = ib0[31:0];
-
-   assign dec_i0_brp = i0_brp;
-   assign dec_i0_bp_index = ifu_i0_bp_index;
-   assign dec_i0_bp_fghr = ifu_i0_bp_fghr;
-   assign dec_i0_bp_btag = ifu_i0_bp_btag;
-   assign dec_i0_bp_fa_index = ifu_i0_fa_index;
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-//********************************************************************************
-// eb1_dec_tlu_ctl.sv
-//
-//
-// Function: CSRs, Commit/WB, flushing, exceptions, interrupts
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dec_tlu_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,
-   input logic free_clk,
-   input logic free_l2clk,
-   input logic rst_l,
-   input logic scan_mode,
-
-   input logic [31:1] rst_vec, // reset vector, from core pins
-   input logic        nmi_int, // nmi pin
-   input logic [31:1] nmi_vec, // nmi vector
-   input logic  i_cpu_halt_req,    // Asynchronous Halt request to CPU
-   input logic  i_cpu_run_req,     // Asynchronous Restart request to CPU
-
-   input logic lsu_fastint_stall_any,   // needed by lsu for 2nd pass of dma with ecc correction, stall next cycle
-
-
-   // perf counter inputs
-   input logic       ifu_pmu_instr_aligned,   // aligned instructions
-   input logic       ifu_pmu_fetch_stall, // fetch unit stalled
-   input logic       ifu_pmu_ic_miss, // icache miss
-   input logic       ifu_pmu_ic_hit, // icache hit
-   input logic       ifu_pmu_bus_error, // Instruction side bus error
-   input logic       ifu_pmu_bus_busy, // Instruction side bus busy
-   input logic       ifu_pmu_bus_trxn, // Instruction side bus transaction
-   input logic       dec_pmu_instr_decoded, // decoded instructions
-   input logic       dec_pmu_decode_stall, // decode stall
-   input logic       dec_pmu_presync_stall, // decode stall due to presync'd inst
-   input logic       dec_pmu_postsync_stall,// decode stall due to postsync'd inst
-   input logic       lsu_store_stall_any,    // SB or WB is full, stall decode
-   input logic       dma_dccm_stall_any,     // DMA stall of lsu
-   input logic       dma_iccm_stall_any,     // DMA stall of ifu
-   input logic       exu_pmu_i0_br_misp,     // pipe 0 branch misp
-   input logic       exu_pmu_i0_br_ataken,   // pipe 0 branch actual taken
-   input logic       exu_pmu_i0_pc4,         // pipe 0 4 byte branch
-   input logic       lsu_pmu_bus_trxn,       // D side bus transaction
-   input logic       lsu_pmu_bus_misaligned, // D side bus misaligned
-   input logic       lsu_pmu_bus_error,      // D side bus error
-   input logic       lsu_pmu_bus_busy,       // D side bus busy
-   input logic       lsu_pmu_load_external_m, // D side bus load
-   input logic       lsu_pmu_store_external_m, // D side bus store
-   input logic       dma_pmu_dccm_read,          // DMA DCCM read
-   input logic       dma_pmu_dccm_write,         // DMA DCCM write
-   input logic       dma_pmu_any_read,           // DMA read
-   input logic       dma_pmu_any_write,          // DMA write
-
-   input logic [31:1] lsu_fir_addr, // Fast int address
-   input logic [1:0] lsu_fir_error, // Fast int lookup error
-
-   input logic       iccm_dma_sb_error,      // I side dma single bit error
-
-   input    eb1_lsu_error_pkt_t lsu_error_pkt_r, // lsu precise exception/error packet
-   input logic         lsu_single_ecc_error_incr, // LSU inc SB error counter
-
-   input logic dec_pause_state, // Pause counter not zero
-   input logic         lsu_imprecise_error_store_any,      // store bus error
-   input logic         lsu_imprecise_error_load_any,      // store bus error
-   input logic [31:0]  lsu_imprecise_error_addr_any, // store bus error address
-
-   input logic        dec_csr_wen_unq_d,       // valid csr with write - for csr legal
-   input logic        dec_csr_any_unq_d,       // valid csr - for csr legal
-   input logic [11:0] dec_csr_rdaddr_d,      // read address for csr
-
-   input logic        dec_csr_wen_r,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic        dec_csr_stall_int_ff, // csr is mie/mstatus
-
-   input logic dec_tlu_i0_valid_r, // pipe 0 op at e4 is valid
-
-   input logic [31:1] exu_npc_r, // for NPC tracking
-
-   input logic [31:1] dec_tlu_i0_pc_r, // for PC/NPC tracking
-
-   input eb1_trap_pkt_t dec_tlu_packet_r, // exceptions known at decode
-
-   input logic [31:0] dec_illegal_inst, // For mtval
-   input logic        dec_i0_decode_d,  // decode valid, used for clean icache diagnostics
-
-   // branch info from pipe0 for errors or counter updates
-   input logic [1:0]  exu_i0_br_hist_r, // history
-   input logic        exu_i0_br_error_r, // error
-   input logic        exu_i0_br_start_error_r, // start error
-   input logic        exu_i0_br_valid_r, // valid
-   input logic        exu_i0_br_mp_r, // mispredict
-   input logic        exu_i0_br_middle_r, // middle of bank
-
-   // branch info from pipe1 for errors or counter updates
-
-   input logic             exu_i0_br_way_r, // way hit or repl
-
-   output logic dec_tlu_core_empty,  // core is empty
-   // Debug start
-   output logic dec_dbg_cmd_done, // abstract command done
-   output logic dec_dbg_cmd_fail, // abstract command failed
-   output logic dec_tlu_dbg_halted, // Core is halted and ready for debug command
-   output logic dec_tlu_debug_mode, // Core is in debug mode
-   output logic dec_tlu_resume_ack, // Resume acknowledge
-   output logic dec_tlu_debug_stall, // stall decode while waiting on core to empty
-
-   output logic dec_tlu_flush_noredir_r , // Tell fetch to idle on this flush
-   output logic dec_tlu_mpc_halted_only, // Core is halted only due to MPC
-   output logic dec_tlu_flush_leak_one_r, // single step
-   output logic dec_tlu_flush_err_r, // iside perr/ecc rfpc. This is the D stage of the error
-
-   output logic dec_tlu_flush_extint, // fast ext int started
-   output logic [31:2] dec_tlu_meihap, // meihap for fast int
-
-   input  logic dbg_halt_req, // DM requests a halt
-   input  logic dbg_resume_req, // DM requests a resume
-   input  logic ifu_miss_state_idle, // I-side miss buffer empty
-   input  logic lsu_idle_any, // lsu is idle
-   input  logic dec_div_active, // oop div is active
-   output eb1_trigger_pkt_t  [3:0] trigger_pkt_any, // trigger info for trigger blocks
-
-   input logic  ifu_ic_error_start,     // IC single bit error
-   input logic  ifu_iccm_rd_ecc_single_err, // ICCM single bit error
-
-
-   input logic [70:0] ifu_ic_debug_rd_data, // diagnostic icache read data
-   input logic ifu_ic_debug_rd_data_valid, // diagnostic icache read data valid
-   output eb1_cache_debug_pkt_t dec_tlu_ic_diag_pkt, // packet of DICAWICS, DICAD0/1, DICAGO info for icache diagnostics
-   // Debug end
-
-   input logic [7:0] pic_claimid, // pic claimid for csr
-   input logic [3:0] pic_pl, // pic priv level for csr
-   input logic       mhwakeup, // high priority external int, wakeup if halted
-
-   input logic mexintpend, // external interrupt pending
-   input logic timer_int, // timer interrupt pending
-   input logic soft_int, // software interrupt pending
-
-   output logic o_cpu_halt_status, // PMU interface, halted
-   output logic o_cpu_halt_ack, // halt req ack
-   output logic o_cpu_run_ack, // run req ack
-   output logic o_debug_mode_status, // Core to the PMU that core is in debug mode. When core is in debug mode, the PMU should refrain from sendng a halt or run request
-
-   input logic [31:4] core_id, // Core ID
-
-   // external MPC halt/run interface
-   input logic mpc_debug_halt_req, // Async halt request
-   input logic mpc_debug_run_req, // Async run request
-   input logic mpc_reset_run_req, // Run/halt after reset
-   output logic mpc_debug_halt_ack, // Halt ack
-   output logic mpc_debug_run_ack, // Run ack
-   output logic debug_brkpt_status, // debug breakpoint
-
-   output logic [3:0] dec_tlu_meicurpl, // to PIC
-   output logic [3:0] dec_tlu_meipt, // to PIC
-
-
-   output logic [31:0] dec_csr_rddata_d,      // csr read data at wb
-   output logic dec_csr_legal_d,              // csr indicates legal operation
-
-   output eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // branch pkt to bp
-
-   output logic dec_tlu_i0_kill_writeb_wb,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_wb,       // commit has a flush (exception, int, mispredict at e4)
-   output logic dec_tlu_i0_commit_cmt,        // committed an instruction
-
-   output logic dec_tlu_i0_kill_writeb_r,    // I0 is flushed, don't writeback any results to arch state
-   output logic dec_tlu_flush_lower_r,       // commit has a flush (exception, int)
-   output logic [31:1] dec_tlu_flush_path_r, // flush pc
-   output logic dec_tlu_fence_i_r,           // flush is a fence_i rfnpc, flush icache
-   output logic dec_tlu_wr_pause_r,           // CSR write to pause reg is at R.
-   output logic dec_tlu_flush_pause_r,        // Flush is due to pause
-
-   output logic dec_tlu_presync_d,            // CSR read needs to be presync'd
-   output logic dec_tlu_postsync_d,           // CSR needs to be presync'd
-
-
-   output logic [31:0] dec_tlu_mrac_ff,        // CSR for memory region control
-
-   output logic dec_tlu_force_halt, // halt has been forced
-
-   output logic dec_tlu_perfcnt0, // toggles when pipe0 perf counter 0 has an event inc
-   output logic dec_tlu_perfcnt1, // toggles when pipe0 perf counter 1 has an event inc
-   output logic dec_tlu_perfcnt2, // toggles when pipe0 perf counter 2 has an event inc
-   output logic dec_tlu_perfcnt3, // toggles when pipe0 perf counter 3 has an event inc
-
-   output logic dec_tlu_i0_exc_valid_wb1, // pipe 0 exception valid
-   output logic dec_tlu_i0_valid_wb1,  // pipe 0 valid
-   output logic dec_tlu_int_valid_wb1, // pipe 2 int valid
-   output logic [4:0] dec_tlu_exc_cause_wb1, // exception or int cause
-   output logic [31:0] dec_tlu_mtval_wb1, // MTVAL value
-
-   // feature disable from mfdc
-   output logic  dec_tlu_external_ldfwd_disable, // disable external load forwarding
-   output logic  dec_tlu_sideeffect_posted_disable,  // disable posted stores to side-effect address
-   output logic  dec_tlu_core_ecc_disable, // disable core ECC
-   output logic  dec_tlu_bpred_disable,           // disable branch prediction
-   output logic  dec_tlu_wb_coalescing_disable,   // disable writebuffer coalescing
-   output logic  dec_tlu_pipelining_disable,      // disable pipelining
-   output logic  dec_tlu_trace_disable,           // disable trace
-   output logic [2:0]  dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:16]
-
-   // clock gating overrides from mcgc
-   output logic  dec_tlu_misc_clk_override, // override misc clock domain gating
-   output logic  dec_tlu_dec_clk_override,  // override decode clock domain gating
-   output logic  dec_tlu_ifu_clk_override,  // override fetch clock domain gating
-   output logic  dec_tlu_lsu_clk_override,  // override load/store clock domain gating
-   output logic  dec_tlu_bus_clk_override,  // override bus clock domain gating
-   output logic  dec_tlu_pic_clk_override,  // override PIC clock domain gating
-   output logic  dec_tlu_picio_clk_override,// override PICIO clock domain gating
-   output logic  dec_tlu_dccm_clk_override, // override DCCM clock domain gating
-   output logic  dec_tlu_icm_clk_override   // override ICCM clock domain gating
-   );
-
-   logic         clk_override, e4e5_int_clk, nmi_fir_type, nmi_lsu_load_type, nmi_lsu_store_type, nmi_int_detected_f, nmi_lsu_load_type_f,
-                 nmi_lsu_store_type_f, allow_dbg_halt_csr_write, dbg_cmd_done_ns, i_cpu_run_req_d1_raw, debug_mode_status, lsu_single_ecc_error_r_d1,
-                 sel_npc_r, sel_npc_resume, ce_int,
-                 nmi_in_debug_mode, dpc_capture_npc, dpc_capture_pc, tdata_load, tdata_opcode, tdata_action, perfcnt_halted, tdata_chain,
-                 tdata_kill_write;
-
-
-   logic reset_delayed, reset_detect, reset_detected;
-   logic wr_mstatus_r, wr_mtvec_r, wr_mcyclel_r, wr_mcycleh_r,
-         wr_minstretl_r, wr_minstreth_r, wr_mscratch_r, wr_mepc_r, wr_mcause_r, wr_mscause_r, wr_mtval_r,
-         wr_mrac_r, wr_meihap_r, wr_meicurpl_r, wr_meipt_r, wr_dcsr_r,
-         wr_dpc_r, wr_meicidpl_r, wr_meivt_r, wr_meicpct_r, wr_micect_r, wr_miccmect_r, wr_mfdht_r, wr_mfdhs_r,
-         wr_mdccmect_r,wr_mhpme3_r, wr_mhpme4_r, wr_mhpme5_r, wr_mhpme6_r;
-   logic wr_mpmc_r;
-   logic [1:1] mpmc_b_ns, mpmc, mpmc_b;
-   logic set_mie_pmu_fw_halt, fw_halted_ns, fw_halted;
-   logic wr_mcountinhibit_r;
-   logic [6:0] mcountinhibit;
-   logic wr_mtsel_r, wr_mtdata1_t0_r, wr_mtdata1_t1_r, wr_mtdata1_t2_r, wr_mtdata1_t3_r, wr_mtdata2_t0_r, wr_mtdata2_t1_r, wr_mtdata2_t2_r, wr_mtdata2_t3_r;
-   logic [31:0] mtdata2_t0, mtdata2_t1, mtdata2_t2, mtdata2_t3, mtdata2_tsel_out, mtdata1_tsel_out;
-   logic [9:0]  mtdata1_t0_ns, mtdata1_t0, mtdata1_t1_ns, mtdata1_t1, mtdata1_t2_ns, mtdata1_t2, mtdata1_t3_ns, mtdata1_t3;
-   logic [9:0] tdata_wrdata_r;
-   logic [1:0] mtsel_ns, mtsel;
-   logic tlu_i0_kill_writeb_r;
-   logic [1:0]  mstatus_ns, mstatus;
-   logic [1:0] mfdhs_ns, mfdhs;
-   logic [31:0] force_halt_ctr, force_halt_ctr_f;
-   logic        force_halt;
-   logic [5:0]  mfdht, mfdht_ns;
-   logic mstatus_mie_ns;
-   logic [30:0] mtvec_ns, mtvec;
-   logic [15:2] dcsr_ns, dcsr;
-   logic [5:0] mip_ns, mip;
-   logic [5:0] mie_ns, mie;
-   logic [31:0] mcyclel_ns, mcyclel;
-   logic [31:0] mcycleh_ns, mcycleh;
-   logic [31:0] minstretl_ns, minstretl;
-   logic [31:0] minstreth_ns, minstreth;
-   logic [31:0] micect_ns, micect, miccmect_ns, miccmect, mdccmect_ns, mdccmect;
-   logic [26:0] micect_inc, miccmect_inc, mdccmect_inc;
-   logic [31:0] mscratch;
-   logic [31:0] mhpmc3, mhpmc3_ns, mhpmc4, mhpmc4_ns, mhpmc5, mhpmc5_ns, mhpmc6, mhpmc6_ns;
-   logic [31:0] mhpmc3h, mhpmc3h_ns, mhpmc4h, mhpmc4h_ns, mhpmc5h, mhpmc5h_ns, mhpmc6h, mhpmc6h_ns;
-   logic [9:0]  mhpme3, mhpme4, mhpme5, mhpme6;
-   logic [31:0] mrac;
-   logic [9:2] meihap;
-   logic [31:10] meivt;
-   logic [3:0] meicurpl_ns, meicurpl;
-   logic [3:0] meicidpl_ns, meicidpl;
-   logic [3:0] meipt_ns, meipt;
-   logic [31:0] mdseac;
-   logic mdseac_locked_ns, mdseac_locked_f, mdseac_en, nmi_lsu_detected;
-   logic [31:1] mepc_ns, mepc;
-   logic [31:1] dpc_ns, dpc;
-   logic [31:0] mcause_ns, mcause;
-   logic [3:0] mscause_ns, mscause, mscause_type;
-   logic [31:0] mtval_ns, mtval;
-   logic dec_pause_state_f, dec_tlu_wr_pause_r_d1, pause_expired_r, pause_expired_wb;
-   logic        tlu_flush_lower_r, tlu_flush_lower_r_d1;
-   logic [31:1] tlu_flush_path_r,  tlu_flush_path_r_d1;
-   logic i0_valid_wb;
-   logic tlu_i0_commit_cmt;
-   logic [31:1] vectored_path, interrupt_path;
-   logic [16:0] dicawics_ns, dicawics;
-   logic        wr_dicawics_r, wr_dicad0_r, wr_dicad1_r, wr_dicad0h_r;
-   logic [31:0] dicad0_ns, dicad0, dicad0h_ns, dicad0h;
-
-   logic [6:0]  dicad1_ns, dicad1_raw;
-   logic [31:0] dicad1;
-   logic        ebreak_r, ebreak_to_debug_mode_r, ecall_r, illegal_r, mret_r, inst_acc_r, fence_i_r,
-                ic_perr_r, iccm_sbecc_r, ebreak_to_debug_mode_r_d1, kill_ebreak_count_r, inst_acc_second_r;
-   logic ce_int_ready, ext_int_ready, timer_int_ready, soft_int_ready, int_timer0_int_ready, int_timer1_int_ready, mhwakeup_ready,
-         take_ext_int, take_ce_int, take_timer_int, take_soft_int, take_int_timer0_int, take_int_timer1_int, take_nmi, take_nmi_r_d1, int_timer0_int_possible, int_timer1_int_possible;
-   logic i0_exception_valid_r, interrupt_valid_r, i0_exception_valid_r_d1, interrupt_valid_r_d1, exc_or_int_valid_r, exc_or_int_valid_r_d1, mdccme_ce_req, miccme_ce_req, mice_ce_req;
-   logic synchronous_flush_r;
-   logic [4:0]  exc_cause_r, exc_cause_wb;
-   logic        mcyclel_cout, mcyclel_cout_f, mcyclela_cout;
-   logic [31:0] mcyclel_inc;
-   logic [31:0] mcycleh_inc;
-
-   logic        minstretl_cout, minstretl_cout_f, minstret_enable, minstretl_cout_ns, minstretl_couta;
-
-   logic [31:0] minstretl_inc, minstretl_read;
-   logic [31:0] minstreth_inc, minstreth_read;
-   logic [31:1] pc_r, pc_r_d1, npc_r, npc_r_d1;
-   logic valid_csr;
-   logic rfpc_i0_r;
-   logic lsu_i0_rfnpc_r;
-   logic dec_tlu_br0_error_r, dec_tlu_br0_start_error_r, dec_tlu_br0_v_r;
-   logic lsu_i0_exc_r, lsu_i0_exc_r_raw, lsu_exc_ma_r, lsu_exc_acc_r, lsu_exc_st_r,
-         lsu_exc_valid_r, lsu_exc_valid_r_raw, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1, block_interrupts;
-   logic i0_trigger_eval_r;
-
-   logic request_debug_mode_r, request_debug_mode_r_d1, request_debug_mode_done, request_debug_mode_done_f;
-   logic take_halt, halt_taken, halt_taken_f, internal_dbg_halt_mode, dbg_tlu_halted_f, take_reset,
-         dbg_tlu_halted, core_empty, lsu_idle_any_f, ifu_miss_state_idle_f, resume_ack_ns,
-         debug_halt_req_f, debug_resume_req_f_raw, debug_resume_req_f, enter_debug_halt_req, dcsr_single_step_done, dcsr_single_step_done_f,
-         debug_halt_req_d1, debug_halt_req_ns, dcsr_single_step_running, dcsr_single_step_running_f, internal_dbg_halt_timers;
-
-   logic [3:0] i0_trigger_r, trigger_action, trigger_enabled,
-               i0_trigger_chain_masked_r;
-   logic       i0_trigger_hit_r, i0_trigger_hit_raw_r, i0_trigger_action_r,
-               trigger_hit_r_d1,
-               mepc_trigger_hit_sel_pc_r;
-   logic [3:0] update_hit_bit_r, i0_iside_trigger_has_pri_r,i0trigger_qual_r, i0_lsu_trigger_has_pri_r;
-   logic cpu_halt_status, cpu_halt_ack, cpu_run_ack, ext_halt_pulse, i_cpu_halt_req_d1, i_cpu_run_req_d1;
-
-   logic inst_acc_r_raw, trigger_hit_dmode_r, trigger_hit_dmode_r_d1;
-   logic [9:0] mcgc, mcgc_ns, mcgc_int;
-   logic [18:0] mfdc;
-   logic i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual, pmu_fw_halt_req_ns, pmu_fw_halt_req_f, int_timer_stalled,
-         fw_halt_req, enter_pmu_fw_halt_req, pmu_fw_tlu_halted, pmu_fw_tlu_halted_f, internal_pmu_fw_halt_mode,
-         internal_pmu_fw_halt_mode_f, int_timer0_int_hold, int_timer1_int_hold, int_timer0_int_hold_f, int_timer1_int_hold_f;
-   logic nmi_int_delayed, nmi_int_detected;
-   logic [3:0] trigger_execute, trigger_data, trigger_store;
-   logic dec_tlu_pmu_fw_halted;
-
-   logic mpc_run_state_ns, debug_brkpt_status_ns, mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns, dbg_halt_state_ns, dbg_run_state_ns,
-         dbg_halt_state_f, mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f, mpc_halt_state_f, mpc_halt_state_ns, mpc_run_state_f, debug_brkpt_status_f,
-         mpc_debug_halt_ack_f, mpc_debug_run_ack_f, dbg_run_state_f, mpc_debug_halt_req_sync_pulse,
-         mpc_debug_run_req_sync_pulse, debug_brkpt_valid, debug_halt_req, debug_resume_req, dec_tlu_mpc_halted_only_ns;
-   logic take_ext_int_start, ext_int_freeze, take_ext_int_start_d1, take_ext_int_start_d2,
-         take_ext_int_start_d3, ext_int_freeze_d1, csr_meicpct, ignore_ext_int_due_to_lsu_stall;
-   logic mcause_sel_nmi_store, mcause_sel_nmi_load, mcause_sel_nmi_ext, fast_int_meicpct;
-   logic [1:0] mcause_fir_error_type;
-   logic dbg_halt_req_held_ns, dbg_halt_req_held, dbg_halt_req_final;
-   logic iccm_repair_state_ns, iccm_repair_state_d1, iccm_repair_state_rfnpc;
-
-
-   // internal timer, isolated for size reasons
-   logic [31:0] dec_timer_rddata_d;
-   logic dec_timer_read_d, dec_timer_t0_pulse, dec_timer_t1_pulse;
-   logic csr_mitctl0;
-   logic csr_mitctl1;
-   logic csr_mitb0;
-   logic csr_mitb1;
-   logic csr_mitcnt0;
-   logic csr_mitcnt1;
-
-   logic nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync, mpc_debug_run_req_sync, mpc_debug_halt_req_sync_raw;
-   logic csr_wr_clk;
-   logic e4e5_clk, e4_valid, e5_valid, e4e5_valid, internal_dbg_halt_mode_f, internal_dbg_halt_mode_f2;
-   logic lsu_pmu_load_external_r, lsu_pmu_store_external_r;
-   logic dec_tlu_flush_noredir_r_d1, dec_tlu_flush_pause_r_d1;
-   logic lsu_single_ecc_error_r;
-   logic [31:0] lsu_error_pkt_addr_r;
-   logic mcyclel_cout_in;
-   logic i0_valid_no_ebreak_ecall_r;
-   logic minstret_enable_f;
-   logic sel_exu_npc_r, sel_flush_npc_r, sel_hold_npc_r;
-   logic pc0_valid_r;
-   logic [15:0] mfdc_int, mfdc_ns;
-   logic [31:0] mrac_in;
-   logic [31:27] csr_sat;
-   logic [8:6] dcsr_cause;
-   logic enter_debug_halt_req_le, dcsr_cause_upgradeable;
-   logic icache_rd_valid, icache_wr_valid, icache_rd_valid_f, icache_wr_valid_f;
-   logic [3:0]      mhpmc_inc_r, mhpmc_inc_r_d1;
-
-   logic [3:0][9:0] mhpme_vec;
-   logic            mhpmc3_wr_en0, mhpmc3_wr_en1, mhpmc3_wr_en;
-   logic            mhpmc4_wr_en0, mhpmc4_wr_en1, mhpmc4_wr_en;
-   logic            mhpmc5_wr_en0, mhpmc5_wr_en1, mhpmc5_wr_en;
-   logic            mhpmc6_wr_en0, mhpmc6_wr_en1, mhpmc6_wr_en;
-   logic            mhpmc3h_wr_en0, mhpmc3h_wr_en;
-   logic            mhpmc4h_wr_en0, mhpmc4h_wr_en;
-   logic            mhpmc5h_wr_en0, mhpmc5h_wr_en;
-   logic            mhpmc6h_wr_en0, mhpmc6h_wr_en;
-   logic [63:0]     mhpmc3_incr, mhpmc4_incr, mhpmc5_incr, mhpmc6_incr;
-   logic perfcnt_halted_d1, zero_event_r;
-   logic [3:0] perfcnt_during_sleep;
-   logic [9:0] event_r;
-
-   eb1_inst_pkt_t pmu_i0_itype_qual;
-
-   logic csr_mfdht;
-   logic csr_mfdhs;
-   logic csr_misa;
-   logic csr_mvendorid;
-   logic csr_marchid;
-   logic csr_mimpid;
-   logic csr_mhartid;
-   logic csr_mstatus;
-   logic csr_mtvec;
-   logic csr_mip;
-   logic csr_mie;
-   logic csr_mcyclel;
-   logic csr_mcycleh;
-   logic csr_minstretl;
-   logic csr_minstreth;
-   logic csr_mscratch;
-   logic csr_mepc;
-   logic csr_mcause;
-   logic csr_mscause;
-   logic csr_mtval;
-   logic csr_mrac;
-   logic csr_dmst;
-   logic csr_mdseac;
-   logic csr_meihap;
-   logic csr_meivt;
-   logic csr_meipt;
-   logic csr_meicurpl;
-   logic csr_meicidpl;
-   logic csr_dcsr;
-   logic csr_mcgc;
-   logic csr_mfdc;
-   logic csr_dpc;
-   logic csr_mtsel;
-   logic csr_mtdata1;
-   logic csr_mtdata2;
-   logic csr_mhpmc3;
-   logic csr_mhpmc4;
-   logic csr_mhpmc5;
-   logic csr_mhpmc6;
-   logic csr_mhpmc3h;
-   logic csr_mhpmc4h;
-   logic csr_mhpmc5h;
-   logic csr_mhpmc6h;
-   logic csr_mhpme3;
-   logic csr_mhpme4;
-   logic csr_mhpme5;
-   logic csr_mhpme6;
-   logic csr_mcountinhibit;
-   logic csr_mpmc;
-   logic csr_micect;
-   logic csr_miccmect;
-   logic csr_mdccmect;
-   logic csr_dicawics;
-   logic csr_dicad0h;
-   logic csr_dicad0;
-   logic csr_dicad1;
-   logic csr_dicago;
-   logic presync;
-   logic postsync;
-   logic legal;
-   logic dec_csr_wen_r_mod;
-
-   logic flush_clkvalid;
-   logic sel_fir_addr;
-   logic wr_mie_r;
-   logic mtval_capture_pc_r;
-   logic mtval_capture_pc_plus2_r;
-   logic mtval_capture_inst_r;
-   logic mtval_capture_lsu_r;
-   logic mtval_clear_r;
-   logic wr_mcgc_r;
-   logic wr_mfdc_r;
-   logic wr_mdeau_r;
-   logic trigger_hit_for_dscr_cause_r_d1;
-   logic conditionally_illegal;
-
-   logic  [3:0] ifu_mscause ;
-   logic        ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f;
-
-   eb1_dec_timer_ctl  #(.pt(pt)) int_timers(.*);
-   // end of internal timers
-
-   assign clk_override = dec_tlu_dec_clk_override;
-
-   // Async inputs to the core have to be sync'd to the core clock.
-   rvsyncss #(7) syncro_ff(.*,
-                           .clk(free_clk),
-                           .din ({nmi_int,      timer_int,      soft_int,      i_cpu_halt_req,      i_cpu_run_req,      mpc_debug_halt_req,          mpc_debug_run_req}),
-                           .dout({nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync_raw, mpc_debug_run_req_sync}));
-
-   // for CSRs that have inpipe writes only
-
-   rvoclkhdr csrwr_r_cgc   ( .en(dec_csr_wen_r_mod | clk_override), .l1clk(csr_wr_clk), .* );
-
-   assign e4_valid = dec_tlu_i0_valid_r;
-   assign e4e5_valid = e4_valid | e5_valid;
-   assign flush_clkvalid = internal_dbg_halt_mode_f | i_cpu_run_req_d1 | interrupt_valid_r | interrupt_valid_r_d1 |
-                           reset_delayed | pause_expired_r | pause_expired_wb | ic_perr_r | iccm_sbecc_r |
-                           clk_override;
-   rvoclkhdr e4e5_cgc     ( .en(e4e5_valid | clk_override), .l1clk(e4e5_clk), .* );
-   rvoclkhdr e4e5_int_cgc ( .en(e4e5_valid | flush_clkvalid), .l1clk(e4e5_int_clk), .* );
-
-   rvdffie #(11)  freeff (.*, .clk(free_l2clk),
-                          .din ({ifu_ic_error_start, ifu_iccm_rd_ecc_single_err, iccm_repair_state_ns, e4_valid, internal_dbg_halt_mode,
-                                 lsu_pmu_load_external_m, lsu_pmu_store_external_m, tlu_flush_lower_r,  tlu_i0_kill_writeb_r,
-                                 internal_dbg_halt_mode_f, force_halt}),
-                          .dout({ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f, iccm_repair_state_d1, e5_valid, internal_dbg_halt_mode_f,
-                                 lsu_pmu_load_external_r, lsu_pmu_store_external_r, tlu_flush_lower_r_d1, dec_tlu_i0_kill_writeb_wb,
-                                 internal_dbg_halt_mode_f2, dec_tlu_force_halt}));
-
-   assign dec_tlu_i0_kill_writeb_r = tlu_i0_kill_writeb_r;
-
-   assign nmi_int_detected = (nmi_int_sync & ~nmi_int_delayed) | nmi_lsu_detected | (nmi_int_detected_f & ~take_nmi_r_d1) | nmi_fir_type;
-   // if the first nmi is a lsu type, note it. If there's already an nmi pending, ignore. Simultaneous with FIR, drop.
-   assign nmi_lsu_load_type  = (nmi_lsu_detected & lsu_imprecise_error_load_any &  ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_load_type_f  & ~take_nmi_r_d1);
-   assign nmi_lsu_store_type = (nmi_lsu_detected & lsu_imprecise_error_store_any & ~(nmi_int_detected_f & ~take_nmi_r_d1)) |
-                               (nmi_lsu_store_type_f & ~take_nmi_r_d1);
-
-   assign nmi_fir_type = ~nmi_int_detected_f & take_ext_int_start_d3 & |lsu_fir_error[1:0];
-
-   // Filter subsequent bus errors after the first, until the lock on MDSEAC is cleared
-   assign nmi_lsu_detected = ~mdseac_locked_f & (lsu_imprecise_error_load_any | lsu_imprecise_error_store_any) & ~nmi_fir_type;
-
-
-localparam MSTATUS_MIE   = 0;
-localparam MIP_MCEIP     = 5;
-localparam MIP_MITIP0    = 4;
-localparam MIP_MITIP1    = 3;
-localparam MIP_MEIP      = 2;
-localparam MIP_MTIP      = 1;
-localparam MIP_MSIP      = 0;
-
-localparam MIE_MCEIE     = 5;
-localparam MIE_MITIE0    = 4;
-localparam MIE_MITIE1    = 3;
-localparam MIE_MEIE      = 2;
-localparam MIE_MTIE      = 1;
-localparam MIE_MSIE      = 0;
-
-localparam DCSR_EBREAKM  = 15;
-localparam DCSR_STEPIE   = 11;
-localparam DCSR_STOPC    = 10;
-localparam DCSR_STEP     = 2;
-
-
-   assign reset_delayed = reset_detect ^ reset_detected;
-
-   // ----------------------------------------------------------------------
-   // MPC halt
-   // - can interact with debugger halt and v-v
-
-   // fast ints in progress have priority
-   assign mpc_debug_halt_req_sync = mpc_debug_halt_req_sync_raw & ~ext_int_freeze_d1;
-
-    rvdffie #(16)  mpvhalt_ff (.*, .clk(free_l2clk),
-                                 .din({1'b1, reset_detect,
-                                       nmi_int_sync, nmi_int_detected, nmi_lsu_load_type, nmi_lsu_store_type,
-                                       mpc_debug_halt_req_sync, mpc_debug_run_req_sync,
-                                       mpc_halt_state_ns, mpc_run_state_ns, debug_brkpt_status_ns,
-                                       mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns,
-                                       dbg_halt_state_ns, dbg_run_state_ns,
-                                       dec_tlu_mpc_halted_only_ns}),
-                                .dout({reset_detect, reset_detected,
-                                       nmi_int_delayed, nmi_int_detected_f, nmi_lsu_load_type_f, nmi_lsu_store_type_f,
-                                       mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f,
-                                       mpc_halt_state_f, mpc_run_state_f, debug_brkpt_status_f,
-                                       mpc_debug_halt_ack_f, mpc_debug_run_ack_f,
-                                       dbg_halt_state_f, dbg_run_state_f,
-                                       dec_tlu_mpc_halted_only}));
-
-   // turn level sensitive requests into pulses
-   assign mpc_debug_halt_req_sync_pulse = mpc_debug_halt_req_sync & ~mpc_debug_halt_req_sync_f;
-   assign mpc_debug_run_req_sync_pulse = mpc_debug_run_req_sync & ~mpc_debug_run_req_sync_f;
-
-   // states
-   assign mpc_halt_state_ns = (mpc_halt_state_f | mpc_debug_halt_req_sync_pulse | (reset_delayed & ~mpc_reset_run_req)) & ~mpc_debug_run_req_sync;
-   assign mpc_run_state_ns = (mpc_run_state_f | (mpc_debug_run_req_sync_pulse & ~mpc_debug_run_ack_f)) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // note, MPC halt can allow the jtag debugger to just start sending commands. When that happens, set the interal debugger halt state to prevent
-   // MPC run from starting the core.
-   assign dbg_halt_state_ns = (dbg_halt_state_f | (dbg_halt_req_final | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1)) & ~dbg_resume_req;
-   assign dbg_run_state_ns = (dbg_run_state_f | dbg_resume_req) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-
-   // tell dbg we are only MPC halted
-   assign dec_tlu_mpc_halted_only_ns = ~dbg_halt_state_f & mpc_halt_state_f;
-
-   // this asserts from detection of bkpt until after we leave debug mode
-   assign debug_brkpt_valid = ebreak_to_debug_mode_r_d1 | trigger_hit_dmode_r_d1;
-   assign debug_brkpt_status_ns = (debug_brkpt_valid | debug_brkpt_status_f) & (internal_dbg_halt_mode & ~dcsr_single_step_running_f);
-
-   // acks back to interface
-   assign mpc_debug_halt_ack_ns = mpc_halt_state_f & internal_dbg_halt_mode_f & mpc_debug_halt_req_sync & core_empty;
-   assign mpc_debug_run_ack_ns = (mpc_debug_run_req_sync & ~dbg_halt_state_ns & ~mpc_debug_halt_req_sync) | (mpc_debug_run_ack_f & mpc_debug_run_req_sync) ;
-
-   // Pins
-   assign mpc_debug_halt_ack = mpc_debug_halt_ack_f;
-   assign mpc_debug_run_ack = mpc_debug_run_ack_f;
-   assign debug_brkpt_status = debug_brkpt_status_f;
-
-   // DBG halt req is a pulse, fast ext int in progress has priority
-   assign dbg_halt_req_held_ns = (dbg_halt_req | dbg_halt_req_held) & ext_int_freeze_d1;
-   assign dbg_halt_req_final = (dbg_halt_req | dbg_halt_req_held) & ~ext_int_freeze_d1;
-
-   // combine MPC and DBG halt requests
-   assign debug_halt_req = (dbg_halt_req_final | mpc_debug_halt_req_sync | (reset_delayed & ~mpc_reset_run_req)) & ~internal_dbg_halt_mode_f & ~ext_int_freeze_d1;
-
-   assign debug_resume_req = ~debug_resume_req_f &  // squash back to back resumes
-                             ((mpc_run_state_ns & ~dbg_halt_state_ns) |  // MPC run req
-                              (dbg_run_state_ns & ~mpc_halt_state_ns)); // dbg request is a pulse
-
-
-   // HALT
-   // dbg/pmu/fw requests halt, service as soon as lsu is not blocking interrupts
-   assign take_halt = (debug_halt_req_f | pmu_fw_halt_req_f) & ~synchronous_flush_r & ~mret_r & ~halt_taken_f & ~dec_tlu_flush_noredir_r_d1 & ~take_reset;
-
-   // hold after we take a halt, so we don't keep taking halts
-   assign halt_taken = (dec_tlu_flush_noredir_r_d1 & ~dec_tlu_flush_pause_r_d1 & ~take_ext_int_start_d1) | (halt_taken_f & ~dbg_tlu_halted_f & ~pmu_fw_tlu_halted_f & ~interrupt_valid_r_d1);
-
-   // After doing halt flush (RFNPC) wait until core is idle before asserting a particular halt mode
-   // It takes a cycle for mb_empty to assert after a fetch, take_halt covers that cycle
-   assign core_empty = force_halt |
-                       (lsu_idle_any & lsu_idle_any_f & ifu_miss_state_idle & ifu_miss_state_idle_f & ~debug_halt_req & ~debug_halt_req_d1 & ~dec_div_active);
-
-   assign dec_tlu_core_empty = core_empty;
-
-//--------------------------------------------------------------------------------
-// Debug start
-//
-
-   assign enter_debug_halt_req = (~internal_dbg_halt_mode_f & debug_halt_req) | dcsr_single_step_done_f | trigger_hit_dmode_r_d1 | ebreak_to_debug_mode_r_d1;
-
-   // dbg halt state active from request until non-step resume
-   assign internal_dbg_halt_mode = debug_halt_req_ns | (internal_dbg_halt_mode_f & ~(debug_resume_req_f & ~dcsr[DCSR_STEP]));
-   // dbg halt can access csrs as long as we are not stepping
-   assign allow_dbg_halt_csr_write = internal_dbg_halt_mode_f & ~dcsr_single_step_running_f;
-
-
-   // hold debug_halt_req_ns high until we enter debug halt
-   assign debug_halt_req_ns = enter_debug_halt_req | (debug_halt_req_f & ~dbg_tlu_halted);
-
-   assign dbg_tlu_halted = (debug_halt_req_f & core_empty & halt_taken) | (dbg_tlu_halted_f & ~debug_resume_req_f);
-
-   assign resume_ack_ns = (debug_resume_req_f & dbg_tlu_halted_f & dbg_run_state_ns);
-
-   assign dcsr_single_step_done = dec_tlu_i0_valid_r & ~dec_tlu_dbg_halted & dcsr[DCSR_STEP] & ~rfpc_i0_r;
-
-   assign dcsr_single_step_running = (debug_resume_req_f & dcsr[DCSR_STEP]) | (dcsr_single_step_running_f & ~dcsr_single_step_done_f);
-
-   assign dbg_cmd_done_ns = dec_tlu_i0_valid_r & dec_tlu_dbg_halted;
-
-   // used to hold off commits after an in-pipe debug mode request (triggers, DCSR)
-   assign request_debug_mode_r = (trigger_hit_dmode_r | ebreak_to_debug_mode_r) | (request_debug_mode_r_d1 & ~dec_tlu_flush_lower_wb);
-
-   assign request_debug_mode_done = (request_debug_mode_r_d1 | request_debug_mode_done_f) & ~dbg_tlu_halted_f;
-
-    rvdffie #(18)  halt_ff (.*, .clk(free_l2clk),
-                          .din({dec_tlu_flush_noredir_r, halt_taken, lsu_idle_any, ifu_miss_state_idle, dbg_tlu_halted,
-                                resume_ack_ns, debug_halt_req_ns, debug_resume_req, trigger_hit_dmode_r,
-                                dcsr_single_step_done, debug_halt_req, dec_tlu_wr_pause_r, dec_pause_state,
-                                request_debug_mode_r, request_debug_mode_done, dcsr_single_step_running, dec_tlu_flush_pause_r,
-                                dbg_halt_req_held_ns}),
-                          .dout({dec_tlu_flush_noredir_r_d1, halt_taken_f, lsu_idle_any_f, ifu_miss_state_idle_f, dbg_tlu_halted_f,
-                                 dec_tlu_resume_ack , debug_halt_req_f, debug_resume_req_f_raw, trigger_hit_dmode_r_d1,
-                                 dcsr_single_step_done_f, debug_halt_req_d1, dec_tlu_wr_pause_r_d1, dec_pause_state_f,
-                                 request_debug_mode_r_d1, request_debug_mode_done_f, dcsr_single_step_running_f, dec_tlu_flush_pause_r_d1,
-                                 dbg_halt_req_held}));
-
-   // MPC run collides with DBG halt, fix it here
-   assign debug_resume_req_f = debug_resume_req_f_raw & ~dbg_halt_req;
-
-   assign dec_tlu_debug_stall = debug_halt_req_f;
-   assign dec_tlu_dbg_halted = dbg_tlu_halted_f;
-   assign dec_tlu_debug_mode = internal_dbg_halt_mode_f;
-   assign dec_tlu_pmu_fw_halted = pmu_fw_tlu_halted_f;
-
-   // kill fetch redirection on flush if going to halt, or if there's a fence during db-halt
-   assign dec_tlu_flush_noredir_r = take_halt | (fence_i_r & internal_dbg_halt_mode) | dec_tlu_flush_pause_r | (i0_trigger_hit_r & trigger_hit_dmode_r) | take_ext_int_start;
-
-   assign dec_tlu_flush_extint = take_ext_int_start;
-
-   // 1 cycle after writing the PAUSE counter, flush with noredir to idle F1-D.
-   assign dec_tlu_flush_pause_r = dec_tlu_wr_pause_r_d1 & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // detect end of pause counter and rfpc
-   assign pause_expired_r = ~dec_pause_state & dec_pause_state_f & ~(ext_int_ready | ce_int_ready | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | nmi_int_detected | ext_int_freeze_d1) & ~interrupt_valid_r_d1 & ~debug_halt_req_f & ~pmu_fw_halt_req_f & ~halt_taken_f;
-
-   assign dec_tlu_flush_leak_one_r = dec_tlu_flush_lower_r  & dcsr[DCSR_STEP] & (dec_tlu_resume_ack | dcsr_single_step_running) & ~dec_tlu_flush_noredir_r;
-   assign dec_tlu_flush_err_r = dec_tlu_flush_lower_r & (ic_perr_r | iccm_sbecc_r);
-
-   // If DM attempts to access an illegal CSR, send cmd_fail back
-   assign dec_dbg_cmd_done = dbg_cmd_done_ns;
-   assign dec_dbg_cmd_fail = illegal_r & dec_dbg_cmd_done;
-
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-   // Triggers
-   //
-localparam MTDATA1_DMODE             = 9;
-localparam MTDATA1_SEL   = 7;
-localparam MTDATA1_ACTION            = 6;
-localparam MTDATA1_CHAIN             = 5;
-localparam MTDATA1_MATCH             = 4;
-localparam MTDATA1_M_ENABLED         = 3;
-localparam MTDATA1_EXE   = 2;
-localparam MTDATA1_ST    = 1;
-localparam MTDATA1_LD    = 0;
-
-   // Prioritize trigger hits with other exceptions.
-   //
-   // Trigger should have highest priority except:
-   // - trigger is an execute-data and there is an inst_access exception (lsu triggers won't fire, inst. is nop'd by decode)
-   // - trigger is a store-data and there is a lsu_acc_exc or lsu_ma_exc.
-   assign trigger_execute[3:0] = {mtdata1_t3[MTDATA1_EXE], mtdata1_t2[MTDATA1_EXE], mtdata1_t1[MTDATA1_EXE], mtdata1_t0[MTDATA1_EXE]};
-   assign trigger_data[3:0] = {mtdata1_t3[MTDATA1_SEL], mtdata1_t2[MTDATA1_SEL], mtdata1_t1[MTDATA1_SEL], mtdata1_t0[MTDATA1_SEL]};
-   assign trigger_store[3:0] = {mtdata1_t3[MTDATA1_ST], mtdata1_t2[MTDATA1_ST], mtdata1_t1[MTDATA1_ST], mtdata1_t0[MTDATA1_ST]};
-
-   // MSTATUS[MIE] needs to be on to take triggers unless the action is trigger to debug mode.
-   assign trigger_enabled[3:0] = {(mtdata1_t3[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t3[MTDATA1_M_ENABLED],
-                                  (mtdata1_t2[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t2[MTDATA1_M_ENABLED],
-                                  (mtdata1_t1[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t1[MTDATA1_M_ENABLED],
-                                  (mtdata1_t0[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t0[MTDATA1_M_ENABLED]};
-
-   // iside exceptions are always in i0
-   assign i0_iside_trigger_has_pri_r[3:0]  = ~( (trigger_execute[3:0] & trigger_data[3:0] & {4{inst_acc_r_raw}}) | // exe-data with inst_acc
-                                                ({4{exu_i0_br_error_r | exu_i0_br_start_error_r}}));               // branch error in i0
-
-   // lsu excs have to line up with their respective triggers since the lsu op can be i0
-   assign i0_lsu_trigger_has_pri_r[3:0] = ~(trigger_store[3:0] & trigger_data[3:0] & {4{lsu_i0_exc_r_raw}});
-
-   // trigger hits have to be eval'd to cancel side effect lsu ops even though the pipe is already frozen
-   assign i0_trigger_eval_r = dec_tlu_i0_valid_r;
-
-   assign i0trigger_qual_r[3:0] = {4{i0_trigger_eval_r}} & dec_tlu_packet_r.i0trigger[3:0] & i0_iside_trigger_has_pri_r[3:0] & i0_lsu_trigger_has_pri_r[3:0] & trigger_enabled[3:0];
-
-   // Qual trigger hits
-   assign i0_trigger_r[3:0] = ~{4{dec_tlu_flush_lower_wb | dec_tlu_dbg_halted}} & i0trigger_qual_r[3:0];
-
-   // chaining can mask raw trigger info
-   assign i0_trigger_chain_masked_r[3:0]  = {i0_trigger_r[3] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[2]),
-                                             i0_trigger_r[2] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[3]),
-                                             i0_trigger_r[1] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[0]),
-                                             i0_trigger_r[0] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[1])};
-
-   // This is the highest priority by this point.
-   assign i0_trigger_hit_raw_r = |i0_trigger_chain_masked_r[3:0];
-
-   assign i0_trigger_hit_r = i0_trigger_hit_raw_r;
-
-   // Actions include breakpoint, or dmode. Dmode is only possible if the DMODE bit is set.
-   // Otherwise, take a breakpoint.
-   assign trigger_action[3:0] = {mtdata1_t3[MTDATA1_ACTION] & mtdata1_t3[MTDATA1_DMODE],
-                                 mtdata1_t2[MTDATA1_ACTION] & mtdata1_t2[MTDATA1_DMODE] & ~mtdata1_t2[MTDATA1_CHAIN],
-                                 mtdata1_t1[MTDATA1_ACTION] & mtdata1_t1[MTDATA1_DMODE],
-                                 mtdata1_t0[MTDATA1_ACTION] & mtdata1_t0[MTDATA1_DMODE] & ~mtdata1_t0[MTDATA1_CHAIN]};
-
-   // this is needed to set the HIT bit in the triggers
-   assign update_hit_bit_r[3:0] = ({4{|i0_trigger_r[3:0] & ~rfpc_i0_r}} & {i0_trigger_chain_masked_r[3], i0_trigger_r[2], i0_trigger_chain_masked_r[1], i0_trigger_r[0]});
-
-   // action, 1 means dmode. Simultaneous triggers with at least 1 set for dmode force entire action to dmode.
-   assign i0_trigger_action_r = |(i0_trigger_chain_masked_r[3:0] & trigger_action[3:0]);
-
-   assign trigger_hit_dmode_r = (i0_trigger_hit_r & i0_trigger_action_r);
-
-   assign mepc_trigger_hit_sel_pc_r = i0_trigger_hit_r & ~trigger_hit_dmode_r;
-
-
-//
-// Debug end
-//--------------------------------------------------------------------------------
-
-   //----------------------------------------------------------------------
-   //
-   // Commit
-   //
-   //----------------------------------------------------------------------
-
-
-
-   //--------------------------------------------------------------------------------
-   // External halt (not debug halt)
-   // - Fully interlocked handshake
-   // i_cpu_halt_req  ____|--------------|_______________
-   // core_empty      ---------------|___________
-   // o_cpu_halt_ack  _________________|----|__________
-   // o_cpu_halt_status _______________|---------------------|_________
-   // i_cpu_run_req                              ______|----------|____
-   // o_cpu_run_ack                              ____________|------|________
-   //
-
-
-   // debug mode has priority, ignore PMU/FW halt/run while in debug mode
-   assign i_cpu_halt_req_sync_qual = i_cpu_halt_req_sync & ~dec_tlu_debug_mode & ~ext_int_freeze_d1;
-   assign i_cpu_run_req_sync_qual = i_cpu_run_req_sync & ~dec_tlu_debug_mode & pmu_fw_tlu_halted_f & ~ext_int_freeze_d1;
-
-   rvdffie #(10) exthaltff (.*, .clk(free_l2clk), .din({i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual,   cpu_halt_status,
-                                                   cpu_halt_ack,   cpu_run_ack, internal_pmu_fw_halt_mode,
-                                                   pmu_fw_halt_req_ns, pmu_fw_tlu_halted,
-                                                   int_timer0_int_hold, int_timer1_int_hold}),
-                                            .dout({i_cpu_halt_req_d1,        i_cpu_run_req_d1_raw,      o_cpu_halt_status,
-                                                   o_cpu_halt_ack, o_cpu_run_ack, internal_pmu_fw_halt_mode_f,
-                                                   pmu_fw_halt_req_f, pmu_fw_tlu_halted_f,
-                                                   int_timer0_int_hold_f, int_timer1_int_hold_f}));
-
-   // only happens if we aren't in dgb_halt
-   assign ext_halt_pulse = i_cpu_halt_req_sync_qual & ~i_cpu_halt_req_d1;
-
-   assign enter_pmu_fw_halt_req =  ext_halt_pulse | fw_halt_req;
-
-   assign pmu_fw_halt_req_ns = (enter_pmu_fw_halt_req | (pmu_fw_halt_req_f & ~pmu_fw_tlu_halted)) & ~debug_halt_req_f;
-
-   assign internal_pmu_fw_halt_mode = pmu_fw_halt_req_ns | (internal_pmu_fw_halt_mode_f & ~i_cpu_run_req_d1 & ~debug_halt_req_f);
-
-   // debug halt has priority
-   assign pmu_fw_tlu_halted = ((pmu_fw_halt_req_f & core_empty & halt_taken & ~enter_debug_halt_req) | (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1)) & ~debug_halt_req_f;
-
-   assign cpu_halt_ack = (i_cpu_halt_req_d1 & pmu_fw_tlu_halted_f) | (o_cpu_halt_ack & i_cpu_halt_req_sync);
-   assign cpu_halt_status = (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1) | (o_cpu_halt_status & ~i_cpu_run_req_d1 & ~internal_dbg_halt_mode_f);
-   assign cpu_run_ack = (~pmu_fw_tlu_halted_f & i_cpu_run_req_sync) | (o_cpu_halt_status & i_cpu_run_req_d1_raw) | (o_cpu_run_ack & i_cpu_run_req_sync);
-   assign debug_mode_status = internal_dbg_halt_mode_f;
-   assign o_debug_mode_status = debug_mode_status;
-
-
-   // high priority interrupts can wakeup from external halt, so can unmasked timer interrupts
-   assign i_cpu_run_req_d1 = i_cpu_run_req_d1_raw | ((nmi_int_detected | timer_int_ready | soft_int_ready | int_timer0_int_hold_f | int_timer1_int_hold_f | (mhwakeup & mhwakeup_ready)) & o_cpu_halt_status & ~i_cpu_halt_req_d1);
-
-   //--------------------------------------------------------------------------------
-   //--------------------------------------------------------------------------------
-
-   assign lsu_single_ecc_error_r = lsu_single_ecc_error_incr;
-
-   assign lsu_error_pkt_addr_r[31:0] = lsu_error_pkt_r.addr[31:0];
-
-
-   assign lsu_exc_valid_r_raw = lsu_error_pkt_r.exc_valid & ~dec_tlu_flush_lower_wb;
-
-   assign lsu_i0_exc_r_raw =  lsu_error_pkt_r.exc_valid;
-
-   assign lsu_i0_exc_r = lsu_i0_exc_r_raw & lsu_exc_valid_r_raw & ~i0_trigger_hit_r & ~rfpc_i0_r;
-
-   assign lsu_exc_valid_r = lsu_i0_exc_r;
-
-   assign lsu_exc_ma_r  =  lsu_i0_exc_r & ~lsu_error_pkt_r.exc_type;
-   assign lsu_exc_acc_r =  lsu_i0_exc_r & lsu_error_pkt_r.exc_type;
-   assign lsu_exc_st_r  =  lsu_i0_exc_r & lsu_error_pkt_r.inst_type;
-
-   // Single bit ECC errors on loads are RFNPC corrected, with the corrected data written to the GPR.
-   // LSU turns the load into a store and patches the data in the DCCM
-   assign lsu_i0_rfnpc_r = dec_tlu_i0_valid_r & ~i0_trigger_hit_r &
-                           (~lsu_error_pkt_r.inst_type & lsu_error_pkt_r.single_ecc_error);
-
-   //  Final commit valids
-   assign tlu_i0_commit_cmt = dec_tlu_i0_valid_r &
-                              ~rfpc_i0_r &
-                              ~lsu_i0_exc_r &
-                              ~inst_acc_r &
-                              ~dec_tlu_dbg_halted &
-                              ~request_debug_mode_r_d1 &
-                              ~i0_trigger_hit_r;
-
-   // unified place to manage the killing of arch state writebacks
-   assign tlu_i0_kill_writeb_r = rfpc_i0_r | lsu_i0_exc_r | inst_acc_r | (illegal_r & dec_tlu_dbg_halted) | i0_trigger_hit_r;
-   assign dec_tlu_i0_commit_cmt = tlu_i0_commit_cmt;
-
-
-   // refetch PC, microarch flush
-   // ic errors only in pipe0
-   assign rfpc_i0_r =  ((dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (exu_i0_br_error_r | exu_i0_br_start_error_r)) | // inst commit with rfpc
-                        ((ic_perr_r | iccm_sbecc_r) & ~ext_int_freeze_d1)) & // ic/iccm without inst commit
-                       ~i0_trigger_hit_r & // unless there's a trigger. Err signal to ic/iccm will assert anyway to clear the error.
-                       ~lsu_i0_rfnpc_r;
-
-   // From the indication of a iccm single bit error until the first commit or flush, maintain a repair state. In the repair state, rfnpc i0 commits.
-   assign iccm_repair_state_ns = iccm_sbecc_r | (iccm_repair_state_d1 & ~dec_tlu_flush_lower_r);
-
-
-   localparam MCPC          = 12'h7c2;
-
-   // this is a flush of last resort, meaning only assert it if there is no other flush happening.
-   assign iccm_repair_state_rfnpc = tlu_i0_commit_cmt & iccm_repair_state_d1 &
-                                    ~(ebreak_r | ecall_r | mret_r | take_reset | illegal_r | (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC)));
-
-if(pt.BTB_ENABLE==1) begin
-   // go ahead and repair the branch error on other flushes, doesn't have to be the rfpc flush
-   assign dec_tlu_br0_error_r = exu_i0_br_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_start_error_r = exu_i0_br_start_error_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1;
-   assign dec_tlu_br0_v_r = exu_i0_br_valid_r & dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1 & (~exu_i0_br_mp_r | ~exu_pmu_i0_br_ataken);
-
-
-   assign dec_tlu_br0_r_pkt.hist[1:0] = exu_i0_br_hist_r[1:0];
-   assign dec_tlu_br0_r_pkt.br_error = dec_tlu_br0_error_r;
-   assign dec_tlu_br0_r_pkt.br_start_error = dec_tlu_br0_start_error_r;
-   assign dec_tlu_br0_r_pkt.valid = dec_tlu_br0_v_r;
-   assign dec_tlu_br0_r_pkt.way = exu_i0_br_way_r;
-   assign dec_tlu_br0_r_pkt.middle = exu_i0_br_middle_r;
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign dec_tlu_br0_error_r = '0;
-   assign dec_tlu_br0_start_error_r = '0;
-   assign dec_tlu_br0_v_r = '0;
-   assign dec_tlu_br0_r_pkt  = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // only expect these in pipe 0
-   assign       ebreak_r     =  (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-   assign       ecall_r      =  (dec_tlu_packet_r.pmu_i0_itype == ECALL)   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       illegal_r    =  ~dec_tlu_packet_r.legal   & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign       mret_r       =  (dec_tlu_packet_r.pmu_i0_itype == MRET)    & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   // fence_i includes debug only fence_i's
-   assign       fence_i_r    =  (dec_tlu_packet_r.fence_i & dec_tlu_i0_valid_r & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-   assign       ic_perr_r    =  ifu_ic_error_start_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       iccm_sbecc_r =  ifu_iccm_rd_ecc_single_err_f & ~ext_int_freeze_d1 & (~internal_dbg_halt_mode_f | dcsr_single_step_running) & ~internal_pmu_fw_halt_mode_f;
-   assign       inst_acc_r_raw  =  dec_tlu_packet_r.icaf & dec_tlu_i0_valid_r;
-   assign       inst_acc_r = inst_acc_r_raw & ~rfpc_i0_r & ~i0_trigger_hit_r;
-   assign       inst_acc_second_r = dec_tlu_packet_r.icaf_second;
-
-   assign       ebreak_to_debug_mode_r = (dec_tlu_packet_r.pmu_i0_itype == EBREAK)  & dec_tlu_i0_valid_r & ~i0_trigger_hit_r & dcsr[DCSR_EBREAKM] & ~rfpc_i0_r;
-
-   rvdff #(1)  exctype_wb_ff (.*, .clk(e4e5_clk),
-                                .din (ebreak_to_debug_mode_r   ),
-                                .dout(ebreak_to_debug_mode_r_d1));
-
-   assign dec_tlu_fence_i_r = fence_i_r;
-   //
-   // Exceptions
-   //
-   // - MEPC <- PC
-   // - PC <- MTVEC, assert flush_lower
-   // - MCAUSE <- cause
-   // - MSCAUSE <- secondary cause
-   // - MTVAL <-
-   // - MPIE <- MIE
-   // - MIE <- 0
-   //
-   assign i0_exception_valid_r = (ebreak_r | ecall_r | illegal_r | inst_acc_r) & ~rfpc_i0_r & ~dec_tlu_dbg_halted;
-
-   // Cause:
-   //
-   // 0x2 : illegal
-   // 0x3 : breakpoint
-   // 0xb : Environment call M-mode
-
-
-   assign exc_cause_r[4:0] =  ( ({5{take_ext_int}}        & 5'h0b) |
-                                ({5{take_timer_int}}      & 5'h07) |
-                                ({5{take_soft_int}}       & 5'h03) |
-                                ({5{take_int_timer0_int}} & 5'h1d) |
-                                ({5{take_int_timer1_int}} & 5'h1c) |
-                                ({5{take_ce_int}}         & 5'h1e) |
-                                ({5{illegal_r}}           & 5'h02) |
-                                ({5{ecall_r}}             & 5'h0b) |
-                                ({5{inst_acc_r}}          & 5'h01) |
-                                ({5{ebreak_r | i0_trigger_hit_r}}   & 5'h03) |
-                                ({5{lsu_exc_ma_r & ~lsu_exc_st_r}}  & 5'h04) |
-                                ({5{lsu_exc_acc_r & ~lsu_exc_st_r}} & 5'h05) |
-                                ({5{lsu_exc_ma_r & lsu_exc_st_r}}   & 5'h06) |
-                                ({5{lsu_exc_acc_r & lsu_exc_st_r}}  & 5'h07)
-                                ) & ~{5{take_nmi}};
-
-   //
-   // Interrupts
-   //
-   // exceptions that are committed have already happened and will cause an int at E4 to wait a cycle
-   // or more if MSTATUS[MIE] is cleared.
-   //
-   // -in priority order, highest to lowest
-   // -single cycle window where a csr write to MIE/MSTATUS is at E4 when the other conditions for externals are met.
-   //  Hold off externals for a cycle to make sure we are consistent with what was just written
-   assign mhwakeup_ready =  ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE];
-   assign ext_int_ready   = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MEIP]   & mie_ns[MIE_MEIE] & ~ignore_ext_int_due_to_lsu_stall;
-   assign ce_int_ready    = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MCEIP]  & mie_ns[MIE_MCEIE];
-   assign soft_int_ready  = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MSIP]   & mie_ns[MIE_MSIE];
-   assign timer_int_ready = ~dec_csr_stall_int_ff & mstatus_mie_ns & mip[MIP_MTIP]   & mie_ns[MIE_MTIE];
-
-   // MIP for internal timers pulses for 1 clock, resets the timer counter. Mip won't hold past the various stall conditions.
-   assign int_timer0_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE0];
-   assign int_timer0_int_ready = mip[MIP_MITIP0] & int_timer0_int_possible;
-   assign int_timer1_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE1];
-   assign int_timer1_int_ready = mip[MIP_MITIP1] & int_timer1_int_possible;
-
-   // Internal timers pulse and reset. If core is PMU/FW halted, the pulse will cause an exit from halt, but won't stick around
-   // Make it sticky, also for 1 cycle stall conditions.
-   assign int_timer_stalled = dec_csr_stall_int_ff | synchronous_flush_r | exc_or_int_valid_r_d1 | mret_r;
-
-   assign int_timer0_int_hold = (int_timer0_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer0_int_possible & int_timer0_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-   assign int_timer1_int_hold = (int_timer1_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | (int_timer1_int_possible & int_timer1_int_hold_f & ~interrupt_valid_r & ~take_ext_int_start & ~internal_dbg_halt_mode_f);
-
-
-   assign internal_dbg_halt_timers = internal_dbg_halt_mode_f & ~dcsr_single_step_running;
-
-
-   assign block_interrupts = ( (internal_dbg_halt_mode & (~dcsr_single_step_running | dec_tlu_i0_valid_r)) | // No ints in db-halt unless we are single stepping
-                               internal_pmu_fw_halt_mode | i_cpu_halt_req_d1 |// No ints in PMU/FW halt. First we exit halt
-                               take_nmi | // NMI is top priority
-                               ebreak_to_debug_mode_r | // Heading to debug mode, hold off ints
-                               synchronous_flush_r | // exception flush this cycle
-                               exc_or_int_valid_r_d1 | // ext/int past cycle (need time for MIE to update)
-                               mret_r |    // mret in progress, for cases were ISR enables ints before mret
-                               ext_int_freeze_d1 // Fast interrupt in progress (optional)
-                               );
-
-
-if (pt.FAST_INTERRUPT_REDIRECT) begin
-
-
-   assign take_ext_int_start = ext_int_ready & ~block_interrupts;
-
-   assign ext_int_freeze = take_ext_int_start | take_ext_int_start_d1 | take_ext_int_start_d2 | take_ext_int_start_d3;
-   assign take_ext_int = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-   assign fast_int_meicpct = csr_meicpct & dec_csr_any_unq_d;  // MEICPCT becomes illegal if fast ints are enabled
-
-   assign ignore_ext_int_due_to_lsu_stall = lsu_fastint_stall_any;
-end
-else begin
-   assign take_ext_int_start = 1'b0;
-   assign ext_int_freeze = 1'b0;
-   assign ext_int_freeze_d1 = 1'b0;
-   assign take_ext_int_start_d1 = 1'b0;
-   assign take_ext_int_start_d2 = 1'b0;
-   assign take_ext_int_start_d3 = 1'b0;
-   assign fast_int_meicpct = 1'b0;
-   assign ignore_ext_int_due_to_lsu_stall = 1'b0;
-
-   assign take_ext_int = ext_int_ready & ~block_interrupts;
-end
-
-   assign take_ce_int  = ce_int_ready & ~ext_int_ready & ~block_interrupts;
-   assign take_soft_int = soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_timer_int = timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer0_int = (int_timer0_int_ready | int_timer0_int_hold_f) & int_timer0_int_possible & ~dec_csr_stall_int_ff &
-                                ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-   assign take_int_timer1_int = (int_timer1_int_ready | int_timer1_int_hold_f) & int_timer1_int_possible & ~dec_csr_stall_int_ff &
-                                ~(int_timer0_int_ready | int_timer0_int_hold_f) & ~timer_int_ready & ~soft_int_ready & ~ext_int_ready & ~ce_int_ready & ~block_interrupts;
-
-   assign take_reset = reset_delayed & mpc_reset_run_req;
-   assign take_nmi = nmi_int_detected & ~internal_pmu_fw_halt_mode & (~internal_dbg_halt_mode | (dcsr_single_step_running_f & dcsr[DCSR_STEPIE] & ~dec_tlu_i0_valid_r & ~dcsr_single_step_done_f)) &
-                     ~synchronous_flush_r & ~mret_r & ~take_reset & ~ebreak_to_debug_mode_r & (~ext_int_freeze_d1 | (take_ext_int_start_d3 & |lsu_fir_error[1:0]));
-
-   assign interrupt_valid_r = take_ext_int | take_timer_int | take_soft_int | take_nmi | take_ce_int | take_int_timer0_int | take_int_timer1_int;
-
-
-   // Compute interrupt path:
-   // If vectored async is set in mtvec, flush path for interrupts is MTVEC + (4 * CAUSE);
-   assign vectored_path[31:1]  = {mtvec[30:1], 1'b0} + {25'b0, exc_cause_r[4:0], 1'b0};
-   assign interrupt_path[31:1] = take_nmi ? nmi_vec[31:1] : ((mtvec[0] == 1'b1) ? vectored_path[31:1] : {mtvec[30:1], 1'b0});
-
-   assign sel_npc_r  = lsu_i0_rfnpc_r | fence_i_r | iccm_repair_state_rfnpc | (i_cpu_run_req_d1 & ~interrupt_valid_r) | (rfpc_i0_r & ~dec_tlu_i0_valid_r);
-   assign sel_npc_resume = (i_cpu_run_req_d1 & pmu_fw_tlu_halted_f) | pause_expired_r;
-
-   assign sel_fir_addr = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-
-   assign synchronous_flush_r  = i0_exception_valid_r | // exception
-                                 rfpc_i0_r | // rfpc
-                                 lsu_exc_valid_r |  // lsu exception in either pipe 0 or pipe 1
-                                 fence_i_r |  // fence, a rfnpc
-                                 lsu_i0_rfnpc_r | // lsu dccm sb ecc
-                                 iccm_repair_state_rfnpc | // Iccm sb ecc
-                                 debug_resume_req_f | // resume from debug halt, fetch the dpc
-                                 sel_npc_resume |  // resume from pmu/fw halt, or from pause and fetch the NPC
-                                 dec_tlu_wr_pause_r_d1 | // flush at start of pause
-                                 i0_trigger_hit_r; // trigger hit, ebreak or goto debug mode
-
-   assign tlu_flush_lower_r = interrupt_valid_r | mret_r | synchronous_flush_r | take_halt | take_reset | take_ext_int_start;
-
-   assign tlu_flush_path_r[31:1] = take_reset ? rst_vec[31:1] :
-
-                                    ( ({31{sel_fir_addr}} & lsu_fir_addr[31:1]) |
-                                      ({31{~take_nmi & sel_npc_r}} & npc_r[31:1]) |
-                                      ({31{~take_nmi & rfpc_i0_r & dec_tlu_i0_valid_r & ~sel_npc_r}} & dec_tlu_i0_pc_r[31:1]) |
-                                      ({31{interrupt_valid_r & ~sel_fir_addr}} & interrupt_path[31:1]) |
-                                      ({31{(i0_exception_valid_r | lsu_exc_valid_r |
-                                            (i0_trigger_hit_r & ~trigger_hit_dmode_r)) & ~interrupt_valid_r & ~sel_fir_addr}} & {mtvec[30:1],1'b0}) |
-                                      ({31{~take_nmi & mret_r}} & mepc[31:1]) |
-                                      ({31{~take_nmi & debug_resume_req_f}} & dpc[31:1]) |
-                                      ({31{~take_nmi & sel_npc_resume}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  flush_lower_ff (.*, .en(tlu_flush_lower_r),
-                                 .din({tlu_flush_path_r[31:1]}),
-                                 .dout({tlu_flush_path_r_d1[31:1]}));
-
-   assign dec_tlu_flush_lower_wb = tlu_flush_lower_r_d1;
-   assign dec_tlu_flush_lower_r = tlu_flush_lower_r;
-   assign dec_tlu_flush_path_r[31:1] = tlu_flush_path_r[31:1];
-
-
-   // this is used to capture mepc, etc.
-   assign exc_or_int_valid_r = lsu_exc_valid_r | i0_exception_valid_r | interrupt_valid_r | (i0_trigger_hit_r & ~trigger_hit_dmode_r);
-
-
-   rvdffie #(12)  excinfo_wb_ff (.*,
-                                 .din({interrupt_valid_r, i0_exception_valid_r, exc_or_int_valid_r,
-                                       exc_cause_r[4:0], tlu_i0_commit_cmt & ~illegal_r, i0_trigger_hit_r,
-                                       take_nmi, pause_expired_r }),
-                                 .dout({interrupt_valid_r_d1, i0_exception_valid_r_d1, exc_or_int_valid_r_d1,
-                                        exc_cause_wb[4:0], i0_valid_wb, trigger_hit_r_d1,
-                                        take_nmi_r_d1, pause_expired_wb}));
-
-   //----------------------------------------------------------------------
-   //
-   // CSRs
-   //
-   //----------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // MISA (RO)
-   //  [31:30] XLEN - implementation width, 2'b01 - 32 bits
-   //  [12]    M    - integer mul/div
-   //  [8]     I    - RV32I
-   //  [2]     C    - Compressed extension
-   localparam MISA          = 12'h301;
-
-   // MVENDORID, MARCHID, MIMPID, MHARTID
-   localparam MVENDORID     = 12'hf11;
-   localparam MARCHID       = 12'hf12;
-   localparam MIMPID        = 12'hf13;
-   localparam MHARTID       = 12'hf14;
-
-
-   // ----------------------------------------------------------------------
-   // MSTATUS (RW)
-   // [12:11] MPP  : Prior priv level, always 2'b11, not flopped
-   // [7]     MPIE : Int enable previous [1]
-   // [3]     MIE  : Int enable          [0]
-   localparam MSTATUS       = 12'h300;
-
-
-   //When executing a MRET instruction, supposing MPP holds the value 3, MIE
-   //is set to MPIE; the privilege mode is changed to 3; MPIE is set to 1; and MPP is set to 3
-
-   assign dec_csr_wen_r_mod = dec_csr_wen_r & ~i0_trigger_hit_r & ~rfpc_i0_r;
-   assign wr_mstatus_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSTATUS);
-
-   // set this even if we don't go to fwhalt due to debug halt. We committed the inst, so ...
-   assign set_mie_pmu_fw_halt = ~mpmc_b_ns[1] & fw_halt_req;
-
-   assign mstatus_ns[1:0] = ( ({2{~wr_mstatus_r & exc_or_int_valid_r}} & {mstatus[MSTATUS_MIE], 1'b0}) |
-                              ({2{ wr_mstatus_r & exc_or_int_valid_r}} & {dec_csr_wrdata_r[3], 1'b0}) |
-                              ({2{mret_r & ~exc_or_int_valid_r}} & {1'b1, mstatus[1]}) |
-                              ({2{set_mie_pmu_fw_halt}} & {mstatus[1], 1'b1}) |
-                              ({2{wr_mstatus_r & ~exc_or_int_valid_r}} & {dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]}) |
-                              ({2{~wr_mstatus_r & ~exc_or_int_valid_r & ~mret_r & ~set_mie_pmu_fw_halt}} & mstatus[1:0]) );
-
-   // gate MIE if we are single stepping and DCSR[STEPIE] is off
-   assign mstatus_mie_ns = mstatus[MSTATUS_MIE] & (~dcsr_single_step_running_f | dcsr[DCSR_STEPIE]);
-
-   // ----------------------------------------------------------------------
-   // MTVEC (RW)
-   // [31:2] BASE : Trap vector base address
-   // [1] - Reserved, not implemented, reads zero
-   // [0]  MODE : 0 = Direct, 1 = Asyncs are vectored to BASE + (4 * CAUSE)
-   localparam MTVEC         = 12'h305;
-
-   assign wr_mtvec_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVEC);
-   assign mtvec_ns[30:0] = {dec_csr_wrdata_r[31:2], dec_csr_wrdata_r[0]} ;
-   rvdffe #(31)  mtvec_ff (.*, .en(wr_mtvec_r), .din(mtvec_ns[30:0]), .dout(mtvec[30:0]));
-
-   // ----------------------------------------------------------------------
-   // MIP (RW)
-   //
-   // [30] MCEIP  : (RO) M-Mode Correctable Error interrupt pending
-   // [29] MITIP0 : (RO) M-Mode Internal Timer0 interrupt pending
-   // [28] MITIP1 : (RO) M-Mode Internal Timer1 interrupt pending
-   // [11] MEIP   : (RO) M-Mode external interrupt pending
-   // [7]  MTIP   : (RO) M-Mode timer interrupt pending
-   // [3]  MSIP   : (RO) M-Mode software interrupt pending
-   localparam MIP           = 12'h344;
-
-   assign ce_int = (mdccme_ce_req | miccme_ce_req | mice_ce_req);
-
-   assign mip_ns[5:0] = {ce_int, dec_timer_t0_pulse, dec_timer_t1_pulse, mexintpend, timer_int_sync, soft_int_sync};
-
-   // ----------------------------------------------------------------------
-   // MIE (RW)
-   // [30] MCEIE  : (RO) M-Mode Correctable Error interrupt enable
-   // [29] MITIE0 : (RO) M-Mode Internal Timer0 interrupt enable
-   // [28] MITIE1 : (RO) M-Mode Internal Timer1 interrupt enable
-   // [11] MEIE   : (RW) M-Mode external interrupt enable
-   // [7]  MTIE   : (RW) M-Mode timer interrupt enable
-   // [3]  MSIE   : (RW) M-Mode software interrupt enable
-   localparam MIE           = 12'h304;
-
-   assign wr_mie_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MIE);
-   assign mie_ns[5:0] = wr_mie_r ? {dec_csr_wrdata_r[30:28], dec_csr_wrdata_r[11], dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]} : mie[5:0];
-   rvdff #(6)  mie_ff (.*, .clk(csr_wr_clk), .din(mie_ns[5:0]), .dout(mie[5:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MCYCLEL (RW)
-   // [31:0] : Lower Cycle count
-
-   localparam MCYCLEL       = 12'hb00;
-
-   assign kill_ebreak_count_r = ebreak_to_debug_mode_r & dcsr[DCSR_STOPC];
-
-   assign wr_mcyclel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEL);
-
-   assign mcyclel_cout_in = ~(kill_ebreak_count_r | (dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted | mcountinhibit[0]);
-
-   // split for power
-   assign {mcyclela_cout, mcyclel_inc[7:0]}  = mcyclel[7:0] +  {7'b0, 1'b1};
-   assign {mcyclel_cout,  mcyclel_inc[31:8]} = mcyclel[31:8] + {23'b0, mcyclela_cout};
-
-   assign mcyclel_ns[31:0] = wr_mcyclel_r ? dec_csr_wrdata_r[31:0] : mcyclel_inc[31:0];
-
-   rvdffe #(24) mcyclel_bff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | (mcyclela_cout & mcyclel_cout_in)),    .din(mcyclel_ns[31:8]), .dout(mcyclel[31:8]));
-   rvdffe #(8)  mcyclel_aff      (.*, .clk(free_l2clk), .en(wr_mcyclel_r | mcyclel_cout_in),  .din(mcyclel_ns[7:0]),  .dout(mcyclel[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MCYCLEH (RW)
-   // [63:32] : Higher Cycle count
-   // Chained with mcyclel. Note: mcyclel overflow due to a mcycleh write gets ignored.
-
-   localparam MCYCLEH       = 12'hb80;
-
-   assign wr_mcycleh_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEH);
-
-   assign mcycleh_inc[31:0] = mcycleh[31:0] + {31'b0, mcyclel_cout_f};
-   assign mcycleh_ns[31:0]  = wr_mcycleh_r ? dec_csr_wrdata_r[31:0] : mcycleh_inc[31:0];
-
-   rvdffe #(32)  mcycleh_ff (.*, .clk(free_l2clk), .en(wr_mcycleh_r | mcyclel_cout_f), .din(mcycleh_ns[31:0]), .dout(mcycleh[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MINSTRETL (RW)
-   // [31:0] : Lower Instruction retired count
-   // From the spec "Some CSRs, such as the instructions retired counter, instret, may be modified as side effects
-   // of instruction execution. In these cases, if a CSR access instruction reads a CSR, it reads the
-   // value prior to the execution of the instruction. If a CSR access instruction writes a CSR, the
-   // update occurs after the execution of the instruction. In particular, a value written to instret by
-   // one instruction will be the value read by the following instruction (i.e., the increment of instret
-   // caused by the first instruction retiring happens before the write of the new value)."
-   localparam MINSTRETL     = 12'hb02;
-
-   assign i0_valid_no_ebreak_ecall_r = dec_tlu_i0_valid_r & ~(ebreak_r | ecall_r | ebreak_to_debug_mode_r | illegal_r | mcountinhibit[2]);
-
-   assign wr_minstretl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETL);
-
-   assign {minstretl_couta, minstretl_inc[7:0]} = minstretl[7:0] + {7'b0,1'b1};
-   assign {minstretl_cout, minstretl_inc[31:8]} = minstretl[31:8] + {23'b0, minstretl_couta};
-
-   assign minstret_enable = (i0_valid_no_ebreak_ecall_r & tlu_i0_commit_cmt) | wr_minstretl_r;
-
-   assign minstretl_cout_ns = minstretl_cout & ~wr_minstreth_r & i0_valid_no_ebreak_ecall_r & ~dec_tlu_dbg_halted;
-
-   assign minstretl_ns[31:0] = wr_minstretl_r ? dec_csr_wrdata_r[31:0] : minstretl_inc[31:0];
-   rvdffe #(24)  minstretl_bff (.*, .en(wr_minstretl_r | (minstretl_couta & minstret_enable)),
-                                .din(minstretl_ns[31:8]), .dout(minstretl[31:8]));
-   rvdffe #(8)   minstretl_aff (.*, .en(minstret_enable),
-                                .din(minstretl_ns[7:0]),  .dout(minstretl[7:0]));
-
-
-   assign minstretl_read[31:0] = minstretl[31:0];
-   // ----------------------------------------------------------------------
-   // MINSTRETH (RW)
-   // [63:32] : Higher Instret count
-   // Chained with minstretl. Note: minstretl overflow due to a minstreth write gets ignored.
-
-   localparam MINSTRETH     = 12'hb82;
-
-   assign wr_minstreth_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETH);
-
-   assign minstreth_inc[31:0] = minstreth[31:0] + {31'b0, minstretl_cout_f};
-   assign minstreth_ns[31:0]  = wr_minstreth_r ? dec_csr_wrdata_r[31:0] : minstreth_inc[31:0];
-   rvdffe #(32)  minstreth_ff (.*, .en((minstret_enable_f & minstretl_cout_f) | wr_minstreth_r), .din(minstreth_ns[31:0]), .dout(minstreth[31:0]));
-
-   assign minstreth_read[31:0] = minstreth_inc[31:0];
-
-   // ----------------------------------------------------------------------
-   // MSCRATCH (RW)
-   // [31:0] : Scratch register
-   localparam MSCRATCH      = 12'h340;
-
-   assign wr_mscratch_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCRATCH);
-
-   rvdffe #(32)  mscratch_ff (.*, .en(wr_mscratch_r), .din(dec_csr_wrdata_r[31:0]), .dout(mscratch[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MEPC (RW)
-   // [31:1] : Exception PC
-   localparam MEPC          = 12'h341;
-
-   // NPC
-
-   assign sel_exu_npc_r = ~dec_tlu_dbg_halted & ~tlu_flush_lower_r_d1 & dec_tlu_i0_valid_r;
-   assign sel_flush_npc_r = ~dec_tlu_dbg_halted & tlu_flush_lower_r_d1 & ~dec_tlu_flush_noredir_r_d1;
-   assign sel_hold_npc_r = ~sel_exu_npc_r & ~sel_flush_npc_r;
-
-   assign npc_r[31:1] =  ( ({31{sel_exu_npc_r}} & exu_npc_r[31:1]) |
-                           ({31{~mpc_reset_run_req & reset_delayed}} & rst_vec[31:1]) | // init to reset vector for mpc halt on reset case
-                           ({31{(sel_flush_npc_r)}} & tlu_flush_path_r_d1[31:1]) |
-                           ({31{(sel_hold_npc_r)}} & npc_r_d1[31:1]) );
-
-   rvdffpcie #(31)  npwbc_ff (.*, .en(sel_exu_npc_r | sel_flush_npc_r | reset_delayed), .din(npc_r[31:1]), .dout(npc_r_d1[31:1]));
-
-   // PC has to be captured for exceptions and interrupts. For MRET, we could execute it and then take an
-   // interrupt before the next instruction.
-   assign pc0_valid_r = ~dec_tlu_dbg_halted & dec_tlu_i0_valid_r;
-
-   assign pc_r[31:1]  = ( ({31{ pc0_valid_r}} & dec_tlu_i0_pc_r[31:1]) |
-                          ({31{~pc0_valid_r}} & pc_r_d1[31:1]));
-
-   rvdffpcie #(31)  pwbc_ff (.*, .en(pc0_valid_r), .din(pc_r[31:1]), .dout(pc_r_d1[31:1]));
-
-   assign wr_mepc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEPC);
-
-   assign mepc_ns[31:1] = ( ({31{i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r}} & pc_r[31:1]) |
-                            ({31{interrupt_valid_r}} & npc_r[31:1]) |
-                            ({31{wr_mepc_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:1]) |
-                            ({31{~wr_mepc_r & ~exc_or_int_valid_r}} & mepc[31:1]) );
-
-
-   rvdffe #(31)  mepc_ff (.*, .en(i0_exception_valid_r | lsu_exc_valid_r | mepc_trigger_hit_sel_pc_r | interrupt_valid_r | wr_mepc_r), .din(mepc_ns[31:1]), .dout(mepc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // MCAUSE (RW)
-   // [31:0] : Exception Cause
-   localparam MCAUSE        = 12'h342;
-
-   assign wr_mcause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCAUSE);
-   assign mcause_sel_nmi_store = exc_or_int_valid_r & take_nmi & nmi_lsu_store_type;
-   assign mcause_sel_nmi_load = exc_or_int_valid_r & take_nmi & nmi_lsu_load_type;
-   assign mcause_sel_nmi_ext = exc_or_int_valid_r & take_nmi & take_ext_int_start_d3 & |lsu_fir_error[1:0] & ~nmi_int_detected_f;
-   // FIR value decoder
-   // 0 –no error
-   // 1 –uncorrectable ecc  => f000_1000
-   // 2 –dccm region access error => f000_1001
-   // 3 –non dccm region access error => f000_1002
-   assign mcause_fir_error_type[1:0] = {&lsu_fir_error[1:0], lsu_fir_error[1] & ~lsu_fir_error[0]};
-
-   assign mcause_ns[31:0] = ( ({32{mcause_sel_nmi_store}} & {32'hf000_0000}) |
-                              ({32{mcause_sel_nmi_load}} & {32'hf000_0001}) |
-                              ({32{mcause_sel_nmi_ext}} & {28'hf000_100, 2'b0, mcause_fir_error_type[1:0]}) |
-                              ({32{exc_or_int_valid_r & ~take_nmi}} & {interrupt_valid_r, 26'b0, exc_cause_r[4:0]}) |
-                              ({32{wr_mcause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                              ({32{~wr_mcause_r & ~exc_or_int_valid_r}} & mcause[31:0]) );
-
-   rvdffe #(32)  mcause_ff (.*, .en(exc_or_int_valid_r | wr_mcause_r), .din(mcause_ns[31:0]), .dout(mcause[31:0]));
-   // ----------------------------------------------------------------------
-   // MSCAUSE (RW)
-   // [2:0] : Secondary exception Cause
-   localparam MSCAUSE       = 12'h7ff;
-
-   assign wr_mscause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCAUSE);
-
-   assign ifu_mscause[3:0]  =  (dec_tlu_packet_r.icaf_type[1:0] == 2'b00) ? 4'b1001 :
-                               {2'b00 , dec_tlu_packet_r.icaf_type[1:0]} ;
-
-   assign mscause_type[3:0] = ( ({4{lsu_i0_exc_r}} & lsu_error_pkt_r.mscause[3:0]) |
-                                ({4{i0_trigger_hit_r}} & 4'b0001) |
-                                ({4{ebreak_r}} & 4'b0010) |
-                                ({4{inst_acc_r}} & ifu_mscause[3:0])
-                                );
-
-   assign mscause_ns[3:0] = ( ({4{exc_or_int_valid_r}} & mscause_type[3:0]) |
-                              ({4{ wr_mscause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[3:0]) |
-                              ({4{~wr_mscause_r & ~exc_or_int_valid_r}} & mscause[3:0])
-                             );
-
-   rvdff #(4)  mscause_ff (.*, .clk(e4e5_int_clk), .din(mscause_ns[3:0]), .dout(mscause[3:0]));
-   // ----------------------------------------------------------------------
-   // MTVAL (RW)
-   // [31:0] : Exception address if relevant
-   localparam MTVAL         = 12'h343;
-
-   assign wr_mtval_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVAL);
-   assign mtval_capture_pc_r = exc_or_int_valid_r & (ebreak_r | (inst_acc_r & ~inst_acc_second_r) | mepc_trigger_hit_sel_pc_r) & ~take_nmi;
-   assign mtval_capture_pc_plus2_r = exc_or_int_valid_r & (inst_acc_r & inst_acc_second_r) & ~take_nmi;
-   assign mtval_capture_inst_r = exc_or_int_valid_r & illegal_r & ~take_nmi;
-   assign mtval_capture_lsu_r = exc_or_int_valid_r & lsu_exc_valid_r & ~take_nmi;
-   assign mtval_clear_r = exc_or_int_valid_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_capture_lsu_r & ~mepc_trigger_hit_sel_pc_r;
-
-
-   assign mtval_ns[31:0] = (({32{mtval_capture_pc_r}} & {pc_r[31:1], 1'b0}) |
-                            ({32{mtval_capture_pc_plus2_r}} & {pc_r[31:1] + 31'b1, 1'b0}) |
-                            ({32{mtval_capture_inst_r}} & dec_illegal_inst[31:0]) |
-                            ({32{mtval_capture_lsu_r}} & lsu_error_pkt_addr_r[31:0]) |
-                            ({32{wr_mtval_r & ~interrupt_valid_r}} & dec_csr_wrdata_r[31:0]) |
-                            ({32{~take_nmi & ~wr_mtval_r & ~mtval_capture_pc_r & ~mtval_capture_inst_r & ~mtval_clear_r & ~mtval_capture_lsu_r}} & mtval[31:0]) );
-
-
-   rvdffe #(32)  mtval_ff (.*, .en(tlu_flush_lower_r | wr_mtval_r), .din(mtval_ns[31:0]), .dout(mtval[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MCGC (RW) Clock gating control
-   // [31:10]: Reserved, reads 0x0
-   // [9]    : picio_clk_override
-   // [7]    : dec_clk_override
-   // [6]    : Unused
-   // [5]    : ifu_clk_override
-   // [4]    : lsu_clk_override
-   // [3]    : bus_clk_override
-   // [2]    : pic_clk_override
-   // [1]    : dccm_clk_override
-   // [0]    : icm_clk_override
-   //
-   localparam MCGC          = 12'h7f8;
-   assign wr_mcgc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCGC);
-
-   assign mcgc_ns[9:0] = wr_mcgc_r ? {~dec_csr_wrdata_r[9], dec_csr_wrdata_r[8:0]} : mcgc_int[9:0];
-   rvdffe #(10)  mcgc_ff (.*, .en(wr_mcgc_r), .din(mcgc_ns[9:0]), .dout(mcgc_int[9:0]));
-
-   assign mcgc[9:0] = {~mcgc_int[9], mcgc_int[8:0]};
-
-   assign dec_tlu_picio_clk_override= mcgc[9];
-   assign dec_tlu_misc_clk_override = mcgc[8];
-   assign dec_tlu_dec_clk_override  = mcgc[7];
-   //sign dec_tlu_exu_clk_override  = mcgc[6];
-   assign dec_tlu_ifu_clk_override  = mcgc[5];
-   assign dec_tlu_lsu_clk_override  = mcgc[4];
-   assign dec_tlu_bus_clk_override  = mcgc[3];
-   assign dec_tlu_pic_clk_override  = mcgc[2];
-   assign dec_tlu_dccm_clk_override = mcgc[1];
-   assign dec_tlu_icm_clk_override  = mcgc[0];
-
-   // ----------------------------------------------------------------------
-   // MFDC (RW) Feature Disable Control
-   // [31:19] : Reserved, reads 0x0
-   // [18:16] : DMA QoS Prty
-   // [15:13] : Reserved, reads 0x0
-   // [12]   : Disable trace
-   // [11]   : Disable external load forwarding
-   // [10]   : Disable dual issue
-   // [9]    : Disable pic multiple ints
-   // [8]    : Disable core ecc
-   // [7]    : Disable secondary alu?s
-   // [6]    : Unused, 0x0
-   // [5]    : Disable non-blocking loads/divides
-   // [4]    : Disable fast divide
-   // [3]    : Disable branch prediction and return stack
-   // [2]    : Disable write buffer coalescing
-   // [1]    : Disable load misses that bypass the write buffer
-   // [0]    : Disable pipelining - Enable single instruction execution
-   //
-   localparam MFDC          = 12'h7f9;
-
-   assign wr_mfdc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDC);
-
-   rvdffe #(16)  mfdc_ff (.*, .en(wr_mfdc_r), .din({mfdc_ns[15:0]}), .dout(mfdc_int[15:0]));
-
-   // flip poweron value of bit 6 for AXI build
-   if(pt.BUILD_AXI4==1) begin : axi4
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16], dec_csr_wrdata_r[12], dec_csr_wrdata_r[11:7], ~dec_csr_wrdata_r[6], dec_csr_wrdata_r[5:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12], mfdc_int[11:7], ~mfdc_int[6], mfdc_int[5:0]};
-   end
-   else begin
-      // flip poweron valid of bit 12
-         assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16],dec_csr_wrdata_r[12:0]};
-         assign mfdc[18:0] = {~mfdc_int[15:13], 3'b0, mfdc_int[12:0]};
-   end
-
-
-   assign dec_tlu_dma_qos_prty[2:0] = mfdc[18:16];
-   assign dec_tlu_trace_disable = mfdc[12];
-   assign dec_tlu_external_ldfwd_disable = mfdc[11];
-   assign dec_tlu_core_ecc_disable = 1'b1;//mfdc[8];
-   assign dec_tlu_sideeffect_posted_disable = mfdc[6];
-   assign dec_tlu_bpred_disable = mfdc[3];
-   assign dec_tlu_wb_coalescing_disable = mfdc[2];
-   assign dec_tlu_pipelining_disable = mfdc[0];
-
-   // ----------------------------------------------------------------------
-   // MCPC (RW) Pause counter
-   // [31:0] : Reads 0x0, decs in the wb register in decode_ctl
-
-   assign dec_tlu_wr_pause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC) & ~interrupt_valid_r & ~take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MRAC (RW)
-   // [31:0] : Region Access Control Register, 16 regions, {side_effect, cachable} pairs
-   localparam MRAC          = 12'h7c0;
-
-   assign wr_mrac_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MRAC);
-
-   // prevent pairs of 0x11, side_effect and cacheable
-   assign mrac_in[31:0] = {dec_csr_wrdata_r[31], dec_csr_wrdata_r[30] & ~dec_csr_wrdata_r[31],
-                           dec_csr_wrdata_r[29], dec_csr_wrdata_r[28] & ~dec_csr_wrdata_r[29],
-                           dec_csr_wrdata_r[27], dec_csr_wrdata_r[26] & ~dec_csr_wrdata_r[27],
-                           dec_csr_wrdata_r[25], dec_csr_wrdata_r[24] & ~dec_csr_wrdata_r[25],
-                           dec_csr_wrdata_r[23], dec_csr_wrdata_r[22] & ~dec_csr_wrdata_r[23],
-                           dec_csr_wrdata_r[21], dec_csr_wrdata_r[20] & ~dec_csr_wrdata_r[21],
-                           dec_csr_wrdata_r[19], dec_csr_wrdata_r[18] & ~dec_csr_wrdata_r[19],
-                           dec_csr_wrdata_r[17], dec_csr_wrdata_r[16] & ~dec_csr_wrdata_r[17],
-                           dec_csr_wrdata_r[15], dec_csr_wrdata_r[14] & ~dec_csr_wrdata_r[15],
-                           dec_csr_wrdata_r[13], dec_csr_wrdata_r[12] & ~dec_csr_wrdata_r[13],
-                           dec_csr_wrdata_r[11], dec_csr_wrdata_r[10] & ~dec_csr_wrdata_r[11],
-                           dec_csr_wrdata_r[9], dec_csr_wrdata_r[8] & ~dec_csr_wrdata_r[9],
-                           dec_csr_wrdata_r[7], dec_csr_wrdata_r[6] & ~dec_csr_wrdata_r[7],
-                           dec_csr_wrdata_r[5], dec_csr_wrdata_r[4] & ~dec_csr_wrdata_r[5],
-                           dec_csr_wrdata_r[3], dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[3],
-                           dec_csr_wrdata_r[1], dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[1]};
-
-   rvdffe #(32)  mrac_ff (.*, .en(wr_mrac_r), .din(mrac_in[31:0]), .dout(mrac[31:0]));
-
-   // drive to LSU/IFU
-   assign dec_tlu_mrac_ff[31:0] = mrac[31:0];
-
-   // ----------------------------------------------------------------------
-   // MDEAU (WAR0)
-   // [31:0] : Dbus Error Address Unlock register
-   //
-   localparam MDEAU         = 12'hbc0;
-
-   assign wr_mdeau_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDEAU);
-
-
-   // ----------------------------------------------------------------------
-   // MDSEAC (R)
-   // [31:0] : Dbus Store Error Address Capture register
-   //
-   localparam MDSEAC        = 12'hfc0;
-
-   // only capture error bus if the MDSEAC reg is not locked
-   assign mdseac_locked_ns = mdseac_en | (mdseac_locked_f & ~wr_mdeau_r);
-
-   assign mdseac_en = (lsu_imprecise_error_store_any | lsu_imprecise_error_load_any) & ~nmi_int_detected_f & ~mdseac_locked_f;
-
-   rvdffe #(32)  mdseac_ff (.*, .en(mdseac_en), .din(lsu_imprecise_error_addr_any[31:0]), .dout(mdseac[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MPMC (R0W1)
-   // [0] : FW halt
-   // [1] : Set MSTATUS[MIE] on halt
-
-   localparam MPMC          = 12'h7c6;
-
-   assign wr_mpmc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MPMC);
-
-   // allow the cycle of the dbg halt flush that contains the wr_mpmc_r to
-   // set the mstatus bit potentially, use delayed version of internal dbg halt.
-   assign fw_halt_req = wr_mpmc_r & dec_csr_wrdata_r[0] & ~internal_dbg_halt_mode_f2 & ~ext_int_freeze_d1;
-
-   assign fw_halted_ns = (fw_halt_req | fw_halted) & ~set_mie_pmu_fw_halt;
-   assign mpmc_b_ns[1] = wr_mpmc_r ? ~dec_csr_wrdata_r[1] : ~mpmc[1];
-   rvdff #(1)  mpmc_ff (.*, .clk(csr_wr_clk), .din(mpmc_b_ns[1]), .dout(mpmc_b[1]));
-   assign mpmc[1] = ~mpmc_b[1];
-
-   // ----------------------------------------------------------------------
-   // MICECT (I-Cache error counter/threshold)
-   // [31:27] : Icache parity error threshold
-   // [26:0]  : Icache parity error count
-   localparam MICECT        = 12'h7f0;
-
-   assign csr_sat[31:27] = (dec_csr_wrdata_r[31:27] > 5'd26) ? 5'd26 : dec_csr_wrdata_r[31:27];
-
-   assign wr_micect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICECT);
-   assign micect_inc[26:0] = micect[26:0] + {26'b0, ic_perr_r};
-   assign micect_ns =  wr_micect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {micect[31:27], micect_inc[26:0]};
-
-   rvdffe #(32)  micect_ff (.*, .en(wr_micect_r | ic_perr_r), .din(micect_ns[31:0]), .dout(micect[31:0]));
-
-   assign mice_ce_req = |({32'hffffffff << micect[31:27]} & {5'b0, micect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MICCMECT (ICCM error counter/threshold)
-   // [31:27] : ICCM parity error threshold
-   // [26:0]  : ICCM parity error count
-   localparam MICCMECT      = 12'h7f1;
-
-   assign wr_miccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICCMECT);
-   assign miccmect_inc[26:0] = miccmect[26:0] + {26'b0, iccm_sbecc_r | iccm_dma_sb_error};
-   assign miccmect_ns        = wr_miccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {miccmect[31:27], miccmect_inc[26:0]};
-
-   rvdffe #(32)  miccmect_ff (.*, .clk(free_l2clk), .en(wr_miccmect_r | iccm_sbecc_r | iccm_dma_sb_error), .din(miccmect_ns[31:0]), .dout(miccmect[31:0]));
-
-   assign miccme_ce_req = |({32'hffffffff << miccmect[31:27]} & {5'b0, miccmect[26:0]});
-
-   // ----------------------------------------------------------------------
-   // MDCCMECT (DCCM error counter/threshold)
-   // [31:27] : DCCM parity error threshold
-   // [26:0]  : DCCM parity error count
-   localparam MDCCMECT      = 12'h7f2;
-
-   assign wr_mdccmect_r     = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDCCMECT);
-   assign mdccmect_inc[26:0] = mdccmect[26:0] + {26'b0, lsu_single_ecc_error_r_d1};
-   assign mdccmect_ns        = wr_mdccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {mdccmect[31:27], mdccmect_inc[26:0]};
-
-   rvdffe #(32)  mdccmect_ff (.*, .clk(free_l2clk), .en(wr_mdccmect_r | lsu_single_ecc_error_r_d1), .din(mdccmect_ns[31:0]), .dout(mdccmect[31:0]));
-
-   assign mdccme_ce_req = |({32'hffffffff << mdccmect[31:27]} & {5'b0, mdccmect[26:0]});
-
-
-   // ----------------------------------------------------------------------
-   // MFDHT (Force Debug Halt Threshold)
-   // [5:1] : Halt timeout threshold (power of 2)
-   //   [0] : Halt timeout enabled
-   localparam MFDHT         = 12'h7ce;
-
-   assign wr_mfdht_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHT);
-
-   assign mfdht_ns[5:0] = wr_mfdht_r ? dec_csr_wrdata_r[5:0] : mfdht[5:0];
-
-   rvdffs #(6)  mfdht_ff (.*, .clk(csr_wr_clk), .en(wr_mfdht_r), .din(mfdht_ns[5:0]), .dout(mfdht[5:0]));
-
-    // ----------------------------------------------------------------------
-   // MFDHS(RW)
-   // [1] : LSU operation pending when debug halt threshold reached
-   // [0] : IFU operation pending when debug halt threshold reached
-
-   localparam MFDHS         = 12'h7cf;
-
-   assign wr_mfdhs_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHS);
-
-   assign mfdhs_ns[1:0] = wr_mfdhs_r ? dec_csr_wrdata_r[1:0] : ((dbg_tlu_halted & ~dbg_tlu_halted_f) ? {~lsu_idle_any_f, ~ifu_miss_state_idle_f} : mfdhs[1:0]);
-
-   rvdffs #(2)  mfdhs_ff (.*, .clk(free_clk), .en(wr_mfdhs_r | dbg_tlu_halted), .din(mfdhs_ns[1:0]), .dout(mfdhs[1:0]));
-
-   assign force_halt_ctr[31:0] = debug_halt_req_f ? (force_halt_ctr_f[31:0] + 32'b1) : (dbg_tlu_halted_f ? 32'b0 : force_halt_ctr_f[31:0]);
-
-   rvdffe #(32)  forcehaltctr_ff (.*, .en(mfdht[0]), .din(force_halt_ctr[31:0]), .dout(force_halt_ctr_f[31:0]));
-
-   assign force_halt = mfdht[0] & |(force_halt_ctr_f[31:0] & (32'hffffffff << mfdht[5:1]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIVT (External Interrupt Vector Table (R/W))
-   // [31:10]: Base address (R/W)
-   // [9:0]  : Reserved, reads 0x0
-   localparam MEIVT         = 12'hbc8;
-
-   assign wr_meivt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIVT);
-
-   rvdffe #(22)  meivt_ff (.*, .en(wr_meivt_r), .din(dec_csr_wrdata_r[31:10]), .dout(meivt[31:10]));
-
-
-   // ----------------------------------------------------------------------
-   // MEIHAP (External Interrupt Handler Access Pointer (R))
-   // [31:10]: Base address (R/W)
-   // [9:2]  : ClaimID (R)
-   // [1:0]  : Reserved, 0x0
-   localparam MEIHAP        = 12'hfc8;
-
-   assign wr_meihap_r = wr_meicpct_r;
-
-   rvdffe #(8)  meihap_ff (.*, .en(wr_meihap_r), .din(pic_claimid[7:0]), .dout(meihap[9:2]));
-
-   assign dec_tlu_meihap[31:2] = {meivt[31:10], meihap[9:2]};
-   // ----------------------------------------------------------------------
-   // MEICURPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : CURRPRI - Priority level of current interrupt service routine (R/W)
-   localparam MEICURPL      = 12'hbcc;
-
-   assign wr_meicurpl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICURPL);
-   assign meicurpl_ns[3:0] = wr_meicurpl_r ? dec_csr_wrdata_r[3:0] : meicurpl[3:0];
-
-   rvdff #(4)  meicurpl_ff (.*, .clk(csr_wr_clk), .din(meicurpl_ns[3:0]), .dout(meicurpl[3:0]));
-
-   // PIC needs this reg
-   assign dec_tlu_meicurpl[3:0] = meicurpl[3:0];
-
-
-   // ----------------------------------------------------------------------
-   // MEICIDPL (R/W)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : External Interrupt Claim ID's Priority Level Register
-   localparam MEICIDPL      = 12'hbcb;
-
-   assign wr_meicidpl_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICIDPL)) | take_ext_int_start;
-
-   assign meicidpl_ns[3:0] = wr_meicpct_r ? pic_pl[3:0] : (wr_meicidpl_r ? dec_csr_wrdata_r[3:0] : meicidpl[3:0]);
-
-
-   // ----------------------------------------------------------------------
-   // MEICPCT (Capture CLAIMID in MEIHAP and PL in MEICIDPL
-   // [31:1] : Reserved (read 0x0)
-   // [0]    : Capture (W1, Read 0)
-   localparam MEICPCT       = 12'hbca;
-
-   assign wr_meicpct_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICPCT)) | take_ext_int_start;
-
-   // ----------------------------------------------------------------------
-   // MEIPT (External Interrupt Priority Threshold)
-   // [31:4] : Reserved (read 0x0)
-   // [3:0]  : PRITHRESH
-   localparam MEIPT         = 12'hbc9;
-
-   assign wr_meipt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIPT);
-   assign meipt_ns[3:0] = wr_meipt_r ? dec_csr_wrdata_r[3:0] : meipt[3:0];
-
-   rvdff #(4)  meipt_ff (.*, .clk(csr_wr_clk), .din(meipt_ns[3:0]), .dout(meipt[3:0]));
-
-   // to PIC
-   assign dec_tlu_meipt[3:0] = meipt[3:0];
-   // ----------------------------------------------------------------------
-   // DCSR (R/W) (Only accessible in debug mode)
-   // [31:28] : xdebugver (hard coded to 0x4) RO
-   // [27:16] : 0x0, reserved
-   // [15]    : ebreakm
-   // [14]    : 0x0, reserved
-   // [13]    : ebreaks (0x0 for this core)
-   // [12]    : ebreaku (0x0 for this core)
-   // [11]    : stepie
-   // [10]    : stopcount
-   // [9]     : 0x0 //stoptime
-   // [8:6]   : cause (RO)
-   // [5:4]   : 0x0, reserved
-   // [3]     : nmip
-   // [2]     : step
-   // [1:0]   : prv (0x3 for this core)
-   //
-   localparam DCSR          = 12'h7b0;
-
-   // RV has clarified that 'priority 4' in the spec means top priority.
-   // 4. single step. 3. Debugger request. 2. Ebreak. 1. Trigger.
-
-   // RV debug spec indicates a cause priority change for trigger hits during single step.
-   assign trigger_hit_for_dscr_cause_r_d1 = trigger_hit_dmode_r_d1 | (trigger_hit_r_d1 & dcsr_single_step_done_f);
-
-   assign dcsr_cause[8:6] = ( ({3{dcsr_single_step_done_f & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1 & ~debug_halt_req}} & 3'b100) |
-                              ({3{debug_halt_req & ~ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b011) |
-                              ({3{ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} &  3'b001) |
-                              ({3{trigger_hit_for_dscr_cause_r_d1}} & 3'b010));
-
-   assign wr_dcsr_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DCSR);
-
-
-
-  // Multiple halt enter requests can happen before we are halted.
-  // We have to continue to upgrade based on dcsr_cause priority but we can't downgrade.
-   assign dcsr_cause_upgradeable = internal_dbg_halt_mode_f & (dcsr[8:6] == 3'b011);
-   assign enter_debug_halt_req_le = enter_debug_halt_req & (~dbg_tlu_halted | dcsr_cause_upgradeable);
-
-   assign nmi_in_debug_mode = nmi_int_detected_f & internal_dbg_halt_mode_f;
-   assign dcsr_ns[15:2] = enter_debug_halt_req_le ? {dcsr[15:9], dcsr_cause[8:6], dcsr[5:2]} :
-                          (wr_dcsr_r ? {dec_csr_wrdata_r[15], 3'b0, dec_csr_wrdata_r[11:10], 1'b0, dcsr[8:6], 2'b00, nmi_in_debug_mode | dcsr[3], dec_csr_wrdata_r[2]} :
-                           {dcsr[15:4], nmi_in_debug_mode, dcsr[2]});
-
-   rvdffe #(14)  dcsr_ff (.*, .clk(free_l2clk), .en(enter_debug_halt_req_le | wr_dcsr_r | internal_dbg_halt_mode | take_nmi), .din(dcsr_ns[15:2]), .dout(dcsr[15:2]));
-
-   // ----------------------------------------------------------------------
-   // DPC (R/W) (Only accessible in debug mode)
-   // [31:0] : Debug PC
-   localparam DPC           = 12'h7b1;
-
-   assign wr_dpc_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DPC);
-   assign dpc_capture_npc = dbg_tlu_halted & ~dbg_tlu_halted_f & ~request_debug_mode_done;
-   assign dpc_capture_pc = request_debug_mode_r;
-
-   assign dpc_ns[31:1] = ( ({31{~dpc_capture_pc & ~dpc_capture_npc & wr_dpc_r}} & dec_csr_wrdata_r[31:1]) |
-                           ({31{dpc_capture_pc}} & pc_r[31:1]) |
-                           ({31{~dpc_capture_pc & dpc_capture_npc}} & npc_r[31:1]) );
-
-   rvdffe #(31)  dpc_ff (.*, .en(wr_dpc_r | dpc_capture_pc | dpc_capture_npc), .din(dpc_ns[31:1]), .dout(dpc[31:1]));
-
-   // ----------------------------------------------------------------------
-   // DICAWICS (R/W) (Only accessible in debug mode)
-   // [31:25] : Reserved
-   // [24]    : Array select, 0 is data, 1 is tag
-   // [23:22] : Reserved
-   // [21:20] : Way select
-   // [19:17] : Reserved
-   // [16:3]  : Index
-   // [2:0]   : Reserved
-   localparam DICAWICS      = 12'h7c8;
-
-   assign dicawics_ns[16:0] = {dec_csr_wrdata_r[24], dec_csr_wrdata_r[21:20], dec_csr_wrdata_r[16:3]};
-   assign wr_dicawics_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAWICS);
-
-   rvdffe #(17)  dicawics_ff (.*, .en(wr_dicawics_r), .din(dicawics_ns[16:0]), .dout(dicawics[16:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0 (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [31:0]  : inst data
-   //
-   // If dicawics[array] is 1
-   // [31:16] : Tag
-   // [15:7]  : Reserved
-   // [6:4]   : LRU
-   // [3:1]   : Reserved
-   // [0]     : Valid
-   localparam DICAD0        = 12'h7c9;
-
-   assign dicad0_ns[31:0] = wr_dicad0_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[31:0];
-
-   assign wr_dicad0_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0);
-
-   rvdffe #(32)  dicad0_ff (.*, .en(wr_dicad0_r | ifu_ic_debug_rd_data_valid), .din(dicad0_ns[31:0]), .dout(dicad0[31:0]));
-
-   // ----------------------------------------------------------------------
-   // DICAD0H (R/W) (Only accessible in debug mode)
-   //
-   // If dicawics[array] is 0
-   // [63:32]  : inst data
-   //
-   localparam DICAD0H       = 12'h7cc;
-
-   assign dicad0h_ns[31:0] = wr_dicad0h_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[63:32];
-
-   assign wr_dicad0h_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD0H);
-
-   rvdffe #(32)  dicad0h_ff (.*, .en(wr_dicad0h_r | ifu_ic_debug_rd_data_valid), .din(dicad0h_ns[31:0]), .dout(dicad0h[31:0]));
-
-
-if (pt.ICACHE_ECC == 1) begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [6:0]     : ECC
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[6:0] = wr_dicad1_r ? dec_csr_wrdata_r[6:0] : ifu_ic_debug_rd_data[70:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffe #(.WIDTH(7), .OVERRIDE(1))  dicad1_ff (.*, .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[6:0]), .dout(dicad1_raw[6:0]));
-
-   assign dicad1[31:0] = {25'b0, dicad1_raw[6:0]};
-
-end
-else begin
-   // ----------------------------------------------------------------------
-   // DICAD1 (R/W) (Only accessible in debug mode)
-   // [3:0]     : Parity
-   localparam DICAD1        = 12'h7ca;
-
-   assign dicad1_ns[3:0] = wr_dicad1_r ? dec_csr_wrdata_r[3:0] : ifu_ic_debug_rd_data[67:64];
-
-   assign wr_dicad1_r = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAD1);
-
-   rvdffs #(4)  dicad1_ff (.*, .clk(free_clk), .en(wr_dicad1_r | ifu_ic_debug_rd_data_valid), .din(dicad1_ns[3:0]), .dout(dicad1_raw[3:0]));
-
-   assign dicad1[31:0] = {28'b0, dicad1_raw[3:0]};
-end
-   // ----------------------------------------------------------------------
-   // DICAGO (R/W) (Only accessible in debug mode)
-   // [0]     : Go
-   localparam DICAGO        = 12'h7cb;
-
-if (pt.ICACHE_ECC == 1)
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {      dicad1[6:0], dicad0h[31:0], dicad0[31:0]};
-else
-   assign dec_tlu_ic_diag_pkt.icache_wrdata[70:0] = {3'b0, dicad1[3:0], dicad0h[31:0], dicad0[31:0]};
-
-
-   assign dec_tlu_ic_diag_pkt.icache_dicawics[16:0] = dicawics[16:0];
-
-   assign icache_rd_valid = allow_dbg_halt_csr_write & dec_csr_any_unq_d & dec_i0_decode_d & ~dec_csr_wen_unq_d & (dec_csr_rdaddr_d[11:0] == DICAGO);
-   assign icache_wr_valid = allow_dbg_halt_csr_write & dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == DICAGO);
-
-
-   assign dec_tlu_ic_diag_pkt.icache_rd_valid = icache_rd_valid_f;
-   assign dec_tlu_ic_diag_pkt.icache_wr_valid = icache_wr_valid_f;
-
-   // ----------------------------------------------------------------------
-   // MTSEL (R/W)
-   // [1:0] : Trigger select : 00, 01, 10 are data/address triggers. 11 is inst count
-   localparam MTSEL         = 12'h7a0;
-
-   assign wr_mtsel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTSEL);
-   assign mtsel_ns[1:0] = wr_mtsel_r ? {dec_csr_wrdata_r[1:0]} : mtsel[1:0];
-
-   rvdff #(2)  mtsel_ff (.*, .clk(csr_wr_clk), .din(mtsel_ns[1:0]), .dout(mtsel[1:0]));
-
-   // ----------------------------------------------------------------------
-   // MTDATA1 (R/W)
-   // [31:0] : Trigger Data 1
-   localparam MTDATA1       = 12'h7a1;
-
-   // for triggers 0, 1, 2 and 3 aka Match Control
-   // [31:28] : type, hard coded to 0x2
-   // [27]    : dmode
-   // [26:21] : hard coded to 0x1f
-   // [20]    : hit
-   // [19]    : select (0 - address, 1 - data)
-   // [18]    : timing, always 'before', reads 0x0
-   // [17:12] : action, bits  [17:13] not implemented and reads 0x0
-   // [11]    : chain
-   // [10:7]  : match, bits [10:8] not implemented and reads 0x0
-   // [6]     : M
-   // [5:3]   : not implemented, reads 0x0
-   // [2]     : execute
-   // [1]     : store
-   // [0]     : load
-   //
-   // decoder ring
-   // [27]    : => 9
-   // [20]    : => 8
-   // [19]    : => 7
-   // [12]    : => 6
-   // [11]    : => 5
-   // [7]     : => 4
-   // [6]     : => 3
-   // [2]     : => 2
-   // [1]     : => 1
-   // [0]     : => 0
-
-
-   // don't allow setting load-data.
-   assign tdata_load = dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[19];
-   // don't allow setting execute-data.
-   assign tdata_opcode = dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[19];
-   // don't allow clearing DMODE and action=1
-   assign tdata_action = (dec_csr_wrdata_r[27] & dbg_tlu_halted_f) & dec_csr_wrdata_r[12];
-
-   // Chain bit has conditions: WARL for triggers without chains. Force to zero if dmode is 0 but next trigger dmode is 1.
-   assign tdata_chain = mtsel[0] ? 1'b0 : // triggers 1 and 3 chain bit is always zero
-                        mtsel[1] ?  dec_csr_wrdata_r[11] & ~(mtdata1_t3[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]) : // trigger 2
-                                    dec_csr_wrdata_r[11] & ~(mtdata1_t1[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]);  // trigger 0
-
-   // Kill mtdata1 write if dmode=1 but prior trigger has dmode=0/chain=1. Only applies to T1 and T3
-   assign tdata_kill_write = mtsel[1] ? dec_csr_wrdata_r[27] & (~mtdata1_t2[MTDATA1_DMODE] & mtdata1_t2[MTDATA1_CHAIN]) : // trigger 3
-                                        dec_csr_wrdata_r[27] & (~mtdata1_t0[MTDATA1_DMODE] & mtdata1_t0[MTDATA1_CHAIN]) ; // trigger 1
-
-
-   assign tdata_wrdata_r[9:0]  = {dec_csr_wrdata_r[27] & dbg_tlu_halted_f,
-                                   dec_csr_wrdata_r[20:19],
-                                   tdata_action,
-                                   tdata_chain,
-                                   dec_csr_wrdata_r[7:6],
-                                   tdata_opcode,
-                                   dec_csr_wrdata_r[1],
-                                   tdata_load};
-
-   // If the DMODE bit is set, tdata1 can only be updated in debug_mode
-   assign wr_mtdata1_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b0) & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t0_ns[9:0] = wr_mtdata1_t0_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t0[9], update_hit_bit_r[0] | mtdata1_t0[8], mtdata1_t0[7:0]};
-
-   assign wr_mtdata1_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t1_ns[9:0] = wr_mtdata1_t1_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t1[9], update_hit_bit_r[1] | mtdata1_t1[8], mtdata1_t1[7:0]};
-
-   assign wr_mtdata1_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign mtdata1_t2_ns[9:0] = wr_mtdata1_t2_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t2[9], update_hit_bit_r[2] | mtdata1_t2[8], mtdata1_t2[7:0]};
-
-   assign wr_mtdata1_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f) & ~tdata_kill_write;
-   assign mtdata1_t3_ns[9:0] = wr_mtdata1_t3_r ? tdata_wrdata_r[9:0] :
-                                {mtdata1_t3[9], update_hit_bit_r[3] | mtdata1_t3[8], mtdata1_t3[7:0]};
-
-
-   rvdffe #(10)  mtdata1_t0_ff (.*, .en(trigger_enabled[0] | wr_mtdata1_t0_r), .din(mtdata1_t0_ns[9:0]), .dout(mtdata1_t0[9:0]));
-   rvdffe #(10)  mtdata1_t1_ff (.*, .en(trigger_enabled[1] | wr_mtdata1_t1_r), .din(mtdata1_t1_ns[9:0]), .dout(mtdata1_t1[9:0]));
-   rvdffe #(10)  mtdata1_t2_ff (.*, .en(trigger_enabled[2] | wr_mtdata1_t2_r), .din(mtdata1_t2_ns[9:0]), .dout(mtdata1_t2[9:0]));
-   rvdffe #(10)  mtdata1_t3_ff (.*, .en(trigger_enabled[3] | wr_mtdata1_t3_r), .din(mtdata1_t3_ns[9:0]), .dout(mtdata1_t3[9:0]));
-
-   assign mtdata1_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & {4'h2, mtdata1_t0[9], 6'b011111, mtdata1_t0[8:7], 6'b0, mtdata1_t0[6:5], 3'b0, mtdata1_t0[4:3], 3'b0, mtdata1_t0[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & {4'h2, mtdata1_t1[9], 6'b011111, mtdata1_t1[8:7], 6'b0, mtdata1_t1[6:5], 3'b0, mtdata1_t1[4:3], 3'b0, mtdata1_t1[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & {4'h2, mtdata1_t2[9], 6'b011111, mtdata1_t2[8:7], 6'b0, mtdata1_t2[6:5], 3'b0, mtdata1_t2[4:3], 3'b0, mtdata1_t2[2:0]}) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & {4'h2, mtdata1_t3[9], 6'b011111, mtdata1_t3[8:7], 6'b0, mtdata1_t3[6:5], 3'b0, mtdata1_t3[4:3], 3'b0, mtdata1_t3[2:0]}));
-
-   assign trigger_pkt_any[0].select = mtdata1_t0[MTDATA1_SEL];
-   assign trigger_pkt_any[0].match = mtdata1_t0[MTDATA1_MATCH];
-   assign trigger_pkt_any[0].store = mtdata1_t0[MTDATA1_ST];
-   assign trigger_pkt_any[0].load = mtdata1_t0[MTDATA1_LD];
-   assign trigger_pkt_any[0].execute = mtdata1_t0[MTDATA1_EXE];
-   assign trigger_pkt_any[0].m = mtdata1_t0[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[1].select = mtdata1_t1[MTDATA1_SEL];
-   assign trigger_pkt_any[1].match = mtdata1_t1[MTDATA1_MATCH];
-   assign trigger_pkt_any[1].store = mtdata1_t1[MTDATA1_ST];
-   assign trigger_pkt_any[1].load = mtdata1_t1[MTDATA1_LD];
-   assign trigger_pkt_any[1].execute = mtdata1_t1[MTDATA1_EXE];
-   assign trigger_pkt_any[1].m = mtdata1_t1[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[2].select = mtdata1_t2[MTDATA1_SEL];
-   assign trigger_pkt_any[2].match = mtdata1_t2[MTDATA1_MATCH];
-   assign trigger_pkt_any[2].store = mtdata1_t2[MTDATA1_ST];
-   assign trigger_pkt_any[2].load = mtdata1_t2[MTDATA1_LD];
-   assign trigger_pkt_any[2].execute = mtdata1_t2[MTDATA1_EXE];
-   assign trigger_pkt_any[2].m = mtdata1_t2[MTDATA1_M_ENABLED];
-
-   assign trigger_pkt_any[3].select = mtdata1_t3[MTDATA1_SEL];
-   assign trigger_pkt_any[3].match = mtdata1_t3[MTDATA1_MATCH];
-   assign trigger_pkt_any[3].store = mtdata1_t3[MTDATA1_ST];
-   assign trigger_pkt_any[3].load = mtdata1_t3[MTDATA1_LD];
-   assign trigger_pkt_any[3].execute = mtdata1_t3[MTDATA1_EXE];
-   assign trigger_pkt_any[3].m = mtdata1_t3[MTDATA1_M_ENABLED];
-
-
-
-
-
-   // ----------------------------------------------------------------------
-   // MTDATA2 (R/W)
-   // [31:0] : Trigger Data 2
-   localparam MTDATA2       = 12'h7a2;
-
-   // If the DMODE bit is set, tdata2 can only be updated in debug_mode
-   assign wr_mtdata2_t0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b0)  & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b01) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t2_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b10) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-   assign wr_mtdata2_t3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2) & (mtsel[1:0] == 2'b11) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f);
-
-   rvdffe #(32)  mtdata2_t0_ff (.*, .en(wr_mtdata2_t0_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t0[31:0]));
-   rvdffe #(32)  mtdata2_t1_ff (.*, .en(wr_mtdata2_t1_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t1[31:0]));
-   rvdffe #(32)  mtdata2_t2_ff (.*, .en(wr_mtdata2_t2_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t2[31:0]));
-   rvdffe #(32)  mtdata2_t3_ff (.*, .en(wr_mtdata2_t3_r), .din(dec_csr_wrdata_r[31:0]), .dout(mtdata2_t3[31:0]));
-
-   assign mtdata2_tsel_out[31:0] = ( ({32{(mtsel[1:0] == 2'b00)}} & mtdata2_t0[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b01)}} & mtdata2_t1[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b10)}} & mtdata2_t2[31:0]) |
-                                     ({32{(mtsel[1:0] == 2'b11)}} & mtdata2_t3[31:0]));
-
-   assign trigger_pkt_any[0].tdata2[31:0] = mtdata2_t0[31:0];
-   assign trigger_pkt_any[1].tdata2[31:0] = mtdata2_t1[31:0];
-   assign trigger_pkt_any[2].tdata2[31:0] = mtdata2_t2[31:0];
-   assign trigger_pkt_any[3].tdata2[31:0] = mtdata2_t3[31:0];
-
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section starts
-   //----------------------------------------------------------------------
-   localparam MHPME_NOEVENT             = 10'd0;
-   localparam MHPME_CLK_ACTIVE          = 10'd1; // OOP - out of pipe
-   localparam MHPME_ICACHE_HIT          = 10'd2; // OOP
-   localparam MHPME_ICACHE_MISS         = 10'd3; // OOP
-   localparam MHPME_INST_COMMIT         = 10'd4;
-   localparam MHPME_INST_COMMIT_16B     = 10'd5;
-   localparam MHPME_INST_COMMIT_32B     = 10'd6;
-   localparam MHPME_INST_ALIGNED        = 10'd7; // OOP
-   localparam MHPME_INST_DECODED        = 10'd8; // OOP
-   localparam MHPME_INST_MUL            = 10'd9;
-   localparam MHPME_INST_DIV            = 10'd10;
-   localparam MHPME_INST_LOAD           = 10'd11;
-   localparam MHPME_INST_STORE          = 10'd12;
-   localparam MHPME_INST_MALOAD         = 10'd13;
-   localparam MHPME_INST_MASTORE        = 10'd14;
-   localparam MHPME_INST_ALU            = 10'd15;
-   localparam MHPME_INST_CSRREAD        = 10'd16;
-   localparam MHPME_INST_CSRRW          = 10'd17;
-   localparam MHPME_INST_CSRWRITE       = 10'd18;
-   localparam MHPME_INST_EBREAK         = 10'd19;
-   localparam MHPME_INST_ECALL          = 10'd20;
-   localparam MHPME_INST_FENCE          = 10'd21;
-   localparam MHPME_INST_FENCEI         = 10'd22;
-   localparam MHPME_INST_MRET           = 10'd23;
-   localparam MHPME_INST_BRANCH         = 10'd24;
-   localparam MHPME_BRANCH_MP           = 10'd25;
-   localparam MHPME_BRANCH_TAKEN        = 10'd26;
-   localparam MHPME_BRANCH_NOTP         = 10'd27;
-   localparam MHPME_FETCH_STALL         = 10'd28; // OOP
-   localparam MHPME_DECODE_STALL        = 10'd30; // OOP
-   localparam MHPME_POSTSYNC_STALL      = 10'd31; // OOP
-   localparam MHPME_PRESYNC_STALL       = 10'd32; // OOP
-   localparam MHPME_LSU_SB_WB_STALL     = 10'd34; // OOP
-   localparam MHPME_DMA_DCCM_STALL      = 10'd35; // OOP
-   localparam MHPME_DMA_ICCM_STALL      = 10'd36; // OOP
-   localparam MHPME_EXC_TAKEN           = 10'd37;
-   localparam MHPME_TIMER_INT_TAKEN     = 10'd38;
-   localparam MHPME_EXT_INT_TAKEN       = 10'd39;
-   localparam MHPME_FLUSH_LOWER         = 10'd40;
-   localparam MHPME_BR_ERROR            = 10'd41;
-   localparam MHPME_IBUS_TRANS          = 10'd42; // OOP
-   localparam MHPME_DBUS_TRANS          = 10'd43; // OOP
-   localparam MHPME_DBUS_MA_TRANS       = 10'd44; // OOP
-   localparam MHPME_IBUS_ERROR          = 10'd45; // OOP
-   localparam MHPME_DBUS_ERROR          = 10'd46; // OOP
-   localparam MHPME_IBUS_STALL          = 10'd47; // OOP
-   localparam MHPME_DBUS_STALL          = 10'd48; // OOP
-   localparam MHPME_INT_DISABLED        = 10'd49; // OOP
-   localparam MHPME_INT_STALLED         = 10'd50; // OOP
-   localparam MHPME_INST_BITMANIP       = 10'd54;
-   localparam MHPME_DBUS_LOAD           = 10'd55;
-   localparam MHPME_DBUS_STORE          = 10'd56;
-   // Counts even during sleep state
-   localparam MHPME_SLEEP_CYC           = 10'd512; // OOP
-   localparam MHPME_DMA_READ_ALL        = 10'd513; // OOP
-   localparam MHPME_DMA_WRITE_ALL       = 10'd514; // OOP
-   localparam MHPME_DMA_READ_DCCM       = 10'd515; // OOP
-   localparam MHPME_DMA_WRITE_DCCM      = 10'd516; // OOP
-
-   // Pack the event selects into a vector for genvar
-   assign mhpme_vec[0][9:0] = mhpme3[9:0];
-   assign mhpme_vec[1][9:0] = mhpme4[9:0];
-   assign mhpme_vec[2][9:0] = mhpme5[9:0];
-   assign mhpme_vec[3][9:0] = mhpme6[9:0];
-
-   // only consider committed itypes
-   //logic [3:0] pmu_i0_itype_qual;
-   assign pmu_i0_itype_qual[3:0] = dec_tlu_packet_r.pmu_i0_itype[3:0] & {4{tlu_i0_commit_cmt}};
-
-   // Generate the muxed incs for all counters based on event type
-   for (genvar i=0 ; i < 4; i++) begin
-      assign mhpmc_inc_r[i] =  {{~mcountinhibit[i+3]}} &
-           (
-             ({1{(mhpme_vec[i][9:0] == MHPME_CLK_ACTIVE      )}} & 1'b1) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_HIT      )}} & {ifu_pmu_ic_hit}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_ICACHE_MISS     )}} & {ifu_pmu_ic_miss}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT     )}} & {tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_16B )}} & {tlu_i0_commit_cmt & ~exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_COMMIT_32B )}} & {tlu_i0_commit_cmt &  exu_pmu_i0_pc4 & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALIGNED    )}} & ifu_pmu_instr_aligned)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DECODED    )}} & dec_pmu_instr_decoded)  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & {dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MUL        )}} & {(pmu_i0_itype_qual == MUL)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_DIV        )}} & {dec_tlu_packet_r.pmu_divide  & tlu_i0_commit_cmt & ~illegal_r})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_LOAD       )}} & {(pmu_i0_itype_qual == LOAD)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_STORE      )}} & {(pmu_i0_itype_qual == STORE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MALOAD     )}} & {(pmu_i0_itype_qual == LOAD)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MASTORE    )}} & {(pmu_i0_itype_qual == STORE)} &
-                                                                      {1{dec_tlu_packet_r.pmu_lsu_misaligned}})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ALU        )}} & {(pmu_i0_itype_qual == ALU)})     |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRREAD    )}} & {(pmu_i0_itype_qual == CSRREAD)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRWRITE   )}} & {(pmu_i0_itype_qual == CSRWRITE)})|
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_CSRRW      )}} & {(pmu_i0_itype_qual == CSRRW)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_EBREAK     )}} & {(pmu_i0_itype_qual == EBREAK)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_ECALL      )}} & {(pmu_i0_itype_qual == ECALL)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCE      )}} & {(pmu_i0_itype_qual == FENCE)})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_FENCEI     )}} & {(pmu_i0_itype_qual == FENCEI)})  |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_MRET       )}} & {(pmu_i0_itype_qual == MRET)})    |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BRANCH     )}} & {
-                                                                     ((pmu_i0_itype_qual == CONDBR) | (pmu_i0_itype_qual == JAL))})   |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_MP       )}} & {exu_pmu_i0_br_misp & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_TAKEN    )}} & {exu_pmu_i0_br_ataken & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BRANCH_NOTP     )}} & {dec_tlu_packet_r.pmu_i0_br_unpred & tlu_i0_commit_cmt & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FETCH_STALL     )}} & { ifu_pmu_fetch_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DECODE_STALL    )}} & { dec_pmu_decode_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_POSTSYNC_STALL  )}} & {dec_pmu_postsync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_PRESYNC_STALL   )}} & {dec_pmu_presync_stall}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_LSU_SB_WB_STALL )}} & { lsu_store_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_DCCM_STALL  )}} & { dma_dccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_ICCM_STALL  )}} & { dma_iccm_stall_any}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXC_TAKEN       )}} & { (i0_exception_valid_r | i0_trigger_hit_r | lsu_exc_valid_r)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_TIMER_INT_TAKEN )}} & { take_timer_int | take_int_timer0_int | take_int_timer1_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_EXT_INT_TAKEN   )}} & { take_ext_int}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_FLUSH_LOWER     )}} & { tlu_flush_lower_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_BR_ERROR        )}} & {(dec_tlu_br0_error_r | dec_tlu_br0_start_error_r) & rfpc_i0_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_TRANS      )}} & {ifu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_TRANS      )}} & {lsu_pmu_bus_trxn}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_MA_TRANS   )}} & {lsu_pmu_bus_misaligned}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_ERROR      )}} & {ifu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_ERROR      )}} & {lsu_pmu_bus_error}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_IBUS_STALL      )}} & {ifu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STALL      )}} & {lsu_pmu_bus_busy}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_DISABLED    )}} & {~mstatus[MSTATUS_MIE]}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INT_STALLED     )}} & {~mstatus[MSTATUS_MIE] & |(mip[5:0] & mie[5:0])}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_INST_BITMANIP     )}} & {(pmu_i0_itype_qual == BITMANIPU)}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_LOAD       )}} & {tlu_i0_commit_cmt & lsu_pmu_load_external_r & ~illegal_r}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DBUS_STORE      )}} & {tlu_i0_commit_cmt & lsu_pmu_store_external_r & ~illegal_r}) |
-             // These count even during sleep
-             ({1{(mhpme_vec[i][9:0] == MHPME_SLEEP_CYC       )}} & {dec_tlu_pmu_fw_halted}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_ALL    )}} & {dma_pmu_any_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_ALL   )}} & {dma_pmu_any_write}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_READ_DCCM   )}} & {dma_pmu_dccm_read}) |
-             ({1{(mhpme_vec[i][9:0] == MHPME_DMA_WRITE_DCCM  )}} & {dma_pmu_dccm_write})
-             );
-   end
-
-
-   if(pt.FAST_INTERRUPT_REDIRECT)
-   rvdffie #(31)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   take_ext_int_start,    take_ext_int_start_d1, take_ext_int_start_d2, ext_int_freeze,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    take_ext_int_start_d1, take_ext_int_start_d2, take_ext_int_start_d3, ext_int_freeze_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   else
-   rvdffie #(27)  mstatus_ff (.*, .clk(free_l2clk),
-                             .din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r,
-                                   mip_ns[5:0], mcyclel_cout & ~wr_mcycleh_r & mcyclel_cout_in,
-                                   minstret_enable, minstretl_cout_ns, fw_halted_ns,
-                                   meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted,
-                                   mstatus_ns[1:0]}),
-                             .dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1,
-                                    mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f,
-                                    fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f,
-                                    mhpmc_inc_r_d1[3:0], perfcnt_halted_d1,
-                                    mstatus[1:0]}));
-
-   assign perfcnt_halted = ((dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted);
-   assign perfcnt_during_sleep[3:0] = {4{~(dec_tlu_dbg_halted & dcsr[DCSR_STOPC])}} & {mhpme_vec[3][9],mhpme_vec[2][9],mhpme_vec[1][9],mhpme_vec[0][9]};
-
-   assign dec_tlu_perfcnt0 = mhpmc_inc_r_d1[0] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[0]);
-   assign dec_tlu_perfcnt1 = mhpmc_inc_r_d1[1] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[1]);
-   assign dec_tlu_perfcnt2 = mhpmc_inc_r_d1[2] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[2]);
-   assign dec_tlu_perfcnt3 = mhpmc_inc_r_d1[3] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[3]);
-
-   // ----------------------------------------------------------------------
-   // MHPMC3H(RW), MHPMC3(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 3
-   localparam MHPMC3        = 12'hB03;
-   localparam MHPMC3H       = 12'hB83;
-
-   assign mhpmc3_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3);
-   assign mhpmc3_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[0]) & (|(mhpmc_inc_r[0]));
-   assign mhpmc3_wr_en  = mhpmc3_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3_incr[63:0] = {mhpmc3h[31:0],mhpmc3[31:0]} + {63'b0, 1'b1};
-   assign mhpmc3_ns[31:0] = mhpmc3_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[31:0];
-   rvdffe #(32)  mhpmc3_ff (.*, .clk(free_l2clk), .en(mhpmc3_wr_en), .din(mhpmc3_ns[31:0]), .dout(mhpmc3[31:0]));
-
-   assign mhpmc3h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3H);
-   assign mhpmc3h_wr_en  = mhpmc3h_wr_en0 | mhpmc3_wr_en1;
-   assign mhpmc3h_ns[31:0] = mhpmc3h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[63:32];
-   rvdffe #(32)  mhpmc3h_ff (.*, .clk(free_l2clk), .en(mhpmc3h_wr_en), .din(mhpmc3h_ns[31:0]), .dout(mhpmc3h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC4H(RW), MHPMC4(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 4
-   localparam MHPMC4        = 12'hB04;
-   localparam MHPMC4H       = 12'hB84;
-
-   assign mhpmc4_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4);
-   assign mhpmc4_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[1]) & (|(mhpmc_inc_r[1]));
-   assign mhpmc4_wr_en  = mhpmc4_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4_incr[63:0] = {mhpmc4h[31:0],mhpmc4[31:0]} + {63'b0,1'b1};
-   assign mhpmc4_ns[31:0] = mhpmc4_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[31:0];
-   rvdffe #(32)  mhpmc4_ff (.*, .clk(free_l2clk), .en(mhpmc4_wr_en), .din(mhpmc4_ns[31:0]), .dout(mhpmc4[31:0]));
-
-   assign mhpmc4h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4H);
-   assign mhpmc4h_wr_en  = mhpmc4h_wr_en0 | mhpmc4_wr_en1;
-   assign mhpmc4h_ns[31:0] = mhpmc4h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[63:32];
-   rvdffe #(32)  mhpmc4h_ff (.*, .clk(free_l2clk), .en(mhpmc4h_wr_en), .din(mhpmc4h_ns[31:0]), .dout(mhpmc4h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC5H(RW), MHPMC5(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 5
-   localparam MHPMC5        = 12'hB05;
-   localparam MHPMC5H       = 12'hB85;
-
-   assign mhpmc5_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5);
-   assign mhpmc5_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[2]) & (|(mhpmc_inc_r[2]));
-   assign mhpmc5_wr_en  = mhpmc5_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5_incr[63:0] = {mhpmc5h[31:0],mhpmc5[31:0]} + {63'b0,1'b1};
-   assign mhpmc5_ns[31:0] = mhpmc5_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[31:0];
-   rvdffe #(32)  mhpmc5_ff (.*, .clk(free_l2clk), .en(mhpmc5_wr_en), .din(mhpmc5_ns[31:0]), .dout(mhpmc5[31:0]));
-
-   assign mhpmc5h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5H);
-   assign mhpmc5h_wr_en  = mhpmc5h_wr_en0 | mhpmc5_wr_en1;
-   assign mhpmc5h_ns[31:0] = mhpmc5h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[63:32];
-   rvdffe #(32)  mhpmc5h_ff (.*, .clk(free_l2clk), .en(mhpmc5h_wr_en), .din(mhpmc5h_ns[31:0]), .dout(mhpmc5h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPMC6H(RW), MHPMC6(RW)
-   // [63:32][31:0] : Hardware Performance Monitor Counter 6
-   localparam MHPMC6        = 12'hB06;
-   localparam MHPMC6H       = 12'hB86;
-
-   assign mhpmc6_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6);
-   assign mhpmc6_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[3]) & (|(mhpmc_inc_r[3]));
-   assign mhpmc6_wr_en  = mhpmc6_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6_incr[63:0] = {mhpmc6h[31:0],mhpmc6[31:0]} + {63'b0,1'b1};
-   assign mhpmc6_ns[31:0] = mhpmc6_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[31:0];
-   rvdffe #(32)  mhpmc6_ff (.*, .clk(free_l2clk), .en(mhpmc6_wr_en), .din(mhpmc6_ns[31:0]), .dout(mhpmc6[31:0]));
-
-   assign mhpmc6h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6H);
-   assign mhpmc6h_wr_en  = mhpmc6h_wr_en0 | mhpmc6_wr_en1;
-   assign mhpmc6h_ns[31:0] = mhpmc6h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[63:32];
-   rvdffe #(32)  mhpmc6h_ff (.*, .clk(free_l2clk), .en(mhpmc6h_wr_en), .din(mhpmc6h_ns[31:0]), .dout(mhpmc6h[31:0]));
-
-   // ----------------------------------------------------------------------
-   // MHPME3(RW)
-   // [9:0] : Hardware Performance Monitor Event 3
-   localparam MHPME3        = 12'h323;
-
-   // we only have events 0-56 with holes, 512-516, HPME* are WARL so zero otherwise.
-   assign zero_event_r = ( (dec_csr_wrdata_r[9:0] > 10'd516) |
-                           (|dec_csr_wrdata_r[31:10]) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd512) & (dec_csr_wrdata_r[9:0] > 10'd56)) |
-                           ((dec_csr_wrdata_r[9:0] < 10'd54) & (dec_csr_wrdata_r[9:0] > 10'd50)) |
-                           (dec_csr_wrdata_r[9:0] == 10'd29) |
-                           (dec_csr_wrdata_r[9:0] == 10'd33)
-                           );
-
-   assign event_r[9:0] = zero_event_r ? '0 : dec_csr_wrdata_r[9:0];
-
-   assign wr_mhpme3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME3);
-   rvdffe #(10)  mhpme3_ff (.*, .en(wr_mhpme3_r), .din(event_r[9:0]), .dout(mhpme3[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME4(RW)
-   // [9:0] : Hardware Performance Monitor Event 4
-   localparam MHPME4        = 12'h324;
-
-   assign wr_mhpme4_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME4);
-   rvdffe #(10)  mhpme4_ff (.*, .en(wr_mhpme4_r), .din(event_r[9:0]), .dout(mhpme4[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME5(RW)
-   // [9:0] : Hardware Performance Monitor Event 5
-   localparam MHPME5        = 12'h325;
-
-   assign wr_mhpme5_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME5);
-   rvdffe #(10)  mhpme5_ff (.*, .en(wr_mhpme5_r), .din(event_r[9:0]), .dout(mhpme5[9:0]));
-   // ----------------------------------------------------------------------
-   // MHPME6(RW)
-   // [9:0] : Hardware Performance Monitor Event 6
-   localparam MHPME6        = 12'h326;
-
-   assign wr_mhpme6_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME6);
-   rvdffe #(10)  mhpme6_ff (.*, .en(wr_mhpme6_r), .din(event_r[9:0]), .dout(mhpme6[9:0]));
-
-   //----------------------------------------------------------------------
-   // Performance Monitor Counters section ends
-   //----------------------------------------------------------------------
-   // ----------------------------------------------------------------------
-
-   // MCOUNTINHIBIT(RW)
-   // [31:7] : Reserved, read 0x0
-   // [6]    : HPM6 disable
-   // [5]    : HPM5 disable
-   // [4]    : HPM4 disable
-   // [3]    : HPM3 disable
-   // [2]    : MINSTRET disable
-   // [1]    : reserved, read 0x0
-   // [0]    : MCYCLE disable
-
-   localparam MCOUNTINHIBIT             = 12'h320;
-
-   assign wr_mcountinhibit_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCOUNTINHIBIT);
-   rvdffs #(6)  mcountinhibit_ff (.*, .clk(csr_wr_clk), .en(wr_mcountinhibit_r), .din({dec_csr_wrdata_r[6:2], dec_csr_wrdata_r[0]}), .dout({mcountinhibit[6:2], mcountinhibit[0]}));
-   assign mcountinhibit[1] = 1'b0;
-
-   //--------------------------------------------------------------------------------
-   // trace
-   //--------------------------------------------------------------------------------
-   logic [4:0] dec_tlu_exc_cause_wb1_raw, dec_tlu_exc_cause_wb2;
-   logic       dec_tlu_int_valid_wb1_raw, dec_tlu_int_valid_wb2;
-
-   assign {dec_tlu_i0_valid_wb1,
-           dec_tlu_i0_exc_valid_wb1,
-           dec_tlu_exc_cause_wb1_raw[4:0],
-           dec_tlu_int_valid_wb1_raw}  =   {8{~dec_tlu_trace_disable}} & {i0_valid_wb,
-                                                                          i0_exception_valid_r_d1 | lsu_i0_exc_r_d1 | (trigger_hit_r_d1 & ~trigger_hit_dmode_r_d1),
-                                                                          exc_cause_wb[4:0],
-                                                                          interrupt_valid_r_d1};
-
-
-
-  // skid buffer for ints, reduces trace port count by 1
-   rvdffie #(.WIDTH(6), .OVERRIDE(1))  traceskidff (.*,  .clk(clk),
-                        .din ({dec_tlu_exc_cause_wb1_raw[4:0],
-                               dec_tlu_int_valid_wb1_raw}),
-                        .dout({dec_tlu_exc_cause_wb2[4:0],
-                               dec_tlu_int_valid_wb2}));
-   //skid for ints
-   assign dec_tlu_exc_cause_wb1[4:0] =  dec_tlu_int_valid_wb2 ? dec_tlu_exc_cause_wb2[4:0] : dec_tlu_exc_cause_wb1_raw[4:0];
-   assign dec_tlu_int_valid_wb1 = dec_tlu_int_valid_wb2;
-
-   assign dec_tlu_mtval_wb1  = mtval[31:0];
-
-   // end trace
-   //--------------------------------------------------------------------------------
-
-
-   // ----------------------------------------------------------------------
-   // CSR read mux
-   // ----------------------------------------------------------------------
-
-// file "csrdecode" is human readable file that has all of the CSR decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "csrdecode" except legal equation:
-
-// 1) coredecode -in csrdecode > corecsrdecode.e
-
-// 2) espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations
-
-// to generate the legal CSR equation below:
-
-// 1) coredecode -in csrdecode -legal > csrlegal.e
-
-// 2) espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-// coredecode -in csrdecode > corecsrdecode.e; espresso -Dso -oeqntott corecsrdecode.e | addassign  > csrequations; coredecode -in csrdecode -legal > csrlegal.e; espresso -Dso -oeqntott csrlegal.e | addassign  > csrlegal_equation
-
-assign csr_misa = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mvendorid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_marchid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mimpid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mhartid = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mstatus = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtvec = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mip = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]);
-
-assign csr_mie = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcyclel = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]);
-
-assign csr_mcycleh = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_minstretl = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_minstreth = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscratch = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mepc = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mcause = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mscause = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_mtval = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mrac = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dmst = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_mdseac = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]);
-
-assign csr_meihap = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[3]);
-
-assign csr_meivt = (!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_meipt = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_meicurpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[2]);
-
-assign csr_meicidpl = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dcsr = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mcgc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdc = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dpc = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtsel = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata1 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mtdata2 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[1]);
-
-assign csr_mhpmc3 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5 = (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6 = (!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc3h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc4h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc5h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpmc6h = (dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme3 = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme4 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme5 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_mhpme6 = (dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mcountinhibit = (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitctl1 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[0]);
-
-assign csr_mitb1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt0 = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mitcnt1 = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_mpmc = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign csr_meicpct = (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_micect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_miccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]);
-
-assign csr_mdccmect = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdht = (dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_mfdhs = (dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]);
-
-assign csr_dicawics = (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]);
-
-assign csr_dicad0h = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]);
-
-assign csr_dicad0 = (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign csr_dicad1 = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]);
-
-assign csr_dicago = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]);
-
-assign presync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign postsync = (dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[10]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[1]) | (dec_csr_rdaddr_d[10]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]);
-
-assign legal = (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (
-    dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]
-    &dec_csr_rdaddr_d[0]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[2]) | (dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[1]&dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]
-    &!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]
-    &!dec_csr_rdaddr_d[0]) | (dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[3]&dec_csr_rdaddr_d[1]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]&dec_csr_rdaddr_d[6]
-    &!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]&dec_csr_rdaddr_d[3]
-    &!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]&dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&dec_csr_rdaddr_d[7]
-    &!dec_csr_rdaddr_d[6]&dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]&!dec_csr_rdaddr_d[0]) | (
-    dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]
-    &dec_csr_rdaddr_d[1]) | (!dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]
-    &dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]
-    &dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[2]) | (!dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[5]&!dec_csr_rdaddr_d[4]
-    &!dec_csr_rdaddr_d[3]&!dec_csr_rdaddr_d[1]&!dec_csr_rdaddr_d[0]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[3]) | (
-    !dec_csr_rdaddr_d[11]&!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]
-    &dec_csr_rdaddr_d[8]&!dec_csr_rdaddr_d[7]&!dec_csr_rdaddr_d[6]
-    &dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]) | (dec_csr_rdaddr_d[11]
-    &!dec_csr_rdaddr_d[10]&dec_csr_rdaddr_d[9]&dec_csr_rdaddr_d[8]
-    &!dec_csr_rdaddr_d[6]&!dec_csr_rdaddr_d[5]&dec_csr_rdaddr_d[4]);
-
-
-
-assign dec_tlu_presync_d = presync & dec_csr_any_unq_d & ~dec_csr_wen_unq_d;
-assign dec_tlu_postsync_d = postsync & dec_csr_any_unq_d;
-
-   // allow individual configuration of these features
-assign conditionally_illegal = ((csr_mitcnt0 | csr_mitcnt1 | csr_mitb0 | csr_mitb1 | csr_mitctl0 | csr_mitctl1) & !pt.TIMER_LEGAL_EN);
-
-assign valid_csr = ( legal & (~(csr_dcsr | csr_dpc | csr_dmst | csr_dicawics | csr_dicad0 | csr_dicad0h | csr_dicad1 | csr_dicago) | dbg_tlu_halted_f)
-                     & ~fast_int_meicpct & ~conditionally_illegal);
-
-assign dec_csr_legal_d = ( dec_csr_any_unq_d &
-                           valid_csr &          // of a valid CSR
-                           ~(dec_csr_wen_unq_d & (csr_mvendorid | csr_marchid | csr_mimpid | csr_mhartid | csr_mdseac | csr_meihap)) // that's not a write to a RO CSR
-                           );
-   // CSR read mux
-assign dec_csr_rddata_d[31:0] = ( ({32{csr_misa}}      & 32'h40201104) |
-                                  ({32{csr_mvendorid}} & 32'h00000045) |
-                                  ({32{csr_marchid}}   & 32'h00000010) |
-                                  ({32{csr_mimpid}}    & 32'h3) |
-                                  ({32{csr_mhartid}}   & {core_id[31:4], 4'b0}) |
-                                  ({32{csr_mstatus}}   & {{15{1'b0}}, 2'b01, 2'b00, 2'b11, 3'b0, mstatus[1], 3'b0, mstatus[0], 3'b0}) |
-                                  ({32{csr_mtvec}}     & {mtvec[30:1], 1'b0, mtvec[0]}) |
-                                  ({32{csr_mip}}       & {1'b0, mip[5:3], 16'b0, mip[2], 3'b0, mip[1], 3'b0, mip[0], 3'b0}) |
-                                  ({32{csr_mie}}       & {1'b0, mie[5:3], 16'b0, mie[2], 3'b0, mie[1], 3'b0, mie[0], 3'b0}) |
-                                  ({32{csr_mcyclel}}   & mcyclel[31:0]) |
-                                  ({32{csr_mcycleh}}   & mcycleh_inc[31:0]) |
-                                  ({32{csr_minstretl}} & minstretl_read[31:0]) |
-                                  ({32{csr_minstreth}} & minstreth_read[31:0]) |
-                                  ({32{csr_mscratch}}  & mscratch[31:0]) |
-                                  ({32{csr_mepc}}      & {mepc[31:1], 1'b0}) |
-                                  ({32{csr_mcause}}    & mcause[31:0]) |
-                                  ({32{csr_mscause}}   & {28'b0, mscause[3:0]}) |
-                                  ({32{csr_mtval}}     & mtval[31:0]) |
-                                  ({32{csr_mrac}}      & mrac[31:0]) |
-                                  ({32{csr_mdseac}}    & mdseac[31:0]) |
-                                  ({32{csr_meivt}}     & {meivt[31:10], 10'b0}) |
-                                  ({32{csr_meihap}}    & {meivt[31:10], meihap[9:2], 2'b0}) |
-                                  ({32{csr_meicurpl}}  & {28'b0, meicurpl[3:0]}) |
-                                  ({32{csr_meicidpl}}  & {28'b0, meicidpl[3:0]}) |
-                                  ({32{csr_meipt}}     & {28'b0, meipt[3:0]}) |
-                                  ({32{csr_mcgc}}      & {22'b0, mcgc[9:0]}) |
-                                  ({32{csr_mfdc}}      & {13'b0, mfdc[18:0]}) |
-                                  ({32{csr_dcsr}}      & {16'h4000, dcsr[15:2], 2'b11}) |
-                                  ({32{csr_dpc}}       & {dpc[31:1], 1'b0}) |
-                                  ({32{csr_dicad0}}    & dicad0[31:0]) |
-                                  ({32{csr_dicad0h}}   & dicad0h[31:0]) |
-                                  ({32{csr_dicad1}}    & dicad1[31:0]) |
-                                  ({32{csr_dicawics}}  & {7'b0, dicawics[16], 2'b0, dicawics[15:14], 3'b0, dicawics[13:0], 3'b0}) |
-                                  ({32{csr_mtsel}}     & {30'b0, mtsel[1:0]}) |
-                                  ({32{csr_mtdata1}}   & {mtdata1_tsel_out[31:0]}) |
-                                  ({32{csr_mtdata2}}   & {mtdata2_tsel_out[31:0]}) |
-                                  ({32{csr_micect}}    & {micect[31:0]}) |
-                                  ({32{csr_miccmect}}  & {miccmect[31:0]}) |
-                                  ({32{csr_mdccmect}}  & {mdccmect[31:0]}) |
-                                  ({32{csr_mhpmc3}}    & mhpmc3[31:0]) |
-                                  ({32{csr_mhpmc4}}    & mhpmc4[31:0]) |
-                                  ({32{csr_mhpmc5}}    & mhpmc5[31:0]) |
-                                  ({32{csr_mhpmc6}}    & mhpmc6[31:0]) |
-                                  ({32{csr_mhpmc3h}}   & mhpmc3h[31:0]) |
-                                  ({32{csr_mhpmc4h}}   & mhpmc4h[31:0]) |
-                                  ({32{csr_mhpmc5h}}   & mhpmc5h[31:0]) |
-                                  ({32{csr_mhpmc6h}}   & mhpmc6h[31:0]) |
-                                  ({32{csr_mfdht}}     & {26'b0, mfdht[5:0]}) |
-                                  ({32{csr_mfdhs}}     & {30'b0, mfdhs[1:0]}) |
-                                  ({32{csr_mhpme3}}    & {22'b0,mhpme3[9:0]}) |
-                                  ({32{csr_mhpme4}}    & {22'b0,mhpme4[9:0]}) |
-                                  ({32{csr_mhpme5}}    & {22'b0,mhpme5[9:0]}) |
-                                  ({32{csr_mhpme6}}    & {22'b0,mhpme6[9:0]}) |
-                                  ({32{csr_mcountinhibit}} & {25'b0, mcountinhibit[6:0]}) |
-                                  ({32{csr_mpmc}}      & {30'b0, mpmc[1], 1'b0}) |
-                                  ({32{dec_timer_read_d}} & dec_timer_rddata_d[31:0])
-                                  );
-
-
-
-endmodule // eb1_dec_tlu_ctl
-
-module eb1_dec_timer_ctl 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,
-   input logic free_l2clk,
-   input logic csr_wr_clk,
-   input logic rst_l,
-   input logic        dec_csr_wen_r_mod,      // csr write enable at wb
-   input logic [11:0] dec_csr_wraddr_r,      // write address for csr
-   input logic [31:0] dec_csr_wrdata_r,   // csr write data at wb
-
-   input logic csr_mitctl0,
-   input logic csr_mitctl1,
-   input logic csr_mitb0,
-   input logic csr_mitb1,
-   input logic csr_mitcnt0,
-   input logic csr_mitcnt1,
-
-
-   input logic dec_pause_state, // Paused
-   input logic dec_tlu_pmu_fw_halted, // pmu/fw halted
-   input logic internal_dbg_halt_timers, // debug halted
-
-   output logic [31:0] dec_timer_rddata_d, // timer CSR read data
-   output logic        dec_timer_read_d, // timer CSR address match
-   output logic        dec_timer_t0_pulse, // timer0 int
-   output logic        dec_timer_t1_pulse, // timer1 int
-
-   input  logic        scan_mode
-   );
-   localparam MITCTL_ENABLE             = 0;
-   localparam MITCTL_ENABLE_HALTED      = 1;
-   localparam MITCTL_ENABLE_PAUSED      = 2;
-
-   logic [31:0] mitcnt0_ns, mitcnt0, mitcnt1_ns, mitcnt1, mitb0, mitb1, mitb0_b, mitb1_b, mitcnt0_inc, mitcnt1_inc;
-   logic [2:0] mitctl0_ns, mitctl0;
-   logic [3:0] mitctl1_ns, mitctl1;
-   logic wr_mitcnt0_r, wr_mitcnt1_r, wr_mitb0_r, wr_mitb1_r, wr_mitctl0_r, wr_mitctl1_r;
-   logic mitcnt0_inc_ok, mitcnt1_inc_ok;
-   logic mitcnt0_inc_cout, mitcnt1_inc_cout;
- logic mit0_match_ns;
- logic mit1_match_ns;
- logic mitctl0_0_b_ns;
- logic mitctl0_0_b;
- logic mitctl1_0_b_ns;
- logic mitctl1_0_b;
-
-   assign mit0_match_ns = (mitcnt0[31:0] >= mitb0[31:0]);
-   assign mit1_match_ns = (mitcnt1[31:0] >= mitb1[31:0]);
-
-   assign dec_timer_t0_pulse = mit0_match_ns;
-   assign dec_timer_t1_pulse = mit1_match_ns;
-   // ----------------------------------------------------------------------
-   // MITCNT0 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT0       = 12'h7d2;
-
-   assign wr_mitcnt0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT0);
-
-   assign mitcnt0_inc_ok = mitctl0[MITCTL_ENABLE] & (~dec_pause_state | mitctl0[MITCTL_ENABLE_PAUSED]) & (~dec_tlu_pmu_fw_halted | mitctl0[MITCTL_ENABLE_HALTED]) & ~internal_dbg_halt_timers;
-
-   assign {mitcnt0_inc_cout, mitcnt0_inc[7:0]} = mitcnt0[7:0] + {7'b0, 1'b1};
-   assign mitcnt0_inc[31:8] = mitcnt0[31:8] + {23'b0, mitcnt0_inc_cout};
-
-   assign mitcnt0_ns[31:0]  = wr_mitcnt0_r ? dec_csr_wrdata_r[31:0] : mit0_match_ns ? 'b0 : mitcnt0_inc[31:0];
-
-   rvdffe #(24) mitcnt0_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | (mitcnt0_inc_ok & mitcnt0_inc_cout) | mit0_match_ns), .din(mitcnt0_ns[31:8]), .dout(mitcnt0[31:8]));
-   rvdffe #(8)  mitcnt0_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt0_r | mitcnt0_inc_ok | mit0_match_ns),                       .din(mitcnt0_ns[7:0]), .dout(mitcnt0[7:0]));
-
-   // ----------------------------------------------------------------------
-   // MITCNT1 (RW)
-   // [31:0] : Internal Timer Counter 0
-
-   localparam MITCNT1       = 12'h7d5;
-
-   assign wr_mitcnt1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT1);
-
-   assign mitcnt1_inc_ok = mitctl1[MITCTL_ENABLE] &
-                           (~dec_pause_state | mitctl1[MITCTL_ENABLE_PAUSED]) &
-                           (~dec_tlu_pmu_fw_halted | mitctl1[MITCTL_ENABLE_HALTED]) &
-                           ~internal_dbg_halt_timers &
-                           (~mitctl1[3] | mit0_match_ns);
-
-   // only inc MITCNT1 if not cascaded with 0, or if 0 overflows
-   assign {mitcnt1_inc_cout, mitcnt1_inc[7:0]} = mitcnt1[7:0] + {7'b0, 1'b1};
-   assign mitcnt1_inc[31:8] = mitcnt1[31:8] + {23'b0, mitcnt1_inc_cout};
-
-   assign mitcnt1_ns[31:0]  = wr_mitcnt1_r ? dec_csr_wrdata_r[31:0] : mit1_match_ns ? 'b0 : mitcnt1_inc[31:0];
-
-   rvdffe #(24) mitcnt1_ffb      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | (mitcnt1_inc_ok & mitcnt1_inc_cout) | mit1_match_ns), .din(mitcnt1_ns[31:8]), .dout(mitcnt1[31:8]));
-   rvdffe #(8)  mitcnt1_ffa      (.*, .clk(free_l2clk), .en(wr_mitcnt1_r | mitcnt1_inc_ok | mit1_match_ns),                       .din(mitcnt1_ns[7:0]), .dout(mitcnt1[7:0]));
-
-
-   // ----------------------------------------------------------------------
-   // MITB0 (RW)
-   // [31:0] : Internal Timer Bound 0
-
-   localparam MITB0         = 12'h7d3;
-
-   assign wr_mitb0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB0);
-
-   rvdffe #(32) mitb0_ff      (.*, .en(wr_mitb0_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb0_b[31:0]));
-   assign mitb0[31:0] = ~mitb0_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITB1 (RW)
-   // [31:0] : Internal Timer Bound 1
-
-   localparam MITB1         = 12'h7d6;
-
-   assign wr_mitb1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB1);
-
-   rvdffe #(32) mitb1_ff      (.*, .en(wr_mitb1_r), .din(~dec_csr_wrdata_r[31:0]), .dout(mitb1_b[31:0]));
-   assign mitb1[31:0] = ~mitb1_b[31:0];
-
-   // ----------------------------------------------------------------------
-   // MITCTL0 (RW) Internal Timer Ctl 0
-   // [31:3] : Reserved, reads 0x0
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL0       = 12'h7d4;
-
-   assign wr_mitctl0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL0);
-   assign mitctl0_ns[2:0] = wr_mitctl0_r ? {dec_csr_wrdata_r[2:0]} : {mitctl0[2:0]};
-
-   assign mitctl0_0_b_ns = ~mitctl0_ns[0];
-   rvdffs #(3) mitctl0_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl0_r), .din({mitctl0_ns[2:1], mitctl0_0_b_ns}), .dout({mitctl0[2:1], mitctl0_0_b}));
-   assign mitctl0[0] = ~mitctl0_0_b;
-
-   // ----------------------------------------------------------------------
-   // MITCTL1 (RW) Internal Timer Ctl 1
-   // [31:4] : Reserved, reads 0x0
-   // [3]    : Cascade
-   // [2]    : Enable while PAUSEd
-   // [1]    : Enable while HALTed
-   // [0]    : Enable (resets to 0x1)
-
-   localparam MITCTL1       = 12'h7d7;
-
-   assign wr_mitctl1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL1);
-   assign mitctl1_ns[3:0] = wr_mitctl1_r ? {dec_csr_wrdata_r[3:0]} : {mitctl1[3:0]};
-
-   assign mitctl1_0_b_ns = ~mitctl1_ns[0];
-   rvdffs #(4) mitctl1_ff      (.*, .clk(csr_wr_clk), .en(wr_mitctl1_r), .din({mitctl1_ns[3:1], mitctl1_0_b_ns}), .dout({mitctl1[3:1], mitctl1_0_b}));
-   assign mitctl1[0] = ~mitctl1_0_b;
-   assign dec_timer_read_d = csr_mitcnt1 | csr_mitcnt0 | csr_mitb1 | csr_mitb0 | csr_mitctl0 | csr_mitctl1;
-   assign dec_timer_rddata_d[31:0] = ( ({32{csr_mitcnt0}}      & mitcnt0[31:0]) |
-                                       ({32{csr_mitcnt1}}      & mitcnt1[31:0]) |
-                                       ({32{csr_mitb0}}        & mitb0[31:0]) |
-                                       ({32{csr_mitb1}}        & mitb1[31:0]) |
-                                       ({32{csr_mitctl0}}      & {29'b0, mitctl0[2:0]}) |
-                                       ({32{csr_mitctl1}}      & {28'b0, mitctl1[3:0]})
-                                       );
-
-
-endmodule // dec_timer_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DEC Trigger Logic
-// Comments:
-//
-//********************************************************************************
-module eb1_dec_trigger
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,           // Packet from tlu. 'select':0-pc,1-Opcode  'Execute' needs to be set for dec triggers to fire. 'match'-1 do mask, 0: full match
-   input logic [31:1]  dec_i0_pc_d,                          // i0 pc
-
-   output logic [3:0] dec_i0_trigger_match_d                 // Trigger match
-);
-
-   logic [3:0][31:0]  dec_i0_match_data;
-   logic [3:0]        dec_i0_trigger_data_match;
-
-   for (genvar i=0; i<4; i++) begin
-      assign dec_i0_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select & trigger_pkt_any[i].execute}} & {dec_i0_pc_d[31:1], trigger_pkt_any[i].tdata2[0]});      // select=0; do a PC match
-
-      rvmaskandmatch trigger_i0_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(dec_i0_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(dec_i0_trigger_data_match[i]));
-
-      assign dec_i0_trigger_match_d[i] = trigger_pkt_any[i].execute & trigger_pkt_any[i].m & dec_i0_trigger_data_match[i];
-   end
-
-endmodule // eb1_dec_trigger
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic          clk,                                           // Top level clock
-   input logic          rst_l,                                         // Reset
-   input logic          scan_mode,                                     // Scan control
-
-   input logic  [1:0]   dec_data_en,                                   // Clock enable {x,r}, one cycle pulse
-   input logic  [1:0]   dec_ctl_en,                                    // Clock enable {x,r}, two cycle pulse
-   input logic  [31:0]  dbg_cmd_wrdata,                                // Debug data   to primary I0 RS1
-   input eb1_alu_pkt_t i0_ap,                                         // DEC alu {valid,predecodes}
-
-   input logic          dec_debug_wdata_rs1_d,                         // Debug select to primary I0 RS1
-
-   input eb1_predict_pkt_t dec_i0_predict_p_d,                        // DEC branch predict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] i0_predict_fghr_d,                // DEC predict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] i0_predict_index_d,     // DEC predict index
-   input logic [pt.BTB_BTAG_SIZE-1:0] i0_predict_btag_d,               // DEC predict branch tag
-
-   input logic  [31:0]  lsu_result_m,                                  // Load result M-stage
-   input logic  [31:0]  lsu_nonblock_load_data,                        // nonblock load data
-   input logic          dec_i0_rs1_en_d,                               // Qualify GPR RS1 data
-   input logic          dec_i0_rs2_en_d,                               // Qualify GPR RS2 data
-   input logic  [31:0]  gpr_i0_rs1_d,                                  // DEC data gpr
-   input logic  [31:0]  gpr_i0_rs2_d,                                  // DEC data gpr
-   input logic  [31:0]  dec_i0_immed_d,                                // DEC data immediate
-   input logic  [31:0]  dec_i0_result_r,                               // DEC result in R-stage
-   input logic  [12:1]  dec_i0_br_immed_d,                             // Branch immediate
-   input logic          dec_i0_alu_decode_d,                           // Valid to X-stage ALU
-   input logic          dec_i0_branch_d,                               // Branch in D-stage
-   input logic          dec_i0_select_pc_d,                            // PC select to RS1
-   input logic  [31:1]  dec_i0_pc_d,                                   // Instruction PC
-   input logic  [3:0]   dec_i0_rs1_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic  [3:0]   dec_i0_rs2_bypass_en_d,                        // DEC bypass select  1 - X-stage, 0 - dec bypass data
-   input logic          dec_csr_ren_d,                                 // CSR read select
-   input logic  [31:0]  dec_csr_rddata_d,                              // CSR read data
-
-   input logic          dec_qual_lsu_d,                                // LSU instruction at D.  Use to quiet LSU operands
-   input eb1_mul_pkt_t mul_p,                                         // DEC {valid, operand signs, low, operand bypass}
-   input eb1_div_pkt_t div_p,                                         // DEC {valid, unsigned, rem}
-   input logic          dec_div_cancel,                                // Cancel the divide operation
-
-   input logic  [31:1]  pred_correct_npc_x,                            // DEC NPC for correctly predicted branch
-
-   input logic          dec_tlu_flush_lower_r,                         // Flush divide and secondary ALUs
-   input logic  [31:1]  dec_tlu_flush_path_r,                          // Redirect target
-
-
-   input logic         dec_extint_stall,                               // External stall mux select
-   input logic [31:2]  dec_tlu_meihap,                                 // External stall mux data
-
-
-   output logic [31:0]  exu_lsu_rs1_d,                                 // LSU operand
-   output logic [31:0]  exu_lsu_rs2_d,                                 // LSU operand
-
-   output logic         exu_flush_final,                               // Pipe is being flushed this cycle
-   output logic [31:1]  exu_flush_path_final,                          // Target for the oldest flush source
-
-   output logic [31:0]  exu_i0_result_x,                               // Primary ALU result to DEC
-   output logic [31:1]  exu_i0_pc_x,                                   // Primary PC  result to DEC
-   output logic [31:0]  exu_csr_rs1_x,                                 // RS1 source for a CSR instruction
-
-   output logic [31:1]  exu_npc_r,                                     // Divide NPC
-   output logic [1:0]   exu_i0_br_hist_r,                              // to DEC  I0 branch history
-   output logic         exu_i0_br_error_r,                             // to DEC  I0 branch error
-   output logic         exu_i0_br_start_error_r,                       // to DEC  I0 branch start error
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r,     // to DEC  I0 branch index
-   output logic         exu_i0_br_valid_r,                             // to DEC  I0 branch valid
-   output logic         exu_i0_br_mp_r,                                // to DEC  I0 branch mispredict
-   output logic         exu_i0_br_middle_r,                            // to DEC  I0 branch middle
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_i0_br_fghr_r,               // to DEC  I0 branch fghr
-   output logic         exu_i0_br_way_r,                               // to DEC  I0 branch way
-
-   output eb1_predict_pkt_t exu_mp_pkt,                               // Mispredict branch packet
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_eghr,                    // Mispredict global history
-   output logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   output logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-
-   output logic         exu_pmu_i0_br_misp,                            // to PMU - I0 E4 branch mispredict
-   output logic         exu_pmu_i0_br_ataken,                          // to PMU - I0 E4 taken
-   output logic         exu_pmu_i0_pc4,                                // to PMU - I0 E4 PC
-
-
-   output logic [31:0]  exu_div_result,                                // Divide result
-   output logic         exu_div_wren                                   // Divide write enable to GPR
-  );
-
-
-
-
-   logic [31:0]                i0_rs1_bypass_data_d;
-   logic [31:0]                i0_rs2_bypass_data_d;
-   logic                       i0_rs1_bypass_en_d;
-   logic                       i0_rs2_bypass_en_d;
-   logic [31:0]                i0_rs1_d,  i0_rs2_d;
-   logic [31:0]                muldiv_rs1_d;
-   logic [31:1]                pred_correct_npc_r;
-   logic                       i0_pred_correct_upper_r;
-   logic [31:1]                i0_flush_path_upper_r;
-   logic                       x_data_en, x_data_en_q1, x_data_en_q2, r_data_en, r_data_en_q2;
-   logic                       x_ctl_en,  r_ctl_en;
-
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_d_ns, ghr_d;
-   logic [pt.BHT_GHR_SIZE-1:0] ghr_x_ns, ghr_x;
-   logic                       i0_taken_d;
-   logic                       i0_taken_x;
-   logic                       i0_valid_d;
-   logic                       i0_valid_x;
-   logic [pt.BHT_GHR_SIZE-1:0] after_flush_eghr;
-
-   eb1_predict_pkt_t          final_predict_mp;
-   eb1_predict_pkt_t          i0_predict_newp_d;
-
-   logic                       flush_in_d;
-   logic [31:0]                alu_result_x;
-
-   logic                       mul_valid_x;
-   logic [31:0]                mul_result_x;
-
-   eb1_predict_pkt_t          i0_pp_r;
-
-   logic                       i0_flush_upper_d;
-   logic [31:1]                i0_flush_path_d;
-   eb1_predict_pkt_t          i0_predict_p_d;
-   logic                       i0_pred_correct_upper_d;
-
-   logic                       i0_flush_upper_x;
-   logic [31:1]                i0_flush_path_x;
-   eb1_predict_pkt_t          i0_predict_p_x;
-   logic                       i0_pred_correct_upper_x;
-   logic                       i0_branch_x;
-
-   localparam PREDPIPESIZE = pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1+pt.BHT_GHR_SIZE+pt.BTB_BTAG_SIZE;
-   logic [PREDPIPESIZE-1:0]    predpipe_d, predpipe_x, predpipe_r, final_predpipe_mp;
-
-
-
-
-   rvdffpcie #(31)                       i_flush_path_x_ff    (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_flush_path_d[31:1]         ),  .dout( i0_flush_path_x[31:1]      ) );
-   rvdffe #(32)                          i_csr_rs1_x_ff       (.*, .clk(clk),        .en ( x_data_en_q1  ),  .din ( i0_rs1_d[31:0]                ),  .dout( exu_csr_rs1_x[31:0]        ) );
-   rvdffppe #($bits(eb1_predict_pkt_t)) i_predictpacket_x_ff (.*, .clk(clk),        .en ( x_data_en     ),  .din ( i0_predict_p_d                ),  .dout( i0_predict_p_x             ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_x_ff      (.*, .clk(clk),        .en ( x_data_en_q2  ),  .din ( predpipe_d                    ),  .dout( predpipe_x                 ) );
-   rvdffe #(PREDPIPESIZE)                i_predpipe_r_ff      (.*, .clk(clk),        .en ( r_data_en_q2  ),  .din ( predpipe_x                    ),  .dout( predpipe_r                 ) );
-
-   rvdffe #(4+pt.BHT_GHR_SIZE)          i_x_ff               (.*, .clk(clk),        .en ( x_ctl_en      ),  .din ({i0_valid_d,i0_taken_d,i0_flush_upper_d,i0_pred_correct_upper_d,ghr_x_ns[pt.BHT_GHR_SIZE-1:0]} ),
-                                                                                                            .dout({i0_valid_x,i0_taken_x,i0_flush_upper_x,i0_pred_correct_upper_x,ghr_x[pt.BHT_GHR_SIZE-1:0]}    ) );
-
-   rvdffppe #($bits(eb1_predict_pkt_t)+1) i_r_ff0         (.*, .clk(clk),        .en ( r_ctl_en      ),  .din ({i0_pred_correct_upper_x, i0_predict_p_x}),
-                                                                                                          .dout({i0_pred_correct_upper_r, i0_pp_r       }) );
-
-   rvdffpcie #(31)                      i_flush_r_ff         (.*, .clk(clk),        .en ( r_data_en     ),  .din ( i0_flush_path_x[31:1]         ),  .dout( i0_flush_path_upper_r[31:1]) );
-   rvdffpcie #(31)                      i_npc_r_ff           (.*, .clk(clk),        .en ( r_data_en     ),  .din ( pred_correct_npc_x[31:1]      ),  .dout( pred_correct_npc_r[31:1]   ) );
-
-   rvdffie #(pt.BHT_GHR_SIZE+2,1)       i_misc_ff            (.*, .clk(clk),                                .din ({ghr_d_ns[pt.BHT_GHR_SIZE-1:0], mul_p.valid, dec_i0_branch_d}),
-                                                                                                            .dout({ghr_d[pt.BHT_GHR_SIZE-1:0]   , mul_valid_x, i0_branch_x}) );
-
-
-
-
-
-   assign predpipe_d[PREDPIPESIZE-1:0]
-                                   = {i0_predict_fghr_d, i0_predict_index_d, i0_predict_btag_d};
-
-
-   assign i0_rs1_bypass_en_d       = dec_i0_rs1_bypass_en_d[0] | dec_i0_rs1_bypass_en_d[1] | dec_i0_rs1_bypass_en_d[2] | dec_i0_rs1_bypass_en_d[3];
-   assign i0_rs2_bypass_en_d       = dec_i0_rs2_bypass_en_d[0] | dec_i0_rs2_bypass_en_d[1] | dec_i0_rs2_bypass_en_d[2] | dec_i0_rs2_bypass_en_d[3];
-
-   assign i0_rs1_bypass_data_d[31:0]=({32{dec_i0_rs1_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs1_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-   assign i0_rs2_bypass_data_d[31:0]=({32{dec_i0_rs2_bypass_en_d[0]}} & dec_i0_result_r[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[1]}} & lsu_result_m[31:0]          ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[2]}} & exu_i0_result_x[31:0]       ) |
-                                     ({32{dec_i0_rs2_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-
-
-   assign i0_rs1_d[31:0]           = ({32{ i0_rs1_bypass_en_d                                           }}             & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{~i0_rs1_bypass_en_d &  dec_i0_select_pc_d                     }}             & {dec_i0_pc_d[31:1],1'b0}  ) |    // for jal's
-                                     ({32{~i0_rs1_bypass_en_d &  dec_debug_wdata_rs1_d                  }}             & dbg_cmd_wrdata[31:0]      ) |
-                                     ({32{~i0_rs1_bypass_en_d & ~dec_debug_wdata_rs1_d & dec_i0_rs1_en_d}}             & gpr_i0_rs1_d[31:0]        );
-
-   assign i0_rs2_d[31:0]           = ({32{~i0_rs2_bypass_en_d & dec_i0_rs2_en_d}}                                      & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{~i0_rs2_bypass_en_d                  }}                                      & dec_i0_immed_d[31:0]      ) |
-                                     ({32{ i0_rs2_bypass_en_d                  }}                                      & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign exu_lsu_rs1_d[31:0]      = ({32{~i0_rs1_bypass_en_d & ~dec_extint_stall & dec_i0_rs1_en_d & dec_qual_lsu_d}} & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs1_bypass_data_d[31:0]) |
-                                     ({32{                       dec_extint_stall                   & dec_qual_lsu_d}} & {dec_tlu_meihap[31:2],2'b0});
-
-   assign exu_lsu_rs2_d[31:0]      = ({32{~i0_rs2_bypass_en_d & ~dec_extint_stall & dec_i0_rs2_en_d & dec_qual_lsu_d}} & gpr_i0_rs2_d[31:0]        ) |
-                                     ({32{ i0_rs2_bypass_en_d & ~dec_extint_stall                   & dec_qual_lsu_d}} & i0_rs2_bypass_data_d[31:0]);
-
-
-   assign muldiv_rs1_d[31:0]       = ({32{~i0_rs1_bypass_en_d & dec_i0_rs1_en_d}}                                      & gpr_i0_rs1_d[31:0]        ) |
-                                     ({32{ i0_rs1_bypass_en_d                  }}                                      & i0_rs1_bypass_data_d[31:0]);
-
-
-   assign x_data_en                =  dec_data_en[1];
-   assign x_data_en_q1             =  dec_data_en[1] & dec_csr_ren_d;
-   assign x_data_en_q2             =  dec_data_en[1] & dec_i0_branch_d;
-   assign r_data_en                =  dec_data_en[0];
-   assign r_data_en_q2             =  dec_data_en[0] & i0_branch_x;
-   assign x_ctl_en                 =  dec_ctl_en[1];
-   assign r_ctl_en                 =  dec_ctl_en[0];
-
-
-
-
-   eb1_exu_alu_ctl #(.pt(pt)) i_alu  (.*,
-                          .enable            ( x_data_en                   ),   // I
-                          .pp_in             ( i0_predict_newp_d           ),   // I
-                          .valid_in          ( dec_i0_alu_decode_d         ),   // I
-                          .flush_upper_x     ( i0_flush_upper_x            ),   // I
-                          .flush_lower_r     ( dec_tlu_flush_lower_r       ),   // I
-                          .a_in              ( i0_rs1_d[31:0]              ),   // I
-                          .b_in              ( i0_rs2_d[31:0]              ),   // I
-                          .pc_in             ( dec_i0_pc_d[31:1]           ),   // I
-                          .brimm_in          ( dec_i0_br_immed_d[12:1]     ),   // I
-                          .ap                ( i0_ap                       ),   // I
-                          .csr_ren_in        ( dec_csr_ren_d               ),   // I
-                          .csr_rddata_in     ( dec_csr_rddata_d[31:0]      ),   // I
-                          .result_ff         ( alu_result_x[31:0]          ),   // O
-                          .flush_upper_out   ( i0_flush_upper_d            ),   // O
-                          .flush_final_out   ( exu_flush_final             ),   // O
-                          .flush_path_out    ( i0_flush_path_d[31:1]       ),   // O
-                          .predict_p_out     ( i0_predict_p_d              ),   // O
-                          .pred_correct_out  ( i0_pred_correct_upper_d     ),   // O
-                          .pc_ff             ( exu_i0_pc_x[31:1]           ));  // O
-
-
-
-   eb1_exu_mul_ctl #(.pt(pt)) i_mul   (.*,
-                          .mul_p             ( mul_p              & {$bits(eb1_mul_pkt_t){mul_p.valid}} ),   // I
-                          .rs1_in            ( muldiv_rs1_d[31:0] & {32{mul_p.valid}}                    ),   // I
-                          .rs2_in            ( i0_rs2_d[31:0]     & {32{mul_p.valid}}                    ),   // I
-                          .result_x          ( mul_result_x[31:0]                                        ));  // O
-
-
-
-   eb1_exu_div_ctl #(.pt(pt)) i_div   (.*,
-                          .cancel            ( dec_div_cancel              ),   // I
-                          .dp                ( div_p                       ),   // I
-                          .dividend          ( muldiv_rs1_d[31:0]          ),   // I
-                          .divisor           ( i0_rs2_d[31:0]              ),   // I
-                          .finish_dly        ( exu_div_wren                ),   // O
-                          .out               ( exu_div_result[31:0]        ));  // O
-
-
-
-   assign exu_i0_result_x[31:0]    =  (mul_valid_x)  ?  mul_result_x[31:0]  :  alu_result_x[31:0];
-
-
-
-
-   always_comb begin
-      i0_predict_newp_d            =  dec_i0_predict_p_d;
-      i0_predict_newp_d.boffset    =  dec_i0_pc_d[1];  // from the start of inst
-   end
-
-
-   assign exu_pmu_i0_br_misp       =  i0_pp_r.misp;
-   assign exu_pmu_i0_br_ataken     =  i0_pp_r.ataken;
-   assign exu_pmu_i0_pc4           =  i0_pp_r.pc4;
-
-
-   assign i0_valid_d               =  i0_predict_p_d.valid  & dec_i0_alu_decode_d & ~dec_tlu_flush_lower_r;
-   assign i0_taken_d               = (i0_predict_p_d.ataken & dec_i0_alu_decode_d);
-
-if(pt.BTB_ENABLE==1) begin
-   // maintain GHR at D
-   assign ghr_d_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r &  i0_valid_d}} & {ghr_d[pt.BHT_GHR_SIZE-2:0], i0_taken_d}) |
-                                     ({pt.BHT_GHR_SIZE{~dec_tlu_flush_lower_r & ~i0_valid_d}} &  ghr_d[pt.BHT_GHR_SIZE-1:0]             ) |
-                                     ({pt.BHT_GHR_SIZE{ dec_tlu_flush_lower_r              }} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             );
-
-   // maintain GHR at X
-   assign ghr_x_ns[pt.BHT_GHR_SIZE-1:0]
-                                   = ({pt.BHT_GHR_SIZE{ i0_valid_x}} & {ghr_x[pt.BHT_GHR_SIZE-2:0], i0_taken_x}) |
-                                     ({pt.BHT_GHR_SIZE{~i0_valid_x}} &  ghr_x[pt.BHT_GHR_SIZE-1:0]             ) ;
-
-
-   assign exu_i0_br_valid_r                                 =  i0_pp_r.valid;
-   assign exu_i0_br_mp_r                                    =  i0_pp_r.misp;
-   assign exu_i0_br_way_r                                   =  i0_pp_r.way;
-   assign exu_i0_br_hist_r[1:0]                             =  {2{i0_pp_r.valid}} & i0_pp_r.hist[1:0];
-   assign exu_i0_br_error_r                                 =  i0_pp_r.br_error;
-   assign exu_i0_br_middle_r                                =  i0_pp_r.pc4 ^ i0_pp_r.boffset;
-   assign exu_i0_br_start_error_r                           =  i0_pp_r.br_start_error;
-
-   assign {exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0],
-           exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]}=  predpipe_r[PREDPIPESIZE-1:pt.BTB_BTAG_SIZE];
-
-
-   assign final_predict_mp                                  = (i0_flush_upper_x)  ?  i0_predict_p_x  :  '0;
-
-   assign final_predpipe_mp[PREDPIPESIZE-1:0]               = (i0_flush_upper_x)  ?  predpipe_x      :  '0;
-
-   assign after_flush_eghr[pt.BHT_GHR_SIZE-1:0]             = (i0_flush_upper_x & ~dec_tlu_flush_lower_r)  ?  ghr_d[pt.BHT_GHR_SIZE-1:0]  :  ghr_x[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign exu_mp_pkt.valid                                  =  final_predict_mp.valid;
-   assign exu_mp_pkt.way                                    =  final_predict_mp.way;
-   assign exu_mp_pkt.misp                                   =  final_predict_mp.misp;
-   assign exu_mp_pkt.pcall                                  =  final_predict_mp.pcall;
-   assign exu_mp_pkt.pja                                    =  final_predict_mp.pja;
-   assign exu_mp_pkt.pret                                   =  final_predict_mp.pret;
-   assign exu_mp_pkt.ataken                                 =  final_predict_mp.ataken;
-   assign exu_mp_pkt.boffset                                =  final_predict_mp.boffset;
-   assign exu_mp_pkt.pc4                                    =  final_predict_mp.pc4;
-   assign exu_mp_pkt.hist[1:0]                              =  final_predict_mp.hist[1:0];
-   assign exu_mp_pkt.toffset[11:0]                          =  final_predict_mp.toffset[11:0];
-
-   assign exu_mp_fghr[pt.BHT_GHR_SIZE-1:0]                  =  after_flush_eghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign {exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],
-           exu_mp_btag[pt.BTB_BTAG_SIZE-1:0]}               =  final_predpipe_mp[PREDPIPESIZE-pt.BHT_GHR_SIZE-1:0];
-
-   assign exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]                  =  final_predpipe_mp[PREDPIPESIZE-1:pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+pt.BTB_BTAG_SIZE+1]; // mp ghr for bht write
-end // if (pt.BTB_ENABLE==1)
-else begin
-   assign ghr_d_ns = '0;
-   assign ghr_x_ns = '0;
-   assign exu_mp_pkt = '0;
-   assign exu_mp_eghr = '0;
-   assign exu_mp_fghr = '0;
-   assign exu_mp_index = '0;
-   assign exu_mp_btag = '0;
-   assign exu_i0_br_hist_r = '0;
-   assign exu_i0_br_error_r = '0;
-   assign exu_i0_br_start_error_r = '0;
-   assign exu_i0_br_index_r = '0;
-   assign exu_i0_br_valid_r = '0;
-   assign exu_i0_br_mp_r = '0;
-   assign exu_i0_br_middle_r = '0;
-   assign exu_i0_br_fghr_r = '0;
-   assign exu_i0_br_way_r = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   assign exu_flush_path_final[31:1] = ( {31{ dec_tlu_flush_lower_r                   }} & dec_tlu_flush_path_r[31:1] ) |
-                                       ( {31{~dec_tlu_flush_lower_r & i0_flush_upper_d}} & i0_flush_path_d[31:1]      );
-
-   assign exu_npc_r[31:1]            = (i0_pred_correct_upper_r)  ?  pred_correct_npc_r[31:1]    :  i0_flush_path_upper_r[31:1];
-
-
-endmodule // eb1_exu
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-// Function: Top level brqrv core file
-// Comments:
-//
-//********************************************************************************
-
-module eb1_dma_ctrl 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic         clk,
-   input logic         free_clk,
-   input logic         rst_l,
-   input logic         dma_bus_clk_en, // slave bus clock enable
-   input logic         clk_override,
-   input logic         scan_mode,
-
-   // Debug signals
-   input logic [31:0]  dbg_cmd_addr,
-   input logic [31:0]  dbg_cmd_wrdata,
-   input logic         dbg_cmd_valid,
-   input logic         dbg_cmd_write, // 1: write command, 0: read_command
-   input logic [1:0]   dbg_cmd_type, // 0:gpr 1:csr 2: memory
-   input logic [1:0]   dbg_cmd_size, // size of the abstract mem access debug command
-
-   input  logic        dbg_dma_bubble,   // Debug needs a bubble to send a valid
-   output logic        dma_dbg_ready,    // DMA is ready to accept debug request
-
-   output logic        dma_dbg_cmd_done,
-   output logic        dma_dbg_cmd_fail,
-   output logic [31:0] dma_dbg_rddata,
-
-   // Core side signals
-   output logic        dma_dccm_req,  // DMA dccm request (only one of dccm/iccm will be set)
-   output logic        dma_iccm_req,  // DMA iccm request
-   output logic [2:0]  dma_mem_tag,   // DMA Buffer entry number
-   output logic [31:0] dma_mem_addr,  // DMA request address
-   output logic [2:0]  dma_mem_sz,    // DMA request size
-   output logic        dma_mem_write, // DMA write to dccm/iccm
-   output logic [63:0] dma_mem_wdata, // DMA write data
-
-   input logic         dccm_dma_rvalid,    // dccm data valid for DMA read
-   input logic         dccm_dma_ecc_error, // ECC error on DMA read
-   input logic [2:0]   dccm_dma_rtag,      // Tag of the DMA req
-   input logic [63:0]  dccm_dma_rdata,     // dccm data for DMA read
-   input logic         iccm_dma_rvalid,    // iccm data valid for DMA read
-   input logic         iccm_dma_ecc_error, // ECC error on DMA read
-   input logic [2:0]   iccm_dma_rtag,      // Tag of the DMA req
-   input logic [63:0]  iccm_dma_rdata,     // iccm data for DMA read
-
-   output logic        dma_active,         // DMA is busy
-   output logic        dma_dccm_stall_any, // stall dccm pipe (bubble) so that DMA can proceed
-   output logic        dma_iccm_stall_any, // stall iccm pipe (bubble) so that DMA can proceed
-   input logic         dccm_ready, // dccm ready to accept DMA request
-   input logic         iccm_ready, // iccm ready to accept DMA request
-   input logic [2:0]   dec_tlu_dma_qos_prty,    // DMA QoS priority coming from MFDC [18:15]
-
-   // PMU signals
-   output logic        dma_pmu_dccm_read,
-   output logic        dma_pmu_dccm_write,
-   output logic        dma_pmu_any_read,
-   output logic        dma_pmu_any_write,
-
-   // AXI Write Channels
-   input  logic                        dma_axi_awvalid,
-   output logic                        dma_axi_awready,
-   input  logic [pt.DMA_BUS_TAG-1:0]   dma_axi_awid,
-   input  logic [31:0]                 dma_axi_awaddr,
-   input  logic [2:0]                  dma_axi_awsize,
-
-
-   input  logic                        dma_axi_wvalid,
-   output logic                        dma_axi_wready,
-   input  logic [63:0]                 dma_axi_wdata,
-   input  logic [7:0]                  dma_axi_wstrb,
-
-   output logic                        dma_axi_bvalid,
-   input  logic                        dma_axi_bready,
-   output logic [1:0]                  dma_axi_bresp,
-   output logic [pt.DMA_BUS_TAG-1:0]   dma_axi_bid,
-
-   // AXI Read Channels
-   input  logic                        dma_axi_arvalid,
-   output logic                        dma_axi_arready,
-   input  logic [pt.DMA_BUS_TAG-1:0]   dma_axi_arid,
-   input  logic [31:0]                 dma_axi_araddr,
-   input  logic [2:0]                  dma_axi_arsize,
-
-   output logic                        dma_axi_rvalid,
-   input  logic                        dma_axi_rready,
-   output logic [pt.DMA_BUS_TAG-1:0]   dma_axi_rid,
-   output logic [63:0]                 dma_axi_rdata,
-   output logic [1:0]                  dma_axi_rresp,
-   output logic                        dma_axi_rlast
-);
-
-
-   localparam DEPTH = pt.DMA_BUF_DEPTH;
-   localparam DEPTH_PTR = $clog2(DEPTH);
-   localparam NACK_COUNT = 7;
-
-   logic [DEPTH-1:0]        fifo_valid;
-   logic [DEPTH-1:0][1:0]   fifo_error;
-   logic [DEPTH-1:0]        fifo_error_bus;
-   logic [DEPTH-1:0]        fifo_rpend;
-   logic [DEPTH-1:0]        fifo_done;      // DMA trxn is done in core
-   logic [DEPTH-1:0]        fifo_done_bus;  // DMA trxn is done in core but synced to bus clock
-   logic [DEPTH-1:0][31:0]  fifo_addr;
-   logic [DEPTH-1:0][2:0]   fifo_sz;
-   logic [DEPTH-1:0][7:0]   fifo_byteen;
-   logic [DEPTH-1:0]        fifo_write;
-   logic [DEPTH-1:0]        fifo_posted_write;
-   logic [DEPTH-1:0]        fifo_dbg;
-   logic [DEPTH-1:0][63:0]  fifo_data;
-   logic [DEPTH-1:0][pt.DMA_BUS_TAG-1:0]  fifo_tag;
-   logic [DEPTH-1:0][pt.DMA_BUS_ID-1:0]   fifo_mid;
-   logic [DEPTH-1:0][pt.DMA_BUS_PRTY-1:0] fifo_prty;
-
-   logic [DEPTH-1:0]        fifo_cmd_en;
-   logic [DEPTH-1:0]        fifo_data_en;
-   logic [DEPTH-1:0]        fifo_pend_en;
-   logic [DEPTH-1:0]        fifo_done_en;
-   logic [DEPTH-1:0]        fifo_done_bus_en;
-   logic [DEPTH-1:0]        fifo_error_en;
-   logic [DEPTH-1:0]        fifo_error_bus_en;
-   logic [DEPTH-1:0]        fifo_reset;
-   logic [DEPTH-1:0][1:0]   fifo_error_in;
-   logic [DEPTH-1:0][63:0]  fifo_data_in;
-
-   logic                    fifo_write_in;
-   logic                    fifo_posted_write_in;
-   logic                    fifo_dbg_in;
-   logic [31:0]             fifo_addr_in;
-   logic [2:0]              fifo_sz_in;
-   logic [7:0]              fifo_byteen_in;
-
-   logic [DEPTH_PTR-1:0]    RspPtr, NxtRspPtr;
-   logic [DEPTH_PTR-1:0]    WrPtr, NxtWrPtr;
-   logic [DEPTH_PTR-1:0]    RdPtr, NxtRdPtr;
-   logic                    WrPtrEn, RdPtrEn, RspPtrEn;
-
-   logic [1:0]              dma_dbg_sz;
-   logic [1:0]              dma_dbg_addr;
-   logic [31:0]             dma_dbg_mem_rddata;
-   logic [31:0]             dma_dbg_mem_wrdata;
-   logic                    dma_dbg_cmd_error;
-   logic                    dma_dbg_cmd_done_q;
-
-   logic                    fifo_full, fifo_full_spec, fifo_empty;
-   logic                    dma_address_error, dma_alignment_error;
-   logic [3:0]              num_fifo_vld;
-   logic                    dma_mem_req;
-   logic [31:0]             dma_mem_addr_int;
-   logic [2:0]              dma_mem_sz_int;
-   logic [7:0]              dma_mem_byteen;
-   logic                    dma_mem_addr_in_dccm;
-   logic                    dma_mem_addr_in_iccm;
-   logic                    dma_mem_addr_in_pic;
-   logic                    dma_mem_addr_in_pic_region_nc;
-   logic                    dma_mem_addr_in_dccm_region_nc;
-   logic                    dma_mem_addr_in_iccm_region_nc;
-
-   logic [2:0]              dma_nack_count, dma_nack_count_d, dma_nack_count_csr;
-
-   logic                    dma_buffer_c1_clken;
-   logic                    dma_free_clken;
-   logic                    dma_buffer_c1_clk;
-   logic                    dma_free_clk;
-   logic                    dma_bus_clk;
-
-   logic                    bus_rsp_valid, bus_rsp_sent;
-   logic                    bus_cmd_valid, bus_cmd_sent;
-   logic                    bus_cmd_write, bus_cmd_posted_write;
-   logic [7:0]              bus_cmd_byteen;
-   logic [2:0]              bus_cmd_sz;
-   logic [31:0]             bus_cmd_addr;
-   logic [63:0]             bus_cmd_wdata;
-   logic [pt.DMA_BUS_TAG-1:0]  bus_cmd_tag;
-   logic [pt.DMA_BUS_ID-1:0]   bus_cmd_mid;
-   logic [pt.DMA_BUS_PRTY-1:0] bus_cmd_prty;
-   logic                    bus_posted_write_done;
-
-   logic                    fifo_full_spec_bus;
-   logic                    dbg_dma_bubble_bus;
-   logic                    stall_dma_in;
-   logic                    dma_fifo_ready;
-
-   logic                       wrbuf_en, wrbuf_data_en;
-   logic                       wrbuf_cmd_sent, wrbuf_rst, wrbuf_data_rst;
-   logic                       wrbuf_vld, wrbuf_data_vld;
-   logic [pt.DMA_BUS_TAG-1:0]  wrbuf_tag;
-   logic [2:0]                 wrbuf_sz;
-   logic [31:0]                wrbuf_addr;
-   logic [63:0]                wrbuf_data;
-   logic [7:0]                 wrbuf_byteen;
-
-   logic                       rdbuf_en;
-   logic                       rdbuf_cmd_sent, rdbuf_rst;
-   logic                       rdbuf_vld;
-   logic [pt.DMA_BUS_TAG-1:0]  rdbuf_tag;
-   logic [2:0]                 rdbuf_sz;
-   logic [31:0]                rdbuf_addr;
-
-   logic                       axi_mstr_prty_in, axi_mstr_prty_en;
-   logic                       axi_mstr_priority;
-   logic                       axi_mstr_sel;
-
-   logic                       axi_rsp_valid, axi_rsp_sent;
-   logic                       axi_rsp_write;
-   logic [pt.DMA_BUS_TAG-1:0]  axi_rsp_tag;
-   logic [1:0]                 axi_rsp_error;
-   logic [63:0]                axi_rsp_rdata;
-
-   //------------------------LOGIC STARTS HERE---------------------------------
-
-   // FIFO inputs
-   assign fifo_addr_in[31:0]    = dbg_cmd_valid ? dbg_cmd_addr[31:0] : bus_cmd_addr[31:0];
-   assign fifo_byteen_in[7:0]   = {8{~dbg_cmd_valid}} & bus_cmd_byteen[7:0];    // Byte enable is used only for bus requests
-   assign fifo_sz_in[2:0]       = dbg_cmd_valid ? {1'b0,dbg_cmd_size[1:0]} : bus_cmd_sz[2:0];
-   assign fifo_write_in         = dbg_cmd_valid ? dbg_cmd_write : bus_cmd_write;
-   assign fifo_posted_write_in  = ~dbg_cmd_valid & bus_cmd_posted_write;
-   assign fifo_dbg_in           = dbg_cmd_valid;
-
-   for (genvar i=0 ;i<DEPTH; i++) begin: GenFifo
-      assign fifo_cmd_en[i]   = ((bus_cmd_sent & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1])) & (i == WrPtr[DEPTH_PTR-1:0]);
-      assign fifo_data_en[i] = (((bus_cmd_sent & fifo_write_in & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1] & dbg_cmd_write))  & (i == WrPtr[DEPTH_PTR-1:0])) |
-                               ((dma_address_error | dma_alignment_error) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                               (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                               (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_pend_en[i] = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write & (i == RdPtr[DEPTH_PTR-1:0]);
-      assign fifo_error_en[i] = ((dma_address_error | dma_alignment_error | dma_dbg_cmd_error) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                                ((dccm_dma_rvalid & dccm_dma_ecc_error) & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                                ((iccm_dma_rvalid & iccm_dma_ecc_error) & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_error_bus_en[i] = (((|fifo_error_in[i][1:0]) & fifo_error_en[i]) | (|fifo_error[i])) & dma_bus_clk_en;
-      assign fifo_done_en[i] = ((|fifo_error[i] | fifo_error_en[i] | ((dma_dccm_req | dma_iccm_req) & dma_mem_write)) & (i == RdPtr[DEPTH_PTR-1:0])) |
-                               (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) |
-                               (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0])));
-      assign fifo_done_bus_en[i] = (fifo_done_en[i] | fifo_done[i]) & dma_bus_clk_en;
-      assign fifo_reset[i] = (((bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en) | dma_dbg_cmd_done) & (i == RspPtr[DEPTH_PTR-1:0]);
-      assign fifo_error_in[i]   = (dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0]))) ? {1'b0,dccm_dma_ecc_error} : (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0]))) ? {1'b0,iccm_dma_ecc_error}  :
-                                                                                                                {(dma_address_error | dma_alignment_error | dma_dbg_cmd_error), dma_alignment_error};
-      assign fifo_data_in[i]   = (fifo_error_en[i] & (|fifo_error_in[i])) ? {32'b0,fifo_addr[i]} :
-                                                        ((dccm_dma_rvalid & (i == DEPTH_PTR'(dccm_dma_rtag[2:0])))  ? dccm_dma_rdata[63:0] : (iccm_dma_rvalid & (i == DEPTH_PTR'(iccm_dma_rtag[2:0]))) ? iccm_dma_rdata[63:0] :
-                                                                                                                                                       (dbg_cmd_valid ? {2{dma_dbg_mem_wrdata[31:0]}} : bus_cmd_wdata[63:0]));
-
-      rvdffsc #(1) fifo_valid_dff (.din(1'b1), .dout(fifo_valid[i]), .en(fifo_cmd_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(2) fifo_error_dff (.din(fifo_error_in[i]), .dout(fifo_error[i]), .en(fifo_error_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_error_bus_dff (.din(1'b1), .dout(fifo_error_bus[i]), .en(fifo_error_bus_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_rpend_dff (.din(1'b1), .dout(fifo_rpend[i]), .en(fifo_pend_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_done_dff (.din(1'b1), .dout(fifo_done[i]), .en(fifo_done_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffsc #(1) fifo_done_bus_dff (.din(1'b1), .dout(fifo_done_bus[i]), .en(fifo_done_bus_en[i]), .clear(fifo_reset[i]), .clk(dma_free_clk), .*);
-      rvdffe  #(32) fifo_addr_dff (.din(fifo_addr_in[31:0]), .dout(fifo_addr[i]), .en(fifo_cmd_en[i]), .*);
-      rvdffs  #(3) fifo_sz_dff (.din(fifo_sz_in[2:0]), .dout(fifo_sz[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(8) fifo_byteen_dff (.din(fifo_byteen_in[7:0]), .dout(fifo_byteen[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_write_dff (.din(fifo_write_in), .dout(fifo_write[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_posted_write_dff (.din(fifo_posted_write_in), .dout(fifo_posted_write[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(1) fifo_dbg_dff (.din(fifo_dbg_in), .dout(fifo_dbg[i]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffe  #(64) fifo_data_dff (.din(fifo_data_in[i]), .dout(fifo_data[i]), .en(fifo_data_en[i]), .*);
-      rvdffs  #(pt.DMA_BUS_TAG) fifo_tag_dff(.din(bus_cmd_tag[pt.DMA_BUS_TAG-1:0]), .dout(fifo_tag[i][pt.DMA_BUS_TAG-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(pt.DMA_BUS_ID) fifo_mid_dff(.din(bus_cmd_mid[pt.DMA_BUS_ID-1:0]), .dout(fifo_mid[i][pt.DMA_BUS_ID-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-      rvdffs  #(pt.DMA_BUS_PRTY) fifo_prty_dff(.din(bus_cmd_prty[pt.DMA_BUS_PRTY-1:0]), .dout(fifo_prty[i][pt.DMA_BUS_PRTY-1:0]), .en(fifo_cmd_en[i]), .clk(dma_buffer_c1_clk), .*);
-   end
-
-   // Pointer logic
-   assign NxtWrPtr[DEPTH_PTR-1:0] = (WrPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : WrPtr[DEPTH_PTR-1:0] + 1'b1;
-   assign NxtRdPtr[DEPTH_PTR-1:0] = (RdPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : RdPtr[DEPTH_PTR-1:0] + 1'b1;
-   assign NxtRspPtr[DEPTH_PTR-1:0] = (RspPtr[DEPTH_PTR-1:0] == (DEPTH-1)) ? '0 : RspPtr[DEPTH_PTR-1:0] + 1'b1;
-
-   assign WrPtrEn = |fifo_cmd_en[DEPTH-1:0];
-   assign RdPtrEn = dma_dccm_req | dma_iccm_req | (dma_address_error | dma_alignment_error | dma_dbg_cmd_error);
-   assign RspPtrEn = (dma_dbg_cmd_done | (bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en);
-
-   rvdffs #(DEPTH_PTR) WrPtr_dff(.din(NxtWrPtr[DEPTH_PTR-1:0]), .dout(WrPtr[DEPTH_PTR-1:0]), .en(WrPtrEn), .clk(dma_free_clk), .*);
-   rvdffs #(DEPTH_PTR) RdPtr_dff(.din(NxtRdPtr[DEPTH_PTR-1:0]), .dout(RdPtr[DEPTH_PTR-1:0]), .en(RdPtrEn), .clk(dma_free_clk), .*);
-   rvdffs #(DEPTH_PTR) RspPtr_dff(.din(NxtRspPtr[DEPTH_PTR-1:0]), .dout(RspPtr[DEPTH_PTR-1:0]), .en(RspPtrEn), .clk(dma_free_clk), .*);
-
-   // Miscellaneous signals
-   assign fifo_full = fifo_full_spec_bus;
-
-   always_comb begin
-      num_fifo_vld[3:0] = {3'b0,bus_cmd_sent} - {3'b0,bus_rsp_sent};
-      for (int i=0; i<DEPTH; i++) begin
-         num_fifo_vld[3:0] += {3'b0,fifo_valid[i]};
-      end
-   end
-   assign fifo_full_spec          = (num_fifo_vld[3:0] >= DEPTH);
-
-   assign dma_fifo_ready = ~(fifo_full | dbg_dma_bubble_bus);
-
-   // Error logic
-   assign dma_address_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & ~fifo_dbg[RdPtr] & (~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm));    // request not for ICCM or DCCM
-   assign dma_alignment_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & ~fifo_dbg[RdPtr] & ~dma_address_error &
-                                (((dma_mem_sz_int[2:0] == 3'h1) & dma_mem_addr_int[0])                                                       |    // HW size but unaligned
-                                 ((dma_mem_sz_int[2:0] == 3'h2) & (|dma_mem_addr_int[1:0]))                                                  |    // W size but unaligned
-                                 ((dma_mem_sz_int[2:0] == 3'h3) & (|dma_mem_addr_int[2:0]))                                                  |    // DW size but unaligned
-                                 (dma_mem_addr_in_iccm & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11)))                 |    // ICCM access not word size
-                                 (dma_mem_addr_in_dccm & dma_mem_write & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11))) |    // DCCM write not word size
-                                 (dma_mem_write & (dma_mem_sz_int[2:0] == 3'h2) & (dma_mem_byteen[dma_mem_addr_int[2:0]+:4] != 4'hf))        |    // Write byte enables not aligned for word store
-                                 (dma_mem_write & (dma_mem_sz_int[2:0] == 3'h3) & ~((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0) | (dma_mem_byteen[7:0] == 8'hff)))); // Write byte enables not aligned for dword store
-
-
-   //Dbg outputs
-   assign dma_dbg_ready    = fifo_empty & dbg_dma_bubble;
-   assign dma_dbg_cmd_done = (fifo_valid[RspPtr] & fifo_dbg[RspPtr] & fifo_done[RspPtr]);
-   assign dma_dbg_cmd_fail     = |fifo_error[RspPtr];
-
-   assign dma_dbg_sz[1:0]          = fifo_sz[RspPtr][1:0];
-   assign dma_dbg_addr[1:0]        = fifo_addr[RspPtr][1:0];
-   assign dma_dbg_mem_rddata[31:0] = fifo_addr[RspPtr][2] ? fifo_data[RspPtr][63:32] : fifo_data[RspPtr][31:0];
-   assign dma_dbg_rddata[31:0]     = ({32{(dma_dbg_sz[1:0] == 2'h0)}} & ((dma_dbg_mem_rddata[31:0] >> 8*dma_dbg_addr[1:0]) & 32'hff)) |
-                                     ({32{(dma_dbg_sz[1:0] == 2'h1)}} & ((dma_dbg_mem_rddata[31:0] >> 16*dma_dbg_addr[1]) & 32'hffff)) |
-                                     ({32{(dma_dbg_sz[1:0] == 2'h2)}} & dma_dbg_mem_rddata[31:0]);
-
-   assign dma_dbg_cmd_error = fifo_valid[RdPtr] & ~fifo_done[RdPtr] & fifo_dbg[RdPtr] &
-                                 ((~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm | dma_mem_addr_in_pic)) |             // Address outside of ICCM/DCCM/PIC
-                                  ((dma_mem_addr_in_iccm | dma_mem_addr_in_pic) & (dma_mem_sz_int[1:0] != 2'b10)));    // Only word accesses allowed for ICCM/PIC
-
-   assign dma_dbg_mem_wrdata[31:0] = ({32{dbg_cmd_size[1:0] == 2'h0}} & {4{dbg_cmd_wrdata[7:0]}}) |
-                                     ({32{dbg_cmd_size[1:0] == 2'h1}} & {2{dbg_cmd_wrdata[15:0]}}) |
-                                     ({32{dbg_cmd_size[1:0] == 2'h2}} & dbg_cmd_wrdata[31:0]);
-
-   // Block the decode if fifo full
-   assign dma_dccm_stall_any = dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic) & (dma_nack_count >= dma_nack_count_csr);
-   assign dma_iccm_stall_any = dma_mem_req & dma_mem_addr_in_iccm & (dma_nack_count >= dma_nack_count_csr);
-
-   // Used to indicate ready to debug
-   assign fifo_empty     = ~((|(fifo_valid[DEPTH-1:0])) | bus_cmd_sent);
-
-   // Nack counter, stall the lsu pipe if 7 nacks
-   assign dma_nack_count_csr[2:0] = dec_tlu_dma_qos_prty[2:0];
-   assign dma_nack_count_d[2:0] = (dma_nack_count[2:0] >= dma_nack_count_csr[2:0]) ? ({3{~(dma_dccm_req | dma_iccm_req)}} & dma_nack_count[2:0]) :
-                                                                                    (dma_mem_req & ~(dma_dccm_req | dma_iccm_req)) ? (dma_nack_count[2:0] + 1'b1) : 3'b0;
-
-   rvdffs #(3) nack_count_dff(.din(dma_nack_count_d[2:0]), .dout(dma_nack_count[2:0]), .en(dma_mem_req), .clk(dma_free_clk), .*);
-
-   // Core outputs
-   assign dma_mem_req         = fifo_valid[RdPtr] & ~fifo_rpend[RdPtr] & ~fifo_done[RdPtr] & ~(dma_address_error | dma_alignment_error | dma_dbg_cmd_error);
-   assign dma_dccm_req        = dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic) & dccm_ready;
-   assign dma_iccm_req        = dma_mem_req & dma_mem_addr_in_iccm & iccm_ready;
-   assign dma_mem_tag[2:0]    = 3'(RdPtr);
-   assign dma_mem_addr_int[31:0] = fifo_addr[RdPtr];
-   assign dma_mem_sz_int[2:0] = fifo_sz[RdPtr];
-   assign dma_mem_addr[31:0]  = (dma_mem_write & ~fifo_dbg[RdPtr] & (dma_mem_byteen[7:0] == 8'hf0)) ? {dma_mem_addr_int[31:3],1'b1,dma_mem_addr_int[1:0]} : dma_mem_addr_int[31:0];
-   assign dma_mem_sz[2:0]     = (dma_mem_write & ~fifo_dbg[RdPtr] & ((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0))) ? 3'h2 : dma_mem_sz_int[2:0];
-   assign dma_mem_byteen[7:0] = fifo_byteen[RdPtr];
-   assign dma_mem_write       = fifo_write[RdPtr];
-   assign dma_mem_wdata[63:0] = fifo_data[RdPtr];
-
-   // PMU outputs
-   assign dma_pmu_dccm_read   = dma_dccm_req & ~dma_mem_write;
-   assign dma_pmu_dccm_write  = dma_dccm_req & dma_mem_write;
-   assign dma_pmu_any_read    = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write;
-   assign dma_pmu_any_write   = (dma_dccm_req | dma_iccm_req) & dma_mem_write;
-
-   // Address check  dccm
-   if (pt.DCCM_ENABLE) begin: Gen_dccm_enable
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) addr_dccm_rangecheck (
-         .addr(dma_mem_addr_int[31:0]),
-         .in_range(dma_mem_addr_in_dccm),
-         .in_region(dma_mem_addr_in_dccm_region_nc)
-      );
-   end else begin: Gen_dccm_disable
-      assign dma_mem_addr_in_dccm = '0;
-      assign dma_mem_addr_in_dccm_region_nc = '0;
-   end // else: !if(pt.ICCM_ENABLE)
-
-   // Address check  iccm
-   if (pt.ICCM_ENABLE) begin: Gen_iccm_enable
-      rvrangecheck #(.CCM_SADR(pt.ICCM_SADR),
-                     .CCM_SIZE(pt.ICCM_SIZE)) addr_iccm_rangecheck (
-         .addr(dma_mem_addr_int[31:0]),
-         .in_range(dma_mem_addr_in_iccm),
-         .in_region(dma_mem_addr_in_iccm_region_nc)
-      );
-   end else begin: Gen_iccm_disable
-      assign dma_mem_addr_in_iccm = '0;
-      assign dma_mem_addr_in_iccm_region_nc = '0;
-   end // else: !if(pt.ICCM_ENABLE)
-
-
-   // PIC memory address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) addr_pic_rangecheck (
-      .addr(dma_mem_addr_int[31:0]),
-      .in_range(dma_mem_addr_in_pic),
-      .in_region(dma_mem_addr_in_pic_region_nc)
-    );
-
-   // Inputs
-   rvdff_fpga #(1) fifo_full_bus_ff     (.din(fifo_full_spec),   .dout(fifo_full_spec_bus), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdff_fpga #(1) dbg_dma_bubble_ff    (.din(dbg_dma_bubble),   .dout(dbg_dma_bubble_bus), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdff      #(1) dma_dbg_cmd_doneff   (.din(dma_dbg_cmd_done), .dout(dma_dbg_cmd_done_q), .clk(free_clk), .*);
-
-   // Clock Gating logic
-   assign dma_buffer_c1_clken = (bus_cmd_valid & dma_bus_clk_en) | dbg_cmd_valid | clk_override;
-   assign dma_free_clken = (bus_cmd_valid | bus_rsp_valid | dbg_cmd_valid | dma_dbg_cmd_done | dma_dbg_cmd_done_q | (|fifo_valid[DEPTH-1:0]) | clk_override);
-
-   rvoclkhdr dma_buffer_c1cgc ( .en(dma_buffer_c1_clken), .l1clk(dma_buffer_c1_clk), .* );
-   rvoclkhdr dma_free_cgc (.en(dma_free_clken), .l1clk(dma_free_clk), .*);
-
-
-   rvclkhdr  dma_bus_cgc (.en(dma_bus_clk_en), .l1clk(dma_bus_clk), .*);
-
-   // Write channel buffer
-   assign wrbuf_en       = dma_axi_awvalid & dma_axi_awready;
-   assign wrbuf_data_en  = dma_axi_wvalid & dma_axi_wready;
-   assign wrbuf_cmd_sent = bus_cmd_sent & bus_cmd_write;
-   assign wrbuf_rst      = wrbuf_cmd_sent & ~wrbuf_en;
-   assign wrbuf_data_rst = wrbuf_cmd_sent & ~wrbuf_data_en;
-
-   rvdffsc_fpga  #(.WIDTH(1))              wrbuf_vldff       (.din(1'b1), .dout(wrbuf_vld),      .en(wrbuf_en),      .clear(wrbuf_rst),      .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffsc_fpga  #(.WIDTH(1))              wrbuf_data_vldff  (.din(1'b1), .dout(wrbuf_data_vld), .en(wrbuf_data_en), .clear(wrbuf_data_rst), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(pt.DMA_BUS_TAG)) wrbuf_tagff       (.din(dma_axi_awid[pt.DMA_BUS_TAG-1:0]), .dout(wrbuf_tag[pt.DMA_BUS_TAG-1:0]), .en(wrbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(3))              wrbuf_szff        (.din(dma_axi_awsize[2:0]),  .dout(wrbuf_sz[2:0]),     .en(wrbuf_en),                  .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffe        #(.WIDTH(32))             wrbuf_addrff      (.din(dma_axi_awaddr[31:0]), .dout(wrbuf_addr[31:0]),  .en(wrbuf_en & dma_bus_clk_en), .*);
-   rvdffe        #(.WIDTH(64))             wrbuf_dataff      (.din(dma_axi_wdata[63:0]),  .dout(wrbuf_data[63:0]),  .en(wrbuf_data_en & dma_bus_clk_en), .*);
-   rvdffs_fpga   #(.WIDTH(8))              wrbuf_byteenff    (.din(dma_axi_wstrb[7:0]),   .dout(wrbuf_byteen[7:0]), .en(wrbuf_data_en),             .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-
-   // Read channel buffer
-   assign rdbuf_en    = dma_axi_arvalid & dma_axi_arready;
-   assign rdbuf_cmd_sent = bus_cmd_sent & ~bus_cmd_write;
-   assign rdbuf_rst   = rdbuf_cmd_sent & ~rdbuf_en;
-
-   rvdffsc_fpga  #(.WIDTH(1))              rdbuf_vldff  (.din(1'b1), .dout(rdbuf_vld), .en(rdbuf_en), .clear(rdbuf_rst), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(pt.DMA_BUS_TAG)) rdbuf_tagff  (.din(dma_axi_arid[pt.DMA_BUS_TAG-1:0]), .dout(rdbuf_tag[pt.DMA_BUS_TAG-1:0]), .en(rdbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffs_fpga   #(.WIDTH(3))              rdbuf_szff   (.din(dma_axi_arsize[2:0]),  .dout(rdbuf_sz[2:0]),    .en(rdbuf_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-   rvdffe       #(.WIDTH(32))              rdbuf_addrff (.din(dma_axi_araddr[31:0]), .dout(rdbuf_addr[31:0]), .en(rdbuf_en & dma_bus_clk_en), .*);
-
-   assign dma_axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent);
-   assign dma_axi_wready  = ~(wrbuf_data_vld & ~wrbuf_cmd_sent);
-   assign dma_axi_arready = ~(rdbuf_vld & ~rdbuf_cmd_sent);
-
-   //Generate a single request from read/write channel
-   assign bus_cmd_valid                     = (wrbuf_vld & wrbuf_data_vld) | rdbuf_vld;
-   assign bus_cmd_sent                      = bus_cmd_valid & dma_fifo_ready;
-   assign bus_cmd_write                     = axi_mstr_sel;
-   assign bus_cmd_posted_write              = '0;
-   assign bus_cmd_addr[31:0]                = axi_mstr_sel ? wrbuf_addr[31:0] : rdbuf_addr[31:0];
-   assign bus_cmd_sz[2:0]                   = axi_mstr_sel ? wrbuf_sz[2:0] : rdbuf_sz[2:0];
-   assign bus_cmd_wdata[63:0]               = wrbuf_data[63:0];
-   assign bus_cmd_byteen[7:0]               = wrbuf_byteen[7:0];
-   assign bus_cmd_tag[pt.DMA_BUS_TAG-1:0]   = axi_mstr_sel ? wrbuf_tag[pt.DMA_BUS_TAG-1:0] : rdbuf_tag[pt.DMA_BUS_TAG-1:0];
-   assign bus_cmd_mid[pt.DMA_BUS_ID-1:0]    = '0;
-   assign bus_cmd_prty[pt.DMA_BUS_PRTY-1:0] = '0;
-
-   // Sel=1 -> write has higher priority
-   assign axi_mstr_sel     = (wrbuf_vld & wrbuf_data_vld & rdbuf_vld) ? axi_mstr_priority : (wrbuf_vld & wrbuf_data_vld);
-   assign axi_mstr_prty_in = ~axi_mstr_priority;
-   assign axi_mstr_prty_en = bus_cmd_sent;
-   rvdffs_fpga #(.WIDTH(1)) mstr_prtyff(.din(axi_mstr_prty_in), .dout(axi_mstr_priority), .en(axi_mstr_prty_en), .clk(dma_bus_clk), .clken(dma_bus_clk_en), .rawclk(clk), .*);
-
-   assign axi_rsp_valid                   = fifo_valid[RspPtr] & ~fifo_dbg[RspPtr] & fifo_done_bus[RspPtr];
-   assign axi_rsp_rdata[63:0]             = fifo_data[RspPtr];
-   assign axi_rsp_write                   = fifo_write[RspPtr];
-   assign axi_rsp_error[1:0]              = fifo_error[RspPtr][0] ? 2'b10 : (fifo_error[RspPtr][1] ? 2'b11 : 2'b0);
-   assign axi_rsp_tag[pt.DMA_BUS_TAG-1:0] = fifo_tag[RspPtr];
-
-   // AXI response channel signals
-   assign dma_axi_bvalid                  = axi_rsp_valid & axi_rsp_write;
-   assign dma_axi_bresp[1:0]              = axi_rsp_error[1:0];
-   assign dma_axi_bid[pt.DMA_BUS_TAG-1:0] = axi_rsp_tag[pt.DMA_BUS_TAG-1:0];
-
-   assign dma_axi_rvalid                  = axi_rsp_valid & ~axi_rsp_write;
-   assign dma_axi_rresp[1:0]              = axi_rsp_error;
-   assign dma_axi_rdata[63:0]             = axi_rsp_rdata[63:0];
-   assign dma_axi_rlast                   = 1'b1;
-   assign dma_axi_rid[pt.DMA_BUS_TAG-1:0] = axi_rsp_tag[pt.DMA_BUS_TAG-1:0];
-
-   assign bus_posted_write_done = 1'b0;
-   assign bus_rsp_valid      = (dma_axi_bvalid | dma_axi_rvalid);
-   assign bus_rsp_sent       = (dma_axi_bvalid & dma_axi_bready) | (dma_axi_rvalid & dma_axi_rready);
-
-   assign dma_active  = wrbuf_vld | rdbuf_vld | (|fifo_valid[DEPTH-1:0]);
-
-endmodule // eb1_dma_ctrl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_alu_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input  logic                  clk,                // Top level clock
-   input  logic                  rst_l,              // Reset
-   input  logic                  scan_mode,          // Scan control
-
-   input  logic                  flush_upper_x,      // Branch flush from previous cycle
-   input  logic                  flush_lower_r,      // Master flush of entire pipeline
-   input  logic                  enable,             // Clock enable
-   input  logic                  valid_in,           // Valid
-   input  eb1_alu_pkt_t         ap,                 // predecodes
-   input  logic                  csr_ren_in,         // CSR select
-   input  logic        [31:0]    csr_rddata_in,      // CSR data
-   input  logic signed [31:0]    a_in,               // A operand
-   input  logic        [31:0]    b_in,               // B operand
-   input  logic        [31:1]    pc_in,              // for pc=pc+2,4 calculations
-   input  eb1_predict_pkt_t     pp_in,              // Predicted branch structure
-   input  logic        [12:1]    brimm_in,           // Branch offset
-
-
-   output logic        [31:0]    result_ff,          // final result
-   output logic                  flush_upper_out,    // Branch flush
-   output logic                  flush_final_out,    // Branch flush or flush entire pipeline
-   output logic        [31:1]    flush_path_out,     // Branch flush PC
-   output logic        [31:1]    pc_ff,              // flopped PC
-   output logic                  pred_correct_out,   // NPC control
-   output eb1_predict_pkt_t     predict_p_out       // Predicted branch structure
-  );
-
-
-   logic               [31:0]    zba_a_in;
-   logic               [31:0]    aout;
-   logic                         cout,ov,neg;
-   logic               [31:0]    lout;
-   logic               [31:0]    sout;
-   logic                         sel_shift;
-   logic                         sel_adder;
-   logic                         slt_one;
-   logic                         actual_taken;
-   logic               [31:1]    pcout;
-   logic                         cond_mispredict;
-   logic                         target_mispredict;
-   logic                         eq, ne, lt, ge;
-   logic                         any_jal;
-   logic               [1:0]     newhist;
-   logic                         sel_pc;
-   logic               [31:0]    csr_write_data;
-   logic               [31:0]    result;
-
-
-
-
-   // *** Start - BitManip ***
-
-   // Zbb
-   logic                  ap_clz;
-   logic                  ap_ctz;
-   logic                  ap_pcnt;
-   logic                  ap_sext_b;
-   logic                  ap_sext_h;
-   logic                  ap_min;
-   logic                  ap_max;
-   logic                  ap_pack;
-   logic                  ap_packu;
-   logic                  ap_packh;
-   logic                  ap_rol;
-   logic                  ap_ror;
-   logic                  ap_rev;
-   logic                  ap_rev8;
-   logic                  ap_orc_b;
-   logic                  ap_orc16;
-   logic                  ap_zbb;
-
-   // Zbs
-   logic                  ap_sbset;
-   logic                  ap_sbclr;
-   logic                  ap_sbinv;
-   logic                  ap_sbext;
-
-   // Zbr
-   logic                  ap_slo;
-   logic                  ap_sro;
-
-   // Zba
-   logic                  ap_sh1add;
-   logic                  ap_sh2add;
-   logic                  ap_sh3add;
-   logic                  ap_zba;
-
-
-
-   if (pt.BITMANIP_ZBB == 1)
-     begin
-       assign ap_clz          =  ap.clz;
-       assign ap_ctz          =  ap.ctz;
-       assign ap_pcnt         =  ap.pcnt;
-       assign ap_sext_b       =  ap.sext_b;
-       assign ap_sext_h       =  ap.sext_h;
-       assign ap_min          =  ap.min;
-       assign ap_max          =  ap.max;
-     end
-   else
-     begin
-       assign ap_clz          =  1'b0;
-       assign ap_ctz          =  1'b0;
-       assign ap_pcnt         =  1'b0;
-       assign ap_sext_b       =  1'b0;
-       assign ap_sext_h       =  1'b0;
-       assign ap_min          =  1'b0;
-       assign ap_max          =  1'b0;
-     end
-
-
-   if ( (pt.BITMANIP_ZBB == 1) | (pt.BITMANIP_ZBP == 1) )
-     begin
-       assign ap_pack         =  ap.pack;
-       assign ap_packu        =  ap.packu;
-       assign ap_packh        =  ap.packh;
-       assign ap_rol          =  ap.rol;
-       assign ap_ror          =  ap.ror;
-       assign ap_rev          =  ap.grev & (b_in[4:0] == 5'b11111);
-       assign ap_rev8         =  ap.grev & (b_in[4:0] == 5'b11000);
-       assign ap_orc_b        =  ap.gorc & (b_in[4:0] == 5'b00111);
-       assign ap_orc16        =  ap.gorc & (b_in[4:0] == 5'b10000);
-       assign ap_zbb          =  ap.zbb;
-     end
-   else
-     begin
-       assign ap_pack         =  1'b0;
-       assign ap_packu        =  1'b0;
-       assign ap_packh        =  1'b0;
-       assign ap_rol          =  1'b0;
-       assign ap_ror          =  1'b0;
-       assign ap_rev          =  1'b0;
-       assign ap_rev8         =  1'b0;
-       assign ap_orc_b        =  1'b0;
-       assign ap_orc16        =  1'b0;
-       assign ap_zbb          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBS == 1)
-     begin
-       assign ap_sbset        =  ap.sbset;
-       assign ap_sbclr        =  ap.sbclr;
-       assign ap_sbinv        =  ap.sbinv;
-       assign ap_sbext        =  ap.sbext;
-     end
-   else
-     begin
-       assign ap_sbset        =  1'b0;
-       assign ap_sbclr        =  1'b0;
-       assign ap_sbinv        =  1'b0;
-       assign ap_sbext        =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_slo          =  ap.slo;
-       assign ap_sro          =  ap.sro;
-     end
-   else
-     begin
-       assign ap_slo          =  1'b0;
-       assign ap_sro          =  1'b0;
-     end
-
-
-   if (pt.BITMANIP_ZBA == 1)
-     begin
-       assign ap_sh1add       =  ap.sh1add;
-       assign ap_sh2add       =  ap.sh2add;
-       assign ap_sh3add       =  ap.sh3add;
-       assign ap_zba          =  ap.zba;
-     end
-   else
-     begin
-       assign ap_sh1add       =  1'b0;
-       assign ap_sh2add       =  1'b0;
-       assign ap_sh3add       =  1'b0;
-       assign ap_zba          =  1'b0;
-     end
-
-
-
-
-   // *** End   - BitManip ***
-
-
-
-
-   rvdffpcie #(31) i_pc_ff      (.*, .clk(clk), .en(enable),              .din(pc_in[31:1]),    .dout(pc_ff[31:1]));   // any PC is run through here - doesn't have to be alu
-   rvdffe    #(32) i_result_ff  (.*, .clk(clk), .en(enable & valid_in),   .din(result[31:0]),   .dout(result_ff[31:0]));
-
-
-
-   // immediates are just muxed into rs2
-
-   // add    =>  add=1;
-   // sub    =>  add=1; sub=1;
-
-   // and    =>  lctl=3
-   // or     =>  lctl=2
-   // xor    =>  lctl=1
-
-   // sll    =>  sctl=3
-   // srl    =>  sctl=2
-   // sra    =>  sctl=1
-
-   // slt    =>  slt
-
-   // lui    =>  lctl=2; or x0, imm20 previously << 12
-   // auipc  =>  add;   add pc, imm20 previously << 12
-
-   // beq    =>  bctl=4; add; add x0, pc, sext(offset[12:1])
-   // bne    =>  bctl=3; add; add x0, pc, sext(offset[12:1])
-   // blt    =>  bctl=2; add; add x0, pc, sext(offset[12:1])
-   // bge    =>  bctl=1; add; add x0, pc, sext(offset[12:1])
-
-   // jal    =>  rs1=pc {pc[31:1],1'b0},  rs2=sext(offset20:1]);   rd=pc+[2,4]
-   // jalr   =>  rs1=rs1,                 rs2=sext(offset20:1]);   rd=pc+[2,4]
-
-
-
-   assign zba_a_in[31:0]      = ( {32{ ap_sh1add}} & {a_in[30:0],1'b0} ) |
-                                ( {32{ ap_sh2add}} & {a_in[29:0],2'b0} ) |
-                                ( {32{ ap_sh3add}} & {a_in[28:0],3'b0} ) |
-                                ( {32{~ap_zba   }} &  a_in[31:0]       );
-
-   logic        [31:0]    bm;
-
-   assign bm[31:0]            = ( ap.sub )  ?  ~b_in[31:0]  :  b_in[31:0];
-
-   assign {cout, aout[31:0]}  = {1'b0, zba_a_in[31:0]} + {1'b0, bm[31:0]} + {32'b0, ap.sub};
-
-   assign ov                  = (~a_in[31] & ~bm[31] &  aout[31]) |
-                                ( a_in[31] &  bm[31] & ~aout[31] );
-
-   assign lt                  = (~ap.unsign & (neg ^ ov)) |
-                                ( ap.unsign & ~cout);
-
-   assign eq                  = (a_in[31:0] == b_in[31:0]);
-   assign ne                  = ~eq;
-   assign neg                 =  aout[31];
-   assign ge                  = ~lt;
-
-
-
-   assign lout[31:0]          =  ( {32{csr_ren_in       }} &  csr_rddata_in[31:0]       ) |
-                                 ( {32{ap.land & ~ap_zbb}} &  a_in[31:0] &  b_in[31:0]  ) |
-                                 ( {32{ap.lor  & ~ap_zbb}} & (a_in[31:0] |  b_in[31:0]) ) |
-                                 ( {32{ap.lxor & ~ap_zbb}} & (a_in[31:0] ^  b_in[31:0]) ) |
-                                 ( {32{ap.land &  ap_zbb}} &  a_in[31:0] & ~b_in[31:0]  ) |
-                                 ( {32{ap.lor  &  ap_zbb}} & (a_in[31:0] | ~b_in[31:0]) ) |
-                                 ( {32{ap.lxor &  ap_zbb}} & (a_in[31:0] ^ ~b_in[31:0]) );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SLO,SRO      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ROL,ROR      * * * * * * * * * * * * * * * * * *
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBEXT        * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     shift_amount;
-   logic        [31:0]    shift_mask;
-   logic        [62:0]    shift_extend;
-   logic        [62:0]    shift_long;
-
-
-   assign shift_amount[5:0]            = ( { 6{ap.sll}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |   // [5] unused
-                                         ( { 6{ap.srl}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap.sra}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_rol}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_ror}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_slo}}   & (6'd32 - {1'b0,b_in[4:0]}) ) |
-                                         ( { 6{ap_sro}}   &          {1'b0,b_in[4:0]}  ) |
-                                         ( { 6{ap_sbext}} &          {1'b0,b_in[4:0]}  );
-
-
-   assign shift_mask[31:0]             = ( 32'hffffffff << ({5{ap.sll | ap_slo}} & b_in[4:0]) );
-
-
-   assign shift_extend[31:0]           =  a_in[31:0];
-
-   assign shift_extend[62:32]          = ( {31{ap.sra}} & {31{a_in[31]}} ) |
-                                         ( {31{ap.sll}} &     a_in[30:0] ) |
-                                         ( {31{ap_rol}} &     a_in[30:0] ) |
-                                         ( {31{ap_ror}} &     a_in[30:0] ) |
-                                         ( {31{ap_slo}} &     a_in[30:0] ) |
-                                         ( {31{ap_sro}} & {31{  1'b1  }} );
-
-
-   assign shift_long[62:0]    = ( shift_extend[62:0] >> shift_amount[4:0] );   // 62-32 unused
-
-   assign sout[31:0]          = ( shift_long[31:0] & shift_mask[31:0] ) | ( {32{ap_slo}} & ~shift_mask[31:0] );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLZ,CTZ      * * * * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_clz_ctz_sel;
-   logic        [31:0]    bitmanip_a_reverse_ff;
-   logic        [31:0]    bitmanip_lzd_in;
-   logic        [5:0]     bitmanip_dw_lzd_enc;
-   logic        [5:0]     bitmanip_clz_ctz_result;
-
-   assign bitmanip_clz_ctz_sel         =  ap_clz | ap_ctz;
-
-   assign bitmanip_a_reverse_ff[31:0]  = {a_in[0],  a_in[1],  a_in[2],  a_in[3],  a_in[4],  a_in[5],  a_in[6],  a_in[7],
-                                          a_in[8],  a_in[9],  a_in[10], a_in[11], a_in[12], a_in[13], a_in[14], a_in[15],
-                                          a_in[16], a_in[17], a_in[18], a_in[19], a_in[20], a_in[21], a_in[22], a_in[23],
-                                          a_in[24], a_in[25], a_in[26], a_in[27], a_in[28], a_in[29], a_in[30], a_in[31]};
-
-   assign bitmanip_lzd_in[31:0]        = ( {32{ap_clz}} & a_in[31:0]                 ) |
-                                         ( {32{ap_ctz}} & bitmanip_a_reverse_ff[31:0]);
-
-   logic        [31:0]    bitmanip_lzd_os;
-   integer                i;
-   logic                  found;
-
-   always_comb
-     begin
-        bitmanip_lzd_os[31:0]   =  bitmanip_lzd_in[31:0];
-        bitmanip_dw_lzd_enc[5:0]=  6'b0;
-        found = 1'b0;
-
-        for (int i=0; i<32 && found==0; i++) begin
-           if (bitmanip_lzd_os[31] == 1'b0) begin
-              bitmanip_dw_lzd_enc[5:0]=  bitmanip_dw_lzd_enc[5:0] + 6'b00_0001;
-              bitmanip_lzd_os[31:0]   =  bitmanip_lzd_os[31:0] << 1;
-           end
-           else
-              found=1'b1;
-        end
-     end
-
-
-
-   assign bitmanip_clz_ctz_result[5:0] = {6{bitmanip_clz_ctz_sel}} & {bitmanip_dw_lzd_enc[5],( {5{~bitmanip_dw_lzd_enc[5]}} & bitmanip_dw_lzd_enc[4:0] )};
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PCNT         * * * * * * * * * * * * * * * * * *
-
-   logic        [5:0]     bitmanip_pcnt;
-   logic        [5:0]     bitmanip_pcnt_result;
-
-
-   integer                bitmanip_pcnt_i;
-
-   always_comb
-     begin
-       bitmanip_pcnt[5:0]               =  6'b0;
-
-       for (bitmanip_pcnt_i=0; bitmanip_pcnt_i<32; bitmanip_pcnt_i++)
-         begin
-            bitmanip_pcnt[5:0]          =  bitmanip_pcnt[5:0] + {5'b0,a_in[bitmanip_pcnt_i]};
-         end      // FOR    bitmanip_pcnt_i
-     end          // ALWAYS_COMB
-
-
-   assign bitmanip_pcnt_result[5:0]    =  {6{ap_pcnt}} & bitmanip_pcnt[5:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SEXT_B,SEXT_H  * * * * * * * * * * * * * * * * *
-
-   logic       [31:0]     bitmanip_sext_result;
-
-   assign bitmanip_sext_result[31:0]   = ( {32{ap_sext_b}} & { {24{a_in[7]}} ,a_in[7:0]  } ) |
-                                         ( {32{ap_sext_h}} & { {16{a_in[15]}},a_in[15:0] } );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  MIN,MAX,MINU,MAXU  * * * * * * * * * * * * * * *
-
-   logic                  bitmanip_minmax_sel;
-   logic        [31:0]    bitmanip_minmax_result;
-
-   assign bitmanip_minmax_sel          =  ap_min | ap_max;
-
-
-   logic                  bitmanip_minmax_sel_a;
-
-   assign bitmanip_minmax_sel_a        =  ge  ^ ap_min;
-
-   assign bitmanip_minmax_result[31:0] = ({32{bitmanip_minmax_sel &  bitmanip_minmax_sel_a}}  &  a_in[31:0]) |
-                                         ({32{bitmanip_minmax_sel & ~bitmanip_minmax_sel_a}}  &  b_in[31:0]);
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  PACK, PACKU, PACKH * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_pack_result;
-   logic        [31:0]    bitmanip_packu_result;
-   logic        [31:0]    bitmanip_packh_result;
-
-   assign bitmanip_pack_result[31:0]   = {32{ap_pack}}  & {b_in[15:0], a_in[15:0]};
-   assign bitmanip_packu_result[31:0]  = {32{ap_packu}} & {b_in[31:16],a_in[31:16]};
-   assign bitmanip_packh_result[31:0]  = {32{ap_packh}} & {16'b0,b_in[7:0],a_in[7:0]};
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  REV, REV8, ORC_B * * * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_rev_result;
-   logic        [31:0]    bitmanip_rev8_result;
-   logic        [31:0]    bitmanip_orc_b_result;
-   logic        [31:0]    bitmanip_orc16_result;
-
-   assign bitmanip_rev_result[31:0]    = {32{ap_rev}}   &
-                                         {a_in[00],a_in[01],a_in[02],a_in[03],a_in[04],a_in[05],a_in[06],a_in[07],
-                                          a_in[08],a_in[09],a_in[10],a_in[11],a_in[12],a_in[13],a_in[14],a_in[15],
-                                          a_in[16],a_in[17],a_in[18],a_in[19],a_in[20],a_in[21],a_in[22],a_in[23],
-                                          a_in[24],a_in[25],a_in[26],a_in[27],a_in[28],a_in[29],a_in[30],a_in[31]};
-
-   assign bitmanip_rev8_result[31:0]   = {32{ap_rev8}}  & {a_in[7:0],a_in[15:8],a_in[23:16],a_in[31:24]};
-
-
-// uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-// {
-//      uint32_t x = rs1;
-//      int shamt = rs2 & 31;                                                        ORC.B  ORC16
-//      if (shamt &  1) x |= ((x & 0x55555555) <<  1) | ((x & 0xAAAAAAAA) >>  1);      1      0
-//      if (shamt &  2) x |= ((x & 0x33333333) <<  2) | ((x & 0xCCCCCCCC) >>  2);      1      0
-//      if (shamt &  4) x |= ((x & 0x0F0F0F0F) <<  4) | ((x & 0xF0F0F0F0) >>  4);      1      0
-//      if (shamt &  8) x |= ((x & 0x00FF00FF) <<  8) | ((x & 0xFF00FF00) >>  8);      0      0
-//      if (shamt & 16) x |= ((x & 0x0000FFFF) << 16) | ((x & 0xFFFF0000) >> 16);      0      1
-//      return x;
-// }
-
-
-// BEFORE              31  ,   30  ,   29  ,   28  ,    27  ,   26,     25,     24
-// shamt[0]  b =    a31|a30,a31|a30,a29|a28,a29|a28, a27|a26,a27|a26,a25|a24,a25|a24
-// shamt[1]  c =    b31|b29,b30|b28,b31|b29,b30|b28, b27|b25,b26|b24,b27|b25,b26|b24
-// shamt[2]  d =    c31|c27,c30|c26,c29|c25,c28|c24, c31|c27,c30|c26,c29|c25,c28|c24
-//
-// Expand d31 =        c31         |         c27;
-//            =   b31   |   b29    |    b27   |   b25;
-//            = a31|a30 | a29|a28  |  a27|a26 | a25|a24
-
-   assign bitmanip_orc_b_result[31:0]  = {32{ap_orc_b}} & { {8{| a_in[31:24]}}, {8{| a_in[23:16]}}, {8{| a_in[15:8]}}, {8{| a_in[7:0]}} };
-
-   assign bitmanip_orc16_result[31:0]  = {32{ap_orc16}} & {     {a_in[31:16] | a_in[15:0]},             {a_in[31:16] | a_in[15:0]}      };
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  ZBSET, ZBCLR, ZBINV  * * * * * * * * * * * * * *
-
-   logic        [31:0]    bitmanip_sb_1hot;
-   logic        [31:0]    bitmanip_sb_data;
-
-   assign bitmanip_sb_1hot[31:0]       = ( 32'h00000001 << b_in[4:0] );
-
-   assign bitmanip_sb_data[31:0]       = ( {32{ap_sbset}} & ( a_in[31:0] |  bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbclr}} & ( a_in[31:0] & ~bitmanip_sb_1hot[31:0]) ) |
-                                         ( {32{ap_sbinv}} & ( a_in[31:0] ^  bitmanip_sb_1hot[31:0]) );
-
-
-
-
-
-
-   assign sel_shift           =  ap.sll  | ap.srl | ap.sra | ap_slo | ap_sro | ap_rol | ap_ror;
-   assign sel_adder           = (ap.add  | ap.sub | ap_zba) & ~ap.slt & ~ap_min & ~ap_max;
-   assign sel_pc              =  ap.jal  | pp_in.pcall | pp_in.pja | pp_in.pret;
-   assign csr_write_data[31:0]= (ap.csr_imm)  ?  b_in[31:0]  :  a_in[31:0];
-
-   assign slt_one             =  ap.slt & lt;
-
-
-
-   assign result[31:0]        =                        lout[31:0]             |
-                                ({32{sel_shift}}    &  sout[31:0]           ) |
-                                ({32{sel_adder}}    &  aout[31:0]           ) |
-                                ({32{sel_pc}}       & {pcout[31:1],1'b0}    ) |
-                                ({32{ap.csr_write}} &  csr_write_data[31:0] ) |
-                                                      {31'b0, slt_one}        |
-                                ({32{ap_sbext}}     & {31'b0, sout[0]}      ) |
-                                                      {26'b0, bitmanip_clz_ctz_result[5:0]} |
-                                                      {26'b0, bitmanip_pcnt_result[5:0]}    |
-                                                       bitmanip_sext_result[31:0]    |
-                                                       bitmanip_minmax_result[31:0]  |
-                                                       bitmanip_pack_result[31:0]    |
-                                                       bitmanip_packu_result[31:0]   |
-                                                       bitmanip_packh_result[31:0]   |
-                                                       bitmanip_rev_result[31:0]     |
-                                                       bitmanip_rev8_result[31:0]    |
-                                                       bitmanip_orc_b_result[31:0]   |
-                                                       bitmanip_orc16_result[31:0]   |
-                                                       bitmanip_sb_data[31:0];
-
-
-
-   // *** branch handling ***
-
-   assign any_jal             =  ap.jal      |
-                                 pp_in.pcall |
-                                 pp_in.pja   |
-                                 pp_in.pret;
-
-   assign actual_taken        = (ap.beq & eq) |
-                                (ap.bne & ne) |
-                                (ap.blt & lt) |
-                                (ap.bge & ge) |
-                                 any_jal;
-
-   // for a conditional br pcout[] will be the opposite of the branch prediction
-   // for jal or pcall, it will be the link address pc+2 or pc+4
-
-   rvbradder ibradder (
-                     .pc     ( pc_in[31:1]    ),
-                     .offset ( brimm_in[12:1] ),
-                     .dout   ( pcout[31:1]    ));
-
-
-   // pred_correct is for the npc logic
-   // pred_correct indicates not to use the flush_path
-   // for any_jal pred_correct==0
-
-   assign pred_correct_out    = (valid_in & ap.predict_nt & ~actual_taken & ~any_jal) |
-                                (valid_in & ap.predict_t  &  actual_taken & ~any_jal);
-
-
-   // for any_jal adder output is the flush path
-   assign flush_path_out[31:1]= (any_jal) ? aout[31:1] : pcout[31:1];
-
-
-   // pcall and pret are included here
-   assign cond_mispredict     = (ap.predict_t  & ~actual_taken) |
-                                (ap.predict_nt &  actual_taken);
-
-
-   // target mispredicts on ret's
-
-   assign target_mispredict   =  pp_in.pret & (pp_in.prett[31:1] != aout[31:1]);
-
-   assign flush_upper_out     =   (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x   & ~flush_lower_r;
-   assign flush_final_out     = ( (ap.jal | cond_mispredict | target_mispredict) & valid_in & ~flush_upper_x ) |  flush_lower_r;
-
-
-   // .i 3
-   // .o 2
-   // .ilb hist[1] hist[0] taken
-   // .ob newhist[1] newhist[0]
-   // .type fd
-   //
-   // 00 0 01
-   // 01 0 01
-   // 10 0 00
-   // 11 0 10
-   // 00 1 10
-   // 01 1 00
-   // 10 1 11
-   // 11 1 11
-
-   assign newhist[1]          = ( pp_in.hist[1] &  pp_in.hist[0]) | (~pp_in.hist[0] & actual_taken);
-   assign newhist[0]          = (~pp_in.hist[1] & ~actual_taken)  | ( pp_in.hist[1] & actual_taken);
-
-   always_comb begin
-      predict_p_out           =  pp_in;
-
-      predict_p_out.misp      = ~flush_upper_x & ~flush_lower_r & (cond_mispredict | target_mispredict);
-      predict_p_out.ataken    =  actual_taken;
-      predict_p_out.hist[1]   =  newhist[1];
-      predict_p_out.hist[0]   =  newhist[0];
-
-   end
-
-
-
-endmodule // eb1_exu_alu_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_div_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic           clk,                       // Top level clock
-   input logic           rst_l,                     // Reset
-   input logic           scan_mode,                 // Scan mode
-
-   input eb1_div_pkt_t  dp,                        // valid, sign, rem
-   input logic  [31:0]   dividend,                  // Numerator
-   input logic  [31:0]   divisor,                   // Denominator
-
-   input logic           cancel,                    // Cancel divide
-
-
-   output logic          finish_dly,                // Finish to match data
-   output logic [31:0]   out                        // Result
-  );
-
-
-   logic [31:0]          out_raw;
-
-   assign out[31:0] = {32{finish_dly}} & out_raw[31:0];     // Qualification added to quiet result bus while divide is iterating
-
-
-
-   if (pt.DIV_NEW == 0)
-      begin
-        eb1_exu_div_existing_1bit_cheapshortq   i_existing_1bit_div_cheapshortq (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 1) )
-      begin
-        eb1_exu_div_new_1bit_fullshortq         i_new_1bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 2) )
-      begin
-        eb1_exu_div_new_2bit_fullshortq         i_new_2bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 3) )
-      begin
-        eb1_exu_div_new_3bit_fullshortq         i_new_3bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-   if ( (pt.DIV_NEW == 1) & (pt.DIV_BIT == 4) )
-      begin
-        eb1_exu_div_new_4bit_fullshortq         i_new_4bit_div_fullshortq       (
-            .clk              ( clk                      ),   // I
-            .rst_l            ( rst_l                    ),   // I
-            .scan_mode        ( scan_mode                ),   // I
-            .cancel           ( cancel                   ),   // I
-            .valid_in         ( dp.valid                 ),   // I
-            .signed_in        (~dp.unsign                ),   // I
-            .rem_in           ( dp.rem                   ),   // I
-            .dividend_in      ( dividend[31:0]           ),   // I
-            .divisor_in       ( divisor[31:0]            ),   // I
-            .valid_out        ( finish_dly               ),   // O
-            .data_out         ( out_raw[31:0]            ));  // O
-      end
-
-
-
-endmodule // eb1_exu_div_ctl
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_existing_1bit_cheapshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic         div_clken;
-   logic         run_in, run_state;
-   logic  [5:0]  count_in, count;
-   logic [32:0]  m_ff;
-   logic         qff_enable;
-   logic         aff_enable;
-   logic [32:0]  q_in, q_ff;
-   logic [32:0]  a_in, a_ff;
-   logic [32:0]  m_eff;
-   logic [32:0]  a_shift;
-   logic         dividend_neg_ff, divisor_neg_ff;
-   logic [31:0]  dividend_comp;
-   logic [31:0]  dividend_eff;
-   logic [31:0]  q_ff_comp;
-   logic [31:0]  q_ff_eff;
-   logic [31:0]  a_ff_comp;
-   logic [31:0]  a_ff_eff;
-   logic         sign_ff, sign_eff;
-   logic         rem_ff;
-   logic         add;
-   logic [32:0]  a_eff;
-   logic [64:0]  a_eff_shift;
-   logic         rem_correct;
-   logic         valid_ff_x;
-   logic         valid_x;
-   logic         finish;
-   logic         finish_ff;
-
-   logic         smallnum_case, smallnum_case_ff;
-   logic  [3:0]  smallnum, smallnum_ff;
-   logic         m_already_comp;
-
-   logic [4:0]   a_cls;
-   logic [4:0]   b_cls;
-   logic [5:0]   shortq_shift;
-   logic [5:0]   shortq_shift_ff;
-   logic [5:0]   shortq;
-   logic         shortq_enable;
-   logic         shortq_enable_ff;
-   logic [32:0]  short_dividend;
-   logic [3:0]   shortq_raw;
-   logic [3:0]   shortq_shift_xx;
-
-
-
-   rvdffe #(23) i_misc_ff        (.*, .clk(clk), .en(div_clken),   .din ({valid_in & ~cancel,
-                                                                          finish   & ~cancel,
-                                                                          run_in,
-                                                                          count_in[5:0],
-                                                                          (valid_in & dividend_in[31]) | (~valid_in & dividend_neg_ff),
-                                                                          (valid_in & divisor_in[31] ) | (~valid_in & divisor_neg_ff ),
-                                                                          (valid_in & sign_eff       ) | (~valid_in & sign_ff        ),
-                                                                          (valid_in & rem_in         ) | (~valid_in & rem_ff         ),
-                                                                          smallnum_case,
-                                                                          smallnum[3:0],
-                                                                          shortq_enable,
-                                                                          shortq_shift[3:0]}),
-
-                                                                   .dout({valid_ff_x,
-                                                                          finish_ff,
-                                                                          run_state,
-                                                                          count[5:0],
-                                                                          dividend_neg_ff,
-                                                                          divisor_neg_ff,
-                                                                          sign_ff,
-                                                                          rem_ff,
-                                                                          smallnum_case_ff,
-                                                                          smallnum_ff[3:0],
-                                                                          shortq_enable_ff,
-                                                                          shortq_shift_xx[3:0]}));
-
-
-   rvdffe #(33) mff              (.*, .clk(clk), .en(valid_in),    .din({signed_in & divisor_in[31], divisor_in[31:0]}),   .dout(m_ff[32:0]));
-   rvdffe #(33) qff              (.*, .clk(clk), .en(qff_enable),  .din(q_in[32:0]),                                       .dout(q_ff[32:0]));
-   rvdffe #(33) aff              (.*, .clk(clk), .en(aff_enable),  .din(a_in[32:0]),                                       .dout(a_ff[32:0]));
-
-   rvtwoscomp #(32) i_dividend_comp (.din(q_ff[31:0]),    .dout(dividend_comp[31:0]));
-   rvtwoscomp #(32) i_q_ff_comp     (.din(q_ff[31:0]),    .dout(q_ff_comp[31:0]));
-   rvtwoscomp #(32) i_a_ff_comp     (.din(a_ff[31:0]),    .dout(a_ff_comp[31:0]));
-
-
-   assign valid_x                 = valid_ff_x & ~cancel;
-
-
-   // START - short circuit logic for small numbers {{
-
-   // small number divides - any 4b / 4b is done in 1 cycle (divisor != 0)
-   // to generate espresso equations:
-   // 1.  smalldiv > smalldiv.e
-   // 2.  espresso -Dso -oeqntott smalldiv.e | addassign > smalldiv
-
-   // smallnum case does not cover divide by 0
-   assign smallnum_case           = ((q_ff[31:4] == 28'b0) & (m_ff[31:4] == 28'b0) & (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x) |
-                                    ((q_ff[31:0] == 32'b0) &                         (m_ff[31:0] != 32'b0) & ~rem_ff & valid_x);
-
-
-   assign smallnum[3]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           );
-
-
-   assign smallnum[2]             = ( q_ff[3] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] & ~m_ff[2]                      );
-
-
-   assign smallnum[1]             = ( q_ff[2] &                                  ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                                  ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &                       ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] & ~m_ff[3] &                       ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2]                      );
-
-
-   assign smallnum[0]             = (            q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[0] &            ~m_ff[3] &             m_ff[1] &  m_ff[0]) |
-                                    (            q_ff[2] &                       ~m_ff[3] &            ~m_ff[1] & ~m_ff[0]) |
-                                    (                       q_ff[1] &            ~m_ff[3] & ~m_ff[2] &            ~m_ff[0]) |
-                                    (                                  q_ff[0] & ~m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] & ~q_ff[1] &            ~m_ff[3] & ~m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &                                             ~m_ff[2] & ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] & ~q_ff[2] &                       ~m_ff[3] &  m_ff[2] &  m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &            ~m_ff[3] &  m_ff[2] & ~m_ff[1]           ) |
-                                    (~q_ff[3] &  q_ff[2] &             q_ff[0] & ~m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] & ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &             m_ff[0]) |
-                                    (           ~q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                                             ~m_ff[1] & ~m_ff[0]) |
-                                    ( q_ff[3] &             q_ff[1] &                       ~m_ff[2] &            ~m_ff[0]) |
-                                    (~q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] & ~m_ff[3] &  m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &                        m_ff[3] & ~m_ff[2]                      ) |
-                                    ( q_ff[3] &             q_ff[1] &             m_ff[3] & ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &                        q_ff[0] &            ~m_ff[2] & ~m_ff[1]           ) |
-                                    ( q_ff[3] &            ~q_ff[1] &            ~m_ff[3] &  m_ff[2] &  m_ff[1] &  m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &                       ~m_ff[0]) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &             m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] &  q_ff[2] &             q_ff[0] &  m_ff[3] &            ~m_ff[1]           ) |
-                                    ( q_ff[3] & ~q_ff[2] &  q_ff[1] &            ~m_ff[3] &             m_ff[1]           ) |
-                                    ( q_ff[3] &             q_ff[1] &  q_ff[0] &            ~m_ff[2]                      ) |
-                                    ( q_ff[3] &  q_ff[2] &  q_ff[1] &  q_ff[0] &  m_ff[3]                                 );
-
-
-   // END   - short circuit logic for small numbers }}
-
-
-   // *** Start Short Q *** {{
-
-   assign short_dividend[31:0]    =  q_ff[31:0];
-   assign short_dividend[32]      =  sign_ff & q_ff[31];
-
-
-   //    A       B
-   //   210     210    SH
-   //   ---     ---    --
-   //   1xx     000     0
-   //   1xx     001     8
-   //   1xx     01x    16
-   //   1xx     1xx    24
-   //   01x     000     8
-   //   01x     001    16
-   //   01x     01x    24
-   //   01x     1xx    32
-   //   001     000    16
-   //   001     001    24
-   //   001     01x    32
-   //   001     1xx    32
-   //   000     000    24
-   //   000     001    32
-   //   000     01x    32
-   //   000     1xx    32
-
-   assign a_cls[4:3]              =  2'b0;
-   assign a_cls[2]                =  (~short_dividend[32] & (short_dividend[31:24] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[31:23] != {9{1'b1}}));
-   assign a_cls[1]                =  (~short_dividend[32] & (short_dividend[23:16] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[22:15] != {8{1'b1}}));
-   assign a_cls[0]                =  (~short_dividend[32] & (short_dividend[15:08] != {8{1'b0}})) | ( short_dividend[32] & (short_dividend[14:07] != {8{1'b1}}));
-
-   assign b_cls[4:3]              =  2'b0;
-   assign b_cls[2]                =  (~m_ff[32]           & (          m_ff[31:24] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[31:24] != {8{1'b1}}));
-   assign b_cls[1]                =  (~m_ff[32]           & (          m_ff[23:16] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[23:16] != {8{1'b1}}));
-   assign b_cls[0]                =  (~m_ff[32]           & (          m_ff[15:08] != {8{1'b0}})) | ( m_ff[32]           & (          m_ff[15:08] != {8{1'b1}}));
-
-   assign shortq_raw[3]           = ( (a_cls[2:1] == 2'b01 ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 32
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2]   == 1'b1  ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b001) );
-
-   assign shortq_raw[2]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2]   == 1'b1  ) ) |   // Shift by 24
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:1] == 2'b01 ) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[1]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:1] == 2'b01 ) ) |   // Shift by 16
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b001) ) |
-                                    ( (a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b000) );
-
-   assign shortq_raw[0]           = ( (a_cls[2]   == 1'b1  ) & (b_cls[2:0] == 3'b001) ) |   // Shift by  8
-                                    ( (a_cls[2:1] == 2'b01 ) & (b_cls[2:0] == 3'b000) );
-
-
-   assign shortq_enable           =  valid_ff_x & (m_ff[31:0] != 32'b0) & (shortq_raw[3:0] != 4'b0);
-
-   assign shortq_shift[3:0]       = ({4{shortq_enable}} & shortq_raw[3:0]);
-
-   assign shortq[5:0]             =  6'b0;
-   assign shortq_shift[5:4]       =  2'b0;
-   assign shortq_shift_ff[5]      =  1'b0;
-
-   assign shortq_shift_ff[4:0]    = ({5{shortq_shift_xx[3]}} & 5'b1_1111) |   // 31
-                                    ({5{shortq_shift_xx[2]}} & 5'b1_1000) |   // 24
-                                    ({5{shortq_shift_xx[1]}} & 5'b1_0000) |   // 16
-                                    ({5{shortq_shift_xx[0]}} & 5'b0_1000);    //  8
-
-   // *** End   Short *** }}
-
-
-
-
-
-   assign div_clken               =  valid_in | run_state | finish | finish_ff;
-
-   assign run_in                  = (valid_in | run_state) & ~finish & ~cancel;
-
-   assign count_in[5:0]           = {6{run_state & ~finish & ~cancel & ~shortq_enable}} & (count[5:0] + {1'b0,shortq_shift_ff[4:0]} + 6'd1);
-
-
-   assign finish                  = (smallnum_case | ((~rem_ff) ? (count[5:0] == 6'd32) : (count[5:0] == 6'd33)));
-
-   assign valid_out               =  finish_ff & ~cancel;
-
-   assign sign_eff                =  signed_in & (divisor_in[31:0] != 32'b0);
-
-
-   assign q_in[32:0]              = ({33{~run_state                                   }} &  {1'b0,dividend_in[31:0]}) |
-                                    ({33{ run_state &  (valid_ff_x | shortq_enable_ff)}} &  ({dividend_eff[31:0], ~a_in[32]} << shortq_shift_ff[4:0])) |
-                                    ({33{ run_state & ~(valid_ff_x | shortq_enable_ff)}} &  {q_ff[31:0], ~a_in[32]});
-
-   assign qff_enable              =  valid_in | (run_state & ~shortq_enable);
-
-
-
-
-   assign dividend_eff[31:0]      = (sign_ff & dividend_neg_ff) ? dividend_comp[31:0] : q_ff[31:0];
-
-
-   assign m_eff[32:0]             = ( add ) ? m_ff[32:0] : ~m_ff[32:0];
-
-   assign a_eff_shift[64:0]       = {33'b0, dividend_eff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_eff[32:0]             = ({33{ rem_correct                    }} &  a_ff[32:0]            ) |
-                                    ({33{~rem_correct & ~shortq_enable_ff}} & {a_ff[31:0], q_ff[32]} ) |
-                                    ({33{~rem_correct &  shortq_enable_ff}} &  a_eff_shift[64:32]    );
-
-   assign a_shift[32:0]           = {33{run_state}} & a_eff[32:0];
-
-   assign a_in[32:0]              = {33{run_state}} & (a_shift[32:0] + m_eff[32:0] + {32'b0,~add});
-
-   assign aff_enable              =  valid_in | (run_state & ~shortq_enable & (count[5:0]!=6'd33)) | rem_correct;
-
-
-   assign m_already_comp          = (divisor_neg_ff & sign_ff);
-
-   // if m already complemented, then invert operation add->sub, sub->add
-   assign add                     = (a_ff[32] | rem_correct) ^ m_already_comp;
-
-   assign rem_correct             = (count[5:0] == 6'd33) & rem_ff & a_ff[32];
-
-
-
-   assign q_ff_eff[31:0]          = (sign_ff & (dividend_neg_ff ^ divisor_neg_ff)) ? q_ff_comp[31:0] : q_ff[31:0];
-
-   assign a_ff_eff[31:0]          = (sign_ff &  dividend_neg_ff) ? a_ff_comp[31:0] : a_ff[31:0];
-
-   assign data_out[31:0]          = ({32{ smallnum_case_ff          }} & {28'b0, smallnum_ff[3:0]}) |
-                                    ({32{                     rem_ff}} &  a_ff_eff[31:0]          ) |
-                                    ({32{~smallnum_case_ff & ~rem_ff}} &  q_ff_eff[31:0]          );
-
-
-
-
-endmodule // eb1_exu_div_existing_1bit_cheapshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_1bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in, b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic                   quotient_set;
-   logic        [32:0]     adder_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {6'b0,1'b1} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << shortq_shift_ff[4:0];
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[30:0],1'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & ~quotient_set & ~shortq_enable_ff;
-   assign r_adder_sel            =  running_state &  quotient_set & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff          ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[30:0] ,a_ff[31]} ) |
-                                   ( {32{r_adder_sel     }} &  adder_out[31:0]       ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]     ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]            );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[30:0], quotient_set}  ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]} ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                  );
-
-
-
-   assign adder_out[32:0]        = {r_ff[31:0],a_ff[31]} + {b_ff[32:0] };
-
-
-   assign quotient_set           = (~adder_out[32] ^ dividend_sign_ff) | ( (a_ff[30:0] == 31'b0) & (adder_out[32:0] == 33'b0) );
-
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_1bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_2bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [34:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable, r_sign_sel, r_restore_sel, r_adder1_sel, r_adder2_sel, r_adder3_sel;
-   logic        [31:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [3:1]     quotient_raw;
-   logic         [1:0]     quotient_new;
-   logic        [32:0]     adder1_out;
-   logic        [33:0]     adder2_out;
-   logic        [34:0]     adder3_out;
-
-   logic        [63:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:1]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(18) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:1],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:1], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(32) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[31:0]),           .dout(r_ff[31:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b10} + {2'b0,shortq_shift_ff[4:1],1'b0});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[63:0]       = { {32{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:1],1'b0};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[29:0],2'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[1:0] == 2'b00) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[1:0] == 2'b01) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[1:0] == 2'b10) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[1:0] == 2'b11) & ~shortq_enable_ff;
-
-
-   assign r_in[31:0]             = ( {32{r_sign_sel      }} &  32'hffffffff             ) |
-                                   ( {32{r_restore_sel   }} & {r_ff[29:0] ,a_ff[31:30]} ) |
-                                   ( {32{r_adder1_sel    }} &  adder1_out[31:0]         ) |
-                                   ( {32{r_adder2_sel    }} &  adder2_out[31:0]         ) |
-                                   ( {32{r_adder3_sel    }} &  adder3_out[31:0]         ) |
-                                   ( {32{shortq_enable_ff}} &  ar_shifted[63:32]        ) |
-                                   ( {32{by_zero_case    }} &  a_ff[31:0]               );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff       }} & {q_ff[29:0], quotient_new[1:0]} ) |
-                                   ( {32{ smallnum_case  }} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case   }} & {32{1'b1}}                      );
-
-
-   assign b_ff[34:33]            = {b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[32:0]       = {         r_ff[30:0],a_ff[31:30]}  +                       b_ff[32:0];
-   assign adder2_out[33:0]       = {         r_ff[31:0],a_ff[31:30]}  + {b_ff[32:0],1'b0};
-   assign adder3_out[34:0]       = {r_ff[31],r_ff[31:0],a_ff[31:30]}  + {b_ff[33:0],1'b0}  +  b_ff[34:0];
-
-
-   assign quotient_raw[1]        = (~adder1_out[32] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[32:0] == 33'b0) );
-   assign quotient_raw[2]        = (~adder2_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[33:0] == 34'b0) );
-   assign quotient_raw[3]        = (~adder3_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[34:0] == 35'b0) );
-
-   assign quotient_new[1]        = quotient_raw[3] |  quotient_raw[2];
-   assign quotient_new[0]        = quotient_raw[3] |(~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:1] ==  4'b1111) & ~cancel;
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  (5'b11111 - shortq[4:0]);   // [0] is unused
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_2bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_3bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [32:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [36:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder1_sel, r_adder2_sel, r_adder3_sel, r_adder4_sel, r_adder5_sel, r_adder6_sel, r_adder7_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic         [7:1]     quotient_raw;
-   logic         [2:0]     quotient_new;
-   logic        [33:0]     adder1_out;
-   logic        [34:0]     adder2_out;
-   logic        [35:0]     adder3_out;
-   logic        [36:0]     adder4_out;
-   logic        [36:0]     adder5_out;
-   logic        [36:0]     adder6_out;
-   logic        [36:0]     adder7_out;
-
-   logic        [65:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),    .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                      .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(33) i_a_ff           (.*, .clk(clk), .en(a_enable),       .din(a_in[32:0]),           .dout(a_ff[32:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),       .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),      .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),      .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd33);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + {5'b0,2'b11} + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[65:0]       = { {33{dividend_sign_ff}} , a_ff[32:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[32:0]             = ( {33{~a_shift & ~shortq_enable_ff}} & {signed_in & dividend_in[31],dividend_in[31:0]} ) |
-                                   ( {33{ a_shift                    }} & {a_ff[29:0],3'b0}  ) |
-                                   ( {33{            shortq_enable_ff}} &  ar_shifted[32:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[2:0] == 3'b000) & ~shortq_enable_ff;
-   assign r_adder1_sel           =  running_state & (quotient_new[2:0] == 3'b001) & ~shortq_enable_ff;
-   assign r_adder2_sel           =  running_state & (quotient_new[2:0] == 3'b010) & ~shortq_enable_ff;
-   assign r_adder3_sel           =  running_state & (quotient_new[2:0] == 3'b011) & ~shortq_enable_ff;
-   assign r_adder4_sel           =  running_state & (quotient_new[2:0] == 3'b100) & ~shortq_enable_ff;
-   assign r_adder5_sel           =  running_state & (quotient_new[2:0] == 3'b101) & ~shortq_enable_ff;
-   assign r_adder6_sel           =  running_state & (quotient_new[2:0] == 3'b110) & ~shortq_enable_ff;
-   assign r_adder7_sel           =  running_state & (quotient_new[2:0] == 3'b111) & ~shortq_enable_ff;
-
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[29:0] ,a_ff[32:30]} ) |
-                                   ( {33{r_adder1_sel    }} &  adder1_out[32:0]         ) |
-                                   ( {33{r_adder2_sel    }} &  adder2_out[32:0]         ) |
-                                   ( {33{r_adder3_sel    }} &  adder3_out[32:0]         ) |
-                                   ( {33{r_adder4_sel    }} &  adder4_out[32:0]         ) |
-                                   ( {33{r_adder5_sel    }} &  adder5_out[32:0]         ) |
-                                   ( {33{r_adder6_sel    }} &  adder6_out[32:0]         ) |
-                                   ( {33{r_adder7_sel    }} &  adder7_out[32:0]         ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[65:33]        ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}         );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[28:0], quotient_new[2:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[36:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder1_out[33:0]       = {         r_ff[30:0],a_ff[32:30]}  +                                              b_ff[33:0];
-   assign adder2_out[34:0]       = {         r_ff[31:0],a_ff[32:30]}  +                        {b_ff[33:0],1'b0};
-   assign adder3_out[35:0]       = {         r_ff[32:0],a_ff[32:30]}  +                        {b_ff[34:0],1'b0}  +  b_ff[35:0];
-   assign adder4_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0};
-   assign adder5_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +                        b_ff[36:0];
-   assign adder6_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0};
-   assign adder7_out[36:0]       = {r_ff[32],r_ff[32:0],a_ff[32:30]}  +  {b_ff[34:0],2'b0}  +  {b_ff[35:0],1'b0}  +  b_ff[36:0];
-
-   assign quotient_raw[1]        = (~adder1_out[33] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder1_out[33:0] == 34'b0) );
-   assign quotient_raw[2]        = (~adder2_out[34] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder2_out[34:0] == 35'b0) );
-   assign quotient_raw[3]        = (~adder3_out[35] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder3_out[35:0] == 36'b0) );
-   assign quotient_raw[4]        = (~adder4_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder4_out[36:0] == 37'b0) );
-   assign quotient_raw[5]        = (~adder5_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder5_out[36:0] == 37'b0) );
-   assign quotient_raw[6]        = (~adder6_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder6_out[36:0] == 37'b0) );
-   assign quotient_raw[7]        = (~adder7_out[36] ^ dividend_sign_ff) | ( (a_ff[29:0] == 30'b0) & (adder7_out[36:0] == 37'b0) );
-
-   assign quotient_new[2]        = quotient_raw[7] |   quotient_raw[6] | quotient_raw[5]  |   quotient_raw[4];
-   assign quotient_new[1]        = quotient_raw[7] |   quotient_raw[6] |                    (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[3] & quotient_raw[2]);
-   assign quotient_new[0]        = quotient_raw[7] | (~quotient_raw[6] & quotient_raw[5]) | (~quotient_raw[4] & quotient_raw[3]) | (~quotient_raw[2] & quotient_raw[1]);
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd03) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd06) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd09) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd15) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd18) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd21) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd27) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd27);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_3bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-module eb1_exu_div_new_4bit_fullshortq
-  (
-   input  logic            clk,                       // Top level clock
-   input  logic            rst_l,                     // Reset
-   input  logic            scan_mode,                 // Scan mode
-
-   input  logic            cancel,                    // Flush pipeline
-   input  logic            valid_in,
-   input  logic            signed_in,
-   input  logic            rem_in,
-   input  logic [31:0]     dividend_in,
-   input  logic [31:0]     divisor_in,
-
-   output logic            valid_out,
-   output logic [31:0]     data_out
-  );
-
-
-   logic                   valid_ff_in, valid_ff;
-   logic                   finish_raw, finish, finish_ff;
-   logic                   running_state;
-   logic                   misc_enable;
-   logic         [2:0]     control_in, control_ff;
-   logic                   dividend_sign_ff, divisor_sign_ff, rem_ff;
-   logic                   count_enable;
-   logic         [6:0]     count_in, count_ff;
-
-   logic                   smallnum_case;
-   logic         [3:0]     smallnum;
-
-   logic                   a_enable, a_shift;
-   logic        [31:0]     a_in, a_ff;
-
-   logic                   b_enable, b_twos_comp;
-   logic        [32:0]     b_in;
-   logic        [37:0]     b_ff;
-
-   logic        [31:0]     q_in, q_ff;
-
-   logic                   rq_enable;
-   logic                   r_sign_sel;
-   logic                   r_restore_sel;
-   logic                   r_adder01_sel, r_adder02_sel, r_adder03_sel;
-   logic                   r_adder04_sel, r_adder05_sel, r_adder06_sel, r_adder07_sel;
-   logic                   r_adder08_sel, r_adder09_sel, r_adder10_sel, r_adder11_sel;
-   logic                   r_adder12_sel, r_adder13_sel, r_adder14_sel, r_adder15_sel;
-   logic        [32:0]     r_in, r_ff;
-
-   logic                   twos_comp_q_sel, twos_comp_b_sel;
-   logic        [31:0]     twos_comp_in, twos_comp_out;
-
-   logic        [15:1]     quotient_raw;
-   logic         [3:0]     quotient_new;
-   logic        [34:0]     adder01_out;
-   logic        [35:0]     adder02_out;
-   logic        [36:0]     adder03_out;
-   logic        [37:0]     adder04_out;
-   logic        [37:0]     adder05_out;
-   logic        [37:0]     adder06_out;
-   logic        [37:0]     adder07_out;
-   logic        [37:0]     adder08_out;
-   logic        [37:0]     adder09_out;
-   logic        [37:0]     adder10_out;
-   logic        [37:0]     adder11_out;
-   logic        [37:0]     adder12_out;
-   logic        [37:0]     adder13_out;
-   logic        [37:0]     adder14_out;
-   logic        [37:0]     adder15_out;
-
-   logic        [64:0]     ar_shifted;
-   logic         [5:0]     shortq;
-   logic         [4:0]     shortq_shift;
-   logic         [4:0]     shortq_decode;
-   logic         [4:0]     shortq_shift_ff;
-   logic                   shortq_enable;
-   logic                   shortq_enable_ff;
-   logic        [32:0]     shortq_dividend;
-
-   logic                   by_zero_case;
-   logic                   by_zero_case_ff;
-
-
-
-   rvdffe #(19) i_misc_ff        (.*, .clk(clk), .en(misc_enable),     .din ({valid_ff_in, control_in[2:0], by_zero_case,    shortq_enable,    shortq_shift[4:0],    finish,    count_in[6:0]}),
-                                                                       .dout({valid_ff,    control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]}));
-
-   rvdffe #(32) i_a_ff           (.*, .clk(clk), .en(a_enable),        .din(a_in[31:0]),           .dout(a_ff[31:0]));
-   rvdffe #(33) i_b_ff           (.*, .clk(clk), .en(b_enable),        .din(b_in[32:0]),           .dout(b_ff[32:0]));
-   rvdffe #(33) i_r_ff           (.*, .clk(clk), .en(rq_enable),       .din(r_in[32:0]),           .dout(r_ff[32:0]));
-   rvdffe #(32) i_q_ff           (.*, .clk(clk), .en(rq_enable),       .din(q_in[31:0]),           .dout(q_ff[31:0]));
-
-
-
-
-   assign valid_ff_in            =  valid_in  & ~cancel;
-
-   assign control_in[2]          = (~valid_in & control_ff[2]) | (valid_in & signed_in  & dividend_in[31]);
-   assign control_in[1]          = (~valid_in & control_ff[1]) | (valid_in & signed_in  &  divisor_in[31]);
-   assign control_in[0]          = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-
-   assign dividend_sign_ff       =  control_ff[2];
-   assign divisor_sign_ff        =  control_ff[1];
-   assign rem_ff                 =  control_ff[0];
-
-
-   assign by_zero_case           =  valid_ff & (b_ff[31:0] == 32'b0);
-
-   assign misc_enable            =  valid_in | valid_ff | cancel | running_state | finish_ff;
-   assign running_state          = (| count_ff[6:0]) | shortq_enable_ff;
-   assign finish_raw             =   smallnum_case      |
-                                     by_zero_case       |
-                                    (count_ff[6:0] == 7'd32);
-
-
-   assign finish                 =  finish_raw & ~cancel;
-   assign count_enable           = (valid_ff | running_state) & ~finish & ~finish_ff & ~cancel & ~shortq_enable;
-   assign count_in[6:0]          = {7{count_enable}} & (count_ff[6:0] + 7'd4 + {2'b0,shortq_shift_ff[4:0]});
-
-
-   assign a_enable               =  valid_in | running_state;
-   assign a_shift                =  running_state & ~shortq_enable_ff;
-
-   assign ar_shifted[64:0]       = { {33{dividend_sign_ff}} , a_ff[31:0]} << {shortq_shift_ff[4:0]};
-
-   assign a_in[31:0]             = ( {32{~a_shift & ~shortq_enable_ff}} &  dividend_in[31:0] ) |
-                                   ( {32{ a_shift                    }} & {a_ff[27:0],4'b0}  ) |
-                                   ( {32{            shortq_enable_ff}} &  ar_shifted[31:0]  );
-
-
-
-   assign b_enable               =    valid_in | b_twos_comp;
-   assign b_twos_comp            =    valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-
-   assign b_in[32:0]             = ( {33{~b_twos_comp}} & { (signed_in & divisor_in[31]),divisor_in[31:0] } ) |
-                                   ( {33{ b_twos_comp}} & {~divisor_sign_ff,twos_comp_out[31:0] } );
-
-
-   assign rq_enable              =  valid_in | valid_ff | running_state;
-   assign r_sign_sel             =  valid_ff      &  dividend_sign_ff & ~by_zero_case;
-   assign r_restore_sel          =  running_state & (quotient_new[3:0] == 4'd00) & ~shortq_enable_ff;
-   assign r_adder01_sel          =  running_state & (quotient_new[3:0] == 4'd01) & ~shortq_enable_ff;
-   assign r_adder02_sel          =  running_state & (quotient_new[3:0] == 4'd02) & ~shortq_enable_ff;
-   assign r_adder03_sel          =  running_state & (quotient_new[3:0] == 4'd03) & ~shortq_enable_ff;
-   assign r_adder04_sel          =  running_state & (quotient_new[3:0] == 4'd04) & ~shortq_enable_ff;
-   assign r_adder05_sel          =  running_state & (quotient_new[3:0] == 4'd05) & ~shortq_enable_ff;
-   assign r_adder06_sel          =  running_state & (quotient_new[3:0] == 4'd06) & ~shortq_enable_ff;
-   assign r_adder07_sel          =  running_state & (quotient_new[3:0] == 4'd07) & ~shortq_enable_ff;
-   assign r_adder08_sel          =  running_state & (quotient_new[3:0] == 4'd08) & ~shortq_enable_ff;
-   assign r_adder09_sel          =  running_state & (quotient_new[3:0] == 4'd09) & ~shortq_enable_ff;
-   assign r_adder10_sel          =  running_state & (quotient_new[3:0] == 4'd10) & ~shortq_enable_ff;
-   assign r_adder11_sel          =  running_state & (quotient_new[3:0] == 4'd11) & ~shortq_enable_ff;
-   assign r_adder12_sel          =  running_state & (quotient_new[3:0] == 4'd12) & ~shortq_enable_ff;
-   assign r_adder13_sel          =  running_state & (quotient_new[3:0] == 4'd13) & ~shortq_enable_ff;
-   assign r_adder14_sel          =  running_state & (quotient_new[3:0] == 4'd14) & ~shortq_enable_ff;
-   assign r_adder15_sel          =  running_state & (quotient_new[3:0] == 4'd15) & ~shortq_enable_ff;
-
-   assign r_in[32:0]             = ( {33{r_sign_sel      }} & {33{1'b1}}               ) |
-                                   ( {33{r_restore_sel   }} & {r_ff[28:0],a_ff[31:28]} ) |
-                                   ( {33{r_adder01_sel   }} &  adder01_out[32:0]       ) |
-                                   ( {33{r_adder02_sel   }} &  adder02_out[32:0]       ) |
-                                   ( {33{r_adder03_sel   }} &  adder03_out[32:0]       ) |
-                                   ( {33{r_adder04_sel   }} &  adder04_out[32:0]       ) |
-                                   ( {33{r_adder05_sel   }} &  adder05_out[32:0]       ) |
-                                   ( {33{r_adder06_sel   }} &  adder06_out[32:0]       ) |
-                                   ( {33{r_adder07_sel   }} &  adder07_out[32:0]       ) |
-                                   ( {33{r_adder08_sel   }} &  adder08_out[32:0]       ) |
-                                   ( {33{r_adder09_sel   }} &  adder09_out[32:0]       ) |
-                                   ( {33{r_adder10_sel   }} &  adder10_out[32:0]       ) |
-                                   ( {33{r_adder11_sel   }} &  adder11_out[32:0]       ) |
-                                   ( {33{r_adder12_sel   }} &  adder12_out[32:0]       ) |
-                                   ( {33{r_adder13_sel   }} &  adder13_out[32:0]       ) |
-                                   ( {33{r_adder14_sel   }} &  adder14_out[32:0]       ) |
-                                   ( {33{r_adder15_sel   }} &  adder15_out[32:0]       ) |
-                                   ( {33{shortq_enable_ff}} &  ar_shifted[64:32]       ) |
-                                   ( {33{by_zero_case    }} & {1'b0,a_ff[31:0]}        );
-
-
-   assign q_in[31:0]             = ( {32{~valid_ff     }} & {q_ff[27:0], quotient_new[3:0]} ) |
-                                   ( {32{ smallnum_case}} & {28'b0     , smallnum[3:0]}     ) |
-                                   ( {32{ by_zero_case }} & {32{1'b1}}                      );
-
-
-   assign b_ff[37:33]            = {b_ff[32],b_ff[32],b_ff[32],b_ff[32],b_ff[32]};
-
-
-   assign adder01_out[34:0]      = {         r_ff[30:0],a_ff[31:28]}  +                                                                   b_ff[34:0];
-   assign adder02_out[35:0]      = {         r_ff[31:0],a_ff[31:28]}  +                                             {b_ff[34:0],1'b0};
-   assign adder03_out[36:0]      = {         r_ff[32:0],a_ff[31:28]}  +                                             {b_ff[35:0],1'b0}  +  b_ff[36:0];
-   assign adder04_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0};
-   assign adder05_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder06_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder07_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +                       {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder08_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0};
-   assign adder09_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                                              b_ff[37:0];
-   assign adder10_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0};
-   assign adder11_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +                        {b_ff[36:0],1'b0}  +  b_ff[37:0];
-   assign adder12_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0};
-   assign adder13_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +                        b_ff[37:0];
-   assign adder14_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0};
-   assign adder15_out[37:0]      = {r_ff[32],r_ff[32:0],a_ff[31:28]}  +  {b_ff[34:0],3'b0} +  {b_ff[35:0],2'b0}  +  {b_ff[36:0],1'b0}  +  b_ff[37:0];
-
-   assign quotient_raw[01]       = (~adder01_out[34] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder01_out[34:0] == 35'b0) );
-   assign quotient_raw[02]       = (~adder02_out[35] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder02_out[35:0] == 36'b0) );
-   assign quotient_raw[03]       = (~adder03_out[36] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder03_out[36:0] == 37'b0) );
-   assign quotient_raw[04]       = (~adder04_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder04_out[37:0] == 38'b0) );
-   assign quotient_raw[05]       = (~adder05_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder05_out[37:0] == 38'b0) );
-   assign quotient_raw[06]       = (~adder06_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder06_out[37:0] == 38'b0) );
-   assign quotient_raw[07]       = (~adder07_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder07_out[37:0] == 38'b0) );
-   assign quotient_raw[08]       = (~adder08_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder08_out[37:0] == 38'b0) );
-   assign quotient_raw[09]       = (~adder09_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder09_out[37:0] == 38'b0) );
-   assign quotient_raw[10]       = (~adder10_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder10_out[37:0] == 38'b0) );
-   assign quotient_raw[11]       = (~adder11_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder11_out[37:0] == 38'b0) );
-   assign quotient_raw[12]       = (~adder12_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder12_out[37:0] == 38'b0) );
-   assign quotient_raw[13]       = (~adder13_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder13_out[37:0] == 38'b0) );
-   assign quotient_raw[14]       = (~adder14_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder14_out[37:0] == 38'b0) );
-   assign quotient_raw[15]       = (~adder15_out[37] ^ dividend_sign_ff) | ( (a_ff[27:0] == 28'b0) & (adder15_out[37:0] == 38'b0) );
-
-
-   assign quotient_new[0]        = ( quotient_raw[15:01] == 15'b000_0000_0000_0001 ) |  //  1
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[1]        = ( quotient_raw[15:02] == 14'b000_0000_0000_001  ) |  //  2
-                                   ( quotient_raw[15:03] == 13'b000_0000_0000_01   ) |  //  3
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[2]        = ( quotient_raw[15:04] == 12'b000_0000_0000_1    ) |  //  4
-                                   ( quotient_raw[15:05] == 11'b000_0000_0001      ) |  //  5
-                                   ( quotient_raw[15:06] == 10'b000_0000_001       ) |  //  6
-                                   ( quotient_raw[15:07] ==  9'b000_0000_01        ) |  //  7
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-   assign quotient_new[3]        = ( quotient_raw[15:08] ==  8'b000_0000_1         ) |  //  8
-                                   ( quotient_raw[15:09] ==  7'b000_0001           ) |  //  9
-                                   ( quotient_raw[15:10] ==  6'b000_001            ) |  // 10
-                                   ( quotient_raw[15:11] ==  5'b000_01             ) |  // 11
-                                   ( quotient_raw[15:12] ==  4'b000_1              ) |  // 12
-                                   ( quotient_raw[15:13] ==  3'b001                ) |  // 13
-                                   ( quotient_raw[15:14] ==  2'b01                 ) |  // 14
-                                   ( quotient_raw[   15] ==  1'b1                  );   // 15
-
-
-   assign twos_comp_b_sel        =  valid_ff           & ~(dividend_sign_ff ^ divisor_sign_ff);
-   assign twos_comp_q_sel        = ~valid_ff & ~rem_ff &  (dividend_sign_ff ^ divisor_sign_ff) & ~by_zero_case_ff;
-
-   assign twos_comp_in[31:0]     = ( {32{twos_comp_q_sel}} & q_ff[31:0] ) |
-                                   ( {32{twos_comp_b_sel}} & b_ff[31:0] );
-
-   rvtwoscomp #(32) i_twos_comp  (.din(twos_comp_in[31:0]), .dout(twos_comp_out[31:0]));
-
-
-
-   assign valid_out              =  finish_ff & ~cancel;
-
-   assign data_out[31:0]         = ( {32{~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]          ) |
-                                   ( {32{ rem_ff                   }} & r_ff[31:0]          ) |
-                                   ( {32{           twos_comp_q_sel}} & twos_comp_out[31:0] );
-
-
-
-
-   // *** *** *** START : SMALLNUM {{
-
-   assign smallnum_case          = ( (a_ff[31:4]  == 28'b0) & (b_ff[31:4] == 28'b0) & ~by_zero_case & ~rem_ff & valid_ff & ~cancel) |
-                                   ( (a_ff[31:0]  == 32'b0) &                         ~by_zero_case & ~rem_ff & valid_ff & ~cancel);
-
-   assign smallnum[3]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           );
-
-   assign smallnum[2]            = ( a_ff[3] &                                  ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] & ~b_ff[2]                      );
-
-   assign smallnum[1]            = (            a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                                  ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &                       ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &            ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2]                      );
-
-   assign smallnum[0]            = (            a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &             a_ff[0] & ~b_ff[3] &             b_ff[1] &  b_ff[0]) |
-                                   (            a_ff[2] &                       ~b_ff[3] &            ~b_ff[1] & ~b_ff[0]) |
-                                   (                       a_ff[1] &            ~b_ff[3] & ~b_ff[2] &            ~b_ff[0]) |
-                                   (                                  a_ff[0] & ~b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] & ~a_ff[1] &            ~b_ff[3] & ~b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &                                             ~b_ff[2] & ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] & ~a_ff[2] &                       ~b_ff[3] &  b_ff[2] &  b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &            ~b_ff[3] &  b_ff[2] & ~b_ff[1]           ) |
-                                   (~a_ff[3] &  a_ff[2] &             a_ff[0] & ~b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] & ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &             b_ff[0]) |
-                                   (           ~a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                                             ~b_ff[1] & ~b_ff[0]) |
-                                   ( a_ff[3] &             a_ff[1] &                       ~b_ff[2] &            ~b_ff[0]) |
-                                   (~a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] & ~b_ff[3] &  b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &                        b_ff[3] & ~b_ff[2]                      ) |
-                                   ( a_ff[3] &             a_ff[1] &             b_ff[3] & ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &                        a_ff[0] &            ~b_ff[2] & ~b_ff[1]           ) |
-                                   ( a_ff[3] &            ~a_ff[1] &            ~b_ff[3] &  b_ff[2] &  b_ff[1] &  b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &                       ~b_ff[0]) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &             b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] &  a_ff[2] &             a_ff[0] &  b_ff[3] &            ~b_ff[1]           ) |
-                                   ( a_ff[3] & ~a_ff[2] &  a_ff[1] &            ~b_ff[3] &             b_ff[1]           ) |
-                                   ( a_ff[3] &             a_ff[1] &  a_ff[0] &            ~b_ff[2]                      ) |
-                                   ( a_ff[3] &  a_ff[2] &  a_ff[1] &  a_ff[0] &  b_ff[3]                                 );
-
-   // *** *** *** END   : SMALLNUM }}
-
-
-
-
-   // *** *** *** Start : Short Q {{
-
-   assign shortq_dividend[32:0]   = {dividend_sign_ff,a_ff[31:0]};
-
-
-   logic [5:0]  dw_a_enc;
-   logic [5:0]  dw_b_enc;
-   logic [6:0]  dw_shortq_raw;
-
-
-
-   eb1_exu_div_cls i_a_cls  (
-       .operand  ( shortq_dividend[32:0]  ),
-       .cls      ( dw_a_enc[4:0]          ));
-
-   eb1_exu_div_cls i_b_cls  (
-       .operand  ( b_ff[32:0]             ),
-       .cls      ( dw_b_enc[4:0]          ));
-
-   assign dw_a_enc[5]             =  1'b0;
-   assign dw_b_enc[5]             =  1'b0;
-
-
-   assign dw_shortq_raw[6:0]      =  {1'b0,dw_b_enc[5:0]} - {1'b0,dw_a_enc[5:0]} + 7'd1;
-   assign shortq[5:0]             =  dw_shortq_raw[6]  ?  6'd0  :  dw_shortq_raw[5:0];
-
-   assign shortq_enable           =  valid_ff & ~shortq[5] & ~(shortq[4:2] ==  3'b111) & ~cancel;
-
-   assign shortq_decode[4:0]      = ( {5{shortq[4:0] == 5'd31}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd30}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd29}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd28}} & 5'd00) |
-                                    ( {5{shortq[4:0] == 5'd27}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd26}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd25}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd24}} & 5'd04) |
-                                    ( {5{shortq[4:0] == 5'd23}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd22}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd21}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd20}} & 5'd08) |
-                                    ( {5{shortq[4:0] == 5'd19}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd18}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd17}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd16}} & 5'd12) |
-                                    ( {5{shortq[4:0] == 5'd15}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd14}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd13}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd12}} & 5'd16) |
-                                    ( {5{shortq[4:0] == 5'd11}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd10}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd09}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd08}} & 5'd20) |
-                                    ( {5{shortq[4:0] == 5'd07}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd06}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd05}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd04}} & 5'd24) |
-                                    ( {5{shortq[4:0] == 5'd03}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd02}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd01}} & 5'd28) |
-                                    ( {5{shortq[4:0] == 5'd00}} & 5'd28);
-
-
-   assign shortq_shift[4:0]       = ~shortq_enable     ?  5'd0  :  shortq_decode[4:0];
-
-
-   // *** *** *** End   : Short Q }}
-
-
-
-
-
-endmodule // eb1_exu_div_new_4bit_fullshortq
-
-
-
-
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-
-module eb1_exu_div_cls
-  (
-   input  logic [32:0] operand,
-
-   output logic [4:0]  cls                  // Count leading sign bits - "n" format ignoring [32]
-   );
-
-
-   logic [4:0]   cls_zeros;
-   logic [4:0]   cls_ones;
-
-
-assign cls_zeros[4:0]             = ({5{operand[31]    ==  {           1'b1} }} & 5'd00) |
-                                    ({5{operand[31:30] ==  {{ 1{1'b0}},1'b1} }} & 5'd01) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b0}},1'b1} }} & 5'd02) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b0}},1'b1} }} & 5'd03) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b0}},1'b1} }} & 5'd04) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b0}},1'b1} }} & 5'd05) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b0}},1'b1} }} & 5'd06) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b0}},1'b1} }} & 5'd07) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b0}},1'b1} }} & 5'd08) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b0}},1'b1} }} & 5'd09) |
-                                    ({5{operand[31:21] ==  {{10{1'b0}},1'b1} }} & 5'd10) |
-                                    ({5{operand[31:20] ==  {{11{1'b0}},1'b1} }} & 5'd11) |
-                                    ({5{operand[31:19] ==  {{12{1'b0}},1'b1} }} & 5'd12) |
-                                    ({5{operand[31:18] ==  {{13{1'b0}},1'b1} }} & 5'd13) |
-                                    ({5{operand[31:17] ==  {{14{1'b0}},1'b1} }} & 5'd14) |
-                                    ({5{operand[31:16] ==  {{15{1'b0}},1'b1} }} & 5'd15) |
-                                    ({5{operand[31:15] ==  {{16{1'b0}},1'b1} }} & 5'd16) |
-                                    ({5{operand[31:14] ==  {{17{1'b0}},1'b1} }} & 5'd17) |
-                                    ({5{operand[31:13] ==  {{18{1'b0}},1'b1} }} & 5'd18) |
-                                    ({5{operand[31:12] ==  {{19{1'b0}},1'b1} }} & 5'd19) |
-                                    ({5{operand[31:11] ==  {{20{1'b0}},1'b1} }} & 5'd20) |
-                                    ({5{operand[31:10] ==  {{21{1'b0}},1'b1} }} & 5'd21) |
-                                    ({5{operand[31:09] ==  {{22{1'b0}},1'b1} }} & 5'd22) |
-                                    ({5{operand[31:08] ==  {{23{1'b0}},1'b1} }} & 5'd23) |
-                                    ({5{operand[31:07] ==  {{24{1'b0}},1'b1} }} & 5'd24) |
-                                    ({5{operand[31:06] ==  {{25{1'b0}},1'b1} }} & 5'd25) |
-                                    ({5{operand[31:05] ==  {{26{1'b0}},1'b1} }} & 5'd26) |
-                                    ({5{operand[31:04] ==  {{27{1'b0}},1'b1} }} & 5'd27) |
-                                    ({5{operand[31:03] ==  {{28{1'b0}},1'b1} }} & 5'd28) |
-                                    ({5{operand[31:02] ==  {{29{1'b0}},1'b1} }} & 5'd29) |
-                                    ({5{operand[31:01] ==  {{30{1'b0}},1'b1} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{31{1'b0}},1'b1} }} & 5'd31) |
-                                    ({5{operand[31:00] ==  {{32{1'b0}}     } }} & 5'd00);    // Don't care case as it will be handled as special case
-
-
-assign cls_ones[4:0]              = ({5{operand[31:30] ==  {{ 1{1'b1}},1'b0} }} & 5'd00) |
-                                    ({5{operand[31:29] ==  {{ 2{1'b1}},1'b0} }} & 5'd01) |
-                                    ({5{operand[31:28] ==  {{ 3{1'b1}},1'b0} }} & 5'd02) |
-                                    ({5{operand[31:27] ==  {{ 4{1'b1}},1'b0} }} & 5'd03) |
-                                    ({5{operand[31:26] ==  {{ 5{1'b1}},1'b0} }} & 5'd04) |
-                                    ({5{operand[31:25] ==  {{ 6{1'b1}},1'b0} }} & 5'd05) |
-                                    ({5{operand[31:24] ==  {{ 7{1'b1}},1'b0} }} & 5'd06) |
-                                    ({5{operand[31:23] ==  {{ 8{1'b1}},1'b0} }} & 5'd07) |
-                                    ({5{operand[31:22] ==  {{ 9{1'b1}},1'b0} }} & 5'd08) |
-                                    ({5{operand[31:21] ==  {{10{1'b1}},1'b0} }} & 5'd09) |
-                                    ({5{operand[31:20] ==  {{11{1'b1}},1'b0} }} & 5'd10) |
-                                    ({5{operand[31:19] ==  {{12{1'b1}},1'b0} }} & 5'd11) |
-                                    ({5{operand[31:18] ==  {{13{1'b1}},1'b0} }} & 5'd12) |
-                                    ({5{operand[31:17] ==  {{14{1'b1}},1'b0} }} & 5'd13) |
-                                    ({5{operand[31:16] ==  {{15{1'b1}},1'b0} }} & 5'd14) |
-                                    ({5{operand[31:15] ==  {{16{1'b1}},1'b0} }} & 5'd15) |
-                                    ({5{operand[31:14] ==  {{17{1'b1}},1'b0} }} & 5'd16) |
-                                    ({5{operand[31:13] ==  {{18{1'b1}},1'b0} }} & 5'd17) |
-                                    ({5{operand[31:12] ==  {{19{1'b1}},1'b0} }} & 5'd18) |
-                                    ({5{operand[31:11] ==  {{20{1'b1}},1'b0} }} & 5'd19) |
-                                    ({5{operand[31:10] ==  {{21{1'b1}},1'b0} }} & 5'd20) |
-                                    ({5{operand[31:09] ==  {{22{1'b1}},1'b0} }} & 5'd21) |
-                                    ({5{operand[31:08] ==  {{23{1'b1}},1'b0} }} & 5'd22) |
-                                    ({5{operand[31:07] ==  {{24{1'b1}},1'b0} }} & 5'd23) |
-                                    ({5{operand[31:06] ==  {{25{1'b1}},1'b0} }} & 5'd24) |
-                                    ({5{operand[31:05] ==  {{26{1'b1}},1'b0} }} & 5'd25) |
-                                    ({5{operand[31:04] ==  {{27{1'b1}},1'b0} }} & 5'd26) |
-                                    ({5{operand[31:03] ==  {{28{1'b1}},1'b0} }} & 5'd27) |
-                                    ({5{operand[31:02] ==  {{29{1'b1}},1'b0} }} & 5'd28) |
-                                    ({5{operand[31:01] ==  {{30{1'b1}},1'b0} }} & 5'd29) |
-                                    ({5{operand[31:00] ==  {{31{1'b1}},1'b0} }} & 5'd30) |
-                                    ({5{operand[31:00] ==  {{32{1'b1}}     } }} & 5'd31);
-
-
-assign cls[4:0]                   =  operand[32]  ?  cls_ones[4:0]  :  cls_zeros[4:0];
-
-endmodule // eb1_exu_div_cls
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-module eb1_exu_mul_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic          clk,              // Top level clock
-   input logic          rst_l,            // Reset
-   input logic          scan_mode,        // Scan mode
-
-   input eb1_mul_pkt_t mul_p,            // {Valid, RS1 signed operand, RS2 signed operand, Select low 32-bits of result}
-
-   input logic [31:0]   rs1_in,           // A operand
-   input logic [31:0]   rs2_in,           // B operand
-
-
-   output logic [31:0]  result_x          // Result
-  );
-
-
-   logic                mul_x_enable;
-   logic                bit_x_enable;
-   logic signed [32:0]  rs1_ext_in;
-   logic signed [32:0]  rs2_ext_in;
-   logic        [65:0]  prod_x;
-   logic                low_x;
-
-
-
-   // *** Start - BitManip ***
-
-   logic                bitmanip_sel_d;
-   logic                bitmanip_sel_x;
-   logic        [31:0]  bitmanip_d;
-   logic        [31:0]  bitmanip_x;
-
-
-
-   // ZBE
-   logic                ap_bext;
-   logic                ap_bdep;
-
-   // ZBC
-   logic                ap_clmul;
-   logic                ap_clmulh;
-   logic                ap_clmulr;
-
-   // ZBP
-   logic                ap_grev;
-   logic                ap_gorc;
-   logic                ap_shfl;
-   logic                ap_unshfl;
-
-   // ZBR
-   logic                ap_crc32_b;
-   logic                ap_crc32_h;
-   logic                ap_crc32_w;
-   logic                ap_crc32c_b;
-   logic                ap_crc32c_h;
-   logic                ap_crc32c_w;
-
-   // ZBF
-   logic                ap_bfp;
-
-
-   if (pt.BITMANIP_ZBE == 1)
-     begin
-       assign ap_bext         =  mul_p.bext;
-       assign ap_bdep         =  mul_p.bdep;
-     end
-   else
-     begin
-       assign ap_bext         =  1'b0;
-       assign ap_bdep         =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBC == 1)
-     begin
-       assign ap_clmul        =  mul_p.clmul;
-       assign ap_clmulh       =  mul_p.clmulh;
-       assign ap_clmulr       =  mul_p.clmulr;
-     end
-   else
-     begin
-       assign ap_clmul        =  1'b0;
-       assign ap_clmulh       =  1'b0;
-       assign ap_clmulr       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBP == 1)
-     begin
-       assign ap_grev         =  mul_p.grev;
-       assign ap_gorc         =  mul_p.gorc;
-       assign ap_shfl         =  mul_p.shfl;
-       assign ap_unshfl       =  mul_p.unshfl;
-     end
-   else
-     begin
-       assign ap_grev         =  1'b0;
-       assign ap_gorc         =  1'b0;
-       assign ap_shfl         =  1'b0;
-       assign ap_unshfl       =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBR == 1)
-     begin
-       assign ap_crc32_b      =  mul_p.crc32_b;
-       assign ap_crc32_h      =  mul_p.crc32_h;
-       assign ap_crc32_w      =  mul_p.crc32_w;
-       assign ap_crc32c_b     =  mul_p.crc32c_b;
-       assign ap_crc32c_h     =  mul_p.crc32c_h;
-       assign ap_crc32c_w     =  mul_p.crc32c_w;
-     end
-   else
-     begin
-       assign ap_crc32_b      =  1'b0;
-       assign ap_crc32_h      =  1'b0;
-       assign ap_crc32_w      =  1'b0;
-       assign ap_crc32c_b     =  1'b0;
-       assign ap_crc32c_h     =  1'b0;
-       assign ap_crc32c_w     =  1'b0;
-     end
-
-   if (pt.BITMANIP_ZBF == 1)
-     begin
-       assign ap_bfp          =  mul_p.bfp;
-     end
-   else
-     begin
-       assign ap_bfp          =  1'b0;
-     end
-
-
-   // *** End   - BitManip ***
-
-
-
-   assign mul_x_enable           =  mul_p.valid;
-   assign bit_x_enable           =  mul_p.valid;
-
-   assign rs1_ext_in[32]         =  mul_p.rs1_sign & rs1_in[31];
-   assign rs2_ext_in[32]         =  mul_p.rs2_sign & rs2_in[31];
-
-   assign rs1_ext_in[31:0]       =  rs1_in[31:0];
-   assign rs2_ext_in[31:0]       =  rs2_in[31:0];
-
-
-
-   // --------------------------- Multiply       ----------------------------------
-
-
-   logic signed [32:0]  rs1_x;
-   logic signed [32:0]  rs2_x;
-
-   rvdffe #(34) i_a_x_ff         (.*, .clk(clk),  .din({mul_p.low,rs1_ext_in[32:0]}),        .dout({low_x,rs1_x[32:0]}),                 .en(mul_x_enable));
-   rvdffe #(33) i_b_x_ff         (.*, .clk(clk),  .din(           rs2_ext_in[32:0] ),        .dout(       rs2_x[32:0] ),                 .en(mul_x_enable));
-
-
-   assign prod_x[65:0]           =  rs1_x  *  rs2_x;
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BEXT, BDEP   * * * * * * * * * * * * * * * * * *
-
-
-   // *** BEXT == "gather"  ***
-
-   logic        [31:0]    bext_d;
-   logic                  bext_test_bit_d;
-   integer                bext_i, bext_j;
-
-
-   always_comb
-     begin
-
-       bext_j                    =      0;
-       bext_test_bit_d           =   1'b0;
-       bext_d[31:0]              =  32'b0;
-
-       for (bext_i=0; bext_i<32; bext_i++)
-         begin
-             bext_test_bit_d     =  rs2_in[bext_i];
-             if (bext_test_bit_d)
-               begin
-                  bext_d[bext_j] =  rs1_in[bext_i];
-                  bext_j         =  bext_j + 1;
-               end  // IF  bext_test_bit
-         end        // FOR bext_i
-     end            // ALWAYS_COMB
-
-
-
-   // *** BDEP == "scatter" ***
-
-   logic        [31:0]    bdep_d;
-   logic                  bdep_test_bit_d;
-   integer                bdep_i, bdep_j;
-
-
-   always_comb
-     begin
-
-       bdep_j                    =      0;
-       bdep_test_bit_d           =   1'b0;
-       bdep_d[31:0]              =  32'b0;
-
-       for (bdep_i=0; bdep_i<32; bdep_i++)
-         begin
-             bdep_test_bit_d     =  rs2_in[bdep_i];
-             if (bdep_test_bit_d)
-               begin
-                  bdep_d[bdep_i] =  rs1_in[bdep_j];
-                  bdep_j         =  bdep_j + 1;
-               end  // IF  bdep_test_bit
-         end        // FOR bdep_i
-     end            // ALWAYS_COMB
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CLMUL, CLMULH, CLMULR  * * * * * * * * * * * * *
-
-   logic        [62:0]    clmul_raw_d;
-
-
-   assign clmul_raw_d[62:0]      = ( {63{rs2_in[00]}} & {31'b0,rs1_in[31:0]      } ) ^
-                                   ( {63{rs2_in[01]}} & {30'b0,rs1_in[31:0], 1'b0} ) ^
-                                   ( {63{rs2_in[02]}} & {29'b0,rs1_in[31:0], 2'b0} ) ^
-                                   ( {63{rs2_in[03]}} & {28'b0,rs1_in[31:0], 3'b0} ) ^
-                                   ( {63{rs2_in[04]}} & {27'b0,rs1_in[31:0], 4'b0} ) ^
-                                   ( {63{rs2_in[05]}} & {26'b0,rs1_in[31:0], 5'b0} ) ^
-                                   ( {63{rs2_in[06]}} & {25'b0,rs1_in[31:0], 6'b0} ) ^
-                                   ( {63{rs2_in[07]}} & {24'b0,rs1_in[31:0], 7'b0} ) ^
-                                   ( {63{rs2_in[08]}} & {23'b0,rs1_in[31:0], 8'b0} ) ^
-                                   ( {63{rs2_in[09]}} & {22'b0,rs1_in[31:0], 9'b0} ) ^
-                                   ( {63{rs2_in[10]}} & {21'b0,rs1_in[31:0],10'b0} ) ^
-                                   ( {63{rs2_in[11]}} & {20'b0,rs1_in[31:0],11'b0} ) ^
-                                   ( {63{rs2_in[12]}} & {19'b0,rs1_in[31:0],12'b0} ) ^
-                                   ( {63{rs2_in[13]}} & {18'b0,rs1_in[31:0],13'b0} ) ^
-                                   ( {63{rs2_in[14]}} & {17'b0,rs1_in[31:0],14'b0} ) ^
-                                   ( {63{rs2_in[15]}} & {16'b0,rs1_in[31:0],15'b0} ) ^
-                                   ( {63{rs2_in[16]}} & {15'b0,rs1_in[31:0],16'b0} ) ^
-                                   ( {63{rs2_in[17]}} & {14'b0,rs1_in[31:0],17'b0} ) ^
-                                   ( {63{rs2_in[18]}} & {13'b0,rs1_in[31:0],18'b0} ) ^
-                                   ( {63{rs2_in[19]}} & {12'b0,rs1_in[31:0],19'b0} ) ^
-                                   ( {63{rs2_in[20]}} & {11'b0,rs1_in[31:0],20'b0} ) ^
-                                   ( {63{rs2_in[21]}} & {10'b0,rs1_in[31:0],21'b0} ) ^
-                                   ( {63{rs2_in[22]}} & { 9'b0,rs1_in[31:0],22'b0} ) ^
-                                   ( {63{rs2_in[23]}} & { 8'b0,rs1_in[31:0],23'b0} ) ^
-                                   ( {63{rs2_in[24]}} & { 7'b0,rs1_in[31:0],24'b0} ) ^
-                                   ( {63{rs2_in[25]}} & { 6'b0,rs1_in[31:0],25'b0} ) ^
-                                   ( {63{rs2_in[26]}} & { 5'b0,rs1_in[31:0],26'b0} ) ^
-                                   ( {63{rs2_in[27]}} & { 4'b0,rs1_in[31:0],27'b0} ) ^
-                                   ( {63{rs2_in[28]}} & { 3'b0,rs1_in[31:0],28'b0} ) ^
-                                   ( {63{rs2_in[29]}} & { 2'b0,rs1_in[31:0],29'b0} ) ^
-                                   ( {63{rs2_in[30]}} & { 1'b0,rs1_in[31:0],30'b0} ) ^
-                                   ( {63{rs2_in[31]}} & {      rs1_in[31:0],31'b0} );
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GREV         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t grev32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x = ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x = ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x = ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x = ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x = ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    grev1_d;
-   logic        [31:0]    grev2_d;
-   logic        [31:0]    grev4_d;
-   logic        [31:0]    grev8_d;
-   logic        [31:0]    grev_d;
-
-
-   assign grev1_d[31:0]       = (rs2_in[0])  ?  {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                 rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                 rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                 rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]}  :  rs1_in[31:0];
-
-   assign grev2_d[31:0]       = (rs2_in[1])  ?  {grev1_d[29:28],grev1_d[31:30],grev1_d[25:24],grev1_d[27:26],
-                                                 grev1_d[21:20],grev1_d[23:22],grev1_d[17:16],grev1_d[19:18],
-                                                 grev1_d[13:12],grev1_d[15:14],grev1_d[09:08],grev1_d[11:10],
-                                                 grev1_d[05:04],grev1_d[07:06],grev1_d[01:00],grev1_d[03:02]}  :  grev1_d[31:0];
-
-   assign grev4_d[31:0]       = (rs2_in[2])  ?  {grev2_d[27:24],grev2_d[31:28],grev2_d[19:16],grev2_d[23:20],
-                                                 grev2_d[11:08],grev2_d[15:12],grev2_d[03:00],grev2_d[07:04]}  :  grev2_d[31:0];
-
-   assign grev8_d[31:0]       = (rs2_in[3])  ?  {grev4_d[23:16],grev4_d[31:24],grev4_d[07:00],grev4_d[15:08]}  :  grev4_d[31:0];
-
-   assign grev_d[31:0]        = (rs2_in[4])  ?  {grev8_d[15:00],grev8_d[31:16]}  :  grev8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  GORC         * * * * * * * * * * * * * * * * * *
-
-   // uint32_t gorc32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 31;
-   //
-   //     if (shamt &  1)  x |= ( (x & 0x55555555) <<  1) | ( (x & 0xAAAAAAAA) >>  1);
-   //     if (shamt &  2)  x |= ( (x & 0x33333333) <<  2) | ( (x & 0xCCCCCCCC) >>  2);
-   //     if (shamt &  4)  x |= ( (x & 0x0F0F0F0F) <<  4) | ( (x & 0xF0F0F0F0) >>  4);
-   //     if (shamt &  8)  x |= ( (x & 0x00FF00FF) <<  8) | ( (x & 0xFF00FF00) >>  8);
-   //     if (shamt & 16)  x |= ( (x & 0x0000FFFF) << 16) | ( (x & 0xFFFF0000) >> 16);
-   //
-   //     return x;
-   //  }
-
-
-   logic        [31:0]    gorc1_d;
-   logic        [31:0]    gorc2_d;
-   logic        [31:0]    gorc4_d;
-   logic        [31:0]    gorc8_d;
-   logic        [31:0]    gorc_d;
-
-
-   assign gorc1_d[31:0]       = ( {32{rs2_in[0]}} & {rs1_in[30],rs1_in[31],rs1_in[28],rs1_in[29],rs1_in[26],rs1_in[27],rs1_in[24],rs1_in[25],
-                                                     rs1_in[22],rs1_in[23],rs1_in[20],rs1_in[21],rs1_in[18],rs1_in[19],rs1_in[16],rs1_in[17],
-                                                     rs1_in[14],rs1_in[15],rs1_in[12],rs1_in[13],rs1_in[10],rs1_in[11],rs1_in[08],rs1_in[09],
-                                                     rs1_in[06],rs1_in[07],rs1_in[04],rs1_in[05],rs1_in[02],rs1_in[03],rs1_in[00],rs1_in[01]} ) | rs1_in[31:0];
-
-   assign gorc2_d[31:0]       = ( {32{rs2_in[1]}} & {gorc1_d[29:28],gorc1_d[31:30],gorc1_d[25:24],gorc1_d[27:26],
-                                                     gorc1_d[21:20],gorc1_d[23:22],gorc1_d[17:16],gorc1_d[19:18],
-                                                     gorc1_d[13:12],gorc1_d[15:14],gorc1_d[09:08],gorc1_d[11:10],
-                                                     gorc1_d[05:04],gorc1_d[07:06],gorc1_d[01:00],gorc1_d[03:02]} ) | gorc1_d[31:0];
-
-   assign gorc4_d[31:0]       = ( {32{rs2_in[2]}} & {gorc2_d[27:24],gorc2_d[31:28],gorc2_d[19:16],gorc2_d[23:20],
-                                                     gorc2_d[11:08],gorc2_d[15:12],gorc2_d[03:00],gorc2_d[07:04]} ) | gorc2_d[31:0];
-
-   assign gorc8_d[31:0]       = ( {32{rs2_in[3]}} & {gorc4_d[23:16],gorc4_d[31:24],gorc4_d[07:00],gorc4_d[15:08]} ) | gorc4_d[31:0];
-
-   assign gorc_d[31:0]        = ( {32{rs2_in[4]}} & {gorc8_d[15:00],gorc8_d[31:16]} ) | gorc8_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  SHFL, UNSHLF * * * * * * * * * * * * * * * * * *
-
-   // uint32_t shuffle32_stage (uint32_t src, uint32_t maskL, uint32_t maskR, int N)
-   // {
-   //     uint32_t x  = src & ~(maskL | maskR);
-   //     x          |= ((src << N) & maskL) | ((src >> N) & maskR);
-   //     return x;
-   // }
-   //
-   //
-   //
-   // uint32_t shfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    shfl8_d;
-   logic        [31:0]    shfl4_d;
-   logic        [31:0]    shfl2_d;
-   logic        [31:0]    shfl_d;
-
-
-
-   assign shfl8_d[31:0]       = (rs2_in[3])  ?  {rs1_in[31:24],rs1_in[15:08],rs1_in[23:16],rs1_in[07:00]}      :  rs1_in[31:0];
-
-   assign shfl4_d[31:0]       = (rs2_in[2])  ?  {shfl8_d[31:28],shfl8_d[23:20],shfl8_d[27:24],shfl8_d[19:16],
-                                                 shfl8_d[15:12],shfl8_d[07:04],shfl8_d[11:08],shfl8_d[03:00]}  :  shfl8_d[31:0];
-
-   assign shfl2_d[31:0]       = (rs2_in[1])  ?  {shfl4_d[31:30],shfl4_d[27:26],shfl4_d[29:28],shfl4_d[25:24],
-                                                 shfl4_d[23:22],shfl4_d[19:18],shfl4_d[21:20],shfl4_d[17:16],
-                                                 shfl4_d[15:14],shfl4_d[11:10],shfl4_d[13:12],shfl4_d[09:08],
-                                                 shfl4_d[07:06],shfl4_d[03:02],shfl4_d[05:04],shfl4_d[01:00]}  :  shfl4_d[31:0];
-
-   assign shfl_d[31:0]        = (rs2_in[0])  ?  {shfl2_d[31],shfl2_d[29],shfl2_d[30],shfl2_d[28],shfl2_d[27],shfl2_d[25],shfl2_d[26],shfl2_d[24],
-                                                 shfl2_d[23],shfl2_d[21],shfl2_d[22],shfl2_d[20],shfl2_d[19],shfl2_d[17],shfl2_d[18],shfl2_d[16],
-                                                 shfl2_d[15],shfl2_d[13],shfl2_d[14],shfl2_d[12],shfl2_d[11],shfl2_d[09],shfl2_d[10],shfl2_d[08],
-                                                 shfl2_d[07],shfl2_d[05],shfl2_d[06],shfl2_d[04],shfl2_d[03],shfl2_d[01],shfl2_d[02],shfl2_d[00]}  :  shfl2_d[31:0];
-
-
-
-
-   // uint32_t unshfl32(uint32_t rs1, uint32_t rs2)
-   // {
-   //     uint32_t x = rs1;
-   //     int shamt = rs2 & 15
-   //
-   //     if (shamt & 1)  x = shuffle32_stage(x, 0x44444444, 0x22222222, 1);
-   //     if (shamt & 2)  x = shuffle32_stage(x, 0x30303030, 0xc0c0c0c0, 2);
-   //     if (shamt & 4)  x = shuffle32_stage(x, 0x0f000f00, 0x00f000f0, 4);
-   //     if (shamt & 8)  x = shuffle32_stage(x, 0x00ff0000, 0x0000ff00, 8);
-   //
-   //     return x;
-   // }
-
-
-   logic        [31:0]    unshfl1_d;
-   logic        [31:0]    unshfl2_d;
-   logic        [31:0]    unshfl4_d;
-   logic        [31:0]    unshfl_d;
-
-
-   assign unshfl1_d[31:0]     = (rs2_in[0])  ?  {rs1_in[31],rs1_in[29],rs1_in[30],rs1_in[28],rs1_in[27],rs1_in[25],rs1_in[26],rs1_in[24],
-                                                 rs1_in[23],rs1_in[21],rs1_in[22],rs1_in[20],rs1_in[19],rs1_in[17],rs1_in[18],rs1_in[16],
-                                                 rs1_in[15],rs1_in[13],rs1_in[14],rs1_in[12],rs1_in[11],rs1_in[09],rs1_in[10],rs1_in[08],
-                                                 rs1_in[07],rs1_in[05],rs1_in[06],rs1_in[04],rs1_in[03],rs1_in[01],rs1_in[02],rs1_in[00]}  :  rs1_in[31:0];
-
-   assign unshfl2_d[31:0]     = (rs2_in[1])  ?  {unshfl1_d[31:30],unshfl1_d[27:26],unshfl1_d[29:28],unshfl1_d[25:24],
-                                                 unshfl1_d[23:22],unshfl1_d[19:18],unshfl1_d[21:20],unshfl1_d[17:16],
-                                                 unshfl1_d[15:14],unshfl1_d[11:10],unshfl1_d[13:12],unshfl1_d[09:08],
-                                                 unshfl1_d[07:06],unshfl1_d[03:02],unshfl1_d[05:04],unshfl1_d[01:00]}  :  unshfl1_d[31:0];
-
-   assign unshfl4_d[31:0]     = (rs2_in[2])  ?  {unshfl2_d[31:28],unshfl2_d[23:20],unshfl2_d[27:24],unshfl2_d[19:16],
-                                                 unshfl2_d[15:12],unshfl2_d[07:04],unshfl2_d[11:08],unshfl2_d[03:00]}  :  unshfl2_d[31:0];
-
-   assign unshfl_d[31:0]      = (rs2_in[3])  ?  {unshfl4_d[31:24],unshfl4_d[15:08],unshfl4_d[23:16],unshfl4_d[07:00]}  :  unshfl4_d[31:0];
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  CRC32, CRC32c  * * * * * * * * * * * * * * * * *
-
-   // ***  computed from   https: //crccalc.com  ***
-   //
-   // "a" is 8'h61 = 8'b0110_0001    (8'h61 ^ 8'hff = 8'h9e)
-   //
-   // Input must first be XORed with 32'hffff_ffff
-   //
-   //
-   // CRC32
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     e8b7be43      ffffff9e   174841bc
-   // "aa"    078a19d7      ffff9e9e   f875e628
-   // "aaaa"  ad98e545      9e9e9e9e   5267a1ba
-   //
-   //
-   //
-   // CRC32c
-   //
-   // Input    Output        Input      Output
-   // -----   --------      --------   --------
-   // "a"     c1d04330      ffffff9e   3e2fbccf
-   // "aa"    f1f2dac2      ffff9e9e   0e0d253d
-   // "aaaa"  6a52eeb0      9e9e9e9e   95ad114f
-
-
-   logic                  crc32_all;
-   logic        [31:0]    crc32_poly_rev;
-   logic        [31:0]    crc32c_poly_rev;
-   integer                crc32_bi, crc32_hi, crc32_wi, crc32c_bi, crc32c_hi, crc32c_wi;
-   logic        [31:0]    crc32_bd, crc32_hd, crc32_wd, crc32c_bd, crc32c_hd, crc32c_wd;
-
-
-   assign crc32_all              =  ap_crc32_b  | ap_crc32_h  | ap_crc32_w | ap_crc32c_b | ap_crc32c_h | ap_crc32c_w;
-
-   assign crc32_poly_rev[31:0]   =  32'hEDB88320;    // bit reverse of 32'h04C11DB7
-   assign crc32c_poly_rev[31:0]  =  32'h82F63B78;    // bit reverse of 32'h1EDC6F41
-
-
-   always_comb
-     begin
-       crc32_bd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_bi=0; crc32_bi<8; crc32_bi++)
-         begin
-            crc32_bd[31:0] = (crc32_bd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_bd[0]}});
-         end      // FOR    crc32_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_hd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_hi=0; crc32_hi<16; crc32_hi++)
-         begin
-            crc32_hd[31:0] = (crc32_hd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_hd[0]}});
-         end      // FOR    crc32_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32_wd[31:0]            =  rs1_in[31:0];
-
-       for (crc32_wi=0; crc32_wi<32; crc32_wi++)
-         begin
-            crc32_wd[31:0] = (crc32_wd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32{crc32_wd[0]}});
-         end      // FOR    crc32_wi
-     end          // ALWAYS_COMB
-
-
-
-
-   always_comb
-     begin
-       crc32c_bd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_bi=0; crc32c_bi<8; crc32c_bi++)
-         begin
-            crc32c_bd[31:0] = (crc32c_bd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_bd[0]}});
-         end      // FOR    crc32c_bi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_hd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_hi=0; crc32c_hi<16; crc32c_hi++)
-         begin
-            crc32c_hd[31:0] = (crc32c_hd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_hd[0]}});
-         end      // FOR    crc32c_hi
-     end          // ALWAYS_COMB
-
-
-   always_comb
-     begin
-       crc32c_wd[31:0]           =  rs1_in[31:0];
-
-       for (crc32c_wi=0; crc32c_wi<32; crc32c_wi++)
-         begin
-            crc32c_wd[31:0] = (crc32c_wd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32{crc32c_wd[0]}});
-         end      // FOR    crc32c_wi
-     end          // ALWAYS_COMB
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  BFP          * * * * * * * * * * * * * * * * * *
-
-   logic        [4:0]     bfp_len;
-   logic        [4:0]     bfp_off;
-   logic        [31:0]    bfp_len_mask_;
-   logic        [15:0]    bfp_preshift_data;
-   logic        [63:0]    bfp_shift_data;
-   logic        [63:0]    bfp_shift_mask;
-   logic        [31:0]    bfp_result_d;
-
-
-   assign bfp_len[3:0]           =  rs2_in[27:24];
-   assign bfp_len[4]             = (bfp_len[3:0] == 4'b0);   // If LEN field is zero, then LEN=16
-   assign bfp_off[4:0]           =  rs2_in[20:16];
-
-   assign bfp_len_mask_[31:0]    =  32'hffff_ffff  <<  bfp_len[4:0];
-   assign bfp_preshift_data[15:0]=  rs2_in[15:0] & ~bfp_len_mask_[15:0];
-
-   assign bfp_shift_data[63:0]   = {16'b0,bfp_preshift_data[15:0], 16'b0,bfp_preshift_data[15:0]}  <<  bfp_off[4:0];
-   assign bfp_shift_mask[63:0]   = {bfp_len_mask_[31:0],           bfp_len_mask_[31:0]}            <<  bfp_off[4:0];
-
-   assign bfp_result_d[31:0]     = bfp_shift_data[63:32] | (rs1_in[31:0] & bfp_shift_mask[63:32]);
-
-
-
-
-
-   // * * * * * * * * * * * * * * * * * *  BitManip  :  Common logic * * * * * * * * * * * * * * * * * *
-
-
-   assign bitmanip_sel_d         =  ap_bext | ap_bdep | ap_clmul | ap_clmulh | ap_clmulr | ap_grev | ap_gorc | ap_shfl | ap_unshfl | crc32_all | ap_bfp;
-
-   assign bitmanip_d[31:0]       = ( {32{ap_bext}}     &       bext_d[31:0]        ) |
-                                   ( {32{ap_bdep}}     &       bdep_d[31:0]        ) |
-                                   ( {32{ap_clmul}}    &       clmul_raw_d[31:0]   ) |
-                                   ( {32{ap_clmulh}}   & {1'b0,clmul_raw_d[62:32]} ) |
-                                   ( {32{ap_clmulr}}   &       clmul_raw_d[62:31]  ) |
-                                   ( {32{ap_grev}}     &       grev_d[31:0]        ) |
-                                   ( {32{ap_gorc}}     &       gorc_d[31:0]        ) |
-                                   ( {32{ap_shfl}}     &       shfl_d[31:0]        ) |
-                                   ( {32{ap_unshfl}}   &       unshfl_d[31:0]      ) |
-                                   ( {32{ap_crc32_b}}  &       crc32_bd[31:0]      ) |
-                                   ( {32{ap_crc32_h}}  &       crc32_hd[31:0]      ) |
-                                   ( {32{ap_crc32_w}}  &       crc32_wd[31:0]      ) |
-                                   ( {32{ap_crc32c_b}} &       crc32c_bd[31:0]     ) |
-                                   ( {32{ap_crc32c_h}} &       crc32c_hd[31:0]     ) |
-                                   ( {32{ap_crc32c_w}} &       crc32c_wd[31:0]     ) |
-                                   ( {32{ap_bfp}}      &       bfp_result_d[31:0]  );
-
-
-
-   rvdffe #(33) i_bitmanip_ff    (.*, .clk(clk),  .din({bitmanip_sel_d,bitmanip_d[31:0]}),   .dout({bitmanip_sel_x,bitmanip_x[31:0]}),   .en(bit_x_enable));
-
-
-
-
-   assign result_x[31:0]         =  ( {32{~bitmanip_sel_x & ~low_x}} & prod_x[63:32]    ) |
-                                    ( {32{~bitmanip_sel_x &  low_x}} & prod_x[31:0]     ) |
-                                                                       bitmanip_x[31:0];
-
-
-
-endmodule  // eb1_exu_mul_ctl
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-//********************************************************************************
-// Function: Top level file for Icache, Fetch, Branch prediction & Aligner
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic free_l2clk,                   // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic active_clk,                   // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic clk,                          // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic rst_l,                        // reset, active low
-
-   input logic dec_i0_decode_d,              // Valid instruction at D and not blocked
-
-   input logic exu_flush_final, // flush, includes upper and lower
-   input logic dec_tlu_i0_commit_cmt , // committed i0
-   input logic dec_tlu_flush_err_wb , // flush due to parity error.
-   input logic dec_tlu_flush_noredir_wb, // don't fetch, validated with exu_flush_final
-   input logic [31:1] exu_flush_path_final, // flush fetch address
-
-   input logic [31:0]  dec_tlu_mrac_ff ,// Side_effect , cacheable for each region
-   input logic         dec_tlu_fence_i_wb, // fence.i, invalidate icache, validated with exu_flush_final
-   input logic         dec_tlu_flush_leak_one_wb, // ignore bp for leak one fetches
-
-   input logic                       dec_tlu_bpred_disable,     // disable all branch prediction
-   input logic                       dec_tlu_core_ecc_disable,  // disable ecc checking and flagging
-   input logic                       dec_tlu_force_halt,        // force halt
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-   input  logic                      ifu_bus_clk_en,
-
-   input  logic                      dma_iccm_req,
-   input  logic [31:0]               dma_mem_addr,
-   input  logic [2:0]                dma_mem_sz,
-   input  logic                      dma_mem_write,
-   input  logic [63:0]               dma_mem_wdata,
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-
-   input  logic                      dma_iccm_stall_any,
-   output logic                      iccm_dma_ecc_error,
-   output logic                      iccm_dma_rvalid,
-   output logic [63:0]               iccm_dma_rdata,
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,
-
-   output logic       ifu_pmu_instr_aligned,
-   output logic       ifu_pmu_fetch_stall,
-   output logic       ifu_ic_error_start,     // has all of the I$ ecc/parity for data/tag
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0][70:0]               ic_wr_data,         // Data to fill to the Icache. With ECC
-   input  logic [63:0]              ic_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]              ic_debug_rd_data ,        // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]                     ictag_debug_rd_data,// Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,   // Debug wr cache.
-
-   output logic [70:0]               ifu_ic_debug_rd_data,
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-   output logic [63:0]               ic_premux_data,     // Premux data to be muxed with each way of the Icache.
-   output logic                      ic_sel_premux_data, // Select the premux data.
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]               iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-
-   output logic                      ifu_iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-
-// Perf counter sigs
-   output logic       ifu_pmu_ic_miss, // ic miss
-   output logic       ifu_pmu_ic_hit, // ic hit
-   output logic       ifu_pmu_bus_error, // iside bus error
-   output logic       ifu_pmu_bus_busy,  // iside bus busy
-   output logic       ifu_pmu_bus_trxn, // iside bus transactions
-
-
-   output logic       ifu_i0_icaf,         // Instruction 0 access fault. From Aligner to Decode
-   output logic [1:0] ifu_i0_icaf_type, // Instruction 0 access fault type
-
-   output logic  ifu_i0_valid,        // Instruction 0 valid. From Aligner to Decode
-   output logic  ifu_i0_icaf_second,  // Instruction 0 has access fault on second 2B of 4B inst
-   output logic  ifu_i0_dbecc,        // Instruction 0 has double bit ecc error
-   output logic  iccm_dma_sb_error,   // Single Bit ECC error from a DMA access
-   output logic[31:0] ifu_i0_instr,   // Instruction 0 . From Aligner to Decode
-   output logic[31:1] ifu_i0_pc,      // Instruction 0 pc. From Aligner to Decode
-   output logic ifu_i0_pc4,           // Instruction 0 is 4 byte. From Aligner to Decode
-
-   output logic ifu_miss_state_idle,   // There is no outstanding miss. Cache miss state is idle.
-
-   output eb1_br_pkt_t i0_brp,           // Instruction 0 branch packet. From Aligner to Decode
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ifu_i0_bp_index, // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_i0_bp_fghr, // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0] ifu_i0_bp_btag, // BP tag
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // slot0 update/error pkt
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associt btb error index
-
-   input dec_tlu_flush_lower_wb,
-
-   output logic [15:0] ifu_i0_cinst,
-
-
-/// Icache debug
-   input  eb1_cache_debug_pkt_t        dec_tlu_ic_diag_pkt ,
-   output logic                    ifu_ic_debug_rd_data_valid,
-   output logic                                iccm_buf_correct_ecc,
-   output logic                                iccm_correction_state,
-
-   input logic scan_mode
-   );
-
-   localparam TAGWIDTH = 2 ;
-   localparam IDWIDTH  = 2 ;
-
-   logic                   ifu_fb_consume1, ifu_fb_consume2;
-   logic [31:1]            ifc_fetch_addr_f;
-   logic [31:1]            ifc_fetch_addr_bf;
-
-   logic [1:0]   ifu_fetch_val;  // valids on a 2B boundary, left justified [7] implies valid fetch
-   logic [31:1]  ifu_fetch_pc;   // starting pc of fetch
-
-   logic iccm_rd_ecc_single_err, ic_error_start;
-   assign ifu_iccm_rd_ecc_single_err = iccm_rd_ecc_single_err;
-   assign ifu_ic_error_start = ic_error_start;
-
-
-   logic        ic_write_stall;
-   logic        ic_dma_active;
-   logic        ifc_dma_access_ok;
-   logic [1:0]  ic_access_fault_f;
-   logic [1:0]  ic_access_fault_type_f;
-   logic        ifu_ic_mb_empty;
-
-   logic ic_hit_f;
-
-   logic [1:0] ifu_bp_way_f; // way indication; right justified
-   logic       ifu_bp_hit_taken_f; // kill next fetch; taken target found
-   logic [31:1] ifu_bp_btb_target_f; //  predicted target PC
-   logic        ifu_bp_inst_mask_f; // tell ic which valids to kill because of a taken branch; right justified
-   logic [1:0]  ifu_bp_hist1_f; // history counters for all 4 potential branches; right justified
-   logic [1:0]  ifu_bp_hist0_f; // history counters for all 4 potential branches; right justified
-   logic [11:0] ifu_bp_poffset_f; // predicted target
-   logic [1:0]  ifu_bp_ret_f; // predicted ret ; right justified
-   logic [1:0]  ifu_bp_pc4_f; // pc4 indication; right justified
-   logic [1:0]  ifu_bp_valid_f; // branch valid, right justified
-   logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f;
-   logic [1:0] [$clog2(pt.BTB_SIZE)-1:0] ifu_bp_fa_index_f;
-
-
-   // fetch control
-   eb1_ifu_ifc_ctl #(.pt(pt)) ifc (.*
-                    );
-
-   // branch predictor
-   if (pt.BTB_ENABLE==1) begin  : bpred
-      eb1_ifu_bp_ctl #(.pt(pt)) bp (.*);
-   end
-   else begin : bpred
-      assign ifu_bp_hit_taken_f = '0;
-      // verif wires
-      logic btb_wr_en_way0, btb_wr_en_way1,dec_tlu_error_wb;
-      logic [16+pt.BTB_BTAG_SIZE:0] btb_wr_data;
-      assign btb_wr_en_way0 = '0;
-      assign btb_wr_en_way1 = '0;
-      assign btb_wr_data = '0;
-      assign dec_tlu_error_wb ='0;
-      assign ifu_bp_inst_mask_f = 1'b1;
-   end
-
-
-   logic [1:0]   ic_fetch_val_f;
-   logic [31:0] ic_data_f;
-   logic [31:0] ifu_fetch_data_f;
-   logic ifc_fetch_req_f;
-   logic ifc_fetch_req_f_raw;
-   logic [1:0] iccm_rd_ecc_double_err;  // This fetch has an iccm double error.
-
-   logic ifu_async_error_start;
-
-
-   assign ifu_fetch_data_f[31:0] = ic_data_f[31:0];
-   assign ifu_fetch_val[1:0] = ic_fetch_val_f[1:0];
-   assign ifu_fetch_pc[31:1] = ifc_fetch_addr_f[31:1];
-
- logic                       ifc_fetch_uncacheable_bf;      // The fetch request is uncacheable space. BF stage
- logic                       ifc_fetch_req_bf;              // Fetch request. Comes with the address.  BF stage
- logic                       ifc_fetch_req_bf_raw;          // Fetch request without some qualifications. Used for clock-gating. BF stage
- logic                       ifc_iccm_access_bf;            // This request is to the ICCM. Do not generate misses to the bus.
- logic                       ifc_region_acc_fault_bf;       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   // aligner
-
-   eb1_ifu_aln_ctl #(.pt(pt)) aln (
-                                    .*
-                                    );
-
-
-   // icache
-   eb1_ifu_mem_ctl #(.pt(pt)) mem_ctl
-     (.*,
-      .ic_data_f(ic_data_f[31:0])
-      );
-
-
-
-   // Performance debug info
-   //
-   //
-/*`ifdef DUMP_BTB_ON
-   logic              exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_way; // conditional branch mispredict
-   logic exu_mp_ataken; // direction is actual taken
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-
-   assign exu_mp_valid = exu_mp_pkt.misp; // conditional branch mispredict
-   assign exu_mp_ataken = exu_mp_pkt.ataken;  // direction is actual taken
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // branch is a jump always
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_f;
- `define DEC `CPU_TOP.dec
- `define EXU `CPU_TOP.exu
-   eb1_btb_addr_hash f2hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   logic [31:0] mppc_ns, mppc;
-   logic        exu_flush_final_d1;
-   assign mppc_ns[31:1] = `EXU.i0_flush_upper_x ? `EXU.exu_i0_pc_x : `EXU.dec_i0_pc_d;
-   assign mppc_ns[0] = 1'b0;
-   rvdff #(33)  junk_ff (.*, .clk(active_clk), .din({mppc_ns[31:0], exu_flush_final}), .dout({mppc[31:0], exu_flush_final_d1}));
-   logic  tmp_bnk;
-   assign tmp_bnk = bpred.bp.btb_sel_f[1];
-
-   always @(negedge clk) begin
-      if(`DEC.tlu.mcyclel[31:0] == 32'h0000_0010) begin
-         $display("BTB_CONFIG: %d",pt.BTB_SIZE);
-         `ifndef BP_NOGSHARE
-         $display("BHT_CONFIG: %d gshare: 1",pt.BHT_SIZE);
-         `else
-         $display("BHT_CONFIG: %d gshare: 0",pt.BHT_SIZE);
-         `endif
-         $display("RS_CONFIG: %d", pt.RET_STACK_SIZE);
-      end
-       if(exu_flush_final_d1 & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error) & (exu_mp_pkt.misp | exu_mp_pkt.ataken))
-         $display("%7d BTB_MP  : index: %0h bank: %0h call: %b ret: %b ataken: %b hist: %h valid: %b tag: %h targ: %h eghr: %b pred: %b ghr_index: %h brpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha, exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO], 1'b0, exu_mp_call, exu_mp_ret, exu_mp_ataken, exu_mp_hist[1:0], exu_mp_valid, exu_mp_btag[pt.BTB_BTAG_SIZE-1:0], {exu_flush_path_final[31:1], 1'b0}, exu_mp_eghr[pt.BHT_GHR_SIZE-1:0], exu_mp_valid, bpred.bp.bht_wr_addr0, mppc[31:0], exu_mp_pkt.way);
-
-     for(int i = 0; i < 8; i++) begin
-      if(ifu_bp_valid_f[i] & ifc_fetch_req_f)
-        $display("%7d BTB_HIT : index: %0h bank: %0h call: %b ret: %b taken: %b strength: %b tag: %h targ: %0h ghr: %4b ghr_index: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],bpred.bp.btb_sel_f[1], bpred.bp.btb_rd_call_f, bpred.bp.btb_rd_ret_f, ifu_bp_hist1_f[tmp_bnk], ifu_bp_hist0_f[tmp_bnk], bpred.bp.fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0], {ifu_bp_btb_target_f[31:1], 1'b0}, bpred.bp.fghr[pt.BHT_GHR_SIZE-1:0], bpred.bp.bht_rd_addr_f, ifu_bp_way_f[tmp_bnk]);
-     end
-      if(dec_tlu_br0_r_pkt.valid & ~(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error))
-        $display("%7d BTB_UPD0: ghr_index: %0h bank: %0h hist: %h  way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,bpred.bp.br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO],{dec_tlu_br0_r_pkt.middle}, dec_tlu_br0_r_pkt.hist, dec_tlu_br0_r_pkt.way);
-
-      if(dec_tlu_br0_r_pkt.br_error | dec_tlu_br0_r_pkt.br_start_error)
-        $display("%7d BTB_ERR0: index: %0h bank: %0h start: %b rfpc: %h way: %h", `DEC.tlu.mcyclel[31:0]+32'ha,exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO],1'b0, dec_tlu_br0_r_pkt.br_start_error, {exu_flush_path_final[31:1], 1'b0}, dec_tlu_br0_r_pkt.way);
-   end // always @ (negedge clk)
-      function [1:0] encode4_2;
-      input [3:0] in;
-
-      encode4_2[1] = in[3] | in[2];
-      encode4_2[0] = in[3] | in[1];
-
-   endfunction
-`endif
-*/
-endmodule // eb1_ifu
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Instruction aligner
-//********************************************************************************
-module eb1_ifu_aln_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-
-   input logic                                    scan_mode,                // Flop scan mode control
-   input logic                                    rst_l,                    // reset, active low
-   input logic                                    clk,                      // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                    active_clk,               // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-
-   input logic                                    ifu_async_error_start,    // ecc/parity related errors with current fetch - not sent down the pipe
-
-   input logic [1:0]                              iccm_rd_ecc_double_err,   // This fetch has a double ICCM ecc  error.
-
-   input logic [1:0]                              ic_access_fault_f,        // Instruction access fault for the current fetch.
-   input logic [1:0]                              ic_access_fault_type_f,   // Instruction access fault types
-
-   input logic                                    exu_flush_final,          // Flush from the pipeline.
-
-   input logic                                    dec_i0_decode_d,          // Valid instruction at D-stage and not blocked
-
-   input logic [31:0]                             ifu_fetch_data_f,         // fetch data in memory format - not right justified
-
-   input logic [1:0]                              ifu_fetch_val,            // valids on a 2B boundary, right justified
-   input logic [31:1]                             ifu_fetch_pc,             // starting pc of fetch
-
-
-
-   output logic                                   ifu_i0_valid,             // Instruction 0 is valid
-   output logic                                   ifu_i0_icaf,              // Instruction 0 has access fault
-   output logic [1:0]                             ifu_i0_icaf_type,         // Instruction 0 access fault type
-   output logic                                   ifu_i0_icaf_second,       // Instruction 0 has access fault on second 2B of 4B inst
-
-   output logic                                   ifu_i0_dbecc,             // Instruction 0 has double bit ecc error
-   output logic [31:0]                            ifu_i0_instr,             // Instruction 0
-   output logic [31:1]                            ifu_i0_pc,                // Instruction 0 PC
-   output logic                                   ifu_i0_pc4,
-
-   output logic                                   ifu_fb_consume1,          // Consumed one buffer. To fetch control fetch for buffer mass balance
-   output logic                                   ifu_fb_consume2,          // Consumed two buffers.To fetch control fetch for buffer mass balance
-
-
-   input logic [pt.BHT_GHR_SIZE-1:0]              ifu_bp_fghr_f,            // fetch GHR
-   input logic [31:1]                             ifu_bp_btb_target_f,      // predicted RET target
-   input logic [11:0]                             ifu_bp_poffset_f,         // predicted target offset
-   input logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f,        // predicted branch index (fully associative option)
-
-   input logic [1:0]                              ifu_bp_hist0_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_hist1_f,           // history counters for all 4 potential branches, bit 1, right justified
-   input logic [1:0]                              ifu_bp_pc4_f,             // pc4 indication, right justified
-   input logic [1:0]                              ifu_bp_way_f,             // way indication, right justified
-   input logic [1:0]                              ifu_bp_valid_f,           // branch valid, right justified
-   input logic [1:0]                              ifu_bp_ret_f,             // predicted ret indication, right justified
-
-
-   output eb1_br_pkt_t                           i0_brp,                   // Branch packet for I0.
-   output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]   ifu_i0_bp_index,          // BP index
-   output logic [pt.BHT_GHR_SIZE-1:0]             ifu_i0_bp_fghr,           // BP FGHR
-   output logic [pt.BTB_BTAG_SIZE-1:0]            ifu_i0_bp_btag,           // BP tag
-
-   output logic [$clog2(pt.BTB_SIZE)-1:0]         ifu_i0_fa_index,          // Fully associt btb index
-
-   output logic                                   ifu_pmu_instr_aligned,    // number of inst aligned this cycle
-
-   output logic [15:0]                            ifu_i0_cinst              // 16b compress inst for i0
-   );
-
-
-
-   logic                                          ifvalid;
-   logic                                          shift_f1_f0, shift_f2_f0, shift_f2_f1;
-   logic                                          fetch_to_f0, fetch_to_f1, fetch_to_f2;
-
-   logic [1:0]                                    f2val_in, f2val;
-   logic [1:0]                                    f1val_in, f1val;
-   logic [1:0]                                    f0val_in, f0val;
-   logic [1:0]                                    sf1val, sf0val;
-
-   logic [31:0]                                   aligndata;
-   logic                                          first4B, first2B;
-
-   logic [31:0]                                   uncompress0;
-   logic                                          i0_shift;
-   logic                                          shift_2B, shift_4B;
-   logic                                          f1_shift_2B;
-   logic                                          f2_valid, sf1_valid, sf0_valid;
-
-   logic [31:0]                                   ifirst;
-   logic [1:0]                                    alignval;
-   logic [31:1]                                   firstpc, secondpc;
-
-   logic [11:0]                                   f1poffset;
-   logic [11:0]                                   f0poffset;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f1fghr;
-   logic [pt.BHT_GHR_SIZE-1:0]                    f0fghr;
-   logic [1:0]                                    f1hist1;
-   logic [1:0]                                    f0hist1;
-   logic [1:0]                                    f1hist0;
-   logic [1:0]                                    f0hist0;
-
-   logic [1:0][$clog2(pt.BTB_SIZE)-1:0]           f0index, f1index, alignindex;
-
-   logic [1:0]                                    f1ictype;
-   logic [1:0]                                    f0ictype;
-
-   logic [1:0]                                    f1pc4;
-   logic [1:0]                                    f0pc4;
-
-   logic [1:0]                                    f1ret;
-   logic [1:0]                                    f0ret;
-   logic [1:0]                                    f1way;
-   logic [1:0]                                    f0way;
-
-   logic [1:0]                                    f1brend;
-   logic [1:0]                                    f0brend;
-
-   logic [1:0]                                    alignbrend;
-   logic [1:0]                                    alignpc4;
-
-   logic [1:0]                                    alignret;
-   logic [1:0]                                    alignway;
-   logic [1:0]                                    alignhist1;
-   logic [1:0]                                    alignhist0;
-   logic [1:1]                                    alignfromf1;
-   logic                                          i0_ends_f1;
-   logic                                          i0_br_start_error;
-
-   logic [31:1]                                   f1prett;
-   logic [31:1]                                   f0prett;
-   logic [1:0]                                    f1dbecc;
-   logic [1:0]                                    f0dbecc;
-   logic [1:0]                                    f1icaf;
-   logic [1:0]                                    f0icaf;
-
-   logic [1:0]                                    aligndbecc;
-   logic [1:0]                                    alignicaf;
-   logic                                          i0_brp_pc4;
-
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]          firstpc_hash, secondpc_hash;
-
-   logic                                          first_legal;
-
-   logic [1:0]                                    wrptr, wrptr_in;
-   logic [1:0]                                    rdptr, rdptr_in;
-   logic [2:0]                                    qwen;
-   logic [31:0]                                   q2,q1,q0;
-   logic                                          q2off_in, q2off;
-   logic                                          q1off_in, q1off;
-   logic                                          q0off_in, q0off;
-   logic                                          f0_shift_2B;
-
-   logic [31:0]                                   q0eff;
-   logic [31:0]                                   q0final;
-   logic                                          q0ptr;
-   logic [1:0]                                    q0sel;
-
-   logic [31:0]                                   q1eff;
-   logic [15:0]                                   q1final;
-   logic                                          q1ptr;
-   logic [1:0]                                    q1sel;
-
-   logic [2:0]                                    qren;
-
-   logic                                          consume_fb1, consume_fb0;
-   logic [1:0]                                    icaf_eff;
-
-   localparam                                     BRDATA_SIZE  = pt.BTB_ENABLE ? 16+($clog2(pt.BTB_SIZE)*2*pt.BTB_FULLYA) : 2;
-   localparam                                     BRDATA_WIDTH = pt.BTB_ENABLE ? 8+($clog2(pt.BTB_SIZE)*pt.BTB_FULLYA) : 1;
-   logic [BRDATA_SIZE-1:0]                        brdata_in, brdata2, brdata1, brdata0;
-   logic [BRDATA_SIZE-1:0]                        brdata1eff, brdata0eff;
-   logic [BRDATA_SIZE-1:0]                        brdata1final, brdata0final;
-
-   localparam                                     MHI   = 1+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-   localparam                                     MSIZE = 2+(pt.BTB_ENABLE * (43+pt.BHT_GHR_SIZE));
-
-   logic [MHI:0]                                  misc_data_in, misc2, misc1, misc0;
-   logic [MHI:0]                                  misc1eff, misc0eff;
-
-   logic [pt.BTB_BTAG_SIZE-1:0]                  firstbrtag_hash, secondbrtag_hash;
-
-   logic                                         error_stall_in, error_stall;
-
-   assign error_stall_in = (error_stall | ifu_async_error_start) & ~exu_flush_final;
-
-   rvdff #(.WIDTH(7))  bundle1ff (.*,
-                                  .clk(active_clk),
-                                  .din ({wrptr_in[1:0],rdptr_in[1:0],q2off_in,q1off_in,q0off_in}),
-                                  .dout({wrptr[1:0],   rdptr[1:0],   q2off,   q1off,   q0off})
-                                  );
-
-   rvdffie #(.WIDTH(7),.OVERRIDE(1))  bundle2ff (.*,
-                                                 .din ({error_stall_in,f2val_in[1:0],f1val_in[1:0],f0val_in[1:0]}),
-                                                 .dout({error_stall,   f2val[1:0],   f1val[1:0],   f0val[1:0]   })
-                                                 );
-
-if(pt.BTB_ENABLE==1) begin
-   rvdffe #(BRDATA_SIZE)  brdata2ff   (.*, .clk(clk), .en(qwen[2]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata2[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata1ff   (.*, .clk(clk), .en(qwen[1]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata1[BRDATA_SIZE-1:0]));
-   rvdffe #(BRDATA_SIZE)  brdata0ff   (.*, .clk(clk), .en(qwen[0]),        .din(brdata_in[BRDATA_SIZE-1:0]), .dout(brdata0[BRDATA_SIZE-1:0]));
-   rvdffe #(MSIZE)        misc2ff     (.*, .clk(clk), .en(qwen[2]),        .din(misc_data_in[MHI:0]),        .dout(misc2[MHI:0]));
-   rvdffe #(MSIZE)        misc1ff     (.*, .clk(clk), .en(qwen[1]),        .din(misc_data_in[MHI:0]),        .dout(misc1[MHI:0]));
-   rvdffe #(MSIZE)        misc0ff     (.*, .clk(clk), .en(qwen[0]),        .din(misc_data_in[MHI:0]),        .dout(misc0[MHI:0]));
-end
-else begin
-
-   rvdffie #((MSIZE*3)+(BRDATA_SIZE*3))    miscff      (.*,
-                                                        .din({qwen[2] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc2[MHI:0], brdata2[BRDATA_SIZE-1:0]},
-                                                              qwen[1] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc1[MHI:0], brdata1[BRDATA_SIZE-1:0]},
-                                                              qwen[0] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE-1:0]} : {misc0[MHI:0], brdata0[BRDATA_SIZE-1:0]}}),
-                                                        .dout({misc2[MHI:0],misc1[MHI:0],misc0[MHI:0],
-                                                               brdata2[BRDATA_SIZE-1:0], brdata1[BRDATA_SIZE-1:0], brdata0[BRDATA_SIZE-1:0]})
-                                                        );
-end
-
-  logic [31:1] q2pc, q1pc, q0pc;
-
-   rvdffe #(31)           q2pcff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_pc[31:1]),     .dout(q2pc[31:1]));
-   rvdffe #(31)           q1pcff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_pc[31:1]),     .dout(q1pc[31:1]));
-   rvdffe #(31)           q0pcff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_pc[31:1]),     .dout(q0pc[31:1]));
-
-   rvdffe #(32)           q2ff        (.*, .clk(clk), .en(qwen[2]),        .din(ifu_fetch_data_f[31:0]),     .dout(q2[31:0]));
-   rvdffe #(32)           q1ff        (.*, .clk(clk), .en(qwen[1]),        .din(ifu_fetch_data_f[31:0]),     .dout(q1[31:0]));
-   rvdffe #(32)           q0ff        (.*, .clk(clk), .en(qwen[0]),        .din(ifu_fetch_data_f[31:0]),     .dout(q0[31:0]));
-
-
-   // new queue control logic
-
-   assign qren[2:0]          = {  rdptr[1:0] == 2'b10,
-                                  rdptr[1:0] == 2'b01,
-                                  rdptr[1:0] == 2'b00 };
-
-   assign qwen[2:0]          = { (wrptr[1:0] == 2'b10) & ifvalid,
-                                 (wrptr[1:0] == 2'b01) & ifvalid,
-                                 (wrptr[1:0] == 2'b00) & ifvalid };
-
-
-   assign rdptr_in[1:0]      = ({2{ qren[0]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume1 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[0]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qren[1]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{ qren[2]         &  ifu_fb_consume2 & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{~ifu_fb_consume1 & ~ifu_fb_consume2 & ~exu_flush_final}} & rdptr[1:0]);
-
-   assign wrptr_in[1:0]      = ({2{ qwen[0] & ~exu_flush_final}} & 2'b01     ) |
-                               ({2{ qwen[1] & ~exu_flush_final}} & 2'b10     ) |
-                               ({2{ qwen[2] & ~exu_flush_final}} & 2'b00     ) |
-                               ({2{~ifvalid & ~exu_flush_final}} & wrptr[1:0]);
-
-
-
-   assign q2off_in          = ( ~qwen[2] & (rdptr[1:0]==2'd2)  &  (q2off | f0_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd1)  &  (q2off | f1_shift_2B) ) |
-                              ( ~qwen[2] & (rdptr[1:0]==2'd0)  &   q2off                );
-
-   assign q1off_in          = ( ~qwen[1] & (rdptr[1:0]==2'd1)  &  (q1off | f0_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd0)  &  (q1off | f1_shift_2B) ) |
-                              ( ~qwen[1] & (rdptr[1:0]==2'd2)  &   q1off                );
-
-   assign q0off_in          = ( ~qwen[0] & (rdptr[1:0]==2'd0)  &  (q0off | f0_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd2)  &  (q0off | f1_shift_2B) ) |
-                              ( ~qwen[0] & (rdptr[1:0]==2'd1)  &   q0off                );
-
-
-
-   assign q0ptr              = ( (rdptr[1:0]==2'b00) & q0off ) |
-                               ( (rdptr[1:0]==2'b01) & q1off ) |
-                               ( (rdptr[1:0]==2'b10) & q2off );
-
-   assign q1ptr              = ( (rdptr[1:0]==2'b00) & q1off ) |
-                               ( (rdptr[1:0]==2'b01) & q2off ) |
-                               ( (rdptr[1:0]==2'b10) & q0off );
-
-   assign q0sel[1:0]         = {q0ptr,~q0ptr};
-
-   assign q1sel[1:0]         = {q1ptr,~q1ptr};
-
-   // end new queue control logic
-
-
-   // misc data that is associated with each fetch buffer
-
-   if(pt.BTB_ENABLE==1)
-     assign misc_data_in[MHI:0] = {
-
-                                    ic_access_fault_type_f[1:0],
-                                    ifu_bp_btb_target_f[31:1],
-                                    ifu_bp_poffset_f[11:0],
-                                    ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0]
-                                    };
-   else
-     assign misc_data_in[MHI:0] = {
-                                    ic_access_fault_type_f[1:0]
-                                    };
-
-
-   assign {misc1eff[MHI:0],misc0eff[MHI:0]} = (({MSIZE*2{qren[0]}} & {misc1[MHI:0],misc0[MHI:0]}) |
-                                               ({MSIZE*2{qren[1]}} & {misc2[MHI:0],misc1[MHI:0]}) |
-                                               ({MSIZE*2{qren[2]}} & {misc0[MHI:0],misc2[MHI:0]}));
-
-   if(pt.BTB_ENABLE==1) begin
-   assign {
-            f1ictype[1:0],
-            f1prett[31:1],
-            f1poffset[11:0],
-            f1fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc1eff[MHI:0];
-
-   assign {
-            f0ictype[1:0],
-            f0prett[31:1],
-            f0poffset[11:0],
-            f0fghr[pt.BHT_GHR_SIZE-1:0]
-            } = misc0eff[MHI:0];
-
-      if(pt.BTB_FULLYA) begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               ifu_bp_fa_index_f[1], iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               ifu_bp_fa_index_f[0], iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0index[1],f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0index[0],f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1index[1],f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1index[0],f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-      else begin
-         assign brdata_in[BRDATA_SIZE-1:0] = {
-                                               iccm_rd_ecc_double_err[1],ic_access_fault_f[1],ifu_bp_hist1_f[1],ifu_bp_hist0_f[1],ifu_bp_pc4_f[1],ifu_bp_way_f[1],ifu_bp_valid_f[1],ifu_bp_ret_f[1],
-                                               iccm_rd_ecc_double_err[0],ic_access_fault_f[0],ifu_bp_hist1_f[0],ifu_bp_hist0_f[0],ifu_bp_pc4_f[0],ifu_bp_way_f[0],ifu_bp_valid_f[0],ifu_bp_ret_f[0]
-                                               };
-         assign {f0dbecc[1],f0icaf[1],f0hist1[1],f0hist0[1],f0pc4[1],f0way[1],f0brend[1],f0ret[1],
-                 f0dbecc[0],f0icaf[0],f0hist1[0],f0hist0[0],f0pc4[0],f0way[0],f0brend[0],f0ret[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-         assign {f1dbecc[1],f1icaf[1],f1hist1[1],f1hist0[1],f1pc4[1],f1way[1],f1brend[1],f1ret[1],
-                 f1dbecc[0],f1icaf[0],f1hist1[0],f1hist0[0],f1pc4[0],f1way[0],f1brend[0],f1ret[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      end
-
-
-
-
-   assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-   assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                           ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // if (pt.BTB_ENABLE==1)
-   else begin
-      assign {
-               f1ictype[1:0]
-               } = misc1eff[MHI:0];
-
-      assign {
-               f0ictype[1:0]
-               } = misc0eff[MHI:0];
-
-      assign brdata_in[BRDATA_SIZE-1:0] = {
-                                            iccm_rd_ecc_double_err[1],ic_access_fault_f[1],
-                                            iccm_rd_ecc_double_err[0],ic_access_fault_f[0]
-                                            };
-      assign {f0dbecc[1],f0icaf[1],
-              f0dbecc[0],f0icaf[0]} = brdata0final[BRDATA_SIZE-1:0];
-
-      assign {f1dbecc[1],f1icaf[1],
-              f1dbecc[0],f1icaf[0]} = brdata1final[BRDATA_SIZE-1:0];
-
-      assign {brdata1eff[BRDATA_SIZE-1:0],brdata0eff[BRDATA_SIZE-1:0]} = (({BRDATA_SIZE*2{qren[0]}} & {brdata1[BRDATA_SIZE-1:0],brdata0[BRDATA_SIZE-1:0]}) |
-                                                                          ({BRDATA_SIZE*2{qren[1]}} & {brdata2[BRDATA_SIZE-1:0],brdata1[BRDATA_SIZE-1:0]}) |
-                                                                       ({BRDATA_SIZE*2{qren[2]}} & {brdata0[BRDATA_SIZE-1:0],brdata2[BRDATA_SIZE-1:0]}));
-
-      assign brdata0final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q0sel[0]}} & {                     brdata0eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q0sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata0eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-      assign brdata1final[BRDATA_SIZE-1:0] = (({BRDATA_SIZE{q1sel[0]}} & {                     brdata1eff[2*BRDATA_WIDTH-1:0]}) |
-                                              ({BRDATA_SIZE{q1sel[1]}} & {{BRDATA_WIDTH{1'b0}},brdata1eff[BRDATA_SIZE-1:BRDATA_WIDTH]}));
-
-   end // else: !if(pt.BTB_ENABLE==1)
-
-
-   // possible states of { sf0_valid, sf1_valid, f2_valid }
-   //
-   // 000    if->f0
-   // 100    if->f1
-   // 101    illegal
-   // 010    if->f1, f1->f0
-   // 110    if->f2
-   // 001    if->f1, f2->f0
-   // 011    if->f2, f2->f1, f1->f0
-   // 111   !if,     no shift
-
-   assign f2_valid           =  f2val[0];
-   assign sf1_valid          =  sf1val[0];
-   assign sf0_valid          =  sf0val[0];
-
-   // interface to fetch
-
-   assign consume_fb0        = ~sf0val[0] & f0val[0];
-
-   assign consume_fb1        = ~sf1val[0] & f1val[0];
-
-   assign ifu_fb_consume1    =  consume_fb0 & ~consume_fb1 & ~exu_flush_final;
-   assign ifu_fb_consume2    =  consume_fb0 &  consume_fb1 & ~exu_flush_final;
-
-   assign ifvalid            =  ifu_fetch_val[0];
-
-   assign shift_f1_f0        =  ~sf0_valid &  sf1_valid;
-   assign shift_f2_f0        =  ~sf0_valid & ~sf1_valid &  f2_valid;
-   assign shift_f2_f1        =  ~sf0_valid &  sf1_valid &  f2_valid;
-
-   assign fetch_to_f0        =  ~sf0_valid & ~sf1_valid & ~f2_valid & ifvalid;
-
-   assign fetch_to_f1        = (~sf0_valid & ~sf1_valid &  f2_valid & ifvalid)  |
-                               (~sf0_valid &  sf1_valid & ~f2_valid & ifvalid)  |
-                               ( sf0_valid & ~sf1_valid & ~f2_valid & ifvalid);
-
-   assign fetch_to_f2        = (~sf0_valid &  sf1_valid &  f2_valid & ifvalid)  |
-                               ( sf0_valid &  sf1_valid & ~f2_valid & ifvalid);
-
-
-   assign f2val_in[1:0]      = ({2{ fetch_to_f2 &                               ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{~fetch_to_f2 & ~shift_f2_f1 & ~shift_f2_f0 & ~exu_flush_final}} & f2val[1:0]        );
-
-
-   assign sf1val[1:0]        = ({2{ f1_shift_2B}} & {1'b0,f1val[1]}) |
-                               ({2{~f1_shift_2B}} & f1val[1:0]     );
-
-   assign f1val_in[1:0]      = ({2{ fetch_to_f1                               & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f1                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{~fetch_to_f1 & ~shift_f2_f1 & ~shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       );
-
-
-
-   assign sf0val[1:0]        = ({2{ shift_2B            }} & {1'b0,f0val[1]}) |
-                               ({2{~shift_2B & ~shift_4B}} & f0val[1:0]);
-
-   assign f0val_in[1:0]      = ({2{fetch_to_f0                                & ~exu_flush_final}} & ifu_fetch_val[1:0]) |
-                               ({2{                shift_f2_f0                & ~exu_flush_final}} & f2val[1:0]        ) |
-                               ({2{                               shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0]       ) |
-                               ({2{~fetch_to_f0 & ~shift_f2_f0 & ~shift_f1_f0 & ~exu_flush_final}} & sf0val[1:0]       );
-
-   assign {q1eff[31:0],q0eff[31:0]} = (({64{qren[0]}} & {q1[31:0],q0[31:0]}) |
-                                       ({64{qren[1]}} & {q2[31:0],q1[31:0]}) |
-                                       ({64{qren[2]}} & {q0[31:0],q2[31:0]}));
-
-   assign q0final[31:0]      = ({32{q0sel[0]}} & {      q0eff[31:0]}) |
-                               ({32{q0sel[1]}} & {16'b0,q0eff[31:16]});
-
-   assign q1final[15:0]      = ({16{q1sel[0]}} & q1eff[15:0] ) |
-                               ({16{q1sel[1]}} & q1eff[31:16]);
-   logic [31:1] q0pceff, q0pcfinal;
-   logic [31:1] q1pceff;
-
-   assign {q1pceff[31:1],q0pceff[31:1]} = (({62{qren[0]}} & {q1pc[31:1],q0pc[31:1]}) |
-                                           ({62{qren[1]}} & {q2pc[31:1],q1pc[31:1]}) |
-                                           ({62{qren[2]}} & {q0pc[31:1],q2pc[31:1]}));
-
-
-   assign q0pcfinal[31:1]      = ({31{q0sel[0]}} & ( q0pceff[31:1])) |
-                                 ({31{q0sel[1]}} & ( q0pceff[31:1] + 31'd1));
-
-   assign aligndata[31:0]    = ({32{ f0val[1]           }} & {q0final[31:0]}) |
-                               ({32{~f0val[1] & f0val[0]}} & {q1final[15:0],q0final[15:0]});
-
-   assign alignval[1:0]      = ({ 2{ f0val[1]           }} & {2'b11}) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1val[0],1'b1});
-
-   assign alignicaf[1:0]    = ({ 2{ f0val[1]           }} &  f0icaf[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1icaf[0],f0icaf[0]});
-
-   assign aligndbecc[1:0]    = ({ 2{ f0val[1]           }} &  f0dbecc[1:0]          ) |
-                              ({ 2{~f0val[1] & f0val[0]}} & {f1dbecc[0],f0dbecc[0]});
-
-   if (pt.BTB_ENABLE==1) begin
-
-   // for branch prediction
-
-   assign alignbrend[1:0]    = ({ 2{ f0val[1]           }} &  f0brend[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1brend[0],f0brend[0]});
-
-   assign alignpc4[1:0]      = ({ 2{ f0val[1]           }} &  f0pc4[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1pc4[0],f0pc4[0]});
-
-      if(pt.BTB_FULLYA) begin
-         assign alignindex[0]      = f0index[0];
-         assign alignindex[1]      = f0val[1] ? f0index[1] : f1index[0];
-      end
-
-   assign alignret[1:0]      = ({ 2{ f0val[1]           }} &  f0ret[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1ret[0],f0ret[0]});
-
-   assign alignway[1:0]      = ({ 2{ f0val[1]           }} &  f0way[1:0]        ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1way[0],f0way[0]});
-
-   assign alignhist1[1:0]    = ({ 2{ f0val[1]           }} &  f0hist1[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist1[0],f0hist1[0]});
-
-   assign alignhist0[1:0]    = ({ 2{ f0val[1]           }} &  f0hist0[1:0]          ) |
-                               ({ 2{~f0val[1] & f0val[0]}} & {f1hist0[0],f0hist0[0]});
-
-   assign secondpc[31:1]     = ({31{ f0val[1]           }} &  (q0pceff[31:1] + 31'd1)) |
-                               // you need the base pc for 2nd one only (4B max, 2B for the 1st and 2B for the 2nd)
-                               ({31{~f0val[1] & f0val[0]}} &   q1pceff[31:1]      );
-
-
-   assign firstpc[31:1]      =  q0pcfinal[31:1];
-      end // if (pt.BTB_ENABLE==1)
-
-   assign alignfromf1[1]     =      ~f0val[1] & f0val[0];
-
-
-   assign ifu_i0_pc[31:1]    =  q0pcfinal[31:1];
-
-
-   assign ifu_i0_pc4         =  first4B;
-
-
-   assign ifu_i0_cinst[15:0] = aligndata[15:0];
-
-   assign first4B            = (aligndata[1:0] == 2'b11);
-   assign first2B            = ~first4B;
-
-   assign ifu_i0_valid       = (first4B & alignval[1]) |
-                               (first2B & alignval[0]);
-
-   // inst access fault on any byte of inst results in access fault for the inst
-   assign ifu_i0_icaf        = (first4B & (|alignicaf[1:0])) |
-                               (first2B &   alignicaf[0]   );
-
-   assign ifu_i0_icaf_type[1:0] = (first4B & ~f0val[1] & f0val[0] & ~alignicaf[0] & ~aligndbecc[0]) ? f1ictype[1:0] : f0ictype[1:0];
-
-
-   assign icaf_eff[1:0] = alignicaf[1:0] | aligndbecc[1:0];
-
-   assign ifu_i0_icaf_second = first4B & ~icaf_eff[0] & icaf_eff[1];
-
-   assign ifu_i0_dbecc       = (first4B & (|aligndbecc[1:0])) |
-                               (first2B &   aligndbecc[0]   );
-
-
-   assign ifirst[31:0]       =  aligndata[31:0];
-
-
-   assign ifu_i0_instr[31:0] = ({32{first4B & alignval[1]}} & ifirst[31:0]) |
-                               ({32{first2B & alignval[0]}} & uncompress0[31:0]);
-
-if(pt.BTB_ENABLE==1) begin
-
-   // if you detect br does not start on instruction boundary
-
-   eb1_btb_addr_hash #(.pt(pt)) firsthash (.pc(firstpc [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(firstpc_hash [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-   eb1_btb_addr_hash #(.pt(pt)) secondhash(.pc(secondpc[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]),
-                                            .hash(secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   if(pt.BTB_FULLYA) begin
-      assign firstbrtag_hash = firstpc;
-      assign secondbrtag_hash = secondpc;
-   end
-   else begin
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash_fold #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                         .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) first_brhash (.pc(firstpc [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(firstbrtag_hash [pt.BTB_BTAG_SIZE-1:0]));
-         eb1_btb_tag_hash #(.pt(pt)) second_brhash(.pc(secondpc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]),
-                                                    .hash(secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0]));
-      end
-   end // else: !if(pt.BTB_FULLYA)
-
-
-   // start_indexing - you want pc to be based on where the end of branch is prediction
-   // normal indexing pc based that's incorrect now for pc4 cases it's pc4 + 2
-
-   always_comb begin
-
-      i0_brp                 = '0;
-
-      i0_br_start_error      = (first4B & alignval[1] & alignbrend[0]);
-
-      i0_brp.valid           = (first2B & alignbrend[0]) |
-                               (first4B & alignbrend[1]) |
-                                i0_br_start_error;
-
-      i0_brp_pc4             = (first2B & alignpc4[0]) |
-                               (first4B & alignpc4[1]);
-
-      i0_brp.ret             = (first2B & alignret[0]) |
-                               (first4B & alignret[1]);
-
-      i0_brp.way             = (first2B | alignbrend[0])  ?  alignway[0]  :  alignway[1];
-
-      i0_brp.hist[1]         = (first2B & alignhist1[0]) |
-                               (first4B & alignhist1[1]);
-
-      i0_brp.hist[0]         = (first2B & alignhist0[0]) |
-                               (first4B & alignhist0[1]);
-
-      i0_ends_f1             =  first4B & alignfromf1[1];
-
-      i0_brp.toffset[11:0]   = (i0_ends_f1)  ?  f1poffset[11:0]  :  f0poffset[11:0];
-
-      i0_brp.prett[31:1]     = (i0_ends_f1)  ?  f1prett[31:1]    :  f0prett[31:1];
-
-      i0_brp.br_start_error  = i0_br_start_error;
-
-      i0_brp.bank            = (first2B | alignbrend[0])  ?  firstpc[1]  :  secondpc[1];
-
-      i0_brp.br_error        = (i0_brp.valid &  i0_brp_pc4 &  first2B) |
-                               (i0_brp.valid & ~i0_brp_pc4 &  first4B);
-
-      if(pt.BTB_FULLYA)
-        ifu_i0_fa_index = (first2B | alignbrend[0])  ?  alignindex[0]  :  alignindex[1];
-      else
-        ifu_i0_fa_index = '0;
-
- end
-
-
-   assign ifu_i0_bp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = (first2B | alignbrend[0])  ?  firstpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  :
-                                                                                         secondpc_hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign ifu_i0_bp_fghr[pt.BHT_GHR_SIZE-1:0]            = (i0_ends_f1)               ?  f1fghr[pt.BHT_GHR_SIZE-1:0]  :
-                                                                                         f0fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign ifu_i0_bp_btag[pt.BTB_BTAG_SIZE-1:0]           = (first2B | alignbrend[0])  ?  firstbrtag_hash[pt.BTB_BTAG_SIZE-1:0]  :
-                                                                                         secondbrtag_hash[pt.BTB_BTAG_SIZE-1:0];
-end
-else begin
-   assign i0_brp = '0;
-   assign ifu_i0_bp_index = '0;
-   assign ifu_i0_bp_fghr = '0;
-   assign ifu_i0_bp_btag = '0;
-end // else: !if(pt.BTB_ENABLE==1)
-
-   // decompress
-
-   // quiet inputs for 4B inst
-   eb1_ifu_compress_ctl #(.pt(pt)) compress0 (.din((first2B) ? aligndata[15:0] : '0), .dout(uncompress0[31:0]));
-
-
-
-   assign i0_shift           =  dec_i0_decode_d & ~error_stall;
-
-   assign ifu_pmu_instr_aligned = i0_shift;
-
-
-   // compute how many bytes are being shifted from f0
-
-   assign shift_2B           =  i0_shift & first2B;
-
-   assign shift_4B           =  i0_shift & first4B;
-
-   // exact equations for the queue logic
-   assign f0_shift_2B        = (shift_2B & f0val[0]            ) |
-                               (shift_4B & f0val[0] & ~f0val[1]);
-
-
-   // f0 valid states
-   //     11
-   //     10
-   //     00
-
-   assign f1_shift_2B        =  f0val[0] & ~f0val[1] & shift_4B;
-
-
-
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Function: Branch predictor
-// Comments:
-//
-//
-//  Bank3 : Bank2 : Bank1 : Bank0
-//  FA  C       8       4       0
-//********************************************************************************
-
-module eb1_ifu_bp_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-
-   input logic clk,
-   input logic rst_l,
-
-   input logic ic_hit_f,      // Icache hit, enables F address capture
-
-   input logic [31:1] ifc_fetch_addr_f, // look up btb address
-   input logic ifc_fetch_req_f,  // F1 valid
-
-   input eb1_br_tlu_pkt_t dec_tlu_br0_r_pkt, // BP commit update packet, includes errors
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_i0_br_fghr_r, // fghr to bp
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_i0_br_index_r, // bp index
-
-   input logic [$clog2(pt.BTB_SIZE)-1:0] dec_fa_error_index, // Fully associative btb error index
-
-   input logic dec_tlu_flush_lower_wb, // used to move EX4 RS to EX1 and F
-   input logic dec_tlu_flush_leak_one_wb, // don't hit for leak one fetches
-
-   input logic dec_tlu_bpred_disable, // disable all branch prediction
-
-   input eb1_predict_pkt_t  exu_mp_pkt, // mispredict packet
-
-   input logic [pt.BHT_GHR_SIZE-1:0] exu_mp_eghr, // execute ghr (for patching fghr)
-   input logic [pt.BHT_GHR_SIZE-1:0]  exu_mp_fghr,                    // Mispredict fghr
-   input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  exu_mp_index,         // Mispredict index
-   input logic [pt.BTB_BTAG_SIZE-1:0]  exu_mp_btag,                   // Mispredict btag
-
-   input logic exu_flush_final, // all flushes
-
-   output logic ifu_bp_hit_taken_f, // btb hit, select target
-   output logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-   output logic ifu_bp_inst_mask_f, // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic [pt.BHT_GHR_SIZE-1:0] ifu_bp_fghr_f, // fetch ghr
-
-   output logic [1:0] ifu_bp_way_f, // way
-   output logic [1:0] ifu_bp_ret_f, // predicted ret
-   output logic [1:0] ifu_bp_hist1_f, // history counters for all 4 potential branches, bit 1, right justified
-   output logic [1:0] ifu_bp_hist0_f, // history counters for all 4 potential branches, bit 0, right justified
-   output logic [1:0] ifu_bp_pc4_f, // pc4 indication, right justified
-   output logic [1:0] ifu_bp_valid_f, // branch valid, right justified
-   output logic [11:0] ifu_bp_poffset_f, // predicted target
-
-   output logic [1:0] [$clog2(pt.BTB_SIZE)-1:0]    ifu_bp_fa_index_f, // predicted branch index (fully associative option)
-
-   input  logic       scan_mode
-   );
-
-
-   localparam BTB_DWIDTH =  pt.BTB_TOFFSET_SIZE+pt.BTB_BTAG_SIZE+5;
-   localparam BTB_DWIDTH_TOP =  int'(pt.BTB_TOFFSET_SIZE)+int'(pt.BTB_BTAG_SIZE)+4;
-   localparam BTB_FA_INDEX = $clog2(pt.BTB_SIZE)-1;
-   localparam FA_CMP_LOWER = $clog2(pt.ICACHE_LN_SZ);
-   localparam FA_TAG_END_UPPER= 5+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER)-1; // must cast to int or vcs build fails
-   localparam FA_TAG_START_LOWER = 3+int'(pt.BTB_TOFFSET_SIZE)+int'(FA_CMP_LOWER);
-   localparam FA_TAG_END_LOWER = 5+int'(pt.BTB_TOFFSET_SIZE);
-
-   localparam TAG_START=BTB_DWIDTH-1;
-   localparam PC4=4;
-   localparam BOFF=3;
-   localparam CALL=2;
-   localparam RET=1;
-   localparam BV=0;
-
-   localparam LRU_SIZE=pt.BTB_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP = (pt.BHT_ARRAY_DEPTH > 16 ) ? 16 : pt.BHT_ARRAY_DEPTH;
-   localparam NUM_BHT_LOOP_INNER_HI =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+3 : pt.BHT_ADDR_HI;
-   localparam NUM_BHT_LOOP_OUTER_LO =  (pt.BHT_ARRAY_DEPTH > 16 ) ?pt.BHT_ADDR_LO+4 : pt.BHT_ADDR_LO;
-   localparam BHT_NO_ADDR_MATCH  = ( pt.BHT_ARRAY_DEPTH <= 16 );
-
-
-   logic exu_mp_valid_write;
-   logic exu_mp_ataken;
-   logic exu_mp_valid; // conditional branch mispredict
-   logic exu_mp_boffset; // branch offsett
-   logic exu_mp_pc4; // branch is a 4B inst
-   logic exu_mp_call; // branch is a call inst
-   logic exu_mp_ret; // branch is a ret inst
-   logic exu_mp_ja; // branch is a jump always
-   logic [1:0] exu_mp_hist; // new history
-   logic [11:0] exu_mp_tgt; // target offset
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] exu_mp_addr; // BTB/BHT address
-   logic                                   dec_tlu_br0_v_wb; // WB stage history update
-   logic [1:0]                             dec_tlu_br0_hist_wb; // new history
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] dec_tlu_br0_addr_wb; // addr
-   logic                                   dec_tlu_br0_error_wb; // error; invalidate bank
-   logic                                   dec_tlu_br0_start_error_wb; // error; invalidate all 4 banks in fg
-   logic [pt.BHT_GHR_SIZE-1:0]             exu_i0_br_fghr_wb;
-
-   logic use_mp_way, use_mp_way_p1;
-   logic [pt.RET_STACK_SIZE-1:0][31:0] rets_out, rets_in;
-   logic [pt.RET_STACK_SIZE-1:0]        rsenable;
-
-
-   logic [11:0]       btb_rd_tgt_f;
-   logic              btb_rd_pc4_f, btb_rd_call_f, btb_rd_ret_f;
-   logic [1:1]        bp_total_branch_offset_f;
-
-   logic [31:1]       bp_btb_target_adder_f;
-   logic [31:1]       bp_rs_call_target_f;
-   logic              rs_push, rs_pop, rs_hold;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] btb_rd_addr_p1_f, btb_wr_addr, btb_rd_addr_f;
-   logic [pt.BTB_BTAG_SIZE-1:0] btb_wr_tag, fetch_rd_tag_f, fetch_rd_tag_p1_f;
-   logic [BTB_DWIDTH-1:0]        btb_wr_data;
-   logic               btb_wr_en_way0, btb_wr_en_way1;
-
-
-   logic               dec_tlu_error_wb, btb_valid, dec_tlu_br0_middle_wb;
-   logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]        btb_error_addr_wb;
-   logic branch_error_collision_f, fetch_mp_collision_f, branch_error_collision_p1_f, fetch_mp_collision_p1_f;
-
-   logic  branch_error_bank_conflict_f;
-   logic [pt.BHT_GHR_SIZE-1:0] merged_ghr, fghr_ns, fghr;
-   logic [1:0] num_valids;
-   logic [LRU_SIZE-1:0] btb_lru_b0_f, btb_lru_b0_hold, btb_lru_b0_ns,
-                        fetch_wrindex_dec, fetch_wrindex_p1_dec, fetch_wrlru_b0, fetch_wrlru_p1_b0,
-                        mp_wrindex_dec, mp_wrlru_b0;
-   logic                btb_lru_rd_f, btb_lru_rd_p1_f, lru_update_valid_f;
-   logic  tag_match_way0_f, tag_match_way1_f;
-   logic [1:0] way_raw, bht_dir_f, btb_sel_f, wayhit_f, vwayhit_f, wayhit_p1_f;
-   logic [1:0] bht_valid_f, bht_force_taken_f;
-
-   logic leak_one_f, leak_one_f_d1;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way0_out ;
-
-   logic [LRU_SIZE-1:0][BTB_DWIDTH-1:0]  btb_bank0_rd_data_way1_out ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way0_p1_f ;
-   logic                [BTB_DWIDTH-1:0] btb_bank0_rd_data_way1_p1_f ;
-
-   logic                [BTB_DWIDTH-1:0] btb_vbank0_rd_data_f, btb_vbank1_rd_data_f;
-
-   logic                                         final_h;
-   logic                                         btb_fg_crossing_f;
-   logic                                         middle_of_bank;
-
-
-   logic [1:0]                                   bht_vbank0_rd_data_f, bht_vbank1_rd_data_f;
-   logic                                         branch_error_bank_conflict_p1_f;
-   logic                                         tag_match_way0_p1_f, tag_match_way1_p1_f;
-
-   logic [1:0]                                   btb_vlru_rd_f, fetch_start_f, tag_match_vway1_expanded_f, tag_match_way0_expanded_p1_f, tag_match_way1_expanded_p1_f;
-   logic [31:2] fetch_addr_p1_f;
-
-
-   logic exu_mp_way, exu_mp_way_f, dec_tlu_br0_way_wb, dec_tlu_way_wb;
-   logic                [BTB_DWIDTH-1:0] btb_bank0e_rd_data_f, btb_bank0e_rd_data_p1_f;
-
-   logic                [BTB_DWIDTH-1:0] btb_bank0o_rd_data_f;
-
-   logic [1:0] tag_match_way0_expanded_f, tag_match_way1_expanded_f;
-
-
-    logic [1:0]                                  bht_bank0_rd_data_f;
-    logic [1:0]                                  bht_bank1_rd_data_f;
-    logic [1:0]                                  bht_bank0_rd_data_p1_f;
-   genvar                                        j, i;
-
-   assign exu_mp_valid = exu_mp_pkt.misp & ~leak_one_f; // conditional branch mispredict
-   assign exu_mp_boffset = exu_mp_pkt.boffset;  // branch offset
-   assign exu_mp_pc4 = exu_mp_pkt.pc4;  // branch is a 4B inst
-   assign exu_mp_call = exu_mp_pkt.pcall;  // branch is a call inst
-   assign exu_mp_ret = exu_mp_pkt.pret;  // branch is a ret inst
-   assign exu_mp_ja = exu_mp_pkt.pja;  // branch is a jump always
-   assign exu_mp_way = exu_mp_pkt.way;  // repl way
-   assign exu_mp_hist[1:0] = exu_mp_pkt.hist[1:0];  // new history
-   assign exu_mp_tgt[11:0]  = exu_mp_pkt.toffset[11:0] ;  // target offset
-   assign exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]  = exu_mp_index[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] ;  // BTB/BHT address
-   assign exu_mp_ataken = exu_mp_pkt.ataken;
-
-
-   assign dec_tlu_br0_v_wb = dec_tlu_br0_r_pkt.valid;
-   assign dec_tlu_br0_hist_wb[1:0]  = dec_tlu_br0_r_pkt.hist[1:0];
-   assign dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = exu_i0_br_index_r[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign dec_tlu_br0_error_wb = dec_tlu_br0_r_pkt.br_error;
-   assign dec_tlu_br0_middle_wb = dec_tlu_br0_r_pkt.middle;
-   assign dec_tlu_br0_way_wb = dec_tlu_br0_r_pkt.way;
-   assign dec_tlu_br0_start_error_wb = dec_tlu_br0_r_pkt.br_start_error;
-   assign exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0] = exu_i0_br_fghr_r[pt.BHT_GHR_SIZE-1:0];
-
-
-
-
-   // ----------------------------------------------------------------------
-   // READ
-   // ----------------------------------------------------------------------
-
-   // hash the incoming fetch PC, first guess at hashing algorithm
-   eb1_btb_addr_hash #(.pt(pt)) f1hash(.pc(ifc_fetch_addr_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-
-   assign fetch_addr_p1_f[31:2] = ifc_fetch_addr_f[31:2] + 30'b1;
-   eb1_btb_addr_hash #(.pt(pt)) f1hash_p1(.pc(fetch_addr_p1_f[pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO]), .hash(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]));
-
-   assign btb_sel_f[1] = ~bht_dir_f[0];
-   assign btb_sel_f[0] =  bht_dir_f[0];
-
-   assign fetch_start_f[1:0] = {ifc_fetch_addr_f[1], ~ifc_fetch_addr_f[1]};
-
-   // Errors colliding with fetches must kill the btb/bht hit.
-
-   assign branch_error_collision_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-   assign branch_error_collision_p1_f = dec_tlu_error_wb & (btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]);
-
-   assign branch_error_bank_conflict_f = branch_error_collision_f & dec_tlu_error_wb;
-   assign branch_error_bank_conflict_p1_f = branch_error_collision_p1_f & dec_tlu_error_wb;
-
-   // set on leak one, hold until next flush without leak one
-   assign leak_one_f = (dec_tlu_flush_leak_one_wb & dec_tlu_flush_lower_wb) | (leak_one_f_d1 & ~dec_tlu_flush_lower_wb);
-
-logic exu_flush_final_d1;
-
- if(!pt.BTB_FULLYA) begin
-   assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                    exu_mp_valid & ifc_fetch_req_f &
-                                    (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                    );
-   assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                                       exu_mp_valid & ifc_fetch_req_f &
-                                       (exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO])
-                                       );
-   // 2 -way SA, figure out the way hit and mux accordingly
-   assign tag_match_way0_f = btb_bank0_rd_data_way0_f[BV] & (btb_bank0_rd_data_way0_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_f = btb_bank0_rd_data_way1_f[BV] & (btb_bank0_rd_data_way1_f[TAG_START:17] == fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way0_p1_f = btb_bank0_rd_data_way0_p1_f[BV] & (btb_bank0_rd_data_way0_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-   assign tag_match_way1_p1_f = btb_bank0_rd_data_way1_p1_f[BV] & (btb_bank0_rd_data_way1_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]) &
-                              ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   // Both ways could hit, use the offset bit to reorder
-
-   assign tag_match_way0_expanded_f[1:0] = {tag_match_way0_f &  (btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4]),
-                                             tag_match_way0_f & ~(btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4])};
-
-   assign tag_match_way1_expanded_f[1:0] = {tag_match_way1_f &  (btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4]),
-                                             tag_match_way1_f & ~(btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4])};
-
-   assign tag_match_way0_expanded_p1_f[1:0] = {tag_match_way0_p1_f &  (btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4]),
-                                                tag_match_way0_p1_f & ~(btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4])};
-
-   assign tag_match_way1_expanded_p1_f[1:0] = {tag_match_way1_p1_f &  (btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4]),
-                                                tag_match_way1_p1_f & ~(btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4])};
-
-   assign wayhit_f[1:0] = tag_match_way0_expanded_f[1:0] | tag_match_way1_expanded_f[1:0];
-   assign wayhit_p1_f[1:0] = tag_match_way0_expanded_p1_f[1:0] | tag_match_way1_expanded_p1_f[1:0];
-
-   assign btb_bank0o_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[1]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[1]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-   assign btb_bank0e_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_f[0]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_f[0]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0]) );
-
-   assign btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{tag_match_way0_expanded_p1_f[0]}} & btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0]) |
-                                                               ({17+pt.BTB_BTAG_SIZE{tag_match_way1_expanded_p1_f[0]}} & btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0]) );
-
-   // virtual bank order
-
-   assign btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0e_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) );
-   assign btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = ( ({17+pt.BTB_BTAG_SIZE{fetch_start_f[0]}} &  btb_bank0o_rd_data_f[BTB_DWIDTH-1:0]) |
-                                                            ({17+pt.BTB_BTAG_SIZE{fetch_start_f[1]}} &  btb_bank0e_rd_data_p1_f[BTB_DWIDTH-1:0]) );
-
-   assign way_raw[1:0] =  tag_match_vway1_expanded_f[1:0] | (~vwayhit_f[1:0] & btb_vlru_rd_f[1:0]);
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-   // update lru
-   // mp
-
-   // create a onehot lru write vector
-   assign mp_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   // fetch
-   assign fetch_wrindex_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-   assign fetch_wrindex_p1_dec[LRU_SIZE-1:0] = {{LRU_SIZE-1{1'b0}},1'b1} <<  btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign mp_wrlru_b0[LRU_SIZE-1:0] = mp_wrindex_dec[LRU_SIZE-1:0] & {LRU_SIZE{exu_mp_valid}};
-
-
-   assign btb_lru_b0_hold[LRU_SIZE-1:0] = ~mp_wrlru_b0[LRU_SIZE-1:0] & ~fetch_wrlru_b0[LRU_SIZE-1:0];
-
-   // Forward the mp lru information to the fetch, avoids multiple way hits later
-   assign use_mp_way = fetch_mp_collision_f;
-   assign use_mp_way_p1 = fetch_mp_collision_p1_f;
-
-   assign lru_update_valid_f = (vwayhit_f[0] | vwayhit_f[1]) & ifc_fetch_req_f & ~leak_one_f;
-
-
-   assign fetch_wrlru_b0[LRU_SIZE-1:0] = fetch_wrindex_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-   assign fetch_wrlru_p1_b0[LRU_SIZE-1:0] = fetch_wrindex_p1_dec[LRU_SIZE-1:0] &
-                                         {LRU_SIZE{lru_update_valid_f}};
-
-   assign btb_lru_b0_ns[LRU_SIZE-1:0] = ( (btb_lru_b0_hold[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]) |
-                                          (mp_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{~exu_mp_way}}) |
-                                          (fetch_wrlru_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_f}}) |
-                                          (fetch_wrlru_p1_b0[LRU_SIZE-1:0] & {LRU_SIZE{tag_match_way0_p1_f}}) );
-
-
-
-   assign btb_lru_rd_f = use_mp_way ? exu_mp_way_f : |(fetch_wrindex_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   assign btb_lru_rd_p1_f = use_mp_way_p1 ? exu_mp_way_f : |(fetch_wrindex_p1_dec[LRU_SIZE-1:0] & btb_lru_b0_f[LRU_SIZE-1:0]);
-
-   // rotated
-   assign btb_vlru_rd_f[1:0] = ( ({2{fetch_start_f[0]}} & {btb_lru_rd_f, btb_lru_rd_f}) |
-                                  ({2{fetch_start_f[1]}} & {btb_lru_rd_p1_f, btb_lru_rd_f}));
-
-   assign tag_match_vway1_expanded_f[1:0] = ( ({2{fetch_start_f[0]}} & {tag_match_way1_expanded_f[1:0]}) |
-                                               ({2{fetch_start_f[1]}} & {tag_match_way1_expanded_p1_f[0], tag_match_way1_expanded_f[1]}) );
-
-
-   rvdffe #(LRU_SIZE) btb_lru_ff (.*, .en(ifc_fetch_req_f | exu_mp_valid),
-                                    .din(btb_lru_b0_ns[(LRU_SIZE)-1:0]),
-                                   .dout(btb_lru_b0_f[(LRU_SIZE)-1:0]));
-
- end // if (!pt.BTB_FULLYA)
-   // Detect end of cache line and mask as needed
-   logic eoc_near;
-   logic eoc_mask;
-   assign eoc_near = &ifc_fetch_addr_f[pt.ICACHE_BEAT_ADDR_HI:3];
-   assign eoc_mask = ~eoc_near| (|(~ifc_fetch_addr_f[2:1]));
-
-
-
-   // --------------------------------------------------------------------------------
-   // --------------------------------------------------------------------------------
-
-   // mux out critical hit bank for pc computation
-   // This is only useful for the first taken branch in the fetch group
-   logic [16:1] btb_sel_data_f;
-
-   assign btb_rd_tgt_f[11:0] = btb_sel_data_f[16:5];
-   assign btb_rd_pc4_f       = btb_sel_data_f[4];
-   assign btb_rd_call_f      = btb_sel_data_f[2];
-   assign btb_rd_ret_f       = btb_sel_data_f[1];
-
-   assign btb_sel_data_f[16:1] = ( ({16{btb_sel_f[1]}} & btb_vbank1_rd_data_f[16:1]) |
-                                    ({16{btb_sel_f[0]}} & btb_vbank0_rd_data_f[16:1]) );
-
-
-   logic [1:0] hist0_raw, hist1_raw, pc4_raw, pret_raw;
-
-   // a valid taken target needs to kill the next fetch as we compute the target address
-   assign ifu_bp_hit_taken_f = |(vwayhit_f[1:0] & hist1_raw[1:0]) & ifc_fetch_req_f & ~leak_one_f_d1 & ~dec_tlu_bpred_disable;
-
-
-   // Don't put calls/rets/ja in the predictor, force the bht taken instead
-   assign bht_force_taken_f[1:0] = {(btb_vbank1_rd_data_f[CALL] | btb_vbank1_rd_data_f[RET]),
-                                     (btb_vbank0_rd_data_f[CALL] | btb_vbank0_rd_data_f[RET])};
-
-
-   // taken and valid, otherwise, branch errors must clear the bht
-   assign bht_valid_f[1:0] = vwayhit_f[1:0];
-
-   assign bht_vbank0_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank0_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank1_rd_data_f[1:0]) );
-
-   assign bht_vbank1_rd_data_f[1:0] = ( ({2{fetch_start_f[0]}} & bht_bank1_rd_data_f[1:0]) |
-                                         ({2{fetch_start_f[1]}} & bht_bank0_rd_data_p1_f[1:0]) );
-
-
-   assign bht_dir_f[1:0] = {(bht_force_taken_f[1] | bht_vbank1_rd_data_f[1]) & bht_valid_f[1],
-                             (bht_force_taken_f[0] | bht_vbank0_rd_data_f[1]) & bht_valid_f[0]};
-
-   assign ifu_bp_inst_mask_f = (ifu_bp_hit_taken_f & btb_sel_f[1]) | ~ifu_bp_hit_taken_f;
-
-
-
-
-   // Branch prediction info is sent with the 2byte lane associated with the end of the branch.
-   // Cases
-   //       BANK1         BANK0
-   // -------------------------------
-   // |      :       |      :       |
-   // -------------------------------
-   //         <------------>                   : PC4 branch, offset, should be in B1 (indicated on [2])
-   //                <------------>            : PC4 branch, no offset, indicate PC4, VALID, HIST on [1]
-   //                       <------------>     : PC4 branch, offset, indicate PC4, VALID, HIST on [0]
-   //                <------>                  : PC2 branch, offset, indicate VALID, HIST on [1]
-   //                       <------>           : PC2 branch, no offset, indicate VALID, HIST on [0]
-   //
-
-
-
-   assign hist1_raw[1:0] = bht_force_taken_f[1:0] | {bht_vbank1_rd_data_f[1],
-                                                      bht_vbank0_rd_data_f[1]};
-
-   assign hist0_raw[1:0] = {bht_vbank1_rd_data_f[0],
-                            bht_vbank0_rd_data_f[0]};
-
-
-   assign pc4_raw[1:0] = {vwayhit_f[1] & btb_vbank1_rd_data_f[PC4],
-                          vwayhit_f[0] & btb_vbank0_rd_data_f[PC4]};
-
-   assign pret_raw[1:0] = {vwayhit_f[1] & ~btb_vbank1_rd_data_f[CALL] & btb_vbank1_rd_data_f[RET],
-                           vwayhit_f[0] & ~btb_vbank0_rd_data_f[CALL] & btb_vbank0_rd_data_f[RET]};
-
-   // GHR
-
-
-  // count the valids with masking based on first taken
-   assign num_valids[1:0] = countones(bht_valid_f[1:0]);
-
-   // Note that the following property holds
-   // P: prior ghr, H: history bit of last valid branch in line (could be 1 or 0)
-   // Num valid branches   What new GHR must be
-   // 2                    0H
-   // 1                    PH
-   // 0                    PP
-
-   assign final_h = |(btb_sel_f[1:0] & bht_dir_f[1:0]);
-
-   assign merged_ghr[pt.BHT_GHR_SIZE-1:0] = (
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h2}} & {fghr[pt.BHT_GHR_SIZE-3:0], 1'b0, final_h}) | // 0H
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h1}} & {fghr[pt.BHT_GHR_SIZE-2:0], final_h}) | // PH
-                                            ({pt.BHT_GHR_SIZE{num_valids[1:0] == 2'h0}} & {fghr[pt.BHT_GHR_SIZE-1:0]}) ); // PP
-
-   logic [pt.BHT_GHR_SIZE-1:0] exu_flush_ghr;
-   assign exu_flush_ghr[pt.BHT_GHR_SIZE-1:0] = exu_mp_fghr[pt.BHT_GHR_SIZE-1:0];
-
-   assign fghr_ns[pt.BHT_GHR_SIZE-1:0] = ( ({pt.BHT_GHR_SIZE{exu_flush_final_d1}} & exu_flush_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1}} & merged_ghr[pt.BHT_GHR_SIZE-1:0]) |
-                                         ({pt.BHT_GHR_SIZE{~exu_flush_final_d1 & ~(ifc_fetch_req_f & ic_hit_f & ~leak_one_f_d1)}} & fghr[pt.BHT_GHR_SIZE-1:0]));
-
-   rvdffie #(.WIDTH(pt.BHT_GHR_SIZE+3),.OVERRIDE(1)) fetchghr (.*,
-                                          .din ({exu_flush_final, exu_mp_way, leak_one_f, fghr_ns[pt.BHT_GHR_SIZE-1:0]}),
-                                          .dout({exu_flush_final_d1, exu_mp_way_f, leak_one_f_d1, fghr[pt.BHT_GHR_SIZE-1:0]}));
-
-   assign ifu_bp_fghr_f[pt.BHT_GHR_SIZE-1:0] = fghr[pt.BHT_GHR_SIZE-1:0];
-
-
-   assign ifu_bp_way_f[1:0] = way_raw[1:0];
-   assign ifu_bp_hist1_f[1:0]    = hist1_raw[1:0];
-   assign ifu_bp_hist0_f[1:0]    = hist0_raw[1:0];
-   assign ifu_bp_pc4_f[1:0]     = pc4_raw[1:0];
-
-   assign ifu_bp_valid_f[1:0]   = vwayhit_f[1:0] & ~{2{dec_tlu_bpred_disable}};
-   assign ifu_bp_ret_f[1:0]     = pret_raw[1:0];
-
-
-   // compute target
-   // Form the fetch group offset based on the btb hit location and the location of the branch within the 4 byte chunk
-
-//  .i 5
-//  .o 3
-//  .ilb bht_dir_f[1] bht_dir_f[0] fetch_start_f[1] fetch_start_f[0] btb_rd_pc4_f
-//  .ob bloc_f[1] bloc_f[0] use_fa_plus
-//  .type fr
-//
-//
-//  ## rotdir[1:0]  fs   pc4  off fapl
-//    -1            01 -  01  0
-//    10            01 -  10  0
-//
-//    -1            10 -  10  0
-//    10            10 0  01  1
-//    10            10 1  01  0
-logic [1:0] bloc_f;
-logic use_fa_plus;
-assign bloc_f[1] = (bht_dir_f[0] & ~fetch_start_f[0]) | (~bht_dir_f[0]
-     & fetch_start_f[0]);
-assign bloc_f[0] = (bht_dir_f[0] & fetch_start_f[0]) | (~bht_dir_f[0]
-     & ~fetch_start_f[0]);
-assign use_fa_plus = (~bht_dir_f[0] & ~fetch_start_f[0] & ~btb_rd_pc4_f);
-
-
-
-
-    assign btb_fg_crossing_f = fetch_start_f[0] & btb_sel_f[0] & btb_rd_pc4_f;
-
-   assign bp_total_branch_offset_f =  bloc_f[1] ^ btb_rd_pc4_f;
-
-   logic [31:2] adder_pc_in_f, ifc_fetch_adder_prior;
-   rvdfflie #(.WIDTH(30), .LEFT(19)) faddrf_ff (.*, .en(ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f), .din(ifc_fetch_addr_f[31:2]), .dout(ifc_fetch_adder_prior[31:2]));
-
-
-   assign ifu_bp_poffset_f[11:0] = btb_rd_tgt_f[11:0];
-
-   assign adder_pc_in_f[31:2] = ( ({30{ use_fa_plus}} & fetch_addr_p1_f[31:2]) |
-                                   ({30{ btb_fg_crossing_f}} & ifc_fetch_adder_prior[31:2]) |
-                                   ({30{~btb_fg_crossing_f & ~use_fa_plus}} & ifc_fetch_addr_f[31:2]));
-
-   rvbradder predtgt_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                         .offset(btb_rd_tgt_f[11:0]),
-                         .dout(bp_btb_target_adder_f[31:1])
-                         );
-   // mux in the return stack address here for a predicted return assuming the RS is valid, quite if no prediction
-   assign ifu_bp_btb_target_f[31:1] = (({31{btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0] & ifu_bp_hit_taken_f}} & rets_out[0][31:1]) |
-                                       ({31{~(btb_rd_ret_f & ~btb_rd_call_f & rets_out[0][0]) & ifu_bp_hit_taken_f}} & bp_btb_target_adder_f[31:1]) );
-
-
-   // ----------------------------------------------------------------------
-   // Return Stack
-   // ----------------------------------------------------------------------
-
-   rvbradder rs_addr (.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-                    .offset({11'b0,  ~btb_rd_pc4_f}),
-                    .dout(bp_rs_call_target_f[31:1])
-                         );
-
-   assign rs_push = (btb_rd_call_f & ~btb_rd_ret_f & ifu_bp_hit_taken_f);
-   assign rs_pop = (btb_rd_ret_f & ~btb_rd_call_f & ifu_bp_hit_taken_f);
-   assign rs_hold = ~rs_push & ~rs_pop;
-
-
-
-   // Fetch based (bit 0 is a valid)
-   assign rets_in[0][31:0] = ( ({32{rs_push}} & {bp_rs_call_target_f[31:1], 1'b1}) | // target[31:1], valid
-                               ({32{rs_pop}}  & rets_out[1][31:0]) );
-
-   assign rsenable[0] = ~rs_hold;
-
-   for (i=0; i<pt.RET_STACK_SIZE; i++) begin : retstack
-
-      // for the last entry in the stack, we don't have a pop position
-      if(i==pt.RET_STACK_SIZE-1) begin
-         assign rets_in[i][31:0] = rets_out[i-1][31:0];
-         assign rsenable[i] = rs_push;
-      end
-      else if(i>0) begin
-        assign rets_in[i][31:0] = ( ({32{rs_push}} & rets_out[i-1][31:0]) |
-                                    ({32{rs_pop}}  & rets_out[i+1][31:0]) );
-         assign rsenable[i] = rs_push | rs_pop;
-      end
-      rvdffe #(32) rets_ff (.*, .en(rsenable[i]), .din(rets_in[i][31:0]), .dout(rets_out[i][31:0]));
-
-   end : retstack
-
-   // ----------------------------------------------------------------------
-   // WRITE
-   // ----------------------------------------------------------------------
-
-
-   assign dec_tlu_error_wb = dec_tlu_br0_start_error_wb | dec_tlu_br0_error_wb;
-
-   assign btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-   assign dec_tlu_way_wb = dec_tlu_br0_way_wb;
-
-   assign btb_valid = exu_mp_valid & ~dec_tlu_error_wb;
-
-   assign btb_wr_tag[pt.BTB_BTAG_SIZE-1:0] = exu_mp_btag[pt.BTB_BTAG_SIZE-1:0];
-
-   if(!pt.BTB_FULLYA) begin
-
-      if(pt.BTB_BTAG_FOLD) begin : btbfold
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagf  (.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash_fold #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                                    .pc({fetch_addr_p1_f[ pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-      else begin
-         eb1_btb_tag_hash #(.pt(pt)) rdtagf(.hash(fetch_rd_tag_f[pt.BTB_BTAG_SIZE-1:0]),
-                                             .pc({ifc_fetch_addr_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-         eb1_btb_tag_hash #(.pt(pt)) rdtagp1f(.hash(fetch_rd_tag_p1_f[pt.BTB_BTAG_SIZE-1:0]),
-                                               .pc({fetch_addr_p1_f[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1]}));
-      end
-
-      assign btb_wr_en_way0 = ( ({{~exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{~dec_tlu_way_wb & dec_tlu_error_wb}}));
-
-      assign btb_wr_en_way1 = ( ({{exu_mp_way & exu_mp_valid_write & ~dec_tlu_error_wb}}) |
-                                ({{dec_tlu_way_wb & dec_tlu_error_wb}}));
-      assign btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = dec_tlu_error_wb ? btb_error_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] : exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO];
-
-
-      assign vwayhit_f[1:0] = ( ({2{fetch_start_f[0]}} & {wayhit_f[1:0]}) |
-                                ({2{fetch_start_f[1]}} & {wayhit_p1_f[0], wayhit_f[1]})) & {eoc_mask, 1'b1};
-
-   end // if (!pt.BTB_FULLYA)
-
-   assign btb_wr_data[BTB_DWIDTH-1:0] = {btb_wr_tag[pt.BTB_BTAG_SIZE-1:0], exu_mp_tgt[pt.BTB_TOFFSET_SIZE-1:0], exu_mp_pc4, exu_mp_boffset,
-                                                exu_mp_call | exu_mp_ja, exu_mp_ret | exu_mp_ja, btb_valid} ;
-
-   assign exu_mp_valid_write = exu_mp_valid & exu_mp_ataken & ~exu_mp_pkt.valid;
-   logic [1:0] bht_wr_data0, bht_wr_data2;
-   logic [1:0] bht_wr_en0, bht_wr_en2;
-
-   assign middle_of_bank = exu_mp_pc4 ^ exu_mp_boffset;
-   assign bht_wr_en0[1:0] = {2{exu_mp_valid & ~exu_mp_call & ~exu_mp_ret & ~exu_mp_ja}} & {middle_of_bank, ~middle_of_bank};
-   assign bht_wr_en2[1:0] = {2{dec_tlu_br0_v_wb}} & {dec_tlu_br0_middle_wb, ~dec_tlu_br0_middle_wb} ;
-
-   // Experiments show this is the best priority scheme for same bank/index writes at the same time.
-   assign bht_wr_data0[1:0] = exu_mp_hist[1:0]; // lowest priority
-   assign bht_wr_data2[1:0] = dec_tlu_br0_hist_wb[1:0]; // highest priority
-
-
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] bht_rd_addr_f, bht_rd_addr_p1_f, bht_wr_addr0, bht_wr_addr2;
-
-   logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] mp_hashed, br0_hashed_wb, bht_rd_addr_hashed_f, bht_rd_addr_hashed_p1_f;
-   eb1_btb_ghr_hash #(.pt(pt)) mpghrhs  (.hashin(exu_mp_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_mp_eghr[pt.BHT_GHR_SIZE-1:0]), .hash(mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) br0ghrhs (.hashin(dec_tlu_br0_addr_wb[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(exu_i0_br_fghr_wb[pt.BHT_GHR_SIZE-1:0]), .hash(br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs (.hashin(btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-   eb1_btb_ghr_hash #(.pt(pt)) fghrhs_p1 (.hashin(btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO]), .ghr(fghr[pt.BHT_GHR_SIZE-1:0]), .hash(bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO]));
-
-   assign bht_wr_addr0[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = mp_hashed[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_wr_addr2[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = br0_hashed_wb[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-   assign bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = bht_rd_addr_hashed_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO];
-
-
-   // ----------------------------------------------------------------------
-   // Structures. Using FLOPS
-   // ----------------------------------------------------------------------
-   // BTB
-   // Entry -> tag[pt.BTB_BTAG_SIZE-1:0], toffset[11:0], pc4, boffset, call, ret, valid
-
-   if(!pt.BTB_FULLYA) begin
-
-      for (j=0 ; j<LRU_SIZE ; j++) begin : BTB_FLOPS
-         // Way 0
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way0 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way0)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way0_out[j]));
-
-         // Way 1
-         rvdffe #(17+pt.BTB_BTAG_SIZE) btb_bank0_way1 (.*,
-                    .en(((btb_wr_addr[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == j) & btb_wr_en_way1)),
-                    .din        (btb_wr_data[BTB_DWIDTH-1:0]),
-                    .dout       (btb_bank0_rd_data_way1_out[j]));
-
-      end
-
-
-    always_comb begin : BTB_rd_mux
-        btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] = '0 ;
-        btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] = '0 ;
-
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-        for (int j=0; j< LRU_SIZE; j++) begin
-          if (btb_rd_addr_p1_f[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] == (pt.BTB_ADDR_HI-pt.BTB_ADDR_LO+1)'(j)) begin
-
-           btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way0_out[j];
-           btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH-1:0] =  btb_bank0_rd_data_way1_out[j];
-
-          end
-        end
-    end
-end // if (!pt.BTB_FULLYA)
-
-
-
-
-
-      if(pt.BTB_FULLYA) begin : fa
-
-         logic found1, hit0, hit1;
-         logic btb_used_reset, write_used;
-         logic [$clog2(pt.BTB_SIZE)-1:0] btb_fa_wr_addr0, hit0_index, hit1_index;
-
-         logic [pt.BTB_SIZE-1:0]         btb_tag_hit, btb_offset_0, btb_offset_1, btb_used_ns, btb_used,
-                                         wr0_en, btb_upper_hit;
-         logic [pt.BTB_SIZE-1:0][BTB_DWIDTH-1:0] btbdata;
-
-         // Fully Associative tag hash uses bits 31:3. Bits 2:1 are the offset bits used for the 4 tag comp banks
-         // Full tag used to speed up lookup. There is one 31:3 cmp per entry, and 4 2:1 cmps per entry.
-
-         logic [FA_CMP_LOWER-1:1]  ifc_fetch_addr_p1_f;
-
-
-         assign ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1] = ifc_fetch_addr_f[FA_CMP_LOWER-1:1] + 1'b1;
-
-         assign fetch_mp_collision_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == ifc_fetch_addr_f[31:1]) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-         assign fetch_mp_collision_p1_f = ( (exu_mp_btag[pt.BTB_BTAG_SIZE-1:0] == {ifc_fetch_addr_f[31:FA_CMP_LOWER], ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]}) &
-                                      exu_mp_valid & ifc_fetch_req_f & ~exu_mp_pkt.way);
-
-      always_comb begin
-         btb_vbank0_rd_data_f = '0;
-         btb_vbank1_rd_data_f = '0;
-         btb_tag_hit = '0;
-         btb_upper_hit = '0;
-         btb_offset_0 = '0;
-         btb_offset_1 = '0;
-
-         found1 = 1'b0;
-         hit0 = 1'b0;
-         hit1 = 1'b0;
-         hit0_index = '0;
-         hit1_index = '0;
-         btb_fa_wr_addr0 = '0;
-
-         for(int i=0; i<pt.BTB_SIZE; i++) begin
-            // Break the cmp into chunks for lower area.
-            // Chunk1: FA 31:6 or 31:5 depending on icache line size
-            // Chunk2: FA 5:1 or 4:1 depending on icache line size
-            btb_upper_hit[i] = (btbdata[i][BTB_DWIDTH_TOP:FA_TAG_END_UPPER] == ifc_fetch_addr_f[31:FA_CMP_LOWER]) & btbdata[i][0] & ~wr0_en[i];
-            btb_offset_0[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-            btb_offset_1[i] = (btbdata[i][FA_TAG_START_LOWER:FA_TAG_END_LOWER] == ifc_fetch_addr_p1_f[FA_CMP_LOWER-1:1]) & btb_upper_hit[i];
-
-            if(~hit0) begin
-               if(btb_offset_0[i]) begin
-                  hit0_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  // hit unless we are also writing this entry at the same time
-                  hit0 = 1'b1;
-               end
-            end
-            if(~hit1) begin
-               if(btb_offset_1[i]) begin
-                  hit1_index[BTB_FA_INDEX:0] = (BTB_FA_INDEX+1)'(i);
-                  hit1 = 1'b1;
-               end
-            end
-
-
-            // Mux out the 2 potential branches
-            if(btb_offset_0[i] == 1'b1)
-              btb_vbank0_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_f ? btb_wr_data : btbdata[i];
-            if(btb_offset_1[i] == 1'b1)
-              btb_vbank1_rd_data_f[BTB_DWIDTH-1:0] = fetch_mp_collision_p1_f ? btb_wr_data : btbdata[i];
-
-            // find the first zero from bit zero in the used vector, this is the write address
-            if(~found1) begin
-               if(~btb_used[i]) begin
-                  btb_fa_wr_addr0[BTB_FA_INDEX:0] = i[BTB_FA_INDEX:0];
-                  found1 = 1'b1;
-               end
-            end
-         end
-      end // always_comb begin
-
-
-   assign vwayhit_f[1:0] = {hit1, hit0} & {eoc_mask, 1'b1};
-
-   // way bit is reused as the predicted bit
-   assign way_raw[1:0] =  vwayhit_f[1:0] | {fetch_mp_collision_p1_f, fetch_mp_collision_f};
-
-   for (j=0 ; j<pt.BTB_SIZE ; j++) begin : BTB_FAFLOPS
-
-      assign wr0_en[j] = ((btb_fa_wr_addr0[BTB_FA_INDEX:0] == j) & (exu_mp_valid_write & ~exu_mp_pkt.way)) |
-                         ((dec_fa_error_index == j) & dec_tlu_error_wb);
-
-      rvdffe #(BTB_DWIDTH) btb_fa (.*, .clk(clk),
-                                   .en  (wr0_en[j]),
-                                   .din (btb_wr_data[BTB_DWIDTH-1:0]),
-                                   .dout(btbdata[j]));
-   end // block: BTB_FAFLOPS
-
-   assign ifu_bp_fa_index_f[1] = hit1 ? hit1_index : '0;
-   assign ifu_bp_fa_index_f[0] = hit0 ? hit0_index : '0;
-
-   assign btb_used_reset = &btb_used[pt.BTB_SIZE-1:0];
-   assign btb_used_ns[pt.BTB_SIZE-1:0] = ({pt.BTB_SIZE{vwayhit_f[1]}} & (32'b1 << hit1_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{vwayhit_f[0]}} & (32'b1 << hit0_index[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{exu_mp_valid_write & ~exu_mp_pkt.way & ~dec_tlu_error_wb}} & (32'b1 << btb_fa_wr_addr0[BTB_FA_INDEX:0])) |
-                                         ({pt.BTB_SIZE{btb_used_reset}} & {pt.BTB_SIZE{1'b0}}) |
-                                         ({pt.BTB_SIZE{~btb_used_reset & dec_tlu_error_wb}} & (btb_used[pt.BTB_SIZE-1:0] & ~(32'b1 << dec_fa_error_index[BTB_FA_INDEX:0]))) |
-                                         (~{pt.BTB_SIZE{btb_used_reset | dec_tlu_error_wb}} & btb_used[pt.BTB_SIZE-1:0]);
-
-   assign write_used = btb_used_reset | ifu_bp_hit_taken_f | exu_mp_valid_write | dec_tlu_error_wb;
-
-
-   rvdffe #(pt.BTB_SIZE) btb_usedf (.*, .clk(clk),
-                    .en  (write_used),
-                    .din (btb_used_ns[pt.BTB_SIZE-1:0]),
-                    .dout(btb_used[pt.BTB_SIZE-1:0]));
-
-end // block: fa
-
-
-   //-----------------------------------------------------------------------------
-   // BHT
-   // 2 bit Entry -> direction, strength
-   //
-   //-----------------------------------------------------------------------------
-
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0][1:0]      bht_bank_wr_data ;
-   logic [1:0] [pt.BHT_ARRAY_DEPTH-1:0] [1:0]                bht_bank_rd_data_out ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clken ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0]                 bht_bank_clk   ;
-   logic [1:0] [(pt.BHT_ARRAY_DEPTH/NUM_BHT_LOOP)-1:0][NUM_BHT_LOOP-1:0]           bht_bank_sel   ;
-
-   for ( i=0; i<2; i++) begin : BANKS
-     for (genvar k=0 ; k < (pt.BHT_ARRAY_DEPTH)/NUM_BHT_LOOP ; k++) begin : BHT_CLK_GROUP
-     assign bht_bank_clken[i][k]  = (bht_wr_en0[i] & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH)) |
-                                    (bht_wr_en2[i] & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) |  BHT_NO_ADDR_MATCH));
-
-     rvclkhdr bht_bank_grp_cgc ( .en(bht_bank_clken[i][k]), .l1clk(bht_bank_clk[i][k]), .* ); // ifndef RV_FPGA_OPTIMIZE
-
-
-     for (j=0 ; j<NUM_BHT_LOOP ; j++) begin : BHT_FLOPS
-       assign   bht_bank_sel[i][k][j]    = (bht_wr_en0[i] & (bht_wr_addr0[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr0[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) |
-                                           (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI :pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ;
-
-       assign bht_bank_wr_data[i][k][j]  = (bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI:pt.BHT_ADDR_LO] == j) & ((bht_wr_addr2[pt.BHT_ADDR_HI: NUM_BHT_LOOP_OUTER_LO]==k) | BHT_NO_ADDR_MATCH)) ? bht_wr_data2[1:0] :
-                                                                                                                      bht_wr_data0[1:0]   ;
-
-
-          rvdffs_fpga #(2) bht_bank (.*,
-                    .clk        (bht_bank_clk[i][k]),
-                    .en         (bht_bank_sel[i][k][j]),
-                    .rawclk     (clk),
-                    .clken      (bht_bank_sel[i][k][j]),
-                    .din        (bht_bank_wr_data[i][k][j]),
-                    .dout       (bht_bank_rd_data_out[i][(16*k)+j]));
-
-      end // block: BHT_FLOPS
-   end // block: BHT_CLK_GROUP
- end // block: BANKS
-
-    always_comb begin : BHT_rd_mux
-     bht_bank0_rd_data_f[1:0] = '0 ;
-     bht_bank1_rd_data_f[1:0] = '0 ;
-     bht_bank0_rd_data_p1_f[1:0] = '0 ;
-     for (int j=0; j< pt.BHT_ARRAY_DEPTH; j++) begin
-       if (bht_rd_addr_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_f[1:0] = bht_bank_rd_data_out[0][j];
-         bht_bank1_rd_data_f[1:0] = bht_bank_rd_data_out[1][j];
-       end
-       if (bht_rd_addr_p1_f[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] == (pt.BHT_ADDR_HI-pt.BHT_ADDR_LO+1)'(j)) begin
-         bht_bank0_rd_data_p1_f[1:0] = bht_bank_rd_data_out[0][j];
-       end
-      end
-    end // block: BHT_rd_mux
-
-
-function [1:0] countones;
-      input [1:0] valid;
-
-      begin
-
-countones[1:0] = {2'b0, valid[1]} +
-                 {2'b0, valid[0]};
-      end
-   endfunction
-endmodule // eb1_ifu_bp_ctl
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-// purpose of this file is to convert 16b RISCV compressed instruction into 32b equivalent
-
-module eb1_ifu_compress_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input  logic [15:0] din,        // 16-bit   compressed instruction
-   output logic [31:0] dout        // 32-bit uncompressed instruction
-   );
-
-
-   logic               legal;
-
-   logic [15:0]  i;
-
-   logic [31:0]  o,l1,l2,l3;
-
-
-   assign i[15:0] = din[15:0];
-
-
-   logic [4:0]   rs2d,rdd,rdpd,rs2pd;
-
-   logic rdrd;
-   logic rdrs1;
-   logic rs2rs2;
-   logic rdprd;
-   logic rdprs1;
-   logic rs2prs2;
-   logic rs2prd;
-   logic uimm9_2;
-   logic ulwimm6_2;
-   logic ulwspimm7_2;
-   logic rdeq2;
-   logic rdeq1;
-   logic rs1eq2;
-   logic sbroffset8_1;
-   logic simm9_4;
-   logic simm5_0;
-   logic sjaloffset11_1;
-   logic sluimm17_12;
-   logic uimm5_0;
-   logic uswimm6_2;
-   logic uswspimm7_2;
-
-
-
-   // form the opcodes
-
-   // formats
-   //
-   // c.add rd 11:7 rs2  6:2
-   // c.and rdp 9:7 rs2p 4:2
-   //
-   // add rs2 24:20 rs1 19:15  rd 11:7
-
-   assign rs2d[4:0] = i[6:2];
-
-   assign rdd[4:0] = i[11:7];
-
-   assign rdpd[4:0] = {2'b01, i[9:7]};
-
-   assign rs2pd[4:0] = {2'b01, i[4:2]};
-
-
-
-   // merge in rd, rs1, rs2
-
-
-   // rd
-   assign l1[6:0] = o[6:0];
-
-   assign l1[11:7] = o[11:7] |
-                     ({5{rdrd}} & rdd[4:0]) |
-                     ({5{rdprd}} & rdpd[4:0]) |
-                     ({5{rs2prd}} & rs2pd[4:0]) |
-                     ({5{rdeq1}} & 5'd1) |
-                     ({5{rdeq2}} & 5'd2);
-
-
-   // rs1
-   assign l1[14:12] = o[14:12];
-   assign l1[19:15] = o[19:15] |
-                      ({5{rdrs1}} & rdd[4:0]) |
-                      ({5{rdprs1}} & rdpd[4:0]) |
-                      ({5{rs1eq2}} & 5'd2);
-
-
-   // rs2
-   assign l1[24:20] = o[24:20] |
-                      ({5{rs2rs2}} & rs2d[4:0]) |
-                      ({5{rs2prs2}} & rs2pd[4:0]);
-
-   assign l1[31:25] = o[31:25];
-
-   logic [5:0] simm5d;
-   logic [9:2] uimm9d;
-
-   logic [9:4] simm9d;
-   logic [6:2] ulwimm6d;
-   logic [7:2] ulwspimm7d;
-   logic [5:0] uimm5d;
-   logic [20:1] sjald;
-
-   logic [31:12] sluimmd;
-
-   // merge in immediates + jal offset
-
-   assign simm5d[5:0] = { i[12], i[6:2] };
-
-   assign uimm9d[9:2] = { i[10:7], i[12:11], i[5], i[6] };
-
-   assign simm9d[9:4] = { i[12], i[4:3], i[5], i[2], i[6] };
-
-   assign ulwimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign ulwspimm7d[7:2] = { i[3:2], i[12], i[6:4] };
-
-   assign uimm5d[5:0] = { i[12], i[6:2] };
-
-   assign sjald[11:1] = { i[12], i[8], i[10:9], i[6], i[7], i[2], i[11], i[5:4], i[3] };
-
-   assign sjald[20:12] =  {9{i[12]}};
-
-
-
-   assign sluimmd[31:12] = { {15{i[12]}}, i[6:2] };
-
-
-   assign l2[31:20] = ( l1[31:20] ) |
-                      ( {12{simm5_0}}   &  {{7{simm5d[5]}},simm5d[4:0]} ) |
-                      ( {12{uimm9_2}}   &  {2'b0,uimm9d[9:2],2'b0} ) |
-                      ( {12{simm9_4}}   &   {{3{simm9d[9]}},simm9d[8:4],4'b0} ) |
-                      ( {12{ulwimm6_2}} &   {5'b0,ulwimm6d[6:2],2'b0} ) |
-                      ( {12{ulwspimm7_2}}  & {4'b0,ulwspimm7d[7:2],2'b0} ) |
-                      ( {12{uimm5_0}}      &    {6'b0,uimm5d[5:0]} ) |
-                      ( {12{sjaloffset11_1}} &  {sjald[20],sjald[10:1],sjald[11]} ) |
-                      ( {12{sluimm17_12}}    &  sluimmd[31:20] );
-
-
-
-   assign l2[19:12] = ( l1[19:12] ) |
-                      ( {8{sjaloffset11_1}} & sjald[19:12] ) |
-                      ( {8{sluimm17_12}} & sluimmd[19:12] );
-
-
-   assign l2[11:0] = l1[11:0];
-
-
-   // merge in branch offset and store immediates
-
-   logic [8:1]   sbr8d;
-   logic [6:2]   uswimm6d;
-   logic [7:2]   uswspimm7d;
-
-
-   assign sbr8d[8:1] =   { i[12], i[6], i[5], i[2], i[11], i[10], i[4], i[3] };
-
-   assign uswimm6d[6:2] = { i[5], i[12:10], i[6] };
-
-   assign uswspimm7d[7:2] = { i[8:7], i[12:9] };
-
-   assign l3[31:25] = ( l2[31:25] ) |
-                      ( {7{sbroffset8_1}} & { {4{sbr8d[8]}},sbr8d[7:5] } ) |
-                      ( {7{uswimm6_2}}    & { 5'b0, uswimm6d[6:5] } ) |
-                      ( {7{uswspimm7_2}} & { 4'b0, uswspimm7d[7:5] } );
-
-
-   assign l3[24:12] = l2[24:12];
-
-   assign l3[11:7] = ( l2[11:7] ) |
-                     ( {5{sbroffset8_1}} & { sbr8d[4:1], sbr8d[8] } ) |
-                     ( {5{uswimm6_2}} & { uswimm6d[4:2], 2'b0 } ) |
-                     ( {5{uswspimm7_2}} & { uswspimm7d[4:2], 2'b0 } );
-
-   assign l3[6:0] = l2[6:0];
-
-
-   assign dout[31:0] = l3[31:0] & {32{legal}};
-
-
-// file "cdecode" is human readable file that has all of the compressed instruction decodes defined and is part of git repo
-// modify this file as needed
-
-// to generate all the equations below from "cdecode" except legal equation:
-
-// 1) coredecode -in cdecode > cdecode.e
-
-// 2) espresso -Dso -oeqntott cdecode.e | addassign > compress_equations
-
-// to generate the legal (16b compressed instruction is legal)  equation below:
-
-// 1) coredecode -in cdecode -legal > clegal.e
-
-// 2) espresso -Dso -oeqntott clegal.e | addassign > clegal_equation
-
-
-
-
-
-// espresso decodes
-assign rdrd = (!i[14]&i[6]&i[1]) | (!i[15]&i[14]&i[11]&i[0]) | (!i[14]&i[5]&i[1]) | (
-    !i[15]&i[14]&i[10]&i[0]) | (!i[14]&i[4]&i[1]) | (!i[15]&i[14]&i[9]
-    &i[0]) | (!i[14]&i[3]&i[1]) | (!i[15]&i[14]&!i[8]&i[0]) | (!i[14]
-    &i[2]&i[1]) | (!i[15]&i[14]&i[7]&i[0]) | (!i[15]&i[1]) | (!i[15]
-    &!i[13]&i[0]);
-
-assign rdrs1 = (!i[14]&i[12]&i[11]&i[1]) | (!i[14]&i[12]&i[10]&i[1]) | (!i[14]
-    &i[12]&i[9]&i[1]) | (!i[14]&i[12]&i[8]&i[1]) | (!i[14]&i[12]&i[7]
-    &i[1]) | (!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[6]&i[1]) | (!i[14]&i[12]&i[5]&i[1]) | (!i[14]&i[12]&i[4]
-    &i[1]) | (!i[14]&i[12]&i[3]&i[1]) | (!i[14]&i[12]&i[2]&i[1]) | (
-    !i[15]&!i[14]&!i[13]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign rs2rs2 = (i[15]&i[6]&i[1]) | (i[15]&i[5]&i[1]) | (i[15]&i[4]&i[1]) | (
-    i[15]&i[3]&i[1]) | (i[15]&i[2]&i[1]) | (i[15]&i[14]&i[1]);
-
-assign rdprd = (i[15]&!i[14]&!i[13]&i[0]);
-
-assign rdprs1 = (i[15]&!i[13]&i[0]) | (i[15]&i[14]&i[0]) | (i[14]&!i[1]&!i[0]);
-
-assign rs2prs2 = (i[15]&!i[14]&!i[13]&i[11]&i[10]&i[0]) | (i[15]&!i[1]&!i[0]);
-
-assign rs2prd = (!i[15]&!i[1]&!i[0]);
-
-assign uimm9_2 = (!i[14]&!i[1]&!i[0]);
-
-assign ulwimm6_2 = (!i[15]&i[14]&!i[1]&!i[0]);
-
-assign ulwspimm7_2 = (!i[15]&i[14]&i[1]);
-
-assign rdeq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign rdeq1 = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (!i[15]&!i[14]&i[13]);
-
-assign rs1eq2 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]) | (i[14]
-    &i[1]) | (!i[14]&!i[1]&!i[0]);
-
-assign sbroffset8_1 = (i[15]&i[14]&i[0]);
-
-assign simm9_4 = (!i[15]&i[14]&i[13]&!i[11]&!i[10]&!i[9]&i[8]&!i[7]);
-
-assign simm5_0 = (!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (!i[15]&!i[13]&i[0]);
-
-assign sjaloffset11_1 = (!i[14]&i[13]);
-
-assign sluimm17_12 = (!i[15]&i[14]&i[13]&i[7]) | (!i[15]&i[14]&i[13]&!i[8]) | (
-    !i[15]&i[14]&i[13]&i[9]) | (!i[15]&i[14]&i[13]&i[10]) | (!i[15]&i[14]
-    &i[13]&i[11]);
-
-assign uimm5_0 = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (!i[15]&!i[14]&i[1]);
-
-assign uswimm6_2 = (i[15]&!i[1]&!i[0]);
-
-assign uswspimm7_2 = (i[15]&i[14]&i[1]);
-
-assign o[31]  = 1'b0;
-
-assign o[30] = (i[15]&!i[14]&!i[13]&i[10]&!i[6]&!i[5]&i[0]) | (i[15]&!i[14]
-    &!i[13]&!i[11]&i[10]&i[0]);
-
-assign o[29]  = 1'b0;
-
-assign o[28]  = 1'b0;
-
-assign o[27]  = 1'b0;
-
-assign o[26]  = 1'b0;
-
-assign o[25]  = 1'b0;
-
-assign o[24]  = 1'b0;
-
-assign o[23]  = 1'b0;
-
-assign o[22]  = 1'b0;
-
-assign o[21]  = 1'b0;
-
-assign o[20] = (!i[14]&i[12]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[6]&!i[5]&!i[4]
-    &!i[3]&!i[2]&i[1]);
-
-assign o[19]  = 1'b0;
-
-assign o[18]  = 1'b0;
-
-assign o[17]  = 1'b0;
-
-assign o[16]  = 1'b0;
-
-assign o[15]  = 1'b0;
-
-assign o[14] = (i[15]&!i[14]&!i[13]&!i[11]&i[0]) | (i[15]&!i[14]&!i[13]&!i[10]
-    &i[0]) | (i[15]&!i[14]&!i[13]&i[6]&i[0]) | (i[15]&!i[14]&!i[13]&i[5]
-    &i[0]);
-
-assign o[13] = (i[15]&!i[14]&!i[13]&i[11]&!i[10]&i[0]) | (i[15]&!i[14]&!i[13]
-    &i[11]&i[6]&i[0]) | (i[14]&!i[0]);
-
-assign o[12] = (i[15]&!i[14]&!i[13]&i[6]&i[5]&i[0]) | (i[15]&!i[14]&!i[13]&!i[11]
-    &i[0]) | (i[15]&!i[14]&!i[13]&!i[10]&i[0]) | (!i[15]&!i[14]&i[1]) | (
-    i[15]&i[14]&i[13]);
-
-assign o[11]  = 1'b0;
-
-assign o[10]  = 1'b0;
-
-assign o[9]  = 1'b0;
-
-assign o[8]  = 1'b0;
-
-assign o[7]  = 1'b0;
-
-assign o[6] = (i[15]&!i[14]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&!i[0]) | (!i[14]&i[13]) | (
-    i[15]&i[14]&i[0]);
-
-assign o[5] = (i[15]&!i[0]) | (i[15]&i[11]&i[10]) | (i[13]&!i[8]) | (i[13]&i[7]) | (
-    i[13]&i[9]) | (i[13]&i[10]) | (i[13]&i[11]) | (!i[14]&i[13]) | (
-    i[15]&i[14]);
-
-assign o[4] = (!i[14]&!i[11]&!i[10]&!i[9]&!i[8]&!i[7]&!i[0]) | (!i[15]&!i[14]
-    &!i[0]) | (!i[14]&i[6]&!i[0]) | (!i[15]&i[14]&i[0]) | (!i[14]&i[5]
-    &!i[0]) | (!i[14]&i[4]&!i[0]) | (!i[14]&!i[13]&i[0]) | (!i[14]&i[3]
-    &!i[0]) | (!i[14]&i[2]&!i[0]);
-
-assign o[3] = (!i[14]&i[13]);
-
-assign o[2] = (!i[14]&i[12]&i[11]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]
-    &i[12]&i[10]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[9]
-    &!i[6]&!i[5]&!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[8]&!i[6]&!i[5]
-    &!i[4]&!i[3]&!i[2]&i[1]) | (!i[14]&i[12]&i[7]&!i[6]&!i[5]&!i[4]&!i[3]
-    &!i[2]&i[1]) | (i[15]&!i[14]&!i[12]&!i[6]&!i[5]&!i[4]&!i[3]&!i[2]
-    &!i[0]) | (!i[15]&i[13]&!i[8]) | (!i[15]&i[13]&i[7]) | (!i[15]&i[13]
-    &i[9]) | (!i[15]&i[13]&i[10]) | (!i[15]&i[13]&i[11]) | (!i[14]&i[13]);
-
-// 32b instruction has lower two bits 2'b11
-
-assign o[1]  = 1'b1;
-
-assign o[0]  = 1'b1;
-
-assign legal = (!i[13]&!i[12]&i[11]&i[1]&!i[0]) | (!i[13]&!i[12]&i[6]&i[1]&!i[0]) | (
-    !i[15]&!i[13]&i[11]&!i[1]) | (!i[13]&!i[12]&i[5]&i[1]&!i[0]) | (
-    !i[13]&!i[12]&i[10]&i[1]&!i[0]) | (!i[15]&!i[13]&i[6]&!i[1]) | (
-    i[15]&!i[12]&!i[1]&i[0]) | (!i[13]&!i[12]&i[9]&i[1]&!i[0]) | (!i[12]
-    &i[6]&!i[1]&i[0]) | (!i[15]&!i[13]&i[5]&!i[1]) | (!i[13]&!i[12]&i[8]
-    &i[1]&!i[0]) | (!i[12]&i[5]&!i[1]&i[0]) | (!i[15]&!i[13]&i[10]&!i[1]) | (
-    !i[13]&!i[12]&i[7]&i[1]&!i[0]) | (i[12]&i[11]&!i[10]&!i[1]&i[0]) | (
-    !i[15]&!i[13]&i[9]&!i[1]) | (!i[13]&!i[12]&i[4]&i[1]&!i[0]) | (i[13]
-    &i[12]&!i[1]&i[0]) | (!i[15]&!i[13]&i[8]&!i[1]) | (!i[13]&!i[12]&i[3]
-    &i[1]&!i[0]) | (i[13]&i[4]&!i[1]&i[0]) | (!i[13]&!i[12]&i[2]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[7]&!i[1]) | (i[13]&i[3]&!i[1]&i[0]) | (
-    i[13]&i[2]&!i[1]&i[0]) | (i[14]&!i[13]&!i[1]) | (!i[14]&!i[12]&!i[1]
-    &i[0]) | (i[15]&!i[13]&i[12]&i[1]&!i[0]) | (!i[15]&!i[13]&!i[12]&i[1]
-    &!i[0]) | (!i[15]&!i[13]&i[12]&!i[1]) | (i[14]&!i[13]&!i[0]);
-
-
-
-
-endmodule
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-//********************************************************************************
-// Icache closely coupled memory --- ICCM
-//********************************************************************************
-
-module eb1_ifu_iccm_mem
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-
-   input logic 					VPWR,
-   input logic						VGND,
-   
-   input logic                                        clk,                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                                        active_clk,                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                                        rst_l,                               // reset, active low
-   input logic                                        clk_override,                        // Override non-functional clock gating
-
-   input logic                                        iccm_wren,                           // ICCM write enable
-   input logic                                        iccm_rden,                           // ICCM read enable
-   input logic [pt.ICCM_BITS-1:1]                     iccm_rw_addr,                        // ICCM read/write address
-   input logic                                        iccm_buf_correct_ecc,                // ICCM is doing a single bit error correct cycle
-   input logic                                        iccm_correction_state,               // ICCM under a correction - This is needed to guard replacements when hit
-   input logic [2:0]                                  iccm_wr_size,                        // ICCM write size
-   input logic [77:0]                                 iccm_wr_data,                        // ICCM write data
-
-   input eb1_ccm_ext_in_pkt_t [pt.ICCM_NUM_BANKS-1:0] iccm_ext_in_pkt,                    // External packet
-
-   output logic [63:0]                                iccm_rd_data,                        // ICCM read data
-   output logic [77:0]                                iccm_rd_data_ecc,                    // ICCM read ecc
-   input  logic                                       scan_mode                            // Scan mode control
-
-);
-
-
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                wren_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                rden_bank;
-   logic [pt.ICCM_NUM_BANKS-1:0]                                                iccm_clken;
-   logic [pt.ICCM_NUM_BANKS-1:0] [pt.ICCM_BITS-1:pt.ICCM_BANK_INDEX_LO] addr_bank;
-
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_dout, iccm_bank_dout_fn;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data;
-   logic [pt.ICCM_BITS-1:1]              addr_bank_inc;
-   logic [pt.ICCM_BANK_HI : 2]           iccm_rd_addr_hi_q;
-   logic [pt.ICCM_BANK_HI : 1]           iccm_rd_addr_lo_q;
-   logic             [63:0]              iccm_rd_data_pre;
-   logic             [63:0]              iccm_data;
-   logic [1:0]                           addr_incr;
-   logic [pt.ICCM_NUM_BANKS-1:0] [38:0]  iccm_bank_wr_data_vec;
-
-   // logic to handle hard persisten faults
-   logic [1:0] [pt.ICCM_BITS-1:2]        redundant_address;
-   logic [1:0] [38:0]                    redundant_data;
-   logic [1:0]                           redundant_valid;
-   logic [pt.ICCM_NUM_BANKS-1:0]         sel_red1, sel_red0, sel_red1_q, sel_red0_q;
-
-
-   logic [38:0]                          redundant_data0_in, redundant_data1_in;
-   logic                                 redundant_lru, redundant_lru_in, redundant_lru_en;
-   logic                                 redundant_data0_en;
-   logic                                 redundant_data1_en;
-   logic                                 r0_addr_en, r1_addr_en;
-
-   // Testing persistent flip
-   //   logic [3:0]                              not_iccm_bank_dout;
-   //   logic [15:3]                     ecc_insert_flip_in, ecc_insert_flip;
-   //   logic                                 flip_en, flip_match, flip_match_q;
-   //
-   //   assign      flip_in = (iccm_rw_addr[3:2] != 2'b00);    // dont flip when bank0 - this is to make some progress in DMA streaming cases
-   //   assign      flip_en = iccm_rden;
-   //
-   //   rvdffs #(1) flipmatch  (.*,
-   //                   .clk(clk),
-   //                   .din(flip_in),
-   //                   .en(flip_en),
-   //                   .dout(flip_match_q));
-   //
-   // end of testing flip
-
-
-   assign addr_incr[1:0]                    = (iccm_wr_size[1:0] == 2'b11) ?  2'b10: 2'b01;
-   assign addr_bank_inc[pt.ICCM_BITS-1 : 1] = iccm_rw_addr[pt.ICCM_BITS-1 : 1] + addr_incr[1:0];
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS/2; i++) begin: mem_bank_data
-      assign iccm_bank_wr_data_vec[(2*i)]   = iccm_wr_data[38:0];
-      assign iccm_bank_wr_data_vec[(2*i)+1] = iccm_wr_data[77:39];
-   end
-
-   for (genvar i=0; i<pt.ICCM_NUM_BANKS; i++) begin: mem_bank
-      assign wren_bank[i]         = iccm_wren & ((iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_bank_wr_data[i] = iccm_bank_wr_data_vec[i];
-      assign rden_bank[i]         = iccm_rden & ( (iccm_rw_addr[pt.ICCM_BANK_HI:2] == i) | (addr_bank_inc[pt.ICCM_BANK_HI:2] == i));
-      assign iccm_clken[i]        =  wren_bank[i] | rden_bank[i] | clk_override;
-      assign addr_bank[i][pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] = wren_bank[i] ? iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                      ((addr_bank_inc[pt.ICCM_BANK_HI:2] == i) ?
-                                                                                                    addr_bank_inc[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO] :
-                                                                                                    iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO]);
-
-
-     if (pt.ICCM_INDEX_BITS == 6 ) begin : iccm
-               ram_64x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-   else if (pt.ICCM_INDEX_BITS == 7 ) begin : iccm
-               ram_128x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-     else if (pt.ICCM_INDEX_BITS == 8 ) begin : iccm
-               /*ram_256x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );*/
-                                      sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i][31:0]),
-									.dout0(iccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 9 ) begin : iccm
-               ram_512x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 10 ) begin : iccm
-              /* ram_1024x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-                                     );*/
-                                     
-                                     sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									
-									.clk0(clk),
-									.csb0(~iccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(iccm_bank_wr_data[i]),
-									.dout0(iccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-  					);
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 11 ) begin : iccm
-               ram_2048x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 12 ) begin : iccm
-               ram_4096x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 13 ) begin : iccm
-               ram_8192x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else if (pt.ICCM_INDEX_BITS == 14 ) begin : iccm
-               ram_16384x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-     else begin : iccm
-               ram_32768x39 iccm_bank (
-                                     // Primary ports
-                                     .CLK(clk),
-                                     .ME(iccm_clken[i]),
-                                     .WE(wren_bank[i]),
-                                     .ADR(addr_bank[i]),
-                                     .D(iccm_bank_wr_data[i][38:0]),
-                                     .Q(iccm_bank_dout[i][38:0]),
-                                     .ROP ( ),
-                                     // These are used by SoC
-                                     .TEST1(iccm_ext_in_pkt[i].TEST1),
-                                     .RME(iccm_ext_in_pkt[i].RME),
-                                     .RM(iccm_ext_in_pkt[i].RM),
-                                     .LS(iccm_ext_in_pkt[i].LS),
-                                     .DS(iccm_ext_in_pkt[i].DS),
-                                     .SD(iccm_ext_in_pkt[i].SD) ,
-                                     .TEST_RNM(iccm_ext_in_pkt[i].TEST_RNM),
-                                     .BC1(iccm_ext_in_pkt[i].BC1),
-                                     .BC2(iccm_ext_in_pkt[i].BC2)
-
-                                      );
-     end // block: iccm
-
-
-   // match the redundant rows
-   assign sel_red1[i]  = (redundant_valid[1]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[1][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[1][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   assign sel_red0[i]  = (redundant_valid[0]  & (((iccm_rw_addr[pt.ICCM_BITS-1:2] == redundant_address[0][pt.ICCM_BITS-1:2]) & (iccm_rw_addr[3:2] == i)) |
-                                                 ((addr_bank_inc[pt.ICCM_BITS-1:2]== redundant_address[0][pt.ICCM_BITS-1:2]) & (addr_bank_inc[3:2] == i))));
-
-   rvdff #(1) selred0  (.*,
-                   .clk(active_clk),
-                   .din(sel_red0[i]),
-                   .dout(sel_red0_q[i]));
-
-   rvdff #(1) selred1  (.*,
-                   .clk(active_clk),
-                   .din(sel_red1[i]),
-                   .dout(sel_red1_q[i]));
-
-
-  // muxing out the memory data with the redundant data if the address matches
-   assign iccm_bank_dout_fn[i][38:0] = ({39{sel_red1_q[i]}}                         & redundant_data[1][38:0]) |
-                                       ({39{sel_red0_q[i]}}                         & redundant_data[0][38:0]) |
-                                       ({39{~sel_red0_q[i] & ~sel_red1_q[i]}}       & iccm_bank_dout[i][38:0]);
-
-  end : mem_bank
-// This section does the redundancy for tolerating single bit errors
-// 2x 39 bit data values with address[hi:2] and a valid bit is needed to CAM and sub out the reads/writes to the particular locations
-// Also a LRU flop is kept to decide which of the redundant element to replace.
-   assign r0_addr_en              = ~redundant_lru & iccm_buf_correct_ecc;
-   assign r1_addr_en              = redundant_lru  & iccm_buf_correct_ecc;
-   assign redundant_lru_en         = iccm_buf_correct_ecc | (((|sel_red0[pt.ICCM_NUM_BANKS-1:0]) | (|sel_red1[pt.ICCM_NUM_BANKS-1:0])) & iccm_rden & iccm_correction_state);
-   assign redundant_lru_in        = iccm_buf_correct_ecc ? ~redundant_lru : (|sel_red0[pt.ICCM_NUM_BANKS-1:0]) ? 1'b1 : 1'b0;
-
-   rvdffs #() red_lru  (.*,                               // LRU flop for the redundant replacements
-                   .clk(active_clk),
-                   .en(redundant_lru_en),
-                   .din(redundant_lru_in),
-                   .dout(redundant_lru));
-
-    rvdffs #(pt.ICCM_BITS-2) r0_address  (.*,                 // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r0_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[0][pt.ICCM_BITS-1:2]));
-
-   rvdffs #(pt.ICCM_BITS-2) r1_address  (.*,                   // Redundant Row 0 address
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(iccm_rw_addr[pt.ICCM_BITS-1:2]),
-                   .dout(redundant_address[1][pt.ICCM_BITS-1:2]));
-
-    rvdffs #(1) r0_valid  (.*,
-                   .clk(active_clk),                                  // Redundant Row 0 Valid
-                   .en(r0_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[0]));
-
-   rvdffs #(1) r1_valid  (.*,                                   // Redundant Row 1 Valid
-                   .clk(active_clk),
-                   .en(r1_addr_en),
-                   .din(1'b1),
-                   .dout(redundant_valid[1]));
-
-
-
-   // We will have to update the Redundant copies in addition to the memory on subsequent writes to this memory location.
-   // The data gets updated on : 1) correction cycle, 2) Future writes - this could be W writes from DMA ( match up till addr[2]) or DW writes ( match till address[3])
-   // The data to pick also depends on the current address[2], size and the addr[2] stored in the address field of the redundant flop. Correction cycle is always W write and the data is splat on both legs, so choosing lower Word
-
-    assign redundant_data0_en      = ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[0][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[0][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[0] & iccm_wren) |
-                                      (~redundant_lru & iccm_buf_correct_ecc);
-
-    assign redundant_data0_in[38:0] = (((iccm_rw_addr[2] == redundant_address[0][2]) & iccm_rw_addr[2]) | (redundant_address[0][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r0_data  (.*,                                 // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data0_en),
-                   .din(redundant_data0_in[38:0]),
-                   .dout(redundant_data[0][38:0]));
-
-   assign redundant_data1_en      =  ((iccm_rw_addr[pt.ICCM_BITS-1:3] == redundant_address[1][pt.ICCM_BITS-1:3]) & ((iccm_rw_addr[2] == redundant_address[1][2]) | (iccm_wr_size[1:0] == 2'b11)) & redundant_valid[1] & iccm_wren) |
-                                     (redundant_lru & iccm_buf_correct_ecc);
-
-   assign redundant_data1_in[38:0] = (((iccm_rw_addr[2] == redundant_address[1][2]) & iccm_rw_addr[2]) | (redundant_address[1][2] & (iccm_wr_size[1:0] == 2'b11))) ? iccm_wr_data[77:39]  : iccm_wr_data[38:0];
-
-    rvdffs #(39) r1_data  (.*,                                  // Redundant Row 1 data
-                   .clk(active_clk),
-                   .en(redundant_data1_en),
-                   .din(redundant_data1_in[38:0]),
-                   .dout(redundant_data[1][38:0]));
-
-
-   rvdffs  #(pt.ICCM_BANK_HI)   rd_addr_lo_ff (.*, .clk(active_clk), .din(iccm_rw_addr [pt.ICCM_BANK_HI:1]), .dout(iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:1]), .en(1'b1));   // bit 0 of address is always 0
-   rvdffs  #(pt.ICCM_BANK_BITS) rd_addr_hi_ff (.*, .clk(active_clk), .din(addr_bank_inc[pt.ICCM_BANK_HI:2]), .dout(iccm_rd_addr_hi_q[pt.ICCM_BANK_HI:2]), .en(1'b1));
-
-   assign iccm_rd_data_pre[63:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][31:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][31:0]};
-   assign iccm_data[63:0]        = 64'({16'b0, (iccm_rd_data_pre[63:0] >> (16*iccm_rd_addr_lo_q[1]))});
-   assign iccm_rd_data[63:0]     = {iccm_data[63:0]};
-   assign iccm_rd_data_ecc[77:0] = {iccm_bank_dout_fn[iccm_rd_addr_hi_q][38:0], iccm_bank_dout_fn[iccm_rd_addr_lo_q[pt.ICCM_BANK_HI:2]][38:0]};
-
-endmodule // eb1_ifu_iccm_mem
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// eb1_ifu_ifc_ctl.sv
-// Function: Fetch pipe control
-//
-// Comments:
-//********************************************************************************
-
-module eb1_ifu_ifc_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,                         // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic free_l2clk,                  // Clock always.                  Through one clock header.  For flops with    second header built in.
-
-   input logic rst_l, // reset enable, from core pin
-   input logic scan_mode, // scan
-
-   input logic ic_hit_f,      // Icache hit
-   input logic ifu_ic_mb_empty, // Miss buffer empty
-
-   input logic ifu_fb_consume1,  // Aligner consumed 1 fetch buffer
-   input logic ifu_fb_consume2,  // Aligner consumed 2 fetch buffers
-
-   input logic dec_tlu_flush_noredir_wb, // Don't fetch on flush
-   input logic exu_flush_final, // FLush
-   input logic [31:1] exu_flush_path_final, // Flush path
-
-   input logic ifu_bp_hit_taken_f, // btb hit, select the target path
-   input logic [31:1] ifu_bp_btb_target_f, //  predicted target PC
-
-   input logic ic_dma_active, // IC DMA active, stop fetching
-   input logic ic_write_stall, // IC is writing, stop fetching
-   input logic dma_iccm_stall_any, // force a stall in the fetch pipe for DMA ICCM access
-
-   input logic [31:0]  dec_tlu_mrac_ff ,   // side_effect and cacheable for each region
-
-   output logic [31:1] ifc_fetch_addr_f, // fetch addr F
-   output logic [31:1] ifc_fetch_addr_bf, // fetch addr BF
-
-   output logic  ifc_fetch_req_f,  // fetch request valid F
-
-   output logic  ifu_pmu_fetch_stall, // pmu event measuring fetch stall
-
-   output logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. BF stage
-   output logic                      ifc_fetch_req_bf,              // Fetch request. Comes with the address.  BF stage
-   output logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. BF stage
-   output logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   output logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-
-   output logic  ifc_dma_access_ok // fetch is not accessing the ICCM, DMA can proceed
-
-   
-
-   );
-
-   logic [31:1]  fetch_addr_bf;
-   logic [31:1]  fetch_addr_next;
-   logic [3:0]   fb_write_f, fb_write_ns;
-
-   logic     fb_full_f_ns, fb_full_f;
-   logic     fb_right, fb_right2, fb_left, wfm, idle;
-   logic     sel_last_addr_bf, sel_next_addr_bf;
-   logic     miss_f, miss_a;
-   logic     flush_fb, dma_iccm_stall_any_f;
-   logic     mb_empty_mod, goto_idle, leave_idle;
-   logic     fetch_bf_en;
-   logic         line_wrap;
-   logic         fetch_addr_next_1;
-
-   // FSM assignment
-    typedef enum logic [1:0] { IDLE  = 2'b00 ,
-                               FETCH = 2'b01 ,
-                               STALL = 2'b10 ,
-                               WFM   = 2'b11   } state_t ;
-   state_t state      ;
-   state_t next_state ;
-
-   logic     dma_stall;
-   assign dma_stall = ic_dma_active | dma_iccm_stall_any_f;
-
-
-
-   // Fetch address mux
-   // - flush
-   // - Miss *or* flush during WFM (icache miss buffer is blocking)
-   // - Sequential
-
-if(pt.BTB_ENABLE==1) begin
-   logic sel_btb_addr_bf;
-
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_btb_addr_bf  = ~exu_flush_final & ifc_fetch_req_f & ifu_bp_hit_taken_f & ic_hit_f;
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ~ifu_bp_hit_taken_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_btb_addr_bf}} & {ifu_bp_btb_target_f[31:1]})| // BTB target
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-
-end // if (pt.BTB_ENABLE=1)
-   else begin
-   assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-   assign sel_next_addr_bf = ~exu_flush_final & ifc_fetch_req_f & ic_hit_f;
-
-
-   assign fetch_addr_bf[31:1] = ( ({31{exu_flush_final}} &  exu_flush_path_final[31:1]) | // FLUSH path
-                  ({31{sel_last_addr_bf}} & ifc_fetch_addr_f[31:1]) | // MISS path
-                  ({31{sel_next_addr_bf}} & {fetch_addr_next[31:1]})); // SEQ path
-
-end
-   assign fetch_addr_next[31:1] = {({ifc_fetch_addr_f[31:2]} + 31'b1), fetch_addr_next_1 };
-   assign line_wrap = (fetch_addr_next[pt.ICACHE_TAG_INDEX_LO] ^ ifc_fetch_addr_f[pt.ICACHE_TAG_INDEX_LO]);
-
-   assign fetch_addr_next_1 = line_wrap ? 1'b0 : ifc_fetch_addr_f[1];
-
-   assign ifc_fetch_req_bf_raw = ~idle;
-   assign ifc_fetch_req_bf =  ifc_fetch_req_bf_raw &
-
-                 ~(fb_full_f_ns & ~(ifu_fb_consume2 | ifu_fb_consume1)) &
-                 ~dma_stall &
-                 ~ic_write_stall &
-                 ~dec_tlu_flush_noredir_wb ;
-
-
-   assign fetch_bf_en = exu_flush_final | ifc_fetch_req_f;
-
-   assign miss_f = ifc_fetch_req_f & ~ic_hit_f & ~exu_flush_final;
-
-   assign mb_empty_mod = (ifu_ic_mb_empty | exu_flush_final) & ~dma_stall & ~miss_f & ~miss_a;
-
-   // Halt flushes and takes us to IDLE
-   assign goto_idle = exu_flush_final & dec_tlu_flush_noredir_wb;
-   // If we're in IDLE, and we get a flush, goto FETCH
-   assign leave_idle = exu_flush_final & ~dec_tlu_flush_noredir_wb & idle;
-
-//.i 7
-//.o 2
-//.ilb state[1] state[0] reset_delayed miss_f mb_empty_mod  goto_idle leave_idle
-//.ob next_state[1] next_state[0]
-//.type fr
-//
-//# fetch 01, stall 10, wfm 11, idle 00
-//-- 1---- 01
-//-- 0--1- 00
-//00 0--00 00
-//00 0--01 01
-//
-//01 01-0- 11
-//01 00-0- 01
-//
-//11 0-10- 01
-//11 0-00- 11
-
-   assign next_state[1] = (~state[1] & state[0] & miss_f & ~goto_idle) |
-              (state[1] & ~mb_empty_mod & ~goto_idle);
-
-   assign next_state[0] = (~goto_idle & leave_idle) | (state[0] & ~goto_idle);
-
-   assign flush_fb = exu_flush_final;
-
-   // model fb write logic to mass balance the fetch buffers
-   assign fb_right = ( ifu_fb_consume1 & ~ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)) | // Consumed and no new fetch
-              (ifu_fb_consume2 &  ifc_fetch_req_f); // Consumed 2 and new fetch
-
-
-   assign fb_right2 = (ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f)); // Consumed 2 and no new fetch
-
-   assign fb_left = ifc_fetch_req_f & ~(ifu_fb_consume1 | ifu_fb_consume2) & ~miss_f;
-
-// CBH
-   assign fb_write_ns[3:0] = ( ({4{(flush_fb)}} & 4'b0001) |
-                   ({4{~flush_fb & fb_right }} & {1'b0, fb_write_f[3:1]}) |
-                   ({4{~flush_fb & fb_right2}} & {2'b0, fb_write_f[3:2]}) |
-                   ({4{~flush_fb & fb_left  }} & {fb_write_f[2:0], 1'b0}) |
-                   ({4{~flush_fb & ~fb_right & ~fb_right2 & ~fb_left}}  & fb_write_f[3:0]));
-
-
-   assign fb_full_f_ns = fb_write_ns[3];
-
-   assign idle     = state      == IDLE  ;
-   assign wfm      = state      == WFM   ;
-
-   rvdffie #(10) fbwrite_ff (.*, .clk(free_l2clk),
-                          .din( {dma_iccm_stall_any, miss_f, ifc_fetch_req_bf, next_state[1:0], fb_full_f_ns, fb_write_ns[3:0]}),
-                          .dout({dma_iccm_stall_any_f, miss_a, ifc_fetch_req_f, state[1:0], fb_full_f, fb_write_f[3:0]}));
-
-   assign ifu_pmu_fetch_stall = wfm | 
-                (ifc_fetch_req_bf_raw & ( (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1 | exu_flush_final)) |
-                  dma_stall));
-
-
-
-   assign ifc_fetch_addr_bf[31:1] = fetch_addr_bf[31:1];
-
-   rvdffpcie #(31) faddrf1_ff  (.*, .en(fetch_bf_en), .din(fetch_addr_bf[31:1]), .dout(ifc_fetch_addr_f[31:1]));
-
-
- if (pt.ICCM_ENABLE)  begin
-   logic iccm_acc_in_region_bf;
-   logic iccm_acc_in_range_bf;
-   rvrangecheck #( .CCM_SADR    (pt.ICCM_SADR),
-                   .CCM_SIZE    (pt.ICCM_SIZE) ) iccm_rangecheck (
-                                     .addr     ({ifc_fetch_addr_bf[31:1],1'b0}) ,
-                                     .in_range (iccm_acc_in_range_bf) ,
-                                     .in_region(iccm_acc_in_region_bf)
-                                     );
-
-   assign ifc_iccm_access_bf = iccm_acc_in_range_bf ;
-
-  assign ifc_dma_access_ok = ( (~ifc_iccm_access_bf |
-                 (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1)) |
-                 (wfm  & ~ifc_fetch_req_bf) |
-                 idle ) & ~exu_flush_final) |
-                  dma_iccm_stall_any_f;
-
-  assign ifc_region_acc_fault_bf = ~iccm_acc_in_range_bf & iccm_acc_in_region_bf ;
- end
- else  begin
-   assign ifc_iccm_access_bf = 1'b0 ;
-   assign ifc_dma_access_ok  = 1'b0 ;
-   assign ifc_region_acc_fault_bf  = 1'b0 ;
- end
-
-   assign ifc_fetch_uncacheable_bf =  ~dec_tlu_mrac_ff[{ifc_fetch_addr_bf[31:28] , 1'b0 }]  ; // bit 0 of each region description is the cacheable bit
-
-endmodule // eb1_ifu_ifc_ctl
-
-//********************************************************************************
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//********************************************************************************
-
-
-//********************************************************************************
-// Function: Icache , iccm  control
-// BFF -> F1 -> F2 -> A
-//********************************************************************************
-
-module eb1_ifu_mem_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic clk,                                                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic active_clk,                                          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic free_l2clk,                                          // Clock always.                  Through one clock header.  For flops with    second header built in.
-   input logic rst_l,                                               // reset, active low
-
-   input logic                       exu_flush_final,               // Flush from the pipeline., includes flush lower
-   input logic                       dec_tlu_flush_lower_wb,        // Flush lower from the pipeline.
-   input logic                       dec_tlu_flush_err_wb,          // Flush from the pipeline due to perr.
-   input logic                       dec_tlu_i0_commit_cmt,         // committed i0 instruction
-   input logic                       dec_tlu_force_halt,            // force halt.
-
-   input logic [31:1]                ifc_fetch_addr_bf,             // Fetch Address byte aligned always.      F1 stage.
-   input logic                       ifc_fetch_uncacheable_bf,      // The fetch request is uncacheable space. F1 stage
-   input logic                       ifc_fetch_req_bf,              // Fetch request. Comes with the address.  F1 stage
-   input logic                       ifc_fetch_req_bf_raw,          // Fetch request without some qualifications. Used for clock-gating. F1 stage
-   input logic                       ifc_iccm_access_bf,            // This request is to the ICCM. Do not generate misses to the bus.
-   input logic                       ifc_region_acc_fault_bf,       // Access fault. in ICCM region but offset is outside defined ICCM.
-   input logic                       ifc_dma_access_ok,             // It is OK to give dma access to the ICCM. (ICCM is not busy this cycle).
-   input logic                       dec_tlu_fence_i_wb,            // Fence.i instruction is committing. Clear all Icache valids.
-   input logic                       ifu_bp_hit_taken_f,            // Branch is predicted taken. Kill the fetch next cycle.
-
-   input logic                       ifu_bp_inst_mask_f,            // tell ic which valids to kill because of a taken branch, right justified
-
-   output logic                      ifu_miss_state_idle,           // No icache misses are outstanding.
-   output logic                      ifu_ic_mb_empty,               // Continue with normal fetching. This does not mean that miss is finished.
-   output logic                      ic_dma_active  ,               // In the middle of servicing dma request to ICCM. Do not make any new requests.
-   output logic                      ic_write_stall,                // Stall fetch the cycle we are writing the cache.
-
-/// PMU signals
-   output logic                      ifu_pmu_ic_miss,               // IC miss event
-   output logic                      ifu_pmu_ic_hit,                // IC hit event
-   output logic                      ifu_pmu_bus_error,             // Bus error event
-   output logic                      ifu_pmu_bus_busy,              // Bus busy event
-   output logic                      ifu_pmu_bus_trxn,              // Bus transaction
-
-  //-------------------------- IFU AXI signals--------------------------
-   // AXI Write Channels
-   output logic                            ifu_axi_awvalid,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_awid,
-   output logic [31:0]                     ifu_axi_awaddr,
-   output logic [3:0]                      ifu_axi_awregion,
-   output logic [7:0]                      ifu_axi_awlen,
-   output logic [2:0]                      ifu_axi_awsize,
-   output logic [1:0]                      ifu_axi_awburst,
-   output logic                            ifu_axi_awlock,
-   output logic [3:0]                      ifu_axi_awcache,
-   output logic [2:0]                      ifu_axi_awprot,
-   output logic [3:0]                      ifu_axi_awqos,
-
-   output logic                            ifu_axi_wvalid,
-   output logic [63:0]                     ifu_axi_wdata,
-   output logic [7:0]                      ifu_axi_wstrb,
-   output logic                            ifu_axi_wlast,
-
-   output logic                            ifu_axi_bready,
-
-   // AXI Read Channels
-   output logic                            ifu_axi_arvalid,
-   input  logic                            ifu_axi_arready,
-   output logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_arid,
-   output logic [31:0]                     ifu_axi_araddr,
-   output logic [3:0]                      ifu_axi_arregion,
-   output logic [7:0]                      ifu_axi_arlen,
-   output logic [2:0]                      ifu_axi_arsize,
-   output logic [1:0]                      ifu_axi_arburst,
-   output logic                            ifu_axi_arlock,
-   output logic [3:0]                      ifu_axi_arcache,
-   output logic [2:0]                      ifu_axi_arprot,
-   output logic [3:0]                      ifu_axi_arqos,
-
-   input  logic                            ifu_axi_rvalid,
-   output logic                            ifu_axi_rready,
-   input  logic [pt.IFU_BUS_TAG-1:0]       ifu_axi_rid,
-   input  logic [63:0]                     ifu_axi_rdata,
-   input  logic [1:0]                      ifu_axi_rresp,
-
-    input  logic                     ifu_bus_clk_en,
-
-
-   input  logic                      dma_iccm_req,      //  dma iccm command (read or write)
-   input  logic [31:0]               dma_mem_addr,      //  dma address
-   input  logic [2:0]                dma_mem_sz,        //  size
-   input  logic                      dma_mem_write,     //  write
-   input  logic [63:0]               dma_mem_wdata,     //  write data
-   input  logic [2:0]                dma_mem_tag,       //  DMA Buffer entry number
-
-   output logic                      iccm_dma_ecc_error,//   Data read from iccm has an ecc error
-   output logic                      iccm_dma_rvalid,   //   Data read from iccm is valid
-   output logic [63:0]               iccm_dma_rdata,    //   dma data read from iccm
-   output logic [2:0]                iccm_dma_rtag,     //   Tag of the DMA req
-   output logic                      iccm_ready,        //   iccm ready to accept new command.
-
-
-//   I$ & ITAG Ports
-   output logic [31:1]               ic_rw_addr,         // Read/Write addresss to the Icache.
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_wr_en,           // Icache write enable, when filling the Icache.
-   output logic                      ic_rd_en,           // Icache read  enable.
-
-   output logic [pt.ICACHE_BANKS_WAY-1:0] [70:0]               ic_wr_data,           // Data to fill to the Icache. With ECC
-   input  logic [63:0]               ic_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [70:0]               ic_debug_rd_data ,          // Data read from Icache. 2x64bits + parity bits. F2 stage. With ECC
-   input  logic [25:0]               ictag_debug_rd_data,  // Debug icache tag.
-   output logic [70:0]               ic_debug_wr_data,     // Debug wr cache.
-   output logic [70:0]               ifu_ic_debug_rd_data, // debug data read
-
-
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_eccerr,    //
-   input  logic [pt.ICACHE_BANKS_WAY-1:0] ic_parerr,
-
-   output logic [pt.ICACHE_INDEX_HI:3]               ic_debug_addr,      // Read/Write addresss to the Icache.
-   output logic                      ic_debug_rd_en,     // Icache debug rd
-   output logic                      ic_debug_wr_en,     // Icache debug wr
-   output logic                      ic_debug_tag_array, // Debug tag array
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_debug_way,       // Debug way. Rd or Wr.
-
-
-   output logic [pt.ICACHE_NUM_WAYS-1:0]                ic_tag_valid,       // Valid bits when accessing the Icache. One valid bit per way. F2 stage
-
-   input  logic [pt.ICACHE_NUM_WAYS-1:0]                ic_rd_hit,          // Compare hits from Icache tags. Per way.  F2 stage
-   input  logic                      ic_tag_perr,        // Icache Tag parity error
-
-   // ICCM ports
-   output logic [pt.ICCM_BITS-1:1]  iccm_rw_addr,       // ICCM read/write address.
-   output logic                      iccm_wren,          // ICCM write enable (through the DMA)
-   output logic                      iccm_rden,          // ICCM read enable.
-   output logic [77:0]               iccm_wr_data,       // ICCM write data.
-   output logic [2:0]                iccm_wr_size,       // ICCM write location within DW.
-
-   input  logic [63:0]               iccm_rd_data,       // Data read from ICCM.
-   input  logic [77:0]               iccm_rd_data_ecc,   // Data + ECC read from ICCM.
-   input  logic [1:0]                ifu_fetch_val,
-   // IFU control signals
-   output logic                      ic_hit_f,               // Hit in Icache(if Icache access) or ICCM access( ICCM always has ic_hit_f)
-   output logic [1:0]                ic_access_fault_f,      // Access fault (bus error or ICCM access in region but out of offset range).
-   output logic [1:0]                ic_access_fault_type_f, // Access fault types
-   output logic                      iccm_rd_ecc_single_err, // This fetch has a single ICCM ecc  error.
-   output logic [1:0]                iccm_rd_ecc_double_err, // This fetch has a double ICCM ecc  error.
-   output logic                      ic_error_start,         // This has any I$ errors ( data/tag/ecc/parity )
-
-   output logic                      ifu_async_error_start,  // Or of the sb iccm, and all the icache errors sent to aligner to stop
-   output logic                      iccm_dma_sb_error,      // Single Bit ECC error from a DMA access
-   output logic [1:0]                ic_fetch_val_f,         // valid bytes for fetch. To the Aligner.
-   output logic [31:0]               ic_data_f,              // Data read from Icache or ICCM. To the Aligner.
-   output logic [63:0]               ic_premux_data,         // Premuxed data to be muxed with Icache data
-   output logic                      ic_sel_premux_data,     // Select premux data.
-
-/////  Debug
-   input  eb1_cache_debug_pkt_t     dec_tlu_ic_diag_pkt ,       // Icache/tag debug read/write packet
-   input  logic                      dec_tlu_core_ecc_disable,   // disable the ecc checking and flagging
-   output logic                      ifu_ic_debug_rd_data_valid, // debug data valid.
-   output logic                      iccm_buf_correct_ecc,
-   output logic                      iccm_correction_state,
-
-
-   input  logic         scan_mode
-   );
-
-//  Create different defines for ICACHE and ICCM enable combinations
-
- localparam   NUM_OF_BEATS = 8 ;
-
-
-
-   logic [31:3]    ifu_ic_req_addr_f;
-   logic           uncacheable_miss_in ;
-   logic           uncacheable_miss_ff;
-
-
-
-   logic           bus_ifu_wr_en     ;
-   logic           bus_ifu_wr_en_ff  ;
-   logic           bus_ifu_wr_en_ff_q  ;
-   logic           bus_ifu_wr_en_ff_wo_err  ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     bus_ic_wr_en ;
-
-   logic           reset_tag_valid_for_miss  ;
-
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_in;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_rep_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_mb_ff;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_hit_new;
-   logic [pt.ICACHE_STATUS_BITS-1:0]     way_status_new_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_in;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     tagv_mb_ff;
-
-
-   logic           ifu_wr_data_comb_err ;
-   logic           ifu_byp_data_err_new;
-   logic  [1:0]    ifu_byp_data_err_f;
-   logic           ifu_wr_cumulative_err_data;
-   logic           ifu_wr_cumulative_err;
-   logic           ifu_wr_data_comb_err_ff;
-   logic           scnd_miss_index_match ;
-
-
-   logic           ifc_dma_access_q_ok;
-   logic           ifc_iccm_access_f ;
-   logic           ifc_region_acc_fault_f;
-   logic           ifc_region_acc_fault_final_f;
-   logic  [1:0]    ifc_bus_acc_fault_f;
-   logic           ic_act_miss_f;
-   logic           ic_miss_under_miss_f;
-   logic           ic_ignore_2nd_miss_f;
-   logic           ic_act_hit_f;
-   logic           miss_pending;
-   logic [31:1]    imb_in , imb_ff  ;
-   logic [31:pt.ICACHE_BEAT_ADDR_HI+1]    miss_addr_in , miss_addr  ;
-   logic           miss_wrap_f ;
-   logic           flush_final_f;
-   logic           ifc_fetch_req_f;
-   logic           ifc_fetch_req_f_raw;
-   logic           fetch_req_f_qual   ;
-   logic           ifc_fetch_req_qual_bf ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     replace_way_mb_any;
-   logic           last_beat;
-   logic           reset_beat_cnt  ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_req_addr_bits_hi_3 ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]     ic_wr_addr_bits_hi_3 ;
-   logic [31:1]    ifu_fetch_addr_int_f ;
-   logic [31:1]    ifu_ic_rw_int_addr ;
-   logic           crit_wd_byp_ok_ff ;
-   logic           ic_crit_wd_rdy_new_ff;
-   logic   [79:0]  ic_byp_data_only_pre_new;
-   logic   [79:0]  ic_byp_data_only_new;
-   logic           ic_byp_hit_f ;
-   logic           ic_valid ;
-   logic           ic_valid_ff;
-   logic           reset_all_tags;
-   logic           ic_valid_w_debug;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren,ifu_tag_wren_ff;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_tag_wr_en;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ifu_tag_wren_w_debug;
-   logic [pt.ICACHE_NUM_WAYS-1:0]     ic_debug_way_ff;
-   logic           ic_debug_rd_en_ff   ;
-   logic           fetch_bf_f_c1_clken ;
-   logic           fetch_bf_f_c1_clk;
-   logic           debug_c1_clken;
-   logic           debug_c1_clk;
-
-   logic           reset_ic_in ;
-   logic           reset_ic_ff ;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]     vaddr_f ;
-   logic [31:1]    ifu_status_wr_addr;
-   logic           sel_mb_addr ;
-   logic           sel_mb_addr_ff ;
-   logic           sel_mb_status_addr ;
-   logic [63:0]    ic_final_data;
-
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_ff ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_ic_rw_int_addr_w_debug ;
-   logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] ifu_status_wr_addr_w_debug ;
-
-   logic [pt.ICACHE_STATUS_BITS-1:0]                              way_status_new_ff ;
-   logic                                    way_status_wr_en_ff ;
-   logic [pt.ICACHE_TAG_DEPTH-1:0][pt.ICACHE_STATUS_BITS-1:0]        way_status_out ;
-   logic [1:0]                              ic_debug_way_enc;
-
-   logic [pt.IFU_BUS_TAG-1:0]             ifu_bus_rid_ff;
-
-   logic         fetch_req_icache_f;
-   logic         fetch_req_iccm_f;
-   logic         ic_iccm_hit_f;
-   logic         fetch_uncacheable_ff;
-   logic         way_status_wr_en;
-   logic         sel_byp_data;
-   logic         sel_ic_data;
-   logic         sel_iccm_data;
-   logic         ic_rd_parity_final_err;
-   logic         ic_act_miss_f_delayed;
-   logic         bus_ifu_wr_data_error;
-   logic         bus_ifu_wr_data_error_ff;
-   logic         way_status_wr_en_w_debug;
-   logic         ic_debug_tag_val_rd_out;
-   logic         ifu_pmu_ic_miss_in;
-   logic         ifu_pmu_ic_hit_in;
-   logic         ifu_pmu_bus_error_in;
-   logic         ifu_pmu_bus_trxn_in;
-   logic         ifu_pmu_bus_busy_in;
-   logic         ic_debug_ict_array_sel_in;
-   logic         ic_debug_ict_array_sel_ff;
-   logic         debug_data_clken;
-   logic         last_data_recieved_in ;
-   logic         last_data_recieved_ff ;
-
-   logic                          ifu_bus_rvalid           ;
-   logic                          ifu_bus_rvalid_ff        ;
-   logic                          ifu_bus_rvalid_unq_ff    ;
-   logic                          ifu_bus_arready_unq       ;
-   logic                          ifu_bus_arready_unq_ff    ;
-   logic                          ifu_bus_arvalid           ;
-   logic                          ifu_bus_arvalid_ff        ;
-   logic                          ifu_bus_arready           ;
-   logic                          ifu_bus_arready_ff        ;
-   logic [63:0]                   ifu_bus_rdata_ff        ;
-   logic [1:0]                    ifu_bus_rresp_ff          ;
-   logic                          ifu_bus_rsp_valid ;
-   logic                          ifu_bus_rsp_ready ;
-   logic [pt.IFU_BUS_TAG-1:0]     ifu_bus_rsp_tag;
-   logic [63:0]                   ifu_bus_rsp_rdata;
-   logic [1:0]                    ifu_bus_rsp_opc;
-
-   logic [pt.ICACHE_NUM_BEATS-1:0]    write_fill_data;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    wr_data_c1_clk;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_valid;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error_in;
-   logic [pt.ICACHE_NUM_BEATS-1:0]    ic_miss_buff_data_error;
-   logic [pt.ICACHE_BEAT_ADDR_HI:1]    byp_fetch_index;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_1;
-   logic [pt.ICACHE_BEAT_ADDR_HI:3]    byp_fetch_index_inc;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_0;
-   logic [pt.ICACHE_BEAT_ADDR_HI:2]    byp_fetch_index_inc_1;
-   logic          miss_buff_hit_unq_f ;
-   logic          stream_hit_f ;
-   logic          stream_miss_f ;
-   logic          stream_eol_f ;
-   logic          crit_byp_hit_f ;
-   logic [pt.IFU_BUS_TAG-1:0] other_tag ;
-   logic [(2*pt.ICACHE_NUM_BEATS)-1:0] [31:0] ic_miss_buff_data;
-   logic [63:0] ic_miss_buff_half;
-   logic        scnd_miss_req, scnd_miss_req_q;
-   logic        scnd_miss_req_in;
-
-
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_ff;
-   logic [pt.ICCM_BITS-1:2]                iccm_ecc_corr_index_in;
-   logic [38:0]                         iccm_ecc_corr_data_ff;
-   logic                                iccm_ecc_write_status     ;
-   logic                                iccm_rd_ecc_single_err_ff   ;
-   logic                                iccm_error_start;     // start the error fsm
-   logic                                perr_state_en;
-   logic                                miss_state_en;
-
-   logic        busclk;
-   logic        busclk_force;
-   logic        busclk_reset;
-   logic        bus_ifu_bus_clk_en_ff;
-   logic        bus_ifu_bus_clk_en ;
-
-   logic        ifc_bus_ic_req_ff_in;
-   logic        ifu_bus_cmd_valid ;
-   logic        ifu_bus_cmd_ready ;
-
-   logic        bus_inc_data_beat_cnt     ;
-   logic        bus_reset_data_beat_cnt   ;
-   logic        bus_hold_data_beat_cnt    ;
-
-   logic        bus_inc_cmd_beat_cnt     ;
-   logic        bus_reset_cmd_beat_cnt_0   ;
-   logic        bus_reset_cmd_beat_cnt_secondlast   ;
-   logic        bus_hold_cmd_beat_cnt    ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_data_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_data_beat_count      ;
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_cmd_beat_count  ;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_cmd_beat_count      ;
-
-
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_new_rd_addr_count;
-   logic [pt.ICACHE_BEAT_BITS-1:0]  bus_rd_addr_count;
-
-
-   logic        bus_cmd_sent           ;
-   logic        bus_last_data_beat     ;
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren            ;
-
-   logic [pt.ICACHE_NUM_WAYS-1:0]       bus_wren_last       ;
-   logic [pt.ICACHE_NUM_WAYS-1:0]       wren_reset_miss      ;
-   logic        ifc_dma_access_ok_d;
-   logic        ifc_dma_access_ok_prev;
-
-   logic   bus_cmd_req_in ;
-   logic   bus_cmd_req_hold ;
-
-   logic   second_half_available ;
-   logic   write_ic_16_bytes ;
-
-   logic   ifc_region_acc_fault_final_bf;
-   logic   ifc_region_acc_fault_memory_bf;
-   logic   ifc_region_acc_fault_memory_f;
-   logic   ifc_region_acc_okay;
-
-   logic   iccm_correct_ecc;
-   logic   dma_sb_err_state, dma_sb_err_state_ff;
-   logic   two_byte_instr;
-
-   typedef enum logic [2:0] {IDLE=3'b000, CRIT_BYP_OK=3'b001, HIT_U_MISS=3'b010, MISS_WAIT=3'b011,CRIT_WRD_RDY=3'b100,SCND_MISS=3'b101,STREAM=3'b110 , STALL_SCND_MISS=3'b111} miss_state_t;
-   miss_state_t miss_state, miss_nxtstate;
-
-   typedef enum logic [1:0] {ERR_STOP_IDLE=2'b00, ERR_FETCH1=2'b01 , ERR_FETCH2=2'b10 , ERR_STOP_FETCH=2'b11} err_stop_state_t;
-   err_stop_state_t err_stop_state, err_stop_nxtstate;
-   logic   err_stop_state_en ;
-   logic   err_stop_fetch ;
-
-   logic   ic_crit_wd_rdy;         // Critical fetch is ready to be bypassed.
-
-   logic   ifu_bp_hit_taken_q_f;
-   logic   ifu_bus_rvalid_unq;
-   logic   bus_cmd_beat_en;
-
-
-// ---- Clock gating section -----
-// c1 clock enables
-
-
-   assign fetch_bf_f_c1_clken  = ifc_fetch_req_bf_raw | ifc_fetch_req_f | miss_pending | exu_flush_final | scnd_miss_req;
-   assign debug_c1_clken       = ic_debug_rd_en | ic_debug_wr_en ;
-   // C1 - 1 clock pulse for data
-
-   rvclkhdr fetch_bf_f_c1_cgc    ( .en(fetch_bf_f_c1_clken),     .l1clk(fetch_bf_f_c1_clk), .* );
-   rvclkhdr debug_c1_cgc         ( .en(debug_c1_clken),          .l1clk(debug_c1_clk), .* );
-
-
-
-// ------ end clock gating section ------------------------
-
-   logic [1:0]    iccm_single_ecc_error;
-   logic          dma_iccm_req_f ;
-   assign iccm_dma_sb_error     = (|iccm_single_ecc_error[1:0] )  & dma_iccm_req_f ;
-   assign ifu_async_error_start = iccm_rd_ecc_single_err | ic_error_start;
-
-
-   typedef enum logic [2:0] {ERR_IDLE=3'b000, IC_WFF=3'b001 , ECC_WFF=3'b010 , ECC_CORR=3'b011, DMA_SB_ERR=3'b100} perr_state_t;
-   perr_state_t perr_state, perr_nxtstate;
-
-
-   assign ic_dma_active = iccm_correct_ecc | (perr_state == DMA_SB_ERR) | (err_stop_state == ERR_STOP_FETCH) | err_stop_fetch |
-                          dec_tlu_flush_err_wb; // The last term is to give a error-correction a chance to finish before refetch starts
-
-   assign scnd_miss_req_in     = ifu_bus_rsp_valid & bus_ifu_bus_clk_en & ifu_bus_rsp_ready &
-                                 (&bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]) &
-                                 ~uncacheable_miss_ff &  ((miss_state == SCND_MISS) | (miss_nxtstate == SCND_MISS)) & ~exu_flush_final;
-
-   assign ifu_bp_hit_taken_q_f = ifu_bp_hit_taken_f & ic_hit_f ;
-
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //                                   Create Miss State Machine                      //
-   //////////////////////////////////// Create Miss State Machine ///////////////////////
-   // FIFO state machine
-   always_comb begin : MISS_SM
-      miss_nxtstate   = IDLE;
-      miss_state_en   = 1'b0;
-      case (miss_state)
-         IDLE: begin : idle
-                  miss_nxtstate = (ic_act_miss_f & ~exu_flush_final) ? CRIT_BYP_OK : HIT_U_MISS ;
-                  miss_state_en = ic_act_miss_f & ~dec_tlu_force_halt ;
-         end
-         CRIT_BYP_OK: begin : crit_byp_ok
-                  miss_nxtstate =  (dec_tlu_force_halt ) ?                                                                             IDLE :
-                                  ( ic_byp_hit_f &  (last_data_recieved_ff | (bus_ifu_wr_en_ff & last_beat)) &  uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f &  ~last_data_recieved_ff                                &  uncacheable_miss_ff) ? MISS_WAIT :
-                                  (~ic_byp_hit_f &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       &  uncacheable_miss_ff) ? CRIT_WRD_RDY :
-                                  (                                      (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( ic_byp_hit_f  &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  ( bus_ifu_wr_en_ff &  ~exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)       & ~ifu_bp_hit_taken_q_f   & ~uncacheable_miss_ff) ? STREAM :
-                                  (~ic_byp_hit_f  &  ~exu_flush_final &  (bus_ifu_wr_en_ff & last_beat)       & ~uncacheable_miss_ff) ? IDLE :
-                                  ( (exu_flush_final | ifu_bp_hit_taken_q_f)  & ~(bus_ifu_wr_en_ff & last_beat)                      ) ? HIT_U_MISS : IDLE;
-                  miss_state_en =  dec_tlu_force_halt | exu_flush_final | ic_byp_hit_f | ifu_bp_hit_taken_q_f | (bus_ifu_wr_en_ff & last_beat) | (bus_ifu_wr_en_ff & ~uncacheable_miss_ff)  ;
-         end
-         CRIT_WRD_RDY: begin : crit_wrd_rdy
-                  miss_nxtstate =  IDLE ;
-                  miss_state_en =  exu_flush_final | flush_final_f | ic_byp_hit_f | dec_tlu_force_halt  ;
-         end
-         STREAM: begin : stream
-                  miss_nxtstate =  ((exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ) & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =    exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f   |  (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         MISS_WAIT: begin : miss_wait
-                  miss_nxtstate =  (exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt) ? HIT_U_MISS  : IDLE ;
-                  miss_state_en =   exu_flush_final | (bus_ifu_wr_en_ff & last_beat) | dec_tlu_force_halt ;
-         end
-         HIT_U_MISS: begin : hit_u_miss
-                  miss_nxtstate =  ic_miss_under_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? SCND_MISS :
-                                   ic_ignore_2nd_miss_f & ~(bus_ifu_wr_en_ff & last_beat) & ~dec_tlu_force_halt ? STALL_SCND_MISS : IDLE  ;
-                  miss_state_en = (bus_ifu_wr_en_ff & last_beat) | ic_miss_under_miss_f | ic_ignore_2nd_miss_f | dec_tlu_force_halt;
-         end
-         SCND_MISS: begin : scnd_miss
-                  miss_nxtstate   = dec_tlu_force_halt ? IDLE  :
-                                    exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : CRIT_BYP_OK;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         STALL_SCND_MISS: begin : stall_scnd_miss
-                  miss_nxtstate   =  dec_tlu_force_halt ? IDLE  :
-                                     exu_flush_final ?  ((bus_ifu_wr_en_ff & last_beat) ? IDLE : HIT_U_MISS) : IDLE;
-                  miss_state_en   = (bus_ifu_wr_en_ff & last_beat) | exu_flush_final | dec_tlu_force_halt;
-         end
-         default: begin : def_case
-                  miss_nxtstate   = IDLE;
-                  miss_state_en   = 1'b0;
-         end
-      endcase
-   end
-   rvdffs #(($bits(miss_state_t))) miss_state_ff (.clk(active_clk), .din(miss_nxtstate), .dout({miss_state}), .en(miss_state_en),   .*);
-
-  logic    sel_hold_imb     ;
-
-   assign miss_pending       =  (miss_state != IDLE) ;
-   assign crit_wd_byp_ok_ff  =  (miss_state == CRIT_BYP_OK) | ((miss_state == CRIT_WRD_RDY) & ~flush_final_f);
-   assign sel_hold_imb       =  (miss_pending & ~(bus_ifu_wr_en_ff & last_beat) & ~((miss_state == CRIT_WRD_RDY) & exu_flush_final) &
-                              ~((miss_state == CRIT_WRD_RDY) & crit_byp_hit_f) ) | ic_act_miss_f |
-                                (miss_pending & (miss_nxtstate == CRIT_WRD_RDY)) ;
-
-
-   logic         sel_hold_imb_scnd;
-   logic  [31:1] imb_scnd_in;
-   logic  [31:1] imb_scnd_ff;
-   logic         uncacheable_miss_scnd_in ;
-   logic         uncacheable_miss_scnd_ff ;
-
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_in;
-   logic  [pt.ICACHE_NUM_WAYS-1:0] tagv_mb_scnd_ff;
-
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_in;
-   logic  [pt.ICACHE_STATUS_BITS-1:0] way_status_mb_scnd_ff;
-
-   assign sel_hold_imb_scnd                                =((miss_state == SCND_MISS) | ic_miss_under_miss_f) & ~flush_final_f ;
-   assign way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0] = (miss_state == SCND_MISS) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] : {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]          = (miss_state == SCND_MISS) ? tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]          : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}});
-   assign uncacheable_miss_scnd_in   = sel_hold_imb_scnd ? uncacheable_miss_scnd_ff : ifc_fetch_uncacheable_bf ;
-
-
-   rvdff_fpga #(1)  unc_miss_scnd_ff    (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din (uncacheable_miss_scnd_in), .dout(uncacheable_miss_scnd_ff));
-   rvdffpcie #(31) imb_f_scnd_ff       (.*, .en(fetch_bf_f_c1_clken),  .din ({imb_scnd_in[31:1]}), .dout({imb_scnd_ff[31:1]}));
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_scnd_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({way_status_mb_scnd_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_scnd_ff      (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk), .din ({tagv_mb_scnd_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-
-
-
-   assign ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] = bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] ;
-   assign ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3]  = ifu_bus_rid_ff[pt.ICACHE_BEAT_BITS-1:0] & {pt.ICACHE_BEAT_BITS{bus_ifu_wr_en_ff}};
-   // NOTE: Cacheline size is 16 bytes in this example.
-   // Tag     Index  Bank Offset
-   // [31:16] [15:5] [4]  [3:0]
-
-
-   assign fetch_req_icache_f   = ifc_fetch_req_f & ~ifc_iccm_access_f & ~ifc_region_acc_fault_final_f;
-   assign fetch_req_iccm_f     = ifc_fetch_req_f &  ifc_iccm_access_f;
-
-   assign ic_iccm_hit_f        = fetch_req_iccm_f  &  (~miss_pending | (miss_state==HIT_U_MISS) | (miss_state==STREAM));
-   assign ic_byp_hit_f         = (crit_byp_hit_f | stream_hit_f)  & fetch_req_icache_f &  miss_pending ;
-   assign ic_act_hit_f         = (|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) & fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff;
-   assign ic_act_miss_f        = (((~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & ~miss_pending) | scnd_miss_req) & ~ifc_region_acc_fault_final_f;
-   assign ic_miss_under_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   (imb_ff[31:pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO]) & ~uncacheable_miss_ff & ~sel_mb_addr_ff & ~ifc_region_acc_fault_final_f;
-   assign ic_ignore_2nd_miss_f = (~(|ic_rd_hit[pt.ICACHE_NUM_WAYS-1:0]) | reset_all_tags) & fetch_req_icache_f & (miss_state == HIT_U_MISS) &
-                                   ((imb_ff[31:pt.ICACHE_TAG_INDEX_LO] == ifu_fetch_addr_int_f[31:pt.ICACHE_TAG_INDEX_LO])  |   uncacheable_miss_ff) ;
-   assign ic_hit_f             =  ic_act_hit_f | ic_byp_hit_f | ic_iccm_hit_f | (ifc_region_acc_fault_final_f & ifc_fetch_req_f);
-
-   assign uncacheable_miss_in   = scnd_miss_req ? uncacheable_miss_scnd_ff : sel_hold_imb ? uncacheable_miss_ff : ifc_fetch_uncacheable_bf ;
-   assign imb_in[31:1]          = scnd_miss_req ? imb_scnd_ff[31:1]        : sel_hold_imb ? imb_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign imb_scnd_in[31:1]     = sel_hold_imb_scnd ? imb_scnd_ff[31:1] : {ifc_fetch_addr_bf[31:1]} ;
-
-   assign scnd_miss_index_match  =  (imb_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == imb_scnd_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]) & scnd_miss_req & ~ifu_wr_cumulative_err_data;
-   assign way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0] = (scnd_miss_req & ~scnd_miss_index_match) ? way_status_mb_scnd_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                        (scnd_miss_req &  scnd_miss_index_match) ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                         miss_pending                            ? way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0] :
-                                                                                                  {way_status[pt.ICACHE_STATUS_BITS-1:0]} ;
-   assign tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]          = scnd_miss_req ? (tagv_mb_scnd_ff[pt.ICACHE_NUM_WAYS-1:0] | ({pt.ICACHE_NUM_WAYS {scnd_miss_index_match}} & replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0])) :
-                                                         miss_pending ? tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]  : ({ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0]} & {pt.ICACHE_NUM_WAYS{~reset_all_tags & ~exu_flush_final}}) ;
-
-   assign reset_ic_in           = miss_pending & ~scnd_miss_req_q &  (reset_all_tags |  reset_ic_ff) ;
-
-
-
-   rvdffpcie #(31) ifu_fetch_addr_f_ff (.*, .en(fetch_bf_f_c1_clken), .din ({ifc_fetch_addr_bf[31:1]}), .dout({ifu_fetch_addr_int_f[31:1]}));
-
-   assign vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] = ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1] ;
-
-   rvdffpcie #(31) imb_f_ff        (.*, .en(fetch_bf_f_c1_clken), .din (imb_in[31:1]), .dout(imb_ff[31:1]));
-   rvdff_fpga #(1) unc_miss_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ( uncacheable_miss_in),               .dout( uncacheable_miss_ff));
-
-
-   assign miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]      = (~miss_pending                    ) ? imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] : miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] ;
-
-
-   rvdfflie #(.WIDTH(31-pt.ICACHE_BEAT_ADDR_HI),.LEFT(31-pt.ICACHE_BEAT_ADDR_HI-8)) miss_f_ff       (.*, .en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .din ({miss_addr_in[31:pt.ICACHE_BEAT_ADDR_HI+1]}), .dout({miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1]}));
-
-
-
-
-
-   rvdff_fpga #(pt.ICACHE_STATUS_BITS)  mb_rep_wayf2_ff (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({way_status_mb_in[pt.ICACHE_STATUS_BITS-1:0]}), .dout({way_status_mb_ff[pt.ICACHE_STATUS_BITS-1:0]}));
-   rvdff_fpga #(pt.ICACHE_NUM_WAYS)     mb_tagv_ff      (.*, .clk(fetch_bf_f_c1_clk),  .clken(fetch_bf_f_c1_clken), .rawclk(clk),  .din ({tagv_mb_in[pt.ICACHE_NUM_WAYS-1:0]}), .dout({tagv_mb_ff[pt.ICACHE_NUM_WAYS-1:0]}));
-
-   assign ifc_fetch_req_qual_bf  = ifc_fetch_req_bf  & ~((miss_state == CRIT_WRD_RDY) & flush_final_f) & ~stream_miss_f ;// & ~exu_flush_final ;
-
-   assign ifc_fetch_req_f       = ifc_fetch_req_f_raw & ~exu_flush_final ;
-
-   rvdff_fpga #(1) ifu_iccm_acc_ff     (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_iccm_access_bf),      .dout(ifc_iccm_access_f));
-   rvdff_fpga #(1) ifu_iccm_reg_acc_ff (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_final_bf), .dout(ifc_region_acc_fault_final_f));
-   rvdff_fpga #(1) rgn_acc_ff          (.*, .clk(fetch_bf_f_c1_clk), .clken(fetch_bf_f_c1_clken), .rawclk(clk),   .din(ifc_region_acc_fault_bf),       .dout(ifc_region_acc_fault_f));
-
-
-   assign ifu_ic_req_addr_f[31:3]  = {miss_addr[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_req_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] };
-   assign ifu_ic_mb_empty          = (((miss_state == HIT_U_MISS) | (miss_state == STREAM)) & ~(bus_ifu_wr_en_ff & last_beat)) |  ~miss_pending ;
-   assign ifu_miss_state_idle      = (miss_state == IDLE) ;
-
-
-   assign sel_mb_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff) | reset_tag_valid_for_miss) ;
-   assign ifu_ic_rw_int_addr[31:1] = ({31{ sel_mb_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_addr}}  &  ifc_fetch_addr_bf[31:1] )   ;
-
-   assign sel_mb_status_addr  = ((miss_pending & write_ic_16_bytes & ~uncacheable_miss_ff & last_beat & bus_ifu_wr_en_ff_q) | reset_tag_valid_for_miss) ;
-   assign ifu_status_wr_addr[31:1] = ({31{ sel_mb_status_addr}}  &  {imb_ff[31:pt.ICACHE_BEAT_ADDR_HI+1] , ic_wr_addr_bits_hi_3[pt.ICACHE_BEAT_ADDR_HI:3] , imb_ff[2:1]})  |
-                                     ({31{~sel_mb_status_addr}}  &  ifu_fetch_addr_int_f[31:1] )   ;
-
-
-  assign ic_rw_addr[31:1]      = ifu_ic_rw_int_addr[31:1] ;
-
-
-if (pt.ICACHE_ECC == 1) begin: icache_ecc_1
-   logic [6:0]       ic_wr_ecc;
-   logic [6:0]       ic_miss_buff_ecc;
-   logic [141:0]     ic_wr_16bytes_data ;
-   logic [70:0]      ifu_ic_debug_rd_data_in   ;
-
-                rvecc_encode_64  ic_ecc_encode_64_bus (
-                           .din    (ifu_bus_rdata_ff[63:0]),
-                           .ecc_out(ic_wr_ecc[6:0]));
-                rvecc_encode_64  ic_ecc_encode_64_buff (
-                           .din    (ic_miss_buff_half[63:0]),
-                           .ecc_out(ic_miss_buff_ecc[6:0]));
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  ic_wr_16bytes_data[((71*i)+70): (71*i)];
-   end
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_eccerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f)  | ic_rd_parity_final_err;
-
-
-
-  assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {2'b0,ictag_debug_rd_data[25:21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}}, way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                     ic_debug_rd_data[70:0];
-
-  rvdffe #(71) ifu_debug_data_ff (.*,
-                                  .en (debug_data_clken),
-                                  .din ({
-                                         ifu_ic_debug_rd_data_in[70:0]
-                                         }),
-                                  .dout({
-                                         ifu_ic_debug_rd_data[70:0]
-                                         })
-                                  );
-
-  assign ic_wr_16bytes_data[141:0] =  ifu_bus_rid_ff[0] ? {ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_ecc[6:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_ecc[6:0] ,  ic_miss_buff_half[63:0] , ic_wr_ecc[6:0] , ifu_bus_rdata_ff[63:0] } ;
-
-
-end
-else begin : icache_parity_1
-   logic [3:0]   ic_wr_parity;
-   logic [3:0]   ic_miss_buff_parity;
-   logic [135:0] ic_wr_16bytes_data ;
-   logic [70:0]  ifu_ic_debug_rd_data_in   ;
-    for (genvar i=0 ; i < 4 ; i++) begin : DATA_PGEN
-       rveven_paritygen #(16) par_bus  (.data_in   (ifu_bus_rdata_ff[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_wr_parity[i]));
-       rveven_paritygen #(16) par_buff  (.data_in   (ic_miss_buff_half[((16*i)+15):(16*i)]),
-                                      .parity_out(ic_miss_buff_parity[i]));
-    end
-
-
-   for (genvar i=0; i < pt.ICACHE_BANKS_WAY ; i++) begin : ic_wr_data_loop
-      assign ic_wr_data[i][70:0]  =  {3'b0, ic_wr_16bytes_data[((68*i)+67): (68*i)]};
-   end
-
-
-
-
-
-   assign ic_debug_wr_data[70:0]   = {dec_tlu_ic_diag_pkt.icache_wrdata[70:0]} ;
-   assign ic_error_start           = ((|ic_parerr[pt.ICACHE_BANKS_WAY-1:0]) & ic_act_hit_f) | ic_rd_parity_final_err;
-
-   assign ifu_ic_debug_rd_data_in[70:0] = ic_debug_ict_array_sel_ff ? {6'b0,ictag_debug_rd_data[21],32'b0,ictag_debug_rd_data[20:0],{7-pt.ICACHE_STATUS_BITS{1'b0}},way_status[pt.ICACHE_STATUS_BITS-1:0],3'b0,ic_debug_tag_val_rd_out} :
-                                                                      ic_debug_rd_data[70:0] ;
-
-   rvdffe #(71) ifu_debug_data_ff (.*,
-                                   .en (debug_data_clken),
-                                   .din ({
-                                          ifu_ic_debug_rd_data_in[70:0]
-                                          }),
-                                   .dout({
-                                          ifu_ic_debug_rd_data[70:0]
-                                          })
-                                   );
-
-   assign ic_wr_16bytes_data[135:0] =  ifu_bus_rid_ff[0] ? {ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] ,  ic_miss_buff_parity[3:0] , ic_miss_buff_half[63:0] } :
-                                                        {ic_miss_buff_parity[3:0] ,  ic_miss_buff_half[63:0] , ic_wr_parity[3:0] , ifu_bus_rdata_ff[63:0] } ;
-
-end
-
-
-  assign ifu_wr_data_comb_err       =  bus_ifu_wr_data_error_ff ;
-  assign ifu_wr_cumulative_err      = (ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff) & ~reset_beat_cnt;
-  assign ifu_wr_cumulative_err_data =  ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff ;
-
-
-  assign sel_byp_data     =  (ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK));
-  assign sel_ic_data      = ~(ic_crit_wd_rdy | (miss_state == STREAM) | (miss_state == CRIT_BYP_OK) | (miss_state == MISS_WAIT)) & ~fetch_req_iccm_f & ~ifc_region_acc_fault_final_f;
-
- if (pt.ICCM_ICACHE==1) begin: iccm_icache
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_iccm_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-
-  assign ic_sel_premux_data = sel_iccm_data | sel_byp_data ;
- end
-
-if (pt.ICCM_ONLY == 1 ) begin: iccm_only
-  assign sel_iccm_data    =  fetch_req_iccm_f  ;
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) |
-                          ({64{sel_iccm_data}} & {iccm_rd_data[63:0]});
-  assign ic_premux_data = '0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-if (pt.ICACHE_ONLY == 1 ) begin: icache_only
-  assign ic_final_data[63:0]  = ({64{sel_byp_data | sel_ic_data}} & {ic_rd_data[63:0]} ) ;
-  assign ic_premux_data[63:0] = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_sel_premux_data =  sel_byp_data ;
-end
-
-
-if (pt.NO_ICCM_NO_ICACHE == 1 ) begin: no_iccm_no_icache
-  assign ic_final_data[63:0]  = ({64{sel_byp_data }} & {ic_byp_data_only_new[63:0]} ) ;
-  assign ic_premux_data = 0 ;
-  assign ic_sel_premux_data = '0 ;
-end
-
-
-  assign ifc_bus_acc_fault_f[1:0]   =  {2{ic_byp_hit_f}} & ifu_byp_data_err_f[1:0] ;
-  assign ic_data_f[31:0]      = ic_final_data[31:0];
-
-
-
-assign fetch_req_f_qual       = ic_hit_f & ~exu_flush_final;
-assign ic_access_fault_f[1:0]  = ({2{ifc_region_acc_fault_final_f}} | ifc_bus_acc_fault_f[1:0])  & {2{~exu_flush_final}};
-assign ic_access_fault_type_f[1:0] = |iccm_rd_ecc_double_err       ? 2'b01 :
-                                     ifc_region_acc_fault_f        ? 2'b10 :
-                                     ifc_region_acc_fault_memory_f ? 2'b11 :  2'b00 ;
-
-  // right justified
-
-assign ic_fetch_val_f[1] = fetch_req_f_qual & ifu_bp_inst_mask_f & ~(vaddr_f[pt.ICACHE_BEAT_ADDR_HI:1] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}}) & (err_stop_state != ERR_FETCH2);
-assign ic_fetch_val_f[0] = fetch_req_f_qual ;
-assign two_byte_instr    =  (ic_data_f[1:0] != 2'b11 )  ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-//  Create full buffer...                                                          //
-/////////////////////////////////////////////////////////////////////////////////////
-     logic [63:0]       ic_miss_buff_data_in;
-     assign ic_miss_buff_data_in[63:0] = ifu_bus_rsp_rdata[63:0];
-
-     for (genvar i=0; i<pt.ICACHE_NUM_BEATS; i++) begin :  wr_flop
-
-        assign write_fill_data[i]        =   bus_ifu_wr_en & (  (pt.IFU_BUS_TAG)'(i)  == ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0]);
-
-        rvdffe #(32) byp_data_0_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[31:0]),
-                                    .dout(ic_miss_buff_data[i*2][31:0])
-                                    );
-
-        rvdffe #(32) byp_data_1_ff (.*,
-                                    .en (write_fill_data[i]),
-                                    .din (ic_miss_buff_data_in[63:32]),
-                                    .dout(ic_miss_buff_data[i*2+1][31:0])
-                                    );
-
-        assign ic_miss_buff_data_valid_in[i]  = write_fill_data[i] ? 1'b1  : (ic_miss_buff_data_valid[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_valid_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_valid_in[i]),
-                  .dout(ic_miss_buff_data_valid[i]));
-
-        assign ic_miss_buff_data_error_in[i]  = write_fill_data[i] ? bus_ifu_wr_data_error  : (ic_miss_buff_data_error[i]  & ~ic_act_miss_f) ;
-
-        rvdff #(1) byp_data_error_ff (.*,
-                  .clk (active_clk),
-                  .din (ic_miss_buff_data_error_in[i] ),
-                  .dout(ic_miss_buff_data_error[i]));
-     end
-
-/////////////////////////////////////////////////////////////////////////////////////
-// New bypass ready                                                                //
-/////////////////////////////////////////////////////////////////////////////////////
-   logic   [pt.ICACHE_BEAT_ADDR_HI:1]  bypass_index;
-   logic   [pt.ICACHE_BEAT_ADDR_HI:3]  bypass_index_5_3_inc;
-   logic   bypass_data_ready_in;
-   logic   ic_crit_wd_rdy_new_in;
-
-   assign bypass_index[pt.ICACHE_BEAT_ADDR_HI:1] = imb_ff[pt.ICACHE_BEAT_ADDR_HI:1] ;
-   assign bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3] = bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] + 1 ;
-
-
-   assign bypass_data_ready_in = ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      & ~bypass_index[2] &  bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                      &  bypass_index[2] & ~bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid_in[bypass_index_5_3_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  bypass_index[2] & bypass_index[1])) |
-                                 ((ic_miss_buff_data_valid_in[bypass_index[pt.ICACHE_BEAT_ADDR_HI:3]] & (bypass_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_ADDR_HI{1'b1}})))   ;
-
-
-
-   assign    ic_crit_wd_rdy_new_in = ( bypass_data_ready_in & crit_wd_byp_ok_ff   &  uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (                        crit_wd_byp_ok_ff   & ~uncacheable_miss_ff &  ~exu_flush_final & ~ifu_bp_hit_taken_q_f) |
-                                     (ic_crit_wd_rdy_new_ff & ~fetch_req_icache_f & crit_wd_byp_ok_ff    &  ~exu_flush_final) ;
-
-
-  assign byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:1]          =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:1]       ;
-  assign byp_fetch_index_0[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b0} ;
-  assign byp_fetch_index_1[pt.ICACHE_BEAT_ADDR_HI:2]        =   {ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3],1'b1} ;
-  assign byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]      =    ifu_fetch_addr_int_f[pt.ICACHE_BEAT_ADDR_HI:3]+1'b1 ;
-  assign byp_fetch_index_inc_0[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b0} ;
-  assign byp_fetch_index_inc_1[pt.ICACHE_BEAT_ADDR_HI:2]    =   {byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3], 1'b1} ;
-
-  assign  ifu_byp_data_err_new = (~ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 (~ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &  ~ifu_fetch_addr_int_f[1] &                                                                           ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  |
-                                 ( ifu_fetch_addr_int_f[2] &   ifu_fetch_addr_int_f[1] & (ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] | ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )) ;
-
-  assign  ifu_byp_data_err_f[1:0]  =   (ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] )  ? 2'b11 :
-                                      ( ifu_fetch_addr_int_f[2] &  ifu_fetch_addr_int_f[1] &   ~(ic_miss_buff_data_error[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] ) & (~miss_wrap_f & ic_miss_buff_data_error[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]])) ? 2'b10 : 2'b00;
-
-
-
-
-
-  assign ic_byp_data_only_pre_new[79:0] =  ({80{~ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_0][15:0],ic_miss_buff_data[byp_fetch_index_1][31:0]     , ic_miss_buff_data[byp_fetch_index_0][31:0]}) |
-                                           ({80{ ifu_fetch_addr_int_f[2]}} &   {ic_miss_buff_data[byp_fetch_index_inc_1][15:0],ic_miss_buff_data[byp_fetch_index_inc_0][31:0] , ic_miss_buff_data[byp_fetch_index_1][31:0]}) ;
-
-  assign ic_byp_data_only_new[79:0]      = ~ifu_fetch_addr_int_f[1] ? {ic_byp_data_only_pre_new[79:0]} :
-                                                                      {16'b0,ic_byp_data_only_pre_new[79:16]} ;
-
-  assign miss_wrap_f      =  (imb_ff[pt.ICACHE_TAG_INDEX_LO] != ifu_fetch_addr_int_f[pt.ICACHE_TAG_INDEX_LO] ) ;
-
-  assign miss_buff_hit_unq_f  = ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     & ~byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]]                                                     &  byp_fetch_index[2] & ~byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] & ic_miss_buff_data_valid[byp_fetch_index_inc[pt.ICACHE_BEAT_ADDR_HI:3]] &  byp_fetch_index[2] &  byp_fetch_index[1])) |
-                             ((ic_miss_buff_data_valid[byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3]] &  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:3] == {pt.ICACHE_BEAT_BITS{1'b1}})))   ;
-
-  assign stream_hit_f     =  (miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) ;
-  assign stream_miss_f    = ~(miss_buff_hit_unq_f & ~miss_wrap_f ) & (miss_state==STREAM) & ifc_fetch_req_f;
-  assign stream_eol_f     =  (byp_fetch_index[pt.ICACHE_BEAT_ADDR_HI:2] == {pt.ICACHE_BEAT_BITS+1{1'b1}}) & ifc_fetch_req_f & stream_hit_f;
-
-  assign crit_byp_hit_f   =  (miss_buff_hit_unq_f ) & ((miss_state == CRIT_WRD_RDY) | (miss_state==CRIT_BYP_OK)) ;
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Figure out if you have the data to write.                                       //
-/////////////////////////////////////////////////////////////////////////////////////
-
-assign other_tag[pt.IFU_BUS_TAG-1:0] = {ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:1] , ~ifu_bus_rid_ff[0] } ;
-assign second_half_available      = ic_miss_buff_data_valid[other_tag] ;
-assign write_ic_16_bytes          = second_half_available & bus_ifu_wr_en_ff ;
-assign ic_miss_buff_half[63:0]    = {ic_miss_buff_data[{other_tag,1'b1}],ic_miss_buff_data[{other_tag,1'b0}] } ;
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// Parity checking logic for Icache logic.                                         //
-/////////////////////////////////////////////////////////////////////////////////////
-
-
-assign ic_rd_parity_final_err = ic_tag_perr & ~exu_flush_final & sel_ic_data & ~(ifc_region_acc_fault_final_f | (|ifc_bus_acc_fault_f)) &
-                                      (fetch_req_icache_f & ~reset_all_tags & (~miss_pending | (miss_state==HIT_U_MISS)) & ~sel_mb_addr_ff);
-
-logic [pt.ICACHE_NUM_WAYS-1:0]                   perr_err_inv_way;
-logic [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]   perr_ic_index_ff;
-logic                                         perr_sel_invalidate;
-logic                                         perr_sb_write_status   ;
-
-
-
-   rvdffe #(.WIDTH(pt.ICACHE_INDEX_HI-pt.ICACHE_TAG_INDEX_LO+1),.OVERRIDE(1)) perr_dat_ff    (.din(ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO]), .dout(perr_ic_index_ff[pt.ICACHE_INDEX_HI : pt.ICACHE_TAG_INDEX_LO]), .en(perr_sb_write_status),  .*);
-
-   assign perr_err_inv_way[pt.ICACHE_NUM_WAYS-1:0]   =  {pt.ICACHE_NUM_WAYS{perr_sel_invalidate}} ;
-   assign iccm_correct_ecc     = (perr_state == ECC_CORR);
-   assign dma_sb_err_state     = (perr_state == DMA_SB_ERR);
-   assign iccm_buf_correct_ecc = iccm_correct_ecc & ~dma_sb_err_state_ff;
-
-
-
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //                                   Create Parity Error State Machine                      //
-   //////////////////////////////////// Create Parity Error State Machine ///////////////////////
-
-
-   // FIFO state machine
-   always_comb begin  : ERROR_SM
-      perr_nxtstate            = ERR_IDLE;
-      perr_state_en            = 1'b0;
-      perr_sb_write_status     = 1'b0;
-      perr_sel_invalidate      = 1'b0;
-
-      case (perr_state)
-         ERR_IDLE: begin : err_idle
-                  perr_nxtstate         =  iccm_dma_sb_error ? DMA_SB_ERR : (ic_error_start & ~exu_flush_final) ? IC_WFF : ECC_WFF;
-                  perr_state_en         =  (((iccm_error_start | ic_error_start) & ~exu_flush_final) | iccm_dma_sb_error) & ~dec_tlu_force_halt;
-                  perr_sb_write_status  =  perr_state_en;
-         end
-         IC_WFF: begin : icache_wff    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  perr_nxtstate       =  ERR_IDLE ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt ;
-                  perr_sel_invalidate =  (dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb);
-         end
-         ECC_WFF: begin : ecc_wff
-                  perr_nxtstate       =  ((~dec_tlu_flush_err_wb &  dec_tlu_flush_lower_wb ) | dec_tlu_force_halt) ? ERR_IDLE : ECC_CORR ;
-                  perr_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_force_halt  ;
-         end
-         DMA_SB_ERR : begin : dma_sb_ecc
-                 perr_nxtstate       = dec_tlu_force_halt ? ERR_IDLE : ECC_CORR;
-                 perr_state_en       = 1'b1;
-         end
-         ECC_CORR: begin : ecc_corr
-                  perr_nxtstate       =  ERR_IDLE  ;
-                  perr_state_en       =   1'b1   ;
-         end
-         default: begin : def_case
-                  perr_nxtstate            = ERR_IDLE;
-                  perr_state_en            = 1'b0;
-                  perr_sb_write_status     = 1'b0;
-                  perr_sel_invalidate      = 1'b0;
-         end
-      endcase
-   end
-
-   rvdffs #(($bits(perr_state_t))) perr_state_ff (.clk(active_clk), .din(perr_nxtstate), .dout({perr_state}), .en(perr_state_en),   .*);
-
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   //////////////////////////////////// Create stop fetch State Machine /////////////////////////
-   always_comb begin  : ERROR_STOP_FETCH
-      err_stop_nxtstate            = ERR_STOP_IDLE;
-      err_stop_state_en            = 1'b0;
-      err_stop_fetch               = 1'b0;
-      iccm_correction_state        = 1'b0;
-
-      case (err_stop_state)
-         ERR_STOP_IDLE: begin : err_stop_idle
-                  err_stop_nxtstate         =  ERR_FETCH1;
-                  err_stop_state_en         =  dec_tlu_flush_err_wb & (perr_state  == ECC_WFF) & ~dec_tlu_force_halt;
-         end
-         ERR_FETCH1: begin : err_fetch1    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))   ?  ERR_STOP_FETCH : ifu_fetch_val[0] ? ERR_FETCH2 :  ERR_FETCH1;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | ifu_bp_hit_taken_q_f | dec_tlu_force_halt;
-                  err_stop_fetch          =   ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr))  & ~(exu_flush_final | dec_tlu_i0_commit_cmt);
-                  iccm_correction_state   = 1'b1;
-
-        end
-         ERR_FETCH2: begin : err_fetch2    // All the I$ data and/or Tag errors ( parity/ECC ) will come to this state
-                  err_stop_nxtstate       =  (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : ifu_fetch_val[0] ?  ERR_STOP_FETCH : ERR_FETCH2;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt | ifu_fetch_val[0] | dec_tlu_force_halt ;
-                  err_stop_fetch          =   ifu_fetch_val[0] & ~exu_flush_final & ~dec_tlu_i0_commit_cmt ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         ERR_STOP_FETCH: begin : ecc_wff
-                  err_stop_nxtstate       =  ( (dec_tlu_flush_lower_wb & ~dec_tlu_flush_err_wb) | dec_tlu_i0_commit_cmt | dec_tlu_force_halt) ? ERR_STOP_IDLE : dec_tlu_flush_err_wb ? ERR_FETCH1 : ERR_STOP_FETCH ;
-                  err_stop_state_en       =   dec_tlu_flush_lower_wb |  dec_tlu_i0_commit_cmt | dec_tlu_force_halt   ;
-                  err_stop_fetch          =  1'b1;
-                  iccm_correction_state   = 1'b1;
-
-         end
-         default: begin : def_case
-                  err_stop_nxtstate            = ERR_STOP_IDLE;
-                  err_stop_state_en            = 1'b0;
-                  err_stop_fetch               = 1'b0 ;
-                  iccm_correction_state   = 1'b1;
-
-         end
-      endcase
-   end
-   rvdffs #(($bits(err_stop_state_t))) err_stop_state_ff (.clk(active_clk), .din(err_stop_nxtstate), .dout({err_stop_state}), .en(err_stop_state_en),   .*);
-
-
-
-   assign bus_ifu_bus_clk_en =  ifu_bus_clk_en ;
-
-   rvclkhdr bus_clk_f(.en(bus_ifu_bus_clk_en), .l1clk(busclk), .*);
-   rvclkhdr bus_clk(.en(bus_ifu_bus_clk_en | dec_tlu_force_halt), .l1clk(busclk_force), .*);
-
-
-
-
-   assign  scnd_miss_req = scnd_miss_req_q & ~exu_flush_final;
-
-   assign  ifc_bus_ic_req_ff_in  = (ic_act_miss_f | bus_cmd_req_hold | ifu_bus_cmd_valid) & ~dec_tlu_force_halt & ~((bus_cmd_beat_count== {pt.ICACHE_BEAT_BITS{1'b1}}) & ifu_bus_cmd_valid & ifu_bus_cmd_ready & miss_pending);
-
-   rvdff_fpga #(1) bus_ic_req_ff2(.*, .clk(busclk_force), .clken(bus_ifu_bus_clk_en | dec_tlu_force_halt), .rawclk(clk), .din(ifc_bus_ic_req_ff_in), .dout(ifu_bus_cmd_valid));
-
-   assign    bus_cmd_req_in  = (ic_act_miss_f | bus_cmd_req_hold) & ~bus_cmd_sent & ~dec_tlu_force_halt ; // hold until first command sent
-
-
-
-    // AXI command signals
-    //  Read Channel
-    assign ifu_axi_arvalid               =  ifu_bus_cmd_valid ;
-    assign ifu_axi_arid[pt.IFU_BUS_TAG-1:0] = ((pt.IFU_BUS_TAG)'(bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0])) & {pt.IFU_BUS_TAG{ifu_bus_cmd_valid}};
-    assign ifu_axi_araddr[31:0]          =   {ifu_ic_req_addr_f[31:3],3'b0}  & {32{ifu_bus_cmd_valid}};
-    assign ifu_axi_arsize[2:0]           =  3'b011;
-    assign ifu_axi_arprot[2:0]           = 3'b101;
-    assign ifu_axi_arcache[3:0]          = 4'b1111;
-    assign ifu_axi_arregion[3:0]         = ifu_ic_req_addr_f[31:28];
-    assign ifu_axi_arlen[7:0]            = '0;
-    assign ifu_axi_arburst[1:0]          = 2'b01;
-    assign ifu_axi_arqos[3:0]            = '0;
-    assign ifu_axi_arlock                = '0;
-    assign ifu_axi_rready                = 1'b1;
-
-    //  Write Channel
-    assign ifu_axi_awvalid                  = '0 ;
-    assign ifu_axi_awid[pt.IFU_BUS_TAG-1:0] = '0 ;
-    assign ifu_axi_awaddr[31:0]             = '0 ;
-    assign ifu_axi_awsize[2:0]              = '0 ;
-    assign ifu_axi_awprot[2:0]              = '0;
-    assign ifu_axi_awcache[3:0]             = '0 ;
-    assign ifu_axi_awregion[3:0]            = '0 ;
-    assign ifu_axi_awlen[7:0]               = '0;
-    assign ifu_axi_awburst[1:0]             = '0 ;
-    assign ifu_axi_awqos[3:0]               = '0;
-    assign ifu_axi_awlock                   = '0;
-
-    assign ifu_axi_wvalid                =  '0;
-    assign ifu_axi_wstrb[7:0]            =  '0;
-    assign ifu_axi_wdata[63:0]           =  '0;
-    assign ifu_axi_wlast                 =  '0;
-    assign ifu_axi_bready                =  '0;
-
-
-   assign ifu_bus_arready_unq     =  ifu_axi_arready ;
-   assign ifu_bus_rvalid_unq      =  ifu_axi_rvalid ;
-   assign ifu_bus_arvalid         =  ifu_axi_arvalid ;
-
-   rvdff_fpga #(1)               bus_rdy_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arready_unq),            .dout(ifu_bus_arready_unq_ff));
-   rvdff_fpga #(1)               bus_rsp_vld_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_rvalid_unq),             .dout(ifu_bus_rvalid_unq_ff));
-   rvdff_fpga #(1)               bus_cmd_ff      (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_bus_arvalid),                .dout(ifu_bus_arvalid_ff));
-   rvdff_fpga #(2)               bus_rsp_cmd_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rresp[1:0]),             .dout(ifu_bus_rresp_ff[1:0]));
-   rvdff_fpga #(pt.IFU_BUS_TAG)  bus_rsp_tag_ff  (.*, .clk(busclk),  .clken(bus_ifu_bus_clk_en), .rawclk(clk), .din(ifu_axi_rid[pt.IFU_BUS_TAG-1:0]),.dout(ifu_bus_rid_ff[pt.IFU_BUS_TAG-1:0]));
-   rvdffe #(64)                  bus_data_ff     (.*, .clk(clk),     .din(ifu_axi_rdata[63:0]),            .dout(ifu_bus_rdata_ff[63:0]), .en(ifu_bus_clk_en & ifu_axi_rvalid));
-
-   assign ifu_bus_cmd_ready = ifu_axi_arready ;
-   assign ifu_bus_rsp_valid = ifu_axi_rvalid ;
-   assign ifu_bus_rsp_ready = ifu_axi_rready ;
-   assign ifu_bus_rsp_tag[pt.IFU_BUS_TAG-1:0] = ifu_axi_rid[pt.IFU_BUS_TAG-1:0] ;
-   assign ifu_bus_rsp_rdata[63:0] = ifu_axi_rdata[63:0] ;
-   assign ifu_bus_rsp_opc[1:0] = {ifu_axi_rresp[1:0]} ;
-
-
-
-
-
-
-
-
-
-   // Create write signals so we can write to the miss-buffer directly from the bus.
-
-   assign ifu_bus_rvalid            =  ifu_bus_rsp_valid & bus_ifu_bus_clk_en ;
-
-
-
-   assign ifu_bus_arready            =  ifu_bus_arready_unq    & bus_ifu_bus_clk_en    ;
-   assign ifu_bus_arready_ff         =  ifu_bus_arready_unq_ff & bus_ifu_bus_clk_en_ff ;
-
-   assign ifu_bus_rvalid_ff          =  ifu_bus_rvalid_unq_ff & bus_ifu_bus_clk_en_ff ;
-   assign bus_cmd_sent               =  ifu_bus_arvalid & ifu_bus_arready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_inc_data_beat_cnt      = (bus_ifu_wr_en_ff & ~bus_last_data_beat & ~dec_tlu_force_halt) ;
-   assign bus_reset_data_beat_cnt    =  ic_act_miss_f | (bus_ifu_wr_en_ff &  bus_last_data_beat) | dec_tlu_force_halt;
-   assign bus_hold_data_beat_cnt     = ~bus_inc_data_beat_cnt & ~bus_reset_data_beat_cnt ;
-
-   assign bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] = ({pt.ICACHE_BEAT_BITS{bus_reset_data_beat_cnt}} & (pt.ICACHE_BEAT_BITS)'(0)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_data_beat_cnt}}   & (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_data_beat_cnt}}  &  bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-
-   assign last_data_recieved_in =  (bus_ifu_wr_en_ff &  bus_last_data_beat & ~scnd_miss_req) | (last_data_recieved_ff & ~ic_act_miss_f) ;
-
-
-
-// Request Address Count
-   assign bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] = (~miss_pending                    ) ? imb_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           (                scnd_miss_req_q  ) ? imb_scnd_ff[pt.ICACHE_BEAT_ADDR_HI:3] :
-                                                           ( bus_cmd_sent                    ) ? (bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0] + 3'b001) :
-                                                                                                  bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0];
-
-   rvdff_fpga #(pt.ICACHE_BEAT_BITS)  bus_rd_addr_ff (.*,  .clk(busclk_reset),  .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .din ({bus_new_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}), .dout({bus_rd_addr_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-
-// command beat Count
-   assign bus_inc_cmd_beat_cnt              =  ifu_bus_cmd_valid    &  ifu_bus_cmd_ready & miss_pending & ~dec_tlu_force_halt;
-   assign bus_reset_cmd_beat_cnt_0          =  (ic_act_miss_f        & ~uncacheable_miss_in) | dec_tlu_force_halt ;
-   assign bus_reset_cmd_beat_cnt_secondlast =  ic_act_miss_f        &  uncacheable_miss_in ;
-   assign bus_hold_cmd_beat_cnt             = ~bus_inc_cmd_beat_cnt & ~(ic_act_miss_f | scnd_miss_req | dec_tlu_force_halt) ;
-   assign bus_cmd_beat_en                   =  bus_inc_cmd_beat_cnt | ic_act_miss_f | dec_tlu_force_halt;
-
-   assign bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] =  ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_0}}       & (pt.ICACHE_BEAT_BITS)'(0) ) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_reset_cmd_beat_cnt_secondlast}} & (pt.ICACHE_BEAT_BITS)'(pt.ICACHE_SCND_LAST)) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_inc_cmd_beat_cnt}}              & (bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0] + {{pt.ICACHE_BEAT_BITS-1{1'b0}}, 1'b1})) |
-                                                          ({pt.ICACHE_BEAT_BITS{bus_hold_cmd_beat_cnt}}             &  bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]) ;
-
-
-   rvclkhdr bus_clk_reset(.en(bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .l1clk(busclk_reset), .*);
-
-
-
-
-   rvdffs_fpga #(pt.ICACHE_BEAT_BITS)  bus_cmd_beat_ff (.*, .clk(busclk_reset), .clken (bus_ifu_bus_clk_en | ic_act_miss_f | dec_tlu_force_halt), .rawclk(clk), .en (bus_cmd_beat_en), .din ({bus_new_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}),
-                    .dout({bus_cmd_beat_count[pt.ICACHE_BEAT_BITS-1:0]}));
-
-
-    assign bus_last_data_beat     =  uncacheable_miss_ff ? (bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0] == {{pt.ICACHE_BEAT_BITS-1{1'b0}},1'b1}) : (&bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0]);
-
-   assign  bus_ifu_wr_en            =  ifu_bus_rvalid     & miss_pending ;
-   assign  bus_ifu_wr_en_ff         =  ifu_bus_rvalid_ff  & miss_pending ;
-   assign  bus_ifu_wr_en_ff_q       =  ifu_bus_rvalid_ff  & miss_pending & ~uncacheable_miss_ff & ~(|ifu_bus_rresp_ff[1:0]) & write_ic_16_bytes; // qualify with no-error conditions ;
-   assign  bus_ifu_wr_en_ff_wo_err  =  ifu_bus_rvalid_ff & miss_pending &  ~uncacheable_miss_ff;
-
-
-   rvdffie #(10) misc_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {ic_act_miss_f,        ifu_wr_cumulative_err,exu_flush_final,  ic_crit_wd_rdy_new_in,bus_ifu_bus_clk_en,   scnd_miss_req_in,bus_cmd_req_in,  last_data_recieved_in,
-ifc_dma_access_ok_d,   dma_iccm_req}),
-         .dout({ic_act_miss_f_delayed,ifu_wr_data_comb_err_ff,  flush_final_f,ic_crit_wd_rdy_new_ff,bus_ifu_bus_clk_en_ff,scnd_miss_req_q, bus_cmd_req_hold,last_data_recieved_ff,
-ifc_dma_access_ok_prev,dma_iccm_req_f})
-         );
-
-   rvdffie #(.WIDTH(pt.ICACHE_BEAT_BITS+5),.OVERRIDE(1)) misc1_ff
-       ( .*,
-         .clk(free_l2clk),
-         .din( {reset_ic_in,sel_mb_addr,   bus_new_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],ifc_region_acc_fault_memory_bf,ic_debug_rd_en,       ic_debug_rd_en_ff}),
-         .dout({reset_ic_ff,sel_mb_addr_ff,bus_data_beat_count[pt.ICACHE_BEAT_BITS-1:0],    ifc_region_acc_fault_memory_f, ic_debug_rd_en_ff,ifu_ic_debug_rd_data_valid})
-         );
-
-   assign    reset_tag_valid_for_miss = ic_act_miss_f_delayed & (miss_state == CRIT_BYP_OK) & ~uncacheable_miss_ff;
-   assign    bus_ifu_wr_data_error    = |ifu_bus_rsp_opc[1:0] &  ifu_bus_rvalid  & miss_pending;
-   assign    bus_ifu_wr_data_error_ff = |ifu_bus_rresp_ff[1:0] &  ifu_bus_rvalid_ff  & miss_pending;
-
-
-   assign ic_crit_wd_rdy   =  ic_crit_wd_rdy_new_in | ic_crit_wd_rdy_new_ff ;
-   assign last_beat        =  bus_last_data_beat & bus_ifu_wr_en_ff;
-   assign reset_beat_cnt    = bus_reset_data_beat_cnt ;
-
-// DMA
-   // Making sure that the dma_access is allowed when we have 2 back to back dma_access_ok. Also gating with current state == idle
-   assign ifc_dma_access_ok_d  = ifc_dma_access_ok &  ~iccm_correct_ecc & ~iccm_dma_sb_error;
-   assign ifc_dma_access_q_ok  = ifc_dma_access_ok &  ~iccm_correct_ecc & ifc_dma_access_ok_prev &  (perr_state == ERR_IDLE)  & ~iccm_dma_sb_error;
-   assign iccm_ready           = ifc_dma_access_q_ok ;
-
-   logic [1:0]        iccm_ecc_word_enable;
-
-    if (pt.ICCM_ENABLE == 1 ) begin: iccm_enabled
-         logic  [3:2] dma_mem_addr_ff  ;
-         logic  iccm_dma_rden    ;
-
-         logic  iccm_dma_ecc_error_in;
-         logic  [13:0] dma_mem_ecc;
-         logic  [63:0] iccm_dma_rdata_in;
-         logic  [31:0] iccm_dma_rdata_1_muxed;
-         logic [1:0] [31:0] iccm_corrected_data;
-         logic [1:0] [06:0] iccm_corrected_ecc;
-
-
-         logic [1:0]        iccm_double_ecc_error;
-
-
-         logic [pt.ICCM_BITS-1:2]       iccm_rw_addr_f;
-
-         logic [31:0]       iccm_corrected_data_f_mux;
-         logic [06:0]       iccm_corrected_ecc_f_mux;
-         logic              iccm_dma_rvalid_in;
-         logic [77:0]       iccm_rdmux_data;
-         logic              iccm_rd_ecc_single_err_hold_in ;
-         logic [2:0]        dma_mem_tag_ff;
-
-
-
-
-         assign iccm_wren          =  (ifc_dma_access_q_ok & dma_iccm_req &  dma_mem_write) | iccm_correct_ecc;
-         assign iccm_rden          =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write) | (ifc_iccm_access_bf & ifc_fetch_req_bf);
-         assign iccm_dma_rden      =  (ifc_dma_access_q_ok & dma_iccm_req & ~dma_mem_write)                     ;
-         assign iccm_wr_size[2:0]  =  {3{dma_iccm_req}}    & dma_mem_sz[2:0] ;
-
-         rvecc_encode  iccm_ecc_encode0 (
-                           .din(dma_mem_wdata[31:0]),
-                           .ecc_out(dma_mem_ecc[6:0]));
-
-         rvecc_encode  iccm_ecc_encode1 (
-                           .din(dma_mem_wdata[63:32]),
-                           .ecc_out(dma_mem_ecc[13:7]));
-
-        assign iccm_wr_data[77:0]   =  (iccm_correct_ecc & ~(ifc_dma_access_q_ok & dma_iccm_req)) ?  {iccm_ecc_corr_data_ff[38:0], iccm_ecc_corr_data_ff[38:0]} :
-                                       {dma_mem_ecc[13:7],dma_mem_wdata[63:32], dma_mem_ecc[6:0],dma_mem_wdata[31:0]};
-
-         assign iccm_dma_rdata_1_muxed[31:0] = dma_mem_addr_ff[2] ?  iccm_corrected_data[0][31:0] : iccm_corrected_data[1][31:0] ;
-         assign iccm_dma_rdata_in[63:0]      = iccm_dma_ecc_error_in ? {2{dma_mem_addr[31:0]}} : {iccm_dma_rdata_1_muxed[31:0], iccm_corrected_data[0]};
-         assign iccm_dma_ecc_error_in   =   |(iccm_double_ecc_error[1:0]);
-
-         rvdffe    #(64) dma_data_ff      (.*, .clk(clk), .en(iccm_dma_rvalid_in),  .din(iccm_dma_rdata_in[63:0]), .dout(iccm_dma_rdata[63:0]));
-         rvdffie   #(11) dma_misc_bits    (.*, .clk(free_l2clk), .din({dma_mem_tag[2:0],
-                                                                       dma_mem_tag_ff[2:0],
-                                                                       dma_mem_addr[3:2],
-                                                                       iccm_dma_rden,
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_ecc_error_in }),
-                                                                .dout({dma_mem_tag_ff[2:0],
-                                                                       iccm_dma_rtag[2:0],
-                                                                       dma_mem_addr_ff[3:2],
-                                                                       iccm_dma_rvalid_in,
-                                                                       iccm_dma_rvalid,
-                                                                       iccm_dma_ecc_error }));
-
-         assign iccm_rw_addr[pt.ICCM_BITS-1:1]    = (  ifc_dma_access_q_ok & dma_iccm_req  & ~iccm_correct_ecc) ? dma_mem_addr[pt.ICCM_BITS-1:1] :
-                                                 (~(ifc_dma_access_q_ok & dma_iccm_req) &  iccm_correct_ecc) ? {iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2],1'b0} : ifc_fetch_addr_bf[pt.ICCM_BITS-1:1] ;
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////////////
-// ECC checking logic for ICCM data.                                               //
-/////////////////////////////////////////////////////////////////////////////////////
-
-  logic [3:0] ic_fetch_val_int_f;
-  logic [3:0] ic_fetch_val_shift_right;
-  assign ic_fetch_val_int_f[3:0] = {2'b00 , ic_fetch_val_f[1:0] } ;
-  assign ic_fetch_val_shift_right[3:0] = {ic_fetch_val_int_f << ifu_fetch_addr_int_f[1] } ;
-
-   assign iccm_rdmux_data[77:0] = iccm_rd_data_ecc[77:0];
-   for (genvar i=0; i < 2 ; i++) begin : ICCM_ECC_CHECK
-      assign iccm_ecc_word_enable[i] = ((|ic_fetch_val_shift_right[(2*i+1):(2*i)] & ~exu_flush_final & sel_iccm_data) | iccm_dma_rvalid_in) & ~dec_tlu_core_ecc_disable;
-   rvecc_decode  ecc_decode (
-                           .en(iccm_ecc_word_enable[i]),
-                           .sed_ded ( 1'b0 ),    // 1 : means only detection
-                           .din(iccm_rdmux_data[(39*i+31):(39*i)]),
-                           .ecc_in(iccm_rdmux_data[(39*i+38):(39*i+32)]),
-                           .dout(iccm_corrected_data[i][31:0]),
-                           .ecc_out(iccm_corrected_ecc[i][6:0]),
-                           .single_ecc_error(iccm_single_ecc_error[i]),
-                           .double_ecc_error(iccm_double_ecc_error[i]));
-end
-
-  assign iccm_rd_ecc_single_err  = (|iccm_single_ecc_error[1:0] ) & ifc_iccm_access_f & ifc_fetch_req_f;
-  assign iccm_rd_ecc_double_err[1:0]  = ~ifu_fetch_addr_int_f[1] ? ({iccm_double_ecc_error[0], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} :
-                                                                   ({iccm_double_ecc_error[1], iccm_double_ecc_error[0]} ) & {2{ifc_iccm_access_f}} ;
-
-  assign iccm_corrected_data_f_mux[31:0] = iccm_single_ecc_error[0] ? iccm_corrected_data[0] : iccm_corrected_data[1];
-  assign iccm_corrected_ecc_f_mux[6:0]   = iccm_single_ecc_error[0] ? iccm_corrected_ecc[0]  : iccm_corrected_ecc[1];
-
-  assign iccm_ecc_write_status           = ((iccm_rd_ecc_single_err & ~iccm_rd_ecc_single_err_ff)  & ~exu_flush_final) | iccm_dma_sb_error;
-  assign iccm_rd_ecc_single_err_hold_in  = (iccm_rd_ecc_single_err | iccm_rd_ecc_single_err_ff) & ~exu_flush_final ;
-  assign iccm_error_start                =  iccm_rd_ecc_single_err;
-  assign iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2] = iccm_single_ecc_error[0] ? iccm_rw_addr_f[pt.ICCM_BITS-1:2] : iccm_rw_addr_f[pt.ICCM_BITS-1:2] + 1'b1 ;
-
-   rvdffie #(pt.ICCM_BITS-1) iccm_index_f   (.*, .clk(free_l2clk), .din({iccm_rw_addr[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_hold_in
-                                                                                                       }),
-                                                                  .dout({iccm_rw_addr_f[pt.ICCM_BITS-1:2],
-                                                                         iccm_rd_ecc_single_err_ff}));
-
-   rvdffe #((39+(pt.ICCM_BITS-2)))      ecc_dat0_ff  (
-                                                      .clk(clk),
-                                                      .din({iccm_corrected_ecc_f_mux[6:0],  iccm_corrected_data_f_mux[31:0],iccm_ecc_corr_index_in[pt.ICCM_BITS-1:2]}),
-                                                      .dout({iccm_ecc_corr_data_ff[38:0]   ,iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]}),
-                                                      .en(iccm_ecc_write_status),
-                                                      .*
-                                                      );
-
-     end else begin : iccm_disabled
-         assign iccm_dma_rvalid = 1'b0 ;
-         assign iccm_dma_ecc_error = 1'b0 ;
-         assign iccm_dma_rdata[63:0] = '0 ;
-         assign iccm_single_ecc_error = '0 ;
-         assign iccm_dma_rtag         = '0 ;
-
-
-
-
-
-
-         assign iccm_rd_ecc_single_err                 = 1'b0 ;
-         assign iccm_rd_ecc_double_err                 = '0 ;
-         assign iccm_rd_ecc_single_err_ff              = 1'b0 ;
-         assign iccm_error_start                         = 1'b0;
-         assign iccm_ecc_corr_index_ff[pt.ICCM_BITS-1:2]  =  '0;
-         assign iccm_ecc_corr_data_ff[38:0]            =  '0;
-         assign iccm_ecc_write_status                  =  '0;
-
-
-
-
-
-
-    end
-
-
-////// ICCM signals
-
-
- assign   ic_rd_en    =  (ifc_fetch_req_bf & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf  &
-                            ~(((miss_state == STREAM) & ~miss_state_en)                                       |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en)                                  |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)                              |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en)                                    |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT))  ))  |
-                             ( ifc_fetch_req_bf & exu_flush_final  & ~ifc_fetch_uncacheable_bf & ~ifc_iccm_access_bf )     ;
-
-logic   ic_real_rd_wp_unused;
-assign  ic_real_rd_wp_unused  =  (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & ~ic_act_miss_f &
-                            ~(((miss_state == STREAM) & ~miss_state_en) |
-                              ((miss_state == CRIT_BYP_OK) & ~miss_state_en & ~(miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == CRIT_BYP_OK) &  miss_state_en &  (miss_nxtstate == MISS_WAIT)) |
-                              ((miss_state == MISS_WAIT) & ~miss_state_en) |
-                              ((miss_state == STALL_SCND_MISS) & ~miss_state_en)  |
-                              ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)  |
-                              ((miss_nxtstate == STREAM) &  miss_state_en)  |
-                              ((miss_state == SCND_MISS) & ~miss_state_en))) |
-                          (ifc_fetch_req_bf &  ~ifc_iccm_access_bf  &  ~ifc_region_acc_fault_final_bf & ~dec_tlu_fence_i_wb & ~stream_miss_f & exu_flush_final)  ;
-
-
-assign ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] & {pt.ICACHE_NUM_WAYS{write_ic_16_bytes}};
-assign ic_write_stall                =  write_ic_16_bytes &  ~((((miss_state== CRIT_BYP_OK) | ((miss_state==STREAM) & ~(exu_flush_final | ifu_bp_hit_taken_q_f  | stream_eol_f ))) & ~(bus_ifu_wr_en_ff & last_beat & ~uncacheable_miss_ff)));
-
-
-
-
-///////////////////////////////////////////////////////////////
-// Icache status and LRU
-///////////////////////////////////////////////////////////////
-logic [pt.ICACHE_NUM_WAYS-1:0] ic_tag_valid_unq;
-if (pt.ICACHE_ENABLE == 1 ) begin: icache_enabled
-   assign  ic_valid  = ~ifu_wr_cumulative_err_data & ~(reset_ic_in | reset_ic_ff) & ~reset_tag_valid_for_miss;
-
-   assign ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                           ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                           ifu_status_wr_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-
-   // status
-
-         assign way_status_wr_en_w_debug = way_status_wr_en | (ic_debug_wr_en  & ic_debug_tag_array);
-
-         assign way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]  = (ic_debug_wr_en  & ic_debug_tag_array) ? (pt.ICACHE_STATUS_BITS == 1) ? ic_debug_wr_data[4] : ic_debug_wr_data[6:4] :
-                                                way_status_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-   rvdffie #(.WIDTH(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+1+pt.ICACHE_STATUS_BITS),.OVERRIDE(1))  status_misc_ff
-     (.*,
-      .clk(free_l2clk),
-      .din({ ifu_status_wr_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO], way_status_wr_en_w_debug, way_status_new_w_debug[pt.ICACHE_STATUS_BITS-1:0]}),
-      .dout({ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],      way_status_wr_en_ff,      way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]} )
-      );
-
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clken;
-   logic [(pt.ICACHE_TAG_DEPTH/8)-1 : 0] way_status_clk;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/8 ; i++) begin : CLK_GRP_WAY_STATUS
-      assign way_status_clken[i] = (ifu_status_wr_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+3] == i );
-
-           rvclkhdr way_status_cgc ( .en(way_status_clken[i]),   .l1clk(way_status_clk[i]), .* );
-
-
-
-      for (genvar j=0 ; j<8 ; j++) begin : WAY_STATUS
-         rvdffs_fpga #(pt.ICACHE_STATUS_BITS) ic_way_status (.*,
-                   .clk(way_status_clk[i]),
-                   .clken(way_status_clken[i]),
-                   .rawclk(clk),
-                   .en(((ifu_status_wr_addr_ff[pt.ICACHE_TAG_INDEX_LO+2:pt.ICACHE_TAG_INDEX_LO] == j) & way_status_wr_en_ff)),
-                   .din(way_status_new_ff[pt.ICACHE_STATUS_BITS-1:0]),
-                   .dout(way_status_out[8*i+j]));
-      end  // WAY_STATUS
-   end  // CLK_GRP_WAY_STATUS
-
-  always_comb begin : way_status_out_mux
-      way_status[pt.ICACHE_STATUS_BITS-1:0] = '0 ;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : status_mux_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : mux_out
-         way_status[pt.ICACHE_STATUS_BITS-1:0] =  way_status_out[j];
-        end
-      end
-  end
-
-         assign ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] = ((ic_debug_rd_en | ic_debug_wr_en ) & ic_debug_tag_array) ?
-                                                                        ic_debug_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] :
-                                                                        ifu_ic_rw_int_addr[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO];
-         assign ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0] = ifu_tag_wren[pt.ICACHE_NUM_WAYS-1:0] | ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] ;
-
-         assign ic_valid_w_debug = (ic_debug_wr_en & ic_debug_tag_array) ? ic_debug_wr_data[0] : ic_valid;
-
-         rvdffie #(pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO+pt.ICACHE_NUM_WAYS+1) tag_addr_ff (.*,
-                                                                                              .clk(free_l2clk),
-                                                                                              .din({ifu_ic_rw_int_addr_w_debug[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                    ifu_tag_wren_w_debug[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                    ic_valid_w_debug}),
-                                                                                              .dout({ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO],
-                                                                                                     ifu_tag_wren_ff[pt.ICACHE_NUM_WAYS-1:0],
-                                                                                                     ic_valid_ff})
-                                                                                              );
-
-
-   logic [pt.ICACHE_NUM_WAYS-1:0] [pt.ICACHE_TAG_DEPTH-1:0] ic_tag_valid_out ;
-
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clken ;
-   logic [(pt.ICACHE_TAG_DEPTH/32)-1:0] [pt.ICACHE_NUM_WAYS-1:0] tag_valid_clk   ;
-
-   for (genvar i=0 ; i<pt.ICACHE_TAG_DEPTH/32 ; i++) begin : CLK_GRP_TAG_VALID
-      for (genvar j=0; j<pt.ICACHE_NUM_WAYS; j++) begin : way_clken
-      if (pt.ICACHE_TAG_DEPTH == 32 ) begin
-        assign tag_valid_clken[i][j] =  ifu_tag_wren_ff[j] | perr_err_inv_way[j] | reset_all_tags;
-      end else begin
-         assign tag_valid_clken[i][j] = (((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  ifu_tag_wren_ff[j] ) |
-                                        ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO+5] == i ) &  perr_err_inv_way[j]) | reset_all_tags);
-      end
-
-
-           rvclkhdr way_status_cgc ( .en(tag_valid_clken[i][j]),   .l1clk(tag_valid_clk[i][j]), .* );
-
-
-
-
-      for (genvar k=0 ; k<32 ; k++) begin : TAG_VALID
-         rvdffs_fpga #(1) ic_way_tagvalid_dup (.*,
-                   .clk(tag_valid_clk[i][j]),
-                   .clken(tag_valid_clken[i][j]),
-                   .rawclk(clk),
-                   .en(((ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & ifu_tag_wren_ff[j] ) |
-                       ((perr_ic_index_ff     [pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (k + 32*i)) & perr_err_inv_way[j]) | reset_all_tags),
-                   .din(ic_valid_ff & ~reset_all_tags & ~perr_sel_invalidate),
-                   .dout(ic_tag_valid_out[j][32*i+k]));
-      end
-      end
-   end
-
-
-  always_comb begin : tag_valid_out_mux
-      ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] = '0;
-      for (int j=0; j< pt.ICACHE_TAG_DEPTH; j++) begin : tag_valid_loop
-        if (ifu_ic_rw_int_addr_ff[pt.ICACHE_INDEX_HI:pt.ICACHE_TAG_INDEX_LO] == (pt.ICACHE_TAG_LO-pt.ICACHE_TAG_INDEX_LO)'(j)) begin : valid_out
-           for ( int k=0; k<pt.ICACHE_NUM_WAYS; k++) begin
-             ic_tag_valid_unq[k] |= ic_tag_valid_out[k][j];
-        end
-      end
-      end
-  end
-   //   four-way set associative - three bits
-//   each bit represents one branch point in a binary decision tree; let 1
-//   represent that the left side has been referenced more recently than the
-//   right side, and 0 vice-versa
-//
-//              are all 4 ways valid?
-//                   /       \
-//                  |        no, use an invalid way.
-//                  |
-//                  |
-//             bit_0 == 0?             state | replace      ref to | next state
-//               /       \             ------+--------      -------+-----------
-//              y         n             x00  |  way_0      way_0 |    _11
-//             /           \            x10  |  way_1      way_1 |    _01
-//      bit_1 == 0?    bit_2 == 0?      0x1  |  way_2      way_2 |    1_0
-//        /    \          /    \        1x1  |  way_3      way_3 |    0_0
-//       y      n        y      n
-//      /        \      /        \        ('x' means don't care       ('_' means unchanged)
-//    way_0    way_1  way_2     way_3      don't care)
-
-   if (pt.ICACHE_NUM_WAYS == 4) begin: four_way_plru
-   assign replace_way_mb_any[3] = ( way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[3]& tagv_mb_ff[2] &  tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[2] = (~way_status_mb_ff[2]  & way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[2]& tagv_mb_ff[1] &  tagv_mb_ff[0]) ;
-   assign replace_way_mb_any[1] = ( way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[1]& tagv_mb_ff[0] ) ;
-   assign replace_way_mb_any[0] = (~way_status_mb_ff[1] & ~way_status_mb_ff[0] & (&tagv_mb_ff[3:0])) |
-                                  (~tagv_mb_ff[0] ) ;
-
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{~exu_flush_final & ic_rd_hit[0]}} & {way_status[2] , 1'b1 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[1]}} & {way_status[2] , 1'b0 , 1'b1}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[2]}} & {1'b1 ,way_status[1]  , 1'b0}) |
-                                                          ({3{~exu_flush_final & ic_rd_hit[3]}} & {1'b0 ,way_status[1]  , 1'b0}) ;
-
-  assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = ({3{replace_way_mb_any[0]}} & {way_status_mb_ff[2] , 1'b1 , 1'b1}) |
-                                   ({3{replace_way_mb_any[1]}} & {way_status_mb_ff[2] , 1'b0 , 1'b1}) |
-                                   ({3{replace_way_mb_any[2]}} & {1'b1 ,way_status_mb_ff[1]  , 1'b0}) |
-                                   ({3{replace_way_mb_any[3]}} & {1'b0 ,way_status_mb_ff[1]  , 1'b0}) ;
-  end
-   else begin : two_ways_plru
-      assign replace_way_mb_any[0]                      = (~way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[0];
-      assign replace_way_mb_any[1]                      = ( way_status_mb_ff  & tagv_mb_ff[0] & tagv_mb_ff[1]) | ~tagv_mb_ff[1] & tagv_mb_ff[0];
-      assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = ic_rd_hit[0];
-      assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = replace_way_mb_any[0];
-
-   end
-  // Make sure to select the way_status_hit_new even when in hit_under_miss.
-  assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = (bus_ifu_wr_en_ff_q  & last_beat )  ? way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] :
-                                                          way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] ;
-
-
-  assign way_status_wr_en  = (bus_ifu_wr_en_ff_q  & last_beat) | ic_act_hit_f;
-
-   for (genvar i=0; i<pt.ICACHE_NUM_WAYS; i++) begin  : bus_wren_loop
-      assign bus_wren[i]           = bus_ifu_wr_en_ff_q & replace_way_mb_any[i] & miss_pending ;
-      assign bus_wren_last[i]      = bus_ifu_wr_en_ff_wo_err & replace_way_mb_any[i] & miss_pending & bus_last_data_beat;
-      assign ifu_tag_wren[i]       = bus_wren_last[i] | wren_reset_miss[i];
-      assign wren_reset_miss[i]    = replace_way_mb_any[i] & reset_tag_valid_for_miss ;
-
-   end
-   assign bus_ic_wr_en[pt.ICACHE_NUM_WAYS-1:0] = bus_wren[pt.ICACHE_NUM_WAYS-1:0];
-
-
-end else begin: icache_disabled
-   assign ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]      = '0;
-   assign way_status[pt.ICACHE_STATUS_BITS-1:0]         = '0;
-   assign replace_way_mb_any[pt.ICACHE_NUM_WAYS-1:0]    = '0;
-   assign way_status_hit_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_rep_new[pt.ICACHE_STATUS_BITS-1:0] = '0;
-   assign way_status_new[pt.ICACHE_STATUS_BITS-1:0]     = '0;
-   assign way_status_wr_en                           = '0;
-   assign bus_wren[pt.ICACHE_NUM_WAYS-1:0]              = '0;
-
-end
-
-   assign ic_tag_valid[pt.ICACHE_NUM_WAYS-1:0] = ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{(~fetch_uncacheable_ff & ifc_fetch_req_f_raw) }} ;
-   assign ic_debug_tag_val_rd_out           = |(ic_tag_valid_unq[pt.ICACHE_NUM_WAYS-1:0] &  ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]   & {pt.ICACHE_NUM_WAYS{ic_debug_rd_en_ff}}) ;
-///////////////////////////////////////////
-// PMU signals
-///////////////////////////////////////////
-
- assign ifu_pmu_ic_miss_in   = ic_act_miss_f ;
- assign ifu_pmu_ic_hit_in    = ic_act_hit_f  ;
- assign ifu_pmu_bus_error_in = |ifc_bus_acc_fault_f;
- assign ifu_pmu_bus_trxn_in  = bus_cmd_sent ;
- assign ifu_pmu_bus_busy_in  = ifu_bus_arvalid_ff & ~ifu_bus_arready_ff & miss_pending ;
-
-   rvdffie #(9) ifu_pmu_sigs_ff (.*,
-                    .clk (free_l2clk),
-                    .din ({ifc_fetch_uncacheable_bf, ifc_fetch_req_qual_bf, dma_sb_err_state, dec_tlu_fence_i_wb,
-                           ifu_pmu_ic_miss_in,
-                           ifu_pmu_ic_hit_in,
-                           ifu_pmu_bus_error_in,
-                           ifu_pmu_bus_busy_in,
-                           ifu_pmu_bus_trxn_in
-                          }),
-                    .dout({fetch_uncacheable_ff, ifc_fetch_req_f_raw, dma_sb_err_state_ff, reset_all_tags,
-                           ifu_pmu_ic_miss,
-                           ifu_pmu_ic_hit,
-                           ifu_pmu_bus_error,
-                           ifu_pmu_bus_busy,
-                           ifu_pmu_bus_trxn
-                           }));
-
-
-///////////////////////////////////////////////////////
-// Cache debug logic                                 //
-///////////////////////////////////////////////////////
-assign ic_debug_addr[pt.ICACHE_INDEX_HI:3] = dec_tlu_ic_diag_pkt.icache_dicawics[pt.ICACHE_INDEX_HI-3:0] ;
-assign ic_debug_way_enc[01:00]             = dec_tlu_ic_diag_pkt.icache_dicawics[15:14] ;
-
-
-assign ic_debug_tag_array       = dec_tlu_ic_diag_pkt.icache_dicawics[16] ;
-assign ic_debug_rd_en           = dec_tlu_ic_diag_pkt.icache_rd_valid ;
-assign ic_debug_wr_en           = dec_tlu_ic_diag_pkt.icache_wr_valid ;
-
-
-assign ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]        = {(ic_debug_way_enc[1:0] == 2'b11),
-                                                      (ic_debug_way_enc[1:0] == 2'b10),
-                                                      (ic_debug_way_enc[1:0] == 2'b01),
-                                                      (ic_debug_way_enc[1:0] == 2'b00) };
-
-assign ic_debug_tag_wr_en[pt.ICACHE_NUM_WAYS-1:0] = {pt.ICACHE_NUM_WAYS{ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt.ICACHE_NUM_WAYS-1:0] ;
-
-assign ic_debug_ict_array_sel_in      =  ic_debug_rd_en & ic_debug_tag_array ;
-
-rvdff_fpga #(01+pt.ICACHE_NUM_WAYS) ifu_debug_sel_ff (.*, .clk (debug_c1_clk),
-                    .clken(debug_c1_clken), .rawclk(clk),
-                    .din ({ic_debug_ict_array_sel_in,
-                           ic_debug_way[pt.ICACHE_NUM_WAYS-1:0]
-                          }),
-                    .dout({ic_debug_ict_array_sel_ff,
-                           ic_debug_way_ff[pt.ICACHE_NUM_WAYS-1:0]
-                           }));
-
-
-
-
-assign debug_data_clken  =  ic_debug_rd_en_ff;
-
-
-
-
-// memory protection  - equation to look identical to the LSU equation
-   assign ifc_region_acc_okay = (~(|{pt.INST_ACCESS_ENABLE0,pt.INST_ACCESS_ENABLE1,pt.INST_ACCESS_ENABLE2,pt.INST_ACCESS_ENABLE3,pt.INST_ACCESS_ENABLE4,pt.INST_ACCESS_ENABLE5,pt.INST_ACCESS_ENABLE6,pt.INST_ACCESS_ENABLE7})) |
-                               (pt.INST_ACCESS_ENABLE0 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK0)) == (pt.INST_ACCESS_ADDR0 | pt.INST_ACCESS_MASK0)) |
-                               (pt.INST_ACCESS_ENABLE1 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK1)) == (pt.INST_ACCESS_ADDR1 | pt.INST_ACCESS_MASK1)) |
-                               (pt.INST_ACCESS_ENABLE2 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK2)) == (pt.INST_ACCESS_ADDR2 | pt.INST_ACCESS_MASK2)) |
-                               (pt.INST_ACCESS_ENABLE3 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK3)) == (pt.INST_ACCESS_ADDR3 | pt.INST_ACCESS_MASK3)) |
-                               (pt.INST_ACCESS_ENABLE4 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK4)) == (pt.INST_ACCESS_ADDR4 | pt.INST_ACCESS_MASK4)) |
-                               (pt.INST_ACCESS_ENABLE5 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK5)) == (pt.INST_ACCESS_ADDR5 | pt.INST_ACCESS_MASK5)) |
-                               (pt.INST_ACCESS_ENABLE6 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK6)) == (pt.INST_ACCESS_ADDR6 | pt.INST_ACCESS_MASK6)) |
-                               (pt.INST_ACCESS_ENABLE7 & (({ifc_fetch_addr_bf[31:1],1'b0} | pt.INST_ACCESS_MASK7)) == (pt.INST_ACCESS_ADDR7 | pt.INST_ACCESS_MASK7));
-
-   assign ifc_region_acc_fault_memory_bf   =  ~ifc_iccm_access_bf & ~ifc_region_acc_okay & ifc_fetch_req_bf;
-
-   assign ifc_region_acc_fault_final_bf = ifc_region_acc_fault_bf | ifc_region_acc_fault_memory_bf;
-
-
-
-
-endmodule  // eb1_ifu_mem_ctl
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-
-module eb1_lsu
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-
-   input logic                             clk_override,             // Override non-functional clock gating
-   input logic                             dec_tlu_flush_lower_r,    // I0/I1 writeback flush. This is used to flush the old packets only
-   input logic                             dec_tlu_i0_kill_writeb_r, // I0 is flushed, don't writeback any results to arch state
-   input logic                             dec_tlu_force_halt,       // This will be high till TLU goes to debug halt
-
-   // chicken signals
-   input logic                             dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                             dec_tlu_wb_coalescing_disable,     // disable the write buffer coalesce
-   input logic                             dec_tlu_sideeffect_posted_disable, // disable the posted sideeffect load store to the bus
-   input logic                             dec_tlu_core_ecc_disable,          // disable the generation of the ecc
-
-   input logic [31:0]                      exu_lsu_rs1_d,        // address rs operand
-   input logic [31:0]                      exu_lsu_rs2_d,        // store data
-   input logic [11:0]                      dec_lsu_offset_d,     // address offset operand
-
-   input                                   eb1_lsu_pkt_t lsu_p,  // lsu control packet
-   input logic                             dec_lsu_valid_raw_d,   // Raw valid for address computation
-   input logic [31:0]                      dec_tlu_mrac_ff,       // CSR for memory region control
-
-   output logic [31:0]                     lsu_result_m,          // lsu load data
-   output logic [31:0]                     lsu_result_corr_r,     // This is the ECC corrected data going to RF
-   output logic                            lsu_load_stall_any,    // This is for blocking loads in the decode
-   output logic                            lsu_store_stall_any,   // This is for blocking stores in the decode
-   output logic                            lsu_fastint_stall_any, // Stall the fastint in decode-1 stage
-   output logic                            lsu_idle_any,          // lsu buffers are empty and no instruction in the pipeline. Doesn't include DMA
-   output logic                            lsu_active,            // Used to turn off top level clk
-
-   output logic [31:1]                     lsu_fir_addr,        // fast interrupt address
-   output logic [1:0]                      lsu_fir_error,       // Error during fast interrupt lookup
-
-   output logic                            lsu_single_ecc_error_incr,     // Increment the ecc counter
-   output eb1_lsu_error_pkt_t             lsu_error_pkt_r,               // lsu exception packet
-   output logic                            lsu_imprecise_error_load_any,  // bus load imprecise error
-   output logic                            lsu_imprecise_error_store_any, // bus store imprecise error
-   output logic [31:0]                     lsu_imprecise_error_addr_any,  // bus store imprecise error address
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,      // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,        // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,        // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,    // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,   // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,   // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,     // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,         // Data of the non block load
-
-   output logic                            lsu_pmu_load_external_m,        // PMU : Bus loads
-   output logic                            lsu_pmu_store_external_m,       // PMU : Bus loads
-   output logic                            lsu_pmu_misaligned_m,           // PMU : misaligned
-   output logic                            lsu_pmu_bus_trxn,               // PMU : bus transaction
-   output logic                            lsu_pmu_bus_misaligned,         // PMU : misaligned access going to the bus
-   output logic                            lsu_pmu_bus_error,              // PMU : bus sending error back
-   output logic                            lsu_pmu_bus_busy,               // PMU : bus is not ready
-
-   // Trigger signals
-   input                                   eb1_trigger_pkt_t [3:0] trigger_pkt_any, // Trigger info from the decode
-   output logic [3:0]                      lsu_trigger_match_m,                      // lsu trigger hit (one bit per trigger)
-
-   // DCCM ports
-   output logic                            dccm_wren,       // DCCM write enable
-   output logic                            dccm_rden,       // DCCM read enable
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo, // DCCM write address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi, // DCCM write address hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo, // DCCM read address low bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi, // DCCM read address hi bank (hi and low same if aligned read)
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo, // DCCM write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi, // DCCM write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo, // DCCM read data low bank
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi, // DCCM read data hi bank
-
-   // PIC ports
-   output logic                            picm_wren,    // PIC memory write enable
-   output logic                            picm_rden,    // PIC memory read enable
-   output logic                            picm_mken,    // Need to read the mask for stores to determine which bits to write/forward
-   output logic [31:0]                     picm_rdaddr,  // address for pic read access
-   output logic [31:0]                     picm_wraddr,  // address for pic write access
-   output logic [31:0]                     picm_wr_data, // PIC memory write data
-   input logic [31:0]                      picm_rd_data, // PIC memory read/mask data
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-   input  logic                            lsu_axi_rlast,
-
-   input logic                             lsu_bus_clk_en,    // external drives a clock_en to control bus ratio
-
-   // DMA slave
-   input logic                             dma_dccm_req,       // DMA read/write to dccm
-   input logic [2:0]                       dma_mem_tag,        // DMA request tag
-   input logic [31:0]                      dma_mem_addr,       // DMA address
-   input logic [2:0]                       dma_mem_sz,         // DMA access size
-   input logic                             dma_mem_write,      // DMA access is a write
-   input logic [63:0]                      dma_mem_wdata,      // DMA write data
-
-   output logic                            dccm_dma_rvalid,     // lsu data valid for DMA dccm read
-   output logic                            dccm_dma_ecc_error,  // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,       // DMA request tag
-   output logic [63:0]                     dccm_dma_rdata,      // lsu data for DMA dccm read
-   output logic                            dccm_ready,          // lsu ready for DMA access
-
-   input logic                             scan_mode,           // scan mode
-   input logic                             clk,                 // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                             active_clk,          // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                             rst_l                // reset, active low
-
-   );
-
-
-   logic        lsu_dccm_rden_m;
-   logic        lsu_dccm_rden_r;
-   logic [31:0] store_data_m;
-   logic [31:0] store_data_r;
-   logic [31:0] store_data_hi_r, store_data_lo_r;
-   logic [31:0] store_datafn_hi_r, store_datafn_lo_r;
-   logic [31:0] sec_data_lo_m, sec_data_hi_m;
-   logic [31:0] sec_data_lo_r, sec_data_hi_r;
-
-   logic [31:0] lsu_ld_data_m;
-   logic [31:0] dccm_rdata_hi_m, dccm_rdata_lo_m;
-   logic [6:0]  dccm_data_ecc_hi_m, dccm_data_ecc_lo_m;
-   logic        lsu_single_ecc_error_m;
-   logic        lsu_double_ecc_error_m;
-
-   logic [31:0] lsu_ld_data_r;
-   logic [31:0] lsu_ld_data_corr_r;
-   logic [31:0] dccm_rdata_hi_r, dccm_rdata_lo_r;
-   logic [6:0]  dccm_data_ecc_hi_r, dccm_data_ecc_lo_r;
-   logic        single_ecc_error_hi_r, single_ecc_error_lo_r;
-   logic        lsu_single_ecc_error_r;
-   logic        lsu_double_ecc_error_r;
-   logic        ld_single_ecc_error_r, ld_single_ecc_error_r_ff;
-
-   logic [31:0] picm_mask_data_m;
-
-   logic [31:0] lsu_addr_d, lsu_addr_m, lsu_addr_r;
-   logic [31:0] end_addr_d, end_addr_m, end_addr_r;
-
-   eb1_lsu_pkt_t    lsu_pkt_d, lsu_pkt_m, lsu_pkt_r;
-   logic        lsu_i0_valid_d, lsu_i0_valid_m, lsu_i0_valid_r;
-
-   // Store Buffer signals
-   logic        store_stbuf_reqvld_r;
-   logic        ldst_stbuf_reqvld_r;
-
-   logic        lsu_commit_r;
-   logic        lsu_exc_m;
-
-   logic        addr_in_dccm_d, addr_in_dccm_m, addr_in_dccm_r;
-   logic        addr_in_pic_d, addr_in_pic_m, addr_in_pic_r;
-   logic        ldst_dual_d, ldst_dual_m, ldst_dual_r;
-   logic        addr_external_m;
-
-   logic                          stbuf_reqvld_any;
-   logic                          stbuf_reqvld_flushed_any;
-   logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff, sec_data_hi_r_ff;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff, sec_data_ecc_lo_r_ff;
-
-   logic                          lsu_cmpen_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m;
-   logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m;
-   logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m;
-
-   logic        lsu_stbuf_commit_any;
-   logic        lsu_stbuf_empty_any;   // This is for blocking loads
-   logic        lsu_stbuf_full_any;
-
-    // Bus signals
-   logic        lsu_busreq_r;
-   logic        lsu_bus_buffer_pend_any;
-   logic        lsu_bus_buffer_empty_any;
-   logic        lsu_bus_buffer_full_any;
-   logic        lsu_busreq_m;
-   logic [31:0] bus_read_data_m;
-
-   logic        flush_m_up, flush_r;
-   logic        is_sideeffects_m;
-   logic [2:0]  dma_mem_tag_d, dma_mem_tag_m;
-   logic        ldst_nodma_mtor;
-   logic        dma_dccm_wen, dma_pic_wen;
-   logic [31:0] dma_dccm_wdata_lo, dma_dccm_wdata_hi;
-   logic [pt.DCCM_ECC_WIDTH-1:0] dma_dccm_wdata_ecc_lo, dma_dccm_wdata_ecc_hi;
-
-   // Clocks
-   logic        lsu_busm_clken;
-   logic        lsu_bus_obuf_c1_clken;
-   logic        lsu_c1_m_clk, lsu_c1_r_clk;
-   logic        lsu_c2_m_clk, lsu_c2_r_clk;
-   logic        lsu_store_c1_m_clk, lsu_store_c1_r_clk;
-
-   logic        lsu_stbuf_c1_clk;
-   logic        lsu_bus_ibuf_c1_clk, lsu_bus_obuf_c1_clk, lsu_bus_buf_c1_clk;
-   logic        lsu_busm_clk;
-   logic        lsu_free_c2_clk;
-
-   logic        lsu_raw_fwd_lo_m, lsu_raw_fwd_hi_m;
-   logic        lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r;
-
-   assign       lsu_raw_fwd_lo_m = (|stbuf_fwdbyteen_lo_m[pt.DCCM_BYTE_WIDTH-1:0]);
-   assign       lsu_raw_fwd_hi_m = (|stbuf_fwdbyteen_hi_m[pt.DCCM_BYTE_WIDTH-1:0]);
-
-   eb1_lsu_lsc_ctl #(.pt(pt)) lsu_lsc_ctl (.*);
-
-   // block stores in decode  - for either bus or stbuf reasons
-   assign lsu_store_stall_any = lsu_stbuf_full_any | lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_load_stall_any = lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-   assign lsu_fastint_stall_any = ld_single_ecc_error_r;    // Stall the fastint in decode-1 stage
-
-   // Ready to accept dma trxns
-   // There can't be any inpipe forwarding from non-dma packet to dma packet since they can be flushed so we can't have st in r when dma is in m
-   assign dma_mem_tag_d[2:0]   = dma_mem_tag[2:0];
-   assign ldst_nodma_mtor = (lsu_pkt_m.valid & ~lsu_pkt_m.dma & (addr_in_dccm_m | addr_in_pic_m) & lsu_pkt_m.store);
-
-   assign dccm_ready = ~(dec_lsu_valid_raw_d | ldst_nodma_mtor | ld_single_ecc_error_r_ff);
-
-   assign dma_dccm_wen = dma_dccm_req & dma_mem_write & addr_in_dccm_d & dma_mem_sz[1];   // Perform DMA writes only for word/dword
-   assign dma_pic_wen  = dma_dccm_req & dma_mem_write & addr_in_pic_d;
-   assign {dma_dccm_wdata_hi[31:0], dma_dccm_wdata_lo[31:0]} = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-
-
-   // Generate per cycle flush signals
-   assign flush_m_up = dec_tlu_flush_lower_r;
-   assign flush_r    = dec_tlu_i0_kill_writeb_r;
-
-   // lsu idle
-   // lsu halt idle. This is used for entering the halt mode. Also, DMA accesses are allowed during fence.
-   // Indicates non-idle if there is a instruction valid in d-r or read/write buffers are non-empty since they can come with error
-   // Store buffer now have only non-dma dccm stores
-   // stbuf_empty not needed since it has only dccm stores
-   assign lsu_idle_any = ~((lsu_pkt_m.valid & ~lsu_pkt_m.dma) |
-                           (lsu_pkt_r.valid & ~lsu_pkt_r.dma)) &
-                           lsu_bus_buffer_empty_any;
-
-   assign lsu_active = (lsu_pkt_m.valid | lsu_pkt_r.valid | ld_single_ecc_error_r_ff) | ~lsu_bus_buffer_empty_any;  // This includes DMA. Used for gating top clock
-
-   // Instantiate the store buffer
-   assign store_stbuf_reqvld_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~flush_r & (~lsu_pkt_r.dma | ((lsu_pkt_r.by | lsu_pkt_r.half) & ~lsu_double_ecc_error_r));
-
-   // Disable Forwarding for now
-   assign lsu_cmpen_m = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & (addr_in_dccm_m | addr_in_pic_m);
-
-   // Bus signals
-   assign lsu_busreq_m = lsu_pkt_m.valid & ((lsu_pkt_m.load | lsu_pkt_m.store) & addr_external_m) & ~flush_m_up & ~lsu_exc_m & ~lsu_pkt_m.fast_int;
-
-   // Dual signals
-   assign ldst_dual_d  = (lsu_addr_d[2] != end_addr_d[2]);
-   assign ldst_dual_m  = (lsu_addr_m[2] != end_addr_m[2]);
-   assign ldst_dual_r  = (lsu_addr_r[2] != end_addr_r[2]);
-
-   // PMU signals
-   assign lsu_pmu_misaligned_m     = lsu_pkt_m.valid & ((lsu_pkt_m.half & lsu_addr_m[0]) | (lsu_pkt_m.word & (|lsu_addr_m[1:0])));
-   assign lsu_pmu_load_external_m  = lsu_pkt_m.valid & lsu_pkt_m.load & addr_external_m;
-   assign lsu_pmu_store_external_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_external_m;
-
-   eb1_lsu_dccm_ctl #(.pt(pt)) dccm_ctl (
-      .lsu_addr_d(lsu_addr_d[31:0]),
-      .end_addr_d(end_addr_d[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .lsu_addr_r(lsu_addr_r[31:0]),
-
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_stbuf #(.pt(pt)) stbuf (
-      .lsu_addr_d(lsu_addr_d[pt.LSU_SB_BITS-1:0]),
-      .end_addr_d(end_addr_d[pt.LSU_SB_BITS-1:0]),
-
-      .*
-
-   );
-
-   eb1_lsu_ecc #(.pt(pt)) ecc (
-      .lsu_addr_r(lsu_addr_r[pt.DCCM_BITS-1:0]),
-      .end_addr_r(end_addr_r[pt.DCCM_BITS-1:0]),
-      .lsu_addr_m(lsu_addr_m[pt.DCCM_BITS-1:0]),
-      .end_addr_m(end_addr_m[pt.DCCM_BITS-1:0]),
-      .*
-   );
-
-   eb1_lsu_trigger #(.pt(pt)) trigger (
-      .store_data_m(store_data_m[31:0]),
-      .*
-   );
-
-   // Clk domain
-   eb1_lsu_clkdomain #(.pt(pt)) clkdomain (.*);
-
-   // Bus interface
-   eb1_lsu_bus_intf #(.pt(pt)) bus_intf (
-      .lsu_addr_m(lsu_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .lsu_addr_r(lsu_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .end_addr_m(end_addr_m[31:0] & {32{addr_external_m & lsu_pkt_m.valid}}),
-      .end_addr_r(end_addr_r[31:0] & {32{lsu_busreq_r}}),
-
-      .store_data_r(store_data_r[31:0] & {32{lsu_busreq_r}}),
-      .*
-   );
-
-   //Flops
-   rvdff #(3) dma_mem_tag_mff     (.*, .din(dma_mem_tag_d[2:0]), .dout(dma_mem_tag_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(2) lsu_raw_fwd_r_ff    (.*, .din({lsu_raw_fwd_hi_m, lsu_raw_fwd_lo_m}),     .dout({lsu_raw_fwd_hi_r, lsu_raw_fwd_lo_r}),     .clk(lsu_c2_r_clk));
-
-
-endmodule // eb1_lsu
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Checks the memory map for the address
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_addrcheck
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic          lsu_c2_m_clk,              // clock
-   input logic          rst_l,                     // reset
-
-   input logic [31:0]   start_addr_d,              // start address for lsu
-   input logic [31:0]   end_addr_d,                // end address for lsu
-   input eb1_lsu_pkt_t lsu_pkt_d,                 // packet in d
-   input logic [31:0]   dec_tlu_mrac_ff,           // CSR read
-   input logic [3:0]    rs1_region_d,              // address rs operand [31:28]
-
-   input logic [31:0]   rs1_d,                     // address rs operand
-
-   output logic         is_sideeffects_m,          // is sideffects space
-   output logic         addr_in_dccm_d,            // address in dccm
-   output logic         addr_in_pic_d,             // address in pic
-   output logic         addr_external_d,           // address in external
-
-   output logic         access_fault_d,            // access fault
-   output logic         misaligned_fault_d,        // misaligned
-   output logic [3:0]   exc_mscause_d,             // mscause for access/misaligned faults
-
-   output logic         fir_dccm_access_error_d,   // Fast interrupt dccm access error
-   output logic         fir_nondccm_access_error_d,// Fast interrupt dccm access error
-
-   input  logic         scan_mode                  // Scan mode
-);
-
-
-   logic        non_dccm_access_ok;
-   logic        is_sideeffects_d, is_aligned_d;
-   logic        start_addr_in_dccm_d, end_addr_in_dccm_d;
-   logic        start_addr_in_dccm_region_d, end_addr_in_dccm_region_d;
-   logic        start_addr_in_pic_d, end_addr_in_pic_d;
-   logic        start_addr_in_pic_region_d, end_addr_in_pic_region_d;
-   logic [4:0]  csr_idx;
-   logic        addr_in_iccm;
-   logic        start_addr_dccm_or_pic;
-   logic        base_reg_dccm_or_pic;
-   logic        unmapped_access_fault_d, mpu_access_fault_d, picm_access_fault_d, regpred_access_fault_d;
-   logic        regcross_misaligned_fault_d, sideeffect_misaligned_fault_d;
-   logic [3:0]  access_fault_mscause_d;
-   logic [3:0]  misaligned_fault_mscause_d;
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Start address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) start_addr_dccm_rangecheck (
-         .addr(start_addr_d[31:0]),
-         .in_range(start_addr_in_dccm_d),
-         .in_region(start_addr_in_dccm_region_d)
-      );
-
-      // End address check
-      rvrangecheck #(.CCM_SADR(pt.DCCM_SADR),
-                     .CCM_SIZE(pt.DCCM_SIZE)) end_addr_dccm_rangecheck (
-         .addr(end_addr_d[31:0]),
-         .in_range(end_addr_in_dccm_d),
-         .in_region(end_addr_in_dccm_region_d)
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign start_addr_in_dccm_d = '0;
-      assign start_addr_in_dccm_region_d = '0;
-      assign end_addr_in_dccm_d = '0;
-      assign end_addr_in_dccm_region_d = '0;
-   end
-
-   if (pt.ICCM_ENABLE == 1) begin : check_iccm
-      assign addr_in_iccm =  (start_addr_d[31:28] == pt.ICCM_REGION);
-   end else begin
-     assign addr_in_iccm = 1'b0;
-   end
-
-   // PIC memory check
-   // Start address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) start_addr_pic_rangecheck (
-      .addr(start_addr_d[31:0]),
-      .in_range(start_addr_in_pic_d),
-      .in_region(start_addr_in_pic_region_d)
-   );
-
-   // End address check
-   rvrangecheck #(.CCM_SADR(pt.PIC_BASE_ADDR),
-                  .CCM_SIZE(pt.PIC_SIZE)) end_addr_pic_rangecheck (
-      .addr(end_addr_d[31:0]),
-      .in_range(end_addr_in_pic_d),
-      .in_region(end_addr_in_pic_region_d)
-   );
-
-   assign start_addr_dccm_or_pic  = start_addr_in_dccm_region_d | start_addr_in_pic_region_d;
-   assign base_reg_dccm_or_pic    = ((rs1_region_d[3:0] == pt.DCCM_REGION) & pt.DCCM_ENABLE) | (rs1_region_d[3:0] == pt.PIC_REGION);
-   assign addr_in_dccm_d          = (start_addr_in_dccm_d & end_addr_in_dccm_d);
-   assign addr_in_pic_d           = (start_addr_in_pic_d & end_addr_in_pic_d);
-
-   assign addr_external_d   = ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d);
-   assign csr_idx[4:0]       = {start_addr_d[31:28], 1'b1};
-   assign is_sideeffects_d = dec_tlu_mrac_ff[csr_idx] & ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d | addr_in_iccm) & lsu_pkt_d.valid & (lsu_pkt_d.store | lsu_pkt_d.load);  //every region has the 2 LSB indicating ( 1: sideeffects/no_side effects, and 0: cacheable ). Ignored in internal regions
-   assign is_aligned_d    = (lsu_pkt_d.word & (start_addr_d[1:0] == 2'b0)) |
-                              (lsu_pkt_d.half & (start_addr_d[0] == 1'b0)) |
-                              lsu_pkt_d.by;
-
-   assign non_dccm_access_ok = (~(|{pt.DATA_ACCESS_ENABLE0,pt.DATA_ACCESS_ENABLE1,pt.DATA_ACCESS_ENABLE2,pt.DATA_ACCESS_ENABLE3,pt.DATA_ACCESS_ENABLE4,pt.DATA_ACCESS_ENABLE5,pt.DATA_ACCESS_ENABLE6,pt.DATA_ACCESS_ENABLE7})) |
-                               (((pt.DATA_ACCESS_ENABLE0 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((start_addr_d[31:0] | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7)))   &
-                                ((pt.DATA_ACCESS_ENABLE0 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK0)) == (pt.DATA_ACCESS_ADDR0 | pt.DATA_ACCESS_MASK0)) |
-                                 (pt.DATA_ACCESS_ENABLE1 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK1)) == (pt.DATA_ACCESS_ADDR1 | pt.DATA_ACCESS_MASK1)) |
-                                 (pt.DATA_ACCESS_ENABLE2 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK2)) == (pt.DATA_ACCESS_ADDR2 | pt.DATA_ACCESS_MASK2)) |
-                                 (pt.DATA_ACCESS_ENABLE3 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK3)) == (pt.DATA_ACCESS_ADDR3 | pt.DATA_ACCESS_MASK3)) |
-                                 (pt.DATA_ACCESS_ENABLE4 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK4)) == (pt.DATA_ACCESS_ADDR4 | pt.DATA_ACCESS_MASK4)) |
-                                 (pt.DATA_ACCESS_ENABLE5 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK5)) == (pt.DATA_ACCESS_ADDR5 | pt.DATA_ACCESS_MASK5)) |
-                                 (pt.DATA_ACCESS_ENABLE6 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK6)) == (pt.DATA_ACCESS_ADDR6 | pt.DATA_ACCESS_MASK6)) |
-                                 (pt.DATA_ACCESS_ENABLE7 & ((end_addr_d[31:0]   | pt.DATA_ACCESS_MASK7)) == (pt.DATA_ACCESS_ADDR7 | pt.DATA_ACCESS_MASK7))));
-
-   // Access fault logic
-   // 0. Unmapped local memory : Addr in dccm region but not in dccm offset OR Addr in picm region but not in picm offset OR DCCM -> PIC cross when DCCM/PIC in same region
-   // 1. Uncorrectable (double bit) ECC error
-   // 3. Address is not in a populated non-dccm region
-   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   // 6. Ld/St access to picm are not word aligned or word size
-   assign regpred_access_fault_d  = (start_addr_dccm_or_pic ^ base_reg_dccm_or_pic);                   // 5. Region predication access fault: Base Address in DCCM/PIC and Final address in non-DCCM/non-PIC region or vice versa
-   assign picm_access_fault_d     = (addr_in_pic_d & ((start_addr_d[1:0] != 2'b0) | ~lsu_pkt_d.word));                                               // 6. Ld/St access to picm are not word aligned or word size
-
-   if (pt.DCCM_ENABLE & (pt.DCCM_REGION == pt.PIC_REGION)) begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~(start_addr_in_dccm_d | start_addr_in_pic_d)) |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (end_addr_in_dccm_region_d & ~(end_addr_in_dccm_d | end_addr_in_pic_d))       |   // 0. Addr in dccm/pic region but not in dccm/pic offset
-                                        (start_addr_in_dccm_d & end_addr_in_pic_d)                                    |   // 0. DCCM -> PIC cross when DCCM/PIC in same region
-                                        (start_addr_in_pic_d  & end_addr_in_dccm_d));                                     // 0. DCCM -> PIC cross when DCCM/PIC in same region
-      assign mpu_access_fault_d      = (~start_addr_in_dccm_region_d & ~non_dccm_access_ok);                              // 3. Address is not in a populated non-dccm region
-   end else begin
-      assign unmapped_access_fault_d = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d)                              |   // 0. Addr in dccm region but not in dccm offset
-                                        (end_addr_in_dccm_region_d & ~end_addr_in_dccm_d)                                  |   // 0. Addr in dccm region but not in dccm offset
-                                        (start_addr_in_pic_region_d & ~start_addr_in_pic_d)                                |   // 0. Addr in picm region but not in picm offset
-                                        (end_addr_in_pic_region_d & ~end_addr_in_pic_d));                                      // 0. Addr in picm region but not in picm offset
-      assign mpu_access_fault_d      = (~start_addr_in_pic_region_d & ~start_addr_in_dccm_region_d & ~non_dccm_access_ok);     // 3. Address is not in a populated non-dccm region
-   end
-
-   assign access_fault_d = (unmapped_access_fault_d | mpu_access_fault_d | picm_access_fault_d | regpred_access_fault_d) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign access_fault_mscause_d[3:0] = unmapped_access_fault_d ? 4'h2 : mpu_access_fault_d ? 4'h3 : regpred_access_fault_d ? 4'h5 : picm_access_fault_d ? 4'h6 : 4'h0;
-
-   // Misaligned happens due to 2 reasons
-   // 0. Region cross
-   // 1. sideeffects access which are not aligned
-   assign regcross_misaligned_fault_d = (start_addr_d[31:28] != end_addr_d[31:28]);
-   assign sideeffect_misaligned_fault_d = (is_sideeffects_d & ~is_aligned_d);
-   assign misaligned_fault_d = (regcross_misaligned_fault_d | (sideeffect_misaligned_fault_d & addr_external_d)) & lsu_pkt_d.valid & ~lsu_pkt_d.dma;
-   assign misaligned_fault_mscause_d[3:0] = regcross_misaligned_fault_d ? 4'h2 : sideeffect_misaligned_fault_d ? 4'h1 : 4'h0;
-
-   assign exc_mscause_d[3:0] = misaligned_fault_d ? misaligned_fault_mscause_d[3:0] : access_fault_mscause_d[3:0];
-
-   // Fast interrupt error logic
-   assign fir_dccm_access_error_d    = ((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d) |
-                                        (end_addr_in_dccm_region_d   & ~end_addr_in_dccm_d)) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-   assign fir_nondccm_access_error_d = ~(start_addr_in_dccm_region_d & end_addr_in_dccm_region_d) & lsu_pkt_d.valid & lsu_pkt_d.fast_int;
-
-   rvdff #(.WIDTH(1))   is_sideeffects_mff (.din(is_sideeffects_d), .dout(is_sideeffects_m), .clk(lsu_c2_m_clk), .*);
-
-endmodule // eb1_lsu_addrcheck
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-
-module eb1_lsu_bus_buffer
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // Don't block the sideeffect load store to the bus
-   input logic                          dec_tlu_force_halt,
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,
-   input logic                          lsu_busm_clken,
-   input logic                          lsu_c2_r_clk,
-   input logic                          lsu_bus_ibuf_c1_clk,
-   input logic                          lsu_bus_obuf_c1_clk,
-   input logic                          lsu_bus_buf_c1_clk,
-   input logic                          lsu_free_c2_clk,
-   input logic                          lsu_busm_clk,
-
-
-   input logic                          dec_lsu_valid_raw_d,            // Raw valid for address computation
-   input eb1_lsu_pkt_t                 lsu_pkt_m,                      // lsu packet flowing down the pipe
-   input eb1_lsu_pkt_t                 lsu_pkt_r,                      // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_m,                     // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                     // lsu address flowing down the pipe
-   input logic [31:0]                   store_data_r,                   // store data flowing down the pipe
-
-   input logic                          no_word_merge_r,                // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          no_dword_merge_r,               // r store doesn't need to wait in ibuf since it will not coalesce
-   input logic                          lsu_busreq_m,                   // bus request is in m
-   output logic                         lsu_busreq_r,                   // bus request is in r
-   input logic                          ld_full_hit_m,                  // load can get all its byte from a write buffer entry
-   input logic                          flush_m_up,                     // flush
-   input logic                          flush_r,                        // flush
-   input logic                          lsu_commit_r,                   // lsu instruction in r commits
-   input logic                          is_sideeffects_r,               // lsu attribute is side_effects
-   input logic                          ldst_dual_d,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_m,                    // load/store is unaligned at 32 bit boundary
-   input logic                          ldst_dual_r,                    // load/store is unaligned at 32 bit boundary
-
-   input logic [7:0]                    ldst_byteen_ext_m,              // HI and LO signals
-
-   output logic                         lsu_bus_buffer_pend_any,          // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,          // bus buffer is full
-   output logic                         lsu_bus_buffer_empty_any,         // bus buffer is empty
-
-   output logic [3:0]                   ld_byte_hit_buf_lo, ld_byte_hit_buf_hi,    // Byte enables for forwarding data
-   output logic [31:0]                  ld_fwddata_buf_lo, ld_fwddata_buf_hi,      // load forwarding data
-
-   output logic                         lsu_imprecise_error_load_any,     // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,    // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,     // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,     // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,       // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,       // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r,   // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,  // the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,  // non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,    // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,        // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                            lsu_axi_awvalid,
-   input  logic                            lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_awid,
-   output logic [31:0]                     lsu_axi_awaddr,
-   output logic [3:0]                      lsu_axi_awregion,
-   output logic [7:0]                      lsu_axi_awlen,
-   output logic [2:0]                      lsu_axi_awsize,
-   output logic [1:0]                      lsu_axi_awburst,
-   output logic                            lsu_axi_awlock,
-   output logic [3:0]                      lsu_axi_awcache,
-   output logic [2:0]                      lsu_axi_awprot,
-   output logic [3:0]                      lsu_axi_awqos,
-
-   output logic                            lsu_axi_wvalid,
-   input  logic                            lsu_axi_wready,
-   output logic [63:0]                     lsu_axi_wdata,
-   output logic [7:0]                      lsu_axi_wstrb,
-   output logic                            lsu_axi_wlast,
-
-   input  logic                            lsu_axi_bvalid,
-   output logic                            lsu_axi_bready,
-   input  logic [1:0]                      lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                            lsu_axi_arvalid,
-   input  logic                            lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_arid,
-   output logic [31:0]                     lsu_axi_araddr,
-   output logic [3:0]                      lsu_axi_arregion,
-   output logic [7:0]                      lsu_axi_arlen,
-   output logic [2:0]                      lsu_axi_arsize,
-   output logic [1:0]                      lsu_axi_arburst,
-   output logic                            lsu_axi_arlock,
-   output logic [3:0]                      lsu_axi_arcache,
-   output logic [2:0]                      lsu_axi_arprot,
-   output logic [3:0]                      lsu_axi_arqos,
-
-   input  logic                            lsu_axi_rvalid,
-   output logic                            lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]       lsu_axi_rid,
-   input  logic [63:0]                     lsu_axi_rdata,
-   input  logic [1:0]                      lsu_axi_rresp,
-
-   input logic                             lsu_bus_clk_en,
-   input logic                             lsu_bus_clk_en_q
-
-);
-
-   // For Ld: IDLE -> WAIT -> CMD -> RESP -> DONE_PARTIAL(?) -> DONE_WAIT(?) -> DONE -> IDLE
-   // For St: IDLE -> WAIT -> CMD -> RESP(?) -> IDLE
-   typedef enum logic [2:0] {IDLE=3'b000, WAIT=3'b001, CMD=3'b010, RESP=3'b011, DONE_PARTIAL=3'b100, DONE_WAIT=3'b101, DONE=3'b110} state_t;
-
-   localparam DEPTH     = pt.LSU_NUM_NBLOAD;
-   localparam DEPTH_LOG2 = pt.LSU_NUM_NBLOAD_WIDTH;
-   localparam TIMER     = 8;   // This can be only power of 2
-   localparam TIMER_MAX = TIMER - 1;  // Maximum value of timer
-   localparam TIMER_LOG2 = (TIMER < 2) ? 1 : $clog2(TIMER);
-
-   logic [3:0]                          ldst_byteen_hi_m, ldst_byteen_lo_m;
-   logic [DEPTH-1:0]                    ld_addr_hitvec_lo, ld_addr_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvec_lo, ld_byte_hitvec_hi;
-   logic [3:0][DEPTH-1:0]               ld_byte_hitvecfn_lo, ld_byte_hitvecfn_hi;
-
-   logic                                ld_addr_ibuf_hit_lo, ld_addr_ibuf_hit_hi;
-   logic [3:0]                          ld_byte_ibuf_hit_lo, ld_byte_ibuf_hit_hi;
-
-   logic [3:0]                          ldst_byteen_r;
-   logic [3:0]                          ldst_byteen_hi_r, ldst_byteen_lo_r;
-   logic [31:0]                         store_data_hi_r, store_data_lo_r;
-   logic                                is_aligned_r;                   // Aligned load/store
-   logic                                ldst_samedw_r;
-
-   logic                                lsu_nonblock_load_valid_r;
-   logic [31:0]                         lsu_nonblock_load_data_hi, lsu_nonblock_load_data_lo, lsu_nonblock_data_unalgn;
-   logic [1:0]                          lsu_nonblock_addr_offset;
-   logic [1:0]                          lsu_nonblock_sz;
-   logic                                lsu_nonblock_unsign;
-   logic                                lsu_nonblock_load_data_ready;
-
-   logic [DEPTH-1:0]                    CmdPtr0Dec, CmdPtr1Dec;
-   logic [DEPTH-1:0]                    RspPtrDec;
-   logic [DEPTH_LOG2-1:0]               CmdPtr0, CmdPtr1;
-   logic [DEPTH_LOG2-1:0]               RspPtr;
-   logic [DEPTH_LOG2-1:0]               WrPtr0_m, WrPtr0_r;
-   logic [DEPTH_LOG2-1:0]               WrPtr1_m, WrPtr1_r;
-   logic                                found_wrptr0, found_wrptr1, found_cmdptr0, found_cmdptr1;
-   logic [3:0]                          buf_numvld_any, buf_numvld_wrcmd_any, buf_numvld_cmd_any, buf_numvld_pend_any;
-   logic                                any_done_wait_state;
-   logic                                bus_sideeffect_pend;
-   logic                                bus_coalescing_disable;
-
-   logic                                bus_addr_match_pending;
-   logic                                bus_cmd_sent, bus_cmd_ready;
-   logic                                bus_wcmd_sent, bus_wdata_sent;
-   logic                                bus_rsp_read, bus_rsp_write;
-   logic [pt.LSU_BUS_TAG-1:0]           bus_rsp_read_tag, bus_rsp_write_tag;
-   logic                                bus_rsp_read_error, bus_rsp_write_error;
-   logic [63:0]                         bus_rsp_rdata;
-
-   // Bus buffer signals
-   state_t [DEPTH-1:0]                  buf_state;
-   logic   [DEPTH-1:0][1:0]             buf_sz;
-   logic   [DEPTH-1:0][31:0]            buf_addr;
-   logic   [DEPTH-1:0][3:0]             buf_byteen;
-   logic   [DEPTH-1:0]                  buf_sideeffect;
-   logic   [DEPTH-1:0]                  buf_write;
-   logic   [DEPTH-1:0]                  buf_unsign;
-   logic   [DEPTH-1:0]                  buf_dual;
-   logic   [DEPTH-1:0]                  buf_samedw;
-   logic   [DEPTH-1:0]                  buf_nomerge;
-   logic   [DEPTH-1:0]                  buf_dualhi;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag;
-   logic   [DEPTH-1:0]                  buf_ldfwd;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag;
-   logic   [DEPTH-1:0]                  buf_error;
-   logic   [DEPTH-1:0][31:0]            buf_data;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age, buf_age_younger;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage, buf_rsp_pickage;
-
-   state_t [DEPTH-1:0]                  buf_nxtstate;
-   logic   [DEPTH-1:0]                  buf_rst;
-   logic   [DEPTH-1:0]                  buf_state_en;
-   logic   [DEPTH-1:0]                  buf_cmd_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_resp_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_state_bus_en;
-   logic   [DEPTH-1:0]                  buf_dual_in;
-   logic   [DEPTH-1:0]                  buf_samedw_in;
-   logic   [DEPTH-1:0]                  buf_nomerge_in;
-   logic   [DEPTH-1:0]                  buf_sideeffect_in;
-   logic   [DEPTH-1:0]                  buf_unsign_in;
-   logic   [DEPTH-1:0][1:0]             buf_sz_in;
-   logic   [DEPTH-1:0]                  buf_write_in;
-   logic   [DEPTH-1:0]                  buf_wr_en;
-   logic   [DEPTH-1:0]                  buf_dualhi_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_dualtag_in;
-   logic   [DEPTH-1:0]                  buf_ldfwd_en;
-   logic   [DEPTH-1:0]                  buf_ldfwd_in;
-   logic   [DEPTH-1:0][DEPTH_LOG2-1:0]  buf_ldfwdtag_in;
-   logic   [DEPTH-1:0][3:0]             buf_byteen_in;
-   logic   [DEPTH-1:0][31:0]            buf_addr_in;
-   logic   [DEPTH-1:0][31:0]            buf_data_in;
-   logic   [DEPTH-1:0]                  buf_error_en;
-   logic   [DEPTH-1:0]                  buf_data_en;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_age_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_ageQ;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_set;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspage_in;
-   logic   [DEPTH-1:0][DEPTH-1:0]       buf_rspageQ;
-
-   // Input buffer signals
-   logic                               ibuf_valid;
-   logic                               ibuf_dual;
-   logic                               ibuf_samedw;
-   logic                               ibuf_nomerge;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag;
-   logic                               ibuf_sideeffect;
-   logic                               ibuf_unsign;
-   logic                               ibuf_write;
-   logic [1:0]                         ibuf_sz;
-   logic [3:0]                         ibuf_byteen;
-   logic [31:0]                        ibuf_addr;
-   logic [31:0]                        ibuf_data;
-   logic [TIMER_LOG2-1:0]              ibuf_timer;
-
-   logic                               ibuf_byp;
-   logic                               ibuf_wr_en;
-   logic                               ibuf_rst;
-   logic                               ibuf_force_drain;
-   logic                               ibuf_drain_vld;
-   logic [DEPTH-1:0]                   ibuf_drainvec_vld;
-   logic [DEPTH_LOG2-1:0]              ibuf_tag_in;
-   logic [DEPTH_LOG2-1:0]              ibuf_dualtag_in;
-   logic [1:0]                         ibuf_sz_in;
-   logic [31:0]                        ibuf_addr_in;
-   logic [3:0]                         ibuf_byteen_in;
-   logic [31:0]                        ibuf_data_in;
-   logic [TIMER_LOG2-1:0]              ibuf_timer_in;
-   logic [3:0]                         ibuf_byteen_out;
-   logic [31:0]                        ibuf_data_out;
-   logic                               ibuf_merge_en, ibuf_merge_in;
-
-   // Output buffer signals
-   logic                               obuf_valid;
-   logic                               obuf_write;
-   logic                               obuf_nosend;
-   logic                               obuf_rdrsp_pend;
-   logic                               obuf_sideeffect;
-   logic [31:0]                        obuf_addr;
-   logic [63:0]                        obuf_data;
-   logic [1:0]                         obuf_sz;
-   logic [7:0]                         obuf_byteen;
-   logic                               obuf_merge;
-   logic                               obuf_cmd_done, obuf_data_done;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag;
-
-   logic                               ibuf_buf_byp;
-   logic                               obuf_force_wr_en;
-   logic                               obuf_wr_wait;
-   logic                               obuf_wr_en, obuf_wr_enQ;
-   logic                               obuf_rst;
-   logic                               obuf_write_in;
-   logic                               obuf_nosend_in;
-   logic                               obuf_rdrsp_pend_en;
-   logic                               obuf_rdrsp_pend_in;
-   logic                               obuf_sideeffect_in;
-   logic                               obuf_aligned_in;
-   logic [31:0]                        obuf_addr_in;
-   logic [63:0]                        obuf_data_in;
-   logic [1:0]                         obuf_sz_in;
-   logic [7:0]                         obuf_byteen_in;
-   logic                               obuf_merge_in;
-   logic                               obuf_cmd_done_in, obuf_data_done_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag0_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_tag1_in;
-   logic [pt.LSU_BUS_TAG-1:0]          obuf_rdrsp_tag_in;
-
-   logic                               obuf_merge_en;
-   logic [TIMER_LOG2-1:0]              obuf_wr_timer, obuf_wr_timer_in;
-   logic [7:0]                         obuf_byteen0_in, obuf_byteen1_in;
-   logic [63:0]                        obuf_data0_in, obuf_data1_in;
-
-   logic                               lsu_axi_awvalid_q, lsu_axi_awready_q;
-   logic                               lsu_axi_wvalid_q, lsu_axi_wready_q;
-   logic                               lsu_axi_arvalid_q, lsu_axi_arready_q;
-   logic                               lsu_axi_bvalid_q, lsu_axi_bready_q;
-   logic                               lsu_axi_rvalid_q, lsu_axi_rready_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_axi_bid_q, lsu_axi_rid_q;
-   logic [1:0]                         lsu_axi_bresp_q, lsu_axi_rresp_q;
-   logic [pt.LSU_BUS_TAG-1:0]          lsu_imprecise_error_store_tag;
-   logic [63:0]                        lsu_axi_rdata_q;
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic start
-   //------------------------------------------------------------------------------
-
-   // Function to do 8 to 3 bit encoding
-   function automatic logic [2:0] f_Enc8to3;
-      input logic [7:0] Dec_value;
-
-      logic [2:0]       Enc_value;
-      Enc_value[0] = Dec_value[1] | Dec_value[3] | Dec_value[5] | Dec_value[7];
-      Enc_value[1] = Dec_value[2] | Dec_value[3] | Dec_value[6] | Dec_value[7];
-      Enc_value[2] = Dec_value[4] | Dec_value[5] | Dec_value[6] | Dec_value[7];
-
-      return Enc_value[2:0];
-   endfunction // f_Enc8to3
-
-   // Buffer hit logic for bus load forwarding
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   for (genvar i=0; i<DEPTH; i++) begin
-      assign ld_addr_hitvec_lo[i] = (lsu_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-      assign ld_addr_hitvec_hi[i] = (end_addr_m[31:2] == buf_addr[i][31:2]) & buf_write[i] & (buf_state[i] != IDLE) & lsu_busreq_m;
-   end
-
-   for (genvar j=0; j<4; j++) begin
-     assign ld_byte_hit_buf_lo[j] = |(ld_byte_hitvecfn_lo[j]) | ld_byte_ibuf_hit_lo[j];
-     assign ld_byte_hit_buf_hi[j] = |(ld_byte_hitvecfn_hi[j]) | ld_byte_ibuf_hit_hi[j];
-     for (genvar i=0; i<DEPTH; i++) begin
-         assign ld_byte_hitvec_lo[j][i] = ld_addr_hitvec_lo[i] & buf_byteen[i][j] & ldst_byteen_lo_m[j];
-         assign ld_byte_hitvec_hi[j][i] = ld_addr_hitvec_hi[i] & buf_byteen[i][j] & ldst_byteen_hi_m[j];
-
-         assign ld_byte_hitvecfn_lo[j][i] = ld_byte_hitvec_lo[j][i] & ~(|(ld_byte_hitvec_lo[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_lo[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-         assign ld_byte_hitvecfn_hi[j][i] = ld_byte_hitvec_hi[j][i] & ~(|(ld_byte_hitvec_hi[j] & buf_age_younger[i])) & ~ld_byte_ibuf_hit_hi[j];  // Kill the byte enable if younger entry exists or byte exists in ibuf
-      end
-   end
-
-   // Hit in the ibuf
-   assign ld_addr_ibuf_hit_lo = (lsu_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-   assign ld_addr_ibuf_hit_hi = (end_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write & ibuf_valid & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin
-      assign ld_byte_ibuf_hit_lo[i] = ld_addr_ibuf_hit_lo & ibuf_byteen[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_ibuf_hit_hi[i] = ld_addr_ibuf_hit_hi & ibuf_byteen[i] & ldst_byteen_hi_m[i];
-   end
-
-   always_comb begin
-      ld_fwddata_buf_lo[31:0] = {{8{ld_byte_ibuf_hit_lo[3]}},{8{ld_byte_ibuf_hit_lo[2]}},{8{ld_byte_ibuf_hit_lo[1]}},{8{ld_byte_ibuf_hit_lo[0]}}} & ibuf_data[31:0];
-      ld_fwddata_buf_hi[31:0] = {{8{ld_byte_ibuf_hit_hi[3]}},{8{ld_byte_ibuf_hit_hi[2]}},{8{ld_byte_ibuf_hit_hi[1]}},{8{ld_byte_ibuf_hit_hi[0]}}} & ibuf_data[31:0];
-      for (int i=0; i<DEPTH; i++) begin
-         ld_fwddata_buf_lo[7:0]   |= {8{ld_byte_hitvecfn_lo[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_lo[15:8]  |= {8{ld_byte_hitvecfn_lo[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_lo[23:16] |= {8{ld_byte_hitvecfn_lo[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_lo[31:24] |= {8{ld_byte_hitvecfn_lo[3][i]}} & buf_data[i][31:24];
-
-         ld_fwddata_buf_hi[7:0]   |= {8{ld_byte_hitvecfn_hi[0][i]}} & buf_data[i][7:0];
-         ld_fwddata_buf_hi[15:8]  |= {8{ld_byte_hitvecfn_hi[1][i]}} & buf_data[i][15:8];
-         ld_fwddata_buf_hi[23:16] |= {8{ld_byte_hitvecfn_hi[2][i]}} & buf_data[i][23:16];
-         ld_fwddata_buf_hi[31:24] |= {8{ld_byte_hitvecfn_hi[3][i]}} & buf_data[i][31:24];
-      end
-   end
-
-   //------------------------------------------------------------------------------
-   // Load forwarding logic end
-   //------------------------------------------------------------------------------
-
-   assign bus_coalescing_disable = dec_tlu_wb_coalescing_disable | pt.BUILD_AHB_LITE;
-
-   // Get the hi/lo byte enable
-   assign ldst_byteen_r[3:0] = ({4{lsu_pkt_r.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_r.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_r.word}} & 4'b1111);
-
-   assign {ldst_byteen_hi_r[3:0], ldst_byteen_lo_r[3:0]} = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-   assign {store_data_hi_r[31:0], store_data_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-   assign ldst_samedw_r    = (lsu_addr_r[3] == end_addr_r[3]);
-   assign is_aligned_r    = (lsu_pkt_r.word & (lsu_addr_r[1:0] == 2'b0)) |
-                            (lsu_pkt_r.half & (lsu_addr_r[0] == 1'b0))   |
-                            lsu_pkt_r.by;
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign ibuf_byp = lsu_busreq_r & (lsu_pkt_r.load | no_word_merge_r) & ~ibuf_valid;
-   assign ibuf_wr_en = lsu_busreq_r & lsu_commit_r & ~ibuf_byp;
-   assign ibuf_rst   = (ibuf_drain_vld & ~ibuf_wr_en) | dec_tlu_force_halt;
-   assign ibuf_force_drain = lsu_busreq_m & ~lsu_busreq_r & ibuf_valid & (lsu_pkt_m.load | (ibuf_addr[31:2] != lsu_addr_m[31:2]));  // Move the ibuf to buf if there is a non-colaescable ld/st in m but nothing in r
-   assign ibuf_drain_vld = ibuf_valid & (((ibuf_wr_en | (ibuf_timer == TIMER_MAX)) & ~(ibuf_merge_en & ibuf_merge_in)) | ibuf_byp | ibuf_force_drain | ibuf_sideeffect | ~ibuf_write | bus_coalescing_disable);
-   assign ibuf_tag_in[DEPTH_LOG2-1:0] = (ibuf_merge_en & ibuf_merge_in) ? ibuf_tag[DEPTH_LOG2-1:0] : (ldst_dual_r ? WrPtr1_r : WrPtr0_r);
-   assign ibuf_dualtag_in[DEPTH_LOG2-1:0] = WrPtr0_r;
-   assign ibuf_sz_in[1:0]   = {lsu_pkt_r.word, lsu_pkt_r.half};
-   assign ibuf_addr_in[31:0] = ldst_dual_r ? end_addr_r[31:0] : lsu_addr_r[31:0];
-   assign ibuf_byteen_in[3:0] = (ibuf_merge_en & ibuf_merge_in) ? (ibuf_byteen[3:0] | ldst_byteen_lo_r[3:0]) : (ldst_dual_r ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_data_in[(8*i)+7:(8*i)] = (ibuf_merge_en & ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                             (ldst_dual_r ? store_data_hi_r[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)]);
-   end
-   assign ibuf_timer_in = ibuf_wr_en ? '0 : (ibuf_timer < TIMER_MAX) ? (ibuf_timer + 1'b1) : ibuf_timer;
-
-
-   assign ibuf_merge_en = lsu_busreq_r & lsu_commit_r & lsu_pkt_r.store & ibuf_valid & ibuf_write & (lsu_addr_r[31:2] == ibuf_addr[31:2]) & ~is_sideeffects_r & ~bus_coalescing_disable;
-   assign ibuf_merge_in = ~ldst_dual_r;   // If it's a unaligned store, merge needs to happen on the way out of ibuf
-
-   // ibuf signals going to bus buffer after merging
-   for (genvar i=0; i<4; i++) begin
-      assign ibuf_byteen_out[i] = (ibuf_merge_en & ~ibuf_merge_in) ? (ibuf_byteen[i] | ldst_byteen_lo_r[i]) : ibuf_byteen[i];
-      assign ibuf_data_out[(8*i)+7:(8*i)] = (ibuf_merge_en & ~ibuf_merge_in) ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8*i)+7:(8*i)] : ibuf_data[(8*i)+7:(8*i)]) :
-                                                                                                        ibuf_data[(8*i)+7:(8*i)];
-   end
-
-   rvdffsc #(.WIDTH(1))              ibuf_valid_ff     (.din(1'b1),                      .dout(ibuf_valid),      .en(ibuf_wr_en), .clear(ibuf_rst), .clk(lsu_free_c2_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_tagff        (.din(ibuf_tag_in),               .dout(ibuf_tag),        .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(DEPTH_LOG2))     ibuf_dualtagff    (.din(ibuf_dualtag_in),           .dout(ibuf_dualtag),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_dualff       (.din(ldst_dual_r),               .dout(ibuf_dual),       .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_samedwff     (.din(ldst_samedw_r),             .dout(ibuf_samedw),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_nomergeff    (.din(no_dword_merge_r),          .dout(ibuf_nomerge),    .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_sideeffectff (.din(is_sideeffects_r),          .dout(ibuf_sideeffect), .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_unsignff     (.din(lsu_pkt_r.unsign),          .dout(ibuf_unsign),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(1))              ibuf_writeff      (.din(lsu_pkt_r.store),           .dout(ibuf_write),      .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffs  #(.WIDTH(2))              ibuf_szff         (.din(ibuf_sz_in[1:0]),           .dout(ibuf_sz),         .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_addrff       (.din(ibuf_addr_in[31:0]),        .dout(ibuf_addr),       .en(ibuf_wr_en),                                              .*);
-   rvdffs  #(.WIDTH(4))              ibuf_byteenff     (.din(ibuf_byteen_in[3:0]),       .dout(ibuf_byteen),     .en(ibuf_wr_en),                   .clk(lsu_bus_ibuf_c1_clk), .*);
-   rvdffe  #(.WIDTH(32))             ibuf_dataff       (.din(ibuf_data_in[31:0]),        .dout(ibuf_data),       .en(ibuf_wr_en),                                              .*);
-   rvdff   #(.WIDTH(TIMER_LOG2))     ibuf_timerff      (.din(ibuf_timer_in),             .dout(ibuf_timer),                                         .clk(lsu_free_c2_clk),     .*);
-
-
-   //------------------------------------------------------------------------------
-   // Input buffer logic ends here
-   //------------------------------------------------------------------------------
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic starts here
-   //------------------------------------------------------------------------------
-
-   assign obuf_wr_wait = (buf_numvld_wrcmd_any[3:0] == 4'b1) & (buf_numvld_cmd_any[3:0] == 4'b1) & (obuf_wr_timer != TIMER_MAX) &
-                         ~bus_coalescing_disable & ~buf_nomerge[CmdPtr0] & ~buf_sideeffect[CmdPtr0] & ~obuf_force_wr_en;
-   assign obuf_wr_timer_in = obuf_wr_en ? 3'b0: (((buf_numvld_cmd_any > 4'b0) & (obuf_wr_timer < TIMER_MAX)) ? (obuf_wr_timer + 1'b1) : obuf_wr_timer);
-   assign obuf_force_wr_en = lsu_busreq_m & ~lsu_busreq_r & ~ibuf_valid & (buf_numvld_cmd_any[3:0] == 4'b1) & (lsu_addr_m[31:2] != buf_addr[CmdPtr0][31:2]);   // Entry in m can't merge with entry going to obuf and there is no entry in between
-   assign ibuf_buf_byp = ibuf_byp & (buf_numvld_pend_any[3:0] == 4'b0) & (~lsu_pkt_r.store | no_dword_merge_r);
-
-   assign obuf_wr_en = ((ibuf_buf_byp & lsu_commit_r & ~(is_sideeffects_r & bus_sideeffect_pend)) |
-                        ((buf_state[CmdPtr0] == CMD) & found_cmdptr0 & ~buf_cmd_state_bus_en[CmdPtr0] & ~(buf_sideeffect[CmdPtr0] & bus_sideeffect_pend) &
-                         (~(buf_dual[CmdPtr0] & buf_samedw[CmdPtr0] & ~buf_write[CmdPtr0]) | found_cmdptr1 | buf_nomerge[CmdPtr0] | obuf_force_wr_en))) &
-                       (bus_cmd_ready | ~obuf_valid | obuf_nosend) & ~obuf_wr_wait  & ~bus_addr_match_pending & lsu_bus_clk_en;
-
-   assign obuf_rst   = ((bus_cmd_sent | (obuf_valid & obuf_nosend)) & ~obuf_wr_en & lsu_bus_clk_en) | dec_tlu_force_halt;
-
-   assign obuf_write_in      = ibuf_buf_byp ? lsu_pkt_r.store : buf_write[CmdPtr0];
-   assign obuf_sideeffect_in = ibuf_buf_byp ? is_sideeffects_r : buf_sideeffect[CmdPtr0];
-   assign obuf_addr_in[31:0] = ibuf_buf_byp ? lsu_addr_r[31:0] : buf_addr[CmdPtr0];
-   assign obuf_sz_in[1:0]    = ibuf_buf_byp ? {lsu_pkt_r.word, lsu_pkt_r.half} : buf_sz[CmdPtr0];
-   assign obuf_merge_in      = obuf_merge_en;
-   assign obuf_tag0_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr0_r) : (pt.LSU_BUS_TAG)'(CmdPtr0);
-   assign obuf_tag1_in[pt.LSU_BUS_TAG-1:0] = ibuf_buf_byp ? (pt.LSU_BUS_TAG)'(WrPtr1_r) : (pt.LSU_BUS_TAG)'(CmdPtr1);
-
-   assign obuf_cmd_done_in    = ~(obuf_wr_en | obuf_rst) & (obuf_cmd_done | bus_wcmd_sent);
-   assign obuf_data_done_in   = ~(obuf_wr_en | obuf_rst) & (obuf_data_done | bus_wdata_sent);
-
-   assign obuf_aligned_in    = ibuf_buf_byp ? is_aligned_r : ((obuf_sz_in[1:0] == 2'b0) |
-                                                              (obuf_sz_in[0] & ~obuf_addr_in[0]) |
-                                                              (obuf_sz_in[1] & ~(|obuf_addr_in[1:0])));
-
-   assign obuf_rdrsp_pend_in  = ((~(obuf_wr_en & ~obuf_nosend_in) & obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))) | (bus_cmd_sent & ~obuf_write)) & ~dec_tlu_force_halt;
-   assign obuf_rdrsp_pend_en  = lsu_bus_clk_en | dec_tlu_force_halt;
-   assign obuf_rdrsp_tag_in[pt.LSU_BUS_TAG-1:0] = (bus_cmd_sent & ~obuf_write) ? obuf_tag0[pt.LSU_BUS_TAG-1:0] : obuf_rdrsp_tag[pt.LSU_BUS_TAG-1:0];
-   // No ld to ld fwd for aligned
-   assign obuf_nosend_in      = (obuf_addr_in[31:3] == obuf_addr[31:3]) & obuf_aligned_in & ~obuf_sideeffect & ~obuf_write & ~obuf_write_in & ~dec_tlu_external_ldfwd_disable &
-                                ((obuf_valid & ~obuf_nosend) | (obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))));
-
-   assign obuf_byteen0_in[7:0] = ibuf_buf_byp ? (lsu_addr_r[2] ? {ldst_byteen_lo_r[3:0],4'b0} : {4'b0,ldst_byteen_lo_r[3:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_byteen[CmdPtr0],4'b0} : {4'b0,buf_byteen[CmdPtr0]});
-   assign obuf_byteen1_in[7:0] = ibuf_buf_byp ? (end_addr_r[2] ? {ldst_byteen_hi_r[3:0],4'b0} : {4'b0,ldst_byteen_hi_r[3:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_byteen[CmdPtr1],4'b0} : {4'b0,buf_byteen[CmdPtr1]});
-   assign obuf_data0_in[63:0]  = ibuf_buf_byp ? (lsu_addr_r[2] ? {store_data_lo_r[31:0],32'b0} : {32'b0,store_data_lo_r[31:0]}) :
-                                                (buf_addr[CmdPtr0][2] ? {buf_data[CmdPtr0],32'b0} : {32'b0,buf_data[CmdPtr0]});
-   assign obuf_data1_in[63:0]  = ibuf_buf_byp ? (end_addr_r[2] ? {store_data_hi_r[31:0],32'b0} :{32'b0,store_data_hi_r[31:0]}) :
-                                                (buf_addr[CmdPtr1][2] ? {buf_data[CmdPtr1],32'b0} : {32'b0,buf_data[CmdPtr1]});
-
-   for (genvar i=0 ;i<8; i++) begin
-      assign obuf_byteen_in[i] = obuf_byteen0_in[i] | (obuf_merge_en & obuf_byteen1_in[i]);
-      assign obuf_data_in[(8*i)+7:(8*i)] = (obuf_merge_en & obuf_byteen1_in[i]) ? obuf_data1_in[(8*i)+7:(8*i)] : obuf_data0_in[(8*i)+7:(8*i)];
-   end
-
-   // No store obuf merging for AXI since all stores are sent non-posted. Can't track the second id right now
-   assign obuf_merge_en = ((CmdPtr0 != CmdPtr1) & found_cmdptr0 & found_cmdptr1 & (buf_state[CmdPtr0] == CMD) & (buf_state[CmdPtr1] == CMD) &
-                           ~buf_cmd_state_bus_en[CmdPtr0] & ~buf_sideeffect[CmdPtr0] &
-                           (~buf_write[CmdPtr0] & buf_dual[CmdPtr0] & ~buf_dualhi[CmdPtr0] & buf_samedw[CmdPtr0])) |  // CmdPtr0/CmdPtr1 are for same load which is within a DW
-                          (ibuf_buf_byp & ldst_samedw_r & ldst_dual_r);
-
-
-   rvdff_fpga  #(.WIDTH(1))              obuf_wren_ff      (.din(obuf_wr_en),                  .dout(obuf_wr_enQ),                                        .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-   rvdffsc     #(.WIDTH(1))              obuf_valid_ff     (.din(1'b1),                        .dout(obuf_valid),      .en(obuf_wr_en), .clear(obuf_rst), .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_nosend_ff    (.din(obuf_nosend_in),              .dout(obuf_nosend),     .en(obuf_wr_en),                   .clk(lsu_free_c2_clk),                                                  .*);
-   rvdffs      #(.WIDTH(1))              obuf_rdrsp_pend_ff(.din(obuf_rdrsp_pend_in),          .dout(obuf_rdrsp_pend), .en(obuf_rdrsp_pend_en),           .clk(lsu_free_c2_clk),                                                  .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_cmd_done_ff  (.din(obuf_cmd_done_in),            .dout(obuf_cmd_done),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              obuf_data_done_ff (.din(obuf_data_done_in),           .dout(obuf_data_done),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) obuf_rdrsp_tagff  (.din(obuf_rdrsp_tag_in),           .dout(obuf_rdrsp_tag),                                     .clk(lsu_busm_clk),        .clken(lsu_busm_clken),        .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag0ff       (.din(obuf_tag0_in),                .dout(obuf_tag0),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(pt.LSU_BUS_TAG)) obuf_tag1ff       (.din(obuf_tag1_in),                .dout(obuf_tag1),       .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_mergeff      (.din(obuf_merge_in),               .dout(obuf_merge),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_writeff      (.din(obuf_write_in),               .dout(obuf_write),      .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(1))              obuf_sideeffectff (.din(obuf_sideeffect_in),          .dout(obuf_sideeffect), .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(2))              obuf_szff         (.din(obuf_sz_in[1:0]),             .dout(obuf_sz),         .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffs_fpga #(.WIDTH(8))              obuf_byteenff     (.din(obuf_byteen_in[7:0]),         .dout(obuf_byteen),     .en(obuf_wr_en),                   .clk(lsu_bus_obuf_c1_clk), .clken(lsu_bus_obuf_c1_clken), .rawclk(clk), .*);
-   rvdffe     #(.WIDTH(32))              obuf_addrff       (.din(obuf_addr_in[31:0]),          .dout(obuf_addr),       .en(obuf_wr_en),                                                                                           .*);
-   rvdffe     #(.WIDTH(64))              obuf_dataff       (.din(obuf_data_in[63:0]),          .dout(obuf_data),       .en(obuf_wr_en),                                                                                           .*);
-   rvdff_fpga #(.WIDTH(TIMER_LOG2))      obuf_timerff      (.din(obuf_wr_timer_in),            .dout(obuf_wr_timer),                                      .clk(lsu_busm_clk),        .clken(lsu_busm_clken), .rawclk(clk),        .*);
-
-
-   //------------------------------------------------------------------------------
-   // Output buffer logic ends here
-   //------------------------------------------------------------------------------
-
-   // Find the entry to allocate and entry to send
-   always_comb begin
-      WrPtr0_m[DEPTH_LOG2-1:0] = '0;
-      WrPtr1_m[DEPTH_LOG2-1:0] = '0;
-      found_wrptr0  = '0;
-      found_wrptr1  = '0;
-
-      // Find first write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr0) begin
-            WrPtr0_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr0 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-
-      // Find second write pointer
-      for (int i=0; i<DEPTH; i++) begin
-         if (~found_wrptr1) begin
-            WrPtr1_m[DEPTH_LOG2-1:0] = DEPTH_LOG2'(i);
-            found_wrptr1 = (buf_state[i] == IDLE) & ~((ibuf_valid & (ibuf_tag == i))                                               |
-                                                      (lsu_busreq_m & (WrPtr0_m == i))                                         |
-                                                      (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-         end
-      end
-   end
-
-   // Get the command ptr
-   for (genvar i=0; i<DEPTH; i++) begin
-      // These should be one-hot
-      assign CmdPtr0Dec[i] = ~(|buf_age[i]) & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign CmdPtr1Dec[i] = ~(|(buf_age[i] & ~CmdPtr0Dec)) & ~CmdPtr0Dec[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i];
-      assign RspPtrDec[i]  = ~(|buf_rsp_pickage[i]) & (buf_state[i] == DONE_WAIT);
-   end
-
-   assign found_cmdptr0 = |CmdPtr0Dec;
-   assign found_cmdptr1 = |CmdPtr1Dec;
-   assign CmdPtr0 = f_Enc8to3(8'(CmdPtr0Dec[DEPTH-1:0]));
-   assign CmdPtr1 = f_Enc8to3(8'(CmdPtr1Dec[DEPTH-1:0]));
-   assign RspPtr  = f_Enc8to3(8'(RspPtrDec[DEPTH-1:0]));
-
-   // Age vector
-   for (genvar i=0; i<DEPTH; i++) begin: GenAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_age_in[i][j] = (((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                    (((buf_state[j] == WAIT) | ((buf_state[j] == CMD) & ~buf_cmd_state_bus_en[j]))                   |       // Set age bit for older entries
-                                     (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (i == WrPtr0_r) & (j == ibuf_tag))  |       // Set case for dual lo
-                                     (ibuf_byp & lsu_busreq_r & ldst_dual_r & (i == WrPtr1_r) & (j == WrPtr0_r))))                      |     // ibuf bypass case
-                                   buf_age[i][j];
-
-
-         assign buf_age[i][j]    = buf_ageQ[i][j] & ~((buf_state[j] == CMD) & buf_cmd_state_bus_en[j]) & ~dec_tlu_force_halt;  // Reset case
-
-         assign buf_age_younger[i][j] = (i == j) ? 1'b0: (~buf_age[i][j] & (buf_state[j] != IDLE));   // Younger entries
-      end
-   end
-
-   // Age vector for responses
-   for (genvar i=0; i<DEPTH; i++) begin: GenRspAgeVec
-      for (genvar j=0; j<DEPTH; j++) begin
-         assign buf_rspage_set[i][j] = ((buf_state[i] == IDLE) & buf_state_en[i]) &
-                                           (~((buf_state[j] == IDLE) | (buf_state[j] == DONE))                                         |       // Set age bit for older entries
-                                            (ibuf_drain_vld & lsu_busreq_r & (ibuf_byp | ldst_dual_r) & (DEPTH_LOG2'(i) == WrPtr0_r) & (DEPTH_LOG2'(j) == ibuf_tag))  |       // Set case for dual lo
-                                            (ibuf_byp & lsu_busreq_r & ldst_dual_r & (DEPTH_LOG2'(i) == WrPtr1_r) & (DEPTH_LOG2'(j) == WrPtr0_r)));
-         assign buf_rspage_in[i][j] = buf_rspage_set[i][j] | buf_rspage[i][j];
-         assign buf_rspage[i][j]    = buf_rspageQ[i][j] & ~((buf_state[j] == DONE) | (buf_state[j] == IDLE)) & ~dec_tlu_force_halt;  // Reset case
-         assign buf_rsp_pickage[i][j] = buf_rspageQ[i][j] & (buf_state[j] == DONE_WAIT);
-     end
-   end
-
-   //------------------------------------------------------------------------------
-   // Buffer logic
-   //------------------------------------------------------------------------------
-   for (genvar i=0; i<DEPTH; i++) begin
-
-      assign ibuf_drainvec_vld[i] = (ibuf_drain_vld & (i == ibuf_tag));
-      assign buf_byteen_in[i]     = ibuf_drainvec_vld[i] ? ibuf_byteen_out[3:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]);
-      assign buf_addr_in[i]       = ibuf_drainvec_vld[i] ? ibuf_addr[31:0] : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? end_addr_r[31:0] : lsu_addr_r[31:0]);
-      assign buf_dual_in[i]       = ibuf_drainvec_vld[i] ? ibuf_dual : ldst_dual_r;
-      assign buf_samedw_in[i]     = ibuf_drainvec_vld[i] ? ibuf_samedw : ldst_samedw_r;
-      assign buf_nomerge_in[i]    = ibuf_drainvec_vld[i] ? (ibuf_nomerge | ibuf_force_drain) : no_dword_merge_r;
-      assign buf_dualhi_in[i]     = ibuf_drainvec_vld[i] ? ibuf_dual : (ibuf_byp & ldst_dual_r & (i == WrPtr1_r));   // If it's dual, ibuf will always have the high
-      assign buf_dualtag_in[i]    = ibuf_drainvec_vld[i] ? ibuf_dualtag : ((ibuf_byp & ldst_dual_r & (i == WrPtr1_r)) ? WrPtr0_r : WrPtr1_r);
-      assign buf_sideeffect_in[i] = ibuf_drainvec_vld[i] ? ibuf_sideeffect : is_sideeffects_r;
-      assign buf_unsign_in[i]     = ibuf_drainvec_vld[i] ? ibuf_unsign : lsu_pkt_r.unsign;
-      assign buf_sz_in[i]         = ibuf_drainvec_vld[i] ? ibuf_sz : {lsu_pkt_r.word, lsu_pkt_r.half};
-      assign buf_write_in[i]      = ibuf_drainvec_vld[i] ? ibuf_write : lsu_pkt_r.store;
-
-      // Buffer entry state machine
-      always_comb begin
-         buf_nxtstate[i]          = IDLE;
-         buf_state_en[i]          = '0;
-         buf_resp_state_bus_en[i] = '0;
-         buf_state_bus_en[i]      = '0;
-         buf_wr_en[i]             = '0;
-         buf_data_in[i]           = '0;
-         buf_data_en[i]           = '0;
-         buf_error_en[i]          = '0;
-         buf_rst[i]               = dec_tlu_force_halt;
-         buf_ldfwd_en[i]          = dec_tlu_force_halt;
-         buf_ldfwd_in[i]          = '0;
-         buf_ldfwdtag_in[i]       = '0;
-
-         case (buf_state[i])
-            IDLE: begin
-                     buf_nxtstate[i] = lsu_bus_clk_en ? CMD : WAIT;
-                     buf_state_en[i] = (lsu_busreq_r & lsu_commit_r & (((ibuf_byp | ldst_dual_r) & ~ibuf_merge_en & (i == WrPtr0_r)) | (ibuf_byp & ldst_dual_r & (i == WrPtr1_r)))) |
-                                       (ibuf_drain_vld & (i == ibuf_tag));
-                     buf_wr_en[i]    = buf_state_en[i];
-                     buf_data_en[i]  = buf_state_en[i];
-                     buf_data_in[i]   = (ibuf_drain_vld & (i == ibuf_tag)) ? ibuf_data_out[31:0] : store_data_lo_r[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            WAIT: begin
-                     buf_nxtstate[i] = dec_tlu_force_halt ? IDLE : CMD;
-                     buf_state_en[i] = lsu_bus_clk_en | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            CMD: begin
-                     buf_nxtstate[i]          = dec_tlu_force_halt ? IDLE : (obuf_nosend & bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag)) ? DONE_WAIT : RESP;
-                     buf_cmd_state_bus_en[i]  = ((obuf_tag0 == i) | (obuf_merge & (obuf_tag1 == i))) & obuf_valid & obuf_wr_enQ;  // Just use the recently written obuf_valid
-                     buf_state_bus_en[i]      = buf_cmd_state_bus_en[i];
-                     buf_state_en[i]          = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_ldfwd_in[i]          = 1'b1;
-                     buf_ldfwd_en[i]          = buf_state_en[i] & ~buf_write[i] & obuf_nosend & ~dec_tlu_force_halt;
-                     buf_ldfwdtag_in[i]       = DEPTH_LOG2'(obuf_rdrsp_tag[pt.LSU_BUS_TAG-2:0]);
-                     buf_data_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read;
-                     buf_error_en[i]          = buf_state_bus_en[i] & lsu_bus_clk_en & obuf_nosend & bus_rsp_read_error;
-                     buf_data_in[i]           = buf_error_en[i] ? bus_rsp_rdata[31:0] : (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]);
-            end
-            RESP: begin
-                     buf_nxtstate[i]           = (dec_tlu_force_halt | (buf_write[i] & ~bus_rsp_write_error)) ? IDLE :    // Side-effect writes will be non-posted
-                                                      (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & (buf_state[buf_dualtag[i]] != DONE_PARTIAL)) ? DONE_PARTIAL : // Goto DONE_PARTIAL if this is the first return of dual
-                                                           (buf_ldfwd[i] | any_done_wait_state |
-                                                            (buf_dual[i] & ~buf_samedw[i] & ~buf_write[i] & buf_ldfwd[buf_dualtag[i]] &
-                                                             (buf_state[buf_dualtag[i]] == DONE_PARTIAL) & any_done_wait_state)) ? DONE_WAIT : DONE;
-                     buf_resp_state_bus_en[i]  = (bus_rsp_write & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))) |
-                                                 (bus_rsp_read  & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(i)) |
-                                                                   (buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                   (buf_dual[i] & buf_dualhi[i] & ~buf_write[i] & buf_samedw[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])))));
-                     buf_state_bus_en[i]       = buf_resp_state_bus_en[i];
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_data_en[i]            = buf_state_bus_en[i] & bus_rsp_read & lsu_bus_clk_en;
-                      // Need to capture the error for stores as well for AXI
-                     buf_error_en[i]           = buf_state_bus_en[i] & lsu_bus_clk_en & ((bus_rsp_read_error  & (bus_rsp_read_tag  == (pt.LSU_BUS_TAG)'(i))) |
-                                                                                         (bus_rsp_read_error  & buf_ldfwd[i] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[i]))) |
-                                                                                         (bus_rsp_write_error & (bus_rsp_write_tag == (pt.LSU_BUS_TAG)'(i))));
-                     buf_data_in[i][31:0]      = (buf_state_en[i] & ~buf_error_en[i]) ? (buf_addr[i][2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]) : bus_rsp_rdata[31:0];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_PARTIAL: begin   // Other part of dual load hasn't returned
-                     buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : (buf_ldfwd[i] | buf_ldfwd[buf_dualtag[i]] | any_done_wait_state) ? DONE_WAIT : DONE;
-                     buf_state_bus_en[i]       = bus_rsp_read & ((bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_dualtag[i])) |
-                                                                 (buf_ldfwd[buf_dualtag[i]] & (bus_rsp_read_tag == (pt.LSU_BUS_TAG)'(buf_ldfwdtag[buf_dualtag[i]]))));
-                     buf_state_en[i]           = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE_WAIT: begin  // WAIT state if there are multiple outstanding nb returns
-                      buf_nxtstate[i]           = dec_tlu_force_halt ? IDLE : DONE;
-                      buf_state_en[i]           = ((RspPtr == DEPTH_LOG2'(i)) | (buf_dual[i] & (buf_dualtag[i] == RspPtr))) | dec_tlu_force_halt;
-                      buf_cmd_state_bus_en[i]  = '0;
-            end
-            DONE: begin
-                     buf_nxtstate[i]           = IDLE;
-                     buf_rst[i]                = 1'b1;
-                     buf_state_en[i]           = 1'b1;
-                     buf_ldfwd_in[i]           = 1'b0;
-                     buf_ldfwd_en[i]           = buf_state_en[i];
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-            default : begin
-                     buf_nxtstate[i]          = IDLE;
-                     buf_state_en[i]          = '0;
-                     buf_resp_state_bus_en[i] = '0;
-                     buf_state_bus_en[i]      = '0;
-                     buf_wr_en[i]             = '0;
-                     buf_data_in[i]           = '0;
-                     buf_data_en[i]           = '0;
-                     buf_error_en[i]          = '0;
-                     buf_rst[i]               = '0;
-                     buf_cmd_state_bus_en[i]  = '0;
-            end
-         endcase
-      end
-
-      rvdffs  #(.WIDTH($bits(state_t))) buf_state_ff     (.din(buf_nxtstate[i]),             .dout({buf_state[i]}),    .en(buf_state_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_ageff        (.din(buf_age_in[i]),               .dout(buf_ageQ[i]),                                                                    .clk(lsu_bus_buf_c1_clk), .*);
-      rvdff   #(.WIDTH(DEPTH))          buf_rspageff     (.din(buf_rspage_in[i]),            .dout(buf_rspageQ[i]),                                                                 .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_dualtagff    (.din(buf_dualtag_in[i]),           .dout(buf_dualtag[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualff       (.din(buf_dual_in[i]),              .dout(buf_dual[i]),       .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_samedwff     (.din(buf_samedw_in[i]),            .dout(buf_samedw[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_nomergeff    (.din(buf_nomerge_in[i]),           .dout(buf_nomerge[i]),    .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_dualhiff     (.din(buf_dualhi_in[i]),            .dout(buf_dualhi[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_ldfwdff      (.din(buf_ldfwd_in[i]),             .dout(buf_ldfwd[i]),      .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(DEPTH_LOG2))     buf_ldfwdtagff   (.din(buf_ldfwdtag_in[i]),          .dout(buf_ldfwdtag[i]),   .en(buf_ldfwd_en[i]),                                        .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_sideeffectff (.din(buf_sideeffect_in[i]),        .dout(buf_sideeffect[i]), .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_unsignff     (.din(buf_unsign_in[i]),            .dout(buf_unsign[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(1))              buf_writeff      (.din(buf_write_in[i]),             .dout(buf_write[i]),      .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffs  #(.WIDTH(2))              buf_szff         (.din(buf_sz_in[i]),                .dout(buf_sz[i]),         .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_addrff       (.din(buf_addr_in[i][31:0]),        .dout(buf_addr[i]),       .en(buf_wr_en[i]),                                                                     .*);
-      rvdffs  #(.WIDTH(4))              buf_byteenff     (.din(buf_byteen_in[i][3:0]),       .dout(buf_byteen[i]),     .en(buf_wr_en[i]),                                           .clk(lsu_bus_buf_c1_clk), .*);
-      rvdffe  #(.WIDTH(32))             buf_dataff       (.din(buf_data_in[i][31:0]),        .dout(buf_data[i]),       .en(buf_data_en[i]),                                                                   .*);
-      rvdffsc #(.WIDTH(1))              buf_errorff      (.din(1'b1),                        .dout(buf_error[i]),      .en(buf_error_en[i]),                    .clear(buf_rst[i]), .clk(lsu_bus_buf_c1_clk), .*);
-
-   end
-
-   // buffer full logic
-   always_comb begin
-      buf_numvld_any[3:0] =  ({1'b0,lsu_busreq_m} << ldst_dual_m) +
-                             ({1'b0,lsu_busreq_r} << ldst_dual_r) +
-                             ibuf_valid;
-      buf_numvld_wrcmd_any[3:0] = 4'b0;
-      buf_numvld_cmd_any[3:0] = 4'b0;
-      buf_numvld_pend_any[3:0] = 4'b0;
-      any_done_wait_state = 1'b0;
-      for (int i=0; i<DEPTH; i++) begin
-         buf_numvld_any[3:0] += {3'b0, (buf_state[i] != IDLE)};
-         buf_numvld_wrcmd_any[3:0] += {3'b0, (buf_write[i] & (buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_cmd_any[3:0]   += {3'b0, ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i])};
-         buf_numvld_pend_any[3:0]   += {3'b0, ((buf_state[i] == WAIT) | ((buf_state[i] == CMD) & ~buf_cmd_state_bus_en[i]))};
-         any_done_wait_state |= (buf_state[i] == DONE_WAIT);
-      end
-   end
-
-   assign lsu_bus_buffer_pend_any = (buf_numvld_pend_any != 0);
-   assign lsu_bus_buffer_full_any = (ldst_dual_d & dec_lsu_valid_raw_d) ? (buf_numvld_any[3:0] >= (DEPTH-1)) : (buf_numvld_any[3:0] == DEPTH);
-   assign lsu_bus_buffer_empty_any = ~(|buf_state[DEPTH-1:0]) & ~ibuf_valid & ~obuf_valid;
-
-
-   // Non blocking ports
-   assign lsu_nonblock_load_valid_m = lsu_busreq_m & lsu_pkt_m.valid & lsu_pkt_m.load & ~flush_m_up & ~ld_full_hit_m;
-   assign lsu_nonblock_load_tag_m[DEPTH_LOG2-1:0] = WrPtr0_m[DEPTH_LOG2-1:0];
-   assign lsu_nonblock_load_inv_r = lsu_nonblock_load_valid_r & ~lsu_commit_r;
-   assign lsu_nonblock_load_inv_tag_r[DEPTH_LOG2-1:0] = WrPtr0_r[DEPTH_LOG2-1:0];      // r tag needs to be accurate even if there is no invalidate
-
-   always_comb begin
-      lsu_nonblock_load_data_ready = '0;
-      lsu_nonblock_load_data_error = '0;
-      lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0] = '0;
-      lsu_nonblock_load_data_lo[31:0] = '0;
-      lsu_nonblock_load_data_hi[31:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-          // Use buf_rst[i] instead of buf_state_en[i] for timing
-          lsu_nonblock_load_data_ready      |= (buf_state[i] == DONE) & ~buf_write[i];
-          lsu_nonblock_load_data_error      |= (buf_state[i] == DONE) & buf_error[i] & ~buf_write[i];
-          lsu_nonblock_load_data_tag[DEPTH_LOG2-1:0]   |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_lo[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (~buf_dual[i] | ~buf_dualhi[i]))}};
-          lsu_nonblock_load_data_hi[31:0]     |= buf_data[i][31:0] & {32{((buf_state[i] == DONE) & ~buf_write[i] & (buf_dual[i] & buf_dualhi[i]))}};
-      end
-   end
-
-   assign lsu_nonblock_addr_offset[1:0] = buf_addr[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_sz[1:0]          = buf_sz[lsu_nonblock_load_data_tag][1:0];
-   assign lsu_nonblock_unsign           = buf_unsign[lsu_nonblock_load_data_tag];
-   assign lsu_nonblock_data_unalgn[31:0] = 32'({lsu_nonblock_load_data_hi[31:0], lsu_nonblock_load_data_lo[31:0]} >> 8*lsu_nonblock_addr_offset[1:0]);
-
-   assign lsu_nonblock_load_data_valid = lsu_nonblock_load_data_ready & ~lsu_nonblock_load_data_error;
-   assign lsu_nonblock_load_data[31:0] = ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {24'b0,lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{ lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {16'b0,lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {{24{lsu_nonblock_data_unalgn[7]}}, lsu_nonblock_data_unalgn[7:0]}) |
-                                         ({32{~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {{16{lsu_nonblock_data_unalgn[15]}},lsu_nonblock_data_unalgn[15:0]}) |
-                                         ({32{(lsu_nonblock_sz[1:0] == 2'b10)}} & lsu_nonblock_data_unalgn[31:0]);
-
-   // Determine if there is a pending return to sideeffect load/store
-   always_comb begin
-      bus_sideeffect_pend = obuf_valid & obuf_sideeffect & dec_tlu_sideeffect_posted_disable;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_sideeffect_pend |= ((buf_state[i] == RESP) & buf_sideeffect[i] & dec_tlu_sideeffect_posted_disable);
-      end
-   end
-
-   // We have no ordering rules for AXI. Need to check outstanding trxns to same address for AXI
-   always_comb begin
-      bus_addr_match_pending = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         bus_addr_match_pending |= (obuf_valid & (obuf_addr[31:3] == buf_addr[i][31:3]) & (buf_state[i] == RESP) & ~((obuf_tag0 == (pt.LSU_BUS_TAG)'(i)) | (obuf_merge & (obuf_tag1 == (pt.LSU_BUS_TAG)'(i)))));
-      end
-   end
-
-   // Generic bus signals
-   assign bus_cmd_ready                      = obuf_write ? ((obuf_cmd_done | obuf_data_done) ? (obuf_cmd_done ? lsu_axi_wready : lsu_axi_awready) : (lsu_axi_awready & lsu_axi_wready)) : lsu_axi_arready;
-   assign bus_wcmd_sent                      = lsu_axi_awvalid & lsu_axi_awready;
-   assign bus_wdata_sent                     = lsu_axi_wvalid & lsu_axi_wready;
-   assign bus_cmd_sent                       = ((obuf_cmd_done | bus_wcmd_sent) & (obuf_data_done | bus_wdata_sent)) | (lsu_axi_arvalid & lsu_axi_arready);
-
-   assign bus_rsp_read                       = lsu_axi_rvalid & lsu_axi_rready;
-   assign bus_rsp_write                      = lsu_axi_bvalid & lsu_axi_bready;
-   assign bus_rsp_read_tag[pt.LSU_BUS_TAG-1:0]  = lsu_axi_rid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_tag[pt.LSU_BUS_TAG-1:0] = lsu_axi_bid[pt.LSU_BUS_TAG-1:0];
-   assign bus_rsp_write_error                = bus_rsp_write & (lsu_axi_bresp[1:0] != 2'b0);
-   assign bus_rsp_read_error                 = bus_rsp_read  & (lsu_axi_rresp[1:0] != 2'b0);
-   assign bus_rsp_rdata[63:0]                = lsu_axi_rdata[63:0];
-
-   // AXI command signals
-   assign lsu_axi_awvalid               = obuf_valid & obuf_write & ~obuf_cmd_done & ~bus_addr_match_pending;
-   assign lsu_axi_awid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_awaddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_awsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_awprot[2:0]           = 3'b001;
-   assign lsu_axi_awcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_awregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_awlen[7:0]            = '0;
-   assign lsu_axi_awburst[1:0]          = 2'b01;
-   assign lsu_axi_awqos[3:0]            = '0;
-   assign lsu_axi_awlock                = '0;
-
-   assign lsu_axi_wvalid                = obuf_valid & obuf_write & ~obuf_data_done & ~bus_addr_match_pending;
-   assign lsu_axi_wstrb[7:0]            = obuf_byteen[7:0] & {8{obuf_write}};
-   assign lsu_axi_wdata[63:0]           = obuf_data[63:0];
-   assign lsu_axi_wlast                 = '1;
-
-   assign lsu_axi_arvalid               = obuf_valid & ~obuf_write & ~obuf_nosend & ~bus_addr_match_pending;
-   assign lsu_axi_arid[pt.LSU_BUS_TAG-1:0] = (pt.LSU_BUS_TAG)'(obuf_tag0);
-   assign lsu_axi_araddr[31:0]          = obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3],3'b0};
-   assign lsu_axi_arsize[2:0]           = obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011;
-   assign lsu_axi_arprot[2:0]           = 3'b001;
-   assign lsu_axi_arcache[3:0]          = obuf_sideeffect ? 4'b0 : 4'b1111;
-   assign lsu_axi_arregion[3:0]         = obuf_addr[31:28];
-   assign lsu_axi_arlen[7:0]            = '0;
-   assign lsu_axi_arburst[1:0]          = 2'b01;
-   assign lsu_axi_arqos[3:0]            = '0;
-   assign lsu_axi_arlock                = '0;
-
-   assign lsu_axi_bready = 1;
-   assign lsu_axi_rready = 1;
-
-   always_comb begin
-      lsu_imprecise_error_store_any = '0;
-      lsu_imprecise_error_store_tag = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         lsu_imprecise_error_store_any |= lsu_bus_clk_en_q & (buf_state[i] == DONE) & buf_error[i] & buf_write[i];
-         lsu_imprecise_error_store_tag |= DEPTH_LOG2'(i) & {DEPTH_LOG2{((buf_state[i] == DONE) & buf_error[i] & buf_write[i])}};
-      end
-   end
-   assign lsu_imprecise_error_load_any       = lsu_nonblock_load_data_error & ~lsu_imprecise_error_store_any;   // This is to make sure we send only one imprecise error for load/store
-   assign lsu_imprecise_error_addr_any[31:0] = lsu_imprecise_error_store_any ? buf_addr[lsu_imprecise_error_store_tag] : buf_addr[lsu_nonblock_load_data_tag];
-
-   // PMU signals
-   assign lsu_pmu_bus_trxn  = (lsu_axi_awvalid & lsu_axi_awready) | (lsu_axi_wvalid & lsu_axi_wready) | (lsu_axi_arvalid & lsu_axi_arready);
-   assign lsu_pmu_bus_misaligned = lsu_busreq_r & ldst_dual_r & lsu_commit_r;
-   assign lsu_pmu_bus_error = lsu_imprecise_error_load_any | lsu_imprecise_error_store_any;
-   assign lsu_pmu_bus_busy  = (lsu_axi_awvalid & ~lsu_axi_awready) | (lsu_axi_wvalid & ~lsu_axi_wready) | (lsu_axi_arvalid & ~lsu_axi_arready);
-
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awvalid_ff (.din(lsu_axi_awvalid),                .dout(lsu_axi_awvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_awready_ff (.din(lsu_axi_awready),                .dout(lsu_axi_awready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wvalid_ff  (.din(lsu_axi_wvalid),                 .dout(lsu_axi_wvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_wready_ff  (.din(lsu_axi_wready),                 .dout(lsu_axi_wready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arvalid_ff (.din(lsu_axi_arvalid),                .dout(lsu_axi_arvalid_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga #(.WIDTH(1))               lsu_axi_arready_ff (.din(lsu_axi_arready),                .dout(lsu_axi_arready_q),                .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bvalid_ff  (.din(lsu_axi_bvalid),                 .dout(lsu_axi_bvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_bready_ff  (.din(lsu_axi_bready),                 .dout(lsu_axi_bready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_bresp_ff   (.din(lsu_axi_bresp[1:0]),             .dout(lsu_axi_bresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_bid_ff     (.din(lsu_axi_bid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_bid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdffe      #(.WIDTH(64))             lsu_axi_rdata_ff   (.din(lsu_axi_rdata[63:0]),            .dout(lsu_axi_rdata_q[63:0]),            .en((lsu_axi_rvalid | clk_override) & lsu_bus_clk_en), .*);
-
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rvalid_ff  (.din(lsu_axi_rvalid),                 .dout(lsu_axi_rvalid_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(1))              lsu_axi_rready_ff  (.din(lsu_axi_rready),                 .dout(lsu_axi_rready_q),                 .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(2))              lsu_axi_rresp_ff   (.din(lsu_axi_rresp[1:0]),             .dout(lsu_axi_rresp_q[1:0]),             .clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-   rvdff_fpga  #(.WIDTH(pt.LSU_BUS_TAG)) lsu_axi_rid_ff     (.din(lsu_axi_rid[pt.LSU_BUS_TAG-1:0]),.dout(lsu_axi_rid_q[pt.LSU_BUS_TAG-1:0]),.clk(lsu_busm_clk), .clken(lsu_busm_clken), .rawclk(clk), .*);
-
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr0_rff (.din(WrPtr0_m), .dout(WrPtr0_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr1_rff (.din(WrPtr1_m), .dout(WrPtr1_r), .clk(lsu_c2_r_clk), .*);
-
-   rvdff #(.WIDTH(1)) lsu_busreq_rff (.din(lsu_busreq_m & ~flush_r & ~ld_full_hit_m),      .dout(lsu_busreq_r), .clk(lsu_c2_r_clk), .*);
-   rvdff #(.WIDTH(1)) lsu_nonblock_load_valid_rff  (.din(lsu_nonblock_load_valid_m),  .dout(lsu_nonblock_load_valid_r), .clk(lsu_c2_r_clk), .*);
-
-
-endmodule // eb1_lsu_bus_buffer
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: lsu interface with interface queue
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_bus_intf
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic                          clk,                                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                          clk_override,                       // Override non-functional clock gating
-   input logic                          rst_l,                              // reset, active low
-   input logic                          scan_mode,                          // scan mode
-   input logic                          dec_tlu_external_ldfwd_disable,     // disable load to load forwarding for externals
-   input logic                          dec_tlu_wb_coalescing_disable,      // disable write buffer coalescing
-   input logic                          dec_tlu_sideeffect_posted_disable,  // disable the posted sideeffect load store to the bus
-
-   // various clocks needed for the bus reads and writes
-   input logic                          lsu_bus_obuf_c1_clken,              // obuf clock enable
-   input logic                          lsu_busm_clken,                     // bus clock enable
-
-   input logic                          lsu_c1_r_clk,                       // r pipe single pulse clock
-   input logic                          lsu_c2_r_clk,                       // r pipe double pulse clock
-   input logic                          lsu_bus_ibuf_c1_clk,                // ibuf single pulse clock
-   input logic                          lsu_bus_obuf_c1_clk,                // obuf single pulse clock
-   input logic                          lsu_bus_buf_c1_clk,                 // buf  single pulse clock
-   input logic                          lsu_free_c2_clk,                    // free clock double pulse clock
-   input logic                          active_clk,                         // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic                          lsu_busm_clk,                       // bus clock
-
-   input logic                          dec_lsu_valid_raw_d,               // Raw valid for address computation
-   input logic                          lsu_busreq_m,                      // bus request is in m
-
-   input                                eb1_lsu_pkt_t lsu_pkt_m,          // lsu packet flowing down the pipe
-   input                                eb1_lsu_pkt_t lsu_pkt_r,          // lsu packet flowing down the pipe
-
-   input logic [31:0]                   lsu_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   lsu_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   end_addr_m,                        // lsu address flowing down the pipe
-   input logic [31:0]                   end_addr_r,                        // lsu address flowing down the pipe
-
-   input logic [31:0]                   store_data_r,                      // store data flowing down the pipe
-   input logic                          dec_tlu_force_halt,
-
-   input logic                          lsu_commit_r,                      // lsu instruction in r commits
-   input logic                          is_sideeffects_m,                  // lsu attribute is side_effects
-   input logic                          flush_m_up,                        // flush
-   input logic                          flush_r,                           // flush
-   input logic                          ldst_dual_d, ldst_dual_m, ldst_dual_r,
-
-   output logic                         lsu_busreq_r,                      // bus request is in r
-   output logic                         lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   output logic                         lsu_bus_buffer_full_any,           // write buffer is full
-   output logic                         lsu_bus_buffer_empty_any,          // write buffer is empty
-   output logic [31:0]                  bus_read_data_m,                   // the bus return data
-
-
-   output logic                         lsu_imprecise_error_load_any,      // imprecise load bus error
-   output logic                         lsu_imprecise_error_store_any,     // imprecise store bus error
-   output logic [31:0]                  lsu_imprecise_error_addr_any,      // address of the imprecise error
-
-   // Non-blocking loads
-   output logic                               lsu_nonblock_load_valid_m,   // there is an external load -> put in the cam
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_tag_m,     // the tag of the external non block load
-   output logic                               lsu_nonblock_load_inv_r,     // invalidate signal for the cam entry for non block loads
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_inv_tag_r, // tag of the enrty which needs to be invalidated
-   output logic                               lsu_nonblock_load_data_valid,// the non block is valid - sending information back to the cam
-   output logic                               lsu_nonblock_load_data_error,// non block load has an error
-   output logic [pt.LSU_NUM_NBLOAD_WIDTH-1:0] lsu_nonblock_load_data_tag,  // the tag of the non block load sending the data/error
-   output logic [31:0]                        lsu_nonblock_load_data,      // Data of the non block load
-
-   // PMU events
-   output logic                         lsu_pmu_bus_trxn,
-   output logic                         lsu_pmu_bus_misaligned,
-   output logic                         lsu_pmu_bus_error,
-   output logic                         lsu_pmu_bus_busy,
-
-   // AXI Write Channels
-   output logic                        lsu_axi_awvalid,
-   input  logic                        lsu_axi_awready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_awid,
-   output logic [31:0]                 lsu_axi_awaddr,
-   output logic [3:0]                  lsu_axi_awregion,
-   output logic [7:0]                  lsu_axi_awlen,
-   output logic [2:0]                  lsu_axi_awsize,
-   output logic [1:0]                  lsu_axi_awburst,
-   output logic                        lsu_axi_awlock,
-   output logic [3:0]                  lsu_axi_awcache,
-   output logic [2:0]                  lsu_axi_awprot,
-   output logic [3:0]                  lsu_axi_awqos,
-
-   output logic                        lsu_axi_wvalid,
-   input  logic                        lsu_axi_wready,
-   output logic [63:0]                 lsu_axi_wdata,
-   output logic [7:0]                  lsu_axi_wstrb,
-   output logic                        lsu_axi_wlast,
-
-   input  logic                        lsu_axi_bvalid,
-   output logic                        lsu_axi_bready,
-   input  logic [1:0]                  lsu_axi_bresp,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_bid,
-
-   // AXI Read Channels
-   output logic                        lsu_axi_arvalid,
-   input  logic                        lsu_axi_arready,
-   output logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_arid,
-   output logic [31:0]                 lsu_axi_araddr,
-   output logic [3:0]                  lsu_axi_arregion,
-   output logic [7:0]                  lsu_axi_arlen,
-   output logic [2:0]                  lsu_axi_arsize,
-   output logic [1:0]                  lsu_axi_arburst,
-   output logic                        lsu_axi_arlock,
-   output logic [3:0]                  lsu_axi_arcache,
-   output logic [2:0]                  lsu_axi_arprot,
-   output logic [3:0]                  lsu_axi_arqos,
-
-   input  logic                        lsu_axi_rvalid,
-   output logic                        lsu_axi_rready,
-   input  logic [pt.LSU_BUS_TAG-1:0]   lsu_axi_rid,
-   input  logic [63:0]                 lsu_axi_rdata,
-   input  logic [1:0]                  lsu_axi_rresp,
-
-   input logic                         lsu_bus_clk_en
-
-);
-
-
-
-   logic              lsu_bus_clk_en_q;
-
-   logic [3:0]        ldst_byteen_m, ldst_byteen_r;
-   logic [7:0]        ldst_byteen_ext_m, ldst_byteen_ext_r;
-   logic [3:0]        ldst_byteen_hi_m, ldst_byteen_hi_r;
-   logic [3:0]        ldst_byteen_lo_m, ldst_byteen_lo_r;
-   logic              is_sideeffects_r;
-
-   logic [63:0]       store_data_ext_r;
-   logic [31:0]       store_data_hi_r;
-   logic [31:0]       store_data_lo_r;
-
-   logic              addr_match_dw_lo_r_m;
-   logic              addr_match_word_lo_r_m;
-   logic              no_word_merge_r, no_dword_merge_r;
-
-   logic              ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-   logic [3:0]        ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-
-   logic [3:0]        ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [3:0]        ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   logic [3:0]        ld_byte_hit_buf_lo, ld_byte_hit_buf_hi;
-   logic [31:0]       ld_fwddata_buf_lo, ld_fwddata_buf_hi;
-
-   logic [63:0]       ld_fwddata_lo, ld_fwddata_hi;
-   logic [63:0]       ld_fwddata_m;
-
-   logic              ld_full_hit_hi_m, ld_full_hit_lo_m;
-   logic              ld_full_hit_m;
-
-   assign ldst_byteen_m[3:0] = ({4{lsu_pkt_m.by}}   & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}} & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}} & 4'b1111);
-
-   // Read/Write Buffer
-   eb1_lsu_bus_buffer #(.pt(pt)) bus_buffer (
-      .*
-   );
-
-   // Logic to determine if dc5 store can be coalesced or not with younger stores. Bypass ibuf if cannot colaesced
-   assign addr_match_dw_lo_r_m = (lsu_addr_r[31:3] == lsu_addr_m[31:3]);
-   assign addr_match_word_lo_r_m = addr_match_dw_lo_r_m & ~(lsu_addr_r[2]^lsu_addr_m[2]);
-
-   assign no_word_merge_r  = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_word_lo_r_m);
-   assign no_dword_merge_r = lsu_busreq_r & ~ldst_dual_r & lsu_busreq_m & (lsu_pkt_m.load | ~addr_match_dw_lo_r_m);
-
-   // Create Hi/Lo signals
-   assign ldst_byteen_ext_m[7:0] = {4'b0,ldst_byteen_m[3:0]} << lsu_addr_m[1:0];
-   assign ldst_byteen_ext_r[7:0] = {4'b0,ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-   assign store_data_ext_r[63:0] = {32'b0,store_data_r[31:0]} << {lsu_addr_r[1:0],3'b0};
-
-   assign ldst_byteen_hi_m[3:0]   = ldst_byteen_ext_m[7:4];
-   assign ldst_byteen_lo_m[3:0]   = ldst_byteen_ext_m[3:0];
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign store_data_hi_r[31:0]   = store_data_ext_r[63:32];
-   assign store_data_lo_r[31:0]   = store_data_ext_r[31:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & lsu_busreq_m;
-
-   for (genvar i=0; i<4; i++) begin: GenBusBufFwd
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i] & ldst_byteen_hi_m[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i] & ldst_byteen_lo_m[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i] & ldst_byteen_hi_m[i];
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i] |
-                                 ld_byte_hit_buf_lo[i];
-
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i] |
-                                 ld_byte_hit_buf_hi[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                    ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      // Final muxing between m/r
-      assign ld_fwddata_lo[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : ld_fwddata_buf_lo[(8*i)+7:(8*i)];
-
-      assign ld_fwddata_hi[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : ld_fwddata_buf_hi[(8*i)+7:(8*i)];
-
-   end
-
-   always_comb begin
-      ld_full_hit_lo_m = 1'b1;
-      ld_full_hit_hi_m = 1'b1;
-      for (int i=0; i<4; i++) begin
-         ld_full_hit_lo_m &= (ld_byte_hit_lo[i] | ~ldst_byteen_lo_m[i]);
-         ld_full_hit_hi_m &= (ld_byte_hit_hi[i] | ~ldst_byteen_hi_m[i]);
-      end
-   end
-
-   // This will be high if all the bytes of load hit the stores in pipe/write buffer (m/r/wrbuf)
-   assign ld_full_hit_m = ld_full_hit_lo_m & ld_full_hit_hi_m & lsu_busreq_m & lsu_pkt_m.load & ~is_sideeffects_m;
-
-   assign ld_fwddata_m[63:0] = {ld_fwddata_hi[31:0], ld_fwddata_lo[31:0]} >> (8*lsu_addr_m[1:0]);
-   assign bus_read_data_m[31:0]                        = ld_fwddata_m[31:0];
-
-   // Fifo flops
-
-   rvdff #(.WIDTH(1)) clken_ff (.din(lsu_bus_clk_en), .dout(lsu_bus_clk_en_q), .clk(active_clk), .*);
-
-   rvdff #(.WIDTH(1)) is_sideeffects_rff (.din(is_sideeffects_m), .dout(is_sideeffects_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(4) lsu_byten_rff (.*, .din(ldst_byteen_m[3:0]), .dout(ldst_byteen_r[3:0]), .clk(lsu_c1_r_clk));
-
-endmodule // eb1_lsu_bus_intf
-
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Clock Generation Block
-// Comments: All the clocks are generate here
-//
-// //********************************************************************************
-
-
-module eb1_lsu_clkdomain
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic      clk,                               // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic      active_clk,                        // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic      rst_l,                             // reset, active low
-   input logic      dec_tlu_force_halt,                // This will be high till TLU goes to debug halt
-
-   // Inputs
-   input logic      clk_override,                      // chciken bit to turn off clock gating
-   input logic      dma_dccm_req,                      // dma is active
-   input logic      ldst_stbuf_reqvld_r,               // allocating in to the store queue
-
-   input logic      stbuf_reqvld_any,                  // stbuf is draining
-   input logic      stbuf_reqvld_flushed_any,          // instruction going to stbuf is flushed
-   input logic      lsu_busreq_r,                      // busreq in r
-   input logic      lsu_bus_buffer_pend_any,           // bus buffer has a pending bus entry
-   input logic      lsu_bus_buffer_empty_any,          // external bus buffer is empty
-   input logic      lsu_stbuf_empty_any,               // stbuf is empty
-
-   input logic      lsu_bus_clk_en,                    // bus clock enable
-
-   input eb1_lsu_pkt_t  lsu_p,                        // lsu packet in decode
-   input eb1_lsu_pkt_t  lsu_pkt_d,                    // lsu packet in d
-   input eb1_lsu_pkt_t  lsu_pkt_m,                    // lsu packet in m
-   input eb1_lsu_pkt_t  lsu_pkt_r,                    // lsu packet in r
-
-   // Outputs
-   output logic     lsu_bus_obuf_c1_clken,             // obuf clock enable
-   output logic     lsu_busm_clken,                    // bus clock enable
-
-   output logic     lsu_c1_m_clk,                      // m pipe single pulse clock
-   output logic     lsu_c1_r_clk,                      // r pipe single pulse clock
-
-   output logic     lsu_c2_m_clk,                      // m pipe double pulse clock
-   output logic     lsu_c2_r_clk,                      // r pipe double pulse clock
-
-   output logic     lsu_store_c1_m_clk,                // store in m
-   output logic     lsu_store_c1_r_clk,                // store in r
-
-   output logic     lsu_stbuf_c1_clk,
-   output logic     lsu_bus_obuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_ibuf_c1_clk,               // ibuf clock
-   output logic     lsu_bus_buf_c1_clk,                // ibuf clock
-   output logic     lsu_busm_clk,                      // bus clock
-
-   output logic     lsu_free_c2_clk,                   // free double pulse clock
-
-   input  logic     scan_mode                          // Scan mode
-);
-
-   logic lsu_c1_m_clken, lsu_c1_r_clken;
-   logic lsu_c2_m_clken, lsu_c2_r_clken;
-   logic lsu_c1_m_clken_q, lsu_c1_r_clken_q;
-   logic lsu_store_c1_m_clken, lsu_store_c1_r_clken;
-
-
-   logic lsu_stbuf_c1_clken;
-   logic lsu_bus_ibuf_c1_clken, lsu_bus_buf_c1_clken;
-
-   logic lsu_free_c1_clken, lsu_free_c1_clken_q, lsu_free_c2_clken;
-
-   //-------------------------------------------------------------------------------------------
-   // Clock Enable logic
-   //-------------------------------------------------------------------------------------------
-
-   assign lsu_c1_m_clken = lsu_p.valid | dma_dccm_req | clk_override;
-   assign lsu_c1_r_clken = lsu_pkt_m.valid | lsu_c1_m_clken_q | clk_override;
-
-   assign lsu_c2_m_clken = lsu_c1_m_clken | lsu_c1_m_clken_q | clk_override;
-   assign lsu_c2_r_clken = lsu_c1_r_clken | lsu_c1_r_clken_q | clk_override;
-
-   assign lsu_store_c1_m_clken = ((lsu_c1_m_clken & lsu_pkt_d.store) | clk_override) ;
-   assign lsu_store_c1_r_clken = ((lsu_c1_r_clken & lsu_pkt_m.store) | clk_override) ;
-
-   assign lsu_stbuf_c1_clken = ldst_stbuf_reqvld_r | stbuf_reqvld_any | stbuf_reqvld_flushed_any | clk_override;
-   assign lsu_bus_ibuf_c1_clken = lsu_busreq_r | clk_override;
-   assign lsu_bus_obuf_c1_clken = (lsu_bus_buffer_pend_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-   assign lsu_bus_buf_c1_clken  = ~lsu_bus_buffer_empty_any | lsu_busreq_r | dec_tlu_force_halt | clk_override;
-
-   assign lsu_free_c1_clken = (lsu_p.valid | lsu_pkt_d.valid | lsu_pkt_m.valid | lsu_pkt_r.valid) |
-                              ~lsu_bus_buffer_empty_any | ~lsu_stbuf_empty_any | clk_override;
-   assign lsu_free_c2_clken = lsu_free_c1_clken | lsu_free_c1_clken_q | clk_override;
-
-    // Flops
-   rvdff #(1) lsu_free_c1_clkenff (.din(lsu_free_c1_clken), .dout(lsu_free_c1_clken_q), .clk(active_clk), .*);
-
-   rvdff #(1) lsu_c1_m_clkenff (.din(lsu_c1_m_clken), .dout(lsu_c1_m_clken_q), .clk(lsu_free_c2_clk), .*);
-   rvdff #(1) lsu_c1_r_clkenff (.din(lsu_c1_r_clken), .dout(lsu_c1_r_clken_q), .clk(lsu_free_c2_clk), .*);
-
-   // Clock Headers
-   rvoclkhdr lsu_c1m_cgc ( .en(lsu_c1_m_clken), .l1clk(lsu_c1_m_clk), .* );
-   rvoclkhdr lsu_c1r_cgc ( .en(lsu_c1_r_clken), .l1clk(lsu_c1_r_clk), .* );
-
-   rvoclkhdr lsu_c2m_cgc ( .en(lsu_c2_m_clken), .l1clk(lsu_c2_m_clk), .* );
-   rvoclkhdr lsu_c2r_cgc ( .en(lsu_c2_r_clken), .l1clk(lsu_c2_r_clk), .* );
-
-   rvoclkhdr lsu_store_c1m_cgc (.en(lsu_store_c1_m_clken), .l1clk(lsu_store_c1_m_clk), .*);
-   rvoclkhdr lsu_store_c1r_cgc (.en(lsu_store_c1_r_clken), .l1clk(lsu_store_c1_r_clk), .*);
-
-   rvoclkhdr lsu_stbuf_c1_cgc ( .en(lsu_stbuf_c1_clken), .l1clk(lsu_stbuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_ibuf_c1_cgc ( .en(lsu_bus_ibuf_c1_clken), .l1clk(lsu_bus_ibuf_c1_clk), .* );
-   rvoclkhdr lsu_bus_buf_c1_cgc  ( .en(lsu_bus_buf_c1_clken),  .l1clk(lsu_bus_buf_c1_clk), .* );
-
-   assign lsu_busm_clken = (~lsu_bus_buffer_empty_any | lsu_busreq_r | clk_override) & lsu_bus_clk_en;
-
-   rvclkhdr  lsu_bus_obuf_c1_cgc ( .en(lsu_bus_obuf_c1_clken), .l1clk(lsu_bus_obuf_c1_clk), .* );
-   rvclkhdr  lsu_busm_cgc (.en(lsu_busm_clken), .l1clk(lsu_busm_clk), .*);
-
-
-   rvoclkhdr lsu_free_cgc (.en(lsu_free_c2_clken), .l1clk(lsu_free_c2_clk), .*);
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-module eb1_lsu_dccm_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-  (
-   input logic                             lsu_c2_m_clk,            // clocks
-   input logic                             lsu_c2_r_clk,            // clocks
-   input logic                             lsu_c1_r_clk,            // clocks
-   input logic                             lsu_store_c1_r_clk,      // clocks
-   input logic                             lsu_free_c2_clk,         // clocks
-   input logic                             clk_override,            // Override non-functional clock gating
-   input logic                             clk,                     // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   input logic                             rst_l,                   // reset, active low
-
-   input                                   eb1_lsu_pkt_t lsu_pkt_r,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_m,// lsu packets
-   input                                   eb1_lsu_pkt_t lsu_pkt_d,// lsu packets
-   input logic                             addr_in_dccm_d,          // address maps to dccm
-   input logic                             addr_in_pic_d,           // address maps to pic
-   input logic                             addr_in_pic_m,           // address maps to pic
-   input logic                             addr_in_dccm_m, addr_in_dccm_r,   // address in dccm per pipe stage
-   input logic                             addr_in_pic_r,                    // address in pic  per pipe stage
-   input logic                             lsu_raw_fwd_lo_r, lsu_raw_fwd_hi_r,
-   input logic                             lsu_commit_r,            // lsu instruction in r commits
-   input logic                             ldst_dual_m, ldst_dual_r,// load/store is unaligned at 32 bit boundary per pipe stage
-
-   // lsu address down the pipe
-   input logic [31:0]                      lsu_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          lsu_addr_m,
-   input logic [31:0]                      lsu_addr_r,
-
-   // lsu address down the pipe - needed to check unaligned
-   input logic [pt.DCCM_BITS-1:0]          end_addr_d,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_m,
-   input logic [pt.DCCM_BITS-1:0]          end_addr_r,
-
-
-   input logic                             stbuf_reqvld_any,        // write enable
-   input logic [pt.LSU_SB_BITS-1:0]        stbuf_addr_any,          // stbuf address (aligned)
-
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_data_any,          // the read out from stbuf
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     stbuf_ecc_any,           // the encoded data with ECC bits
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_hi_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    stbuf_fwddata_lo_m,      // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_hi_m,    // stbuf fowarding to load
-   input logic [pt.DCCM_BYTE_WIDTH-1:0]    stbuf_fwdbyteen_lo_m,    // stbuf fowarding to load
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_r,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_r,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_r,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_r,           // right justified, ie load byte will have data at 7:0
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_corr_r,      // right justified & ECC corrected, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_r,  // lsu has a DED
-   input logic                             single_ecc_error_hi_r,   // sec detected on hi dccm bank
-   input logic                             single_ecc_error_lo_r,   // sec detected on lower dccm bank
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_r_ff,        // corrected dccm data
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_hi_r_ff,    // the encoded data with ECC bits
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     sec_data_ecc_lo_r_ff,    // the encoded data with ECC bits
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_hi_m,         // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   dccm_rdata_lo_m,         // data from the dccm
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_hi_m,      // data from the dccm + ecc
-   output logic [pt.DCCM_ECC_WIDTH-1:0]    dccm_data_ecc_lo_m,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   lsu_ld_data_m,           // right justified, ie load byte will have data at 7:0
-
-   input logic                             lsu_double_ecc_error_m,  // lsu has a DED
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_hi_m,           // corrected dccm data
-   input logic [pt.DCCM_DATA_WIDTH-1:0]    sec_data_lo_m,           // corrected dccm data
-
-   input logic [31:0]                      store_data_m,            // Store data M-stage
-   input logic                             dma_dccm_wen,            // Perform DMA writes only for word/dword
-   input logic                             dma_pic_wen,             // Perform PIC writes
-   input logic [2:0]                       dma_mem_tag_m,           // DMA Buffer entry number M-stage
-   input logic [31:0]                      dma_mem_addr,            // DMA request address
-   input logic [63:0]                      dma_mem_wdata,           // DMA write data
-   input logic [31:0]                      dma_dccm_wdata_lo,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [31:0]                      dma_dccm_wdata_hi,       // Shift the dma data to lower bits to make it consistent to lsu stores
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_hi,   // ECC bits for the DMA wdata
-   input logic [pt.DCCM_ECC_WIDTH-1:0]     dma_dccm_wdata_ecc_lo,   // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_hi_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_data_lo_r,
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_hi_r,       // data from the dccm
-   output logic [pt.DCCM_DATA_WIDTH-1:0]   store_datafn_lo_r,       // data from the dccm
-   output logic [31:0]                     store_data_r,            // raw store data to be sent to bus
-   output logic                            ld_single_ecc_error_r,
-   output logic                            ld_single_ecc_error_r_ff,
-
-   output logic [31:0]                     picm_mask_data_m,        // pic data to stbuf
-   output logic                            lsu_stbuf_commit_any,    // stbuf wins the dccm port or is to pic
-   output logic                            lsu_dccm_rden_m,         // dccm read
-   output logic                            lsu_dccm_rden_r,         // dccm read
-
-   output logic                            dccm_dma_rvalid,         // dccm serviving the dma load
-   output logic                            dccm_dma_ecc_error,      // DMA load had ecc error
-   output logic [2:0]                      dccm_dma_rtag,           // DMA return tag
-   output logic [63:0]                     dccm_dma_rdata,          // dccm data to dma request
-
-   // DCCM ports
-   output logic                            dccm_wren,               // dccm interface -- write
-   output logic                            dccm_rden,               // dccm interface -- write
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_lo,         // dccm interface -- wr addr for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_wr_addr_hi,         // dccm interface -- wr addr for hi bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_lo,         // dccm interface -- read address for lo bank
-   output logic [pt.DCCM_BITS-1:0]         dccm_rd_addr_hi,         // dccm interface -- read address for hi bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,         // dccm write data for lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,         // dccm write data for hi bank
-
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_lo,         // dccm read data back from the dccm
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]   dccm_rd_data_hi,         // dccm read data back from the dccm
-
-   // PIC ports
-   output logic                            picm_wren,               // write to pic
-   output logic                            picm_rden,               // read to pick
-   output logic                            picm_mken,               // write to pic need a mask
-   output logic [31:0]                     picm_rdaddr,             // address for pic read access
-   output logic [31:0]                     picm_wraddr,             // address for pic write access
-   output logic [31:0]                     picm_wr_data,            // write data
-   input logic [31:0]                      picm_rd_data,            // read data
-
-   input logic                             scan_mode                // scan mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-
-   logic                           lsu_dccm_rden_d, lsu_dccm_wren_d;
-   logic                           ld_single_ecc_error_lo_r, ld_single_ecc_error_hi_r;
-   logic                           ld_single_ecc_error_lo_r_ns, ld_single_ecc_error_hi_r_ns;
-   logic                           ld_single_ecc_error_lo_r_ff, ld_single_ecc_error_hi_r_ff;
-   logic                           lsu_double_ecc_error_r_ff;
-   logic [pt.DCCM_BITS-1:0]        ld_sec_addr_lo_r_ff, ld_sec_addr_hi_r_ff;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r_in, store_data_hi_r_in ;
-   logic [63:0]                    picm_rd_data_m;
-
-   logic                           dccm_wr_bypass_d_m_hi, dccm_wr_bypass_d_r_hi;
-   logic                           dccm_wr_bypass_d_m_lo, dccm_wr_bypass_d_r_lo;
-   logic                           kill_ecc_corr_lo_r, kill_ecc_corr_hi_r;
-
-    // byte_en flowing down
-   logic [3:0]                     store_byteen_m ,store_byteen_r;
-   logic [7:0]                     store_byteen_ext_m, store_byteen_ext_r;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic [63:0]  lsu_rdata_r, lsu_rdata_corr_r;
-      logic [63:0]  dccm_rdata_r, dccm_rdata_corr_r;
-      logic [63:0]  stbuf_fwddata_r;
-      logic [7:0]   stbuf_fwdbyteen_r;
-      logic [31:0]  stbuf_fwddata_lo_r, stbuf_fwddata_hi_r;
-      logic [3:0]   stbuf_fwdbyteen_lo_r, stbuf_fwdbyteen_hi_r;
-      logic [31:0]  lsu_rdata_lo_r, lsu_rdata_hi_r;
-      logic [63:0]  picm_rd_data_r;
-      logic [63:32] lsu_ld_data_r_nc, lsu_ld_data_corr_r_nc;
-      logic [2:0]   dma_mem_tag_r;
-      logic         stbuf_fwddata_en;
-
-      assign dccm_dma_rvalid      = lsu_pkt_r.valid & lsu_pkt_r.load & lsu_pkt_r.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_r;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_r[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_r ? lsu_rdata_corr_r[63:0] : {2{lsu_rdata_corr_r[31:0]}};
-      assign {lsu_ld_data_r_nc[63:32], lsu_ld_data_r[31:0]}           = lsu_rdata_r[63:0] >> 8*lsu_addr_r[1:0];
-      assign {lsu_ld_data_corr_r_nc[63:32], lsu_ld_data_corr_r[31:0]} = lsu_rdata_corr_r[63:0] >> 8*lsu_addr_r[1:0];
-
-      assign picm_rd_data_r[63:32]   = picm_rd_data_r[31:0];
-      assign dccm_rdata_r[63:0]      = {dccm_rdata_hi_r[31:0],dccm_rdata_lo_r[31:0]};
-      assign dccm_rdata_corr_r[63:0] = {sec_data_hi_r[31:0],sec_data_lo_r[31:0]};
-      assign stbuf_fwddata_r[63:0]   = {stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]};
-      assign stbuf_fwdbyteen_r[7:0]  = {stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]};
-      assign stbuf_fwddata_en        = (|stbuf_fwdbyteen_hi_m[3:0]) | (|stbuf_fwdbyteen_lo_m[3:0]) | clk_override;
-
-      for (genvar i=0; i<8; i++) begin: GenDMAData
-         assign lsu_rdata_corr_r[(8*i)+7:8*i]  = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_corr_r[(8*i)+7:8*i]));
-
-         assign lsu_rdata_r[(8*i)+7:8*i]       = stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8*i)+7:8*i] :
-                                                                        (addr_in_pic_r ? picm_rd_data_r[(8*i)+7:8*i] :  ({8{addr_in_dccm_r}} & dccm_rdata_r[(8*i)+7:8*i]));
-      end
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_hi_r_ff    (.*, .din(dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((lsu_dccm_rden_m & ldst_dual_m) | clk_override));
-      rvdffe #(pt.DCCM_DATA_WIDTH) dccm_rdata_lo_r_ff    (.*, .din(dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_dccm_rden_m | clk_override));
-      rvdffe #(2*pt.DCCM_ECC_WIDTH)  dccm_data_ecc_r_ff  (.*, .din({dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0]}),
-                                                              .dout({dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0], dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0]}),                                  .en(lsu_dccm_rden_m | clk_override));
-      rvdff #(8)                   stbuf_fwdbyteen_ff    (.*, .din({stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]}), .dout({stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]}), .clk(lsu_c2_r_clk));
-      rvdffe #(64)                 stbuf_fwddata_ff      (.*, .din({stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]}),   .dout({stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]}),   .en(stbuf_fwddata_en));
-      rvdffe #(32)                 picm_rddata_rff       (.*, .din(picm_rd_data_m[31:0]),                                   .dout(picm_rd_data_r[31:0]),                                   .en(addr_in_pic_m | clk_override));
-      rvdff #(3)                   dma_mem_tag_rff       (.*, .din(dma_mem_tag_m[2:0]),                                     .dout(dma_mem_tag_r[2:0]),                                     .clk(lsu_c1_r_clk));
-
-   end else begin: L2U_Plus1_0
-
-      logic [63:0]  lsu_rdata_m, lsu_rdata_corr_m;
-      logic [63:0]  dccm_rdata_m, dccm_rdata_corr_m;
-      logic [63:0]  stbuf_fwddata_m;
-      logic [7:0]   stbuf_fwdbyteen_m;
-      logic [63:32] lsu_ld_data_m_nc, lsu_ld_data_corr_m_nc;
-      logic [31:0]  lsu_ld_data_corr_m;
-
-      assign dccm_dma_rvalid      = lsu_pkt_m.valid & lsu_pkt_m.load & lsu_pkt_m.dma;
-      assign dccm_dma_ecc_error   = lsu_double_ecc_error_m;
-      assign dccm_dma_rtag[2:0]   = dma_mem_tag_m[2:0];
-      assign dccm_dma_rdata[63:0] = ldst_dual_m ? lsu_rdata_corr_m[63:0] : {2{lsu_rdata_corr_m[31:0]}};
-      assign {lsu_ld_data_m_nc[63:32], lsu_ld_data_m[31:0]} = lsu_rdata_m[63:0] >> 8*lsu_addr_m[1:0];
-      assign {lsu_ld_data_corr_m_nc[63:32], lsu_ld_data_corr_m[31:0]} = lsu_rdata_corr_m[63:0] >> 8*lsu_addr_m[1:0];
-
-      assign dccm_rdata_m[63:0]      = {dccm_rdata_hi_m[31:0],dccm_rdata_lo_m[31:0]};
-      assign dccm_rdata_corr_m[63:0] = {sec_data_hi_m[31:0],sec_data_lo_m[31:0]};
-      assign stbuf_fwddata_m[63:0]   = {stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]};
-      assign stbuf_fwdbyteen_m[7:0]  = {stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]};
-
-      for (genvar i=0; i<8; i++) begin: GenLoop
-         assign lsu_rdata_corr_m[(8*i)+7:8*i] = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_corr_m[(8*i)+7:8*i]));
-
-         assign lsu_rdata_m[(8*i)+7:8*i]      = stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8*i)+7:8*i] :
-                                                                       (addr_in_pic_m ? picm_rd_data_m[(8*i)+7:8*i] : ({8{addr_in_dccm_m}} & dccm_rdata_m[(8*i)+7:8*i]));
-      end
-
-      rvdffe #(32) lsu_ld_data_corr_rff(.*, .din(lsu_ld_data_corr_m[31:0]), .dout(lsu_ld_data_corr_r[31:0]), .en((lsu_pkt_m.valid & lsu_pkt_m.load & (addr_in_pic_m | addr_in_dccm_m)) | clk_override));
-   end
-
-   assign kill_ecc_corr_lo_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign kill_ecc_corr_hi_r = (((lsu_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_d[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_d.valid & lsu_pkt_d.store & lsu_pkt_d.dma & addr_in_dccm_d) |
-                               (((lsu_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) | (end_addr_m[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2])) & lsu_pkt_m.valid & lsu_pkt_m.store & lsu_pkt_m.dma & addr_in_dccm_m);
-
-   assign ld_single_ecc_error_lo_r = lsu_pkt_r.load & single_ecc_error_lo_r & ~lsu_raw_fwd_lo_r;
-   assign ld_single_ecc_error_hi_r = lsu_pkt_r.load & single_ecc_error_hi_r & ~lsu_raw_fwd_hi_r;
-   assign ld_single_ecc_error_r    = (ld_single_ecc_error_lo_r | ld_single_ecc_error_hi_r) & ~lsu_double_ecc_error_r;
-
-   assign ld_single_ecc_error_lo_r_ns = ld_single_ecc_error_lo_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_lo_r;
-   assign ld_single_ecc_error_hi_r_ns = ld_single_ecc_error_hi_r & (lsu_commit_r | lsu_pkt_r.dma) & ~kill_ecc_corr_hi_r;
-   assign ld_single_ecc_error_r_ff = (ld_single_ecc_error_lo_r_ff | ld_single_ecc_error_hi_r_ff) & ~lsu_double_ecc_error_r_ff;
-
-   assign lsu_stbuf_commit_any = stbuf_reqvld_any &
-                                 (~(lsu_dccm_rden_d | lsu_dccm_wren_d | ld_single_ecc_error_r_ff) |
-                                  (lsu_dccm_rden_d & ~((stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == lsu_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]) |
-                                                       (stbuf_addr_any[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] == end_addr_d[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]))));
-
-   // No need to read for aligned word/dword stores since ECC will come by new data completely
-   assign lsu_dccm_rden_d = lsu_pkt_d.valid & (lsu_pkt_d.load | (lsu_pkt_d.store & (~(lsu_pkt_d.word | lsu_pkt_d.dword) | (lsu_addr_d[1:0] != 2'b0)))) & addr_in_dccm_d;
-
-   // DMA will read/write in decode stage
-   assign lsu_dccm_wren_d = dma_dccm_wen;
-
-   // DCCM inputs
-   assign dccm_wren                             = lsu_dccm_wren_d | lsu_stbuf_commit_any | ld_single_ecc_error_r_ff;
-   assign dccm_rden                             = lsu_dccm_rden_d & addr_in_dccm_d;
-   assign dccm_wr_addr_lo[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? lsu_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_wr_addr_hi[pt.DCCM_BITS-1:0]     = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] : ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]) :
-                                                                             lsu_dccm_wren_d ? end_addr_d[pt.DCCM_BITS-1:0] : stbuf_addr_any[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_lo[pt.DCCM_BITS-1:0]     = lsu_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_rd_addr_hi[pt.DCCM_BITS-1:0]     = end_addr_d[pt.DCCM_BITS-1:0];
-   assign dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-   assign dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? {sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                               {sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0],sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]}) :
-                                                                                (dma_dccm_wen ? {dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0],dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0]} :
-                                                                                                {stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0],stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]});
-
-   // DCCM outputs
-   assign store_byteen_m[3:0] = {4{lsu_pkt_m.store}} &
-                                (({4{lsu_pkt_m.by}}    & 4'b0001) |
-                                 ({4{lsu_pkt_m.half}}  & 4'b0011) |
-                                 ({4{lsu_pkt_m.word}}  & 4'b1111));
-
-   assign store_byteen_r[3:0] =  {4{lsu_pkt_r.store}} &
-                                 (({4{lsu_pkt_r.by}}    & 4'b0001) |
-                                  ({4{lsu_pkt_r.half}}  & 4'b0011) |
-                                  ({4{lsu_pkt_r.word}}  & 4'b1111));
-
-   assign store_byteen_ext_m[7:0] = {4'b0,store_byteen_m[3:0]} << lsu_addr_m[1:0];      // The packet in m
-   assign store_byteen_ext_r[7:0] = {4'b0,store_byteen_r[3:0]} << lsu_addr_r[1:0];
-
-
-
-   assign dccm_wr_bypass_d_m_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-   assign dccm_wr_bypass_d_m_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_m[pt.DCCM_BITS-1:2]) & addr_in_dccm_m;
-
-   assign dccm_wr_bypass_d_r_lo   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == lsu_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-   assign dccm_wr_bypass_d_r_hi   = (stbuf_addr_any[pt.DCCM_BITS-1:2] == end_addr_r[pt.DCCM_BITS-1:2]) & addr_in_dccm_r;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic        dccm_wren_Q;
-      logic [31:0] dccm_wr_data_Q;
-      logic        dccm_wr_bypass_d_m_lo_Q, dccm_wr_bypass_d_m_hi_Q;
-      logic [31:0] store_data_pre_hi_r, store_data_pre_lo_r;
-
-      assign {store_data_pre_hi_r[31:0], store_data_pre_lo_r[31:0]} = {32'b0,store_data_r[31:0]} << 8*lsu_addr_r[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-          assign store_data_lo_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]);
-          assign store_data_hi_r[(8*i)+7:(8*i)]   = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]);
-
-          assign store_datafn_lo_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i] ? store_data_pre_lo_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_lo_r[(8*i)+7:(8*i)]));
-          assign store_datafn_hi_r[(8*i)+7:(8*i)] = store_byteen_ext_r[i+4] ? store_data_pre_hi_r[(8*i)+7:(8*i)] : ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi) ? stbuf_data_any[(8*i)+7:(8*i)] :
-                                                                                                                    ((dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q) ? dccm_wr_data_Q[(8*i)+7:(8*i)] : sec_data_hi_r[(8*i)+7:(8*i)]));
-      end
-
-      rvdff #(1)   dccm_wren_ff       (.*, .din(lsu_stbuf_commit_any),  .dout(dccm_wren_Q),             .clk(lsu_free_c2_clk));   // ECC load errors writing to dccm shouldn't fwd to stores in pipe
-      rvdffe #(32) dccm_wrdata_ff     (.*, .din(stbuf_data_any[31:0]),  .dout(dccm_wr_data_Q[31:0]),    .en(lsu_stbuf_commit_any | clk_override), .clk(clk));
-      rvdff #(1)   dccm_wrbyp_dm_loff (.*, .din(dccm_wr_bypass_d_m_lo), .dout(dccm_wr_bypass_d_m_lo_Q), .clk(lsu_free_c2_clk));
-      rvdff #(1)   dccm_wrbyp_dm_hiff (.*, .din(dccm_wr_bypass_d_m_hi), .dout(dccm_wr_bypass_d_m_hi_Q), .clk(lsu_free_c2_clk));
-      rvdff #(32)  store_data_rff     (.*, .din(store_data_m[31:0]),    .dout(store_data_r[31:0]),      .clk(lsu_store_c1_r_clk));
-
-   end else begin: L2U1_Plus1_0
-
-      logic [31:0] store_data_hi_m, store_data_lo_m;
-      logic [63:0] store_data_mask;
-      assign {store_data_hi_m[31:0] , store_data_lo_m[31:0]} = {32'b0,store_data_m[31:0]} << 8*lsu_addr_m[1:0];
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_hi_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i+4] ? store_data_hi_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_hi)   ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_hi_m[(8*i)+7:(8*i)]);
-         assign store_data_lo_r_in[(8*i)+7:(8*i)]  = store_byteen_ext_m[i]   ? store_data_lo_m[(8*i)+7:(8*i)] :
-                                                                               ((lsu_stbuf_commit_any &  dccm_wr_bypass_d_m_lo) ? stbuf_data_any[(8*i)+7:(8*i)] : sec_data_lo_m[(8*i)+7:(8*i)]);
-
-         assign store_datafn_lo_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo & ~store_byteen_ext_r[i])   ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_lo_r[(8*i)+7:(8*i)];
-         assign store_datafn_hi_r[(8*i)+7:(8*i)]   = (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi & ~store_byteen_ext_r[i+4]) ? stbuf_data_any[(8*i)+7:(8*i)] : store_data_hi_r[(8*i)+7:(8*i)];
-      end // for (genvar i=0; i<BYTE_WIDTH; i++)
-
-      for (genvar i=0; i<4; i++) begin
-         assign store_data_mask[(8*i)+7:(8*i)] = {8{store_byteen_r[i]}};
-      end
-      assign store_data_r[31:0]      = 32'({store_data_hi_r[31:0],store_data_lo_r[31:0]} >> 8*lsu_addr_r[1:0]) & store_data_mask[31:0];
-
-      rvdffe #(pt.DCCM_DATA_WIDTH) store_data_hi_rff (.*, .din(store_data_hi_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en((ldst_dual_m & lsu_pkt_m.valid & lsu_pkt_m.store) | clk_override), .clk(clk));
-      rvdff  #(pt.DCCM_DATA_WIDTH) store_data_lo_rff (.*, .din(store_data_lo_r_in[pt.DCCM_DATA_WIDTH-1:0]), .dout(store_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .clk(lsu_store_c1_r_clk));
-
-   end
-
-   assign dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_lo[pt.DCCM_DATA_WIDTH-1:0]; // for ld choose dccm_out
-   assign dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rd_data_hi[pt.DCCM_DATA_WIDTH-1:0]; // for ld this is used for ecc
-
-   assign dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-   assign dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0] = dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
-
-   // PIC signals. PIC ignores the lower 2 bits of address since PIC memory registers are 32-bits
-   assign picm_wren          = (lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_pic_r & lsu_commit_r) | dma_pic_wen;
-   assign picm_rden          = lsu_pkt_d.valid & lsu_pkt_d.load  & addr_in_pic_d;
-   assign picm_mken          = lsu_pkt_d.valid & lsu_pkt_d.store & addr_in_pic_d;  // Get the mask for stores
-   assign picm_rdaddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},lsu_addr_d[pt.PIC_BITS-1:0]};
-
-   assign picm_wraddr[31:0]  = pt.PIC_BASE_ADDR | {{32-pt.PIC_BITS{1'b0}},(dma_pic_wen ? dma_mem_addr[pt.PIC_BITS-1:0] : lsu_addr_r[pt.PIC_BITS-1:0])};
-
-   assign picm_wr_data[31:0] = dma_pic_wen ? dma_mem_wdata[31:0] : store_datafn_lo_r[31:0];
-
-   assign picm_mask_data_m[31:0] = picm_rd_data_m[31:0];
-   assign picm_rd_data_m[63:0]   = {picm_rd_data[31:0],picm_rd_data[31:0]};
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      rvdff #(1) dccm_rden_mff (.*, .din(lsu_dccm_rden_d), .dout(lsu_dccm_rden_m), .clk(lsu_c2_m_clk));
-      rvdff #(1) dccm_rden_rff (.*, .din(lsu_dccm_rden_m), .dout(lsu_dccm_rden_r), .clk(lsu_c2_r_clk));
-
-      // ECC correction flops since dccm write happens next cycle
-      // We are writing to dccm in r+1 for ecc correction since fast_int needs to be blocked in decode - 1. We can probably write in r for plus0 configuration since we know ecc error in M.
-      // In that case these (_ff) flops are needed only in plus1 configuration
-      rvdff #(1) ld_double_ecc_error_rff    (.*, .din(lsu_double_ecc_error_r),   .dout(lsu_double_ecc_error_r_ff),   .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_hi_rff (.*, .din(ld_single_ecc_error_hi_r_ns), .dout(ld_single_ecc_error_hi_r_ff), .clk(lsu_free_c2_clk));
-      rvdff #(1) ld_single_ecc_error_lo_rff (.*, .din(ld_single_ecc_error_lo_r_ns), .dout(ld_single_ecc_error_lo_r_ff), .clk(lsu_free_c2_clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_hi_rff (.*, .din(end_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-      rvdffe #(pt.DCCM_BITS) ld_sec_addr_lo_rff (.*, .din(lsu_addr_r[pt.DCCM_BITS-1:0]), .dout(ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk));
-
-   end else begin: Gen_dccm_disable
-      assign lsu_dccm_rden_m = '0;
-      assign lsu_dccm_rden_r = '0;
-
-      assign lsu_double_ecc_error_r_ff = 1'b0;
-      assign ld_single_ecc_error_hi_r_ff = 1'b0;
-      assign ld_single_ecc_error_lo_r_ff = 1'b0;
-      assign ld_sec_addr_hi_r_ff[pt.DCCM_BITS-1:0] = '0;
-      assign ld_sec_addr_lo_r_ff[pt.DCCM_BITS-1:0] = '0;
-   end
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: DCCM for LSU pipe
-// Comments: Single ported memory
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-`define eb1_LOCAL_DCCM_RAM_TEST_PORTS    .TEST1(dccm_ext_in_pkt[i].TEST1),                      \
-                                     .RME(dccm_ext_in_pkt[i].RME),                      \
-                                     .RM(dccm_ext_in_pkt[i].RM),                        \
-                                     .LS(dccm_ext_in_pkt[i].LS),                        \
-                                     .DS(dccm_ext_in_pkt[i].DS),                        \
-                                     .SD(dccm_ext_in_pkt[i].SD),                        \
-                                     .TEST_RNM(dccm_ext_in_pkt[i].TEST_RNM),            \
-                                     .BC1(dccm_ext_in_pkt[i].BC1),                      \
-                                     .BC2(dccm_ext_in_pkt[i].BC2),                      \
-
-
-
-module eb1_lsu_dccm_mem
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-
-   input logic 	VPWR,
-   input logic		VGND,
-
-   input logic         clk,                                             // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic         active_clk,                                      // Clock only while core active.  Through two clock headers. For flops without second clock header built in.
-   input logic         rst_l,                                           // reset, active low
-   input logic         clk_override,                                    // Override non-functional clock gating
-
-   input logic         dccm_wren,                                       // write enable
-   input logic         dccm_rden,                                       // read enable
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_lo,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_wr_addr_hi,                     // write address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_lo,                     // read address
-   input logic [pt.DCCM_BITS-1:0]  dccm_rd_addr_hi,                     // read address for the upper bank in case of a misaligned access
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_lo,              // write data
-   input logic [pt.DCCM_FDATA_WIDTH-1:0]  dccm_wr_data_hi,              // write data
-   input eb1_dccm_ext_in_pkt_t  [pt.DCCM_NUM_BANKS-1:0] dccm_ext_in_pkt,    // the dccm packet from the soc
-
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_lo,              // read data from the lo bank
-   output logic [pt.DCCM_FDATA_WIDTH-1:0] dccm_rd_data_hi,              // read data from the hi bank
-
-   input  logic         scan_mode
-);
-
-
-   localparam DCCM_WIDTH_BITS = $clog2(pt.DCCM_BYTE_WIDTH);
-   localparam DCCM_INDEX_BITS = (pt.DCCM_BITS - pt.DCCM_BANK_BITS - pt.DCCM_WIDTH_BITS);
-   localparam DCCM_INDEX_DEPTH = ((pt.DCCM_SIZE)*1024)/((pt.DCCM_BYTE_WIDTH)*(pt.DCCM_NUM_BANKS));  // Depth of memory bank
-
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        wren_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0]                                        rden_bank;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+2)] addr_bank;
-   logic [pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)]           rd_addr_even, rd_addr_odd;
-   logic                                                                rd_unaligned, wr_unaligned;
-   logic [pt.DCCM_NUM_BANKS-1:0] [pt.DCCM_FDATA_WIDTH-1:0]              dccm_bank_dout;
-   logic [pt.DCCM_FDATA_WIDTH-1:0]                                      wrdata;
-
-   logic [pt.DCCM_NUM_BANKS-1:0][pt.DCCM_FDATA_WIDTH-1:0]               wr_data_bank;
-
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_lo_q;
-   logic [(DCCM_WIDTH_BITS+pt.DCCM_BANK_BITS-1):DCCM_WIDTH_BITS]        dccm_rd_addr_hi_q;
-
-   logic [pt.DCCM_NUM_BANKS-1:0]            dccm_clken;
-
-   assign rd_unaligned = (dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-   assign wr_unaligned = (dccm_wr_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS] != dccm_wr_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]);
-
-   // Align the read data
-   assign dccm_rd_data_lo[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_lo_q[pt.DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-   assign dccm_rd_data_hi[pt.DCCM_FDATA_WIDTH-1:0]  = dccm_bank_dout[dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]][pt.DCCM_FDATA_WIDTH-1:0];
-
-
-   // 8 Banks, 16KB each (2048 x 72)
-   for (genvar i=0; i<pt.DCCM_NUM_BANKS; i++) begin: mem_bank
-      assign  wren_bank[i]        = dccm_wren & ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_wr_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  rden_bank[i]        = dccm_rden & ((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) | (dccm_rd_addr_lo[2+:pt.DCCM_BANK_BITS] == i));
-      assign  addr_bank[i][(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] = wren_bank[i] ? (((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ?
-                                                                                                        dccm_wr_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_wr_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS])  :
-                                                                                                  (((dccm_rd_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & rd_unaligned) ?
-                                                                                                        dccm_rd_addr_hi[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS] :
-                                                                                                        dccm_rd_addr_lo[(pt.DCCM_BANK_BITS+DCCM_WIDTH_BITS)+:DCCM_INDEX_BITS]);
-
-      assign wr_data_bank[i]     = ((dccm_wr_addr_hi[2+:pt.DCCM_BANK_BITS] == i) & wr_unaligned) ? dccm_wr_data_hi[pt.DCCM_FDATA_WIDTH-1:0] : dccm_wr_data_lo[pt.DCCM_FDATA_WIDTH-1:0];
-
-      // clock gating section
-      assign  dccm_clken[i] = (wren_bank[i] | rden_bank[i] | clk_override) ;
-      // end clock gating section
-
-
-
-      if (DCCM_INDEX_DEPTH == 32768) begin : dccm
-         ram_32768x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 16384) begin : dccm
-         ram_16384x39  dccm_bank (
-                                  // Primary ports
-                                  .ME(dccm_clken[i]),
-                                  .CLK(clk),
-                                  .WE(wren_bank[i]),
-                                  .ADR(addr_bank[i]),
-                                  .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                  .ROP ( ),
-                                  // These are used by SoC
-                                  `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                  .*
-                                  );
-      end
-      else if (DCCM_INDEX_DEPTH == 8192) begin : dccm
-         ram_8192x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 4096) begin : dccm
-         ram_4096x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 3072) begin : dccm
-         ram_3072x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 2048) begin : dccm
-         ram_2048x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-      end
-      else if (DCCM_INDEX_DEPTH == 1024) begin : dccm
-         /*ram_1024x39  dccm_bank (
-                                 // Primary ports
-                                 .ME(dccm_clken[i]),
-                                 .CLK(clk),
-                                 .WE(wren_bank[i]),
-                                 .ADR(addr_bank[i]),
-                                 .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                 .ROP ( ),
-                                 // These are used by SoC
-                                 `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                 .*
-                                 );
-                                 */
-                                 sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i]),
-									.dout0(dccm_bank_dout[i]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 512) begin : dccm
-         ram_512x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-      else if (DCCM_INDEX_DEPTH == 256) begin : dccm
-         /*ram_256x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );*/
-                                sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									
-									.clk0(clk),
-									.csb0(~dccm_clken[i]),
-									.web0(~wren_bank[i]),
-									.wmask0(4'hf),
-									.addr0(addr_bank[i]),
-									.din0(wr_data_bank[i][31:0]),
-									.dout0(dccm_bank_dout[i][31:0]),
-    									.clk1(clk),
-    									.csb1(1'b1),
-    									.addr1(10'h000),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 128) begin : dccm
-         ram_128x39  dccm_bank (
-                                // Primary ports
-                                .ME(dccm_clken[i]),
-                                .CLK(clk),
-                                .WE(wren_bank[i]),
-                                .ADR(addr_bank[i]),
-                                .D(wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .Q(dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0]),
-                                .ROP ( ),
-                                // These are used by SoC
-                                `eb1_LOCAL_DCCM_RAM_TEST_PORTS
-                                .*
-                                );
-      end
-
-
-   end : mem_bank
-
-   // Flops
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_lo_ff (.*, .din(dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_lo_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-   rvdff  #(pt.DCCM_BANK_BITS) rd_addr_hi_ff (.*, .din(dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .dout(dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt.DCCM_BANK_BITS]), .clk(active_clk));
-
-`undef eb1_LOCAL_DCCM_RAM_TEST_PORTS
-
-endmodule // eb1_lsu_dccm_mem
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Top level file for load store unit
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_ecc
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-   input logic                           clk,                // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-   input logic                           lsu_c2_r_clk,       // clock
-   input logic                           clk_override,       // Override non-functional clock gating
-   input logic                           rst_l,              // reset, active low
-   input logic                           scan_mode,          // scan mode
-
-   input eb1_lsu_pkt_t                  lsu_pkt_m,          // packet in m
-   input eb1_lsu_pkt_t                  lsu_pkt_r,          // packet in r
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  stbuf_data_any,
-
-   input logic                           dec_tlu_core_ecc_disable,  // disables the ecc computation and error flagging
-
-   input logic                           lsu_dccm_rden_r,          // dccm rden
-   input logic                           addr_in_dccm_r,           // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_r,               // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_r,               // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_r,          // data from the dccm
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_r,          // data from the dccm
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_r,       // data from the dccm + ecc
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_r,       // data from the dccm + ecc
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r,            // corrected dccm data R-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_r_ff,         // corrected dccm data R+1 stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_r_ff,         // corrected dccm data R+1 stage
-
-   input logic                           ld_single_ecc_error_r,     // ld has a single ecc error
-   input logic                           ld_single_ecc_error_r_ff,  // ld has a single ecc error
-   input logic                           lsu_dccm_rden_m,           // dccm rden
-   input logic                           addr_in_dccm_m,            // address in dccm
-   input logic  [pt.DCCM_BITS-1:0]       lsu_addr_m,                // start address
-   input logic  [pt.DCCM_BITS-1:0]       end_addr_m,                // end address
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_hi_m,           // raw data from mem
-   input logic  [pt.DCCM_DATA_WIDTH-1:0] dccm_rdata_lo_m,           // raw data from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_hi_m,        // ecc read out from mem
-   input logic  [pt.DCCM_ECC_WIDTH-1:0]  dccm_data_ecc_lo_m,        // ecc read out from mem
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_hi_m,             // corrected dccm data M-stage
-   output logic [pt.DCCM_DATA_WIDTH-1:0] sec_data_lo_m,             // corrected dccm data M-stage
-
-   input logic                           dma_dccm_wen,              // Perform DMA writes only for word/dword
-   input logic  [31:0]                   dma_dccm_wdata_lo,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   input logic  [31:0]                   dma_dccm_wdata_hi,         // Shifted dma data to lower bits to make it consistent to lsu stores
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_hi,     // ECC bits for the DMA wdata
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  dma_dccm_wdata_ecc_lo,     // ECC bits for the DMA wdata
-
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  stbuf_ecc_any,             // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_hi_r_ff,      // Encoded data with ECC bits
-   output logic [pt.DCCM_ECC_WIDTH-1:0]  sec_data_ecc_lo_r_ff,      // Encoded data with ECC bits
-
-   output logic                          single_ecc_error_hi_r,                   // sec detected
-   output logic                          single_ecc_error_lo_r,                   // sec detected on lower dccm bank
-   output logic                          lsu_single_ecc_error_r,                  // or of the 2
-   output logic                          lsu_double_ecc_error_r,                   // double error detected
-
-   output logic                          lsu_single_ecc_error_m,                  // or of the 2
-   output logic                          lsu_double_ecc_error_m                   // double error detected
-
- );
-
-   logic                           is_ldst_r;
-   logic                           is_ldst_hi_any, is_ldst_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_wdata_hi_any, dccm_wdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]  dccm_wdata_ecc_hi_any, dccm_wdata_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  dccm_rdata_hi_any, dccm_rdata_lo_any;
-   logic [pt.DCCM_ECC_WIDTH-1:0]   dccm_data_ecc_hi_any, dccm_data_ecc_lo_any;
-   logic [pt.DCCM_DATA_WIDTH-1:0]  sec_data_hi_any, sec_data_lo_any;
-   logic                           single_ecc_error_hi_any, single_ecc_error_lo_any;
-   logic                           double_ecc_error_hi_any, double_ecc_error_lo_any;
-
-   logic                           double_ecc_error_hi_m, double_ecc_error_lo_m;
-   logic                           double_ecc_error_hi_r, double_ecc_error_lo_r;
-
-   logic [6:0]                     ecc_out_hi_nc, ecc_out_lo_nc;
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic        ldst_dual_m, ldst_dual_r;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_r, is_ldst_lo_r;
-
-      assign ldst_dual_r                                 = (lsu_addr_r[2] != end_addr_r[2]);
-      assign is_ldst_r                                   = lsu_pkt_r.valid & (lsu_pkt_r.load | lsu_pkt_r.store) & addr_in_dccm_r & lsu_dccm_rden_r;
-      assign is_ldst_lo_r                                = is_ldst_r & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_r                                = is_ldst_r & ldst_dual_r & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_r;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_r[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_r;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_r[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_r[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_hi_r                       = single_ecc_error_hi_any;
-      assign double_ecc_error_hi_r                       = double_ecc_error_hi_any;
-      assign sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign single_ecc_error_lo_r                       = single_ecc_error_lo_any;
-      assign double_ecc_error_lo_r                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_r                      = single_ecc_error_hi_r | single_ecc_error_lo_r;
-      assign lsu_double_ecc_error_r                      = double_ecc_error_hi_r | double_ecc_error_lo_r;
-
-   end else begin: L2U_Plus1_0
-
-      logic        ldst_dual_m;
-      logic        is_ldst_m;
-      logic        is_ldst_hi_m, is_ldst_lo_m;
-
-      assign ldst_dual_m                                 = (lsu_addr_m[2] != end_addr_m[2]);
-      assign is_ldst_m                                   = lsu_pkt_m.valid & (lsu_pkt_m.load | lsu_pkt_m.store) & addr_in_dccm_m & lsu_dccm_rden_m;
-      assign is_ldst_lo_m                                = is_ldst_m & ~dec_tlu_core_ecc_disable;
-      assign is_ldst_hi_m                                = is_ldst_m & (ldst_dual_m | lsu_pkt_m.dma) & ~dec_tlu_core_ecc_disable;   // Always check the ECC Hi/Lo for DMA since we don't align for DMA
-
-      assign is_ldst_hi_any                              = is_ldst_hi_m;
-      assign dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_hi_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_hi_m[pt.DCCM_ECC_WIDTH-1:0];
-      assign is_ldst_lo_any                              = is_ldst_lo_m;
-      assign dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]   = dccm_rdata_lo_m[pt.DCCM_DATA_WIDTH-1:0];
-      assign dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0] = dccm_data_ecc_lo_m[pt.DCCM_ECC_WIDTH-1:0];
-
-      assign sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_hi_m                       = double_ecc_error_hi_any;
-      assign sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]       = sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0];
-      assign double_ecc_error_lo_m                       = double_ecc_error_lo_any;
-
-      assign lsu_single_ecc_error_m                      = single_ecc_error_hi_any | single_ecc_error_lo_any;
-      assign lsu_double_ecc_error_m                      = double_ecc_error_hi_m   | double_ecc_error_lo_m;
-
-      // Flops
-      rvdff  #(1) lsu_single_ecc_err_r    (.din(lsu_single_ecc_error_m), .dout(lsu_single_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(1) lsu_double_ecc_err_r    (.din(lsu_double_ecc_error_m), .dout(lsu_double_ecc_error_r), .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_lo_rff (.din(single_ecc_error_lo_any),  .dout(single_ecc_error_lo_r),  .clk(lsu_c2_r_clk), .*);
-      rvdff  #(.WIDTH(1)) ldst_sec_hi_rff (.din(single_ecc_error_hi_any),  .dout(single_ecc_error_hi_r),  .clk(lsu_c2_r_clk), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rff (.din(sec_data_hi_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-      rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rff (.din(sec_data_lo_m[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .en(lsu_single_ecc_error_m | clk_override), .*);
-
-   end
-
-   // Logic for ECC generation during write
-   assign dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_lo[pt.DCCM_DATA_WIDTH-1:0] : stbuf_data_any[pt.DCCM_DATA_WIDTH-1:0]);
-   assign dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0] = ld_single_ecc_error_r_ff ? sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0] : (dma_dccm_wen ? dma_dccm_wdata_hi[pt.DCCM_DATA_WIDTH-1:0] : 32'h0);
-
-   assign sec_data_ecc_hi_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign sec_data_ecc_lo_r_ff[pt.DCCM_ECC_WIDTH-1:0]  = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign stbuf_ecc_any[pt.DCCM_ECC_WIDTH-1:0]         = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_hi[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0];
-   assign dma_dccm_wdata_ecc_lo[pt.DCCM_ECC_WIDTH-1:0] = dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0];
-
-   // Instantiate ECC blocks
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-
-      //Detect/Repair for Hi
-      rvecc_decode lsu_ecc_decode_hi (
-         // Inputs
-         .en(is_ldst_hi_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_in(dccm_data_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_hi_nc[6:0]),
-         .single_ecc_error(single_ecc_error_hi_any),
-         .double_ecc_error(double_ecc_error_hi_any),
-         .*
-      );
-
-      //Detect/Repair for Lo
-      rvecc_decode lsu_ecc_decode_lo (
-         // Inputs
-         .en(is_ldst_lo_any),
-         .sed_ded (1'b0),    // 1 : means only detection
-         .din(dccm_rdata_lo_any[pt.DCCM_DATA_WIDTH-1:0] ),
-         .ecc_in(dccm_data_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         // Outputs
-         .dout(sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         .ecc_out (ecc_out_lo_nc[6:0]),
-         .single_ecc_error(single_ecc_error_lo_any),
-         .double_ecc_error(double_ecc_error_lo_any),
-         .*
-      );
-
-      rvecc_encode lsu_ecc_encode_hi (
-         //Inputs
-         .din(dccm_wdata_hi_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_hi_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-      rvecc_encode lsu_ecc_encode_lo (
-         //Inputs
-         .din(dccm_wdata_lo_any[pt.DCCM_DATA_WIDTH-1:0]),
-         //Outputs
-         .ecc_out(dccm_wdata_ecc_lo_any[pt.DCCM_ECC_WIDTH-1:0]),
-         .*
-      );
-   end else begin: Gen_dccm_disable // block: Gen_dccm_enable
-      assign sec_data_hi_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign sec_data_lo_any[pt.DCCM_DATA_WIDTH-1:0] = '0;
-      assign single_ecc_error_hi_any = '0;
-      assign double_ecc_error_hi_any = '0;
-      assign single_ecc_error_lo_any = '0;
-      assign double_ecc_error_lo_any = '0;
-   end
-
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_hi_rplus1ff (.din(sec_data_hi_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_hi_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-   rvdffe #(.WIDTH(pt.DCCM_DATA_WIDTH)) sec_data_lo_rplus1ff (.din(sec_data_lo_r[pt.DCCM_DATA_WIDTH-1:0]), .dout(sec_data_lo_r_ff[pt.DCCM_DATA_WIDTH-1:0]), .en(ld_single_ecc_error_r | clk_override), .clk(clk), .*);
-
-
-endmodule // eb1_lsu_ecc
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU control
-// Comments:
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-//********************************************************************************
-module eb1_lsu_lsc_ctl
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input logic                rst_l,                     // reset, active low
-   input logic                clk_override,              // Override non-functional clock gating
-   input logic                clk,                       // Clock only while core active.  Through one clock header.  For flops with    second clock header built in.  Connected to ACTIVE_L2CLK.
-
-   // clocks per pipe
-   input logic                lsu_c1_m_clk,
-   input logic                lsu_c1_r_clk,
-   input logic                lsu_c2_m_clk,
-   input logic                lsu_c2_r_clk,
-   input logic                lsu_store_c1_m_clk,
-
-   input logic [31:0]         lsu_ld_data_r,             // Load data R-stage
-   input logic [31:0]         lsu_ld_data_corr_r,        // ECC corrected data R-stage
-   input logic                lsu_single_ecc_error_r,    // ECC single bit error R-stage
-   input logic                lsu_double_ecc_error_r,    // ECC double bit error R-stage
-
-   input logic [31:0]         lsu_ld_data_m,             // Load data M-stage
-   input logic                lsu_single_ecc_error_m,    // ECC single bit error M-stage
-   input logic                lsu_double_ecc_error_m,    // ECC double bit error M-stage
-
-   input logic                flush_m_up,                // Flush M and D stage
-   input logic                flush_r,                   // Flush R-stage
-   input logic                ldst_dual_d,               // load/store is unaligned at 32 bit boundary D-stage
-   input logic                ldst_dual_m,               // load/store is unaligned at 32 bit boundary M-stage
-   input logic                ldst_dual_r,               // load/store is unaligned at 32 bit boundary R-stage
-
-   input logic [31:0]         exu_lsu_rs1_d,             // address
-   input logic [31:0]         exu_lsu_rs2_d,             // store data
-
-   input eb1_lsu_pkt_t       lsu_p,                     // lsu control packet
-   input logic                dec_lsu_valid_raw_d,       // Raw valid for address computation
-   input logic [11:0]         dec_lsu_offset_d,          // 12b offset for load/store addresses
-
-   input  logic [31:0]        picm_mask_data_m,          // PIC data M-stage
-   input  logic [31:0]        bus_read_data_m,           // the bus return data
-   output logic [31:0]        lsu_result_m,              // lsu load data
-   output logic [31:0]        lsu_result_corr_r,         // This is the ECC corrected data going to RF
-   // lsu address down the pipe
-   output logic [31:0]        lsu_addr_d,
-   output logic [31:0]        lsu_addr_m,
-   output logic [31:0]        lsu_addr_r,
-   // lsu address down the pipe - needed to check unaligned
-   output logic [31:0]        end_addr_d,
-   output logic [31:0]        end_addr_m,
-   output logic [31:0]        end_addr_r,
-   // store data down the pipe
-   output logic [31:0]        store_data_m,
-
-   input  logic [31:0]         dec_tlu_mrac_ff,          // CSR for memory region control
-   output logic                lsu_exc_m,                // Access or misaligned fault
-   output logic                is_sideeffects_m,         // is sideffects space
-   output logic                lsu_commit_r,             // lsu instruction in r commits
-   output logic                lsu_single_ecc_error_incr,// LSU inc SB error counter
-   output eb1_lsu_error_pkt_t lsu_error_pkt_r,          // lsu exception packet
-
-   output logic [31:1]         lsu_fir_addr,             // fast interrupt address
-   output logic [1:0]          lsu_fir_error,            // Error during fast interrupt lookup
-
-   // address in dccm/pic/external per pipe stage
-   output logic               addr_in_dccm_d,
-   output logic               addr_in_dccm_m,
-   output logic               addr_in_dccm_r,
-
-   output logic               addr_in_pic_d,
-   output logic               addr_in_pic_m,
-   output logic               addr_in_pic_r,
-
-   output logic               addr_external_m,
-
-   // DMA slave
-   input logic                dma_dccm_req,
-   input logic [31:0]         dma_mem_addr,
-   input logic [2:0]          dma_mem_sz,
-   input logic                dma_mem_write,
-   input logic [63:0]         dma_mem_wdata,
-
-   // Store buffer related signals
-   output eb1_lsu_pkt_t      lsu_pkt_d,
-   output eb1_lsu_pkt_t      lsu_pkt_m,
-   output eb1_lsu_pkt_t      lsu_pkt_r,
-
-   input  logic               scan_mode                  // Scan mode
-
-   );
-
-   logic [31:3]        end_addr_pre_m, end_addr_pre_r;
-   logic [31:0]        full_addr_d;
-   logic [31:0]        full_end_addr_d;
-   logic [31:0]        lsu_rs1_d;
-   logic [11:0]        lsu_offset_d;
-   logic [31:0]        rs1_d;
-   logic [11:0]        offset_d;
-   logic [12:0]        end_addr_offset_d;
-   logic [2:0]         addr_offset_d;
-
-   logic [63:0]        dma_mem_wdata_shifted;
-   logic               addr_external_d;
-   logic               addr_external_r;
-   logic               access_fault_d, misaligned_fault_d;
-   logic               access_fault_m, misaligned_fault_m;
-
-   logic               fir_dccm_access_error_d, fir_nondccm_access_error_d;
-   logic               fir_dccm_access_error_m, fir_nondccm_access_error_m;
-
-   logic [3:0]         exc_mscause_d, exc_mscause_m;
-   logic [31:0]        rs1_d_raw;
-   logic [31:0]        store_data_d, store_data_pre_m, store_data_m_in;
-   logic [31:0]        bus_read_data_r;
-
-   eb1_lsu_pkt_t           dma_pkt_d;
-   eb1_lsu_pkt_t           lsu_pkt_m_in, lsu_pkt_r_in;
-   eb1_lsu_error_pkt_t     lsu_error_pkt_m;
-
-
-   // Premux the rs1/offset for dma
-   assign lsu_rs1_d[31:0]    = dec_lsu_valid_raw_d ? exu_lsu_rs1_d[31:0] : dma_mem_addr[31:0];
-   assign lsu_offset_d[11:0] = dec_lsu_offset_d[11:0] & {12{dec_lsu_valid_raw_d}};
-   assign rs1_d_raw[31:0]    = lsu_rs1_d[31:0];
-   assign offset_d[11:0]     = lsu_offset_d[11:0];
-
-   assign rs1_d[31:0] = (lsu_pkt_d.load_ldst_bypass_d) ? lsu_result_m[31:0] : rs1_d_raw[31:0];
-
-   // generate the ls address
-   rvlsadder   lsadder  (.rs1(rs1_d[31:0]),
-                       .offset(offset_d[11:0]),
-                       .dout(full_addr_d[31:0])
-                       );
-
-   // Module to generate the memory map of the address
-   eb1_lsu_addrcheck #(.pt(pt)) addrcheck (
-              .start_addr_d(full_addr_d[31:0]),
-              .end_addr_d(full_end_addr_d[31:0]),
-              .rs1_region_d(rs1_d[31:28]),
-              .*
-  );
-
-   // Calculate start/end address for load/store
-   assign addr_offset_d[2:0]      = ({3{lsu_pkt_d.half}} & 3'b01) | ({3{lsu_pkt_d.word}} & 3'b11) | ({3{lsu_pkt_d.dword}} & 3'b111);
-   assign end_addr_offset_d[12:0] = {offset_d[11],offset_d[11:0]} + {9'b0,addr_offset_d[2:0]};
-   assign full_end_addr_d[31:0]   = rs1_d[31:0] + {{19{end_addr_offset_d[12]}},end_addr_offset_d[12:0]};
-   assign end_addr_d[31:0]        = full_end_addr_d[31:0];
-   assign lsu_exc_m               = access_fault_m | misaligned_fault_m;
-
-   // Goes to TLU to increment the ECC error counter
-   assign lsu_single_ecc_error_incr = (lsu_single_ecc_error_r & ~lsu_double_ecc_error_r) & (lsu_commit_r | lsu_pkt_r.dma) & lsu_pkt_r.valid;
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U_Plus1_1
-      logic               access_fault_r, misaligned_fault_r;
-      logic [3:0]         exc_mscause_r;
-      logic               fir_dccm_access_error_r, fir_nondccm_access_error_r;
-
-      // Generate exception packet
-      assign lsu_error_pkt_r.exc_valid = (access_fault_r | misaligned_fault_r | lsu_double_ecc_error_r) & lsu_pkt_r.valid & ~lsu_pkt_r.dma & ~lsu_pkt_r.fast_int;
-      assign lsu_error_pkt_r.single_ecc_error = lsu_single_ecc_error_r & ~lsu_error_pkt_r.exc_valid & ~lsu_pkt_r.dma;
-      assign lsu_error_pkt_r.inst_type = lsu_pkt_r.store;
-      assign lsu_error_pkt_r.exc_type  = ~misaligned_fault_r;
-      assign lsu_error_pkt_r.mscause[3:0] = (lsu_double_ecc_error_r & ~misaligned_fault_r & ~access_fault_r) ? 4'h1 : exc_mscause_r[3:0];
-      assign lsu_error_pkt_r.addr[31:0] = lsu_addr_r[31:0];
-
-      assign lsu_fir_error[1:0] = fir_nondccm_access_error_r ? 2'b11 : (fir_dccm_access_error_r ? 2'b10 : ((lsu_pkt_r.fast_int & lsu_double_ecc_error_r) ? 2'b01 : 2'b00));
-
-      rvdff #(1) access_fault_rff             (.din(access_fault_m),             .dout(access_fault_r),             .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) misaligned_fault_rff         (.din(misaligned_fault_m),         .dout(misaligned_fault_r),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(4) exc_mscause_rff              (.din(exc_mscause_m[3:0]),         .dout(exc_mscause_r[3:0]),         .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_m),    .dout(fir_dccm_access_error_r),    .clk(lsu_c1_r_clk), .*);
-      rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_m), .dout(fir_nondccm_access_error_r), .clk(lsu_c1_r_clk), .*);
-
-   end else begin: L2U_Plus1_0
-      logic [1:0] lsu_fir_error_m;
-
-      // Generate exception packet
-      assign lsu_error_pkt_m.exc_valid = (access_fault_m | misaligned_fault_m | lsu_double_ecc_error_m) & lsu_pkt_m.valid & ~lsu_pkt_m.dma & ~lsu_pkt_m.fast_int & ~flush_m_up;
-      assign lsu_error_pkt_m.single_ecc_error = lsu_single_ecc_error_m & ~lsu_error_pkt_m.exc_valid & ~lsu_pkt_m.dma;
-      assign lsu_error_pkt_m.inst_type = lsu_pkt_m.store;
-      assign lsu_error_pkt_m.exc_type  = ~misaligned_fault_m;
-      assign lsu_error_pkt_m.mscause[3:0] = (lsu_double_ecc_error_m & ~misaligned_fault_m & ~access_fault_m) ? 4'h1 : exc_mscause_m[3:0];
-      assign lsu_error_pkt_m.addr[31:0] = lsu_addr_m[31:0];
-
-      assign lsu_fir_error_m[1:0] = fir_nondccm_access_error_m ? 2'b11 : (fir_dccm_access_error_m ? 2'b10 : ((lsu_pkt_m.fast_int & lsu_double_ecc_error_m) ? 2'b01 : 2'b00));
-
-      rvdff  #(1)                             lsu_exc_valid_rff       (.*, .din(lsu_error_pkt_m.exc_valid),                        .dout(lsu_error_pkt_r.exc_valid),                        .clk(lsu_c2_r_clk));
-      rvdff  #(1)                             lsu_single_ecc_error_rff(.*, .din(lsu_error_pkt_m.single_ecc_error),                 .dout(lsu_error_pkt_r.single_ecc_error),                 .clk(lsu_c2_r_clk));
-      rvdffe #($bits(eb1_lsu_error_pkt_t)-2) lsu_error_pkt_rff       (.*, .din(lsu_error_pkt_m[$bits(eb1_lsu_error_pkt_t)-1:2]), .dout(lsu_error_pkt_r[$bits(eb1_lsu_error_pkt_t)-1:2]), .en(lsu_error_pkt_m.exc_valid | lsu_error_pkt_m.single_ecc_error | clk_override));
-      rvdff #(2)                              lsu_fir_error_rff       (.*, .din(lsu_fir_error_m[1:0]),                             .dout(lsu_fir_error[1:0]),                               .clk(lsu_c2_r_clk));
-   end
-
-   //Create DMA packet
-   always_comb begin
-      dma_pkt_d = '0;
-      dma_pkt_d.valid   = dma_dccm_req;
-      dma_pkt_d.dma     = 1'b1;
-      dma_pkt_d.store   = dma_mem_write;
-      dma_pkt_d.load    = ~dma_mem_write;
-      dma_pkt_d.by      = (dma_mem_sz[2:0] == 3'b0);
-      dma_pkt_d.half    = (dma_mem_sz[2:0] == 3'b1);
-      dma_pkt_d.word    = (dma_mem_sz[2:0] == 3'b10);
-      dma_pkt_d.dword   = (dma_mem_sz[2:0] == 3'b11);
-   end
-
-   always_comb begin
-      lsu_pkt_d = dec_lsu_valid_raw_d ? lsu_p : dma_pkt_d;
-      lsu_pkt_m_in = lsu_pkt_d;
-      lsu_pkt_r_in = lsu_pkt_m;
-
-      lsu_pkt_d.valid = (lsu_p.valid & ~(flush_m_up & ~lsu_p.fast_int)) | dma_dccm_req;
-      lsu_pkt_m_in.valid = lsu_pkt_d.valid & ~(flush_m_up & ~lsu_pkt_d.dma);
-      lsu_pkt_r_in.valid = lsu_pkt_m.valid & ~(flush_m_up & ~lsu_pkt_m.dma) ;
-   end
-
-   // C2 clock for valid and C1 for other bits of packet
-   rvdff #(1) lsu_pkt_vldmff (.*, .din(lsu_pkt_m_in.valid), .dout(lsu_pkt_m.valid), .clk(lsu_c2_m_clk));
-   rvdff #(1) lsu_pkt_vldrff (.*, .din(lsu_pkt_r_in.valid), .dout(lsu_pkt_r.valid), .clk(lsu_c2_r_clk));
-
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_mff (.*, .din(lsu_pkt_m_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_m[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_m_clk));
-   rvdff #($bits(eb1_lsu_pkt_t)-1) lsu_pkt_rff (.*, .din(lsu_pkt_r_in[$bits(eb1_lsu_pkt_t)-1:1]), .dout(lsu_pkt_r[$bits(eb1_lsu_pkt_t)-1:1]), .clk(lsu_c1_r_clk));
-
-
-
-   if (pt.LOAD_TO_USE_PLUS1 == 1) begin: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_r, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_r[31:0];
-      assign lsu_ld_datafn_corr_r[31:0]  = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this is really R stage signal
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_r[7:0]}) |
-                                  ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_r[15:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_r[7]}}, lsu_ld_datafn_r[7:0]}) |
-                                  ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_r[15]}},lsu_ld_datafn_r[15:0]}) |
-                                  ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_r[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-
-   end else begin: L2U1_Plus1_0 // block: L2U1_Plus1_1
-      logic [31:0] lsu_ld_datafn_m, lsu_ld_datafn_corr_r;
-
-      assign lsu_ld_datafn_m[31:0] = addr_external_m ? bus_read_data_m[31:0] : lsu_ld_data_m[31:0];
-      assign lsu_ld_datafn_corr_r[31:0] = addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0];
-
-      // this result must look at prior stores and merge them in
-      assign lsu_result_m[31:0] = ({32{ lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {24'b0,lsu_ld_datafn_m[7:0]}) |
-                                  ({32{ lsu_pkt_m.unsign & lsu_pkt_m.half}} & {16'b0,lsu_ld_datafn_m[15:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.by  }} & {{24{  lsu_ld_datafn_m[7]}}, lsu_ld_datafn_m[7:0]}) |
-                                  ({32{~lsu_pkt_m.unsign & lsu_pkt_m.half}} & {{16{  lsu_ld_datafn_m[15]}},lsu_ld_datafn_m[15:0]}) |
-                                  ({32{lsu_pkt_m.word}}                     & lsu_ld_datafn_m[31:0]);
-
-      // this signal is used for gpr update
-      assign lsu_result_corr_r[31:0] = ({32{ lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {24'b0,lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{ lsu_pkt_r.unsign & lsu_pkt_r.half}} & {16'b0,lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.by  }} & {{24{  lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]}) |
-                                       ({32{~lsu_pkt_r.unsign & lsu_pkt_r.half}} & {{16{  lsu_ld_datafn_corr_r[15]}},lsu_ld_datafn_corr_r[15:0]}) |
-                                       ({32{lsu_pkt_r.word}}                     & lsu_ld_datafn_corr_r[31:0]);
-   end
-
-   // Fast interrupt address
-   assign lsu_fir_addr[31:1]    = lsu_ld_data_corr_r[31:1];
-
-   // absence load/store all 0's
-   assign lsu_addr_d[31:0] = full_addr_d[31:0];
-
-   // Interrupt as a flush source allows the WB to occur
-   assign lsu_commit_r = lsu_pkt_r.valid & (lsu_pkt_r.store | lsu_pkt_r.load) & ~flush_r & ~lsu_pkt_r.dma;
-
-   assign dma_mem_wdata_shifted[63:0] = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};   // Shift the dma data to lower bits to make it consistent to lsu stores
-   assign store_data_d[31:0] = dma_dccm_req ? dma_mem_wdata_shifted[31:0] : exu_lsu_rs2_d[31:0];  // Write to PIC still happens in r stage
-
-   assign store_data_m_in[31:0] = (lsu_pkt_d.store_data_bypass_d) ? lsu_result_m[31:0] : store_data_d[31:0];
-
-   assign store_data_m[31:0] = (picm_mask_data_m[31:0] | {32{~addr_in_pic_m}}) & ((lsu_pkt_m.store_data_bypass_m) ? lsu_result_m[31:0] : store_data_pre_m[31:0]);
-
-
-   rvdff #(32)  sdmff (.*, .din(store_data_m_in[31:0]), .dout(store_data_pre_m[31:0]),                       .clk(lsu_store_c1_m_clk));
-
-   rvdff #(32) samff (.*, .din(lsu_addr_d[31:0]), .dout(lsu_addr_m[31:0]), .clk(lsu_c1_m_clk));
-   rvdff #(32) sarff (.*, .din(lsu_addr_m[31:0]), .dout(lsu_addr_r[31:0]), .clk(lsu_c1_r_clk));
-
-   assign end_addr_m[31:3] = ldst_dual_m ? end_addr_pre_m[31:3] : lsu_addr_m[31:3];       // This is for power saving
-   assign end_addr_r[31:3] = ldst_dual_r ? end_addr_pre_r[31:3] : lsu_addr_r[31:3];       // This is for power saving
-
-   rvdffe #(29) end_addr_hi_mff (.*, .din(end_addr_d[31:3]), .dout(end_addr_pre_m[31:3]), .en((lsu_pkt_d.valid & ldst_dual_d) | clk_override));
-   rvdffe #(29) end_addr_hi_rff (.*, .din(end_addr_m[31:3]), .dout(end_addr_pre_r[31:3]), .en((lsu_pkt_m.valid & ldst_dual_m) | clk_override));
-
-   rvdff #(3)  end_addr_lo_mff (.*, .din(end_addr_d[2:0]), .dout(end_addr_m[2:0]), .clk(lsu_c1_m_clk));
-   rvdff #(3)  end_addr_lo_rff (.*, .din(end_addr_m[2:0]), .dout(end_addr_r[2:0]), .clk(lsu_c1_r_clk));
-
-   rvdff #(1) addr_in_dccm_mff(.din(addr_in_dccm_d), .dout(addr_in_dccm_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_dccm_rff(.din(addr_in_dccm_m), .dout(addr_in_dccm_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_in_pic_mff(.din(addr_in_pic_d), .dout(addr_in_pic_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_in_pic_rff(.din(addr_in_pic_m), .dout(addr_in_pic_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) addr_external_mff(.din(addr_external_d), .dout(addr_external_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) addr_external_rff(.din(addr_external_m), .dout(addr_external_r), .clk(lsu_c1_r_clk), .*);
-
-   rvdff #(1) access_fault_mff     (.din(access_fault_d),     .dout(access_fault_m),     .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) misaligned_fault_mff (.din(misaligned_fault_d), .dout(misaligned_fault_m), .clk(lsu_c1_m_clk), .*);
-   rvdff #(4) exc_mscause_mff      (.din(exc_mscause_d[3:0]), .dout(exc_mscause_m[3:0]), .clk(lsu_c1_m_clk), .*);
-
-   rvdff #(1) fir_dccm_access_error_mff    (.din(fir_dccm_access_error_d),    .dout(fir_dccm_access_error_m),    .clk(lsu_c1_m_clk), .*);
-   rvdff #(1) fir_nondccm_access_error_mff (.din(fir_nondccm_access_error_d), .dout(fir_nondccm_access_error_m), .clk(lsu_c1_m_clk), .*);
-
-   rvdffe #(32) bus_read_data_r_ff (.*, .din(bus_read_data_m[31:0]), .dout(bus_read_data_r[31:0]), .en(addr_external_m | clk_override));
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: Store Buffer
-// Comments: Dual writes and single drain
-//
-//
-// DC1 -> DC2 -> DC3 -> DC4 (Commit)
-//
-// //********************************************************************************
-
-
-module eb1_lsu_stbuf
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})
-(
-   input logic                           clk,                         // core clock
-   input logic                           rst_l,                       // reset
-
-   input logic                           lsu_stbuf_c1_clk,            // stbuf clock
-   input logic                           lsu_free_c2_clk,             // free clk
-
-   // Store Buffer input
-   input logic                           store_stbuf_reqvld_r,        // core instruction goes to stbuf
-   input logic                           lsu_commit_r,                // lsu commits
-   input logic                           dec_lsu_valid_raw_d,         // Speculative decode valid
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_hi_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_data_lo_r,             // merged data from the dccm for stores. This is used for fwding
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_hi_r,           // merged data from the dccm for stores
-   input logic [pt.DCCM_DATA_WIDTH-1:0]  store_datafn_lo_r,           // merged data from the dccm for stores
-
-   // Store Buffer output
-   output logic                          stbuf_reqvld_any,            // stbuf is draining
-   output logic                          stbuf_reqvld_flushed_any,    // Top entry is flushed
-   output logic [pt.LSU_SB_BITS-1:0]     stbuf_addr_any,              // address
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_data_any,              // stbuf data
-
-   input  logic                          lsu_stbuf_commit_any,        // pop the stbuf as it commite
-   output logic                          lsu_stbuf_full_any,          // stbuf is full
-   output logic                          lsu_stbuf_empty_any,         // stbuf is empty
-   output logic                          ldst_stbuf_reqvld_r,         // needed for clocking
-
-   input logic [pt.LSU_SB_BITS-1:0]      lsu_addr_d,                  // lsu address D-stage
-   input logic [31:0]                    lsu_addr_m,                  // lsu address M-stage
-   input logic [31:0]                    lsu_addr_r,                  // lsu address R-stage
-
-   input logic [pt.LSU_SB_BITS-1:0]      end_addr_d,                  // lsu end address D-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_m,                  // lsu end address M-stage - needed to check unaligned
-   input logic [31:0]                    end_addr_r,                  // lsu end address R-stage - needed to check unaligned
-
-   input logic                           ldst_dual_d, ldst_dual_m, ldst_dual_r,
-   input logic                           addr_in_dccm_m,              // address is in dccm
-   input logic                           addr_in_dccm_r,              // address is in dccm
-
-   // Forwarding signals
-   input logic                           lsu_cmpen_m,                 // needed for forwarding stbuf - load
-   input eb1_lsu_pkt_t                  lsu_pkt_m,                   // LSU packet M-stage
-   input eb1_lsu_pkt_t                  lsu_pkt_r,                   // LSU packet R-stage
-
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_hi_m,          // stbuf data
-   output logic [pt.DCCM_DATA_WIDTH-1:0] stbuf_fwddata_lo_m,          // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_hi_m,        // stbuf data
-   output logic [pt.DCCM_BYTE_WIDTH-1:0] stbuf_fwdbyteen_lo_m,        // stbuf data
-
-   input  logic       scan_mode                                       // Scan mode
-
-);
-
-
-   localparam DEPTH      = pt.LSU_STBUF_DEPTH;
-   localparam DATA_WIDTH = pt.DCCM_DATA_WIDTH;
-   localparam BYTE_WIDTH = pt.DCCM_BYTE_WIDTH;
-   localparam DEPTH_LOG2 = $clog2(DEPTH);
-
-   // These are the fields in the store queue
-   logic [DEPTH-1:0]                     stbuf_vld;
-   logic [DEPTH-1:0]                     stbuf_dma_kill;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addr;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteen;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_data;
-
-   logic [DEPTH-1:0]                     sel_lo;
-   logic [DEPTH-1:0]                     stbuf_wr_en;
-   logic [DEPTH-1:0]                     stbuf_dma_kill_en;
-   logic [DEPTH-1:0]                     stbuf_reset;
-   logic [DEPTH-1:0][pt.LSU_SB_BITS-1:0] stbuf_addrin;
-   logic [DEPTH-1:0][DATA_WIDTH-1:0]     stbuf_datain;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0]     stbuf_byteenin;
-
-   logic [7:0]             store_byteen_ext_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  store_byteen_lo_r;
-
-   logic                   WrPtrEn, RdPtrEn;
-   logic [DEPTH_LOG2-1:0]  WrPtr, RdPtr;
-   logic [DEPTH_LOG2-1:0]  NxtWrPtr, NxtRdPtr;
-   logic [DEPTH_LOG2-1:0]  WrPtrPlus1, WrPtrPlus2, RdPtrPlus1;
-
-   logic                   dual_stbuf_write_r;
-
-   logic                   isdccmst_m, isdccmst_r;
-   logic [3:0]             stbuf_numvld_any, stbuf_specvld_any;
-   logic [1:0]             stbuf_specvld_m, stbuf_specvld_r;
-
-   logic [pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] cmpaddr_hi_m, cmpaddr_lo_m;
-
-   // variables to detect matching from the store queue
-   logic [DEPTH-1:0]                 stbuf_match_hi, stbuf_match_lo;
-   logic [DEPTH-1:0][BYTE_WIDTH-1:0] stbuf_fwdbyteenvec_hi, stbuf_fwdbyteenvec_lo;
-   logic [DATA_WIDTH-1:0]            stbuf_fwddata_hi_pre_m, stbuf_fwddata_lo_pre_m;
-   logic [BYTE_WIDTH-1:0]            stbuf_fwdbyteen_hi_pre_m, stbuf_fwdbyteen_lo_pre_m;
-
-   // logic to detect matching from the pipe - needed for store - load forwarding
-   logic [BYTE_WIDTH-1:0]  ld_byte_rhit_lo_lo, ld_byte_rhit_hi_lo, ld_byte_rhit_lo_hi, ld_byte_rhit_hi_hi;
-   logic                   ld_addr_rhit_lo_lo, ld_addr_rhit_hi_lo, ld_addr_rhit_lo_hi, ld_addr_rhit_hi_hi;
-
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_lo, ld_byte_rhit_lo;
-   logic [BYTE_WIDTH-1:0]  ld_byte_hit_hi, ld_byte_rhit_hi;
-
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_hi_r;
-   logic [BYTE_WIDTH-1:0]  ldst_byteen_lo_r;
-   // byte_en flowing down
-   logic [7:0]             ldst_byteen_r;
-   logic [7:0]             ldst_byteen_ext_r;
-   // fwd data through the pipe
-   logic [31:0]       ld_fwddata_rpipe_lo;
-   logic [31:0]       ld_fwddata_rpipe_hi;
-
-   // coalescing signals
-   logic [DEPTH-1:0]      store_matchvec_lo_r, store_matchvec_hi_r;
-   logic                  store_coalesce_lo_r, store_coalesce_hi_r;
-
-   //----------------------------------------
-   // Logic starts here
-   //----------------------------------------
-   // Create high/low byte enables
-   assign store_byteen_ext_r[7:0]           = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-   assign store_byteen_hi_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[7:4] & {4{lsu_pkt_r.store}};
-   assign store_byteen_lo_r[BYTE_WIDTH-1:0] = store_byteen_ext_r[3:0] & {4{lsu_pkt_r.store}};
-
-   assign RdPtrPlus1[DEPTH_LOG2-1:0]     = RdPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus1[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 1'b1;
-   assign WrPtrPlus2[DEPTH_LOG2-1:0]     = WrPtr[DEPTH_LOG2-1:0] + 2'b10;
-
-   // ecc error on both hi/lo
-   assign dual_stbuf_write_r   = ldst_dual_r & store_stbuf_reqvld_r;
-   assign ldst_stbuf_reqvld_r  = ((lsu_commit_r | lsu_pkt_r.dma) & store_stbuf_reqvld_r);
-
-  // Store Buffer coalescing
-   for (genvar i=0; i<DEPTH; i++) begin: FindMatchEntry
-       assign store_matchvec_lo_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == lsu_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & ~stbuf_reset[i];
-       assign store_matchvec_hi_r[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == end_addr_r[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & dual_stbuf_write_r & ~stbuf_reset[i];
-   end: FindMatchEntry
-
-   assign store_coalesce_lo_r = |store_matchvec_lo_r[DEPTH-1:0];
-   assign store_coalesce_hi_r = |store_matchvec_hi_r[DEPTH-1:0];
-
-
-   if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
-      // Allocate new in this entry if :
-      // 1. wrptr, single allocate, lo did not coalesce
-      // 2. wrptr, double allocate, lo ^ hi coalesced
-      // 3. wrptr + 1, double alloacte, niether lo or hi coalesced
-      // Also update if there is a hi or a lo coalesce to this entry
-      // Store Buffer instantiation
-      for (genvar i=0; i<DEPTH; i++) begin: GenStBuf
-         assign stbuf_wr_en[i] = ldst_stbuf_reqvld_r & (
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  ~store_coalesce_lo_r)   |                                                    // Allocate : new Lo
-                                   ( (i == WrPtr[DEPTH_LOG2-1:0])      &  dual_stbuf_write_r & ~store_coalesce_hi_r) |                               // Allocate : only 1 new Write Either
-                                   ( (i == WrPtrPlus1[DEPTH_LOG2-1:0]) &  dual_stbuf_write_r & ~(store_coalesce_lo_r | store_coalesce_hi_r)) |     // Allocate2 : 2 new so Write Hi
-                                   store_matchvec_lo_r[i] | store_matchvec_hi_r[i]);                                                                 // Coalesced Write Lo or Hi
-         assign stbuf_reset[i] = (lsu_stbuf_commit_any | stbuf_reqvld_flushed_any) & (i == RdPtr[DEPTH_LOG2-1:0]);
-
-         // Mux select for start/end address
-         assign sel_lo[i]                         = ((~ldst_dual_r | store_stbuf_reqvld_r) & (i == WrPtr[DEPTH_LOG2-1:0]) & ~store_coalesce_lo_r) |   // lo allocated new entry
-                                                    store_matchvec_lo_r[i];                                                                                                           // lo coalesced in to this entry
-         assign stbuf_addrin[i][pt.LSU_SB_BITS-1:0]  = sel_lo[i] ? lsu_addr_r[pt.LSU_SB_BITS-1:0]       : end_addr_r[pt.LSU_SB_BITS-1:0];
-         assign stbuf_byteenin[i][BYTE_WIDTH-1:0] = sel_lo[i] ? (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_lo_r[BYTE_WIDTH-1:0])          : (stbuf_byteen[i][BYTE_WIDTH-1:0] | store_byteen_hi_r[BYTE_WIDTH-1:0]);
-         assign stbuf_datain[i][7:0]              = sel_lo[i] ? ((~stbuf_byteen[i][0] | store_byteen_lo_r[0]) ? store_datafn_lo_r[7:0]   : stbuf_data[i][7:0])    :
-                                                                ((~stbuf_byteen[i][0] | store_byteen_hi_r[0]) ? store_datafn_hi_r[7:0]   : stbuf_data[i][7:0]);
-         assign stbuf_datain[i][15:8]             = sel_lo[i] ? ((~stbuf_byteen[i][1] | store_byteen_lo_r[1]) ? store_datafn_lo_r[15:8]  : stbuf_data[i][15:8])    :
-                                                                ((~stbuf_byteen[i][1] | store_byteen_hi_r[1]) ? store_datafn_hi_r[15:8]  : stbuf_data[i][15:8]);
-         assign stbuf_datain[i][23:16]            = sel_lo[i] ? ((~stbuf_byteen[i][2] | store_byteen_lo_r[2]) ? store_datafn_lo_r[23:16] : stbuf_data[i][23:16])    :
-                                                                ((~stbuf_byteen[i][2] | store_byteen_hi_r[2]) ? store_datafn_hi_r[23:16] : stbuf_data[i][23:16]);
-         assign stbuf_datain[i][31:24]            = sel_lo[i] ? ((~stbuf_byteen[i][3] | store_byteen_lo_r[3]) ? store_datafn_lo_r[31:24] : stbuf_data[i][31:24])    :
-                                                                ((~stbuf_byteen[i][3] | store_byteen_hi_r[3]) ? store_datafn_hi_r[31:24] : stbuf_data[i][31:24]);
-
-         rvdffsc #(.WIDTH(1))              stbuf_vldff         (.din(1'b1),                                .dout(stbuf_vld[i]),                      .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffsc #(.WIDTH(1))              stbuf_killff        (.din(1'b1),                                .dout(stbuf_dma_kill[i]),                 .en(stbuf_dma_kill_en[i]), .clear(stbuf_reset[i]), .clk(lsu_free_c2_clk), .*);
-         rvdffe  #(.WIDTH(pt.LSU_SB_BITS)) stbuf_addrff        (.din(stbuf_addrin[i][pt.LSU_SB_BITS-1:0]), .dout(stbuf_addr[i][pt.LSU_SB_BITS-1:0]), .en(stbuf_wr_en[i]), .*);
-         rvdffsc #(.WIDTH(BYTE_WIDTH))     stbuf_byteenff      (.din(stbuf_byteenin[i][BYTE_WIDTH-1:0]),   .dout(stbuf_byteen[i][BYTE_WIDTH-1:0]),   .en(stbuf_wr_en[i]), .clear(stbuf_reset[i]), .clk(lsu_stbuf_c1_clk), .*);
-         rvdffe  #(.WIDTH(DATA_WIDTH))     stbuf_dataff        (.din(stbuf_datain[i][DATA_WIDTH-1:0]),     .dout(stbuf_data[i][DATA_WIDTH-1:0]),     .en(stbuf_wr_en[i]), .*);
-      end
-   end else begin: Gen_dccm_disable
-      assign stbuf_wr_en[DEPTH-1:0] = '0;
-      assign stbuf_reset[DEPTH-1:0] = '0;
-      assign stbuf_vld[DEPTH-1:0]   = '0;
-      assign stbuf_dma_kill[DEPTH-1:0] = '0;
-      assign stbuf_addr[DEPTH-1:0]  = '0;
-      assign stbuf_byteen[DEPTH-1:0] = '0;
-      assign stbuf_data[DEPTH-1:0]   = '0;
-   end
-
-   // Store Buffer drain logic
-   assign stbuf_reqvld_flushed_any            = stbuf_vld[RdPtr] & stbuf_dma_kill[RdPtr];
-   assign stbuf_reqvld_any                    = stbuf_vld[RdPtr] & ~stbuf_dma_kill[RdPtr] & ~(|stbuf_dma_kill_en[DEPTH-1:0]);  // Don't drain if some kill bit is being set this cycle
-   assign stbuf_addr_any[pt.LSU_SB_BITS-1:0]  = stbuf_addr[RdPtr][pt.LSU_SB_BITS-1:0];
-   assign stbuf_data_any[DATA_WIDTH-1:0]      = stbuf_data[RdPtr][DATA_WIDTH-1:0];
-
-   // Update the RdPtr/WrPtr logic
-   // Need to revert the WrPtr for flush cases. Also revert the pipe WrPtrs
-   assign WrPtrEn                  = (ldst_stbuf_reqvld_r  & ~dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r))  |  // writing 1 and did not coalesce
-                                     (ldst_stbuf_reqvld_r  &  dual_stbuf_write_r & ~(store_coalesce_hi_r & store_coalesce_lo_r));    // writing 2 and atleast 1 did not coalesce
-   assign NxtWrPtr[DEPTH_LOG2-1:0] = (ldst_stbuf_reqvld_r & dual_stbuf_write_r & ~(store_coalesce_hi_r | store_coalesce_lo_r)) ? WrPtrPlus2[DEPTH_LOG2-1:0] : WrPtrPlus1[DEPTH_LOG2-1:0];
-   assign RdPtrEn                  = lsu_stbuf_commit_any | stbuf_reqvld_flushed_any;
-   assign NxtRdPtr[DEPTH_LOG2-1:0] = RdPtrPlus1[DEPTH_LOG2-1:0];
-
-   always_comb begin
-      stbuf_numvld_any[3:0] = '0;
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_numvld_any[3:0] += {3'b0, stbuf_vld[i]};
-      end
-   end
-
-    // These go to store buffer to detect full
-   assign isdccmst_m = lsu_pkt_m.valid & lsu_pkt_m.store & addr_in_dccm_m & ~lsu_pkt_m.dma;
-   assign isdccmst_r = lsu_pkt_r.valid & lsu_pkt_r.store & addr_in_dccm_r & ~lsu_pkt_r.dma;
-
-   assign stbuf_specvld_m[1:0] = {1'b0,isdccmst_m} << (isdccmst_m & ldst_dual_m);
-   assign stbuf_specvld_r[1:0] = {1'b0,isdccmst_r} << (isdccmst_r & ldst_dual_r);
-   assign stbuf_specvld_any[3:0] = stbuf_numvld_any[3:0] +  {2'b0, stbuf_specvld_m[1:0]} + {2'b0, stbuf_specvld_r[1:0]};
-
-   assign lsu_stbuf_full_any  = (~ldst_dual_d & dec_lsu_valid_raw_d) ? (stbuf_specvld_any[3:0] >= DEPTH) : (stbuf_specvld_any[3:0] >= (DEPTH-1));
-   assign lsu_stbuf_empty_any = (stbuf_numvld_any[3:0] == 4'b0);
-
-   // Load forwarding logic from the store queue
-   assign cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = end_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   assign cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] = lsu_addr_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)];
-
-   always_comb begin: GenLdFwd
-      stbuf_fwdbyteen_hi_pre_m[BYTE_WIDTH-1:0]   = '0;
-      stbuf_fwdbyteen_lo_pre_m[BYTE_WIDTH-1:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_match_hi[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_hi_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-         stbuf_match_lo[i] = (stbuf_addr[i][pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)] == cmpaddr_lo_m[pt.LSU_SB_BITS-1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i] & ~stbuf_dma_kill[i] & addr_in_dccm_m;
-
-         // Kill the store buffer entry if there is a dma store since it already updated the dccm
-         stbuf_dma_kill_en[i] = (stbuf_match_hi[i] | stbuf_match_lo[i]) & lsu_pkt_m.valid & lsu_pkt_m.dma & lsu_pkt_m.store;
-
-         for (int j=0; j<BYTE_WIDTH; j++) begin
-            stbuf_fwdbyteenvec_hi[i][j] = stbuf_match_hi[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_hi_pre_m[j]  |= stbuf_fwdbyteenvec_hi[i][j];
-
-            stbuf_fwdbyteenvec_lo[i][j] = stbuf_match_lo[i] & stbuf_byteen[i][j] & stbuf_vld[i];
-            stbuf_fwdbyteen_lo_pre_m[j]  |= stbuf_fwdbyteenvec_lo[i][j];
-         end
-      end
-   end // block: GenLdFwd
-
-   always_comb begin: GenLdData
-      stbuf_fwddata_hi_pre_m[31:0]   = '0;
-      stbuf_fwddata_lo_pre_m[31:0]   = '0;
-
-      for (int i=0; i<DEPTH; i++) begin
-         stbuf_fwddata_hi_pre_m[31:0] |= {32{stbuf_match_hi[i]}} & stbuf_data[i][31:0];
-         stbuf_fwddata_lo_pre_m[31:0] |= {32{stbuf_match_lo[i]}} & stbuf_data[i][31:0];
-
-      end
-
-   end // block: GenLdData
-
-   // Create Hi/Lo signals - needed for the pipe forwarding
-   assign ldst_byteen_r[7:0] =  ({8{lsu_pkt_r.by}}    & 8'b0000_0001) |
-                                 ({8{lsu_pkt_r.half}}  & 8'b0000_0011) |
-                                 ({8{lsu_pkt_r.word}}  & 8'b0000_1111) |
-                                 ({8{lsu_pkt_r.dword}} & 8'b1111_1111);
-
-   assign ldst_byteen_ext_r[7:0] = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-
-   assign ldst_byteen_hi_r[3:0]   = ldst_byteen_ext_r[7:4];
-   assign ldst_byteen_lo_r[3:0]   = ldst_byteen_ext_r[3:0];
-
-   assign ld_addr_rhit_lo_lo = (lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_lo_hi = (end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma;
-   assign ld_addr_rhit_hi_lo = (lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-   assign ld_addr_rhit_hi_hi = (end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r.valid & lsu_pkt_r.store & ~lsu_pkt_r.dma & dual_stbuf_write_r;
-
-   for (genvar i=0; i<BYTE_WIDTH; i++) begin
-      assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i];
-      assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i];
-      assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i];
-
-      assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-       assign ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-       assign ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] = ({8{ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8*i)+7:(8*i)]) |
-                                                     ({8{ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8*i)+7:(8*i)]);
-
-      assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-      assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-
-      assign stbuf_fwdbyteen_hi_m[i] = ld_byte_hit_hi[i] | stbuf_fwdbyteen_hi_pre_m[i];
-      assign stbuf_fwdbyteen_lo_m[i] = ld_byte_hit_lo[i] | stbuf_fwdbyteen_lo_pre_m[i];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_lo_m[(8*i)+7:(8*i)] = ld_byte_rhit_lo[i]    ? ld_fwddata_rpipe_lo[(8*i)+7:(8*i)] : stbuf_fwddata_lo_pre_m[(8*i)+7:(8*i)];
-      // // Pipe vs Store Queue priority
-      assign stbuf_fwddata_hi_m[(8*i)+7:(8*i)] = ld_byte_rhit_hi[i]    ? ld_fwddata_rpipe_hi[(8*i)+7:(8*i)] : stbuf_fwddata_hi_pre_m[(8*i)+7:(8*i)];
-   end
-
-   // Flops
-   rvdffs #(.WIDTH(DEPTH_LOG2)) WrPtrff (.din(NxtWrPtr[DEPTH_LOG2-1:0]), .dout(WrPtr[DEPTH_LOG2-1:0]), .en(WrPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-   rvdffs #(.WIDTH(DEPTH_LOG2)) RdPtrff (.din(NxtRdPtr[DEPTH_LOG2-1:0]), .dout(RdPtr[DEPTH_LOG2-1:0]), .en(RdPtrEn), .clk(lsu_stbuf_c1_clk), .*);
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-//********************************************************************************
-// $Id$
-//
-//
-// Owner:
-// Function: LSU Trigger logic
-// Comments:
-//
-//********************************************************************************
-module eb1_lsu_trigger
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-   input eb1_trigger_pkt_t [3:0] trigger_pkt_any,            // trigger packet from dec
-   input eb1_lsu_pkt_t           lsu_pkt_m,                  // lsu packet
-   input logic [31:0]             lsu_addr_m,                 // address
-   input logic [31:0]             store_data_m,               // store data
-
-   output logic [3:0]             lsu_trigger_match_m         // match result
-);
-
-   logic               trigger_enable;
-   logic [3:0][31:0]  lsu_match_data;
-   logic [3:0]        lsu_trigger_data_match;
-   logic [31:0]       store_data_trigger_m;
-   logic [31:0]       ldst_addr_trigger_m;
-
-   // Generate the trigger enable (This is for power)
-   always_comb begin
-      trigger_enable = 1'b0;
-      for (int i=0; i<4; i++) begin
-         trigger_enable |= trigger_pkt_any[i].m;
-      end
-   end
-
-   assign store_data_trigger_m[31:0] = {({16{lsu_pkt_m.word}} & store_data_m[31:16]),({8{(lsu_pkt_m.half | lsu_pkt_m.word)}} & store_data_m[15:8]), store_data_m[7:0]} & {32{trigger_enable}};
-   assign ldst_addr_trigger_m[31:0]  = lsu_addr_m[31:0] & {32{trigger_enable}};
-
-
-   for (genvar i=0; i<4; i++) begin
-      assign lsu_match_data[i][31:0] = ({32{~trigger_pkt_any[i].select}} & ldst_addr_trigger_m[31:0]) |
-                                       ({32{trigger_pkt_any[i].select & trigger_pkt_any[i].store}} & store_data_trigger_m[31:0]);
-
-      rvmaskandmatch trigger_match (.mask(trigger_pkt_any[i].tdata2[31:0]), .data(lsu_match_data[i][31:0]), .masken(trigger_pkt_any[i].match), .match(lsu_trigger_data_match[i]));
-
-      assign lsu_trigger_match_m[i] = lsu_pkt_m.valid & ~lsu_pkt_m.dma & trigger_enable &
-                                        ((trigger_pkt_any[i].store & lsu_pkt_m.store) | (trigger_pkt_any[i].load & lsu_pkt_m.load & ~trigger_pkt_any[i].select)) &
-                                        lsu_trigger_data_match[i];
-   end
-
-
-endmodule // eb1_lsu_trigger
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License
-
-module rvjtag_tap #(
-parameter AWIDTH = 7
-)
-(
-input               trst,
-input               tck,
-input               tms,
-input               tdi,
-output   reg        tdo,
-output              tdoEnable,
-
-output [31:0]       wr_data,
-output [AWIDTH-1:0] wr_addr,
-output              wr_en,
-output              rd_en,
-
-input   [31:0]      rd_data,
-input   [1:0]       rd_status,
-
-output  reg         dmi_reset,
-output  reg         dmi_hard_reset,
-
-input   [2:0]       idle,
-input   [1:0]       dmi_stat,
-/*
---  revisionCode        : 4'h0;
---  manufacturersIdCode : 11'h45;
---  deviceIdCode        : 16'h0001;
---  order MSB .. LSB -> [4 bit version or revision] [16 bit part number] [11 bit manufacturer id] [value of 1'b1 in LSB]
-*/
-input   [31:1]      jtag_id,
-input   [3:0]       version
-);
-
-localparam USER_DR_LENGTH = AWIDTH + 34;
-
-
-reg [USER_DR_LENGTH-1:0] sr, nsr, dr;
-
-///////////////////////////////////////////////////////
-//                      Tap controller
-///////////////////////////////////////////////////////
-logic[3:0] state, nstate;
-logic [4:0] ir;
-wire jtag_reset;
-wire shift_dr;
-wire pause_dr;
-wire update_dr;
-wire capture_dr;
-wire shift_ir;
-wire pause_ir ;
-wire update_ir ;
-wire capture_ir;
-wire[1:0] dr_en;
-wire devid_sel;
-wire [5:0] abits;
-
-assign abits = AWIDTH[5:0];
-
-
-localparam TEST_LOGIC_RESET_STATE = 0;
-localparam RUN_TEST_IDLE_STATE    = 1;
-localparam SELECT_DR_SCAN_STATE   = 2;
-localparam CAPTURE_DR_STATE       = 3;
-localparam SHIFT_DR_STATE         = 4;
-localparam EXIT1_DR_STATE         = 5;
-localparam PAUSE_DR_STATE         = 6;
-localparam EXIT2_DR_STATE         = 7;
-localparam UPDATE_DR_STATE        = 8;
-localparam SELECT_IR_SCAN_STATE   = 9;
-localparam CAPTURE_IR_STATE       = 10;
-localparam SHIFT_IR_STATE         = 11;
-localparam EXIT1_IR_STATE         = 12;
-localparam PAUSE_IR_STATE         = 13;
-localparam EXIT2_IR_STATE         = 14;
-localparam UPDATE_IR_STATE        = 15;
-
-always_comb  begin
-    nstate = state;
-    case(state)
-    TEST_LOGIC_RESET_STATE: nstate = tms ? TEST_LOGIC_RESET_STATE : RUN_TEST_IDLE_STATE;
-    RUN_TEST_IDLE_STATE:    nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_DR_SCAN_STATE:   nstate = tms ? SELECT_IR_SCAN_STATE   : CAPTURE_DR_STATE;
-    CAPTURE_DR_STATE:       nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    SHIFT_DR_STATE:         nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    EXIT1_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : PAUSE_DR_STATE;
-    PAUSE_DR_STATE:         nstate = tms ? EXIT2_DR_STATE         : PAUSE_DR_STATE;
-    EXIT2_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : SHIFT_DR_STATE;
-    UPDATE_DR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_IR_SCAN_STATE:   nstate = tms ? TEST_LOGIC_RESET_STATE : CAPTURE_IR_STATE;
-    CAPTURE_IR_STATE:       nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    SHIFT_IR_STATE:         nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    EXIT1_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : PAUSE_IR_STATE;
-    PAUSE_IR_STATE:         nstate = tms ? EXIT2_IR_STATE         : PAUSE_IR_STATE;
-    EXIT2_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : SHIFT_IR_STATE;
-    UPDATE_IR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    default:                nstate = TEST_LOGIC_RESET_STATE;
-    endcase
-end
-
-always @ (posedge tck or negedge trst) begin
-    if(!trst) state <= TEST_LOGIC_RESET_STATE;
-    else state <= nstate;
-end
-
-assign jtag_reset = state == TEST_LOGIC_RESET_STATE;
-assign shift_dr   = state == SHIFT_DR_STATE;
-assign pause_dr   = state == PAUSE_DR_STATE;
-assign update_dr  = state == UPDATE_DR_STATE;
-assign capture_dr = state == CAPTURE_DR_STATE;
-assign shift_ir   = state == SHIFT_IR_STATE;
-assign pause_ir   = state == PAUSE_IR_STATE;
-assign update_ir  = state == UPDATE_IR_STATE;
-assign capture_ir = state == CAPTURE_IR_STATE;
-
-assign tdoEnable = shift_dr | shift_ir;
-
-///////////////////////////////////////////////////////
-//                      IR register
-///////////////////////////////////////////////////////
-
-always @ (negedge tck or negedge trst) begin
-   if (!trst) ir <= 5'b1;
-   else begin
-      if (jtag_reset) ir <= 5'b1;
-      else if (update_ir) ir <= (sr[4:0] == '0) ? 5'h1f :sr[4:0];
-   end
-end
-
-
-assign devid_sel  = ir == 5'b00001;
-assign dr_en[0]   = ir == 5'b10000;
-assign dr_en[1]   = ir == 5'b10001;
-
-///////////////////////////////////////////////////////
-//                      Shift register
-///////////////////////////////////////////////////////
-always @ (posedge tck or negedge trst) begin
-    if(!trst)begin
-        sr <= '0;
-    end
-    else begin
-        sr <= nsr;
-    end
-end
-
-// SR next value
-always_comb begin
-    nsr = sr;
-    case(1)
-    shift_dr:   begin
-                    case(1)
-                    dr_en[1]:   nsr = {tdi, sr[USER_DR_LENGTH-1:1]};
-
-                    dr_en[0],
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}},tdi, sr[31:1]};
-                    default:    nsr = {{USER_DR_LENGTH-1{1'b0}},tdi}; // bypass
-                    endcase
-                end
-    capture_dr: begin
-                    nsr[0] = 1'b0;
-                    case(1)
-                    dr_en[0]:   nsr = {{USER_DR_LENGTH-15{1'b0}}, idle, dmi_stat, abits, version};
-                    dr_en[1]:   nsr = {{AWIDTH{1'b0}}, rd_data, rd_status};
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}}, jtag_id, 1'b1};
-                    endcase
-                end
-    shift_ir:   nsr = {{USER_DR_LENGTH-5{1'b0}},tdi, sr[4:1]};
-    capture_ir: nsr = {{USER_DR_LENGTH-1{1'b0}},1'b1};
-    endcase
-end
-
-// TDO retiming
-always @ (negedge tck ) tdo <= sr[0];
-
-// DMI CS register
-always @ (posedge tck or negedge trst) begin
-    if(!trst) begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-    else if (update_dr & dr_en[0]) begin
-        dmi_hard_reset <= sr[17];
-        dmi_reset      <= sr[16];
-    end
-    else begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-end
-
-// DR register
-always @ (posedge tck or negedge trst) begin
-    if(!trst)
-        dr <=  '0;
-    else begin
-        if (update_dr & dr_en[1])
-            dr <= sr;
-        else
-            dr <= {dr[USER_DR_LENGTH-1:2],2'b0};
-    end
-end
-
-assign {wr_addr, wr_data, wr_en, rd_en} = dr;
-
-
-
-
-endmodule
-
-module eb1_btb_tag_hash 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-}) (
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-endmodule
-
-module eb1_btb_tag_hash_fold  
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-                       input logic [pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1] pc,
-                       output logic [pt.BTB_BTAG_SIZE-1:0] hash
-                       );
-
-    assign hash = {(
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE+1] ^
-                   pc[pt.BTB_ADDR_HI+pt.BTB_BTAG_SIZE:pt.BTB_ADDR_HI+1])};
-
-endmodule
-
-module eb1_btb_addr_hash  
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-                        input logic [pt.BTB_INDEX3_HI:pt.BTB_INDEX1_LO] pc,
-                        output logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hash
-                        );
-
-
-if(pt.BTB_FOLD2_INDEX_HASH) begin : fold2
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-   else begin
-   assign hash[pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] = pc[pt.BTB_INDEX1_HI:pt.BTB_INDEX1_LO] ^
-                                                pc[pt.BTB_INDEX2_HI:pt.BTB_INDEX2_LO] ^
-                                                pc[pt.BTB_INDEX3_HI:pt.BTB_INDEX3_LO];
-end
-
-endmodule
-
-module eb1_btb_ghr_hash 
-import eb1_pkg::*;
-#(
-parameter eb1_param_t pt = '{
-	BHT_ADDR_HI            : 8'h08         ,
-	BHT_ADDR_LO            : 6'h02         ,
-	BHT_ARRAY_DEPTH        : 15'h0080       ,
-	BHT_GHR_HASH_1         : 5'h00         ,
-	BHT_GHR_SIZE           : 8'h07         ,
-	BHT_SIZE               : 16'h0100       ,
-	BITMANIP_ZBA           : 5'h00         ,
-	BITMANIP_ZBB           : 5'h00         ,
-	BITMANIP_ZBC           : 5'h00         ,
-	BITMANIP_ZBE           : 5'h00         ,
-	BITMANIP_ZBF           : 5'h00         ,
-	BITMANIP_ZBP           : 5'h00         ,
-	BITMANIP_ZBR           : 5'h00         ,
-	BITMANIP_ZBS           : 5'h00         ,
-	BTB_ADDR_HI            : 9'h008        ,
-	BTB_ADDR_LO            : 6'h02         ,
-	BTB_ARRAY_DEPTH        : 13'h0080       ,
-	BTB_BTAG_FOLD          : 5'h00         ,
-	BTB_BTAG_SIZE          : 9'h006        ,
-	BTB_ENABLE             : 5'h01         ,
-	BTB_FOLD2_INDEX_HASH   : 5'h00         ,
-	BTB_FULLYA             : 5'h00         ,
-	BTB_INDEX1_HI          : 9'h008        ,
-	BTB_INDEX1_LO          : 9'h002        ,
-	BTB_INDEX2_HI          : 9'h00F        ,
-	BTB_INDEX2_LO          : 9'h009        ,
-	BTB_INDEX3_HI          : 9'h016        ,
-	BTB_INDEX3_LO          : 9'h010        ,
-	BTB_SIZE               : 14'h0100       ,
-	BTB_TOFFSET_SIZE       : 9'h00C        ,
-	BUILD_AHB_LITE         : 4'h0          ,
-	BUILD_AXI4             : 5'h01         ,
-	BUILD_AXI_NATIVE       : 5'h01         ,
-	BUS_PRTY_DEFAULT       : 6'h03         ,
-	DATA_ACCESS_ADDR0      : 36'h000000000  ,
-	DATA_ACCESS_ADDR1      : 36'h000000000  ,
-	DATA_ACCESS_ADDR2      : 36'h000000000  ,
-	DATA_ACCESS_ADDR3      : 36'h000000000  ,
-	DATA_ACCESS_ADDR4      : 36'h000000000  ,
-	DATA_ACCESS_ADDR5      : 36'h000000000  ,
-	DATA_ACCESS_ADDR6      : 36'h000000000  ,
-	DATA_ACCESS_ADDR7      : 36'h000000000  ,
-	DATA_ACCESS_ENABLE0    : 5'h00         ,
-	DATA_ACCESS_ENABLE1    : 5'h00         ,
-	DATA_ACCESS_ENABLE2    : 5'h00         ,
-	DATA_ACCESS_ENABLE3    : 5'h00         ,
-	DATA_ACCESS_ENABLE4    : 5'h00         ,
-	DATA_ACCESS_ENABLE5    : 5'h00         ,
-	DATA_ACCESS_ENABLE6    : 5'h00         ,
-	DATA_ACCESS_ENABLE7    : 5'h00         ,
-	DATA_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	DATA_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	DCCM_BANK_BITS         : 7'h02         ,
-	DCCM_BITS              : 9'h00C        ,
-	DCCM_BYTE_WIDTH        : 7'h04         ,
-	DCCM_DATA_WIDTH        : 10'h020        ,
-	DCCM_ECC_WIDTH         : 7'h07         ,
-	DCCM_ENABLE            : 5'h01         ,
-	DCCM_FDATA_WIDTH       : 10'h027        ,
-	DCCM_INDEX_BITS        : 8'h08         ,
-	DCCM_NUM_BANKS         : 9'h004        ,
-	DCCM_REGION            : 8'h0F         ,
-	DCCM_SADR              : 36'h0F0040000  ,
-	DCCM_SIZE              : 14'h0004       ,
-	DCCM_WIDTH_BITS        : 6'h02         ,
-	DIV_BIT                : 7'h03         ,
-	DIV_NEW                : 5'h01         ,
-	DMA_BUF_DEPTH          : 7'h05         ,
-	DMA_BUS_ID             : 9'h001        ,
-	DMA_BUS_PRTY           : 6'h02         ,
-	DMA_BUS_TAG            : 8'h01         ,
-	FAST_INTERRUPT_REDIRECT : 5'h01         ,
-	ICACHE_2BANKS          : 5'h01         ,
-	ICACHE_BANK_BITS       : 7'h01         ,
-	ICACHE_BANK_HI         : 7'h03         ,
-	ICACHE_BANK_LO         : 6'h03         ,
-	ICACHE_BANK_WIDTH      : 8'h08         ,
-	ICACHE_BANKS_WAY       : 7'h02         ,
-	ICACHE_BEAT_ADDR_HI    : 8'h05         ,
-	ICACHE_BEAT_BITS       : 8'h03         ,
-	ICACHE_BYPASS_ENABLE   : 5'h01         ,
-	ICACHE_DATA_DEPTH      : 18'h00200      ,
-	ICACHE_DATA_INDEX_LO   : 7'h04         ,
-	ICACHE_DATA_WIDTH      : 11'h040        ,
-	ICACHE_ECC             : 5'h01         ,
-	ICACHE_ENABLE          : 5'h00         ,
-	ICACHE_FDATA_WIDTH     : 11'h047        ,
-	ICACHE_INDEX_HI        : 9'h00C        ,
-	ICACHE_LN_SZ           : 11'h040        ,
-	ICACHE_NUM_BEATS       : 8'h08         ,
-	ICACHE_NUM_BYPASS      : 8'h02         ,
-	ICACHE_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_NUM_WAYS        : 7'h02         ,
-	ICACHE_ONLY            : 5'h00         ,
-	ICACHE_SCND_LAST       : 8'h06         ,
-	ICACHE_SIZE            : 13'h0010       ,
-	ICACHE_STATUS_BITS     : 7'h01         ,
-	ICACHE_TAG_BYPASS_ENABLE : 5'h01         ,
-	ICACHE_TAG_DEPTH       : 17'h00080      ,
-	ICACHE_TAG_INDEX_LO    : 7'h06         ,
-	ICACHE_TAG_LO          : 9'h00D        ,
-	ICACHE_TAG_NUM_BYPASS  : 8'h02         ,
-	ICACHE_TAG_NUM_BYPASS_WIDTH : 8'h02         ,
-	ICACHE_WAYPACK         : 5'h01         ,
-	ICCM_BANK_BITS         : 7'h02         ,
-	ICCM_BANK_HI           : 9'h003        ,
-	ICCM_BANK_INDEX_LO     : 9'h004        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h08         ,
-	ICCM_NUM_BANKS         : 9'h004        ,
-	ICCM_ONLY              : 5'h01         ,
-	ICCM_REGION            : 8'h0A         ,
-	ICCM_SADR              : 36'h0AFFFF000  ,
-	ICCM_SIZE              : 14'h0004       ,
-	IFU_BUS_ID             : 5'h01         ,
-	IFU_BUS_PRTY           : 6'h02         ,
-	IFU_BUS_TAG            : 8'h03         ,
-	INST_ACCESS_ADDR0      : 36'h000000000  ,
-	INST_ACCESS_ADDR1      : 36'h000000000  ,
-	INST_ACCESS_ADDR2      : 36'h000000000  ,
-	INST_ACCESS_ADDR3      : 36'h000000000  ,
-	INST_ACCESS_ADDR4      : 36'h000000000  ,
-	INST_ACCESS_ADDR5      : 36'h000000000  ,
-	INST_ACCESS_ADDR6      : 36'h000000000  ,
-	INST_ACCESS_ADDR7      : 36'h000000000  ,
-	INST_ACCESS_ENABLE0    : 5'h00         ,
-	INST_ACCESS_ENABLE1    : 5'h00         ,
-	INST_ACCESS_ENABLE2    : 5'h00         ,
-	INST_ACCESS_ENABLE3    : 5'h00         ,
-	INST_ACCESS_ENABLE4    : 5'h00         ,
-	INST_ACCESS_ENABLE5    : 5'h00         ,
-	INST_ACCESS_ENABLE6    : 5'h00         ,
-	INST_ACCESS_ENABLE7    : 5'h00         ,
-	INST_ACCESS_MASK0      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK1      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK2      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK3      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK4      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK5      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK6      : 36'h0FFFFFFFF  ,
-	INST_ACCESS_MASK7      : 36'h0FFFFFFFF  ,
-	LOAD_TO_USE_PLUS1      : 5'h00         ,
-	LSU2DMA                : 5'h00         ,
-	LSU_BUS_ID             : 5'h01         ,
-	LSU_BUS_PRTY           : 6'h02         ,
-	LSU_BUS_TAG            : 8'h03         ,
-	LSU_NUM_NBLOAD         : 9'h004        ,
-	LSU_NUM_NBLOAD_WIDTH   : 7'h02         ,
-	LSU_SB_BITS            : 9'h00C        ,
-	LSU_STBUF_DEPTH        : 8'h04         ,
-	NO_ICCM_NO_ICACHE      : 5'h00         ,
-	PIC_2CYCLE             : 5'h00         ,
-	PIC_BASE_ADDR          : 36'h0F00C0000  ,
-	PIC_BITS               : 9'h00F        ,
-	PIC_INT_WORDS          : 8'h01         ,
-	PIC_REGION             : 8'h0F         ,
-	PIC_SIZE               : 13'h0020       ,
-	PIC_TOTAL_INT          : 12'h01F        ,
-	PIC_TOTAL_INT_PLUS1    : 13'h0020       ,
-	RET_STACK_SIZE         : 8'h08         ,
-	SB_BUS_ID              : 5'h01         ,
-	SB_BUS_PRTY            : 6'h02         ,
-	SB_BUS_TAG             : 8'h01         ,
-	TIMER_LEGAL_EN         : 5'h01         
-})(
-                       input logic [pt.BTB_ADDR_HI:pt.BTB_ADDR_LO] hashin,
-                       input logic [pt.BHT_GHR_SIZE-1:0] ghr,
-                       output logic [pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] hash
-                       );
-
-   // The hash function is too complex to write in verilog for all cases.
-   // The config script generates the logic string based on the bp config.
-   if(pt.BHT_GHR_HASH_1) begin : ghrhash_cfg1
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { ghr[pt.BHT_GHR_SIZE-1:pt.BTB_INDEX1_HI-1], hashin[pt.BTB_INDEX1_HI:2]^ghr[pt.BTB_INDEX1_HI-2:0]};
-   end
-   else begin : ghrhash_cfg2
-     assign hash[pt.BHT_ADDR_HI:pt.BHT_ADDR_LO] = { hashin[pt.BHT_GHR_SIZE+1:2]^ghr[pt.BHT_GHR_SIZE-1:0]};
-   end
-
-
-endmodule
-
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// all flops call the rvdff flop
-
-//// `include "common_defines.vh"
-module rvdff #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic                   rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-
-
-   always_ff @(posedge clk or negedge rst_l) begin
-      if (rst_l == 0)
-        dout[WIDTH-1:0] <= 0;
-      else
-        dout[WIDTH-1:0] <= din[WIDTH-1:0];
-   end
-
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-   rvdff #(WIDTH) dffs (.din((en) ? din[WIDTH-1:0] : dout[WIDTH-1:0]), .*);
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic           clk,
-     input logic                   rst_l,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   assign din_new = {WIDTH{~clear}} & (en ? din[WIDTH-1:0] : dout[WIDTH-1:0]);
-   rvdff #(WIDTH) dffsc (.din(din_new[WIDTH-1:0]), .*);
-end
-endmodule
-
-// _fpga versions
-module rvdff_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-    rvdff #(WIDTH)  dff (.*);
-end
-endmodule
-
-// rvdff with 2:1 input mux to flop din iff sel==1
-module rvdffs_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic           clk,
-     input logic           clken,
-     input logic           rawclk,
-     input logic           rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-if (SHORT == 1) begin : genblock
-   assign dout = din;
-end
-else begin : genblock
-   rvdffs #(WIDTH)   dffs (.*);
-end
-
-endmodule
-
-// rvdff with en and clear
-module rvdffsc_fpga #( parameter WIDTH=1, SHORT=0 )
-   (
-     input logic [WIDTH-1:0] din,
-     input logic             en,
-     input logic             clear,
-     input logic             clk,
-     input logic             clken,
-     input logic             rawclk,
-     input logic             rst_l,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:0]          din_new;
-if (SHORT == 1) begin
-   assign dout = din;
-end
-else begin
-   rvdffsc #(WIDTH)   dffsc (.*);
-end
-endmodule
-
-
-module rvdffe #( parameter WIDTH=1, SHORT=0, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic           en,
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-
-if (SHORT == 1) begin : genblock
-   if (1) begin : genblock
-      assign dout = din;
-   end
-end
-else begin : genblock
-
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-
-end // else: !if(SHORT == 1)
-
-endmodule // rvdffe
-
-
-module rvdffpcie #( parameter WIDTH=31 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-
-      rvdfflie #(.WIDTH(WIDTH), .LEFT(19)) dff (.*);
-
-endmodule
-
-// format: { LEFT, EXTRA }
-// LEFT # of bits will be done with rvdffie, all else EXTRA with rvdffe
-module rvdfflie #( parameter WIDTH=16, LEFT=8 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam EXTRA = WIDTH-LEFT;
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam XMSB = LLSB-1;
-   localparam XLSB = LLSB-EXTRA;
-
-
-
-
-      rvdffiee #(LEFT)  dff_left  (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-
-      rvdffe  #(EXTRA)  dff_extra (.*, .din(din[XMSB:XLSB]), .dout(dout[XMSB:XLSB]));
-
-endmodule
-
-
-
-
-// special power flop for predict packet
-// format: { LEFT, RIGHT==31 }
-// LEFT # of bits will be done with rvdffe; RIGHT is enabled by LEFT[LSB] & en
-module rvdffppe #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] din,
-     input  logic             clk,
-     input  logic             rst_l,
-     input  logic             en,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   localparam RIGHT = 31;
-   localparam LEFT = WIDTH - RIGHT;
-
-   localparam LMSB = WIDTH-1;
-   localparam LLSB = LMSB-LEFT+1;
-   localparam RMSB = LLSB-1;
-   localparam RLSB = LLSB-RIGHT;
-
-
-
-
-
-      rvdffe #(LEFT)     dff_left (.*, .din(din[LMSB:LLSB]), .dout(dout[LMSB:LLSB]));
-
-      rvdffe #(RIGHT)   dff_right (.*, .din(din[RMSB:RLSB]), .dout(dout[RMSB:RLSB]), .en(en & din[LLSB]));  // qualify with pret
-
-endmodule
-
-
-
-
-module rvdffie #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic             scan_mode,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      en;
-
-
-
-
-
-
-
-
-
-      assign en = |(din ^ dout);
-
-
-      rvclkhdr clkhdr ( .* );
-      rvdff #(WIDTH) dff (.*, .clk(l1clk));
-
-
-
-
-endmodule
-
-// ie flop but it has an .en input
-module rvdffiee #( parameter WIDTH=1, OVERRIDE=0 )
-   (
-     input  logic [WIDTH-1:0] din,
-
-     input  logic           clk,
-     input  logic           rst_l,
-     input  logic           scan_mode,
-     input  logic           en,
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic                      l1clk;
-   logic                      final_en;
-
-
-
-      assign final_en = (|(din ^ dout)) & en;
-
-
-      rvdffe #(WIDTH) dff (.*,  .en(final_en));
-
-
-
-endmodule
-
-
-
-module rvsyncss #(parameter WIDTH = 251)
-   (
-     input  logic                 clk,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff #(WIDTH) sync_ff1  (.*, .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff #(WIDTH) sync_ff2  (.*, .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvsyncss_fpga #(parameter WIDTH = 251)
-   (
-     input  logic                 gw_clk,
-     input  logic                 rawclk,
-     input  logic                 clken,
-     input  logic                 rst_l,
-     input  logic [WIDTH-1:0]     din,
-     output logic [WIDTH-1:0]     dout
-     );
-
-   logic [WIDTH-1:0]              din_ff1;
-
-   rvdff_fpga #(WIDTH) sync_ff1  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din[WIDTH-1:0]),     .dout(din_ff1[WIDTH-1:0]));
-   rvdff_fpga #(WIDTH) sync_ff2  (.*, .clk(gw_clk), .rawclk(rawclk), .clken(clken), .din (din_ff1[WIDTH-1:0]), .dout(dout[WIDTH-1:0]));
-
-endmodule // rvsyncss
-
-module rvlsadder
-  (
-    input logic [31:0] rs1,
-    input logic [11:0] offset,
-
-    output logic [31:0] dout
-    );
-
-   logic                cout;
-   logic                sign;
-
-   logic [31:12]        rs1_inc;
-   logic [31:12]        rs1_dec;
-
-   assign {cout,dout[11:0]} = {1'b0,rs1[11:0]} + {1'b0,offset[11:0]};
-
-   assign rs1_inc[31:12] = rs1[31:12] + 1;
-
-   assign rs1_dec[31:12] = rs1[31:12] - 1;
-
-   assign sign = offset[11];
-
-   assign dout[31:12] = ({20{  sign ^~  cout}} &     rs1[31:12]) |
-                        ({20{ ~sign &   cout}}  & rs1_inc[31:12]) |
-                        ({20{  sign &  ~cout}}  & rs1_dec[31:12]);
-
-endmodule // rvlsadder
-
-// assume we only maintain pc[31:1] in the pipe
-
-module rvbradder
-  (
-    input [31:1] pc,
-    input [12:1] offset,
-
-    output [31:1] dout
-    );
-
-   logic          cout;
-   logic          sign;
-
-   logic [31:13]  pc_inc;
-   logic [31:13]  pc_dec;
-
-   assign {cout,dout[12:1]} = {1'b0,pc[12:1]} + {1'b0,offset[12:1]};
-
-   assign pc_inc[31:13] = pc[31:13] + 1;
-
-   assign pc_dec[31:13] = pc[31:13] - 1;
-
-   assign sign = offset[12];
-
-
-   assign dout[31:13] = ({19{  sign ^~  cout}} &     pc[31:13]) |
-                        ({19{ ~sign &   cout}}  & pc_inc[31:13]) |
-                        ({19{  sign &  ~cout}}  & pc_dec[31:13]);
-
-
-endmodule // rvbradder
-
-
-// 2s complement circuit
-module rvtwoscomp #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-
-   logic [WIDTH-1:1]          dout_temp;   // holding for all other bits except for the lsb. LSB is always din
-
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : flip_after_first_one
-      assign dout_temp[i] = (|din[i-1:0]) ? ~din[i] : din[i];
-   end : flip_after_first_one
-
-   assign dout[WIDTH-1:0]  = { dout_temp[WIDTH-1:1], din[0] };
-
-endmodule  // 2'scomp
-
-// find first
-module rvfindfirst1 #( parameter WIDTH=32, SHIFT=$clog2(WIDTH) )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [SHIFT-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[SHIFT-1:0] = {SHIFT{1'b0}};
-      done    = 1'b0;
-
-      for ( int i = WIDTH-1; i > 0; i-- )  begin : find_first_one
-         done |= din[i];
-         dout[SHIFT-1:0] += done ? 1'b0 : 1'b1;
-      end : find_first_one
-   end
-endmodule // rvfindfirst1
-
-module rvfindfirst1hot #( parameter WIDTH=32 )
-   (
-     input logic [WIDTH-1:0] din,
-
-     output logic [WIDTH-1:0] dout
-     );
-   logic                      done;
-
-   always_comb begin
-      dout[WIDTH-1:0] = {WIDTH{1'b0}};
-      done    = 1'b0;
-      for ( int i = 0; i < WIDTH; i++ )  begin : find_first_one
-         dout[i] = ~done & din[i];
-         done   |= din[i];
-      end : find_first_one
-   end
-endmodule // rvfindfirst1hot
-
-// mask and match function matches bits after finding the first 0 position
-// find first starting from LSB. Skip that location and match the rest of the bits
-module rvmaskandmatch #( parameter WIDTH=32 )
-   (
-     input  logic [WIDTH-1:0] mask,     // this will have the mask in the lower bit positions
-     input  logic [WIDTH-1:0] data,     // this is what needs to be matched on the upper bits with the mask's upper bits
-     input  logic             masken,   // when 1 : do mask. 0 : full match
-     output logic             match
-     );
-
-   logic [WIDTH-1:0]          matchvec;
-   logic                      masken_or_fullmask;
-
-   assign masken_or_fullmask = masken &  ~(&mask[WIDTH-1:0]);
-
-   assign matchvec[0]        = masken_or_fullmask | (mask[0] == data[0]);
-   genvar                     i;
-
-   for ( i = 1; i < WIDTH; i++ )  begin : match_after_first_zero
-      assign matchvec[i] = (&mask[i-1:0] & masken_or_fullmask) ? 1'b1 : (mask[i] == data[i]);
-   end : match_after_first_zero
-
-   assign match  = &matchvec[WIDTH-1:0];    // all bits either matched or were masked off
-
-endmodule // rvmaskandmatch
-
-
-
-
-// Check if the S_ADDR <= addr < E_ADDR
-module rvrangecheck  #(CCM_SADR = 32'h0,
-                       CCM_SIZE  = 128) (
-   input  logic [31:0]   addr,                             // Address to be checked for range
-   output logic          in_range,                            // S_ADDR <= start_addr < E_ADDR
-   output logic          in_region
-);
-
-   localparam REGION_BITS = 4;
-   localparam MASK_BITS = 10 + $clog2(CCM_SIZE);
-
-   logic [31:0]          start_addr;
-   logic [3:0]           region;
-
-   assign start_addr[31:0]        = CCM_SADR;
-   assign region[REGION_BITS-1:0] = start_addr[31:(32-REGION_BITS)];
-
-   assign in_region = (addr[31:(32-REGION_BITS)] == region[REGION_BITS-1:0]);
-   if (CCM_SIZE  == 48)
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]) & ~(&addr[MASK_BITS-1 : MASK_BITS-2]);
-   else
-    assign in_range  = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]);
-
-endmodule  // rvrangechecker
-
-// 16 bit even parity generator
-module rveven_paritygen #(WIDTH = 16)  (
-                                         input  logic [WIDTH-1:0]  data_in,         // Data
-                                         output logic              parity_out       // generated even parity
-                                         );
-
-   assign  parity_out =  ^(data_in[WIDTH-1:0]) ;
-
-endmodule  // rveven_paritygen
-
-module rveven_paritycheck #(WIDTH = 16)  (
-                                           input  logic [WIDTH-1:0]  data_in,         // Data
-                                           input  logic              parity_in,
-                                           output logic              parity_err       // Parity error
-                                           );
-
-   assign  parity_err =  ^(data_in[WIDTH-1:0]) ^ parity_in ;
-
-endmodule  // rveven_paritycheck
-
-module rvecc_encode  (
-                      input [31:0] din,
-                      output [6:0] ecc_out
-                      );
-logic [5:0] ecc_out_temp;
-
-   assign ecc_out_temp[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_out_temp[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_out_temp[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_out_temp[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_out_temp[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   assign ecc_out[6:0] = {(^din[31:0])^(^ecc_out_temp[5:0]),ecc_out_temp[5:0]};
-
-endmodule // rvecc_encode
-
-module rvecc_decode  (
-                      input         en,
-                      input [31:0]  din,
-                      input [6:0]   ecc_in,
-                      input         sed_ded,    // only do detection and no correction. Used for the I$
-                      output [31:0] dout,
-                      output [6:0]  ecc_out,
-                      output        single_ecc_error,
-                      output        double_ecc_error
-
-                      );
-
-   logic [6:0]                      ecc_check;
-   logic [38:0]                     error_mask;
-   logic [38:0]                     din_plus_parity, dout_plus_parity;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30];
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31];
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31];
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25];
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31];
-
-   // This is the parity bit
-   assign ecc_check[6] = ((^din[31:0])^(^ecc_in[6:0])) & ~sed_ded;
-
-   assign single_ecc_error = en & (ecc_check[6:0] != 0) & ecc_check[6];   // this will never be on for sed_ded
-   assign double_ecc_error = en & (ecc_check[6:0] != 0) & ~ecc_check[6];  // all errors in the sed_ded case will be recorded as DE
-
-   // Generate the mask for error correctiong
-   for (genvar i=1; i<40; i++) begin
-      assign error_mask[i-1] = (ecc_check[5:0] == i);
-   end
-
-   // Generate the corrected data
-   assign din_plus_parity[38:0] = {ecc_in[6], din[31:26], ecc_in[5], din[25:11], ecc_in[4], din[10:4], ecc_in[3], din[3:1], ecc_in[2], din[0], ecc_in[1:0]};
-
-   assign dout_plus_parity[38:0] = single_ecc_error ? (error_mask[38:0] ^ din_plus_parity[38:0]) : din_plus_parity[38:0];
-   assign dout[31:0]             = {dout_plus_parity[37:32], dout_plus_parity[30:16], dout_plus_parity[14:8], dout_plus_parity[6:4], dout_plus_parity[2]};
-   assign ecc_out[6:0]           = {(dout_plus_parity[38] ^ (ecc_check[6:0] == 7'b1000000)), dout_plus_parity[31], dout_plus_parity[15], dout_plus_parity[7], dout_plus_parity[3], dout_plus_parity[1:0]};
-
-endmodule // rvecc_decode
-
-module rvecc_encode_64  (
-                      input [63:0] din,
-                      output [6:0] ecc_out
-                      );
-  assign ecc_out[0] = din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_out[1] = din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_out[2] = din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_out[3] = din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[4] = din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[5] = din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_out[6] = din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-endmodule // rvecc_encode_64
-
-
-module rvecc_decode_64  (
-                      input         en,
-                      input [63:0]  din,
-                      input [6:0]   ecc_in,
-                      output        ecc_error
-                      );
-
-   logic [6:0]                      ecc_check;
-
-   // Generate the ecc bits
-   assign ecc_check[0] = ecc_in[0]^din[0]^din[1]^din[3]^din[4]^din[6]^din[8]^din[10]^din[11]^din[13]^din[15]^din[17]^din[19]^din[21]^din[23]^din[25]^din[26]^din[28]^din[30]^din[32]^din[34]^din[36]^din[38]^din[40]^din[42]^din[44]^din[46]^din[48]^din[50]^din[52]^din[54]^din[56]^din[57]^din[59]^din[61]^din[63];
-
-   assign ecc_check[1] = ecc_in[1]^din[0]^din[2]^din[3]^din[5]^din[6]^din[9]^din[10]^din[12]^din[13]^din[16]^din[17]^din[20]^din[21]^din[24]^din[25]^din[27]^din[28]^din[31]^din[32]^din[35]^din[36]^din[39]^din[40]^din[43]^din[44]^din[47]^din[48]^din[51]^din[52]^din[55]^din[56]^din[58]^din[59]^din[62]^din[63];
-
-   assign ecc_check[2] = ecc_in[2]^din[1]^din[2]^din[3]^din[7]^din[8]^din[9]^din[10]^din[14]^din[15]^din[16]^din[17]^din[22]^din[23]^din[24]^din[25]^din[29]^din[30]^din[31]^din[32]^din[37]^din[38]^din[39]^din[40]^din[45]^din[46]^din[47]^din[48]^din[53]^din[54]^din[55]^din[56]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_check[3] = ecc_in[3]^din[4]^din[5]^din[6]^din[7]^din[8]^din[9]^din[10]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[4] = ecc_in[4]^din[11]^din[12]^din[13]^din[14]^din[15]^din[16]^din[17]^din[18]^din[19]^din[20]^din[21]^din[22]^din[23]^din[24]^din[25]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[5] = ecc_in[5]^din[26]^din[27]^din[28]^din[29]^din[30]^din[31]^din[32]^din[33]^din[34]^din[35]^din[36]^din[37]^din[38]^din[39]^din[40]^din[41]^din[42]^din[43]^din[44]^din[45]^din[46]^din[47]^din[48]^din[49]^din[50]^din[51]^din[52]^din[53]^din[54]^din[55]^din[56];
-
-   assign ecc_check[6] = ecc_in[6]^din[57]^din[58]^din[59]^din[60]^din[61]^din[62]^din[63];
-
-   assign ecc_error = en & (ecc_check[6:0] != 0);  // all errors in the sed_ded case will be recorded as DE
-
- endmodule // rvecc_decode_64
-
-// Skywater cell
-//sky130_fd_sc_hd__dlclkp_1 CG( .CLK(clk), .GCLK(l1clk), .GATE(en_i | test_en_i));
-
-
-/*module `TEC_RV_ICG 
-  (
-   input logic SE, EN, CK,
-   output Q
-   );
-
-   logic  en_ff;
-   logic  enable;
-
-   assign      enable = EN | SE;
-
-`ifdef VERILATOR
-   always @(negedge CK) begin
-      en_ff <= enable;
-   end
-`else
-   always @(CK, enable) begin
-      if(!CK)
-        en_ff = enable;
-   end
-`endif
-   assign Q = CK & en_ff;
-
-endmodule
-*/
-
-
-module rvclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .VPWR(1'b1), .VGND(1'b0), .CLK(clk), .GCLK(l1clk), .GATE(en)); /*clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));*/
-
-endmodule // rvclkhdr
-
-
-module rvoclkhdr
-  (
-   input  logic en,
-   input  logic clk,
-   input  logic scan_mode,
-   output logic l1clk
-   );
-
-   logic   SE;
-   assign       SE = 0;
-
-
-   sky130_fd_sc_hd__dlclkp_1 clkhdr( .VPWR(1'b1), .VGND(1'b0), .CLK(clk), .GCLK(l1clk), .GATE(en)); //clkhdr ( .*, .EN(en), .CK(clk), .Q(l1clk));
-
-
-endmodule
-
-
-
-
-
-
-
-
-
diff --git a/verilog/rtl/BrqRV_EB1/design/openlane/BrqRV_EB1.v b/verilog/rtl/BrqRV_EB1/design/openlane/BrqRV_EB1.v
deleted file mode 100644
index 020487e..0000000
--- a/verilog/rtl/BrqRV_EB1/design/openlane/BrqRV_EB1.v
+++ /dev/null
@@ -1,22971 +0,0 @@
-module eb1_brqrv_wrapper (
-	VPWR,
-	VGND,
-	clk,
-	rst_l,
-	dbg_rst_l,
-	rst_vec,
-	nmi_int,
-	nmi_vec,
-	jtag_id,
-	uart_rx,
-	trace_rv_i_insn_ip,
-	trace_rv_i_address_ip,
-	trace_rv_i_valid_ip,
-	trace_rv_i_exception_ip,
-	trace_rv_i_ecause_ip,
-	trace_rv_i_interrupt_ip,
-	trace_rv_i_tval_ip,
-	lsu_axi_awvalid,
-	lsu_axi_awready,
-	lsu_axi_awid,
-	lsu_axi_awaddr,
-	lsu_axi_awregion,
-	lsu_axi_awlen,
-	lsu_axi_awsize,
-	lsu_axi_awburst,
-	lsu_axi_awlock,
-	lsu_axi_awcache,
-	lsu_axi_awprot,
-	lsu_axi_awqos,
-	lsu_axi_wvalid,
-	lsu_axi_wready,
-	lsu_axi_wdata,
-	lsu_axi_wstrb,
-	lsu_axi_wlast,
-	lsu_axi_bvalid,
-	lsu_axi_bready,
-	lsu_axi_bresp,
-	lsu_axi_bid,
-	lsu_axi_arvalid,
-	lsu_axi_arready,
-	lsu_axi_arid,
-	lsu_axi_araddr,
-	lsu_axi_arregion,
-	lsu_axi_arlen,
-	lsu_axi_arsize,
-	lsu_axi_arburst,
-	lsu_axi_arlock,
-	lsu_axi_arcache,
-	lsu_axi_arprot,
-	lsu_axi_arqos,
-	lsu_axi_rvalid,
-	lsu_axi_rready,
-	lsu_axi_rid,
-	lsu_axi_rdata,
-	lsu_axi_rresp,
-	lsu_axi_rlast,
-	ifu_axi_awvalid,
-	ifu_axi_awready,
-	ifu_axi_awid,
-	ifu_axi_awaddr,
-	ifu_axi_awregion,
-	ifu_axi_awlen,
-	ifu_axi_awsize,
-	ifu_axi_awburst,
-	ifu_axi_awlock,
-	ifu_axi_awcache,
-	ifu_axi_awprot,
-	ifu_axi_awqos,
-	ifu_axi_wvalid,
-	ifu_axi_wready,
-	ifu_axi_wdata,
-	ifu_axi_wstrb,
-	ifu_axi_wlast,
-	ifu_axi_bvalid,
-	ifu_axi_bready,
-	ifu_axi_bresp,
-	ifu_axi_bid,
-	ifu_axi_arvalid,
-	ifu_axi_arready,
-	ifu_axi_arid,
-	ifu_axi_araddr,
-	ifu_axi_arregion,
-	ifu_axi_arlen,
-	ifu_axi_arsize,
-	ifu_axi_arburst,
-	ifu_axi_arlock,
-	ifu_axi_arcache,
-	ifu_axi_arprot,
-	ifu_axi_arqos,
-	ifu_axi_rvalid,
-	ifu_axi_rready,
-	ifu_axi_rid,
-	ifu_axi_rdata,
-	ifu_axi_rresp,
-	ifu_axi_rlast,
-	sb_axi_awvalid,
-	sb_axi_awready,
-	sb_axi_awid,
-	sb_axi_awaddr,
-	sb_axi_awregion,
-	sb_axi_awlen,
-	sb_axi_awsize,
-	sb_axi_awburst,
-	sb_axi_awlock,
-	sb_axi_awcache,
-	sb_axi_awprot,
-	sb_axi_awqos,
-	sb_axi_wvalid,
-	sb_axi_wready,
-	sb_axi_wdata,
-	sb_axi_wstrb,
-	sb_axi_wlast,
-	sb_axi_bvalid,
-	sb_axi_bready,
-	sb_axi_bresp,
-	sb_axi_bid,
-	sb_axi_arvalid,
-	sb_axi_arready,
-	sb_axi_arid,
-	sb_axi_araddr,
-	sb_axi_arregion,
-	sb_axi_arlen,
-	sb_axi_arsize,
-	sb_axi_arburst,
-	sb_axi_arlock,
-	sb_axi_arcache,
-	sb_axi_arprot,
-	sb_axi_arqos,
-	sb_axi_rvalid,
-	sb_axi_rready,
-	sb_axi_rid,
-	sb_axi_rdata,
-	sb_axi_rresp,
-	sb_axi_rlast,
-	dma_axi_awvalid,
-	dma_axi_awready,
-	dma_axi_awid,
-	dma_axi_awaddr,
-	dma_axi_awsize,
-	dma_axi_awprot,
-	dma_axi_awlen,
-	dma_axi_awburst,
-	dma_axi_wvalid,
-	dma_axi_wready,
-	dma_axi_wdata,
-	dma_axi_wstrb,
-	dma_axi_wlast,
-	dma_axi_bvalid,
-	dma_axi_bready,
-	dma_axi_bresp,
-	dma_axi_bid,
-	dma_axi_arvalid,
-	dma_axi_arready,
-	dma_axi_arid,
-	dma_axi_araddr,
-	dma_axi_arsize,
-	dma_axi_arprot,
-	dma_axi_arlen,
-	dma_axi_arburst,
-	dma_axi_rvalid,
-	dma_axi_rready,
-	dma_axi_rid,
-	dma_axi_rdata,
-	dma_axi_rresp,
-	dma_axi_rlast,
-	lsu_bus_clk_en,
-	ifu_bus_clk_en,
-	dbg_bus_clk_en,
-	dma_bus_clk_en,
-	dccm_ext_in_pkt,
-	iccm_ext_in_pkt,
-	ic_data_ext_in_pkt,
-	ic_tag_ext_in_pkt,
-	timer_int,
-	soft_int,
-	extintsrc_req,
-	dec_tlu_perfcnt0,
-	dec_tlu_perfcnt1,
-	dec_tlu_perfcnt2,
-	dec_tlu_perfcnt3,
-	jtag_tck,
-	jtag_tms,
-	jtag_tdi,
-	jtag_trst_n,
-	jtag_tdo,
-	core_id,
-	mpc_debug_halt_req,
-	mpc_debug_run_req,
-	mpc_reset_run_req,
-	mpc_debug_halt_ack,
-	mpc_debug_run_ack,
-	debug_brkpt_status,
-	i_cpu_halt_req,
-	o_cpu_halt_ack,
-	o_cpu_halt_status,
-	o_debug_mode_status,
-	i_cpu_run_req,
-	o_cpu_run_ack,
-	scan_mode,
-	mbist_mode,
-	CLKS_PER_BIT
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire VPWR;
-	input wire VGND;
-	input wire clk;
-	input wire rst_l;
-	input wire dbg_rst_l;
-	input wire [31:1] rst_vec;
-	input wire nmi_int;
-	input wire [31:1] nmi_vec;
-	input wire [31:1] jtag_id;
-	input uart_rx;
-	output wire [31:0] trace_rv_i_insn_ip;
-	output wire [31:0] trace_rv_i_address_ip;
-	output wire trace_rv_i_valid_ip;
-	output wire trace_rv_i_exception_ip;
-	output wire [4:0] trace_rv_i_ecause_ip;
-	output wire trace_rv_i_interrupt_ip;
-	output wire [31:0] trace_rv_i_tval_ip;
-	output wire lsu_axi_awvalid;
-	input wire lsu_axi_awready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_awid;
-	output wire [31:0] lsu_axi_awaddr;
-	output wire [3:0] lsu_axi_awregion;
-	output wire [7:0] lsu_axi_awlen;
-	output wire [2:0] lsu_axi_awsize;
-	output wire [1:0] lsu_axi_awburst;
-	output wire lsu_axi_awlock;
-	output wire [3:0] lsu_axi_awcache;
-	output wire [2:0] lsu_axi_awprot;
-	output wire [3:0] lsu_axi_awqos;
-	output wire lsu_axi_wvalid;
-	input wire lsu_axi_wready;
-	output wire [63:0] lsu_axi_wdata;
-	output wire [7:0] lsu_axi_wstrb;
-	output wire lsu_axi_wlast;
-	input wire lsu_axi_bvalid;
-	output wire lsu_axi_bready;
-	input wire [1:0] lsu_axi_bresp;
-	input wire [pt[181-:8] - 1:0] lsu_axi_bid;
-	output wire lsu_axi_arvalid;
-	input wire lsu_axi_arready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_arid;
-	output wire [31:0] lsu_axi_araddr;
-	output wire [3:0] lsu_axi_arregion;
-	output wire [7:0] lsu_axi_arlen;
-	output wire [2:0] lsu_axi_arsize;
-	output wire [1:0] lsu_axi_arburst;
-	output wire lsu_axi_arlock;
-	output wire [3:0] lsu_axi_arcache;
-	output wire [2:0] lsu_axi_arprot;
-	output wire [3:0] lsu_axi_arqos;
-	input wire lsu_axi_rvalid;
-	output wire lsu_axi_rready;
-	input wire [pt[181-:8] - 1:0] lsu_axi_rid;
-	input wire [63:0] lsu_axi_rdata;
-	input wire [1:0] lsu_axi_rresp;
-	input wire lsu_axi_rlast;
-	output wire ifu_axi_awvalid;
-	input wire ifu_axi_awready;
-	output wire [pt[826-:8] - 1:0] ifu_axi_awid;
-	output wire [31:0] ifu_axi_awaddr;
-	output wire [3:0] ifu_axi_awregion;
-	output wire [7:0] ifu_axi_awlen;
-	output wire [2:0] ifu_axi_awsize;
-	output wire [1:0] ifu_axi_awburst;
-	output wire ifu_axi_awlock;
-	output wire [3:0] ifu_axi_awcache;
-	output wire [2:0] ifu_axi_awprot;
-	output wire [3:0] ifu_axi_awqos;
-	output wire ifu_axi_wvalid;
-	input wire ifu_axi_wready;
-	output wire [63:0] ifu_axi_wdata;
-	output wire [7:0] ifu_axi_wstrb;
-	output wire ifu_axi_wlast;
-	input wire ifu_axi_bvalid;
-	output wire ifu_axi_bready;
-	input wire [1:0] ifu_axi_bresp;
-	input wire [pt[826-:8] - 1:0] ifu_axi_bid;
-	output wire ifu_axi_arvalid;
-	input wire ifu_axi_arready;
-	output wire [pt[826-:8] - 1:0] ifu_axi_arid;
-	output wire [31:0] ifu_axi_araddr;
-	output wire [3:0] ifu_axi_arregion;
-	output wire [7:0] ifu_axi_arlen;
-	output wire [2:0] ifu_axi_arsize;
-	output wire [1:0] ifu_axi_arburst;
-	output wire ifu_axi_arlock;
-	output wire [3:0] ifu_axi_arcache;
-	output wire [2:0] ifu_axi_arprot;
-	output wire [3:0] ifu_axi_arqos;
-	input wire ifu_axi_rvalid;
-	output wire ifu_axi_rready;
-	input wire [pt[826-:8] - 1:0] ifu_axi_rid;
-	input wire [63:0] ifu_axi_rdata;
-	input wire [1:0] ifu_axi_rresp;
-	input wire ifu_axi_rlast;
-	output wire sb_axi_awvalid;
-	input wire sb_axi_awready;
-	output wire [pt[12-:8] - 1:0] sb_axi_awid;
-	output wire [31:0] sb_axi_awaddr;
-	output wire [3:0] sb_axi_awregion;
-	output wire [7:0] sb_axi_awlen;
-	output wire [2:0] sb_axi_awsize;
-	output wire [1:0] sb_axi_awburst;
-	output wire sb_axi_awlock;
-	output wire [3:0] sb_axi_awcache;
-	output wire [2:0] sb_axi_awprot;
-	output wire [3:0] sb_axi_awqos;
-	output wire sb_axi_wvalid;
-	input wire sb_axi_wready;
-	output wire [63:0] sb_axi_wdata;
-	output wire [7:0] sb_axi_wstrb;
-	output wire sb_axi_wlast;
-	input wire sb_axi_bvalid;
-	output wire sb_axi_bready;
-	input wire [1:0] sb_axi_bresp;
-	input wire [pt[12-:8] - 1:0] sb_axi_bid;
-	output wire sb_axi_arvalid;
-	input wire sb_axi_arready;
-	output wire [pt[12-:8] - 1:0] sb_axi_arid;
-	output wire [31:0] sb_axi_araddr;
-	output wire [3:0] sb_axi_arregion;
-	output wire [7:0] sb_axi_arlen;
-	output wire [2:0] sb_axi_arsize;
-	output wire [1:0] sb_axi_arburst;
-	output wire sb_axi_arlock;
-	output wire [3:0] sb_axi_arcache;
-	output wire [2:0] sb_axi_arprot;
-	output wire [3:0] sb_axi_arqos;
-	input wire sb_axi_rvalid;
-	output wire sb_axi_rready;
-	input wire [pt[12-:8] - 1:0] sb_axi_rid;
-	input wire [63:0] sb_axi_rdata;
-	input wire [1:0] sb_axi_rresp;
-	input wire sb_axi_rlast;
-	input wire dma_axi_awvalid;
-	output wire dma_axi_awready;
-	input wire [pt[1235-:8] - 1:0] dma_axi_awid;
-	input wire [31:0] dma_axi_awaddr;
-	input wire [2:0] dma_axi_awsize;
-	input wire [2:0] dma_axi_awprot;
-	input wire [7:0] dma_axi_awlen;
-	input wire [1:0] dma_axi_awburst;
-	input wire dma_axi_wvalid;
-	output wire dma_axi_wready;
-	input wire [63:0] dma_axi_wdata;
-	input wire [7:0] dma_axi_wstrb;
-	input wire dma_axi_wlast;
-	output wire dma_axi_bvalid;
-	input wire dma_axi_bready;
-	output wire [1:0] dma_axi_bresp;
-	output wire [pt[1235-:8] - 1:0] dma_axi_bid;
-	input wire dma_axi_arvalid;
-	output wire dma_axi_arready;
-	input wire [pt[1235-:8] - 1:0] dma_axi_arid;
-	input wire [31:0] dma_axi_araddr;
-	input wire [2:0] dma_axi_arsize;
-	input wire [2:0] dma_axi_arprot;
-	input wire [7:0] dma_axi_arlen;
-	input wire [1:0] dma_axi_arburst;
-	output wire dma_axi_rvalid;
-	input wire dma_axi_rready;
-	output wire [pt[1235-:8] - 1:0] dma_axi_rid;
-	output wire [63:0] dma_axi_rdata;
-	output wire [1:0] dma_axi_rresp;
-	output wire dma_axi_rlast;
-	input wire lsu_bus_clk_en;
-	input wire ifu_bus_clk_en;
-	input wire dbg_bus_clk_en;
-	input wire dma_bus_clk_en;
-	input wire [(pt[1342-:9] * 12) - 1:0] dccm_ext_in_pkt;
-	input wire [(pt[909-:9] * 12) - 1:0] iccm_ext_in_pkt;
-	input wire [((pt[1060-:7] * pt[1189-:7]) * 12) - 1:0] ic_data_ext_in_pkt;
-	input wire [(pt[1060-:7] * 12) - 1:0] ic_tag_ext_in_pkt;
-	input wire timer_int;
-	input wire soft_int;
-	input wire [pt[56-:12]:1] extintsrc_req;
-	output wire dec_tlu_perfcnt0;
-	output wire dec_tlu_perfcnt1;
-	output wire dec_tlu_perfcnt2;
-	output wire dec_tlu_perfcnt3;
-	input wire jtag_tck;
-	input wire jtag_tms;
-	input wire jtag_tdi;
-	input wire jtag_trst_n;
-	output wire jtag_tdo;
-	input wire [31:4] core_id;
-	input wire mpc_debug_halt_req;
-	input wire mpc_debug_run_req;
-	input wire mpc_reset_run_req;
-	output wire mpc_debug_halt_ack;
-	output wire mpc_debug_run_ack;
-	output wire debug_brkpt_status;
-	input wire i_cpu_halt_req;
-	output wire o_cpu_halt_ack;
-	output wire o_cpu_halt_status;
-	output wire o_debug_mode_status;
-	input wire i_cpu_run_req;
-	output wire o_cpu_run_ack;
-	input wire scan_mode;
-	input wire mbist_mode;
-	input [15:0] CLKS_PER_BIT;
-	wire active_l2clk;
-	wire free_l2clk;
-	wire dccm_wren;
-	wire dccm_rden;
-	wire [pt[1398-:9] - 1:0] dccm_wr_addr_lo;
-	wire [pt[1398-:9] - 1:0] dccm_wr_addr_hi;
-	wire [pt[1398-:9] - 1:0] dccm_rd_addr_lo;
-	wire [pt[1398-:9] - 1:0] dccm_rd_addr_hi;
-	wire [pt[1360-:10] - 1:0] dccm_wr_data_lo;
-	wire [pt[1360-:10] - 1:0] dccm_wr_data_hi;
-	wire [pt[1360-:10] - 1:0] dccm_rd_data_lo;
-	wire [pt[1360-:10] - 1:0] dccm_rd_data_hi;
-	wire [31:1] ic_rw_addr;
-	wire [pt[1060-:7] - 1:0] ic_wr_en;
-	wire ic_rd_en;
-	wire [pt[1060-:7] - 1:0] ic_tag_valid;
-	wire [pt[1060-:7] - 1:0] ic_rd_hit;
-	wire ic_tag_perr;
-	wire [pt[1104-:9]:3] ic_debug_addr;
-	wire ic_debug_rd_en;
-	wire ic_debug_wr_en;
-	wire ic_debug_tag_array;
-	wire [pt[1060-:7] - 1:0] ic_debug_way;
-	wire [25:0] ictag_debug_rd_data;
-	wire [(pt[1189-:7] * 71) - 1:0] ic_wr_data;
-	wire [63:0] ic_rd_data;
-	wire [70:0] ic_debug_rd_data;
-	wire [70:0] ic_debug_wr_data;
-	wire [pt[1189-:7] - 1:0] ic_eccerr;
-	wire [pt[1189-:7] - 1:0] ic_parerr;
-	wire [63:0] ic_premux_data;
-	wire ic_sel_premux_data;
-	wire [pt[936-:9] - 1:1] iccm_rw_addr;
-	wire iccm_wren;
-	wire iccm_rden;
-	wire [2:0] iccm_wr_size;
-	wire [77:0] iccm_wr_data;
-	wire iccm_buf_correct_ecc;
-	wire iccm_correction_state;
-	wire [63:0] iccm_rd_data;
-	wire [77:0] iccm_rd_data_ecc;
-	wire core_rst;
-	wire core_rst_l;
-	wire jtag_tdoEn;
-	wire dccm_clk_override;
-	wire icm_clk_override;
-	wire dec_tlu_core_ecc_disable;
-	wire [31:0] haddr;
-	wire [2:0] hburst;
-	wire hmastlock;
-	wire [3:0] hprot;
-	wire [2:0] hsize;
-	wire [1:0] htrans;
-	wire hwrite;
-	wire [63:0] hrdata;
-	wire hready;
-	wire hresp;
-	wire [31:0] lsu_haddr;
-	wire [2:0] lsu_hburst;
-	wire lsu_hmastlock;
-	wire [3:0] lsu_hprot;
-	wire [2:0] lsu_hsize;
-	wire [1:0] lsu_htrans;
-	wire lsu_hwrite;
-	wire [63:0] lsu_hwdata;
-	wire [63:0] lsu_hrdata;
-	wire lsu_hready;
-	wire lsu_hresp;
-	wire [31:0] sb_haddr;
-	wire [2:0] sb_hburst;
-	wire sb_hmastlock;
-	wire [3:0] sb_hprot;
-	wire [2:0] sb_hsize;
-	wire [1:0] sb_htrans;
-	wire sb_hwrite;
-	wire [63:0] sb_hwdata;
-	wire [63:0] sb_hrdata;
-	wire sb_hready;
-	wire sb_hresp;
-	wire dma_hsel;
-	wire [31:0] dma_haddr;
-	wire [2:0] dma_hburst;
-	wire dma_hmastlock;
-	wire [3:0] dma_hprot;
-	wire [2:0] dma_hsize;
-	wire [1:0] dma_htrans;
-	wire dma_hwrite;
-	wire [63:0] dma_hwdata;
-	wire dma_hreadyin;
-	wire [63:0] dma_hrdata;
-	wire dma_hreadyout;
-	wire dma_hresp;
-	assign hrdata[63:0] = {64 {1'sb0}};
-	assign hready = 1'b0;
-	assign hresp = 1'b0;
-	assign lsu_hrdata[63:0] = {64 {1'sb0}};
-	assign lsu_hready = 1'b0;
-	assign lsu_hresp = 1'b0;
-	assign sb_hrdata[63:0] = {64 {1'sb0}};
-	assign sb_hready = 1'b0;
-	assign sb_hresp = 1'b0;
-	assign dma_hsel = 1'b0;
-	assign dma_haddr[31:0] = {32 {1'sb0}};
-	assign dma_hburst[2:0] = {3 {1'sb0}};
-	assign dma_hmastlock = 1'b0;
-	assign dma_hprot[3:0] = {4 {1'sb0}};
-	assign dma_hsize[2:0] = {3 {1'sb0}};
-	assign dma_htrans[1:0] = {2 {1'sb0}};
-	assign dma_hwrite = 1'b0;
-	assign dma_hwdata[63:0] = {64 {1'sb0}};
-	assign dma_hreadyin = 1'b0;
-	wire dmi_reg_en;
-	wire [6:0] dmi_reg_addr;
-	wire dmi_reg_wr_en;
-	wire [31:0] dmi_reg_wdata;
-	wire [31:0] dmi_reg_rdata;
-	wire rx_dv_i;
-	wire [7:0] rx_byte_i;
-	wire iccm_instr_we;
-	wire [13:0] iccm_instr_addr;
-	wire [31:0] iccm_instr_wdata;
-	eb1_brqrv #(.pt(pt)) brqrv(
-		.clk(clk),
-		.rst_l(core_rst),
-		.dbg_rst_l(dbg_rst_l),
-		.rst_vec(rst_vec),
-		.nmi_int(nmi_int),
-		.nmi_vec(nmi_vec),
-		.core_rst_l(core_rst_l),
-		.active_l2clk(active_l2clk),
-		.free_l2clk(free_l2clk),
-		.trace_rv_i_insn_ip(trace_rv_i_insn_ip),
-		.trace_rv_i_address_ip(trace_rv_i_address_ip),
-		.trace_rv_i_valid_ip(trace_rv_i_valid_ip),
-		.trace_rv_i_exception_ip(trace_rv_i_exception_ip),
-		.trace_rv_i_ecause_ip(trace_rv_i_ecause_ip),
-		.trace_rv_i_interrupt_ip(trace_rv_i_interrupt_ip),
-		.trace_rv_i_tval_ip(trace_rv_i_tval_ip),
-		.dccm_clk_override(dccm_clk_override),
-		.icm_clk_override(icm_clk_override),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.i_cpu_halt_req(i_cpu_halt_req),
-		.i_cpu_run_req(i_cpu_run_req),
-		.o_cpu_halt_ack(o_cpu_halt_ack),
-		.o_cpu_halt_status(o_cpu_halt_status),
-		.o_cpu_run_ack(o_cpu_run_ack),
-		.o_debug_mode_status(o_debug_mode_status),
-		.core_id(core_id),
-		.mpc_debug_halt_req(mpc_debug_halt_req),
-		.mpc_debug_run_req(mpc_debug_run_req),
-		.mpc_reset_run_req(mpc_reset_run_req),
-		.mpc_debug_halt_ack(mpc_debug_halt_ack),
-		.mpc_debug_run_ack(mpc_debug_run_ack),
-		.debug_brkpt_status(debug_brkpt_status),
-		.dec_tlu_perfcnt0(dec_tlu_perfcnt0),
-		.dec_tlu_perfcnt1(dec_tlu_perfcnt1),
-		.dec_tlu_perfcnt2(dec_tlu_perfcnt2),
-		.dec_tlu_perfcnt3(dec_tlu_perfcnt3),
-		.dccm_wren(dccm_wren),
-		.dccm_rden(dccm_rden),
-		.dccm_wr_addr_lo(dccm_wr_addr_lo),
-		.dccm_wr_addr_hi(dccm_wr_addr_hi),
-		.dccm_rd_addr_lo(dccm_rd_addr_lo),
-		.dccm_rd_addr_hi(dccm_rd_addr_hi),
-		.dccm_wr_data_lo(dccm_wr_data_lo),
-		.dccm_wr_data_hi(dccm_wr_data_hi),
-		.dccm_rd_data_lo(dccm_rd_data_lo),
-		.dccm_rd_data_hi(dccm_rd_data_hi),
-		.iccm_rw_addr(iccm_rw_addr),
-		.iccm_wren(iccm_wren),
-		.iccm_rden(iccm_rden),
-		.iccm_wr_size(iccm_wr_size),
-		.iccm_wr_data(iccm_wr_data),
-		.iccm_buf_correct_ecc(iccm_buf_correct_ecc),
-		.iccm_correction_state(iccm_correction_state),
-		.iccm_rd_data(iccm_rd_data),
-		.iccm_rd_data_ecc(iccm_rd_data_ecc),
-		.ic_rw_addr(ic_rw_addr),
-		.ic_tag_valid(ic_tag_valid),
-		.ic_wr_en(ic_wr_en),
-		.ic_rd_en(ic_rd_en),
-		.ic_wr_data(ic_wr_data),
-		.ic_rd_data(ic_rd_data),
-		.ic_debug_rd_data(ic_debug_rd_data),
-		.ictag_debug_rd_data(ictag_debug_rd_data),
-		.ic_debug_wr_data(ic_debug_wr_data),
-		.ic_eccerr(ic_eccerr),
-		.ic_parerr(ic_parerr),
-		.ic_premux_data(ic_premux_data),
-		.ic_sel_premux_data(ic_sel_premux_data),
-		.ic_debug_addr(ic_debug_addr),
-		.ic_debug_rd_en(ic_debug_rd_en),
-		.ic_debug_wr_en(ic_debug_wr_en),
-		.ic_debug_tag_array(ic_debug_tag_array),
-		.ic_debug_way(ic_debug_way),
-		.ic_rd_hit(ic_rd_hit),
-		.ic_tag_perr(ic_tag_perr),
-		.lsu_axi_awvalid(lsu_axi_awvalid),
-		.lsu_axi_awready(lsu_axi_awready),
-		.lsu_axi_awid(lsu_axi_awid),
-		.lsu_axi_awaddr(lsu_axi_awaddr),
-		.lsu_axi_awregion(lsu_axi_awregion),
-		.lsu_axi_awlen(lsu_axi_awlen),
-		.lsu_axi_awsize(lsu_axi_awsize),
-		.lsu_axi_awburst(lsu_axi_awburst),
-		.lsu_axi_awlock(lsu_axi_awlock),
-		.lsu_axi_awcache(lsu_axi_awcache),
-		.lsu_axi_awprot(lsu_axi_awprot),
-		.lsu_axi_awqos(lsu_axi_awqos),
-		.lsu_axi_wvalid(lsu_axi_wvalid),
-		.lsu_axi_wready(lsu_axi_wready),
-		.lsu_axi_wdata(lsu_axi_wdata),
-		.lsu_axi_wstrb(lsu_axi_wstrb),
-		.lsu_axi_wlast(lsu_axi_wlast),
-		.lsu_axi_bvalid(lsu_axi_bvalid),
-		.lsu_axi_bready(lsu_axi_bready),
-		.lsu_axi_bresp(lsu_axi_bresp),
-		.lsu_axi_bid(lsu_axi_bid),
-		.lsu_axi_arvalid(lsu_axi_arvalid),
-		.lsu_axi_arready(lsu_axi_arready),
-		.lsu_axi_arid(lsu_axi_arid),
-		.lsu_axi_araddr(lsu_axi_araddr),
-		.lsu_axi_arregion(lsu_axi_arregion),
-		.lsu_axi_arlen(lsu_axi_arlen),
-		.lsu_axi_arsize(lsu_axi_arsize),
-		.lsu_axi_arburst(lsu_axi_arburst),
-		.lsu_axi_arlock(lsu_axi_arlock),
-		.lsu_axi_arcache(lsu_axi_arcache),
-		.lsu_axi_arprot(lsu_axi_arprot),
-		.lsu_axi_arqos(lsu_axi_arqos),
-		.lsu_axi_rvalid(lsu_axi_rvalid),
-		.lsu_axi_rready(lsu_axi_rready),
-		.lsu_axi_rid(lsu_axi_rid),
-		.lsu_axi_rdata(lsu_axi_rdata),
-		.lsu_axi_rresp(lsu_axi_rresp),
-		.lsu_axi_rlast(lsu_axi_rlast),
-		.ifu_axi_awvalid(ifu_axi_awvalid),
-		.ifu_axi_awready(ifu_axi_awready),
-		.ifu_axi_awid(ifu_axi_awid),
-		.ifu_axi_awaddr(ifu_axi_awaddr),
-		.ifu_axi_awregion(ifu_axi_awregion),
-		.ifu_axi_awlen(ifu_axi_awlen),
-		.ifu_axi_awsize(ifu_axi_awsize),
-		.ifu_axi_awburst(ifu_axi_awburst),
-		.ifu_axi_awlock(ifu_axi_awlock),
-		.ifu_axi_awcache(ifu_axi_awcache),
-		.ifu_axi_awprot(ifu_axi_awprot),
-		.ifu_axi_awqos(ifu_axi_awqos),
-		.ifu_axi_wvalid(ifu_axi_wvalid),
-		.ifu_axi_wready(ifu_axi_wready),
-		.ifu_axi_wdata(ifu_axi_wdata),
-		.ifu_axi_wstrb(ifu_axi_wstrb),
-		.ifu_axi_wlast(ifu_axi_wlast),
-		.ifu_axi_bvalid(ifu_axi_bvalid),
-		.ifu_axi_bready(ifu_axi_bready),
-		.ifu_axi_bresp(ifu_axi_bresp),
-		.ifu_axi_bid(ifu_axi_bid),
-		.ifu_axi_arvalid(ifu_axi_arvalid),
-		.ifu_axi_arready(ifu_axi_arready),
-		.ifu_axi_arid(ifu_axi_arid),
-		.ifu_axi_araddr(ifu_axi_araddr),
-		.ifu_axi_arregion(ifu_axi_arregion),
-		.ifu_axi_arlen(ifu_axi_arlen),
-		.ifu_axi_arsize(ifu_axi_arsize),
-		.ifu_axi_arburst(ifu_axi_arburst),
-		.ifu_axi_arlock(ifu_axi_arlock),
-		.ifu_axi_arcache(ifu_axi_arcache),
-		.ifu_axi_arprot(ifu_axi_arprot),
-		.ifu_axi_arqos(ifu_axi_arqos),
-		.ifu_axi_rvalid(ifu_axi_rvalid),
-		.ifu_axi_rready(ifu_axi_rready),
-		.ifu_axi_rid(ifu_axi_rid),
-		.ifu_axi_rdata(ifu_axi_rdata),
-		.ifu_axi_rresp(ifu_axi_rresp),
-		.ifu_axi_rlast(ifu_axi_rlast),
-		.sb_axi_awvalid(sb_axi_awvalid),
-		.sb_axi_awready(sb_axi_awready),
-		.sb_axi_awid(sb_axi_awid),
-		.sb_axi_awaddr(sb_axi_awaddr),
-		.sb_axi_awregion(sb_axi_awregion),
-		.sb_axi_awlen(sb_axi_awlen),
-		.sb_axi_awsize(sb_axi_awsize),
-		.sb_axi_awburst(sb_axi_awburst),
-		.sb_axi_awlock(sb_axi_awlock),
-		.sb_axi_awcache(sb_axi_awcache),
-		.sb_axi_awprot(sb_axi_awprot),
-		.sb_axi_awqos(sb_axi_awqos),
-		.sb_axi_wvalid(sb_axi_wvalid),
-		.sb_axi_wready(sb_axi_wready),
-		.sb_axi_wdata(sb_axi_wdata),
-		.sb_axi_wstrb(sb_axi_wstrb),
-		.sb_axi_wlast(sb_axi_wlast),
-		.sb_axi_bvalid(sb_axi_bvalid),
-		.sb_axi_bready(sb_axi_bready),
-		.sb_axi_bresp(sb_axi_bresp),
-		.sb_axi_bid(sb_axi_bid),
-		.sb_axi_arvalid(sb_axi_arvalid),
-		.sb_axi_arready(sb_axi_arready),
-		.sb_axi_arid(sb_axi_arid),
-		.sb_axi_araddr(sb_axi_araddr),
-		.sb_axi_arregion(sb_axi_arregion),
-		.sb_axi_arlen(sb_axi_arlen),
-		.sb_axi_arsize(sb_axi_arsize),
-		.sb_axi_arburst(sb_axi_arburst),
-		.sb_axi_arlock(sb_axi_arlock),
-		.sb_axi_arcache(sb_axi_arcache),
-		.sb_axi_arprot(sb_axi_arprot),
-		.sb_axi_arqos(sb_axi_arqos),
-		.sb_axi_rvalid(sb_axi_rvalid),
-		.sb_axi_rready(sb_axi_rready),
-		.sb_axi_rid(sb_axi_rid),
-		.sb_axi_rdata(sb_axi_rdata),
-		.sb_axi_rresp(sb_axi_rresp),
-		.sb_axi_rlast(sb_axi_rlast),
-		.dma_axi_awvalid(dma_axi_awvalid),
-		.dma_axi_awready(dma_axi_awready),
-		.dma_axi_awid(dma_axi_awid),
-		.dma_axi_awaddr(dma_axi_awaddr),
-		.dma_axi_awsize(dma_axi_awsize),
-		.dma_axi_awprot(dma_axi_awprot),
-		.dma_axi_awlen(dma_axi_awlen),
-		.dma_axi_awburst(dma_axi_awburst),
-		.dma_axi_wvalid(dma_axi_wvalid),
-		.dma_axi_wready(dma_axi_wready),
-		.dma_axi_wdata(dma_axi_wdata),
-		.dma_axi_wstrb(dma_axi_wstrb),
-		.dma_axi_wlast(dma_axi_wlast),
-		.dma_axi_bvalid(dma_axi_bvalid),
-		.dma_axi_bready(dma_axi_bready),
-		.dma_axi_bresp(dma_axi_bresp),
-		.dma_axi_bid(dma_axi_bid),
-		.dma_axi_arvalid(dma_axi_arvalid),
-		.dma_axi_arready(dma_axi_arready),
-		.dma_axi_arid(dma_axi_arid),
-		.dma_axi_araddr(dma_axi_araddr),
-		.dma_axi_arsize(dma_axi_arsize),
-		.dma_axi_arprot(dma_axi_arprot),
-		.dma_axi_arlen(dma_axi_arlen),
-		.dma_axi_arburst(dma_axi_arburst),
-		.dma_axi_rvalid(dma_axi_rvalid),
-		.dma_axi_rready(dma_axi_rready),
-		.dma_axi_rid(dma_axi_rid),
-		.dma_axi_rdata(dma_axi_rdata),
-		.dma_axi_rresp(dma_axi_rresp),
-		.dma_axi_rlast(dma_axi_rlast),
-		.haddr(haddr),
-		.hburst(hburst),
-		.hmastlock(hmastlock),
-		.hprot(hprot),
-		.hsize(hsize),
-		.htrans(htrans),
-		.hwrite(hwrite),
-		.hrdata(hrdata),
-		.hready(hready),
-		.hresp(hresp),
-		.lsu_haddr(lsu_haddr),
-		.lsu_hburst(lsu_hburst),
-		.lsu_hmastlock(lsu_hmastlock),
-		.lsu_hprot(lsu_hprot),
-		.lsu_hsize(lsu_hsize),
-		.lsu_htrans(lsu_htrans),
-		.lsu_hwrite(lsu_hwrite),
-		.lsu_hwdata(lsu_hwdata),
-		.lsu_hrdata(lsu_hrdata),
-		.lsu_hready(lsu_hready),
-		.lsu_hresp(lsu_hresp),
-		.sb_haddr(sb_haddr),
-		.sb_hburst(sb_hburst),
-		.sb_hmastlock(sb_hmastlock),
-		.sb_hprot(sb_hprot),
-		.sb_hsize(sb_hsize),
-		.sb_htrans(sb_htrans),
-		.sb_hwrite(sb_hwrite),
-		.sb_hwdata(sb_hwdata),
-		.sb_hrdata(sb_hrdata),
-		.sb_hready(sb_hready),
-		.sb_hresp(sb_hresp),
-		.dma_hsel(dma_hsel),
-		.dma_haddr(dma_haddr),
-		.dma_hburst(dma_hburst),
-		.dma_hmastlock(dma_hmastlock),
-		.dma_hprot(dma_hprot),
-		.dma_hsize(dma_hsize),
-		.dma_htrans(dma_htrans),
-		.dma_hwrite(dma_hwrite),
-		.dma_hwdata(dma_hwdata),
-		.dma_hreadyin(dma_hreadyin),
-		.dma_hrdata(dma_hrdata),
-		.dma_hreadyout(dma_hreadyout),
-		.dma_hresp(dma_hresp),
-		.lsu_bus_clk_en(lsu_bus_clk_en),
-		.ifu_bus_clk_en(ifu_bus_clk_en),
-		.dbg_bus_clk_en(dbg_bus_clk_en),
-		.dma_bus_clk_en(dma_bus_clk_en),
-		.dmi_reg_en(dmi_reg_en),
-		.dmi_reg_addr(dmi_reg_addr),
-		.dmi_reg_wr_en(dmi_reg_wr_en),
-		.dmi_reg_wdata(dmi_reg_wdata),
-		.dmi_reg_rdata(dmi_reg_rdata),
-		.extintsrc_req(extintsrc_req),
-		.timer_int(timer_int),
-		.soft_int(soft_int),
-		.scan_mode(scan_mode)
-	);
-	eb1_mem #(.pt(pt)) mem(
-		.clk(active_l2clk),
-		.rst_l(rst_l),
-		.iccm_rw_addr((core_rst ? iccm_rw_addr : iccm_instr_addr[10:0])),
-		.iccm_wren((core_rst ? iccm_wren : iccm_instr_we)),
-		.iccm_wr_data((core_rst ? iccm_wr_data : {7'h00, iccm_instr_wdata, 7'h00, iccm_instr_wdata})),
-		.iccm_wr_size((core_rst ? iccm_wr_size : 3'b010)),
-		.VPWR(VPWR),
-		.VGND(VGND),
-		.dccm_clk_override(dccm_clk_override),
-		.icm_clk_override(icm_clk_override),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.dccm_wren(dccm_wren),
-		.dccm_rden(dccm_rden),
-		.dccm_wr_addr_lo(dccm_wr_addr_lo),
-		.dccm_wr_addr_hi(dccm_wr_addr_hi),
-		.dccm_rd_addr_lo(dccm_rd_addr_lo),
-		.dccm_rd_addr_hi(dccm_rd_addr_hi),
-		.dccm_wr_data_lo(dccm_wr_data_lo),
-		.dccm_wr_data_hi(dccm_wr_data_hi),
-		.dccm_rd_data_lo(dccm_rd_data_lo),
-		.dccm_rd_data_hi(dccm_rd_data_hi),
-		.dccm_ext_in_pkt(dccm_ext_in_pkt),
-		.iccm_ext_in_pkt(iccm_ext_in_pkt),
-		.iccm_buf_correct_ecc(iccm_buf_correct_ecc),
-		.iccm_correction_state(iccm_correction_state),
-		.iccm_rden(iccm_rden),
-		.iccm_rd_data(iccm_rd_data),
-		.iccm_rd_data_ecc(iccm_rd_data_ecc),
-		.ic_rw_addr(ic_rw_addr),
-		.ic_tag_valid(ic_tag_valid),
-		.ic_wr_en(ic_wr_en),
-		.ic_rd_en(ic_rd_en),
-		.ic_premux_data(ic_premux_data),
-		.ic_sel_premux_data(ic_sel_premux_data),
-		.ic_data_ext_in_pkt(ic_data_ext_in_pkt),
-		.ic_tag_ext_in_pkt(ic_tag_ext_in_pkt),
-		.ic_wr_data(ic_wr_data),
-		.ic_debug_wr_data(ic_debug_wr_data),
-		.ic_debug_rd_data(ic_debug_rd_data),
-		.ic_debug_addr(ic_debug_addr),
-		.ic_debug_rd_en(ic_debug_rd_en),
-		.ic_debug_wr_en(ic_debug_wr_en),
-		.ic_debug_tag_array(ic_debug_tag_array),
-		.ic_debug_way(ic_debug_way),
-		.ic_rd_data(ic_rd_data),
-		.ictag_debug_rd_data(ictag_debug_rd_data),
-		.ic_eccerr(ic_eccerr),
-		.ic_parerr(ic_parerr),
-		.ic_rd_hit(ic_rd_hit),
-		.ic_tag_perr(ic_tag_perr),
-		.scan_mode(scan_mode)
-	);
-	eb1_iccm_controller iccm_controller(
-		.clk_i(clk),
-		.rst_ni(rst_l),
-		.rx_dv_i(rx_dv_i),
-		.rx_byte_i(rx_byte_i),
-		.we_o(iccm_instr_we),
-		.addr_o(iccm_instr_addr),
-		.wdata_o(iccm_instr_wdata),
-		.reset_o(core_rst)
-	);
-	eb1_uart_rx_prog uart_rx_m(
-		.i_Clock(clk),
-		.rst_ni(rst_l),
-		.i_Rx_Serial(uart_rx),
-		.CLKS_PER_BIT(CLKS_PER_BIT),
-		.o_Rx_DV(rx_dv_i),
-		.o_Rx_Byte(rx_byte_i)
-	);
-	dmi_wrapper dmi_wrapper(
-		.trst_n(jtag_trst_n),
-		.tck(jtag_tck),
-		.tms(jtag_tms),
-		.tdi(jtag_tdi),
-		.tdo(jtag_tdo),
-		.tdoEnable(),
-		.core_rst_n(dbg_rst_l),
-		.core_clk(clk),
-		.jtag_id(jtag_id),
-		.rd_data(dmi_reg_rdata),
-		.reg_wr_data(dmi_reg_wdata),
-		.reg_wr_addr(dmi_reg_addr),
-		.reg_en(dmi_reg_en),
-		.reg_wr_en(dmi_reg_wr_en),
-		.dmi_hard_reset()
-	);
-endmodule
-module eb1_brqrv (
-	clk,
-	rst_l,
-	dbg_rst_l,
-	rst_vec,
-	nmi_int,
-	nmi_vec,
-	core_rst_l,
-	active_l2clk,
-	free_l2clk,
-	trace_rv_i_insn_ip,
-	trace_rv_i_address_ip,
-	trace_rv_i_valid_ip,
-	trace_rv_i_exception_ip,
-	trace_rv_i_ecause_ip,
-	trace_rv_i_interrupt_ip,
-	trace_rv_i_tval_ip,
-	dccm_clk_override,
-	icm_clk_override,
-	dec_tlu_core_ecc_disable,
-	i_cpu_halt_req,
-	i_cpu_run_req,
-	o_cpu_halt_ack,
-	o_cpu_halt_status,
-	o_cpu_run_ack,
-	o_debug_mode_status,
-	core_id,
-	mpc_debug_halt_req,
-	mpc_debug_run_req,
-	mpc_reset_run_req,
-	mpc_debug_halt_ack,
-	mpc_debug_run_ack,
-	debug_brkpt_status,
-	dec_tlu_perfcnt0,
-	dec_tlu_perfcnt1,
-	dec_tlu_perfcnt2,
-	dec_tlu_perfcnt3,
-	dccm_wren,
-	dccm_rden,
-	dccm_wr_addr_lo,
-	dccm_wr_addr_hi,
-	dccm_rd_addr_lo,
-	dccm_rd_addr_hi,
-	dccm_wr_data_lo,
-	dccm_wr_data_hi,
-	dccm_rd_data_lo,
-	dccm_rd_data_hi,
-	iccm_rw_addr,
-	iccm_wren,
-	iccm_rden,
-	iccm_wr_size,
-	iccm_wr_data,
-	iccm_buf_correct_ecc,
-	iccm_correction_state,
-	iccm_rd_data,
-	iccm_rd_data_ecc,
-	ic_rw_addr,
-	ic_tag_valid,
-	ic_wr_en,
-	ic_rd_en,
-	ic_wr_data,
-	ic_rd_data,
-	ic_debug_rd_data,
-	ictag_debug_rd_data,
-	ic_debug_wr_data,
-	ic_eccerr,
-	ic_parerr,
-	ic_premux_data,
-	ic_sel_premux_data,
-	ic_debug_addr,
-	ic_debug_rd_en,
-	ic_debug_wr_en,
-	ic_debug_tag_array,
-	ic_debug_way,
-	ic_rd_hit,
-	ic_tag_perr,
-	lsu_axi_awvalid,
-	lsu_axi_awready,
-	lsu_axi_awid,
-	lsu_axi_awaddr,
-	lsu_axi_awregion,
-	lsu_axi_awlen,
-	lsu_axi_awsize,
-	lsu_axi_awburst,
-	lsu_axi_awlock,
-	lsu_axi_awcache,
-	lsu_axi_awprot,
-	lsu_axi_awqos,
-	lsu_axi_wvalid,
-	lsu_axi_wready,
-	lsu_axi_wdata,
-	lsu_axi_wstrb,
-	lsu_axi_wlast,
-	lsu_axi_bvalid,
-	lsu_axi_bready,
-	lsu_axi_bresp,
-	lsu_axi_bid,
-	lsu_axi_arvalid,
-	lsu_axi_arready,
-	lsu_axi_arid,
-	lsu_axi_araddr,
-	lsu_axi_arregion,
-	lsu_axi_arlen,
-	lsu_axi_arsize,
-	lsu_axi_arburst,
-	lsu_axi_arlock,
-	lsu_axi_arcache,
-	lsu_axi_arprot,
-	lsu_axi_arqos,
-	lsu_axi_rvalid,
-	lsu_axi_rready,
-	lsu_axi_rid,
-	lsu_axi_rdata,
-	lsu_axi_rresp,
-	lsu_axi_rlast,
-	ifu_axi_awvalid,
-	ifu_axi_awready,
-	ifu_axi_awid,
-	ifu_axi_awaddr,
-	ifu_axi_awregion,
-	ifu_axi_awlen,
-	ifu_axi_awsize,
-	ifu_axi_awburst,
-	ifu_axi_awlock,
-	ifu_axi_awcache,
-	ifu_axi_awprot,
-	ifu_axi_awqos,
-	ifu_axi_wvalid,
-	ifu_axi_wready,
-	ifu_axi_wdata,
-	ifu_axi_wstrb,
-	ifu_axi_wlast,
-	ifu_axi_bvalid,
-	ifu_axi_bready,
-	ifu_axi_bresp,
-	ifu_axi_bid,
-	ifu_axi_arvalid,
-	ifu_axi_arready,
-	ifu_axi_arid,
-	ifu_axi_araddr,
-	ifu_axi_arregion,
-	ifu_axi_arlen,
-	ifu_axi_arsize,
-	ifu_axi_arburst,
-	ifu_axi_arlock,
-	ifu_axi_arcache,
-	ifu_axi_arprot,
-	ifu_axi_arqos,
-	ifu_axi_rvalid,
-	ifu_axi_rready,
-	ifu_axi_rid,
-	ifu_axi_rdata,
-	ifu_axi_rresp,
-	ifu_axi_rlast,
-	sb_axi_awvalid,
-	sb_axi_awready,
-	sb_axi_awid,
-	sb_axi_awaddr,
-	sb_axi_awregion,
-	sb_axi_awlen,
-	sb_axi_awsize,
-	sb_axi_awburst,
-	sb_axi_awlock,
-	sb_axi_awcache,
-	sb_axi_awprot,
-	sb_axi_awqos,
-	sb_axi_wvalid,
-	sb_axi_wready,
-	sb_axi_wdata,
-	sb_axi_wstrb,
-	sb_axi_wlast,
-	sb_axi_bvalid,
-	sb_axi_bready,
-	sb_axi_bresp,
-	sb_axi_bid,
-	sb_axi_arvalid,
-	sb_axi_arready,
-	sb_axi_arid,
-	sb_axi_araddr,
-	sb_axi_arregion,
-	sb_axi_arlen,
-	sb_axi_arsize,
-	sb_axi_arburst,
-	sb_axi_arlock,
-	sb_axi_arcache,
-	sb_axi_arprot,
-	sb_axi_arqos,
-	sb_axi_rvalid,
-	sb_axi_rready,
-	sb_axi_rid,
-	sb_axi_rdata,
-	sb_axi_rresp,
-	sb_axi_rlast,
-	dma_axi_awvalid,
-	dma_axi_awready,
-	dma_axi_awid,
-	dma_axi_awaddr,
-	dma_axi_awsize,
-	dma_axi_awprot,
-	dma_axi_awlen,
-	dma_axi_awburst,
-	dma_axi_wvalid,
-	dma_axi_wready,
-	dma_axi_wdata,
-	dma_axi_wstrb,
-	dma_axi_wlast,
-	dma_axi_bvalid,
-	dma_axi_bready,
-	dma_axi_bresp,
-	dma_axi_bid,
-	dma_axi_arvalid,
-	dma_axi_arready,
-	dma_axi_arid,
-	dma_axi_araddr,
-	dma_axi_arsize,
-	dma_axi_arprot,
-	dma_axi_arlen,
-	dma_axi_arburst,
-	dma_axi_rvalid,
-	dma_axi_rready,
-	dma_axi_rid,
-	dma_axi_rdata,
-	dma_axi_rresp,
-	dma_axi_rlast,
-	haddr,
-	hburst,
-	hmastlock,
-	hprot,
-	hsize,
-	htrans,
-	hwrite,
-	hrdata,
-	hready,
-	hresp,
-	lsu_haddr,
-	lsu_hburst,
-	lsu_hmastlock,
-	lsu_hprot,
-	lsu_hsize,
-	lsu_htrans,
-	lsu_hwrite,
-	lsu_hwdata,
-	lsu_hrdata,
-	lsu_hready,
-	lsu_hresp,
-	sb_haddr,
-	sb_hburst,
-	sb_hmastlock,
-	sb_hprot,
-	sb_hsize,
-	sb_htrans,
-	sb_hwrite,
-	sb_hwdata,
-	sb_hrdata,
-	sb_hready,
-	sb_hresp,
-	dma_hsel,
-	dma_haddr,
-	dma_hburst,
-	dma_hmastlock,
-	dma_hprot,
-	dma_hsize,
-	dma_htrans,
-	dma_hwrite,
-	dma_hwdata,
-	dma_hreadyin,
-	dma_hrdata,
-	dma_hreadyout,
-	dma_hresp,
-	lsu_bus_clk_en,
-	ifu_bus_clk_en,
-	dbg_bus_clk_en,
-	dma_bus_clk_en,
-	dmi_reg_en,
-	dmi_reg_addr,
-	dmi_reg_wr_en,
-	dmi_reg_wdata,
-	dmi_reg_rdata,
-	extintsrc_req,
-	timer_int,
-	soft_int,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire dbg_rst_l;
-	input wire [31:1] rst_vec;
-	input wire nmi_int;
-	input wire [31:1] nmi_vec;
-	output wire core_rst_l;
-	output wire active_l2clk;
-	output wire free_l2clk;
-	output wire [31:0] trace_rv_i_insn_ip;
-	output wire [31:0] trace_rv_i_address_ip;
-	output wire trace_rv_i_valid_ip;
-	output wire trace_rv_i_exception_ip;
-	output wire [4:0] trace_rv_i_ecause_ip;
-	output wire trace_rv_i_interrupt_ip;
-	output wire [31:0] trace_rv_i_tval_ip;
-	output wire dccm_clk_override;
-	output wire icm_clk_override;
-	output wire dec_tlu_core_ecc_disable;
-	input wire i_cpu_halt_req;
-	input wire i_cpu_run_req;
-	output wire o_cpu_halt_ack;
-	output wire o_cpu_halt_status;
-	output wire o_cpu_run_ack;
-	output wire o_debug_mode_status;
-	input wire [31:4] core_id;
-	input wire mpc_debug_halt_req;
-	input wire mpc_debug_run_req;
-	input wire mpc_reset_run_req;
-	output wire mpc_debug_halt_ack;
-	output wire mpc_debug_run_ack;
-	output wire debug_brkpt_status;
-	output wire dec_tlu_perfcnt0;
-	output wire dec_tlu_perfcnt1;
-	output wire dec_tlu_perfcnt2;
-	output wire dec_tlu_perfcnt3;
-	output wire dccm_wren;
-	output wire dccm_rden;
-	output wire [pt[1398-:9] - 1:0] dccm_wr_addr_lo;
-	output wire [pt[1398-:9] - 1:0] dccm_wr_addr_hi;
-	output wire [pt[1398-:9] - 1:0] dccm_rd_addr_lo;
-	output wire [pt[1398-:9] - 1:0] dccm_rd_addr_hi;
-	output wire [pt[1360-:10] - 1:0] dccm_wr_data_lo;
-	output wire [pt[1360-:10] - 1:0] dccm_wr_data_hi;
-	input wire [pt[1360-:10] - 1:0] dccm_rd_data_lo;
-	input wire [pt[1360-:10] - 1:0] dccm_rd_data_hi;
-	output wire [pt[936-:9] - 1:1] iccm_rw_addr;
-	output wire iccm_wren;
-	output wire iccm_rden;
-	output wire [2:0] iccm_wr_size;
-	output wire [77:0] iccm_wr_data;
-	output wire iccm_buf_correct_ecc;
-	output wire iccm_correction_state;
-	input wire [63:0] iccm_rd_data;
-	input wire [77:0] iccm_rd_data_ecc;
-	output wire [31:1] ic_rw_addr;
-	output wire [pt[1060-:7] - 1:0] ic_tag_valid;
-	output wire [pt[1060-:7] - 1:0] ic_wr_en;
-	output wire ic_rd_en;
-	output wire [(pt[1189-:7] * 71) - 1:0] ic_wr_data;
-	input wire [63:0] ic_rd_data;
-	input wire [70:0] ic_debug_rd_data;
-	input wire [25:0] ictag_debug_rd_data;
-	output wire [70:0] ic_debug_wr_data;
-	input wire [pt[1189-:7] - 1:0] ic_eccerr;
-	input wire [pt[1189-:7] - 1:0] ic_parerr;
-	output wire [63:0] ic_premux_data;
-	output wire ic_sel_premux_data;
-	output wire [pt[1104-:9]:3] ic_debug_addr;
-	output wire ic_debug_rd_en;
-	output wire ic_debug_wr_en;
-	output wire ic_debug_tag_array;
-	output wire [pt[1060-:7] - 1:0] ic_debug_way;
-	input wire [pt[1060-:7] - 1:0] ic_rd_hit;
-	input wire ic_tag_perr;
-	output wire lsu_axi_awvalid;
-	input wire lsu_axi_awready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_awid;
-	output wire [31:0] lsu_axi_awaddr;
-	output wire [3:0] lsu_axi_awregion;
-	output wire [7:0] lsu_axi_awlen;
-	output wire [2:0] lsu_axi_awsize;
-	output wire [1:0] lsu_axi_awburst;
-	output wire lsu_axi_awlock;
-	output wire [3:0] lsu_axi_awcache;
-	output wire [2:0] lsu_axi_awprot;
-	output wire [3:0] lsu_axi_awqos;
-	output wire lsu_axi_wvalid;
-	input wire lsu_axi_wready;
-	output wire [63:0] lsu_axi_wdata;
-	output wire [7:0] lsu_axi_wstrb;
-	output wire lsu_axi_wlast;
-	input wire lsu_axi_bvalid;
-	output wire lsu_axi_bready;
-	input wire [1:0] lsu_axi_bresp;
-	input wire [pt[181-:8] - 1:0] lsu_axi_bid;
-	output wire lsu_axi_arvalid;
-	input wire lsu_axi_arready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_arid;
-	output wire [31:0] lsu_axi_araddr;
-	output wire [3:0] lsu_axi_arregion;
-	output wire [7:0] lsu_axi_arlen;
-	output wire [2:0] lsu_axi_arsize;
-	output wire [1:0] lsu_axi_arburst;
-	output wire lsu_axi_arlock;
-	output wire [3:0] lsu_axi_arcache;
-	output wire [2:0] lsu_axi_arprot;
-	output wire [3:0] lsu_axi_arqos;
-	input wire lsu_axi_rvalid;
-	output wire lsu_axi_rready;
-	input wire [pt[181-:8] - 1:0] lsu_axi_rid;
-	input wire [63:0] lsu_axi_rdata;
-	input wire [1:0] lsu_axi_rresp;
-	input wire lsu_axi_rlast;
-	output wire ifu_axi_awvalid;
-	input wire ifu_axi_awready;
-	output wire [pt[826-:8] - 1:0] ifu_axi_awid;
-	output wire [31:0] ifu_axi_awaddr;
-	output wire [3:0] ifu_axi_awregion;
-	output wire [7:0] ifu_axi_awlen;
-	output wire [2:0] ifu_axi_awsize;
-	output wire [1:0] ifu_axi_awburst;
-	output wire ifu_axi_awlock;
-	output wire [3:0] ifu_axi_awcache;
-	output wire [2:0] ifu_axi_awprot;
-	output wire [3:0] ifu_axi_awqos;
-	output wire ifu_axi_wvalid;
-	input wire ifu_axi_wready;
-	output wire [63:0] ifu_axi_wdata;
-	output wire [7:0] ifu_axi_wstrb;
-	output wire ifu_axi_wlast;
-	input wire ifu_axi_bvalid;
-	output wire ifu_axi_bready;
-	input wire [1:0] ifu_axi_bresp;
-	input wire [pt[826-:8] - 1:0] ifu_axi_bid;
-	output wire ifu_axi_arvalid;
-	input wire ifu_axi_arready;
-	output wire [pt[826-:8] - 1:0] ifu_axi_arid;
-	output wire [31:0] ifu_axi_araddr;
-	output wire [3:0] ifu_axi_arregion;
-	output wire [7:0] ifu_axi_arlen;
-	output wire [2:0] ifu_axi_arsize;
-	output wire [1:0] ifu_axi_arburst;
-	output wire ifu_axi_arlock;
-	output wire [3:0] ifu_axi_arcache;
-	output wire [2:0] ifu_axi_arprot;
-	output wire [3:0] ifu_axi_arqos;
-	input wire ifu_axi_rvalid;
-	output wire ifu_axi_rready;
-	input wire [pt[826-:8] - 1:0] ifu_axi_rid;
-	input wire [63:0] ifu_axi_rdata;
-	input wire [1:0] ifu_axi_rresp;
-	input wire ifu_axi_rlast;
-	output wire sb_axi_awvalid;
-	input wire sb_axi_awready;
-	output wire [pt[12-:8] - 1:0] sb_axi_awid;
-	output wire [31:0] sb_axi_awaddr;
-	output wire [3:0] sb_axi_awregion;
-	output wire [7:0] sb_axi_awlen;
-	output wire [2:0] sb_axi_awsize;
-	output wire [1:0] sb_axi_awburst;
-	output wire sb_axi_awlock;
-	output wire [3:0] sb_axi_awcache;
-	output wire [2:0] sb_axi_awprot;
-	output wire [3:0] sb_axi_awqos;
-	output wire sb_axi_wvalid;
-	input wire sb_axi_wready;
-	output wire [63:0] sb_axi_wdata;
-	output wire [7:0] sb_axi_wstrb;
-	output wire sb_axi_wlast;
-	input wire sb_axi_bvalid;
-	output wire sb_axi_bready;
-	input wire [1:0] sb_axi_bresp;
-	input wire [pt[12-:8] - 1:0] sb_axi_bid;
-	output wire sb_axi_arvalid;
-	input wire sb_axi_arready;
-	output wire [pt[12-:8] - 1:0] sb_axi_arid;
-	output wire [31:0] sb_axi_araddr;
-	output wire [3:0] sb_axi_arregion;
-	output wire [7:0] sb_axi_arlen;
-	output wire [2:0] sb_axi_arsize;
-	output wire [1:0] sb_axi_arburst;
-	output wire sb_axi_arlock;
-	output wire [3:0] sb_axi_arcache;
-	output wire [2:0] sb_axi_arprot;
-	output wire [3:0] sb_axi_arqos;
-	input wire sb_axi_rvalid;
-	output wire sb_axi_rready;
-	input wire [pt[12-:8] - 1:0] sb_axi_rid;
-	input wire [63:0] sb_axi_rdata;
-	input wire [1:0] sb_axi_rresp;
-	input wire sb_axi_rlast;
-	input wire dma_axi_awvalid;
-	output wire dma_axi_awready;
-	input wire [pt[1235-:8] - 1:0] dma_axi_awid;
-	input wire [31:0] dma_axi_awaddr;
-	input wire [2:0] dma_axi_awsize;
-	input wire [2:0] dma_axi_awprot;
-	input wire [7:0] dma_axi_awlen;
-	input wire [1:0] dma_axi_awburst;
-	input wire dma_axi_wvalid;
-	output wire dma_axi_wready;
-	input wire [63:0] dma_axi_wdata;
-	input wire [7:0] dma_axi_wstrb;
-	input wire dma_axi_wlast;
-	output wire dma_axi_bvalid;
-	input wire dma_axi_bready;
-	output wire [1:0] dma_axi_bresp;
-	output wire [pt[1235-:8] - 1:0] dma_axi_bid;
-	input wire dma_axi_arvalid;
-	output wire dma_axi_arready;
-	input wire [pt[1235-:8] - 1:0] dma_axi_arid;
-	input wire [31:0] dma_axi_araddr;
-	input wire [2:0] dma_axi_arsize;
-	input wire [2:0] dma_axi_arprot;
-	input wire [7:0] dma_axi_arlen;
-	input wire [1:0] dma_axi_arburst;
-	output wire dma_axi_rvalid;
-	input wire dma_axi_rready;
-	output wire [pt[1235-:8] - 1:0] dma_axi_rid;
-	output wire [63:0] dma_axi_rdata;
-	output wire [1:0] dma_axi_rresp;
-	output wire dma_axi_rlast;
-	output wire [31:0] haddr;
-	output wire [2:0] hburst;
-	output wire hmastlock;
-	output wire [3:0] hprot;
-	output wire [2:0] hsize;
-	output wire [1:0] htrans;
-	output wire hwrite;
-	input wire [63:0] hrdata;
-	input wire hready;
-	input wire hresp;
-	output wire [31:0] lsu_haddr;
-	output wire [2:0] lsu_hburst;
-	output wire lsu_hmastlock;
-	output wire [3:0] lsu_hprot;
-	output wire [2:0] lsu_hsize;
-	output wire [1:0] lsu_htrans;
-	output wire lsu_hwrite;
-	output wire [63:0] lsu_hwdata;
-	input wire [63:0] lsu_hrdata;
-	input wire lsu_hready;
-	input wire lsu_hresp;
-	output wire [31:0] sb_haddr;
-	output wire [2:0] sb_hburst;
-	output wire sb_hmastlock;
-	output wire [3:0] sb_hprot;
-	output wire [2:0] sb_hsize;
-	output wire [1:0] sb_htrans;
-	output wire sb_hwrite;
-	output wire [63:0] sb_hwdata;
-	input wire [63:0] sb_hrdata;
-	input wire sb_hready;
-	input wire sb_hresp;
-	input wire dma_hsel;
-	input wire [31:0] dma_haddr;
-	input wire [2:0] dma_hburst;
-	input wire dma_hmastlock;
-	input wire [3:0] dma_hprot;
-	input wire [2:0] dma_hsize;
-	input wire [1:0] dma_htrans;
-	input wire dma_hwrite;
-	input wire [63:0] dma_hwdata;
-	input wire dma_hreadyin;
-	output wire [63:0] dma_hrdata;
-	output wire dma_hreadyout;
-	output wire dma_hresp;
-	input wire lsu_bus_clk_en;
-	input wire ifu_bus_clk_en;
-	input wire dbg_bus_clk_en;
-	input wire dma_bus_clk_en;
-	input wire dmi_reg_en;
-	input wire [6:0] dmi_reg_addr;
-	input wire dmi_reg_wr_en;
-	input wire [31:0] dmi_reg_wdata;
-	output wire [31:0] dmi_reg_rdata;
-	input wire [pt[56-:12]:1] extintsrc_req;
-	input wire timer_int;
-	input wire soft_int;
-	input wire scan_mode;
-	wire [63:0] hwdata_nc;
-	wire ifu_pmu_instr_aligned;
-	wire ifu_ic_error_start;
-	wire ifu_iccm_rd_ecc_single_err;
-	wire lsu_axi_awready_ahb;
-	wire lsu_axi_wready_ahb;
-	wire lsu_axi_bvalid_ahb;
-	wire lsu_axi_bready_ahb;
-	wire [1:0] lsu_axi_bresp_ahb;
-	wire [pt[181-:8] - 1:0] lsu_axi_bid_ahb;
-	wire lsu_axi_arready_ahb;
-	wire lsu_axi_rvalid_ahb;
-	wire [pt[181-:8] - 1:0] lsu_axi_rid_ahb;
-	wire [63:0] lsu_axi_rdata_ahb;
-	wire [1:0] lsu_axi_rresp_ahb;
-	wire lsu_axi_rlast_ahb;
-	wire lsu_axi_awready_int;
-	wire lsu_axi_wready_int;
-	wire lsu_axi_bvalid_int;
-	wire lsu_axi_bready_int;
-	wire [1:0] lsu_axi_bresp_int;
-	wire [pt[181-:8] - 1:0] lsu_axi_bid_int;
-	wire lsu_axi_arready_int;
-	wire lsu_axi_rvalid_int;
-	wire [pt[181-:8] - 1:0] lsu_axi_rid_int;
-	wire [63:0] lsu_axi_rdata_int;
-	wire [1:0] lsu_axi_rresp_int;
-	wire lsu_axi_rlast_int;
-	wire ifu_axi_awready_ahb;
-	wire ifu_axi_wready_ahb;
-	wire ifu_axi_bvalid_ahb;
-	wire ifu_axi_bready_ahb;
-	wire [1:0] ifu_axi_bresp_ahb;
-	wire [pt[826-:8] - 1:0] ifu_axi_bid_ahb;
-	wire ifu_axi_arready_ahb;
-	wire ifu_axi_rvalid_ahb;
-	wire [pt[826-:8] - 1:0] ifu_axi_rid_ahb;
-	wire [63:0] ifu_axi_rdata_ahb;
-	wire [1:0] ifu_axi_rresp_ahb;
-	wire ifu_axi_rlast_ahb;
-	wire ifu_axi_awready_int;
-	wire ifu_axi_wready_int;
-	wire ifu_axi_bvalid_int;
-	wire ifu_axi_bready_int;
-	wire [1:0] ifu_axi_bresp_int;
-	wire [pt[826-:8] - 1:0] ifu_axi_bid_int;
-	wire ifu_axi_arready_int;
-	wire ifu_axi_rvalid_int;
-	wire [pt[826-:8] - 1:0] ifu_axi_rid_int;
-	wire [63:0] ifu_axi_rdata_int;
-	wire [1:0] ifu_axi_rresp_int;
-	wire ifu_axi_rlast_int;
-	wire sb_axi_awready_ahb;
-	wire sb_axi_wready_ahb;
-	wire sb_axi_bvalid_ahb;
-	wire sb_axi_bready_ahb;
-	wire [1:0] sb_axi_bresp_ahb;
-	wire [pt[12-:8] - 1:0] sb_axi_bid_ahb;
-	wire sb_axi_arready_ahb;
-	wire sb_axi_rvalid_ahb;
-	wire [pt[12-:8] - 1:0] sb_axi_rid_ahb;
-	wire [63:0] sb_axi_rdata_ahb;
-	wire [1:0] sb_axi_rresp_ahb;
-	wire sb_axi_rlast_ahb;
-	wire sb_axi_awready_int;
-	wire sb_axi_wready_int;
-	wire sb_axi_bvalid_int;
-	wire sb_axi_bready_int;
-	wire [1:0] sb_axi_bresp_int;
-	wire [pt[12-:8] - 1:0] sb_axi_bid_int;
-	wire sb_axi_arready_int;
-	wire sb_axi_rvalid_int;
-	wire [pt[12-:8] - 1:0] sb_axi_rid_int;
-	wire [63:0] sb_axi_rdata_int;
-	wire [1:0] sb_axi_rresp_int;
-	wire sb_axi_rlast_int;
-	wire dma_axi_awvalid_ahb;
-	wire [pt[1235-:8] - 1:0] dma_axi_awid_ahb;
-	wire [31:0] dma_axi_awaddr_ahb;
-	wire [2:0] dma_axi_awsize_ahb;
-	wire [2:0] dma_axi_awprot_ahb;
-	wire [7:0] dma_axi_awlen_ahb;
-	wire [1:0] dma_axi_awburst_ahb;
-	wire dma_axi_wvalid_ahb;
-	wire [63:0] dma_axi_wdata_ahb;
-	wire [7:0] dma_axi_wstrb_ahb;
-	wire dma_axi_wlast_ahb;
-	wire dma_axi_bready_ahb;
-	wire dma_axi_arvalid_ahb;
-	wire [pt[1235-:8] - 1:0] dma_axi_arid_ahb;
-	wire [31:0] dma_axi_araddr_ahb;
-	wire [2:0] dma_axi_arsize_ahb;
-	wire [2:0] dma_axi_arprot_ahb;
-	wire [7:0] dma_axi_arlen_ahb;
-	wire [1:0] dma_axi_arburst_ahb;
-	wire dma_axi_rready_ahb;
-	wire dma_axi_awvalid_int;
-	wire [pt[1235-:8] - 1:0] dma_axi_awid_int;
-	wire [31:0] dma_axi_awaddr_int;
-	wire [2:0] dma_axi_awsize_int;
-	wire [2:0] dma_axi_awprot_int;
-	wire [7:0] dma_axi_awlen_int;
-	wire [1:0] dma_axi_awburst_int;
-	wire dma_axi_wvalid_int;
-	wire [63:0] dma_axi_wdata_int;
-	wire [7:0] dma_axi_wstrb_int;
-	wire dma_axi_wlast_int;
-	wire dma_axi_bready_int;
-	wire dma_axi_arvalid_int;
-	wire [pt[1235-:8] - 1:0] dma_axi_arid_int;
-	wire [31:0] dma_axi_araddr_int;
-	wire [2:0] dma_axi_arsize_int;
-	wire [2:0] dma_axi_arprot_int;
-	wire [7:0] dma_axi_arlen_int;
-	wire [1:0] dma_axi_arburst_int;
-	wire dma_axi_rready_int;
-	wire [70:0] ifu_ic_debug_rd_data;
-	wire ifu_ic_debug_rd_data_valid;
-	wire [89:0] dec_tlu_ic_diag_pkt;
-	wire dec_i0_rs1_en_d;
-	wire dec_i0_rs2_en_d;
-	wire [31:0] gpr_i0_rs1_d;
-	wire [31:0] gpr_i0_rs2_d;
-	wire [31:0] dec_i0_result_r;
-	wire [31:0] exu_i0_result_x;
-	wire [31:1] exu_i0_pc_x;
-	wire [31:1] exu_npc_r;
-	wire [43:0] i0_ap;
-	wire [151:0] trigger_pkt_any;
-	wire [3:0] lsu_trigger_match_m;
-	wire [31:0] dec_i0_immed_d;
-	wire [12:1] dec_i0_br_immed_d;
-	wire dec_i0_select_pc_d;
-	wire [31:1] dec_i0_pc_d;
-	wire [3:0] dec_i0_rs1_bypass_en_d;
-	wire [3:0] dec_i0_rs2_bypass_en_d;
-	wire dec_i0_alu_decode_d;
-	wire dec_i0_branch_d;
-	wire ifu_miss_state_idle;
-	wire dec_tlu_flush_noredir_r;
-	wire dec_tlu_flush_leak_one_r;
-	wire dec_tlu_flush_err_r;
-	wire ifu_i0_valid;
-	wire [31:0] ifu_i0_instr;
-	wire [31:1] ifu_i0_pc;
-	wire exu_flush_final;
-	wire [31:1] exu_flush_path_final;
-	wire [31:0] exu_lsu_rs1_d;
-	wire [31:0] exu_lsu_rs2_d;
-	wire [13:0] lsu_p;
-	wire dec_qual_lsu_d;
-	wire dec_lsu_valid_raw_d;
-	wire [11:0] dec_lsu_offset_d;
-	wire [31:0] lsu_result_m;
-	wire [31:0] lsu_result_corr_r;
-	wire lsu_single_ecc_error_incr;
-	wire [39:0] lsu_error_pkt_r;
-	wire lsu_imprecise_error_load_any;
-	wire lsu_imprecise_error_store_any;
-	wire [31:0] lsu_imprecise_error_addr_any;
-	wire lsu_load_stall_any;
-	wire lsu_store_stall_any;
-	wire lsu_idle_any;
-	wire lsu_active;
-	wire [31:1] lsu_fir_addr;
-	wire [1:0] lsu_fir_error;
-	wire lsu_nonblock_load_valid_m;
-	wire [pt[164-:7] - 1:0] lsu_nonblock_load_tag_m;
-	wire lsu_nonblock_load_inv_r;
-	wire [pt[164-:7] - 1:0] lsu_nonblock_load_inv_tag_r;
-	wire lsu_nonblock_load_data_valid;
-	wire [pt[164-:7] - 1:0] lsu_nonblock_load_data_tag;
-	wire [31:0] lsu_nonblock_load_data;
-	wire dec_csr_ren_d;
-	wire [31:0] dec_csr_rddata_d;
-	wire [31:0] exu_csr_rs1_x;
-	wire dec_tlu_i0_commit_cmt;
-	wire dec_tlu_flush_lower_r;
-	wire dec_tlu_flush_lower_wb;
-	wire dec_tlu_i0_kill_writeb_r;
-	wire dec_tlu_fence_i_r;
-	wire [31:1] dec_tlu_flush_path_r;
-	wire [31:0] dec_tlu_mrac_ff;
-	wire ifu_i0_pc4;
-	wire [19:0] mul_p;
-	wire [2:0] div_p;
-	wire dec_div_cancel;
-	wire [31:0] exu_div_result;
-	wire exu_div_wren;
-	wire dec_i0_decode_d;
-	wire [31:1] pred_correct_npc_x;
-	wire [6:0] dec_tlu_br0_r_pkt;
-	wire [55:0] exu_mp_pkt;
-	wire [pt[2236-:8] - 1:0] exu_mp_eghr;
-	wire [pt[2236-:8] - 1:0] exu_mp_fghr;
-	wire [pt[2172-:9]:pt[2163-:6]] exu_mp_index;
-	wire [pt[2139-:9] - 1:0] exu_mp_btag;
-	wire [pt[2236-:8] - 1:0] exu_i0_br_fghr_r;
-	wire [1:0] exu_i0_br_hist_r;
-	wire exu_i0_br_error_r;
-	wire exu_i0_br_start_error_r;
-	wire exu_i0_br_valid_r;
-	wire exu_i0_br_mp_r;
-	wire exu_i0_br_middle_r;
-	wire exu_i0_br_way_r;
-	wire [pt[2172-:9]:pt[2163-:6]] exu_i0_br_index_r;
-	wire dma_dccm_req;
-	wire dma_iccm_req;
-	wire [2:0] dma_mem_tag;
-	wire [31:0] dma_mem_addr;
-	wire [2:0] dma_mem_sz;
-	wire dma_mem_write;
-	wire [63:0] dma_mem_wdata;
-	wire dccm_dma_rvalid;
-	wire dccm_dma_ecc_error;
-	wire [2:0] dccm_dma_rtag;
-	wire [63:0] dccm_dma_rdata;
-	wire iccm_dma_rvalid;
-	wire iccm_dma_ecc_error;
-	wire [2:0] iccm_dma_rtag;
-	wire [63:0] iccm_dma_rdata;
-	wire dma_dccm_stall_any;
-	wire dma_iccm_stall_any;
-	wire dccm_ready;
-	wire iccm_ready;
-	wire dma_pmu_dccm_read;
-	wire dma_pmu_dccm_write;
-	wire dma_pmu_any_read;
-	wire dma_pmu_any_write;
-	wire ifu_i0_icaf;
-	wire [1:0] ifu_i0_icaf_type;
-	wire ifu_i0_icaf_second;
-	wire ifu_i0_dbecc;
-	wire iccm_dma_sb_error;
-	wire [50:0] i0_brp;
-	wire [pt[2172-:9]:pt[2163-:6]] ifu_i0_bp_index;
-	wire [pt[2236-:8] - 1:0] ifu_i0_bp_fghr;
-	wire [pt[2139-:9] - 1:0] ifu_i0_bp_btag;
-	wire [$clog2(pt[2061-:14]) - 1:0] ifu_i0_fa_index;
-	wire [$clog2(pt[2061-:14]) - 1:0] dec_fa_error_index;
-	wire [55:0] dec_i0_predict_p_d;
-	wire [pt[2236-:8] - 1:0] i0_predict_fghr_d;
-	wire [pt[2172-:9]:pt[2163-:6]] i0_predict_index_d;
-	wire [pt[2139-:9] - 1:0] i0_predict_btag_d;
-	wire picm_wren;
-	wire picm_rden;
-	wire picm_mken;
-	wire [31:0] picm_rdaddr;
-	wire [31:0] picm_wraddr;
-	wire [31:0] picm_wr_data;
-	wire [31:0] picm_rd_data;
-	wire dec_tlu_external_ldfwd_disable;
-	wire dec_tlu_bpred_disable;
-	wire dec_tlu_wb_coalescing_disable;
-	wire dec_tlu_sideeffect_posted_disable;
-	wire [2:0] dec_tlu_dma_qos_prty;
-	wire dec_tlu_misc_clk_override;
-	wire dec_tlu_ifu_clk_override;
-	wire dec_tlu_lsu_clk_override;
-	wire dec_tlu_bus_clk_override;
-	wire dec_tlu_pic_clk_override;
-	wire dec_tlu_dccm_clk_override;
-	wire dec_tlu_icm_clk_override;
-	wire dec_tlu_picio_clk_override;
-	assign dccm_clk_override = dec_tlu_dccm_clk_override;
-	assign icm_clk_override = dec_tlu_icm_clk_override;
-	wire [31:0] dbg_cmd_addr;
-	wire [31:0] dbg_cmd_wrdata;
-	wire dbg_cmd_valid;
-	wire dbg_cmd_write;
-	wire [1:0] dbg_cmd_type;
-	wire [1:0] dbg_cmd_size;
-	wire dbg_halt_req;
-	wire dbg_resume_req;
-	wire dbg_core_rst_l;
-	wire core_dbg_cmd_done;
-	wire core_dbg_cmd_fail;
-	wire [31:0] core_dbg_rddata;
-	wire dma_dbg_cmd_done;
-	wire dma_dbg_cmd_fail;
-	wire [31:0] dma_dbg_rddata;
-	wire dbg_dma_bubble;
-	wire dma_dbg_ready;
-	wire [31:0] dec_dbg_rddata;
-	wire dec_dbg_cmd_done;
-	wire dec_dbg_cmd_fail;
-	wire dec_tlu_mpc_halted_only;
-	wire dec_tlu_dbg_halted;
-	wire dec_tlu_resume_ack;
-	wire dec_tlu_debug_mode;
-	wire dec_debug_wdata_rs1_d;
-	wire dec_tlu_force_halt;
-	wire [1:0] dec_data_en;
-	wire [1:0] dec_ctl_en;
-	wire exu_pmu_i0_br_misp;
-	wire exu_pmu_i0_br_ataken;
-	wire exu_pmu_i0_pc4;
-	wire lsu_pmu_load_external_m;
-	wire lsu_pmu_store_external_m;
-	wire lsu_pmu_misaligned_m;
-	wire lsu_pmu_bus_trxn;
-	wire lsu_pmu_bus_misaligned;
-	wire lsu_pmu_bus_error;
-	wire lsu_pmu_bus_busy;
-	wire ifu_pmu_fetch_stall;
-	wire ifu_pmu_ic_miss;
-	wire ifu_pmu_ic_hit;
-	wire ifu_pmu_bus_error;
-	wire ifu_pmu_bus_busy;
-	wire ifu_pmu_bus_trxn;
-	wire active_state;
-	wire free_clk;
-	wire active_clk;
-	wire dec_pause_state_cg;
-	wire lsu_nonblock_load_data_error;
-	wire [15:0] ifu_i0_cinst;
-	wire [31:2] dec_tlu_meihap;
-	wire dec_extint_stall;
-	wire [103:0] trace_rv_trace_pkt;
-	wire lsu_fastint_stall_any;
-	wire [7:0] pic_claimid;
-	wire [3:0] pic_pl;
-	wire [3:0] dec_tlu_meicurpl;
-	wire [3:0] dec_tlu_meipt;
-	wire mexintpend;
-	wire mhwakeup;
-	wire dma_active;
-	wire pause_state;
-	wire halt_state;
-	wire dec_tlu_core_empty;
-	assign pause_state = (dec_pause_state_cg & ~(dma_active | lsu_active)) & dec_tlu_core_empty;
-	assign halt_state = o_cpu_halt_status & ~(dma_active | lsu_active);
-	assign active_state = ((~(halt_state | pause_state) | dec_tlu_flush_lower_r) | dec_tlu_flush_lower_wb) | dec_tlu_misc_clk_override;
-	rvoclkhdr free_cg2(
-		.clk(clk),
-		.en(1'b1),
-		.l1clk(free_l2clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr active_cg2(
-		.clk(clk),
-		.en(active_state),
-		.l1clk(active_l2clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr free_cg1(
-		.clk(free_l2clk),
-		.en(1'b1),
-		.l1clk(free_clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr active_cg1(
-		.clk(active_l2clk),
-		.en(1'b1),
-		.l1clk(active_clk),
-		.scan_mode(scan_mode)
-	);
-	assign core_dbg_cmd_done = dma_dbg_cmd_done | dec_dbg_cmd_done;
-	assign core_dbg_cmd_fail = dma_dbg_cmd_fail | dec_dbg_cmd_fail;
-	assign core_dbg_rddata[31:0] = (dma_dbg_cmd_done ? dma_dbg_rddata[31:0] : dec_dbg_rddata[31:0]);
-	eb1_dbg #(.pt(pt)) dbg(
-		.rst_l(core_rst_l),
-		.clk(free_l2clk),
-		.clk_override(dec_tlu_misc_clk_override),
-		.sb_axi_awready(sb_axi_awready_int),
-		.sb_axi_wready(sb_axi_wready_int),
-		.sb_axi_bvalid(sb_axi_bvalid_int),
-		.sb_axi_bresp(sb_axi_bresp_int[1:0]),
-		.sb_axi_arready(sb_axi_arready_int),
-		.sb_axi_rvalid(sb_axi_rvalid_int),
-		.sb_axi_rdata(sb_axi_rdata_int[63:0]),
-		.sb_axi_rresp(sb_axi_rresp_int[1:0]),
-		.dbg_cmd_addr(dbg_cmd_addr),
-		.dbg_cmd_wrdata(dbg_cmd_wrdata),
-		.dbg_cmd_valid(dbg_cmd_valid),
-		.dbg_cmd_write(dbg_cmd_write),
-		.dbg_cmd_type(dbg_cmd_type),
-		.dbg_cmd_size(dbg_cmd_size),
-		.dbg_core_rst_l(dbg_core_rst_l),
-		.core_dbg_rddata(core_dbg_rddata),
-		.core_dbg_cmd_done(core_dbg_cmd_done),
-		.core_dbg_cmd_fail(core_dbg_cmd_fail),
-		.dbg_dma_bubble(dbg_dma_bubble),
-		.dma_dbg_ready(dma_dbg_ready),
-		.dbg_halt_req(dbg_halt_req),
-		.dbg_resume_req(dbg_resume_req),
-		.dec_tlu_debug_mode(dec_tlu_debug_mode),
-		.dec_tlu_dbg_halted(dec_tlu_dbg_halted),
-		.dec_tlu_mpc_halted_only(dec_tlu_mpc_halted_only),
-		.dec_tlu_resume_ack(dec_tlu_resume_ack),
-		.dmi_reg_en(dmi_reg_en),
-		.dmi_reg_addr(dmi_reg_addr),
-		.dmi_reg_wr_en(dmi_reg_wr_en),
-		.dmi_reg_wdata(dmi_reg_wdata),
-		.dmi_reg_rdata(dmi_reg_rdata),
-		.sb_axi_awvalid(sb_axi_awvalid),
-		.sb_axi_awid(sb_axi_awid),
-		.sb_axi_awaddr(sb_axi_awaddr),
-		.sb_axi_awregion(sb_axi_awregion),
-		.sb_axi_awlen(sb_axi_awlen),
-		.sb_axi_awsize(sb_axi_awsize),
-		.sb_axi_awburst(sb_axi_awburst),
-		.sb_axi_awlock(sb_axi_awlock),
-		.sb_axi_awcache(sb_axi_awcache),
-		.sb_axi_awprot(sb_axi_awprot),
-		.sb_axi_awqos(sb_axi_awqos),
-		.sb_axi_wvalid(sb_axi_wvalid),
-		.sb_axi_wdata(sb_axi_wdata),
-		.sb_axi_wstrb(sb_axi_wstrb),
-		.sb_axi_wlast(sb_axi_wlast),
-		.sb_axi_bready(sb_axi_bready),
-		.sb_axi_arvalid(sb_axi_arvalid),
-		.sb_axi_arid(sb_axi_arid),
-		.sb_axi_araddr(sb_axi_araddr),
-		.sb_axi_arregion(sb_axi_arregion),
-		.sb_axi_arlen(sb_axi_arlen),
-		.sb_axi_arsize(sb_axi_arsize),
-		.sb_axi_arburst(sb_axi_arburst),
-		.sb_axi_arlock(sb_axi_arlock),
-		.sb_axi_arcache(sb_axi_arcache),
-		.sb_axi_arprot(sb_axi_arprot),
-		.sb_axi_arqos(sb_axi_arqos),
-		.sb_axi_rready(sb_axi_rready),
-		.dbg_bus_clk_en(dbg_bus_clk_en),
-		.dbg_rst_l(dbg_rst_l),
-		.scan_mode(scan_mode)
-	);
-	assign core_rst_l = rst_l & (dbg_core_rst_l | scan_mode);
-	eb1_ifu #(.pt(pt)) ifu(
-		.clk(active_l2clk),
-		.rst_l(core_rst_l),
-		.dec_tlu_flush_err_wb(dec_tlu_flush_err_r),
-		.dec_tlu_flush_noredir_wb(dec_tlu_flush_noredir_r),
-		.dec_tlu_fence_i_wb(dec_tlu_fence_i_r),
-		.dec_tlu_flush_leak_one_wb(dec_tlu_flush_leak_one_r),
-		.dec_tlu_flush_lower_wb(dec_tlu_flush_lower_r),
-		.ifu_axi_arready(ifu_axi_arready_int),
-		.ifu_axi_rvalid(ifu_axi_rvalid_int),
-		.ifu_axi_rid(ifu_axi_rid_int[pt[826-:8] - 1:0]),
-		.ifu_axi_rdata(ifu_axi_rdata_int[63:0]),
-		.ifu_axi_rresp(ifu_axi_rresp_int[1:0]),
-		.exu_flush_final(exu_flush_final),
-		.free_l2clk(free_l2clk),
-		.active_clk(active_clk),
-		.dec_i0_decode_d(dec_i0_decode_d),
-		.dec_tlu_i0_commit_cmt(dec_tlu_i0_commit_cmt),
-		.exu_flush_path_final(exu_flush_path_final),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.dec_tlu_bpred_disable(dec_tlu_bpred_disable),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.ifu_axi_awvalid(ifu_axi_awvalid),
-		.ifu_axi_awid(ifu_axi_awid),
-		.ifu_axi_awaddr(ifu_axi_awaddr),
-		.ifu_axi_awregion(ifu_axi_awregion),
-		.ifu_axi_awlen(ifu_axi_awlen),
-		.ifu_axi_awsize(ifu_axi_awsize),
-		.ifu_axi_awburst(ifu_axi_awburst),
-		.ifu_axi_awlock(ifu_axi_awlock),
-		.ifu_axi_awcache(ifu_axi_awcache),
-		.ifu_axi_awprot(ifu_axi_awprot),
-		.ifu_axi_awqos(ifu_axi_awqos),
-		.ifu_axi_wvalid(ifu_axi_wvalid),
-		.ifu_axi_wdata(ifu_axi_wdata),
-		.ifu_axi_wstrb(ifu_axi_wstrb),
-		.ifu_axi_wlast(ifu_axi_wlast),
-		.ifu_axi_bready(ifu_axi_bready),
-		.ifu_axi_arvalid(ifu_axi_arvalid),
-		.ifu_axi_arid(ifu_axi_arid),
-		.ifu_axi_araddr(ifu_axi_araddr),
-		.ifu_axi_arregion(ifu_axi_arregion),
-		.ifu_axi_arlen(ifu_axi_arlen),
-		.ifu_axi_arsize(ifu_axi_arsize),
-		.ifu_axi_arburst(ifu_axi_arburst),
-		.ifu_axi_arlock(ifu_axi_arlock),
-		.ifu_axi_arcache(ifu_axi_arcache),
-		.ifu_axi_arprot(ifu_axi_arprot),
-		.ifu_axi_arqos(ifu_axi_arqos),
-		.ifu_axi_rready(ifu_axi_rready),
-		.ifu_bus_clk_en(ifu_bus_clk_en),
-		.dma_iccm_req(dma_iccm_req),
-		.dma_mem_addr(dma_mem_addr),
-		.dma_mem_sz(dma_mem_sz),
-		.dma_mem_write(dma_mem_write),
-		.dma_mem_wdata(dma_mem_wdata),
-		.dma_mem_tag(dma_mem_tag),
-		.dma_iccm_stall_any(dma_iccm_stall_any),
-		.iccm_dma_ecc_error(iccm_dma_ecc_error),
-		.iccm_dma_rvalid(iccm_dma_rvalid),
-		.iccm_dma_rdata(iccm_dma_rdata),
-		.iccm_dma_rtag(iccm_dma_rtag),
-		.iccm_ready(iccm_ready),
-		.ifu_pmu_instr_aligned(ifu_pmu_instr_aligned),
-		.ifu_pmu_fetch_stall(ifu_pmu_fetch_stall),
-		.ifu_ic_error_start(ifu_ic_error_start),
-		.ic_rw_addr(ic_rw_addr),
-		.ic_wr_en(ic_wr_en),
-		.ic_rd_en(ic_rd_en),
-		.ic_wr_data(ic_wr_data),
-		.ic_rd_data(ic_rd_data),
-		.ic_debug_rd_data(ic_debug_rd_data),
-		.ictag_debug_rd_data(ictag_debug_rd_data),
-		.ic_debug_wr_data(ic_debug_wr_data),
-		.ifu_ic_debug_rd_data(ifu_ic_debug_rd_data),
-		.ic_eccerr(ic_eccerr),
-		.ic_parerr(ic_parerr),
-		.ic_premux_data(ic_premux_data),
-		.ic_sel_premux_data(ic_sel_premux_data),
-		.ic_debug_addr(ic_debug_addr),
-		.ic_debug_rd_en(ic_debug_rd_en),
-		.ic_debug_wr_en(ic_debug_wr_en),
-		.ic_debug_tag_array(ic_debug_tag_array),
-		.ic_debug_way(ic_debug_way),
-		.ic_tag_valid(ic_tag_valid),
-		.ic_rd_hit(ic_rd_hit),
-		.ic_tag_perr(ic_tag_perr),
-		.iccm_rw_addr(iccm_rw_addr),
-		.iccm_wren(iccm_wren),
-		.iccm_rden(iccm_rden),
-		.iccm_wr_data(iccm_wr_data),
-		.iccm_wr_size(iccm_wr_size),
-		.iccm_rd_data(iccm_rd_data),
-		.iccm_rd_data_ecc(iccm_rd_data_ecc),
-		.ifu_iccm_rd_ecc_single_err(ifu_iccm_rd_ecc_single_err),
-		.ifu_pmu_ic_miss(ifu_pmu_ic_miss),
-		.ifu_pmu_ic_hit(ifu_pmu_ic_hit),
-		.ifu_pmu_bus_error(ifu_pmu_bus_error),
-		.ifu_pmu_bus_busy(ifu_pmu_bus_busy),
-		.ifu_pmu_bus_trxn(ifu_pmu_bus_trxn),
-		.ifu_i0_icaf(ifu_i0_icaf),
-		.ifu_i0_icaf_type(ifu_i0_icaf_type),
-		.ifu_i0_valid(ifu_i0_valid),
-		.ifu_i0_icaf_second(ifu_i0_icaf_second),
-		.ifu_i0_dbecc(ifu_i0_dbecc),
-		.iccm_dma_sb_error(iccm_dma_sb_error),
-		.ifu_i0_instr(ifu_i0_instr),
-		.ifu_i0_pc(ifu_i0_pc),
-		.ifu_i0_pc4(ifu_i0_pc4),
-		.ifu_miss_state_idle(ifu_miss_state_idle),
-		.i0_brp(i0_brp),
-		.ifu_i0_bp_index(ifu_i0_bp_index),
-		.ifu_i0_bp_fghr(ifu_i0_bp_fghr),
-		.ifu_i0_bp_btag(ifu_i0_bp_btag),
-		.ifu_i0_fa_index(ifu_i0_fa_index),
-		.exu_mp_pkt(exu_mp_pkt),
-		.exu_mp_eghr(exu_mp_eghr),
-		.exu_mp_fghr(exu_mp_fghr),
-		.exu_mp_index(exu_mp_index),
-		.exu_mp_btag(exu_mp_btag),
-		.dec_tlu_br0_r_pkt(dec_tlu_br0_r_pkt),
-		.exu_i0_br_fghr_r(exu_i0_br_fghr_r),
-		.exu_i0_br_index_r(exu_i0_br_index_r),
-		.dec_fa_error_index(dec_fa_error_index),
-		.ifu_i0_cinst(ifu_i0_cinst),
-		.dec_tlu_ic_diag_pkt(dec_tlu_ic_diag_pkt),
-		.ifu_ic_debug_rd_data_valid(ifu_ic_debug_rd_data_valid),
-		.iccm_buf_correct_ecc(iccm_buf_correct_ecc),
-		.iccm_correction_state(iccm_correction_state),
-		.scan_mode(scan_mode)
-	);
-	eb1_dec #(.pt(pt)) dec(
-		.clk(active_l2clk),
-		.dbg_cmd_wrdata(dbg_cmd_wrdata[1:0]),
-		.rst_l(core_rst_l),
-		.i_cpu_halt_req(i_cpu_halt_req),
-		.i_cpu_run_req(i_cpu_run_req),
-		.active_clk(active_clk),
-		.free_clk(free_clk),
-		.free_l2clk(free_l2clk),
-		.lsu_fastint_stall_any(lsu_fastint_stall_any),
-		.dec_extint_stall(dec_extint_stall),
-		.dec_i0_decode_d(dec_i0_decode_d),
-		.dec_pause_state_cg(dec_pause_state_cg),
-		.dec_tlu_core_empty(dec_tlu_core_empty),
-		.rst_vec(rst_vec),
-		.nmi_int(nmi_int),
-		.nmi_vec(nmi_vec),
-		.o_cpu_halt_status(o_cpu_halt_status),
-		.o_cpu_halt_ack(o_cpu_halt_ack),
-		.o_cpu_run_ack(o_cpu_run_ack),
-		.o_debug_mode_status(o_debug_mode_status),
-		.core_id(core_id),
-		.mpc_debug_halt_req(mpc_debug_halt_req),
-		.mpc_debug_run_req(mpc_debug_run_req),
-		.mpc_reset_run_req(mpc_reset_run_req),
-		.mpc_debug_halt_ack(mpc_debug_halt_ack),
-		.mpc_debug_run_ack(mpc_debug_run_ack),
-		.debug_brkpt_status(debug_brkpt_status),
-		.exu_pmu_i0_br_misp(exu_pmu_i0_br_misp),
-		.exu_pmu_i0_br_ataken(exu_pmu_i0_br_ataken),
-		.exu_pmu_i0_pc4(exu_pmu_i0_pc4),
-		.lsu_nonblock_load_valid_m(lsu_nonblock_load_valid_m),
-		.lsu_nonblock_load_tag_m(lsu_nonblock_load_tag_m),
-		.lsu_nonblock_load_inv_r(lsu_nonblock_load_inv_r),
-		.lsu_nonblock_load_inv_tag_r(lsu_nonblock_load_inv_tag_r),
-		.lsu_nonblock_load_data_valid(lsu_nonblock_load_data_valid),
-		.lsu_nonblock_load_data_error(lsu_nonblock_load_data_error),
-		.lsu_nonblock_load_data_tag(lsu_nonblock_load_data_tag),
-		.lsu_nonblock_load_data(lsu_nonblock_load_data),
-		.lsu_pmu_bus_trxn(lsu_pmu_bus_trxn),
-		.lsu_pmu_bus_misaligned(lsu_pmu_bus_misaligned),
-		.lsu_pmu_bus_error(lsu_pmu_bus_error),
-		.lsu_pmu_bus_busy(lsu_pmu_bus_busy),
-		.lsu_pmu_misaligned_m(lsu_pmu_misaligned_m),
-		.lsu_pmu_load_external_m(lsu_pmu_load_external_m),
-		.lsu_pmu_store_external_m(lsu_pmu_store_external_m),
-		.dma_pmu_dccm_read(dma_pmu_dccm_read),
-		.dma_pmu_dccm_write(dma_pmu_dccm_write),
-		.dma_pmu_any_read(dma_pmu_any_read),
-		.dma_pmu_any_write(dma_pmu_any_write),
-		.lsu_fir_addr(lsu_fir_addr),
-		.lsu_fir_error(lsu_fir_error),
-		.ifu_pmu_instr_aligned(ifu_pmu_instr_aligned),
-		.ifu_pmu_fetch_stall(ifu_pmu_fetch_stall),
-		.ifu_pmu_ic_miss(ifu_pmu_ic_miss),
-		.ifu_pmu_ic_hit(ifu_pmu_ic_hit),
-		.ifu_pmu_bus_error(ifu_pmu_bus_error),
-		.ifu_pmu_bus_busy(ifu_pmu_bus_busy),
-		.ifu_pmu_bus_trxn(ifu_pmu_bus_trxn),
-		.ifu_ic_error_start(ifu_ic_error_start),
-		.ifu_iccm_rd_ecc_single_err(ifu_iccm_rd_ecc_single_err),
-		.lsu_trigger_match_m(lsu_trigger_match_m),
-		.dbg_cmd_valid(dbg_cmd_valid),
-		.dbg_cmd_write(dbg_cmd_write),
-		.dbg_cmd_type(dbg_cmd_type),
-		.dbg_cmd_addr(dbg_cmd_addr),
-		.ifu_i0_icaf(ifu_i0_icaf),
-		.ifu_i0_icaf_type(ifu_i0_icaf_type),
-		.ifu_i0_icaf_second(ifu_i0_icaf_second),
-		.ifu_i0_dbecc(ifu_i0_dbecc),
-		.lsu_idle_any(lsu_idle_any),
-		.i0_brp(i0_brp),
-		.ifu_i0_bp_index(ifu_i0_bp_index),
-		.ifu_i0_bp_fghr(ifu_i0_bp_fghr),
-		.ifu_i0_bp_btag(ifu_i0_bp_btag),
-		.ifu_i0_fa_index(ifu_i0_fa_index),
-		.lsu_error_pkt_r(lsu_error_pkt_r),
-		.lsu_single_ecc_error_incr(lsu_single_ecc_error_incr),
-		.lsu_imprecise_error_load_any(lsu_imprecise_error_load_any),
-		.lsu_imprecise_error_store_any(lsu_imprecise_error_store_any),
-		.lsu_imprecise_error_addr_any(lsu_imprecise_error_addr_any),
-		.exu_div_result(exu_div_result),
-		.exu_div_wren(exu_div_wren),
-		.exu_csr_rs1_x(exu_csr_rs1_x),
-		.lsu_result_m(lsu_result_m),
-		.lsu_result_corr_r(lsu_result_corr_r),
-		.lsu_load_stall_any(lsu_load_stall_any),
-		.lsu_store_stall_any(lsu_store_stall_any),
-		.dma_dccm_stall_any(dma_dccm_stall_any),
-		.dma_iccm_stall_any(dma_iccm_stall_any),
-		.iccm_dma_sb_error(iccm_dma_sb_error),
-		.exu_flush_final(exu_flush_final),
-		.exu_npc_r(exu_npc_r),
-		.exu_i0_result_x(exu_i0_result_x),
-		.ifu_i0_valid(ifu_i0_valid),
-		.ifu_i0_instr(ifu_i0_instr),
-		.ifu_i0_pc(ifu_i0_pc),
-		.ifu_i0_pc4(ifu_i0_pc4),
-		.exu_i0_pc_x(exu_i0_pc_x),
-		.mexintpend(mexintpend),
-		.timer_int(timer_int),
-		.soft_int(soft_int),
-		.pic_claimid(pic_claimid),
-		.pic_pl(pic_pl),
-		.mhwakeup(mhwakeup),
-		.dec_tlu_meicurpl(dec_tlu_meicurpl),
-		.dec_tlu_meipt(dec_tlu_meipt),
-		.ifu_ic_debug_rd_data(ifu_ic_debug_rd_data),
-		.ifu_ic_debug_rd_data_valid(ifu_ic_debug_rd_data_valid),
-		.dec_tlu_ic_diag_pkt(dec_tlu_ic_diag_pkt),
-		.dbg_halt_req(dbg_halt_req),
-		.dbg_resume_req(dbg_resume_req),
-		.ifu_miss_state_idle(ifu_miss_state_idle),
-		.dec_tlu_dbg_halted(dec_tlu_dbg_halted),
-		.dec_tlu_debug_mode(dec_tlu_debug_mode),
-		.dec_tlu_resume_ack(dec_tlu_resume_ack),
-		.dec_tlu_flush_noredir_r(dec_tlu_flush_noredir_r),
-		.dec_tlu_mpc_halted_only(dec_tlu_mpc_halted_only),
-		.dec_tlu_flush_leak_one_r(dec_tlu_flush_leak_one_r),
-		.dec_tlu_flush_err_r(dec_tlu_flush_err_r),
-		.dec_tlu_meihap(dec_tlu_meihap),
-		.dec_debug_wdata_rs1_d(dec_debug_wdata_rs1_d),
-		.dec_dbg_rddata(dec_dbg_rddata),
-		.dec_dbg_cmd_done(dec_dbg_cmd_done),
-		.dec_dbg_cmd_fail(dec_dbg_cmd_fail),
-		.trigger_pkt_any(trigger_pkt_any),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.exu_i0_br_hist_r(exu_i0_br_hist_r),
-		.exu_i0_br_error_r(exu_i0_br_error_r),
-		.exu_i0_br_start_error_r(exu_i0_br_start_error_r),
-		.exu_i0_br_valid_r(exu_i0_br_valid_r),
-		.exu_i0_br_mp_r(exu_i0_br_mp_r),
-		.exu_i0_br_middle_r(exu_i0_br_middle_r),
-		.exu_i0_br_way_r(exu_i0_br_way_r),
-		.dec_i0_rs1_en_d(dec_i0_rs1_en_d),
-		.dec_i0_rs2_en_d(dec_i0_rs2_en_d),
-		.gpr_i0_rs1_d(gpr_i0_rs1_d),
-		.gpr_i0_rs2_d(gpr_i0_rs2_d),
-		.dec_i0_immed_d(dec_i0_immed_d),
-		.dec_i0_br_immed_d(dec_i0_br_immed_d),
-		.i0_ap(i0_ap),
-		.dec_i0_alu_decode_d(dec_i0_alu_decode_d),
-		.dec_i0_branch_d(dec_i0_branch_d),
-		.dec_i0_select_pc_d(dec_i0_select_pc_d),
-		.dec_i0_pc_d(dec_i0_pc_d),
-		.dec_i0_rs1_bypass_en_d(dec_i0_rs1_bypass_en_d),
-		.dec_i0_rs2_bypass_en_d(dec_i0_rs2_bypass_en_d),
-		.dec_i0_result_r(dec_i0_result_r),
-		.lsu_p(lsu_p),
-		.dec_qual_lsu_d(dec_qual_lsu_d),
-		.mul_p(mul_p),
-		.div_p(div_p),
-		.dec_div_cancel(dec_div_cancel),
-		.dec_lsu_offset_d(dec_lsu_offset_d),
-		.dec_csr_ren_d(dec_csr_ren_d),
-		.dec_csr_rddata_d(dec_csr_rddata_d),
-		.dec_tlu_flush_lower_r(dec_tlu_flush_lower_r),
-		.dec_tlu_flush_lower_wb(dec_tlu_flush_lower_wb),
-		.dec_tlu_flush_path_r(dec_tlu_flush_path_r),
-		.dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-		.dec_tlu_fence_i_r(dec_tlu_fence_i_r),
-		.pred_correct_npc_x(pred_correct_npc_x),
-		.dec_tlu_br0_r_pkt(dec_tlu_br0_r_pkt),
-		.dec_tlu_perfcnt0(dec_tlu_perfcnt0),
-		.dec_tlu_perfcnt1(dec_tlu_perfcnt1),
-		.dec_tlu_perfcnt2(dec_tlu_perfcnt2),
-		.dec_tlu_perfcnt3(dec_tlu_perfcnt3),
-		.dec_i0_predict_p_d(dec_i0_predict_p_d),
-		.i0_predict_fghr_d(i0_predict_fghr_d),
-		.i0_predict_index_d(i0_predict_index_d),
-		.i0_predict_btag_d(i0_predict_btag_d),
-		.dec_fa_error_index(dec_fa_error_index),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.dec_data_en(dec_data_en),
-		.dec_ctl_en(dec_ctl_en),
-		.ifu_i0_cinst(ifu_i0_cinst),
-		.trace_rv_trace_pkt(trace_rv_trace_pkt),
-		.dec_tlu_external_ldfwd_disable(dec_tlu_external_ldfwd_disable),
-		.dec_tlu_sideeffect_posted_disable(dec_tlu_sideeffect_posted_disable),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.dec_tlu_bpred_disable(dec_tlu_bpred_disable),
-		.dec_tlu_wb_coalescing_disable(dec_tlu_wb_coalescing_disable),
-		.dec_tlu_dma_qos_prty(dec_tlu_dma_qos_prty),
-		.dec_tlu_misc_clk_override(dec_tlu_misc_clk_override),
-		.dec_tlu_ifu_clk_override(dec_tlu_ifu_clk_override),
-		.dec_tlu_lsu_clk_override(dec_tlu_lsu_clk_override),
-		.dec_tlu_bus_clk_override(dec_tlu_bus_clk_override),
-		.dec_tlu_pic_clk_override(dec_tlu_pic_clk_override),
-		.dec_tlu_picio_clk_override(dec_tlu_picio_clk_override),
-		.dec_tlu_dccm_clk_override(dec_tlu_dccm_clk_override),
-		.dec_tlu_icm_clk_override(dec_tlu_icm_clk_override),
-		.dec_tlu_i0_commit_cmt(dec_tlu_i0_commit_cmt),
-		.scan_mode(scan_mode)
-	);
-	eb1_exu #(.pt(pt)) exu(
-		.clk(active_l2clk),
-		.rst_l(core_rst_l),
-		.scan_mode(scan_mode),
-		.dec_data_en(dec_data_en),
-		.dec_ctl_en(dec_ctl_en),
-		.dbg_cmd_wrdata(dbg_cmd_wrdata),
-		.i0_ap(i0_ap),
-		.dec_debug_wdata_rs1_d(dec_debug_wdata_rs1_d),
-		.dec_i0_predict_p_d(dec_i0_predict_p_d),
-		.i0_predict_fghr_d(i0_predict_fghr_d),
-		.i0_predict_index_d(i0_predict_index_d),
-		.i0_predict_btag_d(i0_predict_btag_d),
-		.lsu_result_m(lsu_result_m),
-		.lsu_nonblock_load_data(lsu_nonblock_load_data),
-		.dec_i0_rs1_en_d(dec_i0_rs1_en_d),
-		.dec_i0_rs2_en_d(dec_i0_rs2_en_d),
-		.gpr_i0_rs1_d(gpr_i0_rs1_d),
-		.gpr_i0_rs2_d(gpr_i0_rs2_d),
-		.dec_i0_immed_d(dec_i0_immed_d),
-		.dec_i0_result_r(dec_i0_result_r),
-		.dec_i0_br_immed_d(dec_i0_br_immed_d),
-		.dec_i0_alu_decode_d(dec_i0_alu_decode_d),
-		.dec_i0_branch_d(dec_i0_branch_d),
-		.dec_i0_select_pc_d(dec_i0_select_pc_d),
-		.dec_i0_pc_d(dec_i0_pc_d),
-		.dec_i0_rs1_bypass_en_d(dec_i0_rs1_bypass_en_d),
-		.dec_i0_rs2_bypass_en_d(dec_i0_rs2_bypass_en_d),
-		.dec_csr_ren_d(dec_csr_ren_d),
-		.dec_csr_rddata_d(dec_csr_rddata_d),
-		.dec_qual_lsu_d(dec_qual_lsu_d),
-		.mul_p(mul_p),
-		.div_p(div_p),
-		.dec_div_cancel(dec_div_cancel),
-		.pred_correct_npc_x(pred_correct_npc_x),
-		.dec_tlu_flush_lower_r(dec_tlu_flush_lower_r),
-		.dec_tlu_flush_path_r(dec_tlu_flush_path_r),
-		.dec_extint_stall(dec_extint_stall),
-		.dec_tlu_meihap(dec_tlu_meihap),
-		.exu_lsu_rs1_d(exu_lsu_rs1_d),
-		.exu_lsu_rs2_d(exu_lsu_rs2_d),
-		.exu_flush_final(exu_flush_final),
-		.exu_flush_path_final(exu_flush_path_final),
-		.exu_i0_result_x(exu_i0_result_x),
-		.exu_i0_pc_x(exu_i0_pc_x),
-		.exu_csr_rs1_x(exu_csr_rs1_x),
-		.exu_npc_r(exu_npc_r),
-		.exu_i0_br_hist_r(exu_i0_br_hist_r),
-		.exu_i0_br_error_r(exu_i0_br_error_r),
-		.exu_i0_br_start_error_r(exu_i0_br_start_error_r),
-		.exu_i0_br_index_r(exu_i0_br_index_r),
-		.exu_i0_br_valid_r(exu_i0_br_valid_r),
-		.exu_i0_br_mp_r(exu_i0_br_mp_r),
-		.exu_i0_br_middle_r(exu_i0_br_middle_r),
-		.exu_i0_br_fghr_r(exu_i0_br_fghr_r),
-		.exu_i0_br_way_r(exu_i0_br_way_r),
-		.exu_mp_pkt(exu_mp_pkt),
-		.exu_mp_eghr(exu_mp_eghr),
-		.exu_mp_fghr(exu_mp_fghr),
-		.exu_mp_index(exu_mp_index),
-		.exu_mp_btag(exu_mp_btag),
-		.exu_pmu_i0_br_misp(exu_pmu_i0_br_misp),
-		.exu_pmu_i0_br_ataken(exu_pmu_i0_br_ataken),
-		.exu_pmu_i0_pc4(exu_pmu_i0_pc4),
-		.exu_div_result(exu_div_result),
-		.exu_div_wren(exu_div_wren)
-	);
-	eb1_lsu #(.pt(pt)) lsu(
-		.clk(active_l2clk),
-		.rst_l(core_rst_l),
-		.clk_override(dec_tlu_lsu_clk_override),
-		.dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-		.lsu_axi_awready(lsu_axi_awready_int),
-		.lsu_axi_wready(lsu_axi_wready_int),
-		.lsu_axi_bvalid(lsu_axi_bvalid_int),
-		.lsu_axi_bid(lsu_axi_bid_int[pt[181-:8] - 1:0]),
-		.lsu_axi_bresp(lsu_axi_bresp_int[1:0]),
-		.lsu_axi_arready(lsu_axi_arready_int),
-		.lsu_axi_rvalid(lsu_axi_rvalid_int),
-		.lsu_axi_rid(lsu_axi_rid_int[pt[181-:8] - 1:0]),
-		.lsu_axi_rdata(lsu_axi_rdata_int[63:0]),
-		.lsu_axi_rresp(lsu_axi_rresp_int[1:0]),
-		.lsu_axi_rlast(lsu_axi_rlast_int),
-		.dec_tlu_flush_lower_r(dec_tlu_flush_lower_r),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.dec_tlu_external_ldfwd_disable(dec_tlu_external_ldfwd_disable),
-		.dec_tlu_wb_coalescing_disable(dec_tlu_wb_coalescing_disable),
-		.dec_tlu_sideeffect_posted_disable(dec_tlu_sideeffect_posted_disable),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.exu_lsu_rs1_d(exu_lsu_rs1_d),
-		.exu_lsu_rs2_d(exu_lsu_rs2_d),
-		.dec_lsu_offset_d(dec_lsu_offset_d),
-		.lsu_p(lsu_p),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.lsu_result_m(lsu_result_m),
-		.lsu_result_corr_r(lsu_result_corr_r),
-		.lsu_load_stall_any(lsu_load_stall_any),
-		.lsu_store_stall_any(lsu_store_stall_any),
-		.lsu_fastint_stall_any(lsu_fastint_stall_any),
-		.lsu_idle_any(lsu_idle_any),
-		.lsu_active(lsu_active),
-		.lsu_fir_addr(lsu_fir_addr),
-		.lsu_fir_error(lsu_fir_error),
-		.lsu_single_ecc_error_incr(lsu_single_ecc_error_incr),
-		.lsu_error_pkt_r(lsu_error_pkt_r),
-		.lsu_imprecise_error_load_any(lsu_imprecise_error_load_any),
-		.lsu_imprecise_error_store_any(lsu_imprecise_error_store_any),
-		.lsu_imprecise_error_addr_any(lsu_imprecise_error_addr_any),
-		.lsu_nonblock_load_valid_m(lsu_nonblock_load_valid_m),
-		.lsu_nonblock_load_tag_m(lsu_nonblock_load_tag_m),
-		.lsu_nonblock_load_inv_r(lsu_nonblock_load_inv_r),
-		.lsu_nonblock_load_inv_tag_r(lsu_nonblock_load_inv_tag_r),
-		.lsu_nonblock_load_data_valid(lsu_nonblock_load_data_valid),
-		.lsu_nonblock_load_data_error(lsu_nonblock_load_data_error),
-		.lsu_nonblock_load_data_tag(lsu_nonblock_load_data_tag),
-		.lsu_nonblock_load_data(lsu_nonblock_load_data),
-		.lsu_pmu_load_external_m(lsu_pmu_load_external_m),
-		.lsu_pmu_store_external_m(lsu_pmu_store_external_m),
-		.lsu_pmu_misaligned_m(lsu_pmu_misaligned_m),
-		.lsu_pmu_bus_trxn(lsu_pmu_bus_trxn),
-		.lsu_pmu_bus_misaligned(lsu_pmu_bus_misaligned),
-		.lsu_pmu_bus_error(lsu_pmu_bus_error),
-		.lsu_pmu_bus_busy(lsu_pmu_bus_busy),
-		.trigger_pkt_any(trigger_pkt_any),
-		.lsu_trigger_match_m(lsu_trigger_match_m),
-		.dccm_wren(dccm_wren),
-		.dccm_rden(dccm_rden),
-		.dccm_wr_addr_lo(dccm_wr_addr_lo),
-		.dccm_wr_addr_hi(dccm_wr_addr_hi),
-		.dccm_rd_addr_lo(dccm_rd_addr_lo),
-		.dccm_rd_addr_hi(dccm_rd_addr_hi),
-		.dccm_wr_data_lo(dccm_wr_data_lo),
-		.dccm_wr_data_hi(dccm_wr_data_hi),
-		.dccm_rd_data_lo(dccm_rd_data_lo),
-		.dccm_rd_data_hi(dccm_rd_data_hi),
-		.picm_wren(picm_wren),
-		.picm_rden(picm_rden),
-		.picm_mken(picm_mken),
-		.picm_rdaddr(picm_rdaddr),
-		.picm_wraddr(picm_wraddr),
-		.picm_wr_data(picm_wr_data),
-		.picm_rd_data(picm_rd_data),
-		.lsu_axi_awvalid(lsu_axi_awvalid),
-		.lsu_axi_awid(lsu_axi_awid),
-		.lsu_axi_awaddr(lsu_axi_awaddr),
-		.lsu_axi_awregion(lsu_axi_awregion),
-		.lsu_axi_awlen(lsu_axi_awlen),
-		.lsu_axi_awsize(lsu_axi_awsize),
-		.lsu_axi_awburst(lsu_axi_awburst),
-		.lsu_axi_awlock(lsu_axi_awlock),
-		.lsu_axi_awcache(lsu_axi_awcache),
-		.lsu_axi_awprot(lsu_axi_awprot),
-		.lsu_axi_awqos(lsu_axi_awqos),
-		.lsu_axi_wvalid(lsu_axi_wvalid),
-		.lsu_axi_wdata(lsu_axi_wdata),
-		.lsu_axi_wstrb(lsu_axi_wstrb),
-		.lsu_axi_wlast(lsu_axi_wlast),
-		.lsu_axi_bready(lsu_axi_bready),
-		.lsu_axi_arvalid(lsu_axi_arvalid),
-		.lsu_axi_arid(lsu_axi_arid),
-		.lsu_axi_araddr(lsu_axi_araddr),
-		.lsu_axi_arregion(lsu_axi_arregion),
-		.lsu_axi_arlen(lsu_axi_arlen),
-		.lsu_axi_arsize(lsu_axi_arsize),
-		.lsu_axi_arburst(lsu_axi_arburst),
-		.lsu_axi_arlock(lsu_axi_arlock),
-		.lsu_axi_arcache(lsu_axi_arcache),
-		.lsu_axi_arprot(lsu_axi_arprot),
-		.lsu_axi_arqos(lsu_axi_arqos),
-		.lsu_axi_rready(lsu_axi_rready),
-		.lsu_bus_clk_en(lsu_bus_clk_en),
-		.dma_dccm_req(dma_dccm_req),
-		.dma_mem_tag(dma_mem_tag),
-		.dma_mem_addr(dma_mem_addr),
-		.dma_mem_sz(dma_mem_sz),
-		.dma_mem_write(dma_mem_write),
-		.dma_mem_wdata(dma_mem_wdata),
-		.dccm_dma_rvalid(dccm_dma_rvalid),
-		.dccm_dma_ecc_error(dccm_dma_ecc_error),
-		.dccm_dma_rtag(dccm_dma_rtag),
-		.dccm_dma_rdata(dccm_dma_rdata),
-		.dccm_ready(dccm_ready),
-		.scan_mode(scan_mode),
-		.active_clk(active_clk)
-	);
-	eb1_pic_ctrl #(.pt(pt)) pic_ctrl_inst(
-		.clk(free_l2clk),
-		.clk_override(dec_tlu_pic_clk_override),
-		.io_clk_override(dec_tlu_picio_clk_override),
-		.picm_mken(picm_mken),
-		.extintsrc_req({extintsrc_req[pt[56-:12]:1], 1'b0}),
-		.pl(pic_pl[3:0]),
-		.claimid(pic_claimid[7:0]),
-		.meicurpl(dec_tlu_meicurpl[3:0]),
-		.meipt(dec_tlu_meipt[3:0]),
-		.rst_l(core_rst_l),
-		.free_clk(free_clk),
-		.picm_rdaddr(picm_rdaddr),
-		.picm_wraddr(picm_wraddr),
-		.picm_wr_data(picm_wr_data),
-		.picm_wren(picm_wren),
-		.picm_rden(picm_rden),
-		.mexintpend(mexintpend),
-		.picm_rd_data(picm_rd_data),
-		.mhwakeup(mhwakeup),
-		.scan_mode(scan_mode)
-	);
-	eb1_dma_ctrl #(.pt(pt)) dma_ctrl(
-		.clk(free_l2clk),
-		.rst_l(core_rst_l),
-		.clk_override(dec_tlu_misc_clk_override),
-		.dma_axi_awvalid(dma_axi_awvalid_int),
-		.dma_axi_awid(dma_axi_awid_int[pt[1235-:8] - 1:0]),
-		.dma_axi_awaddr(dma_axi_awaddr_int[31:0]),
-		.dma_axi_awsize(dma_axi_awsize_int[2:0]),
-		.dma_axi_wvalid(dma_axi_wvalid_int),
-		.dma_axi_wdata(dma_axi_wdata_int[63:0]),
-		.dma_axi_wstrb(dma_axi_wstrb_int[7:0]),
-		.dma_axi_bready(dma_axi_bready_int),
-		.dma_axi_arvalid(dma_axi_arvalid_int),
-		.dma_axi_arid(dma_axi_arid_int[pt[1235-:8] - 1:0]),
-		.dma_axi_araddr(dma_axi_araddr_int[31:0]),
-		.dma_axi_arsize(dma_axi_arsize_int[2:0]),
-		.dma_axi_rready(dma_axi_rready_int),
-		.free_clk(free_clk),
-		.dma_bus_clk_en(dma_bus_clk_en),
-		.scan_mode(scan_mode),
-		.dbg_cmd_addr(dbg_cmd_addr),
-		.dbg_cmd_wrdata(dbg_cmd_wrdata),
-		.dbg_cmd_valid(dbg_cmd_valid),
-		.dbg_cmd_write(dbg_cmd_write),
-		.dbg_cmd_type(dbg_cmd_type),
-		.dbg_cmd_size(dbg_cmd_size),
-		.dbg_dma_bubble(dbg_dma_bubble),
-		.dma_dbg_ready(dma_dbg_ready),
-		.dma_dbg_cmd_done(dma_dbg_cmd_done),
-		.dma_dbg_cmd_fail(dma_dbg_cmd_fail),
-		.dma_dbg_rddata(dma_dbg_rddata),
-		.dma_dccm_req(dma_dccm_req),
-		.dma_iccm_req(dma_iccm_req),
-		.dma_mem_tag(dma_mem_tag),
-		.dma_mem_addr(dma_mem_addr),
-		.dma_mem_sz(dma_mem_sz),
-		.dma_mem_write(dma_mem_write),
-		.dma_mem_wdata(dma_mem_wdata),
-		.dccm_dma_rvalid(dccm_dma_rvalid),
-		.dccm_dma_ecc_error(dccm_dma_ecc_error),
-		.dccm_dma_rtag(dccm_dma_rtag),
-		.dccm_dma_rdata(dccm_dma_rdata),
-		.iccm_dma_rvalid(iccm_dma_rvalid),
-		.iccm_dma_ecc_error(iccm_dma_ecc_error),
-		.iccm_dma_rtag(iccm_dma_rtag),
-		.iccm_dma_rdata(iccm_dma_rdata),
-		.dma_active(dma_active),
-		.dma_dccm_stall_any(dma_dccm_stall_any),
-		.dma_iccm_stall_any(dma_iccm_stall_any),
-		.dccm_ready(dccm_ready),
-		.iccm_ready(iccm_ready),
-		.dec_tlu_dma_qos_prty(dec_tlu_dma_qos_prty),
-		.dma_pmu_dccm_read(dma_pmu_dccm_read),
-		.dma_pmu_dccm_write(dma_pmu_dccm_write),
-		.dma_pmu_any_read(dma_pmu_any_read),
-		.dma_pmu_any_write(dma_pmu_any_write),
-		.dma_axi_awready(dma_axi_awready),
-		.dma_axi_wready(dma_axi_wready),
-		.dma_axi_bvalid(dma_axi_bvalid),
-		.dma_axi_bresp(dma_axi_bresp),
-		.dma_axi_bid(dma_axi_bid),
-		.dma_axi_arready(dma_axi_arready),
-		.dma_axi_rvalid(dma_axi_rvalid),
-		.dma_axi_rid(dma_axi_rid),
-		.dma_axi_rdata(dma_axi_rdata),
-		.dma_axi_rresp(dma_axi_rresp),
-		.dma_axi_rlast(dma_axi_rlast)
-	);
-	generate
-		if (pt[2038] == 1) begin : Gen_AXI_To_AHB
-			axi4_to_ahb #(
-				.pt(pt),
-				.TAG(pt[181-:8])
-			) lsu_axi4_to_ahb(
-				.clk(free_l2clk),
-				.free_clk(free_clk),
-				.rst_l(core_rst_l),
-				.clk_override(dec_tlu_bus_clk_override),
-				.bus_clk_en(lsu_bus_clk_en),
-				.dec_tlu_force_halt(dec_tlu_force_halt),
-				.axi_awvalid(lsu_axi_awvalid),
-				.axi_awready(lsu_axi_awready_ahb),
-				.axi_awid(lsu_axi_awid[pt[181-:8] - 1:0]),
-				.axi_awaddr(lsu_axi_awaddr[31:0]),
-				.axi_awsize(lsu_axi_awsize[2:0]),
-				.axi_awprot(lsu_axi_awprot[2:0]),
-				.axi_wvalid(lsu_axi_wvalid),
-				.axi_wready(lsu_axi_wready_ahb),
-				.axi_wdata(lsu_axi_wdata[63:0]),
-				.axi_wstrb(lsu_axi_wstrb[7:0]),
-				.axi_wlast(lsu_axi_wlast),
-				.axi_bvalid(lsu_axi_bvalid_ahb),
-				.axi_bready(lsu_axi_bready),
-				.axi_bresp(lsu_axi_bresp_ahb[1:0]),
-				.axi_bid(lsu_axi_bid_ahb[pt[181-:8] - 1:0]),
-				.axi_arvalid(lsu_axi_arvalid),
-				.axi_arready(lsu_axi_arready_ahb),
-				.axi_arid(lsu_axi_arid[pt[181-:8] - 1:0]),
-				.axi_araddr(lsu_axi_araddr[31:0]),
-				.axi_arsize(lsu_axi_arsize[2:0]),
-				.axi_arprot(lsu_axi_arprot[2:0]),
-				.axi_rvalid(lsu_axi_rvalid_ahb),
-				.axi_rready(lsu_axi_rready),
-				.axi_rid(lsu_axi_rid_ahb[pt[181-:8] - 1:0]),
-				.axi_rdata(lsu_axi_rdata_ahb[63:0]),
-				.axi_rresp(lsu_axi_rresp_ahb[1:0]),
-				.axi_rlast(lsu_axi_rlast_ahb),
-				.ahb_haddr(lsu_haddr[31:0]),
-				.ahb_hburst(lsu_hburst),
-				.ahb_hmastlock(lsu_hmastlock),
-				.ahb_hprot(lsu_hprot[3:0]),
-				.ahb_hsize(lsu_hsize[2:0]),
-				.ahb_htrans(lsu_htrans[1:0]),
-				.ahb_hwrite(lsu_hwrite),
-				.ahb_hwdata(lsu_hwdata[63:0]),
-				.ahb_hrdata(lsu_hrdata[63:0]),
-				.ahb_hready(lsu_hready),
-				.ahb_hresp(lsu_hresp),
-				.scan_mode(scan_mode)
-			);
-			axi4_to_ahb #(
-				.pt(pt),
-				.TAG(pt[826-:8])
-			) ifu_axi4_to_ahb(
-				.clk(free_l2clk),
-				.free_clk(free_clk),
-				.rst_l(core_rst_l),
-				.clk_override(dec_tlu_bus_clk_override),
-				.bus_clk_en(ifu_bus_clk_en),
-				.dec_tlu_force_halt(dec_tlu_force_halt),
-				.ahb_haddr(haddr[31:0]),
-				.ahb_hburst(hburst),
-				.ahb_hmastlock(hmastlock),
-				.ahb_hprot(hprot[3:0]),
-				.ahb_hsize(hsize[2:0]),
-				.ahb_htrans(htrans[1:0]),
-				.ahb_hwrite(hwrite),
-				.ahb_hwdata(hwdata_nc[63:0]),
-				.ahb_hrdata(hrdata[63:0]),
-				.ahb_hready(hready),
-				.ahb_hresp(hresp),
-				.axi_awvalid(ifu_axi_awvalid),
-				.axi_awready(ifu_axi_awready_ahb),
-				.axi_awid(ifu_axi_awid[pt[826-:8] - 1:0]),
-				.axi_awaddr(ifu_axi_awaddr[31:0]),
-				.axi_awsize(ifu_axi_awsize[2:0]),
-				.axi_awprot(ifu_axi_awprot[2:0]),
-				.axi_wvalid(ifu_axi_wvalid),
-				.axi_wready(ifu_axi_wready_ahb),
-				.axi_wdata(ifu_axi_wdata[63:0]),
-				.axi_wstrb(ifu_axi_wstrb[7:0]),
-				.axi_wlast(ifu_axi_wlast),
-				.axi_bvalid(ifu_axi_bvalid_ahb),
-				.axi_bready(1'b1),
-				.axi_bresp(ifu_axi_bresp_ahb[1:0]),
-				.axi_bid(ifu_axi_bid_ahb[pt[826-:8] - 1:0]),
-				.axi_arvalid(ifu_axi_arvalid),
-				.axi_arready(ifu_axi_arready_ahb),
-				.axi_arid(ifu_axi_arid[pt[826-:8] - 1:0]),
-				.axi_araddr(ifu_axi_araddr[31:0]),
-				.axi_arsize(ifu_axi_arsize[2:0]),
-				.axi_arprot(ifu_axi_arprot[2:0]),
-				.axi_rvalid(ifu_axi_rvalid_ahb),
-				.axi_rready(ifu_axi_rready),
-				.axi_rid(ifu_axi_rid_ahb[pt[826-:8] - 1:0]),
-				.axi_rdata(ifu_axi_rdata_ahb[63:0]),
-				.axi_rresp(ifu_axi_rresp_ahb[1:0]),
-				.axi_rlast(ifu_axi_rlast_ahb),
-				.scan_mode(scan_mode)
-			);
-			axi4_to_ahb #(
-				.pt(pt),
-				.TAG(pt[12-:8])
-			) sb_axi4_to_ahb(
-				.clk(free_l2clk),
-				.free_clk(free_clk),
-				.rst_l(dbg_rst_l),
-				.clk_override(dec_tlu_bus_clk_override),
-				.bus_clk_en(dbg_bus_clk_en),
-				.dec_tlu_force_halt(1'b0),
-				.axi_awvalid(sb_axi_awvalid),
-				.axi_awready(sb_axi_awready_ahb),
-				.axi_awid(sb_axi_awid[pt[12-:8] - 1:0]),
-				.axi_awaddr(sb_axi_awaddr[31:0]),
-				.axi_awsize(sb_axi_awsize[2:0]),
-				.axi_awprot(sb_axi_awprot[2:0]),
-				.axi_wvalid(sb_axi_wvalid),
-				.axi_wready(sb_axi_wready_ahb),
-				.axi_wdata(sb_axi_wdata[63:0]),
-				.axi_wstrb(sb_axi_wstrb[7:0]),
-				.axi_wlast(sb_axi_wlast),
-				.axi_bvalid(sb_axi_bvalid_ahb),
-				.axi_bready(sb_axi_bready),
-				.axi_bresp(sb_axi_bresp_ahb[1:0]),
-				.axi_bid(sb_axi_bid_ahb[pt[12-:8] - 1:0]),
-				.axi_arvalid(sb_axi_arvalid),
-				.axi_arready(sb_axi_arready_ahb),
-				.axi_arid(sb_axi_arid[pt[12-:8] - 1:0]),
-				.axi_araddr(sb_axi_araddr[31:0]),
-				.axi_arsize(sb_axi_arsize[2:0]),
-				.axi_arprot(sb_axi_arprot[2:0]),
-				.axi_rvalid(sb_axi_rvalid_ahb),
-				.axi_rready(sb_axi_rready),
-				.axi_rid(sb_axi_rid_ahb[pt[12-:8] - 1:0]),
-				.axi_rdata(sb_axi_rdata_ahb[63:0]),
-				.axi_rresp(sb_axi_rresp_ahb[1:0]),
-				.axi_rlast(sb_axi_rlast_ahb),
-				.ahb_haddr(sb_haddr[31:0]),
-				.ahb_hburst(sb_hburst),
-				.ahb_hmastlock(sb_hmastlock),
-				.ahb_hprot(sb_hprot[3:0]),
-				.ahb_hsize(sb_hsize[2:0]),
-				.ahb_htrans(sb_htrans[1:0]),
-				.ahb_hwrite(sb_hwrite),
-				.ahb_hwdata(sb_hwdata[63:0]),
-				.ahb_hrdata(sb_hrdata[63:0]),
-				.ahb_hready(sb_hready),
-				.ahb_hresp(sb_hresp),
-				.scan_mode(scan_mode)
-			);
-			ahb_to_axi4 #(
-				.pt(pt),
-				.TAG(pt[1235-:8])
-			) dma_ahb_to_axi4(
-				.clk(free_l2clk),
-				.rst_l(core_rst_l),
-				.clk_override(dec_tlu_bus_clk_override),
-				.bus_clk_en(dma_bus_clk_en),
-				.axi_awvalid(dma_axi_awvalid_ahb),
-				.axi_awready(dma_axi_awready),
-				.axi_awid(dma_axi_awid_ahb[pt[1235-:8] - 1:0]),
-				.axi_awaddr(dma_axi_awaddr_ahb[31:0]),
-				.axi_awsize(dma_axi_awsize_ahb[2:0]),
-				.axi_awprot(dma_axi_awprot_ahb[2:0]),
-				.axi_awlen(dma_axi_awlen_ahb[7:0]),
-				.axi_awburst(dma_axi_awburst_ahb[1:0]),
-				.axi_wvalid(dma_axi_wvalid_ahb),
-				.axi_wready(dma_axi_wready),
-				.axi_wdata(dma_axi_wdata_ahb[63:0]),
-				.axi_wstrb(dma_axi_wstrb_ahb[7:0]),
-				.axi_wlast(dma_axi_wlast_ahb),
-				.axi_bvalid(dma_axi_bvalid),
-				.axi_bready(dma_axi_bready_ahb),
-				.axi_bresp(dma_axi_bresp[1:0]),
-				.axi_bid(dma_axi_bid[pt[1235-:8] - 1:0]),
-				.axi_arvalid(dma_axi_arvalid_ahb),
-				.axi_arready(dma_axi_arready),
-				.axi_arid(dma_axi_arid_ahb[pt[1235-:8] - 1:0]),
-				.axi_araddr(dma_axi_araddr_ahb[31:0]),
-				.axi_arsize(dma_axi_arsize_ahb[2:0]),
-				.axi_arprot(dma_axi_arprot_ahb[2:0]),
-				.axi_arlen(dma_axi_arlen_ahb[7:0]),
-				.axi_arburst(dma_axi_arburst_ahb[1:0]),
-				.axi_rvalid(dma_axi_rvalid),
-				.axi_rready(dma_axi_rready_ahb),
-				.axi_rid(dma_axi_rid[pt[1235-:8] - 1:0]),
-				.axi_rdata(dma_axi_rdata[63:0]),
-				.axi_rresp(dma_axi_rresp[1:0]),
-				.ahb_haddr(dma_haddr[31:0]),
-				.ahb_hburst(dma_hburst),
-				.ahb_hmastlock(dma_hmastlock),
-				.ahb_hprot(dma_hprot[3:0]),
-				.ahb_hsize(dma_hsize[2:0]),
-				.ahb_htrans(dma_htrans[1:0]),
-				.ahb_hwrite(dma_hwrite),
-				.ahb_hwdata(dma_hwdata[63:0]),
-				.ahb_hrdata(dma_hrdata[63:0]),
-				.ahb_hreadyout(dma_hreadyout),
-				.ahb_hresp(dma_hresp),
-				.ahb_hreadyin(dma_hreadyin),
-				.ahb_hsel(dma_hsel),
-				.scan_mode(scan_mode)
-			);
-		end
-	endgenerate
-	assign lsu_axi_awready_int = (pt[2038] ? lsu_axi_awready_ahb : lsu_axi_awready);
-	assign lsu_axi_wready_int = (pt[2038] ? lsu_axi_wready_ahb : lsu_axi_wready);
-	assign lsu_axi_bvalid_int = (pt[2038] ? lsu_axi_bvalid_ahb : lsu_axi_bvalid);
-	assign lsu_axi_bready_int = (pt[2038] ? lsu_axi_bready_ahb : lsu_axi_bready);
-	assign lsu_axi_bresp_int[1:0] = (pt[2038] ? lsu_axi_bresp_ahb[1:0] : lsu_axi_bresp[1:0]);
-	assign lsu_axi_bid_int[pt[181-:8] - 1:0] = (pt[2038] ? lsu_axi_bid_ahb[pt[181-:8] - 1:0] : lsu_axi_bid[pt[181-:8] - 1:0]);
-	assign lsu_axi_arready_int = (pt[2038] ? lsu_axi_arready_ahb : lsu_axi_arready);
-	assign lsu_axi_rvalid_int = (pt[2038] ? lsu_axi_rvalid_ahb : lsu_axi_rvalid);
-	assign lsu_axi_rid_int[pt[181-:8] - 1:0] = (pt[2038] ? lsu_axi_rid_ahb[pt[181-:8] - 1:0] : lsu_axi_rid[pt[181-:8] - 1:0]);
-	assign lsu_axi_rdata_int[63:0] = (pt[2038] ? lsu_axi_rdata_ahb[63:0] : lsu_axi_rdata[63:0]);
-	assign lsu_axi_rresp_int[1:0] = (pt[2038] ? lsu_axi_rresp_ahb[1:0] : lsu_axi_rresp[1:0]);
-	assign lsu_axi_rlast_int = (pt[2038] ? lsu_axi_rlast_ahb : lsu_axi_rlast);
-	assign ifu_axi_awready_int = (pt[2038] ? ifu_axi_awready_ahb : ifu_axi_awready);
-	assign ifu_axi_wready_int = (pt[2038] ? ifu_axi_wready_ahb : ifu_axi_wready);
-	assign ifu_axi_bvalid_int = (pt[2038] ? ifu_axi_bvalid_ahb : ifu_axi_bvalid);
-	assign ifu_axi_bready_int = (pt[2038] ? ifu_axi_bready_ahb : ifu_axi_bready);
-	assign ifu_axi_bresp_int[1:0] = (pt[2038] ? ifu_axi_bresp_ahb[1:0] : ifu_axi_bresp[1:0]);
-	assign ifu_axi_bid_int[pt[826-:8] - 1:0] = (pt[2038] ? ifu_axi_bid_ahb[pt[826-:8] - 1:0] : ifu_axi_bid[pt[826-:8] - 1:0]);
-	assign ifu_axi_arready_int = (pt[2038] ? ifu_axi_arready_ahb : ifu_axi_arready);
-	assign ifu_axi_rvalid_int = (pt[2038] ? ifu_axi_rvalid_ahb : ifu_axi_rvalid);
-	assign ifu_axi_rid_int[pt[826-:8] - 1:0] = (pt[2038] ? ifu_axi_rid_ahb[pt[826-:8] - 1:0] : ifu_axi_rid[pt[826-:8] - 1:0]);
-	assign ifu_axi_rdata_int[63:0] = (pt[2038] ? ifu_axi_rdata_ahb[63:0] : ifu_axi_rdata[63:0]);
-	assign ifu_axi_rresp_int[1:0] = (pt[2038] ? ifu_axi_rresp_ahb[1:0] : ifu_axi_rresp[1:0]);
-	assign ifu_axi_rlast_int = (pt[2038] ? ifu_axi_rlast_ahb : ifu_axi_rlast);
-	assign sb_axi_awready_int = (pt[2038] ? sb_axi_awready_ahb : sb_axi_awready);
-	assign sb_axi_wready_int = (pt[2038] ? sb_axi_wready_ahb : sb_axi_wready);
-	assign sb_axi_bvalid_int = (pt[2038] ? sb_axi_bvalid_ahb : sb_axi_bvalid);
-	assign sb_axi_bready_int = (pt[2038] ? sb_axi_bready_ahb : sb_axi_bready);
-	assign sb_axi_bresp_int[1:0] = (pt[2038] ? sb_axi_bresp_ahb[1:0] : sb_axi_bresp[1:0]);
-	assign sb_axi_bid_int[pt[12-:8] - 1:0] = (pt[2038] ? sb_axi_bid_ahb[pt[12-:8] - 1:0] : sb_axi_bid[pt[12-:8] - 1:0]);
-	assign sb_axi_arready_int = (pt[2038] ? sb_axi_arready_ahb : sb_axi_arready);
-	assign sb_axi_rvalid_int = (pt[2038] ? sb_axi_rvalid_ahb : sb_axi_rvalid);
-	assign sb_axi_rid_int[pt[12-:8] - 1:0] = (pt[2038] ? sb_axi_rid_ahb[pt[12-:8] - 1:0] : sb_axi_rid[pt[12-:8] - 1:0]);
-	assign sb_axi_rdata_int[63:0] = (pt[2038] ? sb_axi_rdata_ahb[63:0] : sb_axi_rdata[63:0]);
-	assign sb_axi_rresp_int[1:0] = (pt[2038] ? sb_axi_rresp_ahb[1:0] : sb_axi_rresp[1:0]);
-	assign sb_axi_rlast_int = (pt[2038] ? sb_axi_rlast_ahb : sb_axi_rlast);
-	assign dma_axi_awvalid_int = (pt[2038] ? dma_axi_awvalid_ahb : dma_axi_awvalid);
-	assign dma_axi_awid_int[pt[1235-:8] - 1:0] = (pt[2038] ? dma_axi_awid_ahb[pt[1235-:8] - 1:0] : dma_axi_awid[pt[1235-:8] - 1:0]);
-	assign dma_axi_awaddr_int[31:0] = (pt[2038] ? dma_axi_awaddr_ahb[31:0] : dma_axi_awaddr[31:0]);
-	assign dma_axi_awsize_int[2:0] = (pt[2038] ? dma_axi_awsize_ahb[2:0] : dma_axi_awsize[2:0]);
-	assign dma_axi_awprot_int[2:0] = (pt[2038] ? dma_axi_awprot_ahb[2:0] : dma_axi_awprot[2:0]);
-	assign dma_axi_awlen_int[7:0] = (pt[2038] ? dma_axi_awlen_ahb[7:0] : dma_axi_awlen[7:0]);
-	assign dma_axi_awburst_int[1:0] = (pt[2038] ? dma_axi_awburst_ahb[1:0] : dma_axi_awburst[1:0]);
-	assign dma_axi_wvalid_int = (pt[2038] ? dma_axi_wvalid_ahb : dma_axi_wvalid);
-	assign dma_axi_wdata_int[63:0] = (pt[2038] ? dma_axi_wdata_ahb[63:0] : dma_axi_wdata);
-	assign dma_axi_wstrb_int[7:0] = (pt[2038] ? dma_axi_wstrb_ahb[7:0] : dma_axi_wstrb[7:0]);
-	assign dma_axi_wlast_int = (pt[2038] ? dma_axi_wlast_ahb : dma_axi_wlast);
-	assign dma_axi_bready_int = (pt[2038] ? dma_axi_bready_ahb : dma_axi_bready);
-	assign dma_axi_arvalid_int = (pt[2038] ? dma_axi_arvalid_ahb : dma_axi_arvalid);
-	assign dma_axi_arid_int[pt[1235-:8] - 1:0] = (pt[2038] ? dma_axi_arid_ahb[pt[1235-:8] - 1:0] : dma_axi_arid[pt[1235-:8] - 1:0]);
-	assign dma_axi_araddr_int[31:0] = (pt[2038] ? dma_axi_araddr_ahb[31:0] : dma_axi_araddr[31:0]);
-	assign dma_axi_arsize_int[2:0] = (pt[2038] ? dma_axi_arsize_ahb[2:0] : dma_axi_arsize[2:0]);
-	assign dma_axi_arprot_int[2:0] = (pt[2038] ? dma_axi_arprot_ahb[2:0] : dma_axi_arprot[2:0]);
-	assign dma_axi_arlen_int[7:0] = (pt[2038] ? dma_axi_arlen_ahb[7:0] : dma_axi_arlen[7:0]);
-	assign dma_axi_arburst_int[1:0] = (pt[2038] ? dma_axi_arburst_ahb[1:0] : dma_axi_arburst[1:0]);
-	assign dma_axi_rready_int = (pt[2038] ? dma_axi_rready_ahb : dma_axi_rready);
-	assign trace_rv_i_insn_ip[31:0] = trace_rv_trace_pkt[102:71];
-	assign trace_rv_i_address_ip[31:0] = trace_rv_trace_pkt[70:39];
-	assign trace_rv_i_valid_ip = trace_rv_trace_pkt[103];
-	assign trace_rv_i_exception_ip = trace_rv_trace_pkt[38];
-	assign trace_rv_i_ecause_ip[4:0] = trace_rv_trace_pkt[37:33];
-	assign trace_rv_i_interrupt_ip = trace_rv_trace_pkt[32];
-	assign trace_rv_i_tval_ip[31:0] = trace_rv_trace_pkt[31:0];
-endmodule
-module dmi_wrapper (
-	trst_n,
-	tck,
-	tms,
-	tdi,
-	tdo,
-	tdoEnable,
-	core_rst_n,
-	core_clk,
-	jtag_id,
-	rd_data,
-	reg_wr_data,
-	reg_wr_addr,
-	reg_en,
-	reg_wr_en,
-	dmi_hard_reset
-);
-	input trst_n;
-	input tck;
-	input tms;
-	input tdi;
-	output tdo;
-	output tdoEnable;
-	input core_rst_n;
-	input core_clk;
-	input [31:1] jtag_id;
-	input [31:0] rd_data;
-	output [31:0] reg_wr_data;
-	output [6:0] reg_wr_addr;
-	output reg_en;
-	output reg_wr_en;
-	output dmi_hard_reset;
-	wire rd_en;
-	wire wr_en;
-	wire dmireset;
-	rvjtag_tap i_jtag_tap(
-		.trst(trst_n),
-		.tck(tck),
-		.tms(tms),
-		.tdi(tdi),
-		.tdo(tdo),
-		.tdoEnable(tdoEnable),
-		.wr_data(reg_wr_data),
-		.wr_addr(reg_wr_addr),
-		.rd_en(rd_en),
-		.wr_en(wr_en),
-		.rd_data(rd_data),
-		.rd_status(2'b00),
-		.idle(3'h0),
-		.dmi_stat(2'b00),
-		.version(4'h1),
-		.jtag_id(jtag_id),
-		.dmi_hard_reset(dmi_hard_reset),
-		.dmi_reset(dmireset)
-	);
-	dmi_jtag_to_core_sync i_dmi_jtag_to_core_sync(
-		.wr_en(wr_en),
-		.rd_en(rd_en),
-		.rst_n(core_rst_n),
-		.clk(core_clk),
-		.reg_en(reg_en),
-		.reg_wr_en(reg_wr_en)
-	);
-endmodule
-module eb1_uart_rx_prog (
-	i_Clock,
-	rst_ni,
-	i_Rx_Serial,
-	CLKS_PER_BIT,
-	o_Rx_DV,
-	o_Rx_Byte
-);
-	input i_Clock;
-	input rst_ni;
-	input i_Rx_Serial;
-	input [15:0] CLKS_PER_BIT;
-	output o_Rx_DV;
-	output [7:0] o_Rx_Byte;
-	parameter s_IDLE = 3'b000;
-	parameter s_RX_START_BIT = 3'b001;
-	parameter s_RX_DATA_BITS = 3'b010;
-	parameter s_RX_STOP_BIT = 3'b011;
-	parameter s_CLEANUP = 3'b100;
-	reg r_Rx_Data_R;
-	reg r_Rx_Data;
-	reg [15:0] r_Clock_Count;
-	reg [2:0] r_Bit_Index;
-	reg [7:0] r_Rx_Byte;
-	reg r_Rx_DV;
-	reg [2:0] r_SM_Main;
-	always @(posedge i_Clock)
-		if (rst_ni == 1'b0) begin
-			r_Rx_Data_R <= 1'b1;
-			r_Rx_Data <= 1'b1;
-		end
-		else begin
-			r_Rx_Data_R <= i_Rx_Serial;
-			r_Rx_Data <= r_Rx_Data_R;
-		end
-	always @(posedge i_Clock or negedge rst_ni)
-		if (rst_ni == 1'b0) begin
-			r_SM_Main <= s_IDLE;
-			r_Rx_DV <= 1'b0;
-			r_Clock_Count <= 16'h0000;
-			r_Bit_Index <= 3'b000;
-			r_Rx_Byte <= 8'h00;
-		end
-		else
-			case (r_SM_Main)
-				s_IDLE: begin
-					r_Rx_DV <= 1'b0;
-					r_Clock_Count <= 0;
-					r_Bit_Index <= 0;
-					if (r_Rx_Data == 1'b0)
-						r_SM_Main <= s_RX_START_BIT;
-					else
-						r_SM_Main <= s_IDLE;
-				end
-				s_RX_START_BIT:
-					if (r_Clock_Count == ((CLKS_PER_BIT - 1) >> 1)) begin
-						if (r_Rx_Data == 1'b0) begin
-							r_Clock_Count <= 0;
-							r_SM_Main <= s_RX_DATA_BITS;
-						end
-						else
-							r_SM_Main <= s_IDLE;
-					end
-					else begin
-						r_Clock_Count <= r_Clock_Count + 1;
-						r_SM_Main <= s_RX_START_BIT;
-					end
-				s_RX_DATA_BITS:
-					if (r_Clock_Count < (CLKS_PER_BIT - 1)) begin
-						r_Clock_Count <= r_Clock_Count + 1;
-						r_SM_Main <= s_RX_DATA_BITS;
-					end
-					else begin
-						r_Clock_Count <= 0;
-						r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
-						if (r_Bit_Index < 7) begin
-							r_Bit_Index <= r_Bit_Index + 1;
-							r_SM_Main <= s_RX_DATA_BITS;
-						end
-						else begin
-							r_Bit_Index <= 0;
-							r_SM_Main <= s_RX_STOP_BIT;
-						end
-					end
-				s_RX_STOP_BIT:
-					if (r_Clock_Count < (CLKS_PER_BIT - 1)) begin
-						r_Clock_Count <= r_Clock_Count + 1;
-						r_SM_Main <= s_RX_STOP_BIT;
-					end
-					else begin
-						r_Rx_DV <= 1'b1;
-						r_Clock_Count <= 0;
-						r_SM_Main <= s_CLEANUP;
-					end
-				s_CLEANUP: begin
-					r_SM_Main <= s_IDLE;
-					r_Rx_DV <= 1'b0;
-				end
-				default: r_SM_Main <= s_IDLE;
-			endcase
-	assign o_Rx_DV = r_Rx_DV;
-	assign o_Rx_Byte = r_Rx_Byte;
-endmodule
-module eb1_iccm_controller (
-	clk_i,
-	rst_ni,
-	rx_dv_i,
-	rx_byte_i,
-	we_o,
-	addr_o,
-	wdata_o,
-	reset_o
-);
-	input wire clk_i;
-	input wire rst_ni;
-	input wire rx_dv_i;
-	input wire [7:0] rx_byte_i;
-	output wire we_o;
-	output wire [13:0] addr_o;
-	output wire [31:0] wdata_o;
-	output wire reset_o;
-	reg [1:0] ctrl_fsm_cs;
-	reg [1:0] ctrl_fsm_ns;
-	wire [7:0] rx_byte_d;
-	reg [7:0] rx_byte_q0;
-	reg [7:0] rx_byte_q1;
-	reg [7:0] rx_byte_q2;
-	reg [7:0] rx_byte_q3;
-	reg we_q;
-	reg we_d;
-	reg [13:0] addr_q;
-	reg [13:0] addr_d;
-	reg reset_q;
-	reg reset_d;
-	reg [1:0] byte_count;
-	localparam [1:0] DONE = 3;
-	localparam [1:0] LOAD = 1;
-	localparam [1:0] PROG = 2;
-	localparam [1:0] RESET = 0;
-	always @(*) begin
-		we_d = we_q;
-		addr_d = addr_q;
-		reset_d = reset_q;
-		ctrl_fsm_ns = ctrl_fsm_cs;
-		case (ctrl_fsm_cs)
-			RESET: begin
-				we_d = 1'b0;
-				reset_d = 1'b0;
-				if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = RESET;
-			end
-			LOAD:
-				if (((byte_count == 2'b11) && (rx_byte_q2 != 8'h0f)) && (rx_byte_d != 8'hff)) begin
-					we_d = 1'b1;
-					ctrl_fsm_ns = PROG;
-				end
-				else
-					ctrl_fsm_ns = DONE;
-			PROG: begin
-				we_d = 1'b0;
-				ctrl_fsm_ns = DONE;
-			end
-			DONE:
-				if (wdata_o == 32'h00000fff) begin
-					ctrl_fsm_ns = DONE;
-					reset_d = 1'b1;
-				end
-				else if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = DONE;
-			default: ctrl_fsm_ns = RESET;
-		endcase
-	end
-	assign rx_byte_d = rx_byte_i;
-	assign we_o = we_q;
-	assign addr_o = addr_q;
-	assign wdata_o = {rx_byte_q0, rx_byte_q1, rx_byte_q2, rx_byte_q3};
-	assign reset_o = reset_q;
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni) begin
-			we_q <= 1'b0;
-			addr_q <= 14'b00000000000000;
-			rx_byte_q0 <= 8'b00000000;
-			rx_byte_q1 <= 8'b00000000;
-			rx_byte_q2 <= 8'b00000000;
-			rx_byte_q3 <= 8'b00000000;
-			reset_q <= 1'b0;
-			byte_count <= 2'b00;
-			ctrl_fsm_cs <= RESET;
-		end
-		else begin
-			we_q <= we_d;
-			if (ctrl_fsm_cs == LOAD) begin
-				if (byte_count == 2'b00) begin
-					rx_byte_q0 <= rx_byte_d;
-					byte_count <= 2'b01;
-				end
-				else if (byte_count == 2'b01) begin
-					rx_byte_q1 <= rx_byte_d;
-					byte_count <= 2'b10;
-				end
-				else if (byte_count == 2'b10) begin
-					rx_byte_q2 <= rx_byte_d;
-					byte_count <= 2'b11;
-				end
-				else begin
-					rx_byte_q3 <= rx_byte_d;
-					byte_count <= 2'b00;
-				end
-				addr_q <= addr_d;
-			end
-			if (ctrl_fsm_cs == PROG)
-				addr_q <= addr_d + 2'h2;
-			reset_q <= reset_d;
-			ctrl_fsm_cs <= ctrl_fsm_ns;
-		end
-endmodule
-module eb1_mem (
-	VPWR,
-	VGND,
-	clk,
-	rst_l,
-	dccm_clk_override,
-	icm_clk_override,
-	dec_tlu_core_ecc_disable,
-	dccm_wren,
-	dccm_rden,
-	dccm_wr_addr_lo,
-	dccm_wr_addr_hi,
-	dccm_rd_addr_lo,
-	dccm_rd_addr_hi,
-	dccm_wr_data_lo,
-	dccm_wr_data_hi,
-	dccm_rd_data_lo,
-	dccm_rd_data_hi,
-	dccm_ext_in_pkt,
-	iccm_ext_in_pkt,
-	iccm_rw_addr,
-	iccm_buf_correct_ecc,
-	iccm_correction_state,
-	iccm_wren,
-	iccm_rden,
-	iccm_wr_size,
-	iccm_wr_data,
-	iccm_rd_data,
-	iccm_rd_data_ecc,
-	ic_rw_addr,
-	ic_tag_valid,
-	ic_wr_en,
-	ic_rd_en,
-	ic_premux_data,
-	ic_sel_premux_data,
-	ic_data_ext_in_pkt,
-	ic_tag_ext_in_pkt,
-	ic_wr_data,
-	ic_debug_wr_data,
-	ic_debug_rd_data,
-	ic_debug_addr,
-	ic_debug_rd_en,
-	ic_debug_wr_en,
-	ic_debug_tag_array,
-	ic_debug_way,
-	ic_rd_data,
-	ictag_debug_rd_data,
-	ic_eccerr,
-	ic_parerr,
-	ic_rd_hit,
-	ic_tag_perr,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire VPWR;
-	input wire VGND;
-	input wire clk;
-	input wire rst_l;
-	input wire dccm_clk_override;
-	input wire icm_clk_override;
-	input wire dec_tlu_core_ecc_disable;
-	input wire dccm_wren;
-	input wire dccm_rden;
-	input wire [pt[1398-:9] - 1:0] dccm_wr_addr_lo;
-	input wire [pt[1398-:9] - 1:0] dccm_wr_addr_hi;
-	input wire [pt[1398-:9] - 1:0] dccm_rd_addr_lo;
-	input wire [pt[1398-:9] - 1:0] dccm_rd_addr_hi;
-	input wire [pt[1360-:10] - 1:0] dccm_wr_data_lo;
-	input wire [pt[1360-:10] - 1:0] dccm_wr_data_hi;
-	output wire [pt[1360-:10] - 1:0] dccm_rd_data_lo;
-	output wire [pt[1360-:10] - 1:0] dccm_rd_data_hi;
-	input wire [(pt[1342-:9] * 12) - 1:0] dccm_ext_in_pkt;
-	input wire [(pt[909-:9] * 12) - 1:0] iccm_ext_in_pkt;
-	input wire [pt[936-:9] - 1:1] iccm_rw_addr;
-	input wire iccm_buf_correct_ecc;
-	input wire iccm_correction_state;
-	input wire iccm_wren;
-	input wire iccm_rden;
-	input wire [2:0] iccm_wr_size;
-	input wire [77:0] iccm_wr_data;
-	output wire [63:0] iccm_rd_data;
-	output wire [77:0] iccm_rd_data_ecc;
-	input wire [31:1] ic_rw_addr;
-	input wire [pt[1060-:7] - 1:0] ic_tag_valid;
-	input wire [pt[1060-:7] - 1:0] ic_wr_en;
-	input wire ic_rd_en;
-	input wire [63:0] ic_premux_data;
-	input wire ic_sel_premux_data;
-	input wire [((pt[1060-:7] * pt[1189-:7]) * 12) - 1:0] ic_data_ext_in_pkt;
-	input wire [(pt[1060-:7] * 12) - 1:0] ic_tag_ext_in_pkt;
-	input wire [(pt[1189-:7] * 71) - 1:0] ic_wr_data;
-	input wire [70:0] ic_debug_wr_data;
-	output wire [70:0] ic_debug_rd_data;
-	input wire [pt[1104-:9]:3] ic_debug_addr;
-	input wire ic_debug_rd_en;
-	input wire ic_debug_wr_en;
-	input wire ic_debug_tag_array;
-	input wire [pt[1060-:7] - 1:0] ic_debug_way;
-	output wire [63:0] ic_rd_data;
-	output wire [25:0] ictag_debug_rd_data;
-	output wire [pt[1189-:7] - 1:0] ic_eccerr;
-	output wire [pt[1189-:7] - 1:0] ic_parerr;
-	output wire [pt[1060-:7] - 1:0] ic_rd_hit;
-	output wire ic_tag_perr;
-	input wire scan_mode;
-	wire active_clk;
-	rvoclkhdr active_cg(
-		.en(1'b1),
-		.l1clk(active_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	generate
-		if (pt[1365-:5] == 1) begin : Gen_dccm_enable
-			eb1_lsu_dccm_mem #(.pt(pt)) dccm(
-				.clk_override(dccm_clk_override),
-				.VPWR(VPWR),
-				.VGND(VGND),
-				.clk(clk),
-				.active_clk(active_clk),
-				.rst_l(rst_l),
-				.dccm_wren(dccm_wren),
-				.dccm_rden(dccm_rden),
-				.dccm_wr_addr_lo(dccm_wr_addr_lo),
-				.dccm_wr_addr_hi(dccm_wr_addr_hi),
-				.dccm_rd_addr_lo(dccm_rd_addr_lo),
-				.dccm_rd_addr_hi(dccm_rd_addr_hi),
-				.dccm_wr_data_lo(dccm_wr_data_lo),
-				.dccm_wr_data_hi(dccm_wr_data_hi),
-				.dccm_ext_in_pkt(dccm_ext_in_pkt),
-				.dccm_rd_data_lo(dccm_rd_data_lo),
-				.dccm_rd_data_hi(dccm_rd_data_hi),
-				.scan_mode(scan_mode)
-			);
-		end
-		else begin : Gen_dccm_disable
-			assign dccm_rd_data_lo = {pt[1360-:10] {1'sb0}};
-			assign dccm_rd_data_hi = {pt[1360-:10] {1'sb0}};
-		end
-	endgenerate
-	generate
-		if (pt[1120-:5]) begin : icache
-			eb1_ifu_ic_mem #(.pt(pt)) icm(
-				.clk_override(icm_clk_override),
-				.*
-			);
-		end
-		else begin
-			assign ic_rd_hit[pt[1060-:7] - 1:0] = {pt[1060-:7] {1'sb0}};
-			assign ic_tag_perr = 1'b0;
-			assign ic_rd_data = {64 {1'sb0}};
-			assign ictag_debug_rd_data = {26 {1'sb0}};
-		end
-	endgenerate
-	generate
-		if (pt[927-:5]) begin : iccm
-			eb1_ifu_iccm_mem #(.pt(pt)) iccm(
-				.VPWR(VPWR),
-				.VGND(VGND),
-				.clk(clk),
-				.active_clk(active_clk),
-				.rst_l(rst_l),
-				.iccm_wren(iccm_wren),
-				.iccm_rden(iccm_rden),
-				.iccm_buf_correct_ecc(iccm_buf_correct_ecc),
-				.iccm_correction_state(iccm_correction_state),
-				.iccm_wr_size(iccm_wr_size),
-				.iccm_wr_data(iccm_wr_data),
-				.iccm_ext_in_pkt(iccm_ext_in_pkt),
-				.iccm_rd_data_ecc(iccm_rd_data_ecc),
-				.scan_mode(scan_mode),
-				.clk_override(icm_clk_override),
-				.iccm_rw_addr(iccm_rw_addr[pt[936-:9] - 1:1]),
-				.iccm_rd_data(iccm_rd_data[63:0])
-			);
-		end
-		else begin
-			assign iccm_rd_data = {64 {1'sb0}};
-			assign iccm_rd_data_ecc = {78 {1'sb0}};
-		end
-	endgenerate
-endmodule
-module eb1_pic_ctrl (
-	clk,
-	free_clk,
-	rst_l,
-	clk_override,
-	io_clk_override,
-	extintsrc_req,
-	picm_rdaddr,
-	picm_wraddr,
-	picm_wr_data,
-	picm_wren,
-	picm_rden,
-	picm_mken,
-	meicurpl,
-	meipt,
-	mexintpend,
-	claimid,
-	pl,
-	picm_rd_data,
-	mhwakeup,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire free_clk;
-	input wire rst_l;
-	input wire clk_override;
-	input wire io_clk_override;
-	input wire [pt[44-:13] - 1:0] extintsrc_req;
-	input wire [31:0] picm_rdaddr;
-	input wire [31:0] picm_wraddr;
-	input wire [31:0] picm_wr_data;
-	input wire picm_wren;
-	input wire picm_rden;
-	input wire picm_mken;
-	input wire [3:0] meicurpl;
-	input wire [3:0] meipt;
-	output wire mexintpend;
-	output wire [7:0] claimid;
-	output wire [3:0] pl;
-	output wire [31:0] picm_rd_data;
-	output wire mhwakeup;
-	input wire scan_mode;
-	localparam NUM_LEVELS = $clog2(pt[44-:13]);
-	localparam INTPRIORITY_BASE_ADDR = pt[130-:36];
-	localparam INTPEND_BASE_ADDR = pt[130-:36] + 32'h00001000;
-	localparam INTENABLE_BASE_ADDR = pt[130-:36] + 32'h00002000;
-	localparam EXT_INTR_PIC_CONFIG = pt[130-:36] + 32'h00003000;
-	localparam EXT_INTR_GW_CONFIG = pt[130-:36] + 32'h00004000;
-	localparam EXT_INTR_GW_CLEAR = pt[130-:36] + 32'h00005000;
-	localparam INTPEND_SIZE = (pt[44-:13] < 32 ? 32 : (pt[44-:13] < 64 ? 64 : (pt[44-:13] < 128 ? 128 : (pt[44-:13] < 256 ? 256 : (pt[44-:13] < 512 ? 512 : 1024)))));
-	localparam INT_GRPS = INTPEND_SIZE / 32;
-	localparam INTPRIORITY_BITS = 4;
-	localparam ID_BITS = 8;
-	localparam signed [(pt[44-:13] * 32) - 1:0] GW_CONFIG = {pt[44-:13] {32'sd0}};
-	localparam INT_ENABLE_GRPS = (pt[44-:13] - 1) / 4;
-	wire [pt[44-:13] - 1:0] intenable_clk_enable;
-	wire [INT_ENABLE_GRPS:0] intenable_clk_enable_grp;
-	wire [INT_ENABLE_GRPS:0] gw_clk;
-	wire addr_intpend_base_match;
-	wire raddr_config_pic_match;
-	wire raddr_intenable_base_match;
-	wire raddr_intpriority_base_match;
-	wire raddr_config_gw_base_match;
-	wire waddr_config_pic_match;
-	wire waddr_intpriority_base_match;
-	wire waddr_intenable_base_match;
-	wire waddr_config_gw_base_match;
-	wire addr_clear_gw_base_match;
-	wire mexintpend_in;
-	wire mhwakeup_in;
-	wire intpend_reg_read;
-	wire [31:0] picm_rd_data_in;
-	reg [31:0] intpend_rd_out;
-	reg intenable_rd_out;
-	reg [3:0] intpriority_rd_out;
-	reg [1:0] gw_config_rd_out;
-	wire [(pt[44-:13] * 4) - 1:0] intpriority_reg;
-	wire [(pt[44-:13] * 4) - 1:0] intpriority_reg_inv;
-	wire [pt[44-:13] - 1:0] intpriority_reg_we;
-	wire [pt[44-:13] - 1:0] intpriority_reg_re;
-	wire [(pt[44-:13] * 2) - 1:0] gw_config_reg;
-	wire [pt[44-:13] - 1:0] intenable_reg;
-	wire [pt[44-:13] - 1:0] intenable_reg_we;
-	wire [pt[44-:13] - 1:0] intenable_reg_re;
-	wire [pt[44-:13] - 1:0] gw_config_reg_we;
-	wire [pt[44-:13] - 1:0] gw_config_reg_re;
-	wire [pt[44-:13] - 1:0] gw_clear_reg_we;
-	wire [INTPEND_SIZE - 1:0] intpend_reg_extended;
-	wire [(pt[44-:13] * 4) - 1:0] intpend_w_prior_en;
-	wire [(pt[44-:13] * 8) - 1:0] intpend_id;
-	wire [3:0] maxint;
-	wire [3:0] selected_int_priority;
-	wire [(INT_GRPS * 32) - 1:0] intpend_rd_part_out;
-	wire config_reg;
-	wire intpriord;
-	wire config_reg_we;
-	wire config_reg_re;
-	wire config_reg_in;
-	wire prithresh_reg_write;
-	wire prithresh_reg_read;
-	wire intpriority_reg_read;
-	wire intenable_reg_read;
-	wire gw_config_reg_read;
-	wire picm_wren_ff;
-	wire picm_rden_ff;
-	wire [31:0] picm_raddr_ff;
-	wire [31:0] picm_waddr_ff;
-	wire [31:0] picm_wr_data_ff;
-	reg [3:0] mask;
-	wire picm_mken_ff;
-	wire [7:0] claimid_in;
-	wire [3:0] pl_in;
-	wire [3:0] pl_in_q;
-	wire [pt[44-:13] - 1:0] extintsrc_req_sync;
-	wire [pt[44-:13] - 1:0] extintsrc_req_gw;
-	wire picm_bypass_ff;
-	wire pic_raddr_c1_clken;
-	wire pic_waddr_c1_clken;
-	wire pic_data_c1_clken;
-	wire pic_pri_c1_clken;
-	wire pic_int_c1_clken;
-	wire gw_config_c1_clken;
-	wire pic_raddr_c1_clk;
-	wire pic_data_c1_clk;
-	wire pic_pri_c1_clk;
-	wire pic_int_c1_clk;
-	wire gw_config_c1_clk;
-	assign pic_raddr_c1_clken = (picm_mken | picm_rden) | clk_override;
-	assign pic_data_c1_clken = picm_wren | clk_override;
-	assign pic_pri_c1_clken = ((waddr_intpriority_base_match & picm_wren_ff) | (raddr_intpriority_base_match & picm_rden_ff)) | clk_override;
-	assign pic_int_c1_clken = ((waddr_intenable_base_match & picm_wren_ff) | (raddr_intenable_base_match & picm_rden_ff)) | clk_override;
-	assign gw_config_c1_clken = ((waddr_config_gw_base_match & picm_wren_ff) | (raddr_config_gw_base_match & picm_rden_ff)) | clk_override;
-	rvoclkhdr pic_addr_c1_cgc(
-		.en(pic_raddr_c1_clken),
-		.l1clk(pic_raddr_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr pic_data_c1_cgc(
-		.en(pic_data_c1_clken),
-		.l1clk(pic_data_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr pic_pri_c1_cgc(
-		.en(pic_pri_c1_clken),
-		.l1clk(pic_pri_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr pic_int_c1_cgc(
-		.en(pic_int_c1_clken),
-		.l1clk(pic_int_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr gw_config_c1_cgc(
-		.en(gw_config_c1_clken),
-		.l1clk(gw_config_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign raddr_intenable_base_match = picm_raddr_ff[31:NUM_LEVELS + 2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS + 2];
-	assign raddr_intpriority_base_match = picm_raddr_ff[31:NUM_LEVELS + 2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS + 2];
-	assign raddr_config_gw_base_match = picm_raddr_ff[31:NUM_LEVELS + 2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS + 2];
-	assign raddr_config_pic_match = picm_raddr_ff[31:0] == EXT_INTR_PIC_CONFIG[31:0];
-	assign addr_intpend_base_match = picm_raddr_ff[31:6] == INTPEND_BASE_ADDR[31:6];
-	assign waddr_config_pic_match = picm_waddr_ff[31:0] == EXT_INTR_PIC_CONFIG[31:0];
-	assign addr_clear_gw_base_match = picm_waddr_ff[31:NUM_LEVELS + 2] == EXT_INTR_GW_CLEAR[31:NUM_LEVELS + 2];
-	assign waddr_intpriority_base_match = picm_waddr_ff[31:NUM_LEVELS + 2] == INTPRIORITY_BASE_ADDR[31:NUM_LEVELS + 2];
-	assign waddr_intenable_base_match = picm_waddr_ff[31:NUM_LEVELS + 2] == INTENABLE_BASE_ADDR[31:NUM_LEVELS + 2];
-	assign waddr_config_gw_base_match = picm_waddr_ff[31:NUM_LEVELS + 2] == EXT_INTR_GW_CONFIG[31:NUM_LEVELS + 2];
-	assign picm_bypass_ff = (picm_rden_ff & picm_wren_ff) & (picm_raddr_ff[31:0] == picm_waddr_ff[31:0]);
-	rvdff #(.WIDTH(32)) picm_radd_flop(
-		.rst_l(rst_l),
-		.din(picm_rdaddr),
-		.dout(picm_raddr_ff),
-		.clk(pic_raddr_c1_clk)
-	);
-	rvdff #(.WIDTH(32)) picm_wadd_flop(
-		.rst_l(rst_l),
-		.din(picm_wraddr),
-		.dout(picm_waddr_ff),
-		.clk(pic_data_c1_clk)
-	);
-	rvdff #(.WIDTH(1)) picm_wre_flop(
-		.rst_l(rst_l),
-		.din(picm_wren),
-		.dout(picm_wren_ff),
-		.clk(free_clk)
-	);
-	rvdff #(.WIDTH(1)) picm_rde_flop(
-		.rst_l(rst_l),
-		.din(picm_rden),
-		.dout(picm_rden_ff),
-		.clk(free_clk)
-	);
-	rvdff #(.WIDTH(1)) picm_mke_flop(
-		.rst_l(rst_l),
-		.din(picm_mken),
-		.dout(picm_mken_ff),
-		.clk(free_clk)
-	);
-	rvdff #(.WIDTH(32)) picm_dat_flop(
-		.rst_l(rst_l),
-		.din(picm_wr_data[31:0]),
-		.dout(picm_wr_data_ff[31:0]),
-		.clk(pic_data_c1_clk)
-	);
-	genvar p;
-	generate
-		for (p = 0; p <= INT_ENABLE_GRPS; p = p + 1) begin : IO_CLK_GRP
-			if (p == INT_ENABLE_GRPS) begin : LAST_GRP
-				assign intenable_clk_enable_grp[p] = |intenable_clk_enable[pt[44-:13] - 1:p * 4] | io_clk_override;
-				rvoclkhdr intenable_c1_cgc(
-					.en(intenable_clk_enable_grp[p]),
-					.l1clk(gw_clk[p]),
-					.clk(clk),
-					.scan_mode(scan_mode)
-				);
-			end
-			else begin : CLK_GRPS
-				assign intenable_clk_enable_grp[p] = |intenable_clk_enable[(p * 4) + 3:p * 4] | io_clk_override;
-				rvoclkhdr intenable_c1_cgc(
-					.en(intenable_clk_enable_grp[p]),
-					.l1clk(gw_clk[p]),
-					.clk(clk),
-					.scan_mode(scan_mode)
-				);
-			end
-		end
-	endgenerate
-	genvar i;
-	generate
-		for (i = 0; i < pt[44-:13]; i = i + 1) begin : SETREG
-			if (i > 0) begin : NON_ZERO_INT
-				assign intpriority_reg_we[i] = (waddr_intpriority_base_match & (picm_waddr_ff[NUM_LEVELS + 1:2] == i)) & picm_wren_ff;
-				assign intpriority_reg_re[i] = (raddr_intpriority_base_match & (picm_raddr_ff[NUM_LEVELS + 1:2] == i)) & picm_rden_ff;
-				assign intenable_reg_we[i] = (waddr_intenable_base_match & (picm_waddr_ff[NUM_LEVELS + 1:2] == i)) & picm_wren_ff;
-				assign intenable_reg_re[i] = (raddr_intenable_base_match & (picm_raddr_ff[NUM_LEVELS + 1:2] == i)) & picm_rden_ff;
-				assign gw_config_reg_we[i] = (waddr_config_gw_base_match & (picm_waddr_ff[NUM_LEVELS + 1:2] == i)) & picm_wren_ff;
-				assign gw_config_reg_re[i] = (raddr_config_gw_base_match & (picm_raddr_ff[NUM_LEVELS + 1:2] == i)) & picm_rden_ff;
-				assign gw_clear_reg_we[i] = (addr_clear_gw_base_match & (picm_waddr_ff[NUM_LEVELS + 1:2] == i)) & picm_wren_ff;
-				rvdffs #(.WIDTH(INTPRIORITY_BITS)) intpriority_ff(
-					.rst_l(rst_l),
-					.en(intpriority_reg_we[i]),
-					.din(picm_wr_data_ff[3:0]),
-					.dout(intpriority_reg[i * 4+:4]),
-					.clk(pic_pri_c1_clk)
-				);
-				rvdffs #(.WIDTH(1)) intenable_ff(
-					.rst_l(rst_l),
-					.en(intenable_reg_we[i]),
-					.din(picm_wr_data_ff[0]),
-					.dout(intenable_reg[i]),
-					.clk(pic_int_c1_clk)
-				);
-				assign intenable_clk_enable[i] = ((gw_config_reg[(i * 2) + 1] | intenable_reg_we[i]) | intenable_reg[i]) | gw_clear_reg_we[i];
-				rvsyncss_fpga #(.WIDTH(1)) sync_inst(
-					.gw_clk(gw_clk[i / 4]),
-					.rawclk(clk),
-					.clken(intenable_clk_enable_grp[i / 4]),
-					.dout(extintsrc_req_sync[i]),
-					.din(extintsrc_req[i]),
-					.rst_l(rst_l)
-				);
-				rvdffs #(.WIDTH(2)) gw_config_ff(
-					.rst_l(rst_l),
-					.en(gw_config_reg_we[i]),
-					.din(picm_wr_data_ff[1:0]),
-					.dout(gw_config_reg[i * 2+:2]),
-					.clk(gw_config_c1_clk)
-				);
-				eb1_configurable_gw config_gw_inst(
-					.rst_l(rst_l),
-					.gw_clk(gw_clk[i / 4]),
-					.rawclk(clk),
-					.clken(intenable_clk_enable_grp[i / 4]),
-					.extintsrc_req_sync(extintsrc_req_sync[i]),
-					.meigwctrl_polarity(gw_config_reg[i * 2]),
-					.meigwctrl_type(gw_config_reg[(i * 2) + 1]),
-					.meigwclr(gw_clear_reg_we[i]),
-					.extintsrc_req_config(extintsrc_req_gw[i])
-				);
-			end
-			else begin : INT_ZERO
-				assign intpriority_reg_we[i] = 1'b0;
-				assign intpriority_reg_re[i] = 1'b0;
-				assign intenable_reg_we[i] = 1'b0;
-				assign intenable_reg_re[i] = 1'b0;
-				assign gw_config_reg_we[i] = 1'b0;
-				assign gw_config_reg_re[i] = 1'b0;
-				assign gw_clear_reg_we[i] = 1'b0;
-				assign gw_config_reg[i * 2+:2] = {2 {1'sb0}};
-				assign intpriority_reg[i * 4+:4] = {INTPRIORITY_BITS {1'b0}};
-				assign intenable_reg[i] = 1'b0;
-				assign extintsrc_req_gw[i] = 1'b0;
-				assign extintsrc_req_sync[i] = 1'b0;
-				assign intenable_clk_enable[i] = 1'b0;
-			end
-			assign intpriority_reg_inv[i * 4+:4] = (intpriord ? ~intpriority_reg[i * 4+:4] : intpriority_reg[i * 4+:4]);
-			assign intpend_w_prior_en[i * 4+:4] = {INTPRIORITY_BITS {extintsrc_req_gw[i] & intenable_reg[i]}} & intpriority_reg_inv[i * 4+:4];
-			assign intpend_id[i * 8+:8] = i;
-		end
-	endgenerate
-	assign pl_in[3:0] = selected_int_priority[3:0];
-	genvar l;
-	genvar m;
-	genvar j;
-	genvar k;
-	generate
-		if (pt[135-:5] == 1) begin : genblock
-			wire [(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))))) + 1) * 4) + ((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) * 4) - 1) : (((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1)))) + 1) * 4) + ((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) * 4) - 1)):(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) * 4 : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) * 4)] level_intpend_w_prior_en;
-			wire [(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))))) + 1) * 8) + ((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) * 8) - 1) : (((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1)))) + 1) * 8) + ((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) * 8) - 1)):(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) * 8 : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) * 8)] level_intpend_id;
-			wire [((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))))) + 1) * 4) + (((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) * 4) - 1) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)))) + 1) * 4) + (((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) * 4) - 1)):((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) * 4 : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) * 4)] levelx_intpend_w_prior_en;
-			wire [((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))))) + 1) * 8) + (((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) * 8) - 1) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)))) + 1) * 8) + (((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) * 8) - 1)):((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) * 8 : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) * 8)] levelx_intpend_id;
-			assign level_intpend_w_prior_en[4 * (((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) - (((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2)) - 1) : ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - ((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) - (((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2)) - 1) : ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1)))))+:4 * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))] = {12'b000000000000, intpend_w_prior_en[4 * ((pt[44-:13] - 1) - (pt[44-:13] - 1))+:4 * pt[44-:13]]};
-			assign level_intpend_id[8 * (((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) - (((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2)) - 1) : ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - ((((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) - (((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2)) - 1) : ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) : (((((NUM_LEVELS / 2) >= 0 ? 0 : NUM_LEVELS / 2) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1) : (pt[44-:13] + 2) - ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 2 : ((pt[44-:13] + 2) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1))) + ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) - 1)) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1)))))+:8 * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))] = {24'b000000000000000000000000, intpend_id[8 * ((pt[44-:13] - 1) - (pt[44-:13] - 1))+:8 * pt[44-:13]]};
-			wire [((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) * 4) - 1 : ((1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2)))) * 4) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) * 4) - 1)):((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? 0 : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) * 4)] l2_intpend_w_prior_en_ff;
-			wire [((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) * 8) - 1 : ((1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2)))) * 8) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) * 8) - 1)):((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? 0 : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) * 8)] l2_intpend_id_ff;
-			assign levelx_intpend_w_prior_en[4 * ((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) - ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)) - 1) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - (((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) - ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)) - 1) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)))))+:4 * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))] = {{4 {1'b0}}, l2_intpend_w_prior_en_ff[4 * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2)))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1)) : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2)))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1)))+:4 * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))]};
-			assign levelx_intpend_id[8 * ((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) - ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)) - 1) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - (((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) - ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)) - 1) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) : ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - ((NUM_LEVELS / 2) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) - 1)) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)))))+:8 * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))] = {{8 {1'b1}}, l2_intpend_id_ff[8 * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2)))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1)) : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1) - (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2)))) - 1) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? pt[44-:13] / (2 ** (NUM_LEVELS / 2)) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))) - 1)))+:8 * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1 : 1 - (pt[44-:13] / (2 ** (NUM_LEVELS / 2))))]};
-			for (l = 0; l < (NUM_LEVELS / 2); l = l + 1) begin : TOP_LEVEL
-				for (m = 0; m <= (pt[44-:13] / (2 ** (l + 1))); m = m + 1) begin : COMPARE
-					if (m == (pt[44-:13] / (2 ** (l + 1)))) begin
-						assign level_intpend_w_prior_en[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m + 1 : (pt[44-:13] + 2) - (m + 1)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m + 1 : (pt[44-:13] + 2) - (m + 1))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 4+:4] = {4 {1'sb0}};
-						assign level_intpend_id[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m + 1 : (pt[44-:13] + 2) - (m + 1)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m + 1 : (pt[44-:13] + 2) - (m + 1))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 8+:8] = {8 {1'sb0}};
-					end
-					eb1_cmp_and_mux #(
-						.ID_BITS(ID_BITS),
-						.INTPRIORITY_BITS(INTPRIORITY_BITS)
-					) cmp_l1(
-						.a_id(level_intpend_id[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? 2 * m : (pt[44-:13] + 2) - (2 * m)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? 2 * m : (pt[44-:13] + 2) - (2 * m))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 8+:8]),
-						.a_priority(level_intpend_w_prior_en[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? 2 * m : (pt[44-:13] + 2) - (2 * m)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? 2 * m : (pt[44-:13] + 2) - (2 * m))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 4+:4]),
-						.b_id(level_intpend_id[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 2) - ((2 * m) + 1)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 2) - ((2 * m) + 1))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 8+:8]),
-						.b_priority(level_intpend_w_prior_en[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 2) - ((2 * m) + 1)) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l : (NUM_LEVELS / 2) - l) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 2) - ((2 * m) + 1))) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 4+:4]),
-						.out_id(level_intpend_id[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m : (pt[44-:13] + 2) - m) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m : (pt[44-:13] + 2) - m)) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 8+:8]),
-						.out_priority(level_intpend_w_prior_en[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m : (pt[44-:13] + 2) - m) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? l + 1 : (NUM_LEVELS / 2) - (l + 1)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? m : (pt[44-:13] + 2) - m)) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 4+:4])
-					);
-				end
-			end
-			for (i = 0; i <= (pt[44-:13] / (2 ** (NUM_LEVELS / 2))); i = i + 1) begin : MIDDLE_FLOPS
-				rvdff #(.WIDTH(INTPRIORITY_BITS)) leveb1_intpend_prior_reg(
-					.rst_l(rst_l),
-					.din(level_intpend_w_prior_en[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - (NUM_LEVELS / 2)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? i : (pt[44-:13] + 2) - i) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - (NUM_LEVELS / 2)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? i : (pt[44-:13] + 2) - i)) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 4+:4]),
-					.dout(l2_intpend_w_prior_en_ff[((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? i : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) - i) * 4+:4]),
-					.clk(free_clk)
-				);
-				rvdff #(.WIDTH(ID_BITS)) leveb1_intpend_id_reg(
-					.rst_l(rst_l),
-					.din(level_intpend_id[(((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))) >= ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) ? (((NUM_LEVELS / 2) >= 0 ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - (NUM_LEVELS / 2)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? i : (pt[44-:13] + 2) - i) : ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? 0 : pt[44-:13] + 2) : ((pt[44-:13] + 2) >= 0 ? (NUM_LEVELS / 2) * (pt[44-:13] + 3) : (pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2))))) - (((((NUM_LEVELS / 2) >= 0 ? NUM_LEVELS / 2 : (NUM_LEVELS / 2) - (NUM_LEVELS / 2)) * ((pt[44-:13] + 2) >= 0 ? pt[44-:13] + 3 : 1 - (pt[44-:13] + 2))) + ((pt[44-:13] + 2) >= 0 ? i : (pt[44-:13] + 2) - i)) - ((NUM_LEVELS / 2) >= 0 ? ((pt[44-:13] + 2) >= 0 ? (((NUM_LEVELS / 2) + 1) * (pt[44-:13] + 3)) - 1 : (((NUM_LEVELS / 2) + 1) * (1 - (pt[44-:13] + 2))) + (pt[44-:13] + 1)) : ((pt[44-:13] + 2) >= 0 ? ((1 - (NUM_LEVELS / 2)) * (pt[44-:13] + 3)) + (((NUM_LEVELS / 2) * (pt[44-:13] + 3)) - 1) : ((1 - (NUM_LEVELS / 2)) * (1 - (pt[44-:13] + 2))) + (((pt[44-:13] + 2) + ((NUM_LEVELS / 2) * (1 - (pt[44-:13] + 2)))) - 1))))) * 8+:8]),
-					.dout(l2_intpend_id_ff[((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) >= 0 ? i : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) - i) * 8+:8]),
-					.clk(free_clk)
-				);
-			end
-			for (j = NUM_LEVELS / 2; j < NUM_LEVELS; j = j + 1) begin : BOT_LEVELS
-				for (k = 0; k <= (pt[44-:13] / (2 ** (j + 1))); k = k + 1) begin : COMPARE
-					if (k == (pt[44-:13] / (2 ** (j + 1)))) begin
-						assign levelx_intpend_w_prior_en[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (k + 1)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (k + 1))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 4+:4] = {4 {1'sb0}};
-						assign levelx_intpend_id[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (k + 1)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (k + 1))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 8+:8] = {8 {1'sb0}};
-					end
-					eb1_cmp_and_mux #(
-						.ID_BITS(ID_BITS),
-						.INTPRIORITY_BITS(INTPRIORITY_BITS)
-					) cmp_l1(
-						.a_id(levelx_intpend_id[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 2 * k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (2 * k)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 2 * k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (2 * k))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 8+:8]),
-						.a_priority(levelx_intpend_w_prior_en[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 2 * k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (2 * k)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 2 * k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - (2 * k))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 4+:4]),
-						.b_id(levelx_intpend_id[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (2 * k) + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - ((2 * k) + 1)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (2 * k) + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - ((2 * k) + 1))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 8+:8]),
-						.b_priority(levelx_intpend_w_prior_en[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (2 * k) + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - ((2 * k) + 1)) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j : (NUM_LEVELS / 2) - (j - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (2 * k) + 1 : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - ((2 * k) + 1))) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 4+:4]),
-						.out_id(levelx_intpend_id[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - k) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - k)) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 8+:8]),
-						.out_priority(levelx_intpend_w_prior_en[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - k) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? j + 1 : (NUM_LEVELS / 2) - ((j + 1) - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? k : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) - k)) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 4+:4])
-					);
-				end
-			end
-			assign claimid_in[7:0] = levelx_intpend_id[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS : (NUM_LEVELS / 2) - (NUM_LEVELS - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 0 : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS : (NUM_LEVELS / 2) - (NUM_LEVELS - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 0 : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 8+:8];
-			assign selected_int_priority[3:0] = levelx_intpend_w_prior_en[((NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))) >= (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) ? ((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS : (NUM_LEVELS / 2) - (NUM_LEVELS - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 0 : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) : (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2) : ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))))) - ((((NUM_LEVELS >= (NUM_LEVELS / 2) ? NUM_LEVELS : (NUM_LEVELS / 2) - (NUM_LEVELS - NUM_LEVELS)) * (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2 : 1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? 0 : (pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)) - (NUM_LEVELS >= (NUM_LEVELS / 2) ? (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + (((NUM_LEVELS / 2) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : (((NUM_LEVELS - (NUM_LEVELS / 2)) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + ((NUM_LEVELS / 2) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1)) : (((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) >= 0 ? ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) + ((NUM_LEVELS * ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 2)) - 1) : ((((NUM_LEVELS / 2) - NUM_LEVELS) + 1) * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1))) + ((((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1) + (NUM_LEVELS * (1 - ((pt[44-:13] / (2 ** (NUM_LEVELS / 2))) + 1)))) - 1))))) * 4+:4];
-		end
-		else begin : genblock
-			wire [((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))))) + 1) * 4) + (((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) * 4) - 1) : ((((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1)))) + 1) * 4) + (((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) * 4) - 1)):((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) * 4 : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) * 4)] level_intpend_w_prior_en;
-			wire [((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))))) + 1) * 8) + (((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) * 8) - 1) : ((((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1)))) + 1) * 8) + (((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) * 8) - 1)):((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) * 8 : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) * 8)] level_intpend_id;
-			assign level_intpend_w_prior_en[4 * ((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) - (((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1)) - 1) : ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - (((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) - (((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1)) - 1) : ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1)))))+:4 * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))] = {{8 {1'b0}}, intpend_w_prior_en[4 * ((pt[44-:13] - 1) - (pt[44-:13] - 1))+:4 * pt[44-:13]]};
-			assign level_intpend_id[8 * ((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) - (((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1)) - 1) : ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - (((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) - (((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1)) - 1) : ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) : ((((NUM_LEVELS >= 0 ? 0 : NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1) : (pt[44-:13] + 1) - ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 1 : ((pt[44-:13] + 1) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1))) + ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) - 1)) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1)))))+:8 * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))] = {{16 {1'b1}}, intpend_id[8 * ((pt[44-:13] - 1) - (pt[44-:13] - 1))+:8 * pt[44-:13]]};
-			for (l = 0; l < NUM_LEVELS; l = l + 1) begin : LEVEL
-				for (m = 0; m <= (pt[44-:13] / (2 ** (l + 1))); m = m + 1) begin : COMPARE
-					if (m == (pt[44-:13] / (2 ** (l + 1)))) begin
-						assign level_intpend_w_prior_en[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m + 1 : (pt[44-:13] + 1) - (m + 1)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m + 1 : (pt[44-:13] + 1) - (m + 1))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 4+:4] = {4 {1'sb0}};
-						assign level_intpend_id[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m + 1 : (pt[44-:13] + 1) - (m + 1)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m + 1 : (pt[44-:13] + 1) - (m + 1))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 8+:8] = {8 {1'sb0}};
-					end
-					eb1_cmp_and_mux #(
-						.ID_BITS(ID_BITS),
-						.INTPRIORITY_BITS(INTPRIORITY_BITS)
-					) cmp_l1(
-						.a_id(level_intpend_id[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 2 * m : (pt[44-:13] + 1) - (2 * m)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 2 * m : (pt[44-:13] + 1) - (2 * m))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 8+:8]),
-						.a_priority(level_intpend_w_prior_en[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 2 * m : (pt[44-:13] + 1) - (2 * m)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 2 * m : (pt[44-:13] + 1) - (2 * m))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 4+:4]),
-						.b_id(level_intpend_id[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 1) - ((2 * m) + 1)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 1) - ((2 * m) + 1))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 8+:8]),
-						.b_priority(level_intpend_w_prior_en[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 1) - ((2 * m) + 1)) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l : NUM_LEVELS - l) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? (2 * m) + 1 : (pt[44-:13] + 1) - ((2 * m) + 1))) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 4+:4]),
-						.out_id(level_intpend_id[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m : (pt[44-:13] + 1) - m) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m : (pt[44-:13] + 1) - m)) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 8+:8]),
-						.out_priority(level_intpend_w_prior_en[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m : (pt[44-:13] + 1) - m) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? l + 1 : NUM_LEVELS - (l + 1)) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? m : (pt[44-:13] + 1) - m)) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 4+:4])
-					);
-				end
-			end
-			assign claimid_in[7:0] = level_intpend_id[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? NUM_LEVELS : NUM_LEVELS - NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? NUM_LEVELS : NUM_LEVELS - NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1)) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 8+:8];
-			assign selected_int_priority[3:0] = level_intpend_w_prior_en[((NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))) >= (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) ? ((NUM_LEVELS >= 0 ? NUM_LEVELS : NUM_LEVELS - NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1) : ((pt[44-:13] + 1) >= 0 ? NUM_LEVELS * (pt[44-:13] + 2) : (pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1))))) - ((((NUM_LEVELS >= 0 ? NUM_LEVELS : NUM_LEVELS - NUM_LEVELS) * ((pt[44-:13] + 1) >= 0 ? pt[44-:13] + 2 : 1 - (pt[44-:13] + 1))) + ((pt[44-:13] + 1) >= 0 ? 0 : pt[44-:13] + 1)) - (NUM_LEVELS >= 0 ? ((pt[44-:13] + 1) >= 0 ? ((NUM_LEVELS + 1) * (pt[44-:13] + 2)) - 1 : ((NUM_LEVELS + 1) * (1 - (pt[44-:13] + 1))) + pt[44-:13]) : ((pt[44-:13] + 1) >= 0 ? ((1 - NUM_LEVELS) * (pt[44-:13] + 2)) + ((NUM_LEVELS * (pt[44-:13] + 2)) - 1) : ((1 - NUM_LEVELS) * (1 - (pt[44-:13] + 1))) + (((pt[44-:13] + 1) + (NUM_LEVELS * (1 - (pt[44-:13] + 1)))) - 1))))) * 4+:4];
-		end
-	endgenerate
-	assign config_reg_we = waddr_config_pic_match & picm_wren_ff;
-	assign config_reg_re = raddr_config_pic_match & picm_rden_ff;
-	assign config_reg_in = picm_wr_data_ff[0];
-	rvdffs #(.WIDTH(1)) config_reg_ff(
-		.rst_l(rst_l),
-		.clk(free_clk),
-		.en(config_reg_we),
-		.din(config_reg_in),
-		.dout(config_reg)
-	);
-	assign intpriord = config_reg;
-	assign pl_in_q[3:0] = (intpriord ? ~pl_in : pl_in);
-	rvdff #(.WIDTH(ID_BITS)) claimid_ff(
-		.rst_l(rst_l),
-		.din(claimid_in[7:0]),
-		.dout(claimid[7:0]),
-		.clk(free_clk)
-	);
-	rvdff #(.WIDTH(INTPRIORITY_BITS)) pl_ff(
-		.rst_l(rst_l),
-		.din(pl_in_q[3:0]),
-		.dout(pl[3:0]),
-		.clk(free_clk)
-	);
-	wire [3:0] meipt_inv;
-	wire [3:0] meicurpl_inv;
-	assign meipt_inv[3:0] = (intpriord ? ~meipt[3:0] : meipt[3:0]);
-	assign meicurpl_inv[3:0] = (intpriord ? ~meicurpl[3:0] : meicurpl[3:0]);
-	assign mexintpend_in = (selected_int_priority[3:0] > meipt_inv[3:0]) & (selected_int_priority[3:0] > meicurpl_inv[3:0]);
-	rvdff #(.WIDTH(1)) mexintpend_ff(
-		.rst_l(rst_l),
-		.clk(free_clk),
-		.din(mexintpend_in),
-		.dout(mexintpend)
-	);
-	assign maxint[3:0] = (intpriord ? 0 : 15);
-	assign mhwakeup_in = pl_in_q[3:0] == maxint;
-	rvdff #(.WIDTH(1)) wake_up_ff(
-		.rst_l(rst_l),
-		.clk(free_clk),
-		.din(mhwakeup_in),
-		.dout(mhwakeup)
-	);
-	assign intpend_reg_read = addr_intpend_base_match & picm_rden_ff;
-	assign intpriority_reg_read = raddr_intpriority_base_match & picm_rden_ff;
-	assign intenable_reg_read = raddr_intenable_base_match & picm_rden_ff;
-	assign gw_config_reg_read = raddr_config_gw_base_match & picm_rden_ff;
-	assign intpend_reg_extended[INTPEND_SIZE - 1:0] = {{INTPEND_SIZE - pt[44-:13] {1'b0}}, extintsrc_req_gw[pt[44-:13] - 1:0]};
-	generate
-		for (i = 0; i < INT_GRPS; i = i + 1) assign intpend_rd_part_out[i * 32+:32] = {32 {intpend_reg_read & (picm_raddr_ff[5:2] == i)}} & intpend_reg_extended[(32 * i) + 31:32 * i];
-	endgenerate
-	always @(*) begin : INTPEND_RD
-		intpend_rd_out = {32 {1'sb0}};
-		begin : sv2v_autoblock_34
-			reg signed [31:0] i;
-			for (i = 0; i < INT_GRPS; i = i + 1)
-				intpend_rd_out = intpend_rd_out | intpend_rd_part_out[i * 32+:32];
-		end
-	end
-	always @(*) begin : INTEN_RD
-		intenable_rd_out = 1'b0;
-		intpriority_rd_out = {4 {1'sb0}};
-		gw_config_rd_out = {2 {1'sb0}};
-		begin : sv2v_autoblock_35
-			reg signed [31:0] i;
-			for (i = 0; i < pt[44-:13]; i = i + 1)
-				begin
-					if (intenable_reg_re[i])
-						intenable_rd_out = intenable_reg[i];
-					if (intpriority_reg_re[i])
-						intpriority_rd_out = intpriority_reg[i * 4+:4];
-					if (gw_config_reg_re[i])
-						gw_config_rd_out = gw_config_reg[i * 2+:2];
-				end
-		end
-	end
-	assign picm_rd_data_in[31:0] = (((((((({32 {intpend_reg_read}} & intpend_rd_out) | ({32 {intpriority_reg_read}} & {{28 {1'b0}}, intpriority_rd_out})) | ({32 {intenable_reg_read}} & {31'b0000000000000000000000000000000, intenable_rd_out})) | ({32 {gw_config_reg_read}} & {30'b000000000000000000000000000000, gw_config_rd_out})) | ({32 {config_reg_re}} & {31'b0000000000000000000000000000000, config_reg})) | ({32 {picm_mken_ff & mask[3]}} & 32'b00000000000000000000000000000011)) | ({32 {picm_mken_ff & mask[2]}} & 32'b00000000000000000000000000000001)) | ({32 {picm_mken_ff & mask[1]}} & 32'b00000000000000000000000000001111)) | ({32 {picm_mken_ff & mask[0]}} & 32'b00000000000000000000000000000000);
-	assign picm_rd_data[31:0] = (picm_bypass_ff ? picm_wr_data_ff[31:0] : picm_rd_data_in[31:0]);
-	wire [14:0] address;
-	assign address[14:0] = picm_raddr_ff[14:0];
-	always @(*)
-		case (address[14:0])
-			15'b011000000000000: mask[3:0] = 4'b0100;
-			15'b100000000000100: mask[3:0] = 4'b1000;
-			15'b100000000001000: mask[3:0] = 4'b1000;
-			15'b100000000001100: mask[3:0] = 4'b1000;
-			15'b100000000010000: mask[3:0] = 4'b1000;
-			15'b100000000010100: mask[3:0] = 4'b1000;
-			15'b100000000011000: mask[3:0] = 4'b1000;
-			15'b100000000011100: mask[3:0] = 4'b1000;
-			15'b100000000100000: mask[3:0] = 4'b1000;
-			15'b100000000100100: mask[3:0] = 4'b1000;
-			15'b100000000101000: mask[3:0] = 4'b1000;
-			15'b100000000101100: mask[3:0] = 4'b1000;
-			15'b100000000110000: mask[3:0] = 4'b1000;
-			15'b100000000110100: mask[3:0] = 4'b1000;
-			15'b100000000111000: mask[3:0] = 4'b1000;
-			15'b100000000111100: mask[3:0] = 4'b1000;
-			15'b100000001000000: mask[3:0] = 4'b1000;
-			15'b100000001000100: mask[3:0] = 4'b1000;
-			15'b100000001001000: mask[3:0] = 4'b1000;
-			15'b100000001001100: mask[3:0] = 4'b1000;
-			15'b100000001010000: mask[3:0] = 4'b1000;
-			15'b100000001010100: mask[3:0] = 4'b1000;
-			15'b100000001011000: mask[3:0] = 4'b1000;
-			15'b100000001011100: mask[3:0] = 4'b1000;
-			15'b100000001100000: mask[3:0] = 4'b1000;
-			15'b100000001100100: mask[3:0] = 4'b1000;
-			15'b100000001101000: mask[3:0] = 4'b1000;
-			15'b100000001101100: mask[3:0] = 4'b1000;
-			15'b100000001110000: mask[3:0] = 4'b1000;
-			15'b100000001110100: mask[3:0] = 4'b1000;
-			15'b100000001111000: mask[3:0] = 4'b1000;
-			15'b100000001111100: mask[3:0] = 4'b1000;
-			15'b010000000000100: mask[3:0] = 4'b0100;
-			15'b010000000001000: mask[3:0] = 4'b0100;
-			15'b010000000001100: mask[3:0] = 4'b0100;
-			15'b010000000010000: mask[3:0] = 4'b0100;
-			15'b010000000010100: mask[3:0] = 4'b0100;
-			15'b010000000011000: mask[3:0] = 4'b0100;
-			15'b010000000011100: mask[3:0] = 4'b0100;
-			15'b010000000100000: mask[3:0] = 4'b0100;
-			15'b010000000100100: mask[3:0] = 4'b0100;
-			15'b010000000101000: mask[3:0] = 4'b0100;
-			15'b010000000101100: mask[3:0] = 4'b0100;
-			15'b010000000110000: mask[3:0] = 4'b0100;
-			15'b010000000110100: mask[3:0] = 4'b0100;
-			15'b010000000111000: mask[3:0] = 4'b0100;
-			15'b010000000111100: mask[3:0] = 4'b0100;
-			15'b010000001000000: mask[3:0] = 4'b0100;
-			15'b010000001000100: mask[3:0] = 4'b0100;
-			15'b010000001001000: mask[3:0] = 4'b0100;
-			15'b010000001001100: mask[3:0] = 4'b0100;
-			15'b010000001010000: mask[3:0] = 4'b0100;
-			15'b010000001010100: mask[3:0] = 4'b0100;
-			15'b010000001011000: mask[3:0] = 4'b0100;
-			15'b010000001011100: mask[3:0] = 4'b0100;
-			15'b010000001100000: mask[3:0] = 4'b0100;
-			15'b010000001100100: mask[3:0] = 4'b0100;
-			15'b010000001101000: mask[3:0] = 4'b0100;
-			15'b010000001101100: mask[3:0] = 4'b0100;
-			15'b010000001110000: mask[3:0] = 4'b0100;
-			15'b010000001110100: mask[3:0] = 4'b0100;
-			15'b010000001111000: mask[3:0] = 4'b0100;
-			15'b010000001111100: mask[3:0] = 4'b0100;
-			15'b000000000000100: mask[3:0] = 4'b0010;
-			15'b000000000001000: mask[3:0] = 4'b0010;
-			15'b000000000001100: mask[3:0] = 4'b0010;
-			15'b000000000010000: mask[3:0] = 4'b0010;
-			15'b000000000010100: mask[3:0] = 4'b0010;
-			15'b000000000011000: mask[3:0] = 4'b0010;
-			15'b000000000011100: mask[3:0] = 4'b0010;
-			15'b000000000100000: mask[3:0] = 4'b0010;
-			15'b000000000100100: mask[3:0] = 4'b0010;
-			15'b000000000101000: mask[3:0] = 4'b0010;
-			15'b000000000101100: mask[3:0] = 4'b0010;
-			15'b000000000110000: mask[3:0] = 4'b0010;
-			15'b000000000110100: mask[3:0] = 4'b0010;
-			15'b000000000111000: mask[3:0] = 4'b0010;
-			15'b000000000111100: mask[3:0] = 4'b0010;
-			15'b000000001000000: mask[3:0] = 4'b0010;
-			15'b000000001000100: mask[3:0] = 4'b0010;
-			15'b000000001001000: mask[3:0] = 4'b0010;
-			15'b000000001001100: mask[3:0] = 4'b0010;
-			15'b000000001010000: mask[3:0] = 4'b0010;
-			15'b000000001010100: mask[3:0] = 4'b0010;
-			15'b000000001011000: mask[3:0] = 4'b0010;
-			15'b000000001011100: mask[3:0] = 4'b0010;
-			15'b000000001100000: mask[3:0] = 4'b0010;
-			15'b000000001100100: mask[3:0] = 4'b0010;
-			15'b000000001101000: mask[3:0] = 4'b0010;
-			15'b000000001101100: mask[3:0] = 4'b0010;
-			15'b000000001110000: mask[3:0] = 4'b0010;
-			15'b000000001110100: mask[3:0] = 4'b0010;
-			15'b000000001111000: mask[3:0] = 4'b0010;
-			15'b000000001111100: mask[3:0] = 4'b0010;
-			default: mask[3:0] = 4'b0001;
-		endcase
-endmodule
-module eb1_cmp_and_mux (
-	a_id,
-	a_priority,
-	b_id,
-	b_priority,
-	out_id,
-	out_priority
-);
-	parameter ID_BITS = 8;
-	parameter INTPRIORITY_BITS = 4;
-	input wire [ID_BITS - 1:0] a_id;
-	input wire [INTPRIORITY_BITS - 1:0] a_priority;
-	input wire [ID_BITS - 1:0] b_id;
-	input wire [INTPRIORITY_BITS - 1:0] b_priority;
-	output wire [ID_BITS - 1:0] out_id;
-	output wire [INTPRIORITY_BITS - 1:0] out_priority;
-	wire a_is_lt_b;
-	assign a_is_lt_b = a_priority[INTPRIORITY_BITS - 1:0] < b_priority[INTPRIORITY_BITS - 1:0];
-	assign out_id[ID_BITS - 1:0] = (a_is_lt_b ? b_id[ID_BITS - 1:0] : a_id[ID_BITS - 1:0]);
-	assign out_priority[INTPRIORITY_BITS - 1:0] = (a_is_lt_b ? b_priority[INTPRIORITY_BITS - 1:0] : a_priority[INTPRIORITY_BITS - 1:0]);
-endmodule
-module eb1_configurable_gw (
-	gw_clk,
-	rawclk,
-	clken,
-	rst_l,
-	extintsrc_req_sync,
-	meigwctrl_polarity,
-	meigwctrl_type,
-	meigwclr,
-	extintsrc_req_config
-);
-	input wire gw_clk;
-	input wire rawclk;
-	input wire clken;
-	input wire rst_l;
-	input wire extintsrc_req_sync;
-	input wire meigwctrl_polarity;
-	input wire meigwctrl_type;
-	input wire meigwclr;
-	output wire extintsrc_req_config;
-	wire gw_int_pending_in;
-	wire gw_int_pending;
-	assign gw_int_pending_in = (extintsrc_req_sync ^ meigwctrl_polarity) | (gw_int_pending & ~meigwclr);
-	rvdff_fpga #(.WIDTH(1)) int_pend_ff(
-		.rst_l(rst_l),
-		.clk(gw_clk),
-		.rawclk(rawclk),
-		.clken(clken),
-		.din(gw_int_pending_in),
-		.dout(gw_int_pending)
-	);
-	assign extintsrc_req_config = (meigwctrl_type ? (extintsrc_req_sync ^ meigwctrl_polarity) | gw_int_pending : extintsrc_req_sync ^ meigwctrl_polarity);
-endmodule
-module ahb_to_axi4 (
-	clk,
-	rst_l,
-	scan_mode,
-	bus_clk_en,
-	clk_override,
-	axi_awvalid,
-	axi_awready,
-	axi_awid,
-	axi_awaddr,
-	axi_awsize,
-	axi_awprot,
-	axi_awlen,
-	axi_awburst,
-	axi_wvalid,
-	axi_wready,
-	axi_wdata,
-	axi_wstrb,
-	axi_wlast,
-	axi_bvalid,
-	axi_bready,
-	axi_bresp,
-	axi_bid,
-	axi_arvalid,
-	axi_arready,
-	axi_arid,
-	axi_araddr,
-	axi_arsize,
-	axi_arprot,
-	axi_arlen,
-	axi_arburst,
-	axi_rvalid,
-	axi_rready,
-	axi_rid,
-	axi_rdata,
-	axi_rresp,
-	ahb_haddr,
-	ahb_hburst,
-	ahb_hmastlock,
-	ahb_hprot,
-	ahb_hsize,
-	ahb_htrans,
-	ahb_hwrite,
-	ahb_hwdata,
-	ahb_hsel,
-	ahb_hreadyin,
-	ahb_hrdata,
-	ahb_hreadyout,
-	ahb_hresp
-);
-	parameter TAG = 1;
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input clk;
-	input rst_l;
-	input scan_mode;
-	input bus_clk_en;
-	input clk_override;
-	output wire axi_awvalid;
-	input wire axi_awready;
-	output wire [TAG - 1:0] axi_awid;
-	output wire [31:0] axi_awaddr;
-	output wire [2:0] axi_awsize;
-	output wire [2:0] axi_awprot;
-	output wire [7:0] axi_awlen;
-	output wire [1:0] axi_awburst;
-	output wire axi_wvalid;
-	input wire axi_wready;
-	output wire [63:0] axi_wdata;
-	output wire [7:0] axi_wstrb;
-	output wire axi_wlast;
-	input wire axi_bvalid;
-	output wire axi_bready;
-	input wire [1:0] axi_bresp;
-	input wire [TAG - 1:0] axi_bid;
-	output wire axi_arvalid;
-	input wire axi_arready;
-	output wire [TAG - 1:0] axi_arid;
-	output wire [31:0] axi_araddr;
-	output wire [2:0] axi_arsize;
-	output wire [2:0] axi_arprot;
-	output wire [7:0] axi_arlen;
-	output wire [1:0] axi_arburst;
-	input wire axi_rvalid;
-	output wire axi_rready;
-	input wire [TAG - 1:0] axi_rid;
-	input wire [63:0] axi_rdata;
-	input wire [1:0] axi_rresp;
-	input wire [31:0] ahb_haddr;
-	input wire [2:0] ahb_hburst;
-	input wire ahb_hmastlock;
-	input wire [3:0] ahb_hprot;
-	input wire [2:0] ahb_hsize;
-	input wire [1:0] ahb_htrans;
-	input wire ahb_hwrite;
-	input wire [63:0] ahb_hwdata;
-	input wire ahb_hsel;
-	input wire ahb_hreadyin;
-	output wire [63:0] ahb_hrdata;
-	output wire ahb_hreadyout;
-	output wire ahb_hresp;
-	wire [7:0] master_wstrb;
-	wire [1:0] buf_state;
-	reg [1:0] buf_nxtstate;
-	reg buf_state_en;
-	reg buf_read_error_in;
-	wire buf_read_error;
-	wire [63:0] buf_rdata;
-	wire ahb_hready;
-	wire ahb_hready_q;
-	wire [1:0] ahb_htrans_in;
-	wire [1:0] ahb_htrans_q;
-	wire [2:0] ahb_hsize_q;
-	wire ahb_hwrite_q;
-	wire [31:0] ahb_haddr_q;
-	wire [63:0] ahb_hwdata_q;
-	wire ahb_hresp_q;
-	wire ahb_addr_in_dccm;
-	wire ahb_addr_in_iccm;
-	wire ahb_addr_in_pic;
-	wire ahb_addr_in_dccm_region_nc;
-	wire ahb_addr_in_iccm_region_nc;
-	wire ahb_addr_in_pic_region_nc;
-	reg buf_rdata_en;
-	wire ahb_addr_clk_en;
-	wire buf_rdata_clk_en;
-	wire bus_clk;
-	wire ahb_addr_clk;
-	wire buf_rdata_clk;
-	reg cmdbuf_wr_en;
-	wire cmdbuf_rst;
-	wire cmdbuf_full;
-	wire cmdbuf_vld;
-	wire cmdbuf_write;
-	wire [1:0] cmdbuf_size;
-	wire [7:0] cmdbuf_wstrb;
-	wire [31:0] cmdbuf_addr;
-	wire [63:0] cmdbuf_wdata;
-	localparam [1:0] IDLE = 2'b00;
-	localparam [1:0] PEND = 2'b11;
-	localparam [1:0] RD = 2'b10;
-	localparam [1:0] WR = 2'b01;
-	always @(*) begin
-		buf_nxtstate = IDLE;
-		buf_state_en = 1'b0;
-		buf_rdata_en = 1'b0;
-		buf_read_error_in = 1'b0;
-		cmdbuf_wr_en = 1'b0;
-		case (buf_state)
-			IDLE: begin
-				buf_nxtstate = (ahb_hwrite ? WR : RD);
-				buf_state_en = (ahb_hready & ahb_htrans[1]) & ahb_hsel;
-			end
-			WR: begin
-				buf_nxtstate = ((ahb_hresp | (ahb_htrans[1:0] == 2'b00)) | ~ahb_hsel ? IDLE : (ahb_hwrite ? WR : RD));
-				buf_state_en = ~cmdbuf_full | ahb_hresp;
-				cmdbuf_wr_en = ~cmdbuf_full & ~(ahb_hresp | ((ahb_htrans[1:0] == 2'b01) & ahb_hsel));
-			end
-			RD: begin
-				buf_nxtstate = (ahb_hresp ? IDLE : PEND);
-				buf_state_en = ~cmdbuf_full | ahb_hresp;
-				cmdbuf_wr_en = ~ahb_hresp & ~cmdbuf_full;
-			end
-			PEND: begin
-				buf_nxtstate = IDLE;
-				buf_state_en = axi_rvalid & ~cmdbuf_write;
-				buf_rdata_en = buf_state_en;
-				buf_read_error_in = buf_state_en & |axi_rresp[1:0];
-			end
-		endcase
-	end
-	rvdffs_fpga #(.WIDTH(2)) state_reg(
-		.rst_l(rst_l),
-		.din(buf_nxtstate),
-		.dout({buf_state}),
-		.en(buf_state_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk)
-	);
-	assign master_wstrb[7:0] = ((({8 {ahb_hsize_q[2:0] == 3'b000}} & (8'b00000001 << ahb_haddr_q[2:0])) | ({8 {ahb_hsize_q[2:0] == 3'b001}} & (8'b00000011 << ahb_haddr_q[2:0]))) | ({8 {ahb_hsize_q[2:0] == 3'b010}} & (8'b00001111 << ahb_haddr_q[2:0]))) | ({8 {ahb_hsize_q[2:0] == 3'b011}} & 8'b11111111);
-	assign ahb_hreadyout = (ahb_hresp ? ahb_hresp_q & ~ahb_hready_q : ((~cmdbuf_full | (buf_state == IDLE)) & ~((buf_state == RD) | (buf_state == PEND))) & ~buf_read_error);
-	assign ahb_hready = ahb_hreadyout & ahb_hreadyin;
-	assign ahb_htrans_in[1:0] = {2 {ahb_hsel}} & ahb_htrans[1:0];
-	assign ahb_hrdata[63:0] = buf_rdata[63:0];
-	assign ahb_hresp = ((((ahb_htrans_q[1:0] != 2'b00) & (buf_state != IDLE)) & ((((~(ahb_addr_in_dccm | ahb_addr_in_iccm) | ((ahb_addr_in_iccm | (ahb_addr_in_dccm & ahb_hwrite_q)) & ~((ahb_hsize_q[1:0] == 2'b10) | (ahb_hsize_q[1:0] == 2'b11)))) | ((ahb_hsize_q[2:0] == 3'h1) & ahb_haddr_q[0])) | ((ahb_hsize_q[2:0] == 3'h2) & |ahb_haddr_q[1:0])) | ((ahb_hsize_q[2:0] == 3'h3) & |ahb_haddr_q[2:0]))) | buf_read_error) | (ahb_hresp_q & ~ahb_hready_q);
-	rvdff_fpga #(.WIDTH(64)) buf_rdata_ff(
-		.din(axi_rdata[63:0]),
-		.dout(buf_rdata[63:0]),
-		.clk(buf_rdata_clk),
-		.clken(buf_rdata_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) buf_read_error_ff(
-		.din(buf_read_error_in),
-		.dout(buf_read_error),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) hresp_ff(
-		.din(ahb_hresp),
-		.dout(ahb_hresp_q),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) hready_ff(
-		.din(ahb_hready),
-		.dout(ahb_hready_q),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(2)) htrans_ff(
-		.din(ahb_htrans_in[1:0]),
-		.dout(ahb_htrans_q[1:0]),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(3)) hsize_ff(
-		.din(ahb_hsize[2:0]),
-		.dout(ahb_hsize_q[2:0]),
-		.clk(ahb_addr_clk),
-		.clken(ahb_addr_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) hwrite_ff(
-		.din(ahb_hwrite),
-		.dout(ahb_hwrite_q),
-		.clk(ahb_addr_clk),
-		.clken(ahb_addr_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(32)) haddr_ff(
-		.din(ahb_haddr[31:0]),
-		.dout(ahb_haddr_q[31:0]),
-		.clk(ahb_addr_clk),
-		.clken(ahb_addr_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvrangecheck #(
-		.CCM_SADR(pt[1325-:36]),
-		.CCM_SIZE(pt[1289-:14])
-	) addr_dccm_rangecheck(
-		.addr(ahb_haddr_q[31:0]),
-		.in_range(ahb_addr_in_dccm),
-		.in_region(ahb_addr_in_dccm_region_nc)
-	);
-	generate
-		if (pt[927-:5] == 1) begin : GenICCM
-			rvrangecheck #(
-				.CCM_SADR(pt[887-:36]),
-				.CCM_SIZE(pt[851-:14])
-			) addr_iccm_rangecheck(
-				.addr(ahb_haddr_q[31:0]),
-				.in_range(ahb_addr_in_iccm),
-				.in_region(ahb_addr_in_iccm_region_nc)
-			);
-		end
-		else begin : GenNoICCM
-			assign ahb_addr_in_iccm = 1'b0;
-			assign ahb_addr_in_iccm_region_nc = 1'b0;
-		end
-	endgenerate
-	rvrangecheck #(
-		.CCM_SADR(pt[130-:36]),
-		.CCM_SIZE(pt[69-:13])
-	) addr_pic_rangecheck(
-		.addr(ahb_haddr_q[31:0]),
-		.in_range(ahb_addr_in_pic),
-		.in_region(ahb_addr_in_pic_region_nc)
-	);
-	assign cmdbuf_rst = (((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready)) & ~cmdbuf_wr_en) | (ahb_hresp & ~cmdbuf_write);
-	assign cmdbuf_full = cmdbuf_vld & ~((axi_awvalid & axi_awready) | (axi_arvalid & axi_arready));
-	rvdffsc_fpga #(.WIDTH(1)) cmdbuf_vldff(
-		.din(1'b1),
-		.dout(cmdbuf_vld),
-		.en(cmdbuf_wr_en),
-		.clear(cmdbuf_rst),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) cmdbuf_writeff(
-		.din(ahb_hwrite_q),
-		.dout(cmdbuf_write),
-		.en(cmdbuf_wr_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(2)) cmdbuf_sizeff(
-		.din(ahb_hsize_q[1:0]),
-		.dout(cmdbuf_size[1:0]),
-		.en(cmdbuf_wr_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(8)) cmdbuf_wstrbff(
-		.din(master_wstrb[7:0]),
-		.dout(cmdbuf_wstrb[7:0]),
-		.en(cmdbuf_wr_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) cmdbuf_addrff(
-		.din(ahb_haddr_q[31:0]),
-		.dout(cmdbuf_addr[31:0]),
-		.en(cmdbuf_wr_en & bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffe #(.WIDTH(64)) cmdbuf_wdataff(
-		.din(ahb_hwdata[63:0]),
-		.dout(cmdbuf_wdata[63:0]),
-		.en(cmdbuf_wr_en & bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	assign axi_awvalid = cmdbuf_vld & cmdbuf_write;
-	assign axi_awid[TAG - 1:0] = {TAG {1'sb0}};
-	assign axi_awaddr[31:0] = cmdbuf_addr[31:0];
-	assign axi_awsize[2:0] = {1'b0, cmdbuf_size[1:0]};
-	assign axi_awprot[2:0] = 3'b000;
-	assign axi_awlen[7:0] = {8 {1'sb0}};
-	assign axi_awburst[1:0] = 2'b01;
-	assign axi_wvalid = cmdbuf_vld & cmdbuf_write;
-	assign axi_wdata[63:0] = cmdbuf_wdata[63:0];
-	assign axi_wstrb[7:0] = cmdbuf_wstrb[7:0];
-	assign axi_wlast = 1'b1;
-	assign axi_bready = 1'b1;
-	assign axi_arvalid = cmdbuf_vld & ~cmdbuf_write;
-	assign axi_arid[TAG - 1:0] = {TAG {1'sb0}};
-	assign axi_araddr[31:0] = cmdbuf_addr[31:0];
-	assign axi_arsize[2:0] = {1'b0, cmdbuf_size[1:0]};
-	assign axi_arprot = 3'b000;
-	assign axi_arlen[7:0] = {8 {1'sb0}};
-	assign axi_arburst[1:0] = 2'b01;
-	assign axi_rready = 1'b1;
-	assign ahb_addr_clk_en = bus_clk_en & (ahb_hready & ahb_htrans[1]);
-	assign buf_rdata_clk_en = bus_clk_en & buf_rdata_en;
-	rvclkhdr bus_cgc(
-		.en(bus_clk_en),
-		.l1clk(bus_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr ahb_addr_cgc(
-		.en(ahb_addr_clk_en),
-		.l1clk(ahb_addr_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr buf_rdata_cgc(
-		.en(buf_rdata_clk_en),
-		.l1clk(buf_rdata_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-endmodule
-module dmi_jtag_to_core_sync (
-	rd_en,
-	wr_en,
-	rst_n,
-	clk,
-	reg_en,
-	reg_wr_en
-);
-	input rd_en;
-	input wr_en;
-	input rst_n;
-	input clk;
-	output reg_en;
-	output reg_wr_en;
-	wire c_rd_en;
-	wire c_wr_en;
-	reg [2:0] rden;
-	reg [2:0] wren;
-	assign reg_en = c_wr_en | c_rd_en;
-	assign reg_wr_en = c_wr_en;
-	always @(posedge clk or negedge rst_n)
-		if (!rst_n) begin
-			rden <= {3 {1'sb0}};
-			wren <= {3 {1'sb0}};
-		end
-		else begin
-			rden <= {rden[1:0], rd_en};
-			wren <= {wren[1:0], wr_en};
-		end
-	assign c_rd_en = rden[1] & ~rden[2];
-	assign c_wr_en = wren[1] & ~wren[2];
-endmodule
-module axi4_to_ahb (
-	clk,
-	free_clk,
-	rst_l,
-	scan_mode,
-	bus_clk_en,
-	clk_override,
-	dec_tlu_force_halt,
-	axi_awvalid,
-	axi_awready,
-	axi_awid,
-	axi_awaddr,
-	axi_awsize,
-	axi_awprot,
-	axi_wvalid,
-	axi_wready,
-	axi_wdata,
-	axi_wstrb,
-	axi_wlast,
-	axi_bvalid,
-	axi_bready,
-	axi_bresp,
-	axi_bid,
-	axi_arvalid,
-	axi_arready,
-	axi_arid,
-	axi_araddr,
-	axi_arsize,
-	axi_arprot,
-	axi_rvalid,
-	axi_rready,
-	axi_rid,
-	axi_rdata,
-	axi_rresp,
-	axi_rlast,
-	ahb_haddr,
-	ahb_hburst,
-	ahb_hmastlock,
-	ahb_hprot,
-	ahb_hsize,
-	ahb_htrans,
-	ahb_hwrite,
-	ahb_hwdata,
-	ahb_hrdata,
-	ahb_hready,
-	ahb_hresp
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	parameter TAG = 1;
-	input clk;
-	input free_clk;
-	input rst_l;
-	input scan_mode;
-	input bus_clk_en;
-	input clk_override;
-	input dec_tlu_force_halt;
-	input wire axi_awvalid;
-	output wire axi_awready;
-	input wire [TAG - 1:0] axi_awid;
-	input wire [31:0] axi_awaddr;
-	input wire [2:0] axi_awsize;
-	input wire [2:0] axi_awprot;
-	input wire axi_wvalid;
-	output wire axi_wready;
-	input wire [63:0] axi_wdata;
-	input wire [7:0] axi_wstrb;
-	input wire axi_wlast;
-	output wire axi_bvalid;
-	input wire axi_bready;
-	output wire [1:0] axi_bresp;
-	output wire [TAG - 1:0] axi_bid;
-	input wire axi_arvalid;
-	output wire axi_arready;
-	input wire [TAG - 1:0] axi_arid;
-	input wire [31:0] axi_araddr;
-	input wire [2:0] axi_arsize;
-	input wire [2:0] axi_arprot;
-	output wire axi_rvalid;
-	input wire axi_rready;
-	output wire [TAG - 1:0] axi_rid;
-	output wire [63:0] axi_rdata;
-	output wire [1:0] axi_rresp;
-	output wire axi_rlast;
-	output wire [31:0] ahb_haddr;
-	output wire [2:0] ahb_hburst;
-	output wire ahb_hmastlock;
-	output wire [3:0] ahb_hprot;
-	output wire [2:0] ahb_hsize;
-	output reg [1:0] ahb_htrans;
-	output wire ahb_hwrite;
-	output wire [63:0] ahb_hwdata;
-	input wire [63:0] ahb_hrdata;
-	input wire ahb_hready;
-	input wire ahb_hresp;
-	localparam ID = 1;
-	localparam PRTY = 1;
-	wire [2:0] buf_state;
-	reg [2:0] buf_nxtstate;
-	wire slave_valid;
-	wire slave_ready;
-	wire [TAG - 1:0] slave_tag;
-	wire [63:0] slave_rdata;
-	wire [3:0] slave_opc;
-	wire wrbuf_en;
-	wire wrbuf_data_en;
-	wire wrbuf_cmd_sent;
-	wire wrbuf_rst;
-	wire wrbuf_vld;
-	wire wrbuf_data_vld;
-	wire [TAG - 1:0] wrbuf_tag;
-	wire [2:0] wrbuf_size;
-	wire [31:0] wrbuf_addr;
-	wire [63:0] wrbuf_data;
-	wire [7:0] wrbuf_byteen;
-	wire master_valid;
-	reg master_ready;
-	wire [TAG - 1:0] master_tag;
-	wire [31:0] master_addr;
-	wire [63:0] master_wdata;
-	wire [2:0] master_size;
-	wire [2:0] master_opc;
-	wire [7:0] master_byteen;
-	wire [31:0] buf_addr;
-	wire [1:0] buf_size;
-	wire buf_write;
-	wire [7:0] buf_byteen;
-	wire buf_aligned;
-	wire [63:0] buf_data;
-	wire [TAG - 1:0] buf_tag;
-	wire buf_rst;
-	wire [TAG - 1:0] buf_tag_in;
-	wire [31:0] buf_addr_in;
-	wire [7:0] buf_byteen_in;
-	wire [63:0] buf_data_in;
-	reg buf_write_in;
-	wire buf_aligned_in;
-	wire [2:0] buf_size_in;
-	reg buf_state_en;
-	reg buf_wr_en;
-	reg buf_data_wr_en;
-	reg slvbuf_error_en;
-	wire wr_cmd_vld;
-	wire cmd_done_rst;
-	reg cmd_done;
-	wire cmd_doneQ;
-	reg trxn_done;
-	reg [2:0] buf_cmd_byte_ptr;
-	wire [2:0] buf_cmd_byte_ptrQ;
-	wire [2:0] buf_cmd_nxtbyte_ptr;
-	reg buf_cmd_byte_ptr_en;
-	wire found;
-	reg slave_valid_pre;
-	wire ahb_hready_q;
-	wire ahb_hresp_q;
-	wire [1:0] ahb_htrans_q;
-	wire ahb_hwrite_q;
-	wire [63:0] ahb_hrdata_q;
-	wire slvbuf_write;
-	wire slvbuf_error;
-	wire [TAG - 1:0] slvbuf_tag;
-	reg slvbuf_error_in;
-	reg slvbuf_wr_en;
-	reg bypass_en;
-	reg rd_bypass_idle;
-	wire last_addr_en;
-	wire [31:0] last_bus_addr;
-	wire buf_clken;
-	wire ahbm_data_clken;
-	wire buf_clk;
-	wire bus_clk;
-	wire ahbm_data_clk;
-	wire dec_tlu_force_halt_bus;
-	wire dec_tlu_force_halt_bus_ns;
-	wire dec_tlu_force_halt_bus_q;
-	function automatic [1:0] get_write_size;
-		input reg [7:0] byteen;
-		reg [1:0] size;
-		begin
-			size[1:0] = ((2'b11 & {2 {byteen[7:0] == 8'hff}}) | (2'b10 & {2 {(byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h0f)}})) | (2'b01 & {2 {(((byteen[7:0] == 8'hc0) | (byteen[7:0] == 8'h30)) | (byteen[7:0] == 8'h0c)) | (byteen[7:0] == 8'h03)}});
-			get_write_size = size[1:0];
-		end
-	endfunction
-	function automatic [2:0] get_write_addr;
-		input reg [7:0] byteen;
-		reg [2:0] addr;
-		begin
-			addr[2:0] = (((3'h0 & {3 {((byteen[7:0] == 8'hff) | (byteen[7:0] == 8'h0f)) | (byteen[7:0] == 8'h03)}}) | (3'h2 & {3 {byteen[7:0] == 8'h0c}})) | (3'h4 & {3 {(byteen[7:0] == 8'hf0) | (byteen[7:0] == 8'h03)}})) | (3'h6 & {3 {byteen[7:0] == 8'hc0}});
-			get_write_addr = addr[2:0];
-		end
-	endfunction
-	function automatic signed [2:0] sv2v_cast_3_signed;
-		input reg signed [2:0] inp;
-		sv2v_cast_3_signed = inp;
-	endfunction
-	function automatic [2:0] get_nxtbyte_ptr;
-		input reg [2:0] current_byte_ptr;
-		input reg [7:0] byteen;
-		input reg get_next;
-		reg [2:0] start_ptr;
-		reg found;
-		begin
-			found = 1'b0;
-			start_ptr[2:0] = (get_next ? current_byte_ptr[2:0] + 3'b001 : current_byte_ptr[2:0]);
-			begin : sv2v_autoblock_36
-				reg signed [31:0] j;
-				for (j = 0; j < 8; j = j + 1)
-					if (~found) begin
-						get_nxtbyte_ptr[2:0] = sv2v_cast_3_signed(j);
-						found = found | (byteen[j] & (sv2v_cast_3_signed(j) >= start_ptr[2:0]));
-					end
-			end
-		end
-	endfunction
-	assign dec_tlu_force_halt_bus = dec_tlu_force_halt | dec_tlu_force_halt_bus_q;
-	assign dec_tlu_force_halt_bus_ns = ~bus_clk_en & dec_tlu_force_halt_bus;
-	rvdff #(.WIDTH(1)) force_halt_busff(
-		.din(dec_tlu_force_halt_bus_ns),
-		.dout(dec_tlu_force_halt_bus_q),
-		.clk(free_clk),
-		.rst_l(rst_l)
-	);
-	assign wrbuf_en = (axi_awvalid & axi_awready) & master_ready;
-	assign wrbuf_data_en = (axi_wvalid & axi_wready) & master_ready;
-	assign wrbuf_cmd_sent = (master_valid & master_ready) & (master_opc[2:1] == 2'b01);
-	assign wrbuf_rst = (wrbuf_cmd_sent & ~wrbuf_en) | dec_tlu_force_halt_bus;
-	assign axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent) & master_ready;
-	assign axi_wready = ~(wrbuf_data_vld & ~wrbuf_cmd_sent) & master_ready;
-	assign axi_arready = ~(wrbuf_vld & wrbuf_data_vld) & master_ready;
-	assign axi_rlast = 1'b1;
-	assign wr_cmd_vld = wrbuf_vld & wrbuf_data_vld;
-	assign master_valid = wr_cmd_vld | axi_arvalid;
-	assign master_tag[TAG - 1:0] = (wr_cmd_vld ? wrbuf_tag[TAG - 1:0] : axi_arid[TAG - 1:0]);
-	assign master_opc[2:0] = (wr_cmd_vld ? 3'b011 : 3'b000);
-	assign master_addr[31:0] = (wr_cmd_vld ? wrbuf_addr[31:0] : axi_araddr[31:0]);
-	assign master_size[2:0] = (wr_cmd_vld ? wrbuf_size[2:0] : axi_arsize[2:0]);
-	assign master_byteen[7:0] = wrbuf_byteen[7:0];
-	assign master_wdata[63:0] = wrbuf_data[63:0];
-	assign axi_bvalid = (slave_valid & slave_ready) & slave_opc[3];
-	assign axi_bresp[1:0] = (slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b00));
-	assign axi_bid[TAG - 1:0] = slave_tag[TAG - 1:0];
-	assign axi_rvalid = (slave_valid & slave_ready) & (slave_opc[3:2] == 2'b00);
-	assign axi_rresp[1:0] = (slave_opc[0] ? 2'b10 : (slave_opc[1] ? 2'b11 : 2'b00));
-	assign axi_rid[TAG - 1:0] = slave_tag[TAG - 1:0];
-	assign axi_rdata[63:0] = slave_rdata[63:0];
-	assign slave_ready = axi_bready & axi_rready;
-	localparam [2:0] CMD_RD = 3'b001;
-	localparam [2:0] CMD_WR = 3'b010;
-	localparam [2:0] DATA_RD = 3'b011;
-	localparam [2:0] DATA_WR = 3'b100;
-	localparam [2:0] DONE = 3'b101;
-	localparam [2:0] IDLE = 3'b000;
-	localparam [2:0] STREAM_ERR_RD = 3'b111;
-	localparam [2:0] STREAM_RD = 3'b110;
-	always @(*) begin
-		buf_nxtstate = IDLE;
-		buf_state_en = 1'b0;
-		buf_wr_en = 1'b0;
-		buf_data_wr_en = 1'b0;
-		slvbuf_error_in = 1'b0;
-		slvbuf_error_en = 1'b0;
-		buf_write_in = 1'b0;
-		cmd_done = 1'b0;
-		trxn_done = 1'b0;
-		buf_cmd_byte_ptr_en = 1'b0;
-		buf_cmd_byte_ptr[2:0] = {3 {1'sb0}};
-		slave_valid_pre = 1'b0;
-		master_ready = 1'b0;
-		ahb_htrans[1:0] = 2'b00;
-		slvbuf_wr_en = 1'b0;
-		bypass_en = 1'b0;
-		rd_bypass_idle = 1'b0;
-		case (buf_state)
-			IDLE: begin
-				master_ready = 1'b1;
-				buf_write_in = master_opc[2:1] == 2'b01;
-				buf_nxtstate = (buf_write_in ? CMD_WR : CMD_RD);
-				buf_state_en = master_valid & master_ready;
-				buf_wr_en = buf_state_en;
-				buf_data_wr_en = buf_state_en & (buf_nxtstate == CMD_WR);
-				buf_cmd_byte_ptr_en = buf_state_en;
-				buf_cmd_byte_ptr[2:0] = (buf_write_in ? get_nxtbyte_ptr(3'b000, buf_byteen_in[7:0], 1'b0) : master_addr[2:0]);
-				bypass_en = buf_state_en;
-				rd_bypass_idle = bypass_en & (buf_nxtstate == CMD_RD);
-				ahb_htrans[1:0] = {2 {bypass_en}} & 2'b10;
-			end
-			CMD_RD: begin
-				buf_nxtstate = (master_valid & (master_opc[2:0] == 3'b000) ? STREAM_RD : DATA_RD);
-				buf_state_en = (ahb_hready_q & (ahb_htrans_q[1:0] != 2'b00)) & ~ahb_hwrite_q;
-				cmd_done = buf_state_en & ~master_valid;
-				slvbuf_wr_en = buf_state_en;
-				master_ready = buf_state_en & (buf_nxtstate == STREAM_RD);
-				buf_wr_en = master_ready;
-				bypass_en = master_ready & master_valid;
-				buf_cmd_byte_ptr[2:0] = (bypass_en ? master_addr[2:0] : buf_addr[2:0]);
-				ahb_htrans[1:0] = 2'b10 & {2 {~buf_state_en | bypass_en}};
-			end
-			STREAM_RD: begin
-				master_ready = (ahb_hready_q & ~ahb_hresp_q) & ~(master_valid & (master_opc[2:1] == 2'b01));
-				buf_wr_en = (master_valid & master_ready) & (master_opc[2:0] == 3'b000);
-				buf_nxtstate = (ahb_hresp_q ? STREAM_ERR_RD : (buf_wr_en ? STREAM_RD : DATA_RD));
-				buf_state_en = ahb_hready_q | ahb_hresp_q;
-				buf_data_wr_en = buf_state_en;
-				slvbuf_error_in = ahb_hresp_q;
-				slvbuf_error_en = buf_state_en;
-				slave_valid_pre = buf_state_en & ~ahb_hresp_q;
-				cmd_done = buf_state_en & ~master_valid;
-				bypass_en = ((master_ready & master_valid) & (buf_nxtstate == STREAM_RD)) & buf_state_en;
-				buf_cmd_byte_ptr[2:0] = (bypass_en ? master_addr[2:0] : buf_addr[2:0]);
-				ahb_htrans[1:0] = 2'b10 & {2 {~((buf_nxtstate != STREAM_RD) & buf_state_en)}};
-				slvbuf_wr_en = buf_wr_en;
-			end
-			STREAM_ERR_RD: begin
-				buf_nxtstate = DATA_RD;
-				buf_state_en = (ahb_hready_q & (ahb_htrans_q[1:0] != 2'b00)) & ~ahb_hwrite_q;
-				slave_valid_pre = buf_state_en;
-				slvbuf_wr_en = buf_state_en;
-				buf_cmd_byte_ptr[2:0] = buf_addr[2:0];
-				ahb_htrans[1:0] = 2'b10 & {2 {~buf_state_en}};
-			end
-			DATA_RD: begin
-				buf_nxtstate = DONE;
-				buf_state_en = ahb_hready_q | ahb_hresp_q;
-				buf_data_wr_en = buf_state_en;
-				slvbuf_error_in = ahb_hresp_q;
-				slvbuf_error_en = buf_state_en;
-				slvbuf_wr_en = buf_state_en;
-			end
-			CMD_WR: begin
-				buf_nxtstate = DATA_WR;
-				trxn_done = (ahb_hready_q & ahb_hwrite_q) & (ahb_htrans_q[1:0] != 2'b00);
-				buf_state_en = trxn_done;
-				buf_cmd_byte_ptr_en = buf_state_en;
-				slvbuf_wr_en = buf_state_en;
-				buf_cmd_byte_ptr = (trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0], buf_byteen[7:0], 1'b1) : buf_cmd_byte_ptrQ);
-				cmd_done = trxn_done & ((buf_aligned | (buf_cmd_byte_ptrQ == 3'b111)) | (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0], buf_byteen[7:0], 1'b1)] == 1'b0));
-				ahb_htrans[1:0] = {2 {~(cmd_done | cmd_doneQ)}} & 2'b10;
-			end
-			DATA_WR: begin
-				buf_state_en = (cmd_doneQ & ahb_hready_q) | ahb_hresp_q;
-				master_ready = (buf_state_en & ~ahb_hresp_q) & slave_ready;
-				buf_nxtstate = (ahb_hresp_q | ~slave_ready ? DONE : (master_valid & master_ready ? (master_opc[2:1] == 2'b01 ? CMD_WR : CMD_RD) : IDLE));
-				slvbuf_error_in = ahb_hresp_q;
-				slvbuf_error_en = buf_state_en;
-				buf_write_in = master_opc[2:1] == 2'b01;
-				buf_wr_en = buf_state_en & ((buf_nxtstate == CMD_WR) | (buf_nxtstate == CMD_RD));
-				buf_data_wr_en = buf_wr_en;
-				cmd_done = ahb_hresp_q | ((ahb_hready_q & (ahb_htrans_q[1:0] != 2'b00)) & ((buf_cmd_byte_ptrQ == 3'b111) | (buf_byteen[get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0], buf_byteen[7:0], 1'b1)] == 1'b0)));
-				bypass_en = (buf_state_en & buf_write_in) & (buf_nxtstate == CMD_WR);
-				ahb_htrans[1:0] = {2 {~(cmd_done | cmd_doneQ) | bypass_en}} & 2'b10;
-				slave_valid_pre = buf_state_en & (buf_nxtstate != DONE);
-				trxn_done = (ahb_hready_q & ahb_hwrite_q) & (ahb_htrans_q[1:0] != 2'b00);
-				buf_cmd_byte_ptr_en = trxn_done | bypass_en;
-				buf_cmd_byte_ptr = (bypass_en ? get_nxtbyte_ptr(3'b000, buf_byteen_in[7:0], 1'b0) : (trxn_done ? get_nxtbyte_ptr(buf_cmd_byte_ptrQ[2:0], buf_byteen[7:0], 1'b1) : buf_cmd_byte_ptrQ));
-			end
-			DONE: begin
-				buf_nxtstate = IDLE;
-				buf_state_en = slave_ready;
-				slvbuf_error_en = 1'b1;
-				slave_valid_pre = 1'b1;
-			end
-		endcase
-	end
-	assign buf_rst = dec_tlu_force_halt_bus;
-	assign cmd_done_rst = slave_valid_pre;
-	assign buf_addr_in[31:3] = master_addr[31:3];
-	assign buf_addr_in[2:0] = (buf_aligned_in & (master_opc[2:1] == 2'b01) ? get_write_addr(master_byteen[7:0]) : master_addr[2:0]);
-	assign buf_tag_in[TAG - 1:0] = master_tag[TAG - 1:0];
-	assign buf_byteen_in[7:0] = wrbuf_byteen[7:0];
-	assign buf_data_in[63:0] = (buf_state == DATA_RD ? ahb_hrdata_q[63:0] : master_wdata[63:0]);
-	assign buf_size_in[1:0] = ((buf_aligned_in & (master_size[1:0] == 2'b11)) & (master_opc[2:1] == 2'b01) ? get_write_size(master_byteen[7:0]) : master_size[1:0]);
-	assign buf_aligned_in = ((((master_opc[2:0] == 3'b000) | (master_size[1:0] == 2'b00)) | (master_size[1:0] == 2'b01)) | (master_size[1:0] == 2'b10)) | ((master_size[1:0] == 2'b11) & (((((((master_byteen[7:0] == 8'h03) | (master_byteen[7:0] == 8'h0c)) | (master_byteen[7:0] == 8'h30)) | (master_byteen[7:0] == 8'hc0)) | (master_byteen[7:0] == 8'h0f)) | (master_byteen[7:0] == 8'hf0)) | (master_byteen[7:0] == 8'hff)));
-	assign ahb_haddr[31:3] = (bypass_en ? master_addr[31:3] : buf_addr[31:3]);
-	assign ahb_haddr[2:0] = {3 {ahb_htrans == 2'b10}} & buf_cmd_byte_ptr[2:0];
-	assign ahb_hsize[2:0] = (bypass_en ? {1'b0, {2 {buf_aligned_in}} & buf_size_in[1:0]} : {1'b0, {2 {buf_aligned}} & buf_size[1:0]});
-	assign ahb_hburst[2:0] = 3'b000;
-	assign ahb_hmastlock = 1'b0;
-	assign ahb_hprot[3:0] = {3'b001, ~axi_arprot[2]};
-	assign ahb_hwrite = (bypass_en ? master_opc[2:1] == 2'b01 : buf_write);
-	assign ahb_hwdata[63:0] = buf_data[63:0];
-	assign slave_valid = slave_valid_pre;
-	assign slave_opc[3:2] = (slvbuf_write ? 2'b11 : 2'b00);
-	assign slave_opc[1:0] = {2 {slvbuf_error}} & 2'b10;
-	assign slave_rdata[63:0] = (slvbuf_error ? {2 {last_bus_addr[31:0]}} : (buf_state == DONE ? buf_data[63:0] : ahb_hrdata_q[63:0]));
-	assign slave_tag[TAG - 1:0] = slvbuf_tag[TAG - 1:0];
-	assign last_addr_en = ((ahb_htrans[1:0] != 2'b00) & ahb_hready) & ahb_hwrite;
-	rvdffsc_fpga #(.WIDTH(1)) wrbuf_vldff(
-		.din(1'b1),
-		.dout(wrbuf_vld),
-		.en(wrbuf_en),
-		.clear(wrbuf_rst),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffsc_fpga #(.WIDTH(1)) wrbuf_data_vldff(
-		.din(1'b1),
-		.dout(wrbuf_data_vld),
-		.en(wrbuf_data_en),
-		.clear(wrbuf_rst),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(TAG)) wrbuf_tagff(
-		.din(axi_awid[TAG - 1:0]),
-		.dout(wrbuf_tag[TAG - 1:0]),
-		.en(wrbuf_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(3)) wrbuf_sizeff(
-		.din(axi_awsize[2:0]),
-		.dout(wrbuf_size[2:0]),
-		.en(wrbuf_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) wrbuf_addrff(
-		.din(axi_awaddr[31:0]),
-		.dout(wrbuf_addr[31:0]),
-		.en(wrbuf_en & bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffe #(.WIDTH(64)) wrbuf_dataff(
-		.din(axi_wdata[63:0]),
-		.dout(wrbuf_data[63:0]),
-		.en(wrbuf_data_en & bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffs_fpga #(.WIDTH(8)) wrbuf_byteenff(
-		.din(axi_wstrb[7:0]),
-		.dout(wrbuf_byteen[7:0]),
-		.en(wrbuf_data_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(32)) last_bus_addrff(
-		.din(ahb_haddr[31:0]),
-		.dout(last_bus_addr[31:0]),
-		.en(last_addr_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffsc_fpga #(.WIDTH(3)) buf_state_ff(
-		.din(buf_nxtstate),
-		.dout({buf_state}),
-		.en(buf_state_en),
-		.clear(buf_rst),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) buf_writeff(
-		.din(buf_write_in),
-		.dout(buf_write),
-		.en(buf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(TAG)) buf_tagff(
-		.din(buf_tag_in[TAG - 1:0]),
-		.dout(buf_tag[TAG - 1:0]),
-		.en(buf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) buf_addrff(
-		.din(buf_addr_in[31:0]),
-		.dout(buf_addr[31:0]),
-		.en(buf_wr_en & bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffs_fpga #(.WIDTH(2)) buf_sizeff(
-		.din(buf_size_in[1:0]),
-		.dout(buf_size[1:0]),
-		.en(buf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) buf_alignedff(
-		.din(buf_aligned_in),
-		.dout(buf_aligned),
-		.en(buf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(8)) buf_byteenff(
-		.din(buf_byteen_in[7:0]),
-		.dout(buf_byteen[7:0]),
-		.en(buf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(64)) buf_dataff(
-		.din(buf_data_in[63:0]),
-		.dout(buf_data[63:0]),
-		.en(buf_data_wr_en & bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffs_fpga #(.WIDTH(1)) slvbuf_writeff(
-		.din(buf_write),
-		.dout(slvbuf_write),
-		.en(slvbuf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(TAG)) slvbuf_tagff(
-		.din(buf_tag[TAG - 1:0]),
-		.dout(slvbuf_tag[TAG - 1:0]),
-		.en(slvbuf_wr_en),
-		.clk(buf_clk),
-		.clken(buf_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) slvbuf_errorff(
-		.din(slvbuf_error_in),
-		.dout(slvbuf_error),
-		.en(slvbuf_error_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffsc_fpga #(.WIDTH(1)) buf_cmd_doneff(
-		.din(1'b1),
-		.dout(cmd_doneQ),
-		.en(cmd_done),
-		.clear(cmd_done_rst),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(3)) buf_cmd_byte_ptrff(
-		.din(buf_cmd_byte_ptr[2:0]),
-		.dout(buf_cmd_byte_ptrQ[2:0]),
-		.en(buf_cmd_byte_ptr_en),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) hready_ff(
-		.din(ahb_hready),
-		.dout(ahb_hready_q),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(2)) htrans_ff(
-		.din(ahb_htrans[1:0]),
-		.dout(ahb_htrans_q[1:0]),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) hwrite_ff(
-		.din(ahb_hwrite),
-		.dout(ahb_hwrite_q),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) hresp_ff(
-		.din(ahb_hresp),
-		.dout(ahb_hresp_q),
-		.clk(bus_clk),
-		.clken(bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(64)) hrdata_ff(
-		.din(ahb_hrdata[63:0]),
-		.dout(ahb_hrdata_q[63:0]),
-		.clk(ahbm_data_clk),
-		.clken(ahbm_data_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	assign buf_clken = bus_clk_en & ((buf_wr_en | slvbuf_wr_en) | clk_override);
-	assign ahbm_data_clken = bus_clk_en & ((buf_state != IDLE) | clk_override);
-	rvclkhdr bus_cgc(
-		.en(bus_clk_en),
-		.l1clk(bus_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr buf_cgc(
-		.en(buf_clken),
-		.l1clk(buf_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr ahbm_data_cgc(
-		.en(ahbm_data_clken),
-		.l1clk(ahbm_data_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-endmodule
-module eb1_dbg (
-	dbg_cmd_addr,
-	dbg_cmd_wrdata,
-	dbg_cmd_valid,
-	dbg_cmd_write,
-	dbg_cmd_type,
-	dbg_cmd_size,
-	dbg_core_rst_l,
-	core_dbg_rddata,
-	core_dbg_cmd_done,
-	core_dbg_cmd_fail,
-	dbg_dma_bubble,
-	dma_dbg_ready,
-	dbg_halt_req,
-	dbg_resume_req,
-	dec_tlu_debug_mode,
-	dec_tlu_dbg_halted,
-	dec_tlu_mpc_halted_only,
-	dec_tlu_resume_ack,
-	dmi_reg_en,
-	dmi_reg_addr,
-	dmi_reg_wr_en,
-	dmi_reg_wdata,
-	dmi_reg_rdata,
-	sb_axi_awvalid,
-	sb_axi_awready,
-	sb_axi_awid,
-	sb_axi_awaddr,
-	sb_axi_awregion,
-	sb_axi_awlen,
-	sb_axi_awsize,
-	sb_axi_awburst,
-	sb_axi_awlock,
-	sb_axi_awcache,
-	sb_axi_awprot,
-	sb_axi_awqos,
-	sb_axi_wvalid,
-	sb_axi_wready,
-	sb_axi_wdata,
-	sb_axi_wstrb,
-	sb_axi_wlast,
-	sb_axi_bvalid,
-	sb_axi_bready,
-	sb_axi_bresp,
-	sb_axi_arvalid,
-	sb_axi_arready,
-	sb_axi_arid,
-	sb_axi_araddr,
-	sb_axi_arregion,
-	sb_axi_arlen,
-	sb_axi_arsize,
-	sb_axi_arburst,
-	sb_axi_arlock,
-	sb_axi_arcache,
-	sb_axi_arprot,
-	sb_axi_arqos,
-	sb_axi_rvalid,
-	sb_axi_rready,
-	sb_axi_rdata,
-	sb_axi_rresp,
-	dbg_bus_clk_en,
-	clk,
-	rst_l,
-	dbg_rst_l,
-	clk_override,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	output wire [31:0] dbg_cmd_addr;
-	output wire [31:0] dbg_cmd_wrdata;
-	output wire dbg_cmd_valid;
-	output wire dbg_cmd_write;
-	output wire [1:0] dbg_cmd_type;
-	output wire [1:0] dbg_cmd_size;
-	output wire dbg_core_rst_l;
-	input wire [31:0] core_dbg_rddata;
-	input wire core_dbg_cmd_done;
-	input wire core_dbg_cmd_fail;
-	output wire dbg_dma_bubble;
-	input wire dma_dbg_ready;
-	output reg dbg_halt_req;
-	output reg dbg_resume_req;
-	input wire dec_tlu_debug_mode;
-	input wire dec_tlu_dbg_halted;
-	input wire dec_tlu_mpc_halted_only;
-	input wire dec_tlu_resume_ack;
-	input wire dmi_reg_en;
-	input wire [6:0] dmi_reg_addr;
-	input wire dmi_reg_wr_en;
-	input wire [31:0] dmi_reg_wdata;
-	output wire [31:0] dmi_reg_rdata;
-	output wire sb_axi_awvalid;
-	input wire sb_axi_awready;
-	output wire [pt[12-:8] - 1:0] sb_axi_awid;
-	output wire [31:0] sb_axi_awaddr;
-	output wire [3:0] sb_axi_awregion;
-	output wire [7:0] sb_axi_awlen;
-	output wire [2:0] sb_axi_awsize;
-	output wire [1:0] sb_axi_awburst;
-	output wire sb_axi_awlock;
-	output wire [3:0] sb_axi_awcache;
-	output wire [2:0] sb_axi_awprot;
-	output wire [3:0] sb_axi_awqos;
-	output wire sb_axi_wvalid;
-	input wire sb_axi_wready;
-	output wire [63:0] sb_axi_wdata;
-	output wire [7:0] sb_axi_wstrb;
-	output wire sb_axi_wlast;
-	input wire sb_axi_bvalid;
-	output wire sb_axi_bready;
-	input wire [1:0] sb_axi_bresp;
-	output wire sb_axi_arvalid;
-	input wire sb_axi_arready;
-	output wire [pt[12-:8] - 1:0] sb_axi_arid;
-	output wire [31:0] sb_axi_araddr;
-	output wire [3:0] sb_axi_arregion;
-	output wire [7:0] sb_axi_arlen;
-	output wire [2:0] sb_axi_arsize;
-	output wire [1:0] sb_axi_arburst;
-	output wire sb_axi_arlock;
-	output wire [3:0] sb_axi_arcache;
-	output wire [2:0] sb_axi_arprot;
-	output wire [3:0] sb_axi_arqos;
-	input wire sb_axi_rvalid;
-	output wire sb_axi_rready;
-	input wire [63:0] sb_axi_rdata;
-	input wire [1:0] sb_axi_rresp;
-	input wire dbg_bus_clk_en;
-	input wire clk;
-	input wire rst_l;
-	input wire dbg_rst_l;
-	input wire clk_override;
-	input wire scan_mode;
-	wire [3:0] dbg_state;
-	reg [3:0] dbg_nxtstate;
-	reg dbg_state_en;
-	wire [31:0] dmstatus_reg;
-	wire [31:0] dmcontrol_reg;
-	wire [31:0] command_reg;
-	wire [31:0] abstractcs_reg;
-	wire [31:0] haltsum0_reg;
-	wire [31:0] data0_reg;
-	wire [31:0] data1_reg;
-	wire [31:0] data0_din;
-	wire data0_reg_wren;
-	wire data0_reg_wren0;
-	wire data0_reg_wren1;
-	reg data0_reg_wren2;
-	wire [31:0] data1_din;
-	wire data1_reg_wren;
-	wire data1_reg_wren0;
-	wire data1_reg_wren1;
-	reg abstractcs_busy_wren;
-	reg abstractcs_busy_din;
-	wire [2:0] abstractcs_error_din;
-	wire abstractcs_error_sel0;
-	wire abstractcs_error_sel1;
-	wire abstractcs_error_seb1;
-	wire abstractcs_error_sel3;
-	wire abstractcs_error_sel4;
-	wire abstractcs_error_sel5;
-	wire abstractcs_error_sel6;
-	reg dbg_sb_bus_error;
-	wire abstractauto_reg_wren;
-	wire [1:0] abstractauto_reg;
-	wire dmstatus_resumeack_wren;
-	wire dmstatus_resumeack_din;
-	wire dmstatus_haveresetn_wren;
-	wire dmstatus_resumeack;
-	wire dmstatus_unavail;
-	wire dmstatus_running;
-	wire dmstatus_halted;
-	wire dmstatus_havereset;
-	wire dmstatus_haveresetn;
-	wire resumereq;
-	wire dmcontrol_wren;
-	wire dmcontrol_wren_Q;
-	wire execute_command_ns;
-	wire execute_command;
-	wire command_wren;
-	wire command_regno_wren;
-	wire command_transfer_din;
-	wire command_postexec_din;
-	wire [31:0] command_din;
-	wire [3:0] dbg_cmd_addr_incr;
-	wire [31:0] dbg_cmd_curr_addr;
-	wire [31:0] dbg_cmd_next_addr;
-	wire [31:0] dmi_reg_rdata_din;
-	wire [3:0] sb_state;
-	reg [3:0] sb_nxtstate;
-	reg sb_state_en;
-	wire sbcs_wren;
-	reg sbcs_sbbusy_wren;
-	reg sbcs_sbbusy_din;
-	wire sbcs_sbbusyerror_wren;
-	wire sbcs_sbbusyerror_din;
-	reg sbcs_sberror_wren;
-	reg [2:0] sbcs_sberror_din;
-	wire sbcs_unaligned;
-	wire sbcs_illegal_size;
-	wire [19:15] sbcs_reg_int;
-	wire sbdata0_reg_wren0;
-	wire sbdata0_reg_wren1;
-	wire sbdata0_reg_wren;
-	wire [31:0] sbdata0_din;
-	wire sbdata1_reg_wren0;
-	wire sbdata1_reg_wren1;
-	wire sbdata1_reg_wren;
-	wire [31:0] sbdata1_din;
-	wire sbaddress0_reg_wren0;
-	reg sbaddress0_reg_wren1;
-	wire sbaddress0_reg_wren;
-	wire [31:0] sbaddress0_reg_din;
-	wire [3:0] sbaddress0_incr;
-	wire sbreadonaddr_access;
-	wire sbreadondata_access;
-	wire sbdata0wr_access;
-	reg sb_abmem_cmd_done_in;
-	reg sb_abmem_data_done_in;
-	reg sb_abmem_cmd_done_en;
-	reg sb_abmem_data_done_en;
-	wire sb_abmem_cmd_done;
-	wire sb_abmem_data_done;
-	wire [31:0] abmem_addr;
-	wire abmem_addr_in_dccm_region;
-	wire abmem_addr_in_iccm_region;
-	wire abmem_addr_in_pic_region;
-	wire abmem_addr_core_local;
-	wire abmem_addr_external;
-	wire sb_cmd_pending;
-	wire sb_abmem_cmd_pending;
-	wire sb_abmem_cmd_write;
-	wire [2:0] sb_abmem_cmd_size;
-	wire [31:0] sb_abmem_cmd_addr;
-	wire [31:0] sb_abmem_cmd_wdata;
-	wire [2:0] sb_cmd_size;
-	wire [31:0] sb_cmd_addr;
-	wire [63:0] sb_cmd_wdata;
-	wire sb_bus_cmd_read;
-	wire sb_bus_cmd_write_addr;
-	wire sb_bus_cmd_write_data;
-	wire sb_bus_rsp_read;
-	wire sb_bus_rsp_write;
-	wire sb_bus_rsp_error;
-	wire [63:0] sb_bus_rdata;
-	wire [31:0] sbcs_reg;
-	wire [31:0] sbaddress0_reg;
-	wire [31:0] sbdata0_reg;
-	wire [31:0] sbdata1_reg;
-	wire sb_abmem_cmd_arvalid;
-	wire sb_abmem_cmd_awvalid;
-	wire sb_abmem_cmd_wvalid;
-	wire sb_abmem_read_pend;
-	wire sb_cmd_awvalid;
-	wire sb_cmd_wvalid;
-	wire sb_cmd_arvalid;
-	wire sb_read_pend;
-	wire [31:0] sb_axi_addr;
-	wire [63:0] sb_axi_wrdata;
-	wire [2:0] sb_axi_size;
-	wire dbg_dm_rst_l;
-	wire dbg_free_clken;
-	wire dbg_free_clk;
-	wire sb_free_clken;
-	wire sb_free_clk;
-	localparam [3:0] IDLE = 4'h0;
-	assign dbg_free_clken = (((((((dmi_reg_en | execute_command) | (dbg_state != IDLE)) | dbg_state_en) | dec_tlu_dbg_halted) | dec_tlu_mpc_halted_only) | dec_tlu_debug_mode) | dbg_halt_req) | clk_override;
-	localparam [3:0] SBIDLE = 4'h0;
-	assign sb_free_clken = (((dmi_reg_en | execute_command) | sb_state_en) | (sb_state != SBIDLE)) | clk_override;
-	rvoclkhdr dbg_free_cgc(
-		.en(dbg_free_clken),
-		.l1clk(dbg_free_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr sb_free_cgc(
-		.en(sb_free_clken),
-		.l1clk(sb_free_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign dbg_dm_rst_l = dbg_rst_l & (dmcontrol_reg[0] | scan_mode);
-	assign dbg_core_rst_l = ~dmcontrol_reg[1] | scan_mode;
-	assign sbcs_reg[31:29] = 3'b001;
-	assign sbcs_reg[28:23] = {6 {1'sb0}};
-	assign sbcs_reg[19:15] = {sbcs_reg_int[19], ~sbcs_reg_int[18], sbcs_reg_int[17:15]};
-	assign sbcs_reg[11:5] = 7'h20;
-	assign sbcs_reg[4:0] = 5'b01111;
-	assign sbcs_wren = (((dmi_reg_addr == 7'h38) & dmi_reg_en) & dmi_reg_wr_en) & (sb_state == SBIDLE);
-	assign sbcs_sbbusyerror_wren = (sbcs_wren & dmi_reg_wdata[22]) | ((sbcs_reg[21] & dmi_reg_en) & (((dmi_reg_wr_en & (dmi_reg_addr == 7'h39)) | (dmi_reg_addr == 7'h3c)) | (dmi_reg_addr == 7'h3d)));
-	assign sbcs_sbbusyerror_din = ~(sbcs_wren & dmi_reg_wdata[22]);
-	rvdffs #(.WIDTH(1)) sbcs_sbbusyerror_reg(
-		.din(sbcs_sbbusyerror_din),
-		.dout(sbcs_reg[22]),
-		.en(sbcs_sbbusyerror_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(sb_free_clk)
-	);
-	rvdffs #(.WIDTH(1)) sbcs_sbbusy_reg(
-		.din(sbcs_sbbusy_din),
-		.dout(sbcs_reg[21]),
-		.en(sbcs_sbbusy_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(sb_free_clk)
-	);
-	rvdffs #(.WIDTH(1)) sbcs_sbreadonaddr_reg(
-		.din(dmi_reg_wdata[20]),
-		.dout(sbcs_reg[20]),
-		.en(sbcs_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(sb_free_clk)
-	);
-	rvdffs #(.WIDTH(5)) sbcs_misc_reg(
-		.din({dmi_reg_wdata[19], ~dmi_reg_wdata[18], dmi_reg_wdata[17:15]}),
-		.dout(sbcs_reg_int[19:15]),
-		.en(sbcs_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(sb_free_clk)
-	);
-	rvdffs #(.WIDTH(3)) sbcs_error_reg(
-		.din(sbcs_sberror_din[2:0]),
-		.dout(sbcs_reg[14:12]),
-		.en(sbcs_sberror_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(sb_free_clk)
-	);
-	assign sbcs_unaligned = (((sbcs_reg[19:17] == 3'b001) & sbaddress0_reg[0]) | ((sbcs_reg[19:17] == 3'b010) & |sbaddress0_reg[1:0])) | ((sbcs_reg[19:17] == 3'b011) & |sbaddress0_reg[2:0]);
-	assign sbcs_illegal_size = sbcs_reg[19];
-	assign sbaddress0_incr[3:0] = ((({4 {sbcs_reg[19:17] == 3'h0}} & 4'b0001) | ({4 {sbcs_reg[19:17] == 3'h1}} & 4'b0010)) | ({4 {sbcs_reg[19:17] == 3'h2}} & 4'b0100)) | ({4 {sbcs_reg[19:17] == 3'h3}} & 4'b1000);
-	assign sbdata0_reg_wren0 = (dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h3c);
-	localparam [3:0] RSP_RD = 4'h7;
-	assign sbdata0_reg_wren1 = ((sb_state == RSP_RD) & sb_state_en) & ~sbcs_sberror_wren;
-	assign sbdata0_reg_wren = sbdata0_reg_wren0 | sbdata0_reg_wren1;
-	assign sbdata1_reg_wren0 = (dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h3d);
-	assign sbdata1_reg_wren1 = ((sb_state == RSP_RD) & sb_state_en) & ~sbcs_sberror_wren;
-	assign sbdata1_reg_wren = sbdata1_reg_wren0 | sbdata1_reg_wren1;
-	assign sbdata0_din[31:0] = ({32 {sbdata0_reg_wren0}} & dmi_reg_wdata[31:0]) | ({32 {sbdata0_reg_wren1}} & sb_bus_rdata[31:0]);
-	assign sbdata1_din[31:0] = ({32 {sbdata1_reg_wren0}} & dmi_reg_wdata[31:0]) | ({32 {sbdata1_reg_wren1}} & sb_bus_rdata[63:32]);
-	rvdffe #(.WIDTH(32)) dbg_sbdata0_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(sbdata0_din[31:0]),
-		.dout(sbdata0_reg[31:0]),
-		.en(sbdata0_reg_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	rvdffe #(.WIDTH(32)) dbg_sbdata1_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(sbdata1_din[31:0]),
-		.dout(sbdata1_reg[31:0]),
-		.en(sbdata1_reg_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	assign sbaddress0_reg_wren0 = (dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h39);
-	assign sbaddress0_reg_wren = sbaddress0_reg_wren0 | sbaddress0_reg_wren1;
-	assign sbaddress0_reg_din[31:0] = ({32 {sbaddress0_reg_wren0}} & dmi_reg_wdata[31:0]) | ({32 {sbaddress0_reg_wren1}} & (sbaddress0_reg[31:0] + {28'b0000000000000000000000000000, sbaddress0_incr[3:0]}));
-	rvdffe #(.WIDTH(32)) dbg_sbaddress0_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(sbaddress0_reg_din[31:0]),
-		.dout(sbaddress0_reg[31:0]),
-		.en(sbaddress0_reg_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	assign sbreadonaddr_access = ((dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h39)) & sbcs_reg[20];
-	assign sbreadondata_access = ((dmi_reg_en & ~dmi_reg_wr_en) & (dmi_reg_addr == 7'h3c)) & sbcs_reg[15];
-	assign sbdata0wr_access = (dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h3c);
-	assign dmcontrol_wren = ((dmi_reg_addr == 7'h10) & dmi_reg_en) & dmi_reg_wr_en;
-	assign dmcontrol_reg[29] = 1'b0;
-	assign dmcontrol_reg[27:2] = {26 {1'sb0}};
-	assign resumereq = (dmcontrol_reg[30] & ~dmcontrol_reg[31]) & dmcontrol_wren_Q;
-	rvdffs #(.WIDTH(4)) dmcontrolff(
-		.din({dmi_reg_wdata[31:30], dmi_reg_wdata[28], dmi_reg_wdata[1]}),
-		.dout({dmcontrol_reg[31:30], dmcontrol_reg[28], dmcontrol_reg[1]}),
-		.en(dmcontrol_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	rvdffs #(.WIDTH(1)) dmcontrol_dmactive_ff(
-		.din(dmi_reg_wdata[0]),
-		.dout(dmcontrol_reg[0]),
-		.en(dmcontrol_wren),
-		.rst_l(dbg_rst_l),
-		.clk(dbg_free_clk)
-	);
-	rvdff #(.WIDTH(1)) dmcontrol_wrenff(
-		.din(dmcontrol_wren),
-		.dout(dmcontrol_wren_Q),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	assign dmstatus_reg[31:20] = {12 {1'sb0}};
-	assign dmstatus_reg[19:18] = {2 {dmstatus_havereset}};
-	assign dmstatus_reg[15:14] = {2 {1'sb0}};
-	assign dmstatus_reg[7] = 1'b1;
-	assign dmstatus_reg[6:4] = {3 {1'sb0}};
-	assign dmstatus_reg[17:16] = {2 {dmstatus_resumeack}};
-	assign dmstatus_reg[13:12] = {2 {dmstatus_unavail}};
-	assign dmstatus_reg[11:10] = {2 {dmstatus_running}};
-	assign dmstatus_reg[9:8] = {2 {dmstatus_halted}};
-	assign dmstatus_reg[3:0] = 4'h2;
-	localparam [3:0] RESUMING = 4'h9;
-	assign dmstatus_resumeack_wren = ((dbg_state == RESUMING) & dec_tlu_resume_ack) | ((dmstatus_resumeack & resumereq) & dmstatus_halted);
-	assign dmstatus_resumeack_din = (dbg_state == RESUMING) & dec_tlu_resume_ack;
-	assign dmstatus_haveresetn_wren = ((((dmi_reg_addr == 7'h10) & dmi_reg_wdata[28]) & dmi_reg_en) & dmi_reg_wr_en) & dmcontrol_reg[0];
-	assign dmstatus_havereset = ~dmstatus_haveresetn;
-	assign dmstatus_unavail = dmcontrol_reg[1] | ~rst_l;
-	assign dmstatus_running = ~(dmstatus_unavail | dmstatus_halted);
-	rvdffs #(.WIDTH(1)) dmstatus_resumeack_reg(
-		.din(dmstatus_resumeack_din),
-		.dout(dmstatus_resumeack),
-		.en(dmstatus_resumeack_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	rvdff #(.WIDTH(1)) dmstatus_halted_reg(
-		.din(dec_tlu_dbg_halted & ~dec_tlu_mpc_halted_only),
-		.dout(dmstatus_halted),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	rvdffs #(.WIDTH(1)) dmstatus_haveresetn_reg(
-		.din(1'b1),
-		.dout(dmstatus_haveresetn),
-		.en(dmstatus_haveresetn_wren),
-		.rst_l(rst_l),
-		.clk(dbg_free_clk)
-	);
-	assign haltsum0_reg[31:1] = {31 {1'sb0}};
-	assign haltsum0_reg[0] = dmstatus_halted;
-	assign abstractcs_reg[31:13] = {19 {1'sb0}};
-	assign abstractcs_reg[11] = 1'b0;
-	assign abstractcs_reg[7:4] = {4 {1'sb0}};
-	assign abstractcs_reg[3:0] = 4'h2;
-	assign abstractcs_error_sel0 = ((abstractcs_reg[12] & ~(|abstractcs_reg[10:8])) & dmi_reg_en) & ((((dmi_reg_wr_en & ((dmi_reg_addr == 7'h16) | (dmi_reg_addr == 7'h17))) | (dmi_reg_addr == 7'h18)) | (dmi_reg_addr == 7'h04)) | (dmi_reg_addr == 7'h05));
-	assign abstractcs_error_sel1 = (execute_command & ~(|abstractcs_reg[10:8])) & (((~((command_reg[31:24] == 8'b00000000) | (command_reg[31:24] == 8'h02)) | (((command_reg[22:20] == 3'b011) | command_reg[22]) & (command_reg[31:24] == 8'h02))) | ((command_reg[22:20] != 3'b010) & ((command_reg[31:24] == 8'h00) & command_reg[17]))) | ((command_reg[31:24] == 8'h00) & command_reg[18]));
-	assign abstractcs_error_seb1 = ((core_dbg_cmd_done & core_dbg_cmd_fail) | ((execute_command & (command_reg[31:24] == 8'h00)) & (((command_reg[15:12] == 4'h1) & (command_reg[11:5] != 0)) | (command_reg[15:13] != 0)))) & ~(|abstractcs_reg[10:8]);
-	localparam [3:0] HALTED = 4'h2;
-	assign abstractcs_error_sel3 = (execute_command & (dbg_state != HALTED)) & ~(|abstractcs_reg[10:8]);
-	assign abstractcs_error_sel4 = (dbg_sb_bus_error & dbg_bus_clk_en) & ~(|abstractcs_reg[10:8]);
-	assign abstractcs_error_sel5 = ((execute_command & (command_reg[31:24] == 8'h02)) & ~(|abstractcs_reg[10:8])) & (((command_reg[22:20] == 3'b001) & data1_reg[0]) | ((command_reg[22:20] == 3'b010) & |data1_reg[1:0]));
-	assign abstractcs_error_sel6 = ((dmi_reg_addr == 7'h16) & dmi_reg_en) & dmi_reg_wr_en;
-	assign abstractcs_error_din[2:0] = (abstractcs_error_sel0 ? 3'b001 : (abstractcs_error_sel1 ? 3'b010 : (abstractcs_error_seb1 ? 3'b011 : (abstractcs_error_sel3 ? 3'b100 : (abstractcs_error_sel4 ? 3'b101 : (abstractcs_error_sel5 ? 3'b111 : (abstractcs_error_sel6 ? ~dmi_reg_wdata[10:8] & abstractcs_reg[10:8] : abstractcs_reg[10:8])))))));
-	rvdffs #(.WIDTH(1)) dmabstractcs_busy_reg(
-		.din(abstractcs_busy_din),
-		.dout(abstractcs_reg[12]),
-		.en(abstractcs_busy_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	rvdff #(.WIDTH(3)) dmabstractcs_error_reg(
-		.din(abstractcs_error_din[2:0]),
-		.dout(abstractcs_reg[10:8]),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	assign abstractauto_reg_wren = ((dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h18)) & ~abstractcs_reg[12];
-	rvdffs #(.WIDTH(2)) dbg_abstractauto_reg(
-		.din(dmi_reg_wdata[1:0]),
-		.dout(abstractauto_reg[1:0]),
-		.en(abstractauto_reg_wren),
-		.rst_l(dbg_dm_rst_l),
-		.clk(dbg_free_clk)
-	);
-	assign execute_command_ns = command_wren | ((dmi_reg_en & ~abstractcs_reg[12]) & (((dmi_reg_addr == 7'h04) & abstractauto_reg[0]) | ((dmi_reg_addr == 7'h05) & abstractauto_reg[1])));
-	assign command_wren = ((dmi_reg_addr == 7'h17) & dmi_reg_en) & dmi_reg_wr_en;
-	localparam [3:0] CMD_DONE = 4'h8;
-	assign command_regno_wren = command_wren | ((((command_reg[31:24] == 8'h00) & command_reg[19]) & (dbg_state == CMD_DONE)) & ~(|abstractcs_reg[10:8]));
-	assign command_postexec_din = (dmi_reg_wdata[31:24] == 8'h00) & dmi_reg_wdata[18];
-	assign command_transfer_din = (dmi_reg_wdata[31:24] == 8'h00) & dmi_reg_wdata[17];
-	assign command_din[31:16] = {dmi_reg_wdata[31:24], 1'b0, dmi_reg_wdata[22:19], command_postexec_din, command_transfer_din, dmi_reg_wdata[16]};
-	assign command_din[15:0] = (command_wren ? dmi_reg_wdata[15:0] : dbg_cmd_next_addr[15:0]);
-	rvdff #(.WIDTH(1)) execute_commandff(
-		.din(execute_command_ns),
-		.dout(execute_command),
-		.clk(dbg_free_clk),
-		.rst_l(dbg_dm_rst_l)
-	);
-	rvdffe #(.WIDTH(16)) dmcommand_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(command_din[31:16]),
-		.dout(command_reg[31:16]),
-		.en(command_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	rvdffe #(.WIDTH(16)) dmcommand_regno_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(command_din[15:0]),
-		.dout(command_reg[15:0]),
-		.en(command_regno_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	assign data0_reg_wren0 = (((dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h04)) & (dbg_state == HALTED)) & ~abstractcs_reg[12];
-	localparam [3:0] CORE_CMD_WAIT = 4'h4;
-	assign data0_reg_wren1 = (core_dbg_cmd_done & (dbg_state == CORE_CMD_WAIT)) & ~command_reg[16];
-	assign data0_reg_wren = (data0_reg_wren0 | data0_reg_wren1) | data0_reg_wren2;
-	assign data0_din[31:0] = (({32 {data0_reg_wren0}} & dmi_reg_wdata[31:0]) | ({32 {data0_reg_wren1}} & core_dbg_rddata[31:0])) | ({32 {data0_reg_wren2}} & sb_bus_rdata[31:0]);
-	rvdffe #(.WIDTH(32)) dbg_data0_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(data0_din[31:0]),
-		.dout(data0_reg[31:0]),
-		.en(data0_reg_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	assign data1_reg_wren0 = (((dmi_reg_en & dmi_reg_wr_en) & (dmi_reg_addr == 7'h05)) & (dbg_state == HALTED)) & ~abstractcs_reg[12];
-	assign data1_reg_wren1 = (((dbg_state == CMD_DONE) & (command_reg[31:24] == 8'h02)) & command_reg[19]) & ~(|abstractcs_reg[10:8]);
-	assign data1_reg_wren = data1_reg_wren0 | data1_reg_wren1;
-	assign data1_din[31:0] = ({32 {data1_reg_wren0}} & dmi_reg_wdata[31:0]) | ({32 {data1_reg_wren1}} & dbg_cmd_next_addr[31:0]);
-	rvdffe #(.WIDTH(32)) dbg_data1_reg(
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.din(data1_din[31:0]),
-		.dout(data1_reg[31:0]),
-		.en(data1_reg_wren),
-		.rst_l(dbg_dm_rst_l)
-	);
-	rvdffs #(.WIDTH(1)) sb_abmem_cmd_doneff(
-		.din(sb_abmem_cmd_done_in),
-		.dout(sb_abmem_cmd_done),
-		.en(sb_abmem_cmd_done_en),
-		.clk(dbg_free_clk),
-		.rst_l(dbg_dm_rst_l)
-	);
-	rvdffs #(.WIDTH(1)) sb_abmem_data_doneff(
-		.din(sb_abmem_data_done_in),
-		.dout(sb_abmem_data_done),
-		.en(sb_abmem_data_done_en),
-		.clk(dbg_free_clk),
-		.rst_l(dbg_dm_rst_l)
-	);
-	localparam [3:0] CORE_CMD_START = 4'h3;
-	localparam [3:0] HALTING = 4'h1;
-	localparam [3:0] SB_CMD_RESP = 4'h7;
-	localparam [3:0] SB_CMD_SEND = 4'h6;
-	localparam [3:0] SB_CMD_START = 4'h5;
-	always @(*) begin
-		dbg_nxtstate = IDLE;
-		dbg_state_en = 1'b0;
-		abstractcs_busy_wren = 1'b0;
-		abstractcs_busy_din = 1'b0;
-		dbg_halt_req = dmcontrol_wren_Q & dmcontrol_reg[31];
-		dbg_resume_req = 1'b0;
-		dbg_sb_bus_error = 1'b0;
-		data0_reg_wren2 = 1'b0;
-		sb_abmem_cmd_done_in = 1'b0;
-		sb_abmem_data_done_in = 1'b0;
-		sb_abmem_cmd_done_en = 1'b0;
-		sb_abmem_data_done_en = 1'b0;
-		case (dbg_state)
-			IDLE: begin
-				dbg_nxtstate = (dmstatus_reg[9] | dec_tlu_mpc_halted_only ? HALTED : HALTING);
-				dbg_state_en = (dmcontrol_reg[31] | dmstatus_reg[9]) | dec_tlu_mpc_halted_only;
-				dbg_halt_req = dmcontrol_reg[31];
-			end
-			HALTING: begin
-				dbg_nxtstate = HALTED;
-				dbg_state_en = dmstatus_reg[9] | dec_tlu_mpc_halted_only;
-			end
-			HALTED: begin
-				dbg_nxtstate = (dmstatus_reg[9] ? (resumereq ? RESUMING : ((command_reg[31:24] == 8'h02) & abmem_addr_external ? SB_CMD_START : CORE_CMD_START)) : (dmcontrol_reg[31] ? HALTING : IDLE));
-				dbg_state_en = ((dmstatus_reg[9] & resumereq) | execute_command) | ~(dmstatus_reg[9] | dec_tlu_mpc_halted_only);
-				abstractcs_busy_wren = dbg_state_en & ((dbg_nxtstate == CORE_CMD_START) | (dbg_nxtstate == SB_CMD_START));
-				abstractcs_busy_din = 1'b1;
-				dbg_resume_req = dbg_state_en & (dbg_nxtstate == RESUMING);
-			end
-			CORE_CMD_START: begin
-				dbg_nxtstate = (|abstractcs_reg[10:8] | ((command_reg[31:24] == 8'h00) & ~command_reg[17]) ? CMD_DONE : CORE_CMD_WAIT);
-				dbg_state_en = (dbg_cmd_valid | |abstractcs_reg[10:8]) | ((command_reg[31:24] == 8'h00) & ~command_reg[17]);
-			end
-			CORE_CMD_WAIT: begin
-				dbg_nxtstate = CMD_DONE;
-				dbg_state_en = core_dbg_cmd_done;
-			end
-			SB_CMD_START: begin
-				dbg_nxtstate = (|abstractcs_reg[10:8] ? CMD_DONE : SB_CMD_SEND);
-				dbg_state_en = (dbg_bus_clk_en & ~sb_cmd_pending) | |abstractcs_reg[10:8];
-			end
-			SB_CMD_SEND: begin
-				sb_abmem_cmd_done_in = 1'b1;
-				sb_abmem_data_done_in = 1'b1;
-				sb_abmem_cmd_done_en = (sb_bus_cmd_read | sb_bus_cmd_write_addr) & dbg_bus_clk_en;
-				sb_abmem_data_done_en = (sb_bus_cmd_read | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-				dbg_nxtstate = SB_CMD_RESP;
-				dbg_state_en = ((sb_abmem_cmd_done | sb_abmem_cmd_done_en) & (sb_abmem_data_done | sb_abmem_data_done_en)) & dbg_bus_clk_en;
-			end
-			SB_CMD_RESP: begin
-				dbg_nxtstate = CMD_DONE;
-				dbg_state_en = (sb_bus_rsp_read | sb_bus_rsp_write) & dbg_bus_clk_en;
-				dbg_sb_bus_error = ((sb_bus_rsp_read | sb_bus_rsp_write) & sb_bus_rsp_error) & dbg_bus_clk_en;
-				data0_reg_wren2 = (dbg_state_en & ~sb_abmem_cmd_write) & ~dbg_sb_bus_error;
-			end
-			CMD_DONE: begin
-				dbg_nxtstate = HALTED;
-				dbg_state_en = 1'b1;
-				abstractcs_busy_wren = dbg_state_en;
-				abstractcs_busy_din = 1'b0;
-				sb_abmem_cmd_done_in = 1'b0;
-				sb_abmem_data_done_in = 1'b0;
-				sb_abmem_cmd_done_en = 1'b1;
-				sb_abmem_data_done_en = 1'b1;
-			end
-			RESUMING: begin
-				dbg_nxtstate = IDLE;
-				dbg_state_en = dmstatus_reg[17];
-			end
-			default: begin
-				dbg_nxtstate = IDLE;
-				dbg_state_en = 1'b0;
-				abstractcs_busy_wren = 1'b0;
-				abstractcs_busy_din = 1'b0;
-				dbg_halt_req = 1'b0;
-				dbg_resume_req = 1'b0;
-				dbg_sb_bus_error = 1'b0;
-				data0_reg_wren2 = 1'b0;
-				sb_abmem_cmd_done_in = 1'b0;
-				sb_abmem_data_done_in = 1'b0;
-				sb_abmem_cmd_done_en = 1'b0;
-				sb_abmem_data_done_en = 1'b0;
-			end
-		endcase
-	end
-	assign dmi_reg_rdata_din[31:0] = ((((((((((({32 {dmi_reg_addr == 7'h04}} & data0_reg[31:0]) | ({32 {dmi_reg_addr == 7'h05}} & data1_reg[31:0])) | ({32 {dmi_reg_addr == 7'h10}} & {2'b00, dmcontrol_reg[29], 1'b0, dmcontrol_reg[27:0]})) | ({32 {dmi_reg_addr == 7'h11}} & dmstatus_reg[31:0])) | ({32 {dmi_reg_addr == 7'h16}} & abstractcs_reg[31:0])) | ({32 {dmi_reg_addr == 7'h17}} & command_reg[31:0])) | ({32 {dmi_reg_addr == 7'h18}} & {30'h00000000, abstractauto_reg[1:0]})) | ({32 {dmi_reg_addr == 7'h40}} & haltsum0_reg[31:0])) | ({32 {dmi_reg_addr == 7'h38}} & sbcs_reg[31:0])) | ({32 {dmi_reg_addr == 7'h39}} & sbaddress0_reg[31:0])) | ({32 {dmi_reg_addr == 7'h3c}} & sbdata0_reg[31:0])) | ({32 {dmi_reg_addr == 7'h3d}} & sbdata1_reg[31:0]);
-	rvdffs #(.WIDTH(4)) dbg_state_reg(
-		.din(dbg_nxtstate),
-		.dout({dbg_state}),
-		.en(dbg_state_en),
-		.rst_l(dbg_dm_rst_l & rst_l),
-		.clk(dbg_free_clk)
-	);
-	rvdffe #(.WIDTH(32)) dmi_rddata_reg(
-		.din(dmi_reg_rdata_din[31:0]),
-		.dout(dmi_reg_rdata[31:0]),
-		.en(dmi_reg_en),
-		.rst_l(dbg_dm_rst_l),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign abmem_addr[31:0] = data1_reg[31:0];
-	assign abmem_addr_core_local = (abmem_addr_in_dccm_region | abmem_addr_in_iccm_region) | abmem_addr_in_pic_region;
-	assign abmem_addr_external = ~abmem_addr_core_local;
-	assign abmem_addr_in_dccm_region = (abmem_addr[31:28] == pt[1333-:8]) & pt[1365-:5];
-	assign abmem_addr_in_iccm_region = (abmem_addr[31:28] == pt[895-:8]) & pt[927-:5];
-	assign abmem_addr_in_pic_region = abmem_addr[31:28] == pt[77-:8];
-	assign dbg_cmd_addr[31:0] = (command_reg[31:24] == 8'h02 ? data1_reg[31:0] : {20'b00000000000000000000, command_reg[11:0]});
-	assign dbg_cmd_wrdata[31:0] = data0_reg[31:0];
-	assign dbg_cmd_valid = ((dbg_state == CORE_CMD_START) & ~((|abstractcs_reg[10:8] | ((command_reg[31:24] == 8'h00) & ~command_reg[17])) | ((command_reg[31:24] == 8'h02) & abmem_addr_external))) & dma_dbg_ready;
-	assign dbg_cmd_write = command_reg[16];
-	assign dbg_cmd_type[1:0] = (command_reg[31:24] == 8'h02 ? 2'b10 : {1'b0, command_reg[15:12] == 4'b0000});
-	assign dbg_cmd_size[1:0] = command_reg[21:20];
-	assign dbg_cmd_addr_incr[3:0] = (command_reg[31:24] == 8'h02 ? 4'h1 << sb_abmem_cmd_size[1:0] : 4'h1);
-	assign dbg_cmd_curr_addr[31:0] = (command_reg[31:24] == 8'h02 ? data1_reg[31:0] : {16'b0000000000000000, command_reg[15:0]});
-	assign dbg_cmd_next_addr[31:0] = dbg_cmd_curr_addr[31:0] + {28'h0000000, dbg_cmd_addr_incr[3:0]};
-	assign dbg_dma_bubble = ((dbg_state == CORE_CMD_START) & ~(|abstractcs_reg[10:8])) | (dbg_state == CORE_CMD_WAIT);
-	localparam [3:0] CMD_RD = 4'h3;
-	localparam [3:0] CMD_WR = 4'h4;
-	localparam [3:0] CMD_WR_ADDR = 4'h5;
-	localparam [3:0] CMD_WR_DATA = 4'h6;
-	localparam [3:0] RSP_WR = 4'h8;
-	assign sb_cmd_pending = (((((sb_state == CMD_RD) | (sb_state == CMD_WR)) | (sb_state == CMD_WR_ADDR)) | (sb_state == CMD_WR_DATA)) | (sb_state == RSP_RD)) | (sb_state == RSP_WR);
-	assign sb_abmem_cmd_pending = ((dbg_state == SB_CMD_START) | (dbg_state == SB_CMD_SEND)) | (dbg_state == SB_CMD_RESP);
-	localparam [3:0] DONE = 4'h9;
-	localparam [3:0] WAIT_RD = 4'h1;
-	localparam [3:0] WAIT_WR = 4'h2;
-	always @(*) begin
-		sb_nxtstate = SBIDLE;
-		sb_state_en = 1'b0;
-		sbcs_sbbusy_wren = 1'b0;
-		sbcs_sbbusy_din = 1'b0;
-		sbcs_sberror_wren = 1'b0;
-		sbcs_sberror_din[2:0] = 3'b000;
-		sbaddress0_reg_wren1 = 1'b0;
-		case (sb_state)
-			SBIDLE: begin
-				sb_nxtstate = (sbdata0wr_access ? WAIT_WR : WAIT_RD);
-				sb_state_en = (((sbdata0wr_access | sbreadondata_access) | sbreadonaddr_access) & ~(|sbcs_reg[14:12])) & ~sbcs_reg[22];
-				sbcs_sbbusy_wren = sb_state_en;
-				sbcs_sbbusy_din = 1'b1;
-				sbcs_sberror_wren = sbcs_wren & |dmi_reg_wdata[14:12];
-				sbcs_sberror_din[2:0] = ~dmi_reg_wdata[14:12] & sbcs_reg[14:12];
-			end
-			WAIT_RD: begin
-				sb_nxtstate = (sbcs_unaligned | sbcs_illegal_size ? DONE : CMD_RD);
-				sb_state_en = ((dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned) | sbcs_illegal_size;
-				sbcs_sberror_wren = sbcs_unaligned | sbcs_illegal_size;
-				sbcs_sberror_din[2:0] = (sbcs_unaligned ? 3'b011 : 3'b100);
-			end
-			WAIT_WR: begin
-				sb_nxtstate = (sbcs_unaligned | sbcs_illegal_size ? DONE : CMD_WR);
-				sb_state_en = ((dbg_bus_clk_en & ~sb_abmem_cmd_pending) | sbcs_unaligned) | sbcs_illegal_size;
-				sbcs_sberror_wren = sbcs_unaligned | sbcs_illegal_size;
-				sbcs_sberror_din[2:0] = (sbcs_unaligned ? 3'b011 : 3'b100);
-			end
-			CMD_RD: begin
-				sb_nxtstate = RSP_RD;
-				sb_state_en = sb_bus_cmd_read & dbg_bus_clk_en;
-			end
-			CMD_WR: begin
-				sb_nxtstate = (sb_bus_cmd_write_addr & sb_bus_cmd_write_data ? RSP_WR : (sb_bus_cmd_write_data ? CMD_WR_ADDR : CMD_WR_DATA));
-				sb_state_en = (sb_bus_cmd_write_addr | sb_bus_cmd_write_data) & dbg_bus_clk_en;
-			end
-			CMD_WR_ADDR: begin
-				sb_nxtstate = RSP_WR;
-				sb_state_en = sb_bus_cmd_write_addr & dbg_bus_clk_en;
-			end
-			CMD_WR_DATA: begin
-				sb_nxtstate = RSP_WR;
-				sb_state_en = sb_bus_cmd_write_data & dbg_bus_clk_en;
-			end
-			RSP_RD: begin
-				sb_nxtstate = DONE;
-				sb_state_en = sb_bus_rsp_read & dbg_bus_clk_en;
-				sbcs_sberror_wren = sb_state_en & sb_bus_rsp_error;
-				sbcs_sberror_din[2:0] = 3'b010;
-			end
-			RSP_WR: begin
-				sb_nxtstate = DONE;
-				sb_state_en = sb_bus_rsp_write & dbg_bus_clk_en;
-				sbcs_sberror_wren = sb_state_en & sb_bus_rsp_error;
-				sbcs_sberror_din[2:0] = 3'b010;
-			end
-			DONE: begin
-				sb_nxtstate = SBIDLE;
-				sb_state_en = 1'b1;
-				sbcs_sbbusy_wren = 1'b1;
-				sbcs_sbbusy_din = 1'b0;
-				sbaddress0_reg_wren1 = sbcs_reg[16] & (sbcs_reg[14:12] == 3'b000);
-			end
-			default: begin
-				sb_nxtstate = SBIDLE;
-				sb_state_en = 1'b0;
-				sbcs_sbbusy_wren = 1'b0;
-				sbcs_sbbusy_din = 1'b0;
-				sbcs_sberror_wren = 1'b0;
-				sbcs_sberror_din[2:0] = 3'b000;
-				sbaddress0_reg_wren1 = 1'b0;
-			end
-		endcase
-	end
-	rvdffs #(.WIDTH(4)) sb_state_reg(
-		.din(sb_nxtstate),
-		.dout({sb_state}),
-		.en(sb_state_en),
-		.rst_l(dbg_dm_rst_l),
-		.clk(sb_free_clk)
-	);
-	assign sb_abmem_cmd_write = command_reg[16];
-	assign sb_abmem_cmd_size[2:0] = {1'b0, command_reg[21:20]};
-	assign sb_abmem_cmd_addr[31:0] = abmem_addr[31:0];
-	assign sb_abmem_cmd_wdata[31:0] = data0_reg[31:0];
-	assign sb_cmd_size[2:0] = sbcs_reg[19:17];
-	assign sb_cmd_wdata[63:0] = {sbdata1_reg[31:0], sbdata0_reg[31:0]};
-	assign sb_cmd_addr[31:0] = sbaddress0_reg[31:0];
-	assign sb_abmem_cmd_awvalid = ((dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write) & ~sb_abmem_cmd_done;
-	assign sb_abmem_cmd_wvalid = ((dbg_state == SB_CMD_SEND) & sb_abmem_cmd_write) & ~sb_abmem_data_done;
-	assign sb_abmem_cmd_arvalid = (((dbg_state == SB_CMD_SEND) & ~sb_abmem_cmd_write) & ~sb_abmem_cmd_done) & ~sb_abmem_data_done;
-	assign sb_abmem_read_pend = (dbg_state == SB_CMD_RESP) & ~sb_abmem_cmd_write;
-	assign sb_cmd_awvalid = (sb_state == CMD_WR) | (sb_state == CMD_WR_ADDR);
-	assign sb_cmd_wvalid = (sb_state == CMD_WR) | (sb_state == CMD_WR_DATA);
-	assign sb_cmd_arvalid = sb_state == CMD_RD;
-	assign sb_read_pend = sb_state == RSP_RD;
-	assign sb_axi_size[2:0] = (((sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid) | sb_abmem_cmd_arvalid) | sb_abmem_read_pend ? sb_abmem_cmd_size[2:0] : sb_cmd_size[2:0]);
-	assign sb_axi_addr[31:0] = (((sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid) | sb_abmem_cmd_arvalid) | sb_abmem_read_pend ? sb_abmem_cmd_addr[31:0] : sb_cmd_addr[31:0]);
-	assign sb_axi_wrdata[63:0] = (sb_abmem_cmd_awvalid | sb_abmem_cmd_wvalid ? {2 {sb_abmem_cmd_wdata[31:0]}} : sb_cmd_wdata[63:0]);
-	assign sb_bus_cmd_read = sb_axi_arvalid & sb_axi_arready;
-	assign sb_bus_cmd_write_addr = sb_axi_awvalid & sb_axi_awready;
-	assign sb_bus_cmd_write_data = sb_axi_wvalid & sb_axi_wready;
-	assign sb_bus_rsp_read = sb_axi_rvalid & sb_axi_rready;
-	assign sb_bus_rsp_write = sb_axi_bvalid & sb_axi_bready;
-	assign sb_bus_rsp_error = (sb_bus_rsp_read & |sb_axi_rresp[1:0]) | (sb_bus_rsp_write & |sb_axi_bresp[1:0]);
-	assign sb_axi_awvalid = sb_abmem_cmd_awvalid | sb_cmd_awvalid;
-	assign sb_axi_awaddr[31:0] = sb_axi_addr[31:0];
-	assign sb_axi_awid[pt[12-:8] - 1:0] = {pt[12-:8] {1'sb0}};
-	assign sb_axi_awsize[2:0] = sb_axi_size[2:0];
-	assign sb_axi_awprot[2:0] = 3'b001;
-	assign sb_axi_awcache[3:0] = 4'b1111;
-	assign sb_axi_awregion[3:0] = sb_axi_addr[31:28];
-	assign sb_axi_awlen[7:0] = {8 {1'sb0}};
-	assign sb_axi_awburst[1:0] = 2'b01;
-	assign sb_axi_awqos[3:0] = {4 {1'sb0}};
-	assign sb_axi_awlock = 1'b0;
-	assign sb_axi_wvalid = sb_abmem_cmd_wvalid | sb_cmd_wvalid;
-	assign sb_axi_wdata[63:0] = ((({64 {sb_axi_size[2:0] == 3'h0}} & {8 {sb_axi_wrdata[7:0]}}) | ({64 {sb_axi_size[2:0] == 3'h1}} & {4 {sb_axi_wrdata[15:0]}})) | ({64 {sb_axi_size[2:0] == 3'h2}} & {2 {sb_axi_wrdata[31:0]}})) | ({64 {sb_axi_size[2:0] == 3'h3}} & {sb_axi_wrdata[63:0]});
-	assign sb_axi_wstrb[7:0] = ((({8 {sb_axi_size[2:0] == 3'h0}} & (8'h01 << sb_axi_addr[2:0])) | ({8 {sb_axi_size[2:0] == 3'h1}} & (8'h03 << {sb_axi_addr[2:1], 1'b0}))) | ({8 {sb_axi_size[2:0] == 3'h2}} & (8'h0f << {sb_axi_addr[2], 2'b00}))) | ({8 {sb_axi_size[2:0] == 3'h3}} & 8'hff);
-	assign sb_axi_wlast = 1'b1;
-	assign sb_axi_arvalid = sb_abmem_cmd_arvalid | sb_cmd_arvalid;
-	assign sb_axi_araddr[31:0] = sb_axi_addr[31:0];
-	assign sb_axi_arid[pt[12-:8] - 1:0] = {pt[12-:8] {1'sb0}};
-	assign sb_axi_arsize[2:0] = sb_axi_size[2:0];
-	assign sb_axi_arprot[2:0] = 3'b001;
-	assign sb_axi_arcache[3:0] = 4'b0000;
-	assign sb_axi_arregion[3:0] = sb_axi_addr[31:28];
-	assign sb_axi_arlen[7:0] = {8 {1'sb0}};
-	assign sb_axi_arburst[1:0] = 2'b01;
-	assign sb_axi_arqos[3:0] = {4 {1'sb0}};
-	assign sb_axi_arlock = 1'b0;
-	assign sb_axi_bready = 1'b1;
-	assign sb_axi_rready = 1'b1;
-	assign sb_bus_rdata[63:0] = ((({64 {sb_axi_size == 3'h0}} & ((sb_axi_rdata[63:0] >> (8 * sb_axi_addr[2:0])) & 64'h00000000000000ff)) | ({64 {sb_axi_size == 3'h1}} & ((sb_axi_rdata[63:0] >> (16 * sb_axi_addr[2:1])) & 64'h000000000000ffff))) | ({64 {sb_axi_size == 3'h2}} & ((sb_axi_rdata[63:0] >> (32 * sb_axi_addr[2])) & 64'h00000000ffffffff))) | ({64 {sb_axi_size == 3'h3}} & sb_axi_rdata[63:0]);
-endmodule
-module eb1_dec (
-	clk,
-	active_clk,
-	free_clk,
-	free_l2clk,
-	lsu_fastint_stall_any,
-	dec_extint_stall,
-	dec_i0_decode_d,
-	dec_pause_state_cg,
-	dec_tlu_core_empty,
-	rst_l,
-	rst_vec,
-	nmi_int,
-	nmi_vec,
-	i_cpu_halt_req,
-	i_cpu_run_req,
-	o_cpu_halt_status,
-	o_cpu_halt_ack,
-	o_cpu_run_ack,
-	o_debug_mode_status,
-	core_id,
-	mpc_debug_halt_req,
-	mpc_debug_run_req,
-	mpc_reset_run_req,
-	mpc_debug_halt_ack,
-	mpc_debug_run_ack,
-	debug_brkpt_status,
-	exu_pmu_i0_br_misp,
-	exu_pmu_i0_br_ataken,
-	exu_pmu_i0_pc4,
-	lsu_nonblock_load_valid_m,
-	lsu_nonblock_load_tag_m,
-	lsu_nonblock_load_inv_r,
-	lsu_nonblock_load_inv_tag_r,
-	lsu_nonblock_load_data_valid,
-	lsu_nonblock_load_data_error,
-	lsu_nonblock_load_data_tag,
-	lsu_nonblock_load_data,
-	lsu_pmu_bus_trxn,
-	lsu_pmu_bus_misaligned,
-	lsu_pmu_bus_error,
-	lsu_pmu_bus_busy,
-	lsu_pmu_misaligned_m,
-	lsu_pmu_load_external_m,
-	lsu_pmu_store_external_m,
-	dma_pmu_dccm_read,
-	dma_pmu_dccm_write,
-	dma_pmu_any_read,
-	dma_pmu_any_write,
-	lsu_fir_addr,
-	lsu_fir_error,
-	ifu_pmu_instr_aligned,
-	ifu_pmu_fetch_stall,
-	ifu_pmu_ic_miss,
-	ifu_pmu_ic_hit,
-	ifu_pmu_bus_error,
-	ifu_pmu_bus_busy,
-	ifu_pmu_bus_trxn,
-	ifu_ic_error_start,
-	ifu_iccm_rd_ecc_single_err,
-	lsu_trigger_match_m,
-	dbg_cmd_valid,
-	dbg_cmd_write,
-	dbg_cmd_type,
-	dbg_cmd_addr,
-	dbg_cmd_wrdata,
-	ifu_i0_icaf,
-	ifu_i0_icaf_type,
-	ifu_i0_icaf_second,
-	ifu_i0_dbecc,
-	lsu_idle_any,
-	i0_brp,
-	ifu_i0_bp_index,
-	ifu_i0_bp_fghr,
-	ifu_i0_bp_btag,
-	ifu_i0_fa_index,
-	lsu_error_pkt_r,
-	lsu_single_ecc_error_incr,
-	lsu_imprecise_error_load_any,
-	lsu_imprecise_error_store_any,
-	lsu_imprecise_error_addr_any,
-	exu_div_result,
-	exu_div_wren,
-	exu_csr_rs1_x,
-	lsu_result_m,
-	lsu_result_corr_r,
-	lsu_load_stall_any,
-	lsu_store_stall_any,
-	dma_dccm_stall_any,
-	dma_iccm_stall_any,
-	iccm_dma_sb_error,
-	exu_flush_final,
-	exu_npc_r,
-	exu_i0_result_x,
-	ifu_i0_valid,
-	ifu_i0_instr,
-	ifu_i0_pc,
-	ifu_i0_pc4,
-	exu_i0_pc_x,
-	mexintpend,
-	timer_int,
-	soft_int,
-	pic_claimid,
-	pic_pl,
-	mhwakeup,
-	dec_tlu_meicurpl,
-	dec_tlu_meipt,
-	ifu_ic_debug_rd_data,
-	ifu_ic_debug_rd_data_valid,
-	dec_tlu_ic_diag_pkt,
-	dbg_halt_req,
-	dbg_resume_req,
-	ifu_miss_state_idle,
-	dec_tlu_dbg_halted,
-	dec_tlu_debug_mode,
-	dec_tlu_resume_ack,
-	dec_tlu_flush_noredir_r,
-	dec_tlu_mpc_halted_only,
-	dec_tlu_flush_leak_one_r,
-	dec_tlu_flush_err_r,
-	dec_tlu_meihap,
-	dec_debug_wdata_rs1_d,
-	dec_dbg_rddata,
-	dec_dbg_cmd_done,
-	dec_dbg_cmd_fail,
-	trigger_pkt_any,
-	dec_tlu_force_halt,
-	exu_i0_br_hist_r,
-	exu_i0_br_error_r,
-	exu_i0_br_start_error_r,
-	exu_i0_br_valid_r,
-	exu_i0_br_mp_r,
-	exu_i0_br_middle_r,
-	exu_i0_br_way_r,
-	dec_i0_rs1_en_d,
-	dec_i0_rs2_en_d,
-	gpr_i0_rs1_d,
-	gpr_i0_rs2_d,
-	dec_i0_immed_d,
-	dec_i0_br_immed_d,
-	i0_ap,
-	dec_i0_alu_decode_d,
-	dec_i0_branch_d,
-	dec_i0_select_pc_d,
-	dec_i0_pc_d,
-	dec_i0_rs1_bypass_en_d,
-	dec_i0_rs2_bypass_en_d,
-	dec_i0_result_r,
-	lsu_p,
-	dec_qual_lsu_d,
-	mul_p,
-	div_p,
-	dec_div_cancel,
-	dec_lsu_offset_d,
-	dec_csr_ren_d,
-	dec_csr_rddata_d,
-	dec_tlu_flush_lower_r,
-	dec_tlu_flush_lower_wb,
-	dec_tlu_flush_path_r,
-	dec_tlu_i0_kill_writeb_r,
-	dec_tlu_fence_i_r,
-	pred_correct_npc_x,
-	dec_tlu_br0_r_pkt,
-	dec_tlu_perfcnt0,
-	dec_tlu_perfcnt1,
-	dec_tlu_perfcnt2,
-	dec_tlu_perfcnt3,
-	dec_i0_predict_p_d,
-	i0_predict_fghr_d,
-	i0_predict_index_d,
-	i0_predict_btag_d,
-	dec_fa_error_index,
-	dec_lsu_valid_raw_d,
-	dec_tlu_mrac_ff,
-	dec_data_en,
-	dec_ctl_en,
-	ifu_i0_cinst,
-	trace_rv_trace_pkt,
-	dec_tlu_external_ldfwd_disable,
-	dec_tlu_sideeffect_posted_disable,
-	dec_tlu_core_ecc_disable,
-	dec_tlu_bpred_disable,
-	dec_tlu_wb_coalescing_disable,
-	dec_tlu_dma_qos_prty,
-	dec_tlu_misc_clk_override,
-	dec_tlu_ifu_clk_override,
-	dec_tlu_lsu_clk_override,
-	dec_tlu_bus_clk_override,
-	dec_tlu_pic_clk_override,
-	dec_tlu_picio_clk_override,
-	dec_tlu_dccm_clk_override,
-	dec_tlu_icm_clk_override,
-	dec_tlu_i0_commit_cmt,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire active_clk;
-	input wire free_clk;
-	input wire free_l2clk;
-	input wire lsu_fastint_stall_any;
-	output wire dec_extint_stall;
-	output wire dec_i0_decode_d;
-	output wire dec_pause_state_cg;
-	output wire dec_tlu_core_empty;
-	input wire rst_l;
-	input wire [31:1] rst_vec;
-	input wire nmi_int;
-	input wire [31:1] nmi_vec;
-	input wire i_cpu_halt_req;
-	input wire i_cpu_run_req;
-	output wire o_cpu_halt_status;
-	output wire o_cpu_halt_ack;
-	output wire o_cpu_run_ack;
-	output wire o_debug_mode_status;
-	input wire [31:4] core_id;
-	input wire mpc_debug_halt_req;
-	input wire mpc_debug_run_req;
-	input wire mpc_reset_run_req;
-	output wire mpc_debug_halt_ack;
-	output wire mpc_debug_run_ack;
-	output wire debug_brkpt_status;
-	input wire exu_pmu_i0_br_misp;
-	input wire exu_pmu_i0_br_ataken;
-	input wire exu_pmu_i0_pc4;
-	input wire lsu_nonblock_load_valid_m;
-	input wire [pt[164-:7] - 1:0] lsu_nonblock_load_tag_m;
-	input wire lsu_nonblock_load_inv_r;
-	input wire [pt[164-:7] - 1:0] lsu_nonblock_load_inv_tag_r;
-	input wire lsu_nonblock_load_data_valid;
-	input wire lsu_nonblock_load_data_error;
-	input wire [pt[164-:7] - 1:0] lsu_nonblock_load_data_tag;
-	input wire [31:0] lsu_nonblock_load_data;
-	input wire lsu_pmu_bus_trxn;
-	input wire lsu_pmu_bus_misaligned;
-	input wire lsu_pmu_bus_error;
-	input wire lsu_pmu_bus_busy;
-	input wire lsu_pmu_misaligned_m;
-	input wire lsu_pmu_load_external_m;
-	input wire lsu_pmu_store_external_m;
-	input wire dma_pmu_dccm_read;
-	input wire dma_pmu_dccm_write;
-	input wire dma_pmu_any_read;
-	input wire dma_pmu_any_write;
-	input wire [31:1] lsu_fir_addr;
-	input wire [1:0] lsu_fir_error;
-	input wire ifu_pmu_instr_aligned;
-	input wire ifu_pmu_fetch_stall;
-	input wire ifu_pmu_ic_miss;
-	input wire ifu_pmu_ic_hit;
-	input wire ifu_pmu_bus_error;
-	input wire ifu_pmu_bus_busy;
-	input wire ifu_pmu_bus_trxn;
-	input wire ifu_ic_error_start;
-	input wire ifu_iccm_rd_ecc_single_err;
-	input wire [3:0] lsu_trigger_match_m;
-	input wire dbg_cmd_valid;
-	input wire dbg_cmd_write;
-	input wire [1:0] dbg_cmd_type;
-	input wire [31:0] dbg_cmd_addr;
-	input wire [1:0] dbg_cmd_wrdata;
-	input wire ifu_i0_icaf;
-	input wire [1:0] ifu_i0_icaf_type;
-	input wire ifu_i0_icaf_second;
-	input wire ifu_i0_dbecc;
-	input wire lsu_idle_any;
-	input wire [50:0] i0_brp;
-	input wire [pt[2172-:9]:pt[2163-:6]] ifu_i0_bp_index;
-	input wire [pt[2236-:8] - 1:0] ifu_i0_bp_fghr;
-	input wire [pt[2139-:9] - 1:0] ifu_i0_bp_btag;
-	input wire [$clog2(pt[2061-:14]) - 1:0] ifu_i0_fa_index;
-	input wire [39:0] lsu_error_pkt_r;
-	input wire lsu_single_ecc_error_incr;
-	input wire lsu_imprecise_error_load_any;
-	input wire lsu_imprecise_error_store_any;
-	input wire [31:0] lsu_imprecise_error_addr_any;
-	input wire [31:0] exu_div_result;
-	input wire exu_div_wren;
-	input wire [31:0] exu_csr_rs1_x;
-	input wire [31:0] lsu_result_m;
-	input wire [31:0] lsu_result_corr_r;
-	input wire lsu_load_stall_any;
-	input wire lsu_store_stall_any;
-	input wire dma_dccm_stall_any;
-	input wire dma_iccm_stall_any;
-	input wire iccm_dma_sb_error;
-	input wire exu_flush_final;
-	input wire [31:1] exu_npc_r;
-	input wire [31:0] exu_i0_result_x;
-	input wire ifu_i0_valid;
-	input wire [31:0] ifu_i0_instr;
-	input wire [31:1] ifu_i0_pc;
-	input wire ifu_i0_pc4;
-	input wire [31:1] exu_i0_pc_x;
-	input wire mexintpend;
-	input wire timer_int;
-	input wire soft_int;
-	input wire [7:0] pic_claimid;
-	input wire [3:0] pic_pl;
-	input wire mhwakeup;
-	output wire [3:0] dec_tlu_meicurpl;
-	output wire [3:0] dec_tlu_meipt;
-	input wire [70:0] ifu_ic_debug_rd_data;
-	input wire ifu_ic_debug_rd_data_valid;
-	output wire [89:0] dec_tlu_ic_diag_pkt;
-	input wire dbg_halt_req;
-	input wire dbg_resume_req;
-	input wire ifu_miss_state_idle;
-	output wire dec_tlu_dbg_halted;
-	output wire dec_tlu_debug_mode;
-	output wire dec_tlu_resume_ack;
-	output wire dec_tlu_flush_noredir_r;
-	output wire dec_tlu_mpc_halted_only;
-	output wire dec_tlu_flush_leak_one_r;
-	output wire dec_tlu_flush_err_r;
-	output wire [31:2] dec_tlu_meihap;
-	output wire dec_debug_wdata_rs1_d;
-	output wire [31:0] dec_dbg_rddata;
-	output wire dec_dbg_cmd_done;
-	output wire dec_dbg_cmd_fail;
-	output wire [151:0] trigger_pkt_any;
-	output wire dec_tlu_force_halt;
-	input wire [1:0] exu_i0_br_hist_r;
-	input wire exu_i0_br_error_r;
-	input wire exu_i0_br_start_error_r;
-	input wire exu_i0_br_valid_r;
-	input wire exu_i0_br_mp_r;
-	input wire exu_i0_br_middle_r;
-	input wire exu_i0_br_way_r;
-	output wire dec_i0_rs1_en_d;
-	output wire dec_i0_rs2_en_d;
-	output wire [31:0] gpr_i0_rs1_d;
-	output wire [31:0] gpr_i0_rs2_d;
-	output wire [31:0] dec_i0_immed_d;
-	output wire [12:1] dec_i0_br_immed_d;
-	output wire [43:0] i0_ap;
-	output wire dec_i0_alu_decode_d;
-	output wire dec_i0_branch_d;
-	output wire dec_i0_select_pc_d;
-	output wire [31:1] dec_i0_pc_d;
-	output wire [3:0] dec_i0_rs1_bypass_en_d;
-	output wire [3:0] dec_i0_rs2_bypass_en_d;
-	output wire [31:0] dec_i0_result_r;
-	output wire [13:0] lsu_p;
-	output wire dec_qual_lsu_d;
-	output wire [19:0] mul_p;
-	output wire [2:0] div_p;
-	output wire dec_div_cancel;
-	output wire [11:0] dec_lsu_offset_d;
-	output wire dec_csr_ren_d;
-	output wire [31:0] dec_csr_rddata_d;
-	output wire dec_tlu_flush_lower_r;
-	output wire dec_tlu_flush_lower_wb;
-	output wire [31:1] dec_tlu_flush_path_r;
-	output wire dec_tlu_i0_kill_writeb_r;
-	output wire dec_tlu_fence_i_r;
-	output wire [31:1] pred_correct_npc_x;
-	output wire [6:0] dec_tlu_br0_r_pkt;
-	output wire dec_tlu_perfcnt0;
-	output wire dec_tlu_perfcnt1;
-	output wire dec_tlu_perfcnt2;
-	output wire dec_tlu_perfcnt3;
-	output wire [55:0] dec_i0_predict_p_d;
-	output wire [pt[2236-:8] - 1:0] i0_predict_fghr_d;
-	output wire [pt[2172-:9]:pt[2163-:6]] i0_predict_index_d;
-	output wire [pt[2139-:9] - 1:0] i0_predict_btag_d;
-	output wire [$clog2(pt[2061-:14]) - 1:0] dec_fa_error_index;
-	output wire dec_lsu_valid_raw_d;
-	output wire [31:0] dec_tlu_mrac_ff;
-	output wire [1:0] dec_data_en;
-	output wire [1:0] dec_ctl_en;
-	input wire [15:0] ifu_i0_cinst;
-	output wire [103:0] trace_rv_trace_pkt;
-	output wire dec_tlu_external_ldfwd_disable;
-	output wire dec_tlu_sideeffect_posted_disable;
-	output wire dec_tlu_core_ecc_disable;
-	output wire dec_tlu_bpred_disable;
-	output wire dec_tlu_wb_coalescing_disable;
-	output wire [2:0] dec_tlu_dma_qos_prty;
-	output wire dec_tlu_misc_clk_override;
-	output wire dec_tlu_ifu_clk_override;
-	output wire dec_tlu_lsu_clk_override;
-	output wire dec_tlu_bus_clk_override;
-	output wire dec_tlu_pic_clk_override;
-	output wire dec_tlu_picio_clk_override;
-	output wire dec_tlu_dccm_clk_override;
-	output wire dec_tlu_icm_clk_override;
-	output wire dec_tlu_i0_commit_cmt;
-	input wire scan_mode;
-	wire dec_tlu_dec_clk_override;
-	wire clk_override;
-	wire dec_ib0_valid_d;
-	wire dec_pmu_instr_decoded;
-	wire dec_pmu_decode_stall;
-	wire dec_pmu_presync_stall;
-	wire dec_pmu_postsync_stall;
-	wire dec_tlu_wr_pause_r;
-	wire [4:0] dec_i0_rs1_d;
-	wire [4:0] dec_i0_rs2_d;
-	wire [31:0] dec_i0_instr_d;
-	wire dec_tlu_trace_disable;
-	wire dec_tlu_pipelining_disable;
-	wire [4:0] dec_i0_waddr_r;
-	wire dec_i0_wen_r;
-	wire [31:0] dec_i0_wdata_r;
-	wire dec_csr_wen_r;
-	wire [11:0] dec_csr_wraddr_r;
-	wire [31:0] dec_csr_wrdata_r;
-	wire [11:0] dec_csr_rdaddr_d;
-	wire dec_csr_legal_d;
-	wire dec_csr_wen_unq_d;
-	wire dec_csr_any_unq_d;
-	wire dec_csr_stall_int_ff;
-	wire [16:0] dec_tlu_packet_r;
-	wire dec_i0_pc4_d;
-	wire dec_tlu_presync_d;
-	wire dec_tlu_postsync_d;
-	wire dec_tlu_debug_stall;
-	wire [31:0] dec_illegal_inst;
-	wire dec_i0_icaf_d;
-	wire dec_i0_dbecc_d;
-	wire dec_i0_icaf_second_d;
-	wire [3:0] dec_i0_trigger_match_d;
-	wire dec_debug_fence_d;
-	wire dec_nonblock_load_wen;
-	wire [4:0] dec_nonblock_load_waddr;
-	wire dec_tlu_flush_pause_r;
-	wire [50:0] dec_i0_brp;
-	wire [pt[2172-:9]:pt[2163-:6]] dec_i0_bp_index;
-	wire [pt[2236-:8] - 1:0] dec_i0_bp_fghr;
-	wire [pt[2139-:9] - 1:0] dec_i0_bp_btag;
-	wire [$clog2(pt[2061-:14]) - 1:0] dec_i0_bp_fa_index;
-	wire [31:1] dec_tlu_i0_pc_r;
-	wire dec_tlu_i0_kill_writeb_wb;
-	wire dec_tlu_i0_valid_r;
-	wire dec_pause_state;
-	wire [1:0] dec_i0_icaf_type_d;
-	wire dec_tlu_flush_extint;
-	wire [31:0] dec_i0_inst_wb;
-	wire [31:1] dec_i0_pc_wb;
-	wire dec_tlu_i0_valid_wb1;
-	wire dec_tlu_int_valid_wb1;
-	wire [4:0] dec_tlu_exc_cause_wb1;
-	wire [31:0] dec_tlu_mtval_wb1;
-	wire dec_tlu_i0_exc_valid_wb1;
-	wire [4:0] div_waddr_wb;
-	wire dec_div_active;
-	wire dec_debug_valid_d;
-	assign clk_override = dec_tlu_dec_clk_override;
-	assign dec_dbg_rddata[31:0] = dec_i0_wdata_r[31:0];
-	eb1_dec_ib_ctl #(.pt(pt)) instbuff(
-		.dbg_cmd_valid(dbg_cmd_valid),
-		.dbg_cmd_write(dbg_cmd_write),
-		.dbg_cmd_type(dbg_cmd_type),
-		.dbg_cmd_addr(dbg_cmd_addr),
-		.i0_brp(i0_brp),
-		.ifu_i0_bp_index(ifu_i0_bp_index),
-		.ifu_i0_bp_fghr(ifu_i0_bp_fghr),
-		.ifu_i0_bp_btag(ifu_i0_bp_btag),
-		.ifu_i0_fa_index(ifu_i0_fa_index),
-		.ifu_i0_pc4(ifu_i0_pc4),
-		.ifu_i0_valid(ifu_i0_valid),
-		.ifu_i0_icaf(ifu_i0_icaf),
-		.ifu_i0_icaf_type(ifu_i0_icaf_type),
-		.ifu_i0_icaf_second(ifu_i0_icaf_second),
-		.ifu_i0_dbecc(ifu_i0_dbecc),
-		.ifu_i0_instr(ifu_i0_instr),
-		.ifu_i0_pc(ifu_i0_pc),
-		.dec_ib0_valid_d(dec_ib0_valid_d),
-		.dec_debug_valid_d(dec_debug_valid_d),
-		.dec_i0_instr_d(dec_i0_instr_d),
-		.dec_i0_pc_d(dec_i0_pc_d),
-		.dec_i0_pc4_d(dec_i0_pc4_d),
-		.dec_i0_brp(dec_i0_brp),
-		.dec_i0_bp_index(dec_i0_bp_index),
-		.dec_i0_bp_fghr(dec_i0_bp_fghr),
-		.dec_i0_bp_btag(dec_i0_bp_btag),
-		.dec_i0_bp_fa_index(dec_i0_bp_fa_index),
-		.dec_i0_icaf_d(dec_i0_icaf_d),
-		.dec_i0_icaf_second_d(dec_i0_icaf_second_d),
-		.dec_i0_icaf_type_d(dec_i0_icaf_type_d),
-		.dec_i0_dbecc_d(dec_i0_dbecc_d),
-		.dec_debug_wdata_rs1_d(dec_debug_wdata_rs1_d),
-		.dec_debug_fence_d(dec_debug_fence_d)
-	);
-	eb1_dec_decode_ctl #(.pt(pt)) decode(
-		.dec_tlu_trace_disable(dec_tlu_trace_disable),
-		.dec_debug_valid_d(dec_debug_valid_d),
-		.dec_tlu_flush_extint(dec_tlu_flush_extint),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.dec_extint_stall(dec_extint_stall),
-		.ifu_i0_cinst(ifu_i0_cinst),
-		.dec_i0_inst_wb(dec_i0_inst_wb),
-		.dec_i0_pc_wb(dec_i0_pc_wb),
-		.lsu_nonblock_load_valid_m(lsu_nonblock_load_valid_m),
-		.lsu_nonblock_load_tag_m(lsu_nonblock_load_tag_m),
-		.lsu_nonblock_load_inv_r(lsu_nonblock_load_inv_r),
-		.lsu_nonblock_load_inv_tag_r(lsu_nonblock_load_inv_tag_r),
-		.lsu_nonblock_load_data_valid(lsu_nonblock_load_data_valid),
-		.lsu_nonblock_load_data_error(lsu_nonblock_load_data_error),
-		.lsu_nonblock_load_data_tag(lsu_nonblock_load_data_tag),
-		.dec_i0_trigger_match_d(dec_i0_trigger_match_d),
-		.dec_tlu_wr_pause_r(dec_tlu_wr_pause_r),
-		.dec_tlu_pipelining_disable(dec_tlu_pipelining_disable),
-		.lsu_trigger_match_m(lsu_trigger_match_m),
-		.lsu_pmu_misaligned_m(lsu_pmu_misaligned_m),
-		.dec_tlu_debug_stall(dec_tlu_debug_stall),
-		.dec_tlu_flush_leak_one_r(dec_tlu_flush_leak_one_r),
-		.dec_debug_fence_d(dec_debug_fence_d),
-		.dbg_cmd_wrdata(dbg_cmd_wrdata),
-		.dec_i0_icaf_d(dec_i0_icaf_d),
-		.dec_i0_icaf_second_d(dec_i0_icaf_second_d),
-		.dec_i0_icaf_type_d(dec_i0_icaf_type_d),
-		.dec_i0_dbecc_d(dec_i0_dbecc_d),
-		.dec_i0_brp(dec_i0_brp),
-		.dec_i0_bp_index(dec_i0_bp_index),
-		.dec_i0_bp_fghr(dec_i0_bp_fghr),
-		.dec_i0_bp_btag(dec_i0_bp_btag),
-		.dec_i0_bp_fa_index(dec_i0_bp_fa_index),
-		.lsu_idle_any(lsu_idle_any),
-		.lsu_load_stall_any(lsu_load_stall_any),
-		.lsu_store_stall_any(lsu_store_stall_any),
-		.dma_dccm_stall_any(dma_dccm_stall_any),
-		.exu_div_wren(exu_div_wren),
-		.dec_tlu_i0_kill_writeb_wb(dec_tlu_i0_kill_writeb_wb),
-		.dec_tlu_flush_lower_wb(dec_tlu_flush_lower_wb),
-		.dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-		.dec_tlu_flush_lower_r(dec_tlu_flush_lower_r),
-		.dec_tlu_flush_pause_r(dec_tlu_flush_pause_r),
-		.dec_tlu_presync_d(dec_tlu_presync_d),
-		.dec_tlu_postsync_d(dec_tlu_postsync_d),
-		.dec_i0_pc4_d(dec_i0_pc4_d),
-		.dec_csr_rddata_d(dec_csr_rddata_d),
-		.dec_csr_legal_d(dec_csr_legal_d),
-		.exu_csr_rs1_x(exu_csr_rs1_x),
-		.lsu_result_m(lsu_result_m),
-		.lsu_result_corr_r(lsu_result_corr_r),
-		.exu_flush_final(exu_flush_final),
-		.exu_i0_pc_x(exu_i0_pc_x),
-		.dec_i0_instr_d(dec_i0_instr_d),
-		.dec_ib0_valid_d(dec_ib0_valid_d),
-		.exu_i0_result_x(exu_i0_result_x),
-		.clk(clk),
-		.active_clk(active_clk),
-		.free_l2clk(free_l2clk),
-		.clk_override(clk_override),
-		.rst_l(rst_l),
-		.dec_i0_rs1_en_d(dec_i0_rs1_en_d),
-		.dec_i0_rs2_en_d(dec_i0_rs2_en_d),
-		.dec_i0_rs1_d(dec_i0_rs1_d),
-		.dec_i0_rs2_d(dec_i0_rs2_d),
-		.dec_i0_immed_d(dec_i0_immed_d),
-		.dec_i0_br_immed_d(dec_i0_br_immed_d),
-		.i0_ap(i0_ap),
-		.dec_i0_decode_d(dec_i0_decode_d),
-		.dec_i0_alu_decode_d(dec_i0_alu_decode_d),
-		.dec_i0_branch_d(dec_i0_branch_d),
-		.dec_i0_waddr_r(dec_i0_waddr_r),
-		.dec_i0_wen_r(dec_i0_wen_r),
-		.dec_i0_wdata_r(dec_i0_wdata_r),
-		.dec_i0_select_pc_d(dec_i0_select_pc_d),
-		.dec_i0_rs1_bypass_en_d(dec_i0_rs1_bypass_en_d),
-		.dec_i0_rs2_bypass_en_d(dec_i0_rs2_bypass_en_d),
-		.dec_i0_result_r(dec_i0_result_r),
-		.lsu_p(lsu_p),
-		.dec_qual_lsu_d(dec_qual_lsu_d),
-		.mul_p(mul_p),
-		.div_p(div_p),
-		.div_waddr_wb(div_waddr_wb),
-		.dec_div_cancel(dec_div_cancel),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.dec_lsu_offset_d(dec_lsu_offset_d),
-		.dec_csr_ren_d(dec_csr_ren_d),
-		.dec_csr_wen_unq_d(dec_csr_wen_unq_d),
-		.dec_csr_any_unq_d(dec_csr_any_unq_d),
-		.dec_csr_rdaddr_d(dec_csr_rdaddr_d),
-		.dec_csr_wen_r(dec_csr_wen_r),
-		.dec_csr_wraddr_r(dec_csr_wraddr_r),
-		.dec_csr_wrdata_r(dec_csr_wrdata_r),
-		.dec_csr_stall_int_ff(dec_csr_stall_int_ff),
-		.dec_tlu_i0_valid_r(dec_tlu_i0_valid_r),
-		.dec_tlu_packet_r(dec_tlu_packet_r),
-		.dec_tlu_i0_pc_r(dec_tlu_i0_pc_r),
-		.dec_illegal_inst(dec_illegal_inst),
-		.pred_correct_npc_x(pred_correct_npc_x),
-		.dec_i0_predict_p_d(dec_i0_predict_p_d),
-		.i0_predict_fghr_d(i0_predict_fghr_d),
-		.i0_predict_index_d(i0_predict_index_d),
-		.i0_predict_btag_d(i0_predict_btag_d),
-		.dec_fa_error_index(dec_fa_error_index),
-		.dec_data_en(dec_data_en),
-		.dec_ctl_en(dec_ctl_en),
-		.dec_pmu_instr_decoded(dec_pmu_instr_decoded),
-		.dec_pmu_decode_stall(dec_pmu_decode_stall),
-		.dec_pmu_presync_stall(dec_pmu_presync_stall),
-		.dec_pmu_postsync_stall(dec_pmu_postsync_stall),
-		.dec_nonblock_load_wen(dec_nonblock_load_wen),
-		.dec_nonblock_load_waddr(dec_nonblock_load_waddr),
-		.dec_pause_state(dec_pause_state),
-		.dec_pause_state_cg(dec_pause_state_cg),
-		.dec_div_active(dec_div_active),
-		.scan_mode(scan_mode)
-	);
-	eb1_dec_tlu_ctl #(.pt(pt)) tlu(
-		.clk(clk),
-		.free_clk(free_clk),
-		.free_l2clk(free_l2clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.rst_vec(rst_vec),
-		.nmi_int(nmi_int),
-		.nmi_vec(nmi_vec),
-		.i_cpu_halt_req(i_cpu_halt_req),
-		.i_cpu_run_req(i_cpu_run_req),
-		.lsu_fastint_stall_any(lsu_fastint_stall_any),
-		.ifu_pmu_instr_aligned(ifu_pmu_instr_aligned),
-		.ifu_pmu_fetch_stall(ifu_pmu_fetch_stall),
-		.ifu_pmu_ic_miss(ifu_pmu_ic_miss),
-		.ifu_pmu_ic_hit(ifu_pmu_ic_hit),
-		.ifu_pmu_bus_error(ifu_pmu_bus_error),
-		.ifu_pmu_bus_busy(ifu_pmu_bus_busy),
-		.ifu_pmu_bus_trxn(ifu_pmu_bus_trxn),
-		.dec_pmu_instr_decoded(dec_pmu_instr_decoded),
-		.dec_pmu_decode_stall(dec_pmu_decode_stall),
-		.dec_pmu_presync_stall(dec_pmu_presync_stall),
-		.dec_pmu_postsync_stall(dec_pmu_postsync_stall),
-		.lsu_store_stall_any(lsu_store_stall_any),
-		.dma_dccm_stall_any(dma_dccm_stall_any),
-		.dma_iccm_stall_any(dma_iccm_stall_any),
-		.exu_pmu_i0_br_misp(exu_pmu_i0_br_misp),
-		.exu_pmu_i0_br_ataken(exu_pmu_i0_br_ataken),
-		.exu_pmu_i0_pc4(exu_pmu_i0_pc4),
-		.lsu_pmu_bus_trxn(lsu_pmu_bus_trxn),
-		.lsu_pmu_bus_misaligned(lsu_pmu_bus_misaligned),
-		.lsu_pmu_bus_error(lsu_pmu_bus_error),
-		.lsu_pmu_bus_busy(lsu_pmu_bus_busy),
-		.lsu_pmu_load_external_m(lsu_pmu_load_external_m),
-		.lsu_pmu_store_external_m(lsu_pmu_store_external_m),
-		.dma_pmu_dccm_read(dma_pmu_dccm_read),
-		.dma_pmu_dccm_write(dma_pmu_dccm_write),
-		.dma_pmu_any_read(dma_pmu_any_read),
-		.dma_pmu_any_write(dma_pmu_any_write),
-		.lsu_fir_addr(lsu_fir_addr),
-		.lsu_fir_error(lsu_fir_error),
-		.iccm_dma_sb_error(iccm_dma_sb_error),
-		.lsu_error_pkt_r(lsu_error_pkt_r),
-		.lsu_single_ecc_error_incr(lsu_single_ecc_error_incr),
-		.dec_pause_state(dec_pause_state),
-		.lsu_imprecise_error_store_any(lsu_imprecise_error_store_any),
-		.lsu_imprecise_error_load_any(lsu_imprecise_error_load_any),
-		.lsu_imprecise_error_addr_any(lsu_imprecise_error_addr_any),
-		.dec_csr_wen_unq_d(dec_csr_wen_unq_d),
-		.dec_csr_any_unq_d(dec_csr_any_unq_d),
-		.dec_csr_rdaddr_d(dec_csr_rdaddr_d),
-		.dec_csr_wen_r(dec_csr_wen_r),
-		.dec_csr_wraddr_r(dec_csr_wraddr_r),
-		.dec_csr_wrdata_r(dec_csr_wrdata_r),
-		.dec_csr_stall_int_ff(dec_csr_stall_int_ff),
-		.dec_tlu_i0_valid_r(dec_tlu_i0_valid_r),
-		.exu_npc_r(exu_npc_r),
-		.dec_tlu_i0_pc_r(dec_tlu_i0_pc_r),
-		.dec_tlu_packet_r(dec_tlu_packet_r),
-		.dec_illegal_inst(dec_illegal_inst),
-		.dec_i0_decode_d(dec_i0_decode_d),
-		.exu_i0_br_hist_r(exu_i0_br_hist_r),
-		.exu_i0_br_error_r(exu_i0_br_error_r),
-		.exu_i0_br_start_error_r(exu_i0_br_start_error_r),
-		.exu_i0_br_valid_r(exu_i0_br_valid_r),
-		.exu_i0_br_mp_r(exu_i0_br_mp_r),
-		.exu_i0_br_middle_r(exu_i0_br_middle_r),
-		.exu_i0_br_way_r(exu_i0_br_way_r),
-		.dec_tlu_core_empty(dec_tlu_core_empty),
-		.dec_dbg_cmd_done(dec_dbg_cmd_done),
-		.dec_dbg_cmd_fail(dec_dbg_cmd_fail),
-		.dec_tlu_dbg_halted(dec_tlu_dbg_halted),
-		.dec_tlu_debug_mode(dec_tlu_debug_mode),
-		.dec_tlu_resume_ack(dec_tlu_resume_ack),
-		.dec_tlu_debug_stall(dec_tlu_debug_stall),
-		.dec_tlu_flush_noredir_r(dec_tlu_flush_noredir_r),
-		.dec_tlu_mpc_halted_only(dec_tlu_mpc_halted_only),
-		.dec_tlu_flush_leak_one_r(dec_tlu_flush_leak_one_r),
-		.dec_tlu_flush_err_r(dec_tlu_flush_err_r),
-		.dec_tlu_flush_extint(dec_tlu_flush_extint),
-		.dec_tlu_meihap(dec_tlu_meihap),
-		.dbg_halt_req(dbg_halt_req),
-		.dbg_resume_req(dbg_resume_req),
-		.ifu_miss_state_idle(ifu_miss_state_idle),
-		.lsu_idle_any(lsu_idle_any),
-		.dec_div_active(dec_div_active),
-		.trigger_pkt_any(trigger_pkt_any),
-		.ifu_ic_error_start(ifu_ic_error_start),
-		.ifu_iccm_rd_ecc_single_err(ifu_iccm_rd_ecc_single_err),
-		.ifu_ic_debug_rd_data(ifu_ic_debug_rd_data),
-		.ifu_ic_debug_rd_data_valid(ifu_ic_debug_rd_data_valid),
-		.dec_tlu_ic_diag_pkt(dec_tlu_ic_diag_pkt),
-		.pic_claimid(pic_claimid),
-		.pic_pl(pic_pl),
-		.mhwakeup(mhwakeup),
-		.mexintpend(mexintpend),
-		.timer_int(timer_int),
-		.soft_int(soft_int),
-		.o_cpu_halt_status(o_cpu_halt_status),
-		.o_cpu_halt_ack(o_cpu_halt_ack),
-		.o_cpu_run_ack(o_cpu_run_ack),
-		.o_debug_mode_status(o_debug_mode_status),
-		.core_id(core_id),
-		.mpc_debug_halt_req(mpc_debug_halt_req),
-		.mpc_debug_run_req(mpc_debug_run_req),
-		.mpc_reset_run_req(mpc_reset_run_req),
-		.mpc_debug_halt_ack(mpc_debug_halt_ack),
-		.mpc_debug_run_ack(mpc_debug_run_ack),
-		.debug_brkpt_status(debug_brkpt_status),
-		.dec_tlu_meicurpl(dec_tlu_meicurpl),
-		.dec_tlu_meipt(dec_tlu_meipt),
-		.dec_csr_rddata_d(dec_csr_rddata_d),
-		.dec_csr_legal_d(dec_csr_legal_d),
-		.dec_tlu_br0_r_pkt(dec_tlu_br0_r_pkt),
-		.dec_tlu_i0_kill_writeb_wb(dec_tlu_i0_kill_writeb_wb),
-		.dec_tlu_flush_lower_wb(dec_tlu_flush_lower_wb),
-		.dec_tlu_i0_commit_cmt(dec_tlu_i0_commit_cmt),
-		.dec_tlu_i0_kill_writeb_r(dec_tlu_i0_kill_writeb_r),
-		.dec_tlu_flush_lower_r(dec_tlu_flush_lower_r),
-		.dec_tlu_flush_path_r(dec_tlu_flush_path_r),
-		.dec_tlu_fence_i_r(dec_tlu_fence_i_r),
-		.dec_tlu_wr_pause_r(dec_tlu_wr_pause_r),
-		.dec_tlu_flush_pause_r(dec_tlu_flush_pause_r),
-		.dec_tlu_presync_d(dec_tlu_presync_d),
-		.dec_tlu_postsync_d(dec_tlu_postsync_d),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.dec_tlu_perfcnt0(dec_tlu_perfcnt0),
-		.dec_tlu_perfcnt1(dec_tlu_perfcnt1),
-		.dec_tlu_perfcnt2(dec_tlu_perfcnt2),
-		.dec_tlu_perfcnt3(dec_tlu_perfcnt3),
-		.dec_tlu_i0_exc_valid_wb1(dec_tlu_i0_exc_valid_wb1),
-		.dec_tlu_i0_valid_wb1(dec_tlu_i0_valid_wb1),
-		.dec_tlu_int_valid_wb1(dec_tlu_int_valid_wb1),
-		.dec_tlu_exc_cause_wb1(dec_tlu_exc_cause_wb1),
-		.dec_tlu_mtval_wb1(dec_tlu_mtval_wb1),
-		.dec_tlu_external_ldfwd_disable(dec_tlu_external_ldfwd_disable),
-		.dec_tlu_sideeffect_posted_disable(dec_tlu_sideeffect_posted_disable),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.dec_tlu_bpred_disable(dec_tlu_bpred_disable),
-		.dec_tlu_wb_coalescing_disable(dec_tlu_wb_coalescing_disable),
-		.dec_tlu_pipelining_disable(dec_tlu_pipelining_disable),
-		.dec_tlu_trace_disable(dec_tlu_trace_disable),
-		.dec_tlu_dma_qos_prty(dec_tlu_dma_qos_prty),
-		.dec_tlu_misc_clk_override(dec_tlu_misc_clk_override),
-		.dec_tlu_dec_clk_override(dec_tlu_dec_clk_override),
-		.dec_tlu_ifu_clk_override(dec_tlu_ifu_clk_override),
-		.dec_tlu_lsu_clk_override(dec_tlu_lsu_clk_override),
-		.dec_tlu_bus_clk_override(dec_tlu_bus_clk_override),
-		.dec_tlu_pic_clk_override(dec_tlu_pic_clk_override),
-		.dec_tlu_picio_clk_override(dec_tlu_picio_clk_override),
-		.dec_tlu_dccm_clk_override(dec_tlu_dccm_clk_override),
-		.dec_tlu_icm_clk_override(dec_tlu_icm_clk_override)
-	);
-	eb1_dec_gpr_ctl #(.pt(pt)) arf(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.raddr0(dec_i0_rs1_d[4:0]),
-		.raddr1(dec_i0_rs2_d[4:0]),
-		.wen0(dec_i0_wen_r),
-		.waddr0(dec_i0_waddr_r[4:0]),
-		.wd0(dec_i0_wdata_r[31:0]),
-		.wen1(dec_nonblock_load_wen),
-		.waddr1(dec_nonblock_load_waddr[4:0]),
-		.wd1(lsu_nonblock_load_data[31:0]),
-		.wen2(exu_div_wren),
-		.waddr2(div_waddr_wb),
-		.wd2(exu_div_result[31:0]),
-		.rd0(gpr_i0_rs1_d[31:0]),
-		.rd1(gpr_i0_rs2_d[31:0])
-	);
-	eb1_dec_trigger #(.pt(pt)) dec_trigger(
-		.trigger_pkt_any(trigger_pkt_any),
-		.dec_i0_pc_d(dec_i0_pc_d),
-		.dec_i0_trigger_match_d(dec_i0_trigger_match_d)
-	);
-	assign trace_rv_trace_pkt[102-:32] = dec_i0_inst_wb[31:0];
-	assign trace_rv_trace_pkt[70-:32] = {dec_i0_pc_wb[31:1], 1'b0};
-	assign trace_rv_trace_pkt[103] = (dec_tlu_int_valid_wb1 | dec_tlu_i0_valid_wb1) | dec_tlu_i0_exc_valid_wb1;
-	assign trace_rv_trace_pkt[38] = dec_tlu_int_valid_wb1 | dec_tlu_i0_exc_valid_wb1;
-	assign trace_rv_trace_pkt[37-:5] = dec_tlu_exc_cause_wb1[4:0];
-	assign trace_rv_trace_pkt[32] = dec_tlu_int_valid_wb1;
-	assign trace_rv_trace_pkt[31-:32] = dec_tlu_mtval_wb1[31:0];
-endmodule
-module eb1_dec_decode_ctl (
-	dec_tlu_trace_disable,
-	dec_debug_valid_d,
-	dec_tlu_flush_extint,
-	dec_tlu_force_halt,
-	dec_extint_stall,
-	ifu_i0_cinst,
-	dec_i0_inst_wb,
-	dec_i0_pc_wb,
-	lsu_nonblock_load_valid_m,
-	lsu_nonblock_load_tag_m,
-	lsu_nonblock_load_inv_r,
-	lsu_nonblock_load_inv_tag_r,
-	lsu_nonblock_load_data_valid,
-	lsu_nonblock_load_data_error,
-	lsu_nonblock_load_data_tag,
-	dec_i0_trigger_match_d,
-	dec_tlu_wr_pause_r,
-	dec_tlu_pipelining_disable,
-	lsu_trigger_match_m,
-	lsu_pmu_misaligned_m,
-	dec_tlu_debug_stall,
-	dec_tlu_flush_leak_one_r,
-	dec_debug_fence_d,
-	dbg_cmd_wrdata,
-	dec_i0_icaf_d,
-	dec_i0_icaf_second_d,
-	dec_i0_icaf_type_d,
-	dec_i0_dbecc_d,
-	dec_i0_brp,
-	dec_i0_bp_index,
-	dec_i0_bp_fghr,
-	dec_i0_bp_btag,
-	dec_i0_bp_fa_index,
-	lsu_idle_any,
-	lsu_load_stall_any,
-	lsu_store_stall_any,
-	dma_dccm_stall_any,
-	exu_div_wren,
-	dec_tlu_i0_kill_writeb_wb,
-	dec_tlu_flush_lower_wb,
-	dec_tlu_i0_kill_writeb_r,
-	dec_tlu_flush_lower_r,
-	dec_tlu_flush_pause_r,
-	dec_tlu_presync_d,
-	dec_tlu_postsync_d,
-	dec_i0_pc4_d,
-	dec_csr_rddata_d,
-	dec_csr_legal_d,
-	exu_csr_rs1_x,
-	lsu_result_m,
-	lsu_result_corr_r,
-	exu_flush_final,
-	exu_i0_pc_x,
-	dec_i0_instr_d,
-	dec_ib0_valid_d,
-	exu_i0_result_x,
-	clk,
-	active_clk,
-	free_l2clk,
-	clk_override,
-	rst_l,
-	dec_i0_rs1_en_d,
-	dec_i0_rs2_en_d,
-	dec_i0_rs1_d,
-	dec_i0_rs2_d,
-	dec_i0_immed_d,
-	dec_i0_br_immed_d,
-	i0_ap,
-	dec_i0_decode_d,
-	dec_i0_alu_decode_d,
-	dec_i0_branch_d,
-	dec_i0_waddr_r,
-	dec_i0_wen_r,
-	dec_i0_wdata_r,
-	dec_i0_select_pc_d,
-	dec_i0_rs1_bypass_en_d,
-	dec_i0_rs2_bypass_en_d,
-	dec_i0_result_r,
-	lsu_p,
-	dec_qual_lsu_d,
-	mul_p,
-	div_p,
-	div_waddr_wb,
-	dec_div_cancel,
-	dec_lsu_valid_raw_d,
-	dec_lsu_offset_d,
-	dec_csr_ren_d,
-	dec_csr_wen_unq_d,
-	dec_csr_any_unq_d,
-	dec_csr_rdaddr_d,
-	dec_csr_wen_r,
-	dec_csr_wraddr_r,
-	dec_csr_wrdata_r,
-	dec_csr_stall_int_ff,
-	dec_tlu_i0_valid_r,
-	dec_tlu_packet_r,
-	dec_tlu_i0_pc_r,
-	dec_illegal_inst,
-	pred_correct_npc_x,
-	dec_i0_predict_p_d,
-	i0_predict_fghr_d,
-	i0_predict_index_d,
-	i0_predict_btag_d,
-	dec_fa_error_index,
-	dec_data_en,
-	dec_ctl_en,
-	dec_pmu_instr_decoded,
-	dec_pmu_decode_stall,
-	dec_pmu_presync_stall,
-	dec_pmu_postsync_stall,
-	dec_nonblock_load_wen,
-	dec_nonblock_load_waddr,
-	dec_pause_state,
-	dec_pause_state_cg,
-	dec_div_active,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire dec_tlu_trace_disable;
-	input wire dec_debug_valid_d;
-	input wire dec_tlu_flush_extint;
-	input wire dec_tlu_force_halt;
-	output wire dec_extint_stall;
-	input wire [15:0] ifu_i0_cinst;
-	output wire [31:0] dec_i0_inst_wb;
-	output wire [31:1] dec_i0_pc_wb;
-	input wire lsu_nonblock_load_valid_m;
-	input wire [pt[164-:7] - 1:0] lsu_nonblock_load_tag_m;
-	input wire lsu_nonblock_load_inv_r;
-	input wire [pt[164-:7] - 1:0] lsu_nonblock_load_inv_tag_r;
-	input wire lsu_nonblock_load_data_valid;
-	input wire lsu_nonblock_load_data_error;
-	input wire [pt[164-:7] - 1:0] lsu_nonblock_load_data_tag;
-	input wire [3:0] dec_i0_trigger_match_d;
-	input wire dec_tlu_wr_pause_r;
-	input wire dec_tlu_pipelining_disable;
-	input wire [3:0] lsu_trigger_match_m;
-	input wire lsu_pmu_misaligned_m;
-	input wire dec_tlu_debug_stall;
-	input wire dec_tlu_flush_leak_one_r;
-	input wire dec_debug_fence_d;
-	input wire [1:0] dbg_cmd_wrdata;
-	input wire dec_i0_icaf_d;
-	input wire dec_i0_icaf_second_d;
-	input wire [1:0] dec_i0_icaf_type_d;
-	input wire dec_i0_dbecc_d;
-	input wire [50:0] dec_i0_brp;
-	input wire [pt[2172-:9]:pt[2163-:6]] dec_i0_bp_index;
-	input wire [pt[2236-:8] - 1:0] dec_i0_bp_fghr;
-	input wire [pt[2139-:9] - 1:0] dec_i0_bp_btag;
-	input wire [$clog2(pt[2061-:14]) - 1:0] dec_i0_bp_fa_index;
-	input wire lsu_idle_any;
-	input wire lsu_load_stall_any;
-	input wire lsu_store_stall_any;
-	input wire dma_dccm_stall_any;
-	input wire exu_div_wren;
-	input wire dec_tlu_i0_kill_writeb_wb;
-	input wire dec_tlu_flush_lower_wb;
-	input wire dec_tlu_i0_kill_writeb_r;
-	input wire dec_tlu_flush_lower_r;
-	input wire dec_tlu_flush_pause_r;
-	input wire dec_tlu_presync_d;
-	input wire dec_tlu_postsync_d;
-	input wire dec_i0_pc4_d;
-	input wire [31:0] dec_csr_rddata_d;
-	input wire dec_csr_legal_d;
-	input wire [31:0] exu_csr_rs1_x;
-	input wire [31:0] lsu_result_m;
-	input wire [31:0] lsu_result_corr_r;
-	input wire exu_flush_final;
-	input wire [31:1] exu_i0_pc_x;
-	input wire [31:0] dec_i0_instr_d;
-	input wire dec_ib0_valid_d;
-	input wire [31:0] exu_i0_result_x;
-	input wire clk;
-	input wire active_clk;
-	input wire free_l2clk;
-	input wire clk_override;
-	input wire rst_l;
-	output wire dec_i0_rs1_en_d;
-	output wire dec_i0_rs2_en_d;
-	output wire [4:0] dec_i0_rs1_d;
-	output wire [4:0] dec_i0_rs2_d;
-	output wire [31:0] dec_i0_immed_d;
-	output wire [12:1] dec_i0_br_immed_d;
-	output wire [43:0] i0_ap;
-	output wire dec_i0_decode_d;
-	output wire dec_i0_alu_decode_d;
-	output wire dec_i0_branch_d;
-	output wire [4:0] dec_i0_waddr_r;
-	output wire dec_i0_wen_r;
-	output wire [31:0] dec_i0_wdata_r;
-	output wire dec_i0_select_pc_d;
-	output wire [3:0] dec_i0_rs1_bypass_en_d;
-	output wire [3:0] dec_i0_rs2_bypass_en_d;
-	output wire [31:0] dec_i0_result_r;
-	output reg [13:0] lsu_p;
-	output wire dec_qual_lsu_d;
-	output wire [19:0] mul_p;
-	output wire [2:0] div_p;
-	output wire [4:0] div_waddr_wb;
-	output wire dec_div_cancel;
-	output wire dec_lsu_valid_raw_d;
-	output wire [11:0] dec_lsu_offset_d;
-	output wire dec_csr_ren_d;
-	output wire dec_csr_wen_unq_d;
-	output wire dec_csr_any_unq_d;
-	output wire [11:0] dec_csr_rdaddr_d;
-	output wire dec_csr_wen_r;
-	output wire [11:0] dec_csr_wraddr_r;
-	output wire [31:0] dec_csr_wrdata_r;
-	output wire dec_csr_stall_int_ff;
-	output dec_tlu_i0_valid_r;
-	output reg [16:0] dec_tlu_packet_r;
-	output wire [31:1] dec_tlu_i0_pc_r;
-	output wire [31:0] dec_illegal_inst;
-	output wire [31:1] pred_correct_npc_x;
-	output reg [55:0] dec_i0_predict_p_d;
-	output wire [pt[2236-:8] - 1:0] i0_predict_fghr_d;
-	output wire [pt[2172-:9]:pt[2163-:6]] i0_predict_index_d;
-	output wire [pt[2139-:9] - 1:0] i0_predict_btag_d;
-	output wire [$clog2(pt[2061-:14]) - 1:0] dec_fa_error_index;
-	output wire [1:0] dec_data_en;
-	output wire [1:0] dec_ctl_en;
-	output wire dec_pmu_instr_decoded;
-	output wire dec_pmu_decode_stall;
-	output wire dec_pmu_presync_stall;
-	output wire dec_pmu_postsync_stall;
-	output wire dec_nonblock_load_wen;
-	output reg [4:0] dec_nonblock_load_waddr;
-	output wire dec_pause_state;
-	output wire dec_pause_state_cg;
-	output wire dec_div_active;
-	input wire scan_mode;
-	wire [94:0] i0_dp_raw;
-	reg [94:0] i0_dp;
-	wire [31:0] i0;
-	wire i0_valid_d;
-	wire [31:0] i0_result_r;
-	wire [2:0] i0_rs1bypass;
-	wire [2:0] i0_rs2bypass;
-	wire i0_jalimm20;
-	wire i0_uiimm20;
-	wire lsu_decode_d;
-	wire [31:0] i0_immed_d;
-	wire i0_presync;
-	wire i0_postsync;
-	wire postsync_stall;
-	wire ps_stall;
-	wire prior_inflight;
-	wire prior_inflight_wb;
-	wire csr_clr_d;
-	wire csr_set_d;
-	wire csr_write_d;
-	wire csr_clr_x;
-	wire csr_set_x;
-	wire csr_write_x;
-	wire csr_imm_x;
-	wire [31:0] csr_mask_x;
-	wire [31:0] write_csr_data_x;
-	wire [31:0] write_csr_data_in;
-	wire [31:0] write_csr_data;
-	wire csr_data_wen;
-	wire [4:0] csrimm_x;
-	wire [31:0] csr_rddata_x;
-	wire mul_decode_d;
-	wire div_decode_d;
-	wire div_e1_to_r;
-	wire div_flush;
-	wire div_active_in;
-	wire div_active;
-	wire i0_nonblock_div_stall;
-	wire i0_div_prior_div_stall;
-	wire nonblock_div_cancel;
-	wire i0_legal;
-	wire shift_illegal;
-	wire illegal_inst_en;
-	wire illegal_lockout_in;
-	wire illegal_lockout;
-	wire i0_legal_decode_d;
-	wire i0_exulegal_decode_d;
-	wire i0_exudecode_d;
-	wire i0_exublock_d;
-	wire [12:1] last_br_immed_d;
-	wire i0_rs1_depend_i0_x;
-	wire i0_rs1_depend_i0_r;
-	wire i0_rs2_depend_i0_x;
-	wire i0_rs2_depend_i0_r;
-	wire i0_div_decode_d;
-	wire i0_load_block_d;
-	wire [1:0] i0_rs1_depth_d;
-	wire [1:0] i0_rs2_depth_d;
-	wire i0_load_stall_d;
-	wire i0_store_stall_d;
-	wire i0_predict_nt;
-	wire i0_predict_t;
-	wire i0_notbr_error;
-	wire i0_br_toffset_error;
-	wire i0_ret_error;
-	wire i0_br_error;
-	wire i0_br_error_all;
-	wire [11:0] i0_br_offset;
-	wire [20:1] i0_pcall_imm;
-	wire i0_pcall_12b_offset;
-	wire i0_pcall_raw;
-	wire i0_pcall_case;
-	wire i0_pcall;
-	wire i0_pja_raw;
-	wire i0_pja_case;
-	wire i0_pja;
-	wire i0_pret_case;
-	wire i0_pret_raw;
-	wire i0_pret;
-	wire i0_jal;
-	wire i0_predict_br;
-	wire store_data_bypass_d;
-	wire store_data_bypass_m;
-	wire [2:0] i0_rs1_class_d;
-	wire [2:0] i0_rs2_class_d;
-	wire [2:0] i0_d_c;
-	wire [2:0] i0_x_c;
-	wire [2:0] i0_r_c;
-	wire i0_ap_pc2;
-	wire i0_ap_pc4;
-	wire i0_rd_en_d;
-	wire load_ldst_bypass_d;
-	wire leak1_i0_stall_in;
-	wire leak1_i0_stall;
-	wire leak1_i1_stall_in;
-	wire leak1_i1_stall;
-	wire leak1_mode;
-	wire i0_csr_write_only_d;
-	wire prior_inflight_x;
-	wire prior_inflight_eff;
-	wire any_csr_d;
-	wire prior_csr_write;
-	wire [3:0] i0_pipe_en;
-	wire i0_r_ctl_en;
-	wire i0_x_ctl_en;
-	wire i0_wb_ctl_en;
-	wire i0_x_data_en;
-	wire i0_r_data_en;
-	wire i0_wb_data_en;
-	wire debug_fence_i;
-	wire debug_fence;
-	wire i0_csr_write;
-	wire presync_stall;
-	wire i0_instr_error;
-	wire i0_icaf_d;
-	wire clear_pause;
-	wire pause_state_in;
-	wire pause_state;
-	wire pause_stall;
-	wire i0_brp_valid;
-	wire nonblock_load_cancel;
-	wire lsu_idle;
-	wire lsu_pmu_misaligned_r;
-	wire csr_ren_qual_d;
-	wire csr_read_x;
-	wire i0_block_d;
-	wire i0_block_raw_d;
-	wire ps_stall_in;
-	wire [31:0] i0_result_x;
-	wire [23:0] d_d;
-	wire [23:0] x_d;
-	wire [23:0] r_d;
-	wire [23:0] wbd;
-	reg [23:0] x_d_in;
-	reg [23:0] r_d_in;
-	wire [16:0] d_t;
-	wire [16:0] x_t;
-	reg [16:0] x_t_in;
-	reg [16:0] r_t_in;
-	wire [16:0] r_t;
-	wire [3:0] lsu_trigger_match_r;
-	wire [31:1] dec_i0_pc_r;
-	wire csr_read;
-	wire csr_write;
-	wire i0_br_unpred;
-	wire nonblock_load_valid_m_delay;
-	wire i0_wen_r;
-	wire tlu_wr_pause_r1;
-	wire tlu_wr_pause_r2;
-	wire flush_final_r;
-	wire bitmanip_zbb_legal;
-	wire bitmanip_zbs_legal;
-	wire bitmanip_zbe_legal;
-	wire bitmanip_zbc_legal;
-	wire bitmanip_zbp_legal;
-	wire bitmanip_zbr_legal;
-	wire bitmanip_zbf_legal;
-	wire bitmanip_zba_legal;
-	wire bitmanip_zbb_zbp_legal;
-	wire bitmanip_legal;
-	wire data_gate_en;
-	wire data_gate_clk;
-	localparam NBLOAD_SIZE = pt[173-:9];
-	function automatic signed [31:0] sv2v_cast_32_signed;
-		input reg signed [31:0] inp;
-		sv2v_cast_32_signed = inp;
-	endfunction
-	localparam NBLOAD_SIZE_MSB = sv2v_cast_32_signed(pt[173-:9]) - 1;
-	localparam NBLOAD_TAG_MSB = pt[164-:7] - 1;
-	wire cam_write;
-	wire cam_inv_reset;
-	wire cam_data_reset;
-	wire [NBLOAD_TAG_MSB:0] cam_write_tag;
-	wire [NBLOAD_TAG_MSB:0] cam_inv_reset_tag;
-	wire [NBLOAD_TAG_MSB:0] cam_data_reset_tag;
-	reg [NBLOAD_SIZE_MSB:0] cam_wen;
-	wire [NBLOAD_TAG_MSB:0] load_data_tag;
-	wire [NBLOAD_SIZE_MSB:0] nonblock_load_write;
-	reg [(NBLOAD_SIZE_MSB >= 0 ? ((NBLOAD_SIZE_MSB + 1) * 10) - 1 : ((1 - NBLOAD_SIZE_MSB) * 10) + ((NBLOAD_SIZE_MSB * 10) - 1)):(NBLOAD_SIZE_MSB >= 0 ? 0 : NBLOAD_SIZE_MSB * 10)] cam;
-	reg [(NBLOAD_SIZE_MSB >= 0 ? ((NBLOAD_SIZE_MSB + 1) * 10) - 1 : ((1 - NBLOAD_SIZE_MSB) * 10) + ((NBLOAD_SIZE_MSB * 10) - 1)):(NBLOAD_SIZE_MSB >= 0 ? 0 : NBLOAD_SIZE_MSB * 10)] cam_in;
-	wire [(NBLOAD_SIZE_MSB >= 0 ? ((NBLOAD_SIZE_MSB + 1) * 10) - 1 : ((1 - NBLOAD_SIZE_MSB) * 10) + ((NBLOAD_SIZE_MSB * 10) - 1)):(NBLOAD_SIZE_MSB >= 0 ? 0 : NBLOAD_SIZE_MSB * 10)] cam_raw;
-	wire [4:0] nonblock_load_rd;
-	reg i0_nonblock_load_stall;
-	wire i0_nonblock_boundary_stall;
-	wire i0_rs1_nonblock_load_bypass_en_d;
-	wire i0_rs2_nonblock_load_bypass_en_d;
-	wire i0_load_kill_wen_r;
-	reg found;
-	wire [NBLOAD_SIZE_MSB:0] cam_inv_reset_val;
-	wire [NBLOAD_SIZE_MSB:0] cam_data_reset_val;
-	wire debug_fence_raw;
-	wire [31:0] i0_result_r_raw;
-	wire [31:0] i0_result_corr_r;
-	wire [12:1] last_br_immed_x;
-	wire [31:0] i0_inst_d;
-	wire [31:0] i0_inst_x;
-	wire [31:0] i0_inst_r;
-	wire [31:0] i0_inst_wb_in;
-	wire [31:0] i0_inst_wb;
-	wire [31:1] i0_pc_wb;
-	wire i0_wb_en;
-	wire trace_enable;
-	wire debug_valid_x;
-	reg [3:0] i0_itype;
-	wire [14:0] i0r;
-	rvdffie #(.WIDTH(8)) misc1ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({leak1_i1_stall_in, leak1_i0_stall_in, dec_tlu_flush_extint, pause_state_in, dec_tlu_wr_pause_r, tlu_wr_pause_r1, illegal_lockout_in, ps_stall_in}),
-		.dout({leak1_i1_stall, leak1_i0_stall, dec_extint_stall, pause_state, tlu_wr_pause_r1, tlu_wr_pause_r2, illegal_lockout, ps_stall})
-	);
-	rvdffie #(.WIDTH(8)) misc2ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({lsu_trigger_match_m[3:0], lsu_pmu_misaligned_m, div_active_in, exu_flush_final, dec_debug_valid_d}),
-		.dout({lsu_trigger_match_r[3:0], lsu_pmu_misaligned_r, div_active, flush_final_r, debug_valid_x})
-	);
-	generate
-		if (pt[2130-:5] == 1) begin
-			assign i0_brp_valid = (dec_i0_brp[50] & ~leak1_mode) & ~i0_icaf_d;
-			wire [1:1] sv2v_tmp_123E1;
-			assign sv2v_tmp_123E1 = 1'b0;
-			always @(*) dec_i0_predict_p_d[55] = sv2v_tmp_123E1;
-			wire [1:1] sv2v_tmp_D766F;
-			assign sv2v_tmp_D766F = 1'b0;
-			always @(*) dec_i0_predict_p_d[54] = sv2v_tmp_D766F;
-			wire [1:1] sv2v_tmp_EE665;
-			assign sv2v_tmp_EE665 = 1'b0;
-			always @(*) dec_i0_predict_p_d[53] = sv2v_tmp_EE665;
-			wire [1:1] sv2v_tmp_4A5D3;
-			assign sv2v_tmp_4A5D3 = i0_pcall;
-			always @(*) dec_i0_predict_p_d[34] = sv2v_tmp_4A5D3;
-			wire [1:1] sv2v_tmp_C4472;
-			assign sv2v_tmp_C4472 = i0_pja;
-			always @(*) dec_i0_predict_p_d[33] = sv2v_tmp_C4472;
-			wire [1:1] sv2v_tmp_BC36C;
-			assign sv2v_tmp_BC36C = i0_pret;
-			always @(*) dec_i0_predict_p_d[31] = sv2v_tmp_BC36C;
-			wire [31:1] sv2v_tmp_16255;
-			assign sv2v_tmp_16255 = dec_i0_brp[32:2];
-			always @(*) dec_i0_predict_p_d[30:0] = sv2v_tmp_16255;
-			wire [1:1] sv2v_tmp_CF546;
-			assign sv2v_tmp_CF546 = dec_i0_pc4_d;
-			always @(*) dec_i0_predict_p_d[52] = sv2v_tmp_CF546;
-			wire [2:1] sv2v_tmp_1B1F0;
-			assign sv2v_tmp_1B1F0 = dec_i0_brp[37:36];
-			always @(*) dec_i0_predict_p_d[51:50] = sv2v_tmp_1B1F0;
-			wire [1:1] sv2v_tmp_3FDDA;
-			assign sv2v_tmp_3FDDA = i0_brp_valid & i0_legal_decode_d;
-			always @(*) dec_i0_predict_p_d[37] = sv2v_tmp_3FDDA;
-			assign i0_notbr_error = i0_brp_valid & ~(((i0_dp_raw[28] | i0_pcall_raw) | i0_pja_raw) | i0_pret_raw);
-			assign i0_br_toffset_error = ((i0_brp_valid & dec_i0_brp[37]) & (dec_i0_brp[49:38] != i0_br_offset[11:0])) & ~i0_pret_raw;
-			assign i0_ret_error = i0_brp_valid & (dec_i0_brp[0] ^ i0_pret_raw);
-			assign i0_br_error = ((dec_i0_brp[35] | i0_notbr_error) | i0_br_toffset_error) | i0_ret_error;
-			wire [1:1] sv2v_tmp_75A7E;
-			assign sv2v_tmp_75A7E = (i0_br_error & i0_legal_decode_d) & ~leak1_mode;
-			always @(*) dec_i0_predict_p_d[36] = sv2v_tmp_75A7E;
-			wire [1:1] sv2v_tmp_6E7A2;
-			assign sv2v_tmp_6E7A2 = (dec_i0_brp[34] & i0_legal_decode_d) & ~leak1_mode;
-			always @(*) dec_i0_predict_p_d[35] = sv2v_tmp_6E7A2;
-			assign i0_predict_index_d[pt[2172-:9]:pt[2163-:6]] = dec_i0_bp_index;
-			assign i0_predict_btag_d[pt[2139-:9] - 1:0] = dec_i0_bp_btag[pt[2139-:9] - 1:0];
-			assign i0_br_error_all = (i0_br_error | dec_i0_brp[34]) & ~leak1_mode;
-			wire [12:1] sv2v_tmp_AC6BD;
-			assign sv2v_tmp_AC6BD = i0_br_offset[11:0];
-			always @(*) dec_i0_predict_p_d[49:38] = sv2v_tmp_AC6BD;
-			assign i0_predict_fghr_d[pt[2236-:8] - 1:0] = dec_i0_bp_fghr[pt[2236-:8] - 1:0];
-			wire [1:1] sv2v_tmp_11732;
-			assign sv2v_tmp_11732 = dec_i0_brp[1];
-			always @(*) dec_i0_predict_p_d[32] = sv2v_tmp_11732;
-			if (pt[2120-:5]) begin
-				wire btb_error_found;
-				wire btb_error_found_f;
-				wire [$clog2(pt[2061-:14]) - 1:0] fa_error_index_ns;
-				assign btb_error_found = (i0_br_error_all | btb_error_found_f) & ~dec_tlu_flush_lower_r;
-				assign fa_error_index_ns = (i0_br_error_all & ~btb_error_found_f ? dec_i0_bp_fa_index : dec_fa_error_index);
-				rvdff #(.WIDTH($clog2(pt[2061-:14]) + 1)) btberrorfa_f(
-					.rst_l(rst_l),
-					.clk(active_clk),
-					.din({btb_error_found, fa_error_index_ns}),
-					.dout({btb_error_found_f, dec_fa_error_index})
-				);
-			end
-			else assign dec_fa_error_index = 'b0;
-		end
-		else begin
-			always @(*) begin
-				dec_i0_predict_p_d = {56 {1'sb0}};
-				dec_i0_predict_p_d[34] = i0_pcall;
-				dec_i0_predict_p_d[33] = i0_pja;
-				dec_i0_predict_p_d[31] = i0_pret;
-				dec_i0_predict_p_d[52] = dec_i0_pc4_d;
-			end
-			assign i0_br_error_all = 1'b0;
-			assign i0_predict_index_d = {(pt[2172-:9] >= pt[2163-:6] ? (pt[2172-:9] - pt[2163-:6]) + 1 : (pt[2163-:6] - pt[2172-:9]) + 1) {1'sb0}};
-			assign i0_predict_btag_d = {pt[2139-:9] {1'sb0}};
-			assign i0_predict_fghr_d = {pt[2236-:8] {1'sb0}};
-			assign i0_brp_valid = 1'b0;
-		end
-	endgenerate
-	assign i0_icaf_d = dec_i0_icaf_d | dec_i0_dbecc_d;
-	assign i0_instr_error = i0_icaf_d;
-	always @(*) begin
-		i0_dp = i0_dp_raw;
-		if (i0_br_error_all | i0_instr_error) begin
-			i0_dp = {95 {1'sb0}};
-			i0_dp[49] = 1'b1;
-			i0_dp[48] = 1'b1;
-			i0_dp[47] = 1'b1;
-			i0_dp[35] = 1'b1;
-			i0_dp[0] = 1'b1;
-			i0_dp[13] = 1'b1;
-		end
-	end
-	assign i0[31:0] = dec_i0_instr_d[31:0];
-	assign dec_i0_select_pc_d = i0_dp[42];
-	assign i0_predict_br = ((i0_dp[28] | i0_pcall) | i0_pja) | i0_pret;
-	assign i0_predict_nt = ~(dec_i0_brp[37] & i0_brp_valid) & i0_predict_br;
-	assign i0_predict_t = (dec_i0_brp[37] & i0_brp_valid) & i0_predict_br;
-	assign i0_ap[8] = i0_dp[38];
-	assign i0_ap[7] = i0_dp[37];
-	assign i0_ap[18] = i0_dp[36];
-	assign i0_ap[17] = i0_dp[35];
-	assign i0_ap[16] = i0_dp[34];
-	assign i0_ap[15] = i0_dp[33];
-	assign i0_ap[14] = i0_dp[31];
-	assign i0_ap[13] = i0_dp[32];
-	assign i0_ap[6] = i0_dp[30];
-	assign i0_ap[5] = i0_dp[29];
-	assign i0_ap[12] = i0_dp[27];
-	assign i0_ap[11] = i0_dp[26];
-	assign i0_ap[10] = i0_dp[24];
-	assign i0_ap[9] = i0_dp[25];
-	assign i0_ap[43] = i0_dp[94];
-	assign i0_ap[42] = i0_dp[93];
-	assign i0_ap[41] = i0_dp[92];
-	assign i0_ap[40] = i0_dp[91];
-	assign i0_ap[39] = i0_dp[90];
-	assign i0_ap[22] = i0_dp[53];
-	assign i0_ap[21] = i0_dp[52];
-	assign i0_ap[20] = i0_dp[51];
-	assign i0_ap[19] = i0_dp[50];
-	assign i0_ap[38] = i0_dp[89];
-	assign i0_ap[37] = i0_dp[88];
-	assign i0_ap[36] = i0_dp[87];
-	assign i0_ap[35] = i0_dp[86];
-	assign i0_ap[34] = i0_dp[85];
-	assign i0_ap[33] = i0_dp[84];
-	assign i0_ap[32] = i0_dp[83];
-	assign i0_ap[31] = i0_dp[82];
-	assign i0_ap[30] = i0_dp[81];
-	assign i0_ap[29] = i0_dp[80];
-	assign i0_ap[28] = i0_dp[79];
-	assign i0_ap[27] = i0_dp[78];
-	assign i0_ap[26] = i0_dp[77];
-	assign i0_ap[25] = i0_dp[76];
-	assign i0_ap[24] = i0_dp[75];
-	assign i0_ap[23] = i0_dp[74];
-	assign i0_ap[1] = i0_csr_write_only_d;
-	assign i0_ap[0] = i0_dp[15];
-	assign i0_ap[4] = i0_jal;
-	assign i0_ap_pc2 = ~dec_i0_pc4_d;
-	assign i0_ap_pc4 = dec_i0_pc4_d;
-	assign i0_ap[2] = i0_predict_nt;
-	assign i0_ap[3] = i0_predict_t;
-	always @(*) begin
-		found = 0;
-		cam_wen[NBLOAD_SIZE_MSB:0] = {(NBLOAD_SIZE_MSB >= 0 ? NBLOAD_SIZE_MSB + 1 : 1 - NBLOAD_SIZE_MSB) {1'sb0}};
-		begin : sv2v_autoblock_37
-			reg signed [31:0] i;
-			for (i = 0; i < NBLOAD_SIZE; i = i + 1)
-				if (~found) begin
-					if (~cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9]) begin
-						cam_wen[i] = cam_write;
-						found = 1'b1;
-					end
-					else
-						cam_wen[i] = 0;
-				end
-				else
-					cam_wen[i] = 0;
-		end
-	end
-	assign cam_write = lsu_nonblock_load_valid_m;
-	assign cam_write_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_tag_m[NBLOAD_TAG_MSB:0];
-	assign cam_inv_reset = lsu_nonblock_load_inv_r;
-	assign cam_inv_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0];
-	assign cam_data_reset = lsu_nonblock_load_data_valid | lsu_nonblock_load_data_error;
-	assign cam_data_reset_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-	assign nonblock_load_rd[4:0] = (x_d[3] ? x_d[8:4] : 5'b00000);
-	generate
-		genvar i;
-		for (i = 0; i < NBLOAD_SIZE; i = i + 1) begin : cam_array
-			assign cam_inv_reset_val[i] = (cam_inv_reset & (cam_inv_reset_tag[NBLOAD_TAG_MSB:0] == cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + ((5 + NBLOAD_TAG_MSB) >= 5 ? 5 + NBLOAD_TAG_MSB : ((5 + NBLOAD_TAG_MSB) + ((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))) - 1)-:((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))])) & cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9];
-			assign cam_data_reset_val[i] = (cam_data_reset & (cam_data_reset_tag[NBLOAD_TAG_MSB:0] == cam_raw[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + ((5 + NBLOAD_TAG_MSB) >= 5 ? 5 + NBLOAD_TAG_MSB : ((5 + NBLOAD_TAG_MSB) + ((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))) - 1)-:((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))])) & cam_raw[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9];
-			always @(*) begin
-				cam[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10] = cam_raw[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10];
-				if (cam_data_reset_val[i])
-					cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9] = 1'b0;
-				cam_in[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10] = {10 {1'sb0}};
-				if (cam_wen[i]) begin
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9] = 1'b1;
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 8] = 1'b0;
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + ((5 + NBLOAD_TAG_MSB) >= 5 ? 5 + NBLOAD_TAG_MSB : ((5 + NBLOAD_TAG_MSB) + ((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))) - 1)-:((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))] = cam_write_tag[NBLOAD_TAG_MSB:0];
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 4-:5] = nonblock_load_rd[4:0];
-				end
-				else if (cam_inv_reset_val[i] | ((i0_wen_r & (r_d_in[8:4] == cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 4-:5])) & cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 8]))
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9] = 1'b0;
-				else
-					cam_in[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10] = cam[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10];
-				if ((nonblock_load_valid_m_delay & (lsu_nonblock_load_inv_tag_r[NBLOAD_TAG_MSB:0] == cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + ((5 + NBLOAD_TAG_MSB) >= 5 ? 5 + NBLOAD_TAG_MSB : ((5 + NBLOAD_TAG_MSB) + ((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))) - 1)-:((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))])) & cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9])
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 8] = 1'b1;
-				if (dec_tlu_force_halt)
-					cam_in[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9] = 1'b0;
-			end
-			rvdffie #(.WIDTH(10)) cam_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(cam_in[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10]),
-				.dout(cam_raw[(NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10+:10])
-			);
-			assign nonblock_load_write[i] = (load_data_tag[NBLOAD_TAG_MSB:0] == cam_raw[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + ((5 + NBLOAD_TAG_MSB) >= 5 ? 5 + NBLOAD_TAG_MSB : ((5 + NBLOAD_TAG_MSB) + ((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))) - 1)-:((5 + NBLOAD_TAG_MSB) >= 5 ? (5 + NBLOAD_TAG_MSB) - 4 : 6 - (5 + NBLOAD_TAG_MSB))]) & cam_raw[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9];
-		end
-	endgenerate
-	assign load_data_tag[NBLOAD_TAG_MSB:0] = lsu_nonblock_load_data_tag[NBLOAD_TAG_MSB:0];
-	assign nonblock_load_cancel = (r_d_in[8:4] == dec_nonblock_load_waddr[4:0]) & i0_wen_r;
-	assign dec_nonblock_load_wen = (lsu_nonblock_load_data_valid & |nonblock_load_write[NBLOAD_SIZE_MSB:0]) & ~nonblock_load_cancel;
-	always @(*) begin
-		dec_nonblock_load_waddr[4:0] = {5 {1'sb0}};
-		i0_nonblock_load_stall = i0_nonblock_boundary_stall;
-		begin : sv2v_autoblock_38
-			reg signed [31:0] i;
-			for (i = 0; i < NBLOAD_SIZE; i = i + 1)
-				begin
-					dec_nonblock_load_waddr[4:0] = dec_nonblock_load_waddr[4:0] | ({5 {nonblock_load_write[i]}} & cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 4-:5]);
-					i0_nonblock_load_stall = i0_nonblock_load_stall | ((dec_i0_rs1_en_d & cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9]) & (cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 4-:5] == i0r[14:10]));
-					i0_nonblock_load_stall = i0_nonblock_load_stall | ((dec_i0_rs2_en_d & cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 9]) & (cam[((NBLOAD_SIZE_MSB >= 0 ? i : NBLOAD_SIZE_MSB - i) * 10) + 4-:5] == i0r[9:5]));
-				end
-		end
-	end
-	assign i0_nonblock_boundary_stall = (((nonblock_load_rd[4:0] == i0r[14:10]) & lsu_nonblock_load_valid_m) & dec_i0_rs1_en_d) | (((nonblock_load_rd[4:0] == i0r[9:5]) & lsu_nonblock_load_valid_m) & dec_i0_rs2_en_d);
-	rvdffs #(.WIDTH(1)) wbnbloaddelayff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(i0_r_ctl_en),
-		.din(lsu_nonblock_load_valid_m),
-		.dout(nonblock_load_valid_m_delay)
-	);
-	assign i0_load_kill_wen_r = nonblock_load_valid_m_delay & r_d[3];
-	assign csr_read = csr_ren_qual_d;
-	assign csr_write = dec_csr_wen_unq_d;
-	assign i0_br_unpred = i0_dp[23] & ~i0_predict_br;
-	localparam [3:0] eb1_pkg_ALU = 4'b0100;
-	localparam [3:0] eb1_pkg_BITMANIPU = 4'b1111;
-	localparam [3:0] eb1_pkg_CONDBR = 4'b1101;
-	localparam [3:0] eb1_pkg_CSRREAD = 4'b0101;
-	localparam [3:0] eb1_pkg_CSRRW = 4'b0111;
-	localparam [3:0] eb1_pkg_CSRWRITE = 4'b0110;
-	localparam [3:0] eb1_pkg_EBREAK = 4'b1000;
-	localparam [3:0] eb1_pkg_ECALL = 4'b1001;
-	localparam [3:0] eb1_pkg_FENCE = 4'b1010;
-	localparam [3:0] eb1_pkg_FENCEI = 4'b1011;
-	localparam [3:0] eb1_pkg_JAL = 4'b1110;
-	localparam [3:0] eb1_pkg_LOAD = 4'b0010;
-	localparam [3:0] eb1_pkg_MRET = 4'b1100;
-	localparam [3:0] eb1_pkg_MUL = 4'b0001;
-	localparam [3:0] eb1_pkg_NULL = 4'b0000;
-	localparam [3:0] eb1_pkg_STORE = 4'b0011;
-	always @(*) begin
-		i0_itype = eb1_pkg_NULL;
-		if (i0_legal_decode_d) begin
-			if (i0_dp[9])
-				i0_itype = eb1_pkg_MUL;
-			if (i0_dp[41])
-				i0_itype = eb1_pkg_LOAD;
-			if (i0_dp[40])
-				i0_itype = eb1_pkg_STORE;
-			if (i0_dp[1])
-				i0_itype = eb1_pkg_ALU;
-			if (((((((i0_dp[78] | i0_dp[73]) | i0_dp[70]) | i0_dp[66]) | i0_dp[63]) | i0_dp[56]) | i0_dp[54]) | i0_dp[50])
-				i0_itype = eb1_pkg_BITMANIPU;
-			if (csr_read & ~csr_write)
-				i0_itype = eb1_pkg_CSRREAD;
-			if (~csr_read & csr_write)
-				i0_itype = eb1_pkg_CSRWRITE;
-			if (csr_read & csr_write)
-				i0_itype = eb1_pkg_CSRRW;
-			if (i0_dp[12])
-				i0_itype = eb1_pkg_EBREAK;
-			if (i0_dp[11])
-				i0_itype = eb1_pkg_ECALL;
-			if (i0_dp[3])
-				i0_itype = eb1_pkg_FENCE;
-			if (i0_dp[2])
-				i0_itype = eb1_pkg_FENCEI;
-			if (i0_dp[10])
-				i0_itype = eb1_pkg_MRET;
-			if (i0_dp[28])
-				i0_itype = eb1_pkg_CONDBR;
-			if (i0_dp[23])
-				i0_itype = eb1_pkg_JAL;
-		end
-	end
-	eb1_dec_dec_ctl i0_dec(
-		.inst(i0[31:0]),
-		.out(i0_dp_raw)
-	);
-	rvdff #(.WIDTH(1)) lsu_idle_ff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.din(lsu_idle_any),
-		.dout(lsu_idle)
-	);
-	assign leak1_i1_stall_in = dec_tlu_flush_leak_one_r | (leak1_i1_stall & ~dec_tlu_flush_lower_r);
-	assign leak1_mode = leak1_i1_stall;
-	assign leak1_i0_stall_in = (dec_i0_decode_d & leak1_i1_stall) | (leak1_i0_stall & ~dec_tlu_flush_lower_r);
-	assign i0_pcall_imm[20:1] = {i0[31], i0[19:12], i0[20], i0[30:21]};
-	assign i0_pcall_12b_offset = (i0_pcall_imm[12] ? i0_pcall_imm[20:13] == 8'hff : i0_pcall_imm[20:13] == 8'h00);
-	assign i0_pcall_case = (i0_pcall_12b_offset & i0_dp_raw[43]) & ((i0r[4:0] == 5'd1) | (i0r[4:0] == 5'd5));
-	assign i0_pja_case = (i0_pcall_12b_offset & i0_dp_raw[43]) & ~((i0r[4:0] == 5'd1) | (i0r[4:0] == 5'd5));
-	assign i0_pcall_raw = i0_dp_raw[23] & i0_pcall_case;
-	assign i0_pcall = i0_dp[23] & i0_pcall_case;
-	assign i0_pja_raw = i0_dp_raw[23] & i0_pja_case;
-	assign i0_pja = i0_dp[23] & i0_pja_case;
-	assign i0_br_offset[11:0] = (i0_pcall_raw | i0_pja_raw ? i0_pcall_imm[12:1] : {i0[31], i0[7], i0[30:25], i0[11:8]});
-	assign i0_pret_case = ((i0_dp_raw[23] & i0_dp_raw[46]) & (i0r[4:0] == 5'b00000)) & ((i0r[14:10] == 5'd1) | (i0r[14:10] == 5'd5));
-	assign i0_pret_raw = i0_dp_raw[23] & i0_pret_case;
-	assign i0_pret = i0_dp[23] & i0_pret_case;
-	assign i0_jal = ((i0_dp[23] & ~i0_pcall_case) & ~i0_pja_case) & ~i0_pret_case;
-	assign dec_lsu_offset_d[11:0] = ({12 {(~dec_extint_stall & i0_dp[39]) & i0_dp[41]}} & i0[31:20]) | ({12 {(~dec_extint_stall & i0_dp[39]) & i0_dp[40]}} & {i0[31:25], i0[11:7]});
-	assign div_p[2] = div_decode_d;
-	assign div_p[1] = i0_dp[29];
-	assign div_p[0] = i0_dp[4];
-	assign mul_p[19] = mul_decode_d;
-	assign mul_p[18] = i0_dp[8];
-	assign mul_p[17] = i0_dp[7];
-	assign mul_p[16] = i0_dp[6];
-	assign mul_p[15] = i0_dp[72];
-	assign mul_p[14] = i0_dp[71];
-	assign mul_p[13] = i0_dp[69];
-	assign mul_p[12] = i0_dp[68];
-	assign mul_p[11] = i0_dp[67];
-	assign mul_p[10] = i0_dp[80];
-	assign mul_p[9] = i0_dp[79];
-	assign mul_p[8] = i0_dp[65];
-	assign mul_p[7] = i0_dp[64];
-	assign mul_p[6] = i0_dp[62];
-	assign mul_p[5] = i0_dp[61];
-	assign mul_p[4] = i0_dp[60];
-	assign mul_p[3] = i0_dp[59];
-	assign mul_p[2] = i0_dp[58];
-	assign mul_p[1] = i0_dp[57];
-	assign mul_p[0] = i0_dp[55];
-	always @(*) begin
-		lsu_p = {14 {1'sb0}};
-		if (dec_extint_stall) begin
-			lsu_p[7] = 1'b1;
-			lsu_p[9] = 1'b1;
-			lsu_p[13] = 1'b1;
-			lsu_p[0] = 1'b1;
-		end
-		else begin
-			lsu_p[0] = lsu_decode_d;
-			lsu_p[7] = i0_dp[41];
-			lsu_p[6] = i0_dp[40];
-			lsu_p[11] = i0_dp[22];
-			lsu_p[10] = i0_dp[21];
-			lsu_p[9] = i0_dp[20];
-			lsu_p[12] = i0r[14:10] == 5'd2;
-			lsu_p[2] = load_ldst_bypass_d;
-			lsu_p[3] = store_data_bypass_d;
-			lsu_p[1] = store_data_bypass_m;
-			lsu_p[5] = i0_dp[29];
-		end
-	end
-	assign dec_lsu_valid_raw_d = (((i0_valid_d & (i0_dp_raw[41] | i0_dp_raw[40])) & ~dma_dccm_stall_any) & ~i0_block_raw_d) | dec_extint_stall;
-	assign i0r[14:10] = i0[19:15];
-	assign i0r[9:5] = i0[24:20];
-	assign i0r[4:0] = i0[11:7];
-	assign dec_i0_rs1_en_d = i0_dp[48] & (i0r[14:10] != 5'd0);
-	assign dec_i0_rs2_en_d = i0_dp[47] & (i0r[9:5] != 5'd0);
-	assign i0_rd_en_d = i0_dp[45] & (i0r[4:0] != 5'd0);
-	assign dec_i0_rs1_d[4:0] = i0r[14:10];
-	assign dec_i0_rs2_d[4:0] = i0r[9:5];
-	assign i0_jalimm20 = i0_dp[23] & i0_dp[43];
-	assign i0_uiimm20 = ~i0_dp[23] & i0_dp[43];
-	assign dec_csr_ren_d = i0_dp[19] & i0_valid_d;
-	assign csr_ren_qual_d = i0_dp[19] & i0_legal_decode_d;
-	assign csr_clr_d = i0_dp[18] & i0_legal_decode_d;
-	assign csr_set_d = i0_dp[17] & i0_legal_decode_d;
-	assign csr_write_d = i0_csr_write & i0_legal_decode_d;
-	assign i0_csr_write_only_d = i0_csr_write & ~i0_dp[19];
-	assign dec_csr_wen_unq_d = ((i0_dp[18] | i0_dp[17]) | i0_csr_write) & i0_valid_d;
-	assign dec_csr_any_unq_d = any_csr_d & i0_valid_d;
-	assign dec_csr_rdaddr_d[11:0] = {12 {dec_csr_any_unq_d}} & i0[31:20];
-	assign dec_csr_wraddr_r[11:0] = {12 {r_d[22] & r_d[0]}} & r_d[20:9];
-	assign dec_csr_wen_r = (r_d[22] & r_d[0]) & ~dec_tlu_i0_kill_writeb_r;
-	assign dec_csr_stall_int_ff = ((((r_d[20:9] == 12'h300) | (r_d[20:9] == 12'h304)) & r_d[22]) & r_d[0]) & ~dec_tlu_i0_kill_writeb_wb;
-	rvdff #(.WIDTH(5)) csrmiscff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.din({csr_ren_qual_d, csr_clr_d, csr_set_d, csr_write_d, i0_dp[15]}),
-		.dout({csr_read_x, csr_clr_x, csr_set_x, csr_write_x, csr_imm_x})
-	);
-	rvdffe #(.WIDTH(37)) csr_rddata_x_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_x_data_en & any_csr_d),
-		.din({i0[19:15], dec_csr_rddata_d[31:0]}),
-		.dout({csrimm_x[4:0], csr_rddata_x[31:0]})
-	);
-	assign csr_mask_x[31:0] = ({32 {csr_imm_x}} & {27'b000000000000000000000000000, csrimm_x[4:0]}) | ({32 {~csr_imm_x}} & exu_csr_rs1_x[31:0]);
-	assign write_csr_data_x[31:0] = (({32 {csr_clr_x}} & (csr_rddata_x[31:0] & ~csr_mask_x[31:0])) | ({32 {csr_set_x}} & (csr_rddata_x[31:0] | csr_mask_x[31:0]))) | ({32 {csr_write_x}} & csr_mask_x[31:0]);
-	assign clear_pause = (dec_tlu_flush_lower_r & ~dec_tlu_flush_pause_r) | (pause_state & (write_csr_data[31:1] == 31'b0000000000000000000000000000000));
-	assign pause_state_in = (dec_tlu_wr_pause_r | pause_state) & ~clear_pause;
-	assign dec_pause_state = pause_state;
-	assign dec_pause_state_cg = (pause_state & ~tlu_wr_pause_r1) & ~tlu_wr_pause_r2;
-	assign csr_data_wen = ((((csr_clr_x | csr_set_x) | csr_write_x) & csr_read_x) | dec_tlu_wr_pause_r) | pause_state;
-	assign write_csr_data_in[31:0] = (pause_state ? write_csr_data[31:0] - 32'b00000000000000000000000000000001 : (dec_tlu_wr_pause_r ? dec_csr_wrdata_r[31:0] : write_csr_data_x[31:0]));
-	rvdffe #(.WIDTH(32)) write_csr_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(csr_data_wen),
-		.din(write_csr_data_in[31:0]),
-		.dout(write_csr_data[31:0])
-	);
-	assign pause_stall = pause_state;
-	assign dec_csr_wrdata_r[31:0] = (r_d[21] & r_d[0] ? i0_result_corr_r[31:0] : write_csr_data[31:0]);
-	assign dec_i0_immed_d[31:0] = i0_immed_d[31:0];
-	assign i0_immed_d[31:0] = (((({32 {i0_dp[46]}} & {{20 {i0[31]}}, i0[31:20]}) | ({32 {i0_dp[44]}} & {27'b000000000000000000000000000, i0[24:20]})) | ({32 {i0_jalimm20}} & {{12 {i0[31]}}, i0[19:12], i0[20], i0[30:21], 1'b0})) | ({32 {i0_uiimm20}} & {i0[31:12], 12'b000000000000})) | ({32 {i0_csr_write_only_d & i0_dp[15]}} & {27'b000000000000000000000000000, i0[19:15]});
-	assign dec_i0_br_immed_d[12:1] = (i0_ap[2] & ~i0_dp[23] ? i0_br_offset[11:0] : {10'b0000000000, i0_ap_pc4, i0_ap_pc2});
-	assign last_br_immed_d[12:1] = (i0_ap[2] ? {10'b0000000000, i0_ap_pc4, i0_ap_pc2} : i0_br_offset[11:0]);
-	assign i0_valid_d = dec_ib0_valid_d;
-	assign i0_load_stall_d = i0_dp[41] & (lsu_load_stall_any | dma_dccm_stall_any);
-	assign i0_store_stall_d = i0_dp[40] & (lsu_store_stall_any | dma_dccm_stall_any);
-	assign i0_presync = (((i0_dp[14] | dec_tlu_presync_d) | debug_fence_i) | debug_fence_raw) | dec_tlu_pipelining_disable;
-	assign i0_postsync = ((i0_dp[13] | dec_tlu_postsync_d) | debug_fence_i) | (i0_csr_write_only_d & (i0[31:20] == 12'h7c2));
-	assign debug_fence_i = dec_debug_fence_d & dbg_cmd_wrdata[0];
-	assign debug_fence_raw = dec_debug_fence_d & dbg_cmd_wrdata[1];
-	assign debug_fence = debug_fence_raw | debug_fence_i;
-	assign i0_csr_write = i0_dp[16] & ~dec_debug_fence_d;
-	assign presync_stall = i0_presync & prior_inflight_eff;
-	assign prior_inflight_eff = (i0_dp[5] ? prior_inflight_x : prior_inflight);
-	assign i0_div_prior_div_stall = i0_dp[5] & div_active;
-	assign i0_block_raw_d = (((((((((((i0_dp[19] & prior_csr_write) | dec_extint_stall) | pause_stall) | leak1_i0_stall) | dec_tlu_debug_stall) | postsync_stall) | presync_stall) | ((i0_dp[3] | debug_fence) & ~lsu_idle)) | i0_nonblock_load_stall) | i0_load_block_d) | i0_nonblock_div_stall) | i0_div_prior_div_stall;
-	assign i0_block_d = (i0_block_raw_d | i0_store_stall_d) | i0_load_stall_d;
-	assign i0_exublock_d = i0_block_raw_d;
-	assign prior_csr_write = (x_d[21] | r_d[21]) | wbd[21];
-	generate
-		if (pt[2207-:5] == 1) begin
-			assign bitmanip_zbb_legal = 1'b1;
-		end
-		else assign bitmanip_zbb_legal = ~(i0_dp[78] & ~i0_dp[63]);
-	endgenerate
-	generate
-		if (pt[2177-:5] == 1) begin
-			assign bitmanip_zbs_legal = 1'b1;
-		end
-		else assign bitmanip_zbs_legal = ~i0_dp[73];
-	endgenerate
-	generate
-		if (pt[2197-:5] == 1) begin
-			assign bitmanip_zbe_legal = 1'b1;
-		end
-		else assign bitmanip_zbe_legal = ~i0_dp[70];
-	endgenerate
-	generate
-		if (pt[2202-:5] == 1) begin
-			assign bitmanip_zbc_legal = 1'b1;
-		end
-		else assign bitmanip_zbc_legal = ~i0_dp[66];
-	endgenerate
-	generate
-		if (pt[2187-:5] == 1) begin
-			assign bitmanip_zbp_legal = 1'b1;
-		end
-		else assign bitmanip_zbp_legal = ~(i0_dp[63] & ~i0_dp[78]);
-	endgenerate
-	generate
-		if (pt[2182-:5] == 1) begin
-			assign bitmanip_zbr_legal = 1'b1;
-		end
-		else assign bitmanip_zbr_legal = ~i0_dp[56];
-	endgenerate
-	generate
-		if (pt[2192-:5] == 1) begin
-			assign bitmanip_zbf_legal = 1'b1;
-		end
-		else assign bitmanip_zbf_legal = ~i0_dp[54];
-	endgenerate
-	generate
-		if (pt[2212-:5] == 1) begin
-			assign bitmanip_zba_legal = 1'b1;
-		end
-		else assign bitmanip_zba_legal = ~i0_dp[50];
-	endgenerate
-	generate
-		if ((pt[2207-:5] == 1) | (pt[2187-:5] == 1)) begin
-			assign bitmanip_zbb_zbp_legal = 1'b1;
-		end
-		else assign bitmanip_zbb_zbp_legal = ~(i0_dp[78] & i0_dp[63]);
-	endgenerate
-	assign any_csr_d = i0_dp[19] | i0_csr_write;
-	assign bitmanip_legal = (((((((bitmanip_zbb_legal & bitmanip_zbs_legal) & bitmanip_zbe_legal) & bitmanip_zbc_legal) & bitmanip_zbp_legal) & bitmanip_zbr_legal) & bitmanip_zbf_legal) & bitmanip_zba_legal) & bitmanip_zbb_zbp_legal;
-	assign i0_legal = (i0_dp[0] & (~any_csr_d | dec_csr_legal_d)) & bitmanip_legal;
-	assign shift_illegal = dec_i0_decode_d & ~i0_legal;
-	assign illegal_inst_en = shift_illegal & ~illegal_lockout;
-	rvdffe #(.WIDTH(32)) illegal_any_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(illegal_inst_en),
-		.din(i0_inst_d[31:0]),
-		.dout(dec_illegal_inst[31:0])
-	);
-	assign illegal_lockout_in = (shift_illegal | illegal_lockout) & ~flush_final_r;
-	assign dec_i0_decode_d = ((i0_valid_d & ~i0_block_d) & ~dec_tlu_flush_lower_r) & ~flush_final_r;
-	assign i0_exudecode_d = ((i0_valid_d & ~i0_exublock_d) & ~dec_tlu_flush_lower_r) & ~flush_final_r;
-	assign i0_legal_decode_d = dec_i0_decode_d & i0_legal;
-	assign i0_exulegal_decode_d = i0_exudecode_d & i0_legal;
-	assign dec_pmu_instr_decoded = dec_i0_decode_d;
-	assign dec_pmu_decode_stall = i0_valid_d & ~dec_i0_decode_d;
-	assign dec_pmu_postsync_stall = postsync_stall & i0_valid_d;
-	assign dec_pmu_presync_stall = presync_stall & i0_valid_d;
-	assign ps_stall_in = (dec_i0_decode_d & (i0_postsync | ~i0_legal)) | (ps_stall & prior_inflight_x);
-	assign postsync_stall = ps_stall;
-	assign prior_inflight_x = x_d[0];
-	assign prior_inflight_wb = r_d[0];
-	assign prior_inflight = prior_inflight_x | prior_inflight_wb;
-	assign dec_i0_alu_decode_d = i0_exulegal_decode_d & i0_dp[49];
-	assign dec_i0_branch_d = (i0_dp[28] | i0_dp[23]) | i0_br_error_all;
-	assign lsu_decode_d = i0_legal_decode_d & i0_dp[39];
-	assign mul_decode_d = i0_exulegal_decode_d & i0_dp[9];
-	assign div_decode_d = i0_exulegal_decode_d & i0_dp[5];
-	assign dec_qual_lsu_d = i0_dp[39];
-	assign i0_rs1_depend_i0_x = (dec_i0_rs1_en_d & x_d[1]) & (x_d[8:4] == i0r[14:10]);
-	assign i0_rs1_depend_i0_r = (dec_i0_rs1_en_d & r_d[1]) & (r_d[8:4] == i0r[14:10]);
-	assign i0_rs2_depend_i0_x = (dec_i0_rs2_en_d & x_d[1]) & (x_d[8:4] == i0r[9:5]);
-	assign i0_rs2_depend_i0_r = (dec_i0_rs2_en_d & r_d[1]) & (r_d[8:4] == i0r[9:5]);
-	assign {i0_rs1_class_d, i0_rs1_depth_d[1:0]} = (i0_rs1_depend_i0_x ? {i0_x_c, 2'd1} : (i0_rs1_depend_i0_r ? {i0_r_c, 2'd2} : {5 {1'sb0}}));
-	assign {i0_rs2_class_d, i0_rs2_depth_d[1:0]} = (i0_rs2_depend_i0_x ? {i0_x_c, 2'd1} : (i0_rs2_depend_i0_r ? {i0_r_c, 2'd2} : {5 {1'sb0}}));
-	generate
-		if (pt[202-:5] == 1) begin : genblock
-			assign i0_load_block_d = (i0_rs1_class_d[1] & i0_rs1_depth_d[0]) | ((i0_rs2_class_d[1] & i0_rs2_depth_d[0]) & ~i0_dp[40]);
-			assign load_ldst_bypass_d = ((i0_dp[41] | i0_dp[40]) & i0_rs1_depth_d[1]) & i0_rs1_class_d[1];
-			assign store_data_bypass_d = (i0_dp[40] & i0_rs2_depth_d[1]) & i0_rs2_class_d[1];
-			assign store_data_bypass_m = (i0_dp[40] & i0_rs2_depth_d[0]) & i0_rs2_class_d[1];
-		end
-		else begin : genblock
-			assign i0_load_block_d = 1'b0;
-			assign load_ldst_bypass_d = ((i0_dp[41] | i0_dp[40]) & i0_rs1_depth_d[0]) & i0_rs1_class_d[1];
-			assign store_data_bypass_d = (i0_dp[40] & i0_rs2_depth_d[0]) & i0_rs2_class_d[1];
-			assign store_data_bypass_m = 1'b0;
-		end
-	endgenerate
-	assign dec_tlu_i0_valid_r = r_d[0] & ~dec_tlu_flush_lower_wb;
-	assign d_t[5] = i0_legal_decode_d;
-	assign d_t[16] = i0_icaf_d & i0_legal_decode_d;
-	assign d_t[15] = dec_i0_icaf_second_d & i0_legal_decode_d;
-	assign d_t[14:13] = dec_i0_icaf_type_d[1:0];
-	assign d_t[12] = (i0_dp[2] | debug_fence_i) & i0_legal_decode_d;
-	assign d_t[3-:4] = i0_itype;
-	assign d_t[7] = i0_br_unpred;
-	assign d_t[6] = 1'b0;
-	assign d_t[4] = 1'b0;
-	assign d_t[11:8] = dec_i0_trigger_match_d[3:0] & {4 {dec_i0_decode_d}};
-	rvdfflie #(
-		.WIDTH(17),
-		.LEFT(9)
-	) trap_xff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_x_ctl_en),
-		.din(d_t),
-		.dout(x_t)
-	);
-	always @(*) begin
-		x_t_in = x_t;
-		x_t_in[11:8] = x_t[11-:4] & ~{4 {dec_tlu_flush_lower_wb}};
-	end
-	rvdfflie #(
-		.WIDTH(17),
-		.LEFT(9)
-	) trap_r_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_x_ctl_en),
-		.din(x_t_in),
-		.dout(r_t)
-	);
-	always @(*) begin
-		r_t_in = r_t;
-		r_t_in[11:8] = ({4 {r_d[3] | r_d[2]}} & lsu_trigger_match_r[3:0]) | r_t[11:8];
-		r_t_in[4] = lsu_pmu_misaligned_r;
-		if (dec_tlu_flush_lower_wb)
-			r_t_in = {17 {1'sb0}};
-	end
-	always @(*) begin
-		dec_tlu_packet_r = r_t_in;
-		dec_tlu_packet_r[6] = r_d[23] & r_d[0];
-	end
-	assign i0_d_c[2] = i0_dp[9] & i0_legal_decode_d;
-	assign i0_d_c[1] = i0_dp[41] & i0_legal_decode_d;
-	assign i0_d_c[0] = i0_dp[49] & i0_legal_decode_d;
-	rvdffs #(.WIDTH(3)) i0_x_c_ff(
-		.rst_l(rst_l),
-		.en(i0_x_ctl_en),
-		.clk(active_clk),
-		.din(i0_d_c),
-		.dout(i0_x_c)
-	);
-	rvdffs #(.WIDTH(3)) i0_r_c_ff(
-		.rst_l(rst_l),
-		.en(i0_r_ctl_en),
-		.clk(active_clk),
-		.din(i0_x_c),
-		.dout(i0_r_c)
-	);
-	assign d_d[8:4] = i0r[4:0];
-	assign d_d[1] = i0_rd_en_d & i0_legal_decode_d;
-	assign d_d[0] = dec_i0_decode_d;
-	assign d_d[3] = i0_dp[41] & i0_legal_decode_d;
-	assign d_d[2] = i0_dp[40] & i0_legal_decode_d;
-	assign d_d[23] = i0_dp[5] & i0_legal_decode_d;
-	assign d_d[22] = dec_csr_wen_unq_d & i0_legal_decode_d;
-	assign d_d[21] = i0_csr_write_only_d & dec_i0_decode_d;
-	assign d_d[20:9] = (d_d[22] ? i0[31:20] : {12 {1'sb0}});
-	rvdff #(.WIDTH(3)) i0cgff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.din(i0_pipe_en[3:1]),
-		.dout(i0_pipe_en[2:0])
-	);
-	assign i0_pipe_en[3] = dec_i0_decode_d;
-	assign i0_x_ctl_en = |i0_pipe_en[3:2] | clk_override;
-	assign i0_r_ctl_en = |i0_pipe_en[2:1] | clk_override;
-	assign i0_wb_ctl_en = |i0_pipe_en[1:0] | clk_override;
-	assign i0_x_data_en = i0_pipe_en[3] | clk_override;
-	assign i0_r_data_en = i0_pipe_en[2] | clk_override;
-	assign i0_wb_data_en = i0_pipe_en[1] | clk_override;
-	assign dec_data_en[1:0] = {i0_x_data_en, i0_r_data_en};
-	assign dec_ctl_en[1:0] = {i0_x_ctl_en, i0_r_ctl_en};
-	rvdfflie #(
-		.WIDTH(24),
-		.LEFT(15)
-	) e1ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_x_ctl_en),
-		.din(d_d),
-		.dout(x_d)
-	);
-	always @(*) begin
-		x_d_in = x_d;
-		x_d_in[1] = (x_d[1] & ~dec_tlu_flush_lower_wb) & ~dec_tlu_flush_lower_r;
-		x_d_in[0] = (x_d[0] & ~dec_tlu_flush_lower_wb) & ~dec_tlu_flush_lower_r;
-	end
-	rvdfflie #(
-		.WIDTH(24),
-		.LEFT(15)
-	) r_d_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_r_ctl_en),
-		.din(x_d_in),
-		.dout(r_d)
-	);
-	always @(*) begin
-		r_d_in = r_d;
-		r_d_in[8:4] = r_d[8:4];
-		r_d_in[1] = r_d[1] & ~dec_tlu_flush_lower_wb;
-		r_d_in[0] = r_d[0] & ~dec_tlu_flush_lower_wb;
-		r_d_in[3] = r_d[3] & ~dec_tlu_flush_lower_wb;
-		r_d_in[2] = r_d[2] & ~dec_tlu_flush_lower_wb;
-	end
-	rvdfflie #(
-		.WIDTH(24),
-		.LEFT(15)
-	) wbff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_wb_ctl_en),
-		.din(r_d_in),
-		.dout(wbd)
-	);
-	assign dec_i0_waddr_r[4:0] = r_d_in[8:4];
-	assign i0_wen_r = r_d_in[1] & ~dec_tlu_i0_kill_writeb_r;
-	assign dec_i0_wen_r = (i0_wen_r & ~r_d_in[23]) & ~i0_load_kill_wen_r;
-	assign dec_i0_wdata_r[31:0] = i0_result_corr_r[31:0];
-	assign div_e1_to_r = (x_d[23] & x_d[0]) | (r_d[23] & r_d[0]);
-	assign div_active_in = i0_div_decode_d | ((div_active & ~exu_div_wren) & ~nonblock_div_cancel);
-	assign dec_div_active = div_active;
-	assign i0_nonblock_div_stall = ((dec_i0_rs1_en_d & div_active) & (div_waddr_wb[4:0] == i0r[14:10])) | ((dec_i0_rs2_en_d & div_active) & (div_waddr_wb[4:0] == i0r[9:5]));
-	assign div_flush = (((x_d[23] & x_d[0]) & (x_d[8:4] == 5'b00000)) | ((x_d[23] & x_d[0]) & dec_tlu_flush_lower_r)) | (((r_d[23] & r_d[0]) & dec_tlu_flush_lower_r) & dec_tlu_i0_kill_writeb_r);
-	assign nonblock_div_cancel = (div_active & div_flush) | (((div_active & ~div_e1_to_r) & (r_d[8:4] == div_waddr_wb[4:0])) & i0_wen_r);
-	assign dec_div_cancel = nonblock_div_cancel;
-	assign i0_div_decode_d = i0_legal_decode_d & i0_dp[5];
-	generate
-		if (pt[202-:5] == 1) begin : genblock1
-			assign i0_result_x[31:0] = exu_i0_result_x[31:0];
-			assign i0_result_r[31:0] = (r_d[1] & r_d[3] ? lsu_result_m[31:0] : i0_result_r_raw[31:0]);
-		end
-		else begin : genblock1
-			assign i0_result_x[31:0] = (x_d[1] & x_d[3] ? lsu_result_m[31:0] : exu_i0_result_x[31:0]);
-			assign i0_result_r[31:0] = i0_result_r_raw[31:0];
-		end
-	endgenerate
-	rvdffe #(.WIDTH(32)) i0_result_r_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_r_data_en & ((x_d[1] | x_d[22]) | debug_valid_x)),
-		.din(i0_result_x[31:0]),
-		.dout(i0_result_r_raw[31:0])
-	);
-	assign i0_result_corr_r[31:0] = (r_d[1] & r_d[3] ? lsu_result_corr_r[31:0] : i0_result_r_raw[31:0]);
-	rvdffe #(.WIDTH(12)) e1brpcff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_x_data_en),
-		.din(last_br_immed_d[12:1]),
-		.dout(last_br_immed_x[12:1])
-	);
-	assign i0_wb_en = i0_wb_data_en;
-	assign i0_inst_wb_in[31:0] = i0_inst_r[31:0];
-	assign i0_inst_d[31:0] = (dec_i0_pc4_d ? i0[31:0] : {16'b0000000000000000, ifu_i0_cinst[15:0]});
-	assign trace_enable = ~dec_tlu_trace_disable;
-	rvdffe #(
-		.WIDTH(5),
-		.OVERRIDE(1)
-	) i0rdff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_div_decode_d),
-		.din(i0r[4:0]),
-		.dout(div_waddr_wb[4:0])
-	);
-	rvdffe #(.WIDTH(32)) i0xinstff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_x_data_en & trace_enable),
-		.din(i0_inst_d[31:0]),
-		.dout(i0_inst_x[31:0])
-	);
-	rvdffe #(.WIDTH(32)) i0cinstff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_r_data_en & trace_enable),
-		.din(i0_inst_x[31:0]),
-		.dout(i0_inst_r[31:0])
-	);
-	rvdffe #(.WIDTH(32)) i0wbinstff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_wb_en & trace_enable),
-		.din(i0_inst_wb_in[31:0]),
-		.dout(i0_inst_wb[31:0])
-	);
-	rvdffe #(.WIDTH(31)) i0wbpcff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_wb_en & trace_enable),
-		.din(dec_tlu_i0_pc_r[31:1]),
-		.dout(i0_pc_wb[31:1])
-	);
-	assign dec_i0_inst_wb[31:0] = i0_inst_wb[31:0];
-	assign dec_i0_pc_wb[31:1] = i0_pc_wb[31:1];
-	rvdffpcie #(.WIDTH(31)) i0_pc_r_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(i0_r_data_en),
-		.din(exu_i0_pc_x[31:1]),
-		.dout(dec_i0_pc_r[31:1])
-	);
-	assign dec_tlu_i0_pc_r[31:1] = dec_i0_pc_r[31:1];
-	rvbradder ibradder_correct(
-		.pc(exu_i0_pc_x[31:1]),
-		.offset(last_br_immed_x[12:1]),
-		.dout(pred_correct_npc_x[31:1])
-	);
-	assign i0_rs1_nonblock_load_bypass_en_d = (dec_i0_rs1_en_d & dec_nonblock_load_wen) & (dec_nonblock_load_waddr[4:0] == i0r[14:10]);
-	assign i0_rs2_nonblock_load_bypass_en_d = (dec_i0_rs2_en_d & dec_nonblock_load_wen) & (dec_nonblock_load_waddr[4:0] == i0r[9:5]);
-	assign i0_rs1bypass[2] = i0_rs1_depth_d[0] & (i0_rs1_class_d[0] | i0_rs1_class_d[2]);
-	assign i0_rs1bypass[1] = i0_rs1_depth_d[0] & i0_rs1_class_d[1];
-	assign i0_rs1bypass[0] = i0_rs1_depth_d[1] & ((i0_rs1_class_d[0] | i0_rs1_class_d[2]) | i0_rs1_class_d[1]);
-	assign i0_rs2bypass[2] = i0_rs2_depth_d[0] & (i0_rs2_class_d[0] | i0_rs2_class_d[2]);
-	assign i0_rs2bypass[1] = i0_rs2_depth_d[0] & i0_rs2_class_d[1];
-	assign i0_rs2bypass[0] = i0_rs2_depth_d[1] & ((i0_rs2_class_d[0] | i0_rs2_class_d[2]) | i0_rs2_class_d[1]);
-	assign dec_i0_rs1_bypass_en_d[3] = ((i0_rs1_nonblock_load_bypass_en_d & ~i0_rs1bypass[0]) & ~i0_rs1bypass[1]) & ~i0_rs1bypass[2];
-	assign dec_i0_rs1_bypass_en_d[2] = i0_rs1bypass[2];
-	assign dec_i0_rs1_bypass_en_d[1] = i0_rs1bypass[1];
-	assign dec_i0_rs1_bypass_en_d[0] = i0_rs1bypass[0];
-	assign dec_i0_rs2_bypass_en_d[3] = ((i0_rs2_nonblock_load_bypass_en_d & ~i0_rs2bypass[0]) & ~i0_rs2bypass[1]) & ~i0_rs2bypass[2];
-	assign dec_i0_rs2_bypass_en_d[2] = i0_rs2bypass[2];
-	assign dec_i0_rs2_bypass_en_d[1] = i0_rs2bypass[1];
-	assign dec_i0_rs2_bypass_en_d[0] = i0_rs2bypass[0];
-	assign dec_i0_result_r[31:0] = i0_result_r[31:0];
-endmodule
-module eb1_dec_dec_ctl (
-	inst,
-	out
-);
-	input wire [31:0] inst;
-	output wire [94:0] out;
-	wire [31:0] i;
-	assign i[31:0] = inst[31:0];
-	assign out[49] = (((((((((((((((((((((((i[30] & i[24]) & i[23]) & !i[22]) & !i[21]) & !i[20]) & i[14]) & !i[5]) & i[4]) | (((i[29] & !i[27]) & !i[24]) & i[4])) | (((!i[25] & !i[13]) & !i[12]) & i[4])) | (((!i[30] & !i[25]) & i[13]) & i[12])) | (((i[27] & i[25]) & i[14]) & i[4])) | (((i[29] & i[27]) & !i[14]) & i[4])) | (((i[29] & !i[14]) & i[5]) & i[4])) | (((!i[27] & !i[25]) & i[14]) & i[4])) | (((i[30] & !i[29]) & !i[13]) & i[4])) | (((!i[30] & !i[27]) & !i[25]) & i[4])) | ((i[13] & !i[5]) & i[4])) | ((!i[12] & !i[5]) & i[4])) | i[2]) | i[6]) | (((((((i[30] & i[24]) & i[23]) & i[22]) & i[21]) & i[20]) & !i[5]) & i[4])) | ((((((((!i[30] & i[29]) & !i[24]) & !i[23]) & i[22]) & i[21]) & i[20]) & !i[5]) & i[4])) | (((((((!i[30] & i[24]) & !i[23]) & !i[22]) & !i[21]) & !i[20]) & !i[5]) & i[4]);
-	assign out[48] = (((((((((((((!i[14] & !i[13]) & !i[2]) | ((!i[13] & i[11]) & !i[2])) | ((i[19] & i[13]) & !i[2])) | ((!i[13] & i[10]) & !i[2])) | ((i[18] & i[13]) & !i[2])) | ((!i[13] & i[9]) & !i[2])) | ((i[17] & i[13]) & !i[2])) | ((!i[13] & i[8]) & !i[2])) | ((i[16] & i[13]) & !i[2])) | ((!i[13] & i[7]) & !i[2])) | ((i[15] & i[13]) & !i[2])) | (!i[4] & !i[3])) | (!i[6] & !i[2]);
-	assign out[47] = ((i[5] & !i[4]) & !i[2]) | ((!i[6] & i[5]) & !i[2]);
-	assign out[46] = ((((!i[4] & !i[3]) & i[2]) | (((i[13] & !i[5]) & i[4]) & !i[2])) | (((!i[13] & !i[12]) & i[6]) & i[4])) | (((!i[12] & !i[5]) & i[4]) & !i[2]);
-	assign out[45] = ((!i[5] & !i[2]) | (i[5] & i[2])) | i[4];
-	assign out[44] = ((((((i[27] & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2]) | (((((!i[30] & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((i[14] & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2]);
-	assign out[43] = (i[5] & i[3]) | (i[4] & i[2]);
-	assign out[42] = ((!i[5] & !i[3]) & i[2]) | (i[5] & i[3]);
-	assign out[41] = (!i[5] & !i[4]) & !i[2];
-	assign out[40] = (!i[6] & i[5]) & !i[4];
-	assign out[39] = (!i[6] & !i[4]) & !i[2];
-	assign out[38] = (((((!i[14] & !i[13]) & !i[12]) & !i[5]) & i[4]) | ((!i[5] & !i[3]) & i[2])) | (((((((!i[30] & !i[25]) & !i[14]) & !i[13]) & !i[12]) & !i[6]) & i[4]) & !i[2]);
-	assign out[37] = (((((((((i[30] & !i[14]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2]) | ((((((!i[29] & !i[25]) & !i[14]) & i[13]) & !i[6]) & i[4]) & !i[2])) | (((((i[27] & i[25]) & i[14]) & !i[6]) & i[5]) & !i[2])) | ((((!i[14] & i[13]) & !i[5]) & i[4]) & !i[2])) | ((i[6] & !i[4]) & !i[2]);
-	assign out[36] = ((((((!i[27] & !i[25]) & i[14]) & i[13]) & i[12]) & !i[6]) & !i[2]) | ((((i[14] & i[13]) & i[12]) & !i[5]) & !i[2]);
-	assign out[35] = ((((!i[6] & i[3]) | (((((((!i[29] & !i[27]) & !i[25]) & i[14]) & i[13]) & !i[12]) & !i[6]) & !i[2])) | ((i[5] & i[4]) & i[2])) | (((!i[13] & !i[12]) & i[6]) & i[4])) | ((((i[14] & i[13]) & !i[12]) & !i[5]) & !i[2]);
-	assign out[34] = (((((((!i[29] & !i[27]) & !i[25]) & i[14]) & !i[13]) & !i[12]) & i[4]) & !i[2]) | (((((i[14] & !i[13]) & !i[12]) & !i[5]) & i[4]) & !i[2]);
-	assign out[33] = (((((((!i[29] & !i[27]) & !i[25]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[32] = ((((((i[30] & !i[29]) & !i[27]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[31] = ((((((((!i[30] & !i[29]) & !i[27]) & !i[25]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[30] = ((((((!i[29] & !i[25]) & !i[14]) & i[13]) & !i[6]) & i[4]) & !i[2]) | ((((!i[14] & i[13]) & !i[5]) & i[4]) & !i[2]);
-	assign out[29] = ((((((((((!i[27] & i[25]) & i[14]) & i[12]) & !i[6]) & i[5]) & !i[2]) | ((((!i[14] & i[13]) & i[12]) & !i[5]) & !i[2])) | (((i[13] & i[6]) & !i[4]) & !i[2])) | ((i[14] & !i[5]) & !i[4])) | (((((!i[25] & !i[14]) & i[13]) & i[12]) & !i[6]) & !i[2])) | ((((((i[27] & i[25]) & i[14]) & i[13]) & !i[6]) & i[5]) & !i[2]);
-	assign out[28] = (i[6] & !i[4]) & !i[2];
-	assign out[27] = (((!i[14] & !i[12]) & i[6]) & !i[4]) & !i[2];
-	assign out[26] = (((!i[14] & i[12]) & i[6]) & !i[4]) & !i[2];
-	assign out[25] = (((i[14] & i[12]) & i[5]) & !i[4]) & !i[2];
-	assign out[24] = (((i[14] & !i[12]) & i[5]) & !i[4]) & !i[2];
-	assign out[23] = i[6] & i[2];
-	assign out[22] = (((!i[13] & !i[12]) & !i[6]) & !i[4]) & !i[2];
-	assign out[21] = ((i[12] & !i[6]) & !i[4]) & !i[2];
-	assign out[20] = (i[13] & !i[6]) & !i[4];
-	assign out[19] = ((((((i[13] & i[6]) & i[4]) | ((i[7] & i[6]) & i[4])) | ((i[8] & i[6]) & i[4])) | ((i[9] & i[6]) & i[4])) | ((i[10] & i[6]) & i[4])) | ((i[11] & i[6]) & i[4]);
-	assign out[18] = (((((((i[15] & i[13]) & i[12]) & i[6]) & i[4]) | ((((i[16] & i[13]) & i[12]) & i[6]) & i[4])) | ((((i[17] & i[13]) & i[12]) & i[6]) & i[4])) | ((((i[18] & i[13]) & i[12]) & i[6]) & i[4])) | ((((i[19] & i[13]) & i[12]) & i[6]) & i[4]);
-	assign out[17] = ((((((i[15] & !i[12]) & i[6]) & i[4]) | (((i[16] & !i[12]) & i[6]) & i[4])) | (((i[17] & !i[12]) & i[6]) & i[4])) | (((i[18] & !i[12]) & i[6]) & i[4])) | (((i[19] & !i[12]) & i[6]) & i[4]);
-	assign out[16] = ((!i[13] & i[12]) & i[6]) & i[4];
-	assign out[15] = (((((((i[14] & !i[13]) & i[6]) & i[4]) | (((i[15] & i[14]) & i[6]) & i[4])) | (((i[16] & i[14]) & i[6]) & i[4])) | (((i[17] & i[14]) & i[6]) & i[4])) | (((i[18] & i[14]) & i[6]) & i[4])) | (((i[19] & i[14]) & i[6]) & i[4]);
-	assign out[14] = ((((((((((!i[5] & i[3]) | (((!i[13] & i[7]) & i[6]) & i[4])) | (((!i[13] & i[8]) & i[6]) & i[4])) | (((!i[13] & i[9]) & i[6]) & i[4])) | (((!i[13] & i[10]) & i[6]) & i[4])) | (((!i[13] & i[11]) & i[6]) & i[4])) | (((i[15] & i[13]) & i[6]) & i[4])) | (((i[16] & i[13]) & i[6]) & i[4])) | (((i[17] & i[13]) & i[6]) & i[4])) | (((i[18] & i[13]) & i[6]) & i[4])) | (((i[19] & i[13]) & i[6]) & i[4]);
-	assign out[13] = ((((((((((((i[12] & !i[5]) & i[3]) | ((((!i[22] & !i[13]) & !i[12]) & i[6]) & i[4])) | (((!i[13] & i[7]) & i[6]) & i[4])) | (((!i[13] & i[8]) & i[6]) & i[4])) | (((!i[13] & i[9]) & i[6]) & i[4])) | (((!i[13] & i[10]) & i[6]) & i[4])) | (((!i[13] & i[11]) & i[6]) & i[4])) | (((i[15] & i[13]) & i[6]) & i[4])) | (((i[16] & i[13]) & i[6]) & i[4])) | (((i[17] & i[13]) & i[6]) & i[4])) | (((i[18] & i[13]) & i[6]) & i[4])) | (((i[19] & i[13]) & i[6]) & i[4]);
-	assign out[12] = ((((!i[22] & i[20]) & !i[13]) & !i[12]) & i[6]) & i[4];
-	assign out[11] = ((((!i[21] & !i[20]) & !i[13]) & !i[12]) & i[6]) & i[4];
-	assign out[10] = (((i[29] & !i[13]) & !i[12]) & i[6]) & i[4];
-	assign out[9] = (((((((((((((((((((((!i[30] & i[27]) & i[24]) & i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2]) | (((((((((i[29] & i[27]) & !i[24]) & i[23]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((((((i[29] & i[27]) & !i[24]) & !i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((((i[27] & !i[25]) & i[13]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((i[30] & i[27]) & i[13]) & !i[6]) & i[5]) & i[4]) & !i[2])) | (((((((((i[29] & i[27]) & i[22]) & !i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((((((i[29] & i[27]) & !i[21]) & i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((((((i[29] & i[27]) & !i[22]) & i[21]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((((((i[30] & i[29]) & i[27]) & !i[23]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | ((((((((!i[30] & i[27]) & i[23]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | ((((((((!i[30] & !i[29]) & i[27]) & !i[25]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2])) | (((((i[25] & !i[14]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((((i[30] & !i[27]) & i[24]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((i[29] & i[27]) & i[14]) & !i[6]) & i[5]) & !i[2]);
-	assign out[8] = ((((((((!i[27] & i[25]) & !i[14]) & i[13]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2]) | (((((((!i[27] & i[25]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2]);
-	assign out[7] = ((((((!i[27] & i[25]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[6] = (((((i[25] & !i[14]) & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2];
-	assign out[5] = ((((!i[27] & i[25]) & i[14]) & !i[6]) & i[5]) & !i[2];
-	assign out[4] = (((((!i[27] & i[25]) & i[14]) & i[13]) & !i[6]) & i[5]) & !i[2];
-	assign out[3] = !i[5] & i[3];
-	assign out[2] = (i[12] & !i[5]) & i[3];
-	assign out[94] = ((((((((((i[30] & !i[27]) & !i[24]) & !i[22]) & !i[21]) & !i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[93] = (((((((((i[30] & !i[27]) & !i[24]) & !i[22]) & i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[92] = ((((((((i[30] & !i[27]) & !i[24]) & i[21]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[91] = ((((((((i[30] & !i[27]) & i[22]) & !i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[90] = ((((((((i[30] & !i[27]) & i[22]) & i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[89] = (((((((!i[30] & i[29]) & !i[27]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[88] = (((((((!i[30] & i[29]) & !i[27]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[87] = (((((i[27] & i[25]) & i[14]) & !i[12]) & !i[6]) & i[5]) & !i[2];
-	assign out[86] = (((((i[27] & i[25]) & i[14]) & i[12]) & !i[6]) & i[5]) & !i[2];
-	assign out[85] = ((((((!i[30] & i[27]) & !i[25]) & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2];
-	assign out[84] = (((((i[30] & i[27]) & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2];
-	assign out[83] = ((((((!i[30] & i[27]) & !i[25]) & i[13]) & i[12]) & !i[6]) & i[5]) & !i[2];
-	assign out[82] = ((((((i[30] & !i[27]) & !i[14]) & i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[81] = (((((((i[30] & i[29]) & !i[27]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[78] = ((((((((((((((((((i[30] & !i[27]) & !i[24]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2]) | (((((((!i[30] & i[27]) & i[14]) & i[13]) & i[12]) & !i[6]) & i[5]) & !i[2])) | ((((((((i[30] & i[29]) & !i[27]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((i[27] & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2])) | ((((((i[30] & i[14]) & !i[13]) & !i[12]) & !i[6]) & i[5]) & !i[2])) | ((((((i[30] & !i[27]) & i[13]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((i[30] & i[29]) & !i[27]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((((((((i[30] & i[29]) & i[24]) & i[23]) & i[22]) & i[21]) & i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((((((((((!i[30] & i[29]) & i[27]) & !i[24]) & !i[23]) & i[22]) & i[21]) & i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | ((((((((((((!i[30] & i[27]) & i[24]) & !i[23]) & !i[22]) & !i[21]) & !i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | ((((((((((((i[30] & i[29]) & i[24]) & i[23]) & !i[22]) & !i[21]) & !i[20]) & i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | (((((i[27] & i[25]) & i[14]) & !i[6]) & i[5]) & !i[2]);
-	assign out[77] = (((((((!i[30] & i[29]) & i[27]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[76] = ((((((i[30] & !i[29]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[75] = (((((((i[30] & i[29]) & i[27]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[74] = (((((((i[30] & !i[29]) & i[27]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[73] = (((((((i[29] & i[27]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2]) | (((((((i[30] & !i[29]) & i[27]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2]);
-	assign out[72] = (((((((!i[30] & i[27]) & !i[25]) & i[13]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[71] = ((((((i[30] & i[27]) & i[13]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[70] = ((((((i[27] & !i[25]) & i[13]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[69] = ((((((i[27] & i[25]) & !i[14]) & !i[13]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[68] = (((((i[27] & !i[14]) & i[13]) & i[12]) & !i[6]) & i[5]) & !i[2];
-	assign out[67] = (((((i[27] & !i[14]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[66] = (((((i[27] & i[25]) & !i[14]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[80] = (((((((i[30] & i[29]) & i[27]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[79] = (((((((!i[30] & i[29]) & i[27]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[65] = ((((((((!i[30] & !i[29]) & i[27]) & !i[25]) & !i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[64] = ((((((((!i[30] & !i[29]) & i[27]) & !i[25]) & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2];
-	assign out[63] = (((((((((((((!i[30] & i[29]) & !i[27]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2]) | (((((((!i[30] & !i[29]) & i[27]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2])) | ((((((i[30] & !i[27]) & i[13]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((i[27] & !i[25]) & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2])) | ((((((i[30] & i[14]) & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2])) | ((((((i[29] & !i[27]) & i[12]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((((!i[30] & !i[29]) & i[27]) & !i[25]) & i[12]) & !i[6]) & i[5]) & i[4]) & !i[2])) | ((((((i[29] & i[14]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[2]);
-	assign out[62] = ((((((((((i[30] & !i[27]) & i[24]) & !i[23]) & !i[21]) & !i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[61] = (((((((((i[30] & !i[27]) & i[24]) & !i[23]) & i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[60] = (((((((((i[30] & !i[27]) & i[24]) & !i[23]) & i[21]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[59] = (((((((((i[30] & !i[27]) & i[23]) & !i[21]) & !i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[58] = ((((((((i[30] & !i[27]) & i[23]) & i[20]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[57] = ((((((((i[30] & !i[27]) & i[23]) & i[21]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[56] = (((((((i[30] & !i[27]) & i[24]) & !i[14]) & !i[13]) & i[12]) & !i[5]) & i[4]) & !i[2];
-	assign out[55] = (((((i[30] & i[27]) & i[13]) & i[12]) & !i[6]) & i[5]) & !i[2];
-	assign out[54] = (((((i[30] & i[27]) & i[13]) & i[12]) & !i[6]) & i[5]) & !i[2];
-	assign out[53] = (((((i[29] & !i[14]) & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[52] = (((((i[29] & i[14]) & !i[13]) & !i[12]) & i[5]) & i[4]) & !i[2];
-	assign out[51] = ((((i[29] & i[14]) & i[13]) & !i[6]) & i[5]) & !i[2];
-	assign out[50] = ((((i[29] & !i[12]) & !i[6]) & i[5]) & i[4]) & !i[2];
-	assign out[1] = (((((((((i[28] & i[22]) & !i[13]) & !i[12]) & i[4]) | (((((!i[30] & !i[29]) & !i[27]) & !i[25]) & !i[6]) & i[4])) | ((((((!i[29] & !i[27]) & !i[25]) & !i[13]) & i[12]) & !i[6]) & i[4])) | (((((!i[29] & !i[27]) & !i[25]) & !i[14]) & !i[6]) & i[4])) | ((i[13] & !i[5]) & i[4])) | (i[4] & i[2])) | ((!i[12] & !i[5]) & i[4]);
-	assign out[0] = (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((!i[31] & !i[30]) & !i[29]) & i[28]) & !i[27]) & !i[26]) & !i[25]) & !i[24]) & !i[23]) & i[22]) & !i[21]) & i[20]) & !i[19]) & !i[18]) & !i[17]) & !i[16]) & !i[15]) & !i[14]) & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & i[6]) & i[5]) & i[4]) & !i[3]) & !i[2]) & i[1]) & i[0]) | (((((((((((((((((((((((((((((!i[31] & !i[30]) & i[29]) & i[28]) & !i[27]) & !i[26]) & !i[25]) & !i[24]) & !i[23]) & !i[22]) & i[21]) & !i[20]) & !i[19]) & !i[18]) & !i[17]) & !i[16]) & !i[15]) & !i[14]) & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & i[6]) & i[5]) & i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | (((((((((((((((((((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[27]) & !i[26]) & !i[25]) & !i[24]) & !i[23]) & !i[22]) & !i[21]) & !i[19]) & !i[18]) & !i[17]) & !i[16]) & !i[15]) & !i[14]) & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & i[5]) & i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | (((((((((((((!i[31] & i[29]) & !i[28]) & !i[26]) & !i[25]) & i[24]) & !i[22]) & !i[20]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((((!i[31] & i[29]) & !i[28]) & !i[26]) & !i[25]) & i[24]) & !i[22]) & !i[21]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((((!i[31] & i[29]) & !i[28]) & !i[26]) & !i[25]) & !i[23]) & !i[22]) & !i[20]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((((!i[31] & i[29]) & !i[28]) & !i[26]) & !i[25]) & !i[24]) & !i[23]) & !i[21]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[26]) & i[25]) & i[13]) & !i[6]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[30]) & !i[28]) & !i[26]) & !i[25]) & !i[24]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((((((!i[31] & !i[30]) & !i[28]) & !i[27]) & !i[26]) & !i[25]) & i[14]) & !i[12]) & !i[6]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((((((!i[31] & !i[30]) & !i[28]) & !i[27]) & !i[26]) & !i[25]) & i[13]) & !i[12]) & !i[6]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((((((!i[31] & !i[29]) & !i[28]) & !i[27]) & !i[26]) & !i[25]) & !i[13]) & !i[12]) & !i[6]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[28]) & !i[27]) & !i[26]) & !i[25]) & i[14]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[26]) & !i[13]) & i[12]) & i[5]) & i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[26]) & i[14]) & !i[6]) & i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((((((!i[31] & i[30]) & !i[28]) & i[27]) & !i[26]) & !i[25]) & !i[13]) & i[12]) & !i[6]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & i[29]) & !i[28]) & i[27]) & !i[26]) & !i[25]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[30]) & !i[28]) & !i[27]) & !i[26]) & !i[25]) & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[27]) & !i[26]) & !i[6]) & i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((!i[14] & !i[13]) & !i[12]) & i[6]) & i[5]) & !i[4]) & !i[3]) & i[1]) & i[0])) | (((((((((((!i[31] & !i[29]) & !i[28]) & !i[26]) & !i[25]) & i[14]) & !i[6]) & i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | ((((((((((((!i[31] & i[29]) & !i[28]) & !i[26]) & !i[25]) & !i[13]) & i[12]) & i[5]) & i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | (((((((i[14] & i[6]) & i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | (((((((!i[14] & !i[13]) & i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | ((((((!i[12] & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((((!i[13] & i[12]) & i[6]) & i[5]) & !i[3]) & !i[2]) & i[1]) & i[0])) | ((((((((((((((((((((((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[27]) & !i[26]) & !i[25]) & !i[24]) & !i[23]) & !i[22]) & !i[21]) & !i[20]) & !i[19]) & !i[18]) & !i[17]) & !i[16]) & !i[15]) & !i[14]) & !i[13]) & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & !i[6]) & !i[5]) & !i[4]) & i[3]) & i[2]) & i[1]) & i[0])) | (((((((((((((((((((((((!i[31] & !i[30]) & !i[29]) & !i[28]) & !i[19]) & !i[18]) & !i[17]) & !i[16]) & !i[15]) & !i[14]) & !i[13]) & !i[12]) & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & !i[6]) & !i[5]) & !i[4]) & i[3]) & i[2]) & i[1]) & i[0])) | (((((((i[13] & i[6]) & i[5]) & i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | ((((((i[6] & i[5]) & !i[4]) & i[3]) & i[2]) & i[1]) & i[0])) | (((((((!i[14] & !i[12]) & !i[6]) & !i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | (((((((!i[13] & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1]) & i[0])) | ((((((i[13] & !i[6]) & !i[5]) & i[4]) & !i[3]) & i[1]) & i[0])) | (((((!i[6] & i[4]) & !i[3]) & i[2]) & i[1]) & i[0]);
-endmodule
-module eb1_dec_gpr_ctl (
-	raddr0,
-	raddr1,
-	wen0,
-	waddr0,
-	wd0,
-	wen1,
-	waddr1,
-	wd1,
-	wen2,
-	waddr2,
-	wd2,
-	clk,
-	rst_l,
-	rd0,
-	rd1,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [4:0] raddr0;
-	input wire [4:0] raddr1;
-	input wire wen0;
-	input wire [4:0] waddr0;
-	input wire [31:0] wd0;
-	input wire wen1;
-	input wire [4:0] waddr1;
-	input wire [31:0] wd1;
-	input wire wen2;
-	input wire [4:0] waddr2;
-	input wire [31:0] wd2;
-	input wire clk;
-	input wire rst_l;
-	output reg [31:0] rd0;
-	output reg [31:0] rd1;
-	input wire scan_mode;
-	wire [1023:32] gpr_out;
-	reg [1023:32] gpr_in;
-	reg [31:1] w0v;
-	reg [31:1] w1v;
-	reg [31:1] w2v;
-	wire [31:1] gpr_wr_en;
-	assign gpr_wr_en[31:1] = (w0v[31:1] | w1v[31:1]) | w2v[31:1];
-	generate
-		genvar j;
-		for (j = 1; j < 32; j = j + 1) begin : gpr
-			rvdffe #(.WIDTH(32)) gprff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(gpr_wr_en[j]),
-				.din(gpr_in[(j * 32) + 31-:32]),
-				.dout(gpr_out[(j * 32) + 31-:32])
-			);
-		end
-	endgenerate
-	function automatic signed [4:0] sv2v_cast_5_signed;
-		input reg signed [4:0] inp;
-		sv2v_cast_5_signed = inp;
-	endfunction
-	always @(*) begin
-		rd0[31:0] = 32'b00000000000000000000000000000000;
-		rd1[31:0] = 32'b00000000000000000000000000000000;
-		w0v[31:1] = 31'b0000000000000000000000000000000;
-		w1v[31:1] = 31'b0000000000000000000000000000000;
-		w2v[31:1] = 31'b0000000000000000000000000000000;
-		gpr_in[32+:992] = {992 {1'sb0}};
-		begin : sv2v_autoblock_39
-			reg signed [31:0] j;
-			for (j = 1; j < 32; j = j + 1)
-				begin
-					rd0[31:0] = rd0[31:0] | ({32 {raddr0[4:0] == sv2v_cast_5_signed(j)}} & gpr_out[(j * 32) + 31-:32]);
-					rd1[31:0] = rd1[31:0] | ({32 {raddr1[4:0] == sv2v_cast_5_signed(j)}} & gpr_out[(j * 32) + 31-:32]);
-				end
-		end
-		begin : sv2v_autoblock_40
-			reg signed [31:0] j;
-			for (j = 1; j < 32; j = j + 1)
-				begin
-					w0v[j] = wen0 & (waddr0[4:0] == sv2v_cast_5_signed(j));
-					w1v[j] = wen1 & (waddr1[4:0] == sv2v_cast_5_signed(j));
-					w2v[j] = wen2 & (waddr2[4:0] == sv2v_cast_5_signed(j));
-					gpr_in[j * 32+:32] = (({32 {w0v[j]}} & wd0[31:0]) | ({32 {w1v[j]}} & wd1[31:0])) | ({32 {w2v[j]}} & wd2[31:0]);
-				end
-		end
-	end
-endmodule
-module eb1_dec_ib_ctl (
-	dbg_cmd_valid,
-	dbg_cmd_write,
-	dbg_cmd_type,
-	dbg_cmd_addr,
-	i0_brp,
-	ifu_i0_bp_index,
-	ifu_i0_bp_fghr,
-	ifu_i0_bp_btag,
-	ifu_i0_fa_index,
-	ifu_i0_pc4,
-	ifu_i0_valid,
-	ifu_i0_icaf,
-	ifu_i0_icaf_type,
-	ifu_i0_icaf_second,
-	ifu_i0_dbecc,
-	ifu_i0_instr,
-	ifu_i0_pc,
-	dec_ib0_valid_d,
-	dec_debug_valid_d,
-	dec_i0_instr_d,
-	dec_i0_pc_d,
-	dec_i0_pc4_d,
-	dec_i0_brp,
-	dec_i0_bp_index,
-	dec_i0_bp_fghr,
-	dec_i0_bp_btag,
-	dec_i0_bp_fa_index,
-	dec_i0_icaf_d,
-	dec_i0_icaf_second_d,
-	dec_i0_icaf_type_d,
-	dec_i0_dbecc_d,
-	dec_debug_wdata_rs1_d,
-	dec_debug_fence_d
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire dbg_cmd_valid;
-	input wire dbg_cmd_write;
-	input wire [1:0] dbg_cmd_type;
-	input wire [31:0] dbg_cmd_addr;
-	input wire [50:0] i0_brp;
-	input wire [pt[2172-:9]:pt[2163-:6]] ifu_i0_bp_index;
-	input wire [pt[2236-:8] - 1:0] ifu_i0_bp_fghr;
-	input wire [pt[2139-:9] - 1:0] ifu_i0_bp_btag;
-	input wire [$clog2(pt[2061-:14]) - 1:0] ifu_i0_fa_index;
-	input wire ifu_i0_pc4;
-	input wire ifu_i0_valid;
-	input wire ifu_i0_icaf;
-	input wire [1:0] ifu_i0_icaf_type;
-	input wire ifu_i0_icaf_second;
-	input wire ifu_i0_dbecc;
-	input wire [31:0] ifu_i0_instr;
-	input wire [31:1] ifu_i0_pc;
-	output wire dec_ib0_valid_d;
-	output wire dec_debug_valid_d;
-	output wire [31:0] dec_i0_instr_d;
-	output wire [31:1] dec_i0_pc_d;
-	output wire dec_i0_pc4_d;
-	output wire [50:0] dec_i0_brp;
-	output wire [pt[2172-:9]:pt[2163-:6]] dec_i0_bp_index;
-	output wire [pt[2236-:8] - 1:0] dec_i0_bp_fghr;
-	output wire [pt[2139-:9] - 1:0] dec_i0_bp_btag;
-	output wire [$clog2(pt[2061-:14]) - 1:0] dec_i0_bp_fa_index;
-	output wire dec_i0_icaf_d;
-	output wire dec_i0_icaf_second_d;
-	output wire [1:0] dec_i0_icaf_type_d;
-	output wire dec_i0_dbecc_d;
-	output wire dec_debug_wdata_rs1_d;
-	output wire dec_debug_fence_d;
-	wire debug_valid;
-	wire [4:0] dreg;
-	wire [11:0] dcsr;
-	wire [31:0] ib0;
-	wire [31:0] ib0_debug_in;
-	wire debug_read;
-	wire debug_write;
-	wire debug_read_gpr;
-	wire debug_write_gpr;
-	wire debug_read_csr;
-	wire debug_write_csr;
-	wire [34:0] ifu_i0_pcdata;
-	wire [34:0] pc0;
-	assign ifu_i0_pcdata[34:0] = {ifu_i0_icaf_second, ifu_i0_dbecc, ifu_i0_icaf, ifu_i0_pc[31:1], ifu_i0_pc4};
-	assign pc0[34:0] = ifu_i0_pcdata[34:0];
-	assign dec_i0_icaf_second_d = pc0[34];
-	assign dec_i0_dbecc_d = pc0[33];
-	assign dec_i0_icaf_d = pc0[32];
-	assign dec_i0_pc_d[31:1] = pc0[31:1];
-	assign dec_i0_pc4_d = pc0[0];
-	assign dec_i0_icaf_type_d[1:0] = ifu_i0_icaf_type[1:0];
-	assign debug_valid = dbg_cmd_valid & (dbg_cmd_type[1:0] != 2'h2);
-	assign debug_read = debug_valid & ~dbg_cmd_write;
-	assign debug_write = debug_valid & dbg_cmd_write;
-	assign debug_read_gpr = debug_read & (dbg_cmd_type[1:0] == 2'h0);
-	assign debug_write_gpr = debug_write & (dbg_cmd_type[1:0] == 2'h0);
-	assign debug_read_csr = debug_read & (dbg_cmd_type[1:0] == 2'h1);
-	assign debug_write_csr = debug_write & (dbg_cmd_type[1:0] == 2'h1);
-	assign dreg[4:0] = dbg_cmd_addr[4:0];
-	assign dcsr[11:0] = dbg_cmd_addr[11:0];
-	assign ib0_debug_in[31:0] = ((({32 {debug_read_gpr}} & {12'b000000000000, dreg[4:0], 15'b110000000110011}) | ({32 {debug_write_gpr}} & {20'b00000000000000000110, dreg[4:0], 7'b0110011})) | ({32 {debug_read_csr}} & {dcsr[11:0], 20'b00000010000001110011})) | ({32 {debug_write_csr}} & {dcsr[11:0], 20'b00000001000001110011});
-	assign dec_debug_wdata_rs1_d = debug_write_gpr | debug_write_csr;
-	assign dec_debug_fence_d = debug_write_csr & (dcsr[11:0] == 12'h7c4);
-	assign ib0[31:0] = (debug_valid ? ib0_debug_in[31:0] : ifu_i0_instr[31:0]);
-	assign dec_ib0_valid_d = ifu_i0_valid | debug_valid;
-	assign dec_debug_valid_d = debug_valid;
-	assign dec_i0_instr_d[31:0] = ib0[31:0];
-	assign dec_i0_brp = i0_brp;
-	assign dec_i0_bp_index = ifu_i0_bp_index;
-	assign dec_i0_bp_fghr = ifu_i0_bp_fghr;
-	assign dec_i0_bp_btag = ifu_i0_bp_btag;
-	assign dec_i0_bp_fa_index = ifu_i0_fa_index;
-endmodule
-module eb1_dec_tlu_ctl (
-	clk,
-	free_clk,
-	free_l2clk,
-	rst_l,
-	scan_mode,
-	rst_vec,
-	nmi_int,
-	nmi_vec,
-	i_cpu_halt_req,
-	i_cpu_run_req,
-	lsu_fastint_stall_any,
-	ifu_pmu_instr_aligned,
-	ifu_pmu_fetch_stall,
-	ifu_pmu_ic_miss,
-	ifu_pmu_ic_hit,
-	ifu_pmu_bus_error,
-	ifu_pmu_bus_busy,
-	ifu_pmu_bus_trxn,
-	dec_pmu_instr_decoded,
-	dec_pmu_decode_stall,
-	dec_pmu_presync_stall,
-	dec_pmu_postsync_stall,
-	lsu_store_stall_any,
-	dma_dccm_stall_any,
-	dma_iccm_stall_any,
-	exu_pmu_i0_br_misp,
-	exu_pmu_i0_br_ataken,
-	exu_pmu_i0_pc4,
-	lsu_pmu_bus_trxn,
-	lsu_pmu_bus_misaligned,
-	lsu_pmu_bus_error,
-	lsu_pmu_bus_busy,
-	lsu_pmu_load_external_m,
-	lsu_pmu_store_external_m,
-	dma_pmu_dccm_read,
-	dma_pmu_dccm_write,
-	dma_pmu_any_read,
-	dma_pmu_any_write,
-	lsu_fir_addr,
-	lsu_fir_error,
-	iccm_dma_sb_error,
-	lsu_error_pkt_r,
-	lsu_single_ecc_error_incr,
-	dec_pause_state,
-	lsu_imprecise_error_store_any,
-	lsu_imprecise_error_load_any,
-	lsu_imprecise_error_addr_any,
-	dec_csr_wen_unq_d,
-	dec_csr_any_unq_d,
-	dec_csr_rdaddr_d,
-	dec_csr_wen_r,
-	dec_csr_wraddr_r,
-	dec_csr_wrdata_r,
-	dec_csr_stall_int_ff,
-	dec_tlu_i0_valid_r,
-	exu_npc_r,
-	dec_tlu_i0_pc_r,
-	dec_tlu_packet_r,
-	dec_illegal_inst,
-	dec_i0_decode_d,
-	exu_i0_br_hist_r,
-	exu_i0_br_error_r,
-	exu_i0_br_start_error_r,
-	exu_i0_br_valid_r,
-	exu_i0_br_mp_r,
-	exu_i0_br_middle_r,
-	exu_i0_br_way_r,
-	dec_tlu_core_empty,
-	dec_dbg_cmd_done,
-	dec_dbg_cmd_fail,
-	dec_tlu_dbg_halted,
-	dec_tlu_debug_mode,
-	dec_tlu_resume_ack,
-	dec_tlu_debug_stall,
-	dec_tlu_flush_noredir_r,
-	dec_tlu_mpc_halted_only,
-	dec_tlu_flush_leak_one_r,
-	dec_tlu_flush_err_r,
-	dec_tlu_flush_extint,
-	dec_tlu_meihap,
-	dbg_halt_req,
-	dbg_resume_req,
-	ifu_miss_state_idle,
-	lsu_idle_any,
-	dec_div_active,
-	trigger_pkt_any,
-	ifu_ic_error_start,
-	ifu_iccm_rd_ecc_single_err,
-	ifu_ic_debug_rd_data,
-	ifu_ic_debug_rd_data_valid,
-	dec_tlu_ic_diag_pkt,
-	pic_claimid,
-	pic_pl,
-	mhwakeup,
-	mexintpend,
-	timer_int,
-	soft_int,
-	o_cpu_halt_status,
-	o_cpu_halt_ack,
-	o_cpu_run_ack,
-	o_debug_mode_status,
-	core_id,
-	mpc_debug_halt_req,
-	mpc_debug_run_req,
-	mpc_reset_run_req,
-	mpc_debug_halt_ack,
-	mpc_debug_run_ack,
-	debug_brkpt_status,
-	dec_tlu_meicurpl,
-	dec_tlu_meipt,
-	dec_csr_rddata_d,
-	dec_csr_legal_d,
-	dec_tlu_br0_r_pkt,
-	dec_tlu_i0_kill_writeb_wb,
-	dec_tlu_flush_lower_wb,
-	dec_tlu_i0_commit_cmt,
-	dec_tlu_i0_kill_writeb_r,
-	dec_tlu_flush_lower_r,
-	dec_tlu_flush_path_r,
-	dec_tlu_fence_i_r,
-	dec_tlu_wr_pause_r,
-	dec_tlu_flush_pause_r,
-	dec_tlu_presync_d,
-	dec_tlu_postsync_d,
-	dec_tlu_mrac_ff,
-	dec_tlu_force_halt,
-	dec_tlu_perfcnt0,
-	dec_tlu_perfcnt1,
-	dec_tlu_perfcnt2,
-	dec_tlu_perfcnt3,
-	dec_tlu_i0_exc_valid_wb1,
-	dec_tlu_i0_valid_wb1,
-	dec_tlu_int_valid_wb1,
-	dec_tlu_exc_cause_wb1,
-	dec_tlu_mtval_wb1,
-	dec_tlu_external_ldfwd_disable,
-	dec_tlu_sideeffect_posted_disable,
-	dec_tlu_core_ecc_disable,
-	dec_tlu_bpred_disable,
-	dec_tlu_wb_coalescing_disable,
-	dec_tlu_pipelining_disable,
-	dec_tlu_trace_disable,
-	dec_tlu_dma_qos_prty,
-	dec_tlu_misc_clk_override,
-	dec_tlu_dec_clk_override,
-	dec_tlu_ifu_clk_override,
-	dec_tlu_lsu_clk_override,
-	dec_tlu_bus_clk_override,
-	dec_tlu_pic_clk_override,
-	dec_tlu_picio_clk_override,
-	dec_tlu_dccm_clk_override,
-	dec_tlu_icm_clk_override
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire free_clk;
-	input wire free_l2clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire [31:1] rst_vec;
-	input wire nmi_int;
-	input wire [31:1] nmi_vec;
-	input wire i_cpu_halt_req;
-	input wire i_cpu_run_req;
-	input wire lsu_fastint_stall_any;
-	input wire ifu_pmu_instr_aligned;
-	input wire ifu_pmu_fetch_stall;
-	input wire ifu_pmu_ic_miss;
-	input wire ifu_pmu_ic_hit;
-	input wire ifu_pmu_bus_error;
-	input wire ifu_pmu_bus_busy;
-	input wire ifu_pmu_bus_trxn;
-	input wire dec_pmu_instr_decoded;
-	input wire dec_pmu_decode_stall;
-	input wire dec_pmu_presync_stall;
-	input wire dec_pmu_postsync_stall;
-	input wire lsu_store_stall_any;
-	input wire dma_dccm_stall_any;
-	input wire dma_iccm_stall_any;
-	input wire exu_pmu_i0_br_misp;
-	input wire exu_pmu_i0_br_ataken;
-	input wire exu_pmu_i0_pc4;
-	input wire lsu_pmu_bus_trxn;
-	input wire lsu_pmu_bus_misaligned;
-	input wire lsu_pmu_bus_error;
-	input wire lsu_pmu_bus_busy;
-	input wire lsu_pmu_load_external_m;
-	input wire lsu_pmu_store_external_m;
-	input wire dma_pmu_dccm_read;
-	input wire dma_pmu_dccm_write;
-	input wire dma_pmu_any_read;
-	input wire dma_pmu_any_write;
-	input wire [31:1] lsu_fir_addr;
-	input wire [1:0] lsu_fir_error;
-	input wire iccm_dma_sb_error;
-	input wire [39:0] lsu_error_pkt_r;
-	input wire lsu_single_ecc_error_incr;
-	input wire dec_pause_state;
-	input wire lsu_imprecise_error_store_any;
-	input wire lsu_imprecise_error_load_any;
-	input wire [31:0] lsu_imprecise_error_addr_any;
-	input wire dec_csr_wen_unq_d;
-	input wire dec_csr_any_unq_d;
-	input wire [11:0] dec_csr_rdaddr_d;
-	input wire dec_csr_wen_r;
-	input wire [11:0] dec_csr_wraddr_r;
-	input wire [31:0] dec_csr_wrdata_r;
-	input wire dec_csr_stall_int_ff;
-	input wire dec_tlu_i0_valid_r;
-	input wire [31:1] exu_npc_r;
-	input wire [31:1] dec_tlu_i0_pc_r;
-	input wire [16:0] dec_tlu_packet_r;
-	input wire [31:0] dec_illegal_inst;
-	input wire dec_i0_decode_d;
-	input wire [1:0] exu_i0_br_hist_r;
-	input wire exu_i0_br_error_r;
-	input wire exu_i0_br_start_error_r;
-	input wire exu_i0_br_valid_r;
-	input wire exu_i0_br_mp_r;
-	input wire exu_i0_br_middle_r;
-	input wire exu_i0_br_way_r;
-	output wire dec_tlu_core_empty;
-	output wire dec_dbg_cmd_done;
-	output wire dec_dbg_cmd_fail;
-	output wire dec_tlu_dbg_halted;
-	output wire dec_tlu_debug_mode;
-	output wire dec_tlu_resume_ack;
-	output wire dec_tlu_debug_stall;
-	output wire dec_tlu_flush_noredir_r;
-	output wire dec_tlu_mpc_halted_only;
-	output wire dec_tlu_flush_leak_one_r;
-	output wire dec_tlu_flush_err_r;
-	output wire dec_tlu_flush_extint;
-	output wire [31:2] dec_tlu_meihap;
-	input wire dbg_halt_req;
-	input wire dbg_resume_req;
-	input wire ifu_miss_state_idle;
-	input wire lsu_idle_any;
-	input wire dec_div_active;
-	output wire [151:0] trigger_pkt_any;
-	input wire ifu_ic_error_start;
-	input wire ifu_iccm_rd_ecc_single_err;
-	input wire [70:0] ifu_ic_debug_rd_data;
-	input wire ifu_ic_debug_rd_data_valid;
-	output wire [89:0] dec_tlu_ic_diag_pkt;
-	input wire [7:0] pic_claimid;
-	input wire [3:0] pic_pl;
-	input wire mhwakeup;
-	input wire mexintpend;
-	input wire timer_int;
-	input wire soft_int;
-	output wire o_cpu_halt_status;
-	output wire o_cpu_halt_ack;
-	output wire o_cpu_run_ack;
-	output wire o_debug_mode_status;
-	input wire [31:4] core_id;
-	input wire mpc_debug_halt_req;
-	input wire mpc_debug_run_req;
-	input wire mpc_reset_run_req;
-	output wire mpc_debug_halt_ack;
-	output wire mpc_debug_run_ack;
-	output wire debug_brkpt_status;
-	output wire [3:0] dec_tlu_meicurpl;
-	output wire [3:0] dec_tlu_meipt;
-	output wire [31:0] dec_csr_rddata_d;
-	output wire dec_csr_legal_d;
-	output wire [6:0] dec_tlu_br0_r_pkt;
-	output wire dec_tlu_i0_kill_writeb_wb;
-	output wire dec_tlu_flush_lower_wb;
-	output wire dec_tlu_i0_commit_cmt;
-	output wire dec_tlu_i0_kill_writeb_r;
-	output wire dec_tlu_flush_lower_r;
-	output wire [31:1] dec_tlu_flush_path_r;
-	output wire dec_tlu_fence_i_r;
-	output wire dec_tlu_wr_pause_r;
-	output wire dec_tlu_flush_pause_r;
-	output wire dec_tlu_presync_d;
-	output wire dec_tlu_postsync_d;
-	output wire [31:0] dec_tlu_mrac_ff;
-	output wire dec_tlu_force_halt;
-	output wire dec_tlu_perfcnt0;
-	output wire dec_tlu_perfcnt1;
-	output wire dec_tlu_perfcnt2;
-	output wire dec_tlu_perfcnt3;
-	output wire dec_tlu_i0_exc_valid_wb1;
-	output wire dec_tlu_i0_valid_wb1;
-	output wire dec_tlu_int_valid_wb1;
-	output wire [4:0] dec_tlu_exc_cause_wb1;
-	output wire [31:0] dec_tlu_mtval_wb1;
-	output wire dec_tlu_external_ldfwd_disable;
-	output wire dec_tlu_sideeffect_posted_disable;
-	output wire dec_tlu_core_ecc_disable;
-	output wire dec_tlu_bpred_disable;
-	output wire dec_tlu_wb_coalescing_disable;
-	output wire dec_tlu_pipelining_disable;
-	output wire dec_tlu_trace_disable;
-	output wire [2:0] dec_tlu_dma_qos_prty;
-	output wire dec_tlu_misc_clk_override;
-	output wire dec_tlu_dec_clk_override;
-	output wire dec_tlu_ifu_clk_override;
-	output wire dec_tlu_lsu_clk_override;
-	output wire dec_tlu_bus_clk_override;
-	output wire dec_tlu_pic_clk_override;
-	output wire dec_tlu_picio_clk_override;
-	output wire dec_tlu_dccm_clk_override;
-	output wire dec_tlu_icm_clk_override;
-	wire clk_override;
-	wire e4e5_int_clk;
-	wire nmi_fir_type;
-	wire nmi_lsu_load_type;
-	wire nmi_lsu_store_type;
-	wire nmi_int_detected_f;
-	wire nmi_lsu_load_type_f;
-	wire nmi_lsu_store_type_f;
-	wire allow_dbg_halt_csr_write;
-	wire dbg_cmd_done_ns;
-	wire i_cpu_run_req_d1_raw;
-	wire debug_mode_status;
-	wire lsu_single_ecc_error_r_d1;
-	wire sel_npc_r;
-	wire sel_npc_resume;
-	wire ce_int;
-	wire nmi_in_debug_mode;
-	wire dpc_capture_npc;
-	wire dpc_capture_pc;
-	wire tdata_load;
-	wire tdata_opcode;
-	wire tdata_action;
-	wire perfcnt_halted;
-	wire tdata_chain;
-	wire tdata_kill_write;
-	wire reset_delayed;
-	wire reset_detect;
-	wire reset_detected;
-	wire wr_mstatus_r;
-	wire wr_mtvec_r;
-	wire wr_mcyclel_r;
-	wire wr_mcycleh_r;
-	wire wr_minstretl_r;
-	wire wr_minstreth_r;
-	wire wr_mscratch_r;
-	wire wr_mepc_r;
-	wire wr_mcause_r;
-	wire wr_mscause_r;
-	wire wr_mtval_r;
-	wire wr_mrac_r;
-	wire wr_meihap_r;
-	wire wr_meicurpl_r;
-	wire wr_meipt_r;
-	wire wr_dcsr_r;
-	wire wr_dpc_r;
-	wire wr_meicidpl_r;
-	wire wr_meivt_r;
-	wire wr_meicpct_r;
-	wire wr_micect_r;
-	wire wr_miccmect_r;
-	wire wr_mfdht_r;
-	wire wr_mfdhs_r;
-	wire wr_mdccmect_r;
-	wire wr_mhpme3_r;
-	wire wr_mhpme4_r;
-	wire wr_mhpme5_r;
-	wire wr_mhpme6_r;
-	wire wr_mpmc_r;
-	wire [1:1] mpmc_b_ns;
-	wire [1:1] mpmc;
-	wire [1:1] mpmc_b;
-	wire set_mie_pmu_fw_halt;
-	wire fw_halted_ns;
-	wire fw_halted;
-	wire wr_mcountinhibit_r;
-	wire [6:0] mcountinhibit;
-	wire wr_mtsel_r;
-	wire wr_mtdata1_t0_r;
-	wire wr_mtdata1_t1_r;
-	wire wr_mtdata1_t2_r;
-	wire wr_mtdata1_t3_r;
-	wire wr_mtdata2_t0_r;
-	wire wr_mtdata2_t1_r;
-	wire wr_mtdata2_t2_r;
-	wire wr_mtdata2_t3_r;
-	wire [31:0] mtdata2_t0;
-	wire [31:0] mtdata2_t1;
-	wire [31:0] mtdata2_t2;
-	wire [31:0] mtdata2_t3;
-	wire [31:0] mtdata2_tsel_out;
-	wire [31:0] mtdata1_tsel_out;
-	wire [9:0] mtdata1_t0_ns;
-	wire [9:0] mtdata1_t0;
-	wire [9:0] mtdata1_t1_ns;
-	wire [9:0] mtdata1_t1;
-	wire [9:0] mtdata1_t2_ns;
-	wire [9:0] mtdata1_t2;
-	wire [9:0] mtdata1_t3_ns;
-	wire [9:0] mtdata1_t3;
-	wire [9:0] tdata_wrdata_r;
-	wire [1:0] mtsel_ns;
-	wire [1:0] mtsel;
-	wire tlu_i0_kill_writeb_r;
-	wire [1:0] mstatus_ns;
-	wire [1:0] mstatus;
-	wire [1:0] mfdhs_ns;
-	wire [1:0] mfdhs;
-	wire [31:0] force_halt_ctr;
-	wire [31:0] force_halt_ctr_f;
-	wire force_halt;
-	wire [5:0] mfdht;
-	wire [5:0] mfdht_ns;
-	wire mstatus_mie_ns;
-	wire [30:0] mtvec_ns;
-	wire [30:0] mtvec;
-	wire [15:2] dcsr_ns;
-	wire [15:2] dcsr;
-	wire [5:0] mip_ns;
-	wire [5:0] mip;
-	wire [5:0] mie_ns;
-	wire [5:0] mie;
-	wire [31:0] mcyclel_ns;
-	wire [31:0] mcyclel;
-	wire [31:0] mcycleh_ns;
-	wire [31:0] mcycleh;
-	wire [31:0] minstretl_ns;
-	wire [31:0] minstretl;
-	wire [31:0] minstreth_ns;
-	wire [31:0] minstreth;
-	wire [31:0] micect_ns;
-	wire [31:0] micect;
-	wire [31:0] miccmect_ns;
-	wire [31:0] miccmect;
-	wire [31:0] mdccmect_ns;
-	wire [31:0] mdccmect;
-	wire [26:0] micect_inc;
-	wire [26:0] miccmect_inc;
-	wire [26:0] mdccmect_inc;
-	wire [31:0] mscratch;
-	wire [31:0] mhpmc3;
-	wire [31:0] mhpmc3_ns;
-	wire [31:0] mhpmc4;
-	wire [31:0] mhpmc4_ns;
-	wire [31:0] mhpmc5;
-	wire [31:0] mhpmc5_ns;
-	wire [31:0] mhpmc6;
-	wire [31:0] mhpmc6_ns;
-	wire [31:0] mhpmc3h;
-	wire [31:0] mhpmc3h_ns;
-	wire [31:0] mhpmc4h;
-	wire [31:0] mhpmc4h_ns;
-	wire [31:0] mhpmc5h;
-	wire [31:0] mhpmc5h_ns;
-	wire [31:0] mhpmc6h;
-	wire [31:0] mhpmc6h_ns;
-	wire [9:0] mhpme3;
-	wire [9:0] mhpme4;
-	wire [9:0] mhpme5;
-	wire [9:0] mhpme6;
-	wire [31:0] mrac;
-	wire [9:2] meihap;
-	wire [31:10] meivt;
-	wire [3:0] meicurpl_ns;
-	wire [3:0] meicurpl;
-	wire [3:0] meicidpl_ns;
-	wire [3:0] meicidpl;
-	wire [3:0] meipt_ns;
-	wire [3:0] meipt;
-	wire [31:0] mdseac;
-	wire mdseac_locked_ns;
-	wire mdseac_locked_f;
-	wire mdseac_en;
-	wire nmi_lsu_detected;
-	wire [31:1] mepc_ns;
-	wire [31:1] mepc;
-	wire [31:1] dpc_ns;
-	wire [31:1] dpc;
-	wire [31:0] mcause_ns;
-	wire [31:0] mcause;
-	wire [3:0] mscause_ns;
-	wire [3:0] mscause;
-	wire [3:0] mscause_type;
-	wire [31:0] mtval_ns;
-	wire [31:0] mtval;
-	wire dec_pause_state_f;
-	wire dec_tlu_wr_pause_r_d1;
-	wire pause_expired_r;
-	wire pause_expired_wb;
-	wire tlu_flush_lower_r;
-	wire tlu_flush_lower_r_d1;
-	wire [31:1] tlu_flush_path_r;
-	wire [31:1] tlu_flush_path_r_d1;
-	wire i0_valid_wb;
-	wire tlu_i0_commit_cmt;
-	wire [31:1] vectored_path;
-	wire [31:1] interrupt_path;
-	wire [16:0] dicawics_ns;
-	wire [16:0] dicawics;
-	wire wr_dicawics_r;
-	wire wr_dicad0_r;
-	wire wr_dicad1_r;
-	wire wr_dicad0h_r;
-	wire [31:0] dicad0_ns;
-	wire [31:0] dicad0;
-	wire [31:0] dicad0h_ns;
-	wire [31:0] dicad0h;
-	wire [6:0] dicad1_ns;
-	wire [6:0] dicad1_raw;
-	wire [31:0] dicad1;
-	wire ebreak_r;
-	wire ebreak_to_debug_mode_r;
-	wire ecall_r;
-	wire illegal_r;
-	wire mret_r;
-	wire inst_acc_r;
-	wire fence_i_r;
-	wire ic_perr_r;
-	wire iccm_sbecc_r;
-	wire ebreak_to_debug_mode_r_d1;
-	wire kill_ebreak_count_r;
-	wire inst_acc_second_r;
-	wire ce_int_ready;
-	wire ext_int_ready;
-	wire timer_int_ready;
-	wire soft_int_ready;
-	wire int_timer0_int_ready;
-	wire int_timer1_int_ready;
-	wire mhwakeup_ready;
-	wire take_ext_int;
-	wire take_ce_int;
-	wire take_timer_int;
-	wire take_soft_int;
-	wire take_int_timer0_int;
-	wire take_int_timer1_int;
-	wire take_nmi;
-	wire take_nmi_r_d1;
-	wire int_timer0_int_possible;
-	wire int_timer1_int_possible;
-	wire i0_exception_valid_r;
-	wire interrupt_valid_r;
-	wire i0_exception_valid_r_d1;
-	wire interrupt_valid_r_d1;
-	wire exc_or_int_valid_r;
-	wire exc_or_int_valid_r_d1;
-	wire mdccme_ce_req;
-	wire miccme_ce_req;
-	wire mice_ce_req;
-	wire synchronous_flush_r;
-	wire [4:0] exc_cause_r;
-	wire [4:0] exc_cause_wb;
-	wire mcyclel_cout;
-	wire mcyclel_cout_f;
-	wire mcyclela_cout;
-	wire [31:0] mcyclel_inc;
-	wire [31:0] mcycleh_inc;
-	wire minstretl_cout;
-	wire minstretl_cout_f;
-	wire minstret_enable;
-	wire minstretl_cout_ns;
-	wire minstretl_couta;
-	wire [31:0] minstretl_inc;
-	wire [31:0] minstretl_read;
-	wire [31:0] minstreth_inc;
-	wire [31:0] minstreth_read;
-	wire [31:1] pc_r;
-	wire [31:1] pc_r_d1;
-	wire [31:1] npc_r;
-	wire [31:1] npc_r_d1;
-	wire valid_csr;
-	wire rfpc_i0_r;
-	wire lsu_i0_rfnpc_r;
-	wire dec_tlu_br0_error_r;
-	wire dec_tlu_br0_start_error_r;
-	wire dec_tlu_br0_v_r;
-	wire lsu_i0_exc_r;
-	wire lsu_i0_exc_r_raw;
-	wire lsu_exc_ma_r;
-	wire lsu_exc_acc_r;
-	wire lsu_exc_st_r;
-	wire lsu_exc_valid_r;
-	wire lsu_exc_valid_r_raw;
-	wire lsu_exc_valid_r_d1;
-	wire lsu_i0_exc_r_d1;
-	wire block_interrupts;
-	wire i0_trigger_eval_r;
-	wire request_debug_mode_r;
-	wire request_debug_mode_r_d1;
-	wire request_debug_mode_done;
-	wire request_debug_mode_done_f;
-	wire take_halt;
-	wire halt_taken;
-	wire halt_taken_f;
-	wire internal_dbg_halt_mode;
-	wire dbg_tlu_halted_f;
-	wire take_reset;
-	wire dbg_tlu_halted;
-	wire core_empty;
-	wire lsu_idle_any_f;
-	wire ifu_miss_state_idle_f;
-	wire resume_ack_ns;
-	wire debug_halt_req_f;
-	wire debug_resume_req_f_raw;
-	wire debug_resume_req_f;
-	wire enter_debug_halt_req;
-	wire dcsr_single_step_done;
-	wire dcsr_single_step_done_f;
-	wire debug_halt_req_d1;
-	wire debug_halt_req_ns;
-	wire dcsr_single_step_running;
-	wire dcsr_single_step_running_f;
-	wire internal_dbg_halt_timers;
-	wire [3:0] i0_trigger_r;
-	wire [3:0] trigger_action;
-	wire [3:0] trigger_enabled;
-	wire [3:0] i0_trigger_chain_masked_r;
-	wire i0_trigger_hit_r;
-	wire i0_trigger_hit_raw_r;
-	wire i0_trigger_action_r;
-	wire trigger_hit_r_d1;
-	wire mepc_trigger_hit_sel_pc_r;
-	wire [3:0] update_hit_bit_r;
-	wire [3:0] i0_iside_trigger_has_pri_r;
-	wire [3:0] i0trigger_qual_r;
-	wire [3:0] i0_lsu_trigger_has_pri_r;
-	wire cpu_halt_status;
-	wire cpu_halt_ack;
-	wire cpu_run_ack;
-	wire ext_halt_pulse;
-	wire i_cpu_halt_req_d1;
-	wire i_cpu_run_req_d1;
-	wire inst_acc_r_raw;
-	wire trigger_hit_dmode_r;
-	wire trigger_hit_dmode_r_d1;
-	wire [9:0] mcgc;
-	wire [9:0] mcgc_ns;
-	wire [9:0] mcgc_int;
-	wire [18:0] mfdc;
-	wire i_cpu_halt_req_sync_qual;
-	wire i_cpu_run_req_sync_qual;
-	wire pmu_fw_halt_req_ns;
-	wire pmu_fw_halt_req_f;
-	wire int_timer_stalled;
-	wire fw_halt_req;
-	wire enter_pmu_fw_halt_req;
-	wire pmu_fw_tlu_halted;
-	wire pmu_fw_tlu_halted_f;
-	wire internal_pmu_fw_halt_mode;
-	wire internal_pmu_fw_halt_mode_f;
-	wire int_timer0_int_hold;
-	wire int_timer1_int_hold;
-	wire int_timer0_int_hold_f;
-	wire int_timer1_int_hold_f;
-	wire nmi_int_delayed;
-	wire nmi_int_detected;
-	wire [3:0] trigger_execute;
-	wire [3:0] trigger_data;
-	wire [3:0] trigger_store;
-	wire dec_tlu_pmu_fw_halted;
-	wire mpc_run_state_ns;
-	wire debug_brkpt_status_ns;
-	wire mpc_debug_halt_ack_ns;
-	wire mpc_debug_run_ack_ns;
-	wire dbg_halt_state_ns;
-	wire dbg_run_state_ns;
-	wire dbg_halt_state_f;
-	wire mpc_debug_halt_req_sync_f;
-	wire mpc_debug_run_req_sync_f;
-	wire mpc_halt_state_f;
-	wire mpc_halt_state_ns;
-	wire mpc_run_state_f;
-	wire debug_brkpt_status_f;
-	wire mpc_debug_halt_ack_f;
-	wire mpc_debug_run_ack_f;
-	wire dbg_run_state_f;
-	wire mpc_debug_halt_req_sync_pulse;
-	wire mpc_debug_run_req_sync_pulse;
-	wire debug_brkpt_valid;
-	wire debug_halt_req;
-	wire debug_resume_req;
-	wire dec_tlu_mpc_halted_only_ns;
-	wire take_ext_int_start;
-	wire ext_int_freeze;
-	wire take_ext_int_start_d1;
-	wire take_ext_int_start_d2;
-	wire take_ext_int_start_d3;
-	wire ext_int_freeze_d1;
-	wire csr_meicpct;
-	wire ignore_ext_int_due_to_lsu_stall;
-	wire mcause_sel_nmi_store;
-	wire mcause_sel_nmi_load;
-	wire mcause_sel_nmi_ext;
-	wire fast_int_meicpct;
-	wire [1:0] mcause_fir_error_type;
-	wire dbg_halt_req_held_ns;
-	wire dbg_halt_req_held;
-	wire dbg_halt_req_final;
-	wire iccm_repair_state_ns;
-	wire iccm_repair_state_d1;
-	wire iccm_repair_state_rfnpc;
-	wire [31:0] dec_timer_rddata_d;
-	wire dec_timer_read_d;
-	wire dec_timer_t0_pulse;
-	wire dec_timer_t1_pulse;
-	wire csr_mitctl0;
-	wire csr_mitctl1;
-	wire csr_mitb0;
-	wire csr_mitb1;
-	wire csr_mitcnt0;
-	wire csr_mitcnt1;
-	wire nmi_int_sync;
-	wire timer_int_sync;
-	wire soft_int_sync;
-	wire i_cpu_halt_req_sync;
-	wire i_cpu_run_req_sync;
-	wire mpc_debug_halt_req_sync;
-	wire mpc_debug_run_req_sync;
-	wire mpc_debug_halt_req_sync_raw;
-	wire csr_wr_clk;
-	wire e4e5_clk;
-	wire e4_valid;
-	wire e5_valid;
-	wire e4e5_valid;
-	wire internal_dbg_halt_mode_f;
-	wire internal_dbg_halt_mode_f2;
-	wire lsu_pmu_load_external_r;
-	wire lsu_pmu_store_external_r;
-	wire dec_tlu_flush_noredir_r_d1;
-	wire dec_tlu_flush_pause_r_d1;
-	wire lsu_single_ecc_error_r;
-	wire [31:0] lsu_error_pkt_addr_r;
-	wire mcyclel_cout_in;
-	wire i0_valid_no_ebreak_ecall_r;
-	wire minstret_enable_f;
-	wire sel_exu_npc_r;
-	wire sel_flush_npc_r;
-	wire sel_hold_npc_r;
-	wire pc0_valid_r;
-	wire [15:0] mfdc_int;
-	wire [15:0] mfdc_ns;
-	wire [31:0] mrac_in;
-	wire [31:27] csr_sat;
-	wire [8:6] dcsr_cause;
-	wire enter_debug_halt_req_le;
-	wire dcsr_cause_upgradeable;
-	wire icache_rd_valid;
-	wire icache_wr_valid;
-	wire icache_rd_valid_f;
-	wire icache_wr_valid_f;
-	wire [3:0] mhpmc_inc_r;
-	wire [3:0] mhpmc_inc_r_d1;
-	wire [39:0] mhpme_vec;
-	wire mhpmc3_wr_en0;
-	wire mhpmc3_wr_en1;
-	wire mhpmc3_wr_en;
-	wire mhpmc4_wr_en0;
-	wire mhpmc4_wr_en1;
-	wire mhpmc4_wr_en;
-	wire mhpmc5_wr_en0;
-	wire mhpmc5_wr_en1;
-	wire mhpmc5_wr_en;
-	wire mhpmc6_wr_en0;
-	wire mhpmc6_wr_en1;
-	wire mhpmc6_wr_en;
-	wire mhpmc3h_wr_en0;
-	wire mhpmc3h_wr_en;
-	wire mhpmc4h_wr_en0;
-	wire mhpmc4h_wr_en;
-	wire mhpmc5h_wr_en0;
-	wire mhpmc5h_wr_en;
-	wire mhpmc6h_wr_en0;
-	wire mhpmc6h_wr_en;
-	wire [63:0] mhpmc3_incr;
-	wire [63:0] mhpmc4_incr;
-	wire [63:0] mhpmc5_incr;
-	wire [63:0] mhpmc6_incr;
-	wire perfcnt_halted_d1;
-	wire zero_event_r;
-	wire [3:0] perfcnt_during_sleep;
-	wire [9:0] event_r;
-	wire [3:0] pmu_i0_itype_qual;
-	wire csr_mfdht;
-	wire csr_mfdhs;
-	wire csr_misa;
-	wire csr_mvendorid;
-	wire csr_marchid;
-	wire csr_mimpid;
-	wire csr_mhartid;
-	wire csr_mstatus;
-	wire csr_mtvec;
-	wire csr_mip;
-	wire csr_mie;
-	wire csr_mcyclel;
-	wire csr_mcycleh;
-	wire csr_minstretl;
-	wire csr_minstreth;
-	wire csr_mscratch;
-	wire csr_mepc;
-	wire csr_mcause;
-	wire csr_mscause;
-	wire csr_mtval;
-	wire csr_mrac;
-	wire csr_dmst;
-	wire csr_mdseac;
-	wire csr_meihap;
-	wire csr_meivt;
-	wire csr_meipt;
-	wire csr_meicurpl;
-	wire csr_meicidpl;
-	wire csr_dcsr;
-	wire csr_mcgc;
-	wire csr_mfdc;
-	wire csr_dpc;
-	wire csr_mtsel;
-	wire csr_mtdata1;
-	wire csr_mtdata2;
-	wire csr_mhpmc3;
-	wire csr_mhpmc4;
-	wire csr_mhpmc5;
-	wire csr_mhpmc6;
-	wire csr_mhpmc3h;
-	wire csr_mhpmc4h;
-	wire csr_mhpmc5h;
-	wire csr_mhpmc6h;
-	wire csr_mhpme3;
-	wire csr_mhpme4;
-	wire csr_mhpme5;
-	wire csr_mhpme6;
-	wire csr_mcountinhibit;
-	wire csr_mpmc;
-	wire csr_micect;
-	wire csr_miccmect;
-	wire csr_mdccmect;
-	wire csr_dicawics;
-	wire csr_dicad0h;
-	wire csr_dicad0;
-	wire csr_dicad1;
-	wire csr_dicago;
-	wire presync;
-	wire postsync;
-	wire legal;
-	wire dec_csr_wen_r_mod;
-	wire flush_clkvalid;
-	wire sel_fir_addr;
-	wire wr_mie_r;
-	wire mtval_capture_pc_r;
-	wire mtval_capture_pc_plus2_r;
-	wire mtval_capture_inst_r;
-	wire mtval_capture_lsu_r;
-	wire mtval_clear_r;
-	wire wr_mcgc_r;
-	wire wr_mfdc_r;
-	wire wr_mdeau_r;
-	wire trigger_hit_for_dscr_cause_r_d1;
-	wire conditionally_illegal;
-	wire [3:0] ifu_mscause;
-	wire ifu_ic_error_start_f;
-	wire ifu_iccm_rd_ecc_single_err_f;
-	eb1_dec_timer_ctl #(.pt(pt)) int_timers(
-		.clk(clk),
-		.free_l2clk(free_l2clk),
-		.csr_wr_clk(csr_wr_clk),
-		.rst_l(rst_l),
-		.dec_csr_wen_r_mod(dec_csr_wen_r_mod),
-		.dec_csr_wraddr_r(dec_csr_wraddr_r),
-		.dec_csr_wrdata_r(dec_csr_wrdata_r),
-		.csr_mitctl0(csr_mitctl0),
-		.csr_mitctl1(csr_mitctl1),
-		.csr_mitb0(csr_mitb0),
-		.csr_mitb1(csr_mitb1),
-		.csr_mitcnt0(csr_mitcnt0),
-		.csr_mitcnt1(csr_mitcnt1),
-		.dec_pause_state(dec_pause_state),
-		.dec_tlu_pmu_fw_halted(dec_tlu_pmu_fw_halted),
-		.internal_dbg_halt_timers(internal_dbg_halt_timers),
-		.dec_timer_rddata_d(dec_timer_rddata_d),
-		.dec_timer_read_d(dec_timer_read_d),
-		.dec_timer_t0_pulse(dec_timer_t0_pulse),
-		.dec_timer_t1_pulse(dec_timer_t1_pulse),
-		.scan_mode(scan_mode)
-	);
-	assign clk_override = dec_tlu_dec_clk_override;
-	rvsyncss #(.WIDTH(7)) syncro_ff(
-		.rst_l(rst_l),
-		.clk(free_clk),
-		.din({nmi_int, timer_int, soft_int, i_cpu_halt_req, i_cpu_run_req, mpc_debug_halt_req, mpc_debug_run_req}),
-		.dout({nmi_int_sync, timer_int_sync, soft_int_sync, i_cpu_halt_req_sync, i_cpu_run_req_sync, mpc_debug_halt_req_sync_raw, mpc_debug_run_req_sync})
-	);
-	rvoclkhdr csrwr_r_cgc(
-		.en(dec_csr_wen_r_mod | clk_override),
-		.l1clk(csr_wr_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign e4_valid = dec_tlu_i0_valid_r;
-	assign e4e5_valid = e4_valid | e5_valid;
-	assign flush_clkvalid = ((((((((internal_dbg_halt_mode_f | i_cpu_run_req_d1) | interrupt_valid_r) | interrupt_valid_r_d1) | reset_delayed) | pause_expired_r) | pause_expired_wb) | ic_perr_r) | iccm_sbecc_r) | clk_override;
-	rvoclkhdr e4e5_cgc(
-		.en(e4e5_valid | clk_override),
-		.l1clk(e4e5_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr e4e5_int_cgc(
-		.en(e4e5_valid | flush_clkvalid),
-		.l1clk(e4e5_int_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvdffie #(.WIDTH(11)) freeff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({ifu_ic_error_start, ifu_iccm_rd_ecc_single_err, iccm_repair_state_ns, e4_valid, internal_dbg_halt_mode, lsu_pmu_load_external_m, lsu_pmu_store_external_m, tlu_flush_lower_r, tlu_i0_kill_writeb_r, internal_dbg_halt_mode_f, force_halt}),
-		.dout({ifu_ic_error_start_f, ifu_iccm_rd_ecc_single_err_f, iccm_repair_state_d1, e5_valid, internal_dbg_halt_mode_f, lsu_pmu_load_external_r, lsu_pmu_store_external_r, tlu_flush_lower_r_d1, dec_tlu_i0_kill_writeb_wb, internal_dbg_halt_mode_f2, dec_tlu_force_halt})
-	);
-	assign dec_tlu_i0_kill_writeb_r = tlu_i0_kill_writeb_r;
-	assign nmi_int_detected = (((nmi_int_sync & ~nmi_int_delayed) | nmi_lsu_detected) | (nmi_int_detected_f & ~take_nmi_r_d1)) | nmi_fir_type;
-	assign nmi_lsu_load_type = ((nmi_lsu_detected & lsu_imprecise_error_load_any) & ~(nmi_int_detected_f & ~take_nmi_r_d1)) | (nmi_lsu_load_type_f & ~take_nmi_r_d1);
-	assign nmi_lsu_store_type = ((nmi_lsu_detected & lsu_imprecise_error_store_any) & ~(nmi_int_detected_f & ~take_nmi_r_d1)) | (nmi_lsu_store_type_f & ~take_nmi_r_d1);
-	assign nmi_fir_type = (~nmi_int_detected_f & take_ext_int_start_d3) & |lsu_fir_error[1:0];
-	assign nmi_lsu_detected = (~mdseac_locked_f & (lsu_imprecise_error_load_any | lsu_imprecise_error_store_any)) & ~nmi_fir_type;
-	localparam MSTATUS_MIE = 0;
-	localparam MIP_MCEIP = 5;
-	localparam MIP_MITIP0 = 4;
-	localparam MIP_MITIP1 = 3;
-	localparam MIP_MEIP = 2;
-	localparam MIP_MTIP = 1;
-	localparam MIP_MSIP = 0;
-	localparam MIE_MCEIE = 5;
-	localparam MIE_MITIE0 = 4;
-	localparam MIE_MITIE1 = 3;
-	localparam MIE_MEIE = 2;
-	localparam MIE_MTIE = 1;
-	localparam MIE_MSIE = 0;
-	localparam DCSR_EBREAKM = 15;
-	localparam DCSR_STEPIE = 11;
-	localparam DCSR_STOPC = 10;
-	localparam DCSR_STEP = 2;
-	assign reset_delayed = reset_detect ^ reset_detected;
-	assign mpc_debug_halt_req_sync = mpc_debug_halt_req_sync_raw & ~ext_int_freeze_d1;
-	rvdffie #(.WIDTH(16)) mpvhalt_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({1'b1, reset_detect, nmi_int_sync, nmi_int_detected, nmi_lsu_load_type, nmi_lsu_store_type, mpc_debug_halt_req_sync, mpc_debug_run_req_sync, mpc_halt_state_ns, mpc_run_state_ns, debug_brkpt_status_ns, mpc_debug_halt_ack_ns, mpc_debug_run_ack_ns, dbg_halt_state_ns, dbg_run_state_ns, dec_tlu_mpc_halted_only_ns}),
-		.dout({reset_detect, reset_detected, nmi_int_delayed, nmi_int_detected_f, nmi_lsu_load_type_f, nmi_lsu_store_type_f, mpc_debug_halt_req_sync_f, mpc_debug_run_req_sync_f, mpc_halt_state_f, mpc_run_state_f, debug_brkpt_status_f, mpc_debug_halt_ack_f, mpc_debug_run_ack_f, dbg_halt_state_f, dbg_run_state_f, dec_tlu_mpc_halted_only})
-	);
-	assign mpc_debug_halt_req_sync_pulse = mpc_debug_halt_req_sync & ~mpc_debug_halt_req_sync_f;
-	assign mpc_debug_run_req_sync_pulse = mpc_debug_run_req_sync & ~mpc_debug_run_req_sync_f;
-	assign mpc_halt_state_ns = ((mpc_halt_state_f | mpc_debug_halt_req_sync_pulse) | (reset_delayed & ~mpc_reset_run_req)) & ~mpc_debug_run_req_sync;
-	assign mpc_run_state_ns = (mpc_run_state_f | (mpc_debug_run_req_sync_pulse & ~mpc_debug_run_ack_f)) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-	assign dbg_halt_state_ns = (dbg_halt_state_f | (((dbg_halt_req_final | dcsr_single_step_done_f) | trigger_hit_dmode_r_d1) | ebreak_to_debug_mode_r_d1)) & ~dbg_resume_req;
-	assign dbg_run_state_ns = (dbg_run_state_f | dbg_resume_req) & (internal_dbg_halt_mode_f & ~dcsr_single_step_running_f);
-	assign dec_tlu_mpc_halted_only_ns = ~dbg_halt_state_f & mpc_halt_state_f;
-	assign debug_brkpt_valid = ebreak_to_debug_mode_r_d1 | trigger_hit_dmode_r_d1;
-	assign debug_brkpt_status_ns = (debug_brkpt_valid | debug_brkpt_status_f) & (internal_dbg_halt_mode & ~dcsr_single_step_running_f);
-	assign mpc_debug_halt_ack_ns = ((mpc_halt_state_f & internal_dbg_halt_mode_f) & mpc_debug_halt_req_sync) & core_empty;
-	assign mpc_debug_run_ack_ns = ((mpc_debug_run_req_sync & ~dbg_halt_state_ns) & ~mpc_debug_halt_req_sync) | (mpc_debug_run_ack_f & mpc_debug_run_req_sync);
-	assign mpc_debug_halt_ack = mpc_debug_halt_ack_f;
-	assign mpc_debug_run_ack = mpc_debug_run_ack_f;
-	assign debug_brkpt_status = debug_brkpt_status_f;
-	assign dbg_halt_req_held_ns = (dbg_halt_req | dbg_halt_req_held) & ext_int_freeze_d1;
-	assign dbg_halt_req_final = (dbg_halt_req | dbg_halt_req_held) & ~ext_int_freeze_d1;
-	assign debug_halt_req = (((dbg_halt_req_final | mpc_debug_halt_req_sync) | (reset_delayed & ~mpc_reset_run_req)) & ~internal_dbg_halt_mode_f) & ~ext_int_freeze_d1;
-	assign debug_resume_req = ~debug_resume_req_f & ((mpc_run_state_ns & ~dbg_halt_state_ns) | (dbg_run_state_ns & ~mpc_halt_state_ns));
-	assign take_halt = (((((debug_halt_req_f | pmu_fw_halt_req_f) & ~synchronous_flush_r) & ~mret_r) & ~halt_taken_f) & ~dec_tlu_flush_noredir_r_d1) & ~take_reset;
-	assign halt_taken = ((dec_tlu_flush_noredir_r_d1 & ~dec_tlu_flush_pause_r_d1) & ~take_ext_int_start_d1) | (((halt_taken_f & ~dbg_tlu_halted_f) & ~pmu_fw_tlu_halted_f) & ~interrupt_valid_r_d1);
-	assign core_empty = force_halt | ((((((lsu_idle_any & lsu_idle_any_f) & ifu_miss_state_idle) & ifu_miss_state_idle_f) & ~debug_halt_req) & ~debug_halt_req_d1) & ~dec_div_active);
-	assign dec_tlu_core_empty = core_empty;
-	assign enter_debug_halt_req = (((~internal_dbg_halt_mode_f & debug_halt_req) | dcsr_single_step_done_f) | trigger_hit_dmode_r_d1) | ebreak_to_debug_mode_r_d1;
-	assign internal_dbg_halt_mode = debug_halt_req_ns | (internal_dbg_halt_mode_f & ~(debug_resume_req_f & ~dcsr[DCSR_STEP]));
-	assign allow_dbg_halt_csr_write = internal_dbg_halt_mode_f & ~dcsr_single_step_running_f;
-	assign debug_halt_req_ns = enter_debug_halt_req | (debug_halt_req_f & ~dbg_tlu_halted);
-	assign dbg_tlu_halted = ((debug_halt_req_f & core_empty) & halt_taken) | (dbg_tlu_halted_f & ~debug_resume_req_f);
-	assign resume_ack_ns = (debug_resume_req_f & dbg_tlu_halted_f) & dbg_run_state_ns;
-	assign dcsr_single_step_done = ((dec_tlu_i0_valid_r & ~dec_tlu_dbg_halted) & dcsr[DCSR_STEP]) & ~rfpc_i0_r;
-	assign dcsr_single_step_running = (debug_resume_req_f & dcsr[DCSR_STEP]) | (dcsr_single_step_running_f & ~dcsr_single_step_done_f);
-	assign dbg_cmd_done_ns = dec_tlu_i0_valid_r & dec_tlu_dbg_halted;
-	assign request_debug_mode_r = (trigger_hit_dmode_r | ebreak_to_debug_mode_r) | (request_debug_mode_r_d1 & ~dec_tlu_flush_lower_wb);
-	assign request_debug_mode_done = (request_debug_mode_r_d1 | request_debug_mode_done_f) & ~dbg_tlu_halted_f;
-	rvdffie #(.WIDTH(18)) halt_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({dec_tlu_flush_noredir_r, halt_taken, lsu_idle_any, ifu_miss_state_idle, dbg_tlu_halted, resume_ack_ns, debug_halt_req_ns, debug_resume_req, trigger_hit_dmode_r, dcsr_single_step_done, debug_halt_req, dec_tlu_wr_pause_r, dec_pause_state, request_debug_mode_r, request_debug_mode_done, dcsr_single_step_running, dec_tlu_flush_pause_r, dbg_halt_req_held_ns}),
-		.dout({dec_tlu_flush_noredir_r_d1, halt_taken_f, lsu_idle_any_f, ifu_miss_state_idle_f, dbg_tlu_halted_f, dec_tlu_resume_ack, debug_halt_req_f, debug_resume_req_f_raw, trigger_hit_dmode_r_d1, dcsr_single_step_done_f, debug_halt_req_d1, dec_tlu_wr_pause_r_d1, dec_pause_state_f, request_debug_mode_r_d1, request_debug_mode_done_f, dcsr_single_step_running_f, dec_tlu_flush_pause_r_d1, dbg_halt_req_held})
-	);
-	assign debug_resume_req_f = debug_resume_req_f_raw & ~dbg_halt_req;
-	assign dec_tlu_debug_stall = debug_halt_req_f;
-	assign dec_tlu_dbg_halted = dbg_tlu_halted_f;
-	assign dec_tlu_debug_mode = internal_dbg_halt_mode_f;
-	assign dec_tlu_pmu_fw_halted = pmu_fw_tlu_halted_f;
-	assign dec_tlu_flush_noredir_r = (((take_halt | (fence_i_r & internal_dbg_halt_mode)) | dec_tlu_flush_pause_r) | (i0_trigger_hit_r & trigger_hit_dmode_r)) | take_ext_int_start;
-	assign dec_tlu_flush_extint = take_ext_int_start;
-	assign dec_tlu_flush_pause_r = (dec_tlu_wr_pause_r_d1 & ~interrupt_valid_r) & ~take_ext_int_start;
-	assign pause_expired_r = (((((~dec_pause_state & dec_pause_state_f) & ~(((((((ext_int_ready | ce_int_ready) | timer_int_ready) | soft_int_ready) | int_timer0_int_hold_f) | int_timer1_int_hold_f) | nmi_int_detected) | ext_int_freeze_d1)) & ~interrupt_valid_r_d1) & ~debug_halt_req_f) & ~pmu_fw_halt_req_f) & ~halt_taken_f;
-	assign dec_tlu_flush_leak_one_r = ((dec_tlu_flush_lower_r & dcsr[DCSR_STEP]) & (dec_tlu_resume_ack | dcsr_single_step_running)) & ~dec_tlu_flush_noredir_r;
-	assign dec_tlu_flush_err_r = dec_tlu_flush_lower_r & (ic_perr_r | iccm_sbecc_r);
-	assign dec_dbg_cmd_done = dbg_cmd_done_ns;
-	assign dec_dbg_cmd_fail = illegal_r & dec_dbg_cmd_done;
-	localparam MTDATA1_DMODE = 9;
-	localparam MTDATA1_SEL = 7;
-	localparam MTDATA1_ACTION = 6;
-	localparam MTDATA1_CHAIN = 5;
-	localparam MTDATA1_MATCH = 4;
-	localparam MTDATA1_M_ENABLED = 3;
-	localparam MTDATA1_EXE = 2;
-	localparam MTDATA1_ST = 1;
-	localparam MTDATA1_LD = 0;
-	assign trigger_execute[3:0] = {mtdata1_t3[MTDATA1_EXE], mtdata1_t2[MTDATA1_EXE], mtdata1_t1[MTDATA1_EXE], mtdata1_t0[MTDATA1_EXE]};
-	assign trigger_data[3:0] = {mtdata1_t3[MTDATA1_SEL], mtdata1_t2[MTDATA1_SEL], mtdata1_t1[MTDATA1_SEL], mtdata1_t0[MTDATA1_SEL]};
-	assign trigger_store[3:0] = {mtdata1_t3[MTDATA1_ST], mtdata1_t2[MTDATA1_ST], mtdata1_t1[MTDATA1_ST], mtdata1_t0[MTDATA1_ST]};
-	assign trigger_enabled[3:0] = {(mtdata1_t3[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t3[MTDATA1_M_ENABLED], (mtdata1_t2[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t2[MTDATA1_M_ENABLED], (mtdata1_t1[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t1[MTDATA1_M_ENABLED], (mtdata1_t0[MTDATA1_ACTION] | mstatus[MSTATUS_MIE]) & mtdata1_t0[MTDATA1_M_ENABLED]};
-	assign i0_iside_trigger_has_pri_r[3:0] = ~(((trigger_execute[3:0] & trigger_data[3:0]) & {4 {inst_acc_r_raw}}) | {4 {exu_i0_br_error_r | exu_i0_br_start_error_r}});
-	assign i0_lsu_trigger_has_pri_r[3:0] = ~((trigger_store[3:0] & trigger_data[3:0]) & {4 {lsu_i0_exc_r_raw}});
-	assign i0_trigger_eval_r = dec_tlu_i0_valid_r;
-	assign i0trigger_qual_r[3:0] = ((({4 {i0_trigger_eval_r}} & dec_tlu_packet_r[11:8]) & i0_iside_trigger_has_pri_r[3:0]) & i0_lsu_trigger_has_pri_r[3:0]) & trigger_enabled[3:0];
-	assign i0_trigger_r[3:0] = ~{4 {dec_tlu_flush_lower_wb | dec_tlu_dbg_halted}} & i0trigger_qual_r[3:0];
-	assign i0_trigger_chain_masked_r[3:0] = {i0_trigger_r[3] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[2]), i0_trigger_r[2] & (~mtdata1_t2[MTDATA1_CHAIN] | i0_trigger_r[3]), i0_trigger_r[1] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[0]), i0_trigger_r[0] & (~mtdata1_t0[MTDATA1_CHAIN] | i0_trigger_r[1])};
-	assign i0_trigger_hit_raw_r = |i0_trigger_chain_masked_r[3:0];
-	assign i0_trigger_hit_r = i0_trigger_hit_raw_r;
-	assign trigger_action[3:0] = {mtdata1_t3[MTDATA1_ACTION] & mtdata1_t3[MTDATA1_DMODE], (mtdata1_t2[MTDATA1_ACTION] & mtdata1_t2[MTDATA1_DMODE]) & ~mtdata1_t2[MTDATA1_CHAIN], mtdata1_t1[MTDATA1_ACTION] & mtdata1_t1[MTDATA1_DMODE], (mtdata1_t0[MTDATA1_ACTION] & mtdata1_t0[MTDATA1_DMODE]) & ~mtdata1_t0[MTDATA1_CHAIN]};
-	assign update_hit_bit_r[3:0] = {4 {|i0_trigger_r[3:0] & ~rfpc_i0_r}} & {i0_trigger_chain_masked_r[3], i0_trigger_r[2], i0_trigger_chain_masked_r[1], i0_trigger_r[0]};
-	assign i0_trigger_action_r = |(i0_trigger_chain_masked_r[3:0] & trigger_action[3:0]);
-	assign trigger_hit_dmode_r = i0_trigger_hit_r & i0_trigger_action_r;
-	assign mepc_trigger_hit_sel_pc_r = i0_trigger_hit_r & ~trigger_hit_dmode_r;
-	assign i_cpu_halt_req_sync_qual = (i_cpu_halt_req_sync & ~dec_tlu_debug_mode) & ~ext_int_freeze_d1;
-	assign i_cpu_run_req_sync_qual = ((i_cpu_run_req_sync & ~dec_tlu_debug_mode) & pmu_fw_tlu_halted_f) & ~ext_int_freeze_d1;
-	rvdffie #(.WIDTH(10)) exthaltff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({i_cpu_halt_req_sync_qual, i_cpu_run_req_sync_qual, cpu_halt_status, cpu_halt_ack, cpu_run_ack, internal_pmu_fw_halt_mode, pmu_fw_halt_req_ns, pmu_fw_tlu_halted, int_timer0_int_hold, int_timer1_int_hold}),
-		.dout({i_cpu_halt_req_d1, i_cpu_run_req_d1_raw, o_cpu_halt_status, o_cpu_halt_ack, o_cpu_run_ack, internal_pmu_fw_halt_mode_f, pmu_fw_halt_req_f, pmu_fw_tlu_halted_f, int_timer0_int_hold_f, int_timer1_int_hold_f})
-	);
-	assign ext_halt_pulse = i_cpu_halt_req_sync_qual & ~i_cpu_halt_req_d1;
-	assign enter_pmu_fw_halt_req = ext_halt_pulse | fw_halt_req;
-	assign pmu_fw_halt_req_ns = (enter_pmu_fw_halt_req | (pmu_fw_halt_req_f & ~pmu_fw_tlu_halted)) & ~debug_halt_req_f;
-	assign internal_pmu_fw_halt_mode = pmu_fw_halt_req_ns | ((internal_pmu_fw_halt_mode_f & ~i_cpu_run_req_d1) & ~debug_halt_req_f);
-	assign pmu_fw_tlu_halted = ((((pmu_fw_halt_req_f & core_empty) & halt_taken) & ~enter_debug_halt_req) | (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1)) & ~debug_halt_req_f;
-	assign cpu_halt_ack = (i_cpu_halt_req_d1 & pmu_fw_tlu_halted_f) | (o_cpu_halt_ack & i_cpu_halt_req_sync);
-	assign cpu_halt_status = (pmu_fw_tlu_halted_f & ~i_cpu_run_req_d1) | ((o_cpu_halt_status & ~i_cpu_run_req_d1) & ~internal_dbg_halt_mode_f);
-	assign cpu_run_ack = ((~pmu_fw_tlu_halted_f & i_cpu_run_req_sync) | (o_cpu_halt_status & i_cpu_run_req_d1_raw)) | (o_cpu_run_ack & i_cpu_run_req_sync);
-	assign debug_mode_status = internal_dbg_halt_mode_f;
-	assign o_debug_mode_status = debug_mode_status;
-	assign i_cpu_run_req_d1 = i_cpu_run_req_d1_raw | (((((((nmi_int_detected | timer_int_ready) | soft_int_ready) | int_timer0_int_hold_f) | int_timer1_int_hold_f) | (mhwakeup & mhwakeup_ready)) & o_cpu_halt_status) & ~i_cpu_halt_req_d1);
-	assign lsu_single_ecc_error_r = lsu_single_ecc_error_incr;
-	assign lsu_error_pkt_addr_r[31:0] = lsu_error_pkt_r[33:2];
-	assign lsu_exc_valid_r_raw = lsu_error_pkt_r[0] & ~dec_tlu_flush_lower_wb;
-	assign lsu_i0_exc_r_raw = lsu_error_pkt_r[0];
-	assign lsu_i0_exc_r = ((lsu_i0_exc_r_raw & lsu_exc_valid_r_raw) & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-	assign lsu_exc_valid_r = lsu_i0_exc_r;
-	assign lsu_exc_ma_r = lsu_i0_exc_r & ~lsu_error_pkt_r[38];
-	assign lsu_exc_acc_r = lsu_i0_exc_r & lsu_error_pkt_r[38];
-	assign lsu_exc_st_r = lsu_i0_exc_r & lsu_error_pkt_r[39];
-	assign lsu_i0_rfnpc_r = (dec_tlu_i0_valid_r & ~i0_trigger_hit_r) & (~lsu_error_pkt_r[39] & lsu_error_pkt_r[1]);
-	assign tlu_i0_commit_cmt = (((((dec_tlu_i0_valid_r & ~rfpc_i0_r) & ~lsu_i0_exc_r) & ~inst_acc_r) & ~dec_tlu_dbg_halted) & ~request_debug_mode_r_d1) & ~i0_trigger_hit_r;
-	assign tlu_i0_kill_writeb_r = (((rfpc_i0_r | lsu_i0_exc_r) | inst_acc_r) | (illegal_r & dec_tlu_dbg_halted)) | i0_trigger_hit_r;
-	assign dec_tlu_i0_commit_cmt = tlu_i0_commit_cmt;
-	assign rfpc_i0_r = ((((dec_tlu_i0_valid_r & ~tlu_flush_lower_r_d1) & (exu_i0_br_error_r | exu_i0_br_start_error_r)) | ((ic_perr_r | iccm_sbecc_r) & ~ext_int_freeze_d1)) & ~i0_trigger_hit_r) & ~lsu_i0_rfnpc_r;
-	assign iccm_repair_state_ns = iccm_sbecc_r | (iccm_repair_state_d1 & ~dec_tlu_flush_lower_r);
-	localparam MCPC = 12'h7c2;
-	assign iccm_repair_state_rfnpc = (tlu_i0_commit_cmt & iccm_repair_state_d1) & ~(((((ebreak_r | ecall_r) | mret_r) | take_reset) | illegal_r) | (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC)));
-	generate
-		if (pt[2130-:5] == 1) begin
-			assign dec_tlu_br0_error_r = (exu_i0_br_error_r & dec_tlu_i0_valid_r) & ~tlu_flush_lower_r_d1;
-			assign dec_tlu_br0_start_error_r = (exu_i0_br_start_error_r & dec_tlu_i0_valid_r) & ~tlu_flush_lower_r_d1;
-			assign dec_tlu_br0_v_r = ((exu_i0_br_valid_r & dec_tlu_i0_valid_r) & ~tlu_flush_lower_r_d1) & (~exu_i0_br_mp_r | ~exu_pmu_i0_br_ataken);
-			assign dec_tlu_br0_r_pkt[5:4] = exu_i0_br_hist_r[1:0];
-			assign dec_tlu_br0_r_pkt[3] = dec_tlu_br0_error_r;
-			assign dec_tlu_br0_r_pkt[2] = dec_tlu_br0_start_error_r;
-			assign dec_tlu_br0_r_pkt[6] = dec_tlu_br0_v_r;
-			assign dec_tlu_br0_r_pkt[1] = exu_i0_br_way_r;
-			assign dec_tlu_br0_r_pkt[0] = exu_i0_br_middle_r;
-		end
-		else begin
-			assign dec_tlu_br0_error_r = 1'b0;
-			assign dec_tlu_br0_start_error_r = 1'b0;
-			assign dec_tlu_br0_v_r = 1'b0;
-			assign dec_tlu_br0_r_pkt = {7 {1'sb0}};
-		end
-	endgenerate
-	localparam [3:0] eb1_pkg_EBREAK = 4'b1000;
-	assign ebreak_r = ((((dec_tlu_packet_r[3-:4] == eb1_pkg_EBREAK) & dec_tlu_i0_valid_r) & ~i0_trigger_hit_r) & ~dcsr[DCSR_EBREAKM]) & ~rfpc_i0_r;
-	localparam [3:0] eb1_pkg_ECALL = 4'b1001;
-	assign ecall_r = (((dec_tlu_packet_r[3-:4] == eb1_pkg_ECALL) & dec_tlu_i0_valid_r) & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-	assign illegal_r = ((~dec_tlu_packet_r[5] & dec_tlu_i0_valid_r) & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-	localparam [3:0] eb1_pkg_MRET = 4'b1100;
-	assign mret_r = (((dec_tlu_packet_r[3-:4] == eb1_pkg_MRET) & dec_tlu_i0_valid_r) & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-	assign fence_i_r = ((dec_tlu_packet_r[12] & dec_tlu_i0_valid_r) & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-	assign ic_perr_r = ((ifu_ic_error_start_f & ~ext_int_freeze_d1) & (~internal_dbg_halt_mode_f | dcsr_single_step_running)) & ~internal_pmu_fw_halt_mode_f;
-	assign iccm_sbecc_r = ((ifu_iccm_rd_ecc_single_err_f & ~ext_int_freeze_d1) & (~internal_dbg_halt_mode_f | dcsr_single_step_running)) & ~internal_pmu_fw_halt_mode_f;
-	assign inst_acc_r_raw = dec_tlu_packet_r[16] & dec_tlu_i0_valid_r;
-	assign inst_acc_r = (inst_acc_r_raw & ~rfpc_i0_r) & ~i0_trigger_hit_r;
-	assign inst_acc_second_r = dec_tlu_packet_r[15];
-	assign ebreak_to_debug_mode_r = ((((dec_tlu_packet_r[3-:4] == eb1_pkg_EBREAK) & dec_tlu_i0_valid_r) & ~i0_trigger_hit_r) & dcsr[DCSR_EBREAKM]) & ~rfpc_i0_r;
-	rvdff #(.WIDTH(1)) exctype_wb_ff(
-		.rst_l(rst_l),
-		.clk(e4e5_clk),
-		.din(ebreak_to_debug_mode_r),
-		.dout(ebreak_to_debug_mode_r_d1)
-	);
-	assign dec_tlu_fence_i_r = fence_i_r;
-	assign i0_exception_valid_r = ((((ebreak_r | ecall_r) | illegal_r) | inst_acc_r) & ~rfpc_i0_r) & ~dec_tlu_dbg_halted;
-	assign exc_cause_r[4:0] = (((((((((((((({5 {take_ext_int}} & 5'h0b) | ({5 {take_timer_int}} & 5'h07)) | ({5 {take_soft_int}} & 5'h03)) | ({5 {take_int_timer0_int}} & 5'h1d)) | ({5 {take_int_timer1_int}} & 5'h1c)) | ({5 {take_ce_int}} & 5'h1e)) | ({5 {illegal_r}} & 5'h02)) | ({5 {ecall_r}} & 5'h0b)) | ({5 {inst_acc_r}} & 5'h01)) | ({5 {ebreak_r | i0_trigger_hit_r}} & 5'h03)) | ({5 {lsu_exc_ma_r & ~lsu_exc_st_r}} & 5'h04)) | ({5 {lsu_exc_acc_r & ~lsu_exc_st_r}} & 5'h05)) | ({5 {lsu_exc_ma_r & lsu_exc_st_r}} & 5'h06)) | ({5 {lsu_exc_acc_r & lsu_exc_st_r}} & 5'h07)) & ~{5 {take_nmi}};
-	assign mhwakeup_ready = ((~dec_csr_stall_int_ff & mstatus_mie_ns) & mip[MIP_MEIP]) & mie_ns[MIE_MEIE];
-	assign ext_int_ready = (((~dec_csr_stall_int_ff & mstatus_mie_ns) & mip[MIP_MEIP]) & mie_ns[MIE_MEIE]) & ~ignore_ext_int_due_to_lsu_stall;
-	assign ce_int_ready = ((~dec_csr_stall_int_ff & mstatus_mie_ns) & mip[MIP_MCEIP]) & mie_ns[MIE_MCEIE];
-	assign soft_int_ready = ((~dec_csr_stall_int_ff & mstatus_mie_ns) & mip[MIP_MSIP]) & mie_ns[MIE_MSIE];
-	assign timer_int_ready = ((~dec_csr_stall_int_ff & mstatus_mie_ns) & mip[MIP_MTIP]) & mie_ns[MIE_MTIE];
-	assign int_timer0_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE0];
-	assign int_timer0_int_ready = mip[MIP_MITIP0] & int_timer0_int_possible;
-	assign int_timer1_int_possible = mstatus_mie_ns & mie_ns[MIE_MITIE1];
-	assign int_timer1_int_ready = mip[MIP_MITIP1] & int_timer1_int_possible;
-	assign int_timer_stalled = ((dec_csr_stall_int_ff | synchronous_flush_r) | exc_or_int_valid_r_d1) | mret_r;
-	assign int_timer0_int_hold = (int_timer0_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | ((((int_timer0_int_possible & int_timer0_int_hold_f) & ~interrupt_valid_r) & ~take_ext_int_start) & ~internal_dbg_halt_mode_f);
-	assign int_timer1_int_hold = (int_timer1_int_ready & (pmu_fw_tlu_halted_f | int_timer_stalled)) | ((((int_timer1_int_possible & int_timer1_int_hold_f) & ~interrupt_valid_r) & ~take_ext_int_start) & ~internal_dbg_halt_mode_f);
-	assign internal_dbg_halt_timers = internal_dbg_halt_mode_f & ~dcsr_single_step_running;
-	assign block_interrupts = ((((((((internal_dbg_halt_mode & (~dcsr_single_step_running | dec_tlu_i0_valid_r)) | internal_pmu_fw_halt_mode) | i_cpu_halt_req_d1) | take_nmi) | ebreak_to_debug_mode_r) | synchronous_flush_r) | exc_or_int_valid_r_d1) | mret_r) | ext_int_freeze_d1;
-	generate
-		if (pt[1227-:5]) begin
-			assign take_ext_int_start = ext_int_ready & ~block_interrupts;
-			assign ext_int_freeze = ((take_ext_int_start | take_ext_int_start_d1) | take_ext_int_start_d2) | take_ext_int_start_d3;
-			assign take_ext_int = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-			assign fast_int_meicpct = csr_meicpct & dec_csr_any_unq_d;
-			assign ignore_ext_int_due_to_lsu_stall = lsu_fastint_stall_any;
-		end
-		else begin
-			assign take_ext_int_start = 1'b0;
-			assign ext_int_freeze = 1'b0;
-			assign ext_int_freeze_d1 = 1'b0;
-			assign take_ext_int_start_d1 = 1'b0;
-			assign take_ext_int_start_d2 = 1'b0;
-			assign take_ext_int_start_d3 = 1'b0;
-			assign fast_int_meicpct = 1'b0;
-			assign ignore_ext_int_due_to_lsu_stall = 1'b0;
-			assign take_ext_int = ext_int_ready & ~block_interrupts;
-		end
-	endgenerate
-	assign take_ce_int = (ce_int_ready & ~ext_int_ready) & ~block_interrupts;
-	assign take_soft_int = ((soft_int_ready & ~ext_int_ready) & ~ce_int_ready) & ~block_interrupts;
-	assign take_timer_int = (((timer_int_ready & ~soft_int_ready) & ~ext_int_ready) & ~ce_int_ready) & ~block_interrupts;
-	assign take_int_timer0_int = (((((((int_timer0_int_ready | int_timer0_int_hold_f) & int_timer0_int_possible) & ~dec_csr_stall_int_ff) & ~timer_int_ready) & ~soft_int_ready) & ~ext_int_ready) & ~ce_int_ready) & ~block_interrupts;
-	assign take_int_timer1_int = ((((((((int_timer1_int_ready | int_timer1_int_hold_f) & int_timer1_int_possible) & ~dec_csr_stall_int_ff) & ~(int_timer0_int_ready | int_timer0_int_hold_f)) & ~timer_int_ready) & ~soft_int_ready) & ~ext_int_ready) & ~ce_int_ready) & ~block_interrupts;
-	assign take_reset = reset_delayed & mpc_reset_run_req;
-	assign take_nmi = ((((((nmi_int_detected & ~internal_pmu_fw_halt_mode) & (~internal_dbg_halt_mode | (((dcsr_single_step_running_f & dcsr[DCSR_STEPIE]) & ~dec_tlu_i0_valid_r) & ~dcsr_single_step_done_f))) & ~synchronous_flush_r) & ~mret_r) & ~take_reset) & ~ebreak_to_debug_mode_r) & (~ext_int_freeze_d1 | (take_ext_int_start_d3 & |lsu_fir_error[1:0]));
-	assign interrupt_valid_r = (((((take_ext_int | take_timer_int) | take_soft_int) | take_nmi) | take_ce_int) | take_int_timer0_int) | take_int_timer1_int;
-	assign vectored_path[31:1] = {mtvec[30:1], 1'b0} + {25'b0000000000000000000000000, exc_cause_r[4:0], 1'b0};
-	assign interrupt_path[31:1] = (take_nmi ? nmi_vec[31:1] : (mtvec[0] == 1'b1 ? vectored_path[31:1] : {mtvec[30:1], 1'b0}));
-	assign sel_npc_r = (((lsu_i0_rfnpc_r | fence_i_r) | iccm_repair_state_rfnpc) | (i_cpu_run_req_d1 & ~interrupt_valid_r)) | (rfpc_i0_r & ~dec_tlu_i0_valid_r);
-	assign sel_npc_resume = (i_cpu_run_req_d1 & pmu_fw_tlu_halted_f) | pause_expired_r;
-	assign sel_fir_addr = take_ext_int_start_d3 & ~|lsu_fir_error[1:0];
-	assign synchronous_flush_r = ((((((((i0_exception_valid_r | rfpc_i0_r) | lsu_exc_valid_r) | fence_i_r) | lsu_i0_rfnpc_r) | iccm_repair_state_rfnpc) | debug_resume_req_f) | sel_npc_resume) | dec_tlu_wr_pause_r_d1) | i0_trigger_hit_r;
-	assign tlu_flush_lower_r = ((((interrupt_valid_r | mret_r) | synchronous_flush_r) | take_halt) | take_reset) | take_ext_int_start;
-	assign tlu_flush_path_r[31:1] = (take_reset ? rst_vec[31:1] : ((((((({31 {sel_fir_addr}} & lsu_fir_addr[31:1]) | ({31 {~take_nmi & sel_npc_r}} & npc_r[31:1])) | ({31 {((~take_nmi & rfpc_i0_r) & dec_tlu_i0_valid_r) & ~sel_npc_r}} & dec_tlu_i0_pc_r[31:1])) | ({31 {interrupt_valid_r & ~sel_fir_addr}} & interrupt_path[31:1])) | ({31 {(((i0_exception_valid_r | lsu_exc_valid_r) | (i0_trigger_hit_r & ~trigger_hit_dmode_r)) & ~interrupt_valid_r) & ~sel_fir_addr}} & {mtvec[30:1], 1'b0})) | ({31 {~take_nmi & mret_r}} & mepc[31:1])) | ({31 {~take_nmi & debug_resume_req_f}} & dpc[31:1])) | ({31 {~take_nmi & sel_npc_resume}} & npc_r_d1[31:1]));
-	rvdffpcie #(.WIDTH(31)) flush_lower_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(tlu_flush_lower_r),
-		.din({tlu_flush_path_r[31:1]}),
-		.dout({tlu_flush_path_r_d1[31:1]})
-	);
-	assign dec_tlu_flush_lower_wb = tlu_flush_lower_r_d1;
-	assign dec_tlu_flush_lower_r = tlu_flush_lower_r;
-	assign dec_tlu_flush_path_r[31:1] = tlu_flush_path_r[31:1];
-	assign exc_or_int_valid_r = ((lsu_exc_valid_r | i0_exception_valid_r) | interrupt_valid_r) | (i0_trigger_hit_r & ~trigger_hit_dmode_r);
-	rvdffie #(.WIDTH(12)) excinfo_wb_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din({interrupt_valid_r, i0_exception_valid_r, exc_or_int_valid_r, exc_cause_r[4:0], tlu_i0_commit_cmt & ~illegal_r, i0_trigger_hit_r, take_nmi, pause_expired_r}),
-		.dout({interrupt_valid_r_d1, i0_exception_valid_r_d1, exc_or_int_valid_r_d1, exc_cause_wb[4:0], i0_valid_wb, trigger_hit_r_d1, take_nmi_r_d1, pause_expired_wb})
-	);
-	localparam MISA = 12'h301;
-	localparam MVENDORID = 12'hf11;
-	localparam MARCHID = 12'hf12;
-	localparam MIMPID = 12'hf13;
-	localparam MHARTID = 12'hf14;
-	localparam MSTATUS = 12'h300;
-	assign dec_csr_wen_r_mod = (dec_csr_wen_r & ~i0_trigger_hit_r) & ~rfpc_i0_r;
-	assign wr_mstatus_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSTATUS);
-	assign set_mie_pmu_fw_halt = ~mpmc_b_ns[1] & fw_halt_req;
-	assign mstatus_ns[1:0] = ((((({2 {~wr_mstatus_r & exc_or_int_valid_r}} & {mstatus[MSTATUS_MIE], 1'b0}) | ({2 {wr_mstatus_r & exc_or_int_valid_r}} & {dec_csr_wrdata_r[3], 1'b0})) | ({2 {mret_r & ~exc_or_int_valid_r}} & {1'b1, mstatus[1]})) | ({2 {set_mie_pmu_fw_halt}} & {mstatus[1], 1'b1})) | ({2 {wr_mstatus_r & ~exc_or_int_valid_r}} & {dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]})) | ({2 {((~wr_mstatus_r & ~exc_or_int_valid_r) & ~mret_r) & ~set_mie_pmu_fw_halt}} & mstatus[1:0]);
-	assign mstatus_mie_ns = mstatus[MSTATUS_MIE] & (~dcsr_single_step_running_f | dcsr[DCSR_STEPIE]);
-	localparam MTVEC = 12'h305;
-	assign wr_mtvec_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVEC);
-	assign mtvec_ns[30:0] = {dec_csr_wrdata_r[31:2], dec_csr_wrdata_r[0]};
-	rvdffe #(.WIDTH(31)) mtvec_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mtvec_r),
-		.din(mtvec_ns[30:0]),
-		.dout(mtvec[30:0])
-	);
-	localparam MIP = 12'h344;
-	assign ce_int = (mdccme_ce_req | miccme_ce_req) | mice_ce_req;
-	assign mip_ns[5:0] = {ce_int, dec_timer_t0_pulse, dec_timer_t1_pulse, mexintpend, timer_int_sync, soft_int_sync};
-	localparam MIE = 12'h304;
-	assign wr_mie_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MIE);
-	assign mie_ns[5:0] = (wr_mie_r ? {dec_csr_wrdata_r[30:28], dec_csr_wrdata_r[11], dec_csr_wrdata_r[7], dec_csr_wrdata_r[3]} : mie[5:0]);
-	rvdff #(.WIDTH(6)) mie_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.din(mie_ns[5:0]),
-		.dout(mie[5:0])
-	);
-	localparam MCYCLEL = 12'hb00;
-	assign kill_ebreak_count_r = ebreak_to_debug_mode_r & dcsr[DCSR_STOPC];
-	assign wr_mcyclel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEL);
-	assign mcyclel_cout_in = ~(((kill_ebreak_count_r | (dec_tlu_dbg_halted & dcsr[DCSR_STOPC])) | dec_tlu_pmu_fw_halted) | mcountinhibit[0]);
-	assign {mcyclela_cout, mcyclel_inc[7:0]} = mcyclel[7:0] + 8'b00000001;
-	assign {mcyclel_cout, mcyclel_inc[31:8]} = mcyclel[31:8] + {23'b00000000000000000000000, mcyclela_cout};
-	assign mcyclel_ns[31:0] = (wr_mcyclel_r ? dec_csr_wrdata_r[31:0] : mcyclel_inc[31:0]);
-	rvdffe #(.WIDTH(24)) mcyclel_bff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(wr_mcyclel_r | (mcyclela_cout & mcyclel_cout_in)),
-		.din(mcyclel_ns[31:8]),
-		.dout(mcyclel[31:8])
-	);
-	rvdffe #(.WIDTH(8)) mcyclel_aff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(wr_mcyclel_r | mcyclel_cout_in),
-		.din(mcyclel_ns[7:0]),
-		.dout(mcyclel[7:0])
-	);
-	localparam MCYCLEH = 12'hb80;
-	assign wr_mcycleh_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCYCLEH);
-	assign mcycleh_inc[31:0] = mcycleh[31:0] + {31'b0000000000000000000000000000000, mcyclel_cout_f};
-	assign mcycleh_ns[31:0] = (wr_mcycleh_r ? dec_csr_wrdata_r[31:0] : mcycleh_inc[31:0]);
-	rvdffe #(.WIDTH(32)) mcycleh_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(wr_mcycleh_r | mcyclel_cout_f),
-		.din(mcycleh_ns[31:0]),
-		.dout(mcycleh[31:0])
-	);
-	localparam MINSTRETL = 12'hb02;
-	assign i0_valid_no_ebreak_ecall_r = dec_tlu_i0_valid_r & ~((((ebreak_r | ecall_r) | ebreak_to_debug_mode_r) | illegal_r) | mcountinhibit[2]);
-	assign wr_minstretl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETL);
-	assign {minstretl_couta, minstretl_inc[7:0]} = minstretl[7:0] + 8'b00000001;
-	assign {minstretl_cout, minstretl_inc[31:8]} = minstretl[31:8] + {23'b00000000000000000000000, minstretl_couta};
-	assign minstret_enable = (i0_valid_no_ebreak_ecall_r & tlu_i0_commit_cmt) | wr_minstretl_r;
-	assign minstretl_cout_ns = ((minstretl_cout & ~wr_minstreth_r) & i0_valid_no_ebreak_ecall_r) & ~dec_tlu_dbg_halted;
-	assign minstretl_ns[31:0] = (wr_minstretl_r ? dec_csr_wrdata_r[31:0] : minstretl_inc[31:0]);
-	rvdffe #(.WIDTH(24)) minstretl_bff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_minstretl_r | (minstretl_couta & minstret_enable)),
-		.din(minstretl_ns[31:8]),
-		.dout(minstretl[31:8])
-	);
-	rvdffe #(.WIDTH(8)) minstretl_aff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(minstret_enable),
-		.din(minstretl_ns[7:0]),
-		.dout(minstretl[7:0])
-	);
-	assign minstretl_read[31:0] = minstretl[31:0];
-	localparam MINSTRETH = 12'hb82;
-	assign wr_minstreth_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MINSTRETH);
-	assign minstreth_inc[31:0] = minstreth[31:0] + {31'b0000000000000000000000000000000, minstretl_cout_f};
-	assign minstreth_ns[31:0] = (wr_minstreth_r ? dec_csr_wrdata_r[31:0] : minstreth_inc[31:0]);
-	rvdffe #(.WIDTH(32)) minstreth_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en((minstret_enable_f & minstretl_cout_f) | wr_minstreth_r),
-		.din(minstreth_ns[31:0]),
-		.dout(minstreth[31:0])
-	);
-	assign minstreth_read[31:0] = minstreth_inc[31:0];
-	localparam MSCRATCH = 12'h340;
-	assign wr_mscratch_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCRATCH);
-	rvdffe #(.WIDTH(32)) mscratch_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mscratch_r),
-		.din(dec_csr_wrdata_r[31:0]),
-		.dout(mscratch[31:0])
-	);
-	localparam MEPC = 12'h341;
-	assign sel_exu_npc_r = (~dec_tlu_dbg_halted & ~tlu_flush_lower_r_d1) & dec_tlu_i0_valid_r;
-	assign sel_flush_npc_r = (~dec_tlu_dbg_halted & tlu_flush_lower_r_d1) & ~dec_tlu_flush_noredir_r_d1;
-	assign sel_hold_npc_r = ~sel_exu_npc_r & ~sel_flush_npc_r;
-	assign npc_r[31:1] = ((({31 {sel_exu_npc_r}} & exu_npc_r[31:1]) | ({31 {~mpc_reset_run_req & reset_delayed}} & rst_vec[31:1])) | ({31 {sel_flush_npc_r}} & tlu_flush_path_r_d1[31:1])) | ({31 {sel_hold_npc_r}} & npc_r_d1[31:1]);
-	rvdffpcie #(.WIDTH(31)) npwbc_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en((sel_exu_npc_r | sel_flush_npc_r) | reset_delayed),
-		.din(npc_r[31:1]),
-		.dout(npc_r_d1[31:1])
-	);
-	assign pc0_valid_r = ~dec_tlu_dbg_halted & dec_tlu_i0_valid_r;
-	assign pc_r[31:1] = ({31 {pc0_valid_r}} & dec_tlu_i0_pc_r[31:1]) | ({31 {~pc0_valid_r}} & pc_r_d1[31:1]);
-	rvdffpcie #(.WIDTH(31)) pwbc_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(pc0_valid_r),
-		.din(pc_r[31:1]),
-		.dout(pc_r_d1[31:1])
-	);
-	assign wr_mepc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEPC);
-	assign mepc_ns[31:1] = ((({31 {(i0_exception_valid_r | lsu_exc_valid_r) | mepc_trigger_hit_sel_pc_r}} & pc_r[31:1]) | ({31 {interrupt_valid_r}} & npc_r[31:1])) | ({31 {wr_mepc_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:1])) | ({31 {~wr_mepc_r & ~exc_or_int_valid_r}} & mepc[31:1]);
-	rvdffe #(.WIDTH(31)) mepc_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en((((i0_exception_valid_r | lsu_exc_valid_r) | mepc_trigger_hit_sel_pc_r) | interrupt_valid_r) | wr_mepc_r),
-		.din(mepc_ns[31:1]),
-		.dout(mepc[31:1])
-	);
-	localparam MCAUSE = 12'h342;
-	assign wr_mcause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCAUSE);
-	assign mcause_sel_nmi_store = (exc_or_int_valid_r & take_nmi) & nmi_lsu_store_type;
-	assign mcause_sel_nmi_load = (exc_or_int_valid_r & take_nmi) & nmi_lsu_load_type;
-	assign mcause_sel_nmi_ext = (((exc_or_int_valid_r & take_nmi) & take_ext_int_start_d3) & |lsu_fir_error[1:0]) & ~nmi_int_detected_f;
-	assign mcause_fir_error_type[1:0] = {&lsu_fir_error[1:0], lsu_fir_error[1] & ~lsu_fir_error[0]};
-	assign mcause_ns[31:0] = ((((({32 {mcause_sel_nmi_store}} & 32'hf0000000) | ({32 {mcause_sel_nmi_load}} & 32'hf0000001)) | ({32 {mcause_sel_nmi_ext}} & {30'b111100000000000000010000000000, mcause_fir_error_type[1:0]})) | ({32 {exc_or_int_valid_r & ~take_nmi}} & {interrupt_valid_r, 26'b00000000000000000000000000, exc_cause_r[4:0]})) | ({32 {wr_mcause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[31:0])) | ({32 {~wr_mcause_r & ~exc_or_int_valid_r}} & mcause[31:0]);
-	rvdffe #(.WIDTH(32)) mcause_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(exc_or_int_valid_r | wr_mcause_r),
-		.din(mcause_ns[31:0]),
-		.dout(mcause[31:0])
-	);
-	localparam MSCAUSE = 12'h7ff;
-	assign wr_mscause_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MSCAUSE);
-	assign ifu_mscause[3:0] = (dec_tlu_packet_r[14:13] == 2'b00 ? 4'b1001 : {2'b00, dec_tlu_packet_r[14:13]});
-	assign mscause_type[3:0] = ((({4 {lsu_i0_exc_r}} & lsu_error_pkt_r[37:34]) | ({4 {i0_trigger_hit_r}} & 4'b0001)) | ({4 {ebreak_r}} & 4'b0010)) | ({4 {inst_acc_r}} & ifu_mscause[3:0]);
-	assign mscause_ns[3:0] = (({4 {exc_or_int_valid_r}} & mscause_type[3:0]) | ({4 {wr_mscause_r & ~exc_or_int_valid_r}} & dec_csr_wrdata_r[3:0])) | ({4 {~wr_mscause_r & ~exc_or_int_valid_r}} & mscause[3:0]);
-	rvdff #(.WIDTH(4)) mscause_ff(
-		.rst_l(rst_l),
-		.clk(e4e5_int_clk),
-		.din(mscause_ns[3:0]),
-		.dout(mscause[3:0])
-	);
-	localparam MTVAL = 12'h343;
-	assign wr_mtval_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTVAL);
-	assign mtval_capture_pc_r = (exc_or_int_valid_r & ((ebreak_r | (inst_acc_r & ~inst_acc_second_r)) | mepc_trigger_hit_sel_pc_r)) & ~take_nmi;
-	assign mtval_capture_pc_plus2_r = (exc_or_int_valid_r & (inst_acc_r & inst_acc_second_r)) & ~take_nmi;
-	assign mtval_capture_inst_r = (exc_or_int_valid_r & illegal_r) & ~take_nmi;
-	assign mtval_capture_lsu_r = (exc_or_int_valid_r & lsu_exc_valid_r) & ~take_nmi;
-	assign mtval_clear_r = (((exc_or_int_valid_r & ~mtval_capture_pc_r) & ~mtval_capture_inst_r) & ~mtval_capture_lsu_r) & ~mepc_trigger_hit_sel_pc_r;
-	assign mtval_ns[31:0] = ((((({32 {mtval_capture_pc_r}} & {pc_r[31:1], 1'b0}) | ({32 {mtval_capture_pc_plus2_r}} & {pc_r[31:1] + 31'b0000000000000000000000000000001, 1'b0})) | ({32 {mtval_capture_inst_r}} & dec_illegal_inst[31:0])) | ({32 {mtval_capture_lsu_r}} & lsu_error_pkt_addr_r[31:0])) | ({32 {wr_mtval_r & ~interrupt_valid_r}} & dec_csr_wrdata_r[31:0])) | ({32 {((((~take_nmi & ~wr_mtval_r) & ~mtval_capture_pc_r) & ~mtval_capture_inst_r) & ~mtval_clear_r) & ~mtval_capture_lsu_r}} & mtval[31:0]);
-	rvdffe #(.WIDTH(32)) mtval_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(tlu_flush_lower_r | wr_mtval_r),
-		.din(mtval_ns[31:0]),
-		.dout(mtval[31:0])
-	);
-	localparam MCGC = 12'h7f8;
-	assign wr_mcgc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCGC);
-	assign mcgc_ns[9:0] = (wr_mcgc_r ? {~dec_csr_wrdata_r[9], dec_csr_wrdata_r[8:0]} : mcgc_int[9:0]);
-	rvdffe #(.WIDTH(10)) mcgc_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mcgc_r),
-		.din(mcgc_ns[9:0]),
-		.dout(mcgc_int[9:0])
-	);
-	assign mcgc[9:0] = {~mcgc_int[9], mcgc_int[8:0]};
-	assign dec_tlu_picio_clk_override = mcgc[9];
-	assign dec_tlu_misc_clk_override = mcgc[8];
-	assign dec_tlu_dec_clk_override = mcgc[7];
-	assign dec_tlu_ifu_clk_override = mcgc[5];
-	assign dec_tlu_lsu_clk_override = mcgc[4];
-	assign dec_tlu_bus_clk_override = mcgc[3];
-	assign dec_tlu_pic_clk_override = mcgc[2];
-	assign dec_tlu_dccm_clk_override = mcgc[1];
-	assign dec_tlu_icm_clk_override = mcgc[0];
-	localparam MFDC = 12'h7f9;
-	assign wr_mfdc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDC);
-	rvdffe #(.WIDTH(16)) mfdc_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mfdc_r),
-		.din({mfdc_ns[15:0]}),
-		.dout(mfdc_int[15:0])
-	);
-	generate
-		if (pt[2037-:5] == 1) begin : axi4
-			assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16], dec_csr_wrdata_r[12], dec_csr_wrdata_r[11:7], ~dec_csr_wrdata_r[6], dec_csr_wrdata_r[5:0]};
-			assign mfdc[18:0] = {~mfdc_int[15:13], 3'b000, mfdc_int[12], mfdc_int[11:7], ~mfdc_int[6], mfdc_int[5:0]};
-		end
-		else begin
-			assign mfdc_ns[15:0] = {~dec_csr_wrdata_r[18:16], dec_csr_wrdata_r[12:0]};
-			assign mfdc[18:0] = {~mfdc_int[15:13], 3'b000, mfdc_int[12:0]};
-		end
-	endgenerate
-	assign dec_tlu_dma_qos_prty[2:0] = mfdc[18:16];
-	assign dec_tlu_trace_disable = mfdc[12];
-	assign dec_tlu_external_ldfwd_disable = mfdc[11];
-	assign dec_tlu_core_ecc_disable = 1'b1;
-	assign dec_tlu_sideeffect_posted_disable = mfdc[6];
-	assign dec_tlu_bpred_disable = mfdc[3];
-	assign dec_tlu_wb_coalescing_disable = mfdc[2];
-	assign dec_tlu_pipelining_disable = mfdc[0];
-	assign dec_tlu_wr_pause_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCPC)) & ~interrupt_valid_r) & ~take_ext_int_start;
-	localparam MRAC = 12'h7c0;
-	assign wr_mrac_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MRAC);
-	assign mrac_in[31:0] = {dec_csr_wrdata_r[31], dec_csr_wrdata_r[30] & ~dec_csr_wrdata_r[31], dec_csr_wrdata_r[29], dec_csr_wrdata_r[28] & ~dec_csr_wrdata_r[29], dec_csr_wrdata_r[27], dec_csr_wrdata_r[26] & ~dec_csr_wrdata_r[27], dec_csr_wrdata_r[25], dec_csr_wrdata_r[24] & ~dec_csr_wrdata_r[25], dec_csr_wrdata_r[23], dec_csr_wrdata_r[22] & ~dec_csr_wrdata_r[23], dec_csr_wrdata_r[21], dec_csr_wrdata_r[20] & ~dec_csr_wrdata_r[21], dec_csr_wrdata_r[19], dec_csr_wrdata_r[18] & ~dec_csr_wrdata_r[19], dec_csr_wrdata_r[17], dec_csr_wrdata_r[16] & ~dec_csr_wrdata_r[17], dec_csr_wrdata_r[15], dec_csr_wrdata_r[14] & ~dec_csr_wrdata_r[15], dec_csr_wrdata_r[13], dec_csr_wrdata_r[12] & ~dec_csr_wrdata_r[13], dec_csr_wrdata_r[11], dec_csr_wrdata_r[10] & ~dec_csr_wrdata_r[11], dec_csr_wrdata_r[9], dec_csr_wrdata_r[8] & ~dec_csr_wrdata_r[9], dec_csr_wrdata_r[7], dec_csr_wrdata_r[6] & ~dec_csr_wrdata_r[7], dec_csr_wrdata_r[5], dec_csr_wrdata_r[4] & ~dec_csr_wrdata_r[5], dec_csr_wrdata_r[3], dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[3], dec_csr_wrdata_r[1], dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[1]};
-	rvdffe #(.WIDTH(32)) mrac_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mrac_r),
-		.din(mrac_in[31:0]),
-		.dout(mrac[31:0])
-	);
-	assign dec_tlu_mrac_ff[31:0] = mrac[31:0];
-	localparam MDEAU = 12'hbc0;
-	assign wr_mdeau_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDEAU);
-	localparam MDSEAC = 12'hfc0;
-	assign mdseac_locked_ns = mdseac_en | (mdseac_locked_f & ~wr_mdeau_r);
-	assign mdseac_en = ((lsu_imprecise_error_store_any | lsu_imprecise_error_load_any) & ~nmi_int_detected_f) & ~mdseac_locked_f;
-	rvdffe #(.WIDTH(32)) mdseac_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(mdseac_en),
-		.din(lsu_imprecise_error_addr_any[31:0]),
-		.dout(mdseac[31:0])
-	);
-	localparam MPMC = 12'h7c6;
-	assign wr_mpmc_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MPMC);
-	assign fw_halt_req = ((wr_mpmc_r & dec_csr_wrdata_r[0]) & ~internal_dbg_halt_mode_f2) & ~ext_int_freeze_d1;
-	assign fw_halted_ns = (fw_halt_req | fw_halted) & ~set_mie_pmu_fw_halt;
-	assign mpmc_b_ns[1] = (wr_mpmc_r ? ~dec_csr_wrdata_r[1] : ~mpmc[1]);
-	rvdff #(.WIDTH(1)) mpmc_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.din(mpmc_b_ns[1]),
-		.dout(mpmc_b[1])
-	);
-	assign mpmc[1] = ~mpmc_b[1];
-	localparam MICECT = 12'h7f0;
-	assign csr_sat[31:27] = (dec_csr_wrdata_r[31:27] > 5'd26 ? 5'd26 : dec_csr_wrdata_r[31:27]);
-	assign wr_micect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICECT);
-	assign micect_inc[26:0] = micect[26:0] + {26'b00000000000000000000000000, ic_perr_r};
-	assign micect_ns = (wr_micect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {micect[31:27], micect_inc[26:0]});
-	rvdffe #(.WIDTH(32)) micect_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_micect_r | ic_perr_r),
-		.din(micect_ns[31:0]),
-		.dout(micect[31:0])
-	);
-	assign mice_ce_req = |({32'hffffffff << micect[31:27]} & {5'b00000, micect[26:0]});
-	localparam MICCMECT = 12'h7f1;
-	assign wr_miccmect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MICCMECT);
-	assign miccmect_inc[26:0] = miccmect[26:0] + {26'b00000000000000000000000000, iccm_sbecc_r | iccm_dma_sb_error};
-	assign miccmect_ns = (wr_miccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {miccmect[31:27], miccmect_inc[26:0]});
-	rvdffe #(.WIDTH(32)) miccmect_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en((wr_miccmect_r | iccm_sbecc_r) | iccm_dma_sb_error),
-		.din(miccmect_ns[31:0]),
-		.dout(miccmect[31:0])
-	);
-	assign miccme_ce_req = |({32'hffffffff << miccmect[31:27]} & {5'b00000, miccmect[26:0]});
-	localparam MDCCMECT = 12'h7f2;
-	assign wr_mdccmect_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MDCCMECT);
-	assign mdccmect_inc[26:0] = mdccmect[26:0] + {26'b00000000000000000000000000, lsu_single_ecc_error_r_d1};
-	assign mdccmect_ns = (wr_mdccmect_r ? {csr_sat[31:27], dec_csr_wrdata_r[26:0]} : {mdccmect[31:27], mdccmect_inc[26:0]});
-	rvdffe #(.WIDTH(32)) mdccmect_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(wr_mdccmect_r | lsu_single_ecc_error_r_d1),
-		.din(mdccmect_ns[31:0]),
-		.dout(mdccmect[31:0])
-	);
-	assign mdccme_ce_req = |({32'hffffffff << mdccmect[31:27]} & {5'b00000, mdccmect[26:0]});
-	localparam MFDHT = 12'h7ce;
-	assign wr_mfdht_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHT);
-	assign mfdht_ns[5:0] = (wr_mfdht_r ? dec_csr_wrdata_r[5:0] : mfdht[5:0]);
-	rvdffs #(.WIDTH(6)) mfdht_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.en(wr_mfdht_r),
-		.din(mfdht_ns[5:0]),
-		.dout(mfdht[5:0])
-	);
-	localparam MFDHS = 12'h7cf;
-	assign wr_mfdhs_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MFDHS);
-	assign mfdhs_ns[1:0] = (wr_mfdhs_r ? dec_csr_wrdata_r[1:0] : (dbg_tlu_halted & ~dbg_tlu_halted_f ? {~lsu_idle_any_f, ~ifu_miss_state_idle_f} : mfdhs[1:0]));
-	rvdffs #(.WIDTH(2)) mfdhs_ff(
-		.rst_l(rst_l),
-		.clk(free_clk),
-		.en(wr_mfdhs_r | dbg_tlu_halted),
-		.din(mfdhs_ns[1:0]),
-		.dout(mfdhs[1:0])
-	);
-	assign force_halt_ctr[31:0] = (debug_halt_req_f ? force_halt_ctr_f[31:0] + 32'b00000000000000000000000000000001 : (dbg_tlu_halted_f ? 32'b00000000000000000000000000000000 : force_halt_ctr_f[31:0]));
-	rvdffe #(.WIDTH(32)) forcehaltctr_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(mfdht[0]),
-		.din(force_halt_ctr[31:0]),
-		.dout(force_halt_ctr_f[31:0])
-	);
-	assign force_halt = mfdht[0] & |(force_halt_ctr_f[31:0] & (32'hffffffff << mfdht[5:1]));
-	localparam MEIVT = 12'hbc8;
-	assign wr_meivt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIVT);
-	rvdffe #(.WIDTH(22)) meivt_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_meivt_r),
-		.din(dec_csr_wrdata_r[31:10]),
-		.dout(meivt[31:10])
-	);
-	localparam MEIHAP = 12'hfc8;
-	assign wr_meihap_r = wr_meicpct_r;
-	rvdffe #(.WIDTH(8)) meihap_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_meihap_r),
-		.din(pic_claimid[7:0]),
-		.dout(meihap[9:2])
-	);
-	assign dec_tlu_meihap[31:2] = {meivt[31:10], meihap[9:2]};
-	localparam MEICURPL = 12'hbcc;
-	assign wr_meicurpl_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICURPL);
-	assign meicurpl_ns[3:0] = (wr_meicurpl_r ? dec_csr_wrdata_r[3:0] : meicurpl[3:0]);
-	rvdff #(.WIDTH(4)) meicurpl_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.din(meicurpl_ns[3:0]),
-		.dout(meicurpl[3:0])
-	);
-	assign dec_tlu_meicurpl[3:0] = meicurpl[3:0];
-	localparam MEICIDPL = 12'hbcb;
-	assign wr_meicidpl_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICIDPL)) | take_ext_int_start;
-	assign meicidpl_ns[3:0] = (wr_meicpct_r ? pic_pl[3:0] : (wr_meicidpl_r ? dec_csr_wrdata_r[3:0] : meicidpl[3:0]));
-	localparam MEICPCT = 12'hbca;
-	assign wr_meicpct_r = (dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEICPCT)) | take_ext_int_start;
-	localparam MEIPT = 12'hbc9;
-	assign wr_meipt_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MEIPT);
-	assign meipt_ns[3:0] = (wr_meipt_r ? dec_csr_wrdata_r[3:0] : meipt[3:0]);
-	rvdff #(.WIDTH(4)) meipt_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.din(meipt_ns[3:0]),
-		.dout(meipt[3:0])
-	);
-	assign dec_tlu_meipt[3:0] = meipt[3:0];
-	localparam DCSR = 12'h7b0;
-	assign trigger_hit_for_dscr_cause_r_d1 = trigger_hit_dmode_r_d1 | (trigger_hit_r_d1 & dcsr_single_step_done_f);
-	assign dcsr_cause[8:6] = ((({3 {((dcsr_single_step_done_f & ~ebreak_to_debug_mode_r_d1) & ~trigger_hit_for_dscr_cause_r_d1) & ~debug_halt_req}} & 3'b100) | ({3 {(debug_halt_req & ~ebreak_to_debug_mode_r_d1) & ~trigger_hit_for_dscr_cause_r_d1}} & 3'b011)) | ({3 {ebreak_to_debug_mode_r_d1 & ~trigger_hit_for_dscr_cause_r_d1}} & 3'b001)) | ({3 {trigger_hit_for_dscr_cause_r_d1}} & 3'b010);
-	assign wr_dcsr_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DCSR);
-	assign dcsr_cause_upgradeable = internal_dbg_halt_mode_f & (dcsr[8:6] == 3'b011);
-	assign enter_debug_halt_req_le = enter_debug_halt_req & (~dbg_tlu_halted | dcsr_cause_upgradeable);
-	assign nmi_in_debug_mode = nmi_int_detected_f & internal_dbg_halt_mode_f;
-	assign dcsr_ns[15:2] = (enter_debug_halt_req_le ? {dcsr[15:9], dcsr_cause[8:6], dcsr[5:2]} : (wr_dcsr_r ? {dec_csr_wrdata_r[15], 3'b000, dec_csr_wrdata_r[11:10], 1'b0, dcsr[8:6], 2'b00, nmi_in_debug_mode | dcsr[3], dec_csr_wrdata_r[2]} : {dcsr[15:4], nmi_in_debug_mode, dcsr[2]}));
-	rvdffe #(.WIDTH(14)) dcsr_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(((enter_debug_halt_req_le | wr_dcsr_r) | internal_dbg_halt_mode) | take_nmi),
-		.din(dcsr_ns[15:2]),
-		.dout(dcsr[15:2])
-	);
-	localparam DPC = 12'h7b1;
-	assign wr_dpc_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DPC);
-	assign dpc_capture_npc = (dbg_tlu_halted & ~dbg_tlu_halted_f) & ~request_debug_mode_done;
-	assign dpc_capture_pc = request_debug_mode_r;
-	assign dpc_ns[31:1] = (({31 {(~dpc_capture_pc & ~dpc_capture_npc) & wr_dpc_r}} & dec_csr_wrdata_r[31:1]) | ({31 {dpc_capture_pc}} & pc_r[31:1])) | ({31 {~dpc_capture_pc & dpc_capture_npc}} & npc_r[31:1]);
-	rvdffe #(.WIDTH(31)) dpc_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en((wr_dpc_r | dpc_capture_pc) | dpc_capture_npc),
-		.din(dpc_ns[31:1]),
-		.dout(dpc[31:1])
-	);
-	localparam DICAWICS = 12'h7c8;
-	assign dicawics_ns[16:0] = {dec_csr_wrdata_r[24], dec_csr_wrdata_r[21:20], dec_csr_wrdata_r[16:3]};
-	assign wr_dicawics_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DICAWICS);
-	rvdffe #(.WIDTH(17)) dicawics_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_dicawics_r),
-		.din(dicawics_ns[16:0]),
-		.dout(dicawics[16:0])
-	);
-	localparam DICAD0 = 12'h7c9;
-	assign dicad0_ns[31:0] = (wr_dicad0_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[31:0]);
-	assign wr_dicad0_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DICAD0);
-	rvdffe #(.WIDTH(32)) dicad0_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_dicad0_r | ifu_ic_debug_rd_data_valid),
-		.din(dicad0_ns[31:0]),
-		.dout(dicad0[31:0])
-	);
-	localparam DICAD0H = 12'h7cc;
-	assign dicad0h_ns[31:0] = (wr_dicad0h_r ? dec_csr_wrdata_r[31:0] : ifu_ic_debug_rd_data[63:32]);
-	assign wr_dicad0h_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DICAD0H);
-	rvdffe #(.WIDTH(32)) dicad0h_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_dicad0h_r | ifu_ic_debug_rd_data_valid),
-		.din(dicad0h_ns[31:0]),
-		.dout(dicad0h[31:0])
-	);
-	generate
-		if (pt[1125-:5] == 1) begin
-			localparam DICAD1 = 12'h7ca;
-			assign dicad1_ns[6:0] = (wr_dicad1_r ? dec_csr_wrdata_r[6:0] : ifu_ic_debug_rd_data[70:64]);
-			assign wr_dicad1_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DICAD1);
-			rvdffe #(
-				.WIDTH(7),
-				.OVERRIDE(1)
-			) dicad1_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(wr_dicad1_r | ifu_ic_debug_rd_data_valid),
-				.din(dicad1_ns[6:0]),
-				.dout(dicad1_raw[6:0])
-			);
-			assign dicad1[31:0] = {25'b0000000000000000000000000, dicad1_raw[6:0]};
-		end
-		else begin
-			localparam DICAD1 = 12'h7ca;
-			assign dicad1_ns[3:0] = (wr_dicad1_r ? dec_csr_wrdata_r[3:0] : ifu_ic_debug_rd_data[67:64]);
-			assign wr_dicad1_r = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DICAD1);
-			rvdffs #(.WIDTH(4)) dicad1_ff(
-				.rst_l(rst_l),
-				.clk(free_clk),
-				.en(wr_dicad1_r | ifu_ic_debug_rd_data_valid),
-				.din(dicad1_ns[3:0]),
-				.dout(dicad1_raw[3:0])
-			);
-			assign dicad1[31:0] = {28'b0000000000000000000000000000, dicad1_raw[3:0]};
-		end
-	endgenerate
-	localparam DICAGO = 12'h7cb;
-	generate
-		if (pt[1125-:5] == 1) begin
-			assign dec_tlu_ic_diag_pkt[89:19] = {dicad1[6:0], dicad0h[31:0], dicad0[31:0]};
-		end
-		else assign dec_tlu_ic_diag_pkt[89:19] = {3'b000, dicad1[3:0], dicad0h[31:0], dicad0[31:0]};
-	endgenerate
-	assign dec_tlu_ic_diag_pkt[18:2] = dicawics[16:0];
-	assign icache_rd_valid = (((allow_dbg_halt_csr_write & dec_csr_any_unq_d) & dec_i0_decode_d) & ~dec_csr_wen_unq_d) & (dec_csr_rdaddr_d[11:0] == DICAGO);
-	assign icache_wr_valid = (allow_dbg_halt_csr_write & dec_csr_wen_r_mod) & (dec_csr_wraddr_r[11:0] == DICAGO);
-	assign dec_tlu_ic_diag_pkt[1] = icache_rd_valid_f;
-	assign dec_tlu_ic_diag_pkt[0] = icache_wr_valid_f;
-	localparam MTSEL = 12'h7a0;
-	assign wr_mtsel_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTSEL);
-	assign mtsel_ns[1:0] = (wr_mtsel_r ? {dec_csr_wrdata_r[1:0]} : mtsel[1:0]);
-	rvdff #(.WIDTH(2)) mtsel_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.din(mtsel_ns[1:0]),
-		.dout(mtsel[1:0])
-	);
-	localparam MTDATA1 = 12'h7a1;
-	assign tdata_load = dec_csr_wrdata_r[0] & ~dec_csr_wrdata_r[19];
-	assign tdata_opcode = dec_csr_wrdata_r[2] & ~dec_csr_wrdata_r[19];
-	assign tdata_action = (dec_csr_wrdata_r[27] & dbg_tlu_halted_f) & dec_csr_wrdata_r[12];
-	assign tdata_chain = (mtsel[0] ? 1'b0 : (mtsel[1] ? dec_csr_wrdata_r[11] & ~(mtdata1_t3[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27]) : dec_csr_wrdata_r[11] & ~(mtdata1_t1[MTDATA1_DMODE] & ~dec_csr_wrdata_r[27])));
-	assign tdata_kill_write = (mtsel[1] ? dec_csr_wrdata_r[27] & (~mtdata1_t2[MTDATA1_DMODE] & mtdata1_t2[MTDATA1_CHAIN]) : dec_csr_wrdata_r[27] & (~mtdata1_t0[MTDATA1_DMODE] & mtdata1_t0[MTDATA1_CHAIN]));
-	assign tdata_wrdata_r[9:0] = {dec_csr_wrdata_r[27] & dbg_tlu_halted_f, dec_csr_wrdata_r[20:19], tdata_action, tdata_chain, dec_csr_wrdata_r[7:6], tdata_opcode, dec_csr_wrdata_r[1], tdata_load};
-	assign wr_mtdata1_t0_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1)) & (mtsel[1:0] == 2'b00)) & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-	assign mtdata1_t0_ns[9:0] = (wr_mtdata1_t0_r ? tdata_wrdata_r[9:0] : {mtdata1_t0[9], update_hit_bit_r[0] | mtdata1_t0[8], mtdata1_t0[7:0]});
-	assign wr_mtdata1_t1_r = (((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1)) & (mtsel[1:0] == 2'b01)) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f)) & ~tdata_kill_write;
-	assign mtdata1_t1_ns[9:0] = (wr_mtdata1_t1_r ? tdata_wrdata_r[9:0] : {mtdata1_t1[9], update_hit_bit_r[1] | mtdata1_t1[8], mtdata1_t1[7:0]});
-	assign wr_mtdata1_t2_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1)) & (mtsel[1:0] == 2'b10)) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-	assign mtdata1_t2_ns[9:0] = (wr_mtdata1_t2_r ? tdata_wrdata_r[9:0] : {mtdata1_t2[9], update_hit_bit_r[2] | mtdata1_t2[8], mtdata1_t2[7:0]});
-	assign wr_mtdata1_t3_r = (((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA1)) & (mtsel[1:0] == 2'b11)) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f)) & ~tdata_kill_write;
-	assign mtdata1_t3_ns[9:0] = (wr_mtdata1_t3_r ? tdata_wrdata_r[9:0] : {mtdata1_t3[9], update_hit_bit_r[3] | mtdata1_t3[8], mtdata1_t3[7:0]});
-	rvdffe #(.WIDTH(10)) mtdata1_t0_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(trigger_enabled[0] | wr_mtdata1_t0_r),
-		.din(mtdata1_t0_ns[9:0]),
-		.dout(mtdata1_t0[9:0])
-	);
-	rvdffe #(.WIDTH(10)) mtdata1_t1_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(trigger_enabled[1] | wr_mtdata1_t1_r),
-		.din(mtdata1_t1_ns[9:0]),
-		.dout(mtdata1_t1[9:0])
-	);
-	rvdffe #(.WIDTH(10)) mtdata1_t2_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(trigger_enabled[2] | wr_mtdata1_t2_r),
-		.din(mtdata1_t2_ns[9:0]),
-		.dout(mtdata1_t2[9:0])
-	);
-	rvdffe #(.WIDTH(10)) mtdata1_t3_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(trigger_enabled[3] | wr_mtdata1_t3_r),
-		.din(mtdata1_t3_ns[9:0]),
-		.dout(mtdata1_t3[9:0])
-	);
-	assign mtdata1_tsel_out[31:0] = ((({32 {mtsel[1:0] == 2'b00}} & {4'h2, mtdata1_t0[9], 6'b011111, mtdata1_t0[8:7], 6'b000000, mtdata1_t0[6:5], 3'b000, mtdata1_t0[4:3], 3'b000, mtdata1_t0[2:0]}) | ({32 {mtsel[1:0] == 2'b01}} & {4'h2, mtdata1_t1[9], 6'b011111, mtdata1_t1[8:7], 6'b000000, mtdata1_t1[6:5], 3'b000, mtdata1_t1[4:3], 3'b000, mtdata1_t1[2:0]})) | ({32 {mtsel[1:0] == 2'b10}} & {4'h2, mtdata1_t2[9], 6'b011111, mtdata1_t2[8:7], 6'b000000, mtdata1_t2[6:5], 3'b000, mtdata1_t2[4:3], 3'b000, mtdata1_t2[2:0]})) | ({32 {mtsel[1:0] == 2'b11}} & {4'h2, mtdata1_t3[9], 6'b011111, mtdata1_t3[8:7], 6'b000000, mtdata1_t3[6:5], 3'b000, mtdata1_t3[4:3], 3'b000, mtdata1_t3[2:0]});
-	assign trigger_pkt_any[37] = mtdata1_t0[MTDATA1_SEL];
-	assign trigger_pkt_any[36] = mtdata1_t0[MTDATA1_MATCH];
-	assign trigger_pkt_any[35] = mtdata1_t0[MTDATA1_ST];
-	assign trigger_pkt_any[34] = mtdata1_t0[MTDATA1_LD];
-	assign trigger_pkt_any[33] = mtdata1_t0[MTDATA1_EXE];
-	assign trigger_pkt_any[32] = mtdata1_t0[MTDATA1_M_ENABLED];
-	assign trigger_pkt_any[75] = mtdata1_t1[MTDATA1_SEL];
-	assign trigger_pkt_any[74] = mtdata1_t1[MTDATA1_MATCH];
-	assign trigger_pkt_any[73] = mtdata1_t1[MTDATA1_ST];
-	assign trigger_pkt_any[72] = mtdata1_t1[MTDATA1_LD];
-	assign trigger_pkt_any[71] = mtdata1_t1[MTDATA1_EXE];
-	assign trigger_pkt_any[70] = mtdata1_t1[MTDATA1_M_ENABLED];
-	assign trigger_pkt_any[113] = mtdata1_t2[MTDATA1_SEL];
-	assign trigger_pkt_any[112] = mtdata1_t2[MTDATA1_MATCH];
-	assign trigger_pkt_any[111] = mtdata1_t2[MTDATA1_ST];
-	assign trigger_pkt_any[110] = mtdata1_t2[MTDATA1_LD];
-	assign trigger_pkt_any[109] = mtdata1_t2[MTDATA1_EXE];
-	assign trigger_pkt_any[108] = mtdata1_t2[MTDATA1_M_ENABLED];
-	assign trigger_pkt_any[151] = mtdata1_t3[MTDATA1_SEL];
-	assign trigger_pkt_any[150] = mtdata1_t3[MTDATA1_MATCH];
-	assign trigger_pkt_any[149] = mtdata1_t3[MTDATA1_ST];
-	assign trigger_pkt_any[148] = mtdata1_t3[MTDATA1_LD];
-	assign trigger_pkt_any[147] = mtdata1_t3[MTDATA1_EXE];
-	assign trigger_pkt_any[146] = mtdata1_t3[MTDATA1_M_ENABLED];
-	localparam MTDATA2 = 12'h7a2;
-	assign wr_mtdata2_t0_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2)) & (mtsel[1:0] == 2'b00)) & (~mtdata1_t0[MTDATA1_DMODE] | dbg_tlu_halted_f);
-	assign wr_mtdata2_t1_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2)) & (mtsel[1:0] == 2'b01)) & (~mtdata1_t1[MTDATA1_DMODE] | dbg_tlu_halted_f);
-	assign wr_mtdata2_t2_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2)) & (mtsel[1:0] == 2'b10)) & (~mtdata1_t2[MTDATA1_DMODE] | dbg_tlu_halted_f);
-	assign wr_mtdata2_t3_r = ((dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MTDATA2)) & (mtsel[1:0] == 2'b11)) & (~mtdata1_t3[MTDATA1_DMODE] | dbg_tlu_halted_f);
-	rvdffe #(.WIDTH(32)) mtdata2_t0_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mtdata2_t0_r),
-		.din(dec_csr_wrdata_r[31:0]),
-		.dout(mtdata2_t0[31:0])
-	);
-	rvdffe #(.WIDTH(32)) mtdata2_t1_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mtdata2_t1_r),
-		.din(dec_csr_wrdata_r[31:0]),
-		.dout(mtdata2_t1[31:0])
-	);
-	rvdffe #(.WIDTH(32)) mtdata2_t2_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mtdata2_t2_r),
-		.din(dec_csr_wrdata_r[31:0]),
-		.dout(mtdata2_t2[31:0])
-	);
-	rvdffe #(.WIDTH(32)) mtdata2_t3_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mtdata2_t3_r),
-		.din(dec_csr_wrdata_r[31:0]),
-		.dout(mtdata2_t3[31:0])
-	);
-	assign mtdata2_tsel_out[31:0] = ((({32 {mtsel[1:0] == 2'b00}} & mtdata2_t0[31:0]) | ({32 {mtsel[1:0] == 2'b01}} & mtdata2_t1[31:0])) | ({32 {mtsel[1:0] == 2'b10}} & mtdata2_t2[31:0])) | ({32 {mtsel[1:0] == 2'b11}} & mtdata2_t3[31:0]);
-	assign trigger_pkt_any[31-:32] = mtdata2_t0[31:0];
-	assign trigger_pkt_any[69-:32] = mtdata2_t1[31:0];
-	assign trigger_pkt_any[107-:32] = mtdata2_t2[31:0];
-	assign trigger_pkt_any[145-:32] = mtdata2_t3[31:0];
-	localparam MHPME_NOEVENT = 10'd0;
-	localparam MHPME_CLK_ACTIVE = 10'd1;
-	localparam MHPME_ICACHE_HIT = 10'd2;
-	localparam MHPME_ICACHE_MISS = 10'd3;
-	localparam MHPME_INST_COMMIT = 10'd4;
-	localparam MHPME_INST_COMMIT_16B = 10'd5;
-	localparam MHPME_INST_COMMIT_32B = 10'd6;
-	localparam MHPME_INST_ALIGNED = 10'd7;
-	localparam MHPME_INST_DECODED = 10'd8;
-	localparam MHPME_INST_MUL = 10'd9;
-	localparam MHPME_INST_DIV = 10'd10;
-	localparam MHPME_INST_LOAD = 10'd11;
-	localparam MHPME_INST_STORE = 10'd12;
-	localparam MHPME_INST_MALOAD = 10'd13;
-	localparam MHPME_INST_MASTORE = 10'd14;
-	localparam MHPME_INST_ALU = 10'd15;
-	localparam MHPME_INST_CSRREAD = 10'd16;
-	localparam MHPME_INST_CSRRW = 10'd17;
-	localparam MHPME_INST_CSRWRITE = 10'd18;
-	localparam MHPME_INST_EBREAK = 10'd19;
-	localparam MHPME_INST_ECALL = 10'd20;
-	localparam MHPME_INST_FENCE = 10'd21;
-	localparam MHPME_INST_FENCEI = 10'd22;
-	localparam MHPME_INST_MRET = 10'd23;
-	localparam MHPME_INST_BRANCH = 10'd24;
-	localparam MHPME_BRANCH_MP = 10'd25;
-	localparam MHPME_BRANCH_TAKEN = 10'd26;
-	localparam MHPME_BRANCH_NOTP = 10'd27;
-	localparam MHPME_FETCH_STALL = 10'd28;
-	localparam MHPME_DECODE_STALL = 10'd30;
-	localparam MHPME_POSTSYNC_STALL = 10'd31;
-	localparam MHPME_PRESYNC_STALL = 10'd32;
-	localparam MHPME_LSU_SB_WB_STALL = 10'd34;
-	localparam MHPME_DMA_DCCM_STALL = 10'd35;
-	localparam MHPME_DMA_ICCM_STALL = 10'd36;
-	localparam MHPME_EXC_TAKEN = 10'd37;
-	localparam MHPME_TIMER_INT_TAKEN = 10'd38;
-	localparam MHPME_EXT_INT_TAKEN = 10'd39;
-	localparam MHPME_FLUSH_LOWER = 10'd40;
-	localparam MHPME_BR_ERROR = 10'd41;
-	localparam MHPME_IBUS_TRANS = 10'd42;
-	localparam MHPME_DBUS_TRANS = 10'd43;
-	localparam MHPME_DBUS_MA_TRANS = 10'd44;
-	localparam MHPME_IBUS_ERROR = 10'd45;
-	localparam MHPME_DBUS_ERROR = 10'd46;
-	localparam MHPME_IBUS_STALL = 10'd47;
-	localparam MHPME_DBUS_STALL = 10'd48;
-	localparam MHPME_INT_DISABLED = 10'd49;
-	localparam MHPME_INT_STALLED = 10'd50;
-	localparam MHPME_INST_BITMANIP = 10'd54;
-	localparam MHPME_DBUS_LOAD = 10'd55;
-	localparam MHPME_DBUS_STORE = 10'd56;
-	localparam MHPME_SLEEP_CYC = 10'd512;
-	localparam MHPME_DMA_READ_ALL = 10'd513;
-	localparam MHPME_DMA_WRITE_ALL = 10'd514;
-	localparam MHPME_DMA_READ_DCCM = 10'd515;
-	localparam MHPME_DMA_WRITE_DCCM = 10'd516;
-	assign mhpme_vec[9-:10] = mhpme3[9:0];
-	assign mhpme_vec[19-:10] = mhpme4[9:0];
-	assign mhpme_vec[29-:10] = mhpme5[9:0];
-	assign mhpme_vec[39-:10] = mhpme6[9:0];
-	assign pmu_i0_itype_qual[3:0] = dec_tlu_packet_r[3:0] & {4 {tlu_i0_commit_cmt}};
-	localparam [3:0] eb1_pkg_ALU = 4'b0100;
-	localparam [3:0] eb1_pkg_BITMANIPU = 4'b1111;
-	localparam [3:0] eb1_pkg_CONDBR = 4'b1101;
-	localparam [3:0] eb1_pkg_CSRREAD = 4'b0101;
-	localparam [3:0] eb1_pkg_CSRRW = 4'b0111;
-	localparam [3:0] eb1_pkg_CSRWRITE = 4'b0110;
-	localparam [3:0] eb1_pkg_FENCE = 4'b1010;
-	localparam [3:0] eb1_pkg_FENCEI = 4'b1011;
-	localparam [3:0] eb1_pkg_JAL = 4'b1110;
-	localparam [3:0] eb1_pkg_LOAD = 4'b0010;
-	localparam [3:0] eb1_pkg_MUL = 4'b0001;
-	localparam [3:0] eb1_pkg_STORE = 4'b0011;
-	generate
-		genvar i;
-		for (i = 0; i < 4; i = i + 1) assign mhpmc_inc_r[i] = {~mcountinhibit[i + 3]} & ((((((((((((((((((((((((((((((((((((((((((((((((((((((((({mhpme_vec[(i * 10) + 9-:10] == MHPME_CLK_ACTIVE} & 1'b1) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_ICACHE_HIT} & {ifu_pmu_ic_hit})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_ICACHE_MISS} & {ifu_pmu_ic_miss})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_COMMIT} & {tlu_i0_commit_cmt & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_COMMIT_16B} & {(tlu_i0_commit_cmt & ~exu_pmu_i0_pc4) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_COMMIT_32B} & {(tlu_i0_commit_cmt & exu_pmu_i0_pc4) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_ALIGNED} & ifu_pmu_instr_aligned)) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_DECODED} & dec_pmu_instr_decoded)) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DECODE_STALL} & {dec_pmu_decode_stall})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_MUL} & {pmu_i0_itype_qual == eb1_pkg_MUL})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_DIV} & {(dec_tlu_packet_r[6] & tlu_i0_commit_cmt) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_LOAD} & {pmu_i0_itype_qual == eb1_pkg_LOAD})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_STORE} & {pmu_i0_itype_qual == eb1_pkg_STORE})) | (({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_MALOAD} & {pmu_i0_itype_qual == eb1_pkg_LOAD}) & {dec_tlu_packet_r[4]})) | (({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_MASTORE} & {pmu_i0_itype_qual == eb1_pkg_STORE}) & {dec_tlu_packet_r[4]})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_ALU} & {pmu_i0_itype_qual == eb1_pkg_ALU})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_CSRREAD} & {pmu_i0_itype_qual == eb1_pkg_CSRREAD})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_CSRWRITE} & {pmu_i0_itype_qual == eb1_pkg_CSRWRITE})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_CSRRW} & {pmu_i0_itype_qual == eb1_pkg_CSRRW})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_EBREAK} & {pmu_i0_itype_qual == eb1_pkg_EBREAK})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_ECALL} & {pmu_i0_itype_qual == eb1_pkg_ECALL})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_FENCE} & {pmu_i0_itype_qual == eb1_pkg_FENCE})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_FENCEI} & {pmu_i0_itype_qual == eb1_pkg_FENCEI})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_MRET} & {pmu_i0_itype_qual == eb1_pkg_MRET})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_BRANCH} & {(pmu_i0_itype_qual == eb1_pkg_CONDBR) | (pmu_i0_itype_qual == eb1_pkg_JAL)})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_BRANCH_MP} & {(exu_pmu_i0_br_misp & tlu_i0_commit_cmt) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_BRANCH_TAKEN} & {(exu_pmu_i0_br_ataken & tlu_i0_commit_cmt) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_BRANCH_NOTP} & {(dec_tlu_packet_r[7] & tlu_i0_commit_cmt) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_FETCH_STALL} & {ifu_pmu_fetch_stall})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DECODE_STALL} & {dec_pmu_decode_stall})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_POSTSYNC_STALL} & {dec_pmu_postsync_stall})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_PRESYNC_STALL} & {dec_pmu_presync_stall})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_LSU_SB_WB_STALL} & {lsu_store_stall_any})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DMA_DCCM_STALL} & {dma_dccm_stall_any})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DMA_ICCM_STALL} & {dma_iccm_stall_any})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_EXC_TAKEN} & {(i0_exception_valid_r | i0_trigger_hit_r) | lsu_exc_valid_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_TIMER_INT_TAKEN} & {(take_timer_int | take_int_timer0_int) | take_int_timer1_int})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_EXT_INT_TAKEN} & {take_ext_int})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_FLUSH_LOWER} & {tlu_flush_lower_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_BR_ERROR} & {(dec_tlu_br0_error_r | dec_tlu_br0_start_error_r) & rfpc_i0_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_IBUS_TRANS} & {ifu_pmu_bus_trxn})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DBUS_TRANS} & {lsu_pmu_bus_trxn})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DBUS_MA_TRANS} & {lsu_pmu_bus_misaligned})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_IBUS_ERROR} & {ifu_pmu_bus_error})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DBUS_ERROR} & {lsu_pmu_bus_error})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_IBUS_STALL} & {ifu_pmu_bus_busy})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DBUS_STALL} & {lsu_pmu_bus_busy})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INT_DISABLED} & {~mstatus[MSTATUS_MIE]})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INT_STALLED} & {~mstatus[MSTATUS_MIE] & |(mip[5:0] & mie[5:0])})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_INST_BITMANIP} & {pmu_i0_itype_qual == eb1_pkg_BITMANIPU})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DBUS_LOAD} & {(tlu_i0_commit_cmt & lsu_pmu_load_external_r) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DBUS_STORE} & {(tlu_i0_commit_cmt & lsu_pmu_store_external_r) & ~illegal_r})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_SLEEP_CYC} & {dec_tlu_pmu_fw_halted})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DMA_READ_ALL} & {dma_pmu_any_read})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DMA_WRITE_ALL} & {dma_pmu_any_write})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DMA_READ_DCCM} & {dma_pmu_dccm_read})) | ({mhpme_vec[(i * 10) + 9-:10] == MHPME_DMA_WRITE_DCCM} & {dma_pmu_dccm_write}));
-	endgenerate
-	generate
-		if (pt[1227-:5]) begin
-			rvdffie #(.WIDTH(31)) mstatus_ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(free_l2clk),
-				.din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r, take_ext_int_start, take_ext_int_start_d1, take_ext_int_start_d2, ext_int_freeze, mip_ns[5:0], (mcyclel_cout & ~wr_mcycleh_r) & mcyclel_cout_in, minstret_enable, minstretl_cout_ns, fw_halted_ns, meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted, mstatus_ns[1:0]}),
-				.dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1, take_ext_int_start_d1, take_ext_int_start_d2, take_ext_int_start_d3, ext_int_freeze_d1, mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f, fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f, mhpmc_inc_r_d1[3:0], perfcnt_halted_d1, mstatus[1:0]})
-			);
-		end
-		else rvdffie #(.WIDTH(27)) mstatus_ff(
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.clk(free_l2clk),
-			.din({mdseac_locked_ns, lsu_single_ecc_error_r, lsu_exc_valid_r, lsu_i0_exc_r, mip_ns[5:0], (mcyclel_cout & ~wr_mcycleh_r) & mcyclel_cout_in, minstret_enable, minstretl_cout_ns, fw_halted_ns, meicidpl_ns[3:0], icache_rd_valid, icache_wr_valid, mhpmc_inc_r[3:0], perfcnt_halted, mstatus_ns[1:0]}),
-			.dout({mdseac_locked_f, lsu_single_ecc_error_r_d1, lsu_exc_valid_r_d1, lsu_i0_exc_r_d1, mip[5:0], mcyclel_cout_f, minstret_enable_f, minstretl_cout_f, fw_halted, meicidpl[3:0], icache_rd_valid_f, icache_wr_valid_f, mhpmc_inc_r_d1[3:0], perfcnt_halted_d1, mstatus[1:0]})
-		);
-	endgenerate
-	assign perfcnt_halted = (dec_tlu_dbg_halted & dcsr[DCSR_STOPC]) | dec_tlu_pmu_fw_halted;
-	assign perfcnt_during_sleep[3:0] = {4 {~(dec_tlu_dbg_halted & dcsr[DCSR_STOPC])}} & {mhpme_vec[39], mhpme_vec[29], mhpme_vec[19], mhpme_vec[9]};
-	assign dec_tlu_perfcnt0 = mhpmc_inc_r_d1[0] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[0]);
-	assign dec_tlu_perfcnt1 = mhpmc_inc_r_d1[1] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[1]);
-	assign dec_tlu_perfcnt2 = mhpmc_inc_r_d1[2] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[2]);
-	assign dec_tlu_perfcnt3 = mhpmc_inc_r_d1[3] & ~(perfcnt_halted_d1 & ~perfcnt_during_sleep[3]);
-	localparam MHPMC3 = 12'hb03;
-	localparam MHPMC3H = 12'hb83;
-	assign mhpmc3_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3);
-	assign mhpmc3_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[0]) & |mhpmc_inc_r[0];
-	assign mhpmc3_wr_en = mhpmc3_wr_en0 | mhpmc3_wr_en1;
-	assign mhpmc3_incr[63:0] = {mhpmc3h[31:0], mhpmc3[31:0]} + 64'b0000000000000000000000000000000000000000000000000000000000000001;
-	assign mhpmc3_ns[31:0] = (mhpmc3_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[31:0]);
-	rvdffe #(.WIDTH(32)) mhpmc3_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc3_wr_en),
-		.din(mhpmc3_ns[31:0]),
-		.dout(mhpmc3[31:0])
-	);
-	assign mhpmc3h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC3H);
-	assign mhpmc3h_wr_en = mhpmc3h_wr_en0 | mhpmc3_wr_en1;
-	assign mhpmc3h_ns[31:0] = (mhpmc3h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc3_incr[63:32]);
-	rvdffe #(.WIDTH(32)) mhpmc3h_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc3h_wr_en),
-		.din(mhpmc3h_ns[31:0]),
-		.dout(mhpmc3h[31:0])
-	);
-	localparam MHPMC4 = 12'hb04;
-	localparam MHPMC4H = 12'hb84;
-	assign mhpmc4_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4);
-	assign mhpmc4_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[1]) & |mhpmc_inc_r[1];
-	assign mhpmc4_wr_en = mhpmc4_wr_en0 | mhpmc4_wr_en1;
-	assign mhpmc4_incr[63:0] = {mhpmc4h[31:0], mhpmc4[31:0]} + 64'b0000000000000000000000000000000000000000000000000000000000000001;
-	assign mhpmc4_ns[31:0] = (mhpmc4_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[31:0]);
-	rvdffe #(.WIDTH(32)) mhpmc4_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc4_wr_en),
-		.din(mhpmc4_ns[31:0]),
-		.dout(mhpmc4[31:0])
-	);
-	assign mhpmc4h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC4H);
-	assign mhpmc4h_wr_en = mhpmc4h_wr_en0 | mhpmc4_wr_en1;
-	assign mhpmc4h_ns[31:0] = (mhpmc4h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc4_incr[63:32]);
-	rvdffe #(.WIDTH(32)) mhpmc4h_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc4h_wr_en),
-		.din(mhpmc4h_ns[31:0]),
-		.dout(mhpmc4h[31:0])
-	);
-	localparam MHPMC5 = 12'hb05;
-	localparam MHPMC5H = 12'hb85;
-	assign mhpmc5_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5);
-	assign mhpmc5_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[2]) & |mhpmc_inc_r[2];
-	assign mhpmc5_wr_en = mhpmc5_wr_en0 | mhpmc5_wr_en1;
-	assign mhpmc5_incr[63:0] = {mhpmc5h[31:0], mhpmc5[31:0]} + 64'b0000000000000000000000000000000000000000000000000000000000000001;
-	assign mhpmc5_ns[31:0] = (mhpmc5_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[31:0]);
-	rvdffe #(.WIDTH(32)) mhpmc5_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc5_wr_en),
-		.din(mhpmc5_ns[31:0]),
-		.dout(mhpmc5[31:0])
-	);
-	assign mhpmc5h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC5H);
-	assign mhpmc5h_wr_en = mhpmc5h_wr_en0 | mhpmc5_wr_en1;
-	assign mhpmc5h_ns[31:0] = (mhpmc5h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc5_incr[63:32]);
-	rvdffe #(.WIDTH(32)) mhpmc5h_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc5h_wr_en),
-		.din(mhpmc5h_ns[31:0]),
-		.dout(mhpmc5h[31:0])
-	);
-	localparam MHPMC6 = 12'hb06;
-	localparam MHPMC6H = 12'hb86;
-	assign mhpmc6_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6);
-	assign mhpmc6_wr_en1 = (~perfcnt_halted | perfcnt_during_sleep[3]) & |mhpmc_inc_r[3];
-	assign mhpmc6_wr_en = mhpmc6_wr_en0 | mhpmc6_wr_en1;
-	assign mhpmc6_incr[63:0] = {mhpmc6h[31:0], mhpmc6[31:0]} + 64'b0000000000000000000000000000000000000000000000000000000000000001;
-	assign mhpmc6_ns[31:0] = (mhpmc6_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[31:0]);
-	rvdffe #(.WIDTH(32)) mhpmc6_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc6_wr_en),
-		.din(mhpmc6_ns[31:0]),
-		.dout(mhpmc6[31:0])
-	);
-	assign mhpmc6h_wr_en0 = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPMC6H);
-	assign mhpmc6h_wr_en = mhpmc6h_wr_en0 | mhpmc6_wr_en1;
-	assign mhpmc6h_ns[31:0] = (mhpmc6h_wr_en0 ? dec_csr_wrdata_r[31:0] : mhpmc6_incr[63:32]);
-	rvdffe #(.WIDTH(32)) mhpmc6h_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en(mhpmc6h_wr_en),
-		.din(mhpmc6h_ns[31:0]),
-		.dout(mhpmc6h[31:0])
-	);
-	localparam MHPME3 = 12'h323;
-	assign zero_event_r = (((((dec_csr_wrdata_r[9:0] > 10'd516) | |dec_csr_wrdata_r[31:10]) | ((dec_csr_wrdata_r[9:0] < 10'd512) & (dec_csr_wrdata_r[9:0] > 10'd56))) | ((dec_csr_wrdata_r[9:0] < 10'd54) & (dec_csr_wrdata_r[9:0] > 10'd50))) | (dec_csr_wrdata_r[9:0] == 10'd29)) | (dec_csr_wrdata_r[9:0] == 10'd33);
-	assign event_r[9:0] = (zero_event_r ? {10 {1'sb0}} : dec_csr_wrdata_r[9:0]);
-	assign wr_mhpme3_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME3);
-	rvdffe #(.WIDTH(10)) mhpme3_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mhpme3_r),
-		.din(event_r[9:0]),
-		.dout(mhpme3[9:0])
-	);
-	localparam MHPME4 = 12'h324;
-	assign wr_mhpme4_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME4);
-	rvdffe #(.WIDTH(10)) mhpme4_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mhpme4_r),
-		.din(event_r[9:0]),
-		.dout(mhpme4[9:0])
-	);
-	localparam MHPME5 = 12'h325;
-	assign wr_mhpme5_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME5);
-	rvdffe #(.WIDTH(10)) mhpme5_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mhpme5_r),
-		.din(event_r[9:0]),
-		.dout(mhpme5[9:0])
-	);
-	localparam MHPME6 = 12'h326;
-	assign wr_mhpme6_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MHPME6);
-	rvdffe #(.WIDTH(10)) mhpme6_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mhpme6_r),
-		.din(event_r[9:0]),
-		.dout(mhpme6[9:0])
-	);
-	localparam MCOUNTINHIBIT = 12'h320;
-	assign wr_mcountinhibit_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MCOUNTINHIBIT);
-	rvdffs #(.WIDTH(6)) mcountinhibit_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.en(wr_mcountinhibit_r),
-		.din({dec_csr_wrdata_r[6:2], dec_csr_wrdata_r[0]}),
-		.dout({mcountinhibit[6:2], mcountinhibit[0]})
-	);
-	assign mcountinhibit[1] = 1'b0;
-	wire [4:0] dec_tlu_exc_cause_wb1_raw;
-	wire [4:0] dec_tlu_exc_cause_wb2;
-	wire dec_tlu_int_valid_wb1_raw;
-	wire dec_tlu_int_valid_wb2;
-	assign {dec_tlu_i0_valid_wb1, dec_tlu_i0_exc_valid_wb1, dec_tlu_exc_cause_wb1_raw[4:0], dec_tlu_int_valid_wb1_raw} = {8 {~dec_tlu_trace_disable}} & {i0_valid_wb, (i0_exception_valid_r_d1 | lsu_i0_exc_r_d1) | (trigger_hit_r_d1 & ~trigger_hit_dmode_r_d1), exc_cause_wb[4:0], interrupt_valid_r_d1};
-	rvdffie #(
-		.WIDTH(6),
-		.OVERRIDE(1)
-	) traceskidff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.din({dec_tlu_exc_cause_wb1_raw[4:0], dec_tlu_int_valid_wb1_raw}),
-		.dout({dec_tlu_exc_cause_wb2[4:0], dec_tlu_int_valid_wb2})
-	);
-	assign dec_tlu_exc_cause_wb1[4:0] = (dec_tlu_int_valid_wb2 ? dec_tlu_exc_cause_wb2[4:0] : dec_tlu_exc_cause_wb1_raw[4:0]);
-	assign dec_tlu_int_valid_wb1 = dec_tlu_int_valid_wb2;
-	assign dec_tlu_mtval_wb1 = mtval[31:0];
-	assign csr_misa = (((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0];
-	assign csr_mvendorid = ((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_marchid = ((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mimpid = ((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mhartid = (dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[2];
-	assign csr_mstatus = (((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0];
-	assign csr_mtvec = (((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0];
-	assign csr_mip = (!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[2];
-	assign csr_mie = (((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0];
-	assign csr_mcyclel = ((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1];
-	assign csr_mcycleh = (((((dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1];
-	assign csr_minstretl = (((((!dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_minstreth = (((((!dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mscratch = (((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mepc = ((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mcause = ((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mscause = (dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[2];
-	assign csr_mtval = ((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mrac = ((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1];
-	assign csr_dmst = (((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1];
-	assign csr_mdseac = ((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3];
-	assign csr_meihap = (dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[3];
-	assign csr_meivt = ((((!dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_meipt = ((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_meicurpl = (dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[2];
-	assign csr_meicidpl = ((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_dcsr = (((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[0];
-	assign csr_mcgc = ((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[0];
-	assign csr_mfdc = (((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_dpc = (((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[0];
-	assign csr_mtsel = (((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mtdata1 = ((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[0];
-	assign csr_mtdata2 = ((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[1];
-	assign csr_mhpmc3 = ((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0];
-	assign csr_mhpmc4 = (((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mhpmc5 = ((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mhpmc6 = (((((!dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mhpmc3h = ((((dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mhpmc4h = (((((dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mhpmc5h = ((((dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mhpmc6h = (((((dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mhpme3 = ((((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0];
-	assign csr_mhpme4 = ((((dec_csr_rdaddr_d[5] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mhpme5 = ((((dec_csr_rdaddr_d[5] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mhpme6 = ((((dec_csr_rdaddr_d[5] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mcountinhibit = ((((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0];
-	assign csr_mitctl0 = (((dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mitctl1 = (((dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mitb0 = (((dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0];
-	assign csr_mitb1 = (((dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mitcnt0 = (((dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0];
-	assign csr_mitcnt1 = ((dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_mpmc = (((dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1];
-	assign csr_meicpct = ((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_micect = (((dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_miccmect = ((dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[0];
-	assign csr_mdccmect = ((dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mfdht = (((dec_csr_rdaddr_d[6] & dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_mfdhs = ((dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0];
-	assign csr_dicawics = ((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_dicad0h = ((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1];
-	assign csr_dicad0 = (((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign csr_dicad1 = (((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0];
-	assign csr_dicago = (((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0];
-	assign presync = ((((((((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0]) | (((((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0])) | (((((!dec_csr_rdaddr_d[6] & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1])) | ((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1])) | ((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0])) | (((((dec_csr_rdaddr_d[7] & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]);
-	assign postsync = (((((((((dec_csr_rdaddr_d[10] & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0]) | ((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0])) | (((!dec_csr_rdaddr_d[7] & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0])) | (((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[0])) | ((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0])) | (((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1])) | ((((dec_csr_rdaddr_d[10] & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]);
-	assign legal = (((((((((((((((((((((((((((((((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0]) | (((((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1])) | ((((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0])) | (((((((((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0])) | ((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[0])) | (((((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0])) | (((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1])) | (((((((((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[0])) | (((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1])) | (((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[2])) | ((((((((((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0])) | (((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[1])) | (((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[2])) | (((((((((dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & dec_csr_rdaddr_d[1])) | ((((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[1]) & dec_csr_rdaddr_d[0])) | ((((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2])) | (((((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0])) | ((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[2])) | (((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & dec_csr_rdaddr_d[1])) | ((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[0])) | (((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2])) | ((((((((((!dec_csr_rdaddr_d[11] & dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2]) & !dec_csr_rdaddr_d[0])) | ((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[1])) | (((((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[2])) | (((((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[5]) & !dec_csr_rdaddr_d[4]) & !dec_csr_rdaddr_d[3]) & !dec_csr_rdaddr_d[1]) & !dec_csr_rdaddr_d[0])) | (((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[3])) | ((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[3])) | (((((((!dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[7]) & !dec_csr_rdaddr_d[6]) & dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4])) | ((((((dec_csr_rdaddr_d[11] & !dec_csr_rdaddr_d[10]) & dec_csr_rdaddr_d[9]) & dec_csr_rdaddr_d[8]) & !dec_csr_rdaddr_d[6]) & !dec_csr_rdaddr_d[5]) & dec_csr_rdaddr_d[4]);
-	assign dec_tlu_presync_d = (presync & dec_csr_any_unq_d) & ~dec_csr_wen_unq_d;
-	assign dec_tlu_postsync_d = postsync & dec_csr_any_unq_d;
-	assign conditionally_illegal = (((((csr_mitcnt0 | csr_mitcnt1) | csr_mitb0) | csr_mitb1) | csr_mitctl0) | csr_mitctl1) & !pt[4-:5];
-	assign valid_csr = ((legal & (~(((((((csr_dcsr | csr_dpc) | csr_dmst) | csr_dicawics) | csr_dicad0) | csr_dicad0h) | csr_dicad1) | csr_dicago) | dbg_tlu_halted_f)) & ~fast_int_meicpct) & ~conditionally_illegal;
-	assign dec_csr_legal_d = (dec_csr_any_unq_d & valid_csr) & ~(dec_csr_wen_unq_d & (((((csr_mvendorid | csr_marchid) | csr_mimpid) | csr_mhartid) | csr_mdseac) | csr_meihap));
-	assign dec_csr_rddata_d[31:0] = ((((((((((((((((((((((((((((((((((((((((((((((((((((((({32 {csr_misa}} & 32'h40201104) | ({32 {csr_mvendorid}} & 32'h00000045)) | ({32 {csr_marchid}} & 32'h00000010)) | ({32 {csr_mimpid}} & 32'h00000003)) | ({32 {csr_mhartid}} & {core_id[31:4], 4'b0000})) | ({32 {csr_mstatus}} & {{15 {1'b0}}, 2'b01, 2'b00, 2'b11, 3'b000, mstatus[1], 3'b000, mstatus[0], 3'b000})) | ({32 {csr_mtvec}} & {mtvec[30:1], 1'b0, mtvec[0]})) | ({32 {csr_mip}} & {1'b0, mip[5:3], 16'b0000000000000000, mip[2], 3'b000, mip[1], 3'b000, mip[0], 3'b000})) | ({32 {csr_mie}} & {1'b0, mie[5:3], 16'b0000000000000000, mie[2], 3'b000, mie[1], 3'b000, mie[0], 3'b000})) | ({32 {csr_mcyclel}} & mcyclel[31:0])) | ({32 {csr_mcycleh}} & mcycleh_inc[31:0])) | ({32 {csr_minstretl}} & minstretl_read[31:0])) | ({32 {csr_minstreth}} & minstreth_read[31:0])) | ({32 {csr_mscratch}} & mscratch[31:0])) | ({32 {csr_mepc}} & {mepc[31:1], 1'b0})) | ({32 {csr_mcause}} & mcause[31:0])) | ({32 {csr_mscause}} & {28'b0000000000000000000000000000, mscause[3:0]})) | ({32 {csr_mtval}} & mtval[31:0])) | ({32 {csr_mrac}} & mrac[31:0])) | ({32 {csr_mdseac}} & mdseac[31:0])) | ({32 {csr_meivt}} & {meivt[31:10], 10'b0000000000})) | ({32 {csr_meihap}} & {meivt[31:10], meihap[9:2], 2'b00})) | ({32 {csr_meicurpl}} & {28'b0000000000000000000000000000, meicurpl[3:0]})) | ({32 {csr_meicidpl}} & {28'b0000000000000000000000000000, meicidpl[3:0]})) | ({32 {csr_meipt}} & {28'b0000000000000000000000000000, meipt[3:0]})) | ({32 {csr_mcgc}} & {22'b0000000000000000000000, mcgc[9:0]})) | ({32 {csr_mfdc}} & {13'b0000000000000, mfdc[18:0]})) | ({32 {csr_dcsr}} & {16'h4000, dcsr[15:2], 2'b11})) | ({32 {csr_dpc}} & {dpc[31:1], 1'b0})) | ({32 {csr_dicad0}} & dicad0[31:0])) | ({32 {csr_dicad0h}} & dicad0h[31:0])) | ({32 {csr_dicad1}} & dicad1[31:0])) | ({32 {csr_dicawics}} & {7'b0000000, dicawics[16], 2'b00, dicawics[15:14], 3'b000, dicawics[13:0], 3'b000})) | ({32 {csr_mtsel}} & {30'b000000000000000000000000000000, mtsel[1:0]})) | ({32 {csr_mtdata1}} & {mtdata1_tsel_out[31:0]})) | ({32 {csr_mtdata2}} & {mtdata2_tsel_out[31:0]})) | ({32 {csr_micect}} & {micect[31:0]})) | ({32 {csr_miccmect}} & {miccmect[31:0]})) | ({32 {csr_mdccmect}} & {mdccmect[31:0]})) | ({32 {csr_mhpmc3}} & mhpmc3[31:0])) | ({32 {csr_mhpmc4}} & mhpmc4[31:0])) | ({32 {csr_mhpmc5}} & mhpmc5[31:0])) | ({32 {csr_mhpmc6}} & mhpmc6[31:0])) | ({32 {csr_mhpmc3h}} & mhpmc3h[31:0])) | ({32 {csr_mhpmc4h}} & mhpmc4h[31:0])) | ({32 {csr_mhpmc5h}} & mhpmc5h[31:0])) | ({32 {csr_mhpmc6h}} & mhpmc6h[31:0])) | ({32 {csr_mfdht}} & {26'b00000000000000000000000000, mfdht[5:0]})) | ({32 {csr_mfdhs}} & {30'b000000000000000000000000000000, mfdhs[1:0]})) | ({32 {csr_mhpme3}} & {22'b0000000000000000000000, mhpme3[9:0]})) | ({32 {csr_mhpme4}} & {22'b0000000000000000000000, mhpme4[9:0]})) | ({32 {csr_mhpme5}} & {22'b0000000000000000000000, mhpme5[9:0]})) | ({32 {csr_mhpme6}} & {22'b0000000000000000000000, mhpme6[9:0]})) | ({32 {csr_mcountinhibit}} & {25'b0000000000000000000000000, mcountinhibit[6:0]})) | ({32 {csr_mpmc}} & {30'b000000000000000000000000000000, mpmc[1], 1'b0})) | ({32 {dec_timer_read_d}} & dec_timer_rddata_d[31:0]);
-endmodule
-module eb1_dec_timer_ctl (
-	clk,
-	free_l2clk,
-	csr_wr_clk,
-	rst_l,
-	dec_csr_wen_r_mod,
-	dec_csr_wraddr_r,
-	dec_csr_wrdata_r,
-	csr_mitctl0,
-	csr_mitctl1,
-	csr_mitb0,
-	csr_mitb1,
-	csr_mitcnt0,
-	csr_mitcnt1,
-	dec_pause_state,
-	dec_tlu_pmu_fw_halted,
-	internal_dbg_halt_timers,
-	dec_timer_rddata_d,
-	dec_timer_read_d,
-	dec_timer_t0_pulse,
-	dec_timer_t1_pulse,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire free_l2clk;
-	input wire csr_wr_clk;
-	input wire rst_l;
-	input wire dec_csr_wen_r_mod;
-	input wire [11:0] dec_csr_wraddr_r;
-	input wire [31:0] dec_csr_wrdata_r;
-	input wire csr_mitctl0;
-	input wire csr_mitctl1;
-	input wire csr_mitb0;
-	input wire csr_mitb1;
-	input wire csr_mitcnt0;
-	input wire csr_mitcnt1;
-	input wire dec_pause_state;
-	input wire dec_tlu_pmu_fw_halted;
-	input wire internal_dbg_halt_timers;
-	output wire [31:0] dec_timer_rddata_d;
-	output wire dec_timer_read_d;
-	output wire dec_timer_t0_pulse;
-	output wire dec_timer_t1_pulse;
-	input wire scan_mode;
-	localparam MITCTL_ENABLE = 0;
-	localparam MITCTL_ENABLE_HALTED = 1;
-	localparam MITCTL_ENABLE_PAUSED = 2;
-	wire [31:0] mitcnt0_ns;
-	wire [31:0] mitcnt0;
-	wire [31:0] mitcnt1_ns;
-	wire [31:0] mitcnt1;
-	wire [31:0] mitb0;
-	wire [31:0] mitb1;
-	wire [31:0] mitb0_b;
-	wire [31:0] mitb1_b;
-	wire [31:0] mitcnt0_inc;
-	wire [31:0] mitcnt1_inc;
-	wire [2:0] mitctl0_ns;
-	wire [2:0] mitctl0;
-	wire [3:0] mitctl1_ns;
-	wire [3:0] mitctl1;
-	wire wr_mitcnt0_r;
-	wire wr_mitcnt1_r;
-	wire wr_mitb0_r;
-	wire wr_mitb1_r;
-	wire wr_mitctl0_r;
-	wire wr_mitctl1_r;
-	wire mitcnt0_inc_ok;
-	wire mitcnt1_inc_ok;
-	wire mitcnt0_inc_cout;
-	wire mitcnt1_inc_cout;
-	wire mit0_match_ns;
-	wire mit1_match_ns;
-	wire mitctl0_0_b_ns;
-	wire mitctl0_0_b;
-	wire mitctl1_0_b_ns;
-	wire mitctl1_0_b;
-	assign mit0_match_ns = mitcnt0[31:0] >= mitb0[31:0];
-	assign mit1_match_ns = mitcnt1[31:0] >= mitb1[31:0];
-	assign dec_timer_t0_pulse = mit0_match_ns;
-	assign dec_timer_t1_pulse = mit1_match_ns;
-	localparam MITCNT0 = 12'h7d2;
-	assign wr_mitcnt0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT0);
-	assign mitcnt0_inc_ok = ((mitctl0[MITCTL_ENABLE] & (~dec_pause_state | mitctl0[MITCTL_ENABLE_PAUSED])) & (~dec_tlu_pmu_fw_halted | mitctl0[MITCTL_ENABLE_HALTED])) & ~internal_dbg_halt_timers;
-	assign {mitcnt0_inc_cout, mitcnt0_inc[7:0]} = mitcnt0[7:0] + 8'b00000001;
-	assign mitcnt0_inc[31:8] = mitcnt0[31:8] + {23'b00000000000000000000000, mitcnt0_inc_cout};
-	assign mitcnt0_ns[31:0] = (wr_mitcnt0_r ? dec_csr_wrdata_r[31:0] : (mit0_match_ns ? 'b0 : mitcnt0_inc[31:0]));
-	rvdffe #(.WIDTH(24)) mitcnt0_ffb(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en((wr_mitcnt0_r | (mitcnt0_inc_ok & mitcnt0_inc_cout)) | mit0_match_ns),
-		.din(mitcnt0_ns[31:8]),
-		.dout(mitcnt0[31:8])
-	);
-	rvdffe #(.WIDTH(8)) mitcnt0_ffa(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en((wr_mitcnt0_r | mitcnt0_inc_ok) | mit0_match_ns),
-		.din(mitcnt0_ns[7:0]),
-		.dout(mitcnt0[7:0])
-	);
-	localparam MITCNT1 = 12'h7d5;
-	assign wr_mitcnt1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCNT1);
-	assign mitcnt1_inc_ok = (((mitctl1[MITCTL_ENABLE] & (~dec_pause_state | mitctl1[MITCTL_ENABLE_PAUSED])) & (~dec_tlu_pmu_fw_halted | mitctl1[MITCTL_ENABLE_HALTED])) & ~internal_dbg_halt_timers) & (~mitctl1[3] | mit0_match_ns);
-	assign {mitcnt1_inc_cout, mitcnt1_inc[7:0]} = mitcnt1[7:0] + 8'b00000001;
-	assign mitcnt1_inc[31:8] = mitcnt1[31:8] + {23'b00000000000000000000000, mitcnt1_inc_cout};
-	assign mitcnt1_ns[31:0] = (wr_mitcnt1_r ? dec_csr_wrdata_r[31:0] : (mit1_match_ns ? 'b0 : mitcnt1_inc[31:0]));
-	rvdffe #(.WIDTH(24)) mitcnt1_ffb(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en((wr_mitcnt1_r | (mitcnt1_inc_ok & mitcnt1_inc_cout)) | mit1_match_ns),
-		.din(mitcnt1_ns[31:8]),
-		.dout(mitcnt1[31:8])
-	);
-	rvdffe #(.WIDTH(8)) mitcnt1_ffa(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.en((wr_mitcnt1_r | mitcnt1_inc_ok) | mit1_match_ns),
-		.din(mitcnt1_ns[7:0]),
-		.dout(mitcnt1[7:0])
-	);
-	localparam MITB0 = 12'h7d3;
-	assign wr_mitb0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB0);
-	rvdffe #(.WIDTH(32)) mitb0_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mitb0_r),
-		.din(~dec_csr_wrdata_r[31:0]),
-		.dout(mitb0_b[31:0])
-	);
-	assign mitb0[31:0] = ~mitb0_b[31:0];
-	localparam MITB1 = 12'h7d6;
-	assign wr_mitb1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITB1);
-	rvdffe #(.WIDTH(32)) mitb1_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(wr_mitb1_r),
-		.din(~dec_csr_wrdata_r[31:0]),
-		.dout(mitb1_b[31:0])
-	);
-	assign mitb1[31:0] = ~mitb1_b[31:0];
-	localparam MITCTL0 = 12'h7d4;
-	assign wr_mitctl0_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL0);
-	assign mitctl0_ns[2:0] = (wr_mitctl0_r ? {dec_csr_wrdata_r[2:0]} : {mitctl0[2:0]});
-	assign mitctl0_0_b_ns = ~mitctl0_ns[0];
-	rvdffs #(.WIDTH(3)) mitctl0_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.en(wr_mitctl0_r),
-		.din({mitctl0_ns[2:1], mitctl0_0_b_ns}),
-		.dout({mitctl0[2:1], mitctl0_0_b})
-	);
-	assign mitctl0[0] = ~mitctl0_0_b;
-	localparam MITCTL1 = 12'h7d7;
-	assign wr_mitctl1_r = dec_csr_wen_r_mod & (dec_csr_wraddr_r[11:0] == MITCTL1);
-	assign mitctl1_ns[3:0] = (wr_mitctl1_r ? {dec_csr_wrdata_r[3:0]} : {mitctl1[3:0]});
-	assign mitctl1_0_b_ns = ~mitctl1_ns[0];
-	rvdffs #(.WIDTH(4)) mitctl1_ff(
-		.rst_l(rst_l),
-		.clk(csr_wr_clk),
-		.en(wr_mitctl1_r),
-		.din({mitctl1_ns[3:1], mitctl1_0_b_ns}),
-		.dout({mitctl1[3:1], mitctl1_0_b})
-	);
-	assign mitctl1[0] = ~mitctl1_0_b;
-	assign dec_timer_read_d = ((((csr_mitcnt1 | csr_mitcnt0) | csr_mitb1) | csr_mitb0) | csr_mitctl0) | csr_mitctl1;
-	assign dec_timer_rddata_d[31:0] = ((((({32 {csr_mitcnt0}} & mitcnt0[31:0]) | ({32 {csr_mitcnt1}} & mitcnt1[31:0])) | ({32 {csr_mitb0}} & mitb0[31:0])) | ({32 {csr_mitb1}} & mitb1[31:0])) | ({32 {csr_mitctl0}} & {29'b00000000000000000000000000000, mitctl0[2:0]})) | ({32 {csr_mitctl1}} & {28'b0000000000000000000000000000, mitctl1[3:0]});
-endmodule
-module eb1_dec_trigger (
-	trigger_pkt_any,
-	dec_i0_pc_d,
-	dec_i0_trigger_match_d
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [151:0] trigger_pkt_any;
-	input wire [31:1] dec_i0_pc_d;
-	output wire [3:0] dec_i0_trigger_match_d;
-	wire [127:0] dec_i0_match_data;
-	wire [3:0] dec_i0_trigger_data_match;
-	generate
-		genvar i;
-		for (i = 0; i < 4; i = i + 1) begin
-			assign dec_i0_match_data[(i * 32) + 31-:32] = {32 {~trigger_pkt_any[(i * 38) + 37] & trigger_pkt_any[(i * 38) + 33]}} & {dec_i0_pc_d[31:1], trigger_pkt_any[i * 38]};
-			rvmaskandmatch trigger_i0_match(
-				.mask(trigger_pkt_any[(i * 38) + 31-:32]),
-				.data(dec_i0_match_data[(i * 32) + 31-:32]),
-				.masken(trigger_pkt_any[(i * 38) + 36]),
-				.match(dec_i0_trigger_data_match[i])
-			);
-			assign dec_i0_trigger_match_d[i] = (trigger_pkt_any[(i * 38) + 33] & trigger_pkt_any[(i * 38) + 32]) & dec_i0_trigger_data_match[i];
-		end
-	endgenerate
-endmodule
-module eb1_exu (
-	clk,
-	rst_l,
-	scan_mode,
-	dec_data_en,
-	dec_ctl_en,
-	dbg_cmd_wrdata,
-	i0_ap,
-	dec_debug_wdata_rs1_d,
-	dec_i0_predict_p_d,
-	i0_predict_fghr_d,
-	i0_predict_index_d,
-	i0_predict_btag_d,
-	lsu_result_m,
-	lsu_nonblock_load_data,
-	dec_i0_rs1_en_d,
-	dec_i0_rs2_en_d,
-	gpr_i0_rs1_d,
-	gpr_i0_rs2_d,
-	dec_i0_immed_d,
-	dec_i0_result_r,
-	dec_i0_br_immed_d,
-	dec_i0_alu_decode_d,
-	dec_i0_branch_d,
-	dec_i0_select_pc_d,
-	dec_i0_pc_d,
-	dec_i0_rs1_bypass_en_d,
-	dec_i0_rs2_bypass_en_d,
-	dec_csr_ren_d,
-	dec_csr_rddata_d,
-	dec_qual_lsu_d,
-	mul_p,
-	div_p,
-	dec_div_cancel,
-	pred_correct_npc_x,
-	dec_tlu_flush_lower_r,
-	dec_tlu_flush_path_r,
-	dec_extint_stall,
-	dec_tlu_meihap,
-	exu_lsu_rs1_d,
-	exu_lsu_rs2_d,
-	exu_flush_final,
-	exu_flush_path_final,
-	exu_i0_result_x,
-	exu_i0_pc_x,
-	exu_csr_rs1_x,
-	exu_npc_r,
-	exu_i0_br_hist_r,
-	exu_i0_br_error_r,
-	exu_i0_br_start_error_r,
-	exu_i0_br_index_r,
-	exu_i0_br_valid_r,
-	exu_i0_br_mp_r,
-	exu_i0_br_middle_r,
-	exu_i0_br_fghr_r,
-	exu_i0_br_way_r,
-	exu_mp_pkt,
-	exu_mp_eghr,
-	exu_mp_fghr,
-	exu_mp_index,
-	exu_mp_btag,
-	exu_pmu_i0_br_misp,
-	exu_pmu_i0_br_ataken,
-	exu_pmu_i0_pc4,
-	exu_div_result,
-	exu_div_wren
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire [1:0] dec_data_en;
-	input wire [1:0] dec_ctl_en;
-	input wire [31:0] dbg_cmd_wrdata;
-	input wire [43:0] i0_ap;
-	input wire dec_debug_wdata_rs1_d;
-	input wire [55:0] dec_i0_predict_p_d;
-	input wire [pt[2236-:8] - 1:0] i0_predict_fghr_d;
-	input wire [pt[2172-:9]:pt[2163-:6]] i0_predict_index_d;
-	input wire [pt[2139-:9] - 1:0] i0_predict_btag_d;
-	input wire [31:0] lsu_result_m;
-	input wire [31:0] lsu_nonblock_load_data;
-	input wire dec_i0_rs1_en_d;
-	input wire dec_i0_rs2_en_d;
-	input wire [31:0] gpr_i0_rs1_d;
-	input wire [31:0] gpr_i0_rs2_d;
-	input wire [31:0] dec_i0_immed_d;
-	input wire [31:0] dec_i0_result_r;
-	input wire [12:1] dec_i0_br_immed_d;
-	input wire dec_i0_alu_decode_d;
-	input wire dec_i0_branch_d;
-	input wire dec_i0_select_pc_d;
-	input wire [31:1] dec_i0_pc_d;
-	input wire [3:0] dec_i0_rs1_bypass_en_d;
-	input wire [3:0] dec_i0_rs2_bypass_en_d;
-	input wire dec_csr_ren_d;
-	input wire [31:0] dec_csr_rddata_d;
-	input wire dec_qual_lsu_d;
-	input wire [19:0] mul_p;
-	input wire [2:0] div_p;
-	input wire dec_div_cancel;
-	input wire [31:1] pred_correct_npc_x;
-	input wire dec_tlu_flush_lower_r;
-	input wire [31:1] dec_tlu_flush_path_r;
-	input wire dec_extint_stall;
-	input wire [31:2] dec_tlu_meihap;
-	output wire [31:0] exu_lsu_rs1_d;
-	output wire [31:0] exu_lsu_rs2_d;
-	output wire exu_flush_final;
-	output wire [31:1] exu_flush_path_final;
-	output wire [31:0] exu_i0_result_x;
-	output wire [31:1] exu_i0_pc_x;
-	output wire [31:0] exu_csr_rs1_x;
-	output wire [31:1] exu_npc_r;
-	output wire [1:0] exu_i0_br_hist_r;
-	output wire exu_i0_br_error_r;
-	output wire exu_i0_br_start_error_r;
-	output wire [pt[2172-:9]:pt[2163-:6]] exu_i0_br_index_r;
-	output wire exu_i0_br_valid_r;
-	output wire exu_i0_br_mp_r;
-	output wire exu_i0_br_middle_r;
-	output wire [pt[2236-:8] - 1:0] exu_i0_br_fghr_r;
-	output wire exu_i0_br_way_r;
-	output wire [55:0] exu_mp_pkt;
-	output wire [pt[2236-:8] - 1:0] exu_mp_eghr;
-	output wire [pt[2236-:8] - 1:0] exu_mp_fghr;
-	output wire [pt[2172-:9]:pt[2163-:6]] exu_mp_index;
-	output wire [pt[2139-:9] - 1:0] exu_mp_btag;
-	output wire exu_pmu_i0_br_misp;
-	output wire exu_pmu_i0_br_ataken;
-	output wire exu_pmu_i0_pc4;
-	output wire [31:0] exu_div_result;
-	output wire exu_div_wren;
-	wire [31:0] i0_rs1_bypass_data_d;
-	wire [31:0] i0_rs2_bypass_data_d;
-	wire i0_rs1_bypass_en_d;
-	wire i0_rs2_bypass_en_d;
-	wire [31:0] i0_rs1_d;
-	wire [31:0] i0_rs2_d;
-	wire [31:0] muldiv_rs1_d;
-	wire [31:1] pred_correct_npc_r;
-	wire i0_pred_correct_upper_r;
-	wire [31:1] i0_flush_path_upper_r;
-	wire x_data_en;
-	wire x_data_en_q1;
-	wire x_data_en_q2;
-	wire r_data_en;
-	wire r_data_en_q2;
-	wire x_ctl_en;
-	wire r_ctl_en;
-	wire [pt[2236-:8] - 1:0] ghr_d_ns;
-	wire [pt[2236-:8] - 1:0] ghr_d;
-	wire [pt[2236-:8] - 1:0] ghr_x_ns;
-	wire [pt[2236-:8] - 1:0] ghr_x;
-	wire i0_taken_d;
-	wire i0_taken_x;
-	wire i0_valid_d;
-	wire i0_valid_x;
-	wire [pt[2236-:8] - 1:0] after_flush_eghr;
-	wire [55:0] final_predict_mp;
-	reg [55:0] i0_predict_newp_d;
-	wire flush_in_d;
-	wire [31:0] alu_result_x;
-	wire mul_valid_x;
-	wire [31:0] mul_result_x;
-	wire [55:0] i0_pp_r;
-	wire i0_flush_upper_d;
-	wire [31:1] i0_flush_path_d;
-	wire [55:0] i0_predict_p_d;
-	wire i0_pred_correct_upper_d;
-	wire i0_flush_upper_x;
-	wire [31:1] i0_flush_path_x;
-	wire [55:0] i0_predict_p_x;
-	wire i0_pred_correct_upper_x;
-	wire i0_branch_x;
-	localparam PREDPIPESIZE = (((pt[2172-:9] - pt[2163-:6]) + 1) + pt[2236-:8]) + pt[2139-:9];
-	wire [PREDPIPESIZE - 1:0] predpipe_d;
-	wire [PREDPIPESIZE - 1:0] predpipe_x;
-	wire [PREDPIPESIZE - 1:0] predpipe_r;
-	wire [PREDPIPESIZE - 1:0] final_predpipe_mp;
-	rvdffpcie #(.WIDTH(31)) i_flush_path_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(x_data_en),
-		.din(i0_flush_path_d[31:1]),
-		.dout(i0_flush_path_x[31:1])
-	);
-	rvdffe #(.WIDTH(32)) i_csr_rs1_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(x_data_en_q1),
-		.din(i0_rs1_d[31:0]),
-		.dout(exu_csr_rs1_x[31:0])
-	);
-	rvdffppe #(.WIDTH(56)) i_predictpacket_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(x_data_en),
-		.din(i0_predict_p_d),
-		.dout(i0_predict_p_x)
-	);
-	rvdffe #(.WIDTH(PREDPIPESIZE)) i_predpipe_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(x_data_en_q2),
-		.din(predpipe_d),
-		.dout(predpipe_x)
-	);
-	rvdffe #(.WIDTH(PREDPIPESIZE)) i_predpipe_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(r_data_en_q2),
-		.din(predpipe_x),
-		.dout(predpipe_r)
-	);
-	rvdffe #(.WIDTH(4 + pt[2236-:8])) i_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(x_ctl_en),
-		.din({i0_valid_d, i0_taken_d, i0_flush_upper_d, i0_pred_correct_upper_d, ghr_x_ns[pt[2236-:8] - 1:0]}),
-		.dout({i0_valid_x, i0_taken_x, i0_flush_upper_x, i0_pred_correct_upper_x, ghr_x[pt[2236-:8] - 1:0]})
-	);
-	rvdffppe #(.WIDTH(57)) i_r_ff0(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(r_ctl_en),
-		.din({i0_pred_correct_upper_x, i0_predict_p_x}),
-		.dout({i0_pred_correct_upper_r, i0_pp_r})
-	);
-	rvdffpcie #(.WIDTH(31)) i_flush_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(r_data_en),
-		.din(i0_flush_path_x[31:1]),
-		.dout(i0_flush_path_upper_r[31:1])
-	);
-	rvdffpcie #(.WIDTH(31)) i_npc_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(r_data_en),
-		.din(pred_correct_npc_x[31:1]),
-		.dout(pred_correct_npc_r[31:1])
-	);
-	rvdffie #(
-		.WIDTH(pt[2236-:8] + 2),
-		.OVERRIDE(1)
-	) i_misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.din({ghr_d_ns[pt[2236-:8] - 1:0], mul_p[19], dec_i0_branch_d}),
-		.dout({ghr_d[pt[2236-:8] - 1:0], mul_valid_x, i0_branch_x})
-	);
-	assign predpipe_d[PREDPIPESIZE - 1:0] = {i0_predict_fghr_d, i0_predict_index_d, i0_predict_btag_d};
-	assign i0_rs1_bypass_en_d = ((dec_i0_rs1_bypass_en_d[0] | dec_i0_rs1_bypass_en_d[1]) | dec_i0_rs1_bypass_en_d[2]) | dec_i0_rs1_bypass_en_d[3];
-	assign i0_rs2_bypass_en_d = ((dec_i0_rs2_bypass_en_d[0] | dec_i0_rs2_bypass_en_d[1]) | dec_i0_rs2_bypass_en_d[2]) | dec_i0_rs2_bypass_en_d[3];
-	assign i0_rs1_bypass_data_d[31:0] = ((({32 {dec_i0_rs1_bypass_en_d[0]}} & dec_i0_result_r[31:0]) | ({32 {dec_i0_rs1_bypass_en_d[1]}} & lsu_result_m[31:0])) | ({32 {dec_i0_rs1_bypass_en_d[2]}} & exu_i0_result_x[31:0])) | ({32 {dec_i0_rs1_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-	assign i0_rs2_bypass_data_d[31:0] = ((({32 {dec_i0_rs2_bypass_en_d[0]}} & dec_i0_result_r[31:0]) | ({32 {dec_i0_rs2_bypass_en_d[1]}} & lsu_result_m[31:0])) | ({32 {dec_i0_rs2_bypass_en_d[2]}} & exu_i0_result_x[31:0])) | ({32 {dec_i0_rs2_bypass_en_d[3]}} & lsu_nonblock_load_data[31:0]);
-	assign i0_rs1_d[31:0] = ((({32 {i0_rs1_bypass_en_d}} & i0_rs1_bypass_data_d[31:0]) | ({32 {~i0_rs1_bypass_en_d & dec_i0_select_pc_d}} & {dec_i0_pc_d[31:1], 1'b0})) | ({32 {~i0_rs1_bypass_en_d & dec_debug_wdata_rs1_d}} & dbg_cmd_wrdata[31:0])) | ({32 {(~i0_rs1_bypass_en_d & ~dec_debug_wdata_rs1_d) & dec_i0_rs1_en_d}} & gpr_i0_rs1_d[31:0]);
-	assign i0_rs2_d[31:0] = (({32 {~i0_rs2_bypass_en_d & dec_i0_rs2_en_d}} & gpr_i0_rs2_d[31:0]) | ({32 {~i0_rs2_bypass_en_d}} & dec_i0_immed_d[31:0])) | ({32 {i0_rs2_bypass_en_d}} & i0_rs2_bypass_data_d[31:0]);
-	assign exu_lsu_rs1_d[31:0] = (({32 {((~i0_rs1_bypass_en_d & ~dec_extint_stall) & dec_i0_rs1_en_d) & dec_qual_lsu_d}} & gpr_i0_rs1_d[31:0]) | ({32 {(i0_rs1_bypass_en_d & ~dec_extint_stall) & dec_qual_lsu_d}} & i0_rs1_bypass_data_d[31:0])) | ({32 {dec_extint_stall & dec_qual_lsu_d}} & {dec_tlu_meihap[31:2], 2'b00});
-	assign exu_lsu_rs2_d[31:0] = ({32 {((~i0_rs2_bypass_en_d & ~dec_extint_stall) & dec_i0_rs2_en_d) & dec_qual_lsu_d}} & gpr_i0_rs2_d[31:0]) | ({32 {(i0_rs2_bypass_en_d & ~dec_extint_stall) & dec_qual_lsu_d}} & i0_rs2_bypass_data_d[31:0]);
-	assign muldiv_rs1_d[31:0] = ({32 {~i0_rs1_bypass_en_d & dec_i0_rs1_en_d}} & gpr_i0_rs1_d[31:0]) | ({32 {i0_rs1_bypass_en_d}} & i0_rs1_bypass_data_d[31:0]);
-	assign x_data_en = dec_data_en[1];
-	assign x_data_en_q1 = dec_data_en[1] & dec_csr_ren_d;
-	assign x_data_en_q2 = dec_data_en[1] & dec_i0_branch_d;
-	assign r_data_en = dec_data_en[0];
-	assign r_data_en_q2 = dec_data_en[0] & i0_branch_x;
-	assign x_ctl_en = dec_ctl_en[1];
-	assign r_ctl_en = dec_ctl_en[0];
-	eb1_exu_alu_ctl #(.pt(pt)) i_alu(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.enable(x_data_en),
-		.pp_in(i0_predict_newp_d),
-		.valid_in(dec_i0_alu_decode_d),
-		.flush_upper_x(i0_flush_upper_x),
-		.flush_lower_r(dec_tlu_flush_lower_r),
-		.a_in(i0_rs1_d[31:0]),
-		.b_in(i0_rs2_d[31:0]),
-		.pc_in(dec_i0_pc_d[31:1]),
-		.brimm_in(dec_i0_br_immed_d[12:1]),
-		.ap(i0_ap),
-		.csr_ren_in(dec_csr_ren_d),
-		.csr_rddata_in(dec_csr_rddata_d[31:0]),
-		.result_ff(alu_result_x[31:0]),
-		.flush_upper_out(i0_flush_upper_d),
-		.flush_final_out(exu_flush_final),
-		.flush_path_out(i0_flush_path_d[31:1]),
-		.predict_p_out(i0_predict_p_d),
-		.pred_correct_out(i0_pred_correct_upper_d),
-		.pc_ff(exu_i0_pc_x[31:1])
-	);
-	eb1_exu_mul_ctl #(.pt(pt)) i_mul(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.mul_p(mul_p & {20 {mul_p[19]}}),
-		.rs1_in(muldiv_rs1_d[31:0] & {32 {mul_p[19]}}),
-		.rs2_in(i0_rs2_d[31:0] & {32 {mul_p[19]}}),
-		.result_x(mul_result_x[31:0])
-	);
-	eb1_exu_div_ctl #(.pt(pt)) i_div(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.cancel(dec_div_cancel),
-		.dp(div_p),
-		.dividend(muldiv_rs1_d[31:0]),
-		.divisor(i0_rs2_d[31:0]),
-		.finish_dly(exu_div_wren),
-		.out(exu_div_result[31:0])
-	);
-	assign exu_i0_result_x[31:0] = (mul_valid_x ? mul_result_x[31:0] : alu_result_x[31:0]);
-	always @(*) begin
-		i0_predict_newp_d = dec_i0_predict_p_d;
-		i0_predict_newp_d[53] = dec_i0_pc_d[1];
-	end
-	assign exu_pmu_i0_br_misp = i0_pp_r[55];
-	assign exu_pmu_i0_br_ataken = i0_pp_r[54];
-	assign exu_pmu_i0_pc4 = i0_pp_r[52];
-	assign i0_valid_d = (i0_predict_p_d[37] & dec_i0_alu_decode_d) & ~dec_tlu_flush_lower_r;
-	assign i0_taken_d = i0_predict_p_d[54] & dec_i0_alu_decode_d;
-	generate
-		if (pt[2130-:5] == 1) begin
-			assign ghr_d_ns[pt[2236-:8] - 1:0] = (({pt[2236-:8] {~dec_tlu_flush_lower_r & i0_valid_d}} & {ghr_d[pt[2236-:8] - 2:0], i0_taken_d}) | ({pt[2236-:8] {~dec_tlu_flush_lower_r & ~i0_valid_d}} & ghr_d[pt[2236-:8] - 1:0])) | ({pt[2236-:8] {dec_tlu_flush_lower_r}} & ghr_x[pt[2236-:8] - 1:0]);
-			assign ghr_x_ns[pt[2236-:8] - 1:0] = ({pt[2236-:8] {i0_valid_x}} & {ghr_x[pt[2236-:8] - 2:0], i0_taken_x}) | ({pt[2236-:8] {~i0_valid_x}} & ghr_x[pt[2236-:8] - 1:0]);
-			assign exu_i0_br_valid_r = i0_pp_r[37];
-			assign exu_i0_br_mp_r = i0_pp_r[55];
-			assign exu_i0_br_way_r = i0_pp_r[32];
-			assign exu_i0_br_hist_r[1:0] = {2 {i0_pp_r[37]}} & i0_pp_r[51:50];
-			assign exu_i0_br_error_r = i0_pp_r[36];
-			assign exu_i0_br_middle_r = i0_pp_r[52] ^ i0_pp_r[53];
-			assign exu_i0_br_start_error_r = i0_pp_r[35];
-			assign {exu_i0_br_fghr_r[pt[2236-:8] - 1:0], exu_i0_br_index_r[pt[2172-:9]:pt[2163-:6]]} = predpipe_r[PREDPIPESIZE - 1:pt[2139-:9]];
-			assign final_predict_mp = (i0_flush_upper_x ? i0_predict_p_x : {56 {1'sb0}});
-			assign final_predpipe_mp[PREDPIPESIZE - 1:0] = (i0_flush_upper_x ? predpipe_x : {PREDPIPESIZE {1'sb0}});
-			assign after_flush_eghr[pt[2236-:8] - 1:0] = (i0_flush_upper_x & ~dec_tlu_flush_lower_r ? ghr_d[pt[2236-:8] - 1:0] : ghr_x[pt[2236-:8] - 1:0]);
-			assign exu_mp_pkt[37] = final_predict_mp[37];
-			assign exu_mp_pkt[32] = final_predict_mp[32];
-			assign exu_mp_pkt[55] = final_predict_mp[55];
-			assign exu_mp_pkt[34] = final_predict_mp[34];
-			assign exu_mp_pkt[33] = final_predict_mp[33];
-			assign exu_mp_pkt[31] = final_predict_mp[31];
-			assign exu_mp_pkt[54] = final_predict_mp[54];
-			assign exu_mp_pkt[53] = final_predict_mp[53];
-			assign exu_mp_pkt[52] = final_predict_mp[52];
-			assign exu_mp_pkt[51:50] = final_predict_mp[51:50];
-			assign exu_mp_pkt[49:38] = final_predict_mp[49:38];
-			assign exu_mp_fghr[pt[2236-:8] - 1:0] = after_flush_eghr[pt[2236-:8] - 1:0];
-			assign {exu_mp_index[pt[2172-:9]:pt[2163-:6]], exu_mp_btag[pt[2139-:9] - 1:0]} = final_predpipe_mp[(PREDPIPESIZE - pt[2236-:8]) - 1:0];
-			assign exu_mp_eghr[pt[2236-:8] - 1:0] = final_predpipe_mp[PREDPIPESIZE - 1:((pt[2172-:9] - pt[2163-:6]) + pt[2139-:9]) + 1];
-		end
-		else begin
-			assign ghr_d_ns = {pt[2236-:8] {1'sb0}};
-			assign ghr_x_ns = {pt[2236-:8] {1'sb0}};
-			assign exu_mp_pkt = {56 {1'sb0}};
-			assign exu_mp_eghr = {pt[2236-:8] {1'sb0}};
-			assign exu_mp_fghr = {pt[2236-:8] {1'sb0}};
-			assign exu_mp_index = {(pt[2172-:9] >= pt[2163-:6] ? (pt[2172-:9] - pt[2163-:6]) + 1 : (pt[2163-:6] - pt[2172-:9]) + 1) {1'sb0}};
-			assign exu_mp_btag = {pt[2139-:9] {1'sb0}};
-			assign exu_i0_br_hist_r = {2 {1'sb0}};
-			assign exu_i0_br_error_r = 1'b0;
-			assign exu_i0_br_start_error_r = 1'b0;
-			assign exu_i0_br_index_r = {(pt[2172-:9] >= pt[2163-:6] ? (pt[2172-:9] - pt[2163-:6]) + 1 : (pt[2163-:6] - pt[2172-:9]) + 1) {1'sb0}};
-			assign exu_i0_br_valid_r = 1'b0;
-			assign exu_i0_br_mp_r = 1'b0;
-			assign exu_i0_br_middle_r = 1'b0;
-			assign exu_i0_br_fghr_r = {pt[2236-:8] {1'sb0}};
-			assign exu_i0_br_way_r = 1'b0;
-		end
-	endgenerate
-	assign exu_flush_path_final[31:1] = ({31 {dec_tlu_flush_lower_r}} & dec_tlu_flush_path_r[31:1]) | ({31 {~dec_tlu_flush_lower_r & i0_flush_upper_d}} & i0_flush_path_d[31:1]);
-	assign exu_npc_r[31:1] = (i0_pred_correct_upper_r ? pred_correct_npc_r[31:1] : i0_flush_path_upper_r[31:1]);
-endmodule
-module eb1_dma_ctrl (
-	clk,
-	free_clk,
-	rst_l,
-	dma_bus_clk_en,
-	clk_override,
-	scan_mode,
-	dbg_cmd_addr,
-	dbg_cmd_wrdata,
-	dbg_cmd_valid,
-	dbg_cmd_write,
-	dbg_cmd_type,
-	dbg_cmd_size,
-	dbg_dma_bubble,
-	dma_dbg_ready,
-	dma_dbg_cmd_done,
-	dma_dbg_cmd_fail,
-	dma_dbg_rddata,
-	dma_dccm_req,
-	dma_iccm_req,
-	dma_mem_tag,
-	dma_mem_addr,
-	dma_mem_sz,
-	dma_mem_write,
-	dma_mem_wdata,
-	dccm_dma_rvalid,
-	dccm_dma_ecc_error,
-	dccm_dma_rtag,
-	dccm_dma_rdata,
-	iccm_dma_rvalid,
-	iccm_dma_ecc_error,
-	iccm_dma_rtag,
-	iccm_dma_rdata,
-	dma_active,
-	dma_dccm_stall_any,
-	dma_iccm_stall_any,
-	dccm_ready,
-	iccm_ready,
-	dec_tlu_dma_qos_prty,
-	dma_pmu_dccm_read,
-	dma_pmu_dccm_write,
-	dma_pmu_any_read,
-	dma_pmu_any_write,
-	dma_axi_awvalid,
-	dma_axi_awready,
-	dma_axi_awid,
-	dma_axi_awaddr,
-	dma_axi_awsize,
-	dma_axi_wvalid,
-	dma_axi_wready,
-	dma_axi_wdata,
-	dma_axi_wstrb,
-	dma_axi_bvalid,
-	dma_axi_bready,
-	dma_axi_bresp,
-	dma_axi_bid,
-	dma_axi_arvalid,
-	dma_axi_arready,
-	dma_axi_arid,
-	dma_axi_araddr,
-	dma_axi_arsize,
-	dma_axi_rvalid,
-	dma_axi_rready,
-	dma_axi_rid,
-	dma_axi_rdata,
-	dma_axi_rresp,
-	dma_axi_rlast
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire free_clk;
-	input wire rst_l;
-	input wire dma_bus_clk_en;
-	input wire clk_override;
-	input wire scan_mode;
-	input wire [31:0] dbg_cmd_addr;
-	input wire [31:0] dbg_cmd_wrdata;
-	input wire dbg_cmd_valid;
-	input wire dbg_cmd_write;
-	input wire [1:0] dbg_cmd_type;
-	input wire [1:0] dbg_cmd_size;
-	input wire dbg_dma_bubble;
-	output wire dma_dbg_ready;
-	output wire dma_dbg_cmd_done;
-	output wire dma_dbg_cmd_fail;
-	output wire [31:0] dma_dbg_rddata;
-	output wire dma_dccm_req;
-	output wire dma_iccm_req;
-	output wire [2:0] dma_mem_tag;
-	output wire [31:0] dma_mem_addr;
-	output wire [2:0] dma_mem_sz;
-	output wire dma_mem_write;
-	output wire [63:0] dma_mem_wdata;
-	input wire dccm_dma_rvalid;
-	input wire dccm_dma_ecc_error;
-	input wire [2:0] dccm_dma_rtag;
-	input wire [63:0] dccm_dma_rdata;
-	input wire iccm_dma_rvalid;
-	input wire iccm_dma_ecc_error;
-	input wire [2:0] iccm_dma_rtag;
-	input wire [63:0] iccm_dma_rdata;
-	output wire dma_active;
-	output wire dma_dccm_stall_any;
-	output wire dma_iccm_stall_any;
-	input wire dccm_ready;
-	input wire iccm_ready;
-	input wire [2:0] dec_tlu_dma_qos_prty;
-	output wire dma_pmu_dccm_read;
-	output wire dma_pmu_dccm_write;
-	output wire dma_pmu_any_read;
-	output wire dma_pmu_any_write;
-	input wire dma_axi_awvalid;
-	output wire dma_axi_awready;
-	input wire [pt[1235-:8] - 1:0] dma_axi_awid;
-	input wire [31:0] dma_axi_awaddr;
-	input wire [2:0] dma_axi_awsize;
-	input wire dma_axi_wvalid;
-	output wire dma_axi_wready;
-	input wire [63:0] dma_axi_wdata;
-	input wire [7:0] dma_axi_wstrb;
-	output wire dma_axi_bvalid;
-	input wire dma_axi_bready;
-	output wire [1:0] dma_axi_bresp;
-	output wire [pt[1235-:8] - 1:0] dma_axi_bid;
-	input wire dma_axi_arvalid;
-	output wire dma_axi_arready;
-	input wire [pt[1235-:8] - 1:0] dma_axi_arid;
-	input wire [31:0] dma_axi_araddr;
-	input wire [2:0] dma_axi_arsize;
-	output wire dma_axi_rvalid;
-	input wire dma_axi_rready;
-	output wire [pt[1235-:8] - 1:0] dma_axi_rid;
-	output wire [63:0] dma_axi_rdata;
-	output wire [1:0] dma_axi_rresp;
-	output wire dma_axi_rlast;
-	localparam DEPTH = pt[1257-:7];
-	localparam DEPTH_PTR = $clog2(DEPTH);
-	localparam NACK_COUNT = 7;
-	wire [DEPTH - 1:0] fifo_valid;
-	wire [(DEPTH * 2) - 1:0] fifo_error;
-	wire [DEPTH - 1:0] fifo_error_bus;
-	wire [DEPTH - 1:0] fifo_rpend;
-	wire [DEPTH - 1:0] fifo_done;
-	wire [DEPTH - 1:0] fifo_done_bus;
-	wire [(DEPTH * 32) - 1:0] fifo_addr;
-	wire [(DEPTH * 3) - 1:0] fifo_sz;
-	wire [(DEPTH * 8) - 1:0] fifo_byteen;
-	wire [DEPTH - 1:0] fifo_write;
-	wire [DEPTH - 1:0] fifo_posted_write;
-	wire [DEPTH - 1:0] fifo_dbg;
-	wire [(DEPTH * 64) - 1:0] fifo_data;
-	wire [(DEPTH * pt[1235-:8]) - 1:0] fifo_tag;
-	wire [(DEPTH * pt[1250-:9]) - 1:0] fifo_mid;
-	wire [(DEPTH * pt[1241-:6]) - 1:0] fifo_prty;
-	wire [DEPTH - 1:0] fifo_cmd_en;
-	wire [DEPTH - 1:0] fifo_data_en;
-	wire [DEPTH - 1:0] fifo_pend_en;
-	wire [DEPTH - 1:0] fifo_done_en;
-	wire [DEPTH - 1:0] fifo_done_bus_en;
-	wire [DEPTH - 1:0] fifo_error_en;
-	wire [DEPTH - 1:0] fifo_error_bus_en;
-	wire [DEPTH - 1:0] fifo_reset;
-	wire [(DEPTH * 2) - 1:0] fifo_error_in;
-	wire [(DEPTH * 64) - 1:0] fifo_data_in;
-	wire fifo_write_in;
-	wire fifo_posted_write_in;
-	wire fifo_dbg_in;
-	wire [31:0] fifo_addr_in;
-	wire [2:0] fifo_sz_in;
-	wire [7:0] fifo_byteen_in;
-	wire [DEPTH_PTR - 1:0] RspPtr;
-	wire [DEPTH_PTR - 1:0] NxtRspPtr;
-	wire [DEPTH_PTR - 1:0] WrPtr;
-	wire [DEPTH_PTR - 1:0] NxtWrPtr;
-	wire [DEPTH_PTR - 1:0] RdPtr;
-	wire [DEPTH_PTR - 1:0] NxtRdPtr;
-	wire WrPtrEn;
-	wire RdPtrEn;
-	wire RspPtrEn;
-	wire [1:0] dma_dbg_sz;
-	wire [1:0] dma_dbg_addr;
-	wire [31:0] dma_dbg_mem_rddata;
-	wire [31:0] dma_dbg_mem_wrdata;
-	wire dma_dbg_cmd_error;
-	wire dma_dbg_cmd_done_q;
-	wire fifo_full;
-	wire fifo_full_spec;
-	wire fifo_empty;
-	wire dma_address_error;
-	wire dma_alignment_error;
-	reg [3:0] num_fifo_vld;
-	wire dma_mem_req;
-	wire [31:0] dma_mem_addr_int;
-	wire [2:0] dma_mem_sz_int;
-	wire [7:0] dma_mem_byteen;
-	wire dma_mem_addr_in_dccm;
-	wire dma_mem_addr_in_iccm;
-	wire dma_mem_addr_in_pic;
-	wire dma_mem_addr_in_pic_region_nc;
-	wire dma_mem_addr_in_dccm_region_nc;
-	wire dma_mem_addr_in_iccm_region_nc;
-	wire [2:0] dma_nack_count;
-	wire [2:0] dma_nack_count_d;
-	wire [2:0] dma_nack_count_csr;
-	wire dma_buffer_c1_clken;
-	wire dma_free_clken;
-	wire dma_buffer_c1_clk;
-	wire dma_free_clk;
-	wire dma_bus_clk;
-	wire bus_rsp_valid;
-	wire bus_rsp_sent;
-	wire bus_cmd_valid;
-	wire bus_cmd_sent;
-	wire bus_cmd_write;
-	wire bus_cmd_posted_write;
-	wire [7:0] bus_cmd_byteen;
-	wire [2:0] bus_cmd_sz;
-	wire [31:0] bus_cmd_addr;
-	wire [63:0] bus_cmd_wdata;
-	wire [pt[1235-:8] - 1:0] bus_cmd_tag;
-	wire [pt[1250-:9] - 1:0] bus_cmd_mid;
-	wire [pt[1241-:6] - 1:0] bus_cmd_prty;
-	wire bus_posted_write_done;
-	wire fifo_full_spec_bus;
-	wire dbg_dma_bubble_bus;
-	wire stall_dma_in;
-	wire dma_fifo_ready;
-	wire wrbuf_en;
-	wire wrbuf_data_en;
-	wire wrbuf_cmd_sent;
-	wire wrbuf_rst;
-	wire wrbuf_data_rst;
-	wire wrbuf_vld;
-	wire wrbuf_data_vld;
-	wire [pt[1235-:8] - 1:0] wrbuf_tag;
-	wire [2:0] wrbuf_sz;
-	wire [31:0] wrbuf_addr;
-	wire [63:0] wrbuf_data;
-	wire [7:0] wrbuf_byteen;
-	wire rdbuf_en;
-	wire rdbuf_cmd_sent;
-	wire rdbuf_rst;
-	wire rdbuf_vld;
-	wire [pt[1235-:8] - 1:0] rdbuf_tag;
-	wire [2:0] rdbuf_sz;
-	wire [31:0] rdbuf_addr;
-	wire axi_mstr_prty_in;
-	wire axi_mstr_prty_en;
-	wire axi_mstr_priority;
-	wire axi_mstr_sel;
-	wire axi_rsp_valid;
-	wire axi_rsp_sent;
-	wire axi_rsp_write;
-	wire [pt[1235-:8] - 1:0] axi_rsp_tag;
-	wire [1:0] axi_rsp_error;
-	wire [63:0] axi_rsp_rdata;
-	assign fifo_addr_in[31:0] = (dbg_cmd_valid ? dbg_cmd_addr[31:0] : bus_cmd_addr[31:0]);
-	assign fifo_byteen_in[7:0] = {8 {~dbg_cmd_valid}} & bus_cmd_byteen[7:0];
-	assign fifo_sz_in[2:0] = (dbg_cmd_valid ? {1'b0, dbg_cmd_size[1:0]} : bus_cmd_sz[2:0]);
-	assign fifo_write_in = (dbg_cmd_valid ? dbg_cmd_write : bus_cmd_write);
-	assign fifo_posted_write_in = ~dbg_cmd_valid & bus_cmd_posted_write;
-	assign fifo_dbg_in = dbg_cmd_valid;
-	generate
-		genvar i;
-		for (i = 0; i < DEPTH; i = i + 1) begin : GenFifo
-			assign fifo_cmd_en[i] = ((bus_cmd_sent & dma_bus_clk_en) | (dbg_cmd_valid & dbg_cmd_type[1])) & (i == WrPtr[DEPTH_PTR - 1:0]);
-			function automatic [DEPTH_PTR - 1:0] sv2v_cast_87E0F;
-				input reg [DEPTH_PTR - 1:0] inp;
-				sv2v_cast_87E0F = inp;
-			endfunction
-			assign fifo_data_en[i] = ((((((bus_cmd_sent & fifo_write_in) & dma_bus_clk_en) | ((dbg_cmd_valid & dbg_cmd_type[1]) & dbg_cmd_write)) & (i == WrPtr[DEPTH_PTR - 1:0])) | ((dma_address_error | dma_alignment_error) & (i == RdPtr[DEPTH_PTR - 1:0]))) | (dccm_dma_rvalid & (i == sv2v_cast_87E0F(dccm_dma_rtag[2:0])))) | (iccm_dma_rvalid & (i == sv2v_cast_87E0F(iccm_dma_rtag[2:0])));
-			assign fifo_pend_en[i] = ((dma_dccm_req | dma_iccm_req) & ~dma_mem_write) & (i == RdPtr[DEPTH_PTR - 1:0]);
-			assign fifo_error_en[i] = ((((dma_address_error | dma_alignment_error) | dma_dbg_cmd_error) & (i == RdPtr[DEPTH_PTR - 1:0])) | ((dccm_dma_rvalid & dccm_dma_ecc_error) & (i == sv2v_cast_87E0F(dccm_dma_rtag[2:0])))) | ((iccm_dma_rvalid & iccm_dma_ecc_error) & (i == sv2v_cast_87E0F(iccm_dma_rtag[2:0])));
-			assign fifo_error_bus_en[i] = ((|fifo_error_in[(i * 2) + 1-:2] & fifo_error_en[i]) | |fifo_error[i * 2+:2]) & dma_bus_clk_en;
-			assign fifo_done_en[i] = ((((|fifo_error[i * 2+:2] | fifo_error_en[i]) | ((dma_dccm_req | dma_iccm_req) & dma_mem_write)) & (i == RdPtr[DEPTH_PTR - 1:0])) | (dccm_dma_rvalid & (i == sv2v_cast_87E0F(dccm_dma_rtag[2:0])))) | (iccm_dma_rvalid & (i == sv2v_cast_87E0F(iccm_dma_rtag[2:0])));
-			assign fifo_done_bus_en[i] = (fifo_done_en[i] | fifo_done[i]) & dma_bus_clk_en;
-			assign fifo_reset[i] = (((bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en) | dma_dbg_cmd_done) & (i == RspPtr[DEPTH_PTR - 1:0]);
-			assign fifo_error_in[i * 2+:2] = (dccm_dma_rvalid & (i == sv2v_cast_87E0F(dccm_dma_rtag[2:0])) ? {1'b0, dccm_dma_ecc_error} : (iccm_dma_rvalid & (i == sv2v_cast_87E0F(iccm_dma_rtag[2:0])) ? {1'b0, iccm_dma_ecc_error} : {(dma_address_error | dma_alignment_error) | dma_dbg_cmd_error, dma_alignment_error}));
-			assign fifo_data_in[i * 64+:64] = (fifo_error_en[i] & |fifo_error_in[i * 2+:2] ? {32'b00000000000000000000000000000000, fifo_addr[i * 32+:32]} : (dccm_dma_rvalid & (i == sv2v_cast_87E0F(dccm_dma_rtag[2:0])) ? dccm_dma_rdata[63:0] : (iccm_dma_rvalid & (i == sv2v_cast_87E0F(iccm_dma_rtag[2:0])) ? iccm_dma_rdata[63:0] : (dbg_cmd_valid ? {2 {dma_dbg_mem_wrdata[31:0]}} : bus_cmd_wdata[63:0]))));
-			rvdffsc #(.WIDTH(1)) fifo_valid_dff(
-				.din(1'b1),
-				.dout(fifo_valid[i]),
-				.en(fifo_cmd_en[i]),
-				.clear(fifo_reset[i]),
-				.clk(dma_free_clk),
-				.rst_l(rst_l)
-			);
-			rvdffsc #(.WIDTH(2)) fifo_error_dff(
-				.din(fifo_error_in[i * 2+:2]),
-				.dout(fifo_error[i * 2+:2]),
-				.en(fifo_error_en[i]),
-				.clear(fifo_reset[i]),
-				.clk(dma_free_clk),
-				.rst_l(rst_l)
-			);
-			rvdffsc #(.WIDTH(1)) fifo_error_bus_dff(
-				.din(1'b1),
-				.dout(fifo_error_bus[i]),
-				.en(fifo_error_bus_en[i]),
-				.clear(fifo_reset[i]),
-				.clk(dma_free_clk),
-				.rst_l(rst_l)
-			);
-			rvdffsc #(.WIDTH(1)) fifo_rpend_dff(
-				.din(1'b1),
-				.dout(fifo_rpend[i]),
-				.en(fifo_pend_en[i]),
-				.clear(fifo_reset[i]),
-				.clk(dma_free_clk),
-				.rst_l(rst_l)
-			);
-			rvdffsc #(.WIDTH(1)) fifo_done_dff(
-				.din(1'b1),
-				.dout(fifo_done[i]),
-				.en(fifo_done_en[i]),
-				.clear(fifo_reset[i]),
-				.clk(dma_free_clk),
-				.rst_l(rst_l)
-			);
-			rvdffsc #(.WIDTH(1)) fifo_done_bus_dff(
-				.din(1'b1),
-				.dout(fifo_done_bus[i]),
-				.en(fifo_done_bus_en[i]),
-				.clear(fifo_reset[i]),
-				.clk(dma_free_clk),
-				.rst_l(rst_l)
-			);
-			rvdffe #(.WIDTH(32)) fifo_addr_dff(
-				.din(fifo_addr_in[31:0]),
-				.dout(fifo_addr[i * 32+:32]),
-				.en(fifo_cmd_en[i]),
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-			rvdffs #(.WIDTH(3)) fifo_sz_dff(
-				.din(fifo_sz_in[2:0]),
-				.dout(fifo_sz[i * 3+:3]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(8)) fifo_byteen_dff(
-				.din(fifo_byteen_in[7:0]),
-				.dout(fifo_byteen[i * 8+:8]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) fifo_write_dff(
-				.din(fifo_write_in),
-				.dout(fifo_write[i]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) fifo_posted_write_dff(
-				.din(fifo_posted_write_in),
-				.dout(fifo_posted_write[i]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) fifo_dbg_dff(
-				.din(fifo_dbg_in),
-				.dout(fifo_dbg[i]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffe #(.WIDTH(64)) fifo_data_dff(
-				.din(fifo_data_in[i * 64+:64]),
-				.dout(fifo_data[i * 64+:64]),
-				.en(fifo_data_en[i]),
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-			rvdffs #(.WIDTH(pt[1235-:8])) fifo_tag_dff(
-				.din(bus_cmd_tag[pt[1235-:8] - 1:0]),
-				.dout(fifo_tag[(i * pt[1235-:8]) + (pt[1235-:8] - 1)-:pt[1235-:8]]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(pt[1250-:9])) fifo_mid_dff(
-				.din(bus_cmd_mid[pt[1250-:9] - 1:0]),
-				.dout(fifo_mid[(i * pt[1250-:9]) + (pt[1250-:9] - 1)-:pt[1250-:9]]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(pt[1241-:6])) fifo_prty_dff(
-				.din(bus_cmd_prty[pt[1241-:6] - 1:0]),
-				.dout(fifo_prty[(i * pt[1241-:6]) + (pt[1241-:6] - 1)-:pt[1241-:6]]),
-				.en(fifo_cmd_en[i]),
-				.clk(dma_buffer_c1_clk),
-				.rst_l(rst_l)
-			);
-		end
-	endgenerate
-	assign NxtWrPtr[DEPTH_PTR - 1:0] = (WrPtr[DEPTH_PTR - 1:0] == (DEPTH - 1) ? {DEPTH_PTR {1'sb0}} : WrPtr[DEPTH_PTR - 1:0] + 1'b1);
-	assign NxtRdPtr[DEPTH_PTR - 1:0] = (RdPtr[DEPTH_PTR - 1:0] == (DEPTH - 1) ? {DEPTH_PTR {1'sb0}} : RdPtr[DEPTH_PTR - 1:0] + 1'b1);
-	assign NxtRspPtr[DEPTH_PTR - 1:0] = (RspPtr[DEPTH_PTR - 1:0] == (DEPTH - 1) ? {DEPTH_PTR {1'sb0}} : RspPtr[DEPTH_PTR - 1:0] + 1'b1);
-	assign WrPtrEn = |fifo_cmd_en[DEPTH - 1:0];
-	assign RdPtrEn = (dma_dccm_req | dma_iccm_req) | ((dma_address_error | dma_alignment_error) | dma_dbg_cmd_error);
-	assign RspPtrEn = dma_dbg_cmd_done | ((bus_rsp_sent | bus_posted_write_done) & dma_bus_clk_en);
-	rvdffs #(.WIDTH(DEPTH_PTR)) WrPtr_dff(
-		.din(NxtWrPtr[DEPTH_PTR - 1:0]),
-		.dout(WrPtr[DEPTH_PTR - 1:0]),
-		.en(WrPtrEn),
-		.clk(dma_free_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(DEPTH_PTR)) RdPtr_dff(
-		.din(NxtRdPtr[DEPTH_PTR - 1:0]),
-		.dout(RdPtr[DEPTH_PTR - 1:0]),
-		.en(RdPtrEn),
-		.clk(dma_free_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(DEPTH_PTR)) RspPtr_dff(
-		.din(NxtRspPtr[DEPTH_PTR - 1:0]),
-		.dout(RspPtr[DEPTH_PTR - 1:0]),
-		.en(RspPtrEn),
-		.clk(dma_free_clk),
-		.rst_l(rst_l)
-	);
-	assign fifo_full = fifo_full_spec_bus;
-	always @(*) begin
-		num_fifo_vld[3:0] = {3'b000, bus_cmd_sent} - {3'b000, bus_rsp_sent};
-		begin : sv2v_autoblock_41
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				num_fifo_vld[3:0] = num_fifo_vld[3:0] + {3'b000, fifo_valid[i]};
-		end
-	end
-	assign fifo_full_spec = num_fifo_vld[3:0] >= DEPTH;
-	assign dma_fifo_ready = ~(fifo_full | dbg_dma_bubble_bus);
-	assign dma_address_error = ((fifo_valid[RdPtr] & ~fifo_done[RdPtr]) & ~fifo_dbg[RdPtr]) & ~(dma_mem_addr_in_dccm | dma_mem_addr_in_iccm);
-	assign dma_alignment_error = (((fifo_valid[RdPtr] & ~fifo_done[RdPtr]) & ~fifo_dbg[RdPtr]) & ~dma_address_error) & ((((((((dma_mem_sz_int[2:0] == 3'h1) & dma_mem_addr_int[0]) | ((dma_mem_sz_int[2:0] == 3'h2) & |dma_mem_addr_int[1:0])) | ((dma_mem_sz_int[2:0] == 3'h3) & |dma_mem_addr_int[2:0])) | (dma_mem_addr_in_iccm & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11)))) | ((dma_mem_addr_in_dccm & dma_mem_write) & ~((dma_mem_sz_int[1:0] == 2'b10) | (dma_mem_sz_int[1:0] == 2'b11)))) | ((dma_mem_write & (dma_mem_sz_int[2:0] == 3'h2)) & (dma_mem_byteen[dma_mem_addr_int[2:0]+:4] != 4'hf))) | ((dma_mem_write & (dma_mem_sz_int[2:0] == 3'h3)) & ~(((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0)) | (dma_mem_byteen[7:0] == 8'hff))));
-	assign dma_dbg_ready = fifo_empty & dbg_dma_bubble;
-	assign dma_dbg_cmd_done = (fifo_valid[RspPtr] & fifo_dbg[RspPtr]) & fifo_done[RspPtr];
-	assign dma_dbg_cmd_fail = |fifo_error[RspPtr * 2+:2];
-	assign dma_dbg_sz[1:0] = fifo_sz[(RspPtr * 3) + 1-:2];
-	assign dma_dbg_addr[1:0] = fifo_addr[(RspPtr * 32) + 1-:2];
-	assign dma_dbg_mem_rddata[31:0] = (fifo_addr[(RspPtr * 32) + 2] ? fifo_data[(RspPtr * 64) + 63-:32] : fifo_data[(RspPtr * 64) + 31-:32]);
-	assign dma_dbg_rddata[31:0] = (({32 {dma_dbg_sz[1:0] == 2'h0}} & ((dma_dbg_mem_rddata[31:0] >> (8 * dma_dbg_addr[1:0])) & 32'h000000ff)) | ({32 {dma_dbg_sz[1:0] == 2'h1}} & ((dma_dbg_mem_rddata[31:0] >> (16 * dma_dbg_addr[1])) & 32'h0000ffff))) | ({32 {dma_dbg_sz[1:0] == 2'h2}} & dma_dbg_mem_rddata[31:0]);
-	assign dma_dbg_cmd_error = ((fifo_valid[RdPtr] & ~fifo_done[RdPtr]) & fifo_dbg[RdPtr]) & (~((dma_mem_addr_in_dccm | dma_mem_addr_in_iccm) | dma_mem_addr_in_pic) | ((dma_mem_addr_in_iccm | dma_mem_addr_in_pic) & (dma_mem_sz_int[1:0] != 2'b10)));
-	assign dma_dbg_mem_wrdata[31:0] = (({32 {dbg_cmd_size[1:0] == 2'h0}} & {4 {dbg_cmd_wrdata[7:0]}}) | ({32 {dbg_cmd_size[1:0] == 2'h1}} & {2 {dbg_cmd_wrdata[15:0]}})) | ({32 {dbg_cmd_size[1:0] == 2'h2}} & dbg_cmd_wrdata[31:0]);
-	assign dma_dccm_stall_any = (dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic)) & (dma_nack_count >= dma_nack_count_csr);
-	assign dma_iccm_stall_any = (dma_mem_req & dma_mem_addr_in_iccm) & (dma_nack_count >= dma_nack_count_csr);
-	assign fifo_empty = ~(|fifo_valid[DEPTH - 1:0] | bus_cmd_sent);
-	assign dma_nack_count_csr[2:0] = dec_tlu_dma_qos_prty[2:0];
-	assign dma_nack_count_d[2:0] = (dma_nack_count[2:0] >= dma_nack_count_csr[2:0] ? {3 {~(dma_dccm_req | dma_iccm_req)}} & dma_nack_count[2:0] : (dma_mem_req & ~(dma_dccm_req | dma_iccm_req) ? dma_nack_count[2:0] + 1'b1 : 3'b000));
-	rvdffs #(.WIDTH(3)) nack_count_dff(
-		.din(dma_nack_count_d[2:0]),
-		.dout(dma_nack_count[2:0]),
-		.en(dma_mem_req),
-		.clk(dma_free_clk),
-		.rst_l(rst_l)
-	);
-	assign dma_mem_req = ((fifo_valid[RdPtr] & ~fifo_rpend[RdPtr]) & ~fifo_done[RdPtr]) & ~((dma_address_error | dma_alignment_error) | dma_dbg_cmd_error);
-	assign dma_dccm_req = (dma_mem_req & (dma_mem_addr_in_dccm | dma_mem_addr_in_pic)) & dccm_ready;
-	assign dma_iccm_req = (dma_mem_req & dma_mem_addr_in_iccm) & iccm_ready;
-	function automatic [2:0] sv2v_cast_3;
-		input reg [2:0] inp;
-		sv2v_cast_3 = inp;
-	endfunction
-	assign dma_mem_tag[2:0] = sv2v_cast_3(RdPtr);
-	assign dma_mem_addr_int[31:0] = fifo_addr[RdPtr * 32+:32];
-	assign dma_mem_sz_int[2:0] = fifo_sz[RdPtr * 3+:3];
-	assign dma_mem_addr[31:0] = ((dma_mem_write & ~fifo_dbg[RdPtr]) & (dma_mem_byteen[7:0] == 8'hf0) ? {dma_mem_addr_int[31:3], 1'b1, dma_mem_addr_int[1:0]} : dma_mem_addr_int[31:0]);
-	assign dma_mem_sz[2:0] = ((dma_mem_write & ~fifo_dbg[RdPtr]) & ((dma_mem_byteen[7:0] == 8'h0f) | (dma_mem_byteen[7:0] == 8'hf0)) ? 3'h2 : dma_mem_sz_int[2:0]);
-	assign dma_mem_byteen[7:0] = fifo_byteen[RdPtr * 8+:8];
-	assign dma_mem_write = fifo_write[RdPtr];
-	assign dma_mem_wdata[63:0] = fifo_data[RdPtr * 64+:64];
-	assign dma_pmu_dccm_read = dma_dccm_req & ~dma_mem_write;
-	assign dma_pmu_dccm_write = dma_dccm_req & dma_mem_write;
-	assign dma_pmu_any_read = (dma_dccm_req | dma_iccm_req) & ~dma_mem_write;
-	assign dma_pmu_any_write = (dma_dccm_req | dma_iccm_req) & dma_mem_write;
-	generate
-		if (pt[1365-:5]) begin : Gen_dccm_enable
-			rvrangecheck #(
-				.CCM_SADR(pt[1325-:36]),
-				.CCM_SIZE(pt[1289-:14])
-			) addr_dccm_rangecheck(
-				.addr(dma_mem_addr_int[31:0]),
-				.in_range(dma_mem_addr_in_dccm),
-				.in_region(dma_mem_addr_in_dccm_region_nc)
-			);
-		end
-		else begin : Gen_dccm_disable
-			assign dma_mem_addr_in_dccm = 1'b0;
-			assign dma_mem_addr_in_dccm_region_nc = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[927-:5]) begin : Gen_iccm_enable
-			rvrangecheck #(
-				.CCM_SADR(pt[887-:36]),
-				.CCM_SIZE(pt[851-:14])
-			) addr_iccm_rangecheck(
-				.addr(dma_mem_addr_int[31:0]),
-				.in_range(dma_mem_addr_in_iccm),
-				.in_region(dma_mem_addr_in_iccm_region_nc)
-			);
-		end
-		else begin : Gen_iccm_disable
-			assign dma_mem_addr_in_iccm = 1'b0;
-			assign dma_mem_addr_in_iccm_region_nc = 1'b0;
-		end
-	endgenerate
-	rvrangecheck #(
-		.CCM_SADR(pt[130-:36]),
-		.CCM_SIZE(pt[69-:13])
-	) addr_pic_rangecheck(
-		.addr(dma_mem_addr_int[31:0]),
-		.in_range(dma_mem_addr_in_pic),
-		.in_region(dma_mem_addr_in_pic_region_nc)
-	);
-	rvdff_fpga #(.WIDTH(1)) fifo_full_bus_ff(
-		.din(fifo_full_spec),
-		.dout(fifo_full_spec_bus),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) dbg_dma_bubble_ff(
-		.din(dbg_dma_bubble),
-		.dout(dbg_dma_bubble_bus),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) dma_dbg_cmd_doneff(
-		.din(dma_dbg_cmd_done),
-		.dout(dma_dbg_cmd_done_q),
-		.clk(free_clk),
-		.rst_l(rst_l)
-	);
-	assign dma_buffer_c1_clken = ((bus_cmd_valid & dma_bus_clk_en) | dbg_cmd_valid) | clk_override;
-	assign dma_free_clken = (((((bus_cmd_valid | bus_rsp_valid) | dbg_cmd_valid) | dma_dbg_cmd_done) | dma_dbg_cmd_done_q) | |fifo_valid[DEPTH - 1:0]) | clk_override;
-	rvoclkhdr dma_buffer_c1cgc(
-		.en(dma_buffer_c1_clken),
-		.l1clk(dma_buffer_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr dma_free_cgc(
-		.en(dma_free_clken),
-		.l1clk(dma_free_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr dma_bus_cgc(
-		.en(dma_bus_clk_en),
-		.l1clk(dma_bus_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign wrbuf_en = dma_axi_awvalid & dma_axi_awready;
-	assign wrbuf_data_en = dma_axi_wvalid & dma_axi_wready;
-	assign wrbuf_cmd_sent = bus_cmd_sent & bus_cmd_write;
-	assign wrbuf_rst = wrbuf_cmd_sent & ~wrbuf_en;
-	assign wrbuf_data_rst = wrbuf_cmd_sent & ~wrbuf_data_en;
-	rvdffsc_fpga #(.WIDTH(1)) wrbuf_vldff(
-		.din(1'b1),
-		.dout(wrbuf_vld),
-		.en(wrbuf_en),
-		.clear(wrbuf_rst),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffsc_fpga #(.WIDTH(1)) wrbuf_data_vldff(
-		.din(1'b1),
-		.dout(wrbuf_data_vld),
-		.en(wrbuf_data_en),
-		.clear(wrbuf_data_rst),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(pt[1235-:8])) wrbuf_tagff(
-		.din(dma_axi_awid[pt[1235-:8] - 1:0]),
-		.dout(wrbuf_tag[pt[1235-:8] - 1:0]),
-		.en(wrbuf_en),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(3)) wrbuf_szff(
-		.din(dma_axi_awsize[2:0]),
-		.dout(wrbuf_sz[2:0]),
-		.en(wrbuf_en),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) wrbuf_addrff(
-		.din(dma_axi_awaddr[31:0]),
-		.dout(wrbuf_addr[31:0]),
-		.en(wrbuf_en & dma_bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffe #(.WIDTH(64)) wrbuf_dataff(
-		.din(dma_axi_wdata[63:0]),
-		.dout(wrbuf_data[63:0]),
-		.en(wrbuf_data_en & dma_bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffs_fpga #(.WIDTH(8)) wrbuf_byteenff(
-		.din(dma_axi_wstrb[7:0]),
-		.dout(wrbuf_byteen[7:0]),
-		.en(wrbuf_data_en),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	assign rdbuf_en = dma_axi_arvalid & dma_axi_arready;
-	assign rdbuf_cmd_sent = bus_cmd_sent & ~bus_cmd_write;
-	assign rdbuf_rst = rdbuf_cmd_sent & ~rdbuf_en;
-	rvdffsc_fpga #(.WIDTH(1)) rdbuf_vldff(
-		.din(1'b1),
-		.dout(rdbuf_vld),
-		.en(rdbuf_en),
-		.clear(rdbuf_rst),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(pt[1235-:8])) rdbuf_tagff(
-		.din(dma_axi_arid[pt[1235-:8] - 1:0]),
-		.dout(rdbuf_tag[pt[1235-:8] - 1:0]),
-		.en(rdbuf_en),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(3)) rdbuf_szff(
-		.din(dma_axi_arsize[2:0]),
-		.dout(rdbuf_sz[2:0]),
-		.en(rdbuf_en),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) rdbuf_addrff(
-		.din(dma_axi_araddr[31:0]),
-		.dout(rdbuf_addr[31:0]),
-		.en(rdbuf_en & dma_bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	assign dma_axi_awready = ~(wrbuf_vld & ~wrbuf_cmd_sent);
-	assign dma_axi_wready = ~(wrbuf_data_vld & ~wrbuf_cmd_sent);
-	assign dma_axi_arready = ~(rdbuf_vld & ~rdbuf_cmd_sent);
-	assign bus_cmd_valid = (wrbuf_vld & wrbuf_data_vld) | rdbuf_vld;
-	assign bus_cmd_sent = bus_cmd_valid & dma_fifo_ready;
-	assign bus_cmd_write = axi_mstr_sel;
-	assign bus_cmd_posted_write = 1'b0;
-	assign bus_cmd_addr[31:0] = (axi_mstr_sel ? wrbuf_addr[31:0] : rdbuf_addr[31:0]);
-	assign bus_cmd_sz[2:0] = (axi_mstr_sel ? wrbuf_sz[2:0] : rdbuf_sz[2:0]);
-	assign bus_cmd_wdata[63:0] = wrbuf_data[63:0];
-	assign bus_cmd_byteen[7:0] = wrbuf_byteen[7:0];
-	assign bus_cmd_tag[pt[1235-:8] - 1:0] = (axi_mstr_sel ? wrbuf_tag[pt[1235-:8] - 1:0] : rdbuf_tag[pt[1235-:8] - 1:0]);
-	assign bus_cmd_mid[pt[1250-:9] - 1:0] = {pt[1250-:9] {1'sb0}};
-	assign bus_cmd_prty[pt[1241-:6] - 1:0] = {pt[1241-:6] {1'sb0}};
-	assign axi_mstr_sel = ((wrbuf_vld & wrbuf_data_vld) & rdbuf_vld ? axi_mstr_priority : wrbuf_vld & wrbuf_data_vld);
-	assign axi_mstr_prty_in = ~axi_mstr_priority;
-	assign axi_mstr_prty_en = bus_cmd_sent;
-	rvdffs_fpga #(.WIDTH(1)) mstr_prtyff(
-		.din(axi_mstr_prty_in),
-		.dout(axi_mstr_priority),
-		.en(axi_mstr_prty_en),
-		.clk(dma_bus_clk),
-		.clken(dma_bus_clk_en),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	assign axi_rsp_valid = (fifo_valid[RspPtr] & ~fifo_dbg[RspPtr]) & fifo_done_bus[RspPtr];
-	assign axi_rsp_rdata[63:0] = fifo_data[RspPtr * 64+:64];
-	assign axi_rsp_write = fifo_write[RspPtr];
-	assign axi_rsp_error[1:0] = (fifo_error[RspPtr * 2] ? 2'b10 : (fifo_error[(RspPtr * 2) + 1] ? 2'b11 : 2'b00));
-	assign axi_rsp_tag[pt[1235-:8] - 1:0] = fifo_tag[RspPtr * pt[1235-:8]+:pt[1235-:8]];
-	assign dma_axi_bvalid = axi_rsp_valid & axi_rsp_write;
-	assign dma_axi_bresp[1:0] = axi_rsp_error[1:0];
-	assign dma_axi_bid[pt[1235-:8] - 1:0] = axi_rsp_tag[pt[1235-:8] - 1:0];
-	assign dma_axi_rvalid = axi_rsp_valid & ~axi_rsp_write;
-	assign dma_axi_rresp[1:0] = axi_rsp_error;
-	assign dma_axi_rdata[63:0] = axi_rsp_rdata[63:0];
-	assign dma_axi_rlast = 1'b1;
-	assign dma_axi_rid[pt[1235-:8] - 1:0] = axi_rsp_tag[pt[1235-:8] - 1:0];
-	assign bus_posted_write_done = 1'b0;
-	assign bus_rsp_valid = dma_axi_bvalid | dma_axi_rvalid;
-	assign bus_rsp_sent = (dma_axi_bvalid & dma_axi_bready) | (dma_axi_rvalid & dma_axi_rready);
-	assign dma_active = (wrbuf_vld | rdbuf_vld) | |fifo_valid[DEPTH - 1:0];
-endmodule
-module eb1_exu_alu_ctl (
-	clk,
-	rst_l,
-	scan_mode,
-	flush_upper_x,
-	flush_lower_r,
-	enable,
-	valid_in,
-	ap,
-	csr_ren_in,
-	csr_rddata_in,
-	a_in,
-	b_in,
-	pc_in,
-	pp_in,
-	brimm_in,
-	result_ff,
-	flush_upper_out,
-	flush_final_out,
-	flush_path_out,
-	pc_ff,
-	pred_correct_out,
-	predict_p_out
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire flush_upper_x;
-	input wire flush_lower_r;
-	input wire enable;
-	input wire valid_in;
-	input wire [43:0] ap;
-	input wire csr_ren_in;
-	input wire [31:0] csr_rddata_in;
-	input wire signed [31:0] a_in;
-	input wire [31:0] b_in;
-	input wire [31:1] pc_in;
-	input wire [55:0] pp_in;
-	input wire [12:1] brimm_in;
-	output wire [31:0] result_ff;
-	output wire flush_upper_out;
-	output wire flush_final_out;
-	output wire [31:1] flush_path_out;
-	output wire [31:1] pc_ff;
-	output wire pred_correct_out;
-	output reg [55:0] predict_p_out;
-	wire [31:0] zba_a_in;
-	wire [31:0] aout;
-	wire cout;
-	wire ov;
-	wire neg;
-	wire [31:0] lout;
-	wire [31:0] sout;
-	wire sel_shift;
-	wire sel_adder;
-	wire slt_one;
-	wire actual_taken;
-	wire [31:1] pcout;
-	wire cond_mispredict;
-	wire target_mispredict;
-	wire eq;
-	wire ne;
-	wire lt;
-	wire ge;
-	wire any_jal;
-	wire [1:0] newhist;
-	wire sel_pc;
-	wire [31:0] csr_write_data;
-	wire [31:0] result;
-	wire ap_clz;
-	wire ap_ctz;
-	wire ap_pcnt;
-	wire ap_sext_b;
-	wire ap_sext_h;
-	wire ap_min;
-	wire ap_max;
-	wire ap_pack;
-	wire ap_packu;
-	wire ap_packh;
-	wire ap_rol;
-	wire ap_ror;
-	wire ap_rev;
-	wire ap_rev8;
-	wire ap_orc_b;
-	wire ap_orc16;
-	wire ap_zbb;
-	wire ap_sbset;
-	wire ap_sbclr;
-	wire ap_sbinv;
-	wire ap_sbext;
-	wire ap_slo;
-	wire ap_sro;
-	wire ap_sh1add;
-	wire ap_sh2add;
-	wire ap_sh3add;
-	wire ap_zba;
-	generate
-		if (pt[2207-:5] == 1) begin
-			assign ap_clz = ap[43];
-			assign ap_ctz = ap[42];
-			assign ap_pcnt = ap[41];
-			assign ap_sext_b = ap[40];
-			assign ap_sext_h = ap[39];
-			assign ap_min = ap[36];
-			assign ap_max = ap[35];
-		end
-		else begin
-			assign ap_clz = 1'b0;
-			assign ap_ctz = 1'b0;
-			assign ap_pcnt = 1'b0;
-			assign ap_sext_b = 1'b0;
-			assign ap_sext_h = 1'b0;
-			assign ap_min = 1'b0;
-			assign ap_max = 1'b0;
-		end
-	endgenerate
-	generate
-		if ((pt[2207-:5] == 1) | (pt[2187-:5] == 1)) begin
-			assign ap_pack = ap[34];
-			assign ap_packu = ap[33];
-			assign ap_packh = ap[32];
-			assign ap_rol = ap[31];
-			assign ap_ror = ap[30];
-			assign ap_rev = ap[29] & (b_in[4:0] == 5'b11111);
-			assign ap_rev8 = ap[29] & (b_in[4:0] == 5'b11000);
-			assign ap_orc_b = ap[28] & (b_in[4:0] == 5'b00111);
-			assign ap_orc16 = ap[28] & (b_in[4:0] == 5'b10000);
-			assign ap_zbb = ap[27];
-		end
-		else begin
-			assign ap_pack = 1'b0;
-			assign ap_packu = 1'b0;
-			assign ap_packh = 1'b0;
-			assign ap_rol = 1'b0;
-			assign ap_ror = 1'b0;
-			assign ap_rev = 1'b0;
-			assign ap_rev8 = 1'b0;
-			assign ap_orc_b = 1'b0;
-			assign ap_orc16 = 1'b0;
-			assign ap_zbb = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2177-:5] == 1) begin
-			assign ap_sbset = ap[26];
-			assign ap_sbclr = ap[25];
-			assign ap_sbinv = ap[24];
-			assign ap_sbext = ap[23];
-		end
-		else begin
-			assign ap_sbset = 1'b0;
-			assign ap_sbclr = 1'b0;
-			assign ap_sbinv = 1'b0;
-			assign ap_sbext = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2187-:5] == 1) begin
-			assign ap_slo = ap[38];
-			assign ap_sro = ap[37];
-		end
-		else begin
-			assign ap_slo = 1'b0;
-			assign ap_sro = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2212-:5] == 1) begin
-			assign ap_sh1add = ap[22];
-			assign ap_sh2add = ap[21];
-			assign ap_sh3add = ap[20];
-			assign ap_zba = ap[19];
-		end
-		else begin
-			assign ap_sh1add = 1'b0;
-			assign ap_sh2add = 1'b0;
-			assign ap_sh3add = 1'b0;
-			assign ap_zba = 1'b0;
-		end
-	endgenerate
-	rvdffpcie #(.WIDTH(31)) i_pc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(enable),
-		.din(pc_in[31:1]),
-		.dout(pc_ff[31:1])
-	);
-	rvdffe #(.WIDTH(32)) i_result_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(enable & valid_in),
-		.din(result[31:0]),
-		.dout(result_ff[31:0])
-	);
-	assign zba_a_in[31:0] = ((({32 {ap_sh1add}} & {a_in[30:0], 1'b0}) | ({32 {ap_sh2add}} & {a_in[29:0], 2'b00})) | ({32 {ap_sh3add}} & {a_in[28:0], 3'b000})) | ({32 {~ap_zba}} & a_in[31:0]);
-	wire [31:0] bm;
-	assign bm[31:0] = (ap[7] ? ~b_in[31:0] : b_in[31:0]);
-	assign {cout, aout[31:0]} = ({1'b0, zba_a_in[31:0]} + {1'b0, bm[31:0]}) + {32'b00000000000000000000000000000000, ap[7]};
-	assign ov = ((~a_in[31] & ~bm[31]) & aout[31]) | ((a_in[31] & bm[31]) & ~aout[31]);
-	assign lt = (~ap[5] & (neg ^ ov)) | (ap[5] & ~cout);
-	assign eq = a_in[31:0] == b_in[31:0];
-	assign ne = ~eq;
-	assign neg = aout[31];
-	assign ge = ~lt;
-	assign lout[31:0] = (((((({32 {csr_ren_in}} & csr_rddata_in[31:0]) | (({32 {ap[18] & ~ap_zbb}} & a_in[31:0]) & b_in[31:0])) | ({32 {ap[17] & ~ap_zbb}} & (a_in[31:0] | b_in[31:0]))) | ({32 {ap[16] & ~ap_zbb}} & (a_in[31:0] ^ b_in[31:0]))) | (({32 {ap[18] & ap_zbb}} & a_in[31:0]) & ~b_in[31:0])) | ({32 {ap[17] & ap_zbb}} & (a_in[31:0] | ~b_in[31:0]))) | ({32 {ap[16] & ap_zbb}} & (a_in[31:0] ^ ~b_in[31:0]));
-	wire [5:0] shift_amount;
-	wire [31:0] shift_mask;
-	wire [62:0] shift_extend;
-	wire [62:0] shift_long;
-	assign shift_amount[5:0] = ((((((({6 {ap[15]}} & (6'd32 - {1'b0, b_in[4:0]})) | ({6 {ap[14]}} & {1'b0, b_in[4:0]})) | ({6 {ap[13]}} & {1'b0, b_in[4:0]})) | ({6 {ap_rol}} & (6'd32 - {1'b0, b_in[4:0]}))) | ({6 {ap_ror}} & {1'b0, b_in[4:0]})) | ({6 {ap_slo}} & (6'd32 - {1'b0, b_in[4:0]}))) | ({6 {ap_sro}} & {1'b0, b_in[4:0]})) | ({6 {ap_sbext}} & {1'b0, b_in[4:0]});
-	assign shift_mask[31:0] = 32'hffffffff << ({5 {ap[15] | ap_slo}} & b_in[4:0]);
-	assign shift_extend[31:0] = a_in[31:0];
-	assign shift_extend[62:32] = ((((({31 {ap[13]}} & {31 {a_in[31]}}) | ({31 {ap[15]}} & a_in[30:0])) | ({31 {ap_rol}} & a_in[30:0])) | ({31 {ap_ror}} & a_in[30:0])) | ({31 {ap_slo}} & a_in[30:0])) | ({31 {ap_sro}} & {31 {1'b1}});
-	assign shift_long[62:0] = shift_extend[62:0] >> shift_amount[4:0];
-	assign sout[31:0] = (shift_long[31:0] & shift_mask[31:0]) | ({32 {ap_slo}} & ~shift_mask[31:0]);
-	wire bitmanip_clz_ctz_sel;
-	wire [31:0] bitmanip_a_reverse_ff;
-	wire [31:0] bitmanip_lzd_in;
-	reg [5:0] bitmanip_dw_lzd_enc;
-	wire [5:0] bitmanip_clz_ctz_result;
-	assign bitmanip_clz_ctz_sel = ap_clz | ap_ctz;
-	assign bitmanip_a_reverse_ff[31:0] = {a_in[0], a_in[1], a_in[2], a_in[3], a_in[4], a_in[5], a_in[6], a_in[7], a_in[8], a_in[9], a_in[10], a_in[11], a_in[12], a_in[13], a_in[14], a_in[15], a_in[16], a_in[17], a_in[18], a_in[19], a_in[20], a_in[21], a_in[22], a_in[23], a_in[24], a_in[25], a_in[26], a_in[27], a_in[28], a_in[29], a_in[30], a_in[31]};
-	assign bitmanip_lzd_in[31:0] = ({32 {ap_clz}} & a_in[31:0]) | ({32 {ap_ctz}} & bitmanip_a_reverse_ff[31:0]);
-	reg [31:0] bitmanip_lzd_os;
-	integer i;
-	reg found;
-	always @(*) begin
-		bitmanip_lzd_os[31:0] = bitmanip_lzd_in[31:0];
-		bitmanip_dw_lzd_enc[5:0] = 6'b000000;
-		found = 1'b0;
-		begin : sv2v_autoblock_42
-			reg signed [31:0] i;
-			for (i = 0; (i < 32) && (found == 0); i = i + 1)
-				if (bitmanip_lzd_os[31] == 1'b0) begin
-					bitmanip_dw_lzd_enc[5:0] = bitmanip_dw_lzd_enc[5:0] + 6'b000001;
-					bitmanip_lzd_os[31:0] = bitmanip_lzd_os[31:0] << 1;
-				end
-				else
-					found = 1'b1;
-		end
-	end
-	assign bitmanip_clz_ctz_result[5:0] = {6 {bitmanip_clz_ctz_sel}} & {bitmanip_dw_lzd_enc[5], {5 {~bitmanip_dw_lzd_enc[5]}} & bitmanip_dw_lzd_enc[4:0]};
-	reg [5:0] bitmanip_pcnt;
-	wire [5:0] bitmanip_pcnt_result;
-	integer bitmanip_pcnt_i;
-	always @(*) begin
-		bitmanip_pcnt[5:0] = 6'b000000;
-		for (bitmanip_pcnt_i = 0; bitmanip_pcnt_i < 32; bitmanip_pcnt_i = bitmanip_pcnt_i + 1)
-			bitmanip_pcnt[5:0] = bitmanip_pcnt[5:0] + {5'b00000, a_in[bitmanip_pcnt_i]};
-	end
-	assign bitmanip_pcnt_result[5:0] = {6 {ap_pcnt}} & bitmanip_pcnt[5:0];
-	wire [31:0] bitmanip_sext_result;
-	assign bitmanip_sext_result[31:0] = ({32 {ap_sext_b}} & {{24 {a_in[7]}}, a_in[7:0]}) | ({32 {ap_sext_h}} & {{16 {a_in[15]}}, a_in[15:0]});
-	wire bitmanip_minmax_sel;
-	wire [31:0] bitmanip_minmax_result;
-	assign bitmanip_minmax_sel = ap_min | ap_max;
-	wire bitmanip_minmax_sel_a;
-	assign bitmanip_minmax_sel_a = ge ^ ap_min;
-	assign bitmanip_minmax_result[31:0] = ({32 {bitmanip_minmax_sel & bitmanip_minmax_sel_a}} & a_in[31:0]) | ({32 {bitmanip_minmax_sel & ~bitmanip_minmax_sel_a}} & b_in[31:0]);
-	wire [31:0] bitmanip_pack_result;
-	wire [31:0] bitmanip_packu_result;
-	wire [31:0] bitmanip_packh_result;
-	assign bitmanip_pack_result[31:0] = {32 {ap_pack}} & {b_in[15:0], a_in[15:0]};
-	assign bitmanip_packu_result[31:0] = {32 {ap_packu}} & {b_in[31:16], a_in[31:16]};
-	assign bitmanip_packh_result[31:0] = {32 {ap_packh}} & {16'b0000000000000000, b_in[7:0], a_in[7:0]};
-	wire [31:0] bitmanip_rev_result;
-	wire [31:0] bitmanip_rev8_result;
-	wire [31:0] bitmanip_orc_b_result;
-	wire [31:0] bitmanip_orc16_result;
-	assign bitmanip_rev_result[31:0] = {32 {ap_rev}} & {a_in[0], a_in[1], a_in[2], a_in[3], a_in[4], a_in[5], a_in[6], a_in[7], a_in[8], a_in[9], a_in[10], a_in[11], a_in[12], a_in[13], a_in[14], a_in[15], a_in[16], a_in[17], a_in[18], a_in[19], a_in[20], a_in[21], a_in[22], a_in[23], a_in[24], a_in[25], a_in[26], a_in[27], a_in[28], a_in[29], a_in[30], a_in[31]};
-	assign bitmanip_rev8_result[31:0] = {32 {ap_rev8}} & {a_in[7:0], a_in[15:8], a_in[23:16], a_in[31:24]};
-	assign bitmanip_orc_b_result[31:0] = {32 {ap_orc_b}} & {{8 {|a_in[31:24]}}, {8 {|a_in[23:16]}}, {8 {|a_in[15:8]}}, {8 {|a_in[7:0]}}};
-	assign bitmanip_orc16_result[31:0] = {32 {ap_orc16}} & {{a_in[31:16] | a_in[15:0]}, {a_in[31:16] | a_in[15:0]}};
-	wire [31:0] bitmanip_sb_1hot;
-	wire [31:0] bitmanip_sb_data;
-	assign bitmanip_sb_1hot[31:0] = 32'h00000001 << b_in[4:0];
-	assign bitmanip_sb_data[31:0] = (({32 {ap_sbset}} & (a_in[31:0] | bitmanip_sb_1hot[31:0])) | ({32 {ap_sbclr}} & (a_in[31:0] & ~bitmanip_sb_1hot[31:0]))) | ({32 {ap_sbinv}} & (a_in[31:0] ^ bitmanip_sb_1hot[31:0]));
-	assign sel_shift = (((((ap[15] | ap[14]) | ap[13]) | ap_slo) | ap_sro) | ap_rol) | ap_ror;
-	assign sel_adder = ((((ap[8] | ap[7]) | ap_zba) & ~ap[6]) & ~ap_min) & ~ap_max;
-	assign sel_pc = ((ap[4] | pp_in[34]) | pp_in[33]) | pp_in[31];
-	assign csr_write_data[31:0] = (ap[0] ? b_in[31:0] : a_in[31:0]);
-	assign slt_one = ap[6] & lt;
-	assign result[31:0] = (((((((((((((((((lout[31:0] | ({32 {sel_shift}} & sout[31:0])) | ({32 {sel_adder}} & aout[31:0])) | ({32 {sel_pc}} & {pcout[31:1], 1'b0})) | ({32 {ap[1]}} & csr_write_data[31:0])) | {31'b0000000000000000000000000000000, slt_one}) | ({32 {ap_sbext}} & {31'b0000000000000000000000000000000, sout[0]})) | {26'b00000000000000000000000000, bitmanip_clz_ctz_result[5:0]}) | {26'b00000000000000000000000000, bitmanip_pcnt_result[5:0]}) | bitmanip_sext_result[31:0]) | bitmanip_minmax_result[31:0]) | bitmanip_pack_result[31:0]) | bitmanip_packu_result[31:0]) | bitmanip_packh_result[31:0]) | bitmanip_rev_result[31:0]) | bitmanip_rev8_result[31:0]) | bitmanip_orc_b_result[31:0]) | bitmanip_orc16_result[31:0]) | bitmanip_sb_data[31:0];
-	assign any_jal = ((ap[4] | pp_in[34]) | pp_in[33]) | pp_in[31];
-	assign actual_taken = ((((ap[12] & eq) | (ap[11] & ne)) | (ap[10] & lt)) | (ap[9] & ge)) | any_jal;
-	rvbradder ibradder(
-		.pc(pc_in[31:1]),
-		.offset(brimm_in[12:1]),
-		.dout(pcout[31:1])
-	);
-	assign pred_correct_out = (((valid_in & ap[2]) & ~actual_taken) & ~any_jal) | (((valid_in & ap[3]) & actual_taken) & ~any_jal);
-	assign flush_path_out[31:1] = (any_jal ? aout[31:1] : pcout[31:1]);
-	assign cond_mispredict = (ap[3] & ~actual_taken) | (ap[2] & actual_taken);
-	assign target_mispredict = pp_in[31] & (pp_in[30:0] != aout[31:1]);
-	assign flush_upper_out = ((((ap[4] | cond_mispredict) | target_mispredict) & valid_in) & ~flush_upper_x) & ~flush_lower_r;
-	assign flush_final_out = ((((ap[4] | cond_mispredict) | target_mispredict) & valid_in) & ~flush_upper_x) | flush_lower_r;
-	assign newhist[1] = (pp_in[51] & pp_in[50]) | (~pp_in[50] & actual_taken);
-	assign newhist[0] = (~pp_in[51] & ~actual_taken) | (pp_in[51] & actual_taken);
-	always @(*) begin
-		predict_p_out = pp_in;
-		predict_p_out[55] = (~flush_upper_x & ~flush_lower_r) & (cond_mispredict | target_mispredict);
-		predict_p_out[54] = actual_taken;
-		predict_p_out[51] = newhist[1];
-		predict_p_out[50] = newhist[0];
-	end
-endmodule
-module eb1_exu_div_ctl (
-	clk,
-	rst_l,
-	scan_mode,
-	dp,
-	dividend,
-	divisor,
-	cancel,
-	finish_dly,
-	out
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire [2:0] dp;
-	input wire [31:0] dividend;
-	input wire [31:0] divisor;
-	input wire cancel;
-	output wire finish_dly;
-	output wire [31:0] out;
-	wire [31:0] out_raw;
-	assign out[31:0] = {32 {finish_dly}} & out_raw[31:0];
-	generate
-		if (pt[1262-:5] == 0) eb1_exu_div_existing_1bit_cheapshortq i_existing_1bit_div_cheapshortq(
-			.clk(clk),
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.cancel(cancel),
-			.valid_in(dp[2]),
-			.signed_in(~dp[1]),
-			.rem_in(dp[0]),
-			.dividend_in(dividend[31:0]),
-			.divisor_in(divisor[31:0]),
-			.valid_out(finish_dly),
-			.data_out(out_raw[31:0])
-		);
-	endgenerate
-	generate
-		if ((pt[1262-:5] == 1) & (pt[1269-:7] == 1)) eb1_exu_div_new_1bit_fullshortq i_new_1bit_div_fullshortq(
-			.clk(clk),
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.cancel(cancel),
-			.valid_in(dp[2]),
-			.signed_in(~dp[1]),
-			.rem_in(dp[0]),
-			.dividend_in(dividend[31:0]),
-			.divisor_in(divisor[31:0]),
-			.valid_out(finish_dly),
-			.data_out(out_raw[31:0])
-		);
-	endgenerate
-	generate
-		if ((pt[1262-:5] == 1) & (pt[1269-:7] == 2)) eb1_exu_div_new_2bit_fullshortq i_new_2bit_div_fullshortq(
-			.clk(clk),
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.cancel(cancel),
-			.valid_in(dp[2]),
-			.signed_in(~dp[1]),
-			.rem_in(dp[0]),
-			.dividend_in(dividend[31:0]),
-			.divisor_in(divisor[31:0]),
-			.valid_out(finish_dly),
-			.data_out(out_raw[31:0])
-		);
-	endgenerate
-	generate
-		if ((pt[1262-:5] == 1) & (pt[1269-:7] == 3)) eb1_exu_div_new_3bit_fullshortq i_new_3bit_div_fullshortq(
-			.clk(clk),
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.cancel(cancel),
-			.valid_in(dp[2]),
-			.signed_in(~dp[1]),
-			.rem_in(dp[0]),
-			.dividend_in(dividend[31:0]),
-			.divisor_in(divisor[31:0]),
-			.valid_out(finish_dly),
-			.data_out(out_raw[31:0])
-		);
-	endgenerate
-	generate
-		if ((pt[1262-:5] == 1) & (pt[1269-:7] == 4)) eb1_exu_div_new_4bit_fullshortq i_new_4bit_div_fullshortq(
-			.clk(clk),
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.cancel(cancel),
-			.valid_in(dp[2]),
-			.signed_in(~dp[1]),
-			.rem_in(dp[0]),
-			.dividend_in(dividend[31:0]),
-			.divisor_in(divisor[31:0]),
-			.valid_out(finish_dly),
-			.data_out(out_raw[31:0])
-		);
-	endgenerate
-endmodule
-module eb1_exu_div_existing_1bit_cheapshortq (
-	clk,
-	rst_l,
-	scan_mode,
-	cancel,
-	valid_in,
-	signed_in,
-	rem_in,
-	dividend_in,
-	divisor_in,
-	valid_out,
-	data_out
-);
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire cancel;
-	input wire valid_in;
-	input wire signed_in;
-	input wire rem_in;
-	input wire [31:0] dividend_in;
-	input wire [31:0] divisor_in;
-	output wire valid_out;
-	output wire [31:0] data_out;
-	wire div_clken;
-	wire run_in;
-	wire run_state;
-	wire [5:0] count_in;
-	wire [5:0] count;
-	wire [32:0] m_ff;
-	wire qff_enable;
-	wire aff_enable;
-	wire [32:0] q_in;
-	wire [32:0] q_ff;
-	wire [32:0] a_in;
-	wire [32:0] a_ff;
-	wire [32:0] m_eff;
-	wire [32:0] a_shift;
-	wire dividend_neg_ff;
-	wire divisor_neg_ff;
-	wire [31:0] dividend_comp;
-	wire [31:0] dividend_eff;
-	wire [31:0] q_ff_comp;
-	wire [31:0] q_ff_eff;
-	wire [31:0] a_ff_comp;
-	wire [31:0] a_ff_eff;
-	wire sign_ff;
-	wire sign_eff;
-	wire rem_ff;
-	wire add;
-	wire [32:0] a_eff;
-	wire [64:0] a_eff_shift;
-	wire rem_correct;
-	wire valid_ff_x;
-	wire valid_x;
-	wire finish;
-	wire finish_ff;
-	wire smallnum_case;
-	wire smallnum_case_ff;
-	wire [3:0] smallnum;
-	wire [3:0] smallnum_ff;
-	wire m_already_comp;
-	wire [4:0] a_cls;
-	wire [4:0] b_cls;
-	wire [5:0] shortq_shift;
-	wire [5:0] shortq_shift_ff;
-	wire [5:0] shortq;
-	wire shortq_enable;
-	wire shortq_enable_ff;
-	wire [32:0] short_dividend;
-	wire [3:0] shortq_raw;
-	wire [3:0] shortq_shift_xx;
-	rvdffe #(.WIDTH(23)) i_misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(div_clken),
-		.din({valid_in & ~cancel, finish & ~cancel, run_in, count_in[5:0], (valid_in & dividend_in[31]) | (~valid_in & dividend_neg_ff), (valid_in & divisor_in[31]) | (~valid_in & divisor_neg_ff), (valid_in & sign_eff) | (~valid_in & sign_ff), (valid_in & rem_in) | (~valid_in & rem_ff), smallnum_case, smallnum[3:0], shortq_enable, shortq_shift[3:0]}),
-		.dout({valid_ff_x, finish_ff, run_state, count[5:0], dividend_neg_ff, divisor_neg_ff, sign_ff, rem_ff, smallnum_case_ff, smallnum_ff[3:0], shortq_enable_ff, shortq_shift_xx[3:0]})
-	);
-	rvdffe #(.WIDTH(33)) mff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(valid_in),
-		.din({signed_in & divisor_in[31], divisor_in[31:0]}),
-		.dout(m_ff[32:0])
-	);
-	rvdffe #(.WIDTH(33)) qff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qff_enable),
-		.din(q_in[32:0]),
-		.dout(q_ff[32:0])
-	);
-	rvdffe #(.WIDTH(33)) aff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(aff_enable),
-		.din(a_in[32:0]),
-		.dout(a_ff[32:0])
-	);
-	rvtwoscomp #(.WIDTH(32)) i_dividend_comp(
-		.din(q_ff[31:0]),
-		.dout(dividend_comp[31:0])
-	);
-	rvtwoscomp #(.WIDTH(32)) i_q_ff_comp(
-		.din(q_ff[31:0]),
-		.dout(q_ff_comp[31:0])
-	);
-	rvtwoscomp #(.WIDTH(32)) i_a_ff_comp(
-		.din(a_ff[31:0]),
-		.dout(a_ff_comp[31:0])
-	);
-	assign valid_x = valid_ff_x & ~cancel;
-	assign smallnum_case = (((((q_ff[31:4] == 28'b0000000000000000000000000000) & (m_ff[31:4] == 28'b0000000000000000000000000000)) & (m_ff[31:0] != 32'b00000000000000000000000000000000)) & ~rem_ff) & valid_x) | ((((q_ff[31:0] == 32'b00000000000000000000000000000000) & (m_ff[31:0] != 32'b00000000000000000000000000000000)) & ~rem_ff) & valid_x);
-	assign smallnum[3] = ((q_ff[3] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[1];
-	assign smallnum[2] = ((((q_ff[3] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[0]) | (((q_ff[2] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[1])) | (((q_ff[3] & q_ff[2]) & ~m_ff[3]) & ~m_ff[2]);
-	assign smallnum[1] = ((((((((((q_ff[2] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[0]) | (((q_ff[1] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[1])) | (((q_ff[3] & ~m_ff[3]) & ~m_ff[1]) & ~m_ff[0])) | (((((q_ff[3] & ~q_ff[2]) & ~m_ff[3]) & ~m_ff[2]) & m_ff[1]) & m_ff[0])) | ((((~q_ff[3] & q_ff[2]) & q_ff[1]) & ~m_ff[3]) & ~m_ff[2])) | (((q_ff[3] & q_ff[2]) & ~m_ff[3]) & ~m_ff[0])) | ((((q_ff[3] & q_ff[2]) & ~m_ff[3]) & m_ff[2]) & ~m_ff[1])) | (((q_ff[3] & q_ff[1]) & ~m_ff[3]) & ~m_ff[1])) | ((((q_ff[3] & q_ff[2]) & q_ff[1]) & ~m_ff[3]) & m_ff[2]);
-	assign smallnum[0] = ((((((((((((((((((((((((((((q_ff[2] & q_ff[1]) & q_ff[0]) & ~m_ff[3]) & ~m_ff[1]) | (((((q_ff[3] & ~q_ff[2]) & q_ff[0]) & ~m_ff[3]) & m_ff[1]) & m_ff[0])) | (((q_ff[2] & ~m_ff[3]) & ~m_ff[1]) & ~m_ff[0])) | (((q_ff[1] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[0])) | (((q_ff[0] & ~m_ff[3]) & ~m_ff[2]) & ~m_ff[1])) | ((((((~q_ff[3] & q_ff[2]) & ~q_ff[1]) & ~m_ff[3]) & ~m_ff[2]) & m_ff[1]) & m_ff[0])) | ((((~q_ff[3] & q_ff[2]) & q_ff[1]) & ~m_ff[3]) & ~m_ff[0])) | (((q_ff[3] & ~m_ff[2]) & ~m_ff[1]) & ~m_ff[0])) | ((((q_ff[3] & ~q_ff[2]) & ~m_ff[3]) & m_ff[2]) & m_ff[1])) | (((((~q_ff[3] & q_ff[2]) & q_ff[1]) & ~m_ff[3]) & m_ff[2]) & ~m_ff[1])) | ((((~q_ff[3] & q_ff[2]) & q_ff[0]) & ~m_ff[3]) & ~m_ff[1])) | (((((q_ff[3] & ~q_ff[2]) & ~q_ff[1]) & ~m_ff[3]) & m_ff[2]) & m_ff[0])) | ((((~q_ff[2] & q_ff[1]) & q_ff[0]) & ~m_ff[3]) & ~m_ff[2])) | (((q_ff[3] & q_ff[2]) & ~m_ff[1]) & ~m_ff[0])) | (((q_ff[3] & q_ff[1]) & ~m_ff[2]) & ~m_ff[0])) | (((((~q_ff[3] & q_ff[2]) & q_ff[1]) & q_ff[0]) & ~m_ff[3]) & m_ff[2])) | (((q_ff[3] & q_ff[2]) & m_ff[3]) & ~m_ff[2])) | ((((q_ff[3] & q_ff[1]) & m_ff[3]) & ~m_ff[2]) & ~m_ff[1])) | (((q_ff[3] & q_ff[0]) & ~m_ff[2]) & ~m_ff[1])) | (((((q_ff[3] & ~q_ff[1]) & ~m_ff[3]) & m_ff[2]) & m_ff[1]) & m_ff[0])) | ((((q_ff[3] & q_ff[2]) & q_ff[1]) & m_ff[3]) & ~m_ff[0])) | ((((q_ff[3] & q_ff[2]) & q_ff[1]) & m_ff[3]) & ~m_ff[1])) | ((((q_ff[3] & q_ff[2]) & q_ff[0]) & m_ff[3]) & ~m_ff[1])) | ((((q_ff[3] & ~q_ff[2]) & q_ff[1]) & ~m_ff[3]) & m_ff[1])) | (((q_ff[3] & q_ff[1]) & q_ff[0]) & ~m_ff[2])) | ((((q_ff[3] & q_ff[2]) & q_ff[1]) & q_ff[0]) & m_ff[3]);
-	assign short_dividend[31:0] = q_ff[31:0];
-	assign short_dividend[32] = sign_ff & q_ff[31];
-	assign a_cls[4:3] = 2'b00;
-	assign a_cls[2] = (~short_dividend[32] & (short_dividend[31:24] != {8 {1'b0}})) | (short_dividend[32] & (short_dividend[31:23] != {9 {1'b1}}));
-	assign a_cls[1] = (~short_dividend[32] & (short_dividend[23:16] != {8 {1'b0}})) | (short_dividend[32] & (short_dividend[22:15] != {8 {1'b1}}));
-	assign a_cls[0] = (~short_dividend[32] & (short_dividend[15:8] != {8 {1'b0}})) | (short_dividend[32] & (short_dividend[14:7] != {8 {1'b1}}));
-	assign b_cls[4:3] = 2'b00;
-	assign b_cls[2] = (~m_ff[32] & (m_ff[31:24] != {8 {1'b0}})) | (m_ff[32] & (m_ff[31:24] != {8 {1'b1}}));
-	assign b_cls[1] = (~m_ff[32] & (m_ff[23:16] != {8 {1'b0}})) | (m_ff[32] & (m_ff[23:16] != {8 {1'b1}}));
-	assign b_cls[0] = (~m_ff[32] & (m_ff[15:8] != {8 {1'b0}})) | (m_ff[32] & (m_ff[15:8] != {8 {1'b1}}));
-	assign shortq_raw[3] = ((((((a_cls[2:1] == 2'b01) & (b_cls[2] == 1'b1)) | ((a_cls[2:0] == 3'b001) & (b_cls[2] == 1'b1))) | ((a_cls[2:0] == 3'b000) & (b_cls[2] == 1'b1))) | ((a_cls[2:0] == 3'b001) & (b_cls[2:1] == 2'b01))) | ((a_cls[2:0] == 3'b000) & (b_cls[2:1] == 2'b01))) | ((a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b001));
-	assign shortq_raw[2] = ((((a_cls[2] == 1'b1) & (b_cls[2] == 1'b1)) | ((a_cls[2:1] == 2'b01) & (b_cls[2:1] == 2'b01))) | ((a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b001))) | ((a_cls[2:0] == 3'b000) & (b_cls[2:0] == 3'b000));
-	assign shortq_raw[1] = (((a_cls[2] == 1'b1) & (b_cls[2:1] == 2'b01)) | ((a_cls[2:1] == 2'b01) & (b_cls[2:0] == 3'b001))) | ((a_cls[2:0] == 3'b001) & (b_cls[2:0] == 3'b000));
-	assign shortq_raw[0] = ((a_cls[2] == 1'b1) & (b_cls[2:0] == 3'b001)) | ((a_cls[2:1] == 2'b01) & (b_cls[2:0] == 3'b000));
-	assign shortq_enable = (valid_ff_x & (m_ff[31:0] != 32'b00000000000000000000000000000000)) & (shortq_raw[3:0] != 4'b0000);
-	assign shortq_shift[3:0] = {4 {shortq_enable}} & shortq_raw[3:0];
-	assign shortq[5:0] = 6'b000000;
-	assign shortq_shift[5:4] = 2'b00;
-	assign shortq_shift_ff[5] = 1'b0;
-	assign shortq_shift_ff[4:0] = ((({5 {shortq_shift_xx[3]}} & 5'b11111) | ({5 {shortq_shift_xx[2]}} & 5'b11000)) | ({5 {shortq_shift_xx[1]}} & 5'b10000)) | ({5 {shortq_shift_xx[0]}} & 5'b01000);
-	assign div_clken = ((valid_in | run_state) | finish) | finish_ff;
-	assign run_in = ((valid_in | run_state) & ~finish) & ~cancel;
-	assign count_in[5:0] = {6 {((run_state & ~finish) & ~cancel) & ~shortq_enable}} & ((count[5:0] + {1'b0, shortq_shift_ff[4:0]}) + 6'd1);
-	assign finish = smallnum_case | (~rem_ff ? count[5:0] == 6'd32 : count[5:0] == 6'd33);
-	assign valid_out = finish_ff & ~cancel;
-	assign sign_eff = signed_in & (divisor_in[31:0] != 32'b00000000000000000000000000000000);
-	assign q_in[32:0] = (({33 {~run_state}} & {1'b0, dividend_in[31:0]}) | ({33 {run_state & (valid_ff_x | shortq_enable_ff)}} & ({dividend_eff[31:0], ~a_in[32]} << shortq_shift_ff[4:0]))) | ({33 {run_state & ~(valid_ff_x | shortq_enable_ff)}} & {q_ff[31:0], ~a_in[32]});
-	assign qff_enable = valid_in | (run_state & ~shortq_enable);
-	assign dividend_eff[31:0] = (sign_ff & dividend_neg_ff ? dividend_comp[31:0] : q_ff[31:0]);
-	assign m_eff[32:0] = (add ? m_ff[32:0] : ~m_ff[32:0]);
-	assign a_eff_shift[64:0] = {33'b000000000000000000000000000000000, dividend_eff[31:0]} << shortq_shift_ff[4:0];
-	assign a_eff[32:0] = (({33 {rem_correct}} & a_ff[32:0]) | ({33 {~rem_correct & ~shortq_enable_ff}} & {a_ff[31:0], q_ff[32]})) | ({33 {~rem_correct & shortq_enable_ff}} & a_eff_shift[64:32]);
-	assign a_shift[32:0] = {33 {run_state}} & a_eff[32:0];
-	assign a_in[32:0] = {33 {run_state}} & ((a_shift[32:0] + m_eff[32:0]) + {32'b00000000000000000000000000000000, ~add});
-	assign aff_enable = (valid_in | ((run_state & ~shortq_enable) & (count[5:0] != 6'd33))) | rem_correct;
-	assign m_already_comp = divisor_neg_ff & sign_ff;
-	assign add = (a_ff[32] | rem_correct) ^ m_already_comp;
-	assign rem_correct = ((count[5:0] == 6'd33) & rem_ff) & a_ff[32];
-	assign q_ff_eff[31:0] = (sign_ff & (dividend_neg_ff ^ divisor_neg_ff) ? q_ff_comp[31:0] : q_ff[31:0]);
-	assign a_ff_eff[31:0] = (sign_ff & dividend_neg_ff ? a_ff_comp[31:0] : a_ff[31:0]);
-	assign data_out[31:0] = (({32 {smallnum_case_ff}} & {28'b0000000000000000000000000000, smallnum_ff[3:0]}) | ({32 {rem_ff}} & a_ff_eff[31:0])) | ({32 {~smallnum_case_ff & ~rem_ff}} & q_ff_eff[31:0]);
-endmodule
-module eb1_exu_div_new_1bit_fullshortq (
-	clk,
-	rst_l,
-	scan_mode,
-	cancel,
-	valid_in,
-	signed_in,
-	rem_in,
-	dividend_in,
-	divisor_in,
-	valid_out,
-	data_out
-);
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire cancel;
-	input wire valid_in;
-	input wire signed_in;
-	input wire rem_in;
-	input wire [31:0] dividend_in;
-	input wire [31:0] divisor_in;
-	output wire valid_out;
-	output wire [31:0] data_out;
-	wire valid_ff_in;
-	wire valid_ff;
-	wire finish_raw;
-	wire finish;
-	wire finish_ff;
-	wire running_state;
-	wire misc_enable;
-	wire [2:0] control_in;
-	wire [2:0] control_ff;
-	wire dividend_sign_ff;
-	wire divisor_sign_ff;
-	wire rem_ff;
-	wire count_enable;
-	wire [6:0] count_in;
-	wire [6:0] count_ff;
-	wire smallnum_case;
-	wire [3:0] smallnum;
-	wire a_enable;
-	wire a_shift;
-	wire [31:0] a_in;
-	wire [31:0] a_ff;
-	wire b_enable;
-	wire b_twos_comp;
-	wire [32:0] b_in;
-	wire [32:0] b_ff;
-	wire [31:0] q_in;
-	wire [31:0] q_ff;
-	wire rq_enable;
-	wire r_sign_sel;
-	wire r_restore_sel;
-	wire r_adder_sel;
-	wire [31:0] r_in;
-	wire [31:0] r_ff;
-	wire twos_comp_q_sel;
-	wire twos_comp_b_sel;
-	wire [31:0] twos_comp_in;
-	wire [31:0] twos_comp_out;
-	wire quotient_set;
-	wire [32:0] adder_out;
-	wire [63:0] ar_shifted;
-	wire [5:0] shortq;
-	wire [4:0] shortq_shift;
-	wire [4:0] shortq_shift_ff;
-	wire shortq_enable;
-	wire shortq_enable_ff;
-	wire [32:0] shortq_dividend;
-	wire by_zero_case;
-	wire by_zero_case_ff;
-	rvdffe #(.WIDTH(19)) i_misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(misc_enable),
-		.din({valid_ff_in, control_in[2:0], by_zero_case, shortq_enable, shortq_shift[4:0], finish, count_in[6:0]}),
-		.dout({valid_ff, control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]})
-	);
-	rvdffe #(.WIDTH(32)) i_a_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(a_enable),
-		.din(a_in[31:0]),
-		.dout(a_ff[31:0])
-	);
-	rvdffe #(.WIDTH(33)) i_b_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(b_enable),
-		.din(b_in[32:0]),
-		.dout(b_ff[32:0])
-	);
-	rvdffe #(.WIDTH(32)) i_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(r_in[31:0]),
-		.dout(r_ff[31:0])
-	);
-	rvdffe #(.WIDTH(32)) i_q_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(q_in[31:0]),
-		.dout(q_ff[31:0])
-	);
-	assign valid_ff_in = valid_in & ~cancel;
-	assign control_in[2] = (~valid_in & control_ff[2]) | ((valid_in & signed_in) & dividend_in[31]);
-	assign control_in[1] = (~valid_in & control_ff[1]) | ((valid_in & signed_in) & divisor_in[31]);
-	assign control_in[0] = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-	assign dividend_sign_ff = control_ff[2];
-	assign divisor_sign_ff = control_ff[1];
-	assign rem_ff = control_ff[0];
-	assign by_zero_case = valid_ff & (b_ff[31:0] == 32'b00000000000000000000000000000000);
-	assign misc_enable = (((valid_in | valid_ff) | cancel) | running_state) | finish_ff;
-	assign running_state = |count_ff[6:0] | shortq_enable_ff;
-	assign finish_raw = (smallnum_case | by_zero_case) | (count_ff[6:0] == 7'd32);
-	assign finish = finish_raw & ~cancel;
-	assign count_enable = ((((valid_ff | running_state) & ~finish) & ~finish_ff) & ~cancel) & ~shortq_enable;
-	assign count_in[6:0] = {7 {count_enable}} & ((count_ff[6:0] + 7'b0000001) + {2'b00, shortq_shift_ff[4:0]});
-	assign a_enable = valid_in | running_state;
-	assign a_shift = running_state & ~shortq_enable_ff;
-	assign ar_shifted[63:0] = {{32 {dividend_sign_ff}}, a_ff[31:0]} << shortq_shift_ff[4:0];
-	assign a_in[31:0] = (({32 {~a_shift & ~shortq_enable_ff}} & dividend_in[31:0]) | ({32 {a_shift}} & {a_ff[30:0], 1'b0})) | ({32 {shortq_enable_ff}} & ar_shifted[31:0]);
-	assign b_enable = valid_in | b_twos_comp;
-	assign b_twos_comp = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign b_in[32:0] = ({33 {~b_twos_comp}} & {signed_in & divisor_in[31], divisor_in[31:0]}) | ({33 {b_twos_comp}} & {~divisor_sign_ff, twos_comp_out[31:0]});
-	assign rq_enable = (valid_in | valid_ff) | running_state;
-	assign r_sign_sel = (valid_ff & dividend_sign_ff) & ~by_zero_case;
-	assign r_restore_sel = (running_state & ~quotient_set) & ~shortq_enable_ff;
-	assign r_adder_sel = (running_state & quotient_set) & ~shortq_enable_ff;
-	assign r_in[31:0] = (((({32 {r_sign_sel}} & 32'hffffffff) | ({32 {r_restore_sel}} & {r_ff[30:0], a_ff[31]})) | ({32 {r_adder_sel}} & adder_out[31:0])) | ({32 {shortq_enable_ff}} & ar_shifted[63:32])) | ({32 {by_zero_case}} & a_ff[31:0]);
-	assign q_in[31:0] = (({32 {~valid_ff}} & {q_ff[30:0], quotient_set}) | ({32 {smallnum_case}} & {28'b0000000000000000000000000000, smallnum[3:0]})) | ({32 {by_zero_case}} & {32 {1'b1}});
-	assign adder_out[32:0] = {r_ff[31:0], a_ff[31]} + {b_ff[32:0]};
-	assign quotient_set = (~adder_out[32] ^ dividend_sign_ff) | ((a_ff[30:0] == 31'b0000000000000000000000000000000) & (adder_out[32:0] == 33'b000000000000000000000000000000000));
-	assign twos_comp_b_sel = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign twos_comp_q_sel = ((~valid_ff & ~rem_ff) & (dividend_sign_ff ^ divisor_sign_ff)) & ~by_zero_case_ff;
-	assign twos_comp_in[31:0] = ({32 {twos_comp_q_sel}} & q_ff[31:0]) | ({32 {twos_comp_b_sel}} & b_ff[31:0]);
-	rvtwoscomp #(.WIDTH(32)) i_twos_comp(
-		.din(twos_comp_in[31:0]),
-		.dout(twos_comp_out[31:0])
-	);
-	assign valid_out = finish_ff & ~cancel;
-	assign data_out[31:0] = (({32 {~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]) | ({32 {rem_ff}} & r_ff[31:0])) | ({32 {twos_comp_q_sel}} & twos_comp_out[31:0]);
-	assign smallnum_case = ((((((a_ff[31:4] == 28'b0000000000000000000000000000) & (b_ff[31:4] == 28'b0000000000000000000000000000)) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel) | (((((a_ff[31:0] == 32'b00000000000000000000000000000000) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel);
-	assign smallnum[3] = ((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1];
-	assign smallnum[2] = ((((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[2]);
-	assign smallnum[1] = ((((((((((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[1]) & ~b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]);
-	assign smallnum[0] = ((((((((((((((((((((((((((((a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1]) | (((((a_ff[3] & ~a_ff[2]) & a_ff[0]) & ~b_ff[3]) & b_ff[1]) & b_ff[0])) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0])) | (((a_ff[0] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | ((((((~a_ff[3] & a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[0])) | (((a_ff[3] & ~b_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | ((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & b_ff[2]) & b_ff[1])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | ((((~a_ff[3] & a_ff[2]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[0])) | ((((~a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[3] & a_ff[1]) & ~b_ff[2]) & ~b_ff[0])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & b_ff[2])) | (((a_ff[3] & a_ff[2]) & b_ff[3]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[1]) & b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[0]) & ~b_ff[2]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[0]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & ~a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[1])) | (((a_ff[3] & a_ff[1]) & a_ff[0]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & b_ff[3]);
-	assign shortq_dividend[32:0] = {dividend_sign_ff, a_ff[31:0]};
-	wire [5:0] dw_a_enc;
-	wire [5:0] dw_b_enc;
-	wire [6:0] dw_shortq_raw;
-	eb1_exu_div_cls i_a_cls(
-		.operand(shortq_dividend[32:0]),
-		.cls(dw_a_enc[4:0])
-	);
-	eb1_exu_div_cls i_b_cls(
-		.operand(b_ff[32:0]),
-		.cls(dw_b_enc[4:0])
-	);
-	assign dw_a_enc[5] = 1'b0;
-	assign dw_b_enc[5] = 1'b0;
-	assign dw_shortq_raw[6:0] = ({1'b0, dw_b_enc[5:0]} - {1'b0, dw_a_enc[5:0]}) + 7'd1;
-	assign shortq[5:0] = (dw_shortq_raw[6] ? 6'd0 : dw_shortq_raw[5:0]);
-	assign shortq_enable = ((valid_ff & ~shortq[5]) & ~(shortq[4:1] == 4'b1111)) & ~cancel;
-	assign shortq_shift[4:0] = (~shortq_enable ? 5'd0 : 5'b11111 - shortq[4:0]);
-endmodule
-module eb1_exu_div_new_2bit_fullshortq (
-	clk,
-	rst_l,
-	scan_mode,
-	cancel,
-	valid_in,
-	signed_in,
-	rem_in,
-	dividend_in,
-	divisor_in,
-	valid_out,
-	data_out
-);
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire cancel;
-	input wire valid_in;
-	input wire signed_in;
-	input wire rem_in;
-	input wire [31:0] dividend_in;
-	input wire [31:0] divisor_in;
-	output wire valid_out;
-	output wire [31:0] data_out;
-	wire valid_ff_in;
-	wire valid_ff;
-	wire finish_raw;
-	wire finish;
-	wire finish_ff;
-	wire running_state;
-	wire misc_enable;
-	wire [2:0] control_in;
-	wire [2:0] control_ff;
-	wire dividend_sign_ff;
-	wire divisor_sign_ff;
-	wire rem_ff;
-	wire count_enable;
-	wire [6:0] count_in;
-	wire [6:0] count_ff;
-	wire smallnum_case;
-	wire [3:0] smallnum;
-	wire a_enable;
-	wire a_shift;
-	wire [31:0] a_in;
-	wire [31:0] a_ff;
-	wire b_enable;
-	wire b_twos_comp;
-	wire [32:0] b_in;
-	wire [34:0] b_ff;
-	wire [31:0] q_in;
-	wire [31:0] q_ff;
-	wire rq_enable;
-	wire r_sign_sel;
-	wire r_restore_sel;
-	wire r_adder1_sel;
-	wire r_adder2_sel;
-	wire r_adder3_sel;
-	wire [31:0] r_in;
-	wire [31:0] r_ff;
-	wire twos_comp_q_sel;
-	wire twos_comp_b_sel;
-	wire [31:0] twos_comp_in;
-	wire [31:0] twos_comp_out;
-	wire [3:1] quotient_raw;
-	wire [1:0] quotient_new;
-	wire [32:0] adder1_out;
-	wire [33:0] adder2_out;
-	wire [34:0] adder3_out;
-	wire [63:0] ar_shifted;
-	wire [5:0] shortq;
-	wire [4:0] shortq_shift;
-	wire [4:1] shortq_shift_ff;
-	wire shortq_enable;
-	wire shortq_enable_ff;
-	wire [32:0] shortq_dividend;
-	wire by_zero_case;
-	wire by_zero_case_ff;
-	rvdffe #(.WIDTH(18)) i_misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(misc_enable),
-		.din({valid_ff_in, control_in[2:0], by_zero_case, shortq_enable, shortq_shift[4:1], finish, count_in[6:0]}),
-		.dout({valid_ff, control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:1], finish_ff, count_ff[6:0]})
-	);
-	rvdffe #(.WIDTH(32)) i_a_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(a_enable),
-		.din(a_in[31:0]),
-		.dout(a_ff[31:0])
-	);
-	rvdffe #(.WIDTH(33)) i_b_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(b_enable),
-		.din(b_in[32:0]),
-		.dout(b_ff[32:0])
-	);
-	rvdffe #(.WIDTH(32)) i_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(r_in[31:0]),
-		.dout(r_ff[31:0])
-	);
-	rvdffe #(.WIDTH(32)) i_q_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(q_in[31:0]),
-		.dout(q_ff[31:0])
-	);
-	assign valid_ff_in = valid_in & ~cancel;
-	assign control_in[2] = (~valid_in & control_ff[2]) | ((valid_in & signed_in) & dividend_in[31]);
-	assign control_in[1] = (~valid_in & control_ff[1]) | ((valid_in & signed_in) & divisor_in[31]);
-	assign control_in[0] = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-	assign dividend_sign_ff = control_ff[2];
-	assign divisor_sign_ff = control_ff[1];
-	assign rem_ff = control_ff[0];
-	assign by_zero_case = valid_ff & (b_ff[31:0] == 32'b00000000000000000000000000000000);
-	assign misc_enable = (((valid_in | valid_ff) | cancel) | running_state) | finish_ff;
-	assign running_state = |count_ff[6:0] | shortq_enable_ff;
-	assign finish_raw = (smallnum_case | by_zero_case) | (count_ff[6:0] == 7'd32);
-	assign finish = finish_raw & ~cancel;
-	assign count_enable = ((((valid_ff | running_state) & ~finish) & ~finish_ff) & ~cancel) & ~shortq_enable;
-	assign count_in[6:0] = {7 {count_enable}} & ((count_ff[6:0] + 7'b0000010) + {2'b00, shortq_shift_ff[4:1], 1'b0});
-	assign a_enable = valid_in | running_state;
-	assign a_shift = running_state & ~shortq_enable_ff;
-	assign ar_shifted[63:0] = {{32 {dividend_sign_ff}}, a_ff[31:0]} << {shortq_shift_ff[4:1], 1'b0};
-	assign a_in[31:0] = (({32 {~a_shift & ~shortq_enable_ff}} & dividend_in[31:0]) | ({32 {a_shift}} & {a_ff[29:0], 2'b00})) | ({32 {shortq_enable_ff}} & ar_shifted[31:0]);
-	assign b_enable = valid_in | b_twos_comp;
-	assign b_twos_comp = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign b_in[32:0] = ({33 {~b_twos_comp}} & {signed_in & divisor_in[31], divisor_in[31:0]}) | ({33 {b_twos_comp}} & {~divisor_sign_ff, twos_comp_out[31:0]});
-	assign rq_enable = (valid_in | valid_ff) | running_state;
-	assign r_sign_sel = (valid_ff & dividend_sign_ff) & ~by_zero_case;
-	assign r_restore_sel = (running_state & (quotient_new[1:0] == 2'b00)) & ~shortq_enable_ff;
-	assign r_adder1_sel = (running_state & (quotient_new[1:0] == 2'b01)) & ~shortq_enable_ff;
-	assign r_adder2_sel = (running_state & (quotient_new[1:0] == 2'b10)) & ~shortq_enable_ff;
-	assign r_adder3_sel = (running_state & (quotient_new[1:0] == 2'b11)) & ~shortq_enable_ff;
-	assign r_in[31:0] = (((((({32 {r_sign_sel}} & 32'hffffffff) | ({32 {r_restore_sel}} & {r_ff[29:0], a_ff[31:30]})) | ({32 {r_adder1_sel}} & adder1_out[31:0])) | ({32 {r_adder2_sel}} & adder2_out[31:0])) | ({32 {r_adder3_sel}} & adder3_out[31:0])) | ({32 {shortq_enable_ff}} & ar_shifted[63:32])) | ({32 {by_zero_case}} & a_ff[31:0]);
-	assign q_in[31:0] = (({32 {~valid_ff}} & {q_ff[29:0], quotient_new[1:0]}) | ({32 {smallnum_case}} & {28'b0000000000000000000000000000, smallnum[3:0]})) | ({32 {by_zero_case}} & {32 {1'b1}});
-	assign b_ff[34:33] = {b_ff[32], b_ff[32]};
-	assign adder1_out[32:0] = {r_ff[30:0], a_ff[31:30]} + b_ff[32:0];
-	assign adder2_out[33:0] = {r_ff[31:0], a_ff[31:30]} + {b_ff[32:0], 1'b0};
-	assign adder3_out[34:0] = ({r_ff[31], r_ff[31:0], a_ff[31:30]} + {b_ff[33:0], 1'b0}) + b_ff[34:0];
-	assign quotient_raw[1] = (~adder1_out[32] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder1_out[32:0] == 33'b000000000000000000000000000000000));
-	assign quotient_raw[2] = (~adder2_out[33] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder2_out[33:0] == 34'b0000000000000000000000000000000000));
-	assign quotient_raw[3] = (~adder3_out[34] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder3_out[34:0] == 35'b00000000000000000000000000000000000));
-	assign quotient_new[1] = quotient_raw[3] | quotient_raw[2];
-	assign quotient_new[0] = quotient_raw[3] | (~quotient_raw[2] & quotient_raw[1]);
-	assign twos_comp_b_sel = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign twos_comp_q_sel = ((~valid_ff & ~rem_ff) & (dividend_sign_ff ^ divisor_sign_ff)) & ~by_zero_case_ff;
-	assign twos_comp_in[31:0] = ({32 {twos_comp_q_sel}} & q_ff[31:0]) | ({32 {twos_comp_b_sel}} & b_ff[31:0]);
-	rvtwoscomp #(.WIDTH(32)) i_twos_comp(
-		.din(twos_comp_in[31:0]),
-		.dout(twos_comp_out[31:0])
-	);
-	assign valid_out = finish_ff & ~cancel;
-	assign data_out[31:0] = (({32 {~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]) | ({32 {rem_ff}} & r_ff[31:0])) | ({32 {twos_comp_q_sel}} & twos_comp_out[31:0]);
-	assign smallnum_case = ((((((a_ff[31:4] == 28'b0000000000000000000000000000) & (b_ff[31:4] == 28'b0000000000000000000000000000)) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel) | (((((a_ff[31:0] == 32'b00000000000000000000000000000000) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel);
-	assign smallnum[3] = ((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1];
-	assign smallnum[2] = ((((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[2]);
-	assign smallnum[1] = ((((((((((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[1]) & ~b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]);
-	assign smallnum[0] = ((((((((((((((((((((((((((((a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1]) | (((((a_ff[3] & ~a_ff[2]) & a_ff[0]) & ~b_ff[3]) & b_ff[1]) & b_ff[0])) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0])) | (((a_ff[0] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | ((((((~a_ff[3] & a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[0])) | (((a_ff[3] & ~b_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | ((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & b_ff[2]) & b_ff[1])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | ((((~a_ff[3] & a_ff[2]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[0])) | ((((~a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[3] & a_ff[1]) & ~b_ff[2]) & ~b_ff[0])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & b_ff[2])) | (((a_ff[3] & a_ff[2]) & b_ff[3]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[1]) & b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[0]) & ~b_ff[2]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[0]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & ~a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[1])) | (((a_ff[3] & a_ff[1]) & a_ff[0]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & b_ff[3]);
-	assign shortq_dividend[32:0] = {dividend_sign_ff, a_ff[31:0]};
-	wire [5:0] dw_a_enc;
-	wire [5:0] dw_b_enc;
-	wire [6:0] dw_shortq_raw;
-	eb1_exu_div_cls i_a_cls(
-		.operand(shortq_dividend[32:0]),
-		.cls(dw_a_enc[4:0])
-	);
-	eb1_exu_div_cls i_b_cls(
-		.operand(b_ff[32:0]),
-		.cls(dw_b_enc[4:0])
-	);
-	assign dw_a_enc[5] = 1'b0;
-	assign dw_b_enc[5] = 1'b0;
-	assign dw_shortq_raw[6:0] = ({1'b0, dw_b_enc[5:0]} - {1'b0, dw_a_enc[5:0]}) + 7'd1;
-	assign shortq[5:0] = (dw_shortq_raw[6] ? 6'd0 : dw_shortq_raw[5:0]);
-	assign shortq_enable = ((valid_ff & ~shortq[5]) & ~(shortq[4:1] == 4'b1111)) & ~cancel;
-	assign shortq_shift[4:0] = (~shortq_enable ? 5'd0 : 5'b11111 - shortq[4:0]);
-endmodule
-module eb1_exu_div_new_3bit_fullshortq (
-	clk,
-	rst_l,
-	scan_mode,
-	cancel,
-	valid_in,
-	signed_in,
-	rem_in,
-	dividend_in,
-	divisor_in,
-	valid_out,
-	data_out
-);
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire cancel;
-	input wire valid_in;
-	input wire signed_in;
-	input wire rem_in;
-	input wire [31:0] dividend_in;
-	input wire [31:0] divisor_in;
-	output wire valid_out;
-	output wire [31:0] data_out;
-	wire valid_ff_in;
-	wire valid_ff;
-	wire finish_raw;
-	wire finish;
-	wire finish_ff;
-	wire running_state;
-	wire misc_enable;
-	wire [2:0] control_in;
-	wire [2:0] control_ff;
-	wire dividend_sign_ff;
-	wire divisor_sign_ff;
-	wire rem_ff;
-	wire count_enable;
-	wire [6:0] count_in;
-	wire [6:0] count_ff;
-	wire smallnum_case;
-	wire [3:0] smallnum;
-	wire a_enable;
-	wire a_shift;
-	wire [32:0] a_in;
-	wire [32:0] a_ff;
-	wire b_enable;
-	wire b_twos_comp;
-	wire [32:0] b_in;
-	wire [36:0] b_ff;
-	wire [31:0] q_in;
-	wire [31:0] q_ff;
-	wire rq_enable;
-	wire r_sign_sel;
-	wire r_restore_sel;
-	wire r_adder1_sel;
-	wire r_adder2_sel;
-	wire r_adder3_sel;
-	wire r_adder4_sel;
-	wire r_adder5_sel;
-	wire r_adder6_sel;
-	wire r_adder7_sel;
-	wire [32:0] r_in;
-	wire [32:0] r_ff;
-	wire twos_comp_q_sel;
-	wire twos_comp_b_sel;
-	wire [31:0] twos_comp_in;
-	wire [31:0] twos_comp_out;
-	wire [7:1] quotient_raw;
-	wire [2:0] quotient_new;
-	wire [33:0] adder1_out;
-	wire [34:0] adder2_out;
-	wire [35:0] adder3_out;
-	wire [36:0] adder4_out;
-	wire [36:0] adder5_out;
-	wire [36:0] adder6_out;
-	wire [36:0] adder7_out;
-	wire [65:0] ar_shifted;
-	wire [5:0] shortq;
-	wire [4:0] shortq_shift;
-	wire [4:0] shortq_decode;
-	wire [4:0] shortq_shift_ff;
-	wire shortq_enable;
-	wire shortq_enable_ff;
-	wire [32:0] shortq_dividend;
-	wire by_zero_case;
-	wire by_zero_case_ff;
-	rvdffe #(.WIDTH(19)) i_misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(misc_enable),
-		.din({valid_ff_in, control_in[2:0], by_zero_case, shortq_enable, shortq_shift[4:0], finish, count_in[6:0]}),
-		.dout({valid_ff, control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]})
-	);
-	rvdffe #(.WIDTH(33)) i_a_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(a_enable),
-		.din(a_in[32:0]),
-		.dout(a_ff[32:0])
-	);
-	rvdffe #(.WIDTH(33)) i_b_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(b_enable),
-		.din(b_in[32:0]),
-		.dout(b_ff[32:0])
-	);
-	rvdffe #(.WIDTH(33)) i_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(r_in[32:0]),
-		.dout(r_ff[32:0])
-	);
-	rvdffe #(.WIDTH(32)) i_q_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(q_in[31:0]),
-		.dout(q_ff[31:0])
-	);
-	assign valid_ff_in = valid_in & ~cancel;
-	assign control_in[2] = (~valid_in & control_ff[2]) | ((valid_in & signed_in) & dividend_in[31]);
-	assign control_in[1] = (~valid_in & control_ff[1]) | ((valid_in & signed_in) & divisor_in[31]);
-	assign control_in[0] = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-	assign dividend_sign_ff = control_ff[2];
-	assign divisor_sign_ff = control_ff[1];
-	assign rem_ff = control_ff[0];
-	assign by_zero_case = valid_ff & (b_ff[31:0] == 32'b00000000000000000000000000000000);
-	assign misc_enable = (((valid_in | valid_ff) | cancel) | running_state) | finish_ff;
-	assign running_state = |count_ff[6:0] | shortq_enable_ff;
-	assign finish_raw = (smallnum_case | by_zero_case) | (count_ff[6:0] == 7'd33);
-	assign finish = finish_raw & ~cancel;
-	assign count_enable = ((((valid_ff | running_state) & ~finish) & ~finish_ff) & ~cancel) & ~shortq_enable;
-	assign count_in[6:0] = {7 {count_enable}} & ((count_ff[6:0] + 7'b0000011) + {2'b00, shortq_shift_ff[4:0]});
-	assign a_enable = valid_in | running_state;
-	assign a_shift = running_state & ~shortq_enable_ff;
-	assign ar_shifted[65:0] = {{33 {dividend_sign_ff}}, a_ff[32:0]} << {shortq_shift_ff[4:0]};
-	assign a_in[32:0] = (({33 {~a_shift & ~shortq_enable_ff}} & {signed_in & dividend_in[31], dividend_in[31:0]}) | ({33 {a_shift}} & {a_ff[29:0], 3'b000})) | ({33 {shortq_enable_ff}} & ar_shifted[32:0]);
-	assign b_enable = valid_in | b_twos_comp;
-	assign b_twos_comp = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign b_in[32:0] = ({33 {~b_twos_comp}} & {signed_in & divisor_in[31], divisor_in[31:0]}) | ({33 {b_twos_comp}} & {~divisor_sign_ff, twos_comp_out[31:0]});
-	assign rq_enable = (valid_in | valid_ff) | running_state;
-	assign r_sign_sel = (valid_ff & dividend_sign_ff) & ~by_zero_case;
-	assign r_restore_sel = (running_state & (quotient_new[2:0] == 3'b000)) & ~shortq_enable_ff;
-	assign r_adder1_sel = (running_state & (quotient_new[2:0] == 3'b001)) & ~shortq_enable_ff;
-	assign r_adder2_sel = (running_state & (quotient_new[2:0] == 3'b010)) & ~shortq_enable_ff;
-	assign r_adder3_sel = (running_state & (quotient_new[2:0] == 3'b011)) & ~shortq_enable_ff;
-	assign r_adder4_sel = (running_state & (quotient_new[2:0] == 3'b100)) & ~shortq_enable_ff;
-	assign r_adder5_sel = (running_state & (quotient_new[2:0] == 3'b101)) & ~shortq_enable_ff;
-	assign r_adder6_sel = (running_state & (quotient_new[2:0] == 3'b110)) & ~shortq_enable_ff;
-	assign r_adder7_sel = (running_state & (quotient_new[2:0] == 3'b111)) & ~shortq_enable_ff;
-	assign r_in[32:0] = (((((((((({33 {r_sign_sel}} & {33 {1'b1}}) | ({33 {r_restore_sel}} & {r_ff[29:0], a_ff[32:30]})) | ({33 {r_adder1_sel}} & adder1_out[32:0])) | ({33 {r_adder2_sel}} & adder2_out[32:0])) | ({33 {r_adder3_sel}} & adder3_out[32:0])) | ({33 {r_adder4_sel}} & adder4_out[32:0])) | ({33 {r_adder5_sel}} & adder5_out[32:0])) | ({33 {r_adder6_sel}} & adder6_out[32:0])) | ({33 {r_adder7_sel}} & adder7_out[32:0])) | ({33 {shortq_enable_ff}} & ar_shifted[65:33])) | ({33 {by_zero_case}} & {1'b0, a_ff[31:0]});
-	assign q_in[31:0] = (({32 {~valid_ff}} & {q_ff[28:0], quotient_new[2:0]}) | ({32 {smallnum_case}} & {28'b0000000000000000000000000000, smallnum[3:0]})) | ({32 {by_zero_case}} & {32 {1'b1}});
-	assign b_ff[36:33] = {b_ff[32], b_ff[32], b_ff[32], b_ff[32]};
-	assign adder1_out[33:0] = {r_ff[30:0], a_ff[32:30]} + b_ff[33:0];
-	assign adder2_out[34:0] = {r_ff[31:0], a_ff[32:30]} + {b_ff[33:0], 1'b0};
-	assign adder3_out[35:0] = ({r_ff[32:0], a_ff[32:30]} + {b_ff[34:0], 1'b0}) + b_ff[35:0];
-	assign adder4_out[36:0] = {r_ff[32], r_ff[32:0], a_ff[32:30]} + {b_ff[34:0], 2'b00};
-	assign adder5_out[36:0] = ({r_ff[32], r_ff[32:0], a_ff[32:30]} + {b_ff[34:0], 2'b00}) + b_ff[36:0];
-	assign adder6_out[36:0] = ({r_ff[32], r_ff[32:0], a_ff[32:30]} + {b_ff[34:0], 2'b00}) + {b_ff[35:0], 1'b0};
-	assign adder7_out[36:0] = (({r_ff[32], r_ff[32:0], a_ff[32:30]} + {b_ff[34:0], 2'b00}) + {b_ff[35:0], 1'b0}) + b_ff[36:0];
-	assign quotient_raw[1] = (~adder1_out[33] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder1_out[33:0] == 34'b0000000000000000000000000000000000));
-	assign quotient_raw[2] = (~adder2_out[34] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder2_out[34:0] == 35'b00000000000000000000000000000000000));
-	assign quotient_raw[3] = (~adder3_out[35] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder3_out[35:0] == 36'b000000000000000000000000000000000000));
-	assign quotient_raw[4] = (~adder4_out[36] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder4_out[36:0] == 37'b0000000000000000000000000000000000000));
-	assign quotient_raw[5] = (~adder5_out[36] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder5_out[36:0] == 37'b0000000000000000000000000000000000000));
-	assign quotient_raw[6] = (~adder6_out[36] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder6_out[36:0] == 37'b0000000000000000000000000000000000000));
-	assign quotient_raw[7] = (~adder7_out[36] ^ dividend_sign_ff) | ((a_ff[29:0] == 30'b000000000000000000000000000000) & (adder7_out[36:0] == 37'b0000000000000000000000000000000000000));
-	assign quotient_new[2] = ((quotient_raw[7] | quotient_raw[6]) | quotient_raw[5]) | quotient_raw[4];
-	assign quotient_new[1] = ((quotient_raw[7] | quotient_raw[6]) | (~quotient_raw[4] & quotient_raw[3])) | (~quotient_raw[3] & quotient_raw[2]);
-	assign quotient_new[0] = ((quotient_raw[7] | (~quotient_raw[6] & quotient_raw[5])) | (~quotient_raw[4] & quotient_raw[3])) | (~quotient_raw[2] & quotient_raw[1]);
-	assign twos_comp_b_sel = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign twos_comp_q_sel = ((~valid_ff & ~rem_ff) & (dividend_sign_ff ^ divisor_sign_ff)) & ~by_zero_case_ff;
-	assign twos_comp_in[31:0] = ({32 {twos_comp_q_sel}} & q_ff[31:0]) | ({32 {twos_comp_b_sel}} & b_ff[31:0]);
-	rvtwoscomp #(.WIDTH(32)) i_twos_comp(
-		.din(twos_comp_in[31:0]),
-		.dout(twos_comp_out[31:0])
-	);
-	assign valid_out = finish_ff & ~cancel;
-	assign data_out[31:0] = (({32 {~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]) | ({32 {rem_ff}} & r_ff[31:0])) | ({32 {twos_comp_q_sel}} & twos_comp_out[31:0]);
-	assign smallnum_case = ((((((a_ff[31:4] == 28'b0000000000000000000000000000) & (b_ff[31:4] == 28'b0000000000000000000000000000)) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel) | (((((a_ff[31:0] == 32'b00000000000000000000000000000000) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel);
-	assign smallnum[3] = ((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1];
-	assign smallnum[2] = ((((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[2]);
-	assign smallnum[1] = ((((((((((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[1]) & ~b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]);
-	assign smallnum[0] = ((((((((((((((((((((((((((((a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1]) | (((((a_ff[3] & ~a_ff[2]) & a_ff[0]) & ~b_ff[3]) & b_ff[1]) & b_ff[0])) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0])) | (((a_ff[0] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | ((((((~a_ff[3] & a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[0])) | (((a_ff[3] & ~b_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | ((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & b_ff[2]) & b_ff[1])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | ((((~a_ff[3] & a_ff[2]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[0])) | ((((~a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[3] & a_ff[1]) & ~b_ff[2]) & ~b_ff[0])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & b_ff[2])) | (((a_ff[3] & a_ff[2]) & b_ff[3]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[1]) & b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[0]) & ~b_ff[2]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[0]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & ~a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[1])) | (((a_ff[3] & a_ff[1]) & a_ff[0]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & b_ff[3]);
-	assign shortq_dividend[32:0] = {dividend_sign_ff, a_ff[31:0]};
-	wire [5:0] dw_a_enc;
-	wire [5:0] dw_b_enc;
-	wire [6:0] dw_shortq_raw;
-	eb1_exu_div_cls i_a_cls(
-		.operand(shortq_dividend[32:0]),
-		.cls(dw_a_enc[4:0])
-	);
-	eb1_exu_div_cls i_b_cls(
-		.operand(b_ff[32:0]),
-		.cls(dw_b_enc[4:0])
-	);
-	assign dw_a_enc[5] = 1'b0;
-	assign dw_b_enc[5] = 1'b0;
-	assign dw_shortq_raw[6:0] = ({1'b0, dw_b_enc[5:0]} - {1'b0, dw_a_enc[5:0]}) + 7'd1;
-	assign shortq[5:0] = (dw_shortq_raw[6] ? 6'd0 : dw_shortq_raw[5:0]);
-	assign shortq_enable = ((valid_ff & ~shortq[5]) & ~(shortq[4:2] == 3'b111)) & ~cancel;
-	assign shortq_decode[4:0] = ((((((((((((((((((((((((((((((({5 {shortq[4:0] == 5'd31}} & 5'd0) | ({5 {shortq[4:0] == 5'd30}} & 5'd0)) | ({5 {shortq[4:0] == 5'd29}} & 5'd0)) | ({5 {shortq[4:0] == 5'd28}} & 5'd0)) | ({5 {shortq[4:0] == 5'd27}} & 5'd3)) | ({5 {shortq[4:0] == 5'd26}} & 5'd6)) | ({5 {shortq[4:0] == 5'd25}} & 5'd6)) | ({5 {shortq[4:0] == 5'd24}} & 5'd6)) | ({5 {shortq[4:0] == 5'd23}} & 5'd9)) | ({5 {shortq[4:0] == 5'd22}} & 5'd9)) | ({5 {shortq[4:0] == 5'd21}} & 5'd9)) | ({5 {shortq[4:0] == 5'd20}} & 5'd12)) | ({5 {shortq[4:0] == 5'd19}} & 5'd12)) | ({5 {shortq[4:0] == 5'd18}} & 5'd12)) | ({5 {shortq[4:0] == 5'd17}} & 5'd15)) | ({5 {shortq[4:0] == 5'd16}} & 5'd15)) | ({5 {shortq[4:0] == 5'd15}} & 5'd15)) | ({5 {shortq[4:0] == 5'd14}} & 5'd18)) | ({5 {shortq[4:0] == 5'd13}} & 5'd18)) | ({5 {shortq[4:0] == 5'd12}} & 5'd18)) | ({5 {shortq[4:0] == 5'd11}} & 5'd21)) | ({5 {shortq[4:0] == 5'd10}} & 5'd21)) | ({5 {shortq[4:0] == 5'd9}} & 5'd21)) | ({5 {shortq[4:0] == 5'd8}} & 5'd24)) | ({5 {shortq[4:0] == 5'd7}} & 5'd24)) | ({5 {shortq[4:0] == 5'd6}} & 5'd24)) | ({5 {shortq[4:0] == 5'd5}} & 5'd27)) | ({5 {shortq[4:0] == 5'd4}} & 5'd27)) | ({5 {shortq[4:0] == 5'd3}} & 5'd27)) | ({5 {shortq[4:0] == 5'd2}} & 5'd27)) | ({5 {shortq[4:0] == 5'd1}} & 5'd27)) | ({5 {shortq[4:0] == 5'd0}} & 5'd27);
-	assign shortq_shift[4:0] = (~shortq_enable ? 5'd0 : shortq_decode[4:0]);
-endmodule
-module eb1_exu_div_new_4bit_fullshortq (
-	clk,
-	rst_l,
-	scan_mode,
-	cancel,
-	valid_in,
-	signed_in,
-	rem_in,
-	dividend_in,
-	divisor_in,
-	valid_out,
-	data_out
-);
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire cancel;
-	input wire valid_in;
-	input wire signed_in;
-	input wire rem_in;
-	input wire [31:0] dividend_in;
-	input wire [31:0] divisor_in;
-	output wire valid_out;
-	output wire [31:0] data_out;
-	wire valid_ff_in;
-	wire valid_ff;
-	wire finish_raw;
-	wire finish;
-	wire finish_ff;
-	wire running_state;
-	wire misc_enable;
-	wire [2:0] control_in;
-	wire [2:0] control_ff;
-	wire dividend_sign_ff;
-	wire divisor_sign_ff;
-	wire rem_ff;
-	wire count_enable;
-	wire [6:0] count_in;
-	wire [6:0] count_ff;
-	wire smallnum_case;
-	wire [3:0] smallnum;
-	wire a_enable;
-	wire a_shift;
-	wire [31:0] a_in;
-	wire [31:0] a_ff;
-	wire b_enable;
-	wire b_twos_comp;
-	wire [32:0] b_in;
-	wire [37:0] b_ff;
-	wire [31:0] q_in;
-	wire [31:0] q_ff;
-	wire rq_enable;
-	wire r_sign_sel;
-	wire r_restore_sel;
-	wire r_adder01_sel;
-	wire r_adder02_sel;
-	wire r_adder03_sel;
-	wire r_adder04_sel;
-	wire r_adder05_sel;
-	wire r_adder06_sel;
-	wire r_adder07_sel;
-	wire r_adder08_sel;
-	wire r_adder09_sel;
-	wire r_adder10_sel;
-	wire r_adder11_sel;
-	wire r_adder12_sel;
-	wire r_adder13_sel;
-	wire r_adder14_sel;
-	wire r_adder15_sel;
-	wire [32:0] r_in;
-	wire [32:0] r_ff;
-	wire twos_comp_q_sel;
-	wire twos_comp_b_sel;
-	wire [31:0] twos_comp_in;
-	wire [31:0] twos_comp_out;
-	wire [15:1] quotient_raw;
-	wire [3:0] quotient_new;
-	wire [34:0] adder01_out;
-	wire [35:0] adder02_out;
-	wire [36:0] adder03_out;
-	wire [37:0] adder04_out;
-	wire [37:0] adder05_out;
-	wire [37:0] adder06_out;
-	wire [37:0] adder07_out;
-	wire [37:0] adder08_out;
-	wire [37:0] adder09_out;
-	wire [37:0] adder10_out;
-	wire [37:0] adder11_out;
-	wire [37:0] adder12_out;
-	wire [37:0] adder13_out;
-	wire [37:0] adder14_out;
-	wire [37:0] adder15_out;
-	wire [64:0] ar_shifted;
-	wire [5:0] shortq;
-	wire [4:0] shortq_shift;
-	wire [4:0] shortq_decode;
-	wire [4:0] shortq_shift_ff;
-	wire shortq_enable;
-	wire shortq_enable_ff;
-	wire [32:0] shortq_dividend;
-	wire by_zero_case;
-	wire by_zero_case_ff;
-	rvdffe #(.WIDTH(19)) i_misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(misc_enable),
-		.din({valid_ff_in, control_in[2:0], by_zero_case, shortq_enable, shortq_shift[4:0], finish, count_in[6:0]}),
-		.dout({valid_ff, control_ff[2:0], by_zero_case_ff, shortq_enable_ff, shortq_shift_ff[4:0], finish_ff, count_ff[6:0]})
-	);
-	rvdffe #(.WIDTH(32)) i_a_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(a_enable),
-		.din(a_in[31:0]),
-		.dout(a_ff[31:0])
-	);
-	rvdffe #(.WIDTH(33)) i_b_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(b_enable),
-		.din(b_in[32:0]),
-		.dout(b_ff[32:0])
-	);
-	rvdffe #(.WIDTH(33)) i_r_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(r_in[32:0]),
-		.dout(r_ff[32:0])
-	);
-	rvdffe #(.WIDTH(32)) i_q_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(rq_enable),
-		.din(q_in[31:0]),
-		.dout(q_ff[31:0])
-	);
-	assign valid_ff_in = valid_in & ~cancel;
-	assign control_in[2] = (~valid_in & control_ff[2]) | ((valid_in & signed_in) & dividend_in[31]);
-	assign control_in[1] = (~valid_in & control_ff[1]) | ((valid_in & signed_in) & divisor_in[31]);
-	assign control_in[0] = (~valid_in & control_ff[0]) | (valid_in & rem_in);
-	assign dividend_sign_ff = control_ff[2];
-	assign divisor_sign_ff = control_ff[1];
-	assign rem_ff = control_ff[0];
-	assign by_zero_case = valid_ff & (b_ff[31:0] == 32'b00000000000000000000000000000000);
-	assign misc_enable = (((valid_in | valid_ff) | cancel) | running_state) | finish_ff;
-	assign running_state = |count_ff[6:0] | shortq_enable_ff;
-	assign finish_raw = (smallnum_case | by_zero_case) | (count_ff[6:0] == 7'd32);
-	assign finish = finish_raw & ~cancel;
-	assign count_enable = ((((valid_ff | running_state) & ~finish) & ~finish_ff) & ~cancel) & ~shortq_enable;
-	assign count_in[6:0] = {7 {count_enable}} & ((count_ff[6:0] + 7'd4) + {2'b00, shortq_shift_ff[4:0]});
-	assign a_enable = valid_in | running_state;
-	assign a_shift = running_state & ~shortq_enable_ff;
-	assign ar_shifted[64:0] = {{33 {dividend_sign_ff}}, a_ff[31:0]} << {shortq_shift_ff[4:0]};
-	assign a_in[31:0] = (({32 {~a_shift & ~shortq_enable_ff}} & dividend_in[31:0]) | ({32 {a_shift}} & {a_ff[27:0], 4'b0000})) | ({32 {shortq_enable_ff}} & ar_shifted[31:0]);
-	assign b_enable = valid_in | b_twos_comp;
-	assign b_twos_comp = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign b_in[32:0] = ({33 {~b_twos_comp}} & {signed_in & divisor_in[31], divisor_in[31:0]}) | ({33 {b_twos_comp}} & {~divisor_sign_ff, twos_comp_out[31:0]});
-	assign rq_enable = (valid_in | valid_ff) | running_state;
-	assign r_sign_sel = (valid_ff & dividend_sign_ff) & ~by_zero_case;
-	assign r_restore_sel = (running_state & (quotient_new[3:0] == 4'd0)) & ~shortq_enable_ff;
-	assign r_adder01_sel = (running_state & (quotient_new[3:0] == 4'd1)) & ~shortq_enable_ff;
-	assign r_adder02_sel = (running_state & (quotient_new[3:0] == 4'd2)) & ~shortq_enable_ff;
-	assign r_adder03_sel = (running_state & (quotient_new[3:0] == 4'd3)) & ~shortq_enable_ff;
-	assign r_adder04_sel = (running_state & (quotient_new[3:0] == 4'd4)) & ~shortq_enable_ff;
-	assign r_adder05_sel = (running_state & (quotient_new[3:0] == 4'd5)) & ~shortq_enable_ff;
-	assign r_adder06_sel = (running_state & (quotient_new[3:0] == 4'd6)) & ~shortq_enable_ff;
-	assign r_adder07_sel = (running_state & (quotient_new[3:0] == 4'd7)) & ~shortq_enable_ff;
-	assign r_adder08_sel = (running_state & (quotient_new[3:0] == 4'd8)) & ~shortq_enable_ff;
-	assign r_adder09_sel = (running_state & (quotient_new[3:0] == 4'd9)) & ~shortq_enable_ff;
-	assign r_adder10_sel = (running_state & (quotient_new[3:0] == 4'd10)) & ~shortq_enable_ff;
-	assign r_adder11_sel = (running_state & (quotient_new[3:0] == 4'd11)) & ~shortq_enable_ff;
-	assign r_adder12_sel = (running_state & (quotient_new[3:0] == 4'd12)) & ~shortq_enable_ff;
-	assign r_adder13_sel = (running_state & (quotient_new[3:0] == 4'd13)) & ~shortq_enable_ff;
-	assign r_adder14_sel = (running_state & (quotient_new[3:0] == 4'd14)) & ~shortq_enable_ff;
-	assign r_adder15_sel = (running_state & (quotient_new[3:0] == 4'd15)) & ~shortq_enable_ff;
-	assign r_in[32:0] = (((((((((((((((((({33 {r_sign_sel}} & {33 {1'b1}}) | ({33 {r_restore_sel}} & {r_ff[28:0], a_ff[31:28]})) | ({33 {r_adder01_sel}} & adder01_out[32:0])) | ({33 {r_adder02_sel}} & adder02_out[32:0])) | ({33 {r_adder03_sel}} & adder03_out[32:0])) | ({33 {r_adder04_sel}} & adder04_out[32:0])) | ({33 {r_adder05_sel}} & adder05_out[32:0])) | ({33 {r_adder06_sel}} & adder06_out[32:0])) | ({33 {r_adder07_sel}} & adder07_out[32:0])) | ({33 {r_adder08_sel}} & adder08_out[32:0])) | ({33 {r_adder09_sel}} & adder09_out[32:0])) | ({33 {r_adder10_sel}} & adder10_out[32:0])) | ({33 {r_adder11_sel}} & adder11_out[32:0])) | ({33 {r_adder12_sel}} & adder12_out[32:0])) | ({33 {r_adder13_sel}} & adder13_out[32:0])) | ({33 {r_adder14_sel}} & adder14_out[32:0])) | ({33 {r_adder15_sel}} & adder15_out[32:0])) | ({33 {shortq_enable_ff}} & ar_shifted[64:32])) | ({33 {by_zero_case}} & {1'b0, a_ff[31:0]});
-	assign q_in[31:0] = (({32 {~valid_ff}} & {q_ff[27:0], quotient_new[3:0]}) | ({32 {smallnum_case}} & {28'b0000000000000000000000000000, smallnum[3:0]})) | ({32 {by_zero_case}} & {32 {1'b1}});
-	assign b_ff[37:33] = {b_ff[32], b_ff[32], b_ff[32], b_ff[32], b_ff[32]};
-	assign adder01_out[34:0] = {r_ff[30:0], a_ff[31:28]} + b_ff[34:0];
-	assign adder02_out[35:0] = {r_ff[31:0], a_ff[31:28]} + {b_ff[34:0], 1'b0};
-	assign adder03_out[36:0] = ({r_ff[32:0], a_ff[31:28]} + {b_ff[35:0], 1'b0}) + b_ff[36:0];
-	assign adder04_out[37:0] = {r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[35:0], 2'b00};
-	assign adder05_out[37:0] = ({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[35:0], 2'b00}) + b_ff[37:0];
-	assign adder06_out[37:0] = ({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[35:0], 2'b00}) + {b_ff[36:0], 1'b0};
-	assign adder07_out[37:0] = (({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[35:0], 2'b00}) + {b_ff[36:0], 1'b0}) + b_ff[37:0];
-	assign adder08_out[37:0] = {r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000};
-	assign adder09_out[37:0] = ({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + b_ff[37:0];
-	assign adder10_out[37:0] = ({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + {b_ff[36:0], 1'b0};
-	assign adder11_out[37:0] = (({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + {b_ff[36:0], 1'b0}) + b_ff[37:0];
-	assign adder12_out[37:0] = ({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + {b_ff[35:0], 2'b00};
-	assign adder13_out[37:0] = (({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + {b_ff[35:0], 2'b00}) + b_ff[37:0];
-	assign adder14_out[37:0] = (({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + {b_ff[35:0], 2'b00}) + {b_ff[36:0], 1'b0};
-	assign adder15_out[37:0] = ((({r_ff[32], r_ff[32:0], a_ff[31:28]} + {b_ff[34:0], 3'b000}) + {b_ff[35:0], 2'b00}) + {b_ff[36:0], 1'b0}) + b_ff[37:0];
-	assign quotient_raw[1] = (~adder01_out[34] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder01_out[34:0] == 35'b00000000000000000000000000000000000));
-	assign quotient_raw[2] = (~adder02_out[35] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder02_out[35:0] == 36'b000000000000000000000000000000000000));
-	assign quotient_raw[3] = (~adder03_out[36] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder03_out[36:0] == 37'b0000000000000000000000000000000000000));
-	assign quotient_raw[4] = (~adder04_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder04_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[5] = (~adder05_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder05_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[6] = (~adder06_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder06_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[7] = (~adder07_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder07_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[8] = (~adder08_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder08_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[9] = (~adder09_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder09_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[10] = (~adder10_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder10_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[11] = (~adder11_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder11_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[12] = (~adder12_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder12_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[13] = (~adder13_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder13_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[14] = (~adder14_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder14_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_raw[15] = (~adder15_out[37] ^ dividend_sign_ff) | ((a_ff[27:0] == 28'b0000000000000000000000000000) & (adder15_out[37:0] == 38'b00000000000000000000000000000000000000));
-	assign quotient_new[0] = (((((((quotient_raw[15:1] == 15'b000000000000001) | (quotient_raw[15:3] == 13'b0000000000001)) | (quotient_raw[15:5] == 11'b00000000001)) | (quotient_raw[15:7] == 9'b000000001)) | (quotient_raw[15:9] == 7'b0000001)) | (quotient_raw[15:11] == 5'b00001)) | (quotient_raw[15:13] == 3'b001)) | (quotient_raw[15] == 1'b1);
-	assign quotient_new[1] = (((((((quotient_raw[15:2] == 14'b00000000000001) | (quotient_raw[15:3] == 13'b0000000000001)) | (quotient_raw[15:6] == 10'b0000000001)) | (quotient_raw[15:7] == 9'b000000001)) | (quotient_raw[15:10] == 6'b000001)) | (quotient_raw[15:11] == 5'b00001)) | (quotient_raw[15:14] == 2'b01)) | (quotient_raw[15] == 1'b1);
-	assign quotient_new[2] = (((((((quotient_raw[15:4] == 12'b000000000001) | (quotient_raw[15:5] == 11'b00000000001)) | (quotient_raw[15:6] == 10'b0000000001)) | (quotient_raw[15:7] == 9'b000000001)) | (quotient_raw[15:12] == 4'b0001)) | (quotient_raw[15:13] == 3'b001)) | (quotient_raw[15:14] == 2'b01)) | (quotient_raw[15] == 1'b1);
-	assign quotient_new[3] = (((((((quotient_raw[15:8] == 8'b00000001) | (quotient_raw[15:9] == 7'b0000001)) | (quotient_raw[15:10] == 6'b000001)) | (quotient_raw[15:11] == 5'b00001)) | (quotient_raw[15:12] == 4'b0001)) | (quotient_raw[15:13] == 3'b001)) | (quotient_raw[15:14] == 2'b01)) | (quotient_raw[15] == 1'b1);
-	assign twos_comp_b_sel = valid_ff & ~(dividend_sign_ff ^ divisor_sign_ff);
-	assign twos_comp_q_sel = ((~valid_ff & ~rem_ff) & (dividend_sign_ff ^ divisor_sign_ff)) & ~by_zero_case_ff;
-	assign twos_comp_in[31:0] = ({32 {twos_comp_q_sel}} & q_ff[31:0]) | ({32 {twos_comp_b_sel}} & b_ff[31:0]);
-	rvtwoscomp #(.WIDTH(32)) i_twos_comp(
-		.din(twos_comp_in[31:0]),
-		.dout(twos_comp_out[31:0])
-	);
-	assign valid_out = finish_ff & ~cancel;
-	assign data_out[31:0] = (({32 {~rem_ff & ~twos_comp_q_sel}} & q_ff[31:0]) | ({32 {rem_ff}} & r_ff[31:0])) | ({32 {twos_comp_q_sel}} & twos_comp_out[31:0]);
-	assign smallnum_case = ((((((a_ff[31:4] == 28'b0000000000000000000000000000) & (b_ff[31:4] == 28'b0000000000000000000000000000)) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel) | (((((a_ff[31:0] == 32'b00000000000000000000000000000000) & ~by_zero_case) & ~rem_ff) & valid_ff) & ~cancel);
-	assign smallnum[3] = ((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1];
-	assign smallnum[2] = ((((a_ff[3] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[2]);
-	assign smallnum[1] = ((((((((((a_ff[2] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0]) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[1]) & ~b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]);
-	assign smallnum[0] = ((((((((((((((((((((((((((((a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1]) | (((((a_ff[3] & ~a_ff[2]) & a_ff[0]) & ~b_ff[3]) & b_ff[1]) & b_ff[0])) | (((a_ff[2] & ~b_ff[3]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[1] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[0])) | (((a_ff[0] & ~b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | ((((((~a_ff[3] & a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & ~b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & ~b_ff[0])) | (((a_ff[3] & ~b_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | ((((a_ff[3] & ~a_ff[2]) & ~b_ff[3]) & b_ff[2]) & b_ff[1])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[2]) & ~b_ff[1])) | ((((~a_ff[3] & a_ff[2]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[2]) & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[0])) | ((((~a_ff[2] & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & ~b_ff[2])) | (((a_ff[3] & a_ff[2]) & ~b_ff[1]) & ~b_ff[0])) | (((a_ff[3] & a_ff[1]) & ~b_ff[2]) & ~b_ff[0])) | (((((~a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & ~b_ff[3]) & b_ff[2])) | (((a_ff[3] & a_ff[2]) & b_ff[3]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[1]) & b_ff[3]) & ~b_ff[2]) & ~b_ff[1])) | (((a_ff[3] & a_ff[0]) & ~b_ff[2]) & ~b_ff[1])) | (((((a_ff[3] & ~a_ff[1]) & ~b_ff[3]) & b_ff[2]) & b_ff[1]) & b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[0])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & a_ff[2]) & a_ff[0]) & b_ff[3]) & ~b_ff[1])) | ((((a_ff[3] & ~a_ff[2]) & a_ff[1]) & ~b_ff[3]) & b_ff[1])) | (((a_ff[3] & a_ff[1]) & a_ff[0]) & ~b_ff[2])) | ((((a_ff[3] & a_ff[2]) & a_ff[1]) & a_ff[0]) & b_ff[3]);
-	assign shortq_dividend[32:0] = {dividend_sign_ff, a_ff[31:0]};
-	wire [5:0] dw_a_enc;
-	wire [5:0] dw_b_enc;
-	wire [6:0] dw_shortq_raw;
-	eb1_exu_div_cls i_a_cls(
-		.operand(shortq_dividend[32:0]),
-		.cls(dw_a_enc[4:0])
-	);
-	eb1_exu_div_cls i_b_cls(
-		.operand(b_ff[32:0]),
-		.cls(dw_b_enc[4:0])
-	);
-	assign dw_a_enc[5] = 1'b0;
-	assign dw_b_enc[5] = 1'b0;
-	assign dw_shortq_raw[6:0] = ({1'b0, dw_b_enc[5:0]} - {1'b0, dw_a_enc[5:0]}) + 7'd1;
-	assign shortq[5:0] = (dw_shortq_raw[6] ? 6'd0 : dw_shortq_raw[5:0]);
-	assign shortq_enable = ((valid_ff & ~shortq[5]) & ~(shortq[4:2] == 3'b111)) & ~cancel;
-	assign shortq_decode[4:0] = ((((((((((((((((((((((((((((((({5 {shortq[4:0] == 5'd31}} & 5'd0) | ({5 {shortq[4:0] == 5'd30}} & 5'd0)) | ({5 {shortq[4:0] == 5'd29}} & 5'd0)) | ({5 {shortq[4:0] == 5'd28}} & 5'd0)) | ({5 {shortq[4:0] == 5'd27}} & 5'd4)) | ({5 {shortq[4:0] == 5'd26}} & 5'd4)) | ({5 {shortq[4:0] == 5'd25}} & 5'd4)) | ({5 {shortq[4:0] == 5'd24}} & 5'd4)) | ({5 {shortq[4:0] == 5'd23}} & 5'd8)) | ({5 {shortq[4:0] == 5'd22}} & 5'd8)) | ({5 {shortq[4:0] == 5'd21}} & 5'd8)) | ({5 {shortq[4:0] == 5'd20}} & 5'd8)) | ({5 {shortq[4:0] == 5'd19}} & 5'd12)) | ({5 {shortq[4:0] == 5'd18}} & 5'd12)) | ({5 {shortq[4:0] == 5'd17}} & 5'd12)) | ({5 {shortq[4:0] == 5'd16}} & 5'd12)) | ({5 {shortq[4:0] == 5'd15}} & 5'd16)) | ({5 {shortq[4:0] == 5'd14}} & 5'd16)) | ({5 {shortq[4:0] == 5'd13}} & 5'd16)) | ({5 {shortq[4:0] == 5'd12}} & 5'd16)) | ({5 {shortq[4:0] == 5'd11}} & 5'd20)) | ({5 {shortq[4:0] == 5'd10}} & 5'd20)) | ({5 {shortq[4:0] == 5'd9}} & 5'd20)) | ({5 {shortq[4:0] == 5'd8}} & 5'd20)) | ({5 {shortq[4:0] == 5'd7}} & 5'd24)) | ({5 {shortq[4:0] == 5'd6}} & 5'd24)) | ({5 {shortq[4:0] == 5'd5}} & 5'd24)) | ({5 {shortq[4:0] == 5'd4}} & 5'd24)) | ({5 {shortq[4:0] == 5'd3}} & 5'd28)) | ({5 {shortq[4:0] == 5'd2}} & 5'd28)) | ({5 {shortq[4:0] == 5'd1}} & 5'd28)) | ({5 {shortq[4:0] == 5'd0}} & 5'd28);
-	assign shortq_shift[4:0] = (~shortq_enable ? 5'd0 : shortq_decode[4:0]);
-endmodule
-module eb1_exu_div_cls (
-	operand,
-	cls
-);
-	input wire [32:0] operand;
-	output wire [4:0] cls;
-	wire [4:0] cls_zeros;
-	wire [4:0] cls_ones;
-	assign cls_zeros[4:0] = (((((((((((((((((((((((((((((((({5 {operand[31] == 1'b1}} & 5'd0) | ({5 {operand[31:30] == 2'b01}} & 5'd1)) | ({5 {operand[31:29] == {{2 {1'b0}}, 1'b1}}} & 5'd2)) | ({5 {operand[31:28] == {{3 {1'b0}}, 1'b1}}} & 5'd3)) | ({5 {operand[31:27] == {{4 {1'b0}}, 1'b1}}} & 5'd4)) | ({5 {operand[31:26] == {{5 {1'b0}}, 1'b1}}} & 5'd5)) | ({5 {operand[31:25] == {{6 {1'b0}}, 1'b1}}} & 5'd6)) | ({5 {operand[31:24] == {{7 {1'b0}}, 1'b1}}} & 5'd7)) | ({5 {operand[31:23] == {{8 {1'b0}}, 1'b1}}} & 5'd8)) | ({5 {operand[31:22] == {{9 {1'b0}}, 1'b1}}} & 5'd9)) | ({5 {operand[31:21] == {{10 {1'b0}}, 1'b1}}} & 5'd10)) | ({5 {operand[31:20] == {{11 {1'b0}}, 1'b1}}} & 5'd11)) | ({5 {operand[31:19] == {{12 {1'b0}}, 1'b1}}} & 5'd12)) | ({5 {operand[31:18] == {{13 {1'b0}}, 1'b1}}} & 5'd13)) | ({5 {operand[31:17] == {{14 {1'b0}}, 1'b1}}} & 5'd14)) | ({5 {operand[31:16] == {{15 {1'b0}}, 1'b1}}} & 5'd15)) | ({5 {operand[31:15] == {{16 {1'b0}}, 1'b1}}} & 5'd16)) | ({5 {operand[31:14] == {{17 {1'b0}}, 1'b1}}} & 5'd17)) | ({5 {operand[31:13] == {{18 {1'b0}}, 1'b1}}} & 5'd18)) | ({5 {operand[31:12] == {{19 {1'b0}}, 1'b1}}} & 5'd19)) | ({5 {operand[31:11] == {{20 {1'b0}}, 1'b1}}} & 5'd20)) | ({5 {operand[31:10] == {{21 {1'b0}}, 1'b1}}} & 5'd21)) | ({5 {operand[31:9] == {{22 {1'b0}}, 1'b1}}} & 5'd22)) | ({5 {operand[31:8] == {{23 {1'b0}}, 1'b1}}} & 5'd23)) | ({5 {operand[31:7] == {{24 {1'b0}}, 1'b1}}} & 5'd24)) | ({5 {operand[31:6] == {{25 {1'b0}}, 1'b1}}} & 5'd25)) | ({5 {operand[31:5] == {{26 {1'b0}}, 1'b1}}} & 5'd26)) | ({5 {operand[31:4] == {{27 {1'b0}}, 1'b1}}} & 5'd27)) | ({5 {operand[31:3] == {{28 {1'b0}}, 1'b1}}} & 5'd28)) | ({5 {operand[31:2] == {{29 {1'b0}}, 1'b1}}} & 5'd29)) | ({5 {operand[31:1] == {{30 {1'b0}}, 1'b1}}} & 5'd30)) | ({5 {operand[31:0] == {{31 {1'b0}}, 1'b1}}} & 5'd31)) | ({5 {operand[31:0] == {32 {1'b0}}}} & 5'd0);
-	assign cls_ones[4:0] = ((((((((((((((((((((((((((((((({5 {operand[31:30] == 2'b10}} & 5'd0) | ({5 {operand[31:29] == {{2 {1'b1}}, 1'b0}}} & 5'd1)) | ({5 {operand[31:28] == {{3 {1'b1}}, 1'b0}}} & 5'd2)) | ({5 {operand[31:27] == {{4 {1'b1}}, 1'b0}}} & 5'd3)) | ({5 {operand[31:26] == {{5 {1'b1}}, 1'b0}}} & 5'd4)) | ({5 {operand[31:25] == {{6 {1'b1}}, 1'b0}}} & 5'd5)) | ({5 {operand[31:24] == {{7 {1'b1}}, 1'b0}}} & 5'd6)) | ({5 {operand[31:23] == {{8 {1'b1}}, 1'b0}}} & 5'd7)) | ({5 {operand[31:22] == {{9 {1'b1}}, 1'b0}}} & 5'd8)) | ({5 {operand[31:21] == {{10 {1'b1}}, 1'b0}}} & 5'd9)) | ({5 {operand[31:20] == {{11 {1'b1}}, 1'b0}}} & 5'd10)) | ({5 {operand[31:19] == {{12 {1'b1}}, 1'b0}}} & 5'd11)) | ({5 {operand[31:18] == {{13 {1'b1}}, 1'b0}}} & 5'd12)) | ({5 {operand[31:17] == {{14 {1'b1}}, 1'b0}}} & 5'd13)) | ({5 {operand[31:16] == {{15 {1'b1}}, 1'b0}}} & 5'd14)) | ({5 {operand[31:15] == {{16 {1'b1}}, 1'b0}}} & 5'd15)) | ({5 {operand[31:14] == {{17 {1'b1}}, 1'b0}}} & 5'd16)) | ({5 {operand[31:13] == {{18 {1'b1}}, 1'b0}}} & 5'd17)) | ({5 {operand[31:12] == {{19 {1'b1}}, 1'b0}}} & 5'd18)) | ({5 {operand[31:11] == {{20 {1'b1}}, 1'b0}}} & 5'd19)) | ({5 {operand[31:10] == {{21 {1'b1}}, 1'b0}}} & 5'd20)) | ({5 {operand[31:9] == {{22 {1'b1}}, 1'b0}}} & 5'd21)) | ({5 {operand[31:8] == {{23 {1'b1}}, 1'b0}}} & 5'd22)) | ({5 {operand[31:7] == {{24 {1'b1}}, 1'b0}}} & 5'd23)) | ({5 {operand[31:6] == {{25 {1'b1}}, 1'b0}}} & 5'd24)) | ({5 {operand[31:5] == {{26 {1'b1}}, 1'b0}}} & 5'd25)) | ({5 {operand[31:4] == {{27 {1'b1}}, 1'b0}}} & 5'd26)) | ({5 {operand[31:3] == {{28 {1'b1}}, 1'b0}}} & 5'd27)) | ({5 {operand[31:2] == {{29 {1'b1}}, 1'b0}}} & 5'd28)) | ({5 {operand[31:1] == {{30 {1'b1}}, 1'b0}}} & 5'd29)) | ({5 {operand[31:0] == {{31 {1'b1}}, 1'b0}}} & 5'd30)) | ({5 {operand[31:0] == {32 {1'b1}}}} & 5'd31);
-	assign cls[4:0] = (operand[32] ? cls_ones[4:0] : cls_zeros[4:0]);
-endmodule
-module eb1_exu_mul_ctl (
-	clk,
-	rst_l,
-	scan_mode,
-	mul_p,
-	rs1_in,
-	rs2_in,
-	result_x
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire [19:0] mul_p;
-	input wire [31:0] rs1_in;
-	input wire [31:0] rs2_in;
-	output wire [31:0] result_x;
-	wire mul_x_enable;
-	wire bit_x_enable;
-	wire signed [32:0] rs1_ext_in;
-	wire signed [32:0] rs2_ext_in;
-	wire [65:0] prod_x;
-	wire low_x;
-	wire bitmanip_sel_d;
-	wire bitmanip_sel_x;
-	wire [31:0] bitmanip_d;
-	wire [31:0] bitmanip_x;
-	wire ap_bext;
-	wire ap_bdep;
-	wire ap_clmul;
-	wire ap_clmulh;
-	wire ap_clmulr;
-	wire ap_grev;
-	wire ap_gorc;
-	wire ap_shfl;
-	wire ap_unshfl;
-	wire ap_crc32_b;
-	wire ap_crc32_h;
-	wire ap_crc32_w;
-	wire ap_crc32c_b;
-	wire ap_crc32c_h;
-	wire ap_crc32c_w;
-	wire ap_bfp;
-	generate
-		if (pt[2197-:5] == 1) begin
-			assign ap_bext = mul_p[15];
-			assign ap_bdep = mul_p[14];
-		end
-		else begin
-			assign ap_bext = 1'b0;
-			assign ap_bdep = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2202-:5] == 1) begin
-			assign ap_clmul = mul_p[13];
-			assign ap_clmulh = mul_p[12];
-			assign ap_clmulr = mul_p[11];
-		end
-		else begin
-			assign ap_clmul = 1'b0;
-			assign ap_clmulh = 1'b0;
-			assign ap_clmulr = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2187-:5] == 1) begin
-			assign ap_grev = mul_p[10];
-			assign ap_gorc = mul_p[9];
-			assign ap_shfl = mul_p[8];
-			assign ap_unshfl = mul_p[7];
-		end
-		else begin
-			assign ap_grev = 1'b0;
-			assign ap_gorc = 1'b0;
-			assign ap_shfl = 1'b0;
-			assign ap_unshfl = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2182-:5] == 1) begin
-			assign ap_crc32_b = mul_p[6];
-			assign ap_crc32_h = mul_p[5];
-			assign ap_crc32_w = mul_p[4];
-			assign ap_crc32c_b = mul_p[3];
-			assign ap_crc32c_h = mul_p[2];
-			assign ap_crc32c_w = mul_p[1];
-		end
-		else begin
-			assign ap_crc32_b = 1'b0;
-			assign ap_crc32_h = 1'b0;
-			assign ap_crc32_w = 1'b0;
-			assign ap_crc32c_b = 1'b0;
-			assign ap_crc32c_h = 1'b0;
-			assign ap_crc32c_w = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[2192-:5] == 1) begin
-			assign ap_bfp = mul_p[0];
-		end
-		else assign ap_bfp = 1'b0;
-	endgenerate
-	assign mul_x_enable = mul_p[19];
-	assign bit_x_enable = mul_p[19];
-	assign rs1_ext_in[32] = mul_p[18] & rs1_in[31];
-	assign rs2_ext_in[32] = mul_p[17] & rs2_in[31];
-	assign rs1_ext_in[31:0] = rs1_in[31:0];
-	assign rs2_ext_in[31:0] = rs2_in[31:0];
-	wire signed [32:0] rs1_x;
-	wire signed [32:0] rs2_x;
-	rvdffe #(.WIDTH(34)) i_a_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.din({mul_p[16], rs1_ext_in[32:0]}),
-		.dout({low_x, rs1_x[32:0]}),
-		.en(mul_x_enable)
-	);
-	rvdffe #(.WIDTH(33)) i_b_x_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.din(rs2_ext_in[32:0]),
-		.dout(rs2_x[32:0]),
-		.en(mul_x_enable)
-	);
-	assign prod_x[65:0] = rs1_x * rs2_x;
-	reg [31:0] bext_d;
-	reg bext_test_bit_d;
-	integer bext_i;
-	integer bext_j;
-	always @(*) begin
-		bext_j = 0;
-		bext_test_bit_d = 1'b0;
-		bext_d[31:0] = 32'b00000000000000000000000000000000;
-		for (bext_i = 0; bext_i < 32; bext_i = bext_i + 1)
-			begin
-				bext_test_bit_d = rs2_in[bext_i];
-				if (bext_test_bit_d) begin
-					bext_d[bext_j] = rs1_in[bext_i];
-					bext_j = bext_j + 1;
-				end
-			end
-	end
-	reg [31:0] bdep_d;
-	reg bdep_test_bit_d;
-	integer bdep_i;
-	integer bdep_j;
-	always @(*) begin
-		bdep_j = 0;
-		bdep_test_bit_d = 1'b0;
-		bdep_d[31:0] = 32'b00000000000000000000000000000000;
-		for (bdep_i = 0; bdep_i < 32; bdep_i = bdep_i + 1)
-			begin
-				bdep_test_bit_d = rs2_in[bdep_i];
-				if (bdep_test_bit_d) begin
-					bdep_d[bdep_i] = rs1_in[bdep_j];
-					bdep_j = bdep_j + 1;
-				end
-			end
-	end
-	wire [62:0] clmul_raw_d;
-	assign clmul_raw_d[62:0] = ((((((((((((((((((((((((((((((({63 {rs2_in[0]}} & {31'b0000000000000000000000000000000, rs1_in[31:0]}) ^ ({63 {rs2_in[1]}} & {30'b000000000000000000000000000000, rs1_in[31:0], 1'b0})) ^ ({63 {rs2_in[2]}} & {29'b00000000000000000000000000000, rs1_in[31:0], 2'b00})) ^ ({63 {rs2_in[3]}} & {28'b0000000000000000000000000000, rs1_in[31:0], 3'b000})) ^ ({63 {rs2_in[4]}} & {27'b000000000000000000000000000, rs1_in[31:0], 4'b0000})) ^ ({63 {rs2_in[5]}} & {26'b00000000000000000000000000, rs1_in[31:0], 5'b00000})) ^ ({63 {rs2_in[6]}} & {25'b0000000000000000000000000, rs1_in[31:0], 6'b000000})) ^ ({63 {rs2_in[7]}} & {24'b000000000000000000000000, rs1_in[31:0], 7'b0000000})) ^ ({63 {rs2_in[8]}} & {23'b00000000000000000000000, rs1_in[31:0], 8'b00000000})) ^ ({63 {rs2_in[9]}} & {22'b0000000000000000000000, rs1_in[31:0], 9'b000000000})) ^ ({63 {rs2_in[10]}} & {21'b000000000000000000000, rs1_in[31:0], 10'b0000000000})) ^ ({63 {rs2_in[11]}} & {20'b00000000000000000000, rs1_in[31:0], 11'b00000000000})) ^ ({63 {rs2_in[12]}} & {19'b0000000000000000000, rs1_in[31:0], 12'b000000000000})) ^ ({63 {rs2_in[13]}} & {18'b000000000000000000, rs1_in[31:0], 13'b0000000000000})) ^ ({63 {rs2_in[14]}} & {17'b00000000000000000, rs1_in[31:0], 14'b00000000000000})) ^ ({63 {rs2_in[15]}} & {16'b0000000000000000, rs1_in[31:0], 15'b000000000000000})) ^ ({63 {rs2_in[16]}} & {15'b000000000000000, rs1_in[31:0], 16'b0000000000000000})) ^ ({63 {rs2_in[17]}} & {14'b00000000000000, rs1_in[31:0], 17'b00000000000000000})) ^ ({63 {rs2_in[18]}} & {13'b0000000000000, rs1_in[31:0], 18'b000000000000000000})) ^ ({63 {rs2_in[19]}} & {12'b000000000000, rs1_in[31:0], 19'b0000000000000000000})) ^ ({63 {rs2_in[20]}} & {11'b00000000000, rs1_in[31:0], 20'b00000000000000000000})) ^ ({63 {rs2_in[21]}} & {10'b0000000000, rs1_in[31:0], 21'b000000000000000000000})) ^ ({63 {rs2_in[22]}} & {9'b000000000, rs1_in[31:0], 22'b0000000000000000000000})) ^ ({63 {rs2_in[23]}} & {8'b00000000, rs1_in[31:0], 23'b00000000000000000000000})) ^ ({63 {rs2_in[24]}} & {7'b0000000, rs1_in[31:0], 24'b000000000000000000000000})) ^ ({63 {rs2_in[25]}} & {6'b000000, rs1_in[31:0], 25'b0000000000000000000000000})) ^ ({63 {rs2_in[26]}} & {5'b00000, rs1_in[31:0], 26'b00000000000000000000000000})) ^ ({63 {rs2_in[27]}} & {4'b0000, rs1_in[31:0], 27'b000000000000000000000000000})) ^ ({63 {rs2_in[28]}} & {3'b000, rs1_in[31:0], 28'b0000000000000000000000000000})) ^ ({63 {rs2_in[29]}} & {2'b00, rs1_in[31:0], 29'b00000000000000000000000000000})) ^ ({63 {rs2_in[30]}} & {1'b0, rs1_in[31:0], 30'b000000000000000000000000000000})) ^ ({63 {rs2_in[31]}} & {rs1_in[31:0], 31'b0000000000000000000000000000000});
-	wire [31:0] grev1_d;
-	wire [31:0] grev2_d;
-	wire [31:0] grev4_d;
-	wire [31:0] grev8_d;
-	wire [31:0] grev_d;
-	assign grev1_d[31:0] = (rs2_in[0] ? {rs1_in[30], rs1_in[31], rs1_in[28], rs1_in[29], rs1_in[26], rs1_in[27], rs1_in[24], rs1_in[25], rs1_in[22], rs1_in[23], rs1_in[20], rs1_in[21], rs1_in[18], rs1_in[19], rs1_in[16], rs1_in[17], rs1_in[14], rs1_in[15], rs1_in[12], rs1_in[13], rs1_in[10], rs1_in[11], rs1_in[8], rs1_in[9], rs1_in[6], rs1_in[7], rs1_in[4], rs1_in[5], rs1_in[2], rs1_in[3], rs1_in[0], rs1_in[1]} : rs1_in[31:0]);
-	assign grev2_d[31:0] = (rs2_in[1] ? {grev1_d[29:28], grev1_d[31:30], grev1_d[25:24], grev1_d[27:26], grev1_d[21:20], grev1_d[23:22], grev1_d[17:16], grev1_d[19:18], grev1_d[13:12], grev1_d[15:14], grev1_d[9:8], grev1_d[11:10], grev1_d[5:4], grev1_d[7:6], grev1_d[1:0], grev1_d[3:2]} : grev1_d[31:0]);
-	assign grev4_d[31:0] = (rs2_in[2] ? {grev2_d[27:24], grev2_d[31:28], grev2_d[19:16], grev2_d[23:20], grev2_d[11:8], grev2_d[15:12], grev2_d[3:0], grev2_d[7:4]} : grev2_d[31:0]);
-	assign grev8_d[31:0] = (rs2_in[3] ? {grev4_d[23:16], grev4_d[31:24], grev4_d[7:0], grev4_d[15:8]} : grev4_d[31:0]);
-	assign grev_d[31:0] = (rs2_in[4] ? {grev8_d[15:0], grev8_d[31:16]} : grev8_d[31:0]);
-	wire [31:0] gorc1_d;
-	wire [31:0] gorc2_d;
-	wire [31:0] gorc4_d;
-	wire [31:0] gorc8_d;
-	wire [31:0] gorc_d;
-	assign gorc1_d[31:0] = ({32 {rs2_in[0]}} & {rs1_in[30], rs1_in[31], rs1_in[28], rs1_in[29], rs1_in[26], rs1_in[27], rs1_in[24], rs1_in[25], rs1_in[22], rs1_in[23], rs1_in[20], rs1_in[21], rs1_in[18], rs1_in[19], rs1_in[16], rs1_in[17], rs1_in[14], rs1_in[15], rs1_in[12], rs1_in[13], rs1_in[10], rs1_in[11], rs1_in[8], rs1_in[9], rs1_in[6], rs1_in[7], rs1_in[4], rs1_in[5], rs1_in[2], rs1_in[3], rs1_in[0], rs1_in[1]}) | rs1_in[31:0];
-	assign gorc2_d[31:0] = ({32 {rs2_in[1]}} & {gorc1_d[29:28], gorc1_d[31:30], gorc1_d[25:24], gorc1_d[27:26], gorc1_d[21:20], gorc1_d[23:22], gorc1_d[17:16], gorc1_d[19:18], gorc1_d[13:12], gorc1_d[15:14], gorc1_d[9:8], gorc1_d[11:10], gorc1_d[5:4], gorc1_d[7:6], gorc1_d[1:0], gorc1_d[3:2]}) | gorc1_d[31:0];
-	assign gorc4_d[31:0] = ({32 {rs2_in[2]}} & {gorc2_d[27:24], gorc2_d[31:28], gorc2_d[19:16], gorc2_d[23:20], gorc2_d[11:8], gorc2_d[15:12], gorc2_d[3:0], gorc2_d[7:4]}) | gorc2_d[31:0];
-	assign gorc8_d[31:0] = ({32 {rs2_in[3]}} & {gorc4_d[23:16], gorc4_d[31:24], gorc4_d[7:0], gorc4_d[15:8]}) | gorc4_d[31:0];
-	assign gorc_d[31:0] = ({32 {rs2_in[4]}} & {gorc8_d[15:0], gorc8_d[31:16]}) | gorc8_d[31:0];
-	wire [31:0] shfl8_d;
-	wire [31:0] shfl4_d;
-	wire [31:0] shfl2_d;
-	wire [31:0] shfl_d;
-	assign shfl8_d[31:0] = (rs2_in[3] ? {rs1_in[31:24], rs1_in[15:8], rs1_in[23:16], rs1_in[7:0]} : rs1_in[31:0]);
-	assign shfl4_d[31:0] = (rs2_in[2] ? {shfl8_d[31:28], shfl8_d[23:20], shfl8_d[27:24], shfl8_d[19:16], shfl8_d[15:12], shfl8_d[7:4], shfl8_d[11:8], shfl8_d[3:0]} : shfl8_d[31:0]);
-	assign shfl2_d[31:0] = (rs2_in[1] ? {shfl4_d[31:30], shfl4_d[27:26], shfl4_d[29:28], shfl4_d[25:24], shfl4_d[23:22], shfl4_d[19:18], shfl4_d[21:20], shfl4_d[17:16], shfl4_d[15:14], shfl4_d[11:10], shfl4_d[13:12], shfl4_d[9:8], shfl4_d[7:6], shfl4_d[3:2], shfl4_d[5:4], shfl4_d[1:0]} : shfl4_d[31:0]);
-	assign shfl_d[31:0] = (rs2_in[0] ? {shfl2_d[31], shfl2_d[29], shfl2_d[30], shfl2_d[28], shfl2_d[27], shfl2_d[25], shfl2_d[26], shfl2_d[24], shfl2_d[23], shfl2_d[21], shfl2_d[22], shfl2_d[20], shfl2_d[19], shfl2_d[17], shfl2_d[18], shfl2_d[16], shfl2_d[15], shfl2_d[13], shfl2_d[14], shfl2_d[12], shfl2_d[11], shfl2_d[9], shfl2_d[10], shfl2_d[8], shfl2_d[7], shfl2_d[5], shfl2_d[6], shfl2_d[4], shfl2_d[3], shfl2_d[1], shfl2_d[2], shfl2_d[0]} : shfl2_d[31:0]);
-	wire [31:0] unshfl1_d;
-	wire [31:0] unshfl2_d;
-	wire [31:0] unshfl4_d;
-	wire [31:0] unshfl_d;
-	assign unshfl1_d[31:0] = (rs2_in[0] ? {rs1_in[31], rs1_in[29], rs1_in[30], rs1_in[28], rs1_in[27], rs1_in[25], rs1_in[26], rs1_in[24], rs1_in[23], rs1_in[21], rs1_in[22], rs1_in[20], rs1_in[19], rs1_in[17], rs1_in[18], rs1_in[16], rs1_in[15], rs1_in[13], rs1_in[14], rs1_in[12], rs1_in[11], rs1_in[9], rs1_in[10], rs1_in[8], rs1_in[7], rs1_in[5], rs1_in[6], rs1_in[4], rs1_in[3], rs1_in[1], rs1_in[2], rs1_in[0]} : rs1_in[31:0]);
-	assign unshfl2_d[31:0] = (rs2_in[1] ? {unshfl1_d[31:30], unshfl1_d[27:26], unshfl1_d[29:28], unshfl1_d[25:24], unshfl1_d[23:22], unshfl1_d[19:18], unshfl1_d[21:20], unshfl1_d[17:16], unshfl1_d[15:14], unshfl1_d[11:10], unshfl1_d[13:12], unshfl1_d[9:8], unshfl1_d[7:6], unshfl1_d[3:2], unshfl1_d[5:4], unshfl1_d[1:0]} : unshfl1_d[31:0]);
-	assign unshfl4_d[31:0] = (rs2_in[2] ? {unshfl2_d[31:28], unshfl2_d[23:20], unshfl2_d[27:24], unshfl2_d[19:16], unshfl2_d[15:12], unshfl2_d[7:4], unshfl2_d[11:8], unshfl2_d[3:0]} : unshfl2_d[31:0]);
-	assign unshfl_d[31:0] = (rs2_in[3] ? {unshfl4_d[31:24], unshfl4_d[15:8], unshfl4_d[23:16], unshfl4_d[7:0]} : unshfl4_d[31:0]);
-	wire crc32_all;
-	wire [31:0] crc32_poly_rev;
-	wire [31:0] crc32c_poly_rev;
-	integer crc32_bi;
-	integer crc32_hi;
-	integer crc32_wi;
-	integer crc32c_bi;
-	integer crc32c_hi;
-	integer crc32c_wi;
-	reg [31:0] crc32_bd;
-	reg [31:0] crc32_hd;
-	reg [31:0] crc32_wd;
-	reg [31:0] crc32c_bd;
-	reg [31:0] crc32c_hd;
-	reg [31:0] crc32c_wd;
-	assign crc32_all = ((((ap_crc32_b | ap_crc32_h) | ap_crc32_w) | ap_crc32c_b) | ap_crc32c_h) | ap_crc32c_w;
-	assign crc32_poly_rev[31:0] = 32'hedb88320;
-	assign crc32c_poly_rev[31:0] = 32'h82f63b78;
-	always @(*) begin
-		crc32_bd[31:0] = rs1_in[31:0];
-		for (crc32_bi = 0; crc32_bi < 8; crc32_bi = crc32_bi + 1)
-			crc32_bd[31:0] = (crc32_bd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32 {crc32_bd[0]}});
-	end
-	always @(*) begin
-		crc32_hd[31:0] = rs1_in[31:0];
-		for (crc32_hi = 0; crc32_hi < 16; crc32_hi = crc32_hi + 1)
-			crc32_hd[31:0] = (crc32_hd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32 {crc32_hd[0]}});
-	end
-	always @(*) begin
-		crc32_wd[31:0] = rs1_in[31:0];
-		for (crc32_wi = 0; crc32_wi < 32; crc32_wi = crc32_wi + 1)
-			crc32_wd[31:0] = (crc32_wd[31:0] >> 1) ^ (crc32_poly_rev[31:0] & {32 {crc32_wd[0]}});
-	end
-	always @(*) begin
-		crc32c_bd[31:0] = rs1_in[31:0];
-		for (crc32c_bi = 0; crc32c_bi < 8; crc32c_bi = crc32c_bi + 1)
-			crc32c_bd[31:0] = (crc32c_bd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32 {crc32c_bd[0]}});
-	end
-	always @(*) begin
-		crc32c_hd[31:0] = rs1_in[31:0];
-		for (crc32c_hi = 0; crc32c_hi < 16; crc32c_hi = crc32c_hi + 1)
-			crc32c_hd[31:0] = (crc32c_hd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32 {crc32c_hd[0]}});
-	end
-	always @(*) begin
-		crc32c_wd[31:0] = rs1_in[31:0];
-		for (crc32c_wi = 0; crc32c_wi < 32; crc32c_wi = crc32c_wi + 1)
-			crc32c_wd[31:0] = (crc32c_wd[31:0] >> 1) ^ (crc32c_poly_rev[31:0] & {32 {crc32c_wd[0]}});
-	end
-	wire [4:0] bfp_len;
-	wire [4:0] bfp_off;
-	wire [31:0] bfp_len_mask_;
-	wire [15:0] bfp_preshift_data;
-	wire [63:0] bfp_shift_data;
-	wire [63:0] bfp_shift_mask;
-	wire [31:0] bfp_result_d;
-	assign bfp_len[3:0] = rs2_in[27:24];
-	assign bfp_len[4] = bfp_len[3:0] == 4'b0000;
-	assign bfp_off[4:0] = rs2_in[20:16];
-	assign bfp_len_mask_[31:0] = 32'hffffffff << bfp_len[4:0];
-	assign bfp_preshift_data[15:0] = rs2_in[15:0] & ~bfp_len_mask_[15:0];
-	assign bfp_shift_data[63:0] = {16'b0000000000000000, bfp_preshift_data[15:0], 16'b0000000000000000, bfp_preshift_data[15:0]} << bfp_off[4:0];
-	assign bfp_shift_mask[63:0] = {bfp_len_mask_[31:0], bfp_len_mask_[31:0]} << bfp_off[4:0];
-	assign bfp_result_d[31:0] = bfp_shift_data[63:32] | (rs1_in[31:0] & bfp_shift_mask[63:32]);
-	assign bitmanip_sel_d = (((((((((ap_bext | ap_bdep) | ap_clmul) | ap_clmulh) | ap_clmulr) | ap_grev) | ap_gorc) | ap_shfl) | ap_unshfl) | crc32_all) | ap_bfp;
-	assign bitmanip_d[31:0] = ((((((((((((((({32 {ap_bext}} & bext_d[31:0]) | ({32 {ap_bdep}} & bdep_d[31:0])) | ({32 {ap_clmul}} & clmul_raw_d[31:0])) | ({32 {ap_clmulh}} & {1'b0, clmul_raw_d[62:32]})) | ({32 {ap_clmulr}} & clmul_raw_d[62:31])) | ({32 {ap_grev}} & grev_d[31:0])) | ({32 {ap_gorc}} & gorc_d[31:0])) | ({32 {ap_shfl}} & shfl_d[31:0])) | ({32 {ap_unshfl}} & unshfl_d[31:0])) | ({32 {ap_crc32_b}} & crc32_bd[31:0])) | ({32 {ap_crc32_h}} & crc32_hd[31:0])) | ({32 {ap_crc32_w}} & crc32_wd[31:0])) | ({32 {ap_crc32c_b}} & crc32c_bd[31:0])) | ({32 {ap_crc32c_h}} & crc32c_hd[31:0])) | ({32 {ap_crc32c_w}} & crc32c_wd[31:0])) | ({32 {ap_bfp}} & bfp_result_d[31:0]);
-	rvdffe #(.WIDTH(33)) i_bitmanip_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.din({bitmanip_sel_d, bitmanip_d[31:0]}),
-		.dout({bitmanip_sel_x, bitmanip_x[31:0]}),
-		.en(bit_x_enable)
-	);
-	assign result_x[31:0] = (({32 {~bitmanip_sel_x & ~low_x}} & prod_x[63:32]) | ({32 {~bitmanip_sel_x & low_x}} & prod_x[31:0])) | bitmanip_x[31:0];
-endmodule
-module eb1_ifu (
-	free_l2clk,
-	active_clk,
-	clk,
-	rst_l,
-	dec_i0_decode_d,
-	exu_flush_final,
-	dec_tlu_i0_commit_cmt,
-	dec_tlu_flush_err_wb,
-	dec_tlu_flush_noredir_wb,
-	exu_flush_path_final,
-	dec_tlu_mrac_ff,
-	dec_tlu_fence_i_wb,
-	dec_tlu_flush_leak_one_wb,
-	dec_tlu_bpred_disable,
-	dec_tlu_core_ecc_disable,
-	dec_tlu_force_halt,
-	ifu_axi_awvalid,
-	ifu_axi_awid,
-	ifu_axi_awaddr,
-	ifu_axi_awregion,
-	ifu_axi_awlen,
-	ifu_axi_awsize,
-	ifu_axi_awburst,
-	ifu_axi_awlock,
-	ifu_axi_awcache,
-	ifu_axi_awprot,
-	ifu_axi_awqos,
-	ifu_axi_wvalid,
-	ifu_axi_wdata,
-	ifu_axi_wstrb,
-	ifu_axi_wlast,
-	ifu_axi_bready,
-	ifu_axi_arvalid,
-	ifu_axi_arready,
-	ifu_axi_arid,
-	ifu_axi_araddr,
-	ifu_axi_arregion,
-	ifu_axi_arlen,
-	ifu_axi_arsize,
-	ifu_axi_arburst,
-	ifu_axi_arlock,
-	ifu_axi_arcache,
-	ifu_axi_arprot,
-	ifu_axi_arqos,
-	ifu_axi_rvalid,
-	ifu_axi_rready,
-	ifu_axi_rid,
-	ifu_axi_rdata,
-	ifu_axi_rresp,
-	ifu_bus_clk_en,
-	dma_iccm_req,
-	dma_mem_addr,
-	dma_mem_sz,
-	dma_mem_write,
-	dma_mem_wdata,
-	dma_mem_tag,
-	dma_iccm_stall_any,
-	iccm_dma_ecc_error,
-	iccm_dma_rvalid,
-	iccm_dma_rdata,
-	iccm_dma_rtag,
-	iccm_ready,
-	ifu_pmu_instr_aligned,
-	ifu_pmu_fetch_stall,
-	ifu_ic_error_start,
-	ic_rw_addr,
-	ic_wr_en,
-	ic_rd_en,
-	ic_wr_data,
-	ic_rd_data,
-	ic_debug_rd_data,
-	ictag_debug_rd_data,
-	ic_debug_wr_data,
-	ifu_ic_debug_rd_data,
-	ic_eccerr,
-	ic_parerr,
-	ic_premux_data,
-	ic_sel_premux_data,
-	ic_debug_addr,
-	ic_debug_rd_en,
-	ic_debug_wr_en,
-	ic_debug_tag_array,
-	ic_debug_way,
-	ic_tag_valid,
-	ic_rd_hit,
-	ic_tag_perr,
-	iccm_rw_addr,
-	iccm_wren,
-	iccm_rden,
-	iccm_wr_data,
-	iccm_wr_size,
-	iccm_rd_data,
-	iccm_rd_data_ecc,
-	ifu_iccm_rd_ecc_single_err,
-	ifu_pmu_ic_miss,
-	ifu_pmu_ic_hit,
-	ifu_pmu_bus_error,
-	ifu_pmu_bus_busy,
-	ifu_pmu_bus_trxn,
-	ifu_i0_icaf,
-	ifu_i0_icaf_type,
-	ifu_i0_valid,
-	ifu_i0_icaf_second,
-	ifu_i0_dbecc,
-	iccm_dma_sb_error,
-	ifu_i0_instr,
-	ifu_i0_pc,
-	ifu_i0_pc4,
-	ifu_miss_state_idle,
-	i0_brp,
-	ifu_i0_bp_index,
-	ifu_i0_bp_fghr,
-	ifu_i0_bp_btag,
-	ifu_i0_fa_index,
-	exu_mp_pkt,
-	exu_mp_eghr,
-	exu_mp_fghr,
-	exu_mp_index,
-	exu_mp_btag,
-	dec_tlu_br0_r_pkt,
-	exu_i0_br_fghr_r,
-	exu_i0_br_index_r,
-	dec_fa_error_index,
-	dec_tlu_flush_lower_wb,
-	ifu_i0_cinst,
-	dec_tlu_ic_diag_pkt,
-	ifu_ic_debug_rd_data_valid,
-	iccm_buf_correct_ecc,
-	iccm_correction_state,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire free_l2clk;
-	input wire active_clk;
-	input wire clk;
-	input wire rst_l;
-	input wire dec_i0_decode_d;
-	input wire exu_flush_final;
-	input wire dec_tlu_i0_commit_cmt;
-	input wire dec_tlu_flush_err_wb;
-	input wire dec_tlu_flush_noredir_wb;
-	input wire [31:1] exu_flush_path_final;
-	input wire [31:0] dec_tlu_mrac_ff;
-	input wire dec_tlu_fence_i_wb;
-	input wire dec_tlu_flush_leak_one_wb;
-	input wire dec_tlu_bpred_disable;
-	input wire dec_tlu_core_ecc_disable;
-	input wire dec_tlu_force_halt;
-	output wire ifu_axi_awvalid;
-	output wire [pt[826-:8] - 1:0] ifu_axi_awid;
-	output wire [31:0] ifu_axi_awaddr;
-	output wire [3:0] ifu_axi_awregion;
-	output wire [7:0] ifu_axi_awlen;
-	output wire [2:0] ifu_axi_awsize;
-	output wire [1:0] ifu_axi_awburst;
-	output wire ifu_axi_awlock;
-	output wire [3:0] ifu_axi_awcache;
-	output wire [2:0] ifu_axi_awprot;
-	output wire [3:0] ifu_axi_awqos;
-	output wire ifu_axi_wvalid;
-	output wire [63:0] ifu_axi_wdata;
-	output wire [7:0] ifu_axi_wstrb;
-	output wire ifu_axi_wlast;
-	output wire ifu_axi_bready;
-	output wire ifu_axi_arvalid;
-	input wire ifu_axi_arready;
-	output wire [pt[826-:8] - 1:0] ifu_axi_arid;
-	output wire [31:0] ifu_axi_araddr;
-	output wire [3:0] ifu_axi_arregion;
-	output wire [7:0] ifu_axi_arlen;
-	output wire [2:0] ifu_axi_arsize;
-	output wire [1:0] ifu_axi_arburst;
-	output wire ifu_axi_arlock;
-	output wire [3:0] ifu_axi_arcache;
-	output wire [2:0] ifu_axi_arprot;
-	output wire [3:0] ifu_axi_arqos;
-	input wire ifu_axi_rvalid;
-	output wire ifu_axi_rready;
-	input wire [pt[826-:8] - 1:0] ifu_axi_rid;
-	input wire [63:0] ifu_axi_rdata;
-	input wire [1:0] ifu_axi_rresp;
-	input wire ifu_bus_clk_en;
-	input wire dma_iccm_req;
-	input wire [31:0] dma_mem_addr;
-	input wire [2:0] dma_mem_sz;
-	input wire dma_mem_write;
-	input wire [63:0] dma_mem_wdata;
-	input wire [2:0] dma_mem_tag;
-	input wire dma_iccm_stall_any;
-	output wire iccm_dma_ecc_error;
-	output wire iccm_dma_rvalid;
-	output wire [63:0] iccm_dma_rdata;
-	output wire [2:0] iccm_dma_rtag;
-	output wire iccm_ready;
-	output wire ifu_pmu_instr_aligned;
-	output wire ifu_pmu_fetch_stall;
-	output wire ifu_ic_error_start;
-	output wire [31:1] ic_rw_addr;
-	output wire [pt[1060-:7] - 1:0] ic_wr_en;
-	output wire ic_rd_en;
-	output wire [(pt[1189-:7] * 71) - 1:0] ic_wr_data;
-	input wire [63:0] ic_rd_data;
-	input wire [70:0] ic_debug_rd_data;
-	input wire [25:0] ictag_debug_rd_data;
-	output wire [70:0] ic_debug_wr_data;
-	output wire [70:0] ifu_ic_debug_rd_data;
-	input wire [pt[1189-:7] - 1:0] ic_eccerr;
-	input wire [pt[1189-:7] - 1:0] ic_parerr;
-	output wire [63:0] ic_premux_data;
-	output wire ic_sel_premux_data;
-	output wire [pt[1104-:9]:3] ic_debug_addr;
-	output wire ic_debug_rd_en;
-	output wire ic_debug_wr_en;
-	output wire ic_debug_tag_array;
-	output wire [pt[1060-:7] - 1:0] ic_debug_way;
-	output wire [pt[1060-:7] - 1:0] ic_tag_valid;
-	input wire [pt[1060-:7] - 1:0] ic_rd_hit;
-	input wire ic_tag_perr;
-	output wire [pt[936-:9] - 1:1] iccm_rw_addr;
-	output wire iccm_wren;
-	output wire iccm_rden;
-	output wire [77:0] iccm_wr_data;
-	output wire [2:0] iccm_wr_size;
-	input wire [63:0] iccm_rd_data;
-	input wire [77:0] iccm_rd_data_ecc;
-	output wire ifu_iccm_rd_ecc_single_err;
-	output wire ifu_pmu_ic_miss;
-	output wire ifu_pmu_ic_hit;
-	output wire ifu_pmu_bus_error;
-	output wire ifu_pmu_bus_busy;
-	output wire ifu_pmu_bus_trxn;
-	output wire ifu_i0_icaf;
-	output wire [1:0] ifu_i0_icaf_type;
-	output wire ifu_i0_valid;
-	output wire ifu_i0_icaf_second;
-	output wire ifu_i0_dbecc;
-	output wire iccm_dma_sb_error;
-	output wire [31:0] ifu_i0_instr;
-	output wire [31:1] ifu_i0_pc;
-	output wire ifu_i0_pc4;
-	output wire ifu_miss_state_idle;
-	output wire [50:0] i0_brp;
-	output wire [pt[2172-:9]:pt[2163-:6]] ifu_i0_bp_index;
-	output wire [pt[2236-:8] - 1:0] ifu_i0_bp_fghr;
-	output wire [pt[2139-:9] - 1:0] ifu_i0_bp_btag;
-	output wire [$clog2(pt[2061-:14]) - 1:0] ifu_i0_fa_index;
-	input wire [55:0] exu_mp_pkt;
-	input wire [pt[2236-:8] - 1:0] exu_mp_eghr;
-	input wire [pt[2236-:8] - 1:0] exu_mp_fghr;
-	input wire [pt[2172-:9]:pt[2163-:6]] exu_mp_index;
-	input wire [pt[2139-:9] - 1:0] exu_mp_btag;
-	input wire [6:0] dec_tlu_br0_r_pkt;
-	input wire [pt[2236-:8] - 1:0] exu_i0_br_fghr_r;
-	input wire [pt[2172-:9]:pt[2163-:6]] exu_i0_br_index_r;
-	input wire [$clog2(pt[2061-:14]) - 1:0] dec_fa_error_index;
-	input dec_tlu_flush_lower_wb;
-	output wire [15:0] ifu_i0_cinst;
-	input wire [89:0] dec_tlu_ic_diag_pkt;
-	output wire ifu_ic_debug_rd_data_valid;
-	output wire iccm_buf_correct_ecc;
-	output wire iccm_correction_state;
-	input wire scan_mode;
-	localparam TAGWIDTH = 2;
-	localparam IDWIDTH = 2;
-	wire ifu_fb_consume1;
-	wire ifu_fb_consume2;
-	wire [31:1] ifc_fetch_addr_f;
-	wire [31:1] ifc_fetch_addr_bf;
-	wire [1:0] ifu_fetch_val;
-	wire [31:1] ifu_fetch_pc;
-	wire iccm_rd_ecc_single_err;
-	wire ic_error_start;
-	assign ifu_iccm_rd_ecc_single_err = iccm_rd_ecc_single_err;
-	assign ifu_ic_error_start = ic_error_start;
-	wire ic_write_stall;
-	wire ic_dma_active;
-	wire ifc_dma_access_ok;
-	wire [1:0] ic_access_fault_f;
-	wire [1:0] ic_access_fault_type_f;
-	wire ifu_ic_mb_empty;
-	wire ic_hit_f;
-	wire [1:0] ifu_bp_way_f;
-	wire ifu_bp_hit_taken_f;
-	wire [31:1] ifu_bp_btb_target_f;
-	wire ifu_bp_inst_mask_f;
-	wire [1:0] ifu_bp_hist1_f;
-	wire [1:0] ifu_bp_hist0_f;
-	wire [11:0] ifu_bp_poffset_f;
-	wire [1:0] ifu_bp_ret_f;
-	wire [1:0] ifu_bp_pc4_f;
-	wire [1:0] ifu_bp_valid_f;
-	wire [pt[2236-:8] - 1:0] ifu_bp_fghr_f;
-	wire [(2 * $clog2(pt[2061-:14])) - 1:0] ifu_bp_fa_index_f;
-	wire ifc_fetch_req_bf;
-	wire ifc_fetch_req_bf_raw;
-	wire ifc_fetch_req_f;
-	wire ifc_fetch_uncacheable_bf;
-	wire ifc_iccm_access_bf;
-	wire ifc_region_acc_fault_bf;
-	eb1_ifu_ifc_ctl #(.pt(pt)) ifc(
-		.clk(clk),
-		.free_l2clk(free_l2clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.ic_hit_f(ic_hit_f),
-		.ifu_ic_mb_empty(ifu_ic_mb_empty),
-		.ifu_fb_consume1(ifu_fb_consume1),
-		.ifu_fb_consume2(ifu_fb_consume2),
-		.dec_tlu_flush_noredir_wb(dec_tlu_flush_noredir_wb),
-		.exu_flush_final(exu_flush_final),
-		.exu_flush_path_final(exu_flush_path_final),
-		.ifu_bp_hit_taken_f(ifu_bp_hit_taken_f),
-		.ifu_bp_btb_target_f(ifu_bp_btb_target_f),
-		.ic_dma_active(ic_dma_active),
-		.ic_write_stall(ic_write_stall),
-		.dma_iccm_stall_any(dma_iccm_stall_any),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.ifc_fetch_addr_f(ifc_fetch_addr_f),
-		.ifc_fetch_addr_bf(ifc_fetch_addr_bf),
-		.ifc_fetch_req_f(ifc_fetch_req_f),
-		.ifu_pmu_fetch_stall(ifu_pmu_fetch_stall),
-		.ifc_fetch_uncacheable_bf(ifc_fetch_uncacheable_bf),
-		.ifc_fetch_req_bf(ifc_fetch_req_bf),
-		.ifc_fetch_req_bf_raw(ifc_fetch_req_bf_raw),
-		.ifc_iccm_access_bf(ifc_iccm_access_bf),
-		.ifc_region_acc_fault_bf(ifc_region_acc_fault_bf),
-		.ifc_dma_access_ok(ifc_dma_access_ok)
-	);
-	generate
-		if (pt[2130-:5] == 1) begin : bpred
-			eb1_ifu_bp_ctl #(.pt(pt)) bp(
-				.clk(clk),
-				.rst_l(rst_l),
-				.ic_hit_f(ic_hit_f),
-				.ifc_fetch_addr_f(ifc_fetch_addr_f),
-				.ifc_fetch_req_f(ifc_fetch_req_f),
-				.dec_tlu_br0_r_pkt(dec_tlu_br0_r_pkt),
-				.exu_i0_br_fghr_r(exu_i0_br_fghr_r),
-				.exu_i0_br_index_r(exu_i0_br_index_r),
-				.dec_fa_error_index(dec_fa_error_index),
-				.dec_tlu_flush_lower_wb(dec_tlu_flush_lower_wb),
-				.dec_tlu_flush_leak_one_wb(dec_tlu_flush_leak_one_wb),
-				.dec_tlu_bpred_disable(dec_tlu_bpred_disable),
-				.exu_mp_pkt(exu_mp_pkt),
-				.exu_mp_eghr(exu_mp_eghr),
-				.exu_mp_fghr(exu_mp_fghr),
-				.exu_mp_index(exu_mp_index),
-				.exu_mp_btag(exu_mp_btag),
-				.exu_flush_final(exu_flush_final),
-				.ifu_bp_hit_taken_f(ifu_bp_hit_taken_f),
-				.ifu_bp_btb_target_f(ifu_bp_btb_target_f),
-				.ifu_bp_inst_mask_f(ifu_bp_inst_mask_f),
-				.ifu_bp_fghr_f(ifu_bp_fghr_f),
-				.ifu_bp_way_f(ifu_bp_way_f),
-				.ifu_bp_ret_f(ifu_bp_ret_f),
-				.ifu_bp_hist1_f(ifu_bp_hist1_f),
-				.ifu_bp_hist0_f(ifu_bp_hist0_f),
-				.ifu_bp_pc4_f(ifu_bp_pc4_f),
-				.ifu_bp_valid_f(ifu_bp_valid_f),
-				.ifu_bp_poffset_f(ifu_bp_poffset_f),
-				.ifu_bp_fa_index_f(ifu_bp_fa_index_f),
-				.scan_mode(scan_mode)
-			);
-		end
-		else begin : bpred
-			assign ifu_bp_hit_taken_f = 1'b0;
-			wire btb_wr_en_way0;
-			wire btb_wr_en_way1;
-			wire dec_tlu_error_wb;
-			wire [16 + pt[2139-:9]:0] btb_wr_data;
-			assign btb_wr_en_way0 = 1'b0;
-			assign btb_wr_en_way1 = 1'b0;
-			assign btb_wr_data = {((16 + pt[2139-:9]) >= 0 ? (16 + pt[2139-:9]) + 1 : 1 - (16 + pt[2139-:9])) {1'sb0}};
-			assign dec_tlu_error_wb = 1'b0;
-			assign ifu_bp_inst_mask_f = 1'b1;
-		end
-	endgenerate
-	wire [1:0] ic_fetch_val_f;
-	wire [31:0] ic_data_f;
-	wire [31:0] ifu_fetch_data_f;
-	wire ifc_fetch_req_f_raw;
-	wire [1:0] iccm_rd_ecc_double_err;
-	wire ifu_async_error_start;
-	assign ifu_fetch_data_f[31:0] = ic_data_f[31:0];
-	assign ifu_fetch_val[1:0] = ic_fetch_val_f[1:0];
-	assign ifu_fetch_pc[31:1] = ifc_fetch_addr_f[31:1];
-	eb1_ifu_aln_ctl #(.pt(pt)) aln(
-		.scan_mode(scan_mode),
-		.rst_l(rst_l),
-		.clk(clk),
-		.active_clk(active_clk),
-		.ifu_async_error_start(ifu_async_error_start),
-		.iccm_rd_ecc_double_err(iccm_rd_ecc_double_err),
-		.ic_access_fault_f(ic_access_fault_f),
-		.ic_access_fault_type_f(ic_access_fault_type_f),
-		.exu_flush_final(exu_flush_final),
-		.dec_i0_decode_d(dec_i0_decode_d),
-		.ifu_fetch_data_f(ifu_fetch_data_f),
-		.ifu_fetch_val(ifu_fetch_val),
-		.ifu_fetch_pc(ifu_fetch_pc),
-		.ifu_i0_valid(ifu_i0_valid),
-		.ifu_i0_icaf(ifu_i0_icaf),
-		.ifu_i0_icaf_type(ifu_i0_icaf_type),
-		.ifu_i0_icaf_second(ifu_i0_icaf_second),
-		.ifu_i0_dbecc(ifu_i0_dbecc),
-		.ifu_i0_instr(ifu_i0_instr),
-		.ifu_i0_pc(ifu_i0_pc),
-		.ifu_i0_pc4(ifu_i0_pc4),
-		.ifu_fb_consume1(ifu_fb_consume1),
-		.ifu_fb_consume2(ifu_fb_consume2),
-		.ifu_bp_fghr_f(ifu_bp_fghr_f),
-		.ifu_bp_btb_target_f(ifu_bp_btb_target_f),
-		.ifu_bp_poffset_f(ifu_bp_poffset_f),
-		.ifu_bp_fa_index_f(ifu_bp_fa_index_f),
-		.ifu_bp_hist0_f(ifu_bp_hist0_f),
-		.ifu_bp_hist1_f(ifu_bp_hist1_f),
-		.ifu_bp_pc4_f(ifu_bp_pc4_f),
-		.ifu_bp_way_f(ifu_bp_way_f),
-		.ifu_bp_valid_f(ifu_bp_valid_f),
-		.ifu_bp_ret_f(ifu_bp_ret_f),
-		.i0_brp(i0_brp),
-		.ifu_i0_bp_index(ifu_i0_bp_index),
-		.ifu_i0_bp_fghr(ifu_i0_bp_fghr),
-		.ifu_i0_bp_btag(ifu_i0_bp_btag),
-		.ifu_i0_fa_index(ifu_i0_fa_index),
-		.ifu_pmu_instr_aligned(ifu_pmu_instr_aligned),
-		.ifu_i0_cinst(ifu_i0_cinst)
-	);
-	eb1_ifu_mem_ctl #(.pt(pt)) mem_ctl(
-		.clk(clk),
-		.active_clk(active_clk),
-		.free_l2clk(free_l2clk),
-		.rst_l(rst_l),
-		.exu_flush_final(exu_flush_final),
-		.dec_tlu_flush_lower_wb(dec_tlu_flush_lower_wb),
-		.dec_tlu_flush_err_wb(dec_tlu_flush_err_wb),
-		.dec_tlu_i0_commit_cmt(dec_tlu_i0_commit_cmt),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.ifc_fetch_addr_bf(ifc_fetch_addr_bf),
-		.ifc_fetch_uncacheable_bf(ifc_fetch_uncacheable_bf),
-		.ifc_fetch_req_bf(ifc_fetch_req_bf),
-		.ifc_fetch_req_bf_raw(ifc_fetch_req_bf_raw),
-		.ifc_iccm_access_bf(ifc_iccm_access_bf),
-		.ifc_region_acc_fault_bf(ifc_region_acc_fault_bf),
-		.ifc_dma_access_ok(ifc_dma_access_ok),
-		.dec_tlu_fence_i_wb(dec_tlu_fence_i_wb),
-		.ifu_bp_hit_taken_f(ifu_bp_hit_taken_f),
-		.ifu_bp_inst_mask_f(ifu_bp_inst_mask_f),
-		.ifu_miss_state_idle(ifu_miss_state_idle),
-		.ifu_ic_mb_empty(ifu_ic_mb_empty),
-		.ic_dma_active(ic_dma_active),
-		.ic_write_stall(ic_write_stall),
-		.ifu_pmu_ic_miss(ifu_pmu_ic_miss),
-		.ifu_pmu_ic_hit(ifu_pmu_ic_hit),
-		.ifu_pmu_bus_error(ifu_pmu_bus_error),
-		.ifu_pmu_bus_busy(ifu_pmu_bus_busy),
-		.ifu_pmu_bus_trxn(ifu_pmu_bus_trxn),
-		.ifu_axi_awvalid(ifu_axi_awvalid),
-		.ifu_axi_awid(ifu_axi_awid),
-		.ifu_axi_awaddr(ifu_axi_awaddr),
-		.ifu_axi_awregion(ifu_axi_awregion),
-		.ifu_axi_awlen(ifu_axi_awlen),
-		.ifu_axi_awsize(ifu_axi_awsize),
-		.ifu_axi_awburst(ifu_axi_awburst),
-		.ifu_axi_awlock(ifu_axi_awlock),
-		.ifu_axi_awcache(ifu_axi_awcache),
-		.ifu_axi_awprot(ifu_axi_awprot),
-		.ifu_axi_awqos(ifu_axi_awqos),
-		.ifu_axi_wvalid(ifu_axi_wvalid),
-		.ifu_axi_wdata(ifu_axi_wdata),
-		.ifu_axi_wstrb(ifu_axi_wstrb),
-		.ifu_axi_wlast(ifu_axi_wlast),
-		.ifu_axi_bready(ifu_axi_bready),
-		.ifu_axi_arvalid(ifu_axi_arvalid),
-		.ifu_axi_arready(ifu_axi_arready),
-		.ifu_axi_arid(ifu_axi_arid),
-		.ifu_axi_araddr(ifu_axi_araddr),
-		.ifu_axi_arregion(ifu_axi_arregion),
-		.ifu_axi_arlen(ifu_axi_arlen),
-		.ifu_axi_arsize(ifu_axi_arsize),
-		.ifu_axi_arburst(ifu_axi_arburst),
-		.ifu_axi_arlock(ifu_axi_arlock),
-		.ifu_axi_arcache(ifu_axi_arcache),
-		.ifu_axi_arprot(ifu_axi_arprot),
-		.ifu_axi_arqos(ifu_axi_arqos),
-		.ifu_axi_rvalid(ifu_axi_rvalid),
-		.ifu_axi_rready(ifu_axi_rready),
-		.ifu_axi_rid(ifu_axi_rid),
-		.ifu_axi_rdata(ifu_axi_rdata),
-		.ifu_axi_rresp(ifu_axi_rresp),
-		.ifu_bus_clk_en(ifu_bus_clk_en),
-		.dma_iccm_req(dma_iccm_req),
-		.dma_mem_addr(dma_mem_addr),
-		.dma_mem_sz(dma_mem_sz),
-		.dma_mem_write(dma_mem_write),
-		.dma_mem_wdata(dma_mem_wdata),
-		.dma_mem_tag(dma_mem_tag),
-		.iccm_dma_ecc_error(iccm_dma_ecc_error),
-		.iccm_dma_rvalid(iccm_dma_rvalid),
-		.iccm_dma_rdata(iccm_dma_rdata),
-		.iccm_dma_rtag(iccm_dma_rtag),
-		.iccm_ready(iccm_ready),
-		.ic_rw_addr(ic_rw_addr),
-		.ic_wr_en(ic_wr_en),
-		.ic_rd_en(ic_rd_en),
-		.ic_wr_data(ic_wr_data),
-		.ic_rd_data(ic_rd_data),
-		.ic_debug_rd_data(ic_debug_rd_data),
-		.ictag_debug_rd_data(ictag_debug_rd_data),
-		.ic_debug_wr_data(ic_debug_wr_data),
-		.ifu_ic_debug_rd_data(ifu_ic_debug_rd_data),
-		.ic_eccerr(ic_eccerr),
-		.ic_parerr(ic_parerr),
-		.ic_debug_addr(ic_debug_addr),
-		.ic_debug_rd_en(ic_debug_rd_en),
-		.ic_debug_wr_en(ic_debug_wr_en),
-		.ic_debug_tag_array(ic_debug_tag_array),
-		.ic_debug_way(ic_debug_way),
-		.ic_tag_valid(ic_tag_valid),
-		.ic_rd_hit(ic_rd_hit),
-		.ic_tag_perr(ic_tag_perr),
-		.iccm_rw_addr(iccm_rw_addr),
-		.iccm_wren(iccm_wren),
-		.iccm_rden(iccm_rden),
-		.iccm_wr_data(iccm_wr_data),
-		.iccm_wr_size(iccm_wr_size),
-		.iccm_rd_data(iccm_rd_data),
-		.iccm_rd_data_ecc(iccm_rd_data_ecc),
-		.ifu_fetch_val(ifu_fetch_val),
-		.ic_hit_f(ic_hit_f),
-		.ic_access_fault_f(ic_access_fault_f),
-		.ic_access_fault_type_f(ic_access_fault_type_f),
-		.iccm_rd_ecc_single_err(iccm_rd_ecc_single_err),
-		.iccm_rd_ecc_double_err(iccm_rd_ecc_double_err),
-		.ic_error_start(ic_error_start),
-		.ifu_async_error_start(ifu_async_error_start),
-		.iccm_dma_sb_error(iccm_dma_sb_error),
-		.ic_fetch_val_f(ic_fetch_val_f),
-		.ic_premux_data(ic_premux_data),
-		.ic_sel_premux_data(ic_sel_premux_data),
-		.dec_tlu_ic_diag_pkt(dec_tlu_ic_diag_pkt),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.ifu_ic_debug_rd_data_valid(ifu_ic_debug_rd_data_valid),
-		.iccm_buf_correct_ecc(iccm_buf_correct_ecc),
-		.iccm_correction_state(iccm_correction_state),
-		.scan_mode(scan_mode),
-		.ic_data_f(ic_data_f[31:0])
-	);
-endmodule
-module eb1_ifu_aln_ctl (
-	scan_mode,
-	rst_l,
-	clk,
-	active_clk,
-	ifu_async_error_start,
-	iccm_rd_ecc_double_err,
-	ic_access_fault_f,
-	ic_access_fault_type_f,
-	exu_flush_final,
-	dec_i0_decode_d,
-	ifu_fetch_data_f,
-	ifu_fetch_val,
-	ifu_fetch_pc,
-	ifu_i0_valid,
-	ifu_i0_icaf,
-	ifu_i0_icaf_type,
-	ifu_i0_icaf_second,
-	ifu_i0_dbecc,
-	ifu_i0_instr,
-	ifu_i0_pc,
-	ifu_i0_pc4,
-	ifu_fb_consume1,
-	ifu_fb_consume2,
-	ifu_bp_fghr_f,
-	ifu_bp_btb_target_f,
-	ifu_bp_poffset_f,
-	ifu_bp_fa_index_f,
-	ifu_bp_hist0_f,
-	ifu_bp_hist1_f,
-	ifu_bp_pc4_f,
-	ifu_bp_way_f,
-	ifu_bp_valid_f,
-	ifu_bp_ret_f,
-	i0_brp,
-	ifu_i0_bp_index,
-	ifu_i0_bp_fghr,
-	ifu_i0_bp_btag,
-	ifu_i0_fa_index,
-	ifu_pmu_instr_aligned,
-	ifu_i0_cinst
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire scan_mode;
-	input wire rst_l;
-	input wire clk;
-	input wire active_clk;
-	input wire ifu_async_error_start;
-	input wire [1:0] iccm_rd_ecc_double_err;
-	input wire [1:0] ic_access_fault_f;
-	input wire [1:0] ic_access_fault_type_f;
-	input wire exu_flush_final;
-	input wire dec_i0_decode_d;
-	input wire [31:0] ifu_fetch_data_f;
-	input wire [1:0] ifu_fetch_val;
-	input wire [31:1] ifu_fetch_pc;
-	output wire ifu_i0_valid;
-	output wire ifu_i0_icaf;
-	output wire [1:0] ifu_i0_icaf_type;
-	output wire ifu_i0_icaf_second;
-	output wire ifu_i0_dbecc;
-	output wire [31:0] ifu_i0_instr;
-	output wire [31:1] ifu_i0_pc;
-	output wire ifu_i0_pc4;
-	output wire ifu_fb_consume1;
-	output wire ifu_fb_consume2;
-	input wire [pt[2236-:8] - 1:0] ifu_bp_fghr_f;
-	input wire [31:1] ifu_bp_btb_target_f;
-	input wire [11:0] ifu_bp_poffset_f;
-	input wire [(2 * $clog2(pt[2061-:14])) - 1:0] ifu_bp_fa_index_f;
-	input wire [1:0] ifu_bp_hist0_f;
-	input wire [1:0] ifu_bp_hist1_f;
-	input wire [1:0] ifu_bp_pc4_f;
-	input wire [1:0] ifu_bp_way_f;
-	input wire [1:0] ifu_bp_valid_f;
-	input wire [1:0] ifu_bp_ret_f;
-	output reg [50:0] i0_brp;
-	output wire [pt[2172-:9]:pt[2163-:6]] ifu_i0_bp_index;
-	output wire [pt[2236-:8] - 1:0] ifu_i0_bp_fghr;
-	output wire [pt[2139-:9] - 1:0] ifu_i0_bp_btag;
-	output reg [$clog2(pt[2061-:14]) - 1:0] ifu_i0_fa_index;
-	output wire ifu_pmu_instr_aligned;
-	output wire [15:0] ifu_i0_cinst;
-	wire ifvalid;
-	wire shift_f1_f0;
-	wire shift_f2_f0;
-	wire shift_f2_f1;
-	wire fetch_to_f0;
-	wire fetch_to_f1;
-	wire fetch_to_f2;
-	wire [1:0] f2val_in;
-	wire [1:0] f2val;
-	wire [1:0] f1val_in;
-	wire [1:0] f1val;
-	wire [1:0] f0val_in;
-	wire [1:0] f0val;
-	wire [1:0] sf1val;
-	wire [1:0] sf0val;
-	wire [31:0] aligndata;
-	wire first4B;
-	wire first2B;
-	wire [31:0] uncompress0;
-	wire i0_shift;
-	wire shift_2B;
-	wire shift_4B;
-	wire f1_shift_2B;
-	wire f2_valid;
-	wire sf1_valid;
-	wire sf0_valid;
-	wire [31:0] ifirst;
-	wire [1:0] alignval;
-	wire [31:1] firstpc;
-	wire [31:1] secondpc;
-	wire [11:0] f1poffset;
-	wire [11:0] f0poffset;
-	wire [pt[2236-:8] - 1:0] f1fghr;
-	wire [pt[2236-:8] - 1:0] f0fghr;
-	wire [1:0] f1hist1;
-	wire [1:0] f0hist1;
-	wire [1:0] f1hist0;
-	wire [1:0] f0hist0;
-	wire [(2 * $clog2(pt[2061-:14])) - 1:0] f0index;
-	wire [(2 * $clog2(pt[2061-:14])) - 1:0] f1index;
-	wire [(2 * $clog2(pt[2061-:14])) - 1:0] alignindex;
-	wire [1:0] f1ictype;
-	wire [1:0] f0ictype;
-	wire [1:0] f1pc4;
-	wire [1:0] f0pc4;
-	wire [1:0] f1ret;
-	wire [1:0] f0ret;
-	wire [1:0] f1way;
-	wire [1:0] f0way;
-	wire [1:0] f1brend;
-	wire [1:0] f0brend;
-	wire [1:0] alignbrend;
-	wire [1:0] alignpc4;
-	wire [1:0] alignret;
-	wire [1:0] alignway;
-	wire [1:0] alignhist1;
-	wire [1:0] alignhist0;
-	wire [1:1] alignfromf1;
-	reg i0_ends_f1;
-	reg i0_br_start_error;
-	wire [31:1] f1prett;
-	wire [31:1] f0prett;
-	wire [1:0] f1dbecc;
-	wire [1:0] f0dbecc;
-	wire [1:0] f1icaf;
-	wire [1:0] f0icaf;
-	wire [1:0] aligndbecc;
-	wire [1:0] alignicaf;
-	reg i0_brp_pc4;
-	wire [pt[2172-:9]:pt[2163-:6]] firstpc_hash;
-	wire [pt[2172-:9]:pt[2163-:6]] secondpc_hash;
-	wire first_legal;
-	wire [1:0] wrptr;
-	wire [1:0] wrptr_in;
-	wire [1:0] rdptr;
-	wire [1:0] rdptr_in;
-	wire [2:0] qwen;
-	wire [31:0] q2;
-	wire [31:0] q1;
-	wire [31:0] q0;
-	wire q2off_in;
-	wire q2off;
-	wire q1off_in;
-	wire q1off;
-	wire q0off_in;
-	wire q0off;
-	wire f0_shift_2B;
-	wire [31:0] q0eff;
-	wire [31:0] q0final;
-	wire q0ptr;
-	wire [1:0] q0sel;
-	wire [31:0] q1eff;
-	wire [15:0] q1final;
-	wire q1ptr;
-	wire [1:0] q1sel;
-	wire [2:0] qren;
-	wire consume_fb1;
-	wire consume_fb0;
-	wire [1:0] icaf_eff;
-	localparam BRDATA_SIZE = (pt[2130-:5] ? 16 + (($clog2(pt[2061-:14]) * 2) * pt[2120-:5]) : 2);
-	localparam BRDATA_WIDTH = (pt[2130-:5] ? 8 + ($clog2(pt[2061-:14]) * pt[2120-:5]) : 1);
-	wire [BRDATA_SIZE - 1:0] brdata_in;
-	wire [BRDATA_SIZE - 1:0] brdata2;
-	wire [BRDATA_SIZE - 1:0] brdata1;
-	wire [BRDATA_SIZE - 1:0] brdata0;
-	wire [BRDATA_SIZE - 1:0] brdata1eff;
-	wire [BRDATA_SIZE - 1:0] brdata0eff;
-	wire [BRDATA_SIZE - 1:0] brdata1final;
-	wire [BRDATA_SIZE - 1:0] brdata0final;
-	localparam MHI = 1 + (pt[2130-:5] * (43 + pt[2236-:8]));
-	localparam MSIZE = 2 + (pt[2130-:5] * (43 + pt[2236-:8]));
-	wire [MHI:0] misc_data_in;
-	wire [MHI:0] misc2;
-	wire [MHI:0] misc1;
-	wire [MHI:0] misc0;
-	wire [MHI:0] misc1eff;
-	wire [MHI:0] misc0eff;
-	wire [pt[2139-:9] - 1:0] firstbrtag_hash;
-	wire [pt[2139-:9] - 1:0] secondbrtag_hash;
-	wire error_stall_in;
-	wire error_stall;
-	assign error_stall_in = (error_stall | ifu_async_error_start) & ~exu_flush_final;
-	rvdff #(.WIDTH(7)) bundle1ff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.din({wrptr_in[1:0], rdptr_in[1:0], q2off_in, q1off_in, q0off_in}),
-		.dout({wrptr[1:0], rdptr[1:0], q2off, q1off, q0off})
-	);
-	rvdffie #(
-		.WIDTH(7),
-		.OVERRIDE(1)
-	) bundle2ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din({error_stall_in, f2val_in[1:0], f1val_in[1:0], f0val_in[1:0]}),
-		.dout({error_stall, f2val[1:0], f1val[1:0], f0val[1:0]})
-	);
-	generate
-		if (pt[2130-:5] == 1) begin
-			rvdffe #(.WIDTH(BRDATA_SIZE)) brdata2ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(qwen[2]),
-				.din(brdata_in[BRDATA_SIZE - 1:0]),
-				.dout(brdata2[BRDATA_SIZE - 1:0])
-			);
-			rvdffe #(.WIDTH(BRDATA_SIZE)) brdata1ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(qwen[1]),
-				.din(brdata_in[BRDATA_SIZE - 1:0]),
-				.dout(brdata1[BRDATA_SIZE - 1:0])
-			);
-			rvdffe #(.WIDTH(BRDATA_SIZE)) brdata0ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(qwen[0]),
-				.din(brdata_in[BRDATA_SIZE - 1:0]),
-				.dout(brdata0[BRDATA_SIZE - 1:0])
-			);
-			rvdffe #(.WIDTH(MSIZE)) misc2ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(qwen[2]),
-				.din(misc_data_in[MHI:0]),
-				.dout(misc2[MHI:0])
-			);
-			rvdffe #(.WIDTH(MSIZE)) misc1ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(qwen[1]),
-				.din(misc_data_in[MHI:0]),
-				.dout(misc1[MHI:0])
-			);
-			rvdffe #(.WIDTH(MSIZE)) misc0ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(qwen[0]),
-				.din(misc_data_in[MHI:0]),
-				.dout(misc0[MHI:0])
-			);
-		end
-		else rvdffie #(.WIDTH((MSIZE * 3) + (BRDATA_SIZE * 3))) miscff(
-			.clk(clk),
-			.rst_l(rst_l),
-			.scan_mode(scan_mode),
-			.din({(qwen[2] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE - 1:0]} : {misc2[MHI:0], brdata2[BRDATA_SIZE - 1:0]}), (qwen[1] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE - 1:0]} : {misc1[MHI:0], brdata1[BRDATA_SIZE - 1:0]}), (qwen[0] ? {misc_data_in[MHI:0], brdata_in[BRDATA_SIZE - 1:0]} : {misc0[MHI:0], brdata0[BRDATA_SIZE - 1:0]})}),
-			.dout({misc2[MHI:0], misc1[MHI:0], misc0[MHI:0], brdata2[BRDATA_SIZE - 1:0], brdata1[BRDATA_SIZE - 1:0], brdata0[BRDATA_SIZE - 1:0]})
-		);
-	endgenerate
-	wire [31:1] q2pc;
-	wire [31:1] q1pc;
-	wire [31:1] q0pc;
-	rvdffe #(.WIDTH(31)) q2pcff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qwen[2]),
-		.din(ifu_fetch_pc[31:1]),
-		.dout(q2pc[31:1])
-	);
-	rvdffe #(.WIDTH(31)) q1pcff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qwen[1]),
-		.din(ifu_fetch_pc[31:1]),
-		.dout(q1pc[31:1])
-	);
-	rvdffe #(.WIDTH(31)) q0pcff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qwen[0]),
-		.din(ifu_fetch_pc[31:1]),
-		.dout(q0pc[31:1])
-	);
-	rvdffe #(.WIDTH(32)) q2ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qwen[2]),
-		.din(ifu_fetch_data_f[31:0]),
-		.dout(q2[31:0])
-	);
-	rvdffe #(.WIDTH(32)) q1ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qwen[1]),
-		.din(ifu_fetch_data_f[31:0]),
-		.dout(q1[31:0])
-	);
-	rvdffe #(.WIDTH(32)) q0ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.en(qwen[0]),
-		.din(ifu_fetch_data_f[31:0]),
-		.dout(q0[31:0])
-	);
-	assign qren[2:0] = {rdptr[1:0] == 2'b10, rdptr[1:0] == 2'b01, rdptr[1:0] == 2'b00};
-	assign qwen[2:0] = {(wrptr[1:0] == 2'b10) & ifvalid, (wrptr[1:0] == 2'b01) & ifvalid, (wrptr[1:0] == 2'b00) & ifvalid};
-	assign rdptr_in[1:0] = (((((({2 {(qren[0] & ifu_fb_consume1) & ~exu_flush_final}} & 2'b01) | ({2 {(qren[1] & ifu_fb_consume1) & ~exu_flush_final}} & 2'b10)) | ({2 {(qren[2] & ifu_fb_consume1) & ~exu_flush_final}} & 2'b00)) | ({2 {(qren[0] & ifu_fb_consume2) & ~exu_flush_final}} & 2'b10)) | ({2 {(qren[1] & ifu_fb_consume2) & ~exu_flush_final}} & 2'b00)) | ({2 {(qren[2] & ifu_fb_consume2) & ~exu_flush_final}} & 2'b01)) | ({2 {(~ifu_fb_consume1 & ~ifu_fb_consume2) & ~exu_flush_final}} & rdptr[1:0]);
-	assign wrptr_in[1:0] = ((({2 {qwen[0] & ~exu_flush_final}} & 2'b01) | ({2 {qwen[1] & ~exu_flush_final}} & 2'b10)) | ({2 {qwen[2] & ~exu_flush_final}} & 2'b00)) | ({2 {~ifvalid & ~exu_flush_final}} & wrptr[1:0]);
-	assign q2off_in = (((~qwen[2] & (rdptr[1:0] == 2'd2)) & (q2off | f0_shift_2B)) | ((~qwen[2] & (rdptr[1:0] == 2'd1)) & (q2off | f1_shift_2B))) | ((~qwen[2] & (rdptr[1:0] == 2'd0)) & q2off);
-	assign q1off_in = (((~qwen[1] & (rdptr[1:0] == 2'd1)) & (q1off | f0_shift_2B)) | ((~qwen[1] & (rdptr[1:0] == 2'd0)) & (q1off | f1_shift_2B))) | ((~qwen[1] & (rdptr[1:0] == 2'd2)) & q1off);
-	assign q0off_in = (((~qwen[0] & (rdptr[1:0] == 2'd0)) & (q0off | f0_shift_2B)) | ((~qwen[0] & (rdptr[1:0] == 2'd2)) & (q0off | f1_shift_2B))) | ((~qwen[0] & (rdptr[1:0] == 2'd1)) & q0off);
-	assign q0ptr = (((rdptr[1:0] == 2'b00) & q0off) | ((rdptr[1:0] == 2'b01) & q1off)) | ((rdptr[1:0] == 2'b10) & q2off);
-	assign q1ptr = (((rdptr[1:0] == 2'b00) & q1off) | ((rdptr[1:0] == 2'b01) & q2off)) | ((rdptr[1:0] == 2'b10) & q0off);
-	assign q0sel[1:0] = {q0ptr, ~q0ptr};
-	assign q1sel[1:0] = {q1ptr, ~q1ptr};
-	generate
-		if (pt[2130-:5] == 1) begin
-			assign misc_data_in[MHI:0] = {ic_access_fault_type_f[1:0], ifu_bp_btb_target_f[31:1], ifu_bp_poffset_f[11:0], ifu_bp_fghr_f[pt[2236-:8] - 1:0]};
-		end
-		else assign misc_data_in[MHI:0] = {ic_access_fault_type_f[1:0]};
-	endgenerate
-	assign {misc1eff[MHI:0], misc0eff[MHI:0]} = (({MSIZE * 2 {qren[0]}} & {misc1[MHI:0], misc0[MHI:0]}) | ({MSIZE * 2 {qren[1]}} & {misc2[MHI:0], misc1[MHI:0]})) | ({MSIZE * 2 {qren[2]}} & {misc0[MHI:0], misc2[MHI:0]});
-	generate
-		if (pt[2130-:5] == 1) begin
-			assign {f1ictype[1:0], f1prett[31:1], f1poffset[11:0], f1fghr[pt[2236-:8] - 1:0]} = misc1eff[MHI:0];
-			assign {f0ictype[1:0], f0prett[31:1], f0poffset[11:0], f0fghr[pt[2236-:8] - 1:0]} = misc0eff[MHI:0];
-			if (pt[2120-:5]) begin
-				assign brdata_in[BRDATA_SIZE - 1:0] = {ifu_bp_fa_index_f[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])], iccm_rd_ecc_double_err[1], ic_access_fault_f[1], ifu_bp_hist1_f[1], ifu_bp_hist0_f[1], ifu_bp_pc4_f[1], ifu_bp_way_f[1], ifu_bp_valid_f[1], ifu_bp_ret_f[1], ifu_bp_fa_index_f[0+:$clog2(pt[2061-:14])], iccm_rd_ecc_double_err[0], ic_access_fault_f[0], ifu_bp_hist1_f[0], ifu_bp_hist0_f[0], ifu_bp_pc4_f[0], ifu_bp_way_f[0], ifu_bp_valid_f[0], ifu_bp_ret_f[0]};
-				assign {f0index[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])], f0dbecc[1], f0icaf[1], f0hist1[1], f0hist0[1], f0pc4[1], f0way[1], f0brend[1], f0ret[1], f0index[0+:$clog2(pt[2061-:14])], f0dbecc[0], f0icaf[0], f0hist1[0], f0hist0[0], f0pc4[0], f0way[0], f0brend[0], f0ret[0]} = brdata0final[BRDATA_SIZE - 1:0];
-				assign {f1index[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])], f1dbecc[1], f1icaf[1], f1hist1[1], f1hist0[1], f1pc4[1], f1way[1], f1brend[1], f1ret[1], f1index[0+:$clog2(pt[2061-:14])], f1dbecc[0], f1icaf[0], f1hist1[0], f1hist0[0], f1pc4[0], f1way[0], f1brend[0], f1ret[0]} = brdata1final[BRDATA_SIZE - 1:0];
-			end
-			else begin
-				assign brdata_in[BRDATA_SIZE - 1:0] = {iccm_rd_ecc_double_err[1], ic_access_fault_f[1], ifu_bp_hist1_f[1], ifu_bp_hist0_f[1], ifu_bp_pc4_f[1], ifu_bp_way_f[1], ifu_bp_valid_f[1], ifu_bp_ret_f[1], iccm_rd_ecc_double_err[0], ic_access_fault_f[0], ifu_bp_hist1_f[0], ifu_bp_hist0_f[0], ifu_bp_pc4_f[0], ifu_bp_way_f[0], ifu_bp_valid_f[0], ifu_bp_ret_f[0]};
-				assign {f0dbecc[1], f0icaf[1], f0hist1[1], f0hist0[1], f0pc4[1], f0way[1], f0brend[1], f0ret[1], f0dbecc[0], f0icaf[0], f0hist1[0], f0hist0[0], f0pc4[0], f0way[0], f0brend[0], f0ret[0]} = brdata0final[BRDATA_SIZE - 1:0];
-				assign {f1dbecc[1], f1icaf[1], f1hist1[1], f1hist0[1], f1pc4[1], f1way[1], f1brend[1], f1ret[1], f1dbecc[0], f1icaf[0], f1hist1[0], f1hist0[0], f1pc4[0], f1way[0], f1brend[0], f1ret[0]} = brdata1final[BRDATA_SIZE - 1:0];
-			end
-			assign {brdata1eff[BRDATA_SIZE - 1:0], brdata0eff[BRDATA_SIZE - 1:0]} = (({BRDATA_SIZE * 2 {qren[0]}} & {brdata1[BRDATA_SIZE - 1:0], brdata0[BRDATA_SIZE - 1:0]}) | ({BRDATA_SIZE * 2 {qren[1]}} & {brdata2[BRDATA_SIZE - 1:0], brdata1[BRDATA_SIZE - 1:0]})) | ({BRDATA_SIZE * 2 {qren[2]}} & {brdata0[BRDATA_SIZE - 1:0], brdata2[BRDATA_SIZE - 1:0]});
-			assign brdata0final[BRDATA_SIZE - 1:0] = ({BRDATA_SIZE {q0sel[0]}} & {brdata0eff[(2 * BRDATA_WIDTH) - 1:0]}) | ({BRDATA_SIZE {q0sel[1]}} & {{BRDATA_WIDTH {1'b0}}, brdata0eff[BRDATA_SIZE - 1:BRDATA_WIDTH]});
-			assign brdata1final[BRDATA_SIZE - 1:0] = ({BRDATA_SIZE {q1sel[0]}} & {brdata1eff[(2 * BRDATA_WIDTH) - 1:0]}) | ({BRDATA_SIZE {q1sel[1]}} & {{BRDATA_WIDTH {1'b0}}, brdata1eff[BRDATA_SIZE - 1:BRDATA_WIDTH]});
-		end
-		else begin
-			assign {f1ictype[1:0]} = misc1eff[MHI:0];
-			assign {f0ictype[1:0]} = misc0eff[MHI:0];
-			assign brdata_in[BRDATA_SIZE - 1:0] = {iccm_rd_ecc_double_err[1], ic_access_fault_f[1], iccm_rd_ecc_double_err[0], ic_access_fault_f[0]};
-			assign {f0dbecc[1], f0icaf[1], f0dbecc[0], f0icaf[0]} = brdata0final[BRDATA_SIZE - 1:0];
-			assign {f1dbecc[1], f1icaf[1], f1dbecc[0], f1icaf[0]} = brdata1final[BRDATA_SIZE - 1:0];
-			assign {brdata1eff[BRDATA_SIZE - 1:0], brdata0eff[BRDATA_SIZE - 1:0]} = (({BRDATA_SIZE * 2 {qren[0]}} & {brdata1[BRDATA_SIZE - 1:0], brdata0[BRDATA_SIZE - 1:0]}) | ({BRDATA_SIZE * 2 {qren[1]}} & {brdata2[BRDATA_SIZE - 1:0], brdata1[BRDATA_SIZE - 1:0]})) | ({BRDATA_SIZE * 2 {qren[2]}} & {brdata0[BRDATA_SIZE - 1:0], brdata2[BRDATA_SIZE - 1:0]});
-			assign brdata0final[BRDATA_SIZE - 1:0] = ({BRDATA_SIZE {q0sel[0]}} & {brdata0eff[(2 * BRDATA_WIDTH) - 1:0]}) | ({BRDATA_SIZE {q0sel[1]}} & {{BRDATA_WIDTH {1'b0}}, brdata0eff[BRDATA_SIZE - 1:BRDATA_WIDTH]});
-			assign brdata1final[BRDATA_SIZE - 1:0] = ({BRDATA_SIZE {q1sel[0]}} & {brdata1eff[(2 * BRDATA_WIDTH) - 1:0]}) | ({BRDATA_SIZE {q1sel[1]}} & {{BRDATA_WIDTH {1'b0}}, brdata1eff[BRDATA_SIZE - 1:BRDATA_WIDTH]});
-		end
-	endgenerate
-	assign f2_valid = f2val[0];
-	assign sf1_valid = sf1val[0];
-	assign sf0_valid = sf0val[0];
-	assign consume_fb0 = ~sf0val[0] & f0val[0];
-	assign consume_fb1 = ~sf1val[0] & f1val[0];
-	assign ifu_fb_consume1 = (consume_fb0 & ~consume_fb1) & ~exu_flush_final;
-	assign ifu_fb_consume2 = (consume_fb0 & consume_fb1) & ~exu_flush_final;
-	assign ifvalid = ifu_fetch_val[0];
-	assign shift_f1_f0 = ~sf0_valid & sf1_valid;
-	assign shift_f2_f0 = (~sf0_valid & ~sf1_valid) & f2_valid;
-	assign shift_f2_f1 = (~sf0_valid & sf1_valid) & f2_valid;
-	assign fetch_to_f0 = ((~sf0_valid & ~sf1_valid) & ~f2_valid) & ifvalid;
-	assign fetch_to_f1 = ((((~sf0_valid & ~sf1_valid) & f2_valid) & ifvalid) | (((~sf0_valid & sf1_valid) & ~f2_valid) & ifvalid)) | (((sf0_valid & ~sf1_valid) & ~f2_valid) & ifvalid);
-	assign fetch_to_f2 = (((~sf0_valid & sf1_valid) & f2_valid) & ifvalid) | (((sf0_valid & sf1_valid) & ~f2_valid) & ifvalid);
-	assign f2val_in[1:0] = ({2 {fetch_to_f2 & ~exu_flush_final}} & ifu_fetch_val[1:0]) | ({2 {((~fetch_to_f2 & ~shift_f2_f1) & ~shift_f2_f0) & ~exu_flush_final}} & f2val[1:0]);
-	assign sf1val[1:0] = ({2 {f1_shift_2B}} & {1'b0, f1val[1]}) | ({2 {~f1_shift_2B}} & f1val[1:0]);
-	assign f1val_in[1:0] = (({2 {fetch_to_f1 & ~exu_flush_final}} & ifu_fetch_val[1:0]) | ({2 {shift_f2_f1 & ~exu_flush_final}} & f2val[1:0])) | ({2 {((~fetch_to_f1 & ~shift_f2_f1) & ~shift_f1_f0) & ~exu_flush_final}} & sf1val[1:0]);
-	assign sf0val[1:0] = ({2 {shift_2B}} & {1'b0, f0val[1]}) | ({2 {~shift_2B & ~shift_4B}} & f0val[1:0]);
-	assign f0val_in[1:0] = ((({2 {fetch_to_f0 & ~exu_flush_final}} & ifu_fetch_val[1:0]) | ({2 {shift_f2_f0 & ~exu_flush_final}} & f2val[1:0])) | ({2 {shift_f1_f0 & ~exu_flush_final}} & sf1val[1:0])) | ({2 {((~fetch_to_f0 & ~shift_f2_f0) & ~shift_f1_f0) & ~exu_flush_final}} & sf0val[1:0]);
-	assign {q1eff[31:0], q0eff[31:0]} = (({64 {qren[0]}} & {q1[31:0], q0[31:0]}) | ({64 {qren[1]}} & {q2[31:0], q1[31:0]})) | ({64 {qren[2]}} & {q0[31:0], q2[31:0]});
-	assign q0final[31:0] = ({32 {q0sel[0]}} & {q0eff[31:0]}) | ({32 {q0sel[1]}} & {16'b0000000000000000, q0eff[31:16]});
-	assign q1final[15:0] = ({16 {q1sel[0]}} & q1eff[15:0]) | ({16 {q1sel[1]}} & q1eff[31:16]);
-	wire [31:1] q0pceff;
-	wire [31:1] q0pcfinal;
-	wire [31:1] q1pceff;
-	assign {q1pceff[31:1], q0pceff[31:1]} = (({62 {qren[0]}} & {q1pc[31:1], q0pc[31:1]}) | ({62 {qren[1]}} & {q2pc[31:1], q1pc[31:1]})) | ({62 {qren[2]}} & {q0pc[31:1], q2pc[31:1]});
-	assign q0pcfinal[31:1] = ({31 {q0sel[0]}} & q0pceff[31:1]) | ({31 {q0sel[1]}} & (q0pceff[31:1] + 31'd1));
-	assign aligndata[31:0] = ({32 {f0val[1]}} & {q0final[31:0]}) | ({32 {~f0val[1] & f0val[0]}} & {q1final[15:0], q0final[15:0]});
-	assign alignval[1:0] = ({2 {f0val[1]}} & 2'b11) | ({2 {~f0val[1] & f0val[0]}} & {f1val[0], 1'b1});
-	assign alignicaf[1:0] = ({2 {f0val[1]}} & f0icaf[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1icaf[0], f0icaf[0]});
-	assign aligndbecc[1:0] = ({2 {f0val[1]}} & f0dbecc[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1dbecc[0], f0dbecc[0]});
-	generate
-		if (pt[2130-:5] == 1) begin
-			assign alignbrend[1:0] = ({2 {f0val[1]}} & f0brend[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1brend[0], f0brend[0]});
-			assign alignpc4[1:0] = ({2 {f0val[1]}} & f0pc4[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1pc4[0], f0pc4[0]});
-			if (pt[2120-:5]) begin
-				assign alignindex[0+:$clog2(pt[2061-:14])] = f0index[0+:$clog2(pt[2061-:14])];
-				assign alignindex[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])] = (f0val[1] ? f0index[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])] : f1index[0+:$clog2(pt[2061-:14])]);
-			end
-			assign alignret[1:0] = ({2 {f0val[1]}} & f0ret[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1ret[0], f0ret[0]});
-			assign alignway[1:0] = ({2 {f0val[1]}} & f0way[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1way[0], f0way[0]});
-			assign alignhist1[1:0] = ({2 {f0val[1]}} & f0hist1[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1hist1[0], f0hist1[0]});
-			assign alignhist0[1:0] = ({2 {f0val[1]}} & f0hist0[1:0]) | ({2 {~f0val[1] & f0val[0]}} & {f1hist0[0], f0hist0[0]});
-			assign secondpc[31:1] = ({31 {f0val[1]}} & (q0pceff[31:1] + 31'd1)) | ({31 {~f0val[1] & f0val[0]}} & q1pceff[31:1]);
-			assign firstpc[31:1] = q0pcfinal[31:1];
-		end
-	endgenerate
-	assign alignfromf1[1] = ~f0val[1] & f0val[0];
-	assign ifu_i0_pc[31:1] = q0pcfinal[31:1];
-	assign ifu_i0_pc4 = first4B;
-	assign ifu_i0_cinst[15:0] = aligndata[15:0];
-	assign first4B = aligndata[1:0] == 2'b11;
-	assign first2B = ~first4B;
-	assign ifu_i0_valid = (first4B & alignval[1]) | (first2B & alignval[0]);
-	assign ifu_i0_icaf = (first4B & |alignicaf[1:0]) | (first2B & alignicaf[0]);
-	assign ifu_i0_icaf_type[1:0] = ((((first4B & ~f0val[1]) & f0val[0]) & ~alignicaf[0]) & ~aligndbecc[0] ? f1ictype[1:0] : f0ictype[1:0]);
-	assign icaf_eff[1:0] = alignicaf[1:0] | aligndbecc[1:0];
-	assign ifu_i0_icaf_second = (first4B & ~icaf_eff[0]) & icaf_eff[1];
-	assign ifu_i0_dbecc = (first4B & |aligndbecc[1:0]) | (first2B & aligndbecc[0]);
-	assign ifirst[31:0] = aligndata[31:0];
-	assign ifu_i0_instr[31:0] = ({32 {first4B & alignval[1]}} & ifirst[31:0]) | ({32 {first2B & alignval[0]}} & uncompress0[31:0]);
-	generate
-		if (pt[2130-:5] == 1) begin
-			eb1_btb_addr_hash #(.pt(pt)) firsthash(
-				.pc(firstpc[pt[2079-:9]:pt[2106-:9]]),
-				.hash(firstpc_hash[pt[2172-:9]:pt[2163-:6]])
-			);
-			eb1_btb_addr_hash #(.pt(pt)) secondhash(
-				.pc(secondpc[pt[2079-:9]:pt[2106-:9]]),
-				.hash(secondpc_hash[pt[2172-:9]:pt[2163-:6]])
-			);
-			if (pt[2120-:5]) begin
-				assign firstbrtag_hash = firstpc;
-				assign secondbrtag_hash = secondpc;
-			end
-			else if (pt[2144-:5]) begin : btbfold
-				eb1_btb_tag_hash_fold #(.pt(pt)) first_brhash(
-					.pc(firstpc[(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]),
-					.hash(firstbrtag_hash[pt[2139-:9] - 1:0])
-				);
-				eb1_btb_tag_hash_fold #(.pt(pt)) second_brhash(
-					.pc(secondpc[(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]),
-					.hash(secondbrtag_hash[pt[2139-:9] - 1:0])
-				);
-			end
-			else begin
-				eb1_btb_tag_hash #(.pt(pt)) first_brhash(
-					.pc(firstpc[((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]),
-					.hash(firstbrtag_hash[pt[2139-:9] - 1:0])
-				);
-				eb1_btb_tag_hash #(.pt(pt)) second_brhash(
-					.pc(secondpc[((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]),
-					.hash(secondbrtag_hash[pt[2139-:9] - 1:0])
-				);
-			end
-			always @(*) begin
-				i0_brp = {51 {1'sb0}};
-				i0_br_start_error = (first4B & alignval[1]) & alignbrend[0];
-				i0_brp[50] = ((first2B & alignbrend[0]) | (first4B & alignbrend[1])) | i0_br_start_error;
-				i0_brp_pc4 = (first2B & alignpc4[0]) | (first4B & alignpc4[1]);
-				i0_brp[0] = (first2B & alignret[0]) | (first4B & alignret[1]);
-				i0_brp[1] = (first2B | alignbrend[0] ? alignway[0] : alignway[1]);
-				i0_brp[37] = (first2B & alignhist1[0]) | (first4B & alignhist1[1]);
-				i0_brp[36] = (first2B & alignhist0[0]) | (first4B & alignhist0[1]);
-				i0_ends_f1 = first4B & alignfromf1[1];
-				i0_brp[49:38] = (i0_ends_f1 ? f1poffset[11:0] : f0poffset[11:0]);
-				i0_brp[32:2] = (i0_ends_f1 ? f1prett[31:1] : f0prett[31:1]);
-				i0_brp[34] = i0_br_start_error;
-				i0_brp[33] = (first2B | alignbrend[0] ? firstpc[1] : secondpc[1]);
-				i0_brp[35] = ((i0_brp[50] & i0_brp_pc4) & first2B) | ((i0_brp[50] & ~i0_brp_pc4) & first4B);
-				if (pt[2120-:5])
-					ifu_i0_fa_index = (first2B | alignbrend[0] ? alignindex[0+:$clog2(pt[2061-:14])] : alignindex[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])]);
-				else
-					ifu_i0_fa_index = {$clog2(pt[2061-:14]) {1'sb0}};
-			end
-			assign ifu_i0_bp_index[pt[2172-:9]:pt[2163-:6]] = (first2B | alignbrend[0] ? firstpc_hash[pt[2172-:9]:pt[2163-:6]] : secondpc_hash[pt[2172-:9]:pt[2163-:6]]);
-			assign ifu_i0_bp_fghr[pt[2236-:8] - 1:0] = (i0_ends_f1 ? f1fghr[pt[2236-:8] - 1:0] : f0fghr[pt[2236-:8] - 1:0]);
-			assign ifu_i0_bp_btag[pt[2139-:9] - 1:0] = (first2B | alignbrend[0] ? firstbrtag_hash[pt[2139-:9] - 1:0] : secondbrtag_hash[pt[2139-:9] - 1:0]);
-		end
-		else begin
-			wire [51:1] sv2v_tmp_B43E9;
-			assign sv2v_tmp_B43E9 = {51 {1'sb0}};
-			always @(*) i0_brp = sv2v_tmp_B43E9;
-			assign ifu_i0_bp_index = {(pt[2172-:9] >= pt[2163-:6] ? (pt[2172-:9] - pt[2163-:6]) + 1 : (pt[2163-:6] - pt[2172-:9]) + 1) {1'sb0}};
-			assign ifu_i0_bp_fghr = {pt[2236-:8] {1'sb0}};
-			assign ifu_i0_bp_btag = {pt[2139-:9] {1'sb0}};
-		end
-	endgenerate
-	eb1_ifu_compress_ctl #(.pt(pt)) compress0(
-		.din((first2B ? aligndata[15:0] : {16 {1'sb0}})),
-		.dout(uncompress0[31:0])
-	);
-	assign i0_shift = dec_i0_decode_d & ~error_stall;
-	assign ifu_pmu_instr_aligned = i0_shift;
-	assign shift_2B = i0_shift & first2B;
-	assign shift_4B = i0_shift & first4B;
-	assign f0_shift_2B = (shift_2B & f0val[0]) | ((shift_4B & f0val[0]) & ~f0val[1]);
-	assign f1_shift_2B = (f0val[0] & ~f0val[1]) & shift_4B;
-endmodule
-module eb1_ifu_bp_ctl (
-	clk,
-	rst_l,
-	ic_hit_f,
-	ifc_fetch_addr_f,
-	ifc_fetch_req_f,
-	dec_tlu_br0_r_pkt,
-	exu_i0_br_fghr_r,
-	exu_i0_br_index_r,
-	dec_fa_error_index,
-	dec_tlu_flush_lower_wb,
-	dec_tlu_flush_leak_one_wb,
-	dec_tlu_bpred_disable,
-	exu_mp_pkt,
-	exu_mp_eghr,
-	exu_mp_fghr,
-	exu_mp_index,
-	exu_mp_btag,
-	exu_flush_final,
-	ifu_bp_hit_taken_f,
-	ifu_bp_btb_target_f,
-	ifu_bp_inst_mask_f,
-	ifu_bp_fghr_f,
-	ifu_bp_way_f,
-	ifu_bp_ret_f,
-	ifu_bp_hist1_f,
-	ifu_bp_hist0_f,
-	ifu_bp_pc4_f,
-	ifu_bp_valid_f,
-	ifu_bp_poffset_f,
-	ifu_bp_fa_index_f,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire ic_hit_f;
-	input wire [31:1] ifc_fetch_addr_f;
-	input wire ifc_fetch_req_f;
-	input wire [6:0] dec_tlu_br0_r_pkt;
-	input wire [pt[2236-:8] - 1:0] exu_i0_br_fghr_r;
-	input wire [pt[2172-:9]:pt[2163-:6]] exu_i0_br_index_r;
-	input wire [$clog2(pt[2061-:14]) - 1:0] dec_fa_error_index;
-	input wire dec_tlu_flush_lower_wb;
-	input wire dec_tlu_flush_leak_one_wb;
-	input wire dec_tlu_bpred_disable;
-	input wire [55:0] exu_mp_pkt;
-	input wire [pt[2236-:8] - 1:0] exu_mp_eghr;
-	input wire [pt[2236-:8] - 1:0] exu_mp_fghr;
-	input wire [pt[2172-:9]:pt[2163-:6]] exu_mp_index;
-	input wire [pt[2139-:9] - 1:0] exu_mp_btag;
-	input wire exu_flush_final;
-	output wire ifu_bp_hit_taken_f;
-	output wire [31:1] ifu_bp_btb_target_f;
-	output wire ifu_bp_inst_mask_f;
-	output wire [pt[2236-:8] - 1:0] ifu_bp_fghr_f;
-	output wire [1:0] ifu_bp_way_f;
-	output wire [1:0] ifu_bp_ret_f;
-	output wire [1:0] ifu_bp_hist1_f;
-	output wire [1:0] ifu_bp_hist0_f;
-	output wire [1:0] ifu_bp_pc4_f;
-	output wire [1:0] ifu_bp_valid_f;
-	output wire [11:0] ifu_bp_poffset_f;
-	output wire [(2 * $clog2(pt[2061-:14])) - 1:0] ifu_bp_fa_index_f;
-	input wire scan_mode;
-	localparam BTB_DWIDTH = (pt[2047-:9] + pt[2139-:9]) + 5;
-	function automatic signed [31:0] sv2v_cast_32_signed;
-		input reg signed [31:0] inp;
-		sv2v_cast_32_signed = inp;
-	endfunction
-	localparam BTB_DWIDTH_TOP = (sv2v_cast_32_signed(pt[2047-:9]) + sv2v_cast_32_signed(pt[2139-:9])) + 4;
-	localparam BTB_FA_INDEX = $clog2(pt[2061-:14]) - 1;
-	localparam FA_CMP_LOWER = $clog2(pt[1095-:11]);
-	localparam FA_TAG_END_UPPER = ((5 + sv2v_cast_32_signed(pt[2047-:9])) + FA_CMP_LOWER) - 1;
-	localparam FA_TAG_START_LOWER = (3 + sv2v_cast_32_signed(pt[2047-:9])) + FA_CMP_LOWER;
-	localparam FA_TAG_END_LOWER = 5 + sv2v_cast_32_signed(pt[2047-:9]);
-	localparam TAG_START = BTB_DWIDTH - 1;
-	localparam PC4 = 4;
-	localparam BOFF = 3;
-	localparam CALL = 2;
-	localparam RET = 1;
-	localparam BV = 0;
-	localparam LRU_SIZE = pt[2157-:13];
-	localparam NUM_BHT_LOOP = (pt[2256-:15] > 16 ? 16 : pt[2256-:15]);
-	localparam NUM_BHT_LOOP_INNER_HI = (pt[2256-:15] > 16 ? pt[2262-:6] + 3 : pt[2270-:8]);
-	localparam NUM_BHT_LOOP_OUTER_LO = (pt[2256-:15] > 16 ? pt[2262-:6] + 4 : pt[2262-:6]);
-	localparam BHT_NO_ADDR_MATCH = pt[2256-:15] <= 16;
-	wire exu_mp_valid_write;
-	wire exu_mp_ataken;
-	wire exu_mp_valid;
-	wire exu_mp_boffset;
-	wire exu_mp_pc4;
-	wire exu_mp_call;
-	wire exu_mp_ret;
-	wire exu_mp_ja;
-	wire [1:0] exu_mp_hist;
-	wire [11:0] exu_mp_tgt;
-	wire [pt[2172-:9]:pt[2163-:6]] exu_mp_addr;
-	wire dec_tlu_br0_v_wb;
-	wire [1:0] dec_tlu_br0_hist_wb;
-	wire [pt[2172-:9]:pt[2163-:6]] dec_tlu_br0_addr_wb;
-	wire dec_tlu_br0_error_wb;
-	wire dec_tlu_br0_start_error_wb;
-	wire [pt[2236-:8] - 1:0] exu_i0_br_fghr_wb;
-	wire use_mp_way;
-	wire use_mp_way_p1;
-	wire [(pt[31-:8] * 32) - 1:0] rets_out;
-	wire [(pt[31-:8] * 32) - 1:0] rets_in;
-	wire [pt[31-:8] - 1:0] rsenable;
-	wire [11:0] btb_rd_tgt_f;
-	wire btb_rd_pc4_f;
-	wire btb_rd_call_f;
-	wire btb_rd_ret_f;
-	wire [1:1] bp_total_branch_offset_f;
-	wire [31:1] bp_btb_target_adder_f;
-	wire [31:1] bp_rs_call_target_f;
-	wire rs_push;
-	wire rs_pop;
-	wire rs_hold;
-	wire [pt[2172-:9]:pt[2163-:6]] btb_rd_addr_p1_f;
-	wire [pt[2172-:9]:pt[2163-:6]] btb_wr_addr;
-	wire [pt[2172-:9]:pt[2163-:6]] btb_rd_addr_f;
-	wire [pt[2139-:9] - 1:0] btb_wr_tag;
-	wire [pt[2139-:9] - 1:0] fetch_rd_tag_f;
-	wire [pt[2139-:9] - 1:0] fetch_rd_tag_p1_f;
-	wire [BTB_DWIDTH - 1:0] btb_wr_data;
-	wire btb_wr_en_way0;
-	wire btb_wr_en_way1;
-	wire dec_tlu_error_wb;
-	wire btb_valid;
-	wire dec_tlu_br0_middle_wb;
-	wire [pt[2172-:9]:pt[2163-:6]] btb_error_addr_wb;
-	wire branch_error_collision_f;
-	wire fetch_mp_collision_f;
-	wire branch_error_collision_p1_f;
-	wire fetch_mp_collision_p1_f;
-	wire branch_error_bank_conflict_f;
-	wire [pt[2236-:8] - 1:0] merged_ghr;
-	wire [pt[2236-:8] - 1:0] fghr_ns;
-	wire [pt[2236-:8] - 1:0] fghr;
-	wire [1:0] num_valids;
-	wire [LRU_SIZE - 1:0] btb_lru_b0_f;
-	wire [LRU_SIZE - 1:0] btb_lru_b0_hold;
-	wire [LRU_SIZE - 1:0] btb_lru_b0_ns;
-	wire [LRU_SIZE - 1:0] fetch_wrindex_dec;
-	wire [LRU_SIZE - 1:0] fetch_wrindex_p1_dec;
-	wire [LRU_SIZE - 1:0] fetch_wrlru_b0;
-	wire [LRU_SIZE - 1:0] fetch_wrlru_p1_b0;
-	wire [LRU_SIZE - 1:0] mp_wrindex_dec;
-	wire [LRU_SIZE - 1:0] mp_wrlru_b0;
-	wire btb_lru_rd_f;
-	wire btb_lru_rd_p1_f;
-	wire lru_update_valid_f;
-	wire tag_match_way0_f;
-	wire tag_match_way1_f;
-	wire [1:0] way_raw;
-	wire [1:0] bht_dir_f;
-	wire [1:0] btb_sel_f;
-	wire [1:0] wayhit_f;
-	wire [1:0] vwayhit_f;
-	wire [1:0] wayhit_p1_f;
-	wire [1:0] bht_valid_f;
-	wire [1:0] bht_force_taken_f;
-	wire leak_one_f;
-	wire leak_one_f_d1;
-	wire [(LRU_SIZE * BTB_DWIDTH) - 1:0] btb_bank0_rd_data_way0_out;
-	wire [(LRU_SIZE * BTB_DWIDTH) - 1:0] btb_bank0_rd_data_way1_out;
-	reg [BTB_DWIDTH - 1:0] btb_bank0_rd_data_way0_f;
-	reg [BTB_DWIDTH - 1:0] btb_bank0_rd_data_way1_f;
-	reg [BTB_DWIDTH - 1:0] btb_bank0_rd_data_way0_p1_f;
-	reg [BTB_DWIDTH - 1:0] btb_bank0_rd_data_way1_p1_f;
-	reg [BTB_DWIDTH - 1:0] btb_vbank0_rd_data_f;
-	reg [BTB_DWIDTH - 1:0] btb_vbank1_rd_data_f;
-	wire final_h;
-	wire btb_fg_crossing_f;
-	wire middle_of_bank;
-	wire [1:0] bht_vbank0_rd_data_f;
-	wire [1:0] bht_vbank1_rd_data_f;
-	wire branch_error_bank_conflict_p1_f;
-	wire tag_match_way0_p1_f;
-	wire tag_match_way1_p1_f;
-	wire [1:0] btb_vlru_rd_f;
-	wire [1:0] fetch_start_f;
-	wire [1:0] tag_match_vway1_expanded_f;
-	wire [1:0] tag_match_way0_expanded_p1_f;
-	wire [1:0] tag_match_way1_expanded_p1_f;
-	wire [31:2] fetch_addr_p1_f;
-	wire exu_mp_way;
-	wire exu_mp_way_f;
-	wire dec_tlu_br0_way_wb;
-	wire dec_tlu_way_wb;
-	wire [BTB_DWIDTH - 1:0] btb_bank0e_rd_data_f;
-	wire [BTB_DWIDTH - 1:0] btb_bank0e_rd_data_p1_f;
-	wire [BTB_DWIDTH - 1:0] btb_bank0o_rd_data_f;
-	wire [1:0] tag_match_way0_expanded_f;
-	wire [1:0] tag_match_way1_expanded_f;
-	reg [1:0] bht_bank0_rd_data_f;
-	reg [1:0] bht_bank1_rd_data_f;
-	reg [1:0] bht_bank0_rd_data_p1_f;
-	genvar j;
-	genvar i;
-	assign exu_mp_valid = exu_mp_pkt[55] & ~leak_one_f;
-	assign exu_mp_boffset = exu_mp_pkt[53];
-	assign exu_mp_pc4 = exu_mp_pkt[52];
-	assign exu_mp_call = exu_mp_pkt[34];
-	assign exu_mp_ret = exu_mp_pkt[31];
-	assign exu_mp_ja = exu_mp_pkt[33];
-	assign exu_mp_way = exu_mp_pkt[32];
-	assign exu_mp_hist[1:0] = exu_mp_pkt[51:50];
-	assign exu_mp_tgt[11:0] = exu_mp_pkt[49:38];
-	assign exu_mp_addr[pt[2172-:9]:pt[2163-:6]] = exu_mp_index[pt[2172-:9]:pt[2163-:6]];
-	assign exu_mp_ataken = exu_mp_pkt[54];
-	assign dec_tlu_br0_v_wb = dec_tlu_br0_r_pkt[6];
-	assign dec_tlu_br0_hist_wb[1:0] = dec_tlu_br0_r_pkt[5:4];
-	assign dec_tlu_br0_addr_wb[pt[2172-:9]:pt[2163-:6]] = exu_i0_br_index_r[pt[2172-:9]:pt[2163-:6]];
-	assign dec_tlu_br0_error_wb = dec_tlu_br0_r_pkt[3];
-	assign dec_tlu_br0_middle_wb = dec_tlu_br0_r_pkt[0];
-	assign dec_tlu_br0_way_wb = dec_tlu_br0_r_pkt[1];
-	assign dec_tlu_br0_start_error_wb = dec_tlu_br0_r_pkt[2];
-	assign exu_i0_br_fghr_wb[pt[2236-:8] - 1:0] = exu_i0_br_fghr_r[pt[2236-:8] - 1:0];
-	eb1_btb_addr_hash #(.pt(pt)) f1hash(
-		.pc(ifc_fetch_addr_f[pt[2079-:9]:pt[2106-:9]]),
-		.hash(btb_rd_addr_f[pt[2172-:9]:pt[2163-:6]])
-	);
-	assign fetch_addr_p1_f[31:2] = ifc_fetch_addr_f[31:2] + 30'b000000000000000000000000000001;
-	eb1_btb_addr_hash #(.pt(pt)) f1hash_p1(
-		.pc(fetch_addr_p1_f[pt[2079-:9]:pt[2106-:9]]),
-		.hash(btb_rd_addr_p1_f[pt[2172-:9]:pt[2163-:6]])
-	);
-	assign btb_sel_f[1] = ~bht_dir_f[0];
-	assign btb_sel_f[0] = bht_dir_f[0];
-	assign fetch_start_f[1:0] = {ifc_fetch_addr_f[1], ~ifc_fetch_addr_f[1]};
-	assign branch_error_collision_f = dec_tlu_error_wb & (btb_error_addr_wb[pt[2172-:9]:pt[2163-:6]] == btb_rd_addr_f[pt[2172-:9]:pt[2163-:6]]);
-	assign branch_error_collision_p1_f = dec_tlu_error_wb & (btb_error_addr_wb[pt[2172-:9]:pt[2163-:6]] == btb_rd_addr_p1_f[pt[2172-:9]:pt[2163-:6]]);
-	assign branch_error_bank_conflict_f = branch_error_collision_f & dec_tlu_error_wb;
-	assign branch_error_bank_conflict_p1_f = branch_error_collision_p1_f & dec_tlu_error_wb;
-	assign leak_one_f = (dec_tlu_flush_leak_one_wb & dec_tlu_flush_lower_wb) | (leak_one_f_d1 & ~dec_tlu_flush_lower_wb);
-	wire exu_flush_final_d1;
-	generate
-		if (!pt[2120-:5]) begin
-			assign fetch_mp_collision_f = (((exu_mp_btag[pt[2139-:9] - 1:0] == fetch_rd_tag_f[pt[2139-:9] - 1:0]) & exu_mp_valid) & ifc_fetch_req_f) & (exu_mp_addr[pt[2172-:9]:pt[2163-:6]] == btb_rd_addr_f[pt[2172-:9]:pt[2163-:6]]);
-			assign fetch_mp_collision_p1_f = (((exu_mp_btag[pt[2139-:9] - 1:0] == fetch_rd_tag_p1_f[pt[2139-:9] - 1:0]) & exu_mp_valid) & ifc_fetch_req_f) & (exu_mp_addr[pt[2172-:9]:pt[2163-:6]] == btb_rd_addr_p1_f[pt[2172-:9]:pt[2163-:6]]);
-			assign tag_match_way0_f = (((btb_bank0_rd_data_way0_f[BV] & (btb_bank0_rd_data_way0_f[TAG_START:17] == fetch_rd_tag_f[pt[2139-:9] - 1:0])) & ~(dec_tlu_way_wb & branch_error_bank_conflict_f)) & ifc_fetch_req_f) & ~leak_one_f;
-			assign tag_match_way1_f = (((btb_bank0_rd_data_way1_f[BV] & (btb_bank0_rd_data_way1_f[TAG_START:17] == fetch_rd_tag_f[pt[2139-:9] - 1:0])) & ~(dec_tlu_way_wb & branch_error_bank_conflict_f)) & ifc_fetch_req_f) & ~leak_one_f;
-			assign tag_match_way0_p1_f = (((btb_bank0_rd_data_way0_p1_f[BV] & (btb_bank0_rd_data_way0_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt[2139-:9] - 1:0])) & ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f)) & ifc_fetch_req_f) & ~leak_one_f;
-			assign tag_match_way1_p1_f = (((btb_bank0_rd_data_way1_p1_f[BV] & (btb_bank0_rd_data_way1_p1_f[TAG_START:17] == fetch_rd_tag_p1_f[pt[2139-:9] - 1:0])) & ~(dec_tlu_way_wb & branch_error_bank_conflict_p1_f)) & ifc_fetch_req_f) & ~leak_one_f;
-			assign tag_match_way0_expanded_f[1:0] = {tag_match_way0_f & (btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4]), tag_match_way0_f & ~(btb_bank0_rd_data_way0_f[BOFF] ^ btb_bank0_rd_data_way0_f[PC4])};
-			assign tag_match_way1_expanded_f[1:0] = {tag_match_way1_f & (btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4]), tag_match_way1_f & ~(btb_bank0_rd_data_way1_f[BOFF] ^ btb_bank0_rd_data_way1_f[PC4])};
-			assign tag_match_way0_expanded_p1_f[1:0] = {tag_match_way0_p1_f & (btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4]), tag_match_way0_p1_f & ~(btb_bank0_rd_data_way0_p1_f[BOFF] ^ btb_bank0_rd_data_way0_p1_f[PC4])};
-			assign tag_match_way1_expanded_p1_f[1:0] = {tag_match_way1_p1_f & (btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4]), tag_match_way1_p1_f & ~(btb_bank0_rd_data_way1_p1_f[BOFF] ^ btb_bank0_rd_data_way1_p1_f[PC4])};
-			assign wayhit_f[1:0] = tag_match_way0_expanded_f[1:0] | tag_match_way1_expanded_f[1:0];
-			assign wayhit_p1_f[1:0] = tag_match_way0_expanded_p1_f[1:0] | tag_match_way1_expanded_p1_f[1:0];
-			assign btb_bank0o_rd_data_f[BTB_DWIDTH - 1:0] = ({17 + pt[2139-:9] {tag_match_way0_expanded_f[1]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH - 1:0]) | ({17 + pt[2139-:9] {tag_match_way1_expanded_f[1]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH - 1:0]);
-			assign btb_bank0e_rd_data_f[BTB_DWIDTH - 1:0] = ({17 + pt[2139-:9] {tag_match_way0_expanded_f[0]}} & btb_bank0_rd_data_way0_f[BTB_DWIDTH - 1:0]) | ({17 + pt[2139-:9] {tag_match_way1_expanded_f[0]}} & btb_bank0_rd_data_way1_f[BTB_DWIDTH - 1:0]);
-			assign btb_bank0e_rd_data_p1_f[BTB_DWIDTH - 1:0] = ({17 + pt[2139-:9] {tag_match_way0_expanded_p1_f[0]}} & btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH - 1:0]) | ({17 + pt[2139-:9] {tag_match_way1_expanded_p1_f[0]}} & btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH - 1:0]);
-			wire [BTB_DWIDTH:1] sv2v_tmp_F09CF;
-			assign sv2v_tmp_F09CF = ({17 + pt[2139-:9] {fetch_start_f[0]}} & btb_bank0e_rd_data_f[BTB_DWIDTH - 1:0]) | ({17 + pt[2139-:9] {fetch_start_f[1]}} & btb_bank0o_rd_data_f[BTB_DWIDTH - 1:0]);
-			always @(*) btb_vbank0_rd_data_f[BTB_DWIDTH - 1:0] = sv2v_tmp_F09CF;
-			wire [BTB_DWIDTH:1] sv2v_tmp_BEF15;
-			assign sv2v_tmp_BEF15 = ({17 + pt[2139-:9] {fetch_start_f[0]}} & btb_bank0o_rd_data_f[BTB_DWIDTH - 1:0]) | ({17 + pt[2139-:9] {fetch_start_f[1]}} & btb_bank0e_rd_data_p1_f[BTB_DWIDTH - 1:0]);
-			always @(*) btb_vbank1_rd_data_f[BTB_DWIDTH - 1:0] = sv2v_tmp_BEF15;
-			assign way_raw[1:0] = tag_match_vway1_expanded_f[1:0] | (~vwayhit_f[1:0] & btb_vlru_rd_f[1:0]);
-			assign mp_wrindex_dec[LRU_SIZE - 1:0] = {{LRU_SIZE - 1 {1'b0}}, 1'b1} << exu_mp_addr[pt[2172-:9]:pt[2163-:6]];
-			assign fetch_wrindex_dec[LRU_SIZE - 1:0] = {{LRU_SIZE - 1 {1'b0}}, 1'b1} << btb_rd_addr_f[pt[2172-:9]:pt[2163-:6]];
-			assign fetch_wrindex_p1_dec[LRU_SIZE - 1:0] = {{LRU_SIZE - 1 {1'b0}}, 1'b1} << btb_rd_addr_p1_f[pt[2172-:9]:pt[2163-:6]];
-			assign mp_wrlru_b0[LRU_SIZE - 1:0] = mp_wrindex_dec[LRU_SIZE - 1:0] & {LRU_SIZE {exu_mp_valid}};
-			assign btb_lru_b0_hold[LRU_SIZE - 1:0] = ~mp_wrlru_b0[LRU_SIZE - 1:0] & ~fetch_wrlru_b0[LRU_SIZE - 1:0];
-			assign use_mp_way = fetch_mp_collision_f;
-			assign use_mp_way_p1 = fetch_mp_collision_p1_f;
-			assign lru_update_valid_f = ((vwayhit_f[0] | vwayhit_f[1]) & ifc_fetch_req_f) & ~leak_one_f;
-			assign fetch_wrlru_b0[LRU_SIZE - 1:0] = fetch_wrindex_dec[LRU_SIZE - 1:0] & {LRU_SIZE {lru_update_valid_f}};
-			assign fetch_wrlru_p1_b0[LRU_SIZE - 1:0] = fetch_wrindex_p1_dec[LRU_SIZE - 1:0] & {LRU_SIZE {lru_update_valid_f}};
-			assign btb_lru_b0_ns[LRU_SIZE - 1:0] = (((btb_lru_b0_hold[LRU_SIZE - 1:0] & btb_lru_b0_f[LRU_SIZE - 1:0]) | (mp_wrlru_b0[LRU_SIZE - 1:0] & {LRU_SIZE {~exu_mp_way}})) | (fetch_wrlru_b0[LRU_SIZE - 1:0] & {LRU_SIZE {tag_match_way0_f}})) | (fetch_wrlru_p1_b0[LRU_SIZE - 1:0] & {LRU_SIZE {tag_match_way0_p1_f}});
-			assign btb_lru_rd_f = (use_mp_way ? exu_mp_way_f : |(fetch_wrindex_dec[LRU_SIZE - 1:0] & btb_lru_b0_f[LRU_SIZE - 1:0]));
-			assign btb_lru_rd_p1_f = (use_mp_way_p1 ? exu_mp_way_f : |(fetch_wrindex_p1_dec[LRU_SIZE - 1:0] & btb_lru_b0_f[LRU_SIZE - 1:0]));
-			assign btb_vlru_rd_f[1:0] = ({2 {fetch_start_f[0]}} & {btb_lru_rd_f, btb_lru_rd_f}) | ({2 {fetch_start_f[1]}} & {btb_lru_rd_p1_f, btb_lru_rd_f});
-			assign tag_match_vway1_expanded_f[1:0] = ({2 {fetch_start_f[0]}} & {tag_match_way1_expanded_f[1:0]}) | ({2 {fetch_start_f[1]}} & {tag_match_way1_expanded_p1_f[0], tag_match_way1_expanded_f[1]});
-			rvdffe #(.WIDTH(LRU_SIZE)) btb_lru_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(ifc_fetch_req_f | exu_mp_valid),
-				.din(btb_lru_b0_ns[LRU_SIZE - 1:0]),
-				.dout(btb_lru_b0_f[LRU_SIZE - 1:0])
-			);
-		end
-	endgenerate
-	wire eoc_near;
-	wire eoc_mask;
-	assign eoc_near = &ifc_fetch_addr_f[pt[1182-:8]:3];
-	assign eoc_mask = ~eoc_near | |(~ifc_fetch_addr_f[2:1]);
-	wire [16:1] btb_sel_data_f;
-	assign btb_rd_tgt_f[11:0] = btb_sel_data_f[16:5];
-	assign btb_rd_pc4_f = btb_sel_data_f[4];
-	assign btb_rd_call_f = btb_sel_data_f[2];
-	assign btb_rd_ret_f = btb_sel_data_f[1];
-	assign btb_sel_data_f[16:1] = ({16 {btb_sel_f[1]}} & btb_vbank1_rd_data_f[16:1]) | ({16 {btb_sel_f[0]}} & btb_vbank0_rd_data_f[16:1]);
-	wire [1:0] hist0_raw;
-	wire [1:0] hist1_raw;
-	wire [1:0] pc4_raw;
-	wire [1:0] pret_raw;
-	assign ifu_bp_hit_taken_f = ((|(vwayhit_f[1:0] & hist1_raw[1:0]) & ifc_fetch_req_f) & ~leak_one_f_d1) & ~dec_tlu_bpred_disable;
-	assign bht_force_taken_f[1:0] = {btb_vbank1_rd_data_f[CALL] | btb_vbank1_rd_data_f[RET], btb_vbank0_rd_data_f[CALL] | btb_vbank0_rd_data_f[RET]};
-	assign bht_valid_f[1:0] = vwayhit_f[1:0];
-	assign bht_vbank0_rd_data_f[1:0] = ({2 {fetch_start_f[0]}} & bht_bank0_rd_data_f[1:0]) | ({2 {fetch_start_f[1]}} & bht_bank1_rd_data_f[1:0]);
-	assign bht_vbank1_rd_data_f[1:0] = ({2 {fetch_start_f[0]}} & bht_bank1_rd_data_f[1:0]) | ({2 {fetch_start_f[1]}} & bht_bank0_rd_data_p1_f[1:0]);
-	assign bht_dir_f[1:0] = {(bht_force_taken_f[1] | bht_vbank1_rd_data_f[1]) & bht_valid_f[1], (bht_force_taken_f[0] | bht_vbank0_rd_data_f[1]) & bht_valid_f[0]};
-	assign ifu_bp_inst_mask_f = (ifu_bp_hit_taken_f & btb_sel_f[1]) | ~ifu_bp_hit_taken_f;
-	assign hist1_raw[1:0] = bht_force_taken_f[1:0] | {bht_vbank1_rd_data_f[1], bht_vbank0_rd_data_f[1]};
-	assign hist0_raw[1:0] = {bht_vbank1_rd_data_f[0], bht_vbank0_rd_data_f[0]};
-	assign pc4_raw[1:0] = {vwayhit_f[1] & btb_vbank1_rd_data_f[PC4], vwayhit_f[0] & btb_vbank0_rd_data_f[PC4]};
-	assign pret_raw[1:0] = {(vwayhit_f[1] & ~btb_vbank1_rd_data_f[CALL]) & btb_vbank1_rd_data_f[RET], (vwayhit_f[0] & ~btb_vbank0_rd_data_f[CALL]) & btb_vbank0_rd_data_f[RET]};
-	function [1:0] countones;
-		input [1:0] valid;
-		countones[1:0] = {2'b00, valid[1]} + {2'b00, valid[0]};
-	endfunction
-	assign num_valids[1:0] = countones(bht_valid_f[1:0]);
-	assign final_h = |(btb_sel_f[1:0] & bht_dir_f[1:0]);
-	assign merged_ghr[pt[2236-:8] - 1:0] = (({pt[2236-:8] {num_valids[1:0] == 2'h2}} & {fghr[pt[2236-:8] - 3:0], 1'b0, final_h}) | ({pt[2236-:8] {num_valids[1:0] == 2'h1}} & {fghr[pt[2236-:8] - 2:0], final_h})) | ({pt[2236-:8] {num_valids[1:0] == 2'h0}} & {fghr[pt[2236-:8] - 1:0]});
-	wire [pt[2236-:8] - 1:0] exu_flush_ghr;
-	assign exu_flush_ghr[pt[2236-:8] - 1:0] = exu_mp_fghr[pt[2236-:8] - 1:0];
-	assign fghr_ns[pt[2236-:8] - 1:0] = (({pt[2236-:8] {exu_flush_final_d1}} & exu_flush_ghr[pt[2236-:8] - 1:0]) | ({pt[2236-:8] {((~exu_flush_final_d1 & ifc_fetch_req_f) & ic_hit_f) & ~leak_one_f_d1}} & merged_ghr[pt[2236-:8] - 1:0])) | ({pt[2236-:8] {~exu_flush_final_d1 & ~((ifc_fetch_req_f & ic_hit_f) & ~leak_one_f_d1)}} & fghr[pt[2236-:8] - 1:0]);
-	rvdffie #(
-		.WIDTH(pt[2236-:8] + 3),
-		.OVERRIDE(1)
-	) fetchghr(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din({exu_flush_final, exu_mp_way, leak_one_f, fghr_ns[pt[2236-:8] - 1:0]}),
-		.dout({exu_flush_final_d1, exu_mp_way_f, leak_one_f_d1, fghr[pt[2236-:8] - 1:0]})
-	);
-	assign ifu_bp_fghr_f[pt[2236-:8] - 1:0] = fghr[pt[2236-:8] - 1:0];
-	assign ifu_bp_way_f[1:0] = way_raw[1:0];
-	assign ifu_bp_hist1_f[1:0] = hist1_raw[1:0];
-	assign ifu_bp_hist0_f[1:0] = hist0_raw[1:0];
-	assign ifu_bp_pc4_f[1:0] = pc4_raw[1:0];
-	assign ifu_bp_valid_f[1:0] = vwayhit_f[1:0] & ~{2 {dec_tlu_bpred_disable}};
-	assign ifu_bp_ret_f[1:0] = pret_raw[1:0];
-	wire [1:0] bloc_f;
-	wire use_fa_plus;
-	assign bloc_f[1] = (bht_dir_f[0] & ~fetch_start_f[0]) | (~bht_dir_f[0] & fetch_start_f[0]);
-	assign bloc_f[0] = (bht_dir_f[0] & fetch_start_f[0]) | (~bht_dir_f[0] & ~fetch_start_f[0]);
-	assign use_fa_plus = (~bht_dir_f[0] & ~fetch_start_f[0]) & ~btb_rd_pc4_f;
-	assign btb_fg_crossing_f = (fetch_start_f[0] & btb_sel_f[0]) & btb_rd_pc4_f;
-	assign bp_total_branch_offset_f = bloc_f[1] ^ btb_rd_pc4_f;
-	wire [31:2] adder_pc_in_f;
-	wire [31:2] ifc_fetch_adder_prior;
-	rvdfflie #(
-		.WIDTH(30),
-		.LEFT(19)
-	) faddrf_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en((ifc_fetch_req_f & ~ifu_bp_hit_taken_f) & ic_hit_f),
-		.din(ifc_fetch_addr_f[31:2]),
-		.dout(ifc_fetch_adder_prior[31:2])
-	);
-	assign ifu_bp_poffset_f[11:0] = btb_rd_tgt_f[11:0];
-	assign adder_pc_in_f[31:2] = (({30 {use_fa_plus}} & fetch_addr_p1_f[31:2]) | ({30 {btb_fg_crossing_f}} & ifc_fetch_adder_prior[31:2])) | ({30 {~btb_fg_crossing_f & ~use_fa_plus}} & ifc_fetch_addr_f[31:2]);
-	rvbradder predtgt_addr(
-		.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-		.offset(btb_rd_tgt_f[11:0]),
-		.dout(bp_btb_target_adder_f[31:1])
-	);
-	assign ifu_bp_btb_target_f[31:1] = ({31 {((btb_rd_ret_f & ~btb_rd_call_f) & rets_out[0]) & ifu_bp_hit_taken_f}} & rets_out[31-:31]) | ({31 {~((btb_rd_ret_f & ~btb_rd_call_f) & rets_out[0]) & ifu_bp_hit_taken_f}} & bp_btb_target_adder_f[31:1]);
-	rvbradder rs_addr(
-		.pc({adder_pc_in_f[31:2], bp_total_branch_offset_f}),
-		.offset({11'b00000000000, ~btb_rd_pc4_f}),
-		.dout(bp_rs_call_target_f[31:1])
-	);
-	assign rs_push = (btb_rd_call_f & ~btb_rd_ret_f) & ifu_bp_hit_taken_f;
-	assign rs_pop = (btb_rd_ret_f & ~btb_rd_call_f) & ifu_bp_hit_taken_f;
-	assign rs_hold = ~rs_push & ~rs_pop;
-	assign rets_in[31-:32] = ({32 {rs_push}} & {bp_rs_call_target_f[31:1], 1'b1}) | ({32 {rs_pop}} & rets_out[63-:32]);
-	assign rsenable[0] = ~rs_hold;
-	generate
-		for (i = 0; i < pt[31-:8]; i = i + 1) begin : retstack
-			if (i == (pt[31-:8] - 1)) begin
-				assign rets_in[(i * 32) + 31-:32] = rets_out[((i - 1) * 32) + 31-:32];
-				assign rsenable[i] = rs_push;
-			end
-			else if (i > 0) begin
-				assign rets_in[(i * 32) + 31-:32] = ({32 {rs_push}} & rets_out[((i - 1) * 32) + 31-:32]) | ({32 {rs_pop}} & rets_out[((i + 1) * 32) + 31-:32]);
-				assign rsenable[i] = rs_push | rs_pop;
-			end
-			rvdffe #(.WIDTH(32)) rets_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(rsenable[i]),
-				.din(rets_in[(i * 32) + 31-:32]),
-				.dout(rets_out[(i * 32) + 31-:32])
-			);
-		end
-	endgenerate
-	assign dec_tlu_error_wb = dec_tlu_br0_start_error_wb | dec_tlu_br0_error_wb;
-	assign btb_error_addr_wb[pt[2172-:9]:pt[2163-:6]] = dec_tlu_br0_addr_wb[pt[2172-:9]:pt[2163-:6]];
-	assign dec_tlu_way_wb = dec_tlu_br0_way_wb;
-	assign btb_valid = exu_mp_valid & ~dec_tlu_error_wb;
-	assign btb_wr_tag[pt[2139-:9] - 1:0] = exu_mp_btag[pt[2139-:9] - 1:0];
-	generate
-		if (!pt[2120-:5]) begin
-			if (pt[2144-:5]) begin : btbfold
-				eb1_btb_tag_hash_fold #(.pt(pt)) rdtagf(
-					.hash(fetch_rd_tag_f[pt[2139-:9] - 1:0]),
-					.pc({ifc_fetch_addr_f[(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]})
-				);
-				eb1_btb_tag_hash_fold #(.pt(pt)) rdtagp1f(
-					.hash(fetch_rd_tag_p1_f[pt[2139-:9] - 1:0]),
-					.pc({fetch_addr_p1_f[(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]})
-				);
-			end
-			else begin
-				eb1_btb_tag_hash #(.pt(pt)) rdtagf(
-					.hash(fetch_rd_tag_f[pt[2139-:9] - 1:0]),
-					.pc({ifc_fetch_addr_f[((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]})
-				);
-				eb1_btb_tag_hash #(.pt(pt)) rdtagp1f(
-					.hash(fetch_rd_tag_p1_f[pt[2139-:9] - 1:0]),
-					.pc({fetch_addr_p1_f[((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1]})
-				);
-			end
-			assign btb_wr_en_way0 = {(~exu_mp_way & exu_mp_valid_write) & ~dec_tlu_error_wb} | {~dec_tlu_way_wb & dec_tlu_error_wb};
-			assign btb_wr_en_way1 = {(exu_mp_way & exu_mp_valid_write) & ~dec_tlu_error_wb} | {dec_tlu_way_wb & dec_tlu_error_wb};
-			assign btb_wr_addr[pt[2172-:9]:pt[2163-:6]] = (dec_tlu_error_wb ? btb_error_addr_wb[pt[2172-:9]:pt[2163-:6]] : exu_mp_addr[pt[2172-:9]:pt[2163-:6]]);
-			assign vwayhit_f[1:0] = (({2 {fetch_start_f[0]}} & {wayhit_f[1:0]}) | ({2 {fetch_start_f[1]}} & {wayhit_p1_f[0], wayhit_f[1]})) & {eoc_mask, 1'b1};
-		end
-	endgenerate
-	assign btb_wr_data[BTB_DWIDTH - 1:0] = {btb_wr_tag[pt[2139-:9] - 1:0], exu_mp_tgt[pt[2047-:9] - 1:0], exu_mp_pc4, exu_mp_boffset, exu_mp_call | exu_mp_ja, exu_mp_ret | exu_mp_ja, btb_valid};
-	assign exu_mp_valid_write = (exu_mp_valid & exu_mp_ataken) & ~exu_mp_pkt[37];
-	wire [1:0] bht_wr_data0;
-	wire [1:0] bht_wr_data2;
-	wire [1:0] bht_wr_en0;
-	wire [1:0] bht_wr_en2;
-	assign middle_of_bank = exu_mp_pc4 ^ exu_mp_boffset;
-	assign bht_wr_en0[1:0] = {2 {((exu_mp_valid & ~exu_mp_call) & ~exu_mp_ret) & ~exu_mp_ja}} & {middle_of_bank, ~middle_of_bank};
-	assign bht_wr_en2[1:0] = {2 {dec_tlu_br0_v_wb}} & {dec_tlu_br0_middle_wb, ~dec_tlu_br0_middle_wb};
-	assign bht_wr_data0[1:0] = exu_mp_hist[1:0];
-	assign bht_wr_data2[1:0] = dec_tlu_br0_hist_wb[1:0];
-	wire [pt[2270-:8]:pt[2262-:6]] bht_rd_addr_f;
-	wire [pt[2270-:8]:pt[2262-:6]] bht_rd_addr_p1_f;
-	wire [pt[2270-:8]:pt[2262-:6]] bht_wr_addr0;
-	wire [pt[2270-:8]:pt[2262-:6]] bht_wr_addr2;
-	wire [pt[2270-:8]:pt[2262-:6]] mp_hashed;
-	wire [pt[2270-:8]:pt[2262-:6]] br0_hashed_wb;
-	wire [pt[2270-:8]:pt[2262-:6]] bht_rd_addr_hashed_f;
-	wire [pt[2270-:8]:pt[2262-:6]] bht_rd_addr_hashed_p1_f;
-	eb1_btb_ghr_hash #(.pt(pt)) mpghrhs(
-		.hashin(exu_mp_addr[pt[2172-:9]:pt[2163-:6]]),
-		.ghr(exu_mp_eghr[pt[2236-:8] - 1:0]),
-		.hash(mp_hashed[pt[2270-:8]:pt[2262-:6]])
-	);
-	eb1_btb_ghr_hash #(.pt(pt)) br0ghrhs(
-		.hashin(dec_tlu_br0_addr_wb[pt[2172-:9]:pt[2163-:6]]),
-		.ghr(exu_i0_br_fghr_wb[pt[2236-:8] - 1:0]),
-		.hash(br0_hashed_wb[pt[2270-:8]:pt[2262-:6]])
-	);
-	eb1_btb_ghr_hash #(.pt(pt)) fghrhs(
-		.hashin(btb_rd_addr_f[pt[2172-:9]:pt[2163-:6]]),
-		.ghr(fghr[pt[2236-:8] - 1:0]),
-		.hash(bht_rd_addr_hashed_f[pt[2270-:8]:pt[2262-:6]])
-	);
-	eb1_btb_ghr_hash #(.pt(pt)) fghrhs_p1(
-		.hashin(btb_rd_addr_p1_f[pt[2172-:9]:pt[2163-:6]]),
-		.ghr(fghr[pt[2236-:8] - 1:0]),
-		.hash(bht_rd_addr_hashed_p1_f[pt[2270-:8]:pt[2262-:6]])
-	);
-	assign bht_wr_addr0[pt[2270-:8]:pt[2262-:6]] = mp_hashed[pt[2270-:8]:pt[2262-:6]];
-	assign bht_wr_addr2[pt[2270-:8]:pt[2262-:6]] = br0_hashed_wb[pt[2270-:8]:pt[2262-:6]];
-	assign bht_rd_addr_f[pt[2270-:8]:pt[2262-:6]] = bht_rd_addr_hashed_f[pt[2270-:8]:pt[2262-:6]];
-	assign bht_rd_addr_p1_f[pt[2270-:8]:pt[2262-:6]] = bht_rd_addr_hashed_p1_f[pt[2270-:8]:pt[2262-:6]];
-	generate
-		if (!pt[2120-:5]) begin
-			for (j = 0; j < LRU_SIZE; j = j + 1) begin : BTB_FLOPS
-				rvdffe #(.WIDTH(17 + pt[2139-:9])) btb_bank0_way0(
-					.clk(clk),
-					.rst_l(rst_l),
-					.scan_mode(scan_mode),
-					.en((btb_wr_addr[pt[2172-:9]:pt[2163-:6]] == j) & btb_wr_en_way0),
-					.din(btb_wr_data[BTB_DWIDTH - 1:0]),
-					.dout(btb_bank0_rd_data_way0_out[j * BTB_DWIDTH+:BTB_DWIDTH])
-				);
-				rvdffe #(.WIDTH(17 + pt[2139-:9])) btb_bank0_way1(
-					.clk(clk),
-					.rst_l(rst_l),
-					.scan_mode(scan_mode),
-					.en((btb_wr_addr[pt[2172-:9]:pt[2163-:6]] == j) & btb_wr_en_way1),
-					.din(btb_wr_data[BTB_DWIDTH - 1:0]),
-					.dout(btb_bank0_rd_data_way1_out[j * BTB_DWIDTH+:BTB_DWIDTH])
-				);
-			end
-			function automatic signed [((pt[2172-:9] - pt[2163-:6]) >= 0 ? (pt[2172-:9] - pt[2163-:6]) + 1 : 1 - (pt[2172-:9] - pt[2163-:6])) - 1:0] sv2v_cast_C4842_signed;
-				input reg signed [((pt[2172-:9] - pt[2163-:6]) >= 0 ? (pt[2172-:9] - pt[2163-:6]) + 1 : 1 - (pt[2172-:9] - pt[2163-:6])) - 1:0] inp;
-				sv2v_cast_C4842_signed = inp;
-			endfunction
-			always @(*) begin : BTB_rd_mux
-				btb_bank0_rd_data_way0_f[BTB_DWIDTH - 1:0] = {BTB_DWIDTH {1'sb0}};
-				btb_bank0_rd_data_way1_f[BTB_DWIDTH - 1:0] = {BTB_DWIDTH {1'sb0}};
-				btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH - 1:0] = {BTB_DWIDTH {1'sb0}};
-				btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH - 1:0] = {BTB_DWIDTH {1'sb0}};
-				begin : sv2v_autoblock_43
-					reg signed [31:0] j;
-					for (j = 0; j < LRU_SIZE; j = j + 1)
-						if (btb_rd_addr_f[pt[2172-:9]:pt[2163-:6]] == sv2v_cast_C4842_signed(j)) begin
-							btb_bank0_rd_data_way0_f[BTB_DWIDTH - 1:0] = btb_bank0_rd_data_way0_out[j * BTB_DWIDTH+:BTB_DWIDTH];
-							btb_bank0_rd_data_way1_f[BTB_DWIDTH - 1:0] = btb_bank0_rd_data_way1_out[j * BTB_DWIDTH+:BTB_DWIDTH];
-						end
-				end
-				begin : sv2v_autoblock_44
-					reg signed [31:0] j;
-					for (j = 0; j < LRU_SIZE; j = j + 1)
-						if (btb_rd_addr_p1_f[pt[2172-:9]:pt[2163-:6]] == sv2v_cast_C4842_signed(j)) begin
-							btb_bank0_rd_data_way0_p1_f[BTB_DWIDTH - 1:0] = btb_bank0_rd_data_way0_out[j * BTB_DWIDTH+:BTB_DWIDTH];
-							btb_bank0_rd_data_way1_p1_f[BTB_DWIDTH - 1:0] = btb_bank0_rd_data_way1_out[j * BTB_DWIDTH+:BTB_DWIDTH];
-						end
-				end
-			end
-		end
-	endgenerate
-	generate
-		if (pt[2120-:5]) begin : fa
-			reg found1;
-			reg hit0;
-			reg hit1;
-			wire btb_used_reset;
-			wire write_used;
-			reg [$clog2(pt[2061-:14]) - 1:0] btb_fa_wr_addr0;
-			reg [$clog2(pt[2061-:14]) - 1:0] hit0_index;
-			reg [$clog2(pt[2061-:14]) - 1:0] hit1_index;
-			reg [pt[2061-:14] - 1:0] btb_tag_hit;
-			reg [pt[2061-:14] - 1:0] btb_offset_0;
-			reg [pt[2061-:14] - 1:0] btb_offset_1;
-			wire [pt[2061-:14] - 1:0] btb_used_ns;
-			wire [pt[2061-:14] - 1:0] btb_used;
-			wire [pt[2061-:14] - 1:0] wr0_en;
-			reg [pt[2061-:14] - 1:0] btb_upper_hit;
-			wire [(pt[2061-:14] * BTB_DWIDTH) - 1:0] btbdata;
-			wire [FA_CMP_LOWER - 1:1] ifc_fetch_addr_p1_f;
-			assign ifc_fetch_addr_p1_f[FA_CMP_LOWER - 1:1] = ifc_fetch_addr_f[FA_CMP_LOWER - 1:1] + 1'b1;
-			assign fetch_mp_collision_f = (((exu_mp_btag[pt[2139-:9] - 1:0] == ifc_fetch_addr_f[31:1]) & exu_mp_valid) & ifc_fetch_req_f) & ~exu_mp_pkt[32];
-			assign fetch_mp_collision_p1_f = (((exu_mp_btag[pt[2139-:9] - 1:0] == {ifc_fetch_addr_f[31:FA_CMP_LOWER], ifc_fetch_addr_p1_f[FA_CMP_LOWER - 1:1]}) & exu_mp_valid) & ifc_fetch_req_f) & ~exu_mp_pkt[32];
-			function automatic signed [(BTB_FA_INDEX >= 0 ? BTB_FA_INDEX + 1 : 1 - BTB_FA_INDEX) - 1:0] sv2v_cast_50CAB_signed;
-				input reg signed [(BTB_FA_INDEX >= 0 ? BTB_FA_INDEX + 1 : 1 - BTB_FA_INDEX) - 1:0] inp;
-				sv2v_cast_50CAB_signed = inp;
-			endfunction
-			always @(*) begin
-				btb_vbank0_rd_data_f = {BTB_DWIDTH {1'sb0}};
-				btb_vbank1_rd_data_f = {BTB_DWIDTH {1'sb0}};
-				btb_tag_hit = {pt[2061-:14] {1'sb0}};
-				btb_upper_hit = {pt[2061-:14] {1'sb0}};
-				btb_offset_0 = {pt[2061-:14] {1'sb0}};
-				btb_offset_1 = {pt[2061-:14] {1'sb0}};
-				found1 = 1'b0;
-				hit0 = 1'b0;
-				hit1 = 1'b0;
-				hit0_index = {$clog2(pt[2061-:14]) {1'sb0}};
-				hit1_index = {$clog2(pt[2061-:14]) {1'sb0}};
-				btb_fa_wr_addr0 = {$clog2(pt[2061-:14]) {1'sb0}};
-				begin : sv2v_autoblock_45
-					reg signed [31:0] i;
-					for (i = 0; i < pt[2061-:14]; i = i + 1)
-						begin
-							btb_upper_hit[i] = ((btbdata[(i * BTB_DWIDTH) + (BTB_DWIDTH_TOP >= FA_TAG_END_UPPER ? BTB_DWIDTH_TOP : (BTB_DWIDTH_TOP + (BTB_DWIDTH_TOP >= FA_TAG_END_UPPER ? (BTB_DWIDTH_TOP - FA_TAG_END_UPPER) + 1 : (FA_TAG_END_UPPER - BTB_DWIDTH_TOP) + 1)) - 1)-:(BTB_DWIDTH_TOP >= FA_TAG_END_UPPER ? (BTB_DWIDTH_TOP - FA_TAG_END_UPPER) + 1 : (FA_TAG_END_UPPER - BTB_DWIDTH_TOP) + 1)] == ifc_fetch_addr_f[31:FA_CMP_LOWER]) & btbdata[i * BTB_DWIDTH]) & ~wr0_en[i];
-							btb_offset_0[i] = (btbdata[(i * BTB_DWIDTH) + (FA_TAG_START_LOWER >= FA_TAG_END_LOWER ? FA_TAG_START_LOWER : (FA_TAG_START_LOWER + (FA_TAG_START_LOWER >= FA_TAG_END_LOWER ? (FA_TAG_START_LOWER - FA_TAG_END_LOWER) + 1 : (FA_TAG_END_LOWER - FA_TAG_START_LOWER) + 1)) - 1)-:(FA_TAG_START_LOWER >= FA_TAG_END_LOWER ? (FA_TAG_START_LOWER - FA_TAG_END_LOWER) + 1 : (FA_TAG_END_LOWER - FA_TAG_START_LOWER) + 1)] == ifc_fetch_addr_f[FA_CMP_LOWER - 1:1]) & btb_upper_hit[i];
-							btb_offset_1[i] = (btbdata[(i * BTB_DWIDTH) + (FA_TAG_START_LOWER >= FA_TAG_END_LOWER ? FA_TAG_START_LOWER : (FA_TAG_START_LOWER + (FA_TAG_START_LOWER >= FA_TAG_END_LOWER ? (FA_TAG_START_LOWER - FA_TAG_END_LOWER) + 1 : (FA_TAG_END_LOWER - FA_TAG_START_LOWER) + 1)) - 1)-:(FA_TAG_START_LOWER >= FA_TAG_END_LOWER ? (FA_TAG_START_LOWER - FA_TAG_END_LOWER) + 1 : (FA_TAG_END_LOWER - FA_TAG_START_LOWER) + 1)] == ifc_fetch_addr_p1_f[FA_CMP_LOWER - 1:1]) & btb_upper_hit[i];
-							if (~hit0)
-								if (btb_offset_0[i]) begin
-									hit0_index[BTB_FA_INDEX:0] = sv2v_cast_50CAB_signed(i);
-									hit0 = 1'b1;
-								end
-							if (~hit1)
-								if (btb_offset_1[i]) begin
-									hit1_index[BTB_FA_INDEX:0] = sv2v_cast_50CAB_signed(i);
-									hit1 = 1'b1;
-								end
-							if (btb_offset_0[i] == 1'b1)
-								btb_vbank0_rd_data_f[BTB_DWIDTH - 1:0] = (fetch_mp_collision_f ? btb_wr_data : btbdata[i * BTB_DWIDTH+:BTB_DWIDTH]);
-							if (btb_offset_1[i] == 1'b1)
-								btb_vbank1_rd_data_f[BTB_DWIDTH - 1:0] = (fetch_mp_collision_p1_f ? btb_wr_data : btbdata[i * BTB_DWIDTH+:BTB_DWIDTH]);
-							if (~found1)
-								if (~btb_used[i]) begin
-									btb_fa_wr_addr0[BTB_FA_INDEX:0] = i[BTB_FA_INDEX:0];
-									found1 = 1'b1;
-								end
-						end
-				end
-			end
-			assign vwayhit_f[1:0] = {hit1, hit0} & {eoc_mask, 1'b1};
-			assign way_raw[1:0] = vwayhit_f[1:0] | {fetch_mp_collision_p1_f, fetch_mp_collision_f};
-			for (j = 0; j < pt[2061-:14]; j = j + 1) begin : BTB_FAFLOPS
-				assign wr0_en[j] = ((btb_fa_wr_addr0[BTB_FA_INDEX:0] == j) & (exu_mp_valid_write & ~exu_mp_pkt[32])) | ((dec_fa_error_index == j) & dec_tlu_error_wb);
-				rvdffe #(.WIDTH(BTB_DWIDTH)) btb_fa(
-					.rst_l(rst_l),
-					.scan_mode(scan_mode),
-					.clk(clk),
-					.en(wr0_en[j]),
-					.din(btb_wr_data[BTB_DWIDTH - 1:0]),
-					.dout(btbdata[j * BTB_DWIDTH+:BTB_DWIDTH])
-				);
-			end
-			assign ifu_bp_fa_index_f[$clog2(pt[2061-:14])+:$clog2(pt[2061-:14])] = (hit1 ? hit1_index : {$clog2(pt[2061-:14]) {1'sb0}});
-			assign ifu_bp_fa_index_f[0+:$clog2(pt[2061-:14])] = (hit0 ? hit0_index : {$clog2(pt[2061-:14]) {1'sb0}});
-			assign btb_used_reset = &btb_used[pt[2061-:14] - 1:0];
-			assign btb_used_ns[pt[2061-:14] - 1:0] = ((((({pt[2061-:14] {vwayhit_f[1]}} & (32'b00000000000000000000000000000001 << hit1_index[BTB_FA_INDEX:0])) | ({pt[2061-:14] {vwayhit_f[0]}} & (32'b00000000000000000000000000000001 << hit0_index[BTB_FA_INDEX:0]))) | ({pt[2061-:14] {(exu_mp_valid_write & ~exu_mp_pkt[32]) & ~dec_tlu_error_wb}} & (32'b00000000000000000000000000000001 << btb_fa_wr_addr0[BTB_FA_INDEX:0]))) | ({pt[2061-:14] {btb_used_reset}} & {pt[2061-:14] {1'b0}})) | ({pt[2061-:14] {~btb_used_reset & dec_tlu_error_wb}} & (btb_used[pt[2061-:14] - 1:0] & ~(32'b00000000000000000000000000000001 << dec_fa_error_index[BTB_FA_INDEX:0])))) | (~{pt[2061-:14] {btb_used_reset | dec_tlu_error_wb}} & btb_used[pt[2061-:14] - 1:0]);
-			assign write_used = ((btb_used_reset | ifu_bp_hit_taken_f) | exu_mp_valid_write) | dec_tlu_error_wb;
-			rvdffe #(.WIDTH(pt[2061-:14])) btb_usedf(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(write_used),
-				.din(btb_used_ns[pt[2061-:14] - 1:0]),
-				.dout(btb_used[pt[2061-:14] - 1:0])
-			);
-		end
-	endgenerate
-	wire [(((2 * (pt[2256-:15] / NUM_BHT_LOOP)) * NUM_BHT_LOOP) * 2) - 1:0] bht_bank_wr_data;
-	wire [((2 * pt[2256-:15]) * 2) - 1:0] bht_bank_rd_data_out;
-	wire [(2 * (pt[2256-:15] / NUM_BHT_LOOP)) - 1:0] bht_bank_clken;
-	wire [(2 * (pt[2256-:15] / NUM_BHT_LOOP)) - 1:0] bht_bank_clk;
-	wire [((2 * (pt[2256-:15] / NUM_BHT_LOOP)) * NUM_BHT_LOOP) - 1:0] bht_bank_sel;
-	generate
-		for (i = 0; i < 2; i = i + 1) begin : BANKS
-			genvar k;
-			for (k = 0; k < (pt[2256-:15] / NUM_BHT_LOOP); k = k + 1) begin : BHT_CLK_GROUP
-				assign bht_bank_clken[(i * (pt[2256-:15] / NUM_BHT_LOOP)) + k] = (bht_wr_en0[i] & ((bht_wr_addr0[pt[2270-:8]:NUM_BHT_LOOP_OUTER_LO] == k) | BHT_NO_ADDR_MATCH)) | (bht_wr_en2[i] & ((bht_wr_addr2[pt[2270-:8]:NUM_BHT_LOOP_OUTER_LO] == k) | BHT_NO_ADDR_MATCH));
-				rvclkhdr bht_bank_grp_cgc(
-					.en(bht_bank_clken[(i * (pt[2256-:15] / NUM_BHT_LOOP)) + k]),
-					.l1clk(bht_bank_clk[(i * (pt[2256-:15] / NUM_BHT_LOOP)) + k]),
-					.clk(clk),
-					.scan_mode(scan_mode)
-				);
-				for (j = 0; j < NUM_BHT_LOOP; j = j + 1) begin : BHT_FLOPS
-					assign bht_bank_sel[(((i * (pt[2256-:15] / NUM_BHT_LOOP)) + k) * NUM_BHT_LOOP) + j] = ((bht_wr_en0[i] & (bht_wr_addr0[NUM_BHT_LOOP_INNER_HI:pt[2262-:6]] == j)) & ((bht_wr_addr0[pt[2270-:8]:NUM_BHT_LOOP_OUTER_LO] == k) | BHT_NO_ADDR_MATCH)) | ((bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI:pt[2262-:6]] == j)) & ((bht_wr_addr2[pt[2270-:8]:NUM_BHT_LOOP_OUTER_LO] == k) | BHT_NO_ADDR_MATCH));
-					assign bht_bank_wr_data[((((i * (pt[2256-:15] / NUM_BHT_LOOP)) + k) * NUM_BHT_LOOP) + j) * 2+:2] = ((bht_wr_en2[i] & (bht_wr_addr2[NUM_BHT_LOOP_INNER_HI:pt[2262-:6]] == j)) & ((bht_wr_addr2[pt[2270-:8]:NUM_BHT_LOOP_OUTER_LO] == k) | BHT_NO_ADDR_MATCH) ? bht_wr_data2[1:0] : bht_wr_data0[1:0]);
-					rvdffs_fpga #(.WIDTH(2)) bht_bank(
-						.rst_l(rst_l),
-						.clk(bht_bank_clk[(i * (pt[2256-:15] / NUM_BHT_LOOP)) + k]),
-						.en(bht_bank_sel[(((i * (pt[2256-:15] / NUM_BHT_LOOP)) + k) * NUM_BHT_LOOP) + j]),
-						.rawclk(clk),
-						.clken(bht_bank_sel[(((i * (pt[2256-:15] / NUM_BHT_LOOP)) + k) * NUM_BHT_LOOP) + j]),
-						.din(bht_bank_wr_data[((((i * (pt[2256-:15] / NUM_BHT_LOOP)) + k) * NUM_BHT_LOOP) + j) * 2+:2]),
-						.dout(bht_bank_rd_data_out[((i * pt[2256-:15]) + ((16 * k) + j)) * 2+:2])
-					);
-				end
-			end
-		end
-	endgenerate
-	function automatic signed [((pt[2270-:8] - pt[2262-:6]) >= 0 ? (pt[2270-:8] - pt[2262-:6]) + 1 : 1 - (pt[2270-:8] - pt[2262-:6])) - 1:0] sv2v_cast_AB44B_signed;
-		input reg signed [((pt[2270-:8] - pt[2262-:6]) >= 0 ? (pt[2270-:8] - pt[2262-:6]) + 1 : 1 - (pt[2270-:8] - pt[2262-:6])) - 1:0] inp;
-		sv2v_cast_AB44B_signed = inp;
-	endfunction
-	always @(*) begin : BHT_rd_mux
-		bht_bank0_rd_data_f[1:0] = {2 {1'sb0}};
-		bht_bank1_rd_data_f[1:0] = {2 {1'sb0}};
-		bht_bank0_rd_data_p1_f[1:0] = {2 {1'sb0}};
-		begin : sv2v_autoblock_46
-			reg signed [31:0] j;
-			for (j = 0; j < pt[2256-:15]; j = j + 1)
-				begin
-					if (bht_rd_addr_f[pt[2270-:8]:pt[2262-:6]] == sv2v_cast_AB44B_signed(j)) begin
-						bht_bank0_rd_data_f[1:0] = bht_bank_rd_data_out[j * 2+:2];
-						bht_bank1_rd_data_f[1:0] = bht_bank_rd_data_out[(pt[2256-:15] + j) * 2+:2];
-					end
-					if (bht_rd_addr_p1_f[pt[2270-:8]:pt[2262-:6]] == sv2v_cast_AB44B_signed(j))
-						bht_bank0_rd_data_p1_f[1:0] = bht_bank_rd_data_out[j * 2+:2];
-				end
-		end
-	end
-endmodule
-module eb1_ifu_compress_ctl (
-	din,
-	dout
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [15:0] din;
-	output wire [31:0] dout;
-	wire legal;
-	wire [15:0] i;
-	wire [31:0] o;
-	wire [31:0] l1;
-	wire [31:0] l2;
-	wire [31:0] l3;
-	assign i[15:0] = din[15:0];
-	wire [4:0] rs2d;
-	wire [4:0] rdd;
-	wire [4:0] rdpd;
-	wire [4:0] rs2pd;
-	wire rdrd;
-	wire rdrs1;
-	wire rs2rs2;
-	wire rdprd;
-	wire rdprs1;
-	wire rs2prs2;
-	wire rs2prd;
-	wire uimm9_2;
-	wire ulwimm6_2;
-	wire ulwspimm7_2;
-	wire rdeq2;
-	wire rdeq1;
-	wire rs1eq2;
-	wire sbroffset8_1;
-	wire simm9_4;
-	wire simm5_0;
-	wire sjaloffset11_1;
-	wire sluimm17_12;
-	wire uimm5_0;
-	wire uswimm6_2;
-	wire uswspimm7_2;
-	assign rs2d[4:0] = i[6:2];
-	assign rdd[4:0] = i[11:7];
-	assign rdpd[4:0] = {2'b01, i[9:7]};
-	assign rs2pd[4:0] = {2'b01, i[4:2]};
-	assign l1[6:0] = o[6:0];
-	assign l1[11:7] = ((((o[11:7] | ({5 {rdrd}} & rdd[4:0])) | ({5 {rdprd}} & rdpd[4:0])) | ({5 {rs2prd}} & rs2pd[4:0])) | ({5 {rdeq1}} & 5'd1)) | ({5 {rdeq2}} & 5'd2);
-	assign l1[14:12] = o[14:12];
-	assign l1[19:15] = ((o[19:15] | ({5 {rdrs1}} & rdd[4:0])) | ({5 {rdprs1}} & rdpd[4:0])) | ({5 {rs1eq2}} & 5'd2);
-	assign l1[24:20] = (o[24:20] | ({5 {rs2rs2}} & rs2d[4:0])) | ({5 {rs2prs2}} & rs2pd[4:0]);
-	assign l1[31:25] = o[31:25];
-	wire [5:0] simm5d;
-	wire [9:2] uimm9d;
-	wire [9:4] simm9d;
-	wire [6:2] ulwimm6d;
-	wire [7:2] ulwspimm7d;
-	wire [5:0] uimm5d;
-	wire [20:1] sjald;
-	wire [31:12] sluimmd;
-	assign simm5d[5:0] = {i[12], i[6:2]};
-	assign uimm9d[9:2] = {i[10:7], i[12:11], i[5], i[6]};
-	assign simm9d[9:4] = {i[12], i[4:3], i[5], i[2], i[6]};
-	assign ulwimm6d[6:2] = {i[5], i[12:10], i[6]};
-	assign ulwspimm7d[7:2] = {i[3:2], i[12], i[6:4]};
-	assign uimm5d[5:0] = {i[12], i[6:2]};
-	assign sjald[11:1] = {i[12], i[8], i[10:9], i[6], i[7], i[2], i[11], i[5:4], i[3]};
-	assign sjald[20:12] = {9 {i[12]}};
-	assign sluimmd[31:12] = {{15 {i[12]}}, i[6:2]};
-	assign l2[31:20] = (((((((l1[31:20] | ({12 {simm5_0}} & {{7 {simm5d[5]}}, simm5d[4:0]})) | ({12 {uimm9_2}} & {2'b00, uimm9d[9:2], 2'b00})) | ({12 {simm9_4}} & {{3 {simm9d[9]}}, simm9d[8:4], 4'b0000})) | ({12 {ulwimm6_2}} & {5'b00000, ulwimm6d[6:2], 2'b00})) | ({12 {ulwspimm7_2}} & {4'b0000, ulwspimm7d[7:2], 2'b00})) | ({12 {uimm5_0}} & {6'b000000, uimm5d[5:0]})) | ({12 {sjaloffset11_1}} & {sjald[20], sjald[10:1], sjald[11]})) | ({12 {sluimm17_12}} & sluimmd[31:20]);
-	assign l2[19:12] = (l1[19:12] | ({8 {sjaloffset11_1}} & sjald[19:12])) | ({8 {sluimm17_12}} & sluimmd[19:12]);
-	assign l2[11:0] = l1[11:0];
-	wire [8:1] sbr8d;
-	wire [6:2] uswimm6d;
-	wire [7:2] uswspimm7d;
-	assign sbr8d[8:1] = {i[12], i[6], i[5], i[2], i[11], i[10], i[4], i[3]};
-	assign uswimm6d[6:2] = {i[5], i[12:10], i[6]};
-	assign uswspimm7d[7:2] = {i[8:7], i[12:9]};
-	assign l3[31:25] = ((l2[31:25] | ({7 {sbroffset8_1}} & {{4 {sbr8d[8]}}, sbr8d[7:5]})) | ({7 {uswimm6_2}} & {5'b00000, uswimm6d[6:5]})) | ({7 {uswspimm7_2}} & {4'b0000, uswspimm7d[7:5]});
-	assign l3[24:12] = l2[24:12];
-	assign l3[11:7] = ((l2[11:7] | ({5 {sbroffset8_1}} & {sbr8d[4:1], sbr8d[8]})) | ({5 {uswimm6_2}} & {uswimm6d[4:2], 2'b00})) | ({5 {uswspimm7_2}} & {uswspimm7d[4:2], 2'b00});
-	assign l3[6:0] = l2[6:0];
-	assign dout[31:0] = l3[31:0] & {32 {legal}};
-	assign rdrd = ((((((((((((!i[14] & i[6]) & i[1]) | (((!i[15] & i[14]) & i[11]) & i[0])) | ((!i[14] & i[5]) & i[1])) | (((!i[15] & i[14]) & i[10]) & i[0])) | ((!i[14] & i[4]) & i[1])) | (((!i[15] & i[14]) & i[9]) & i[0])) | ((!i[14] & i[3]) & i[1])) | (((!i[15] & i[14]) & !i[8]) & i[0])) | ((!i[14] & i[2]) & i[1])) | (((!i[15] & i[14]) & i[7]) & i[0])) | (!i[15] & i[1])) | ((!i[15] & !i[13]) & i[0]);
-	assign rdrs1 = ((((((((((((((!i[14] & i[12]) & i[11]) & i[1]) | (((!i[14] & i[12]) & i[10]) & i[1])) | (((!i[14] & i[12]) & i[9]) & i[1])) | (((!i[14] & i[12]) & i[8]) & i[1])) | (((!i[14] & i[12]) & i[7]) & i[1])) | (((((((!i[14] & !i[12]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | (((!i[14] & i[12]) & i[6]) & i[1])) | (((!i[14] & i[12]) & i[5]) & i[1])) | (((!i[14] & i[12]) & i[4]) & i[1])) | (((!i[14] & i[12]) & i[3]) & i[1])) | (((!i[14] & i[12]) & i[2]) & i[1])) | (((!i[15] & !i[14]) & !i[13]) & i[0])) | ((!i[15] & !i[14]) & i[1]);
-	assign rs2rs2 = ((((((i[15] & i[6]) & i[1]) | ((i[15] & i[5]) & i[1])) | ((i[15] & i[4]) & i[1])) | ((i[15] & i[3]) & i[1])) | ((i[15] & i[2]) & i[1])) | ((i[15] & i[14]) & i[1]);
-	assign rdprd = ((i[15] & !i[14]) & !i[13]) & i[0];
-	assign rdprs1 = (((i[15] & !i[13]) & i[0]) | ((i[15] & i[14]) & i[0])) | ((i[14] & !i[1]) & !i[0]);
-	assign rs2prs2 = (((((i[15] & !i[14]) & !i[13]) & i[11]) & i[10]) & i[0]) | ((i[15] & !i[1]) & !i[0]);
-	assign rs2prd = (!i[15] & !i[1]) & !i[0];
-	assign uimm9_2 = (!i[14] & !i[1]) & !i[0];
-	assign ulwimm6_2 = ((!i[15] & i[14]) & !i[1]) & !i[0];
-	assign ulwspimm7_2 = (!i[15] & i[14]) & i[1];
-	assign rdeq2 = ((((((!i[15] & i[14]) & i[13]) & !i[11]) & !i[10]) & !i[9]) & i[8]) & !i[7];
-	assign rdeq1 = ((((((((((((!i[14] & i[12]) & i[11]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1]) | ((((((((!i[14] & i[12]) & i[10]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((!i[14] & i[12]) & i[9]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((!i[14] & i[12]) & i[8]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((!i[14] & i[12]) & i[7]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((!i[15] & !i[14]) & i[13]);
-	assign rs1eq2 = ((((((((!i[15] & i[14]) & i[13]) & !i[11]) & !i[10]) & !i[9]) & i[8]) & !i[7]) | (i[14] & i[1])) | ((!i[14] & !i[1]) & !i[0]);
-	assign sbroffset8_1 = (i[15] & i[14]) & i[0];
-	assign simm9_4 = ((((((!i[15] & i[14]) & i[13]) & !i[11]) & !i[10]) & !i[9]) & i[8]) & !i[7];
-	assign simm5_0 = ((((!i[14] & !i[13]) & i[11]) & !i[10]) & i[0]) | ((!i[15] & !i[13]) & i[0]);
-	assign sjaloffset11_1 = !i[14] & i[13];
-	assign sluimm17_12 = ((((((!i[15] & i[14]) & i[13]) & i[7]) | (((!i[15] & i[14]) & i[13]) & !i[8])) | (((!i[15] & i[14]) & i[13]) & i[9])) | (((!i[15] & i[14]) & i[13]) & i[10])) | (((!i[15] & i[14]) & i[13]) & i[11]);
-	assign uimm5_0 = ((((i[15] & !i[14]) & !i[13]) & !i[11]) & i[0]) | ((!i[15] & !i[14]) & i[1]);
-	assign uswimm6_2 = (i[15] & !i[1]) & !i[0];
-	assign uswspimm7_2 = (i[15] & i[14]) & i[1];
-	assign o[31] = 1'b0;
-	assign o[30] = ((((((i[15] & !i[14]) & !i[13]) & i[10]) & !i[6]) & !i[5]) & i[0]) | (((((i[15] & !i[14]) & !i[13]) & !i[11]) & i[10]) & i[0]);
-	assign o[29] = 1'b0;
-	assign o[28] = 1'b0;
-	assign o[27] = 1'b0;
-	assign o[26] = 1'b0;
-	assign o[25] = 1'b0;
-	assign o[24] = 1'b0;
-	assign o[23] = 1'b0;
-	assign o[22] = 1'b0;
-	assign o[21] = 1'b0;
-	assign o[20] = (((((((((((!i[14] & i[12]) & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1];
-	assign o[19] = 1'b0;
-	assign o[18] = 1'b0;
-	assign o[17] = 1'b0;
-	assign o[16] = 1'b0;
-	assign o[15] = 1'b0;
-	assign o[14] = ((((((i[15] & !i[14]) & !i[13]) & !i[11]) & i[0]) | ((((i[15] & !i[14]) & !i[13]) & !i[10]) & i[0])) | ((((i[15] & !i[14]) & !i[13]) & i[6]) & i[0])) | ((((i[15] & !i[14]) & !i[13]) & i[5]) & i[0]);
-	assign o[13] = ((((((i[15] & !i[14]) & !i[13]) & i[11]) & !i[10]) & i[0]) | (((((i[15] & !i[14]) & !i[13]) & i[11]) & i[6]) & i[0])) | (i[14] & !i[0]);
-	assign o[12] = ((((((((i[15] & !i[14]) & !i[13]) & i[6]) & i[5]) & i[0]) | ((((i[15] & !i[14]) & !i[13]) & !i[11]) & i[0])) | ((((i[15] & !i[14]) & !i[13]) & !i[10]) & i[0])) | ((!i[15] & !i[14]) & i[1])) | ((i[15] & i[14]) & i[13]);
-	assign o[11] = 1'b0;
-	assign o[10] = 1'b0;
-	assign o[9] = 1'b0;
-	assign o[8] = 1'b0;
-	assign o[7] = 1'b0;
-	assign o[6] = ((((((((i[15] & !i[14]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & !i[0]) | (!i[14] & i[13])) | ((i[15] & i[14]) & i[0]);
-	assign o[5] = ((((((((i[15] & !i[0]) | ((i[15] & i[11]) & i[10])) | (i[13] & !i[8])) | (i[13] & i[7])) | (i[13] & i[9])) | (i[13] & i[10])) | (i[13] & i[11])) | (!i[14] & i[13])) | (i[15] & i[14]);
-	assign o[4] = (((((((((((((!i[14] & !i[11]) & !i[10]) & !i[9]) & !i[8]) & !i[7]) & !i[0]) | ((!i[15] & !i[14]) & !i[0])) | ((!i[14] & i[6]) & !i[0])) | ((!i[15] & i[14]) & i[0])) | ((!i[14] & i[5]) & !i[0])) | ((!i[14] & i[4]) & !i[0])) | ((!i[14] & !i[13]) & i[0])) | ((!i[14] & i[3]) & !i[0])) | ((!i[14] & i[2]) & !i[0]);
-	assign o[3] = !i[14] & i[13];
-	assign o[2] = ((((((((((((((((((!i[14] & i[12]) & i[11]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1]) | ((((((((!i[14] & i[12]) & i[10]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((!i[14] & i[12]) & i[9]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((!i[14] & i[12]) & i[8]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((!i[14] & i[12]) & i[7]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & i[1])) | ((((((((i[15] & !i[14]) & !i[12]) & !i[6]) & !i[5]) & !i[4]) & !i[3]) & !i[2]) & !i[0])) | ((!i[15] & i[13]) & !i[8])) | ((!i[15] & i[13]) & i[7])) | ((!i[15] & i[13]) & i[9])) | ((!i[15] & i[13]) & i[10])) | ((!i[15] & i[13]) & i[11])) | (!i[14] & i[13]);
-	assign o[1] = 1'b1;
-	assign o[0] = 1'b1;
-	assign legal = (((((((((((((((((((((((((((((((((!i[13] & !i[12]) & i[11]) & i[1]) & !i[0]) | ((((!i[13] & !i[12]) & i[6]) & i[1]) & !i[0])) | (((!i[15] & !i[13]) & i[11]) & !i[1])) | ((((!i[13] & !i[12]) & i[5]) & i[1]) & !i[0])) | ((((!i[13] & !i[12]) & i[10]) & i[1]) & !i[0])) | (((!i[15] & !i[13]) & i[6]) & !i[1])) | (((i[15] & !i[12]) & !i[1]) & i[0])) | ((((!i[13] & !i[12]) & i[9]) & i[1]) & !i[0])) | (((!i[12] & i[6]) & !i[1]) & i[0])) | (((!i[15] & !i[13]) & i[5]) & !i[1])) | ((((!i[13] & !i[12]) & i[8]) & i[1]) & !i[0])) | (((!i[12] & i[5]) & !i[1]) & i[0])) | (((!i[15] & !i[13]) & i[10]) & !i[1])) | ((((!i[13] & !i[12]) & i[7]) & i[1]) & !i[0])) | ((((i[12] & i[11]) & !i[10]) & !i[1]) & i[0])) | (((!i[15] & !i[13]) & i[9]) & !i[1])) | ((((!i[13] & !i[12]) & i[4]) & i[1]) & !i[0])) | (((i[13] & i[12]) & !i[1]) & i[0])) | (((!i[15] & !i[13]) & i[8]) & !i[1])) | ((((!i[13] & !i[12]) & i[3]) & i[1]) & !i[0])) | (((i[13] & i[4]) & !i[1]) & i[0])) | ((((!i[13] & !i[12]) & i[2]) & i[1]) & !i[0])) | (((!i[15] & !i[13]) & i[7]) & !i[1])) | (((i[13] & i[3]) & !i[1]) & i[0])) | (((i[13] & i[2]) & !i[1]) & i[0])) | ((i[14] & !i[13]) & !i[1])) | (((!i[14] & !i[12]) & !i[1]) & i[0])) | ((((i[15] & !i[13]) & i[12]) & i[1]) & !i[0])) | ((((!i[15] & !i[13]) & !i[12]) & i[1]) & !i[0])) | (((!i[15] & !i[13]) & i[12]) & !i[1])) | ((i[14] & !i[13]) & !i[0]);
-endmodule
-module eb1_ifu_iccm_mem (
-	VPWR,
-	VGND,
-	clk,
-	active_clk,
-	rst_l,
-	clk_override,
-	iccm_wren,
-	iccm_rden,
-	iccm_rw_addr,
-	iccm_buf_correct_ecc,
-	iccm_correction_state,
-	iccm_wr_size,
-	iccm_wr_data,
-	iccm_ext_in_pkt,
-	iccm_rd_data,
-	iccm_rd_data_ecc,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire VPWR;
-	input wire VGND;
-	input wire clk;
-	input wire active_clk;
-	input wire rst_l;
-	input wire clk_override;
-	input wire iccm_wren;
-	input wire iccm_rden;
-	input wire [pt[936-:9] - 1:1] iccm_rw_addr;
-	input wire iccm_buf_correct_ecc;
-	input wire iccm_correction_state;
-	input wire [2:0] iccm_wr_size;
-	input wire [77:0] iccm_wr_data;
-	input wire [(pt[909-:9] * 12) - 1:0] iccm_ext_in_pkt;
-	output wire [63:0] iccm_rd_data;
-	output wire [77:0] iccm_rd_data_ecc;
-	input wire scan_mode;
-	wire [pt[909-:9] - 1:0] wren_bank;
-	wire [pt[909-:9] - 1:0] rden_bank;
-	wire [pt[909-:9] - 1:0] iccm_clken;
-	wire [((pt[936-:9] - 1) >= pt[945-:9] ? (pt[909-:9] * (((pt[936-:9] - 1) - pt[945-:9]) + 1)) + (pt[945-:9] - 1) : (pt[909-:9] * ((pt[945-:9] - (pt[936-:9] - 1)) + 1)) + (pt[936-:9] - 2)):((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1)] addr_bank;
-	wire [(pt[909-:9] * 39) - 1:0] iccm_bank_dout;
-	wire [(pt[909-:9] * 39) - 1:0] iccm_bank_dout_fn;
-	wire [(pt[909-:9] * 39) - 1:0] iccm_bank_wr_data;
-	wire [pt[936-:9] - 1:1] addr_bank_inc;
-	wire [pt[954-:9]:2] iccm_rd_addr_hi_q;
-	wire [pt[954-:9]:1] iccm_rd_addr_lo_q;
-	wire [63:0] iccm_rd_data_pre;
-	wire [63:0] iccm_data;
-	wire [1:0] addr_incr;
-	wire [(pt[909-:9] * 39) - 1:0] iccm_bank_wr_data_vec;
-	wire [((pt[936-:9] - 1) >= 2 ? (2 * (pt[936-:9] - 2)) + 1 : (2 * (4 - pt[936-:9])) + (pt[936-:9] - 2)):((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)] redundant_address;
-	wire [77:0] redundant_data;
-	wire [1:0] redundant_valid;
-	wire [pt[909-:9] - 1:0] sel_red1;
-	wire [pt[909-:9] - 1:0] sel_red0;
-	wire [pt[909-:9] - 1:0] sel_red1_q;
-	wire [pt[909-:9] - 1:0] sel_red0_q;
-	wire [38:0] redundant_data0_in;
-	wire [38:0] redundant_data1_in;
-	wire redundant_lru;
-	wire redundant_lru_in;
-	wire redundant_lru_en;
-	wire redundant_data0_en;
-	wire redundant_data1_en;
-	wire r0_addr_en;
-	wire r1_addr_en;
-	assign addr_incr[1:0] = (iccm_wr_size[1:0] == 2'b11 ? 2'b10 : 2'b01);
-	assign addr_bank_inc[pt[936-:9] - 1:1] = iccm_rw_addr[pt[936-:9] - 1:1] + addr_incr[1:0];
-	generate
-		genvar i;
-		for (i = 0; i < (pt[909-:9] / 2); i = i + 1) begin : mem_bank_data
-			assign iccm_bank_wr_data_vec[(2 * i) * 39+:39] = iccm_wr_data[38:0];
-			assign iccm_bank_wr_data_vec[((2 * i) + 1) * 39+:39] = iccm_wr_data[77:39];
-		end
-	endgenerate
-	generate
-		for (i = 0; i < pt[909-:9]; i = i + 1) begin : mem_bank
-			assign wren_bank[i] = iccm_wren & ((iccm_rw_addr[pt[954-:9]:2] == i) | (addr_bank_inc[pt[954-:9]:2] == i));
-			assign iccm_bank_wr_data[i * 39+:39] = iccm_bank_wr_data_vec[i * 39+:39];
-			assign rden_bank[i] = iccm_rden & ((iccm_rw_addr[pt[954-:9]:2] == i) | (addr_bank_inc[pt[954-:9]:2] == i));
-			assign iccm_clken[i] = (wren_bank[i] | rden_bank[i]) | clk_override;
-			assign addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) >= pt[945-:9] ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) - 1) : pt[945-:9] - (((pt[936-:9] - 1) >= pt[945-:9] ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) - 1) - (pt[936-:9] - 1))) : (((i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) >= pt[945-:9] ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) - 1) : pt[945-:9] - (((pt[936-:9] - 1) >= pt[945-:9] ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) - 1) - (pt[936-:9] - 1)))) + ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)) - 1)-:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)] = (wren_bank[i] ? iccm_rw_addr[pt[936-:9] - 1:pt[945-:9]] : (addr_bank_inc[pt[954-:9]:2] == i ? addr_bank_inc[pt[936-:9] - 1:pt[945-:9]] : iccm_rw_addr[pt[936-:9] - 1:pt[945-:9]]));
-			if (pt[917-:8] == 6) begin : iccm
-				ram_64x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else if (pt[917-:8] == 7) begin : iccm
-				ram_128x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else if (pt[917-:8] == 8) begin : iccm
-				sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-					.vccd1(VPWR),
-					.vssd1(VGND),
-					.clk0(clk),
-					.csb0(~iccm_clken[i]),
-					.web0(~wren_bank[i]),
-					.wmask0(4'hf),
-					.addr0(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.din0(iccm_bank_wr_data[(i * 39) + 31-:32]),
-					.dout0(iccm_bank_dout[(i * 39) + 31-:32]),
-					.clk1(clk),
-					.csb1(1'b1),
-					.addr1(8'h00),
-					.dout1()
-				);
-			end
-			else if (pt[917-:8] == 9) begin : iccm
-				ram_512x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else if (pt[917-:8] == 10) begin : iccm
-				sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-					.vccd1(VPWR),
-					.vssd1(VGND),
-					.clk0(clk),
-					.csb0(~iccm_clken[i]),
-					.web0(~wren_bank[i]),
-					.wmask0(4'hf),
-					.addr0(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.din0(iccm_bank_wr_data[i * 39+:39]),
-					.dout0(iccm_bank_dout[i * 39+:39]),
-					.clk1(clk),
-					.csb1(1'b1),
-					.addr1(8'h00),
-					.dout1()
-				);
-			end
-			else if (pt[917-:8] == 11) begin : iccm
-				ram_2048x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else if (pt[917-:8] == 12) begin : iccm
-				ram_4096x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else if (pt[917-:8] == 13) begin : iccm
-				ram_8192x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else if (pt[917-:8] == 14) begin : iccm
-				ram_16384x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			else begin : iccm
-				ram_32768x39 iccm_bank(
-					.CLK(clk),
-					.ME(iccm_clken[i]),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[936-:9] - 1) >= pt[945-:9] ? pt[945-:9] : pt[936-:9] - 1) + (i * ((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1))+:((pt[936-:9] - 1) >= pt[945-:9] ? ((pt[936-:9] - 1) - pt[945-:9]) + 1 : (pt[945-:9] - (pt[936-:9] - 1)) + 1)]),
-					.D(iccm_bank_wr_data[(i * 39) + 38-:39]),
-					.Q(iccm_bank_dout[(i * 39) + 38-:39]),
-					.ROP(),
-					.TEST1(iccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(iccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(iccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(iccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(iccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(iccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(iccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(iccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(iccm_ext_in_pkt[i * 12])
-				);
-			end
-			assign sel_red1[i] = redundant_valid[1] & (((iccm_rw_addr[pt[936-:9] - 1:2] == redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : ((((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1)))) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])]) & (iccm_rw_addr[3:2] == i)) | ((addr_bank_inc[pt[936-:9] - 1:2] == redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : ((((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1)))) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])]) & (addr_bank_inc[3:2] == i)));
-			assign sel_red0[i] = redundant_valid[0] & (((iccm_rw_addr[pt[936-:9] - 1:2] == redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : (((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])]) & (iccm_rw_addr[3:2] == i)) | ((addr_bank_inc[pt[936-:9] - 1:2] == redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : (((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])]) & (addr_bank_inc[3:2] == i)));
-			rvdff #(.WIDTH(1)) selred0(
-				.rst_l(rst_l),
-				.clk(active_clk),
-				.din(sel_red0[i]),
-				.dout(sel_red0_q[i])
-			);
-			rvdff #(.WIDTH(1)) selred1(
-				.rst_l(rst_l),
-				.clk(active_clk),
-				.din(sel_red1[i]),
-				.dout(sel_red1_q[i])
-			);
-			assign iccm_bank_dout_fn[(i * 39) + 38-:39] = (({39 {sel_red1_q[i]}} & redundant_data[77-:39]) | ({39 {sel_red0_q[i]}} & redundant_data[38-:39])) | ({39 {~sel_red0_q[i] & ~sel_red1_q[i]}} & iccm_bank_dout[(i * 39) + 38-:39]);
-		end
-	endgenerate
-	assign r0_addr_en = ~redundant_lru & iccm_buf_correct_ecc;
-	assign r1_addr_en = redundant_lru & iccm_buf_correct_ecc;
-	assign redundant_lru_en = iccm_buf_correct_ecc | (((|sel_red0[pt[909-:9] - 1:0] | |sel_red1[pt[909-:9] - 1:0]) & iccm_rden) & iccm_correction_state);
-	assign redundant_lru_in = (iccm_buf_correct_ecc ? ~redundant_lru : (|sel_red0[pt[909-:9] - 1:0] ? 1'b1 : 1'b0));
-	rvdffs red_lru(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(redundant_lru_en),
-		.din(redundant_lru_in),
-		.dout(redundant_lru)
-	);
-	rvdffs #(.WIDTH(pt[936-:9] - 2)) r0_address(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(r0_addr_en),
-		.din(iccm_rw_addr[pt[936-:9] - 1:2]),
-		.dout(redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : (((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])])
-	);
-	rvdffs #(.WIDTH(pt[936-:9] - 2)) r1_address(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(r1_addr_en),
-		.din(iccm_rw_addr[pt[936-:9] - 1:2]),
-		.dout(redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : ((((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1) - (pt[936-:9] - 1)))) + ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9])])
-	);
-	rvdffs #(.WIDTH(1)) r0_valid(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(r0_addr_en),
-		.din(1'b1),
-		.dout(redundant_valid[0])
-	);
-	rvdffs #(.WIDTH(1)) r1_valid(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(r1_addr_en),
-		.din(1'b1),
-		.dout(redundant_valid[1])
-	);
-	assign redundant_data0_en = ((((iccm_rw_addr[pt[936-:9] - 1:3] == redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : (((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])]) & ((iccm_rw_addr[2] == redundant_address[((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)]) | (iccm_wr_size[1:0] == 2'b11))) & redundant_valid[0]) & iccm_wren) | (~redundant_lru & iccm_buf_correct_ecc);
-	assign redundant_data0_in[38:0] = (((iccm_rw_addr[2] == redundant_address[((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)]) & iccm_rw_addr[2]) | (redundant_address[((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)] & (iccm_wr_size[1:0] == 2'b11)) ? iccm_wr_data[77:39] : iccm_wr_data[38:0]);
-	rvdffs #(.WIDTH(39)) r0_data(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(redundant_data0_en),
-		.din(redundant_data0_in[38:0]),
-		.dout(redundant_data[38-:39])
-	);
-	assign redundant_data1_en = ((((iccm_rw_addr[pt[936-:9] - 1:3] == redundant_address[((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) - (pt[936-:9] - 1))) : ((((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) : 2 - (((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 1 : ((pt[936-:9] - 1) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1) - (pt[936-:9] - 1)))) + ((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])) - 1)-:((pt[936-:9] - 1) >= 3 ? pt[936-:9] - 3 : 5 - pt[936-:9])]) & ((iccm_rw_addr[2] == redundant_address[((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)]) | (iccm_wr_size[1:0] == 2'b11))) & redundant_valid[1]) & iccm_wren) | (redundant_lru & iccm_buf_correct_ecc);
-	assign redundant_data1_in[38:0] = (((iccm_rw_addr[2] == redundant_address[((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)]) & iccm_rw_addr[2]) | (redundant_address[((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) + ((pt[936-:9] - 1) >= 2 ? 2 : pt[936-:9] - 1)] & (iccm_wr_size[1:0] == 2'b11)) ? iccm_wr_data[77:39] : iccm_wr_data[38:0]);
-	rvdffs #(.WIDTH(39)) r1_data(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.en(redundant_data1_en),
-		.din(redundant_data1_in[38:0]),
-		.dout(redundant_data[77-:39])
-	);
-	rvdffs #(.WIDTH(pt[954-:9])) rd_addr_lo_ff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.din(iccm_rw_addr[pt[954-:9]:1]),
-		.dout(iccm_rd_addr_lo_q[pt[954-:9]:1]),
-		.en(1'b1)
-	);
-	rvdffs #(.WIDTH(pt[961-:7])) rd_addr_hi_ff(
-		.rst_l(rst_l),
-		.clk(active_clk),
-		.din(addr_bank_inc[pt[954-:9]:2]),
-		.dout(iccm_rd_addr_hi_q[pt[954-:9]:2]),
-		.en(1'b1)
-	);
-	assign iccm_rd_data_pre[63:0] = {iccm_bank_dout_fn[(iccm_rd_addr_hi_q * 39) + 31-:32], iccm_bank_dout_fn[(iccm_rd_addr_lo_q[pt[954-:9]:2] * 39) + 31-:32]};
-	function automatic [63:0] sv2v_cast_64;
-		input reg [63:0] inp;
-		sv2v_cast_64 = inp;
-	endfunction
-	assign iccm_data[63:0] = sv2v_cast_64({16'b0000000000000000, iccm_rd_data_pre[63:0] >> (16 * iccm_rd_addr_lo_q[1])});
-	assign iccm_rd_data[63:0] = {iccm_data[63:0]};
-	assign iccm_rd_data_ecc[77:0] = {iccm_bank_dout_fn[(iccm_rd_addr_hi_q * 39) + 38-:39], iccm_bank_dout_fn[(iccm_rd_addr_lo_q[pt[954-:9]:2] * 39) + 38-:39]};
-endmodule
-module eb1_ifu_ifc_ctl (
-	clk,
-	free_l2clk,
-	rst_l,
-	scan_mode,
-	ic_hit_f,
-	ifu_ic_mb_empty,
-	ifu_fb_consume1,
-	ifu_fb_consume2,
-	dec_tlu_flush_noredir_wb,
-	exu_flush_final,
-	exu_flush_path_final,
-	ifu_bp_hit_taken_f,
-	ifu_bp_btb_target_f,
-	ic_dma_active,
-	ic_write_stall,
-	dma_iccm_stall_any,
-	dec_tlu_mrac_ff,
-	ifc_fetch_addr_f,
-	ifc_fetch_addr_bf,
-	ifc_fetch_req_f,
-	ifu_pmu_fetch_stall,
-	ifc_fetch_uncacheable_bf,
-	ifc_fetch_req_bf,
-	ifc_fetch_req_bf_raw,
-	ifc_iccm_access_bf,
-	ifc_region_acc_fault_bf,
-	ifc_dma_access_ok
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire free_l2clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire ic_hit_f;
-	input wire ifu_ic_mb_empty;
-	input wire ifu_fb_consume1;
-	input wire ifu_fb_consume2;
-	input wire dec_tlu_flush_noredir_wb;
-	input wire exu_flush_final;
-	input wire [31:1] exu_flush_path_final;
-	input wire ifu_bp_hit_taken_f;
-	input wire [31:1] ifu_bp_btb_target_f;
-	input wire ic_dma_active;
-	input wire ic_write_stall;
-	input wire dma_iccm_stall_any;
-	input wire [31:0] dec_tlu_mrac_ff;
-	output wire [31:1] ifc_fetch_addr_f;
-	output wire [31:1] ifc_fetch_addr_bf;
-	output wire ifc_fetch_req_f;
-	output wire ifu_pmu_fetch_stall;
-	output wire ifc_fetch_uncacheable_bf;
-	output wire ifc_fetch_req_bf;
-	output wire ifc_fetch_req_bf_raw;
-	output wire ifc_iccm_access_bf;
-	output wire ifc_region_acc_fault_bf;
-	output wire ifc_dma_access_ok;
-	wire [31:1] fetch_addr_bf;
-	wire [31:1] fetch_addr_next;
-	wire [3:0] fb_write_f;
-	wire [3:0] fb_write_ns;
-	wire fb_full_f_ns;
-	wire fb_full_f;
-	wire fb_right;
-	wire fb_right2;
-	wire fb_left;
-	wire wfm;
-	wire idle;
-	wire sel_last_addr_bf;
-	wire sel_next_addr_bf;
-	wire miss_f;
-	wire miss_a;
-	wire flush_fb;
-	wire dma_iccm_stall_any_f;
-	wire mb_empty_mod;
-	wire goto_idle;
-	wire leave_idle;
-	wire fetch_bf_en;
-	wire line_wrap;
-	wire fetch_addr_next_1;
-	wire [1:0] state;
-	wire [1:0] next_state;
-	wire dma_stall;
-	assign dma_stall = ic_dma_active | dma_iccm_stall_any_f;
-	generate
-		if (pt[2130-:5] == 1) begin
-			wire sel_btb_addr_bf;
-			assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-			assign sel_btb_addr_bf = ((~exu_flush_final & ifc_fetch_req_f) & ifu_bp_hit_taken_f) & ic_hit_f;
-			assign sel_next_addr_bf = ((~exu_flush_final & ifc_fetch_req_f) & ~ifu_bp_hit_taken_f) & ic_hit_f;
-			assign fetch_addr_bf[31:1] = ((({31 {exu_flush_final}} & exu_flush_path_final[31:1]) | ({31 {sel_last_addr_bf}} & ifc_fetch_addr_f[31:1])) | ({31 {sel_btb_addr_bf}} & {ifu_bp_btb_target_f[31:1]})) | ({31 {sel_next_addr_bf}} & {fetch_addr_next[31:1]});
-		end
-		else begin
-			assign sel_last_addr_bf = ~exu_flush_final & (~ifc_fetch_req_f | ~ic_hit_f);
-			assign sel_next_addr_bf = (~exu_flush_final & ifc_fetch_req_f) & ic_hit_f;
-			assign fetch_addr_bf[31:1] = (({31 {exu_flush_final}} & exu_flush_path_final[31:1]) | ({31 {sel_last_addr_bf}} & ifc_fetch_addr_f[31:1])) | ({31 {sel_next_addr_bf}} & {fetch_addr_next[31:1]});
-		end
-	endgenerate
-	assign fetch_addr_next[31:1] = {{ifc_fetch_addr_f[31:2]} + 31'b0000000000000000000000000000001, fetch_addr_next_1};
-	assign line_wrap = fetch_addr_next[pt[998-:7]] ^ ifc_fetch_addr_f[pt[998-:7]];
-	assign fetch_addr_next_1 = (line_wrap ? 1'b0 : ifc_fetch_addr_f[1]);
-	assign ifc_fetch_req_bf_raw = ~idle;
-	assign ifc_fetch_req_bf = (((ifc_fetch_req_bf_raw & ~(fb_full_f_ns & ~(ifu_fb_consume2 | ifu_fb_consume1))) & ~dma_stall) & ~ic_write_stall) & ~dec_tlu_flush_noredir_wb;
-	assign fetch_bf_en = exu_flush_final | ifc_fetch_req_f;
-	assign miss_f = (ifc_fetch_req_f & ~ic_hit_f) & ~exu_flush_final;
-	assign mb_empty_mod = (((ifu_ic_mb_empty | exu_flush_final) & ~dma_stall) & ~miss_f) & ~miss_a;
-	assign goto_idle = exu_flush_final & dec_tlu_flush_noredir_wb;
-	assign leave_idle = (exu_flush_final & ~dec_tlu_flush_noredir_wb) & idle;
-	assign next_state[1] = (((~state[1] & state[0]) & miss_f) & ~goto_idle) | ((state[1] & ~mb_empty_mod) & ~goto_idle);
-	assign next_state[0] = (~goto_idle & leave_idle) | (state[0] & ~goto_idle);
-	assign flush_fb = exu_flush_final;
-	assign fb_right = ((ifu_fb_consume1 & ~ifu_fb_consume2) & (~ifc_fetch_req_f | miss_f)) | (ifu_fb_consume2 & ifc_fetch_req_f);
-	assign fb_right2 = ifu_fb_consume2 & (~ifc_fetch_req_f | miss_f);
-	assign fb_left = (ifc_fetch_req_f & ~(ifu_fb_consume1 | ifu_fb_consume2)) & ~miss_f;
-	assign fb_write_ns[3:0] = (((({4 {flush_fb}} & 4'b0001) | ({4 {~flush_fb & fb_right}} & {1'b0, fb_write_f[3:1]})) | ({4 {~flush_fb & fb_right2}} & {2'b00, fb_write_f[3:2]})) | ({4 {~flush_fb & fb_left}} & {fb_write_f[2:0], 1'b0})) | ({4 {((~flush_fb & ~fb_right) & ~fb_right2) & ~fb_left}} & fb_write_f[3:0]);
-	assign fb_full_f_ns = fb_write_ns[3];
-	localparam [1:0] IDLE = 2'b00;
-	assign idle = state == IDLE;
-	localparam [1:0] WFM = 2'b11;
-	assign wfm = state == WFM;
-	rvdffie #(.WIDTH(10)) fbwrite_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({dma_iccm_stall_any, miss_f, ifc_fetch_req_bf, next_state[1:0], fb_full_f_ns, fb_write_ns[3:0]}),
-		.dout({dma_iccm_stall_any_f, miss_a, ifc_fetch_req_f, state[1:0], fb_full_f, fb_write_f[3:0]})
-	);
-	assign ifu_pmu_fetch_stall = wfm | (ifc_fetch_req_bf_raw & ((fb_full_f & ~((ifu_fb_consume2 | ifu_fb_consume1) | exu_flush_final)) | dma_stall));
-	assign ifc_fetch_addr_bf[31:1] = fetch_addr_bf[31:1];
-	rvdffpcie #(.WIDTH(31)) faddrf1_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(fetch_bf_en),
-		.din(fetch_addr_bf[31:1]),
-		.dout(ifc_fetch_addr_f[31:1])
-	);
-	generate
-		if (pt[927-:5]) begin
-			wire iccm_acc_in_region_bf;
-			wire iccm_acc_in_range_bf;
-			rvrangecheck #(
-				.CCM_SADR(pt[887-:36]),
-				.CCM_SIZE(pt[851-:14])
-			) iccm_rangecheck(
-				.addr({ifc_fetch_addr_bf[31:1], 1'b0}),
-				.in_range(iccm_acc_in_range_bf),
-				.in_region(iccm_acc_in_region_bf)
-			);
-			assign ifc_iccm_access_bf = iccm_acc_in_range_bf;
-			assign ifc_dma_access_ok = ((((~ifc_iccm_access_bf | (fb_full_f & ~(ifu_fb_consume2 | ifu_fb_consume1))) | (wfm & ~ifc_fetch_req_bf)) | idle) & ~exu_flush_final) | dma_iccm_stall_any_f;
-			assign ifc_region_acc_fault_bf = ~iccm_acc_in_range_bf & iccm_acc_in_region_bf;
-		end
-		else begin
-			assign ifc_iccm_access_bf = 1'b0;
-			assign ifc_dma_access_ok = 1'b0;
-			assign ifc_region_acc_fault_bf = 1'b0;
-		end
-	endgenerate
-	assign ifc_fetch_uncacheable_bf = ~dec_tlu_mrac_ff[{ifc_fetch_addr_bf[31:28], 1'b0}];
-endmodule
-module eb1_ifu_mem_ctl (
-	clk,
-	active_clk,
-	free_l2clk,
-	rst_l,
-	exu_flush_final,
-	dec_tlu_flush_lower_wb,
-	dec_tlu_flush_err_wb,
-	dec_tlu_i0_commit_cmt,
-	dec_tlu_force_halt,
-	ifc_fetch_addr_bf,
-	ifc_fetch_uncacheable_bf,
-	ifc_fetch_req_bf,
-	ifc_fetch_req_bf_raw,
-	ifc_iccm_access_bf,
-	ifc_region_acc_fault_bf,
-	ifc_dma_access_ok,
-	dec_tlu_fence_i_wb,
-	ifu_bp_hit_taken_f,
-	ifu_bp_inst_mask_f,
-	ifu_miss_state_idle,
-	ifu_ic_mb_empty,
-	ic_dma_active,
-	ic_write_stall,
-	ifu_pmu_ic_miss,
-	ifu_pmu_ic_hit,
-	ifu_pmu_bus_error,
-	ifu_pmu_bus_busy,
-	ifu_pmu_bus_trxn,
-	ifu_axi_awvalid,
-	ifu_axi_awid,
-	ifu_axi_awaddr,
-	ifu_axi_awregion,
-	ifu_axi_awlen,
-	ifu_axi_awsize,
-	ifu_axi_awburst,
-	ifu_axi_awlock,
-	ifu_axi_awcache,
-	ifu_axi_awprot,
-	ifu_axi_awqos,
-	ifu_axi_wvalid,
-	ifu_axi_wdata,
-	ifu_axi_wstrb,
-	ifu_axi_wlast,
-	ifu_axi_bready,
-	ifu_axi_arvalid,
-	ifu_axi_arready,
-	ifu_axi_arid,
-	ifu_axi_araddr,
-	ifu_axi_arregion,
-	ifu_axi_arlen,
-	ifu_axi_arsize,
-	ifu_axi_arburst,
-	ifu_axi_arlock,
-	ifu_axi_arcache,
-	ifu_axi_arprot,
-	ifu_axi_arqos,
-	ifu_axi_rvalid,
-	ifu_axi_rready,
-	ifu_axi_rid,
-	ifu_axi_rdata,
-	ifu_axi_rresp,
-	ifu_bus_clk_en,
-	dma_iccm_req,
-	dma_mem_addr,
-	dma_mem_sz,
-	dma_mem_write,
-	dma_mem_wdata,
-	dma_mem_tag,
-	iccm_dma_ecc_error,
-	iccm_dma_rvalid,
-	iccm_dma_rdata,
-	iccm_dma_rtag,
-	iccm_ready,
-	ic_rw_addr,
-	ic_wr_en,
-	ic_rd_en,
-	ic_wr_data,
-	ic_rd_data,
-	ic_debug_rd_data,
-	ictag_debug_rd_data,
-	ic_debug_wr_data,
-	ifu_ic_debug_rd_data,
-	ic_eccerr,
-	ic_parerr,
-	ic_debug_addr,
-	ic_debug_rd_en,
-	ic_debug_wr_en,
-	ic_debug_tag_array,
-	ic_debug_way,
-	ic_tag_valid,
-	ic_rd_hit,
-	ic_tag_perr,
-	iccm_rw_addr,
-	iccm_wren,
-	iccm_rden,
-	iccm_wr_data,
-	iccm_wr_size,
-	iccm_rd_data,
-	iccm_rd_data_ecc,
-	ifu_fetch_val,
-	ic_hit_f,
-	ic_access_fault_f,
-	ic_access_fault_type_f,
-	iccm_rd_ecc_single_err,
-	iccm_rd_ecc_double_err,
-	ic_error_start,
-	ifu_async_error_start,
-	iccm_dma_sb_error,
-	ic_fetch_val_f,
-	ic_data_f,
-	ic_premux_data,
-	ic_sel_premux_data,
-	dec_tlu_ic_diag_pkt,
-	dec_tlu_core_ecc_disable,
-	ifu_ic_debug_rd_data_valid,
-	iccm_buf_correct_ecc,
-	iccm_correction_state,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire active_clk;
-	input wire free_l2clk;
-	input wire rst_l;
-	input wire exu_flush_final;
-	input wire dec_tlu_flush_lower_wb;
-	input wire dec_tlu_flush_err_wb;
-	input wire dec_tlu_i0_commit_cmt;
-	input wire dec_tlu_force_halt;
-	input wire [31:1] ifc_fetch_addr_bf;
-	input wire ifc_fetch_uncacheable_bf;
-	input wire ifc_fetch_req_bf;
-	input wire ifc_fetch_req_bf_raw;
-	input wire ifc_iccm_access_bf;
-	input wire ifc_region_acc_fault_bf;
-	input wire ifc_dma_access_ok;
-	input wire dec_tlu_fence_i_wb;
-	input wire ifu_bp_hit_taken_f;
-	input wire ifu_bp_inst_mask_f;
-	output wire ifu_miss_state_idle;
-	output wire ifu_ic_mb_empty;
-	output wire ic_dma_active;
-	output wire ic_write_stall;
-	output wire ifu_pmu_ic_miss;
-	output wire ifu_pmu_ic_hit;
-	output wire ifu_pmu_bus_error;
-	output wire ifu_pmu_bus_busy;
-	output wire ifu_pmu_bus_trxn;
-	output wire ifu_axi_awvalid;
-	output wire [pt[826-:8] - 1:0] ifu_axi_awid;
-	output wire [31:0] ifu_axi_awaddr;
-	output wire [3:0] ifu_axi_awregion;
-	output wire [7:0] ifu_axi_awlen;
-	output wire [2:0] ifu_axi_awsize;
-	output wire [1:0] ifu_axi_awburst;
-	output wire ifu_axi_awlock;
-	output wire [3:0] ifu_axi_awcache;
-	output wire [2:0] ifu_axi_awprot;
-	output wire [3:0] ifu_axi_awqos;
-	output wire ifu_axi_wvalid;
-	output wire [63:0] ifu_axi_wdata;
-	output wire [7:0] ifu_axi_wstrb;
-	output wire ifu_axi_wlast;
-	output wire ifu_axi_bready;
-	output wire ifu_axi_arvalid;
-	input wire ifu_axi_arready;
-	output wire [pt[826-:8] - 1:0] ifu_axi_arid;
-	output wire [31:0] ifu_axi_araddr;
-	output wire [3:0] ifu_axi_arregion;
-	output wire [7:0] ifu_axi_arlen;
-	output wire [2:0] ifu_axi_arsize;
-	output wire [1:0] ifu_axi_arburst;
-	output wire ifu_axi_arlock;
-	output wire [3:0] ifu_axi_arcache;
-	output wire [2:0] ifu_axi_arprot;
-	output wire [3:0] ifu_axi_arqos;
-	input wire ifu_axi_rvalid;
-	output wire ifu_axi_rready;
-	input wire [pt[826-:8] - 1:0] ifu_axi_rid;
-	input wire [63:0] ifu_axi_rdata;
-	input wire [1:0] ifu_axi_rresp;
-	input wire ifu_bus_clk_en;
-	input wire dma_iccm_req;
-	input wire [31:0] dma_mem_addr;
-	input wire [2:0] dma_mem_sz;
-	input wire dma_mem_write;
-	input wire [63:0] dma_mem_wdata;
-	input wire [2:0] dma_mem_tag;
-	output wire iccm_dma_ecc_error;
-	output wire iccm_dma_rvalid;
-	output wire [63:0] iccm_dma_rdata;
-	output wire [2:0] iccm_dma_rtag;
-	output wire iccm_ready;
-	output wire [31:1] ic_rw_addr;
-	output wire [pt[1060-:7] - 1:0] ic_wr_en;
-	output wire ic_rd_en;
-	output wire [(pt[1189-:7] * 71) - 1:0] ic_wr_data;
-	input wire [63:0] ic_rd_data;
-	input wire [70:0] ic_debug_rd_data;
-	input wire [25:0] ictag_debug_rd_data;
-	output wire [70:0] ic_debug_wr_data;
-	output wire [70:0] ifu_ic_debug_rd_data;
-	input wire [pt[1189-:7] - 1:0] ic_eccerr;
-	input wire [pt[1189-:7] - 1:0] ic_parerr;
-	output wire [pt[1104-:9]:3] ic_debug_addr;
-	output wire ic_debug_rd_en;
-	output wire ic_debug_wr_en;
-	output wire ic_debug_tag_array;
-	output wire [pt[1060-:7] - 1:0] ic_debug_way;
-	output wire [pt[1060-:7] - 1:0] ic_tag_valid;
-	input wire [pt[1060-:7] - 1:0] ic_rd_hit;
-	input wire ic_tag_perr;
-	output wire [pt[936-:9] - 1:1] iccm_rw_addr;
-	output wire iccm_wren;
-	output wire iccm_rden;
-	output wire [77:0] iccm_wr_data;
-	output wire [2:0] iccm_wr_size;
-	input wire [63:0] iccm_rd_data;
-	input wire [77:0] iccm_rd_data_ecc;
-	input wire [1:0] ifu_fetch_val;
-	output wire ic_hit_f;
-	output wire [1:0] ic_access_fault_f;
-	output wire [1:0] ic_access_fault_type_f;
-	output wire iccm_rd_ecc_single_err;
-	output wire [1:0] iccm_rd_ecc_double_err;
-	output wire ic_error_start;
-	output wire ifu_async_error_start;
-	output wire iccm_dma_sb_error;
-	output wire [1:0] ic_fetch_val_f;
-	output wire [31:0] ic_data_f;
-	output wire [63:0] ic_premux_data;
-	output wire ic_sel_premux_data;
-	input wire [89:0] dec_tlu_ic_diag_pkt;
-	input wire dec_tlu_core_ecc_disable;
-	output wire ifu_ic_debug_rd_data_valid;
-	output wire iccm_buf_correct_ecc;
-	output reg iccm_correction_state;
-	input wire scan_mode;
-	localparam NUM_OF_BEATS = 8;
-	wire [31:3] ifu_ic_req_addr_f;
-	wire uncacheable_miss_in;
-	wire uncacheable_miss_ff;
-	wire bus_ifu_wr_en;
-	wire bus_ifu_wr_en_ff;
-	wire bus_ifu_wr_en_ff_q;
-	wire bus_ifu_wr_en_ff_wo_err;
-	wire [pt[1060-:7] - 1:0] bus_ic_wr_en;
-	wire reset_tag_valid_for_miss;
-	reg [pt[1027-:7] - 1:0] way_status;
-	wire [pt[1027-:7] - 1:0] way_status_mb_in;
-	wire [pt[1027-:7] - 1:0] way_status_rep_new;
-	wire [pt[1027-:7] - 1:0] way_status_mb_ff;
-	wire [pt[1027-:7] - 1:0] way_status_new;
-	wire [pt[1027-:7] - 1:0] way_status_hit_new;
-	wire [pt[1027-:7] - 1:0] way_status_new_w_debug;
-	wire [pt[1060-:7] - 1:0] tagv_mb_in;
-	wire [pt[1060-:7] - 1:0] tagv_mb_ff;
-	wire ifu_wr_data_comb_err;
-	wire ifu_byp_data_err_new;
-	wire [1:0] ifu_byp_data_err_f;
-	wire ifu_wr_cumulative_err_data;
-	wire ifu_wr_cumulative_err;
-	wire ifu_wr_data_comb_err_ff;
-	wire scnd_miss_index_match;
-	wire ifc_dma_access_q_ok;
-	wire ifc_iccm_access_f;
-	wire ifc_region_acc_fault_f;
-	wire ifc_region_acc_fault_final_f;
-	wire [1:0] ifc_bus_acc_fault_f;
-	wire ic_act_miss_f;
-	wire ic_miss_under_miss_f;
-	wire ic_ignore_2nd_miss_f;
-	wire ic_act_hit_f;
-	wire miss_pending;
-	wire [31:1] imb_in;
-	wire [31:1] imb_ff;
-	wire [31:pt[1182-:8] + 1] miss_addr_in;
-	wire [31:pt[1182-:8] + 1] miss_addr;
-	wire miss_wrap_f;
-	wire flush_final_f;
-	wire ifc_fetch_req_f;
-	wire ifc_fetch_req_f_raw;
-	wire fetch_req_f_qual;
-	wire ifc_fetch_req_qual_bf;
-	wire [pt[1060-:7] - 1:0] replace_way_mb_any;
-	wire last_beat;
-	wire reset_beat_cnt;
-	wire [pt[1182-:8]:3] ic_req_addr_bits_hi_3;
-	wire [pt[1182-:8]:3] ic_wr_addr_bits_hi_3;
-	wire [31:1] ifu_fetch_addr_int_f;
-	wire [31:1] ifu_ic_rw_int_addr;
-	wire crit_wd_byp_ok_ff;
-	wire ic_crit_wd_rdy_new_ff;
-	wire [79:0] ic_byp_data_only_pre_new;
-	wire [79:0] ic_byp_data_only_new;
-	wire ic_byp_hit_f;
-	wire ic_valid;
-	wire ic_valid_ff;
-	wire reset_all_tags;
-	wire ic_valid_w_debug;
-	wire [pt[1060-:7] - 1:0] ifu_tag_wren;
-	wire [pt[1060-:7] - 1:0] ifu_tag_wren_ff;
-	wire [pt[1060-:7] - 1:0] ic_debug_tag_wr_en;
-	wire [pt[1060-:7] - 1:0] ifu_tag_wren_w_debug;
-	wire [pt[1060-:7] - 1:0] ic_debug_way_ff;
-	wire ic_debug_rd_en_ff;
-	wire fetch_bf_f_c1_clken;
-	wire fetch_bf_f_c1_clk;
-	wire debug_c1_clken;
-	wire debug_c1_clk;
-	wire reset_ic_in;
-	wire reset_ic_ff;
-	wire [pt[1182-:8]:1] vaddr_f;
-	wire [31:1] ifu_status_wr_addr;
-	wire sel_mb_addr;
-	wire sel_mb_addr_ff;
-	wire sel_mb_status_addr;
-	wire [63:0] ic_final_data;
-	wire [pt[1104-:9]:pt[998-:7]] ifu_ic_rw_int_addr_ff;
-	wire [pt[1104-:9]:pt[998-:7]] ifu_status_wr_addr_ff;
-	wire [pt[1104-:9]:pt[998-:7]] ifu_ic_rw_int_addr_w_debug;
-	wire [pt[1104-:9]:pt[998-:7]] ifu_status_wr_addr_w_debug;
-	wire [pt[1027-:7] - 1:0] way_status_new_ff;
-	wire way_status_wr_en_ff;
-	wire [(pt[1015-:17] * pt[1027-:7]) - 1:0] way_status_out;
-	wire [1:0] ic_debug_way_enc;
-	wire [pt[826-:8] - 1:0] ifu_bus_rid_ff;
-	wire fetch_req_icache_f;
-	wire fetch_req_iccm_f;
-	wire ic_iccm_hit_f;
-	wire fetch_uncacheable_ff;
-	wire way_status_wr_en;
-	wire sel_byp_data;
-	wire sel_ic_data;
-	wire sel_iccm_data;
-	wire ic_rd_parity_final_err;
-	wire ic_act_miss_f_delayed;
-	wire bus_ifu_wr_data_error;
-	wire bus_ifu_wr_data_error_ff;
-	wire way_status_wr_en_w_debug;
-	wire ic_debug_tag_val_rd_out;
-	wire ifu_pmu_ic_miss_in;
-	wire ifu_pmu_ic_hit_in;
-	wire ifu_pmu_bus_error_in;
-	wire ifu_pmu_bus_trxn_in;
-	wire ifu_pmu_bus_busy_in;
-	wire ic_debug_ict_array_sel_in;
-	wire ic_debug_ict_array_sel_ff;
-	wire debug_data_clken;
-	wire last_data_recieved_in;
-	wire last_data_recieved_ff;
-	wire ifu_bus_rvalid;
-	wire ifu_bus_rvalid_ff;
-	wire ifu_bus_rvalid_unq_ff;
-	wire ifu_bus_arready_unq;
-	wire ifu_bus_arready_unq_ff;
-	wire ifu_bus_arvalid;
-	wire ifu_bus_arvalid_ff;
-	wire ifu_bus_arready;
-	wire ifu_bus_arready_ff;
-	wire [63:0] ifu_bus_rdata_ff;
-	wire [1:0] ifu_bus_rresp_ff;
-	wire ifu_bus_rsp_valid;
-	wire ifu_bus_rsp_ready;
-	wire [pt[826-:8] - 1:0] ifu_bus_rsp_tag;
-	wire [63:0] ifu_bus_rsp_rdata;
-	wire [1:0] ifu_bus_rsp_opc;
-	wire [pt[1084-:8] - 1:0] write_fill_data;
-	wire [pt[1084-:8] - 1:0] wr_data_c1_clk;
-	wire [pt[1084-:8] - 1:0] ic_miss_buff_data_valid_in;
-	wire [pt[1084-:8] - 1:0] ic_miss_buff_data_valid;
-	wire [pt[1084-:8] - 1:0] ic_miss_buff_data_error_in;
-	wire [pt[1084-:8] - 1:0] ic_miss_buff_data_error;
-	wire [pt[1182-:8]:1] byp_fetch_index;
-	wire [pt[1182-:8]:2] byp_fetch_index_0;
-	wire [pt[1182-:8]:2] byp_fetch_index_1;
-	wire [pt[1182-:8]:3] byp_fetch_index_inc;
-	wire [pt[1182-:8]:2] byp_fetch_index_inc_0;
-	wire [pt[1182-:8]:2] byp_fetch_index_inc_1;
-	wire miss_buff_hit_unq_f;
-	wire stream_hit_f;
-	wire stream_miss_f;
-	wire stream_eol_f;
-	wire crit_byp_hit_f;
-	wire [pt[826-:8] - 1:0] other_tag;
-	wire [((2 * pt[1084-:8]) * 32) - 1:0] ic_miss_buff_data;
-	wire [63:0] ic_miss_buff_half;
-	wire scnd_miss_req;
-	wire scnd_miss_req_q;
-	wire scnd_miss_req_in;
-	wire [pt[936-:9] - 1:2] iccm_ecc_corr_index_ff;
-	wire [pt[936-:9] - 1:2] iccm_ecc_corr_index_in;
-	wire [38:0] iccm_ecc_corr_data_ff;
-	wire iccm_ecc_write_status;
-	wire iccm_rd_ecc_single_err_ff;
-	wire iccm_error_start;
-	reg perr_state_en;
-	reg miss_state_en;
-	wire busclk;
-	wire busclk_force;
-	wire busclk_reset;
-	wire bus_ifu_bus_clk_en_ff;
-	wire bus_ifu_bus_clk_en;
-	wire ifc_bus_ic_req_ff_in;
-	wire ifu_bus_cmd_valid;
-	wire ifu_bus_cmd_ready;
-	wire bus_inc_data_beat_cnt;
-	wire bus_reset_data_beat_cnt;
-	wire bus_hold_data_beat_cnt;
-	wire bus_inc_cmd_beat_cnt;
-	wire bus_reset_cmd_beat_cnt_0;
-	wire bus_reset_cmd_beat_cnt_secondlast;
-	wire bus_hold_cmd_beat_cnt;
-	wire [pt[1174-:8] - 1:0] bus_new_data_beat_count;
-	wire [pt[1174-:8] - 1:0] bus_data_beat_count;
-	wire [pt[1174-:8] - 1:0] bus_new_cmd_beat_count;
-	wire [pt[1174-:8] - 1:0] bus_cmd_beat_count;
-	wire [pt[1174-:8] - 1:0] bus_new_rd_addr_count;
-	wire [pt[1174-:8] - 1:0] bus_rd_addr_count;
-	wire bus_cmd_sent;
-	wire bus_last_data_beat;
-	wire [pt[1060-:7] - 1:0] bus_wren;
-	wire [pt[1060-:7] - 1:0] bus_wren_last;
-	wire [pt[1060-:7] - 1:0] wren_reset_miss;
-	wire ifc_dma_access_ok_d;
-	wire ifc_dma_access_ok_prev;
-	wire bus_cmd_req_in;
-	wire bus_cmd_req_hold;
-	wire second_half_available;
-	wire write_ic_16_bytes;
-	wire ifc_region_acc_fault_final_bf;
-	wire ifc_region_acc_fault_memory_bf;
-	wire ifc_region_acc_fault_memory_f;
-	wire ifc_region_acc_okay;
-	wire iccm_correct_ecc;
-	wire dma_sb_err_state;
-	wire dma_sb_err_state_ff;
-	wire two_byte_instr;
-	wire [2:0] miss_state;
-	reg [2:0] miss_nxtstate;
-	wire [1:0] err_stop_state;
-	reg [1:0] err_stop_nxtstate;
-	reg err_stop_state_en;
-	reg err_stop_fetch;
-	wire ic_crit_wd_rdy;
-	wire ifu_bp_hit_taken_q_f;
-	wire ifu_bus_rvalid_unq;
-	wire bus_cmd_beat_en;
-	assign fetch_bf_f_c1_clken = (((ifc_fetch_req_bf_raw | ifc_fetch_req_f) | miss_pending) | exu_flush_final) | scnd_miss_req;
-	assign debug_c1_clken = ic_debug_rd_en | ic_debug_wr_en;
-	rvclkhdr fetch_bf_f_c1_cgc(
-		.en(fetch_bf_f_c1_clken),
-		.l1clk(fetch_bf_f_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr debug_c1_cgc(
-		.en(debug_c1_clken),
-		.l1clk(debug_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	wire [1:0] iccm_single_ecc_error;
-	wire dma_iccm_req_f;
-	assign iccm_dma_sb_error = |iccm_single_ecc_error[1:0] & dma_iccm_req_f;
-	assign ifu_async_error_start = iccm_rd_ecc_single_err | ic_error_start;
-	wire [2:0] perr_state;
-	reg [2:0] perr_nxtstate;
-	localparam [2:0] DMA_SB_ERR = 3'b100;
-	localparam [1:0] ERR_STOP_FETCH = 2'b11;
-	assign ic_dma_active = (((iccm_correct_ecc | (perr_state == DMA_SB_ERR)) | (err_stop_state == ERR_STOP_FETCH)) | err_stop_fetch) | dec_tlu_flush_err_wb;
-	localparam [2:0] SCND_MISS = 3'b101;
-	assign scnd_miss_req_in = (((((ifu_bus_rsp_valid & bus_ifu_bus_clk_en) & ifu_bus_rsp_ready) & &bus_new_data_beat_count[pt[1174-:8] - 1:0]) & ~uncacheable_miss_ff) & ((miss_state == SCND_MISS) | (miss_nxtstate == SCND_MISS))) & ~exu_flush_final;
-	assign ifu_bp_hit_taken_q_f = ifu_bp_hit_taken_f & ic_hit_f;
-	localparam [2:0] CRIT_BYP_OK = 3'b001;
-	localparam [2:0] CRIT_WRD_RDY = 3'b100;
-	localparam [2:0] HIT_U_MISS = 3'b010;
-	localparam [2:0] IDLE = 3'b000;
-	localparam [2:0] MISS_WAIT = 3'b011;
-	localparam [2:0] STALL_SCND_MISS = 3'b111;
-	localparam [2:0] STREAM = 3'b110;
-	always @(*) begin : MISS_SM
-		miss_nxtstate = IDLE;
-		miss_state_en = 1'b0;
-		case (miss_state)
-			IDLE: begin : idle
-				miss_nxtstate = (ic_act_miss_f & ~exu_flush_final ? CRIT_BYP_OK : HIT_U_MISS);
-				miss_state_en = ic_act_miss_f & ~dec_tlu_force_halt;
-			end
-			CRIT_BYP_OK: begin : crit_byp_ok
-				miss_nxtstate = (dec_tlu_force_halt ? IDLE : ((ic_byp_hit_f & (last_data_recieved_ff | (bus_ifu_wr_en_ff & last_beat))) & uncacheable_miss_ff ? IDLE : ((ic_byp_hit_f & ~last_data_recieved_ff) & uncacheable_miss_ff ? MISS_WAIT : (((~ic_byp_hit_f & ~exu_flush_final) & (bus_ifu_wr_en_ff & last_beat)) & uncacheable_miss_ff ? CRIT_WRD_RDY : ((bus_ifu_wr_en_ff & last_beat) & ~uncacheable_miss_ff ? IDLE : ((((ic_byp_hit_f & ~exu_flush_final) & ~(bus_ifu_wr_en_ff & last_beat)) & ~ifu_bp_hit_taken_q_f) & ~uncacheable_miss_ff ? STREAM : ((((bus_ifu_wr_en_ff & ~exu_flush_final) & ~(bus_ifu_wr_en_ff & last_beat)) & ~ifu_bp_hit_taken_q_f) & ~uncacheable_miss_ff ? STREAM : (((~ic_byp_hit_f & ~exu_flush_final) & (bus_ifu_wr_en_ff & last_beat)) & ~uncacheable_miss_ff ? IDLE : ((exu_flush_final | ifu_bp_hit_taken_q_f) & ~(bus_ifu_wr_en_ff & last_beat) ? HIT_U_MISS : IDLE)))))))));
-				miss_state_en = ((((dec_tlu_force_halt | exu_flush_final) | ic_byp_hit_f) | ifu_bp_hit_taken_q_f) | (bus_ifu_wr_en_ff & last_beat)) | (bus_ifu_wr_en_ff & ~uncacheable_miss_ff);
-			end
-			CRIT_WRD_RDY: begin : crit_wrd_rdy
-				miss_nxtstate = IDLE;
-				miss_state_en = ((exu_flush_final | flush_final_f) | ic_byp_hit_f) | dec_tlu_force_halt;
-			end
-			STREAM: begin : stream
-				miss_nxtstate = ((((exu_flush_final | ifu_bp_hit_taken_q_f) | stream_eol_f) & ~(bus_ifu_wr_en_ff & last_beat)) & ~dec_tlu_force_halt ? HIT_U_MISS : IDLE);
-				miss_state_en = (((exu_flush_final | ifu_bp_hit_taken_q_f) | stream_eol_f) | (bus_ifu_wr_en_ff & last_beat)) | dec_tlu_force_halt;
-			end
-			MISS_WAIT: begin : miss_wait
-				miss_nxtstate = ((exu_flush_final & ~(bus_ifu_wr_en_ff & last_beat)) & ~dec_tlu_force_halt ? HIT_U_MISS : IDLE);
-				miss_state_en = (exu_flush_final | (bus_ifu_wr_en_ff & last_beat)) | dec_tlu_force_halt;
-			end
-			HIT_U_MISS: begin : hit_u_miss
-				miss_nxtstate = ((ic_miss_under_miss_f & ~(bus_ifu_wr_en_ff & last_beat)) & ~dec_tlu_force_halt ? SCND_MISS : ((ic_ignore_2nd_miss_f & ~(bus_ifu_wr_en_ff & last_beat)) & ~dec_tlu_force_halt ? STALL_SCND_MISS : IDLE));
-				miss_state_en = (((bus_ifu_wr_en_ff & last_beat) | ic_miss_under_miss_f) | ic_ignore_2nd_miss_f) | dec_tlu_force_halt;
-			end
-			SCND_MISS: begin : scnd_miss
-				miss_nxtstate = (dec_tlu_force_halt ? IDLE : (exu_flush_final ? (bus_ifu_wr_en_ff & last_beat ? IDLE : HIT_U_MISS) : CRIT_BYP_OK));
-				miss_state_en = ((bus_ifu_wr_en_ff & last_beat) | exu_flush_final) | dec_tlu_force_halt;
-			end
-			STALL_SCND_MISS: begin : stall_scnd_miss
-				miss_nxtstate = (dec_tlu_force_halt ? IDLE : (exu_flush_final ? (bus_ifu_wr_en_ff & last_beat ? IDLE : HIT_U_MISS) : IDLE));
-				miss_state_en = ((bus_ifu_wr_en_ff & last_beat) | exu_flush_final) | dec_tlu_force_halt;
-			end
-			default: begin : def_case
-				miss_nxtstate = IDLE;
-				miss_state_en = 1'b0;
-			end
-		endcase
-	end
-	rvdffs #(.WIDTH(3)) miss_state_ff(
-		.clk(active_clk),
-		.din(miss_nxtstate),
-		.dout({miss_state}),
-		.en(miss_state_en),
-		.rst_l(rst_l)
-	);
-	wire sel_hold_imb;
-	assign miss_pending = miss_state != IDLE;
-	assign crit_wd_byp_ok_ff = (miss_state == CRIT_BYP_OK) | ((miss_state == CRIT_WRD_RDY) & ~flush_final_f);
-	assign sel_hold_imb = ((((miss_pending & ~(bus_ifu_wr_en_ff & last_beat)) & ~((miss_state == CRIT_WRD_RDY) & exu_flush_final)) & ~((miss_state == CRIT_WRD_RDY) & crit_byp_hit_f)) | ic_act_miss_f) | (miss_pending & (miss_nxtstate == CRIT_WRD_RDY));
-	wire sel_hold_imb_scnd;
-	wire [31:1] imb_scnd_in;
-	wire [31:1] imb_scnd_ff;
-	wire uncacheable_miss_scnd_in;
-	wire uncacheable_miss_scnd_ff;
-	wire [pt[1060-:7] - 1:0] tagv_mb_scnd_in;
-	wire [pt[1060-:7] - 1:0] tagv_mb_scnd_ff;
-	wire [pt[1027-:7] - 1:0] way_status_mb_scnd_in;
-	wire [pt[1027-:7] - 1:0] way_status_mb_scnd_ff;
-	assign sel_hold_imb_scnd = ((miss_state == SCND_MISS) | ic_miss_under_miss_f) & ~flush_final_f;
-	assign way_status_mb_scnd_in[pt[1027-:7] - 1:0] = (miss_state == SCND_MISS ? way_status_mb_scnd_ff[pt[1027-:7] - 1:0] : {way_status[pt[1027-:7] - 1:0]});
-	assign tagv_mb_scnd_in[pt[1060-:7] - 1:0] = (miss_state == SCND_MISS ? tagv_mb_scnd_ff[pt[1060-:7] - 1:0] : {ic_tag_valid[pt[1060-:7] - 1:0]} & {pt[1060-:7] {~reset_all_tags & ~exu_flush_final}});
-	assign uncacheable_miss_scnd_in = (sel_hold_imb_scnd ? uncacheable_miss_scnd_ff : ifc_fetch_uncacheable_bf);
-	rvdff_fpga #(.WIDTH(1)) unc_miss_scnd_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din(uncacheable_miss_scnd_in),
-		.dout(uncacheable_miss_scnd_ff)
-	);
-	rvdffpcie #(.WIDTH(31)) imb_f_scnd_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(fetch_bf_f_c1_clken),
-		.din({imb_scnd_in[31:1]}),
-		.dout({imb_scnd_ff[31:1]})
-	);
-	rvdff_fpga #(.WIDTH(pt[1027-:7])) mb_rep_wayf2_scnd_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din({way_status_mb_scnd_in[pt[1027-:7] - 1:0]}),
-		.dout({way_status_mb_scnd_ff[pt[1027-:7] - 1:0]})
-	);
-	rvdff_fpga #(.WIDTH(pt[1060-:7])) mb_tagv_scnd_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din({tagv_mb_scnd_in[pt[1060-:7] - 1:0]}),
-		.dout({tagv_mb_scnd_ff[pt[1060-:7] - 1:0]})
-	);
-	assign ic_req_addr_bits_hi_3[pt[1182-:8]:3] = bus_rd_addr_count[pt[1174-:8] - 1:0];
-	assign ic_wr_addr_bits_hi_3[pt[1182-:8]:3] = ifu_bus_rid_ff[pt[1174-:8] - 1:0] & {pt[1174-:8] {bus_ifu_wr_en_ff}};
-	assign fetch_req_icache_f = (ifc_fetch_req_f & ~ifc_iccm_access_f) & ~ifc_region_acc_fault_final_f;
-	assign fetch_req_iccm_f = ifc_fetch_req_f & ifc_iccm_access_f;
-	assign ic_iccm_hit_f = fetch_req_iccm_f & ((~miss_pending | (miss_state == HIT_U_MISS)) | (miss_state == STREAM));
-	assign ic_byp_hit_f = ((crit_byp_hit_f | stream_hit_f) & fetch_req_icache_f) & miss_pending;
-	assign ic_act_hit_f = (((|ic_rd_hit[pt[1060-:7] - 1:0] & fetch_req_icache_f) & ~reset_all_tags) & (~miss_pending | (miss_state == HIT_U_MISS))) & ~sel_mb_addr_ff;
-	assign ic_act_miss_f = ((((~(|ic_rd_hit[pt[1060-:7] - 1:0]) | reset_all_tags) & fetch_req_icache_f) & ~miss_pending) | scnd_miss_req) & ~ifc_region_acc_fault_final_f;
-	assign ic_miss_under_miss_f = ((((((~(|ic_rd_hit[pt[1060-:7] - 1:0]) | reset_all_tags) & fetch_req_icache_f) & (miss_state == HIT_U_MISS)) & (imb_ff[31:pt[998-:7]] != ifu_fetch_addr_int_f[31:pt[998-:7]])) & ~uncacheable_miss_ff) & ~sel_mb_addr_ff) & ~ifc_region_acc_fault_final_f;
-	assign ic_ignore_2nd_miss_f = (((~(|ic_rd_hit[pt[1060-:7] - 1:0]) | reset_all_tags) & fetch_req_icache_f) & (miss_state == HIT_U_MISS)) & ((imb_ff[31:pt[998-:7]] == ifu_fetch_addr_int_f[31:pt[998-:7]]) | uncacheable_miss_ff);
-	assign ic_hit_f = ((ic_act_hit_f | ic_byp_hit_f) | ic_iccm_hit_f) | (ifc_region_acc_fault_final_f & ifc_fetch_req_f);
-	assign uncacheable_miss_in = (scnd_miss_req ? uncacheable_miss_scnd_ff : (sel_hold_imb ? uncacheable_miss_ff : ifc_fetch_uncacheable_bf));
-	assign imb_in[31:1] = (scnd_miss_req ? imb_scnd_ff[31:1] : (sel_hold_imb ? imb_ff[31:1] : {ifc_fetch_addr_bf[31:1]}));
-	assign imb_scnd_in[31:1] = (sel_hold_imb_scnd ? imb_scnd_ff[31:1] : {ifc_fetch_addr_bf[31:1]});
-	assign scnd_miss_index_match = ((imb_ff[pt[1104-:9]:pt[998-:7]] == imb_scnd_ff[pt[1104-:9]:pt[998-:7]]) & scnd_miss_req) & ~ifu_wr_cumulative_err_data;
-	assign way_status_mb_in[pt[1027-:7] - 1:0] = (scnd_miss_req & ~scnd_miss_index_match ? way_status_mb_scnd_ff[pt[1027-:7] - 1:0] : (scnd_miss_req & scnd_miss_index_match ? way_status_rep_new[pt[1027-:7] - 1:0] : (miss_pending ? way_status_mb_ff[pt[1027-:7] - 1:0] : {way_status[pt[1027-:7] - 1:0]})));
-	assign tagv_mb_in[pt[1060-:7] - 1:0] = (scnd_miss_req ? tagv_mb_scnd_ff[pt[1060-:7] - 1:0] | ({pt[1060-:7] {scnd_miss_index_match}} & replace_way_mb_any[pt[1060-:7] - 1:0]) : (miss_pending ? tagv_mb_ff[pt[1060-:7] - 1:0] : {ic_tag_valid[pt[1060-:7] - 1:0]} & {pt[1060-:7] {~reset_all_tags & ~exu_flush_final}}));
-	assign reset_ic_in = (miss_pending & ~scnd_miss_req_q) & (reset_all_tags | reset_ic_ff);
-	rvdffpcie #(.WIDTH(31)) ifu_fetch_addr_f_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(fetch_bf_f_c1_clken),
-		.din({ifc_fetch_addr_bf[31:1]}),
-		.dout({ifu_fetch_addr_int_f[31:1]})
-	);
-	assign vaddr_f[pt[1182-:8]:1] = ifu_fetch_addr_int_f[pt[1182-:8]:1];
-	rvdffpcie #(.WIDTH(31)) imb_f_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(fetch_bf_f_c1_clken),
-		.din(imb_in[31:1]),
-		.dout(imb_ff[31:1])
-	);
-	rvdff_fpga #(.WIDTH(1)) unc_miss_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din(uncacheable_miss_in),
-		.dout(uncacheable_miss_ff)
-	);
-	assign miss_addr_in[31:pt[1182-:8] + 1] = (~miss_pending ? imb_ff[31:pt[1182-:8] + 1] : (scnd_miss_req_q ? imb_scnd_ff[31:pt[1182-:8] + 1] : miss_addr[31:pt[1182-:8] + 1]));
-	rvdfflie #(
-		.WIDTH(31 - pt[1182-:8]),
-		.LEFT((31 - pt[1182-:8]) - 8)
-	) miss_f_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en((bus_ifu_bus_clk_en | ic_act_miss_f) | dec_tlu_force_halt),
-		.din({miss_addr_in[31:pt[1182-:8] + 1]}),
-		.dout({miss_addr[31:pt[1182-:8] + 1]})
-	);
-	rvdff_fpga #(.WIDTH(pt[1027-:7])) mb_rep_wayf2_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din({way_status_mb_in[pt[1027-:7] - 1:0]}),
-		.dout({way_status_mb_ff[pt[1027-:7] - 1:0]})
-	);
-	rvdff_fpga #(.WIDTH(pt[1060-:7])) mb_tagv_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din({tagv_mb_in[pt[1060-:7] - 1:0]}),
-		.dout({tagv_mb_ff[pt[1060-:7] - 1:0]})
-	);
-	assign ifc_fetch_req_qual_bf = (ifc_fetch_req_bf & ~((miss_state == CRIT_WRD_RDY) & flush_final_f)) & ~stream_miss_f;
-	assign ifc_fetch_req_f = ifc_fetch_req_f_raw & ~exu_flush_final;
-	rvdff_fpga #(.WIDTH(1)) ifu_iccm_acc_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din(ifc_iccm_access_bf),
-		.dout(ifc_iccm_access_f)
-	);
-	rvdff_fpga #(.WIDTH(1)) ifu_iccm_reg_acc_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din(ifc_region_acc_fault_final_bf),
-		.dout(ifc_region_acc_fault_final_f)
-	);
-	rvdff_fpga #(.WIDTH(1)) rgn_acc_ff(
-		.rst_l(rst_l),
-		.clk(fetch_bf_f_c1_clk),
-		.clken(fetch_bf_f_c1_clken),
-		.rawclk(clk),
-		.din(ifc_region_acc_fault_bf),
-		.dout(ifc_region_acc_fault_f)
-	);
-	assign ifu_ic_req_addr_f[31:3] = {miss_addr[31:pt[1182-:8] + 1], ic_req_addr_bits_hi_3[pt[1182-:8]:3]};
-	assign ifu_ic_mb_empty = (((miss_state == HIT_U_MISS) | (miss_state == STREAM)) & ~(bus_ifu_wr_en_ff & last_beat)) | ~miss_pending;
-	assign ifu_miss_state_idle = miss_state == IDLE;
-	assign sel_mb_addr = ((miss_pending & write_ic_16_bytes) & ~uncacheable_miss_ff) | reset_tag_valid_for_miss;
-	assign ifu_ic_rw_int_addr[31:1] = ({31 {sel_mb_addr}} & {imb_ff[31:pt[1182-:8] + 1], ic_wr_addr_bits_hi_3[pt[1182-:8]:3], imb_ff[2:1]}) | ({31 {~sel_mb_addr}} & ifc_fetch_addr_bf[31:1]);
-	assign sel_mb_status_addr = ((((miss_pending & write_ic_16_bytes) & ~uncacheable_miss_ff) & last_beat) & bus_ifu_wr_en_ff_q) | reset_tag_valid_for_miss;
-	assign ifu_status_wr_addr[31:1] = ({31 {sel_mb_status_addr}} & {imb_ff[31:pt[1182-:8] + 1], ic_wr_addr_bits_hi_3[pt[1182-:8]:3], imb_ff[2:1]}) | ({31 {~sel_mb_status_addr}} & ifu_fetch_addr_int_f[31:1]);
-	assign ic_rw_addr[31:1] = ifu_ic_rw_int_addr[31:1];
-	generate
-		if (pt[1125-:5] == 1) begin : icache_ecc_1
-			wire [6:0] ic_wr_ecc;
-			wire [6:0] ic_miss_buff_ecc;
-			wire [141:0] ic_wr_16bytes_data;
-			wire [70:0] ifu_ic_debug_rd_data_in;
-			rvecc_encode_64 ic_ecc_encode_64_bus(
-				.din(ifu_bus_rdata_ff[63:0]),
-				.ecc_out(ic_wr_ecc[6:0])
-			);
-			rvecc_encode_64 ic_ecc_encode_64_buff(
-				.din(ic_miss_buff_half[63:0]),
-				.ecc_out(ic_miss_buff_ecc[6:0])
-			);
-			genvar i;
-			for (i = 0; i < pt[1189-:7]; i = i + 1) begin : ic_wr_data_loop
-				assign ic_wr_data[(i * 71) + 70-:71] = ic_wr_16bytes_data[(71 * i) + 70:71 * i];
-			end
-			assign ic_debug_wr_data[70:0] = {dec_tlu_ic_diag_pkt[89:19]};
-			assign ic_error_start = (|ic_eccerr[pt[1189-:7] - 1:0] & ic_act_hit_f) | ic_rd_parity_final_err;
-			assign ifu_ic_debug_rd_data_in[70:0] = (ic_debug_ict_array_sel_ff ? {2'b00, ictag_debug_rd_data[25:21], 32'b00000000000000000000000000000000, ictag_debug_rd_data[20:0], {7 - pt[1027-:7] {1'b0}}, way_status[pt[1027-:7] - 1:0], 3'b000, ic_debug_tag_val_rd_out} : ic_debug_rd_data[70:0]);
-			rvdffe #(.WIDTH(71)) ifu_debug_data_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(debug_data_clken),
-				.din({ifu_ic_debug_rd_data_in[70:0]}),
-				.dout({ifu_ic_debug_rd_data[70:0]})
-			);
-			assign ic_wr_16bytes_data[141:0] = (ifu_bus_rid_ff[0] ? {ic_wr_ecc[6:0], ifu_bus_rdata_ff[63:0], ic_miss_buff_ecc[6:0], ic_miss_buff_half[63:0]} : {ic_miss_buff_ecc[6:0], ic_miss_buff_half[63:0], ic_wr_ecc[6:0], ifu_bus_rdata_ff[63:0]});
-		end
-		else begin : icache_parity_1
-			wire [3:0] ic_wr_parity;
-			wire [3:0] ic_miss_buff_parity;
-			wire [135:0] ic_wr_16bytes_data;
-			wire [70:0] ifu_ic_debug_rd_data_in;
-			genvar i;
-			for (i = 0; i < 4; i = i + 1) begin : DATA_PGEN
-				rveven_paritygen #(.WIDTH(16)) par_bus(
-					.data_in(ifu_bus_rdata_ff[(16 * i) + 15:16 * i]),
-					.parity_out(ic_wr_parity[i])
-				);
-				rveven_paritygen #(.WIDTH(16)) par_buff(
-					.data_in(ic_miss_buff_half[(16 * i) + 15:16 * i]),
-					.parity_out(ic_miss_buff_parity[i])
-				);
-			end
-			for (i = 0; i < pt[1189-:7]; i = i + 1) begin : ic_wr_data_loop
-				assign ic_wr_data[(i * 71) + 70-:71] = {3'b000, ic_wr_16bytes_data[(68 * i) + 67:68 * i]};
-			end
-			assign ic_debug_wr_data[70:0] = {dec_tlu_ic_diag_pkt[89:19]};
-			assign ic_error_start = (|ic_parerr[pt[1189-:7] - 1:0] & ic_act_hit_f) | ic_rd_parity_final_err;
-			assign ifu_ic_debug_rd_data_in[70:0] = (ic_debug_ict_array_sel_ff ? {6'b000000, ictag_debug_rd_data[21], 32'b00000000000000000000000000000000, ictag_debug_rd_data[20:0], {7 - pt[1027-:7] {1'b0}}, way_status[pt[1027-:7] - 1:0], 3'b000, ic_debug_tag_val_rd_out} : ic_debug_rd_data[70:0]);
-			rvdffe #(.WIDTH(71)) ifu_debug_data_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(debug_data_clken),
-				.din({ifu_ic_debug_rd_data_in[70:0]}),
-				.dout({ifu_ic_debug_rd_data[70:0]})
-			);
-			assign ic_wr_16bytes_data[135:0] = (ifu_bus_rid_ff[0] ? {ic_wr_parity[3:0], ifu_bus_rdata_ff[63:0], ic_miss_buff_parity[3:0], ic_miss_buff_half[63:0]} : {ic_miss_buff_parity[3:0], ic_miss_buff_half[63:0], ic_wr_parity[3:0], ifu_bus_rdata_ff[63:0]});
-		end
-	endgenerate
-	assign ifu_wr_data_comb_err = bus_ifu_wr_data_error_ff;
-	assign ifu_wr_cumulative_err = (ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff) & ~reset_beat_cnt;
-	assign ifu_wr_cumulative_err_data = ifu_wr_data_comb_err | ifu_wr_data_comb_err_ff;
-	assign sel_byp_data = (ic_crit_wd_rdy | (miss_state == STREAM)) | (miss_state == CRIT_BYP_OK);
-	assign sel_ic_data = (~(((ic_crit_wd_rdy | (miss_state == STREAM)) | (miss_state == CRIT_BYP_OK)) | (miss_state == MISS_WAIT)) & ~fetch_req_iccm_f) & ~ifc_region_acc_fault_final_f;
-	generate
-		if (pt[922-:5] == 1) begin : iccm_icache
-			assign sel_iccm_data = fetch_req_iccm_f;
-			assign ic_final_data[63:0] = {64 {(sel_byp_data | sel_iccm_data) | sel_ic_data}} & {ic_rd_data[63:0]};
-			assign ic_premux_data[63:0] = ({64 {sel_byp_data}} & {ic_byp_data_only_new[63:0]}) | ({64 {sel_iccm_data}} & {iccm_rd_data[63:0]});
-			assign ic_sel_premux_data = sel_iccm_data | sel_byp_data;
-		end
-	endgenerate
-	generate
-		if (pt[900-:5] == 1) begin : iccm_only
-			assign sel_iccm_data = fetch_req_iccm_f;
-			assign ic_final_data[63:0] = ({64 {sel_byp_data}} & {ic_byp_data_only_new[63:0]}) | ({64 {sel_iccm_data}} & {iccm_rd_data[63:0]});
-			assign ic_premux_data = {64 {1'sb0}};
-			assign ic_sel_premux_data = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[1053-:5] == 1) begin : icache_only
-			assign ic_final_data[63:0] = {64 {sel_byp_data | sel_ic_data}} & {ic_rd_data[63:0]};
-			assign ic_premux_data[63:0] = {64 {sel_byp_data}} & {ic_byp_data_only_new[63:0]};
-			assign ic_sel_premux_data = sel_byp_data;
-		end
-	endgenerate
-	generate
-		if (pt[140-:5] == 1) begin : no_iccm_no_icache
-			assign ic_final_data[63:0] = {64 {sel_byp_data}} & {ic_byp_data_only_new[63:0]};
-			assign ic_premux_data = 0;
-			assign ic_sel_premux_data = 1'b0;
-		end
-	endgenerate
-	assign ifc_bus_acc_fault_f[1:0] = {2 {ic_byp_hit_f}} & ifu_byp_data_err_f[1:0];
-	assign ic_data_f[31:0] = ic_final_data[31:0];
-	assign fetch_req_f_qual = ic_hit_f & ~exu_flush_final;
-	assign ic_access_fault_f[1:0] = ({2 {ifc_region_acc_fault_final_f}} | ifc_bus_acc_fault_f[1:0]) & {2 {~exu_flush_final}};
-	assign ic_access_fault_type_f[1:0] = (|iccm_rd_ecc_double_err ? 2'b01 : (ifc_region_acc_fault_f ? 2'b10 : (ifc_region_acc_fault_memory_f ? 2'b11 : 2'b00)));
-	localparam [1:0] ERR_FETCH2 = 2'b10;
-	assign ic_fetch_val_f[1] = ((fetch_req_f_qual & ifu_bp_inst_mask_f) & ~(vaddr_f[pt[1182-:8]:1] == {pt[1182-:8] {1'b1}})) & (err_stop_state != ERR_FETCH2);
-	assign ic_fetch_val_f[0] = fetch_req_f_qual;
-	assign two_byte_instr = ic_data_f[1:0] != 2'b11;
-	wire [63:0] ic_miss_buff_data_in;
-	assign ic_miss_buff_data_in[63:0] = ifu_bus_rsp_rdata[63:0];
-	generate
-		genvar i;
-		for (i = 0; i < pt[1084-:8]; i = i + 1) begin : wr_flop
-			function automatic signed [pt[826-:8] - 1:0] sv2v_cast_ADFF4_signed;
-				input reg signed [pt[826-:8] - 1:0] inp;
-				sv2v_cast_ADFF4_signed = inp;
-			endfunction
-			assign write_fill_data[i] = bus_ifu_wr_en & (sv2v_cast_ADFF4_signed(i) == ifu_bus_rsp_tag[pt[826-:8] - 1:0]);
-			rvdffe #(.WIDTH(32)) byp_data_0_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(write_fill_data[i]),
-				.din(ic_miss_buff_data_in[31:0]),
-				.dout(ic_miss_buff_data[((i * 2) * 32) + 31-:32])
-			);
-			rvdffe #(.WIDTH(32)) byp_data_1_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.en(write_fill_data[i]),
-				.din(ic_miss_buff_data_in[63:32]),
-				.dout(ic_miss_buff_data[(((i * 2) + 1) * 32) + 31-:32])
-			);
-			assign ic_miss_buff_data_valid_in[i] = (write_fill_data[i] ? 1'b1 : ic_miss_buff_data_valid[i] & ~ic_act_miss_f);
-			rvdff #(.WIDTH(1)) byp_data_valid_ff(
-				.rst_l(rst_l),
-				.clk(active_clk),
-				.din(ic_miss_buff_data_valid_in[i]),
-				.dout(ic_miss_buff_data_valid[i])
-			);
-			assign ic_miss_buff_data_error_in[i] = (write_fill_data[i] ? bus_ifu_wr_data_error : ic_miss_buff_data_error[i] & ~ic_act_miss_f);
-			rvdff #(.WIDTH(1)) byp_data_error_ff(
-				.rst_l(rst_l),
-				.clk(active_clk),
-				.din(ic_miss_buff_data_error_in[i]),
-				.dout(ic_miss_buff_data_error[i])
-			);
-		end
-	endgenerate
-	wire [pt[1182-:8]:1] bypass_index;
-	wire [pt[1182-:8]:3] bypass_index_5_3_inc;
-	wire bypass_data_ready_in;
-	wire ic_crit_wd_rdy_new_in;
-	assign bypass_index[pt[1182-:8]:1] = imb_ff[pt[1182-:8]:1];
-	assign bypass_index_5_3_inc[pt[1182-:8]:3] = bypass_index[pt[1182-:8]:3] + 1;
-	assign bypass_data_ready_in = (((((ic_miss_buff_data_valid_in[bypass_index[pt[1182-:8]:3]] & ~bypass_index[2]) & ~bypass_index[1]) | ((ic_miss_buff_data_valid_in[bypass_index[pt[1182-:8]:3]] & ~bypass_index[2]) & bypass_index[1])) | ((ic_miss_buff_data_valid_in[bypass_index[pt[1182-:8]:3]] & bypass_index[2]) & ~bypass_index[1])) | (((ic_miss_buff_data_valid_in[bypass_index[pt[1182-:8]:3]] & ic_miss_buff_data_valid_in[bypass_index_5_3_inc[pt[1182-:8]:3]]) & bypass_index[2]) & bypass_index[1])) | (ic_miss_buff_data_valid_in[bypass_index[pt[1182-:8]:3]] & (bypass_index[pt[1182-:8]:3] == {pt[1182-:8] {1'b1}}));
-	assign ic_crit_wd_rdy_new_in = (((((bypass_data_ready_in & crit_wd_byp_ok_ff) & uncacheable_miss_ff) & ~exu_flush_final) & ~ifu_bp_hit_taken_q_f) | (((crit_wd_byp_ok_ff & ~uncacheable_miss_ff) & ~exu_flush_final) & ~ifu_bp_hit_taken_q_f)) | (((ic_crit_wd_rdy_new_ff & ~fetch_req_icache_f) & crit_wd_byp_ok_ff) & ~exu_flush_final);
-	assign byp_fetch_index[pt[1182-:8]:1] = ifu_fetch_addr_int_f[pt[1182-:8]:1];
-	assign byp_fetch_index_0[pt[1182-:8]:2] = {ifu_fetch_addr_int_f[pt[1182-:8]:3], 1'b0};
-	assign byp_fetch_index_1[pt[1182-:8]:2] = {ifu_fetch_addr_int_f[pt[1182-:8]:3], 1'b1};
-	assign byp_fetch_index_inc[pt[1182-:8]:3] = ifu_fetch_addr_int_f[pt[1182-:8]:3] + 1'b1;
-	assign byp_fetch_index_inc_0[pt[1182-:8]:2] = {byp_fetch_index_inc[pt[1182-:8]:3], 1'b0};
-	assign byp_fetch_index_inc_1[pt[1182-:8]:2] = {byp_fetch_index_inc[pt[1182-:8]:3], 1'b1};
-	assign ifu_byp_data_err_new = ((((~ifu_fetch_addr_int_f[2] & ~ifu_fetch_addr_int_f[1]) & ic_miss_buff_data_error[byp_fetch_index[pt[1182-:8]:3]]) | ((~ifu_fetch_addr_int_f[2] & ifu_fetch_addr_int_f[1]) & ic_miss_buff_data_error[byp_fetch_index[pt[1182-:8]:3]])) | ((ifu_fetch_addr_int_f[2] & ~ifu_fetch_addr_int_f[1]) & ic_miss_buff_data_error[byp_fetch_index[pt[1182-:8]:3]])) | ((ifu_fetch_addr_int_f[2] & ifu_fetch_addr_int_f[1]) & (ic_miss_buff_data_error[byp_fetch_index_inc[pt[1182-:8]:3]] | ic_miss_buff_data_error[byp_fetch_index[pt[1182-:8]:3]]));
-	assign ifu_byp_data_err_f[1:0] = (ic_miss_buff_data_error[byp_fetch_index[pt[1182-:8]:3]] ? 2'b11 : (((ifu_fetch_addr_int_f[2] & ifu_fetch_addr_int_f[1]) & ~ic_miss_buff_data_error[byp_fetch_index[pt[1182-:8]:3]]) & (~miss_wrap_f & ic_miss_buff_data_error[byp_fetch_index_inc[pt[1182-:8]:3]]) ? 2'b10 : 2'b00));
-	assign ic_byp_data_only_pre_new[79:0] = ({80 {~ifu_fetch_addr_int_f[2]}} & {ic_miss_buff_data[(byp_fetch_index_inc_0 * 32) + 15-:16], ic_miss_buff_data[(byp_fetch_index_1 * 32) + 31-:32], ic_miss_buff_data[(byp_fetch_index_0 * 32) + 31-:32]}) | ({80 {ifu_fetch_addr_int_f[2]}} & {ic_miss_buff_data[(byp_fetch_index_inc_1 * 32) + 15-:16], ic_miss_buff_data[(byp_fetch_index_inc_0 * 32) + 31-:32], ic_miss_buff_data[(byp_fetch_index_1 * 32) + 31-:32]});
-	assign ic_byp_data_only_new[79:0] = (~ifu_fetch_addr_int_f[1] ? {ic_byp_data_only_pre_new[79:0]} : {16'b0000000000000000, ic_byp_data_only_pre_new[79:16]});
-	assign miss_wrap_f = imb_ff[pt[998-:7]] != ifu_fetch_addr_int_f[pt[998-:7]];
-	assign miss_buff_hit_unq_f = (((((ic_miss_buff_data_valid[byp_fetch_index[pt[1182-:8]:3]] & ~byp_fetch_index[2]) & ~byp_fetch_index[1]) | ((ic_miss_buff_data_valid[byp_fetch_index[pt[1182-:8]:3]] & ~byp_fetch_index[2]) & byp_fetch_index[1])) | ((ic_miss_buff_data_valid[byp_fetch_index[pt[1182-:8]:3]] & byp_fetch_index[2]) & ~byp_fetch_index[1])) | (((ic_miss_buff_data_valid[byp_fetch_index[pt[1182-:8]:3]] & ic_miss_buff_data_valid[byp_fetch_index_inc[pt[1182-:8]:3]]) & byp_fetch_index[2]) & byp_fetch_index[1])) | (ic_miss_buff_data_valid[byp_fetch_index[pt[1182-:8]:3]] & (byp_fetch_index[pt[1182-:8]:3] == {pt[1174-:8] {1'b1}}));
-	assign stream_hit_f = (miss_buff_hit_unq_f & ~miss_wrap_f) & (miss_state == STREAM);
-	assign stream_miss_f = (~(miss_buff_hit_unq_f & ~miss_wrap_f) & (miss_state == STREAM)) & ifc_fetch_req_f;
-	assign stream_eol_f = ((byp_fetch_index[pt[1182-:8]:2] == {pt[1174-:8] + 1 {1'b1}}) & ifc_fetch_req_f) & stream_hit_f;
-	assign crit_byp_hit_f = miss_buff_hit_unq_f & ((miss_state == CRIT_WRD_RDY) | (miss_state == CRIT_BYP_OK));
-	assign other_tag[pt[826-:8] - 1:0] = {ifu_bus_rid_ff[pt[826-:8] - 1:1], ~ifu_bus_rid_ff[0]};
-	assign second_half_available = ic_miss_buff_data_valid[other_tag];
-	assign write_ic_16_bytes = second_half_available & bus_ifu_wr_en_ff;
-	assign ic_miss_buff_half[63:0] = {ic_miss_buff_data[{other_tag, 1'b1} * 32+:32], ic_miss_buff_data[{other_tag, 1'b0} * 32+:32]};
-	assign ic_rd_parity_final_err = (((ic_tag_perr & ~exu_flush_final) & sel_ic_data) & ~(ifc_region_acc_fault_final_f | |ifc_bus_acc_fault_f)) & (((fetch_req_icache_f & ~reset_all_tags) & (~miss_pending | (miss_state == HIT_U_MISS))) & ~sel_mb_addr_ff);
-	wire [pt[1060-:7] - 1:0] perr_err_inv_way;
-	wire [pt[1104-:9]:pt[998-:7]] perr_ic_index_ff;
-	reg perr_sel_invalidate;
-	reg perr_sb_write_status;
-	rvdffe #(
-		.WIDTH((pt[1104-:9] - pt[998-:7]) + 1),
-		.OVERRIDE(1)
-	) perr_dat_ff(
-		.din(ifu_ic_rw_int_addr_ff[pt[1104-:9]:pt[998-:7]]),
-		.dout(perr_ic_index_ff[pt[1104-:9]:pt[998-:7]]),
-		.en(perr_sb_write_status),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	assign perr_err_inv_way[pt[1060-:7] - 1:0] = {pt[1060-:7] {perr_sel_invalidate}};
-	localparam [2:0] ECC_CORR = 3'b011;
-	assign iccm_correct_ecc = perr_state == ECC_CORR;
-	assign dma_sb_err_state = perr_state == DMA_SB_ERR;
-	assign iccm_buf_correct_ecc = iccm_correct_ecc & ~dma_sb_err_state_ff;
-	localparam [2:0] ECC_WFF = 3'b010;
-	localparam [2:0] ERR_IDLE = 3'b000;
-	localparam [2:0] IC_WFF = 3'b001;
-	always @(*) begin : ERROR_SM
-		perr_nxtstate = ERR_IDLE;
-		perr_state_en = 1'b0;
-		perr_sb_write_status = 1'b0;
-		perr_sel_invalidate = 1'b0;
-		case (perr_state)
-			ERR_IDLE: begin : err_idle
-				perr_nxtstate = (iccm_dma_sb_error ? DMA_SB_ERR : (ic_error_start & ~exu_flush_final ? IC_WFF : ECC_WFF));
-				perr_state_en = (((iccm_error_start | ic_error_start) & ~exu_flush_final) | iccm_dma_sb_error) & ~dec_tlu_force_halt;
-				perr_sb_write_status = perr_state_en;
-			end
-			IC_WFF: begin : icache_wff
-				perr_nxtstate = ERR_IDLE;
-				perr_state_en = dec_tlu_flush_lower_wb | dec_tlu_force_halt;
-				perr_sel_invalidate = dec_tlu_flush_err_wb & dec_tlu_flush_lower_wb;
-			end
-			ECC_WFF: begin : ecc_wff
-				perr_nxtstate = ((~dec_tlu_flush_err_wb & dec_tlu_flush_lower_wb) | dec_tlu_force_halt ? ERR_IDLE : ECC_CORR);
-				perr_state_en = dec_tlu_flush_lower_wb | dec_tlu_force_halt;
-			end
-			DMA_SB_ERR: begin : dma_sb_ecc
-				perr_nxtstate = (dec_tlu_force_halt ? ERR_IDLE : ECC_CORR);
-				perr_state_en = 1'b1;
-			end
-			ECC_CORR: begin : ecc_corr
-				perr_nxtstate = ERR_IDLE;
-				perr_state_en = 1'b1;
-			end
-			default: begin : def_case
-				perr_nxtstate = ERR_IDLE;
-				perr_state_en = 1'b0;
-				perr_sb_write_status = 1'b0;
-				perr_sel_invalidate = 1'b0;
-			end
-		endcase
-	end
-	rvdffs #(.WIDTH(3)) perr_state_ff(
-		.clk(active_clk),
-		.din(perr_nxtstate),
-		.dout({perr_state}),
-		.en(perr_state_en),
-		.rst_l(rst_l)
-	);
-	localparam [1:0] ERR_FETCH1 = 2'b01;
-	localparam [1:0] ERR_STOP_IDLE = 2'b00;
-	always @(*) begin : ERROR_STOP_FETCH
-		err_stop_nxtstate = ERR_STOP_IDLE;
-		err_stop_state_en = 1'b0;
-		err_stop_fetch = 1'b0;
-		iccm_correction_state = 1'b0;
-		case (err_stop_state)
-			ERR_STOP_IDLE: begin : err_stop_idle
-				err_stop_nxtstate = ERR_FETCH1;
-				err_stop_state_en = (dec_tlu_flush_err_wb & (perr_state == ECC_WFF)) & ~dec_tlu_force_halt;
-			end
-			ERR_FETCH1: begin : err_fetch1
-				err_stop_nxtstate = ((dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt) | dec_tlu_force_halt ? ERR_STOP_IDLE : ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr) ? ERR_STOP_FETCH : (ifu_fetch_val[0] ? ERR_FETCH2 : ERR_FETCH1)));
-				err_stop_state_en = (((dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt) | ifu_fetch_val[0]) | ifu_bp_hit_taken_q_f) | dec_tlu_force_halt;
-				err_stop_fetch = ((ifu_fetch_val[1:0] == 2'b11) | (ifu_fetch_val[0] & two_byte_instr)) & ~(exu_flush_final | dec_tlu_i0_commit_cmt);
-				iccm_correction_state = 1'b1;
-			end
-			ERR_FETCH2: begin : err_fetch2
-				err_stop_nxtstate = ((dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt) | dec_tlu_force_halt ? ERR_STOP_IDLE : (ifu_fetch_val[0] ? ERR_STOP_FETCH : ERR_FETCH2));
-				err_stop_state_en = ((dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt) | ifu_fetch_val[0]) | dec_tlu_force_halt;
-				err_stop_fetch = (ifu_fetch_val[0] & ~exu_flush_final) & ~dec_tlu_i0_commit_cmt;
-				iccm_correction_state = 1'b1;
-			end
-			ERR_STOP_FETCH: begin : ecc_wff
-				err_stop_nxtstate = (((dec_tlu_flush_lower_wb & ~dec_tlu_flush_err_wb) | dec_tlu_i0_commit_cmt) | dec_tlu_force_halt ? ERR_STOP_IDLE : (dec_tlu_flush_err_wb ? ERR_FETCH1 : ERR_STOP_FETCH));
-				err_stop_state_en = (dec_tlu_flush_lower_wb | dec_tlu_i0_commit_cmt) | dec_tlu_force_halt;
-				err_stop_fetch = 1'b1;
-				iccm_correction_state = 1'b1;
-			end
-			default: begin : def_case
-				err_stop_nxtstate = ERR_STOP_IDLE;
-				err_stop_state_en = 1'b0;
-				err_stop_fetch = 1'b0;
-				iccm_correction_state = 1'b1;
-			end
-		endcase
-	end
-	rvdffs #(.WIDTH(2)) err_stop_state_ff(
-		.clk(active_clk),
-		.din(err_stop_nxtstate),
-		.dout({err_stop_state}),
-		.en(err_stop_state_en),
-		.rst_l(rst_l)
-	);
-	assign bus_ifu_bus_clk_en = ifu_bus_clk_en;
-	rvclkhdr bus_clk_f(
-		.en(bus_ifu_bus_clk_en),
-		.l1clk(busclk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr bus_clk(
-		.en(bus_ifu_bus_clk_en | dec_tlu_force_halt),
-		.l1clk(busclk_force),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign scnd_miss_req = scnd_miss_req_q & ~exu_flush_final;
-	assign ifc_bus_ic_req_ff_in = (((ic_act_miss_f | bus_cmd_req_hold) | ifu_bus_cmd_valid) & ~dec_tlu_force_halt) & ~((((bus_cmd_beat_count == {pt[1174-:8] {1'b1}}) & ifu_bus_cmd_valid) & ifu_bus_cmd_ready) & miss_pending);
-	rvdff_fpga #(.WIDTH(1)) bus_ic_req_ff2(
-		.rst_l(rst_l),
-		.clk(busclk_force),
-		.clken(bus_ifu_bus_clk_en | dec_tlu_force_halt),
-		.rawclk(clk),
-		.din(ifc_bus_ic_req_ff_in),
-		.dout(ifu_bus_cmd_valid)
-	);
-	assign bus_cmd_req_in = ((ic_act_miss_f | bus_cmd_req_hold) & ~bus_cmd_sent) & ~dec_tlu_force_halt;
-	assign ifu_axi_arvalid = ifu_bus_cmd_valid;
-	function automatic [pt[826-:8] - 1:0] sv2v_cast_ADFF4;
-		input reg [pt[826-:8] - 1:0] inp;
-		sv2v_cast_ADFF4 = inp;
-	endfunction
-	assign ifu_axi_arid[pt[826-:8] - 1:0] = sv2v_cast_ADFF4(bus_rd_addr_count[pt[1174-:8] - 1:0]) & {pt[826-:8] {ifu_bus_cmd_valid}};
-	assign ifu_axi_araddr[31:0] = {ifu_ic_req_addr_f[31:3], 3'b000} & {32 {ifu_bus_cmd_valid}};
-	assign ifu_axi_arsize[2:0] = 3'b011;
-	assign ifu_axi_arprot[2:0] = 3'b101;
-	assign ifu_axi_arcache[3:0] = 4'b1111;
-	assign ifu_axi_arregion[3:0] = ifu_ic_req_addr_f[31:28];
-	assign ifu_axi_arlen[7:0] = {8 {1'sb0}};
-	assign ifu_axi_arburst[1:0] = 2'b01;
-	assign ifu_axi_arqos[3:0] = {4 {1'sb0}};
-	assign ifu_axi_arlock = 1'b0;
-	assign ifu_axi_rready = 1'b1;
-	assign ifu_axi_awvalid = 1'b0;
-	assign ifu_axi_awid[pt[826-:8] - 1:0] = {pt[826-:8] {1'sb0}};
-	assign ifu_axi_awaddr[31:0] = {32 {1'sb0}};
-	assign ifu_axi_awsize[2:0] = {3 {1'sb0}};
-	assign ifu_axi_awprot[2:0] = {3 {1'sb0}};
-	assign ifu_axi_awcache[3:0] = {4 {1'sb0}};
-	assign ifu_axi_awregion[3:0] = {4 {1'sb0}};
-	assign ifu_axi_awlen[7:0] = {8 {1'sb0}};
-	assign ifu_axi_awburst[1:0] = {2 {1'sb0}};
-	assign ifu_axi_awqos[3:0] = {4 {1'sb0}};
-	assign ifu_axi_awlock = 1'b0;
-	assign ifu_axi_wvalid = 1'b0;
-	assign ifu_axi_wstrb[7:0] = {8 {1'sb0}};
-	assign ifu_axi_wdata[63:0] = {64 {1'sb0}};
-	assign ifu_axi_wlast = 1'b0;
-	assign ifu_axi_bready = 1'b0;
-	assign ifu_bus_arready_unq = ifu_axi_arready;
-	assign ifu_bus_rvalid_unq = ifu_axi_rvalid;
-	assign ifu_bus_arvalid = ifu_axi_arvalid;
-	rvdff_fpga #(.WIDTH(1)) bus_rdy_ff(
-		.rst_l(rst_l),
-		.clk(busclk),
-		.clken(bus_ifu_bus_clk_en),
-		.rawclk(clk),
-		.din(ifu_bus_arready_unq),
-		.dout(ifu_bus_arready_unq_ff)
-	);
-	rvdff_fpga #(.WIDTH(1)) bus_rsp_vld_ff(
-		.rst_l(rst_l),
-		.clk(busclk),
-		.clken(bus_ifu_bus_clk_en),
-		.rawclk(clk),
-		.din(ifu_bus_rvalid_unq),
-		.dout(ifu_bus_rvalid_unq_ff)
-	);
-	rvdff_fpga #(.WIDTH(1)) bus_cmd_ff(
-		.rst_l(rst_l),
-		.clk(busclk),
-		.clken(bus_ifu_bus_clk_en),
-		.rawclk(clk),
-		.din(ifu_bus_arvalid),
-		.dout(ifu_bus_arvalid_ff)
-	);
-	rvdff_fpga #(.WIDTH(2)) bus_rsp_cmd_ff(
-		.rst_l(rst_l),
-		.clk(busclk),
-		.clken(bus_ifu_bus_clk_en),
-		.rawclk(clk),
-		.din(ifu_axi_rresp[1:0]),
-		.dout(ifu_bus_rresp_ff[1:0])
-	);
-	rvdff_fpga #(.WIDTH(pt[826-:8])) bus_rsp_tag_ff(
-		.rst_l(rst_l),
-		.clk(busclk),
-		.clken(bus_ifu_bus_clk_en),
-		.rawclk(clk),
-		.din(ifu_axi_rid[pt[826-:8] - 1:0]),
-		.dout(ifu_bus_rid_ff[pt[826-:8] - 1:0])
-	);
-	rvdffe #(.WIDTH(64)) bus_data_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(clk),
-		.din(ifu_axi_rdata[63:0]),
-		.dout(ifu_bus_rdata_ff[63:0]),
-		.en(ifu_bus_clk_en & ifu_axi_rvalid)
-	);
-	assign ifu_bus_cmd_ready = ifu_axi_arready;
-	assign ifu_bus_rsp_valid = ifu_axi_rvalid;
-	assign ifu_bus_rsp_ready = ifu_axi_rready;
-	assign ifu_bus_rsp_tag[pt[826-:8] - 1:0] = ifu_axi_rid[pt[826-:8] - 1:0];
-	assign ifu_bus_rsp_rdata[63:0] = ifu_axi_rdata[63:0];
-	assign ifu_bus_rsp_opc[1:0] = {ifu_axi_rresp[1:0]};
-	assign ifu_bus_rvalid = ifu_bus_rsp_valid & bus_ifu_bus_clk_en;
-	assign ifu_bus_arready = ifu_bus_arready_unq & bus_ifu_bus_clk_en;
-	assign ifu_bus_arready_ff = ifu_bus_arready_unq_ff & bus_ifu_bus_clk_en_ff;
-	assign ifu_bus_rvalid_ff = ifu_bus_rvalid_unq_ff & bus_ifu_bus_clk_en_ff;
-	assign bus_cmd_sent = ((ifu_bus_arvalid & ifu_bus_arready) & miss_pending) & ~dec_tlu_force_halt;
-	assign bus_inc_data_beat_cnt = (bus_ifu_wr_en_ff & ~bus_last_data_beat) & ~dec_tlu_force_halt;
-	assign bus_reset_data_beat_cnt = (ic_act_miss_f | (bus_ifu_wr_en_ff & bus_last_data_beat)) | dec_tlu_force_halt;
-	assign bus_hold_data_beat_cnt = ~bus_inc_data_beat_cnt & ~bus_reset_data_beat_cnt;
-	function automatic signed [pt[1174-:8] - 1:0] sv2v_cast_4BA5C_signed;
-		input reg signed [pt[1174-:8] - 1:0] inp;
-		sv2v_cast_4BA5C_signed = inp;
-	endfunction
-	assign bus_new_data_beat_count[pt[1174-:8] - 1:0] = (({pt[1174-:8] {bus_reset_data_beat_cnt}} & sv2v_cast_4BA5C_signed(0)) | ({pt[1174-:8] {bus_inc_data_beat_cnt}} & (bus_data_beat_count[pt[1174-:8] - 1:0] + {{pt[1174-:8] - 1 {1'b0}}, 1'b1}))) | ({pt[1174-:8] {bus_hold_data_beat_cnt}} & bus_data_beat_count[pt[1174-:8] - 1:0]);
-	assign last_data_recieved_in = ((bus_ifu_wr_en_ff & bus_last_data_beat) & ~scnd_miss_req) | (last_data_recieved_ff & ~ic_act_miss_f);
-	assign bus_new_rd_addr_count[pt[1174-:8] - 1:0] = (~miss_pending ? imb_ff[pt[1182-:8]:3] : (scnd_miss_req_q ? imb_scnd_ff[pt[1182-:8]:3] : (bus_cmd_sent ? bus_rd_addr_count[pt[1174-:8] - 1:0] + 3'b001 : bus_rd_addr_count[pt[1174-:8] - 1:0])));
-	rvdff_fpga #(.WIDTH(pt[1174-:8])) bus_rd_addr_ff(
-		.rst_l(rst_l),
-		.clk(busclk_reset),
-		.clken((bus_ifu_bus_clk_en | ic_act_miss_f) | dec_tlu_force_halt),
-		.rawclk(clk),
-		.din({bus_new_rd_addr_count[pt[1174-:8] - 1:0]}),
-		.dout({bus_rd_addr_count[pt[1174-:8] - 1:0]})
-	);
-	assign bus_inc_cmd_beat_cnt = ((ifu_bus_cmd_valid & ifu_bus_cmd_ready) & miss_pending) & ~dec_tlu_force_halt;
-	assign bus_reset_cmd_beat_cnt_0 = (ic_act_miss_f & ~uncacheable_miss_in) | dec_tlu_force_halt;
-	assign bus_reset_cmd_beat_cnt_secondlast = ic_act_miss_f & uncacheable_miss_in;
-	assign bus_hold_cmd_beat_cnt = ~bus_inc_cmd_beat_cnt & ~((ic_act_miss_f | scnd_miss_req) | dec_tlu_force_halt);
-	assign bus_cmd_beat_en = (bus_inc_cmd_beat_cnt | ic_act_miss_f) | dec_tlu_force_halt;
-	function automatic [pt[1174-:8] - 1:0] sv2v_cast_4BA5C;
-		input reg [pt[1174-:8] - 1:0] inp;
-		sv2v_cast_4BA5C = inp;
-	endfunction
-	assign bus_new_cmd_beat_count[pt[1174-:8] - 1:0] = ((({pt[1174-:8] {bus_reset_cmd_beat_cnt_0}} & sv2v_cast_4BA5C_signed(0)) | ({pt[1174-:8] {bus_reset_cmd_beat_cnt_secondlast}} & sv2v_cast_4BA5C(pt[1048-:8]))) | ({pt[1174-:8] {bus_inc_cmd_beat_cnt}} & (bus_cmd_beat_count[pt[1174-:8] - 1:0] + {{pt[1174-:8] - 1 {1'b0}}, 1'b1}))) | ({pt[1174-:8] {bus_hold_cmd_beat_cnt}} & bus_cmd_beat_count[pt[1174-:8] - 1:0]);
-	rvclkhdr bus_clk_reset(
-		.en((bus_ifu_bus_clk_en | ic_act_miss_f) | dec_tlu_force_halt),
-		.l1clk(busclk_reset),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvdffs_fpga #(.WIDTH(pt[1174-:8])) bus_cmd_beat_ff(
-		.rst_l(rst_l),
-		.clk(busclk_reset),
-		.clken((bus_ifu_bus_clk_en | ic_act_miss_f) | dec_tlu_force_halt),
-		.rawclk(clk),
-		.en(bus_cmd_beat_en),
-		.din({bus_new_cmd_beat_count[pt[1174-:8] - 1:0]}),
-		.dout({bus_cmd_beat_count[pt[1174-:8] - 1:0]})
-	);
-	assign bus_last_data_beat = (uncacheable_miss_ff ? bus_data_beat_count[pt[1174-:8] - 1:0] == {{pt[1174-:8] - 1 {1'b0}}, 1'b1} : &bus_data_beat_count[pt[1174-:8] - 1:0]);
-	assign bus_ifu_wr_en = ifu_bus_rvalid & miss_pending;
-	assign bus_ifu_wr_en_ff = ifu_bus_rvalid_ff & miss_pending;
-	assign bus_ifu_wr_en_ff_q = (((ifu_bus_rvalid_ff & miss_pending) & ~uncacheable_miss_ff) & ~(|ifu_bus_rresp_ff[1:0])) & write_ic_16_bytes;
-	assign bus_ifu_wr_en_ff_wo_err = (ifu_bus_rvalid_ff & miss_pending) & ~uncacheable_miss_ff;
-	rvdffie #(.WIDTH(10)) misc_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({ic_act_miss_f, ifu_wr_cumulative_err, exu_flush_final, ic_crit_wd_rdy_new_in, bus_ifu_bus_clk_en, scnd_miss_req_in, bus_cmd_req_in, last_data_recieved_in, ifc_dma_access_ok_d, dma_iccm_req}),
-		.dout({ic_act_miss_f_delayed, ifu_wr_data_comb_err_ff, flush_final_f, ic_crit_wd_rdy_new_ff, bus_ifu_bus_clk_en_ff, scnd_miss_req_q, bus_cmd_req_hold, last_data_recieved_ff, ifc_dma_access_ok_prev, dma_iccm_req_f})
-	);
-	rvdffie #(
-		.WIDTH(pt[1174-:8] + 5),
-		.OVERRIDE(1)
-	) misc1_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({reset_ic_in, sel_mb_addr, bus_new_data_beat_count[pt[1174-:8] - 1:0], ifc_region_acc_fault_memory_bf, ic_debug_rd_en, ic_debug_rd_en_ff}),
-		.dout({reset_ic_ff, sel_mb_addr_ff, bus_data_beat_count[pt[1174-:8] - 1:0], ifc_region_acc_fault_memory_f, ic_debug_rd_en_ff, ifu_ic_debug_rd_data_valid})
-	);
-	assign reset_tag_valid_for_miss = (ic_act_miss_f_delayed & (miss_state == CRIT_BYP_OK)) & ~uncacheable_miss_ff;
-	assign bus_ifu_wr_data_error = (|ifu_bus_rsp_opc[1:0] & ifu_bus_rvalid) & miss_pending;
-	assign bus_ifu_wr_data_error_ff = (|ifu_bus_rresp_ff[1:0] & ifu_bus_rvalid_ff) & miss_pending;
-	assign ic_crit_wd_rdy = ic_crit_wd_rdy_new_in | ic_crit_wd_rdy_new_ff;
-	assign last_beat = bus_last_data_beat & bus_ifu_wr_en_ff;
-	assign reset_beat_cnt = bus_reset_data_beat_cnt;
-	assign ifc_dma_access_ok_d = (ifc_dma_access_ok & ~iccm_correct_ecc) & ~iccm_dma_sb_error;
-	assign ifc_dma_access_q_ok = (((ifc_dma_access_ok & ~iccm_correct_ecc) & ifc_dma_access_ok_prev) & (perr_state == ERR_IDLE)) & ~iccm_dma_sb_error;
-	assign iccm_ready = ifc_dma_access_q_ok;
-	wire [1:0] iccm_ecc_word_enable;
-	generate
-		if (pt[927-:5] == 1) begin : iccm_enabled
-			wire [3:2] dma_mem_addr_ff;
-			wire iccm_dma_rden;
-			wire iccm_dma_ecc_error_in;
-			wire [13:0] dma_mem_ecc;
-			wire [63:0] iccm_dma_rdata_in;
-			wire [31:0] iccm_dma_rdata_1_muxed;
-			wire [63:0] iccm_corrected_data;
-			wire [13:0] iccm_corrected_ecc;
-			wire [1:0] iccm_double_ecc_error;
-			wire [pt[936-:9] - 1:2] iccm_rw_addr_f;
-			wire [31:0] iccm_corrected_data_f_mux;
-			wire [6:0] iccm_corrected_ecc_f_mux;
-			wire iccm_dma_rvalid_in;
-			wire [77:0] iccm_rdmux_data;
-			wire iccm_rd_ecc_single_err_hold_in;
-			wire [2:0] dma_mem_tag_ff;
-			assign iccm_wren = ((ifc_dma_access_q_ok & dma_iccm_req) & dma_mem_write) | iccm_correct_ecc;
-			assign iccm_rden = ((ifc_dma_access_q_ok & dma_iccm_req) & ~dma_mem_write) | (ifc_iccm_access_bf & ifc_fetch_req_bf);
-			assign iccm_dma_rden = (ifc_dma_access_q_ok & dma_iccm_req) & ~dma_mem_write;
-			assign iccm_wr_size[2:0] = {3 {dma_iccm_req}} & dma_mem_sz[2:0];
-			rvecc_encode iccm_ecc_encode0(
-				.din(dma_mem_wdata[31:0]),
-				.ecc_out(dma_mem_ecc[6:0])
-			);
-			rvecc_encode iccm_ecc_encode1(
-				.din(dma_mem_wdata[63:32]),
-				.ecc_out(dma_mem_ecc[13:7])
-			);
-			assign iccm_wr_data[77:0] = (iccm_correct_ecc & ~(ifc_dma_access_q_ok & dma_iccm_req) ? {iccm_ecc_corr_data_ff[38:0], iccm_ecc_corr_data_ff[38:0]} : {dma_mem_ecc[13:7], dma_mem_wdata[63:32], dma_mem_ecc[6:0], dma_mem_wdata[31:0]});
-			assign iccm_dma_rdata_1_muxed[31:0] = (dma_mem_addr_ff[2] ? iccm_corrected_data[31-:32] : iccm_corrected_data[63-:32]);
-			assign iccm_dma_rdata_in[63:0] = (iccm_dma_ecc_error_in ? {2 {dma_mem_addr[31:0]}} : {iccm_dma_rdata_1_muxed[31:0], iccm_corrected_data[0+:32]});
-			assign iccm_dma_ecc_error_in = |iccm_double_ecc_error[1:0];
-			rvdffe #(.WIDTH(64)) dma_data_ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(clk),
-				.en(iccm_dma_rvalid_in),
-				.din(iccm_dma_rdata_in[63:0]),
-				.dout(iccm_dma_rdata[63:0])
-			);
-			rvdffie #(.WIDTH(11)) dma_misc_bits(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(free_l2clk),
-				.din({dma_mem_tag[2:0], dma_mem_tag_ff[2:0], dma_mem_addr[3:2], iccm_dma_rden, iccm_dma_rvalid_in, iccm_dma_ecc_error_in}),
-				.dout({dma_mem_tag_ff[2:0], iccm_dma_rtag[2:0], dma_mem_addr_ff[3:2], iccm_dma_rvalid_in, iccm_dma_rvalid, iccm_dma_ecc_error})
-			);
-			assign iccm_rw_addr[pt[936-:9] - 1:1] = ((ifc_dma_access_q_ok & dma_iccm_req) & ~iccm_correct_ecc ? dma_mem_addr[pt[936-:9] - 1:1] : (~(ifc_dma_access_q_ok & dma_iccm_req) & iccm_correct_ecc ? {iccm_ecc_corr_index_ff[pt[936-:9] - 1:2], 1'b0} : ifc_fetch_addr_bf[pt[936-:9] - 1:1]));
-			wire [3:0] ic_fetch_val_int_f;
-			wire [3:0] ic_fetch_val_shift_right;
-			assign ic_fetch_val_int_f[3:0] = {2'b00, ic_fetch_val_f[1:0]};
-			assign ic_fetch_val_shift_right[3:0] = {ic_fetch_val_int_f << ifu_fetch_addr_int_f[1]};
-			assign iccm_rdmux_data[77:0] = iccm_rd_data_ecc[77:0];
-			for (i = 0; i < 2; i = i + 1) begin : ICCM_ECC_CHECK
-				assign iccm_ecc_word_enable[i] = (((|ic_fetch_val_shift_right[(2 * i) + 1:2 * i] & ~exu_flush_final) & sel_iccm_data) | iccm_dma_rvalid_in) & ~dec_tlu_core_ecc_disable;
-				rvecc_decode ecc_decode(
-					.en(iccm_ecc_word_enable[i]),
-					.sed_ded(1'b0),
-					.din(iccm_rdmux_data[(39 * i) + 31:39 * i]),
-					.ecc_in(iccm_rdmux_data[(39 * i) + 38:(39 * i) + 32]),
-					.dout(iccm_corrected_data[(i * 32) + 31-:32]),
-					.ecc_out(iccm_corrected_ecc[(i * 7) + 6-:7]),
-					.single_ecc_error(iccm_single_ecc_error[i]),
-					.double_ecc_error(iccm_double_ecc_error[i])
-				);
-			end
-			assign iccm_rd_ecc_single_err = (|iccm_single_ecc_error[1:0] & ifc_iccm_access_f) & ifc_fetch_req_f;
-			assign iccm_rd_ecc_double_err[1:0] = (~ifu_fetch_addr_int_f[1] ? {iccm_double_ecc_error[0], iccm_double_ecc_error[0]} & {2 {ifc_iccm_access_f}} : {iccm_double_ecc_error[1], iccm_double_ecc_error[0]} & {2 {ifc_iccm_access_f}});
-			assign iccm_corrected_data_f_mux[31:0] = (iccm_single_ecc_error[0] ? iccm_corrected_data[0+:32] : iccm_corrected_data[32+:32]);
-			assign iccm_corrected_ecc_f_mux[6:0] = (iccm_single_ecc_error[0] ? iccm_corrected_ecc[0+:7] : iccm_corrected_ecc[7+:7]);
-			assign iccm_ecc_write_status = ((iccm_rd_ecc_single_err & ~iccm_rd_ecc_single_err_ff) & ~exu_flush_final) | iccm_dma_sb_error;
-			assign iccm_rd_ecc_single_err_hold_in = (iccm_rd_ecc_single_err | iccm_rd_ecc_single_err_ff) & ~exu_flush_final;
-			assign iccm_error_start = iccm_rd_ecc_single_err;
-			assign iccm_ecc_corr_index_in[pt[936-:9] - 1:2] = (iccm_single_ecc_error[0] ? iccm_rw_addr_f[pt[936-:9] - 1:2] : iccm_rw_addr_f[pt[936-:9] - 1:2] + 1'b1);
-			rvdffie #(.WIDTH(pt[936-:9] - 1)) iccm_index_f(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(free_l2clk),
-				.din({iccm_rw_addr[pt[936-:9] - 1:2], iccm_rd_ecc_single_err_hold_in}),
-				.dout({iccm_rw_addr_f[pt[936-:9] - 1:2], iccm_rd_ecc_single_err_ff})
-			);
-			rvdffe #(.WIDTH(pt[936-:9] + 37)) ecc_dat0_ff(
-				.clk(clk),
-				.din({iccm_corrected_ecc_f_mux[6:0], iccm_corrected_data_f_mux[31:0], iccm_ecc_corr_index_in[pt[936-:9] - 1:2]}),
-				.dout({iccm_ecc_corr_data_ff[38:0], iccm_ecc_corr_index_ff[pt[936-:9] - 1:2]}),
-				.en(iccm_ecc_write_status),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-		end
-		else begin : iccm_disabled
-			assign iccm_dma_rvalid = 1'b0;
-			assign iccm_dma_ecc_error = 1'b0;
-			assign iccm_dma_rdata[63:0] = {64 {1'sb0}};
-			assign iccm_single_ecc_error = {2 {1'sb0}};
-			assign iccm_dma_rtag = {3 {1'sb0}};
-			assign iccm_rd_ecc_single_err = 1'b0;
-			assign iccm_rd_ecc_double_err = {2 {1'sb0}};
-			assign iccm_rd_ecc_single_err_ff = 1'b0;
-			assign iccm_error_start = 1'b0;
-			assign iccm_ecc_corr_index_ff[pt[936-:9] - 1:2] = {((pt[936-:9] - 1) >= 2 ? pt[936-:9] - 2 : 4 - pt[936-:9]) {1'sb0}};
-			assign iccm_ecc_corr_data_ff[38:0] = {39 {1'sb0}};
-			assign iccm_ecc_write_status = 1'b0;
-		end
-	endgenerate
-	assign ic_rd_en = (((ifc_fetch_req_bf & ~ifc_fetch_uncacheable_bf) & ~ifc_iccm_access_bf) & ~(((((((miss_state == STREAM) & ~miss_state_en) | ((miss_state == CRIT_BYP_OK) & ~miss_state_en)) | ((miss_state == STALL_SCND_MISS) & ~miss_state_en)) | ((miss_state == MISS_WAIT) & ~miss_state_en)) | ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)) | (((miss_state == CRIT_BYP_OK) & miss_state_en) & (miss_nxtstate == MISS_WAIT)))) | (((ifc_fetch_req_bf & exu_flush_final) & ~ifc_fetch_uncacheable_bf) & ~ifc_iccm_access_bf);
-	wire ic_real_rd_wp_unused;
-	assign ic_real_rd_wp_unused = ((((((ifc_fetch_req_bf & ~ifc_iccm_access_bf) & ~ifc_region_acc_fault_final_bf) & ~dec_tlu_fence_i_wb) & ~stream_miss_f) & ~ic_act_miss_f) & ~(((((((((miss_state == STREAM) & ~miss_state_en) | (((miss_state == CRIT_BYP_OK) & ~miss_state_en) & ~(miss_nxtstate == MISS_WAIT))) | (((miss_state == CRIT_BYP_OK) & miss_state_en) & (miss_nxtstate == MISS_WAIT))) | ((miss_state == MISS_WAIT) & ~miss_state_en)) | ((miss_state == STALL_SCND_MISS) & ~miss_state_en)) | ((miss_state == CRIT_WRD_RDY) & ~miss_state_en)) | ((miss_nxtstate == STREAM) & miss_state_en)) | ((miss_state == SCND_MISS) & ~miss_state_en))) | (((((ifc_fetch_req_bf & ~ifc_iccm_access_bf) & ~ifc_region_acc_fault_final_bf) & ~dec_tlu_fence_i_wb) & ~stream_miss_f) & exu_flush_final);
-	assign ic_wr_en[pt[1060-:7] - 1:0] = bus_ic_wr_en[pt[1060-:7] - 1:0] & {pt[1060-:7] {write_ic_16_bytes}};
-	assign ic_write_stall = write_ic_16_bytes & ~(((miss_state == CRIT_BYP_OK) | ((miss_state == STREAM) & ~((exu_flush_final | ifu_bp_hit_taken_q_f) | stream_eol_f))) & ~((bus_ifu_wr_en_ff & last_beat) & ~uncacheable_miss_ff));
-	reg [pt[1060-:7] - 1:0] ic_tag_valid_unq;
-	generate
-		if (pt[1120-:5] == 1) begin : icache_enabled
-			assign ic_valid = (~ifu_wr_cumulative_err_data & ~(reset_ic_in | reset_ic_ff)) & ~reset_tag_valid_for_miss;
-			assign ifu_status_wr_addr_w_debug[pt[1104-:9]:pt[998-:7]] = ((ic_debug_rd_en | ic_debug_wr_en) & ic_debug_tag_array ? ic_debug_addr[pt[1104-:9]:pt[998-:7]] : ifu_status_wr_addr[pt[1104-:9]:pt[998-:7]]);
-			assign way_status_wr_en_w_debug = way_status_wr_en | (ic_debug_wr_en & ic_debug_tag_array);
-			assign way_status_new_w_debug[pt[1027-:7] - 1:0] = (ic_debug_wr_en & ic_debug_tag_array ? (pt[1027-:7] == 1 ? ic_debug_wr_data[4] : ic_debug_wr_data[6:4]) : way_status_new[pt[1027-:7] - 1:0]);
-			rvdffie #(
-				.WIDTH(((pt[991-:9] - pt[998-:7]) + 1) + pt[1027-:7]),
-				.OVERRIDE(1)
-			) status_misc_ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(free_l2clk),
-				.din({ifu_status_wr_addr_w_debug[pt[1104-:9]:pt[998-:7]], way_status_wr_en_w_debug, way_status_new_w_debug[pt[1027-:7] - 1:0]}),
-				.dout({ifu_status_wr_addr_ff[pt[1104-:9]:pt[998-:7]], way_status_wr_en_ff, way_status_new_ff[pt[1027-:7] - 1:0]})
-			);
-			wire [(pt[1015-:17] / 8) - 1:0] way_status_clken;
-			wire [(pt[1015-:17] / 8) - 1:0] way_status_clk;
-			for (i = 0; i < (pt[1015-:17] / 8); i = i + 1) begin : CLK_GRP_WAY_STATUS
-				assign way_status_clken[i] = ifu_status_wr_addr_ff[pt[1104-:9]:pt[998-:7] + 3] == i;
-				rvclkhdr way_status_cgc(
-					.en(way_status_clken[i]),
-					.l1clk(way_status_clk[i]),
-					.clk(clk),
-					.scan_mode(scan_mode)
-				);
-				genvar j;
-				for (j = 0; j < 8; j = j + 1) begin : WAY_STATUS
-					rvdffs_fpga #(.WIDTH(pt[1027-:7])) ic_way_status(
-						.rst_l(rst_l),
-						.clk(way_status_clk[i]),
-						.clken(way_status_clken[i]),
-						.rawclk(clk),
-						.en((ifu_status_wr_addr_ff[pt[998-:7] + 2:pt[998-:7]] == j) & way_status_wr_en_ff),
-						.din(way_status_new_ff[pt[1027-:7] - 1:0]),
-						.dout(way_status_out[((8 * i) + j) * pt[1027-:7]+:pt[1027-:7]])
-					);
-				end
-			end
-			function automatic signed [(pt[991-:9] - pt[998-:7]) - 1:0] sv2v_cast_46E4F_signed;
-				input reg signed [(pt[991-:9] - pt[998-:7]) - 1:0] inp;
-				sv2v_cast_46E4F_signed = inp;
-			endfunction
-			always @(*) begin : way_status_out_mux
-				way_status[pt[1027-:7] - 1:0] = {pt[1027-:7] {1'sb0}};
-				begin : sv2v_autoblock_47
-					reg signed [31:0] j;
-					for (j = 0; j < pt[1015-:17]; j = j + 1)
-						begin : status_mux_loop
-							if (ifu_ic_rw_int_addr_ff[pt[1104-:9]:pt[998-:7]] == sv2v_cast_46E4F_signed(j)) begin : mux_out
-								way_status[pt[1027-:7] - 1:0] = way_status_out[j * pt[1027-:7]+:pt[1027-:7]];
-							end
-						end
-				end
-			end
-			assign ifu_ic_rw_int_addr_w_debug[pt[1104-:9]:pt[998-:7]] = ((ic_debug_rd_en | ic_debug_wr_en) & ic_debug_tag_array ? ic_debug_addr[pt[1104-:9]:pt[998-:7]] : ifu_ic_rw_int_addr[pt[1104-:9]:pt[998-:7]]);
-			assign ifu_tag_wren_w_debug[pt[1060-:7] - 1:0] = ifu_tag_wren[pt[1060-:7] - 1:0] | ic_debug_tag_wr_en[pt[1060-:7] - 1:0];
-			assign ic_valid_w_debug = (ic_debug_wr_en & ic_debug_tag_array ? ic_debug_wr_data[0] : ic_valid);
-			rvdffie #(.WIDTH(((pt[991-:9] - pt[998-:7]) + pt[1060-:7]) + 1)) tag_addr_ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.clk(free_l2clk),
-				.din({ifu_ic_rw_int_addr_w_debug[pt[1104-:9]:pt[998-:7]], ifu_tag_wren_w_debug[pt[1060-:7] - 1:0], ic_valid_w_debug}),
-				.dout({ifu_ic_rw_int_addr_ff[pt[1104-:9]:pt[998-:7]], ifu_tag_wren_ff[pt[1060-:7] - 1:0], ic_valid_ff})
-			);
-			wire [(pt[1060-:7] * pt[1015-:17]) - 1:0] ic_tag_valid_out;
-			wire [((pt[1015-:17] / 32) * pt[1060-:7]) - 1:0] tag_valid_clken;
-			wire [((pt[1015-:17] / 32) * pt[1060-:7]) - 1:0] tag_valid_clk;
-			for (i = 0; i < (pt[1015-:17] / 32); i = i + 1) begin : CLK_GRP_TAG_VALID
-				genvar j;
-				for (j = 0; j < pt[1060-:7]; j = j + 1) begin : way_clken
-					if (pt[1015-:17] == 32) begin
-						assign tag_valid_clken[(i * pt[1060-:7]) + j] = (ifu_tag_wren_ff[j] | perr_err_inv_way[j]) | reset_all_tags;
-					end
-					else assign tag_valid_clken[(i * pt[1060-:7]) + j] = (((ifu_ic_rw_int_addr_ff[pt[1104-:9]:pt[998-:7] + 5] == i) & ifu_tag_wren_ff[j]) | ((perr_ic_index_ff[pt[1104-:9]:pt[998-:7] + 5] == i) & perr_err_inv_way[j])) | reset_all_tags;
-					rvclkhdr way_status_cgc(
-						.en(tag_valid_clken[(i * pt[1060-:7]) + j]),
-						.l1clk(tag_valid_clk[(i * pt[1060-:7]) + j]),
-						.clk(clk),
-						.scan_mode(scan_mode)
-					);
-					genvar k;
-					for (k = 0; k < 32; k = k + 1) begin : TAG_VALID
-						rvdffs_fpga #(.WIDTH(1)) ic_way_tagvalid_dup(
-							.rst_l(rst_l),
-							.clk(tag_valid_clk[(i * pt[1060-:7]) + j]),
-							.clken(tag_valid_clken[(i * pt[1060-:7]) + j]),
-							.rawclk(clk),
-							.en((((ifu_ic_rw_int_addr_ff[pt[1104-:9]:pt[998-:7]] == (k + (32 * i))) & ifu_tag_wren_ff[j]) | ((perr_ic_index_ff[pt[1104-:9]:pt[998-:7]] == (k + (32 * i))) & perr_err_inv_way[j])) | reset_all_tags),
-							.din((ic_valid_ff & ~reset_all_tags) & ~perr_sel_invalidate),
-							.dout(ic_tag_valid_out[(j * pt[1015-:17]) + ((32 * i) + k)])
-						);
-					end
-				end
-			end
-			always @(*) begin : tag_valid_out_mux
-				ic_tag_valid_unq[pt[1060-:7] - 1:0] = {pt[1060-:7] {1'sb0}};
-				begin : sv2v_autoblock_48
-					reg signed [31:0] j;
-					for (j = 0; j < pt[1015-:17]; j = j + 1)
-						begin : tag_valid_loop
-							if (ifu_ic_rw_int_addr_ff[pt[1104-:9]:pt[998-:7]] == sv2v_cast_46E4F_signed(j)) begin : valid_out
-								begin : sv2v_autoblock_49
-									reg signed [31:0] k;
-									for (k = 0; k < pt[1060-:7]; k = k + 1)
-										ic_tag_valid_unq[k] = ic_tag_valid_unq[k] | ic_tag_valid_out[(k * pt[1015-:17]) + j];
-								end
-							end
-						end
-				end
-			end
-			if (pt[1060-:7] == 4) begin : four_way_plru
-				assign replace_way_mb_any[3] = ((way_status_mb_ff[2] & way_status_mb_ff[0]) & &tagv_mb_ff[3:0]) | (((~tagv_mb_ff[3] & tagv_mb_ff[2]) & tagv_mb_ff[1]) & tagv_mb_ff[0]);
-				assign replace_way_mb_any[2] = ((~way_status_mb_ff[2] & way_status_mb_ff[0]) & &tagv_mb_ff[3:0]) | ((~tagv_mb_ff[2] & tagv_mb_ff[1]) & tagv_mb_ff[0]);
-				assign replace_way_mb_any[1] = ((way_status_mb_ff[1] & ~way_status_mb_ff[0]) & &tagv_mb_ff[3:0]) | (~tagv_mb_ff[1] & tagv_mb_ff[0]);
-				assign replace_way_mb_any[0] = ((~way_status_mb_ff[1] & ~way_status_mb_ff[0]) & &tagv_mb_ff[3:0]) | ~tagv_mb_ff[0];
-				assign way_status_hit_new[pt[1027-:7] - 1:0] = ((({3 {~exu_flush_final & ic_rd_hit[0]}} & {way_status[2], 1'b1, 1'b1}) | ({3 {~exu_flush_final & ic_rd_hit[1]}} & {way_status[2], 1'b0, 1'b1})) | ({3 {~exu_flush_final & ic_rd_hit[2]}} & {1'b1, way_status[1], 1'b0})) | ({3 {~exu_flush_final & ic_rd_hit[3]}} & {1'b0, way_status[1], 1'b0});
-				assign way_status_rep_new[pt[1027-:7] - 1:0] = ((({3 {replace_way_mb_any[0]}} & {way_status_mb_ff[2], 1'b1, 1'b1}) | ({3 {replace_way_mb_any[1]}} & {way_status_mb_ff[2], 1'b0, 1'b1})) | ({3 {replace_way_mb_any[2]}} & {1'b1, way_status_mb_ff[1], 1'b0})) | ({3 {replace_way_mb_any[3]}} & {1'b0, way_status_mb_ff[1], 1'b0});
-			end
-			else begin : two_ways_plru
-				assign replace_way_mb_any[0] = ((~way_status_mb_ff & tagv_mb_ff[0]) & tagv_mb_ff[1]) | ~tagv_mb_ff[0];
-				assign replace_way_mb_any[1] = ((way_status_mb_ff & tagv_mb_ff[0]) & tagv_mb_ff[1]) | (~tagv_mb_ff[1] & tagv_mb_ff[0]);
-				assign way_status_hit_new[pt[1027-:7] - 1:0] = ic_rd_hit[0];
-				assign way_status_rep_new[pt[1027-:7] - 1:0] = replace_way_mb_any[0];
-			end
-			assign way_status_new[pt[1027-:7] - 1:0] = (bus_ifu_wr_en_ff_q & last_beat ? way_status_rep_new[pt[1027-:7] - 1:0] : way_status_hit_new[pt[1027-:7] - 1:0]);
-			assign way_status_wr_en = (bus_ifu_wr_en_ff_q & last_beat) | ic_act_hit_f;
-			for (i = 0; i < pt[1060-:7]; i = i + 1) begin : bus_wren_loop
-				assign bus_wren[i] = (bus_ifu_wr_en_ff_q & replace_way_mb_any[i]) & miss_pending;
-				assign bus_wren_last[i] = ((bus_ifu_wr_en_ff_wo_err & replace_way_mb_any[i]) & miss_pending) & bus_last_data_beat;
-				assign ifu_tag_wren[i] = bus_wren_last[i] | wren_reset_miss[i];
-				assign wren_reset_miss[i] = replace_way_mb_any[i] & reset_tag_valid_for_miss;
-			end
-			assign bus_ic_wr_en[pt[1060-:7] - 1:0] = bus_wren[pt[1060-:7] - 1:0];
-		end
-		else begin : icache_disabled
-			wire [pt[1060-:7]:1] sv2v_tmp_602A9;
-			assign sv2v_tmp_602A9 = {pt[1060-:7] {1'sb0}};
-			always @(*) ic_tag_valid_unq[pt[1060-:7] - 1:0] = sv2v_tmp_602A9;
-			wire [pt[1027-:7]:1] sv2v_tmp_89B17;
-			assign sv2v_tmp_89B17 = {pt[1027-:7] {1'sb0}};
-			always @(*) way_status[pt[1027-:7] - 1:0] = sv2v_tmp_89B17;
-			assign replace_way_mb_any[pt[1060-:7] - 1:0] = {pt[1060-:7] {1'sb0}};
-			assign way_status_hit_new[pt[1027-:7] - 1:0] = {pt[1027-:7] {1'sb0}};
-			assign way_status_rep_new[pt[1027-:7] - 1:0] = {pt[1027-:7] {1'sb0}};
-			assign way_status_new[pt[1027-:7] - 1:0] = {pt[1027-:7] {1'sb0}};
-			assign way_status_wr_en = 1'b0;
-			assign bus_wren[pt[1060-:7] - 1:0] = {pt[1060-:7] {1'sb0}};
-		end
-	endgenerate
-	assign ic_tag_valid[pt[1060-:7] - 1:0] = ic_tag_valid_unq[pt[1060-:7] - 1:0] & {pt[1060-:7] {~fetch_uncacheable_ff & ifc_fetch_req_f_raw}};
-	assign ic_debug_tag_val_rd_out = |((ic_tag_valid_unq[pt[1060-:7] - 1:0] & ic_debug_way_ff[pt[1060-:7] - 1:0]) & {pt[1060-:7] {ic_debug_rd_en_ff}});
-	assign ifu_pmu_ic_miss_in = ic_act_miss_f;
-	assign ifu_pmu_ic_hit_in = ic_act_hit_f;
-	assign ifu_pmu_bus_error_in = |ifc_bus_acc_fault_f;
-	assign ifu_pmu_bus_trxn_in = bus_cmd_sent;
-	assign ifu_pmu_bus_busy_in = (ifu_bus_arvalid_ff & ~ifu_bus_arready_ff) & miss_pending;
-	rvdffie #(.WIDTH(9)) ifu_pmu_sigs_ff(
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.clk(free_l2clk),
-		.din({ifc_fetch_uncacheable_bf, ifc_fetch_req_qual_bf, dma_sb_err_state, dec_tlu_fence_i_wb, ifu_pmu_ic_miss_in, ifu_pmu_ic_hit_in, ifu_pmu_bus_error_in, ifu_pmu_bus_busy_in, ifu_pmu_bus_trxn_in}),
-		.dout({fetch_uncacheable_ff, ifc_fetch_req_f_raw, dma_sb_err_state_ff, reset_all_tags, ifu_pmu_ic_miss, ifu_pmu_ic_hit, ifu_pmu_bus_error, ifu_pmu_bus_busy, ifu_pmu_bus_trxn})
-	);
-	assign ic_debug_addr[pt[1104-:9]:3] = dec_tlu_ic_diag_pkt[pt[1104-:9] - 1:2];
-	assign ic_debug_way_enc[1:0] = dec_tlu_ic_diag_pkt[17:16];
-	assign ic_debug_tag_array = dec_tlu_ic_diag_pkt[18];
-	assign ic_debug_rd_en = dec_tlu_ic_diag_pkt[1];
-	assign ic_debug_wr_en = dec_tlu_ic_diag_pkt[0];
-	assign ic_debug_way[pt[1060-:7] - 1:0] = {ic_debug_way_enc[1:0] == 2'b11, ic_debug_way_enc[1:0] == 2'b10, ic_debug_way_enc[1:0] == 2'b01, ic_debug_way_enc[1:0] == 2'b00};
-	assign ic_debug_tag_wr_en[pt[1060-:7] - 1:0] = {pt[1060-:7] {ic_debug_wr_en & ic_debug_tag_array}} & ic_debug_way[pt[1060-:7] - 1:0];
-	assign ic_debug_ict_array_sel_in = ic_debug_rd_en & ic_debug_tag_array;
-	rvdff_fpga #(.WIDTH(1 + pt[1060-:7])) ifu_debug_sel_ff(
-		.rst_l(rst_l),
-		.clk(debug_c1_clk),
-		.clken(debug_c1_clken),
-		.rawclk(clk),
-		.din({ic_debug_ict_array_sel_in, ic_debug_way[pt[1060-:7] - 1:0]}),
-		.dout({ic_debug_ict_array_sel_ff, ic_debug_way_ff[pt[1060-:7] - 1:0]})
-	);
-	assign debug_data_clken = ic_debug_rd_en_ff;
-	assign ifc_region_acc_okay = (((((((~(|{pt[530-:5], pt[525-:5], pt[520-:5], pt[515-:5], pt[510-:5], pt[505-:5], pt[500-:5], pt[495-:5]}) | (pt[530-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[490-:36]) == (pt[818-:36] | pt[490-:36])))) | (pt[525-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[454-:36]) == (pt[782-:36] | pt[454-:36])))) | (pt[520-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[418-:36]) == (pt[746-:36] | pt[418-:36])))) | (pt[515-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[382-:36]) == (pt[710-:36] | pt[382-:36])))) | (pt[510-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[346-:36]) == (pt[674-:36] | pt[346-:36])))) | (pt[505-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[310-:36]) == (pt[638-:36] | pt[310-:36])))) | (pt[500-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[274-:36]) == (pt[602-:36] | pt[274-:36])))) | (pt[495-:5] & (({ifc_fetch_addr_bf[31:1], 1'b0} | pt[238-:36]) == (pt[566-:36] | pt[238-:36])));
-	assign ifc_region_acc_fault_memory_bf = (~ifc_iccm_access_bf & ~ifc_region_acc_okay) & ifc_fetch_req_bf;
-	assign ifc_region_acc_fault_final_bf = ifc_region_acc_fault_bf | ifc_region_acc_fault_memory_bf;
-endmodule
-module eb1_lsu (
-	clk_override,
-	dec_tlu_flush_lower_r,
-	dec_tlu_i0_kill_writeb_r,
-	dec_tlu_force_halt,
-	dec_tlu_external_ldfwd_disable,
-	dec_tlu_wb_coalescing_disable,
-	dec_tlu_sideeffect_posted_disable,
-	dec_tlu_core_ecc_disable,
-	exu_lsu_rs1_d,
-	exu_lsu_rs2_d,
-	dec_lsu_offset_d,
-	lsu_p,
-	dec_lsu_valid_raw_d,
-	dec_tlu_mrac_ff,
-	lsu_result_m,
-	lsu_result_corr_r,
-	lsu_load_stall_any,
-	lsu_store_stall_any,
-	lsu_fastint_stall_any,
-	lsu_idle_any,
-	lsu_active,
-	lsu_fir_addr,
-	lsu_fir_error,
-	lsu_single_ecc_error_incr,
-	lsu_error_pkt_r,
-	lsu_imprecise_error_load_any,
-	lsu_imprecise_error_store_any,
-	lsu_imprecise_error_addr_any,
-	lsu_nonblock_load_valid_m,
-	lsu_nonblock_load_tag_m,
-	lsu_nonblock_load_inv_r,
-	lsu_nonblock_load_inv_tag_r,
-	lsu_nonblock_load_data_valid,
-	lsu_nonblock_load_data_error,
-	lsu_nonblock_load_data_tag,
-	lsu_nonblock_load_data,
-	lsu_pmu_load_external_m,
-	lsu_pmu_store_external_m,
-	lsu_pmu_misaligned_m,
-	lsu_pmu_bus_trxn,
-	lsu_pmu_bus_misaligned,
-	lsu_pmu_bus_error,
-	lsu_pmu_bus_busy,
-	trigger_pkt_any,
-	lsu_trigger_match_m,
-	dccm_wren,
-	dccm_rden,
-	dccm_wr_addr_lo,
-	dccm_wr_addr_hi,
-	dccm_rd_addr_lo,
-	dccm_rd_addr_hi,
-	dccm_wr_data_lo,
-	dccm_wr_data_hi,
-	dccm_rd_data_lo,
-	dccm_rd_data_hi,
-	picm_wren,
-	picm_rden,
-	picm_mken,
-	picm_rdaddr,
-	picm_wraddr,
-	picm_wr_data,
-	picm_rd_data,
-	lsu_axi_awvalid,
-	lsu_axi_awready,
-	lsu_axi_awid,
-	lsu_axi_awaddr,
-	lsu_axi_awregion,
-	lsu_axi_awlen,
-	lsu_axi_awsize,
-	lsu_axi_awburst,
-	lsu_axi_awlock,
-	lsu_axi_awcache,
-	lsu_axi_awprot,
-	lsu_axi_awqos,
-	lsu_axi_wvalid,
-	lsu_axi_wready,
-	lsu_axi_wdata,
-	lsu_axi_wstrb,
-	lsu_axi_wlast,
-	lsu_axi_bvalid,
-	lsu_axi_bready,
-	lsu_axi_bresp,
-	lsu_axi_bid,
-	lsu_axi_arvalid,
-	lsu_axi_arready,
-	lsu_axi_arid,
-	lsu_axi_araddr,
-	lsu_axi_arregion,
-	lsu_axi_arlen,
-	lsu_axi_arsize,
-	lsu_axi_arburst,
-	lsu_axi_arlock,
-	lsu_axi_arcache,
-	lsu_axi_arprot,
-	lsu_axi_arqos,
-	lsu_axi_rvalid,
-	lsu_axi_rready,
-	lsu_axi_rid,
-	lsu_axi_rdata,
-	lsu_axi_rresp,
-	lsu_axi_rlast,
-	lsu_bus_clk_en,
-	dma_dccm_req,
-	dma_mem_tag,
-	dma_mem_addr,
-	dma_mem_sz,
-	dma_mem_write,
-	dma_mem_wdata,
-	dccm_dma_rvalid,
-	dccm_dma_ecc_error,
-	dccm_dma_rtag,
-	dccm_dma_rdata,
-	dccm_ready,
-	scan_mode,
-	clk,
-	active_clk,
-	rst_l
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk_override;
-	input wire dec_tlu_flush_lower_r;
-	input wire dec_tlu_i0_kill_writeb_r;
-	input wire dec_tlu_force_halt;
-	input wire dec_tlu_external_ldfwd_disable;
-	input wire dec_tlu_wb_coalescing_disable;
-	input wire dec_tlu_sideeffect_posted_disable;
-	input wire dec_tlu_core_ecc_disable;
-	input wire [31:0] exu_lsu_rs1_d;
-	input wire [31:0] exu_lsu_rs2_d;
-	input wire [11:0] dec_lsu_offset_d;
-	input wire [13:0] lsu_p;
-	input wire dec_lsu_valid_raw_d;
-	input wire [31:0] dec_tlu_mrac_ff;
-	output wire [31:0] lsu_result_m;
-	output wire [31:0] lsu_result_corr_r;
-	output wire lsu_load_stall_any;
-	output wire lsu_store_stall_any;
-	output wire lsu_fastint_stall_any;
-	output wire lsu_idle_any;
-	output wire lsu_active;
-	output wire [31:1] lsu_fir_addr;
-	output wire [1:0] lsu_fir_error;
-	output wire lsu_single_ecc_error_incr;
-	output wire [39:0] lsu_error_pkt_r;
-	output wire lsu_imprecise_error_load_any;
-	output wire lsu_imprecise_error_store_any;
-	output wire [31:0] lsu_imprecise_error_addr_any;
-	output wire lsu_nonblock_load_valid_m;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_tag_m;
-	output wire lsu_nonblock_load_inv_r;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_inv_tag_r;
-	output wire lsu_nonblock_load_data_valid;
-	output wire lsu_nonblock_load_data_error;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_data_tag;
-	output wire [31:0] lsu_nonblock_load_data;
-	output wire lsu_pmu_load_external_m;
-	output wire lsu_pmu_store_external_m;
-	output wire lsu_pmu_misaligned_m;
-	output wire lsu_pmu_bus_trxn;
-	output wire lsu_pmu_bus_misaligned;
-	output wire lsu_pmu_bus_error;
-	output wire lsu_pmu_bus_busy;
-	input wire [151:0] trigger_pkt_any;
-	output wire [3:0] lsu_trigger_match_m;
-	output wire dccm_wren;
-	output wire dccm_rden;
-	output wire [pt[1398-:9] - 1:0] dccm_wr_addr_lo;
-	output wire [pt[1398-:9] - 1:0] dccm_wr_addr_hi;
-	output wire [pt[1398-:9] - 1:0] dccm_rd_addr_lo;
-	output wire [pt[1398-:9] - 1:0] dccm_rd_addr_hi;
-	output wire [pt[1360-:10] - 1:0] dccm_wr_data_lo;
-	output wire [pt[1360-:10] - 1:0] dccm_wr_data_hi;
-	input wire [pt[1360-:10] - 1:0] dccm_rd_data_lo;
-	input wire [pt[1360-:10] - 1:0] dccm_rd_data_hi;
-	output wire picm_wren;
-	output wire picm_rden;
-	output wire picm_mken;
-	output wire [31:0] picm_rdaddr;
-	output wire [31:0] picm_wraddr;
-	output wire [31:0] picm_wr_data;
-	input wire [31:0] picm_rd_data;
-	output wire lsu_axi_awvalid;
-	input wire lsu_axi_awready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_awid;
-	output wire [31:0] lsu_axi_awaddr;
-	output wire [3:0] lsu_axi_awregion;
-	output wire [7:0] lsu_axi_awlen;
-	output wire [2:0] lsu_axi_awsize;
-	output wire [1:0] lsu_axi_awburst;
-	output wire lsu_axi_awlock;
-	output wire [3:0] lsu_axi_awcache;
-	output wire [2:0] lsu_axi_awprot;
-	output wire [3:0] lsu_axi_awqos;
-	output wire lsu_axi_wvalid;
-	input wire lsu_axi_wready;
-	output wire [63:0] lsu_axi_wdata;
-	output wire [7:0] lsu_axi_wstrb;
-	output wire lsu_axi_wlast;
-	input wire lsu_axi_bvalid;
-	output wire lsu_axi_bready;
-	input wire [1:0] lsu_axi_bresp;
-	input wire [pt[181-:8] - 1:0] lsu_axi_bid;
-	output wire lsu_axi_arvalid;
-	input wire lsu_axi_arready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_arid;
-	output wire [31:0] lsu_axi_araddr;
-	output wire [3:0] lsu_axi_arregion;
-	output wire [7:0] lsu_axi_arlen;
-	output wire [2:0] lsu_axi_arsize;
-	output wire [1:0] lsu_axi_arburst;
-	output wire lsu_axi_arlock;
-	output wire [3:0] lsu_axi_arcache;
-	output wire [2:0] lsu_axi_arprot;
-	output wire [3:0] lsu_axi_arqos;
-	input wire lsu_axi_rvalid;
-	output wire lsu_axi_rready;
-	input wire [pt[181-:8] - 1:0] lsu_axi_rid;
-	input wire [63:0] lsu_axi_rdata;
-	input wire [1:0] lsu_axi_rresp;
-	input wire lsu_axi_rlast;
-	input wire lsu_bus_clk_en;
-	input wire dma_dccm_req;
-	input wire [2:0] dma_mem_tag;
-	input wire [31:0] dma_mem_addr;
-	input wire [2:0] dma_mem_sz;
-	input wire dma_mem_write;
-	input wire [63:0] dma_mem_wdata;
-	output wire dccm_dma_rvalid;
-	output wire dccm_dma_ecc_error;
-	output wire [2:0] dccm_dma_rtag;
-	output wire [63:0] dccm_dma_rdata;
-	output wire dccm_ready;
-	input wire scan_mode;
-	input wire clk;
-	input wire active_clk;
-	input wire rst_l;
-	wire lsu_dccm_rden_m;
-	wire lsu_dccm_rden_r;
-	wire [31:0] store_data_m;
-	wire [31:0] store_data_r;
-	wire [31:0] store_data_hi_r;
-	wire [31:0] store_data_lo_r;
-	wire [31:0] store_datafn_hi_r;
-	wire [31:0] store_datafn_lo_r;
-	wire [31:0] sec_data_lo_m;
-	wire [31:0] sec_data_hi_m;
-	wire [31:0] sec_data_lo_r;
-	wire [31:0] sec_data_hi_r;
-	wire [31:0] lsu_ld_data_m;
-	wire [31:0] dccm_rdata_hi_m;
-	wire [31:0] dccm_rdata_lo_m;
-	wire [6:0] dccm_data_ecc_hi_m;
-	wire [6:0] dccm_data_ecc_lo_m;
-	wire lsu_single_ecc_error_m;
-	wire lsu_double_ecc_error_m;
-	wire [31:0] lsu_ld_data_r;
-	wire [31:0] lsu_ld_data_corr_r;
-	wire [31:0] dccm_rdata_hi_r;
-	wire [31:0] dccm_rdata_lo_r;
-	wire [6:0] dccm_data_ecc_hi_r;
-	wire [6:0] dccm_data_ecc_lo_r;
-	wire single_ecc_error_hi_r;
-	wire single_ecc_error_lo_r;
-	wire lsu_single_ecc_error_r;
-	wire lsu_double_ecc_error_r;
-	wire ld_single_ecc_error_r;
-	wire ld_single_ecc_error_r_ff;
-	wire [31:0] picm_mask_data_m;
-	wire [31:0] lsu_addr_d;
-	wire [31:0] lsu_addr_m;
-	wire [31:0] lsu_addr_r;
-	wire [31:0] end_addr_d;
-	wire [31:0] end_addr_m;
-	wire [31:0] end_addr_r;
-	wire [13:0] lsu_pkt_d;
-	wire [13:0] lsu_pkt_m;
-	wire [13:0] lsu_pkt_r;
-	wire lsu_i0_valid_d;
-	wire lsu_i0_valid_m;
-	wire lsu_i0_valid_r;
-	wire store_stbuf_reqvld_r;
-	wire ldst_stbuf_reqvld_r;
-	wire lsu_commit_r;
-	wire lsu_exc_m;
-	wire addr_in_dccm_d;
-	wire addr_in_dccm_m;
-	wire addr_in_dccm_r;
-	wire addr_in_pic_d;
-	wire addr_in_pic_m;
-	wire addr_in_pic_r;
-	wire ldst_dual_d;
-	wire ldst_dual_m;
-	wire ldst_dual_r;
-	wire addr_external_m;
-	wire stbuf_reqvld_any;
-	wire stbuf_reqvld_flushed_any;
-	wire [pt[157-:9] - 1:0] stbuf_addr_any;
-	wire [pt[1382-:10] - 1:0] stbuf_data_any;
-	wire [pt[1372-:7] - 1:0] stbuf_ecc_any;
-	wire [pt[1382-:10] - 1:0] sec_data_lo_r_ff;
-	wire [pt[1382-:10] - 1:0] sec_data_hi_r_ff;
-	wire [pt[1372-:7] - 1:0] sec_data_ecc_hi_r_ff;
-	wire [pt[1372-:7] - 1:0] sec_data_ecc_lo_r_ff;
-	wire lsu_cmpen_m;
-	wire [pt[1382-:10] - 1:0] stbuf_fwddata_hi_m;
-	wire [pt[1382-:10] - 1:0] stbuf_fwddata_lo_m;
-	wire [pt[1389-:7] - 1:0] stbuf_fwdbyteen_hi_m;
-	wire [pt[1389-:7] - 1:0] stbuf_fwdbyteen_lo_m;
-	wire lsu_stbuf_commit_any;
-	wire lsu_stbuf_empty_any;
-	wire lsu_stbuf_full_any;
-	wire lsu_busreq_r;
-	wire lsu_bus_buffer_pend_any;
-	wire lsu_bus_buffer_empty_any;
-	wire lsu_bus_buffer_full_any;
-	wire lsu_busreq_m;
-	wire [31:0] bus_read_data_m;
-	wire flush_m_up;
-	wire flush_r;
-	wire is_sideeffects_m;
-	wire [2:0] dma_mem_tag_d;
-	wire [2:0] dma_mem_tag_m;
-	wire ldst_nodma_mtor;
-	wire dma_dccm_wen;
-	wire dma_pic_wen;
-	wire [31:0] dma_dccm_wdata_lo;
-	wire [31:0] dma_dccm_wdata_hi;
-	wire [pt[1372-:7] - 1:0] dma_dccm_wdata_ecc_lo;
-	wire [pt[1372-:7] - 1:0] dma_dccm_wdata_ecc_hi;
-	wire lsu_busm_clken;
-	wire lsu_bus_obuf_c1_clken;
-	wire lsu_c1_m_clk;
-	wire lsu_c1_r_clk;
-	wire lsu_c2_m_clk;
-	wire lsu_c2_r_clk;
-	wire lsu_store_c1_m_clk;
-	wire lsu_store_c1_r_clk;
-	wire lsu_stbuf_c1_clk;
-	wire lsu_bus_ibuf_c1_clk;
-	wire lsu_bus_obuf_c1_clk;
-	wire lsu_bus_buf_c1_clk;
-	wire lsu_busm_clk;
-	wire lsu_free_c2_clk;
-	wire lsu_raw_fwd_lo_m;
-	wire lsu_raw_fwd_hi_m;
-	wire lsu_raw_fwd_lo_r;
-	wire lsu_raw_fwd_hi_r;
-	assign lsu_raw_fwd_lo_m = |stbuf_fwdbyteen_lo_m[pt[1389-:7] - 1:0];
-	assign lsu_raw_fwd_hi_m = |stbuf_fwdbyteen_hi_m[pt[1389-:7] - 1:0];
-	eb1_lsu_lsc_ctl #(.pt(pt)) lsu_lsc_ctl(
-		.rst_l(rst_l),
-		.clk_override(clk_override),
-		.clk(clk),
-		.lsu_c1_m_clk(lsu_c1_m_clk),
-		.lsu_c1_r_clk(lsu_c1_r_clk),
-		.lsu_c2_m_clk(lsu_c2_m_clk),
-		.lsu_c2_r_clk(lsu_c2_r_clk),
-		.lsu_store_c1_m_clk(lsu_store_c1_m_clk),
-		.lsu_ld_data_r(lsu_ld_data_r),
-		.lsu_ld_data_corr_r(lsu_ld_data_corr_r),
-		.lsu_single_ecc_error_r(lsu_single_ecc_error_r),
-		.lsu_double_ecc_error_r(lsu_double_ecc_error_r),
-		.lsu_ld_data_m(lsu_ld_data_m),
-		.lsu_single_ecc_error_m(lsu_single_ecc_error_m),
-		.lsu_double_ecc_error_m(lsu_double_ecc_error_m),
-		.flush_m_up(flush_m_up),
-		.flush_r(flush_r),
-		.ldst_dual_d(ldst_dual_d),
-		.ldst_dual_m(ldst_dual_m),
-		.ldst_dual_r(ldst_dual_r),
-		.exu_lsu_rs1_d(exu_lsu_rs1_d),
-		.exu_lsu_rs2_d(exu_lsu_rs2_d),
-		.lsu_p(lsu_p),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.dec_lsu_offset_d(dec_lsu_offset_d),
-		.picm_mask_data_m(picm_mask_data_m),
-		.bus_read_data_m(bus_read_data_m),
-		.lsu_result_m(lsu_result_m),
-		.lsu_result_corr_r(lsu_result_corr_r),
-		.lsu_addr_d(lsu_addr_d),
-		.lsu_addr_m(lsu_addr_m),
-		.lsu_addr_r(lsu_addr_r),
-		.end_addr_d(end_addr_d),
-		.end_addr_m(end_addr_m),
-		.end_addr_r(end_addr_r),
-		.store_data_m(store_data_m),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.lsu_exc_m(lsu_exc_m),
-		.is_sideeffects_m(is_sideeffects_m),
-		.lsu_commit_r(lsu_commit_r),
-		.lsu_single_ecc_error_incr(lsu_single_ecc_error_incr),
-		.lsu_error_pkt_r(lsu_error_pkt_r),
-		.lsu_fir_addr(lsu_fir_addr),
-		.lsu_fir_error(lsu_fir_error),
-		.addr_in_dccm_d(addr_in_dccm_d),
-		.addr_in_dccm_m(addr_in_dccm_m),
-		.addr_in_dccm_r(addr_in_dccm_r),
-		.addr_in_pic_d(addr_in_pic_d),
-		.addr_in_pic_m(addr_in_pic_m),
-		.addr_in_pic_r(addr_in_pic_r),
-		.addr_external_m(addr_external_m),
-		.dma_dccm_req(dma_dccm_req),
-		.dma_mem_addr(dma_mem_addr),
-		.dma_mem_sz(dma_mem_sz),
-		.dma_mem_write(dma_mem_write),
-		.dma_mem_wdata(dma_mem_wdata),
-		.lsu_pkt_d(lsu_pkt_d),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_r(lsu_pkt_r),
-		.scan_mode(scan_mode)
-	);
-	assign lsu_store_stall_any = (lsu_stbuf_full_any | lsu_bus_buffer_full_any) | ld_single_ecc_error_r_ff;
-	assign lsu_load_stall_any = lsu_bus_buffer_full_any | ld_single_ecc_error_r_ff;
-	assign lsu_fastint_stall_any = ld_single_ecc_error_r;
-	assign dma_mem_tag_d[2:0] = dma_mem_tag[2:0];
-	assign ldst_nodma_mtor = ((lsu_pkt_m[0] & ~lsu_pkt_m[4]) & (addr_in_dccm_m | addr_in_pic_m)) & lsu_pkt_m[6];
-	assign dccm_ready = ~((dec_lsu_valid_raw_d | ldst_nodma_mtor) | ld_single_ecc_error_r_ff);
-	assign dma_dccm_wen = ((dma_dccm_req & dma_mem_write) & addr_in_dccm_d) & dma_mem_sz[1];
-	assign dma_pic_wen = (dma_dccm_req & dma_mem_write) & addr_in_pic_d;
-	assign {dma_dccm_wdata_hi[31:0], dma_dccm_wdata_lo[31:0]} = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};
-	assign flush_m_up = dec_tlu_flush_lower_r;
-	assign flush_r = dec_tlu_i0_kill_writeb_r;
-	assign lsu_idle_any = ~((lsu_pkt_m[0] & ~lsu_pkt_m[4]) | (lsu_pkt_r[0] & ~lsu_pkt_r[4])) & lsu_bus_buffer_empty_any;
-	assign lsu_active = ((lsu_pkt_m[0] | lsu_pkt_r[0]) | ld_single_ecc_error_r_ff) | ~lsu_bus_buffer_empty_any;
-	assign store_stbuf_reqvld_r = (((lsu_pkt_r[0] & lsu_pkt_r[6]) & addr_in_dccm_r) & ~flush_r) & (~lsu_pkt_r[4] | ((lsu_pkt_r[11] | lsu_pkt_r[10]) & ~lsu_double_ecc_error_r));
-	assign lsu_cmpen_m = (lsu_pkt_m[0] & (lsu_pkt_m[7] | lsu_pkt_m[6])) & (addr_in_dccm_m | addr_in_pic_m);
-	assign lsu_busreq_m = (((lsu_pkt_m[0] & ((lsu_pkt_m[7] | lsu_pkt_m[6]) & addr_external_m)) & ~flush_m_up) & ~lsu_exc_m) & ~lsu_pkt_m[13];
-	assign ldst_dual_d = lsu_addr_d[2] != end_addr_d[2];
-	assign ldst_dual_m = lsu_addr_m[2] != end_addr_m[2];
-	assign ldst_dual_r = lsu_addr_r[2] != end_addr_r[2];
-	assign lsu_pmu_misaligned_m = lsu_pkt_m[0] & ((lsu_pkt_m[10] & lsu_addr_m[0]) | (lsu_pkt_m[9] & |lsu_addr_m[1:0]));
-	assign lsu_pmu_load_external_m = (lsu_pkt_m[0] & lsu_pkt_m[7]) & addr_external_m;
-	assign lsu_pmu_store_external_m = (lsu_pkt_m[0] & lsu_pkt_m[6]) & addr_external_m;
-	eb1_lsu_dccm_ctl #(.pt(pt)) dccm_ctl(
-		.lsu_addr_d(lsu_addr_d[31:0]),
-		.end_addr_d(end_addr_d[pt[1398-:9] - 1:0]),
-		.lsu_addr_m(lsu_addr_m[pt[1398-:9] - 1:0]),
-		.lsu_addr_r(lsu_addr_r[31:0]),
-		.end_addr_m(end_addr_m[pt[1398-:9] - 1:0]),
-		.end_addr_r(end_addr_r[pt[1398-:9] - 1:0]),
-		.lsu_c2_m_clk(lsu_c2_m_clk),
-		.lsu_c2_r_clk(lsu_c2_r_clk),
-		.lsu_c1_r_clk(lsu_c1_r_clk),
-		.lsu_store_c1_r_clk(lsu_store_c1_r_clk),
-		.lsu_free_c2_clk(lsu_free_c2_clk),
-		.clk_override(clk_override),
-		.clk(clk),
-		.rst_l(rst_l),
-		.lsu_pkt_r(lsu_pkt_r),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_d(lsu_pkt_d),
-		.addr_in_dccm_d(addr_in_dccm_d),
-		.addr_in_pic_d(addr_in_pic_d),
-		.addr_in_pic_m(addr_in_pic_m),
-		.addr_in_dccm_m(addr_in_dccm_m),
-		.addr_in_dccm_r(addr_in_dccm_r),
-		.addr_in_pic_r(addr_in_pic_r),
-		.lsu_raw_fwd_lo_r(lsu_raw_fwd_lo_r),
-		.lsu_raw_fwd_hi_r(lsu_raw_fwd_hi_r),
-		.lsu_commit_r(lsu_commit_r),
-		.ldst_dual_m(ldst_dual_m),
-		.ldst_dual_r(ldst_dual_r),
-		.stbuf_reqvld_any(stbuf_reqvld_any),
-		.stbuf_addr_any(stbuf_addr_any),
-		.stbuf_data_any(stbuf_data_any),
-		.stbuf_ecc_any(stbuf_ecc_any),
-		.stbuf_fwddata_hi_m(stbuf_fwddata_hi_m),
-		.stbuf_fwddata_lo_m(stbuf_fwddata_lo_m),
-		.stbuf_fwdbyteen_hi_m(stbuf_fwdbyteen_hi_m),
-		.stbuf_fwdbyteen_lo_m(stbuf_fwdbyteen_lo_m),
-		.dccm_rdata_hi_r(dccm_rdata_hi_r),
-		.dccm_rdata_lo_r(dccm_rdata_lo_r),
-		.dccm_data_ecc_hi_r(dccm_data_ecc_hi_r),
-		.dccm_data_ecc_lo_r(dccm_data_ecc_lo_r),
-		.lsu_ld_data_r(lsu_ld_data_r),
-		.lsu_ld_data_corr_r(lsu_ld_data_corr_r),
-		.lsu_double_ecc_error_r(lsu_double_ecc_error_r),
-		.single_ecc_error_hi_r(single_ecc_error_hi_r),
-		.single_ecc_error_lo_r(single_ecc_error_lo_r),
-		.sec_data_hi_r(sec_data_hi_r),
-		.sec_data_lo_r(sec_data_lo_r),
-		.sec_data_hi_r_ff(sec_data_hi_r_ff),
-		.sec_data_lo_r_ff(sec_data_lo_r_ff),
-		.sec_data_ecc_hi_r_ff(sec_data_ecc_hi_r_ff),
-		.sec_data_ecc_lo_r_ff(sec_data_ecc_lo_r_ff),
-		.dccm_rdata_hi_m(dccm_rdata_hi_m),
-		.dccm_rdata_lo_m(dccm_rdata_lo_m),
-		.dccm_data_ecc_hi_m(dccm_data_ecc_hi_m),
-		.dccm_data_ecc_lo_m(dccm_data_ecc_lo_m),
-		.lsu_ld_data_m(lsu_ld_data_m),
-		.lsu_double_ecc_error_m(lsu_double_ecc_error_m),
-		.sec_data_hi_m(sec_data_hi_m),
-		.sec_data_lo_m(sec_data_lo_m),
-		.store_data_m(store_data_m),
-		.dma_dccm_wen(dma_dccm_wen),
-		.dma_pic_wen(dma_pic_wen),
-		.dma_mem_tag_m(dma_mem_tag_m),
-		.dma_mem_addr(dma_mem_addr),
-		.dma_mem_wdata(dma_mem_wdata),
-		.dma_dccm_wdata_lo(dma_dccm_wdata_lo),
-		.dma_dccm_wdata_hi(dma_dccm_wdata_hi),
-		.dma_dccm_wdata_ecc_hi(dma_dccm_wdata_ecc_hi),
-		.dma_dccm_wdata_ecc_lo(dma_dccm_wdata_ecc_lo),
-		.store_data_hi_r(store_data_hi_r),
-		.store_data_lo_r(store_data_lo_r),
-		.store_datafn_hi_r(store_datafn_hi_r),
-		.store_datafn_lo_r(store_datafn_lo_r),
-		.store_data_r(store_data_r),
-		.ld_single_ecc_error_r(ld_single_ecc_error_r),
-		.ld_single_ecc_error_r_ff(ld_single_ecc_error_r_ff),
-		.picm_mask_data_m(picm_mask_data_m),
-		.lsu_stbuf_commit_any(lsu_stbuf_commit_any),
-		.lsu_dccm_rden_m(lsu_dccm_rden_m),
-		.lsu_dccm_rden_r(lsu_dccm_rden_r),
-		.dccm_dma_rvalid(dccm_dma_rvalid),
-		.dccm_dma_ecc_error(dccm_dma_ecc_error),
-		.dccm_dma_rtag(dccm_dma_rtag),
-		.dccm_dma_rdata(dccm_dma_rdata),
-		.dccm_wren(dccm_wren),
-		.dccm_rden(dccm_rden),
-		.dccm_wr_addr_lo(dccm_wr_addr_lo),
-		.dccm_wr_addr_hi(dccm_wr_addr_hi),
-		.dccm_rd_addr_lo(dccm_rd_addr_lo),
-		.dccm_rd_addr_hi(dccm_rd_addr_hi),
-		.dccm_wr_data_lo(dccm_wr_data_lo),
-		.dccm_wr_data_hi(dccm_wr_data_hi),
-		.dccm_rd_data_lo(dccm_rd_data_lo),
-		.dccm_rd_data_hi(dccm_rd_data_hi),
-		.picm_wren(picm_wren),
-		.picm_rden(picm_rden),
-		.picm_mken(picm_mken),
-		.picm_rdaddr(picm_rdaddr),
-		.picm_wraddr(picm_wraddr),
-		.picm_wr_data(picm_wr_data),
-		.picm_rd_data(picm_rd_data),
-		.scan_mode(scan_mode)
-	);
-	eb1_lsu_stbuf #(.pt(pt)) stbuf(
-		.lsu_addr_d(lsu_addr_d[pt[157-:9] - 1:0]),
-		.end_addr_d(end_addr_d[pt[157-:9] - 1:0]),
-		.clk(clk),
-		.rst_l(rst_l),
-		.lsu_stbuf_c1_clk(lsu_stbuf_c1_clk),
-		.lsu_free_c2_clk(lsu_free_c2_clk),
-		.store_stbuf_reqvld_r(store_stbuf_reqvld_r),
-		.lsu_commit_r(lsu_commit_r),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.store_data_hi_r(store_data_hi_r),
-		.store_data_lo_r(store_data_lo_r),
-		.store_datafn_hi_r(store_datafn_hi_r),
-		.store_datafn_lo_r(store_datafn_lo_r),
-		.stbuf_reqvld_any(stbuf_reqvld_any),
-		.stbuf_reqvld_flushed_any(stbuf_reqvld_flushed_any),
-		.stbuf_addr_any(stbuf_addr_any),
-		.stbuf_data_any(stbuf_data_any),
-		.lsu_stbuf_commit_any(lsu_stbuf_commit_any),
-		.lsu_stbuf_full_any(lsu_stbuf_full_any),
-		.lsu_stbuf_empty_any(lsu_stbuf_empty_any),
-		.ldst_stbuf_reqvld_r(ldst_stbuf_reqvld_r),
-		.lsu_addr_m(lsu_addr_m),
-		.lsu_addr_r(lsu_addr_r),
-		.end_addr_m(end_addr_m),
-		.end_addr_r(end_addr_r),
-		.ldst_dual_d(ldst_dual_d),
-		.ldst_dual_m(ldst_dual_m),
-		.ldst_dual_r(ldst_dual_r),
-		.addr_in_dccm_m(addr_in_dccm_m),
-		.addr_in_dccm_r(addr_in_dccm_r),
-		.lsu_cmpen_m(lsu_cmpen_m),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_r(lsu_pkt_r),
-		.stbuf_fwddata_hi_m(stbuf_fwddata_hi_m),
-		.stbuf_fwddata_lo_m(stbuf_fwddata_lo_m),
-		.stbuf_fwdbyteen_hi_m(stbuf_fwdbyteen_hi_m),
-		.stbuf_fwdbyteen_lo_m(stbuf_fwdbyteen_lo_m),
-		.scan_mode(scan_mode)
-	);
-	eb1_lsu_ecc #(.pt(pt)) ecc(
-		.lsu_addr_r(lsu_addr_r[pt[1398-:9] - 1:0]),
-		.end_addr_r(end_addr_r[pt[1398-:9] - 1:0]),
-		.lsu_addr_m(lsu_addr_m[pt[1398-:9] - 1:0]),
-		.end_addr_m(end_addr_m[pt[1398-:9] - 1:0]),
-		.clk(clk),
-		.lsu_c2_r_clk(lsu_c2_r_clk),
-		.clk_override(clk_override),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_r(lsu_pkt_r),
-		.stbuf_data_any(stbuf_data_any),
-		.dec_tlu_core_ecc_disable(dec_tlu_core_ecc_disable),
-		.lsu_dccm_rden_r(lsu_dccm_rden_r),
-		.addr_in_dccm_r(addr_in_dccm_r),
-		.dccm_rdata_hi_r(dccm_rdata_hi_r),
-		.dccm_rdata_lo_r(dccm_rdata_lo_r),
-		.dccm_data_ecc_hi_r(dccm_data_ecc_hi_r),
-		.dccm_data_ecc_lo_r(dccm_data_ecc_lo_r),
-		.sec_data_hi_r(sec_data_hi_r),
-		.sec_data_lo_r(sec_data_lo_r),
-		.sec_data_hi_r_ff(sec_data_hi_r_ff),
-		.sec_data_lo_r_ff(sec_data_lo_r_ff),
-		.ld_single_ecc_error_r(ld_single_ecc_error_r),
-		.ld_single_ecc_error_r_ff(ld_single_ecc_error_r_ff),
-		.lsu_dccm_rden_m(lsu_dccm_rden_m),
-		.addr_in_dccm_m(addr_in_dccm_m),
-		.dccm_rdata_hi_m(dccm_rdata_hi_m),
-		.dccm_rdata_lo_m(dccm_rdata_lo_m),
-		.dccm_data_ecc_hi_m(dccm_data_ecc_hi_m),
-		.dccm_data_ecc_lo_m(dccm_data_ecc_lo_m),
-		.sec_data_hi_m(sec_data_hi_m),
-		.sec_data_lo_m(sec_data_lo_m),
-		.dma_dccm_wen(dma_dccm_wen),
-		.dma_dccm_wdata_lo(dma_dccm_wdata_lo),
-		.dma_dccm_wdata_hi(dma_dccm_wdata_hi),
-		.dma_dccm_wdata_ecc_hi(dma_dccm_wdata_ecc_hi),
-		.dma_dccm_wdata_ecc_lo(dma_dccm_wdata_ecc_lo),
-		.stbuf_ecc_any(stbuf_ecc_any),
-		.sec_data_ecc_hi_r_ff(sec_data_ecc_hi_r_ff),
-		.sec_data_ecc_lo_r_ff(sec_data_ecc_lo_r_ff),
-		.single_ecc_error_hi_r(single_ecc_error_hi_r),
-		.single_ecc_error_lo_r(single_ecc_error_lo_r),
-		.lsu_single_ecc_error_r(lsu_single_ecc_error_r),
-		.lsu_double_ecc_error_r(lsu_double_ecc_error_r),
-		.lsu_single_ecc_error_m(lsu_single_ecc_error_m),
-		.lsu_double_ecc_error_m(lsu_double_ecc_error_m)
-	);
-	eb1_lsu_trigger #(.pt(pt)) trigger(
-		.store_data_m(store_data_m[31:0]),
-		.trigger_pkt_any(trigger_pkt_any),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_addr_m(lsu_addr_m),
-		.lsu_trigger_match_m(lsu_trigger_match_m)
-	);
-	eb1_lsu_clkdomain #(.pt(pt)) clkdomain(
-		.clk(clk),
-		.active_clk(active_clk),
-		.rst_l(rst_l),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.clk_override(clk_override),
-		.dma_dccm_req(dma_dccm_req),
-		.ldst_stbuf_reqvld_r(ldst_stbuf_reqvld_r),
-		.stbuf_reqvld_any(stbuf_reqvld_any),
-		.stbuf_reqvld_flushed_any(stbuf_reqvld_flushed_any),
-		.lsu_busreq_r(lsu_busreq_r),
-		.lsu_bus_buffer_pend_any(lsu_bus_buffer_pend_any),
-		.lsu_bus_buffer_empty_any(lsu_bus_buffer_empty_any),
-		.lsu_stbuf_empty_any(lsu_stbuf_empty_any),
-		.lsu_bus_clk_en(lsu_bus_clk_en),
-		.lsu_p(lsu_p),
-		.lsu_pkt_d(lsu_pkt_d),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_r(lsu_pkt_r),
-		.lsu_bus_obuf_c1_clken(lsu_bus_obuf_c1_clken),
-		.lsu_busm_clken(lsu_busm_clken),
-		.lsu_c1_m_clk(lsu_c1_m_clk),
-		.lsu_c1_r_clk(lsu_c1_r_clk),
-		.lsu_c2_m_clk(lsu_c2_m_clk),
-		.lsu_c2_r_clk(lsu_c2_r_clk),
-		.lsu_store_c1_m_clk(lsu_store_c1_m_clk),
-		.lsu_store_c1_r_clk(lsu_store_c1_r_clk),
-		.lsu_stbuf_c1_clk(lsu_stbuf_c1_clk),
-		.lsu_bus_obuf_c1_clk(lsu_bus_obuf_c1_clk),
-		.lsu_bus_ibuf_c1_clk(lsu_bus_ibuf_c1_clk),
-		.lsu_bus_buf_c1_clk(lsu_bus_buf_c1_clk),
-		.lsu_busm_clk(lsu_busm_clk),
-		.lsu_free_c2_clk(lsu_free_c2_clk),
-		.scan_mode(scan_mode)
-	);
-	eb1_lsu_bus_intf #(.pt(pt)) bus_intf(
-		.lsu_addr_m(lsu_addr_m[31:0] & {32 {addr_external_m & lsu_pkt_m[0]}}),
-		.lsu_addr_r(lsu_addr_r[31:0] & {32 {lsu_busreq_r}}),
-		.end_addr_m(end_addr_m[31:0] & {32 {addr_external_m & lsu_pkt_m[0]}}),
-		.end_addr_r(end_addr_r[31:0] & {32 {lsu_busreq_r}}),
-		.store_data_r(store_data_r[31:0] & {32 {lsu_busreq_r}}),
-		.clk(clk),
-		.clk_override(clk_override),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.dec_tlu_external_ldfwd_disable(dec_tlu_external_ldfwd_disable),
-		.dec_tlu_wb_coalescing_disable(dec_tlu_wb_coalescing_disable),
-		.dec_tlu_sideeffect_posted_disable(dec_tlu_sideeffect_posted_disable),
-		.lsu_bus_obuf_c1_clken(lsu_bus_obuf_c1_clken),
-		.lsu_busm_clken(lsu_busm_clken),
-		.lsu_c1_r_clk(lsu_c1_r_clk),
-		.lsu_c2_r_clk(lsu_c2_r_clk),
-		.lsu_bus_ibuf_c1_clk(lsu_bus_ibuf_c1_clk),
-		.lsu_bus_obuf_c1_clk(lsu_bus_obuf_c1_clk),
-		.lsu_bus_buf_c1_clk(lsu_bus_buf_c1_clk),
-		.lsu_free_c2_clk(lsu_free_c2_clk),
-		.active_clk(active_clk),
-		.lsu_busm_clk(lsu_busm_clk),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.lsu_busreq_m(lsu_busreq_m),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_r(lsu_pkt_r),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.lsu_commit_r(lsu_commit_r),
-		.is_sideeffects_m(is_sideeffects_m),
-		.flush_m_up(flush_m_up),
-		.flush_r(flush_r),
-		.ldst_dual_d(ldst_dual_d),
-		.ldst_dual_m(ldst_dual_m),
-		.ldst_dual_r(ldst_dual_r),
-		.lsu_busreq_r(lsu_busreq_r),
-		.lsu_bus_buffer_pend_any(lsu_bus_buffer_pend_any),
-		.lsu_bus_buffer_full_any(lsu_bus_buffer_full_any),
-		.lsu_bus_buffer_empty_any(lsu_bus_buffer_empty_any),
-		.bus_read_data_m(bus_read_data_m),
-		.lsu_imprecise_error_load_any(lsu_imprecise_error_load_any),
-		.lsu_imprecise_error_store_any(lsu_imprecise_error_store_any),
-		.lsu_imprecise_error_addr_any(lsu_imprecise_error_addr_any),
-		.lsu_nonblock_load_valid_m(lsu_nonblock_load_valid_m),
-		.lsu_nonblock_load_tag_m(lsu_nonblock_load_tag_m),
-		.lsu_nonblock_load_inv_r(lsu_nonblock_load_inv_r),
-		.lsu_nonblock_load_inv_tag_r(lsu_nonblock_load_inv_tag_r),
-		.lsu_nonblock_load_data_valid(lsu_nonblock_load_data_valid),
-		.lsu_nonblock_load_data_error(lsu_nonblock_load_data_error),
-		.lsu_nonblock_load_data_tag(lsu_nonblock_load_data_tag),
-		.lsu_nonblock_load_data(lsu_nonblock_load_data),
-		.lsu_pmu_bus_trxn(lsu_pmu_bus_trxn),
-		.lsu_pmu_bus_misaligned(lsu_pmu_bus_misaligned),
-		.lsu_pmu_bus_error(lsu_pmu_bus_error),
-		.lsu_pmu_bus_busy(lsu_pmu_bus_busy),
-		.lsu_axi_awvalid(lsu_axi_awvalid),
-		.lsu_axi_awready(lsu_axi_awready),
-		.lsu_axi_awid(lsu_axi_awid),
-		.lsu_axi_awaddr(lsu_axi_awaddr),
-		.lsu_axi_awregion(lsu_axi_awregion),
-		.lsu_axi_awlen(lsu_axi_awlen),
-		.lsu_axi_awsize(lsu_axi_awsize),
-		.lsu_axi_awburst(lsu_axi_awburst),
-		.lsu_axi_awlock(lsu_axi_awlock),
-		.lsu_axi_awcache(lsu_axi_awcache),
-		.lsu_axi_awprot(lsu_axi_awprot),
-		.lsu_axi_awqos(lsu_axi_awqos),
-		.lsu_axi_wvalid(lsu_axi_wvalid),
-		.lsu_axi_wready(lsu_axi_wready),
-		.lsu_axi_wdata(lsu_axi_wdata),
-		.lsu_axi_wstrb(lsu_axi_wstrb),
-		.lsu_axi_wlast(lsu_axi_wlast),
-		.lsu_axi_bvalid(lsu_axi_bvalid),
-		.lsu_axi_bready(lsu_axi_bready),
-		.lsu_axi_bresp(lsu_axi_bresp),
-		.lsu_axi_bid(lsu_axi_bid),
-		.lsu_axi_arvalid(lsu_axi_arvalid),
-		.lsu_axi_arready(lsu_axi_arready),
-		.lsu_axi_arid(lsu_axi_arid),
-		.lsu_axi_araddr(lsu_axi_araddr),
-		.lsu_axi_arregion(lsu_axi_arregion),
-		.lsu_axi_arlen(lsu_axi_arlen),
-		.lsu_axi_arsize(lsu_axi_arsize),
-		.lsu_axi_arburst(lsu_axi_arburst),
-		.lsu_axi_arlock(lsu_axi_arlock),
-		.lsu_axi_arcache(lsu_axi_arcache),
-		.lsu_axi_arprot(lsu_axi_arprot),
-		.lsu_axi_arqos(lsu_axi_arqos),
-		.lsu_axi_rvalid(lsu_axi_rvalid),
-		.lsu_axi_rready(lsu_axi_rready),
-		.lsu_axi_rid(lsu_axi_rid),
-		.lsu_axi_rdata(lsu_axi_rdata),
-		.lsu_axi_rresp(lsu_axi_rresp),
-		.lsu_bus_clk_en(lsu_bus_clk_en)
-	);
-	rvdff #(.WIDTH(3)) dma_mem_tag_mff(
-		.rst_l(rst_l),
-		.din(dma_mem_tag_d[2:0]),
-		.dout(dma_mem_tag_m[2:0]),
-		.clk(lsu_c1_m_clk)
-	);
-	rvdff #(.WIDTH(2)) lsu_raw_fwd_r_ff(
-		.rst_l(rst_l),
-		.din({lsu_raw_fwd_hi_m, lsu_raw_fwd_lo_m}),
-		.dout({lsu_raw_fwd_hi_r, lsu_raw_fwd_lo_r}),
-		.clk(lsu_c2_r_clk)
-	);
-endmodule
-module eb1_lsu_addrcheck (
-	lsu_c2_m_clk,
-	rst_l,
-	start_addr_d,
-	end_addr_d,
-	lsu_pkt_d,
-	dec_tlu_mrac_ff,
-	rs1_region_d,
-	rs1_d,
-	is_sideeffects_m,
-	addr_in_dccm_d,
-	addr_in_pic_d,
-	addr_external_d,
-	access_fault_d,
-	misaligned_fault_d,
-	exc_mscause_d,
-	fir_dccm_access_error_d,
-	fir_nondccm_access_error_d,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire lsu_c2_m_clk;
-	input wire rst_l;
-	input wire [31:0] start_addr_d;
-	input wire [31:0] end_addr_d;
-	input wire [13:0] lsu_pkt_d;
-	input wire [31:0] dec_tlu_mrac_ff;
-	input wire [3:0] rs1_region_d;
-	input wire [31:0] rs1_d;
-	output wire is_sideeffects_m;
-	output wire addr_in_dccm_d;
-	output wire addr_in_pic_d;
-	output wire addr_external_d;
-	output wire access_fault_d;
-	output wire misaligned_fault_d;
-	output wire [3:0] exc_mscause_d;
-	output wire fir_dccm_access_error_d;
-	output wire fir_nondccm_access_error_d;
-	input wire scan_mode;
-	wire non_dccm_access_ok;
-	wire is_sideeffects_d;
-	wire is_aligned_d;
-	wire start_addr_in_dccm_d;
-	wire end_addr_in_dccm_d;
-	wire start_addr_in_dccm_region_d;
-	wire end_addr_in_dccm_region_d;
-	wire start_addr_in_pic_d;
-	wire end_addr_in_pic_d;
-	wire start_addr_in_pic_region_d;
-	wire end_addr_in_pic_region_d;
-	wire [4:0] csr_idx;
-	wire addr_in_iccm;
-	wire start_addr_dccm_or_pic;
-	wire base_reg_dccm_or_pic;
-	wire unmapped_access_fault_d;
-	wire mpu_access_fault_d;
-	wire picm_access_fault_d;
-	wire regpred_access_fault_d;
-	wire regcross_misaligned_fault_d;
-	wire sideeffect_misaligned_fault_d;
-	wire [3:0] access_fault_mscause_d;
-	wire [3:0] misaligned_fault_mscause_d;
-	generate
-		if (pt[1365-:5] == 1) begin : Gen_dccm_enable
-			rvrangecheck #(
-				.CCM_SADR(pt[1325-:36]),
-				.CCM_SIZE(pt[1289-:14])
-			) start_addr_dccm_rangecheck(
-				.addr(start_addr_d[31:0]),
-				.in_range(start_addr_in_dccm_d),
-				.in_region(start_addr_in_dccm_region_d)
-			);
-			rvrangecheck #(
-				.CCM_SADR(pt[1325-:36]),
-				.CCM_SIZE(pt[1289-:14])
-			) end_addr_dccm_rangecheck(
-				.addr(end_addr_d[31:0]),
-				.in_range(end_addr_in_dccm_d),
-				.in_region(end_addr_in_dccm_region_d)
-			);
-		end
-		else begin : Gen_dccm_disable
-			assign start_addr_in_dccm_d = 1'b0;
-			assign start_addr_in_dccm_region_d = 1'b0;
-			assign end_addr_in_dccm_d = 1'b0;
-			assign end_addr_in_dccm_region_d = 1'b0;
-		end
-	endgenerate
-	generate
-		if (pt[927-:5] == 1) begin : check_iccm
-			assign addr_in_iccm = start_addr_d[31:28] == pt[895-:8];
-		end
-		else assign addr_in_iccm = 1'b0;
-	endgenerate
-	rvrangecheck #(
-		.CCM_SADR(pt[130-:36]),
-		.CCM_SIZE(pt[69-:13])
-	) start_addr_pic_rangecheck(
-		.addr(start_addr_d[31:0]),
-		.in_range(start_addr_in_pic_d),
-		.in_region(start_addr_in_pic_region_d)
-	);
-	rvrangecheck #(
-		.CCM_SADR(pt[130-:36]),
-		.CCM_SIZE(pt[69-:13])
-	) end_addr_pic_rangecheck(
-		.addr(end_addr_d[31:0]),
-		.in_range(end_addr_in_pic_d),
-		.in_region(end_addr_in_pic_region_d)
-	);
-	assign start_addr_dccm_or_pic = start_addr_in_dccm_region_d | start_addr_in_pic_region_d;
-	assign base_reg_dccm_or_pic = ((rs1_region_d[3:0] == pt[1333-:8]) & pt[1365-:5]) | (rs1_region_d[3:0] == pt[77-:8]);
-	assign addr_in_dccm_d = start_addr_in_dccm_d & end_addr_in_dccm_d;
-	assign addr_in_pic_d = start_addr_in_pic_d & end_addr_in_pic_d;
-	assign addr_external_d = ~(start_addr_in_dccm_region_d | start_addr_in_pic_region_d);
-	assign csr_idx[4:0] = {start_addr_d[31:28], 1'b1};
-	assign is_sideeffects_d = ((dec_tlu_mrac_ff[csr_idx] & ~((start_addr_in_dccm_region_d | start_addr_in_pic_region_d) | addr_in_iccm)) & lsu_pkt_d[0]) & (lsu_pkt_d[6] | lsu_pkt_d[7]);
-	assign is_aligned_d = ((lsu_pkt_d[9] & (start_addr_d[1:0] == 2'b00)) | (lsu_pkt_d[10] & (start_addr_d[0] == 1'b0))) | lsu_pkt_d[11];
-	assign non_dccm_access_ok = ~(|{pt[1733-:5], pt[1728-:5], pt[1723-:5], pt[1718-:5], pt[1713-:5], pt[1708-:5], pt[1703-:5], pt[1698-:5]}) | (((((((((pt[1733-:5] & ((start_addr_d[31:0] | pt[1693-:36]) == (pt[2021-:36] | pt[1693-:36]))) | (pt[1728-:5] & ((start_addr_d[31:0] | pt[1657-:36]) == (pt[1985-:36] | pt[1657-:36])))) | (pt[1723-:5] & ((start_addr_d[31:0] | pt[1621-:36]) == (pt[1949-:36] | pt[1621-:36])))) | (pt[1718-:5] & ((start_addr_d[31:0] | pt[1585-:36]) == (pt[1913-:36] | pt[1585-:36])))) | (pt[1713-:5] & ((start_addr_d[31:0] | pt[1549-:36]) == (pt[1877-:36] | pt[1549-:36])))) | (pt[1708-:5] & ((start_addr_d[31:0] | pt[1513-:36]) == (pt[1841-:36] | pt[1513-:36])))) | (pt[1703-:5] & ((start_addr_d[31:0] | pt[1477-:36]) == (pt[1805-:36] | pt[1477-:36])))) | (pt[1698-:5] & ((start_addr_d[31:0] | pt[1441-:36]) == (pt[1769-:36] | pt[1441-:36])))) & ((((((((pt[1733-:5] & ((end_addr_d[31:0] | pt[1693-:36]) == (pt[2021-:36] | pt[1693-:36]))) | (pt[1728-:5] & ((end_addr_d[31:0] | pt[1657-:36]) == (pt[1985-:36] | pt[1657-:36])))) | (pt[1723-:5] & ((end_addr_d[31:0] | pt[1621-:36]) == (pt[1949-:36] | pt[1621-:36])))) | (pt[1718-:5] & ((end_addr_d[31:0] | pt[1585-:36]) == (pt[1913-:36] | pt[1585-:36])))) | (pt[1713-:5] & ((end_addr_d[31:0] | pt[1549-:36]) == (pt[1877-:36] | pt[1549-:36])))) | (pt[1708-:5] & ((end_addr_d[31:0] | pt[1513-:36]) == (pt[1841-:36] | pt[1513-:36])))) | (pt[1703-:5] & ((end_addr_d[31:0] | pt[1477-:36]) == (pt[1805-:36] | pt[1477-:36])))) | (pt[1698-:5] & ((end_addr_d[31:0] | pt[1441-:36]) == (pt[1769-:36] | pt[1441-:36])))));
-	assign regpred_access_fault_d = start_addr_dccm_or_pic ^ base_reg_dccm_or_pic;
-	assign picm_access_fault_d = addr_in_pic_d & ((start_addr_d[1:0] != 2'b00) | ~lsu_pkt_d[9]);
-	generate
-		if (pt[1365-:5] & (pt[1333-:8] == pt[77-:8])) begin
-			assign unmapped_access_fault_d = (((start_addr_in_dccm_region_d & ~(start_addr_in_dccm_d | start_addr_in_pic_d)) | (end_addr_in_dccm_region_d & ~(end_addr_in_dccm_d | end_addr_in_pic_d))) | (start_addr_in_dccm_d & end_addr_in_pic_d)) | (start_addr_in_pic_d & end_addr_in_dccm_d);
-			assign mpu_access_fault_d = ~start_addr_in_dccm_region_d & ~non_dccm_access_ok;
-		end
-		else begin
-			assign unmapped_access_fault_d = (((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d) | (end_addr_in_dccm_region_d & ~end_addr_in_dccm_d)) | (start_addr_in_pic_region_d & ~start_addr_in_pic_d)) | (end_addr_in_pic_region_d & ~end_addr_in_pic_d);
-			assign mpu_access_fault_d = (~start_addr_in_pic_region_d & ~start_addr_in_dccm_region_d) & ~non_dccm_access_ok;
-		end
-	endgenerate
-	assign access_fault_d = ((((unmapped_access_fault_d | mpu_access_fault_d) | picm_access_fault_d) | regpred_access_fault_d) & lsu_pkt_d[0]) & ~lsu_pkt_d[4];
-	assign access_fault_mscause_d[3:0] = (unmapped_access_fault_d ? 4'h2 : (mpu_access_fault_d ? 4'h3 : (regpred_access_fault_d ? 4'h5 : (picm_access_fault_d ? 4'h6 : 4'h0))));
-	assign regcross_misaligned_fault_d = start_addr_d[31:28] != end_addr_d[31:28];
-	assign sideeffect_misaligned_fault_d = is_sideeffects_d & ~is_aligned_d;
-	assign misaligned_fault_d = ((regcross_misaligned_fault_d | (sideeffect_misaligned_fault_d & addr_external_d)) & lsu_pkt_d[0]) & ~lsu_pkt_d[4];
-	assign misaligned_fault_mscause_d[3:0] = (regcross_misaligned_fault_d ? 4'h2 : (sideeffect_misaligned_fault_d ? 4'h1 : 4'h0));
-	assign exc_mscause_d[3:0] = (misaligned_fault_d ? misaligned_fault_mscause_d[3:0] : access_fault_mscause_d[3:0]);
-	assign fir_dccm_access_error_d = (((start_addr_in_dccm_region_d & ~start_addr_in_dccm_d) | (end_addr_in_dccm_region_d & ~end_addr_in_dccm_d)) & lsu_pkt_d[0]) & lsu_pkt_d[13];
-	assign fir_nondccm_access_error_d = (~(start_addr_in_dccm_region_d & end_addr_in_dccm_region_d) & lsu_pkt_d[0]) & lsu_pkt_d[13];
-	rvdff #(.WIDTH(1)) is_sideeffects_mff(
-		.din(is_sideeffects_d),
-		.dout(is_sideeffects_m),
-		.clk(lsu_c2_m_clk),
-		.rst_l(rst_l)
-	);
-endmodule
-module eb1_lsu_bus_buffer (
-	clk,
-	clk_override,
-	rst_l,
-	scan_mode,
-	dec_tlu_external_ldfwd_disable,
-	dec_tlu_wb_coalescing_disable,
-	dec_tlu_sideeffect_posted_disable,
-	dec_tlu_force_halt,
-	lsu_bus_obuf_c1_clken,
-	lsu_busm_clken,
-	lsu_c2_r_clk,
-	lsu_bus_ibuf_c1_clk,
-	lsu_bus_obuf_c1_clk,
-	lsu_bus_buf_c1_clk,
-	lsu_free_c2_clk,
-	lsu_busm_clk,
-	dec_lsu_valid_raw_d,
-	lsu_pkt_m,
-	lsu_pkt_r,
-	lsu_addr_m,
-	end_addr_m,
-	lsu_addr_r,
-	end_addr_r,
-	store_data_r,
-	no_word_merge_r,
-	no_dword_merge_r,
-	lsu_busreq_m,
-	lsu_busreq_r,
-	ld_full_hit_m,
-	flush_m_up,
-	flush_r,
-	lsu_commit_r,
-	is_sideeffects_r,
-	ldst_dual_d,
-	ldst_dual_m,
-	ldst_dual_r,
-	ldst_byteen_ext_m,
-	lsu_bus_buffer_pend_any,
-	lsu_bus_buffer_full_any,
-	lsu_bus_buffer_empty_any,
-	ld_byte_hit_buf_lo,
-	ld_byte_hit_buf_hi,
-	ld_fwddata_buf_lo,
-	ld_fwddata_buf_hi,
-	lsu_imprecise_error_load_any,
-	lsu_imprecise_error_store_any,
-	lsu_imprecise_error_addr_any,
-	lsu_nonblock_load_valid_m,
-	lsu_nonblock_load_tag_m,
-	lsu_nonblock_load_inv_r,
-	lsu_nonblock_load_inv_tag_r,
-	lsu_nonblock_load_data_valid,
-	lsu_nonblock_load_data_error,
-	lsu_nonblock_load_data_tag,
-	lsu_nonblock_load_data,
-	lsu_pmu_bus_trxn,
-	lsu_pmu_bus_misaligned,
-	lsu_pmu_bus_error,
-	lsu_pmu_bus_busy,
-	lsu_axi_awvalid,
-	lsu_axi_awready,
-	lsu_axi_awid,
-	lsu_axi_awaddr,
-	lsu_axi_awregion,
-	lsu_axi_awlen,
-	lsu_axi_awsize,
-	lsu_axi_awburst,
-	lsu_axi_awlock,
-	lsu_axi_awcache,
-	lsu_axi_awprot,
-	lsu_axi_awqos,
-	lsu_axi_wvalid,
-	lsu_axi_wready,
-	lsu_axi_wdata,
-	lsu_axi_wstrb,
-	lsu_axi_wlast,
-	lsu_axi_bvalid,
-	lsu_axi_bready,
-	lsu_axi_bresp,
-	lsu_axi_bid,
-	lsu_axi_arvalid,
-	lsu_axi_arready,
-	lsu_axi_arid,
-	lsu_axi_araddr,
-	lsu_axi_arregion,
-	lsu_axi_arlen,
-	lsu_axi_arsize,
-	lsu_axi_arburst,
-	lsu_axi_arlock,
-	lsu_axi_arcache,
-	lsu_axi_arprot,
-	lsu_axi_arqos,
-	lsu_axi_rvalid,
-	lsu_axi_rready,
-	lsu_axi_rid,
-	lsu_axi_rdata,
-	lsu_axi_rresp,
-	lsu_bus_clk_en,
-	lsu_bus_clk_en_q
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire clk_override;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire dec_tlu_external_ldfwd_disable;
-	input wire dec_tlu_wb_coalescing_disable;
-	input wire dec_tlu_sideeffect_posted_disable;
-	input wire dec_tlu_force_halt;
-	input wire lsu_bus_obuf_c1_clken;
-	input wire lsu_busm_clken;
-	input wire lsu_c2_r_clk;
-	input wire lsu_bus_ibuf_c1_clk;
-	input wire lsu_bus_obuf_c1_clk;
-	input wire lsu_bus_buf_c1_clk;
-	input wire lsu_free_c2_clk;
-	input wire lsu_busm_clk;
-	input wire dec_lsu_valid_raw_d;
-	input wire [13:0] lsu_pkt_m;
-	input wire [13:0] lsu_pkt_r;
-	input wire [31:0] lsu_addr_m;
-	input wire [31:0] end_addr_m;
-	input wire [31:0] lsu_addr_r;
-	input wire [31:0] end_addr_r;
-	input wire [31:0] store_data_r;
-	input wire no_word_merge_r;
-	input wire no_dword_merge_r;
-	input wire lsu_busreq_m;
-	output wire lsu_busreq_r;
-	input wire ld_full_hit_m;
-	input wire flush_m_up;
-	input wire flush_r;
-	input wire lsu_commit_r;
-	input wire is_sideeffects_r;
-	input wire ldst_dual_d;
-	input wire ldst_dual_m;
-	input wire ldst_dual_r;
-	input wire [7:0] ldst_byteen_ext_m;
-	output wire lsu_bus_buffer_pend_any;
-	output wire lsu_bus_buffer_full_any;
-	output wire lsu_bus_buffer_empty_any;
-	output wire [3:0] ld_byte_hit_buf_lo;
-	output wire [3:0] ld_byte_hit_buf_hi;
-	output reg [31:0] ld_fwddata_buf_lo;
-	output reg [31:0] ld_fwddata_buf_hi;
-	output wire lsu_imprecise_error_load_any;
-	output reg lsu_imprecise_error_store_any;
-	output wire [31:0] lsu_imprecise_error_addr_any;
-	output wire lsu_nonblock_load_valid_m;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_tag_m;
-	output wire lsu_nonblock_load_inv_r;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_inv_tag_r;
-	output wire lsu_nonblock_load_data_valid;
-	output reg lsu_nonblock_load_data_error;
-	output reg [pt[164-:7] - 1:0] lsu_nonblock_load_data_tag;
-	output wire [31:0] lsu_nonblock_load_data;
-	output wire lsu_pmu_bus_trxn;
-	output wire lsu_pmu_bus_misaligned;
-	output wire lsu_pmu_bus_error;
-	output wire lsu_pmu_bus_busy;
-	output wire lsu_axi_awvalid;
-	input wire lsu_axi_awready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_awid;
-	output wire [31:0] lsu_axi_awaddr;
-	output wire [3:0] lsu_axi_awregion;
-	output wire [7:0] lsu_axi_awlen;
-	output wire [2:0] lsu_axi_awsize;
-	output wire [1:0] lsu_axi_awburst;
-	output wire lsu_axi_awlock;
-	output wire [3:0] lsu_axi_awcache;
-	output wire [2:0] lsu_axi_awprot;
-	output wire [3:0] lsu_axi_awqos;
-	output wire lsu_axi_wvalid;
-	input wire lsu_axi_wready;
-	output wire [63:0] lsu_axi_wdata;
-	output wire [7:0] lsu_axi_wstrb;
-	output wire lsu_axi_wlast;
-	input wire lsu_axi_bvalid;
-	output wire lsu_axi_bready;
-	input wire [1:0] lsu_axi_bresp;
-	input wire [pt[181-:8] - 1:0] lsu_axi_bid;
-	output wire lsu_axi_arvalid;
-	input wire lsu_axi_arready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_arid;
-	output wire [31:0] lsu_axi_araddr;
-	output wire [3:0] lsu_axi_arregion;
-	output wire [7:0] lsu_axi_arlen;
-	output wire [2:0] lsu_axi_arsize;
-	output wire [1:0] lsu_axi_arburst;
-	output wire lsu_axi_arlock;
-	output wire [3:0] lsu_axi_arcache;
-	output wire [2:0] lsu_axi_arprot;
-	output wire [3:0] lsu_axi_arqos;
-	input wire lsu_axi_rvalid;
-	output wire lsu_axi_rready;
-	input wire [pt[181-:8] - 1:0] lsu_axi_rid;
-	input wire [63:0] lsu_axi_rdata;
-	input wire [1:0] lsu_axi_rresp;
-	input wire lsu_bus_clk_en;
-	input wire lsu_bus_clk_en_q;
-	localparam DEPTH = pt[173-:9];
-	localparam DEPTH_LOG2 = pt[164-:7];
-	localparam TIMER = 8;
-	localparam TIMER_MAX = 7;
-	localparam TIMER_LOG2 = 3;
-	wire [3:0] ldst_byteen_hi_m;
-	wire [3:0] ldst_byteen_lo_m;
-	wire [DEPTH - 1:0] ld_addr_hitvec_lo;
-	wire [DEPTH - 1:0] ld_addr_hitvec_hi;
-	wire [(4 * DEPTH) - 1:0] ld_byte_hitvec_lo;
-	wire [(4 * DEPTH) - 1:0] ld_byte_hitvec_hi;
-	wire [(4 * DEPTH) - 1:0] ld_byte_hitvecfn_lo;
-	wire [(4 * DEPTH) - 1:0] ld_byte_hitvecfn_hi;
-	wire ld_addr_ibuf_hit_lo;
-	wire ld_addr_ibuf_hit_hi;
-	wire [3:0] ld_byte_ibuf_hit_lo;
-	wire [3:0] ld_byte_ibuf_hit_hi;
-	wire [3:0] ldst_byteen_r;
-	wire [3:0] ldst_byteen_hi_r;
-	wire [3:0] ldst_byteen_lo_r;
-	wire [31:0] store_data_hi_r;
-	wire [31:0] store_data_lo_r;
-	wire is_aligned_r;
-	wire ldst_samedw_r;
-	wire lsu_nonblock_load_valid_r;
-	reg [31:0] lsu_nonblock_load_data_hi;
-	reg [31:0] lsu_nonblock_load_data_lo;
-	wire [31:0] lsu_nonblock_data_unalgn;
-	wire [1:0] lsu_nonblock_addr_offset;
-	wire [1:0] lsu_nonblock_sz;
-	wire lsu_nonblock_unsign;
-	reg lsu_nonblock_load_data_ready;
-	wire [DEPTH - 1:0] CmdPtr0Dec;
-	wire [DEPTH - 1:0] CmdPtr1Dec;
-	wire [DEPTH - 1:0] RspPtrDec;
-	wire [DEPTH_LOG2 - 1:0] CmdPtr0;
-	wire [DEPTH_LOG2 - 1:0] CmdPtr1;
-	wire [DEPTH_LOG2 - 1:0] RspPtr;
-	reg [DEPTH_LOG2 - 1:0] WrPtr0_m;
-	wire [DEPTH_LOG2 - 1:0] WrPtr0_r;
-	reg [DEPTH_LOG2 - 1:0] WrPtr1_m;
-	wire [DEPTH_LOG2 - 1:0] WrPtr1_r;
-	reg found_wrptr0;
-	reg found_wrptr1;
-	wire found_cmdptr0;
-	wire found_cmdptr1;
-	reg [3:0] buf_numvld_any;
-	reg [3:0] buf_numvld_wrcmd_any;
-	reg [3:0] buf_numvld_cmd_any;
-	reg [3:0] buf_numvld_pend_any;
-	reg any_done_wait_state;
-	reg bus_sideeffect_pend;
-	wire bus_coalescing_disable;
-	reg bus_addr_match_pending;
-	wire bus_cmd_sent;
-	wire bus_cmd_ready;
-	wire bus_wcmd_sent;
-	wire bus_wdata_sent;
-	wire bus_rsp_read;
-	wire bus_rsp_write;
-	wire [pt[181-:8] - 1:0] bus_rsp_read_tag;
-	wire [pt[181-:8] - 1:0] bus_rsp_write_tag;
-	wire bus_rsp_read_error;
-	wire bus_rsp_write_error;
-	wire [63:0] bus_rsp_rdata;
-	wire [(DEPTH * 3) - 1:0] buf_state;
-	wire [(DEPTH * 2) - 1:0] buf_sz;
-	wire [(DEPTH * 32) - 1:0] buf_addr;
-	wire [(DEPTH * 4) - 1:0] buf_byteen;
-	wire [DEPTH - 1:0] buf_sideeffect;
-	wire [DEPTH - 1:0] buf_write;
-	wire [DEPTH - 1:0] buf_unsign;
-	wire [DEPTH - 1:0] buf_dual;
-	wire [DEPTH - 1:0] buf_samedw;
-	wire [DEPTH - 1:0] buf_nomerge;
-	wire [DEPTH - 1:0] buf_dualhi;
-	wire [(DEPTH * DEPTH_LOG2) - 1:0] buf_dualtag;
-	wire [DEPTH - 1:0] buf_ldfwd;
-	wire [(DEPTH * DEPTH_LOG2) - 1:0] buf_ldfwdtag;
-	wire [DEPTH - 1:0] buf_error;
-	wire [(DEPTH * 32) - 1:0] buf_data;
-	wire [(DEPTH * DEPTH) - 1:0] buf_age;
-	wire [(DEPTH * DEPTH) - 1:0] buf_age_younger;
-	wire [(DEPTH * DEPTH) - 1:0] buf_rspage;
-	wire [(DEPTH * DEPTH) - 1:0] buf_rsp_pickage;
-	reg [(DEPTH * 3) - 1:0] buf_nxtstate;
-	reg [DEPTH - 1:0] buf_rst;
-	reg [DEPTH - 1:0] buf_state_en;
-	reg [DEPTH - 1:0] buf_cmd_state_bus_en;
-	reg [DEPTH - 1:0] buf_resp_state_bus_en;
-	reg [DEPTH - 1:0] buf_state_bus_en;
-	wire [DEPTH - 1:0] buf_dual_in;
-	wire [DEPTH - 1:0] buf_samedw_in;
-	wire [DEPTH - 1:0] buf_nomerge_in;
-	wire [DEPTH - 1:0] buf_sideeffect_in;
-	wire [DEPTH - 1:0] buf_unsign_in;
-	wire [(DEPTH * 2) - 1:0] buf_sz_in;
-	wire [DEPTH - 1:0] buf_write_in;
-	reg [DEPTH - 1:0] buf_wr_en;
-	wire [DEPTH - 1:0] buf_dualhi_in;
-	wire [(DEPTH * DEPTH_LOG2) - 1:0] buf_dualtag_in;
-	reg [DEPTH - 1:0] buf_ldfwd_en;
-	reg [DEPTH - 1:0] buf_ldfwd_in;
-	reg [(DEPTH * DEPTH_LOG2) - 1:0] buf_ldfwdtag_in;
-	wire [(DEPTH * 4) - 1:0] buf_byteen_in;
-	wire [(DEPTH * 32) - 1:0] buf_addr_in;
-	reg [(DEPTH * 32) - 1:0] buf_data_in;
-	reg [DEPTH - 1:0] buf_error_en;
-	reg [DEPTH - 1:0] buf_data_en;
-	wire [(DEPTH * DEPTH) - 1:0] buf_age_in;
-	wire [(DEPTH * DEPTH) - 1:0] buf_ageQ;
-	wire [(DEPTH * DEPTH) - 1:0] buf_rspage_set;
-	wire [(DEPTH * DEPTH) - 1:0] buf_rspage_in;
-	wire [(DEPTH * DEPTH) - 1:0] buf_rspageQ;
-	wire ibuf_valid;
-	wire ibuf_dual;
-	wire ibuf_samedw;
-	wire ibuf_nomerge;
-	wire [DEPTH_LOG2 - 1:0] ibuf_tag;
-	wire [DEPTH_LOG2 - 1:0] ibuf_dualtag;
-	wire ibuf_sideeffect;
-	wire ibuf_unsign;
-	wire ibuf_write;
-	wire [1:0] ibuf_sz;
-	wire [3:0] ibuf_byteen;
-	wire [31:0] ibuf_addr;
-	wire [31:0] ibuf_data;
-	wire [2:0] ibuf_timer;
-	wire ibuf_byp;
-	wire ibuf_wr_en;
-	wire ibuf_rst;
-	wire ibuf_force_drain;
-	wire ibuf_drain_vld;
-	wire [DEPTH - 1:0] ibuf_drainvec_vld;
-	wire [DEPTH_LOG2 - 1:0] ibuf_tag_in;
-	wire [DEPTH_LOG2 - 1:0] ibuf_dualtag_in;
-	wire [1:0] ibuf_sz_in;
-	wire [31:0] ibuf_addr_in;
-	wire [3:0] ibuf_byteen_in;
-	wire [31:0] ibuf_data_in;
-	wire [2:0] ibuf_timer_in;
-	wire [3:0] ibuf_byteen_out;
-	wire [31:0] ibuf_data_out;
-	wire ibuf_merge_en;
-	wire ibuf_merge_in;
-	wire obuf_valid;
-	wire obuf_write;
-	wire obuf_nosend;
-	wire obuf_rdrsp_pend;
-	wire obuf_sideeffect;
-	wire [31:0] obuf_addr;
-	wire [63:0] obuf_data;
-	wire [1:0] obuf_sz;
-	wire [7:0] obuf_byteen;
-	wire obuf_merge;
-	wire obuf_cmd_done;
-	wire obuf_data_done;
-	wire [pt[181-:8] - 1:0] obuf_tag0;
-	wire [pt[181-:8] - 1:0] obuf_tag1;
-	wire [pt[181-:8] - 1:0] obuf_rdrsp_tag;
-	wire ibuf_buf_byp;
-	wire obuf_force_wr_en;
-	wire obuf_wr_wait;
-	wire obuf_wr_en;
-	wire obuf_wr_enQ;
-	wire obuf_rst;
-	wire obuf_write_in;
-	wire obuf_nosend_in;
-	wire obuf_rdrsp_pend_en;
-	wire obuf_rdrsp_pend_in;
-	wire obuf_sideeffect_in;
-	wire obuf_aligned_in;
-	wire [31:0] obuf_addr_in;
-	wire [63:0] obuf_data_in;
-	wire [1:0] obuf_sz_in;
-	wire [7:0] obuf_byteen_in;
-	wire obuf_merge_in;
-	wire obuf_cmd_done_in;
-	wire obuf_data_done_in;
-	wire [pt[181-:8] - 1:0] obuf_tag0_in;
-	wire [pt[181-:8] - 1:0] obuf_tag1_in;
-	wire [pt[181-:8] - 1:0] obuf_rdrsp_tag_in;
-	wire obuf_merge_en;
-	wire [2:0] obuf_wr_timer;
-	wire [2:0] obuf_wr_timer_in;
-	wire [7:0] obuf_byteen0_in;
-	wire [7:0] obuf_byteen1_in;
-	wire [63:0] obuf_data0_in;
-	wire [63:0] obuf_data1_in;
-	wire lsu_axi_awvalid_q;
-	wire lsu_axi_awready_q;
-	wire lsu_axi_wvalid_q;
-	wire lsu_axi_wready_q;
-	wire lsu_axi_arvalid_q;
-	wire lsu_axi_arready_q;
-	wire lsu_axi_bvalid_q;
-	wire lsu_axi_bready_q;
-	wire lsu_axi_rvalid_q;
-	wire lsu_axi_rready_q;
-	wire [pt[181-:8] - 1:0] lsu_axi_bid_q;
-	wire [pt[181-:8] - 1:0] lsu_axi_rid_q;
-	wire [1:0] lsu_axi_bresp_q;
-	wire [1:0] lsu_axi_rresp_q;
-	reg [pt[181-:8] - 1:0] lsu_imprecise_error_store_tag;
-	wire [63:0] lsu_axi_rdata_q;
-	function automatic [2:0] f_Enc8to3;
-		input reg [7:0] Dec_value;
-		reg [2:0] Enc_value;
-		begin
-			Enc_value[0] = ((Dec_value[1] | Dec_value[3]) | Dec_value[5]) | Dec_value[7];
-			Enc_value[1] = ((Dec_value[2] | Dec_value[3]) | Dec_value[6]) | Dec_value[7];
-			Enc_value[2] = ((Dec_value[4] | Dec_value[5]) | Dec_value[6]) | Dec_value[7];
-			f_Enc8to3 = Enc_value[2:0];
-		end
-	endfunction
-	assign ldst_byteen_hi_m[3:0] = ldst_byteen_ext_m[7:4];
-	assign ldst_byteen_lo_m[3:0] = ldst_byteen_ext_m[3:0];
-	localparam [2:0] IDLE = 3'b000;
-	generate
-		genvar i;
-		for (i = 0; i < DEPTH; i = i + 1) begin
-			assign ld_addr_hitvec_lo[i] = (((lsu_addr_m[31:2] == buf_addr[(i * 32) + 31-:30]) & buf_write[i]) & (buf_state[i * 3+:3] != IDLE)) & lsu_busreq_m;
-			assign ld_addr_hitvec_hi[i] = (((end_addr_m[31:2] == buf_addr[(i * 32) + 31-:30]) & buf_write[i]) & (buf_state[i * 3+:3] != IDLE)) & lsu_busreq_m;
-		end
-	endgenerate
-	generate
-		genvar j;
-		for (j = 0; j < 4; j = j + 1) begin
-			assign ld_byte_hit_buf_lo[j] = |ld_byte_hitvecfn_lo[j * DEPTH+:DEPTH] | ld_byte_ibuf_hit_lo[j];
-			assign ld_byte_hit_buf_hi[j] = |ld_byte_hitvecfn_hi[j * DEPTH+:DEPTH] | ld_byte_ibuf_hit_hi[j];
-			for (i = 0; i < DEPTH; i = i + 1) begin
-				assign ld_byte_hitvec_lo[(j * DEPTH) + i] = (ld_addr_hitvec_lo[i] & buf_byteen[(i * 4) + j]) & ldst_byteen_lo_m[j];
-				assign ld_byte_hitvec_hi[(j * DEPTH) + i] = (ld_addr_hitvec_hi[i] & buf_byteen[(i * 4) + j]) & ldst_byteen_hi_m[j];
-				assign ld_byte_hitvecfn_lo[(j * DEPTH) + i] = (ld_byte_hitvec_lo[(j * DEPTH) + i] & ~(|(ld_byte_hitvec_lo[j * DEPTH+:DEPTH] & buf_age_younger[i * DEPTH+:DEPTH]))) & ~ld_byte_ibuf_hit_lo[j];
-				assign ld_byte_hitvecfn_hi[(j * DEPTH) + i] = (ld_byte_hitvec_hi[(j * DEPTH) + i] & ~(|(ld_byte_hitvec_hi[j * DEPTH+:DEPTH] & buf_age_younger[i * DEPTH+:DEPTH]))) & ~ld_byte_ibuf_hit_hi[j];
-			end
-		end
-	endgenerate
-	assign ld_addr_ibuf_hit_lo = (((lsu_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write) & ibuf_valid) & lsu_busreq_m;
-	assign ld_addr_ibuf_hit_hi = (((end_addr_m[31:2] == ibuf_addr[31:2]) & ibuf_write) & ibuf_valid) & lsu_busreq_m;
-	generate
-		for (i = 0; i < 4; i = i + 1) begin
-			assign ld_byte_ibuf_hit_lo[i] = (ld_addr_ibuf_hit_lo & ibuf_byteen[i]) & ldst_byteen_lo_m[i];
-			assign ld_byte_ibuf_hit_hi[i] = (ld_addr_ibuf_hit_hi & ibuf_byteen[i]) & ldst_byteen_hi_m[i];
-		end
-	endgenerate
-	always @(*) begin
-		ld_fwddata_buf_lo[31:0] = {{8 {ld_byte_ibuf_hit_lo[3]}}, {8 {ld_byte_ibuf_hit_lo[2]}}, {8 {ld_byte_ibuf_hit_lo[1]}}, {8 {ld_byte_ibuf_hit_lo[0]}}} & ibuf_data[31:0];
-		ld_fwddata_buf_hi[31:0] = {{8 {ld_byte_ibuf_hit_hi[3]}}, {8 {ld_byte_ibuf_hit_hi[2]}}, {8 {ld_byte_ibuf_hit_hi[1]}}, {8 {ld_byte_ibuf_hit_hi[0]}}} & ibuf_data[31:0];
-		begin : sv2v_autoblock_50
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				begin
-					ld_fwddata_buf_lo[7:0] = ld_fwddata_buf_lo[7:0] | ({8 {ld_byte_hitvecfn_lo[i]}} & buf_data[(i * 32) + 7-:8]);
-					ld_fwddata_buf_lo[15:8] = ld_fwddata_buf_lo[15:8] | ({8 {ld_byte_hitvecfn_lo[DEPTH + i]}} & buf_data[(i * 32) + 15-:8]);
-					ld_fwddata_buf_lo[23:16] = ld_fwddata_buf_lo[23:16] | ({8 {ld_byte_hitvecfn_lo[(2 * DEPTH) + i]}} & buf_data[(i * 32) + 23-:8]);
-					ld_fwddata_buf_lo[31:24] = ld_fwddata_buf_lo[31:24] | ({8 {ld_byte_hitvecfn_lo[(3 * DEPTH) + i]}} & buf_data[(i * 32) + 31-:8]);
-					ld_fwddata_buf_hi[7:0] = ld_fwddata_buf_hi[7:0] | ({8 {ld_byte_hitvecfn_hi[i]}} & buf_data[(i * 32) + 7-:8]);
-					ld_fwddata_buf_hi[15:8] = ld_fwddata_buf_hi[15:8] | ({8 {ld_byte_hitvecfn_hi[DEPTH + i]}} & buf_data[(i * 32) + 15-:8]);
-					ld_fwddata_buf_hi[23:16] = ld_fwddata_buf_hi[23:16] | ({8 {ld_byte_hitvecfn_hi[(2 * DEPTH) + i]}} & buf_data[(i * 32) + 23-:8]);
-					ld_fwddata_buf_hi[31:24] = ld_fwddata_buf_hi[31:24] | ({8 {ld_byte_hitvecfn_hi[(3 * DEPTH) + i]}} & buf_data[(i * 32) + 31-:8]);
-				end
-		end
-	end
-	assign bus_coalescing_disable = dec_tlu_wb_coalescing_disable | pt[2038];
-	assign ldst_byteen_r[3:0] = (({4 {lsu_pkt_r[11]}} & 4'b0001) | ({4 {lsu_pkt_r[10]}} & 4'b0011)) | ({4 {lsu_pkt_r[9]}} & 4'b1111);
-	assign {ldst_byteen_hi_r[3:0], ldst_byteen_lo_r[3:0]} = {4'b0000, ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-	assign {store_data_hi_r[31:0], store_data_lo_r[31:0]} = {32'b00000000000000000000000000000000, store_data_r[31:0]} << (8 * lsu_addr_r[1:0]);
-	assign ldst_samedw_r = lsu_addr_r[3] == end_addr_r[3];
-	assign is_aligned_r = ((lsu_pkt_r[9] & (lsu_addr_r[1:0] == 2'b00)) | (lsu_pkt_r[10] & (lsu_addr_r[0] == 1'b0))) | lsu_pkt_r[11];
-	assign ibuf_byp = (lsu_busreq_r & (lsu_pkt_r[7] | no_word_merge_r)) & ~ibuf_valid;
-	assign ibuf_wr_en = (lsu_busreq_r & lsu_commit_r) & ~ibuf_byp;
-	assign ibuf_rst = (ibuf_drain_vld & ~ibuf_wr_en) | dec_tlu_force_halt;
-	assign ibuf_force_drain = ((lsu_busreq_m & ~lsu_busreq_r) & ibuf_valid) & (lsu_pkt_m[7] | (ibuf_addr[31:2] != lsu_addr_m[31:2]));
-	assign ibuf_drain_vld = ibuf_valid & (((((((ibuf_wr_en | (ibuf_timer == TIMER_MAX)) & ~(ibuf_merge_en & ibuf_merge_in)) | ibuf_byp) | ibuf_force_drain) | ibuf_sideeffect) | ~ibuf_write) | bus_coalescing_disable);
-	assign ibuf_tag_in[DEPTH_LOG2 - 1:0] = (ibuf_merge_en & ibuf_merge_in ? ibuf_tag[DEPTH_LOG2 - 1:0] : (ldst_dual_r ? WrPtr1_r : WrPtr0_r));
-	assign ibuf_dualtag_in[DEPTH_LOG2 - 1:0] = WrPtr0_r;
-	assign ibuf_sz_in[1:0] = {lsu_pkt_r[9], lsu_pkt_r[10]};
-	assign ibuf_addr_in[31:0] = (ldst_dual_r ? end_addr_r[31:0] : lsu_addr_r[31:0]);
-	assign ibuf_byteen_in[3:0] = (ibuf_merge_en & ibuf_merge_in ? ibuf_byteen[3:0] | ldst_byteen_lo_r[3:0] : (ldst_dual_r ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]));
-	generate
-		for (i = 0; i < 4; i = i + 1) assign ibuf_data_in[(8 * i) + 7:8 * i] = (ibuf_merge_en & ibuf_merge_in ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8 * i) + 7:8 * i] : ibuf_data[(8 * i) + 7:8 * i]) : (ldst_dual_r ? store_data_hi_r[(8 * i) + 7:8 * i] : store_data_lo_r[(8 * i) + 7:8 * i]));
-	endgenerate
-	assign ibuf_timer_in = (ibuf_wr_en ? {3 {1'sb0}} : (ibuf_timer < TIMER_MAX ? ibuf_timer + 1'b1 : ibuf_timer));
-	assign ibuf_merge_en = ((((((lsu_busreq_r & lsu_commit_r) & lsu_pkt_r[6]) & ibuf_valid) & ibuf_write) & (lsu_addr_r[31:2] == ibuf_addr[31:2])) & ~is_sideeffects_r) & ~bus_coalescing_disable;
-	assign ibuf_merge_in = ~ldst_dual_r;
-	generate
-		for (i = 0; i < 4; i = i + 1) begin
-			assign ibuf_byteen_out[i] = (ibuf_merge_en & ~ibuf_merge_in ? ibuf_byteen[i] | ldst_byteen_lo_r[i] : ibuf_byteen[i]);
-			assign ibuf_data_out[(8 * i) + 7:8 * i] = (ibuf_merge_en & ~ibuf_merge_in ? (ldst_byteen_lo_r[i] ? store_data_lo_r[(8 * i) + 7:8 * i] : ibuf_data[(8 * i) + 7:8 * i]) : ibuf_data[(8 * i) + 7:8 * i]);
-		end
-	endgenerate
-	rvdffsc #(.WIDTH(1)) ibuf_valid_ff(
-		.din(1'b1),
-		.dout(ibuf_valid),
-		.en(ibuf_wr_en),
-		.clear(ibuf_rst),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(DEPTH_LOG2)) ibuf_tagff(
-		.din(ibuf_tag_in),
-		.dout(ibuf_tag),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(DEPTH_LOG2)) ibuf_dualtagff(
-		.din(ibuf_dualtag_in),
-		.dout(ibuf_dualtag),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) ibuf_dualff(
-		.din(ldst_dual_r),
-		.dout(ibuf_dual),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) ibuf_samedwff(
-		.din(ldst_samedw_r),
-		.dout(ibuf_samedw),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) ibuf_nomergeff(
-		.din(no_dword_merge_r),
-		.dout(ibuf_nomerge),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) ibuf_sideeffectff(
-		.din(is_sideeffects_r),
-		.dout(ibuf_sideeffect),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) ibuf_unsignff(
-		.din(lsu_pkt_r[5]),
-		.dout(ibuf_unsign),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) ibuf_writeff(
-		.din(lsu_pkt_r[6]),
-		.dout(ibuf_write),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(2)) ibuf_szff(
-		.din(ibuf_sz_in[1:0]),
-		.dout(ibuf_sz),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) ibuf_addrff(
-		.din(ibuf_addr_in[31:0]),
-		.dout(ibuf_addr),
-		.en(ibuf_wr_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffs #(.WIDTH(4)) ibuf_byteenff(
-		.din(ibuf_byteen_in[3:0]),
-		.dout(ibuf_byteen),
-		.en(ibuf_wr_en),
-		.clk(lsu_bus_ibuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) ibuf_dataff(
-		.din(ibuf_data_in[31:0]),
-		.dout(ibuf_data),
-		.en(ibuf_wr_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdff #(.WIDTH(TIMER_LOG2)) ibuf_timerff(
-		.din(ibuf_timer_in),
-		.dout(ibuf_timer),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	assign obuf_wr_wait = ((((((buf_numvld_wrcmd_any[3:0] == 4'b0001) & (buf_numvld_cmd_any[3:0] == 4'b0001)) & (obuf_wr_timer != TIMER_MAX)) & ~bus_coalescing_disable) & ~buf_nomerge[CmdPtr0]) & ~buf_sideeffect[CmdPtr0]) & ~obuf_force_wr_en;
-	assign obuf_wr_timer_in = (obuf_wr_en ? 3'b000 : ((buf_numvld_cmd_any > 4'b0000) & (obuf_wr_timer < TIMER_MAX) ? obuf_wr_timer + 1'b1 : obuf_wr_timer));
-	assign obuf_force_wr_en = (((lsu_busreq_m & ~lsu_busreq_r) & ~ibuf_valid) & (buf_numvld_cmd_any[3:0] == 4'b0001)) & (lsu_addr_m[31:2] != buf_addr[(CmdPtr0 * 32) + 31-:30]);
-	assign ibuf_buf_byp = (ibuf_byp & (buf_numvld_pend_any[3:0] == 4'b0000)) & (~lsu_pkt_r[6] | no_dword_merge_r);
-	localparam [2:0] CMD = 3'b010;
-	assign obuf_wr_en = ((((((ibuf_buf_byp & lsu_commit_r) & ~(is_sideeffects_r & bus_sideeffect_pend)) | (((((buf_state[CmdPtr0 * 3+:3] == CMD) & found_cmdptr0) & ~buf_cmd_state_bus_en[CmdPtr0]) & ~(buf_sideeffect[CmdPtr0] & bus_sideeffect_pend)) & (((~((buf_dual[CmdPtr0] & buf_samedw[CmdPtr0]) & ~buf_write[CmdPtr0]) | found_cmdptr1) | buf_nomerge[CmdPtr0]) | obuf_force_wr_en))) & ((bus_cmd_ready | ~obuf_valid) | obuf_nosend)) & ~obuf_wr_wait) & ~bus_addr_match_pending) & lsu_bus_clk_en;
-	assign obuf_rst = (((bus_cmd_sent | (obuf_valid & obuf_nosend)) & ~obuf_wr_en) & lsu_bus_clk_en) | dec_tlu_force_halt;
-	assign obuf_write_in = (ibuf_buf_byp ? lsu_pkt_r[6] : buf_write[CmdPtr0]);
-	assign obuf_sideeffect_in = (ibuf_buf_byp ? is_sideeffects_r : buf_sideeffect[CmdPtr0]);
-	assign obuf_addr_in[31:0] = (ibuf_buf_byp ? lsu_addr_r[31:0] : buf_addr[CmdPtr0 * 32+:32]);
-	assign obuf_sz_in[1:0] = (ibuf_buf_byp ? {lsu_pkt_r[9], lsu_pkt_r[10]} : buf_sz[CmdPtr0 * 2+:2]);
-	assign obuf_merge_in = obuf_merge_en;
-	function automatic [pt[181-:8] - 1:0] sv2v_cast_72B45;
-		input reg [pt[181-:8] - 1:0] inp;
-		sv2v_cast_72B45 = inp;
-	endfunction
-	assign obuf_tag0_in[pt[181-:8] - 1:0] = (ibuf_buf_byp ? sv2v_cast_72B45(WrPtr0_r) : sv2v_cast_72B45(CmdPtr0));
-	assign obuf_tag1_in[pt[181-:8] - 1:0] = (ibuf_buf_byp ? sv2v_cast_72B45(WrPtr1_r) : sv2v_cast_72B45(CmdPtr1));
-	assign obuf_cmd_done_in = ~(obuf_wr_en | obuf_rst) & (obuf_cmd_done | bus_wcmd_sent);
-	assign obuf_data_done_in = ~(obuf_wr_en | obuf_rst) & (obuf_data_done | bus_wdata_sent);
-	assign obuf_aligned_in = (ibuf_buf_byp ? is_aligned_r : ((obuf_sz_in[1:0] == 2'b00) | (obuf_sz_in[0] & ~obuf_addr_in[0])) | (obuf_sz_in[1] & ~(|obuf_addr_in[1:0])));
-	assign obuf_rdrsp_pend_in = (((~(obuf_wr_en & ~obuf_nosend_in) & obuf_rdrsp_pend) & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))) | (bus_cmd_sent & ~obuf_write)) & ~dec_tlu_force_halt;
-	assign obuf_rdrsp_pend_en = lsu_bus_clk_en | dec_tlu_force_halt;
-	assign obuf_rdrsp_tag_in[pt[181-:8] - 1:0] = (bus_cmd_sent & ~obuf_write ? obuf_tag0[pt[181-:8] - 1:0] : obuf_rdrsp_tag[pt[181-:8] - 1:0]);
-	assign obuf_nosend_in = ((((((obuf_addr_in[31:3] == obuf_addr[31:3]) & obuf_aligned_in) & ~obuf_sideeffect) & ~obuf_write) & ~obuf_write_in) & ~dec_tlu_external_ldfwd_disable) & ((obuf_valid & ~obuf_nosend) | (obuf_rdrsp_pend & ~(bus_rsp_read & (bus_rsp_read_tag == obuf_rdrsp_tag))));
-	assign obuf_byteen0_in[7:0] = (ibuf_buf_byp ? (lsu_addr_r[2] ? {ldst_byteen_lo_r[3:0], 4'b0000} : {4'b0000, ldst_byteen_lo_r[3:0]}) : (buf_addr[(CmdPtr0 * 32) + 2] ? {buf_byteen[CmdPtr0 * 4+:4], 4'b0000} : {4'b0000, buf_byteen[CmdPtr0 * 4+:4]}));
-	assign obuf_byteen1_in[7:0] = (ibuf_buf_byp ? (end_addr_r[2] ? {ldst_byteen_hi_r[3:0], 4'b0000} : {4'b0000, ldst_byteen_hi_r[3:0]}) : (buf_addr[(CmdPtr1 * 32) + 2] ? {buf_byteen[CmdPtr1 * 4+:4], 4'b0000} : {4'b0000, buf_byteen[CmdPtr1 * 4+:4]}));
-	assign obuf_data0_in[63:0] = (ibuf_buf_byp ? (lsu_addr_r[2] ? {store_data_lo_r[31:0], 32'b00000000000000000000000000000000} : {32'b00000000000000000000000000000000, store_data_lo_r[31:0]}) : (buf_addr[(CmdPtr0 * 32) + 2] ? {buf_data[CmdPtr0 * 32+:32], 32'b00000000000000000000000000000000} : {32'b00000000000000000000000000000000, buf_data[CmdPtr0 * 32+:32]}));
-	assign obuf_data1_in[63:0] = (ibuf_buf_byp ? (end_addr_r[2] ? {store_data_hi_r[31:0], 32'b00000000000000000000000000000000} : {32'b00000000000000000000000000000000, store_data_hi_r[31:0]}) : (buf_addr[(CmdPtr1 * 32) + 2] ? {buf_data[CmdPtr1 * 32+:32], 32'b00000000000000000000000000000000} : {32'b00000000000000000000000000000000, buf_data[CmdPtr1 * 32+:32]}));
-	generate
-		for (i = 0; i < 8; i = i + 1) begin
-			assign obuf_byteen_in[i] = obuf_byteen0_in[i] | (obuf_merge_en & obuf_byteen1_in[i]);
-			assign obuf_data_in[(8 * i) + 7:8 * i] = (obuf_merge_en & obuf_byteen1_in[i] ? obuf_data1_in[(8 * i) + 7:8 * i] : obuf_data0_in[(8 * i) + 7:8 * i]);
-		end
-	endgenerate
-	assign obuf_merge_en = ((((((((CmdPtr0 != CmdPtr1) & found_cmdptr0) & found_cmdptr1) & (buf_state[CmdPtr0 * 3+:3] == CMD)) & (buf_state[CmdPtr1 * 3+:3] == CMD)) & ~buf_cmd_state_bus_en[CmdPtr0]) & ~buf_sideeffect[CmdPtr0]) & (((~buf_write[CmdPtr0] & buf_dual[CmdPtr0]) & ~buf_dualhi[CmdPtr0]) & buf_samedw[CmdPtr0])) | ((ibuf_buf_byp & ldst_samedw_r) & ldst_dual_r);
-	rvdff_fpga #(.WIDTH(1)) obuf_wren_ff(
-		.din(obuf_wr_en),
-		.dout(obuf_wr_enQ),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffsc #(.WIDTH(1)) obuf_valid_ff(
-		.din(1'b1),
-		.dout(obuf_valid),
-		.en(obuf_wr_en),
-		.clear(obuf_rst),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) obuf_nosend_ff(
-		.din(obuf_nosend_in),
-		.dout(obuf_nosend),
-		.en(obuf_wr_en),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(1)) obuf_rdrsp_pend_ff(
-		.din(obuf_rdrsp_pend_in),
-		.dout(obuf_rdrsp_pend),
-		.en(obuf_rdrsp_pend_en),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) obuf_cmd_done_ff(
-		.din(obuf_cmd_done_in),
-		.dout(obuf_cmd_done),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) obuf_data_done_ff(
-		.din(obuf_data_done_in),
-		.dout(obuf_data_done),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(pt[181-:8])) obuf_rdrsp_tagff(
-		.din(obuf_rdrsp_tag_in),
-		.dout(obuf_rdrsp_tag),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(pt[181-:8])) obuf_tag0ff(
-		.din(obuf_tag0_in),
-		.dout(obuf_tag0),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(pt[181-:8])) obuf_tag1ff(
-		.din(obuf_tag1_in),
-		.dout(obuf_tag1),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) obuf_mergeff(
-		.din(obuf_merge_in),
-		.dout(obuf_merge),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) obuf_writeff(
-		.din(obuf_write_in),
-		.dout(obuf_write),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(1)) obuf_sideeffectff(
-		.din(obuf_sideeffect_in),
-		.dout(obuf_sideeffect),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(2)) obuf_szff(
-		.din(obuf_sz_in[1:0]),
-		.dout(obuf_sz),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffs_fpga #(.WIDTH(8)) obuf_byteenff(
-		.din(obuf_byteen_in[7:0]),
-		.dout(obuf_byteen),
-		.en(obuf_wr_en),
-		.clk(lsu_bus_obuf_c1_clk),
-		.clken(lsu_bus_obuf_c1_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) obuf_addrff(
-		.din(obuf_addr_in[31:0]),
-		.dout(obuf_addr),
-		.en(obuf_wr_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffe #(.WIDTH(64)) obuf_dataff(
-		.din(obuf_data_in[63:0]),
-		.dout(obuf_data),
-		.en(obuf_wr_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdff_fpga #(.WIDTH(TIMER_LOG2)) obuf_timerff(
-		.din(obuf_wr_timer_in),
-		.dout(obuf_wr_timer),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	function automatic signed [DEPTH_LOG2 - 1:0] sv2v_cast_63A9F_signed;
-		input reg signed [DEPTH_LOG2 - 1:0] inp;
-		sv2v_cast_63A9F_signed = inp;
-	endfunction
-	always @(*) begin
-		WrPtr0_m[DEPTH_LOG2 - 1:0] = {DEPTH_LOG2 {1'sb0}};
-		WrPtr1_m[DEPTH_LOG2 - 1:0] = {DEPTH_LOG2 {1'sb0}};
-		found_wrptr0 = 1'b0;
-		found_wrptr1 = 1'b0;
-		begin : sv2v_autoblock_51
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				if (~found_wrptr0) begin
-					WrPtr0_m[DEPTH_LOG2 - 1:0] = sv2v_cast_63A9F_signed(i);
-					found_wrptr0 = (buf_state[i * 3+:3] == IDLE) & ~((ibuf_valid & (ibuf_tag == i)) | (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-				end
-		end
-		begin : sv2v_autoblock_52
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				if (~found_wrptr1) begin
-					WrPtr1_m[DEPTH_LOG2 - 1:0] = sv2v_cast_63A9F_signed(i);
-					found_wrptr1 = (buf_state[i * 3+:3] == IDLE) & ~(((ibuf_valid & (ibuf_tag == i)) | (lsu_busreq_m & (WrPtr0_m == i))) | (lsu_busreq_r & ((WrPtr0_r == i) | (ldst_dual_r & (WrPtr1_r == i)))));
-				end
-		end
-	end
-	localparam [2:0] DONE_WAIT = 3'b101;
-	generate
-		for (i = 0; i < DEPTH; i = i + 1) begin
-			assign CmdPtr0Dec[i] = (~(|buf_age[i * DEPTH+:DEPTH]) & (buf_state[i * 3+:3] == CMD)) & ~buf_cmd_state_bus_en[i];
-			assign CmdPtr1Dec[i] = ((~(|(buf_age[i * DEPTH+:DEPTH] & ~CmdPtr0Dec)) & ~CmdPtr0Dec[i]) & (buf_state[i * 3+:3] == CMD)) & ~buf_cmd_state_bus_en[i];
-			assign RspPtrDec[i] = ~(|buf_rsp_pickage[i * DEPTH+:DEPTH]) & (buf_state[i * 3+:3] == DONE_WAIT);
-		end
-	endgenerate
-	assign found_cmdptr0 = |CmdPtr0Dec;
-	assign found_cmdptr1 = |CmdPtr1Dec;
-	function automatic [7:0] sv2v_cast_8;
-		input reg [7:0] inp;
-		sv2v_cast_8 = inp;
-	endfunction
-	assign CmdPtr0 = f_Enc8to3(sv2v_cast_8(CmdPtr0Dec[DEPTH - 1:0]));
-	assign CmdPtr1 = f_Enc8to3(sv2v_cast_8(CmdPtr1Dec[DEPTH - 1:0]));
-	assign RspPtr = f_Enc8to3(sv2v_cast_8(RspPtrDec[DEPTH - 1:0]));
-	localparam [2:0] WAIT = 3'b001;
-	generate
-		for (i = 0; i < DEPTH; i = i + 1) begin : GenAgeVec
-			for (j = 0; j < DEPTH; j = j + 1) begin
-				assign buf_age_in[(i * DEPTH) + j] = (((buf_state[i * 3+:3] == IDLE) & buf_state_en[i]) & ((((buf_state[j * 3+:3] == WAIT) | ((buf_state[j * 3+:3] == CMD) & ~buf_cmd_state_bus_en[j])) | ((((ibuf_drain_vld & lsu_busreq_r) & (ibuf_byp | ldst_dual_r)) & (i == WrPtr0_r)) & (j == ibuf_tag))) | ((((ibuf_byp & lsu_busreq_r) & ldst_dual_r) & (i == WrPtr1_r)) & (j == WrPtr0_r)))) | buf_age[(i * DEPTH) + j];
-				assign buf_age[(i * DEPTH) + j] = (buf_ageQ[(i * DEPTH) + j] & ~((buf_state[j * 3+:3] == CMD) & buf_cmd_state_bus_en[j])) & ~dec_tlu_force_halt;
-				assign buf_age_younger[(i * DEPTH) + j] = (i == j ? 1'b0 : ~buf_age[(i * DEPTH) + j] & (buf_state[j * 3+:3] != IDLE));
-			end
-		end
-	endgenerate
-	localparam [2:0] DONE = 3'b110;
-	generate
-		for (i = 0; i < DEPTH; i = i + 1) begin : GenRspAgeVec
-			for (j = 0; j < DEPTH; j = j + 1) begin
-				function automatic signed [DEPTH_LOG2 - 1:0] sv2v_cast_63A9F_signed;
-					input reg signed [DEPTH_LOG2 - 1:0] inp;
-					sv2v_cast_63A9F_signed = inp;
-				endfunction
-				assign buf_rspage_set[(i * DEPTH) + j] = ((buf_state[i * 3+:3] == IDLE) & buf_state_en[i]) & ((~((buf_state[j * 3+:3] == IDLE) | (buf_state[j * 3+:3] == DONE)) | ((((ibuf_drain_vld & lsu_busreq_r) & (ibuf_byp | ldst_dual_r)) & (sv2v_cast_63A9F_signed(i) == WrPtr0_r)) & (sv2v_cast_63A9F_signed(j) == ibuf_tag))) | ((((ibuf_byp & lsu_busreq_r) & ldst_dual_r) & (sv2v_cast_63A9F_signed(i) == WrPtr1_r)) & (sv2v_cast_63A9F_signed(j) == WrPtr0_r)));
-				assign buf_rspage_in[(i * DEPTH) + j] = buf_rspage_set[(i * DEPTH) + j] | buf_rspage[(i * DEPTH) + j];
-				assign buf_rspage[(i * DEPTH) + j] = (buf_rspageQ[(i * DEPTH) + j] & ~((buf_state[j * 3+:3] == DONE) | (buf_state[j * 3+:3] == IDLE))) & ~dec_tlu_force_halt;
-				assign buf_rsp_pickage[(i * DEPTH) + j] = buf_rspageQ[(i * DEPTH) + j] & (buf_state[j * 3+:3] == DONE_WAIT);
-			end
-		end
-	endgenerate
-	localparam [2:0] DONE_PARTIAL = 3'b100;
-	localparam [2:0] RESP = 3'b011;
-	generate
-		for (i = 0; i < DEPTH; i = i + 1) begin
-			assign ibuf_drainvec_vld[i] = ibuf_drain_vld & (i == ibuf_tag);
-			assign buf_byteen_in[i * 4+:4] = (ibuf_drainvec_vld[i] ? ibuf_byteen_out[3:0] : ((ibuf_byp & ldst_dual_r) & (i == WrPtr1_r) ? ldst_byteen_hi_r[3:0] : ldst_byteen_lo_r[3:0]));
-			assign buf_addr_in[i * 32+:32] = (ibuf_drainvec_vld[i] ? ibuf_addr[31:0] : ((ibuf_byp & ldst_dual_r) & (i == WrPtr1_r) ? end_addr_r[31:0] : lsu_addr_r[31:0]));
-			assign buf_dual_in[i] = (ibuf_drainvec_vld[i] ? ibuf_dual : ldst_dual_r);
-			assign buf_samedw_in[i] = (ibuf_drainvec_vld[i] ? ibuf_samedw : ldst_samedw_r);
-			assign buf_nomerge_in[i] = (ibuf_drainvec_vld[i] ? ibuf_nomerge | ibuf_force_drain : no_dword_merge_r);
-			assign buf_dualhi_in[i] = (ibuf_drainvec_vld[i] ? ibuf_dual : (ibuf_byp & ldst_dual_r) & (i == WrPtr1_r));
-			assign buf_dualtag_in[i * DEPTH_LOG2+:DEPTH_LOG2] = (ibuf_drainvec_vld[i] ? ibuf_dualtag : ((ibuf_byp & ldst_dual_r) & (i == WrPtr1_r) ? WrPtr0_r : WrPtr1_r));
-			assign buf_sideeffect_in[i] = (ibuf_drainvec_vld[i] ? ibuf_sideeffect : is_sideeffects_r);
-			assign buf_unsign_in[i] = (ibuf_drainvec_vld[i] ? ibuf_unsign : lsu_pkt_r[5]);
-			assign buf_sz_in[i * 2+:2] = (ibuf_drainvec_vld[i] ? ibuf_sz : {lsu_pkt_r[9], lsu_pkt_r[10]});
-			assign buf_write_in[i] = (ibuf_drainvec_vld[i] ? ibuf_write : lsu_pkt_r[6]);
-			function automatic [DEPTH_LOG2 - 1:0] sv2v_cast_63A9F;
-				input reg [DEPTH_LOG2 - 1:0] inp;
-				sv2v_cast_63A9F = inp;
-			endfunction
-			function automatic signed [pt[181-:8] - 1:0] sv2v_cast_72B45_signed;
-				input reg signed [pt[181-:8] - 1:0] inp;
-				sv2v_cast_72B45_signed = inp;
-			endfunction
-			function automatic [pt[181-:8] - 1:0] sv2v_cast_72B45;
-				input reg [pt[181-:8] - 1:0] inp;
-				sv2v_cast_72B45 = inp;
-			endfunction
-			function automatic signed [DEPTH_LOG2 - 1:0] sv2v_cast_63A9F_signed;
-				input reg signed [DEPTH_LOG2 - 1:0] inp;
-				sv2v_cast_63A9F_signed = inp;
-			endfunction
-			always @(*) begin
-				buf_nxtstate[i * 3+:3] = IDLE;
-				buf_state_en[i] = 1'b0;
-				buf_resp_state_bus_en[i] = 1'b0;
-				buf_state_bus_en[i] = 1'b0;
-				buf_wr_en[i] = 1'b0;
-				buf_data_in[i * 32+:32] = {32 {1'sb0}};
-				buf_data_en[i] = 1'b0;
-				buf_error_en[i] = 1'b0;
-				buf_rst[i] = dec_tlu_force_halt;
-				buf_ldfwd_en[i] = dec_tlu_force_halt;
-				buf_ldfwd_in[i] = 1'b0;
-				buf_ldfwdtag_in[i * DEPTH_LOG2+:DEPTH_LOG2] = {DEPTH_LOG2 {1'sb0}};
-				case (buf_state[i * 3+:3])
-					IDLE: begin
-						buf_nxtstate[i * 3+:3] = (lsu_bus_clk_en ? CMD : WAIT);
-						buf_state_en[i] = ((lsu_busreq_r & lsu_commit_r) & ((((ibuf_byp | ldst_dual_r) & ~ibuf_merge_en) & (i == WrPtr0_r)) | ((ibuf_byp & ldst_dual_r) & (i == WrPtr1_r)))) | (ibuf_drain_vld & (i == ibuf_tag));
-						buf_wr_en[i] = buf_state_en[i];
-						buf_data_en[i] = buf_state_en[i];
-						buf_data_in[i * 32+:32] = (ibuf_drain_vld & (i == ibuf_tag) ? ibuf_data_out[31:0] : store_data_lo_r[31:0]);
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-					WAIT: begin
-						buf_nxtstate[i * 3+:3] = (dec_tlu_force_halt ? IDLE : CMD);
-						buf_state_en[i] = lsu_bus_clk_en | dec_tlu_force_halt;
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-					CMD: begin
-						buf_nxtstate[i * 3+:3] = (dec_tlu_force_halt ? IDLE : ((obuf_nosend & bus_rsp_read) & (bus_rsp_read_tag == obuf_rdrsp_tag) ? DONE_WAIT : RESP));
-						buf_cmd_state_bus_en[i] = (((obuf_tag0 == i) | (obuf_merge & (obuf_tag1 == i))) & obuf_valid) & obuf_wr_enQ;
-						buf_state_bus_en[i] = buf_cmd_state_bus_en[i];
-						buf_state_en[i] = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-						buf_ldfwd_in[i] = 1'b1;
-						buf_ldfwd_en[i] = ((buf_state_en[i] & ~buf_write[i]) & obuf_nosend) & ~dec_tlu_force_halt;
-						buf_ldfwdtag_in[i * DEPTH_LOG2+:DEPTH_LOG2] = sv2v_cast_63A9F(obuf_rdrsp_tag[pt[181-:8] - 2:0]);
-						buf_data_en[i] = ((buf_state_bus_en[i] & lsu_bus_clk_en) & obuf_nosend) & bus_rsp_read;
-						buf_error_en[i] = ((buf_state_bus_en[i] & lsu_bus_clk_en) & obuf_nosend) & bus_rsp_read_error;
-						buf_data_in[i * 32+:32] = (buf_error_en[i] ? bus_rsp_rdata[31:0] : (buf_addr[(i * 32) + 2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]));
-					end
-					RESP: begin
-						buf_nxtstate[i * 3+:3] = (dec_tlu_force_halt | (buf_write[i] & ~bus_rsp_write_error) ? IDLE : (((buf_dual[i] & ~buf_samedw[i]) & ~buf_write[i]) & (buf_state[buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2] * 3+:3] != DONE_PARTIAL) ? DONE_PARTIAL : ((buf_ldfwd[i] | any_done_wait_state) | (((((buf_dual[i] & ~buf_samedw[i]) & ~buf_write[i]) & buf_ldfwd[buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2]]) & (buf_state[buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2] * 3+:3] == DONE_PARTIAL)) & any_done_wait_state) ? DONE_WAIT : DONE)));
-						buf_resp_state_bus_en[i] = (bus_rsp_write & (bus_rsp_write_tag == sv2v_cast_72B45_signed(i))) | (bus_rsp_read & (((bus_rsp_read_tag == sv2v_cast_72B45_signed(i)) | (buf_ldfwd[i] & (bus_rsp_read_tag == sv2v_cast_72B45(buf_ldfwdtag[i * DEPTH_LOG2+:DEPTH_LOG2])))) | ((((buf_dual[i] & buf_dualhi[i]) & ~buf_write[i]) & buf_samedw[i]) & (bus_rsp_read_tag == sv2v_cast_72B45(buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2])))));
-						buf_state_bus_en[i] = buf_resp_state_bus_en[i];
-						buf_state_en[i] = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-						buf_data_en[i] = (buf_state_bus_en[i] & bus_rsp_read) & lsu_bus_clk_en;
-						buf_error_en[i] = (buf_state_bus_en[i] & lsu_bus_clk_en) & (((bus_rsp_read_error & (bus_rsp_read_tag == sv2v_cast_72B45_signed(i))) | ((bus_rsp_read_error & buf_ldfwd[i]) & (bus_rsp_read_tag == sv2v_cast_72B45(buf_ldfwdtag[i * DEPTH_LOG2+:DEPTH_LOG2])))) | (bus_rsp_write_error & (bus_rsp_write_tag == sv2v_cast_72B45_signed(i))));
-						buf_data_in[(i * 32) + 31-:32] = (buf_state_en[i] & ~buf_error_en[i] ? (buf_addr[(i * 32) + 2] ? bus_rsp_rdata[63:32] : bus_rsp_rdata[31:0]) : bus_rsp_rdata[31:0]);
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-					DONE_PARTIAL: begin
-						buf_nxtstate[i * 3+:3] = (dec_tlu_force_halt ? IDLE : ((buf_ldfwd[i] | buf_ldfwd[buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2]]) | any_done_wait_state ? DONE_WAIT : DONE));
-						buf_state_bus_en[i] = bus_rsp_read & ((bus_rsp_read_tag == sv2v_cast_72B45(buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2])) | (buf_ldfwd[buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2]] & (bus_rsp_read_tag == sv2v_cast_72B45(buf_ldfwdtag[buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2] * DEPTH_LOG2+:DEPTH_LOG2]))));
-						buf_state_en[i] = (buf_state_bus_en[i] & lsu_bus_clk_en) | dec_tlu_force_halt;
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-					DONE_WAIT: begin
-						buf_nxtstate[i * 3+:3] = (dec_tlu_force_halt ? IDLE : DONE);
-						buf_state_en[i] = ((RspPtr == sv2v_cast_63A9F_signed(i)) | (buf_dual[i] & (buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2] == RspPtr))) | dec_tlu_force_halt;
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-					DONE: begin
-						buf_nxtstate[i * 3+:3] = IDLE;
-						buf_rst[i] = 1'b1;
-						buf_state_en[i] = 1'b1;
-						buf_ldfwd_in[i] = 1'b0;
-						buf_ldfwd_en[i] = buf_state_en[i];
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-					default: begin
-						buf_nxtstate[i * 3+:3] = IDLE;
-						buf_state_en[i] = 1'b0;
-						buf_resp_state_bus_en[i] = 1'b0;
-						buf_state_bus_en[i] = 1'b0;
-						buf_wr_en[i] = 1'b0;
-						buf_data_in[i * 32+:32] = {32 {1'sb0}};
-						buf_data_en[i] = 1'b0;
-						buf_error_en[i] = 1'b0;
-						buf_rst[i] = 1'b0;
-						buf_cmd_state_bus_en[i] = 1'b0;
-					end
-				endcase
-			end
-			rvdffs #(.WIDTH(3)) buf_state_ff(
-				.din(buf_nxtstate[i * 3+:3]),
-				.dout({buf_state[i * 3+:3]}),
-				.en(buf_state_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(DEPTH)) buf_ageff(
-				.din(buf_age_in[i * DEPTH+:DEPTH]),
-				.dout(buf_ageQ[i * DEPTH+:DEPTH]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(DEPTH)) buf_rspageff(
-				.din(buf_rspage_in[i * DEPTH+:DEPTH]),
-				.dout(buf_rspageQ[i * DEPTH+:DEPTH]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(DEPTH_LOG2)) buf_dualtagff(
-				.din(buf_dualtag_in[i * DEPTH_LOG2+:DEPTH_LOG2]),
-				.dout(buf_dualtag[i * DEPTH_LOG2+:DEPTH_LOG2]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_dualff(
-				.din(buf_dual_in[i]),
-				.dout(buf_dual[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_samedwff(
-				.din(buf_samedw_in[i]),
-				.dout(buf_samedw[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_nomergeff(
-				.din(buf_nomerge_in[i]),
-				.dout(buf_nomerge[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_dualhiff(
-				.din(buf_dualhi_in[i]),
-				.dout(buf_dualhi[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_ldfwdff(
-				.din(buf_ldfwd_in[i]),
-				.dout(buf_ldfwd[i]),
-				.en(buf_ldfwd_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(DEPTH_LOG2)) buf_ldfwdtagff(
-				.din(buf_ldfwdtag_in[i * DEPTH_LOG2+:DEPTH_LOG2]),
-				.dout(buf_ldfwdtag[i * DEPTH_LOG2+:DEPTH_LOG2]),
-				.en(buf_ldfwd_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_sideeffectff(
-				.din(buf_sideeffect_in[i]),
-				.dout(buf_sideeffect[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_unsignff(
-				.din(buf_unsign_in[i]),
-				.dout(buf_unsign[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(1)) buf_writeff(
-				.din(buf_write_in[i]),
-				.dout(buf_write[i]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffs #(.WIDTH(2)) buf_szff(
-				.din(buf_sz_in[i * 2+:2]),
-				.dout(buf_sz[i * 2+:2]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffe #(.WIDTH(32)) buf_addrff(
-				.din(buf_addr_in[(i * 32) + 31-:32]),
-				.dout(buf_addr[i * 32+:32]),
-				.en(buf_wr_en[i]),
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-			rvdffs #(.WIDTH(4)) buf_byteenff(
-				.din(buf_byteen_in[(i * 4) + 3-:4]),
-				.dout(buf_byteen[i * 4+:4]),
-				.en(buf_wr_en[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-			rvdffe #(.WIDTH(32)) buf_dataff(
-				.din(buf_data_in[(i * 32) + 31-:32]),
-				.dout(buf_data[i * 32+:32]),
-				.en(buf_data_en[i]),
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-			rvdffsc #(.WIDTH(1)) buf_errorff(
-				.din(1'b1),
-				.dout(buf_error[i]),
-				.en(buf_error_en[i]),
-				.clear(buf_rst[i]),
-				.clk(lsu_bus_buf_c1_clk),
-				.rst_l(rst_l)
-			);
-		end
-	endgenerate
-	always @(*) begin
-		buf_numvld_any[3:0] = (({1'b0, lsu_busreq_m} << ldst_dual_m) + ({1'b0, lsu_busreq_r} << ldst_dual_r)) + ibuf_valid;
-		buf_numvld_wrcmd_any[3:0] = 4'b0000;
-		buf_numvld_cmd_any[3:0] = 4'b0000;
-		buf_numvld_pend_any[3:0] = 4'b0000;
-		any_done_wait_state = 1'b0;
-		begin : sv2v_autoblock_53
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				begin
-					buf_numvld_any[3:0] = buf_numvld_any[3:0] + {3'b000, buf_state[i * 3+:3] != IDLE};
-					buf_numvld_wrcmd_any[3:0] = buf_numvld_wrcmd_any[3:0] + {3'b000, (buf_write[i] & (buf_state[i * 3+:3] == CMD)) & ~buf_cmd_state_bus_en[i]};
-					buf_numvld_cmd_any[3:0] = buf_numvld_cmd_any[3:0] + {3'b000, (buf_state[i * 3+:3] == CMD) & ~buf_cmd_state_bus_en[i]};
-					buf_numvld_pend_any[3:0] = buf_numvld_pend_any[3:0] + {3'b000, (buf_state[i * 3+:3] == WAIT) | ((buf_state[i * 3+:3] == CMD) & ~buf_cmd_state_bus_en[i])};
-					any_done_wait_state = any_done_wait_state | (buf_state[i * 3+:3] == DONE_WAIT);
-				end
-		end
-	end
-	assign lsu_bus_buffer_pend_any = buf_numvld_pend_any != 0;
-	assign lsu_bus_buffer_full_any = (ldst_dual_d & dec_lsu_valid_raw_d ? buf_numvld_any[3:0] >= (DEPTH - 1) : buf_numvld_any[3:0] == DEPTH);
-	assign lsu_bus_buffer_empty_any = (~(|buf_state[3 * ((DEPTH - 1) - (DEPTH - 1))+:3 * DEPTH]) & ~ibuf_valid) & ~obuf_valid;
-	assign lsu_nonblock_load_valid_m = (((lsu_busreq_m & lsu_pkt_m[0]) & lsu_pkt_m[7]) & ~flush_m_up) & ~ld_full_hit_m;
-	assign lsu_nonblock_load_tag_m[DEPTH_LOG2 - 1:0] = WrPtr0_m[DEPTH_LOG2 - 1:0];
-	assign lsu_nonblock_load_inv_r = lsu_nonblock_load_valid_r & ~lsu_commit_r;
-	assign lsu_nonblock_load_inv_tag_r[DEPTH_LOG2 - 1:0] = WrPtr0_r[DEPTH_LOG2 - 1:0];
-	always @(*) begin
-		lsu_nonblock_load_data_ready = 1'b0;
-		lsu_nonblock_load_data_error = 1'b0;
-		lsu_nonblock_load_data_tag[DEPTH_LOG2 - 1:0] = {DEPTH_LOG2 {1'sb0}};
-		lsu_nonblock_load_data_lo[31:0] = {32 {1'sb0}};
-		lsu_nonblock_load_data_hi[31:0] = {32 {1'sb0}};
-		begin : sv2v_autoblock_54
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				begin
-					lsu_nonblock_load_data_ready = lsu_nonblock_load_data_ready | ((buf_state[i * 3+:3] == DONE) & ~buf_write[i]);
-					lsu_nonblock_load_data_error = lsu_nonblock_load_data_error | (((buf_state[i * 3+:3] == DONE) & buf_error[i]) & ~buf_write[i]);
-					lsu_nonblock_load_data_tag[DEPTH_LOG2 - 1:0] = lsu_nonblock_load_data_tag[DEPTH_LOG2 - 1:0] | (sv2v_cast_63A9F_signed(i) & {DEPTH_LOG2 {((buf_state[i * 3+:3] == DONE) & ~buf_write[i]) & (~buf_dual[i] | ~buf_dualhi[i])}});
-					lsu_nonblock_load_data_lo[31:0] = lsu_nonblock_load_data_lo[31:0] | (buf_data[(i * 32) + 31-:32] & {32 {((buf_state[i * 3+:3] == DONE) & ~buf_write[i]) & (~buf_dual[i] | ~buf_dualhi[i])}});
-					lsu_nonblock_load_data_hi[31:0] = lsu_nonblock_load_data_hi[31:0] | (buf_data[(i * 32) + 31-:32] & {32 {((buf_state[i * 3+:3] == DONE) & ~buf_write[i]) & (buf_dual[i] & buf_dualhi[i])}});
-				end
-		end
-	end
-	assign lsu_nonblock_addr_offset[1:0] = buf_addr[(lsu_nonblock_load_data_tag * 32) + 1-:2];
-	assign lsu_nonblock_sz[1:0] = buf_sz[(lsu_nonblock_load_data_tag * 2) + 1-:2];
-	assign lsu_nonblock_unsign = buf_unsign[lsu_nonblock_load_data_tag];
-	function automatic [31:0] sv2v_cast_32;
-		input reg [31:0] inp;
-		sv2v_cast_32 = inp;
-	endfunction
-	assign lsu_nonblock_data_unalgn[31:0] = sv2v_cast_32({lsu_nonblock_load_data_hi[31:0], lsu_nonblock_load_data_lo[31:0]} >> (8 * lsu_nonblock_addr_offset[1:0]));
-	assign lsu_nonblock_load_data_valid = lsu_nonblock_load_data_ready & ~lsu_nonblock_load_data_error;
-	assign lsu_nonblock_load_data[31:0] = (((({32 {lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {24'b000000000000000000000000, lsu_nonblock_data_unalgn[7:0]}) | ({32 {lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {16'b0000000000000000, lsu_nonblock_data_unalgn[15:0]})) | ({32 {~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b00)}} & {{24 {lsu_nonblock_data_unalgn[7]}}, lsu_nonblock_data_unalgn[7:0]})) | ({32 {~lsu_nonblock_unsign & (lsu_nonblock_sz[1:0] == 2'b01)}} & {{16 {lsu_nonblock_data_unalgn[15]}}, lsu_nonblock_data_unalgn[15:0]})) | ({32 {lsu_nonblock_sz[1:0] == 2'b10}} & lsu_nonblock_data_unalgn[31:0]);
-	always @(*) begin
-		bus_sideeffect_pend = (obuf_valid & obuf_sideeffect) & dec_tlu_sideeffect_posted_disable;
-		begin : sv2v_autoblock_55
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				bus_sideeffect_pend = bus_sideeffect_pend | (((buf_state[i * 3+:3] == RESP) & buf_sideeffect[i]) & dec_tlu_sideeffect_posted_disable);
-		end
-	end
-	function automatic signed [pt[181-:8] - 1:0] sv2v_cast_72B45_signed;
-		input reg signed [pt[181-:8] - 1:0] inp;
-		sv2v_cast_72B45_signed = inp;
-	endfunction
-	always @(*) begin
-		bus_addr_match_pending = 1'b0;
-		begin : sv2v_autoblock_56
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				bus_addr_match_pending = bus_addr_match_pending | (((obuf_valid & (obuf_addr[31:3] == buf_addr[(i * 32) + 31-:29])) & (buf_state[i * 3+:3] == RESP)) & ~((obuf_tag0 == sv2v_cast_72B45_signed(i)) | (obuf_merge & (obuf_tag1 == sv2v_cast_72B45_signed(i)))));
-		end
-	end
-	assign bus_cmd_ready = (obuf_write ? (obuf_cmd_done | obuf_data_done ? (obuf_cmd_done ? lsu_axi_wready : lsu_axi_awready) : lsu_axi_awready & lsu_axi_wready) : lsu_axi_arready);
-	assign bus_wcmd_sent = lsu_axi_awvalid & lsu_axi_awready;
-	assign bus_wdata_sent = lsu_axi_wvalid & lsu_axi_wready;
-	assign bus_cmd_sent = ((obuf_cmd_done | bus_wcmd_sent) & (obuf_data_done | bus_wdata_sent)) | (lsu_axi_arvalid & lsu_axi_arready);
-	assign bus_rsp_read = lsu_axi_rvalid & lsu_axi_rready;
-	assign bus_rsp_write = lsu_axi_bvalid & lsu_axi_bready;
-	assign bus_rsp_read_tag[pt[181-:8] - 1:0] = lsu_axi_rid[pt[181-:8] - 1:0];
-	assign bus_rsp_write_tag[pt[181-:8] - 1:0] = lsu_axi_bid[pt[181-:8] - 1:0];
-	assign bus_rsp_write_error = bus_rsp_write & (lsu_axi_bresp[1:0] != 2'b00);
-	assign bus_rsp_read_error = bus_rsp_read & (lsu_axi_rresp[1:0] != 2'b00);
-	assign bus_rsp_rdata[63:0] = lsu_axi_rdata[63:0];
-	assign lsu_axi_awvalid = ((obuf_valid & obuf_write) & ~obuf_cmd_done) & ~bus_addr_match_pending;
-	assign lsu_axi_awid[pt[181-:8] - 1:0] = sv2v_cast_72B45(obuf_tag0);
-	assign lsu_axi_awaddr[31:0] = (obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3], 3'b000});
-	assign lsu_axi_awsize[2:0] = (obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011);
-	assign lsu_axi_awprot[2:0] = 3'b001;
-	assign lsu_axi_awcache[3:0] = (obuf_sideeffect ? 4'b0000 : 4'b1111);
-	assign lsu_axi_awregion[3:0] = obuf_addr[31:28];
-	assign lsu_axi_awlen[7:0] = {8 {1'sb0}};
-	assign lsu_axi_awburst[1:0] = 2'b01;
-	assign lsu_axi_awqos[3:0] = {4 {1'sb0}};
-	assign lsu_axi_awlock = 1'b0;
-	assign lsu_axi_wvalid = ((obuf_valid & obuf_write) & ~obuf_data_done) & ~bus_addr_match_pending;
-	assign lsu_axi_wstrb[7:0] = obuf_byteen[7:0] & {8 {obuf_write}};
-	assign lsu_axi_wdata[63:0] = obuf_data[63:0];
-	assign lsu_axi_wlast = 1'b1;
-	assign lsu_axi_arvalid = ((obuf_valid & ~obuf_write) & ~obuf_nosend) & ~bus_addr_match_pending;
-	assign lsu_axi_arid[pt[181-:8] - 1:0] = sv2v_cast_72B45(obuf_tag0);
-	assign lsu_axi_araddr[31:0] = (obuf_sideeffect ? obuf_addr[31:0] : {obuf_addr[31:3], 3'b000});
-	assign lsu_axi_arsize[2:0] = (obuf_sideeffect ? {1'b0, obuf_sz[1:0]} : 3'b011);
-	assign lsu_axi_arprot[2:0] = 3'b001;
-	assign lsu_axi_arcache[3:0] = (obuf_sideeffect ? 4'b0000 : 4'b1111);
-	assign lsu_axi_arregion[3:0] = obuf_addr[31:28];
-	assign lsu_axi_arlen[7:0] = {8 {1'sb0}};
-	assign lsu_axi_arburst[1:0] = 2'b01;
-	assign lsu_axi_arqos[3:0] = {4 {1'sb0}};
-	assign lsu_axi_arlock = 1'b0;
-	assign lsu_axi_bready = 1;
-	assign lsu_axi_rready = 1;
-	always @(*) begin
-		lsu_imprecise_error_store_any = 1'b0;
-		lsu_imprecise_error_store_tag = {pt[181-:8] {1'sb0}};
-		begin : sv2v_autoblock_57
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				begin
-					lsu_imprecise_error_store_any = lsu_imprecise_error_store_any | (((lsu_bus_clk_en_q & (buf_state[i * 3+:3] == DONE)) & buf_error[i]) & buf_write[i]);
-					lsu_imprecise_error_store_tag = lsu_imprecise_error_store_tag | (sv2v_cast_63A9F_signed(i) & {DEPTH_LOG2 {((buf_state[i * 3+:3] == DONE) & buf_error[i]) & buf_write[i]}});
-				end
-		end
-	end
-	assign lsu_imprecise_error_load_any = lsu_nonblock_load_data_error & ~lsu_imprecise_error_store_any;
-	assign lsu_imprecise_error_addr_any[31:0] = (lsu_imprecise_error_store_any ? buf_addr[lsu_imprecise_error_store_tag * 32+:32] : buf_addr[lsu_nonblock_load_data_tag * 32+:32]);
-	assign lsu_pmu_bus_trxn = ((lsu_axi_awvalid & lsu_axi_awready) | (lsu_axi_wvalid & lsu_axi_wready)) | (lsu_axi_arvalid & lsu_axi_arready);
-	assign lsu_pmu_bus_misaligned = (lsu_busreq_r & ldst_dual_r) & lsu_commit_r;
-	assign lsu_pmu_bus_error = lsu_imprecise_error_load_any | lsu_imprecise_error_store_any;
-	assign lsu_pmu_bus_busy = ((lsu_axi_awvalid & ~lsu_axi_awready) | (lsu_axi_wvalid & ~lsu_axi_wready)) | (lsu_axi_arvalid & ~lsu_axi_arready);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_awvalid_ff(
-		.din(lsu_axi_awvalid),
-		.dout(lsu_axi_awvalid_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_awready_ff(
-		.din(lsu_axi_awready),
-		.dout(lsu_axi_awready_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_wvalid_ff(
-		.din(lsu_axi_wvalid),
-		.dout(lsu_axi_wvalid_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_wready_ff(
-		.din(lsu_axi_wready),
-		.dout(lsu_axi_wready_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_arvalid_ff(
-		.din(lsu_axi_arvalid),
-		.dout(lsu_axi_arvalid_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_arready_ff(
-		.din(lsu_axi_arready),
-		.dout(lsu_axi_arready_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_bvalid_ff(
-		.din(lsu_axi_bvalid),
-		.dout(lsu_axi_bvalid_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_bready_ff(
-		.din(lsu_axi_bready),
-		.dout(lsu_axi_bready_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(2)) lsu_axi_bresp_ff(
-		.din(lsu_axi_bresp[1:0]),
-		.dout(lsu_axi_bresp_q[1:0]),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(pt[181-:8])) lsu_axi_bid_ff(
-		.din(lsu_axi_bid[pt[181-:8] - 1:0]),
-		.dout(lsu_axi_bid_q[pt[181-:8] - 1:0]),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(64)) lsu_axi_rdata_ff(
-		.din(lsu_axi_rdata[63:0]),
-		.dout(lsu_axi_rdata_q[63:0]),
-		.en((lsu_axi_rvalid | clk_override) & lsu_bus_clk_en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_rvalid_ff(
-		.din(lsu_axi_rvalid),
-		.dout(lsu_axi_rvalid_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(1)) lsu_axi_rready_ff(
-		.din(lsu_axi_rready),
-		.dout(lsu_axi_rready_q),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(2)) lsu_axi_rresp_ff(
-		.din(lsu_axi_rresp[1:0]),
-		.dout(lsu_axi_rresp_q[1:0]),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff_fpga #(.WIDTH(pt[181-:8])) lsu_axi_rid_ff(
-		.din(lsu_axi_rid[pt[181-:8] - 1:0]),
-		.dout(lsu_axi_rid_q[pt[181-:8] - 1:0]),
-		.clk(lsu_busm_clk),
-		.clken(lsu_busm_clken),
-		.rawclk(clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr0_rff(
-		.din(WrPtr0_m),
-		.dout(WrPtr0_r),
-		.clk(lsu_c2_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(DEPTH_LOG2)) lsu_WrPtr1_rff(
-		.din(WrPtr1_m),
-		.dout(WrPtr1_r),
-		.clk(lsu_c2_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) lsu_busreq_rff(
-		.din((lsu_busreq_m & ~flush_r) & ~ld_full_hit_m),
-		.dout(lsu_busreq_r),
-		.clk(lsu_c2_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) lsu_nonblock_load_valid_rff(
-		.din(lsu_nonblock_load_valid_m),
-		.dout(lsu_nonblock_load_valid_r),
-		.clk(lsu_c2_r_clk),
-		.rst_l(rst_l)
-	);
-endmodule
-module eb1_lsu_bus_intf (
-	clk,
-	clk_override,
-	rst_l,
-	scan_mode,
-	dec_tlu_external_ldfwd_disable,
-	dec_tlu_wb_coalescing_disable,
-	dec_tlu_sideeffect_posted_disable,
-	lsu_bus_obuf_c1_clken,
-	lsu_busm_clken,
-	lsu_c1_r_clk,
-	lsu_c2_r_clk,
-	lsu_bus_ibuf_c1_clk,
-	lsu_bus_obuf_c1_clk,
-	lsu_bus_buf_c1_clk,
-	lsu_free_c2_clk,
-	active_clk,
-	lsu_busm_clk,
-	dec_lsu_valid_raw_d,
-	lsu_busreq_m,
-	lsu_pkt_m,
-	lsu_pkt_r,
-	lsu_addr_m,
-	lsu_addr_r,
-	end_addr_m,
-	end_addr_r,
-	store_data_r,
-	dec_tlu_force_halt,
-	lsu_commit_r,
-	is_sideeffects_m,
-	flush_m_up,
-	flush_r,
-	ldst_dual_d,
-	ldst_dual_m,
-	ldst_dual_r,
-	lsu_busreq_r,
-	lsu_bus_buffer_pend_any,
-	lsu_bus_buffer_full_any,
-	lsu_bus_buffer_empty_any,
-	bus_read_data_m,
-	lsu_imprecise_error_load_any,
-	lsu_imprecise_error_store_any,
-	lsu_imprecise_error_addr_any,
-	lsu_nonblock_load_valid_m,
-	lsu_nonblock_load_tag_m,
-	lsu_nonblock_load_inv_r,
-	lsu_nonblock_load_inv_tag_r,
-	lsu_nonblock_load_data_valid,
-	lsu_nonblock_load_data_error,
-	lsu_nonblock_load_data_tag,
-	lsu_nonblock_load_data,
-	lsu_pmu_bus_trxn,
-	lsu_pmu_bus_misaligned,
-	lsu_pmu_bus_error,
-	lsu_pmu_bus_busy,
-	lsu_axi_awvalid,
-	lsu_axi_awready,
-	lsu_axi_awid,
-	lsu_axi_awaddr,
-	lsu_axi_awregion,
-	lsu_axi_awlen,
-	lsu_axi_awsize,
-	lsu_axi_awburst,
-	lsu_axi_awlock,
-	lsu_axi_awcache,
-	lsu_axi_awprot,
-	lsu_axi_awqos,
-	lsu_axi_wvalid,
-	lsu_axi_wready,
-	lsu_axi_wdata,
-	lsu_axi_wstrb,
-	lsu_axi_wlast,
-	lsu_axi_bvalid,
-	lsu_axi_bready,
-	lsu_axi_bresp,
-	lsu_axi_bid,
-	lsu_axi_arvalid,
-	lsu_axi_arready,
-	lsu_axi_arid,
-	lsu_axi_araddr,
-	lsu_axi_arregion,
-	lsu_axi_arlen,
-	lsu_axi_arsize,
-	lsu_axi_arburst,
-	lsu_axi_arlock,
-	lsu_axi_arcache,
-	lsu_axi_arprot,
-	lsu_axi_arqos,
-	lsu_axi_rvalid,
-	lsu_axi_rready,
-	lsu_axi_rid,
-	lsu_axi_rdata,
-	lsu_axi_rresp,
-	lsu_bus_clk_en
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire clk_override;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire dec_tlu_external_ldfwd_disable;
-	input wire dec_tlu_wb_coalescing_disable;
-	input wire dec_tlu_sideeffect_posted_disable;
-	input wire lsu_bus_obuf_c1_clken;
-	input wire lsu_busm_clken;
-	input wire lsu_c1_r_clk;
-	input wire lsu_c2_r_clk;
-	input wire lsu_bus_ibuf_c1_clk;
-	input wire lsu_bus_obuf_c1_clk;
-	input wire lsu_bus_buf_c1_clk;
-	input wire lsu_free_c2_clk;
-	input wire active_clk;
-	input wire lsu_busm_clk;
-	input wire dec_lsu_valid_raw_d;
-	input wire lsu_busreq_m;
-	input wire [13:0] lsu_pkt_m;
-	input wire [13:0] lsu_pkt_r;
-	input wire [31:0] lsu_addr_m;
-	input wire [31:0] lsu_addr_r;
-	input wire [31:0] end_addr_m;
-	input wire [31:0] end_addr_r;
-	input wire [31:0] store_data_r;
-	input wire dec_tlu_force_halt;
-	input wire lsu_commit_r;
-	input wire is_sideeffects_m;
-	input wire flush_m_up;
-	input wire flush_r;
-	input wire ldst_dual_d;
-	input wire ldst_dual_m;
-	input wire ldst_dual_r;
-	output wire lsu_busreq_r;
-	output wire lsu_bus_buffer_pend_any;
-	output wire lsu_bus_buffer_full_any;
-	output wire lsu_bus_buffer_empty_any;
-	output wire [31:0] bus_read_data_m;
-	output wire lsu_imprecise_error_load_any;
-	output wire lsu_imprecise_error_store_any;
-	output wire [31:0] lsu_imprecise_error_addr_any;
-	output wire lsu_nonblock_load_valid_m;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_tag_m;
-	output wire lsu_nonblock_load_inv_r;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_inv_tag_r;
-	output wire lsu_nonblock_load_data_valid;
-	output wire lsu_nonblock_load_data_error;
-	output wire [pt[164-:7] - 1:0] lsu_nonblock_load_data_tag;
-	output wire [31:0] lsu_nonblock_load_data;
-	output wire lsu_pmu_bus_trxn;
-	output wire lsu_pmu_bus_misaligned;
-	output wire lsu_pmu_bus_error;
-	output wire lsu_pmu_bus_busy;
-	output wire lsu_axi_awvalid;
-	input wire lsu_axi_awready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_awid;
-	output wire [31:0] lsu_axi_awaddr;
-	output wire [3:0] lsu_axi_awregion;
-	output wire [7:0] lsu_axi_awlen;
-	output wire [2:0] lsu_axi_awsize;
-	output wire [1:0] lsu_axi_awburst;
-	output wire lsu_axi_awlock;
-	output wire [3:0] lsu_axi_awcache;
-	output wire [2:0] lsu_axi_awprot;
-	output wire [3:0] lsu_axi_awqos;
-	output wire lsu_axi_wvalid;
-	input wire lsu_axi_wready;
-	output wire [63:0] lsu_axi_wdata;
-	output wire [7:0] lsu_axi_wstrb;
-	output wire lsu_axi_wlast;
-	input wire lsu_axi_bvalid;
-	output wire lsu_axi_bready;
-	input wire [1:0] lsu_axi_bresp;
-	input wire [pt[181-:8] - 1:0] lsu_axi_bid;
-	output wire lsu_axi_arvalid;
-	input wire lsu_axi_arready;
-	output wire [pt[181-:8] - 1:0] lsu_axi_arid;
-	output wire [31:0] lsu_axi_araddr;
-	output wire [3:0] lsu_axi_arregion;
-	output wire [7:0] lsu_axi_arlen;
-	output wire [2:0] lsu_axi_arsize;
-	output wire [1:0] lsu_axi_arburst;
-	output wire lsu_axi_arlock;
-	output wire [3:0] lsu_axi_arcache;
-	output wire [2:0] lsu_axi_arprot;
-	output wire [3:0] lsu_axi_arqos;
-	input wire lsu_axi_rvalid;
-	output wire lsu_axi_rready;
-	input wire [pt[181-:8] - 1:0] lsu_axi_rid;
-	input wire [63:0] lsu_axi_rdata;
-	input wire [1:0] lsu_axi_rresp;
-	input wire lsu_bus_clk_en;
-	wire lsu_bus_clk_en_q;
-	wire [3:0] ldst_byteen_m;
-	wire [3:0] ldst_byteen_r;
-	wire [7:0] ldst_byteen_ext_m;
-	wire [7:0] ldst_byteen_ext_r;
-	wire [3:0] ldst_byteen_hi_m;
-	wire [3:0] ldst_byteen_hi_r;
-	wire [3:0] ldst_byteen_lo_m;
-	wire [3:0] ldst_byteen_lo_r;
-	wire is_sideeffects_r;
-	wire [63:0] store_data_ext_r;
-	wire [31:0] store_data_hi_r;
-	wire [31:0] store_data_lo_r;
-	wire addr_match_dw_lo_r_m;
-	wire addr_match_word_lo_r_m;
-	wire no_word_merge_r;
-	wire no_dword_merge_r;
-	wire ld_addr_rhit_lo_lo;
-	wire ld_addr_rhit_hi_lo;
-	wire ld_addr_rhit_lo_hi;
-	wire ld_addr_rhit_hi_hi;
-	wire [3:0] ld_byte_rhit_lo_lo;
-	wire [3:0] ld_byte_rhit_hi_lo;
-	wire [3:0] ld_byte_rhit_lo_hi;
-	wire [3:0] ld_byte_rhit_hi_hi;
-	wire [3:0] ld_byte_hit_lo;
-	wire [3:0] ld_byte_rhit_lo;
-	wire [3:0] ld_byte_hit_hi;
-	wire [3:0] ld_byte_rhit_hi;
-	wire [31:0] ld_fwddata_rpipe_lo;
-	wire [31:0] ld_fwddata_rpipe_hi;
-	wire [3:0] ld_byte_hit_buf_lo;
-	wire [3:0] ld_byte_hit_buf_hi;
-	wire [31:0] ld_fwddata_buf_lo;
-	wire [31:0] ld_fwddata_buf_hi;
-	wire [63:0] ld_fwddata_lo;
-	wire [63:0] ld_fwddata_hi;
-	wire [63:0] ld_fwddata_m;
-	reg ld_full_hit_hi_m;
-	reg ld_full_hit_lo_m;
-	wire ld_full_hit_m;
-	assign ldst_byteen_m[3:0] = (({4 {lsu_pkt_m[11]}} & 4'b0001) | ({4 {lsu_pkt_m[10]}} & 4'b0011)) | ({4 {lsu_pkt_m[9]}} & 4'b1111);
-	eb1_lsu_bus_buffer #(.pt(pt)) bus_buffer(
-		.clk(clk),
-		.clk_override(clk_override),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.dec_tlu_external_ldfwd_disable(dec_tlu_external_ldfwd_disable),
-		.dec_tlu_wb_coalescing_disable(dec_tlu_wb_coalescing_disable),
-		.dec_tlu_sideeffect_posted_disable(dec_tlu_sideeffect_posted_disable),
-		.dec_tlu_force_halt(dec_tlu_force_halt),
-		.lsu_bus_obuf_c1_clken(lsu_bus_obuf_c1_clken),
-		.lsu_busm_clken(lsu_busm_clken),
-		.lsu_c2_r_clk(lsu_c2_r_clk),
-		.lsu_bus_ibuf_c1_clk(lsu_bus_ibuf_c1_clk),
-		.lsu_bus_obuf_c1_clk(lsu_bus_obuf_c1_clk),
-		.lsu_bus_buf_c1_clk(lsu_bus_buf_c1_clk),
-		.lsu_free_c2_clk(lsu_free_c2_clk),
-		.lsu_busm_clk(lsu_busm_clk),
-		.dec_lsu_valid_raw_d(dec_lsu_valid_raw_d),
-		.lsu_pkt_m(lsu_pkt_m),
-		.lsu_pkt_r(lsu_pkt_r),
-		.lsu_addr_m(lsu_addr_m),
-		.end_addr_m(end_addr_m),
-		.lsu_addr_r(lsu_addr_r),
-		.end_addr_r(end_addr_r),
-		.store_data_r(store_data_r),
-		.no_word_merge_r(no_word_merge_r),
-		.no_dword_merge_r(no_dword_merge_r),
-		.lsu_busreq_m(lsu_busreq_m),
-		.lsu_busreq_r(lsu_busreq_r),
-		.ld_full_hit_m(ld_full_hit_m),
-		.flush_m_up(flush_m_up),
-		.flush_r(flush_r),
-		.lsu_commit_r(lsu_commit_r),
-		.is_sideeffects_r(is_sideeffects_r),
-		.ldst_dual_d(ldst_dual_d),
-		.ldst_dual_m(ldst_dual_m),
-		.ldst_dual_r(ldst_dual_r),
-		.ldst_byteen_ext_m(ldst_byteen_ext_m),
-		.lsu_bus_buffer_pend_any(lsu_bus_buffer_pend_any),
-		.lsu_bus_buffer_full_any(lsu_bus_buffer_full_any),
-		.lsu_bus_buffer_empty_any(lsu_bus_buffer_empty_any),
-		.ld_byte_hit_buf_lo(ld_byte_hit_buf_lo),
-		.ld_byte_hit_buf_hi(ld_byte_hit_buf_hi),
-		.ld_fwddata_buf_lo(ld_fwddata_buf_lo),
-		.ld_fwddata_buf_hi(ld_fwddata_buf_hi),
-		.lsu_imprecise_error_load_any(lsu_imprecise_error_load_any),
-		.lsu_imprecise_error_store_any(lsu_imprecise_error_store_any),
-		.lsu_imprecise_error_addr_any(lsu_imprecise_error_addr_any),
-		.lsu_nonblock_load_valid_m(lsu_nonblock_load_valid_m),
-		.lsu_nonblock_load_tag_m(lsu_nonblock_load_tag_m),
-		.lsu_nonblock_load_inv_r(lsu_nonblock_load_inv_r),
-		.lsu_nonblock_load_inv_tag_r(lsu_nonblock_load_inv_tag_r),
-		.lsu_nonblock_load_data_valid(lsu_nonblock_load_data_valid),
-		.lsu_nonblock_load_data_error(lsu_nonblock_load_data_error),
-		.lsu_nonblock_load_data_tag(lsu_nonblock_load_data_tag),
-		.lsu_nonblock_load_data(lsu_nonblock_load_data),
-		.lsu_pmu_bus_trxn(lsu_pmu_bus_trxn),
-		.lsu_pmu_bus_misaligned(lsu_pmu_bus_misaligned),
-		.lsu_pmu_bus_error(lsu_pmu_bus_error),
-		.lsu_pmu_bus_busy(lsu_pmu_bus_busy),
-		.lsu_axi_awvalid(lsu_axi_awvalid),
-		.lsu_axi_awready(lsu_axi_awready),
-		.lsu_axi_awid(lsu_axi_awid),
-		.lsu_axi_awaddr(lsu_axi_awaddr),
-		.lsu_axi_awregion(lsu_axi_awregion),
-		.lsu_axi_awlen(lsu_axi_awlen),
-		.lsu_axi_awsize(lsu_axi_awsize),
-		.lsu_axi_awburst(lsu_axi_awburst),
-		.lsu_axi_awlock(lsu_axi_awlock),
-		.lsu_axi_awcache(lsu_axi_awcache),
-		.lsu_axi_awprot(lsu_axi_awprot),
-		.lsu_axi_awqos(lsu_axi_awqos),
-		.lsu_axi_wvalid(lsu_axi_wvalid),
-		.lsu_axi_wready(lsu_axi_wready),
-		.lsu_axi_wdata(lsu_axi_wdata),
-		.lsu_axi_wstrb(lsu_axi_wstrb),
-		.lsu_axi_wlast(lsu_axi_wlast),
-		.lsu_axi_bvalid(lsu_axi_bvalid),
-		.lsu_axi_bready(lsu_axi_bready),
-		.lsu_axi_bresp(lsu_axi_bresp),
-		.lsu_axi_bid(lsu_axi_bid),
-		.lsu_axi_arvalid(lsu_axi_arvalid),
-		.lsu_axi_arready(lsu_axi_arready),
-		.lsu_axi_arid(lsu_axi_arid),
-		.lsu_axi_araddr(lsu_axi_araddr),
-		.lsu_axi_arregion(lsu_axi_arregion),
-		.lsu_axi_arlen(lsu_axi_arlen),
-		.lsu_axi_arsize(lsu_axi_arsize),
-		.lsu_axi_arburst(lsu_axi_arburst),
-		.lsu_axi_arlock(lsu_axi_arlock),
-		.lsu_axi_arcache(lsu_axi_arcache),
-		.lsu_axi_arprot(lsu_axi_arprot),
-		.lsu_axi_arqos(lsu_axi_arqos),
-		.lsu_axi_rvalid(lsu_axi_rvalid),
-		.lsu_axi_rready(lsu_axi_rready),
-		.lsu_axi_rid(lsu_axi_rid),
-		.lsu_axi_rdata(lsu_axi_rdata),
-		.lsu_axi_rresp(lsu_axi_rresp),
-		.lsu_bus_clk_en(lsu_bus_clk_en),
-		.lsu_bus_clk_en_q(lsu_bus_clk_en_q)
-	);
-	assign addr_match_dw_lo_r_m = lsu_addr_r[31:3] == lsu_addr_m[31:3];
-	assign addr_match_word_lo_r_m = addr_match_dw_lo_r_m & ~(lsu_addr_r[2] ^ lsu_addr_m[2]);
-	assign no_word_merge_r = ((lsu_busreq_r & ~ldst_dual_r) & lsu_busreq_m) & (lsu_pkt_m[7] | ~addr_match_word_lo_r_m);
-	assign no_dword_merge_r = ((lsu_busreq_r & ~ldst_dual_r) & lsu_busreq_m) & (lsu_pkt_m[7] | ~addr_match_dw_lo_r_m);
-	assign ldst_byteen_ext_m[7:0] = {4'b0000, ldst_byteen_m[3:0]} << lsu_addr_m[1:0];
-	assign ldst_byteen_ext_r[7:0] = {4'b0000, ldst_byteen_r[3:0]} << lsu_addr_r[1:0];
-	assign store_data_ext_r[63:0] = {32'b00000000000000000000000000000000, store_data_r[31:0]} << {lsu_addr_r[1:0], 3'b000};
-	assign ldst_byteen_hi_m[3:0] = ldst_byteen_ext_m[7:4];
-	assign ldst_byteen_lo_m[3:0] = ldst_byteen_ext_m[3:0];
-	assign ldst_byteen_hi_r[3:0] = ldst_byteen_ext_r[7:4];
-	assign ldst_byteen_lo_r[3:0] = ldst_byteen_ext_r[3:0];
-	assign store_data_hi_r[31:0] = store_data_ext_r[63:32];
-	assign store_data_lo_r[31:0] = store_data_ext_r[31:0];
-	assign ld_addr_rhit_lo_lo = (((lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & lsu_busreq_m;
-	assign ld_addr_rhit_lo_hi = (((end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & lsu_busreq_m;
-	assign ld_addr_rhit_hi_lo = (((lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & lsu_busreq_m;
-	assign ld_addr_rhit_hi_hi = (((end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & lsu_busreq_m;
-	generate
-		genvar i;
-		for (i = 0; i < 4; i = i + 1) begin : GenBusBufFwd
-			assign ld_byte_rhit_lo_lo[i] = (ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i]) & ldst_byteen_lo_m[i];
-			assign ld_byte_rhit_lo_hi[i] = (ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i]) & ldst_byteen_hi_m[i];
-			assign ld_byte_rhit_hi_lo[i] = (ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i]) & ldst_byteen_lo_m[i];
-			assign ld_byte_rhit_hi_hi[i] = (ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i]) & ldst_byteen_hi_m[i];
-			assign ld_byte_hit_lo[i] = (ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i]) | ld_byte_hit_buf_lo[i];
-			assign ld_byte_hit_hi[i] = (ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i]) | ld_byte_hit_buf_hi[i];
-			assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-			assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-			assign ld_fwddata_rpipe_lo[(8 * i) + 7:8 * i] = ({8 {ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8 * i) + 7:8 * i]) | ({8 {ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8 * i) + 7:8 * i]);
-			assign ld_fwddata_rpipe_hi[(8 * i) + 7:8 * i] = ({8 {ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8 * i) + 7:8 * i]) | ({8 {ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8 * i) + 7:8 * i]);
-			assign ld_fwddata_lo[(8 * i) + 7:8 * i] = (ld_byte_rhit_lo[i] ? ld_fwddata_rpipe_lo[(8 * i) + 7:8 * i] : ld_fwddata_buf_lo[(8 * i) + 7:8 * i]);
-			assign ld_fwddata_hi[(8 * i) + 7:8 * i] = (ld_byte_rhit_hi[i] ? ld_fwddata_rpipe_hi[(8 * i) + 7:8 * i] : ld_fwddata_buf_hi[(8 * i) + 7:8 * i]);
-		end
-	endgenerate
-	always @(*) begin
-		ld_full_hit_lo_m = 1'b1;
-		ld_full_hit_hi_m = 1'b1;
-		begin : sv2v_autoblock_58
-			reg signed [31:0] i;
-			for (i = 0; i < 4; i = i + 1)
-				begin
-					ld_full_hit_lo_m = ld_full_hit_lo_m & (ld_byte_hit_lo[i] | ~ldst_byteen_lo_m[i]);
-					ld_full_hit_hi_m = ld_full_hit_hi_m & (ld_byte_hit_hi[i] | ~ldst_byteen_hi_m[i]);
-				end
-		end
-	end
-	assign ld_full_hit_m = (((ld_full_hit_lo_m & ld_full_hit_hi_m) & lsu_busreq_m) & lsu_pkt_m[7]) & ~is_sideeffects_m;
-	assign ld_fwddata_m[63:0] = {ld_fwddata_hi[31:0], ld_fwddata_lo[31:0]} >> (8 * lsu_addr_m[1:0]);
-	assign bus_read_data_m[31:0] = ld_fwddata_m[31:0];
-	rvdff #(.WIDTH(1)) clken_ff(
-		.din(lsu_bus_clk_en),
-		.dout(lsu_bus_clk_en_q),
-		.clk(active_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) is_sideeffects_rff(
-		.din(is_sideeffects_m),
-		.dout(is_sideeffects_r),
-		.clk(lsu_c1_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(4)) lsu_byten_rff(
-		.rst_l(rst_l),
-		.din(ldst_byteen_m[3:0]),
-		.dout(ldst_byteen_r[3:0]),
-		.clk(lsu_c1_r_clk)
-	);
-endmodule
-module eb1_lsu_clkdomain (
-	clk,
-	active_clk,
-	rst_l,
-	dec_tlu_force_halt,
-	clk_override,
-	dma_dccm_req,
-	ldst_stbuf_reqvld_r,
-	stbuf_reqvld_any,
-	stbuf_reqvld_flushed_any,
-	lsu_busreq_r,
-	lsu_bus_buffer_pend_any,
-	lsu_bus_buffer_empty_any,
-	lsu_stbuf_empty_any,
-	lsu_bus_clk_en,
-	lsu_p,
-	lsu_pkt_d,
-	lsu_pkt_m,
-	lsu_pkt_r,
-	lsu_bus_obuf_c1_clken,
-	lsu_busm_clken,
-	lsu_c1_m_clk,
-	lsu_c1_r_clk,
-	lsu_c2_m_clk,
-	lsu_c2_r_clk,
-	lsu_store_c1_m_clk,
-	lsu_store_c1_r_clk,
-	lsu_stbuf_c1_clk,
-	lsu_bus_obuf_c1_clk,
-	lsu_bus_ibuf_c1_clk,
-	lsu_bus_buf_c1_clk,
-	lsu_busm_clk,
-	lsu_free_c2_clk,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire active_clk;
-	input wire rst_l;
-	input wire dec_tlu_force_halt;
-	input wire clk_override;
-	input wire dma_dccm_req;
-	input wire ldst_stbuf_reqvld_r;
-	input wire stbuf_reqvld_any;
-	input wire stbuf_reqvld_flushed_any;
-	input wire lsu_busreq_r;
-	input wire lsu_bus_buffer_pend_any;
-	input wire lsu_bus_buffer_empty_any;
-	input wire lsu_stbuf_empty_any;
-	input wire lsu_bus_clk_en;
-	input wire [13:0] lsu_p;
-	input wire [13:0] lsu_pkt_d;
-	input wire [13:0] lsu_pkt_m;
-	input wire [13:0] lsu_pkt_r;
-	output wire lsu_bus_obuf_c1_clken;
-	output wire lsu_busm_clken;
-	output wire lsu_c1_m_clk;
-	output wire lsu_c1_r_clk;
-	output wire lsu_c2_m_clk;
-	output wire lsu_c2_r_clk;
-	output wire lsu_store_c1_m_clk;
-	output wire lsu_store_c1_r_clk;
-	output wire lsu_stbuf_c1_clk;
-	output wire lsu_bus_obuf_c1_clk;
-	output wire lsu_bus_ibuf_c1_clk;
-	output wire lsu_bus_buf_c1_clk;
-	output wire lsu_busm_clk;
-	output wire lsu_free_c2_clk;
-	input wire scan_mode;
-	wire lsu_c1_m_clken;
-	wire lsu_c1_r_clken;
-	wire lsu_c2_m_clken;
-	wire lsu_c2_r_clken;
-	wire lsu_c1_m_clken_q;
-	wire lsu_c1_r_clken_q;
-	wire lsu_store_c1_m_clken;
-	wire lsu_store_c1_r_clken;
-	wire lsu_stbuf_c1_clken;
-	wire lsu_bus_ibuf_c1_clken;
-	wire lsu_bus_buf_c1_clken;
-	wire lsu_free_c1_clken;
-	wire lsu_free_c1_clken_q;
-	wire lsu_free_c2_clken;
-	assign lsu_c1_m_clken = (lsu_p[0] | dma_dccm_req) | clk_override;
-	assign lsu_c1_r_clken = (lsu_pkt_m[0] | lsu_c1_m_clken_q) | clk_override;
-	assign lsu_c2_m_clken = (lsu_c1_m_clken | lsu_c1_m_clken_q) | clk_override;
-	assign lsu_c2_r_clken = (lsu_c1_r_clken | lsu_c1_r_clken_q) | clk_override;
-	assign lsu_store_c1_m_clken = (lsu_c1_m_clken & lsu_pkt_d[6]) | clk_override;
-	assign lsu_store_c1_r_clken = (lsu_c1_r_clken & lsu_pkt_m[6]) | clk_override;
-	assign lsu_stbuf_c1_clken = ((ldst_stbuf_reqvld_r | stbuf_reqvld_any) | stbuf_reqvld_flushed_any) | clk_override;
-	assign lsu_bus_ibuf_c1_clken = lsu_busreq_r | clk_override;
-	assign lsu_bus_obuf_c1_clken = ((lsu_bus_buffer_pend_any | lsu_busreq_r) | clk_override) & lsu_bus_clk_en;
-	assign lsu_bus_buf_c1_clken = ((~lsu_bus_buffer_empty_any | lsu_busreq_r) | dec_tlu_force_halt) | clk_override;
-	assign lsu_free_c1_clken = (((((lsu_p[0] | lsu_pkt_d[0]) | lsu_pkt_m[0]) | lsu_pkt_r[0]) | ~lsu_bus_buffer_empty_any) | ~lsu_stbuf_empty_any) | clk_override;
-	assign lsu_free_c2_clken = (lsu_free_c1_clken | lsu_free_c1_clken_q) | clk_override;
-	rvdff #(.WIDTH(1)) lsu_free_c1_clkenff(
-		.din(lsu_free_c1_clken),
-		.dout(lsu_free_c1_clken_q),
-		.clk(active_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) lsu_c1_m_clkenff(
-		.din(lsu_c1_m_clken),
-		.dout(lsu_c1_m_clken_q),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) lsu_c1_r_clkenff(
-		.din(lsu_c1_r_clken),
-		.dout(lsu_c1_r_clken_q),
-		.clk(lsu_free_c2_clk),
-		.rst_l(rst_l)
-	);
-	rvoclkhdr lsu_c1m_cgc(
-		.en(lsu_c1_m_clken),
-		.l1clk(lsu_c1_m_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_c1r_cgc(
-		.en(lsu_c1_r_clken),
-		.l1clk(lsu_c1_r_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_c2m_cgc(
-		.en(lsu_c2_m_clken),
-		.l1clk(lsu_c2_m_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_c2r_cgc(
-		.en(lsu_c2_r_clken),
-		.l1clk(lsu_c2_r_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_store_c1m_cgc(
-		.en(lsu_store_c1_m_clken),
-		.l1clk(lsu_store_c1_m_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_store_c1r_cgc(
-		.en(lsu_store_c1_r_clken),
-		.l1clk(lsu_store_c1_r_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_stbuf_c1_cgc(
-		.en(lsu_stbuf_c1_clken),
-		.l1clk(lsu_stbuf_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_bus_ibuf_c1_cgc(
-		.en(lsu_bus_ibuf_c1_clken),
-		.l1clk(lsu_bus_ibuf_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_bus_buf_c1_cgc(
-		.en(lsu_bus_buf_c1_clken),
-		.l1clk(lsu_bus_buf_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	assign lsu_busm_clken = ((~lsu_bus_buffer_empty_any | lsu_busreq_r) | clk_override) & lsu_bus_clk_en;
-	rvclkhdr lsu_bus_obuf_c1_cgc(
-		.en(lsu_bus_obuf_c1_clken),
-		.l1clk(lsu_bus_obuf_c1_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvclkhdr lsu_busm_cgc(
-		.en(lsu_busm_clken),
-		.l1clk(lsu_busm_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-	rvoclkhdr lsu_free_cgc(
-		.en(lsu_free_c2_clken),
-		.l1clk(lsu_free_c2_clk),
-		.clk(clk),
-		.scan_mode(scan_mode)
-	);
-endmodule
-module eb1_lsu_dccm_ctl (
-	lsu_c2_m_clk,
-	lsu_c2_r_clk,
-	lsu_c1_r_clk,
-	lsu_store_c1_r_clk,
-	lsu_free_c2_clk,
-	clk_override,
-	clk,
-	rst_l,
-	lsu_pkt_r,
-	lsu_pkt_m,
-	lsu_pkt_d,
-	addr_in_dccm_d,
-	addr_in_pic_d,
-	addr_in_pic_m,
-	addr_in_dccm_m,
-	addr_in_dccm_r,
-	addr_in_pic_r,
-	lsu_raw_fwd_lo_r,
-	lsu_raw_fwd_hi_r,
-	lsu_commit_r,
-	ldst_dual_m,
-	ldst_dual_r,
-	lsu_addr_d,
-	lsu_addr_m,
-	lsu_addr_r,
-	end_addr_d,
-	end_addr_m,
-	end_addr_r,
-	stbuf_reqvld_any,
-	stbuf_addr_any,
-	stbuf_data_any,
-	stbuf_ecc_any,
-	stbuf_fwddata_hi_m,
-	stbuf_fwddata_lo_m,
-	stbuf_fwdbyteen_hi_m,
-	stbuf_fwdbyteen_lo_m,
-	dccm_rdata_hi_r,
-	dccm_rdata_lo_r,
-	dccm_data_ecc_hi_r,
-	dccm_data_ecc_lo_r,
-	lsu_ld_data_r,
-	lsu_ld_data_corr_r,
-	lsu_double_ecc_error_r,
-	single_ecc_error_hi_r,
-	single_ecc_error_lo_r,
-	sec_data_hi_r,
-	sec_data_lo_r,
-	sec_data_hi_r_ff,
-	sec_data_lo_r_ff,
-	sec_data_ecc_hi_r_ff,
-	sec_data_ecc_lo_r_ff,
-	dccm_rdata_hi_m,
-	dccm_rdata_lo_m,
-	dccm_data_ecc_hi_m,
-	dccm_data_ecc_lo_m,
-	lsu_ld_data_m,
-	lsu_double_ecc_error_m,
-	sec_data_hi_m,
-	sec_data_lo_m,
-	store_data_m,
-	dma_dccm_wen,
-	dma_pic_wen,
-	dma_mem_tag_m,
-	dma_mem_addr,
-	dma_mem_wdata,
-	dma_dccm_wdata_lo,
-	dma_dccm_wdata_hi,
-	dma_dccm_wdata_ecc_hi,
-	dma_dccm_wdata_ecc_lo,
-	store_data_hi_r,
-	store_data_lo_r,
-	store_datafn_hi_r,
-	store_datafn_lo_r,
-	store_data_r,
-	ld_single_ecc_error_r,
-	ld_single_ecc_error_r_ff,
-	picm_mask_data_m,
-	lsu_stbuf_commit_any,
-	lsu_dccm_rden_m,
-	lsu_dccm_rden_r,
-	dccm_dma_rvalid,
-	dccm_dma_ecc_error,
-	dccm_dma_rtag,
-	dccm_dma_rdata,
-	dccm_wren,
-	dccm_rden,
-	dccm_wr_addr_lo,
-	dccm_wr_addr_hi,
-	dccm_rd_addr_lo,
-	dccm_rd_addr_hi,
-	dccm_wr_data_lo,
-	dccm_wr_data_hi,
-	dccm_rd_data_lo,
-	dccm_rd_data_hi,
-	picm_wren,
-	picm_rden,
-	picm_mken,
-	picm_rdaddr,
-	picm_wraddr,
-	picm_wr_data,
-	picm_rd_data,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire lsu_c2_m_clk;
-	input wire lsu_c2_r_clk;
-	input wire lsu_c1_r_clk;
-	input wire lsu_store_c1_r_clk;
-	input wire lsu_free_c2_clk;
-	input wire clk_override;
-	input wire clk;
-	input wire rst_l;
-	input wire [13:0] lsu_pkt_r;
-	input wire [13:0] lsu_pkt_m;
-	input wire [13:0] lsu_pkt_d;
-	input wire addr_in_dccm_d;
-	input wire addr_in_pic_d;
-	input wire addr_in_pic_m;
-	input wire addr_in_dccm_m;
-	input wire addr_in_dccm_r;
-	input wire addr_in_pic_r;
-	input wire lsu_raw_fwd_lo_r;
-	input wire lsu_raw_fwd_hi_r;
-	input wire lsu_commit_r;
-	input wire ldst_dual_m;
-	input wire ldst_dual_r;
-	input wire [31:0] lsu_addr_d;
-	input wire [pt[1398-:9] - 1:0] lsu_addr_m;
-	input wire [31:0] lsu_addr_r;
-	input wire [pt[1398-:9] - 1:0] end_addr_d;
-	input wire [pt[1398-:9] - 1:0] end_addr_m;
-	input wire [pt[1398-:9] - 1:0] end_addr_r;
-	input wire stbuf_reqvld_any;
-	input wire [pt[157-:9] - 1:0] stbuf_addr_any;
-	input wire [pt[1382-:10] - 1:0] stbuf_data_any;
-	input wire [pt[1372-:7] - 1:0] stbuf_ecc_any;
-	input wire [pt[1382-:10] - 1:0] stbuf_fwddata_hi_m;
-	input wire [pt[1382-:10] - 1:0] stbuf_fwddata_lo_m;
-	input wire [pt[1389-:7] - 1:0] stbuf_fwdbyteen_hi_m;
-	input wire [pt[1389-:7] - 1:0] stbuf_fwdbyteen_lo_m;
-	output wire [pt[1382-:10] - 1:0] dccm_rdata_hi_r;
-	output wire [pt[1382-:10] - 1:0] dccm_rdata_lo_r;
-	output wire [pt[1372-:7] - 1:0] dccm_data_ecc_hi_r;
-	output wire [pt[1372-:7] - 1:0] dccm_data_ecc_lo_r;
-	output wire [pt[1382-:10] - 1:0] lsu_ld_data_r;
-	output wire [pt[1382-:10] - 1:0] lsu_ld_data_corr_r;
-	input wire lsu_double_ecc_error_r;
-	input wire single_ecc_error_hi_r;
-	input wire single_ecc_error_lo_r;
-	input wire [pt[1382-:10] - 1:0] sec_data_hi_r;
-	input wire [pt[1382-:10] - 1:0] sec_data_lo_r;
-	input wire [pt[1382-:10] - 1:0] sec_data_hi_r_ff;
-	input wire [pt[1382-:10] - 1:0] sec_data_lo_r_ff;
-	input wire [pt[1372-:7] - 1:0] sec_data_ecc_hi_r_ff;
-	input wire [pt[1372-:7] - 1:0] sec_data_ecc_lo_r_ff;
-	output wire [pt[1382-:10] - 1:0] dccm_rdata_hi_m;
-	output wire [pt[1382-:10] - 1:0] dccm_rdata_lo_m;
-	output wire [pt[1372-:7] - 1:0] dccm_data_ecc_hi_m;
-	output wire [pt[1372-:7] - 1:0] dccm_data_ecc_lo_m;
-	output wire [pt[1382-:10] - 1:0] lsu_ld_data_m;
-	input wire lsu_double_ecc_error_m;
-	input wire [pt[1382-:10] - 1:0] sec_data_hi_m;
-	input wire [pt[1382-:10] - 1:0] sec_data_lo_m;
-	input wire [31:0] store_data_m;
-	input wire dma_dccm_wen;
-	input wire dma_pic_wen;
-	input wire [2:0] dma_mem_tag_m;
-	input wire [31:0] dma_mem_addr;
-	input wire [63:0] dma_mem_wdata;
-	input wire [31:0] dma_dccm_wdata_lo;
-	input wire [31:0] dma_dccm_wdata_hi;
-	input wire [pt[1372-:7] - 1:0] dma_dccm_wdata_ecc_hi;
-	input wire [pt[1372-:7] - 1:0] dma_dccm_wdata_ecc_lo;
-	output wire [pt[1382-:10] - 1:0] store_data_hi_r;
-	output wire [pt[1382-:10] - 1:0] store_data_lo_r;
-	output wire [pt[1382-:10] - 1:0] store_datafn_hi_r;
-	output wire [pt[1382-:10] - 1:0] store_datafn_lo_r;
-	output wire [31:0] store_data_r;
-	output wire ld_single_ecc_error_r;
-	output wire ld_single_ecc_error_r_ff;
-	output wire [31:0] picm_mask_data_m;
-	output wire lsu_stbuf_commit_any;
-	output wire lsu_dccm_rden_m;
-	output wire lsu_dccm_rden_r;
-	output wire dccm_dma_rvalid;
-	output wire dccm_dma_ecc_error;
-	output wire [2:0] dccm_dma_rtag;
-	output wire [63:0] dccm_dma_rdata;
-	output wire dccm_wren;
-	output wire dccm_rden;
-	output wire [pt[1398-:9] - 1:0] dccm_wr_addr_lo;
-	output wire [pt[1398-:9] - 1:0] dccm_wr_addr_hi;
-	output wire [pt[1398-:9] - 1:0] dccm_rd_addr_lo;
-	output wire [pt[1398-:9] - 1:0] dccm_rd_addr_hi;
-	output wire [pt[1360-:10] - 1:0] dccm_wr_data_lo;
-	output wire [pt[1360-:10] - 1:0] dccm_wr_data_hi;
-	input wire [pt[1360-:10] - 1:0] dccm_rd_data_lo;
-	input wire [pt[1360-:10] - 1:0] dccm_rd_data_hi;
-	output wire picm_wren;
-	output wire picm_rden;
-	output wire picm_mken;
-	output wire [31:0] picm_rdaddr;
-	output wire [31:0] picm_wraddr;
-	output wire [31:0] picm_wr_data;
-	input wire [31:0] picm_rd_data;
-	input wire scan_mode;
-	localparam DCCM_WIDTH_BITS = $clog2(pt[1389-:7]);
-	wire lsu_dccm_rden_d;
-	wire lsu_dccm_wren_d;
-	wire ld_single_ecc_error_lo_r;
-	wire ld_single_ecc_error_hi_r;
-	wire ld_single_ecc_error_lo_r_ns;
-	wire ld_single_ecc_error_hi_r_ns;
-	wire ld_single_ecc_error_lo_r_ff;
-	wire ld_single_ecc_error_hi_r_ff;
-	wire lsu_double_ecc_error_r_ff;
-	wire [pt[1398-:9] - 1:0] ld_sec_addr_lo_r_ff;
-	wire [pt[1398-:9] - 1:0] ld_sec_addr_hi_r_ff;
-	wire [pt[1382-:10] - 1:0] store_data_lo_r_in;
-	wire [pt[1382-:10] - 1:0] store_data_hi_r_in;
-	wire [63:0] picm_rd_data_m;
-	wire dccm_wr_bypass_d_m_hi;
-	wire dccm_wr_bypass_d_r_hi;
-	wire dccm_wr_bypass_d_m_lo;
-	wire dccm_wr_bypass_d_r_lo;
-	wire kill_ecc_corr_lo_r;
-	wire kill_ecc_corr_hi_r;
-	wire [3:0] store_byteen_m;
-	wire [3:0] store_byteen_r;
-	wire [7:0] store_byteen_ext_m;
-	wire [7:0] store_byteen_ext_r;
-	generate
-		if (pt[202-:5] == 1) begin : L2U_Plus1_1
-			wire [63:0] lsu_rdata_r;
-			wire [63:0] lsu_rdata_corr_r;
-			wire [63:0] dccm_rdata_r;
-			wire [63:0] dccm_rdata_corr_r;
-			wire [63:0] stbuf_fwddata_r;
-			wire [7:0] stbuf_fwdbyteen_r;
-			wire [31:0] stbuf_fwddata_lo_r;
-			wire [31:0] stbuf_fwddata_hi_r;
-			wire [3:0] stbuf_fwdbyteen_lo_r;
-			wire [3:0] stbuf_fwdbyteen_hi_r;
-			wire [31:0] lsu_rdata_lo_r;
-			wire [31:0] lsu_rdata_hi_r;
-			wire [63:0] picm_rd_data_r;
-			wire [63:32] lsu_ld_data_r_nc;
-			wire [63:32] lsu_ld_data_corr_r_nc;
-			wire [2:0] dma_mem_tag_r;
-			wire stbuf_fwddata_en;
-			assign dccm_dma_rvalid = (lsu_pkt_r[0] & lsu_pkt_r[7]) & lsu_pkt_r[4];
-			assign dccm_dma_ecc_error = lsu_double_ecc_error_r;
-			assign dccm_dma_rtag[2:0] = dma_mem_tag_r[2:0];
-			assign dccm_dma_rdata[63:0] = (ldst_dual_r ? lsu_rdata_corr_r[63:0] : {2 {lsu_rdata_corr_r[31:0]}});
-			assign {lsu_ld_data_r_nc[63:32], lsu_ld_data_r[31:0]} = lsu_rdata_r[63:0] >> (8 * lsu_addr_r[1:0]);
-			assign {lsu_ld_data_corr_r_nc[63:32], lsu_ld_data_corr_r[31:0]} = lsu_rdata_corr_r[63:0] >> (8 * lsu_addr_r[1:0]);
-			assign picm_rd_data_r[63:32] = picm_rd_data_r[31:0];
-			assign dccm_rdata_r[63:0] = {dccm_rdata_hi_r[31:0], dccm_rdata_lo_r[31:0]};
-			assign dccm_rdata_corr_r[63:0] = {sec_data_hi_r[31:0], sec_data_lo_r[31:0]};
-			assign stbuf_fwddata_r[63:0] = {stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]};
-			assign stbuf_fwdbyteen_r[7:0] = {stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]};
-			assign stbuf_fwddata_en = (|stbuf_fwdbyteen_hi_m[3:0] | |stbuf_fwdbyteen_lo_m[3:0]) | clk_override;
-			genvar i;
-			for (i = 0; i < 8; i = i + 1) begin : GenDMAData
-				assign lsu_rdata_corr_r[(8 * i) + 7:8 * i] = (stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8 * i) + 7:8 * i] : (addr_in_pic_r ? picm_rd_data_r[(8 * i) + 7:8 * i] : {8 {addr_in_dccm_r}} & dccm_rdata_corr_r[(8 * i) + 7:8 * i]));
-				assign lsu_rdata_r[(8 * i) + 7:8 * i] = (stbuf_fwdbyteen_r[i] ? stbuf_fwddata_r[(8 * i) + 7:8 * i] : (addr_in_pic_r ? picm_rd_data_r[(8 * i) + 7:8 * i] : {8 {addr_in_dccm_r}} & dccm_rdata_r[(8 * i) + 7:8 * i]));
-			end
-			rvdffe #(.WIDTH(pt[1382-:10])) dccm_rdata_hi_r_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(dccm_rdata_hi_m[pt[1382-:10] - 1:0]),
-				.dout(dccm_rdata_hi_r[pt[1382-:10] - 1:0]),
-				.en((lsu_dccm_rden_m & ldst_dual_m) | clk_override)
-			);
-			rvdffe #(.WIDTH(pt[1382-:10])) dccm_rdata_lo_r_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(dccm_rdata_lo_m[pt[1382-:10] - 1:0]),
-				.dout(dccm_rdata_lo_r[pt[1382-:10] - 1:0]),
-				.en(lsu_dccm_rden_m | clk_override)
-			);
-			rvdffe #(.WIDTH(2 * pt[1372-:7])) dccm_data_ecc_r_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din({dccm_data_ecc_hi_m[pt[1372-:7] - 1:0], dccm_data_ecc_lo_m[pt[1372-:7] - 1:0]}),
-				.dout({dccm_data_ecc_hi_r[pt[1372-:7] - 1:0], dccm_data_ecc_lo_r[pt[1372-:7] - 1:0]}),
-				.en(lsu_dccm_rden_m | clk_override)
-			);
-			rvdff #(.WIDTH(8)) stbuf_fwdbyteen_ff(
-				.rst_l(rst_l),
-				.din({stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]}),
-				.dout({stbuf_fwdbyteen_hi_r[3:0], stbuf_fwdbyteen_lo_r[3:0]}),
-				.clk(lsu_c2_r_clk)
-			);
-			rvdffe #(.WIDTH(64)) stbuf_fwddata_ff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din({stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]}),
-				.dout({stbuf_fwddata_hi_r[31:0], stbuf_fwddata_lo_r[31:0]}),
-				.en(stbuf_fwddata_en)
-			);
-			rvdffe #(.WIDTH(32)) picm_rddata_rff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(picm_rd_data_m[31:0]),
-				.dout(picm_rd_data_r[31:0]),
-				.en(addr_in_pic_m | clk_override)
-			);
-			rvdff #(.WIDTH(3)) dma_mem_tag_rff(
-				.rst_l(rst_l),
-				.din(dma_mem_tag_m[2:0]),
-				.dout(dma_mem_tag_r[2:0]),
-				.clk(lsu_c1_r_clk)
-			);
-		end
-		else begin : L2U_Plus1_0
-			wire [63:0] lsu_rdata_m;
-			wire [63:0] lsu_rdata_corr_m;
-			wire [63:0] dccm_rdata_m;
-			wire [63:0] dccm_rdata_corr_m;
-			wire [63:0] stbuf_fwddata_m;
-			wire [7:0] stbuf_fwdbyteen_m;
-			wire [63:32] lsu_ld_data_m_nc;
-			wire [63:32] lsu_ld_data_corr_m_nc;
-			wire [31:0] lsu_ld_data_corr_m;
-			assign dccm_dma_rvalid = (lsu_pkt_m[0] & lsu_pkt_m[7]) & lsu_pkt_m[4];
-			assign dccm_dma_ecc_error = lsu_double_ecc_error_m;
-			assign dccm_dma_rtag[2:0] = dma_mem_tag_m[2:0];
-			assign dccm_dma_rdata[63:0] = (ldst_dual_m ? lsu_rdata_corr_m[63:0] : {2 {lsu_rdata_corr_m[31:0]}});
-			assign {lsu_ld_data_m_nc[63:32], lsu_ld_data_m[31:0]} = lsu_rdata_m[63:0] >> (8 * lsu_addr_m[1:0]);
-			assign {lsu_ld_data_corr_m_nc[63:32], lsu_ld_data_corr_m[31:0]} = lsu_rdata_corr_m[63:0] >> (8 * lsu_addr_m[1:0]);
-			assign dccm_rdata_m[63:0] = {dccm_rdata_hi_m[31:0], dccm_rdata_lo_m[31:0]};
-			assign dccm_rdata_corr_m[63:0] = {sec_data_hi_m[31:0], sec_data_lo_m[31:0]};
-			assign stbuf_fwddata_m[63:0] = {stbuf_fwddata_hi_m[31:0], stbuf_fwddata_lo_m[31:0]};
-			assign stbuf_fwdbyteen_m[7:0] = {stbuf_fwdbyteen_hi_m[3:0], stbuf_fwdbyteen_lo_m[3:0]};
-			genvar i;
-			for (i = 0; i < 8; i = i + 1) begin : GenLoop
-				assign lsu_rdata_corr_m[(8 * i) + 7:8 * i] = (stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8 * i) + 7:8 * i] : (addr_in_pic_m ? picm_rd_data_m[(8 * i) + 7:8 * i] : {8 {addr_in_dccm_m}} & dccm_rdata_corr_m[(8 * i) + 7:8 * i]));
-				assign lsu_rdata_m[(8 * i) + 7:8 * i] = (stbuf_fwdbyteen_m[i] ? stbuf_fwddata_m[(8 * i) + 7:8 * i] : (addr_in_pic_m ? picm_rd_data_m[(8 * i) + 7:8 * i] : {8 {addr_in_dccm_m}} & dccm_rdata_m[(8 * i) + 7:8 * i]));
-			end
-			rvdffe #(.WIDTH(32)) lsu_ld_data_corr_rff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(lsu_ld_data_corr_m[31:0]),
-				.dout(lsu_ld_data_corr_r[31:0]),
-				.en(((lsu_pkt_m[0] & lsu_pkt_m[7]) & (addr_in_pic_m | addr_in_dccm_m)) | clk_override)
-			);
-		end
-	endgenerate
-	assign kill_ecc_corr_lo_r = ((((((lsu_addr_d[pt[1398-:9] - 1:2] == lsu_addr_r[pt[1398-:9] - 1:2]) | (end_addr_d[pt[1398-:9] - 1:2] == lsu_addr_r[pt[1398-:9] - 1:2])) & lsu_pkt_d[0]) & lsu_pkt_d[6]) & lsu_pkt_d[4]) & addr_in_dccm_d) | ((((((lsu_addr_m[pt[1398-:9] - 1:2] == lsu_addr_r[pt[1398-:9] - 1:2]) | (end_addr_m[pt[1398-:9] - 1:2] == lsu_addr_r[pt[1398-:9] - 1:2])) & lsu_pkt_m[0]) & lsu_pkt_m[6]) & lsu_pkt_m[4]) & addr_in_dccm_m);
-	assign kill_ecc_corr_hi_r = ((((((lsu_addr_d[pt[1398-:9] - 1:2] == end_addr_r[pt[1398-:9] - 1:2]) | (end_addr_d[pt[1398-:9] - 1:2] == end_addr_r[pt[1398-:9] - 1:2])) & lsu_pkt_d[0]) & lsu_pkt_d[6]) & lsu_pkt_d[4]) & addr_in_dccm_d) | ((((((lsu_addr_m[pt[1398-:9] - 1:2] == end_addr_r[pt[1398-:9] - 1:2]) | (end_addr_m[pt[1398-:9] - 1:2] == end_addr_r[pt[1398-:9] - 1:2])) & lsu_pkt_m[0]) & lsu_pkt_m[6]) & lsu_pkt_m[4]) & addr_in_dccm_m);
-	assign ld_single_ecc_error_lo_r = (lsu_pkt_r[7] & single_ecc_error_lo_r) & ~lsu_raw_fwd_lo_r;
-	assign ld_single_ecc_error_hi_r = (lsu_pkt_r[7] & single_ecc_error_hi_r) & ~lsu_raw_fwd_hi_r;
-	assign ld_single_ecc_error_r = (ld_single_ecc_error_lo_r | ld_single_ecc_error_hi_r) & ~lsu_double_ecc_error_r;
-	assign ld_single_ecc_error_lo_r_ns = (ld_single_ecc_error_lo_r & (lsu_commit_r | lsu_pkt_r[4])) & ~kill_ecc_corr_lo_r;
-	assign ld_single_ecc_error_hi_r_ns = (ld_single_ecc_error_hi_r & (lsu_commit_r | lsu_pkt_r[4])) & ~kill_ecc_corr_hi_r;
-	assign ld_single_ecc_error_r_ff = (ld_single_ecc_error_lo_r_ff | ld_single_ecc_error_hi_r_ff) & ~lsu_double_ecc_error_r_ff;
-	assign lsu_stbuf_commit_any = stbuf_reqvld_any & (~((lsu_dccm_rden_d | lsu_dccm_wren_d) | ld_single_ecc_error_r_ff) | (lsu_dccm_rden_d & ~((stbuf_addr_any[pt[1275-:6]+:pt[1405-:7]] == lsu_addr_d[pt[1275-:6]+:pt[1405-:7]]) | (stbuf_addr_any[pt[1275-:6]+:pt[1405-:7]] == end_addr_d[pt[1275-:6]+:pt[1405-:7]]))));
-	assign lsu_dccm_rden_d = (lsu_pkt_d[0] & (lsu_pkt_d[7] | (lsu_pkt_d[6] & (~(lsu_pkt_d[9] | lsu_pkt_d[8]) | (lsu_addr_d[1:0] != 2'b00))))) & addr_in_dccm_d;
-	assign lsu_dccm_wren_d = dma_dccm_wen;
-	assign dccm_wren = (lsu_dccm_wren_d | lsu_stbuf_commit_any) | ld_single_ecc_error_r_ff;
-	assign dccm_rden = lsu_dccm_rden_d & addr_in_dccm_d;
-	assign dccm_wr_addr_lo[pt[1398-:9] - 1:0] = (ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? ld_sec_addr_lo_r_ff[pt[1398-:9] - 1:0] : ld_sec_addr_hi_r_ff[pt[1398-:9] - 1:0]) : (lsu_dccm_wren_d ? lsu_addr_d[pt[1398-:9] - 1:0] : stbuf_addr_any[pt[1398-:9] - 1:0]));
-	assign dccm_wr_addr_hi[pt[1398-:9] - 1:0] = (ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? ld_sec_addr_hi_r_ff[pt[1398-:9] - 1:0] : ld_sec_addr_lo_r_ff[pt[1398-:9] - 1:0]) : (lsu_dccm_wren_d ? end_addr_d[pt[1398-:9] - 1:0] : stbuf_addr_any[pt[1398-:9] - 1:0]));
-	assign dccm_rd_addr_lo[pt[1398-:9] - 1:0] = lsu_addr_d[pt[1398-:9] - 1:0];
-	assign dccm_rd_addr_hi[pt[1398-:9] - 1:0] = end_addr_d[pt[1398-:9] - 1:0];
-	assign dccm_wr_data_lo[pt[1360-:10] - 1:0] = (ld_single_ecc_error_r_ff ? (ld_single_ecc_error_lo_r_ff ? {sec_data_ecc_lo_r_ff[pt[1372-:7] - 1:0], sec_data_lo_r_ff[pt[1382-:10] - 1:0]} : {sec_data_ecc_hi_r_ff[pt[1372-:7] - 1:0], sec_data_hi_r_ff[pt[1382-:10] - 1:0]}) : (dma_dccm_wen ? {dma_dccm_wdata_ecc_lo[pt[1372-:7] - 1:0], dma_dccm_wdata_lo[pt[1382-:10] - 1:0]} : {stbuf_ecc_any[pt[1372-:7] - 1:0], stbuf_data_any[pt[1382-:10] - 1:0]}));
-	assign dccm_wr_data_hi[pt[1360-:10] - 1:0] = (ld_single_ecc_error_r_ff ? (ld_single_ecc_error_hi_r_ff ? {sec_data_ecc_hi_r_ff[pt[1372-:7] - 1:0], sec_data_hi_r_ff[pt[1382-:10] - 1:0]} : {sec_data_ecc_lo_r_ff[pt[1372-:7] - 1:0], sec_data_lo_r_ff[pt[1382-:10] - 1:0]}) : (dma_dccm_wen ? {dma_dccm_wdata_ecc_hi[pt[1372-:7] - 1:0], dma_dccm_wdata_hi[pt[1382-:10] - 1:0]} : {stbuf_ecc_any[pt[1372-:7] - 1:0], stbuf_data_any[pt[1382-:10] - 1:0]}));
-	assign store_byteen_m[3:0] = {4 {lsu_pkt_m[6]}} & ((({4 {lsu_pkt_m[11]}} & 4'b0001) | ({4 {lsu_pkt_m[10]}} & 4'b0011)) | ({4 {lsu_pkt_m[9]}} & 4'b1111));
-	assign store_byteen_r[3:0] = {4 {lsu_pkt_r[6]}} & ((({4 {lsu_pkt_r[11]}} & 4'b0001) | ({4 {lsu_pkt_r[10]}} & 4'b0011)) | ({4 {lsu_pkt_r[9]}} & 4'b1111));
-	assign store_byteen_ext_m[7:0] = {4'b0000, store_byteen_m[3:0]} << lsu_addr_m[1:0];
-	assign store_byteen_ext_r[7:0] = {4'b0000, store_byteen_r[3:0]} << lsu_addr_r[1:0];
-	assign dccm_wr_bypass_d_m_lo = (stbuf_addr_any[pt[1398-:9] - 1:2] == lsu_addr_m[pt[1398-:9] - 1:2]) & addr_in_dccm_m;
-	assign dccm_wr_bypass_d_m_hi = (stbuf_addr_any[pt[1398-:9] - 1:2] == end_addr_m[pt[1398-:9] - 1:2]) & addr_in_dccm_m;
-	assign dccm_wr_bypass_d_r_lo = (stbuf_addr_any[pt[1398-:9] - 1:2] == lsu_addr_r[pt[1398-:9] - 1:2]) & addr_in_dccm_r;
-	assign dccm_wr_bypass_d_r_hi = (stbuf_addr_any[pt[1398-:9] - 1:2] == end_addr_r[pt[1398-:9] - 1:2]) & addr_in_dccm_r;
-	generate
-		if (pt[202-:5] == 1) begin : L2U1_Plus1_1
-			wire dccm_wren_Q;
-			wire [31:0] dccm_wr_data_Q;
-			wire dccm_wr_bypass_d_m_lo_Q;
-			wire dccm_wr_bypass_d_m_hi_Q;
-			wire [31:0] store_data_pre_hi_r;
-			wire [31:0] store_data_pre_lo_r;
-			assign {store_data_pre_hi_r[31:0], store_data_pre_lo_r[31:0]} = {32'b00000000000000000000000000000000, store_data_r[31:0]} << (8 * lsu_addr_r[1:0]);
-			genvar i;
-			for (i = 0; i < 4; i = i + 1) begin
-				assign store_data_lo_r[(8 * i) + 7:8 * i] = (store_byteen_ext_r[i] ? store_data_pre_lo_r[(8 * i) + 7:8 * i] : (dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q ? dccm_wr_data_Q[(8 * i) + 7:8 * i] : sec_data_lo_r[(8 * i) + 7:8 * i]));
-				assign store_data_hi_r[(8 * i) + 7:8 * i] = (store_byteen_ext_r[i + 4] ? store_data_pre_hi_r[(8 * i) + 7:8 * i] : (dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q ? dccm_wr_data_Q[(8 * i) + 7:8 * i] : sec_data_hi_r[(8 * i) + 7:8 * i]));
-				assign store_datafn_lo_r[(8 * i) + 7:8 * i] = (store_byteen_ext_r[i] ? store_data_pre_lo_r[(8 * i) + 7:8 * i] : (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo ? stbuf_data_any[(8 * i) + 7:8 * i] : (dccm_wren_Q & dccm_wr_bypass_d_m_lo_Q ? dccm_wr_data_Q[(8 * i) + 7:8 * i] : sec_data_lo_r[(8 * i) + 7:8 * i])));
-				assign store_datafn_hi_r[(8 * i) + 7:8 * i] = (store_byteen_ext_r[i + 4] ? store_data_pre_hi_r[(8 * i) + 7:8 * i] : (lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi ? stbuf_data_any[(8 * i) + 7:8 * i] : (dccm_wren_Q & dccm_wr_bypass_d_m_hi_Q ? dccm_wr_data_Q[(8 * i) + 7:8 * i] : sec_data_hi_r[(8 * i) + 7:8 * i])));
-			end
-			rvdff #(.WIDTH(1)) dccm_wren_ff(
-				.rst_l(rst_l),
-				.din(lsu_stbuf_commit_any),
-				.dout(dccm_wren_Q),
-				.clk(lsu_free_c2_clk)
-			);
-			rvdffe #(.WIDTH(32)) dccm_wrdata_ff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(stbuf_data_any[31:0]),
-				.dout(dccm_wr_data_Q[31:0]),
-				.en(lsu_stbuf_commit_any | clk_override),
-				.clk(clk)
-			);
-			rvdff #(.WIDTH(1)) dccm_wrbyp_dm_loff(
-				.rst_l(rst_l),
-				.din(dccm_wr_bypass_d_m_lo),
-				.dout(dccm_wr_bypass_d_m_lo_Q),
-				.clk(lsu_free_c2_clk)
-			);
-			rvdff #(.WIDTH(1)) dccm_wrbyp_dm_hiff(
-				.rst_l(rst_l),
-				.din(dccm_wr_bypass_d_m_hi),
-				.dout(dccm_wr_bypass_d_m_hi_Q),
-				.clk(lsu_free_c2_clk)
-			);
-			rvdff #(.WIDTH(32)) store_data_rff(
-				.rst_l(rst_l),
-				.din(store_data_m[31:0]),
-				.dout(store_data_r[31:0]),
-				.clk(lsu_store_c1_r_clk)
-			);
-		end
-		else begin : L2U1_Plus1_0
-			wire [31:0] store_data_hi_m;
-			wire [31:0] store_data_lo_m;
-			wire [63:0] store_data_mask;
-			assign {store_data_hi_m[31:0], store_data_lo_m[31:0]} = {32'b00000000000000000000000000000000, store_data_m[31:0]} << (8 * lsu_addr_m[1:0]);
-			genvar i;
-			for (i = 0; i < 4; i = i + 1) begin
-				assign store_data_hi_r_in[(8 * i) + 7:8 * i] = (store_byteen_ext_m[i + 4] ? store_data_hi_m[(8 * i) + 7:8 * i] : (lsu_stbuf_commit_any & dccm_wr_bypass_d_m_hi ? stbuf_data_any[(8 * i) + 7:8 * i] : sec_data_hi_m[(8 * i) + 7:8 * i]));
-				assign store_data_lo_r_in[(8 * i) + 7:8 * i] = (store_byteen_ext_m[i] ? store_data_lo_m[(8 * i) + 7:8 * i] : (lsu_stbuf_commit_any & dccm_wr_bypass_d_m_lo ? stbuf_data_any[(8 * i) + 7:8 * i] : sec_data_lo_m[(8 * i) + 7:8 * i]));
-				assign store_datafn_lo_r[(8 * i) + 7:8 * i] = ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_lo) & ~store_byteen_ext_r[i] ? stbuf_data_any[(8 * i) + 7:8 * i] : store_data_lo_r[(8 * i) + 7:8 * i]);
-				assign store_datafn_hi_r[(8 * i) + 7:8 * i] = ((lsu_stbuf_commit_any & dccm_wr_bypass_d_r_hi) & ~store_byteen_ext_r[i + 4] ? stbuf_data_any[(8 * i) + 7:8 * i] : store_data_hi_r[(8 * i) + 7:8 * i]);
-			end
-			for (i = 0; i < 4; i = i + 1) assign store_data_mask[(8 * i) + 7:8 * i] = {8 {store_byteen_r[i]}};
-			function automatic [31:0] sv2v_cast_32;
-				input reg [31:0] inp;
-				sv2v_cast_32 = inp;
-			endfunction
-			assign store_data_r[31:0] = sv2v_cast_32({store_data_hi_r[31:0], store_data_lo_r[31:0]} >> (8 * lsu_addr_r[1:0])) & store_data_mask[31:0];
-			rvdffe #(.WIDTH(pt[1382-:10])) store_data_hi_rff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(store_data_hi_r_in[pt[1382-:10] - 1:0]),
-				.dout(store_data_hi_r[pt[1382-:10] - 1:0]),
-				.en(((ldst_dual_m & lsu_pkt_m[0]) & lsu_pkt_m[6]) | clk_override),
-				.clk(clk)
-			);
-			rvdff #(.WIDTH(pt[1382-:10])) store_data_lo_rff(
-				.rst_l(rst_l),
-				.din(store_data_lo_r_in[pt[1382-:10] - 1:0]),
-				.dout(store_data_lo_r[pt[1382-:10] - 1:0]),
-				.clk(lsu_store_c1_r_clk)
-			);
-		end
-	endgenerate
-	assign dccm_rdata_lo_m[pt[1382-:10] - 1:0] = dccm_rd_data_lo[pt[1382-:10] - 1:0];
-	assign dccm_rdata_hi_m[pt[1382-:10] - 1:0] = dccm_rd_data_hi[pt[1382-:10] - 1:0];
-	assign dccm_data_ecc_lo_m[pt[1372-:7] - 1:0] = dccm_rd_data_lo[pt[1360-:10] - 1:pt[1382-:10]];
-	assign dccm_data_ecc_hi_m[pt[1372-:7] - 1:0] = dccm_rd_data_hi[pt[1360-:10] - 1:pt[1382-:10]];
-	assign picm_wren = (((lsu_pkt_r[0] & lsu_pkt_r[6]) & addr_in_pic_r) & lsu_commit_r) | dma_pic_wen;
-	assign picm_rden = (lsu_pkt_d[0] & lsu_pkt_d[7]) & addr_in_pic_d;
-	assign picm_mken = (lsu_pkt_d[0] & lsu_pkt_d[6]) & addr_in_pic_d;
-	assign picm_rdaddr[31:0] = pt[130-:36] | {{32 - pt[94-:9] {1'b0}}, lsu_addr_d[pt[94-:9] - 1:0]};
-	assign picm_wraddr[31:0] = pt[130-:36] | {{32 - pt[94-:9] {1'b0}}, (dma_pic_wen ? dma_mem_addr[pt[94-:9] - 1:0] : lsu_addr_r[pt[94-:9] - 1:0])};
-	assign picm_wr_data[31:0] = (dma_pic_wen ? dma_mem_wdata[31:0] : store_datafn_lo_r[31:0]);
-	assign picm_mask_data_m[31:0] = picm_rd_data_m[31:0];
-	assign picm_rd_data_m[63:0] = {picm_rd_data[31:0], picm_rd_data[31:0]};
-	generate
-		if (pt[1365-:5] == 1) begin : Gen_dccm_enable
-			rvdff #(.WIDTH(1)) dccm_rden_mff(
-				.rst_l(rst_l),
-				.din(lsu_dccm_rden_d),
-				.dout(lsu_dccm_rden_m),
-				.clk(lsu_c2_m_clk)
-			);
-			rvdff #(.WIDTH(1)) dccm_rden_rff(
-				.rst_l(rst_l),
-				.din(lsu_dccm_rden_m),
-				.dout(lsu_dccm_rden_r),
-				.clk(lsu_c2_r_clk)
-			);
-			rvdff #(.WIDTH(1)) ld_double_ecc_error_rff(
-				.rst_l(rst_l),
-				.din(lsu_double_ecc_error_r),
-				.dout(lsu_double_ecc_error_r_ff),
-				.clk(lsu_free_c2_clk)
-			);
-			rvdff #(.WIDTH(1)) ld_single_ecc_error_hi_rff(
-				.rst_l(rst_l),
-				.din(ld_single_ecc_error_hi_r_ns),
-				.dout(ld_single_ecc_error_hi_r_ff),
-				.clk(lsu_free_c2_clk)
-			);
-			rvdff #(.WIDTH(1)) ld_single_ecc_error_lo_rff(
-				.rst_l(rst_l),
-				.din(ld_single_ecc_error_lo_r_ns),
-				.dout(ld_single_ecc_error_lo_r_ff),
-				.clk(lsu_free_c2_clk)
-			);
-			rvdffe #(.WIDTH(pt[1398-:9])) ld_sec_addr_hi_rff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(end_addr_r[pt[1398-:9] - 1:0]),
-				.dout(ld_sec_addr_hi_r_ff[pt[1398-:9] - 1:0]),
-				.en(ld_single_ecc_error_r | clk_override),
-				.clk(clk)
-			);
-			rvdffe #(.WIDTH(pt[1398-:9])) ld_sec_addr_lo_rff(
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(lsu_addr_r[pt[1398-:9] - 1:0]),
-				.dout(ld_sec_addr_lo_r_ff[pt[1398-:9] - 1:0]),
-				.en(ld_single_ecc_error_r | clk_override),
-				.clk(clk)
-			);
-		end
-		else begin : Gen_dccm_disable
-			assign lsu_dccm_rden_m = 1'b0;
-			assign lsu_dccm_rden_r = 1'b0;
-			assign lsu_double_ecc_error_r_ff = 1'b0;
-			assign ld_single_ecc_error_hi_r_ff = 1'b0;
-			assign ld_single_ecc_error_lo_r_ff = 1'b0;
-			assign ld_sec_addr_hi_r_ff[pt[1398-:9] - 1:0] = {pt[1398-:9] {1'sb0}};
-			assign ld_sec_addr_lo_r_ff[pt[1398-:9] - 1:0] = {pt[1398-:9] {1'sb0}};
-		end
-	endgenerate
-endmodule
-module eb1_lsu_dccm_mem (
-	VPWR,
-	VGND,
-	clk,
-	active_clk,
-	rst_l,
-	clk_override,
-	dccm_wren,
-	dccm_rden,
-	dccm_wr_addr_lo,
-	dccm_wr_addr_hi,
-	dccm_rd_addr_lo,
-	dccm_rd_addr_hi,
-	dccm_wr_data_lo,
-	dccm_wr_data_hi,
-	dccm_ext_in_pkt,
-	dccm_rd_data_lo,
-	dccm_rd_data_hi,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire VPWR;
-	input wire VGND;
-	input wire clk;
-	input wire active_clk;
-	input wire rst_l;
-	input wire clk_override;
-	input wire dccm_wren;
-	input wire dccm_rden;
-	input wire [pt[1398-:9] - 1:0] dccm_wr_addr_lo;
-	input wire [pt[1398-:9] - 1:0] dccm_wr_addr_hi;
-	input wire [pt[1398-:9] - 1:0] dccm_rd_addr_lo;
-	input wire [pt[1398-:9] - 1:0] dccm_rd_addr_hi;
-	input wire [pt[1360-:10] - 1:0] dccm_wr_data_lo;
-	input wire [pt[1360-:10] - 1:0] dccm_wr_data_hi;
-	input wire [(pt[1342-:9] * 12) - 1:0] dccm_ext_in_pkt;
-	output wire [pt[1360-:10] - 1:0] dccm_rd_data_lo;
-	output wire [pt[1360-:10] - 1:0] dccm_rd_data_hi;
-	input wire scan_mode;
-	localparam DCCM_WIDTH_BITS = $clog2(pt[1389-:7]);
-	localparam DCCM_INDEX_BITS = (pt[1398-:9] - pt[1405-:7]) - pt[1275-:6];
-	localparam DCCM_INDEX_DEPTH = (pt[1289-:14] * 1024) / (pt[1389-:7] * pt[1342-:9]);
-	wire [pt[1342-:9] - 1:0] wren_bank;
-	wire [pt[1342-:9] - 1:0] rden_bank;
-	wire [((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? (pt[1342-:9] * (((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1)) + (pt[1405-:7] + 1) : (pt[1342-:9] * (((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)) + (pt[1398-:9] - 2)):((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1)] addr_bank;
-	wire [pt[1398-:9] - 1:pt[1405-:7] + DCCM_WIDTH_BITS] rd_addr_even;
-	wire [pt[1398-:9] - 1:pt[1405-:7] + DCCM_WIDTH_BITS] rd_addr_odd;
-	wire rd_unaligned;
-	wire wr_unaligned;
-	wire [(pt[1342-:9] * pt[1360-:10]) - 1:0] dccm_bank_dout;
-	wire [pt[1360-:10] - 1:0] wrdata;
-	wire [(pt[1342-:9] * pt[1360-:10]) - 1:0] wr_data_bank;
-	wire [(DCCM_WIDTH_BITS + pt[1405-:7]) - 1:DCCM_WIDTH_BITS] dccm_rd_addr_lo_q;
-	wire [(DCCM_WIDTH_BITS + pt[1405-:7]) - 1:DCCM_WIDTH_BITS] dccm_rd_addr_hi_q;
-	wire [pt[1342-:9] - 1:0] dccm_clken;
-	assign rd_unaligned = dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt[1405-:7]] != dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt[1405-:7]];
-	assign wr_unaligned = dccm_wr_addr_lo[DCCM_WIDTH_BITS+:pt[1405-:7]] != dccm_wr_addr_hi[DCCM_WIDTH_BITS+:pt[1405-:7]];
-	assign dccm_rd_data_lo[pt[1360-:10] - 1:0] = dccm_bank_dout[(dccm_rd_addr_lo_q[pt[1275-:6]+:pt[1405-:7]] * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]];
-	assign dccm_rd_data_hi[pt[1360-:10] - 1:0] = dccm_bank_dout[(dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt[1405-:7]] * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]];
-	generate
-		genvar i;
-		for (i = 0; i < pt[1342-:9]; i = i + 1) begin : mem_bank
-			assign wren_bank[i] = dccm_wren & ((dccm_wr_addr_hi[2+:pt[1405-:7]] == i) | (dccm_wr_addr_lo[2+:pt[1405-:7]] == i));
-			assign rden_bank[i] = dccm_rden & ((dccm_rd_addr_hi[2+:pt[1405-:7]] == i) | (dccm_rd_addr_lo[2+:pt[1405-:7]] == i));
-			assign addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)) + ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + DCCM_WIDTH_BITS : (pt[1405-:7] + 2) - ((pt[1405-:7] + DCCM_WIDTH_BITS) - (pt[1398-:9] - 1))) : (((i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)) + ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + DCCM_WIDTH_BITS : (pt[1405-:7] + 2) - ((pt[1405-:7] + DCCM_WIDTH_BITS) - (pt[1398-:9] - 1)))) - DCCM_INDEX_BITS) + 1)+:DCCM_INDEX_BITS] = (wren_bank[i] ? ((dccm_wr_addr_hi[2+:pt[1405-:7]] == i) & wr_unaligned ? dccm_wr_addr_hi[pt[1405-:7] + DCCM_WIDTH_BITS+:DCCM_INDEX_BITS] : dccm_wr_addr_lo[pt[1405-:7] + DCCM_WIDTH_BITS+:DCCM_INDEX_BITS]) : ((dccm_rd_addr_hi[2+:pt[1405-:7]] == i) & rd_unaligned ? dccm_rd_addr_hi[pt[1405-:7] + DCCM_WIDTH_BITS+:DCCM_INDEX_BITS] : dccm_rd_addr_lo[pt[1405-:7] + DCCM_WIDTH_BITS+:DCCM_INDEX_BITS]));
-			assign wr_data_bank[i * pt[1360-:10]+:pt[1360-:10]] = ((dccm_wr_addr_hi[2+:pt[1405-:7]] == i) & wr_unaligned ? dccm_wr_data_hi[pt[1360-:10] - 1:0] : dccm_wr_data_lo[pt[1360-:10] - 1:0]);
-			assign dccm_clken[i] = (wren_bank[i] | rden_bank[i]) | clk_override;
-			if (DCCM_INDEX_DEPTH == 32768) begin : dccm
-				ram_32768x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 16384) begin : dccm
-				ram_16384x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 8192) begin : dccm
-				ram_8192x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 4096) begin : dccm
-				ram_4096x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 3072) begin : dccm
-				ram_3072x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 2048) begin : dccm
-				ram_2048x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 1024) begin : dccm
-				sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-					.vccd1(VPWR),
-					.vssd1(VGND),
-					.clk0(clk),
-					.csb0(~dccm_clken[i]),
-					.web0(~wren_bank[i]),
-					.wmask0(4'hf),
-					.addr0(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.din0(wr_data_bank[i * pt[1360-:10]+:pt[1360-:10]]),
-					.dout0(dccm_bank_dout[i * pt[1360-:10]+:pt[1360-:10]]),
-					.clk1(clk),
-					.csb1(1'b1),
-					.addr1(8'h00),
-					.dout1()
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 512) begin : dccm
-				ram_512x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 256) begin : dccm
-				sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-					.vccd1(VPWR),
-					.vssd1(VGND),
-					.clk0(clk),
-					.csb0(~dccm_clken[i]),
-					.web0(~wren_bank[i]),
-					.wmask0(4'hf),
-					.addr0(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.din0(wr_data_bank[(i * pt[1360-:10]) + 31-:32]),
-					.dout0(dccm_bank_dout[(i * pt[1360-:10]) + 31-:32]),
-					.clk1(clk),
-					.csb1(1'b1),
-					.addr1(8'h00),
-					.dout1()
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 128) begin : dccm
-				ram_128x39 dccm_bank(
-					.ME(dccm_clken[i]),
-					.CLK(clk),
-					.WE(wren_bank[i]),
-					.ADR(addr_bank[((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? pt[1405-:7] + 2 : pt[1398-:9] - 1) + (i * ((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1))+:((pt[1398-:9] - 1) >= (pt[1405-:7] + 2) ? ((pt[1398-:9] - 1) - (pt[1405-:7] + 2)) + 1 : ((pt[1405-:7] + 2) - (pt[1398-:9] - 1)) + 1)]),
-					.D(wr_data_bank[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.Q(dccm_bank_dout[(i * pt[1360-:10]) + (pt[1360-:10] - 1)-:pt[1360-:10]]),
-					.ROP(),
-					.TEST1(dccm_ext_in_pkt[(i * 12) + 11]),
-					.RME(dccm_ext_in_pkt[(i * 12) + 10]),
-					.RM(dccm_ext_in_pkt[(i * 12) + 9-:4]),
-					.LS(dccm_ext_in_pkt[(i * 12) + 5]),
-					.DS(dccm_ext_in_pkt[(i * 12) + 4]),
-					.SD(dccm_ext_in_pkt[(i * 12) + 3]),
-					.TEST_RNM(dccm_ext_in_pkt[(i * 12) + 2]),
-					.BC1(dccm_ext_in_pkt[(i * 12) + 1]),
-					.BC2(dccm_ext_in_pkt[i * 12]),
-					.*
-				);
-			end
-		end
-	endgenerate
-	rvdff #(.WIDTH(pt[1405-:7])) rd_addr_lo_ff(
-		.rst_l(rst_l),
-		.din(dccm_rd_addr_lo[DCCM_WIDTH_BITS+:pt[1405-:7]]),
-		.dout(dccm_rd_addr_lo_q[DCCM_WIDTH_BITS+:pt[1405-:7]]),
-		.clk(active_clk)
-	);
-	rvdff #(.WIDTH(pt[1405-:7])) rd_addr_hi_ff(
-		.rst_l(rst_l),
-		.din(dccm_rd_addr_hi[DCCM_WIDTH_BITS+:pt[1405-:7]]),
-		.dout(dccm_rd_addr_hi_q[DCCM_WIDTH_BITS+:pt[1405-:7]]),
-		.clk(active_clk)
-	);
-endmodule
-module eb1_lsu_ecc (
-	clk,
-	lsu_c2_r_clk,
-	clk_override,
-	rst_l,
-	scan_mode,
-	lsu_pkt_m,
-	lsu_pkt_r,
-	stbuf_data_any,
-	dec_tlu_core_ecc_disable,
-	lsu_dccm_rden_r,
-	addr_in_dccm_r,
-	lsu_addr_r,
-	end_addr_r,
-	dccm_rdata_hi_r,
-	dccm_rdata_lo_r,
-	dccm_data_ecc_hi_r,
-	dccm_data_ecc_lo_r,
-	sec_data_hi_r,
-	sec_data_lo_r,
-	sec_data_hi_r_ff,
-	sec_data_lo_r_ff,
-	ld_single_ecc_error_r,
-	ld_single_ecc_error_r_ff,
-	lsu_dccm_rden_m,
-	addr_in_dccm_m,
-	lsu_addr_m,
-	end_addr_m,
-	dccm_rdata_hi_m,
-	dccm_rdata_lo_m,
-	dccm_data_ecc_hi_m,
-	dccm_data_ecc_lo_m,
-	sec_data_hi_m,
-	sec_data_lo_m,
-	dma_dccm_wen,
-	dma_dccm_wdata_lo,
-	dma_dccm_wdata_hi,
-	dma_dccm_wdata_ecc_hi,
-	dma_dccm_wdata_ecc_lo,
-	stbuf_ecc_any,
-	sec_data_ecc_hi_r_ff,
-	sec_data_ecc_lo_r_ff,
-	single_ecc_error_hi_r,
-	single_ecc_error_lo_r,
-	lsu_single_ecc_error_r,
-	lsu_double_ecc_error_r,
-	lsu_single_ecc_error_m,
-	lsu_double_ecc_error_m
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire lsu_c2_r_clk;
-	input wire clk_override;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire [13:0] lsu_pkt_m;
-	input wire [13:0] lsu_pkt_r;
-	input wire [pt[1382-:10] - 1:0] stbuf_data_any;
-	input wire dec_tlu_core_ecc_disable;
-	input wire lsu_dccm_rden_r;
-	input wire addr_in_dccm_r;
-	input wire [pt[1398-:9] - 1:0] lsu_addr_r;
-	input wire [pt[1398-:9] - 1:0] end_addr_r;
-	input wire [pt[1382-:10] - 1:0] dccm_rdata_hi_r;
-	input wire [pt[1382-:10] - 1:0] dccm_rdata_lo_r;
-	input wire [pt[1372-:7] - 1:0] dccm_data_ecc_hi_r;
-	input wire [pt[1372-:7] - 1:0] dccm_data_ecc_lo_r;
-	output wire [pt[1382-:10] - 1:0] sec_data_hi_r;
-	output wire [pt[1382-:10] - 1:0] sec_data_lo_r;
-	output wire [pt[1382-:10] - 1:0] sec_data_hi_r_ff;
-	output wire [pt[1382-:10] - 1:0] sec_data_lo_r_ff;
-	input wire ld_single_ecc_error_r;
-	input wire ld_single_ecc_error_r_ff;
-	input wire lsu_dccm_rden_m;
-	input wire addr_in_dccm_m;
-	input wire [pt[1398-:9] - 1:0] lsu_addr_m;
-	input wire [pt[1398-:9] - 1:0] end_addr_m;
-	input wire [pt[1382-:10] - 1:0] dccm_rdata_hi_m;
-	input wire [pt[1382-:10] - 1:0] dccm_rdata_lo_m;
-	input wire [pt[1372-:7] - 1:0] dccm_data_ecc_hi_m;
-	input wire [pt[1372-:7] - 1:0] dccm_data_ecc_lo_m;
-	output wire [pt[1382-:10] - 1:0] sec_data_hi_m;
-	output wire [pt[1382-:10] - 1:0] sec_data_lo_m;
-	input wire dma_dccm_wen;
-	input wire [31:0] dma_dccm_wdata_lo;
-	input wire [31:0] dma_dccm_wdata_hi;
-	output wire [pt[1372-:7] - 1:0] dma_dccm_wdata_ecc_hi;
-	output wire [pt[1372-:7] - 1:0] dma_dccm_wdata_ecc_lo;
-	output wire [pt[1372-:7] - 1:0] stbuf_ecc_any;
-	output wire [pt[1372-:7] - 1:0] sec_data_ecc_hi_r_ff;
-	output wire [pt[1372-:7] - 1:0] sec_data_ecc_lo_r_ff;
-	output wire single_ecc_error_hi_r;
-	output wire single_ecc_error_lo_r;
-	output wire lsu_single_ecc_error_r;
-	output wire lsu_double_ecc_error_r;
-	output wire lsu_single_ecc_error_m;
-	output wire lsu_double_ecc_error_m;
-	wire is_ldst_r;
-	wire is_ldst_hi_any;
-	wire is_ldst_lo_any;
-	wire [pt[1382-:10] - 1:0] dccm_wdata_hi_any;
-	wire [pt[1382-:10] - 1:0] dccm_wdata_lo_any;
-	wire [pt[1372-:7] - 1:0] dccm_wdata_ecc_hi_any;
-	wire [pt[1372-:7] - 1:0] dccm_wdata_ecc_lo_any;
-	wire [pt[1382-:10] - 1:0] dccm_rdata_hi_any;
-	wire [pt[1382-:10] - 1:0] dccm_rdata_lo_any;
-	wire [pt[1372-:7] - 1:0] dccm_data_ecc_hi_any;
-	wire [pt[1372-:7] - 1:0] dccm_data_ecc_lo_any;
-	wire [pt[1382-:10] - 1:0] sec_data_hi_any;
-	wire [pt[1382-:10] - 1:0] sec_data_lo_any;
-	wire single_ecc_error_hi_any;
-	wire single_ecc_error_lo_any;
-	wire double_ecc_error_hi_any;
-	wire double_ecc_error_lo_any;
-	wire double_ecc_error_hi_m;
-	wire double_ecc_error_lo_m;
-	wire double_ecc_error_hi_r;
-	wire double_ecc_error_lo_r;
-	wire [6:0] ecc_out_hi_nc;
-	wire [6:0] ecc_out_lo_nc;
-	generate
-		if (pt[202-:5] == 1) begin : L2U_Plus1_1
-			wire ldst_dual_m;
-			wire ldst_dual_r;
-			wire is_ldst_m;
-			wire is_ldst_hi_r;
-			wire is_ldst_lo_r;
-			assign ldst_dual_r = lsu_addr_r[2] != end_addr_r[2];
-			assign is_ldst_r = ((lsu_pkt_r[0] & (lsu_pkt_r[7] | lsu_pkt_r[6])) & addr_in_dccm_r) & lsu_dccm_rden_r;
-			assign is_ldst_lo_r = is_ldst_r & ~dec_tlu_core_ecc_disable;
-			assign is_ldst_hi_r = (is_ldst_r & ldst_dual_r) & ~dec_tlu_core_ecc_disable;
-			assign is_ldst_hi_any = is_ldst_hi_r;
-			assign dccm_rdata_hi_any[pt[1382-:10] - 1:0] = dccm_rdata_hi_r[pt[1382-:10] - 1:0];
-			assign dccm_data_ecc_hi_any[pt[1372-:7] - 1:0] = dccm_data_ecc_hi_r[pt[1372-:7] - 1:0];
-			assign is_ldst_lo_any = is_ldst_lo_r;
-			assign dccm_rdata_lo_any[pt[1382-:10] - 1:0] = dccm_rdata_lo_r[pt[1382-:10] - 1:0];
-			assign dccm_data_ecc_lo_any[pt[1372-:7] - 1:0] = dccm_data_ecc_lo_r[pt[1372-:7] - 1:0];
-			assign sec_data_hi_r[pt[1382-:10] - 1:0] = sec_data_hi_any[pt[1382-:10] - 1:0];
-			assign single_ecc_error_hi_r = single_ecc_error_hi_any;
-			assign double_ecc_error_hi_r = double_ecc_error_hi_any;
-			assign sec_data_lo_r[pt[1382-:10] - 1:0] = sec_data_lo_any[pt[1382-:10] - 1:0];
-			assign single_ecc_error_lo_r = single_ecc_error_lo_any;
-			assign double_ecc_error_lo_r = double_ecc_error_lo_any;
-			assign lsu_single_ecc_error_r = single_ecc_error_hi_r | single_ecc_error_lo_r;
-			assign lsu_double_ecc_error_r = double_ecc_error_hi_r | double_ecc_error_lo_r;
-		end
-		else begin : L2U_Plus1_0
-			wire ldst_dual_m;
-			wire is_ldst_m;
-			wire is_ldst_hi_m;
-			wire is_ldst_lo_m;
-			assign ldst_dual_m = lsu_addr_m[2] != end_addr_m[2];
-			assign is_ldst_m = ((lsu_pkt_m[0] & (lsu_pkt_m[7] | lsu_pkt_m[6])) & addr_in_dccm_m) & lsu_dccm_rden_m;
-			assign is_ldst_lo_m = is_ldst_m & ~dec_tlu_core_ecc_disable;
-			assign is_ldst_hi_m = (is_ldst_m & (ldst_dual_m | lsu_pkt_m[4])) & ~dec_tlu_core_ecc_disable;
-			assign is_ldst_hi_any = is_ldst_hi_m;
-			assign dccm_rdata_hi_any[pt[1382-:10] - 1:0] = dccm_rdata_hi_m[pt[1382-:10] - 1:0];
-			assign dccm_data_ecc_hi_any[pt[1372-:7] - 1:0] = dccm_data_ecc_hi_m[pt[1372-:7] - 1:0];
-			assign is_ldst_lo_any = is_ldst_lo_m;
-			assign dccm_rdata_lo_any[pt[1382-:10] - 1:0] = dccm_rdata_lo_m[pt[1382-:10] - 1:0];
-			assign dccm_data_ecc_lo_any[pt[1372-:7] - 1:0] = dccm_data_ecc_lo_m[pt[1372-:7] - 1:0];
-			assign sec_data_hi_m[pt[1382-:10] - 1:0] = sec_data_hi_any[pt[1382-:10] - 1:0];
-			assign double_ecc_error_hi_m = double_ecc_error_hi_any;
-			assign sec_data_lo_m[pt[1382-:10] - 1:0] = sec_data_lo_any[pt[1382-:10] - 1:0];
-			assign double_ecc_error_lo_m = double_ecc_error_lo_any;
-			assign lsu_single_ecc_error_m = single_ecc_error_hi_any | single_ecc_error_lo_any;
-			assign lsu_double_ecc_error_m = double_ecc_error_hi_m | double_ecc_error_lo_m;
-			rvdff #(.WIDTH(1)) lsu_single_ecc_err_r(
-				.din(lsu_single_ecc_error_m),
-				.dout(lsu_single_ecc_error_r),
-				.clk(lsu_c2_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(1)) lsu_double_ecc_err_r(
-				.din(lsu_double_ecc_error_m),
-				.dout(lsu_double_ecc_error_r),
-				.clk(lsu_c2_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(1)) ldst_sec_lo_rff(
-				.din(single_ecc_error_lo_any),
-				.dout(single_ecc_error_lo_r),
-				.clk(lsu_c2_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(1)) ldst_sec_hi_rff(
-				.din(single_ecc_error_hi_any),
-				.dout(single_ecc_error_hi_r),
-				.clk(lsu_c2_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdffe #(.WIDTH(pt[1382-:10])) sec_data_hi_rff(
-				.din(sec_data_hi_m[pt[1382-:10] - 1:0]),
-				.dout(sec_data_hi_r[pt[1382-:10] - 1:0]),
-				.en(lsu_single_ecc_error_m | clk_override),
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-			rvdffe #(.WIDTH(pt[1382-:10])) sec_data_lo_rff(
-				.din(sec_data_lo_m[pt[1382-:10] - 1:0]),
-				.dout(sec_data_lo_r[pt[1382-:10] - 1:0]),
-				.en(lsu_single_ecc_error_m | clk_override),
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode)
-			);
-		end
-	endgenerate
-	assign dccm_wdata_lo_any[pt[1382-:10] - 1:0] = (ld_single_ecc_error_r_ff ? sec_data_lo_r_ff[pt[1382-:10] - 1:0] : (dma_dccm_wen ? dma_dccm_wdata_lo[pt[1382-:10] - 1:0] : stbuf_data_any[pt[1382-:10] - 1:0]));
-	assign dccm_wdata_hi_any[pt[1382-:10] - 1:0] = (ld_single_ecc_error_r_ff ? sec_data_hi_r_ff[pt[1382-:10] - 1:0] : (dma_dccm_wen ? dma_dccm_wdata_hi[pt[1382-:10] - 1:0] : 32'h00000000));
-	assign sec_data_ecc_hi_r_ff[pt[1372-:7] - 1:0] = dccm_wdata_ecc_hi_any[pt[1372-:7] - 1:0];
-	assign sec_data_ecc_lo_r_ff[pt[1372-:7] - 1:0] = dccm_wdata_ecc_lo_any[pt[1372-:7] - 1:0];
-	assign stbuf_ecc_any[pt[1372-:7] - 1:0] = dccm_wdata_ecc_lo_any[pt[1372-:7] - 1:0];
-	assign dma_dccm_wdata_ecc_hi[pt[1372-:7] - 1:0] = dccm_wdata_ecc_hi_any[pt[1372-:7] - 1:0];
-	assign dma_dccm_wdata_ecc_lo[pt[1372-:7] - 1:0] = dccm_wdata_ecc_lo_any[pt[1372-:7] - 1:0];
-	generate
-		if (pt[1365-:5] == 1) begin : Gen_dccm_enable
-			rvecc_decode lsu_ecc_decode_hi(
-				.en(is_ldst_hi_any),
-				.sed_ded(1'b0),
-				.din(dccm_rdata_hi_any[pt[1382-:10] - 1:0]),
-				.ecc_in(dccm_data_ecc_hi_any[pt[1372-:7] - 1:0]),
-				.dout(sec_data_hi_any[pt[1382-:10] - 1:0]),
-				.ecc_out(ecc_out_hi_nc[6:0]),
-				.single_ecc_error(single_ecc_error_hi_any),
-				.double_ecc_error(double_ecc_error_hi_any)
-			);
-			rvecc_decode lsu_ecc_decode_lo(
-				.en(is_ldst_lo_any),
-				.sed_ded(1'b0),
-				.din(dccm_rdata_lo_any[pt[1382-:10] - 1:0]),
-				.ecc_in(dccm_data_ecc_lo_any[pt[1372-:7] - 1:0]),
-				.dout(sec_data_lo_any[pt[1382-:10] - 1:0]),
-				.ecc_out(ecc_out_lo_nc[6:0]),
-				.single_ecc_error(single_ecc_error_lo_any),
-				.double_ecc_error(double_ecc_error_lo_any)
-			);
-			rvecc_encode lsu_ecc_encode_hi(
-				.din(dccm_wdata_hi_any[pt[1382-:10] - 1:0]),
-				.ecc_out(dccm_wdata_ecc_hi_any[pt[1372-:7] - 1:0])
-			);
-			rvecc_encode lsu_ecc_encode_lo(
-				.din(dccm_wdata_lo_any[pt[1382-:10] - 1:0]),
-				.ecc_out(dccm_wdata_ecc_lo_any[pt[1372-:7] - 1:0])
-			);
-		end
-		else begin : Gen_dccm_disable
-			assign sec_data_hi_any[pt[1382-:10] - 1:0] = {pt[1382-:10] {1'sb0}};
-			assign sec_data_lo_any[pt[1382-:10] - 1:0] = {pt[1382-:10] {1'sb0}};
-			assign single_ecc_error_hi_any = 1'b0;
-			assign double_ecc_error_hi_any = 1'b0;
-			assign single_ecc_error_lo_any = 1'b0;
-			assign double_ecc_error_lo_any = 1'b0;
-		end
-	endgenerate
-	rvdffe #(.WIDTH(pt[1382-:10])) sec_data_hi_rplus1ff(
-		.din(sec_data_hi_r[pt[1382-:10] - 1:0]),
-		.dout(sec_data_hi_r_ff[pt[1382-:10] - 1:0]),
-		.en(ld_single_ecc_error_r | clk_override),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-	rvdffe #(.WIDTH(pt[1382-:10])) sec_data_lo_rplus1ff(
-		.din(sec_data_lo_r[pt[1382-:10] - 1:0]),
-		.dout(sec_data_lo_r_ff[pt[1382-:10] - 1:0]),
-		.en(ld_single_ecc_error_r | clk_override),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode)
-	);
-endmodule
-module eb1_lsu_lsc_ctl (
-	rst_l,
-	clk_override,
-	clk,
-	lsu_c1_m_clk,
-	lsu_c1_r_clk,
-	lsu_c2_m_clk,
-	lsu_c2_r_clk,
-	lsu_store_c1_m_clk,
-	lsu_ld_data_r,
-	lsu_ld_data_corr_r,
-	lsu_single_ecc_error_r,
-	lsu_double_ecc_error_r,
-	lsu_ld_data_m,
-	lsu_single_ecc_error_m,
-	lsu_double_ecc_error_m,
-	flush_m_up,
-	flush_r,
-	ldst_dual_d,
-	ldst_dual_m,
-	ldst_dual_r,
-	exu_lsu_rs1_d,
-	exu_lsu_rs2_d,
-	lsu_p,
-	dec_lsu_valid_raw_d,
-	dec_lsu_offset_d,
-	picm_mask_data_m,
-	bus_read_data_m,
-	lsu_result_m,
-	lsu_result_corr_r,
-	lsu_addr_d,
-	lsu_addr_m,
-	lsu_addr_r,
-	end_addr_d,
-	end_addr_m,
-	end_addr_r,
-	store_data_m,
-	dec_tlu_mrac_ff,
-	lsu_exc_m,
-	is_sideeffects_m,
-	lsu_commit_r,
-	lsu_single_ecc_error_incr,
-	lsu_error_pkt_r,
-	lsu_fir_addr,
-	lsu_fir_error,
-	addr_in_dccm_d,
-	addr_in_dccm_m,
-	addr_in_dccm_r,
-	addr_in_pic_d,
-	addr_in_pic_m,
-	addr_in_pic_r,
-	addr_external_m,
-	dma_dccm_req,
-	dma_mem_addr,
-	dma_mem_sz,
-	dma_mem_write,
-	dma_mem_wdata,
-	lsu_pkt_d,
-	lsu_pkt_m,
-	lsu_pkt_r,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire rst_l;
-	input wire clk_override;
-	input wire clk;
-	input wire lsu_c1_m_clk;
-	input wire lsu_c1_r_clk;
-	input wire lsu_c2_m_clk;
-	input wire lsu_c2_r_clk;
-	input wire lsu_store_c1_m_clk;
-	input wire [31:0] lsu_ld_data_r;
-	input wire [31:0] lsu_ld_data_corr_r;
-	input wire lsu_single_ecc_error_r;
-	input wire lsu_double_ecc_error_r;
-	input wire [31:0] lsu_ld_data_m;
-	input wire lsu_single_ecc_error_m;
-	input wire lsu_double_ecc_error_m;
-	input wire flush_m_up;
-	input wire flush_r;
-	input wire ldst_dual_d;
-	input wire ldst_dual_m;
-	input wire ldst_dual_r;
-	input wire [31:0] exu_lsu_rs1_d;
-	input wire [31:0] exu_lsu_rs2_d;
-	input wire [13:0] lsu_p;
-	input wire dec_lsu_valid_raw_d;
-	input wire [11:0] dec_lsu_offset_d;
-	input wire [31:0] picm_mask_data_m;
-	input wire [31:0] bus_read_data_m;
-	output wire [31:0] lsu_result_m;
-	output wire [31:0] lsu_result_corr_r;
-	output wire [31:0] lsu_addr_d;
-	output wire [31:0] lsu_addr_m;
-	output wire [31:0] lsu_addr_r;
-	output wire [31:0] end_addr_d;
-	output wire [31:0] end_addr_m;
-	output wire [31:0] end_addr_r;
-	output wire [31:0] store_data_m;
-	input wire [31:0] dec_tlu_mrac_ff;
-	output wire lsu_exc_m;
-	output wire is_sideeffects_m;
-	output wire lsu_commit_r;
-	output wire lsu_single_ecc_error_incr;
-	output wire [39:0] lsu_error_pkt_r;
-	output wire [31:1] lsu_fir_addr;
-	output wire [1:0] lsu_fir_error;
-	output wire addr_in_dccm_d;
-	output wire addr_in_dccm_m;
-	output wire addr_in_dccm_r;
-	output wire addr_in_pic_d;
-	output wire addr_in_pic_m;
-	output wire addr_in_pic_r;
-	output wire addr_external_m;
-	input wire dma_dccm_req;
-	input wire [31:0] dma_mem_addr;
-	input wire [2:0] dma_mem_sz;
-	input wire dma_mem_write;
-	input wire [63:0] dma_mem_wdata;
-	output reg [13:0] lsu_pkt_d;
-	output wire [13:0] lsu_pkt_m;
-	output wire [13:0] lsu_pkt_r;
-	input wire scan_mode;
-	wire [31:3] end_addr_pre_m;
-	wire [31:3] end_addr_pre_r;
-	wire [31:0] full_addr_d;
-	wire [31:0] full_end_addr_d;
-	wire [31:0] lsu_rs1_d;
-	wire [11:0] lsu_offset_d;
-	wire [31:0] rs1_d;
-	wire [11:0] offset_d;
-	wire [12:0] end_addr_offset_d;
-	wire [2:0] addr_offset_d;
-	wire [63:0] dma_mem_wdata_shifted;
-	wire addr_external_d;
-	wire addr_external_r;
-	wire access_fault_d;
-	wire misaligned_fault_d;
-	wire access_fault_m;
-	wire misaligned_fault_m;
-	wire fir_dccm_access_error_d;
-	wire fir_nondccm_access_error_d;
-	wire fir_dccm_access_error_m;
-	wire fir_nondccm_access_error_m;
-	wire [3:0] exc_mscause_d;
-	wire [3:0] exc_mscause_m;
-	wire [31:0] rs1_d_raw;
-	wire [31:0] store_data_d;
-	wire [31:0] store_data_pre_m;
-	wire [31:0] store_data_m_in;
-	wire [31:0] bus_read_data_r;
-	reg [13:0] dma_pkt_d;
-	reg [13:0] lsu_pkt_m_in;
-	reg [13:0] lsu_pkt_r_in;
-	wire [39:0] lsu_error_pkt_m;
-	assign lsu_rs1_d[31:0] = (dec_lsu_valid_raw_d ? exu_lsu_rs1_d[31:0] : dma_mem_addr[31:0]);
-	assign lsu_offset_d[11:0] = dec_lsu_offset_d[11:0] & {12 {dec_lsu_valid_raw_d}};
-	assign rs1_d_raw[31:0] = lsu_rs1_d[31:0];
-	assign offset_d[11:0] = lsu_offset_d[11:0];
-	assign rs1_d[31:0] = (lsu_pkt_d[2] ? lsu_result_m[31:0] : rs1_d_raw[31:0]);
-	rvlsadder lsadder(
-		.rs1(rs1_d[31:0]),
-		.offset(offset_d[11:0]),
-		.dout(full_addr_d[31:0])
-	);
-	eb1_lsu_addrcheck #(.pt(pt)) addrcheck(
-		.start_addr_d(full_addr_d[31:0]),
-		.end_addr_d(full_end_addr_d[31:0]),
-		.rs1_region_d(rs1_d[31:28]),
-		.lsu_c2_m_clk(lsu_c2_m_clk),
-		.rst_l(rst_l),
-		.lsu_pkt_d(lsu_pkt_d),
-		.dec_tlu_mrac_ff(dec_tlu_mrac_ff),
-		.rs1_d(rs1_d),
-		.is_sideeffects_m(is_sideeffects_m),
-		.addr_in_dccm_d(addr_in_dccm_d),
-		.addr_in_pic_d(addr_in_pic_d),
-		.addr_external_d(addr_external_d),
-		.access_fault_d(access_fault_d),
-		.misaligned_fault_d(misaligned_fault_d),
-		.exc_mscause_d(exc_mscause_d),
-		.fir_dccm_access_error_d(fir_dccm_access_error_d),
-		.fir_nondccm_access_error_d(fir_nondccm_access_error_d),
-		.scan_mode(scan_mode)
-	);
-	assign addr_offset_d[2:0] = (({3 {lsu_pkt_d[10]}} & 3'b001) | ({3 {lsu_pkt_d[9]}} & 3'b011)) | ({3 {lsu_pkt_d[8]}} & 3'b111);
-	assign end_addr_offset_d[12:0] = {offset_d[11], offset_d[11:0]} + {9'b000000000, addr_offset_d[2:0]};
-	assign full_end_addr_d[31:0] = rs1_d[31:0] + {{19 {end_addr_offset_d[12]}}, end_addr_offset_d[12:0]};
-	assign end_addr_d[31:0] = full_end_addr_d[31:0];
-	assign lsu_exc_m = access_fault_m | misaligned_fault_m;
-	assign lsu_single_ecc_error_incr = ((lsu_single_ecc_error_r & ~lsu_double_ecc_error_r) & (lsu_commit_r | lsu_pkt_r[4])) & lsu_pkt_r[0];
-	generate
-		if (pt[202-:5] == 1) begin : L2U_Plus1_1
-			wire access_fault_r;
-			wire misaligned_fault_r;
-			wire [3:0] exc_mscause_r;
-			wire fir_dccm_access_error_r;
-			wire fir_nondccm_access_error_r;
-			assign lsu_error_pkt_r[0] = ((((access_fault_r | misaligned_fault_r) | lsu_double_ecc_error_r) & lsu_pkt_r[0]) & ~lsu_pkt_r[4]) & ~lsu_pkt_r[13];
-			assign lsu_error_pkt_r[1] = (lsu_single_ecc_error_r & ~lsu_error_pkt_r[0]) & ~lsu_pkt_r[4];
-			assign lsu_error_pkt_r[39] = lsu_pkt_r[6];
-			assign lsu_error_pkt_r[38] = ~misaligned_fault_r;
-			assign lsu_error_pkt_r[37:34] = ((lsu_double_ecc_error_r & ~misaligned_fault_r) & ~access_fault_r ? 4'h1 : exc_mscause_r[3:0]);
-			assign lsu_error_pkt_r[33:2] = lsu_addr_r[31:0];
-			assign lsu_fir_error[1:0] = (fir_nondccm_access_error_r ? 2'b11 : (fir_dccm_access_error_r ? 2'b10 : (lsu_pkt_r[13] & lsu_double_ecc_error_r ? 2'b01 : 2'b00)));
-			rvdff #(.WIDTH(1)) access_fault_rff(
-				.din(access_fault_m),
-				.dout(access_fault_r),
-				.clk(lsu_c1_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(1)) misaligned_fault_rff(
-				.din(misaligned_fault_m),
-				.dout(misaligned_fault_r),
-				.clk(lsu_c1_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(4)) exc_mscause_rff(
-				.din(exc_mscause_m[3:0]),
-				.dout(exc_mscause_r[3:0]),
-				.clk(lsu_c1_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(1)) fir_dccm_access_error_mff(
-				.din(fir_dccm_access_error_m),
-				.dout(fir_dccm_access_error_r),
-				.clk(lsu_c1_r_clk),
-				.rst_l(rst_l)
-			);
-			rvdff #(.WIDTH(1)) fir_nondccm_access_error_mff(
-				.din(fir_nondccm_access_error_m),
-				.dout(fir_nondccm_access_error_r),
-				.clk(lsu_c1_r_clk),
-				.rst_l(rst_l)
-			);
-		end
-		else begin : L2U_Plus1_0
-			wire [1:0] lsu_fir_error_m;
-			assign lsu_error_pkt_m[0] = (((((access_fault_m | misaligned_fault_m) | lsu_double_ecc_error_m) & lsu_pkt_m[0]) & ~lsu_pkt_m[4]) & ~lsu_pkt_m[13]) & ~flush_m_up;
-			assign lsu_error_pkt_m[1] = (lsu_single_ecc_error_m & ~lsu_error_pkt_m[0]) & ~lsu_pkt_m[4];
-			assign lsu_error_pkt_m[39] = lsu_pkt_m[6];
-			assign lsu_error_pkt_m[38] = ~misaligned_fault_m;
-			assign lsu_error_pkt_m[37:34] = ((lsu_double_ecc_error_m & ~misaligned_fault_m) & ~access_fault_m ? 4'h1 : exc_mscause_m[3:0]);
-			assign lsu_error_pkt_m[33:2] = lsu_addr_m[31:0];
-			assign lsu_fir_error_m[1:0] = (fir_nondccm_access_error_m ? 2'b11 : (fir_dccm_access_error_m ? 2'b10 : (lsu_pkt_m[13] & lsu_double_ecc_error_m ? 2'b01 : 2'b00)));
-			rvdff #(.WIDTH(1)) lsu_exc_valid_rff(
-				.rst_l(rst_l),
-				.din(lsu_error_pkt_m[0]),
-				.dout(lsu_error_pkt_r[0]),
-				.clk(lsu_c2_r_clk)
-			);
-			rvdff #(.WIDTH(1)) lsu_single_ecc_error_rff(
-				.rst_l(rst_l),
-				.din(lsu_error_pkt_m[1]),
-				.dout(lsu_error_pkt_r[1]),
-				.clk(lsu_c2_r_clk)
-			);
-			rvdffe #(.WIDTH(38)) lsu_error_pkt_rff(
-				.clk(clk),
-				.rst_l(rst_l),
-				.scan_mode(scan_mode),
-				.din(lsu_error_pkt_m[39:2]),
-				.dout(lsu_error_pkt_r[39:2]),
-				.en((lsu_error_pkt_m[0] | lsu_error_pkt_m[1]) | clk_override)
-			);
-			rvdff #(.WIDTH(2)) lsu_fir_error_rff(
-				.rst_l(rst_l),
-				.din(lsu_fir_error_m[1:0]),
-				.dout(lsu_fir_error[1:0]),
-				.clk(lsu_c2_r_clk)
-			);
-		end
-	endgenerate
-	always @(*) begin
-		dma_pkt_d = {14 {1'sb0}};
-		dma_pkt_d[0] = dma_dccm_req;
-		dma_pkt_d[4] = 1'b1;
-		dma_pkt_d[6] = dma_mem_write;
-		dma_pkt_d[7] = ~dma_mem_write;
-		dma_pkt_d[11] = dma_mem_sz[2:0] == 3'b000;
-		dma_pkt_d[10] = dma_mem_sz[2:0] == 3'b001;
-		dma_pkt_d[9] = dma_mem_sz[2:0] == 3'b010;
-		dma_pkt_d[8] = dma_mem_sz[2:0] == 3'b011;
-	end
-	always @(*) begin
-		lsu_pkt_d = (dec_lsu_valid_raw_d ? lsu_p : dma_pkt_d);
-		lsu_pkt_m_in = lsu_pkt_d;
-		lsu_pkt_r_in = lsu_pkt_m;
-		lsu_pkt_d[0] = (lsu_p[0] & ~(flush_m_up & ~lsu_p[13])) | dma_dccm_req;
-		lsu_pkt_m_in[0] = lsu_pkt_d[0] & ~(flush_m_up & ~lsu_pkt_d[4]);
-		lsu_pkt_r_in[0] = lsu_pkt_m[0] & ~(flush_m_up & ~lsu_pkt_m[4]);
-	end
-	rvdff #(.WIDTH(1)) lsu_pkt_vldmff(
-		.rst_l(rst_l),
-		.din(lsu_pkt_m_in[0]),
-		.dout(lsu_pkt_m[0]),
-		.clk(lsu_c2_m_clk)
-	);
-	rvdff #(.WIDTH(1)) lsu_pkt_vldrff(
-		.rst_l(rst_l),
-		.din(lsu_pkt_r_in[0]),
-		.dout(lsu_pkt_r[0]),
-		.clk(lsu_c2_r_clk)
-	);
-	rvdff #(.WIDTH(13)) lsu_pkt_mff(
-		.rst_l(rst_l),
-		.din(lsu_pkt_m_in[13:1]),
-		.dout(lsu_pkt_m[13:1]),
-		.clk(lsu_c1_m_clk)
-	);
-	rvdff #(.WIDTH(13)) lsu_pkt_rff(
-		.rst_l(rst_l),
-		.din(lsu_pkt_r_in[13:1]),
-		.dout(lsu_pkt_r[13:1]),
-		.clk(lsu_c1_r_clk)
-	);
-	generate
-		if (pt[202-:5] == 1) begin : L2U1_Plus1_1
-			wire [31:0] lsu_ld_datafn_r;
-			wire [31:0] lsu_ld_datafn_corr_r;
-			assign lsu_ld_datafn_r[31:0] = (addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_r[31:0]);
-			assign lsu_ld_datafn_corr_r[31:0] = (addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0]);
-			assign lsu_result_m[31:0] = (((({32 {lsu_pkt_r[5] & lsu_pkt_r[11]}} & {24'b000000000000000000000000, lsu_ld_datafn_r[7:0]}) | ({32 {lsu_pkt_r[5] & lsu_pkt_r[10]}} & {16'b0000000000000000, lsu_ld_datafn_r[15:0]})) | ({32 {~lsu_pkt_r[5] & lsu_pkt_r[11]}} & {{24 {lsu_ld_datafn_r[7]}}, lsu_ld_datafn_r[7:0]})) | ({32 {~lsu_pkt_r[5] & lsu_pkt_r[10]}} & {{16 {lsu_ld_datafn_r[15]}}, lsu_ld_datafn_r[15:0]})) | ({32 {lsu_pkt_r[9]}} & lsu_ld_datafn_r[31:0]);
-			assign lsu_result_corr_r[31:0] = (((({32 {lsu_pkt_r[5] & lsu_pkt_r[11]}} & {24'b000000000000000000000000, lsu_ld_datafn_corr_r[7:0]}) | ({32 {lsu_pkt_r[5] & lsu_pkt_r[10]}} & {16'b0000000000000000, lsu_ld_datafn_corr_r[15:0]})) | ({32 {~lsu_pkt_r[5] & lsu_pkt_r[11]}} & {{24 {lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]})) | ({32 {~lsu_pkt_r[5] & lsu_pkt_r[10]}} & {{16 {lsu_ld_datafn_corr_r[15]}}, lsu_ld_datafn_corr_r[15:0]})) | ({32 {lsu_pkt_r[9]}} & lsu_ld_datafn_corr_r[31:0]);
-		end
-		else begin : L2U1_Plus1_0
-			wire [31:0] lsu_ld_datafn_m;
-			wire [31:0] lsu_ld_datafn_corr_r;
-			assign lsu_ld_datafn_m[31:0] = (addr_external_m ? bus_read_data_m[31:0] : lsu_ld_data_m[31:0]);
-			assign lsu_ld_datafn_corr_r[31:0] = (addr_external_r ? bus_read_data_r[31:0] : lsu_ld_data_corr_r[31:0]);
-			assign lsu_result_m[31:0] = (((({32 {lsu_pkt_m[5] & lsu_pkt_m[11]}} & {24'b000000000000000000000000, lsu_ld_datafn_m[7:0]}) | ({32 {lsu_pkt_m[5] & lsu_pkt_m[10]}} & {16'b0000000000000000, lsu_ld_datafn_m[15:0]})) | ({32 {~lsu_pkt_m[5] & lsu_pkt_m[11]}} & {{24 {lsu_ld_datafn_m[7]}}, lsu_ld_datafn_m[7:0]})) | ({32 {~lsu_pkt_m[5] & lsu_pkt_m[10]}} & {{16 {lsu_ld_datafn_m[15]}}, lsu_ld_datafn_m[15:0]})) | ({32 {lsu_pkt_m[9]}} & lsu_ld_datafn_m[31:0]);
-			assign lsu_result_corr_r[31:0] = (((({32 {lsu_pkt_r[5] & lsu_pkt_r[11]}} & {24'b000000000000000000000000, lsu_ld_datafn_corr_r[7:0]}) | ({32 {lsu_pkt_r[5] & lsu_pkt_r[10]}} & {16'b0000000000000000, lsu_ld_datafn_corr_r[15:0]})) | ({32 {~lsu_pkt_r[5] & lsu_pkt_r[11]}} & {{24 {lsu_ld_datafn_corr_r[7]}}, lsu_ld_datafn_corr_r[7:0]})) | ({32 {~lsu_pkt_r[5] & lsu_pkt_r[10]}} & {{16 {lsu_ld_datafn_corr_r[15]}}, lsu_ld_datafn_corr_r[15:0]})) | ({32 {lsu_pkt_r[9]}} & lsu_ld_datafn_corr_r[31:0]);
-		end
-	endgenerate
-	assign lsu_fir_addr[31:1] = lsu_ld_data_corr_r[31:1];
-	assign lsu_addr_d[31:0] = full_addr_d[31:0];
-	assign lsu_commit_r = ((lsu_pkt_r[0] & (lsu_pkt_r[6] | lsu_pkt_r[7])) & ~flush_r) & ~lsu_pkt_r[4];
-	assign dma_mem_wdata_shifted[63:0] = dma_mem_wdata[63:0] >> {dma_mem_addr[2:0], 3'b000};
-	assign store_data_d[31:0] = (dma_dccm_req ? dma_mem_wdata_shifted[31:0] : exu_lsu_rs2_d[31:0]);
-	assign store_data_m_in[31:0] = (lsu_pkt_d[3] ? lsu_result_m[31:0] : store_data_d[31:0]);
-	assign store_data_m[31:0] = (picm_mask_data_m[31:0] | {32 {~addr_in_pic_m}}) & (lsu_pkt_m[1] ? lsu_result_m[31:0] : store_data_pre_m[31:0]);
-	rvdff #(.WIDTH(32)) sdmff(
-		.rst_l(rst_l),
-		.din(store_data_m_in[31:0]),
-		.dout(store_data_pre_m[31:0]),
-		.clk(lsu_store_c1_m_clk)
-	);
-	rvdff #(.WIDTH(32)) samff(
-		.rst_l(rst_l),
-		.din(lsu_addr_d[31:0]),
-		.dout(lsu_addr_m[31:0]),
-		.clk(lsu_c1_m_clk)
-	);
-	rvdff #(.WIDTH(32)) sarff(
-		.rst_l(rst_l),
-		.din(lsu_addr_m[31:0]),
-		.dout(lsu_addr_r[31:0]),
-		.clk(lsu_c1_r_clk)
-	);
-	assign end_addr_m[31:3] = (ldst_dual_m ? end_addr_pre_m[31:3] : lsu_addr_m[31:3]);
-	assign end_addr_r[31:3] = (ldst_dual_r ? end_addr_pre_r[31:3] : lsu_addr_r[31:3]);
-	rvdffe #(.WIDTH(29)) end_addr_hi_mff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din(end_addr_d[31:3]),
-		.dout(end_addr_pre_m[31:3]),
-		.en((lsu_pkt_d[0] & ldst_dual_d) | clk_override)
-	);
-	rvdffe #(.WIDTH(29)) end_addr_hi_rff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din(end_addr_m[31:3]),
-		.dout(end_addr_pre_r[31:3]),
-		.en((lsu_pkt_m[0] & ldst_dual_m) | clk_override)
-	);
-	rvdff #(.WIDTH(3)) end_addr_lo_mff(
-		.rst_l(rst_l),
-		.din(end_addr_d[2:0]),
-		.dout(end_addr_m[2:0]),
-		.clk(lsu_c1_m_clk)
-	);
-	rvdff #(.WIDTH(3)) end_addr_lo_rff(
-		.rst_l(rst_l),
-		.din(end_addr_m[2:0]),
-		.dout(end_addr_r[2:0]),
-		.clk(lsu_c1_r_clk)
-	);
-	rvdff #(.WIDTH(1)) addr_in_dccm_mff(
-		.din(addr_in_dccm_d),
-		.dout(addr_in_dccm_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) addr_in_dccm_rff(
-		.din(addr_in_dccm_m),
-		.dout(addr_in_dccm_r),
-		.clk(lsu_c1_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) addr_in_pic_mff(
-		.din(addr_in_pic_d),
-		.dout(addr_in_pic_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) addr_in_pic_rff(
-		.din(addr_in_pic_m),
-		.dout(addr_in_pic_r),
-		.clk(lsu_c1_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) addr_external_mff(
-		.din(addr_external_d),
-		.dout(addr_external_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) addr_external_rff(
-		.din(addr_external_m),
-		.dout(addr_external_r),
-		.clk(lsu_c1_r_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) access_fault_mff(
-		.din(access_fault_d),
-		.dout(access_fault_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) misaligned_fault_mff(
-		.din(misaligned_fault_d),
-		.dout(misaligned_fault_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(4)) exc_mscause_mff(
-		.din(exc_mscause_d[3:0]),
-		.dout(exc_mscause_m[3:0]),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) fir_dccm_access_error_mff(
-		.din(fir_dccm_access_error_d),
-		.dout(fir_dccm_access_error_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdff #(.WIDTH(1)) fir_nondccm_access_error_mff(
-		.din(fir_nondccm_access_error_d),
-		.dout(fir_nondccm_access_error_m),
-		.clk(lsu_c1_m_clk),
-		.rst_l(rst_l)
-	);
-	rvdffe #(.WIDTH(32)) bus_read_data_r_ff(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din(bus_read_data_m[31:0]),
-		.dout(bus_read_data_r[31:0]),
-		.en(addr_external_m | clk_override)
-	);
-endmodule
-module eb1_lsu_stbuf (
-	clk,
-	rst_l,
-	lsu_stbuf_c1_clk,
-	lsu_free_c2_clk,
-	store_stbuf_reqvld_r,
-	lsu_commit_r,
-	dec_lsu_valid_raw_d,
-	store_data_hi_r,
-	store_data_lo_r,
-	store_datafn_hi_r,
-	store_datafn_lo_r,
-	stbuf_reqvld_any,
-	stbuf_reqvld_flushed_any,
-	stbuf_addr_any,
-	stbuf_data_any,
-	lsu_stbuf_commit_any,
-	lsu_stbuf_full_any,
-	lsu_stbuf_empty_any,
-	ldst_stbuf_reqvld_r,
-	lsu_addr_d,
-	lsu_addr_m,
-	lsu_addr_r,
-	end_addr_d,
-	end_addr_m,
-	end_addr_r,
-	ldst_dual_d,
-	ldst_dual_m,
-	ldst_dual_r,
-	addr_in_dccm_m,
-	addr_in_dccm_r,
-	lsu_cmpen_m,
-	lsu_pkt_m,
-	lsu_pkt_r,
-	stbuf_fwddata_hi_m,
-	stbuf_fwddata_lo_m,
-	stbuf_fwdbyteen_hi_m,
-	stbuf_fwdbyteen_lo_m,
-	scan_mode
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire clk;
-	input wire rst_l;
-	input wire lsu_stbuf_c1_clk;
-	input wire lsu_free_c2_clk;
-	input wire store_stbuf_reqvld_r;
-	input wire lsu_commit_r;
-	input wire dec_lsu_valid_raw_d;
-	input wire [pt[1382-:10] - 1:0] store_data_hi_r;
-	input wire [pt[1382-:10] - 1:0] store_data_lo_r;
-	input wire [pt[1382-:10] - 1:0] store_datafn_hi_r;
-	input wire [pt[1382-:10] - 1:0] store_datafn_lo_r;
-	output wire stbuf_reqvld_any;
-	output wire stbuf_reqvld_flushed_any;
-	output wire [pt[157-:9] - 1:0] stbuf_addr_any;
-	output wire [pt[1382-:10] - 1:0] stbuf_data_any;
-	input wire lsu_stbuf_commit_any;
-	output wire lsu_stbuf_full_any;
-	output wire lsu_stbuf_empty_any;
-	output wire ldst_stbuf_reqvld_r;
-	input wire [pt[157-:9] - 1:0] lsu_addr_d;
-	input wire [31:0] lsu_addr_m;
-	input wire [31:0] lsu_addr_r;
-	input wire [pt[157-:9] - 1:0] end_addr_d;
-	input wire [31:0] end_addr_m;
-	input wire [31:0] end_addr_r;
-	input wire ldst_dual_d;
-	input wire ldst_dual_m;
-	input wire ldst_dual_r;
-	input wire addr_in_dccm_m;
-	input wire addr_in_dccm_r;
-	input wire lsu_cmpen_m;
-	input wire [13:0] lsu_pkt_m;
-	input wire [13:0] lsu_pkt_r;
-	output wire [pt[1382-:10] - 1:0] stbuf_fwddata_hi_m;
-	output wire [pt[1382-:10] - 1:0] stbuf_fwddata_lo_m;
-	output wire [pt[1389-:7] - 1:0] stbuf_fwdbyteen_hi_m;
-	output wire [pt[1389-:7] - 1:0] stbuf_fwdbyteen_lo_m;
-	input wire scan_mode;
-	localparam DEPTH = pt[148-:8];
-	localparam DATA_WIDTH = pt[1382-:10];
-	localparam BYTE_WIDTH = pt[1389-:7];
-	localparam DEPTH_LOG2 = $clog2(DEPTH);
-	wire [DEPTH - 1:0] stbuf_vld;
-	wire [DEPTH - 1:0] stbuf_dma_kill;
-	wire [(DEPTH * pt[157-:9]) - 1:0] stbuf_addr;
-	wire [(DEPTH * BYTE_WIDTH) - 1:0] stbuf_byteen;
-	wire [(DEPTH * DATA_WIDTH) - 1:0] stbuf_data;
-	wire [DEPTH - 1:0] sel_lo;
-	wire [DEPTH - 1:0] stbuf_wr_en;
-	reg [DEPTH - 1:0] stbuf_dma_kill_en;
-	wire [DEPTH - 1:0] stbuf_reset;
-	wire [(DEPTH * pt[157-:9]) - 1:0] stbuf_addrin;
-	wire [(DEPTH * DATA_WIDTH) - 1:0] stbuf_datain;
-	wire [(DEPTH * BYTE_WIDTH) - 1:0] stbuf_byteenin;
-	wire [7:0] store_byteen_ext_r;
-	wire [BYTE_WIDTH - 1:0] store_byteen_hi_r;
-	wire [BYTE_WIDTH - 1:0] store_byteen_lo_r;
-	wire WrPtrEn;
-	wire RdPtrEn;
-	wire [DEPTH_LOG2 - 1:0] WrPtr;
-	wire [DEPTH_LOG2 - 1:0] RdPtr;
-	wire [DEPTH_LOG2 - 1:0] NxtWrPtr;
-	wire [DEPTH_LOG2 - 1:0] NxtRdPtr;
-	wire [DEPTH_LOG2 - 1:0] WrPtrPlus1;
-	wire [DEPTH_LOG2 - 1:0] WrPtrPlus2;
-	wire [DEPTH_LOG2 - 1:0] RdPtrPlus1;
-	wire dual_stbuf_write_r;
-	wire isdccmst_m;
-	wire isdccmst_r;
-	reg [3:0] stbuf_numvld_any;
-	wire [3:0] stbuf_specvld_any;
-	wire [1:0] stbuf_specvld_m;
-	wire [1:0] stbuf_specvld_r;
-	wire [pt[157-:9] - 1:$clog2(BYTE_WIDTH)] cmpaddr_hi_m;
-	wire [pt[157-:9] - 1:$clog2(BYTE_WIDTH)] cmpaddr_lo_m;
-	reg [DEPTH - 1:0] stbuf_match_hi;
-	reg [DEPTH - 1:0] stbuf_match_lo;
-	reg [(DEPTH * BYTE_WIDTH) - 1:0] stbuf_fwdbyteenvec_hi;
-	reg [(DEPTH * BYTE_WIDTH) - 1:0] stbuf_fwdbyteenvec_lo;
-	reg [DATA_WIDTH - 1:0] stbuf_fwddata_hi_pre_m;
-	reg [DATA_WIDTH - 1:0] stbuf_fwddata_lo_pre_m;
-	reg [BYTE_WIDTH - 1:0] stbuf_fwdbyteen_hi_pre_m;
-	reg [BYTE_WIDTH - 1:0] stbuf_fwdbyteen_lo_pre_m;
-	wire [BYTE_WIDTH - 1:0] ld_byte_rhit_lo_lo;
-	wire [BYTE_WIDTH - 1:0] ld_byte_rhit_hi_lo;
-	wire [BYTE_WIDTH - 1:0] ld_byte_rhit_lo_hi;
-	wire [BYTE_WIDTH - 1:0] ld_byte_rhit_hi_hi;
-	wire ld_addr_rhit_lo_lo;
-	wire ld_addr_rhit_hi_lo;
-	wire ld_addr_rhit_lo_hi;
-	wire ld_addr_rhit_hi_hi;
-	wire [BYTE_WIDTH - 1:0] ld_byte_hit_lo;
-	wire [BYTE_WIDTH - 1:0] ld_byte_rhit_lo;
-	wire [BYTE_WIDTH - 1:0] ld_byte_hit_hi;
-	wire [BYTE_WIDTH - 1:0] ld_byte_rhit_hi;
-	wire [BYTE_WIDTH - 1:0] ldst_byteen_hi_r;
-	wire [BYTE_WIDTH - 1:0] ldst_byteen_lo_r;
-	wire [7:0] ldst_byteen_r;
-	wire [7:0] ldst_byteen_ext_r;
-	wire [31:0] ld_fwddata_rpipe_lo;
-	wire [31:0] ld_fwddata_rpipe_hi;
-	wire [DEPTH - 1:0] store_matchvec_lo_r;
-	wire [DEPTH - 1:0] store_matchvec_hi_r;
-	wire store_coalesce_lo_r;
-	wire store_coalesce_hi_r;
-	assign store_byteen_ext_r[7:0] = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-	assign store_byteen_hi_r[BYTE_WIDTH - 1:0] = store_byteen_ext_r[7:4] & {4 {lsu_pkt_r[6]}};
-	assign store_byteen_lo_r[BYTE_WIDTH - 1:0] = store_byteen_ext_r[3:0] & {4 {lsu_pkt_r[6]}};
-	assign RdPtrPlus1[DEPTH_LOG2 - 1:0] = RdPtr[DEPTH_LOG2 - 1:0] + 1'b1;
-	assign WrPtrPlus1[DEPTH_LOG2 - 1:0] = WrPtr[DEPTH_LOG2 - 1:0] + 1'b1;
-	assign WrPtrPlus2[DEPTH_LOG2 - 1:0] = WrPtr[DEPTH_LOG2 - 1:0] + 2'b10;
-	assign dual_stbuf_write_r = ldst_dual_r & store_stbuf_reqvld_r;
-	assign ldst_stbuf_reqvld_r = (lsu_commit_r | lsu_pkt_r[4]) & store_stbuf_reqvld_r;
-	generate
-		genvar i;
-		for (i = 0; i < DEPTH; i = i + 1) begin : FindMatchEntry
-			assign store_matchvec_lo_r[i] = (((stbuf_addr[(i * pt[157-:9]) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? pt[157-:9] - 1 : ((pt[157-:9] - 1) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)) - 1)-:((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)] == lsu_addr_r[pt[157-:9] - 1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i]) & ~stbuf_dma_kill[i]) & ~stbuf_reset[i];
-			assign store_matchvec_hi_r[i] = ((((stbuf_addr[(i * pt[157-:9]) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? pt[157-:9] - 1 : ((pt[157-:9] - 1) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)) - 1)-:((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)] == end_addr_r[pt[157-:9] - 1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i]) & ~stbuf_dma_kill[i]) & dual_stbuf_write_r) & ~stbuf_reset[i];
-		end
-	endgenerate
-	assign store_coalesce_lo_r = |store_matchvec_lo_r[DEPTH - 1:0];
-	assign store_coalesce_hi_r = |store_matchvec_hi_r[DEPTH - 1:0];
-	generate
-		if (pt[1365-:5] == 1) begin : Gen_dccm_enable
-			for (i = 0; i < DEPTH; i = i + 1) begin : GenStBuf
-				assign stbuf_wr_en[i] = ldst_stbuf_reqvld_r & ((((((i == WrPtr[DEPTH_LOG2 - 1:0]) & ~store_coalesce_lo_r) | (((i == WrPtr[DEPTH_LOG2 - 1:0]) & dual_stbuf_write_r) & ~store_coalesce_hi_r)) | (((i == WrPtrPlus1[DEPTH_LOG2 - 1:0]) & dual_stbuf_write_r) & ~(store_coalesce_lo_r | store_coalesce_hi_r))) | store_matchvec_lo_r[i]) | store_matchvec_hi_r[i]);
-				assign stbuf_reset[i] = (lsu_stbuf_commit_any | stbuf_reqvld_flushed_any) & (i == RdPtr[DEPTH_LOG2 - 1:0]);
-				assign sel_lo[i] = (((~ldst_dual_r | store_stbuf_reqvld_r) & (i == WrPtr[DEPTH_LOG2 - 1:0])) & ~store_coalesce_lo_r) | store_matchvec_lo_r[i];
-				assign stbuf_addrin[(i * pt[157-:9]) + (pt[157-:9] - 1)-:pt[157-:9]] = (sel_lo[i] ? lsu_addr_r[pt[157-:9] - 1:0] : end_addr_r[pt[157-:9] - 1:0]);
-				assign stbuf_byteenin[(i * BYTE_WIDTH) + (BYTE_WIDTH - 1)-:BYTE_WIDTH] = (sel_lo[i] ? stbuf_byteen[(i * BYTE_WIDTH) + (BYTE_WIDTH - 1)-:BYTE_WIDTH] | store_byteen_lo_r[BYTE_WIDTH - 1:0] : stbuf_byteen[(i * BYTE_WIDTH) + (BYTE_WIDTH - 1)-:BYTE_WIDTH] | store_byteen_hi_r[BYTE_WIDTH - 1:0]);
-				assign stbuf_datain[(i * DATA_WIDTH) + 7-:8] = (sel_lo[i] ? (~stbuf_byteen[i * BYTE_WIDTH] | store_byteen_lo_r[0] ? store_datafn_lo_r[7:0] : stbuf_data[(i * DATA_WIDTH) + 7-:8]) : (~stbuf_byteen[i * BYTE_WIDTH] | store_byteen_hi_r[0] ? store_datafn_hi_r[7:0] : stbuf_data[(i * DATA_WIDTH) + 7-:8]));
-				assign stbuf_datain[(i * DATA_WIDTH) + 15-:8] = (sel_lo[i] ? (~stbuf_byteen[(i * BYTE_WIDTH) + 1] | store_byteen_lo_r[1] ? store_datafn_lo_r[15:8] : stbuf_data[(i * DATA_WIDTH) + 15-:8]) : (~stbuf_byteen[(i * BYTE_WIDTH) + 1] | store_byteen_hi_r[1] ? store_datafn_hi_r[15:8] : stbuf_data[(i * DATA_WIDTH) + 15-:8]));
-				assign stbuf_datain[(i * DATA_WIDTH) + 23-:8] = (sel_lo[i] ? (~stbuf_byteen[(i * BYTE_WIDTH) + 2] | store_byteen_lo_r[2] ? store_datafn_lo_r[23:16] : stbuf_data[(i * DATA_WIDTH) + 23-:8]) : (~stbuf_byteen[(i * BYTE_WIDTH) + 2] | store_byteen_hi_r[2] ? store_datafn_hi_r[23:16] : stbuf_data[(i * DATA_WIDTH) + 23-:8]));
-				assign stbuf_datain[(i * DATA_WIDTH) + 31-:8] = (sel_lo[i] ? (~stbuf_byteen[(i * BYTE_WIDTH) + 3] | store_byteen_lo_r[3] ? store_datafn_lo_r[31:24] : stbuf_data[(i * DATA_WIDTH) + 31-:8]) : (~stbuf_byteen[(i * BYTE_WIDTH) + 3] | store_byteen_hi_r[3] ? store_datafn_hi_r[31:24] : stbuf_data[(i * DATA_WIDTH) + 31-:8]));
-				rvdffsc #(.WIDTH(1)) stbuf_vldff(
-					.din(1'b1),
-					.dout(stbuf_vld[i]),
-					.en(stbuf_wr_en[i]),
-					.clear(stbuf_reset[i]),
-					.clk(lsu_free_c2_clk),
-					.rst_l(rst_l)
-				);
-				rvdffsc #(.WIDTH(1)) stbuf_killff(
-					.din(1'b1),
-					.dout(stbuf_dma_kill[i]),
-					.en(stbuf_dma_kill_en[i]),
-					.clear(stbuf_reset[i]),
-					.clk(lsu_free_c2_clk),
-					.rst_l(rst_l)
-				);
-				rvdffe #(.WIDTH(pt[157-:9])) stbuf_addrff(
-					.din(stbuf_addrin[(i * pt[157-:9]) + (pt[157-:9] - 1)-:pt[157-:9]]),
-					.dout(stbuf_addr[(i * pt[157-:9]) + (pt[157-:9] - 1)-:pt[157-:9]]),
-					.en(stbuf_wr_en[i]),
-					.clk(clk),
-					.rst_l(rst_l),
-					.scan_mode(scan_mode)
-				);
-				rvdffsc #(.WIDTH(BYTE_WIDTH)) stbuf_byteenff(
-					.din(stbuf_byteenin[(i * BYTE_WIDTH) + (BYTE_WIDTH - 1)-:BYTE_WIDTH]),
-					.dout(stbuf_byteen[(i * BYTE_WIDTH) + (BYTE_WIDTH - 1)-:BYTE_WIDTH]),
-					.en(stbuf_wr_en[i]),
-					.clear(stbuf_reset[i]),
-					.clk(lsu_stbuf_c1_clk),
-					.rst_l(rst_l)
-				);
-				rvdffe #(.WIDTH(DATA_WIDTH)) stbuf_dataff(
-					.din(stbuf_datain[(i * DATA_WIDTH) + (DATA_WIDTH - 1)-:DATA_WIDTH]),
-					.dout(stbuf_data[(i * DATA_WIDTH) + (DATA_WIDTH - 1)-:DATA_WIDTH]),
-					.en(stbuf_wr_en[i]),
-					.clk(clk),
-					.rst_l(rst_l),
-					.scan_mode(scan_mode)
-				);
-			end
-		end
-		else begin : Gen_dccm_disable
-			assign stbuf_wr_en[DEPTH - 1:0] = {DEPTH {1'sb0}};
-			assign stbuf_reset[DEPTH - 1:0] = {DEPTH {1'sb0}};
-			assign stbuf_vld[DEPTH - 1:0] = {DEPTH {1'sb0}};
-			assign stbuf_dma_kill[DEPTH - 1:0] = {DEPTH {1'sb0}};
-			assign stbuf_addr[pt[157-:9] * ((DEPTH - 1) - (DEPTH - 1))+:pt[157-:9] * DEPTH] = {pt[157-:9] * DEPTH {1'sb0}};
-			assign stbuf_byteen[BYTE_WIDTH * ((DEPTH - 1) - (DEPTH - 1))+:BYTE_WIDTH * DEPTH] = {BYTE_WIDTH * DEPTH {1'sb0}};
-			assign stbuf_data[DATA_WIDTH * ((DEPTH - 1) - (DEPTH - 1))+:DATA_WIDTH * DEPTH] = {DATA_WIDTH * DEPTH {1'sb0}};
-		end
-	endgenerate
-	assign stbuf_reqvld_flushed_any = stbuf_vld[RdPtr] & stbuf_dma_kill[RdPtr];
-	assign stbuf_reqvld_any = (stbuf_vld[RdPtr] & ~stbuf_dma_kill[RdPtr]) & ~(|stbuf_dma_kill_en[DEPTH - 1:0]);
-	assign stbuf_addr_any[pt[157-:9] - 1:0] = stbuf_addr[(RdPtr * pt[157-:9]) + (pt[157-:9] - 1)-:pt[157-:9]];
-	assign stbuf_data_any[DATA_WIDTH - 1:0] = stbuf_data[(RdPtr * DATA_WIDTH) + (DATA_WIDTH - 1)-:DATA_WIDTH];
-	assign WrPtrEn = ((ldst_stbuf_reqvld_r & ~dual_stbuf_write_r) & ~(store_coalesce_hi_r | store_coalesce_lo_r)) | ((ldst_stbuf_reqvld_r & dual_stbuf_write_r) & ~(store_coalesce_hi_r & store_coalesce_lo_r));
-	assign NxtWrPtr[DEPTH_LOG2 - 1:0] = ((ldst_stbuf_reqvld_r & dual_stbuf_write_r) & ~(store_coalesce_hi_r | store_coalesce_lo_r) ? WrPtrPlus2[DEPTH_LOG2 - 1:0] : WrPtrPlus1[DEPTH_LOG2 - 1:0]);
-	assign RdPtrEn = lsu_stbuf_commit_any | stbuf_reqvld_flushed_any;
-	assign NxtRdPtr[DEPTH_LOG2 - 1:0] = RdPtrPlus1[DEPTH_LOG2 - 1:0];
-	always @(*) begin
-		stbuf_numvld_any[3:0] = {4 {1'sb0}};
-		begin : sv2v_autoblock_59
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				stbuf_numvld_any[3:0] = stbuf_numvld_any[3:0] + {3'b000, stbuf_vld[i]};
-		end
-	end
-	assign isdccmst_m = ((lsu_pkt_m[0] & lsu_pkt_m[6]) & addr_in_dccm_m) & ~lsu_pkt_m[4];
-	assign isdccmst_r = ((lsu_pkt_r[0] & lsu_pkt_r[6]) & addr_in_dccm_r) & ~lsu_pkt_r[4];
-	assign stbuf_specvld_m[1:0] = {1'b0, isdccmst_m} << (isdccmst_m & ldst_dual_m);
-	assign stbuf_specvld_r[1:0] = {1'b0, isdccmst_r} << (isdccmst_r & ldst_dual_r);
-	assign stbuf_specvld_any[3:0] = (stbuf_numvld_any[3:0] + {2'b00, stbuf_specvld_m[1:0]}) + {2'b00, stbuf_specvld_r[1:0]};
-	assign lsu_stbuf_full_any = (~ldst_dual_d & dec_lsu_valid_raw_d ? stbuf_specvld_any[3:0] >= DEPTH : stbuf_specvld_any[3:0] >= (DEPTH - 1));
-	assign lsu_stbuf_empty_any = stbuf_numvld_any[3:0] == 4'b0000;
-	assign cmpaddr_hi_m[pt[157-:9] - 1:$clog2(BYTE_WIDTH)] = end_addr_m[pt[157-:9] - 1:$clog2(BYTE_WIDTH)];
-	assign cmpaddr_lo_m[pt[157-:9] - 1:$clog2(BYTE_WIDTH)] = lsu_addr_m[pt[157-:9] - 1:$clog2(BYTE_WIDTH)];
-	always @(*) begin : GenLdFwd
-		stbuf_fwdbyteen_hi_pre_m[BYTE_WIDTH - 1:0] = {BYTE_WIDTH {1'sb0}};
-		stbuf_fwdbyteen_lo_pre_m[BYTE_WIDTH - 1:0] = {BYTE_WIDTH {1'sb0}};
-		begin : sv2v_autoblock_60
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				begin
-					stbuf_match_hi[i] = (((stbuf_addr[(i * pt[157-:9]) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? pt[157-:9] - 1 : ((pt[157-:9] - 1) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)) - 1)-:((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)] == cmpaddr_hi_m[pt[157-:9] - 1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i]) & ~stbuf_dma_kill[i]) & addr_in_dccm_m;
-					stbuf_match_lo[i] = (((stbuf_addr[(i * pt[157-:9]) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? pt[157-:9] - 1 : ((pt[157-:9] - 1) + ((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)) - 1)-:((pt[157-:9] - 1) >= $clog2(BYTE_WIDTH) ? ((pt[157-:9] - 1) - $clog2(BYTE_WIDTH)) + 1 : ($clog2(BYTE_WIDTH) - (pt[157-:9] - 1)) + 1)] == cmpaddr_lo_m[pt[157-:9] - 1:$clog2(BYTE_WIDTH)]) & stbuf_vld[i]) & ~stbuf_dma_kill[i]) & addr_in_dccm_m;
-					stbuf_dma_kill_en[i] = (((stbuf_match_hi[i] | stbuf_match_lo[i]) & lsu_pkt_m[0]) & lsu_pkt_m[4]) & lsu_pkt_m[6];
-					begin : sv2v_autoblock_61
-						reg signed [31:0] j;
-						for (j = 0; j < BYTE_WIDTH; j = j + 1)
-							begin
-								stbuf_fwdbyteenvec_hi[(i * BYTE_WIDTH) + j] = (stbuf_match_hi[i] & stbuf_byteen[(i * BYTE_WIDTH) + j]) & stbuf_vld[i];
-								stbuf_fwdbyteen_hi_pre_m[j] = stbuf_fwdbyteen_hi_pre_m[j] | stbuf_fwdbyteenvec_hi[(i * BYTE_WIDTH) + j];
-								stbuf_fwdbyteenvec_lo[(i * BYTE_WIDTH) + j] = (stbuf_match_lo[i] & stbuf_byteen[(i * BYTE_WIDTH) + j]) & stbuf_vld[i];
-								stbuf_fwdbyteen_lo_pre_m[j] = stbuf_fwdbyteen_lo_pre_m[j] | stbuf_fwdbyteenvec_lo[(i * BYTE_WIDTH) + j];
-							end
-					end
-				end
-		end
-	end
-	always @(*) begin : GenLdData
-		stbuf_fwddata_hi_pre_m[31:0] = {32 {1'sb0}};
-		stbuf_fwddata_lo_pre_m[31:0] = {32 {1'sb0}};
-		begin : sv2v_autoblock_62
-			reg signed [31:0] i;
-			for (i = 0; i < DEPTH; i = i + 1)
-				begin
-					stbuf_fwddata_hi_pre_m[31:0] = stbuf_fwddata_hi_pre_m[31:0] | ({32 {stbuf_match_hi[i]}} & stbuf_data[(i * DATA_WIDTH) + 31-:32]);
-					stbuf_fwddata_lo_pre_m[31:0] = stbuf_fwddata_lo_pre_m[31:0] | ({32 {stbuf_match_lo[i]}} & stbuf_data[(i * DATA_WIDTH) + 31-:32]);
-				end
-		end
-	end
-	assign ldst_byteen_r[7:0] = ((({8 {lsu_pkt_r[11]}} & 8'b00000001) | ({8 {lsu_pkt_r[10]}} & 8'b00000011)) | ({8 {lsu_pkt_r[9]}} & 8'b00001111)) | ({8 {lsu_pkt_r[8]}} & 8'b11111111);
-	assign ldst_byteen_ext_r[7:0] = ldst_byteen_r[7:0] << lsu_addr_r[1:0];
-	assign ldst_byteen_hi_r[3:0] = ldst_byteen_ext_r[7:4];
-	assign ldst_byteen_lo_r[3:0] = ldst_byteen_ext_r[3:0];
-	assign ld_addr_rhit_lo_lo = (((lsu_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & ~lsu_pkt_r[4];
-	assign ld_addr_rhit_lo_hi = (((end_addr_m[31:2] == lsu_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & ~lsu_pkt_r[4];
-	assign ld_addr_rhit_hi_lo = ((((lsu_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & ~lsu_pkt_r[4]) & dual_stbuf_write_r;
-	assign ld_addr_rhit_hi_hi = ((((end_addr_m[31:2] == end_addr_r[31:2]) & lsu_pkt_r[0]) & lsu_pkt_r[6]) & ~lsu_pkt_r[4]) & dual_stbuf_write_r;
-	generate
-		for (i = 0; i < BYTE_WIDTH; i = i + 1) begin
-			assign ld_byte_rhit_lo_lo[i] = ld_addr_rhit_lo_lo & ldst_byteen_lo_r[i];
-			assign ld_byte_rhit_lo_hi[i] = ld_addr_rhit_lo_hi & ldst_byteen_lo_r[i];
-			assign ld_byte_rhit_hi_lo[i] = ld_addr_rhit_hi_lo & ldst_byteen_hi_r[i];
-			assign ld_byte_rhit_hi_hi[i] = ld_addr_rhit_hi_hi & ldst_byteen_hi_r[i];
-			assign ld_byte_rhit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-			assign ld_byte_rhit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-			assign ld_fwddata_rpipe_lo[(8 * i) + 7:8 * i] = ({8 {ld_byte_rhit_lo_lo[i]}} & store_data_lo_r[(8 * i) + 7:8 * i]) | ({8 {ld_byte_rhit_hi_lo[i]}} & store_data_hi_r[(8 * i) + 7:8 * i]);
-			assign ld_fwddata_rpipe_hi[(8 * i) + 7:8 * i] = ({8 {ld_byte_rhit_lo_hi[i]}} & store_data_lo_r[(8 * i) + 7:8 * i]) | ({8 {ld_byte_rhit_hi_hi[i]}} & store_data_hi_r[(8 * i) + 7:8 * i]);
-			assign ld_byte_hit_lo[i] = ld_byte_rhit_lo_lo[i] | ld_byte_rhit_hi_lo[i];
-			assign ld_byte_hit_hi[i] = ld_byte_rhit_lo_hi[i] | ld_byte_rhit_hi_hi[i];
-			assign stbuf_fwdbyteen_hi_m[i] = ld_byte_hit_hi[i] | stbuf_fwdbyteen_hi_pre_m[i];
-			assign stbuf_fwdbyteen_lo_m[i] = ld_byte_hit_lo[i] | stbuf_fwdbyteen_lo_pre_m[i];
-			assign stbuf_fwddata_lo_m[(8 * i) + 7:8 * i] = (ld_byte_rhit_lo[i] ? ld_fwddata_rpipe_lo[(8 * i) + 7:8 * i] : stbuf_fwddata_lo_pre_m[(8 * i) + 7:8 * i]);
-			assign stbuf_fwddata_hi_m[(8 * i) + 7:8 * i] = (ld_byte_rhit_hi[i] ? ld_fwddata_rpipe_hi[(8 * i) + 7:8 * i] : stbuf_fwddata_hi_pre_m[(8 * i) + 7:8 * i]);
-		end
-	endgenerate
-	rvdffs #(.WIDTH(DEPTH_LOG2)) WrPtrff(
-		.din(NxtWrPtr[DEPTH_LOG2 - 1:0]),
-		.dout(WrPtr[DEPTH_LOG2 - 1:0]),
-		.en(WrPtrEn),
-		.clk(lsu_stbuf_c1_clk),
-		.rst_l(rst_l)
-	);
-	rvdffs #(.WIDTH(DEPTH_LOG2)) RdPtrff(
-		.din(NxtRdPtr[DEPTH_LOG2 - 1:0]),
-		.dout(RdPtr[DEPTH_LOG2 - 1:0]),
-		.en(RdPtrEn),
-		.clk(lsu_stbuf_c1_clk),
-		.rst_l(rst_l)
-	);
-endmodule
-module eb1_lsu_trigger (
-	trigger_pkt_any,
-	lsu_pkt_m,
-	lsu_addr_m,
-	store_data_m,
-	lsu_trigger_match_m
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [151:0] trigger_pkt_any;
-	input wire [13:0] lsu_pkt_m;
-	input wire [31:0] lsu_addr_m;
-	input wire [31:0] store_data_m;
-	output wire [3:0] lsu_trigger_match_m;
-	reg trigger_enable;
-	wire [127:0] lsu_match_data;
-	wire [3:0] lsu_trigger_data_match;
-	wire [31:0] store_data_trigger_m;
-	wire [31:0] ldst_addr_trigger_m;
-	always @(*) begin
-		trigger_enable = 1'b0;
-		begin : sv2v_autoblock_63
-			reg signed [31:0] i;
-			for (i = 0; i < 4; i = i + 1)
-				trigger_enable = trigger_enable | trigger_pkt_any[(i * 38) + 32];
-		end
-	end
-	assign store_data_trigger_m[31:0] = {{16 {lsu_pkt_m[9]}} & store_data_m[31:16], {8 {lsu_pkt_m[10] | lsu_pkt_m[9]}} & store_data_m[15:8], store_data_m[7:0]} & {32 {trigger_enable}};
-	assign ldst_addr_trigger_m[31:0] = lsu_addr_m[31:0] & {32 {trigger_enable}};
-	generate
-		genvar i;
-		for (i = 0; i < 4; i = i + 1) begin
-			assign lsu_match_data[(i * 32) + 31-:32] = ({32 {~trigger_pkt_any[(i * 38) + 37]}} & ldst_addr_trigger_m[31:0]) | ({32 {trigger_pkt_any[(i * 38) + 37] & trigger_pkt_any[(i * 38) + 35]}} & store_data_trigger_m[31:0]);
-			rvmaskandmatch trigger_match(
-				.mask(trigger_pkt_any[(i * 38) + 31-:32]),
-				.data(lsu_match_data[(i * 32) + 31-:32]),
-				.masken(trigger_pkt_any[(i * 38) + 36]),
-				.match(lsu_trigger_data_match[i])
-			);
-			assign lsu_trigger_match_m[i] = (((lsu_pkt_m[0] & ~lsu_pkt_m[4]) & trigger_enable) & ((trigger_pkt_any[(i * 38) + 35] & lsu_pkt_m[6]) | ((trigger_pkt_any[(i * 38) + 34] & lsu_pkt_m[7]) & ~trigger_pkt_any[(i * 38) + 37]))) & lsu_trigger_data_match[i];
-		end
-	endgenerate
-endmodule
-module rvjtag_tap (
-	trst,
-	tck,
-	tms,
-	tdi,
-	tdo,
-	tdoEnable,
-	wr_data,
-	wr_addr,
-	wr_en,
-	rd_en,
-	rd_data,
-	rd_status,
-	dmi_reset,
-	dmi_hard_reset,
-	idle,
-	dmi_stat,
-	jtag_id,
-	version
-);
-	parameter AWIDTH = 7;
-	input trst;
-	input tck;
-	input tms;
-	input tdi;
-	output reg tdo;
-	output tdoEnable;
-	output [31:0] wr_data;
-	output [AWIDTH - 1:0] wr_addr;
-	output wr_en;
-	output rd_en;
-	input [31:0] rd_data;
-	input [1:0] rd_status;
-	output reg dmi_reset;
-	output reg dmi_hard_reset;
-	input [2:0] idle;
-	input [1:0] dmi_stat;
-	input [31:1] jtag_id;
-	input [3:0] version;
-	localparam USER_DR_LENGTH = AWIDTH + 34;
-	reg [USER_DR_LENGTH - 1:0] sr;
-	reg [USER_DR_LENGTH - 1:0] nsr;
-	reg [USER_DR_LENGTH - 1:0] dr;
-	reg [3:0] state;
-	reg [3:0] nstate;
-	reg [4:0] ir;
-	wire jtag_reset;
-	wire shift_dr;
-	wire pause_dr;
-	wire update_dr;
-	wire capture_dr;
-	wire shift_ir;
-	wire pause_ir;
-	wire update_ir;
-	wire capture_ir;
-	wire [1:0] dr_en;
-	wire devid_sel;
-	wire [5:0] abits;
-	assign abits = AWIDTH[5:0];
-	localparam TEST_LOGIC_RESET_STATE = 0;
-	localparam RUN_TEST_IDLE_STATE = 1;
-	localparam SELECT_DR_SCAN_STATE = 2;
-	localparam CAPTURE_DR_STATE = 3;
-	localparam SHIFT_DR_STATE = 4;
-	localparam EXIT1_DR_STATE = 5;
-	localparam PAUSE_DR_STATE = 6;
-	localparam EXIT2_DR_STATE = 7;
-	localparam UPDATE_DR_STATE = 8;
-	localparam SELECT_IR_SCAN_STATE = 9;
-	localparam CAPTURE_IR_STATE = 10;
-	localparam SHIFT_IR_STATE = 11;
-	localparam EXIT1_IR_STATE = 12;
-	localparam PAUSE_IR_STATE = 13;
-	localparam EXIT2_IR_STATE = 14;
-	localparam UPDATE_IR_STATE = 15;
-	always @(*) begin
-		nstate = state;
-		case (state)
-			TEST_LOGIC_RESET_STATE: nstate = (tms ? TEST_LOGIC_RESET_STATE : RUN_TEST_IDLE_STATE);
-			RUN_TEST_IDLE_STATE: nstate = (tms ? SELECT_DR_SCAN_STATE : RUN_TEST_IDLE_STATE);
-			SELECT_DR_SCAN_STATE: nstate = (tms ? SELECT_IR_SCAN_STATE : CAPTURE_DR_STATE);
-			CAPTURE_DR_STATE: nstate = (tms ? EXIT1_DR_STATE : SHIFT_DR_STATE);
-			SHIFT_DR_STATE: nstate = (tms ? EXIT1_DR_STATE : SHIFT_DR_STATE);
-			EXIT1_DR_STATE: nstate = (tms ? UPDATE_DR_STATE : PAUSE_DR_STATE);
-			PAUSE_DR_STATE: nstate = (tms ? EXIT2_DR_STATE : PAUSE_DR_STATE);
-			EXIT2_DR_STATE: nstate = (tms ? UPDATE_DR_STATE : SHIFT_DR_STATE);
-			UPDATE_DR_STATE: nstate = (tms ? SELECT_DR_SCAN_STATE : RUN_TEST_IDLE_STATE);
-			SELECT_IR_SCAN_STATE: nstate = (tms ? TEST_LOGIC_RESET_STATE : CAPTURE_IR_STATE);
-			CAPTURE_IR_STATE: nstate = (tms ? EXIT1_IR_STATE : SHIFT_IR_STATE);
-			SHIFT_IR_STATE: nstate = (tms ? EXIT1_IR_STATE : SHIFT_IR_STATE);
-			EXIT1_IR_STATE: nstate = (tms ? UPDATE_IR_STATE : PAUSE_IR_STATE);
-			PAUSE_IR_STATE: nstate = (tms ? EXIT2_IR_STATE : PAUSE_IR_STATE);
-			EXIT2_IR_STATE: nstate = (tms ? UPDATE_IR_STATE : SHIFT_IR_STATE);
-			UPDATE_IR_STATE: nstate = (tms ? SELECT_DR_SCAN_STATE : RUN_TEST_IDLE_STATE);
-			default: nstate = TEST_LOGIC_RESET_STATE;
-		endcase
-	end
-	always @(posedge tck or negedge trst)
-		if (!trst)
-			state <= TEST_LOGIC_RESET_STATE;
-		else
-			state <= nstate;
-	assign jtag_reset = state == TEST_LOGIC_RESET_STATE;
-	assign shift_dr = state == SHIFT_DR_STATE;
-	assign pause_dr = state == PAUSE_DR_STATE;
-	assign update_dr = state == UPDATE_DR_STATE;
-	assign capture_dr = state == CAPTURE_DR_STATE;
-	assign shift_ir = state == SHIFT_IR_STATE;
-	assign pause_ir = state == PAUSE_IR_STATE;
-	assign update_ir = state == UPDATE_IR_STATE;
-	assign capture_ir = state == CAPTURE_IR_STATE;
-	assign tdoEnable = shift_dr | shift_ir;
-	always @(negedge tck or negedge trst)
-		if (!trst)
-			ir <= 5'b00001;
-		else if (jtag_reset)
-			ir <= 5'b00001;
-		else if (update_ir)
-			ir <= (sr[4:0] == {5 {1'sb0}} ? 5'h1f : sr[4:0]);
-	assign devid_sel = ir == 5'b00001;
-	assign dr_en[0] = ir == 5'b10000;
-	assign dr_en[1] = ir == 5'b10001;
-	always @(posedge tck or negedge trst)
-		if (!trst)
-			sr <= {USER_DR_LENGTH {1'sb0}};
-		else
-			sr <= nsr;
-	always @(*) begin
-		nsr = sr;
-		case (1)
-			shift_dr:
-				case (1)
-					dr_en[1]: nsr = {tdi, sr[USER_DR_LENGTH - 1:1]};
-					dr_en[0], devid_sel: nsr = {{USER_DR_LENGTH - 32 {1'b0}}, tdi, sr[31:1]};
-					default: nsr = {{USER_DR_LENGTH - 1 {1'b0}}, tdi};
-				endcase
-			capture_dr: begin
-				nsr[0] = 1'b0;
-				case (1)
-					dr_en[0]: nsr = {{USER_DR_LENGTH - 15 {1'b0}}, idle, dmi_stat, abits, version};
-					dr_en[1]: nsr = {{AWIDTH {1'b0}}, rd_data, rd_status};
-					devid_sel: nsr = {{USER_DR_LENGTH - 32 {1'b0}}, jtag_id, 1'b1};
-				endcase
-			end
-			shift_ir: nsr = {{USER_DR_LENGTH - 5 {1'b0}}, tdi, sr[4:1]};
-			capture_ir: nsr = {{USER_DR_LENGTH - 1 {1'b0}}, 1'b1};
-		endcase
-	end
-	always @(negedge tck) tdo <= sr[0];
-	always @(posedge tck or negedge trst)
-		if (!trst) begin
-			dmi_hard_reset <= 1'b0;
-			dmi_reset <= 1'b0;
-		end
-		else if (update_dr & dr_en[0]) begin
-			dmi_hard_reset <= sr[17];
-			dmi_reset <= sr[16];
-		end
-		else begin
-			dmi_hard_reset <= 1'b0;
-			dmi_reset <= 1'b0;
-		end
-	always @(posedge tck or negedge trst)
-		if (!trst)
-			dr <= {USER_DR_LENGTH {1'sb0}};
-		else if (update_dr & dr_en[1])
-			dr <= sr;
-		else
-			dr <= {dr[USER_DR_LENGTH - 1:2], 2'b00};
-	assign {wr_addr, wr_data, wr_en, rd_en} = dr;
-endmodule
-module eb1_btb_tag_hash (
-	pc,
-	hash
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1] pc;
-	output wire [pt[2139-:9] - 1:0] hash;
-	assign hash = {(pc[((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + pt[2139-:9]:((pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]) + 1] ^ pc[(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:(pt[2172-:9] + pt[2139-:9]) + 1]) ^ pc[pt[2172-:9] + pt[2139-:9]:pt[2172-:9] + 1]};
-endmodule
-module eb1_btb_tag_hash_fold (
-	pc,
-	hash
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:pt[2172-:9] + 1] pc;
-	output wire [pt[2139-:9] - 1:0] hash;
-	assign hash = {pc[(pt[2172-:9] + pt[2139-:9]) + pt[2139-:9]:(pt[2172-:9] + pt[2139-:9]) + 1] ^ pc[pt[2172-:9] + pt[2139-:9]:pt[2172-:9] + 1]};
-endmodule
-module eb1_btb_addr_hash (
-	pc,
-	hash
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [pt[2079-:9]:pt[2106-:9]] pc;
-	output wire [pt[2172-:9]:pt[2163-:6]] hash;
-	generate
-		if (pt[2125-:5]) begin : fold2
-			assign hash[pt[2172-:9]:pt[2163-:6]] = pc[pt[2115-:9]:pt[2106-:9]] ^ pc[pt[2079-:9]:pt[2070-:9]];
-		end
-		else assign hash[pt[2172-:9]:pt[2163-:6]] = (pc[pt[2115-:9]:pt[2106-:9]] ^ pc[pt[2097-:9]:pt[2088-:9]]) ^ pc[pt[2079-:9]:pt[2070-:9]];
-	endgenerate
-endmodule
-module eb1_btb_ghr_hash (
-	hashin,
-	ghr,
-	hash
-);
-	function automatic [0:0] sv2v_cast_1;
-		input reg [0:0] inp;
-		sv2v_cast_1 = inp;
-	endfunction
-	parameter [2270:0] pt = {232'h0808040001c0400000000000010102000060800080103c12160802000c, sv2v_cast_1(4'h0), 5'h01, 5'h01, 6'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 7'h02, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h08, 9'h004, 8'h0f, 36'h0f0040000, 14'h0004, 6'h02, 7'h03, 5'h01, 7'h05, 9'h001, 6'h02, 8'h01, 5'h01, 5'h01, 7'h01, 7'h03, 6'h03, 8'h08, 7'h02, 8'h05, 8'h03, 5'h01, 18'h00200, 7'h04, 11'h040, 5'h01, 5'h00, 11'h047, 9'h00c, 11'h040, 8'h08, 8'h02, 8'h02, 7'h02, 5'h00, 8'h06, 13'h0010, 7'h01, 5'h01, 17'h00080, 7'h06, 9'h00d, 8'h02, 8'h02, 5'h01, 7'h02, 9'h003, 9'h004, 9'h00c, 5'h01, 5'h00, 8'h08, 9'h004, 5'h01, 8'h0a, 36'h0affff000, 14'h0004, 5'h01, 6'h02, 8'h03, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 36'h000000000, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 5'h00, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 36'h0ffffffff, 5'h00, 5'h00, 5'h01, 6'h02, 8'h03, 9'h004, 7'h02, 9'h00c, 8'h04, 5'h00, 5'h00, 36'h0f00c0000, 9'h00f, 8'h01, 8'h0f, 13'h0020, 12'h01f, 13'h0020, 8'h08, 5'h01, 6'h02, 8'h01, 5'h01};
-	input wire [pt[2172-:9]:pt[2163-:6]] hashin;
-	input wire [pt[2236-:8] - 1:0] ghr;
-	output wire [pt[2270-:8]:pt[2262-:6]] hash;
-	generate
-		if (pt[2241-:5]) begin : ghrhash_cfg1
-			assign hash[pt[2270-:8]:pt[2262-:6]] = {ghr[pt[2236-:8] - 1:pt[2115-:9] - 1], hashin[pt[2115-:9]:2] ^ ghr[pt[2115-:9] - 2:0]};
-		end
-		else begin : ghrhash_cfg2
-			assign hash[pt[2270-:8]:pt[2262-:6]] = {hashin[pt[2236-:8] + 1:2] ^ ghr[pt[2236-:8] - 1:0]};
-		end
-	endgenerate
-endmodule
-module rvdff (
-	din,
-	clk,
-	rst_l,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire rst_l;
-	output reg [WIDTH - 1:0] dout;
-	generate
-		if (SHORT == 1) begin
-			wire [WIDTH:1] sv2v_tmp_70387;
-			assign sv2v_tmp_70387 = din;
-			always @(*) dout = sv2v_tmp_70387;
-		end
-	endgenerate
-	always @(posedge clk or negedge rst_l)
-		if (rst_l == 0)
-			dout[WIDTH - 1:0] <= 0;
-		else
-			dout[WIDTH - 1:0] <= din[WIDTH - 1:0];
-endmodule
-module rvdffs (
-	din,
-	en,
-	clk,
-	rst_l,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire en;
-	input wire clk;
-	input wire rst_l;
-	output wire [WIDTH - 1:0] dout;
-	generate
-		if (SHORT == 1) begin : genblock
-			assign dout = din;
-		end
-		else begin : genblock
-			rvdff #(.WIDTH(WIDTH)) dffs(
-				.din((en ? din[WIDTH - 1:0] : dout[WIDTH - 1:0])),
-				.clk(clk),
-				.rst_l(rst_l),
-				.dout(dout)
-			);
-		end
-	endgenerate
-endmodule
-module rvdffsc (
-	din,
-	en,
-	clear,
-	clk,
-	rst_l,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire en;
-	input wire clear;
-	input wire clk;
-	input wire rst_l;
-	output wire [WIDTH - 1:0] dout;
-	wire [WIDTH - 1:0] din_new;
-	generate
-		if (SHORT == 1) begin
-			assign dout = din;
-		end
-		else begin
-			assign din_new = {WIDTH {~clear}} & (en ? din[WIDTH - 1:0] : dout[WIDTH - 1:0]);
-			rvdff #(.WIDTH(WIDTH)) dffsc(
-				.din(din_new[WIDTH - 1:0]),
-				.clk(clk),
-				.rst_l(rst_l),
-				.dout(dout)
-			);
-		end
-	endgenerate
-endmodule
-module rvdff_fpga (
-	din,
-	clk,
-	clken,
-	rawclk,
-	rst_l,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire clken;
-	input wire rawclk;
-	input wire rst_l;
-	output wire [WIDTH - 1:0] dout;
-	generate
-		if (SHORT == 1) begin
-			assign dout = din;
-		end
-		else rvdff #(.WIDTH(WIDTH)) dff(
-			.din(din),
-			.clk(clk),
-			.rst_l(rst_l),
-			.dout(dout)
-		);
-	endgenerate
-endmodule
-module rvdffs_fpga (
-	din,
-	en,
-	clk,
-	clken,
-	rawclk,
-	rst_l,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire en;
-	input wire clk;
-	input wire clken;
-	input wire rawclk;
-	input wire rst_l;
-	output wire [WIDTH - 1:0] dout;
-	generate
-		if (SHORT == 1) begin : genblock
-			assign dout = din;
-		end
-		else begin : genblock
-			rvdffs #(.WIDTH(WIDTH)) dffs(
-				.din(din),
-				.en(en),
-				.clk(clk),
-				.rst_l(rst_l),
-				.dout(dout)
-			);
-		end
-	endgenerate
-endmodule
-module rvdffsc_fpga (
-	din,
-	en,
-	clear,
-	clk,
-	clken,
-	rawclk,
-	rst_l,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire en;
-	input wire clear;
-	input wire clk;
-	input wire clken;
-	input wire rawclk;
-	input wire rst_l;
-	output wire [WIDTH - 1:0] dout;
-	wire [WIDTH - 1:0] din_new;
-	generate
-		if (SHORT == 1) begin
-			assign dout = din;
-		end
-		else rvdffsc #(.WIDTH(WIDTH)) dffsc(
-			.din(din),
-			.en(en),
-			.clear(clear),
-			.clk(clk),
-			.rst_l(rst_l),
-			.dout(dout)
-		);
-	endgenerate
-endmodule
-module rvdffe (
-	din,
-	en,
-	clk,
-	rst_l,
-	scan_mode,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter SHORT = 0;
-	parameter OVERRIDE = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire en;
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	output wire [WIDTH - 1:0] dout;
-	wire l1clk;
-	generate
-		if (SHORT == 1) begin : genblock
-			begin : genblock
-				assign dout = din;
-			end
-		end
-		else begin : genblock
-			rvclkhdr clkhdr(
-				.en(en),
-				.clk(clk),
-				.scan_mode(scan_mode),
-				.l1clk(l1clk)
-			);
-			rvdff #(.WIDTH(WIDTH)) dff(
-				.din(din),
-				.rst_l(rst_l),
-				.dout(dout),
-				.clk(l1clk)
-			);
-		end
-	endgenerate
-endmodule
-module rvdffpcie (
-	din,
-	clk,
-	rst_l,
-	en,
-	scan_mode,
-	dout
-);
-	parameter WIDTH = 31;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire rst_l;
-	input wire en;
-	input wire scan_mode;
-	output wire [WIDTH - 1:0] dout;
-	rvdfflie #(
-		.WIDTH(WIDTH),
-		.LEFT(19)
-	) dff(
-		.din(din),
-		.clk(clk),
-		.rst_l(rst_l),
-		.en(en),
-		.scan_mode(scan_mode),
-		.dout(dout)
-	);
-endmodule
-module rvdfflie (
-	din,
-	clk,
-	rst_l,
-	en,
-	scan_mode,
-	dout
-);
-	parameter WIDTH = 16;
-	parameter LEFT = 8;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire rst_l;
-	input wire en;
-	input wire scan_mode;
-	output wire [WIDTH - 1:0] dout;
-	localparam EXTRA = WIDTH - LEFT;
-	localparam LMSB = WIDTH - 1;
-	localparam LLSB = (LMSB - LEFT) + 1;
-	localparam XMSB = LLSB - 1;
-	localparam XLSB = LLSB - EXTRA;
-	rvdffiee #(.WIDTH(LEFT)) dff_left(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.en(en),
-		.din(din[LMSB:LLSB]),
-		.dout(dout[LMSB:LLSB])
-	);
-	rvdffe #(.WIDTH(EXTRA)) dff_extra(
-		.en(en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din(din[XMSB:XLSB]),
-		.dout(dout[XMSB:XLSB])
-	);
-endmodule
-module rvdffppe (
-	din,
-	clk,
-	rst_l,
-	en,
-	scan_mode,
-	dout
-);
-	parameter WIDTH = 32;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire rst_l;
-	input wire en;
-	input wire scan_mode;
-	output wire [WIDTH - 1:0] dout;
-	localparam RIGHT = 31;
-	localparam LEFT = WIDTH - RIGHT;
-	localparam LMSB = WIDTH - 1;
-	localparam LLSB = (LMSB - LEFT) + 1;
-	localparam RMSB = LLSB - 1;
-	localparam RLSB = LLSB - RIGHT;
-	rvdffe #(.WIDTH(LEFT)) dff_left(
-		.en(en),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din(din[LMSB:LLSB]),
-		.dout(dout[LMSB:LLSB])
-	);
-	rvdffe #(.WIDTH(RIGHT)) dff_right(
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.din(din[RMSB:RLSB]),
-		.dout(dout[RMSB:RLSB]),
-		.en(en & din[LLSB])
-	);
-endmodule
-module rvdffie (
-	din,
-	clk,
-	rst_l,
-	scan_mode,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter OVERRIDE = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	output wire [WIDTH - 1:0] dout;
-	wire l1clk;
-	wire en;
-	assign en = |(din ^ dout);
-	rvclkhdr clkhdr(
-		.en(en),
-		.clk(clk),
-		.scan_mode(scan_mode),
-		.l1clk(l1clk)
-	);
-	rvdff #(.WIDTH(WIDTH)) dff(
-		.din(din),
-		.rst_l(rst_l),
-		.dout(dout),
-		.clk(l1clk)
-	);
-endmodule
-module rvdffiee (
-	din,
-	clk,
-	rst_l,
-	scan_mode,
-	en,
-	dout
-);
-	parameter WIDTH = 1;
-	parameter OVERRIDE = 0;
-	input wire [WIDTH - 1:0] din;
-	input wire clk;
-	input wire rst_l;
-	input wire scan_mode;
-	input wire en;
-	output wire [WIDTH - 1:0] dout;
-	wire l1clk;
-	wire final_en;
-	assign final_en = |(din ^ dout) & en;
-	rvdffe #(.WIDTH(WIDTH)) dff(
-		.din(din),
-		.clk(clk),
-		.rst_l(rst_l),
-		.scan_mode(scan_mode),
-		.dout(dout),
-		.en(final_en)
-	);
-endmodule
-module rvsyncss (
-	clk,
-	rst_l,
-	din,
-	dout
-);
-	parameter WIDTH = 251;
-	input wire clk;
-	input wire rst_l;
-	input wire [WIDTH - 1:0] din;
-	output wire [WIDTH - 1:0] dout;
-	wire [WIDTH - 1:0] din_ff1;
-	rvdff #(.WIDTH(WIDTH)) sync_ff1(
-		.clk(clk),
-		.rst_l(rst_l),
-		.din(din[WIDTH - 1:0]),
-		.dout(din_ff1[WIDTH - 1:0])
-	);
-	rvdff #(.WIDTH(WIDTH)) sync_ff2(
-		.clk(clk),
-		.rst_l(rst_l),
-		.din(din_ff1[WIDTH - 1:0]),
-		.dout(dout[WIDTH - 1:0])
-	);
-endmodule
-module rvsyncss_fpga (
-	gw_clk,
-	rawclk,
-	clken,
-	rst_l,
-	din,
-	dout
-);
-	parameter WIDTH = 251;
-	input wire gw_clk;
-	input wire rawclk;
-	input wire clken;
-	input wire rst_l;
-	input wire [WIDTH - 1:0] din;
-	output wire [WIDTH - 1:0] dout;
-	wire [WIDTH - 1:0] din_ff1;
-	rvdff_fpga #(.WIDTH(WIDTH)) sync_ff1(
-		.rst_l(rst_l),
-		.clk(gw_clk),
-		.rawclk(rawclk),
-		.clken(clken),
-		.din(din[WIDTH - 1:0]),
-		.dout(din_ff1[WIDTH - 1:0])
-	);
-	rvdff_fpga #(.WIDTH(WIDTH)) sync_ff2(
-		.rst_l(rst_l),
-		.clk(gw_clk),
-		.rawclk(rawclk),
-		.clken(clken),
-		.din(din_ff1[WIDTH - 1:0]),
-		.dout(dout[WIDTH - 1:0])
-	);
-endmodule
-module rvlsadder (
-	rs1,
-	offset,
-	dout
-);
-	input wire [31:0] rs1;
-	input wire [11:0] offset;
-	output wire [31:0] dout;
-	wire cout;
-	wire sign;
-	wire [31:12] rs1_inc;
-	wire [31:12] rs1_dec;
-	assign {cout, dout[11:0]} = {1'b0, rs1[11:0]} + {1'b0, offset[11:0]};
-	assign rs1_inc[31:12] = rs1[31:12] + 1;
-	assign rs1_dec[31:12] = rs1[31:12] - 1;
-	assign sign = offset[11];
-	assign dout[31:12] = (({20 {sign ~^ cout}} & rs1[31:12]) | ({20 {~sign & cout}} & rs1_inc[31:12])) | ({20 {sign & ~cout}} & rs1_dec[31:12]);
-endmodule
-module rvbradder (
-	pc,
-	offset,
-	dout
-);
-	input [31:1] pc;
-	input [12:1] offset;
-	output [31:1] dout;
-	wire cout;
-	wire sign;
-	wire [31:13] pc_inc;
-	wire [31:13] pc_dec;
-	assign {cout, dout[12:1]} = {1'b0, pc[12:1]} + {1'b0, offset[12:1]};
-	assign pc_inc[31:13] = pc[31:13] + 1;
-	assign pc_dec[31:13] = pc[31:13] - 1;
-	assign sign = offset[12];
-	assign dout[31:13] = (({19 {sign ~^ cout}} & pc[31:13]) | ({19 {~sign & cout}} & pc_inc[31:13])) | ({19 {sign & ~cout}} & pc_dec[31:13]);
-endmodule
-module rvtwoscomp (
-	din,
-	dout
-);
-	parameter WIDTH = 32;
-	input wire [WIDTH - 1:0] din;
-	output wire [WIDTH - 1:0] dout;
-	wire [WIDTH - 1:1] dout_temp;
-	genvar i;
-	generate
-		for (i = 1; i < WIDTH; i = i + 1) begin : flip_after_first_one
-			assign dout_temp[i] = (|din[i - 1:0] ? ~din[i] : din[i]);
-		end
-	endgenerate
-	assign dout[WIDTH - 1:0] = {dout_temp[WIDTH - 1:1], din[0]};
-endmodule
-module rvfindfirst1 (
-	din,
-	dout
-);
-	parameter WIDTH = 32;
-	parameter SHIFT = $clog2(WIDTH);
-	input wire [WIDTH - 1:0] din;
-	output reg [SHIFT - 1:0] dout;
-	reg done;
-	always @(*) begin
-		dout[SHIFT - 1:0] = {SHIFT {1'b0}};
-		done = 1'b0;
-		begin : sv2v_autoblock_64
-			reg signed [31:0] i;
-			for (i = WIDTH - 1; i > 0; i = i - 1)
-				begin : find_first_one
-					done = done | din[i];
-					dout[SHIFT - 1:0] = dout[SHIFT - 1:0] + (done ? 1'b0 : 1'b1);
-				end
-		end
-	end
-endmodule
-module rvfindfirst1hot (
-	din,
-	dout
-);
-	parameter WIDTH = 32;
-	input wire [WIDTH - 1:0] din;
-	output reg [WIDTH - 1:0] dout;
-	reg done;
-	always @(*) begin
-		dout[WIDTH - 1:0] = {WIDTH {1'b0}};
-		done = 1'b0;
-		begin : sv2v_autoblock_65
-			reg signed [31:0] i;
-			for (i = 0; i < WIDTH; i = i + 1)
-				begin : find_first_one
-					dout[i] = ~done & din[i];
-					done = done | din[i];
-				end
-		end
-	end
-endmodule
-module rvmaskandmatch (
-	mask,
-	data,
-	masken,
-	match
-);
-	parameter WIDTH = 32;
-	input wire [WIDTH - 1:0] mask;
-	input wire [WIDTH - 1:0] data;
-	input wire masken;
-	output wire match;
-	wire [WIDTH - 1:0] matchvec;
-	wire masken_or_fullmask;
-	assign masken_or_fullmask = masken & ~(&mask[WIDTH - 1:0]);
-	assign matchvec[0] = masken_or_fullmask | (mask[0] == data[0]);
-	genvar i;
-	generate
-		for (i = 1; i < WIDTH; i = i + 1) begin : match_after_first_zero
-			assign matchvec[i] = (&mask[i - 1:0] & masken_or_fullmask ? 1'b1 : mask[i] == data[i]);
-		end
-	endgenerate
-	assign match = &matchvec[WIDTH - 1:0];
-endmodule
-module rvrangecheck (
-	addr,
-	in_range,
-	in_region
-);
-	parameter CCM_SADR = 32'h00000000;
-	parameter CCM_SIZE = 128;
-	input wire [31:0] addr;
-	output wire in_range;
-	output wire in_region;
-	localparam REGION_BITS = 4;
-	localparam MASK_BITS = 10 + $clog2(CCM_SIZE);
-	wire [31:0] start_addr;
-	wire [3:0] region;
-	assign start_addr[31:0] = CCM_SADR;
-	assign region[3:0] = start_addr[31:28];
-	assign in_region = addr[31:28] == region[3:0];
-	generate
-		if (CCM_SIZE == 48) begin
-			assign in_range = (addr[31:MASK_BITS] == start_addr[31:MASK_BITS]) & ~(&addr[MASK_BITS - 1:MASK_BITS - 2]);
-		end
-		else assign in_range = addr[31:MASK_BITS] == start_addr[31:MASK_BITS];
-	endgenerate
-endmodule
-module rveven_paritygen (
-	data_in,
-	parity_out
-);
-	parameter WIDTH = 16;
-	input wire [WIDTH - 1:0] data_in;
-	output wire parity_out;
-	assign parity_out = ^data_in[WIDTH - 1:0];
-endmodule
-module rveven_paritycheck (
-	data_in,
-	parity_in,
-	parity_err
-);
-	parameter WIDTH = 16;
-	input wire [WIDTH - 1:0] data_in;
-	input wire parity_in;
-	output wire parity_err;
-	assign parity_err = ^data_in[WIDTH - 1:0] ^ parity_in;
-endmodule
-module rvecc_encode (
-	din,
-	ecc_out
-);
-	input [31:0] din;
-	output [6:0] ecc_out;
-	wire [5:0] ecc_out_temp;
-	assign ecc_out_temp[0] = ((((((((((((((((din[0] ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30];
-	assign ecc_out_temp[1] = ((((((((((((((((din[0] ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31];
-	assign ecc_out_temp[2] = ((((((((((((((((din[1] ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31];
-	assign ecc_out_temp[3] = (((((((((((((din[4] ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
-	assign ecc_out_temp[4] = (((((((((((((din[11] ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
-	assign ecc_out_temp[5] = ((((din[26] ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31];
-	assign ecc_out[6:0] = {^din[31:0] ^ ^ecc_out_temp[5:0], ecc_out_temp[5:0]};
-endmodule
-module rvecc_decode (
-	en,
-	din,
-	ecc_in,
-	sed_ded,
-	dout,
-	ecc_out,
-	single_ecc_error,
-	double_ecc_error
-);
-	input en;
-	input [31:0] din;
-	input [6:0] ecc_in;
-	input sed_ded;
-	output [31:0] dout;
-	output [6:0] ecc_out;
-	output single_ecc_error;
-	output double_ecc_error;
-	wire [6:0] ecc_check;
-	wire [38:0] error_mask;
-	wire [38:0] din_plus_parity;
-	wire [38:0] dout_plus_parity;
-	assign ecc_check[0] = (((((((((((((((((ecc_in[0] ^ din[0]) ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30];
-	assign ecc_check[1] = (((((((((((((((((ecc_in[1] ^ din[0]) ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31];
-	assign ecc_check[2] = (((((((((((((((((ecc_in[2] ^ din[1]) ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31];
-	assign ecc_check[3] = ((((((((((((((ecc_in[3] ^ din[4]) ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
-	assign ecc_check[4] = ((((((((((((((ecc_in[4] ^ din[11]) ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25];
-	assign ecc_check[5] = (((((ecc_in[5] ^ din[26]) ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31];
-	assign ecc_check[6] = (^din[31:0] ^ ^ecc_in[6:0]) & ~sed_ded;
-	assign single_ecc_error = (en & (ecc_check[6:0] != 0)) & ecc_check[6];
-	assign double_ecc_error = (en & (ecc_check[6:0] != 0)) & ~ecc_check[6];
-	generate
-		genvar i;
-		for (i = 1; i < 40; i = i + 1) assign error_mask[i - 1] = ecc_check[5:0] == i;
-	endgenerate
-	assign din_plus_parity[38:0] = {ecc_in[6], din[31:26], ecc_in[5], din[25:11], ecc_in[4], din[10:4], ecc_in[3], din[3:1], ecc_in[2], din[0], ecc_in[1:0]};
-	assign dout_plus_parity[38:0] = (single_ecc_error ? error_mask[38:0] ^ din_plus_parity[38:0] : din_plus_parity[38:0]);
-	assign dout[31:0] = {dout_plus_parity[37:32], dout_plus_parity[30:16], dout_plus_parity[14:8], dout_plus_parity[6:4], dout_plus_parity[2]};
-	assign ecc_out[6:0] = {dout_plus_parity[38] ^ (ecc_check[6:0] == 7'b1000000), dout_plus_parity[31], dout_plus_parity[15], dout_plus_parity[7], dout_plus_parity[3], dout_plus_parity[1:0]};
-endmodule
-module rvecc_encode_64 (
-	din,
-	ecc_out
-);
-	input [63:0] din;
-	output [6:0] ecc_out;
-	assign ecc_out[0] = (((((((((((((((((((((((((((((((((din[0] ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30]) ^ din[32]) ^ din[34]) ^ din[36]) ^ din[38]) ^ din[40]) ^ din[42]) ^ din[44]) ^ din[46]) ^ din[48]) ^ din[50]) ^ din[52]) ^ din[54]) ^ din[56]) ^ din[57]) ^ din[59]) ^ din[61]) ^ din[63];
-	assign ecc_out[1] = (((((((((((((((((((((((((((((((((din[0] ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31]) ^ din[32]) ^ din[35]) ^ din[36]) ^ din[39]) ^ din[40]) ^ din[43]) ^ din[44]) ^ din[47]) ^ din[48]) ^ din[51]) ^ din[52]) ^ din[55]) ^ din[56]) ^ din[58]) ^ din[59]) ^ din[62]) ^ din[63];
-	assign ecc_out[2] = (((((((((((((((((((((((((((((((((din[1] ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
-	assign ecc_out[3] = (((((((((((((((((((((((((((((din[4] ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
-	assign ecc_out[4] = (((((((((((((((((((((((((((((din[11] ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
-	assign ecc_out[5] = (((((((((((((((((((((((((((((din[26] ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
-	assign ecc_out[6] = (((((din[57] ^ din[58]) ^ din[59]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
-endmodule
-module rvecc_decode_64 (
-	en,
-	din,
-	ecc_in,
-	ecc_error
-);
-	input en;
-	input [63:0] din;
-	input [6:0] ecc_in;
-	output ecc_error;
-	wire [6:0] ecc_check;
-	assign ecc_check[0] = ((((((((((((((((((((((((((((((((((ecc_in[0] ^ din[0]) ^ din[1]) ^ din[3]) ^ din[4]) ^ din[6]) ^ din[8]) ^ din[10]) ^ din[11]) ^ din[13]) ^ din[15]) ^ din[17]) ^ din[19]) ^ din[21]) ^ din[23]) ^ din[25]) ^ din[26]) ^ din[28]) ^ din[30]) ^ din[32]) ^ din[34]) ^ din[36]) ^ din[38]) ^ din[40]) ^ din[42]) ^ din[44]) ^ din[46]) ^ din[48]) ^ din[50]) ^ din[52]) ^ din[54]) ^ din[56]) ^ din[57]) ^ din[59]) ^ din[61]) ^ din[63];
-	assign ecc_check[1] = ((((((((((((((((((((((((((((((((((ecc_in[1] ^ din[0]) ^ din[2]) ^ din[3]) ^ din[5]) ^ din[6]) ^ din[9]) ^ din[10]) ^ din[12]) ^ din[13]) ^ din[16]) ^ din[17]) ^ din[20]) ^ din[21]) ^ din[24]) ^ din[25]) ^ din[27]) ^ din[28]) ^ din[31]) ^ din[32]) ^ din[35]) ^ din[36]) ^ din[39]) ^ din[40]) ^ din[43]) ^ din[44]) ^ din[47]) ^ din[48]) ^ din[51]) ^ din[52]) ^ din[55]) ^ din[56]) ^ din[58]) ^ din[59]) ^ din[62]) ^ din[63];
-	assign ecc_check[2] = ((((((((((((((((((((((((((((((((((ecc_in[2] ^ din[1]) ^ din[2]) ^ din[3]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
-	assign ecc_check[3] = ((((((((((((((((((((((((((((((ecc_in[3] ^ din[4]) ^ din[5]) ^ din[6]) ^ din[7]) ^ din[8]) ^ din[9]) ^ din[10]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
-	assign ecc_check[4] = ((((((((((((((((((((((((((((((ecc_in[4] ^ din[11]) ^ din[12]) ^ din[13]) ^ din[14]) ^ din[15]) ^ din[16]) ^ din[17]) ^ din[18]) ^ din[19]) ^ din[20]) ^ din[21]) ^ din[22]) ^ din[23]) ^ din[24]) ^ din[25]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
-	assign ecc_check[5] = ((((((((((((((((((((((((((((((ecc_in[5] ^ din[26]) ^ din[27]) ^ din[28]) ^ din[29]) ^ din[30]) ^ din[31]) ^ din[32]) ^ din[33]) ^ din[34]) ^ din[35]) ^ din[36]) ^ din[37]) ^ din[38]) ^ din[39]) ^ din[40]) ^ din[41]) ^ din[42]) ^ din[43]) ^ din[44]) ^ din[45]) ^ din[46]) ^ din[47]) ^ din[48]) ^ din[49]) ^ din[50]) ^ din[51]) ^ din[52]) ^ din[53]) ^ din[54]) ^ din[55]) ^ din[56];
-	assign ecc_check[6] = ((((((ecc_in[6] ^ din[57]) ^ din[58]) ^ din[59]) ^ din[60]) ^ din[61]) ^ din[62]) ^ din[63];
-	assign ecc_error = en & (ecc_check[6:0] != 0);
-endmodule
-module rvclkhdr (
-	en,
-	clk,
-	scan_mode,
-	l1clk
-);
-	input wire en;
-	input wire clk;
-	input wire scan_mode;
-	output wire l1clk;
-	wire SE;
-	assign SE = 0;
-	sky130_fd_sc_hd__dlclkp_1 clkhdr(
-		.VPWR(1'b1),
-		.VGND(1'b0),
-		.CLK(clk),
-		.GCLK(l1clk),
-		.GATE(en)
-	);
-endmodule
-module rvoclkhdr (
-	en,
-	clk,
-	scan_mode,
-	l1clk
-);
-	input wire en;
-	input wire clk;
-	input wire scan_mode;
-	output wire l1clk;
-	wire SE;
-	assign SE = 0;
-	sky130_fd_sc_hd__dlclkp_1 clkhdr(
-		.VPWR(1'b1),
-		.VGND(1'b0),
-		.CLK(clk),
-		.GCLK(l1clk),
-		.GATE(en)
-	);
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/openlane/sky130_sram_1kbyte_1rw1r_32x256_8.v b/verilog/rtl/BrqRV_EB1/design/openlane/sky130_sram_1kbyte_1rw1r_32x256_8.v
deleted file mode 100644
index 4048ea8..0000000
--- a/verilog/rtl/BrqRV_EB1/design/openlane/sky130_sram_1kbyte_1rw1r_32x256_8.v
+++ /dev/null
@@ -1,114 +0,0 @@
-// OpenRAM SRAM model
-// Words: 256
-// Word size: 32
-// Write size: 8
-
-module sky130_sram_1kbyte_1rw1r_32x256_8(
-`ifdef USE_POWER_PINS
-    vccd1,
-    vssd1,
-`endif
-// Port 0: RW
-    clk0,csb0,web0,wmask0,addr0,din0,dout0,
-// Port 1: R
-    clk1,csb1,addr1,dout1
-  );
-
-  parameter NUM_WMASKS = 4 ;
-  parameter DATA_WIDTH = 32 ;
-  parameter ADDR_WIDTH = 8 ;
-  parameter RAM_DEPTH = 1 << ADDR_WIDTH;
-  // FIXME: This delay is arbitrary.
-  parameter DELAY = 3 ;
-  parameter VERBOSE = 1 ; //Set to 0 to only display warnings
-  parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary
-
-`ifdef USE_POWER_PINS
-    inout vccd1;
-    inout vssd1;
-`endif
-  input  clk0; // clock
-  input   csb0; // active low chip select
-  input  web0; // active low write control
-  input [NUM_WMASKS-1:0]   wmask0; // write mask
-  input [ADDR_WIDTH-1:0]  addr0;
-  input [DATA_WIDTH-1:0]  din0;
-  output [DATA_WIDTH-1:0] dout0;
-  input  clk1; // clock
-  input   csb1; // active low chip select
-  input [ADDR_WIDTH-1:0]  addr1;
-  output [DATA_WIDTH-1:0] dout1;
-
-  reg  csb0_reg;
-  reg  web0_reg;
-  reg [NUM_WMASKS-1:0]   wmask0_reg;
-  reg [ADDR_WIDTH-1:0]  addr0_reg;
-  reg [DATA_WIDTH-1:0]  din0_reg;
-  reg [DATA_WIDTH-1:0]  dout0;
-
-  // All inputs are registers
-  always @(posedge clk0)
-  begin
-    csb0_reg = csb0;
-    web0_reg = web0;
-    wmask0_reg = wmask0;
-    addr0_reg = addr0;
-    din0_reg = din0;
-    //#(T_HOLD) dout0 = 32'bx;
-    if ( !csb0_reg && web0_reg && VERBOSE ) 
-      $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]);
-    if ( !csb0_reg && !web0_reg && VERBOSE )
-      $display($time," Writing %m addr0=%b din0=%b wmask0=%b",addr0_reg,din0_reg,wmask0_reg);
-  end
-
-  reg  csb1_reg;
-  reg [ADDR_WIDTH-1:0]  addr1_reg;
-  reg [DATA_WIDTH-1:0]  dout1;
-
-  // All inputs are registers
-  always @(posedge clk1)
-  begin
-    csb1_reg = csb1;
-    addr1_reg = addr1;
-    if (!csb0 && !web0 && !csb1 && (addr0 == addr1))
-         $display($time," WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!",addr0,addr1);
-    //#(T_HOLD) dout1 = 32'bx;
-    if ( !csb1_reg && VERBOSE ) 
-      $display($time," Reading %m addr1=%b dout1=%b",addr1_reg,mem[addr1_reg]);
-  end
-
-reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];
-
-  // Memory Write Block Port 0
-  // Write Operation : When web0 = 0, csb0 = 0
-  always @ (negedge clk0)
-  begin : MEM_WRITE0
-    if ( !csb0_reg && !web0_reg ) begin
-        if (wmask0_reg[0])
-                mem[addr0_reg][7:0] = din0_reg[7:0];
-        if (wmask0_reg[1])
-                mem[addr0_reg][15:8] = din0_reg[15:8];
-        if (wmask0_reg[2])
-                mem[addr0_reg][23:16] = din0_reg[23:16];
-        if (wmask0_reg[3])
-                mem[addr0_reg][31:24] = din0_reg[31:24];
-    end
-  end
-
-  // Memory Read Block Port 0
-  // Read Operation : When web0 = 1, csb0 = 0
-  always @ (negedge clk0)
-  begin : MEM_READ0
-    if (!csb0_reg && web0_reg)
-       dout0 <= #(DELAY) mem[addr0_reg];
-  end
-
-  // Memory Read Block Port 1
-  // Read Operation : When web1 = 1, csb1 = 0
-  always @ (negedge clk1)
-  begin : MEM_READ1
-    if (!csb1_reg)
-       dout1 <= #(DELAY) mem[addr1_reg];
-  end
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/pd_defines.vh b/verilog/rtl/BrqRV_EB1/design/pd_defines.vh
deleted file mode 100644
index 0b9763c..0000000
--- a/verilog/rtl/BrqRV_EB1/design/pd_defines.vh
+++ /dev/null
@@ -1,11 +0,0 @@
-// NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
-// This is an automatically generated file by hshabbir on و 08:16:54 PKT ت 08 جون 2021
-//
-// cmd:    brqrv -target=default -set build_axi4 
-//
-
-`include "common_defines.vh"
-`undef RV_ASSERT_ON
-`undef TEC_RV_ICG
-`define TEC_RV_ICG sky130_fd_sc_hd__dlclkp_1
-`define RV_PHYSICAL 1
diff --git a/verilog/rtl/BrqRV_EB1/design/rvjtag_tap.v b/verilog/rtl/BrqRV_EB1/design/rvjtag_tap.v
deleted file mode 100644
index d4969b3..0000000
--- a/verilog/rtl/BrqRV_EB1/design/rvjtag_tap.v
+++ /dev/null
@@ -1,224 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or it's affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License
-
-module rvjtag_tap #(
-parameter AWIDTH = 7
-)
-(
-input               trst,
-input               tck,
-input               tms,
-input               tdi,
-output   reg        tdo,
-output              tdoEnable,
-
-output [31:0]       wr_data,
-output [AWIDTH-1:0] wr_addr,
-output              wr_en,
-output              rd_en,
-
-input   [31:0]      rd_data,
-input   [1:0]       rd_status,
-
-output  reg         dmi_reset,
-output  reg         dmi_hard_reset,
-
-input   [2:0]       idle,
-input   [1:0]       dmi_stat,
-/*
---  revisionCode        : 4'h0;
---  manufacturersIdCode : 11'h45;
---  deviceIdCode        : 16'h0001;
---  order MSB .. LSB -> [4 bit version or revision] [16 bit part number] [11 bit manufacturer id] [value of 1'b1 in LSB]
-*/
-input   [31:1]      jtag_id,
-input   [3:0]       version
-);
-
-localparam USER_DR_LENGTH = AWIDTH + 34;
-
-
-reg [USER_DR_LENGTH-1:0] sr, nsr, dr;
-
-///////////////////////////////////////////////////////
-//                      Tap controller
-///////////////////////////////////////////////////////
-logic[3:0] state, nstate;
-logic [4:0] ir;
-wire jtag_reset;
-wire shift_dr;
-wire pause_dr;
-wire update_dr;
-wire capture_dr;
-wire shift_ir;
-wire pause_ir ;
-wire update_ir ;
-wire capture_ir;
-wire[1:0] dr_en;
-wire devid_sel;
-wire [5:0] abits;
-
-assign abits = AWIDTH[5:0];
-
-
-localparam TEST_LOGIC_RESET_STATE = 0;
-localparam RUN_TEST_IDLE_STATE    = 1;
-localparam SELECT_DR_SCAN_STATE   = 2;
-localparam CAPTURE_DR_STATE       = 3;
-localparam SHIFT_DR_STATE         = 4;
-localparam EXIT1_DR_STATE         = 5;
-localparam PAUSE_DR_STATE         = 6;
-localparam EXIT2_DR_STATE         = 7;
-localparam UPDATE_DR_STATE        = 8;
-localparam SELECT_IR_SCAN_STATE   = 9;
-localparam CAPTURE_IR_STATE       = 10;
-localparam SHIFT_IR_STATE         = 11;
-localparam EXIT1_IR_STATE         = 12;
-localparam PAUSE_IR_STATE         = 13;
-localparam EXIT2_IR_STATE         = 14;
-localparam UPDATE_IR_STATE        = 15;
-
-always_comb  begin
-    nstate = state;
-    case(state)
-    TEST_LOGIC_RESET_STATE: nstate = tms ? TEST_LOGIC_RESET_STATE : RUN_TEST_IDLE_STATE;
-    RUN_TEST_IDLE_STATE:    nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_DR_SCAN_STATE:   nstate = tms ? SELECT_IR_SCAN_STATE   : CAPTURE_DR_STATE;
-    CAPTURE_DR_STATE:       nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    SHIFT_DR_STATE:         nstate = tms ? EXIT1_DR_STATE         : SHIFT_DR_STATE;
-    EXIT1_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : PAUSE_DR_STATE;
-    PAUSE_DR_STATE:         nstate = tms ? EXIT2_DR_STATE         : PAUSE_DR_STATE;
-    EXIT2_DR_STATE:         nstate = tms ? UPDATE_DR_STATE        : SHIFT_DR_STATE;
-    UPDATE_DR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    SELECT_IR_SCAN_STATE:   nstate = tms ? TEST_LOGIC_RESET_STATE : CAPTURE_IR_STATE;
-    CAPTURE_IR_STATE:       nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    SHIFT_IR_STATE:         nstate = tms ? EXIT1_IR_STATE         : SHIFT_IR_STATE;
-    EXIT1_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : PAUSE_IR_STATE;
-    PAUSE_IR_STATE:         nstate = tms ? EXIT2_IR_STATE         : PAUSE_IR_STATE;
-    EXIT2_IR_STATE:         nstate = tms ? UPDATE_IR_STATE        : SHIFT_IR_STATE;
-    UPDATE_IR_STATE:        nstate = tms ? SELECT_DR_SCAN_STATE   : RUN_TEST_IDLE_STATE;
-    default:                nstate = TEST_LOGIC_RESET_STATE;
-    endcase
-end
-
-always @ (posedge tck or negedge trst) begin
-    if(!trst) state <= TEST_LOGIC_RESET_STATE;
-    else state <= nstate;
-end
-
-assign jtag_reset = state == TEST_LOGIC_RESET_STATE;
-assign shift_dr   = state == SHIFT_DR_STATE;
-assign pause_dr   = state == PAUSE_DR_STATE;
-assign update_dr  = state == UPDATE_DR_STATE;
-assign capture_dr = state == CAPTURE_DR_STATE;
-assign shift_ir   = state == SHIFT_IR_STATE;
-assign pause_ir   = state == PAUSE_IR_STATE;
-assign update_ir  = state == UPDATE_IR_STATE;
-assign capture_ir = state == CAPTURE_IR_STATE;
-
-assign tdoEnable = shift_dr | shift_ir;
-
-///////////////////////////////////////////////////////
-//                      IR register
-///////////////////////////////////////////////////////
-
-always @ (negedge tck or negedge trst) begin
-   if (!trst) ir <= 5'b1;
-   else begin
-      if (jtag_reset) ir <= 5'b1;
-      else if (update_ir) ir <= (sr[4:0] == '0) ? 5'h1f :sr[4:0];
-   end
-end
-
-
-assign devid_sel  = ir == 5'b00001;
-assign dr_en[0]   = ir == 5'b10000;
-assign dr_en[1]   = ir == 5'b10001;
-
-///////////////////////////////////////////////////////
-//                      Shift register
-///////////////////////////////////////////////////////
-always @ (posedge tck or negedge trst) begin
-    if(!trst)begin
-        sr <= '0;
-    end
-    else begin
-        sr <= nsr;
-    end
-end
-
-// SR next value
-always_comb begin
-    nsr = sr;
-    case(1)
-    shift_dr:   begin
-                    case(1)
-                    dr_en[1]:   nsr = {tdi, sr[USER_DR_LENGTH-1:1]};
-
-                    dr_en[0],
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}},tdi, sr[31:1]};
-                    default:    nsr = {{USER_DR_LENGTH-1{1'b0}},tdi}; // bypass
-                    endcase
-                end
-    capture_dr: begin
-                    nsr[0] = 1'b0;
-                    case(1)
-                    dr_en[0]:   nsr = {{USER_DR_LENGTH-15{1'b0}}, idle, dmi_stat, abits, version};
-                    dr_en[1]:   nsr = {{AWIDTH{1'b0}}, rd_data, rd_status};
-                    devid_sel:  nsr = {{USER_DR_LENGTH-32{1'b0}}, jtag_id, 1'b1};
-                    endcase
-                end
-    shift_ir:   nsr = {{USER_DR_LENGTH-5{1'b0}},tdi, sr[4:1]};
-    capture_ir: nsr = {{USER_DR_LENGTH-1{1'b0}},1'b1};
-    endcase
-end
-
-// TDO retiming
-always @ (negedge tck ) tdo <= sr[0];
-
-// DMI CS register
-always @ (posedge tck or negedge trst) begin
-    if(!trst) begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-    else if (update_dr & dr_en[0]) begin
-        dmi_hard_reset <= sr[17];
-        dmi_reset      <= sr[16];
-    end
-    else begin
-        dmi_hard_reset <= 1'b0;
-        dmi_reset      <= 1'b0;
-    end
-end
-
-// DR register
-always @ (posedge tck or negedge trst) begin
-    if(!trst)
-        dr <=  '0;
-    else begin
-        if (update_dr & dr_en[1])
-            dr <= sr;
-        else
-            dr <= {dr[USER_DR_LENGTH-1:2],2'b0};
-    end
-end
-
-assign {wr_addr, wr_data, wr_en, rd_en} = dr;
-
-
-
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/sky130_sram_1kbyte_1rw1r_32x256_8.v b/verilog/rtl/BrqRV_EB1/design/sky130_sram_1kbyte_1rw1r_32x256_8.v
deleted file mode 100644
index 4048ea8..0000000
--- a/verilog/rtl/BrqRV_EB1/design/sky130_sram_1kbyte_1rw1r_32x256_8.v
+++ /dev/null
@@ -1,114 +0,0 @@
-// OpenRAM SRAM model
-// Words: 256
-// Word size: 32
-// Write size: 8
-
-module sky130_sram_1kbyte_1rw1r_32x256_8(
-`ifdef USE_POWER_PINS
-    vccd1,
-    vssd1,
-`endif
-// Port 0: RW
-    clk0,csb0,web0,wmask0,addr0,din0,dout0,
-// Port 1: R
-    clk1,csb1,addr1,dout1
-  );
-
-  parameter NUM_WMASKS = 4 ;
-  parameter DATA_WIDTH = 32 ;
-  parameter ADDR_WIDTH = 8 ;
-  parameter RAM_DEPTH = 1 << ADDR_WIDTH;
-  // FIXME: This delay is arbitrary.
-  parameter DELAY = 3 ;
-  parameter VERBOSE = 1 ; //Set to 0 to only display warnings
-  parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary
-
-`ifdef USE_POWER_PINS
-    inout vccd1;
-    inout vssd1;
-`endif
-  input  clk0; // clock
-  input   csb0; // active low chip select
-  input  web0; // active low write control
-  input [NUM_WMASKS-1:0]   wmask0; // write mask
-  input [ADDR_WIDTH-1:0]  addr0;
-  input [DATA_WIDTH-1:0]  din0;
-  output [DATA_WIDTH-1:0] dout0;
-  input  clk1; // clock
-  input   csb1; // active low chip select
-  input [ADDR_WIDTH-1:0]  addr1;
-  output [DATA_WIDTH-1:0] dout1;
-
-  reg  csb0_reg;
-  reg  web0_reg;
-  reg [NUM_WMASKS-1:0]   wmask0_reg;
-  reg [ADDR_WIDTH-1:0]  addr0_reg;
-  reg [DATA_WIDTH-1:0]  din0_reg;
-  reg [DATA_WIDTH-1:0]  dout0;
-
-  // All inputs are registers
-  always @(posedge clk0)
-  begin
-    csb0_reg = csb0;
-    web0_reg = web0;
-    wmask0_reg = wmask0;
-    addr0_reg = addr0;
-    din0_reg = din0;
-    //#(T_HOLD) dout0 = 32'bx;
-    if ( !csb0_reg && web0_reg && VERBOSE ) 
-      $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]);
-    if ( !csb0_reg && !web0_reg && VERBOSE )
-      $display($time," Writing %m addr0=%b din0=%b wmask0=%b",addr0_reg,din0_reg,wmask0_reg);
-  end
-
-  reg  csb1_reg;
-  reg [ADDR_WIDTH-1:0]  addr1_reg;
-  reg [DATA_WIDTH-1:0]  dout1;
-
-  // All inputs are registers
-  always @(posedge clk1)
-  begin
-    csb1_reg = csb1;
-    addr1_reg = addr1;
-    if (!csb0 && !web0 && !csb1 && (addr0 == addr1))
-         $display($time," WARNING: Writing and reading addr0=%b and addr1=%b simultaneously!",addr0,addr1);
-    //#(T_HOLD) dout1 = 32'bx;
-    if ( !csb1_reg && VERBOSE ) 
-      $display($time," Reading %m addr1=%b dout1=%b",addr1_reg,mem[addr1_reg]);
-  end
-
-reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];
-
-  // Memory Write Block Port 0
-  // Write Operation : When web0 = 0, csb0 = 0
-  always @ (negedge clk0)
-  begin : MEM_WRITE0
-    if ( !csb0_reg && !web0_reg ) begin
-        if (wmask0_reg[0])
-                mem[addr0_reg][7:0] = din0_reg[7:0];
-        if (wmask0_reg[1])
-                mem[addr0_reg][15:8] = din0_reg[15:8];
-        if (wmask0_reg[2])
-                mem[addr0_reg][23:16] = din0_reg[23:16];
-        if (wmask0_reg[3])
-                mem[addr0_reg][31:24] = din0_reg[31:24];
-    end
-  end
-
-  // Memory Read Block Port 0
-  // Read Operation : When web0 = 1, csb0 = 0
-  always @ (negedge clk0)
-  begin : MEM_READ0
-    if (!csb0_reg && web0_reg)
-       dout0 <= #(DELAY) mem[addr0_reg];
-  end
-
-  // Memory Read Block Port 1
-  // Read Operation : When web1 = 1, csb1 = 0
-  always @ (negedge clk1)
-  begin : MEM_READ1
-    if (!csb1_reg)
-       dout1 <= #(DELAY) mem[addr1_reg];
-  end
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/soc_files/iccm_controller.v b/verilog/rtl/BrqRV_EB1/design/soc_files/iccm_controller.v
deleted file mode 100644
index c28bc9d..0000000
--- a/verilog/rtl/BrqRV_EB1/design/soc_files/iccm_controller.v
+++ /dev/null
@@ -1,120 +0,0 @@
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-
-module eb1_iccm_controller (
-	clk_i,
-	rst_ni,
-	rx_dv_i,
-	rx_byte_i,
-	we_o,
-	addr_o,
-	wdata_o,
-	reset_o
-);
-	input wire clk_i;
-	input wire rst_ni;
-	input wire rx_dv_i;
-	input wire [7:0] rx_byte_i;
-	output wire we_o;
-	output wire [13:0] addr_o;
-	output wire [31:0] wdata_o;
-	output wire reset_o;
-	reg [1:0] ctrl_fsm_cs;
-	reg [1:0] ctrl_fsm_ns;
-	wire [7:0] rx_byte_d;
-	reg [7:0] rx_byte_q0;
-	reg [7:0] rx_byte_q1;
-	reg [7:0] rx_byte_q2;
-	reg [7:0] rx_byte_q3;
-	reg we_q;
-	reg we_d;
-	reg [13:0] addr_q;
-	reg [13:0] addr_d;
-	reg reset_q;
-	reg reset_d;
-	reg [1:0] byte_count;
-	localparam [1:0] DONE = 3;
-	localparam [1:0] LOAD = 1;
-	localparam [1:0] PROG = 2;
-	localparam [1:0] RESET = 0;
-	always @(*) begin
-		we_d = we_q;
-		addr_d = addr_q;
-		reset_d = reset_q;
-		ctrl_fsm_ns = ctrl_fsm_cs;
-		case (ctrl_fsm_cs)
-			RESET: begin
-				we_d = 1'b0;
-				reset_d = 1'b0;
-				if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = RESET;
-			end
-			LOAD:
-				if (((byte_count == 2'b11) && (rx_byte_q2 != 8'h0f)) && (rx_byte_d != 8'hff)) begin
-					we_d = 1'b1;
-					ctrl_fsm_ns = PROG;
-				end
-				else
-					ctrl_fsm_ns = DONE;
-			PROG: begin
-				we_d = 1'b0;
-				ctrl_fsm_ns = DONE;
-			end
-			DONE:
-				if (wdata_o == 32'h00000fff) begin
-					ctrl_fsm_ns = DONE;
-					reset_d = 1'b1;
-				end
-				else if (rx_dv_i)
-					ctrl_fsm_ns = LOAD;
-				else
-					ctrl_fsm_ns = DONE;
-			default: ctrl_fsm_ns = RESET;
-		endcase
-	end
-	assign rx_byte_d = rx_byte_i;
-	assign we_o = we_q;
-	assign addr_o = addr_q;
-	assign wdata_o = {rx_byte_q0, rx_byte_q1, rx_byte_q2, rx_byte_q3};
-	assign reset_o = reset_q;
-	always @(posedge clk_i or negedge rst_ni)
-		if (!rst_ni) begin
-			we_q <= 1'b0;
-			addr_q <= 14'b00000000000000;
-			rx_byte_q0 <= 8'b00000000;
-			rx_byte_q1 <= 8'b00000000;
-			rx_byte_q2 <= 8'b00000000;
-			rx_byte_q3 <= 8'b00000000;
-			reset_q <= 1'b0;
-			byte_count <= 2'b00;
-			ctrl_fsm_cs <= RESET;
-		end
-		else begin
-			we_q <= we_d;
-			if (ctrl_fsm_cs == LOAD) begin
-				if (byte_count == 2'b00) begin
-					rx_byte_q0 <= rx_byte_d;
-					byte_count <= 2'b01;
-				end
-				else if (byte_count == 2'b01) begin
-					rx_byte_q1 <= rx_byte_d;
-					byte_count <= 2'b10;
-				end
-				else if (byte_count == 2'b10) begin
-					rx_byte_q2 <= rx_byte_d;
-					byte_count <= 2'b11;
-				end
-				else begin
-					rx_byte_q3 <= rx_byte_d;
-					byte_count <= 2'b00;
-				end
-				addr_q <= addr_d;
-			end
-			if (ctrl_fsm_cs == PROG)
-				addr_q <= addr_d + 2'h2;
-			reset_q <= reset_d;
-			ctrl_fsm_cs <= ctrl_fsm_ns;
-		end
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/design/soc_files/tb_prog.v b/verilog/rtl/BrqRV_EB1/design/soc_files/tb_prog.v
deleted file mode 100644
index 0416bbf..0000000
--- a/verilog/rtl/BrqRV_EB1/design/soc_files/tb_prog.v
+++ /dev/null
@@ -1,258 +0,0 @@
-`timescale 1ns / 1ps
-
-module uartprog #(
-    parameter FILENAME=""
-)(
-    input clk,
-    input mprj_ready,
-    output reg r_Rx_Serial  // used by task UART_WRITE_BYTE
-);
-
-reg r_Clock = 0;
-parameter c_BIT_PERIOD = 8681; // used by task UART_WRITE_BYTE
-parameter c_CLOCK_PERIOD_NS = 100;
-
-//reg [7:0] mem [31:0];
-reg [7:0] INSTR [16384-1:0];
-integer instr_count = 0;
-reg ready;
-reg test;
-integer count;
-integer uart_counter;
-reg [7:0] data;
-integer tx_count;
-integer state_count;
-parameter [1:0] IDLE = 2'b00, START_TX = 2'b01, DATA_TX = 2'b10, STOP_TX = 2'b11;
-reg [1:0] state, next_state;
-reg valid;
-
-always @ ( posedge r_Clock ) begin
-  if (mprj_ready) begin
-    ready = 1'b1;
-  end else begin
-    ready = 1'b0;
-  end
-end
-
-initial begin
-        test = 1'b1;
-       // #1000 test = 1'b1;
-end
-
-always @(posedge clk) begin
-	count = count + 1;
-	end
-	
-always @(count) begin	
-	if(count > 1740) begin 
-	  	r_Clock = ~r_Clock;
-		count = 0;
-	end
-end
-
-always @(posedge clk or negedge clk) begin
-	if(next_state == IDLE) begin
-   	 state_count = 32'd0;
-  	end
-  	else begin
-  	state_count = state_count + 32'd1;
-  	end
- end
-
-initial begin
-   $readmemh(FILENAME,INSTR);
-end
-
-// State Machine
-always @(posedge clk) begin
-	if(~ready) begin
-	state = IDLE;
-	end
-	else begin
-	state = next_state;
-	end
-end
-
-always @(posedge clk) begin
-	case(state)
-	IDLE	 : begin
-		  // $display("In IDLE State");
-		   r_Rx_Serial <= 1'b1;
-		   next_state = (~valid && (state_count == 32'd00)) ? IDLE : START_TX;
-		   end
-	START_TX : begin
-		  // $display("Sending Start Bit");
-		   r_Rx_Serial <= 1'b0;
-		   next_state = (state_count == 32'd696) ? DATA_TX : START_TX;
-		   state_count = (state_count == 32'd696) ? 32'd0 : state_count;
-       	   end
-        DATA_TX : begin
-        	  // $display("Sending Data Bit");
-        	   r_Rx_Serial <= data[tx_count];
-        	   tx_count = (state_count == 32'd696) ? (tx_count + 32'd1) : tx_count;
-        	   next_state = (tx_count == 32'd8) ? STOP_TX : DATA_TX;
-        	   state_count = (state_count == 32'd696) ? 32'd0 : state_count;
-        	   end
-        STOP_TX : begin
-        	  // $display("Sending End Bit");
-		   r_Rx_Serial <= 1'b1;
-		   next_state = (state_count == 32'd696) ? IDLE : STOP_TX;
-		   state_count = (state_count == 32'd696) ? 32'd0 : state_count;
- 		   tx_count = 32'd0;
-		   valid = 1'b0;//(state_count == 32'd20) ? 1'b0 : valid;
-       	   end
-       endcase
-end		   
-		   
-		   
-/*task UART_WRITE_BYTE;
-    //input r_Clock;
-    input [7:0] i_Data;
-    integer     ii;
-    //integer tx_count = 32'd0;
-    begin
-   	// @ (posedge r_Clock);
-   	// r_Rx_Serial = 1'b0;
-    	//always @(posedge r_Clock) begin
-    		if(tx_count == 32'd0) begin
-        		// Send Start Bit
-        		$display("Sending start bit");
-        		r_Rx_Serial = 1'b0;
-        		#(c_BIT_PERIOD);
-       		#1000;
-       	end
-      // end		//tx_count = tx_count + 32'd1;
-      		//end
-      	//end/
-      		//else if(tx_count == 32'd1) begin
-      		/*	// Send Stop Bit
-        		$display("Sending end bit");
-        		r_Rx_Serial = 1'b1;
-        		#(c_BIT_PERIOD);
-        	end
-      		
-		//else begin
-        	// Send Data Byte
-       	 for (ii=0; ii<8; ii=ii+1) begin
-             	$display("Sending data bit");
-            	r_Rx_Serial = i_Data[ii];
-            	$display("Data bit, %h, %h",ii,i_Data[ii]);
-            	#(c_BIT_PERIOD);
-        	end
-
-        	// Send Stop Bit
-        	$display("Sending end bit");
-        	r_Rx_Serial = 1'b1;
-        	#(c_BIT_PERIOD);
-        	//end
-     end
-endtask // UART_WRITE_BYTE
-*/
-
-
-
-always @(posedge r_Clock)  begin
-	if(~ready && test) begin
-		valid = 1'b0;
-		uart_counter = 32'd0;
-		data = 8'h00;
-    		//r_Rx_Serial <= 1'b1;
-    		//$display("Starting");
-    	end
-    	else if(ready && test) begin
-    		if((instr_count < 16384) && ({INSTR[instr_count],INSTR[instr_count+1],INSTR[instr_count+2],INSTR[instr_count+3]} != 32'h00000FFF)) begin
-    			if(uart_counter == 32'd0) begin
-    				data = INSTR[instr_count];
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd1) begin
-    				data = INSTR[instr_count+1];
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd2) begin
-    				data = INSTR[instr_count+2];
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd3) begin
-    				data = INSTR[instr_count+3];
-    				uart_counter = 32'd0;
-    				instr_count = instr_count + 32'd4;
-    				valid = 1;
-    				//$display("Instruction Count ,%d",instr_count);
-    			end
-    		end
-    		else begin
-    			if(uart_counter == 32'd0) begin
-    				data = 8'h00;
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd1) begin
-    				data = 8'h00;
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd2) begin
-    				data = 8'h0F;
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd3) begin
-    				data = 8'hFF;
-    				uart_counter = uart_counter + 32'd1;
-    				valid = 1;
-    			end
-    			else if(uart_counter == 32'd4) begin
-    				valid = 0;
-    			end
-    		end    		
- end
-end
-
-    	
-    /*while (~mprj_ready && test) begin
-     $display("2nd Step");
-      #(c_CLOCK_PERIOD_NS);
-      //@(posedge r_Clock); 
-      r_Rx_Serial = 1'b1;
-      $display("3rd Step");
-    end*/
-    /*while (instr_count<255 && INSTR[instr_count]!=32'h00000FFF) begin
-      	//@(posedge r_Clock);
-       #100;
-       //UART_WRITE_BYTE(INSTR[instr_count][31:24]);
-       // @(posedge r_Clock);
-       #100;
-       // UART_WRITE_BYTE(INSTR[instr_count][23:16]);
-       // @(posedge r_Clock);
-       #100;
-       // UART_WRITE_BYTE(INSTR[instr_count][15:8]);
-       // @(posedge r_Clock);
-       #100;
-        UART_WRITE_BYTE(INSTR[instr_count][7:0]);
-       // @(posedge r_Clock);
-       #100;
-        instr_count = instr_count + 1'b1;
-    end*/
-    /*#(c_CLOCK_PERIOD_NS);
-   // @(posedge r_Clock);
-    UART_WRITE_BYTE(8'h00);
-    #(c_CLOCK_PERIOD_NS);
-   // @(posedge r_Clock);
-    UART_WRITE_BYTE(8'h00);
-    #(c_CLOCK_PERIOD_NS);
-   // @(posedge r_Clock);
-    UART_WRITE_BYTE(8'h0F);
-    #(c_CLOCK_PERIOD_NS);
-   // @(posedge r_Clock);
-    UART_WRITE_BYTE(8'hFF);
-    #(c_CLOCK_PERIOD_NS);
-   // @(posedge r_Clock);
-   $display("UART END");*/
-
-
-endmodule
-
diff --git a/verilog/rtl/BrqRV_EB1/design/soc_files/uart_rx_prog.v b/verilog/rtl/BrqRV_EB1/design/soc_files/uart_rx_prog.v
deleted file mode 100644
index 7af5031..0000000
--- a/verilog/rtl/BrqRV_EB1/design/soc_files/uart_rx_prog.v
+++ /dev/null
@@ -1,151 +0,0 @@
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-  
-module eb1_uart_rx_prog (
-   input         i_Clock,
-   input         rst_ni,
-   input         i_Rx_Serial,
-   input  [15:0] CLKS_PER_BIT,
-   output        o_Rx_DV,
-   output  [7:0] o_Rx_Byte
-   );
-    
-  parameter s_IDLE         = 3'b000;
-  parameter s_RX_START_BIT = 3'b001;
-  parameter s_RX_DATA_BITS = 3'b010;
-  parameter s_RX_STOP_BIT  = 3'b011;
-  parameter s_CLEANUP      = 3'b100;
-   
-  reg           r_Rx_Data_R;
-  reg           r_Rx_Data;
-   
-  reg [15:0]     r_Clock_Count;
-  reg [2:0]     r_Bit_Index; //8 bits total
-  reg [7:0]     r_Rx_Byte;
-  reg           r_Rx_DV;
-  reg [2:0]     r_SM_Main;
-   
-  // Purpose: Double-register the incoming data.
-  // This allows it to be used in the UART RX Clock Domain.
-  // (It removes problems caused by metastability)
-  always @(posedge i_Clock)
-    if(rst_ni == 1'b0) begin
-    	r_Rx_Data_R <= 1'b1;
-    	r_Rx_Data   <= 1'b1;
-    end
-    else begin
-      r_Rx_Data_R <= i_Rx_Serial;
-      r_Rx_Data   <= r_Rx_Data_R;
-    end
-   
-   
-  // Purpose: Control RX state machine
-  always @(posedge i_Clock or negedge rst_ni)
-    begin
-      if (rst_ni == 1'b0) begin
-        r_SM_Main <= s_IDLE;
-        r_Rx_DV       <= 1'b0;
-        r_Clock_Count <= 16'h0000;
-        r_Bit_Index   <= 3'b000;
-        r_Rx_Byte     <= 8'h00;
-      end else begin       
-      case (r_SM_Main)
-        s_IDLE :
-          begin
-            r_Rx_DV       <= 1'b0;
-            r_Clock_Count <= 0;
-            r_Bit_Index   <= 0;
-             
-            if (r_Rx_Data == 1'b0)          // Start bit detected
-              r_SM_Main <= s_RX_START_BIT;
-            else
-              r_SM_Main <= s_IDLE;
-          end
-         
-        // Check middle of start bit to make sure it's still low
-        s_RX_START_BIT :
-          begin
-            if (r_Clock_Count == ((CLKS_PER_BIT-1)>>1))
-              begin
-                if (r_Rx_Data == 1'b0)
-                  begin
-                    r_Clock_Count <= 0;  // reset counter, found the middle
-                    r_SM_Main     <= s_RX_DATA_BITS;
-                  end
-                else
-                  r_SM_Main <= s_IDLE;
-              end
-            else
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_START_BIT;
-              end
-          end // case: s_RX_START_BIT
-         
-         
-        // Wait CLKS_PER_BIT-1 clock cycles to sample serial data
-        s_RX_DATA_BITS :
-          begin
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_DATA_BITS;
-              end
-            else
-              begin
-                r_Clock_Count          <= 0;
-                r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
-                 
-                // Check if we have received all bits
-                if (r_Bit_Index < 7)
-                  begin
-                    r_Bit_Index <= r_Bit_Index + 1;
-                    r_SM_Main   <= s_RX_DATA_BITS;
-                  end
-                else
-                  begin
-                    r_Bit_Index <= 0;
-                    r_SM_Main   <= s_RX_STOP_BIT;
-                  end
-              end
-          end // case: s_RX_DATA_BITS
-     
-     
-        // Receive Stop bit.  Stop bit = 1
-        s_RX_STOP_BIT :
-          begin
-            // Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_STOP_BIT;
-              end
-            else
-              begin
-                r_Rx_DV       <= 1'b1;
-                r_Clock_Count <= 0;
-                r_SM_Main     <= s_CLEANUP;
-              end
-          end // case: s_RX_STOP_BIT
-     
-         
-        // Stay here 1 clock
-        s_CLEANUP :
-          begin
-            r_SM_Main <= s_IDLE;
-            r_Rx_DV   <= 1'b0;
-          end
-         
-         
-        default :
-          r_SM_Main <= s_IDLE;
-         
-      endcase
-      end
-    end   
-   
-  assign o_Rx_DV   = r_Rx_DV;
-  assign o_Rx_Byte = r_Rx_Byte;
-   
-endmodule // uart_rx
-
diff --git a/verilog/rtl/BrqRV_EB1/design/uart_rx_prog.v b/verilog/rtl/BrqRV_EB1/design/uart_rx_prog.v
deleted file mode 100644
index 7af5031..0000000
--- a/verilog/rtl/BrqRV_EB1/design/uart_rx_prog.v
+++ /dev/null
@@ -1,151 +0,0 @@
-// Licensed under the Apache License, Version 2.0, see LICENSE for details.
-// SPDX-License-Identifier: Apache-2.0
-  
-module eb1_uart_rx_prog (
-   input         i_Clock,
-   input         rst_ni,
-   input         i_Rx_Serial,
-   input  [15:0] CLKS_PER_BIT,
-   output        o_Rx_DV,
-   output  [7:0] o_Rx_Byte
-   );
-    
-  parameter s_IDLE         = 3'b000;
-  parameter s_RX_START_BIT = 3'b001;
-  parameter s_RX_DATA_BITS = 3'b010;
-  parameter s_RX_STOP_BIT  = 3'b011;
-  parameter s_CLEANUP      = 3'b100;
-   
-  reg           r_Rx_Data_R;
-  reg           r_Rx_Data;
-   
-  reg [15:0]     r_Clock_Count;
-  reg [2:0]     r_Bit_Index; //8 bits total
-  reg [7:0]     r_Rx_Byte;
-  reg           r_Rx_DV;
-  reg [2:0]     r_SM_Main;
-   
-  // Purpose: Double-register the incoming data.
-  // This allows it to be used in the UART RX Clock Domain.
-  // (It removes problems caused by metastability)
-  always @(posedge i_Clock)
-    if(rst_ni == 1'b0) begin
-    	r_Rx_Data_R <= 1'b1;
-    	r_Rx_Data   <= 1'b1;
-    end
-    else begin
-      r_Rx_Data_R <= i_Rx_Serial;
-      r_Rx_Data   <= r_Rx_Data_R;
-    end
-   
-   
-  // Purpose: Control RX state machine
-  always @(posedge i_Clock or negedge rst_ni)
-    begin
-      if (rst_ni == 1'b0) begin
-        r_SM_Main <= s_IDLE;
-        r_Rx_DV       <= 1'b0;
-        r_Clock_Count <= 16'h0000;
-        r_Bit_Index   <= 3'b000;
-        r_Rx_Byte     <= 8'h00;
-      end else begin       
-      case (r_SM_Main)
-        s_IDLE :
-          begin
-            r_Rx_DV       <= 1'b0;
-            r_Clock_Count <= 0;
-            r_Bit_Index   <= 0;
-             
-            if (r_Rx_Data == 1'b0)          // Start bit detected
-              r_SM_Main <= s_RX_START_BIT;
-            else
-              r_SM_Main <= s_IDLE;
-          end
-         
-        // Check middle of start bit to make sure it's still low
-        s_RX_START_BIT :
-          begin
-            if (r_Clock_Count == ((CLKS_PER_BIT-1)>>1))
-              begin
-                if (r_Rx_Data == 1'b0)
-                  begin
-                    r_Clock_Count <= 0;  // reset counter, found the middle
-                    r_SM_Main     <= s_RX_DATA_BITS;
-                  end
-                else
-                  r_SM_Main <= s_IDLE;
-              end
-            else
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_START_BIT;
-              end
-          end // case: s_RX_START_BIT
-         
-         
-        // Wait CLKS_PER_BIT-1 clock cycles to sample serial data
-        s_RX_DATA_BITS :
-          begin
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_DATA_BITS;
-              end
-            else
-              begin
-                r_Clock_Count          <= 0;
-                r_Rx_Byte[r_Bit_Index] <= r_Rx_Data;
-                 
-                // Check if we have received all bits
-                if (r_Bit_Index < 7)
-                  begin
-                    r_Bit_Index <= r_Bit_Index + 1;
-                    r_SM_Main   <= s_RX_DATA_BITS;
-                  end
-                else
-                  begin
-                    r_Bit_Index <= 0;
-                    r_SM_Main   <= s_RX_STOP_BIT;
-                  end
-              end
-          end // case: s_RX_DATA_BITS
-     
-     
-        // Receive Stop bit.  Stop bit = 1
-        s_RX_STOP_BIT :
-          begin
-            // Wait CLKS_PER_BIT-1 clock cycles for Stop bit to finish
-            if (r_Clock_Count < CLKS_PER_BIT-1)
-              begin
-                r_Clock_Count <= r_Clock_Count + 1;
-                r_SM_Main     <= s_RX_STOP_BIT;
-              end
-            else
-              begin
-                r_Rx_DV       <= 1'b1;
-                r_Clock_Count <= 0;
-                r_SM_Main     <= s_CLEANUP;
-              end
-          end // case: s_RX_STOP_BIT
-     
-         
-        // Stay here 1 clock
-        s_CLEANUP :
-          begin
-            r_SM_Main <= s_IDLE;
-            r_Rx_DV   <= 1'b0;
-          end
-         
-         
-        default :
-          r_SM_Main <= s_IDLE;
-         
-      endcase
-      end
-    end   
-   
-  assign o_Rx_DV   = r_Rx_DV;
-  assign o_Rx_Byte = r_Rx_Byte;
-   
-endmodule // uart_rx
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/SimJTAG.cc b/verilog/rtl/BrqRV_EB1/testbench/SimJTAG.cc
deleted file mode 100644
index 7179187..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/SimJTAG.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// See LICENSE.SiFive for license details.
-
-#include <cstdlib>
-#include "remote_bitbang.h"
-
-remote_bitbang_t* jtag;
-extern "C" int jtag_tick
-(
- unsigned char * jtag_TCK,
- unsigned char * jtag_TMS,
- unsigned char * jtag_TDI,
- unsigned char * jtag_TRSTn,
- unsigned char * srstn,
- unsigned char jtag_TDO
-)
-{
-  if (!jtag) {
-    // TODO: Pass in real port number
-    jtag = new remote_bitbang_t(0);
-  }
-
-  jtag->tick(jtag_TCK, jtag_TMS, jtag_TDI, jtag_TRSTn, srstn, jtag_TDO);
-
-  return jtag->done() ? (jtag->exit_code() << 1 | 1) : 0;
-
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/SimJTAG.v b/verilog/rtl/BrqRV_EB1/testbench/SimJTAG.v
deleted file mode 100644
index e7915bd..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/SimJTAG.v
+++ /dev/null
@@ -1,89 +0,0 @@
-// See LICENSE.SiFive for license details.
-//VCS coverage exclude_file
-import "DPI-C" function int jtag_tick
-(
- output bit jtag_TCK,
- output bit jtag_TMS,
- output bit jtag_TDI,
- output bit jtag_TRSTn,
- output bit sysrstn,
-
- input bit  jtag_TDO
-);
-
-module SimJTAG #(
-                 parameter TICK_DELAY = 50
-                 )(
-
-                   input         clock,
-                   input         reset,
-
-                   input         enable,
-                   input         init_done,
-
-                   output        jtag_TCK,
-                   output        jtag_TMS,
-                   output        jtag_TDI,
-                   output        jtag_TRSTn,
-                   output        srstn,
-
-                   input         jtag_TDO_data,
-                   input         jtag_TDO_driven,
-
-                   output [31:0] exit
-                   );
-
-   reg [31:0]                    tickCounterReg;
-   wire [31:0]                   tickCounterNxt;
-
-   assign tickCounterNxt = (tickCounterReg == 0) ? TICK_DELAY :  (tickCounterReg - 1);
-
-   bit          r_reset;
-
-   wire [31:0]  random_bits = $random;
-
-   wire         #0.1 __jtag_TDO = jtag_TDO_driven ?
-                jtag_TDO_data : random_bits[0];
-
-   bit          __jtag_TCK;
-   bit          __jtag_TMS;
-   bit          __jtag_TDI;
-   bit          __jtag_TRSTn;
-   int          __exit;
-   bit          sysrstn=1;
-
-   reg          init_done_sticky;
-
-   assign #0.1 jtag_TCK   = __jtag_TCK;
-   assign #0.1 jtag_TMS   = __jtag_TMS;
-   assign #0.1 jtag_TDI   = __jtag_TDI;
-   assign #0.1 jtag_TRSTn = __jtag_TRSTn;
-   assign srstn = sysrstn;
-
-   assign #0.1 exit = __exit;
-
-   always @(posedge clock) begin
-      r_reset <= reset;
-      if (reset || r_reset) begin
-         __exit = 0;
-         tickCounterReg <= TICK_DELAY;
-         init_done_sticky <= 1'b0;
-         __jtag_TCK = !__jtag_TCK;
-      end else begin
-         init_done_sticky <= init_done | init_done_sticky;
-         if (enable && init_done_sticky) begin
-            tickCounterReg <= tickCounterNxt;
-            if (tickCounterReg == 0) begin
-               __exit = jtag_tick(
-                                  __jtag_TCK,
-                                  __jtag_TMS,
-                                  __jtag_TDI,
-                                  __jtag_TRSTn,
-                                  sysrstn,
-                                  __jtag_TDO);
-            end
-         end // if (enable && init_done_sticky)
-      end // else: !if(reset || r_reset)
-   end // always @ (posedge clock)
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/testbench/ahb_sif.sv b/verilog/rtl/BrqRV_EB1/testbench/ahb_sif.sv
deleted file mode 100644
index 7ace236..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/ahb_sif.sv
+++ /dev/null
@@ -1,225 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-`ifdef RV_BUILD_AHB_LITE
-
-module ahb_sif (
-input logic [63:0] HWDATA,
-input logic HCLK,
-input logic HSEL,
-input logic [3:0] HPROT,
-input logic HWRITE,
-input logic [1:0] HTRANS,
-input logic [2:0] HSIZE,
-input logic HREADY,
-input logic HRESETn,
-input logic [31:0] HADDR,
-input logic [2:0] HBURST,
-
-output logic HREADYOUT,
-output logic HRESP,
-output logic [63:0] HRDATA
-);
-
-parameter MAILBOX_ADDR = 32'hD0580000;
-
-logic write;
-logic [31:0] laddr, addr;
-logic [7:0] strb_lat;
-logic [63:0] rdata;
-
-bit [7:0] mem [bit[31:0]];
-bit [7:0] wscnt;
-int dws = 0;
-int iws = 0;
-bit dws_rand;
-bit iws_rand;
-bit ok;
-
-// Wires
-wire [63:0] WriteData = HWDATA;
-wire [7:0] strb =  HSIZE == 3'b000 ? 8'h1 << HADDR[2:0] :
-                   HSIZE == 3'b001 ? 8'h3 << {HADDR[2:1],1'b0} :
-                   HSIZE == 3'b010 ? 8'hf << {HADDR[2],2'b0} : 8'hff;
-
-
-wire mailbox_write = write && laddr==MAILBOX_ADDR;
-
-
-initial begin
-    if ($value$plusargs("iws=%d", iws));
-    if ($value$plusargs("dws=%d", dws));
-    dws_rand = dws < 0;
-    iws_rand = iws < 0;
-end
-
-
-
-always @ (negedge HCLK ) begin
-    if(HREADY)
-        addr = HADDR;
-    if (write & HREADY) begin
-        if(strb_lat[7]) mem[{laddr[31:3],3'd7}] = HWDATA[63:56];
-        if(strb_lat[6]) mem[{laddr[31:3],3'd6}] = HWDATA[55:48];
-        if(strb_lat[5]) mem[{laddr[31:3],3'd5}] = HWDATA[47:40];
-        if(strb_lat[4]) mem[{laddr[31:3],3'd4}] = HWDATA[39:32];
-        if(strb_lat[3]) mem[{laddr[31:3],3'd3}] = HWDATA[31:24];
-        if(strb_lat[2]) mem[{laddr[31:3],3'd2}] = HWDATA[23:16];
-        if(strb_lat[1]) mem[{laddr[31:3],3'd1}] = HWDATA[15:08];
-        if(strb_lat[0]) mem[{laddr[31:3],3'd0}] = HWDATA[07:00];
-    end
-    if(HREADY & HSEL & |HTRANS) begin
-`ifdef VERILATOR
-        if(iws_rand & ~HPROT[0])
-            iws = $random & 15;
-        if(dws_rand & HPROT[0])
-            dws = $random & 15;
-`else
-        if(iws_rand & ~HPROT[0])
-            ok = std::randomize(iws) with {iws dist {0:=10, [1:3]:/2, [4:15]:/1};};
-        if(dws_rand & HPROT[0])
-            ok = std::randomize(dws) with {dws dist {0:=10, [1:3]:/2, [4:15]:/1};};
-`endif
-    end
-end
-
-
-assign HRDATA = HREADY ? rdata : ~rdata;
-assign HREADYOUT = wscnt == 0;
-assign HRESP = 0;
-
-always @(posedge HCLK or negedge HRESETn) begin
-    if(~HRESETn) begin
-        laddr <= 32'b0;
-        write <= 1'b0;
-        rdata <= '0;
-        wscnt <= 0;
-    end
-    else begin
-        if(HREADY & HSEL) begin
-            laddr <= HADDR;
-            write <= HWRITE & |HTRANS;
-            if(|HTRANS & ~HWRITE)
-                rdata <= {mem[{addr[31:3],3'd7}],
-                          mem[{addr[31:3],3'd6}],
-                          mem[{addr[31:3],3'd5}],
-                          mem[{addr[31:3],3'd4}],
-                          mem[{addr[31:3],3'd3}],
-                          mem[{addr[31:3],3'd2}],
-                          mem[{addr[31:3],3'd1}],
-                          mem[{addr[31:3],3'd0}]};
-            strb_lat <= strb;
-        end
-    end
-    if(HREADY & HSEL & |HTRANS)
-        wscnt <= HPROT[0] ? dws[7:0] : iws[7:0];
-    else if(wscnt != 0)
-        wscnt <= wscnt-1;
-end
-
-
-endmodule
-`endif
-
-`ifdef RV_BUILD_AXI4
-module axi_slv #(TAGW=1) (
-input                   aclk,
-input                   rst_l,
-input                   arvalid,
-output reg              arready,
-input [31:0]            araddr,
-input [TAGW-1:0]        arid,
-input [7:0]             arlen,
-input [1:0]             arburst,
-input [2:0]             arsize,
-
-output reg              rvalid,
-input                   rready,
-output reg [63:0]       rdata,
-output reg [1:0]        rresp,
-output reg [TAGW-1:0]   rid,
-output                  rlast,
-
-input                   awvalid,
-output                  awready,
-input [31:0]            awaddr,
-input [TAGW-1:0]        awid,
-input [7:0]             awlen,
-input [1:0]             awburst,
-input [2:0]             awsize,
-
-input [63:0]            wdata,
-input [7:0]             wstrb,
-input                   wvalid,
-output                  wready,
-
-output  reg             bvalid,
-input                   bready,
-output reg [1:0]        bresp,
-output reg [TAGW-1:0]   bid
-);
-
-parameter MAILBOX_ADDR = 32'hD0580000;
-parameter MEM_SIZE_DW = 8192;
-
-bit [7:0] mem [bit[31:0]];
-bit [63:0] memdata;
-wire [63:0] WriteData;
-wire mailbox_write;
-
-
-assign mailbox_write = awvalid && awaddr>=MAILBOX_ADDR && rst_l;
-assign WriteData = wdata;
-
-always @ ( posedge aclk or negedge rst_l) begin
-    if(!rst_l) begin
-        rvalid  <= 0;
-        bvalid  <= 0;
-    end
-    else begin
-        bid     <= awid;
-        rid     <= arid;
-        rvalid  <= arvalid;
-        bvalid  <= awvalid;
-        rdata   <= memdata;
-    end
-end
-
-always @ ( negedge aclk) begin
-    if(arvalid) memdata <= {mem[araddr+7], mem[araddr+6], mem[araddr+5], mem[araddr+4],
-                            mem[araddr+3], mem[araddr+2], mem[araddr+1], mem[araddr]};
-    if(awvalid) begin
-        if(wstrb[7]) mem[awaddr+7] = wdata[63:56];
-        if(wstrb[6]) mem[awaddr+6] = wdata[55:48];
-        if(wstrb[5]) mem[awaddr+5] = wdata[47:40];
-        if(wstrb[4]) mem[awaddr+4] = wdata[39:32];
-        if(wstrb[3]) mem[awaddr+3] = wdata[31:24];
-        if(wstrb[2]) mem[awaddr+2] = wdata[23:16];
-        if(wstrb[1]) mem[awaddr+1] = wdata[15:08];
-        if(wstrb[0]) mem[awaddr+0] = wdata[07:00];
-    end
-end
-
-
-assign arready = 1'b1;
-assign awready = 1'b1;
-assign wready  = 1'b1;
-assign rresp   = 2'b0;
-assign bresp   = 2'b0;
-assign rlast   = 1'b1;
-
-endmodule
-`endif
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.c b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.c
deleted file mode 100644
index b366c80..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.c
+++ /dev/null
@@ -1,2167 +0,0 @@
-#include "defines.h"
-
-#define ITERATIONS 1
-
-
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-
-//#include "/wd/users/jrahmeh/coremark_v1.0/riscv/coremark.h"
-
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-/* Topic: Description
-        This file contains  declarations of the various benchmark functions.
-*/
-
-/* Configuration: TOTAL_DATA_SIZE
-        Define total size for data algorithms will operate on
-*/
-#ifndef TOTAL_DATA_SIZE
-#define TOTAL_DATA_SIZE 2*1000
-#endif
-
-#define SEED_ARG 0
-#define SEED_FUNC 1
-#define SEED_VOLATILE 2
-
-#define MEM_STATIC 0
-#define MEM_MALLOC 1
-#define MEM_STACK 2
-
-/* File : core_portme.h */
-
-/*
-        Author : Shay Gal-On, EEMBC
-        Legal : TODO!
-*/
-/* Topic : Description
-        This file contains configuration constants required to execute on different platforms
-*/
-#ifndef CORE_PORTME_H
-#define CORE_PORTME_H
-/************************/
-/* Data types and settings */
-/************************/
-/* Configuration : HAS_FLOAT
-        Define to 1 if the platform supports floating point.
-*/
-#ifndef HAS_FLOAT
-#define HAS_FLOAT 0
-#endif
-/* Configuration : HAS_TIME_H
-        Define to 1 if platform has the time.h header file,
-        and implementation of functions thereof.
-*/
-#ifndef HAS_TIME_H
-#define HAS_TIME_H 0
-#endif
-/* Configuration : USE_CLOCK
-        Define to 1 if platform has the time.h header file,
-        and implementation of functions thereof.
-*/
-#ifndef USE_CLOCK
-#define USE_CLOCK 0
-#endif
-/* Configuration : HAS_STDIO
-        Define to 1 if the platform has stdio.h.
-*/
-#ifndef HAS_STDIO
-#define HAS_STDIO 0
-#endif
-/* Configuration : HAS_PRINTF
-        Define to 1 if the platform has stdio.h and implements the printf function.
-*/
-#ifndef HAS_PRINTF
-#define HAS_PRINTF 1
-int whisperPrintf(const char* format, ...);
-#define ee_printf whisperPrintf
-#endif
-
-/* Configuration : CORE_TICKS
-        Define type of return from the timing functions.
- */
-#include <time.h>
-typedef clock_t CORE_TICKS;
-
-/* Definitions : COMPILER_VERSION, COMPILER_FLAGS, MEM_LOCATION
-        Initialize these strings per platform
-*/
-#ifndef COMPILER_VERSION
- #ifdef __GNUC__
- #define COMPILER_VERSION "GCC"__VERSION__
- #else
- #define COMPILER_VERSION "Please put compiler version here (e.g. gcc 4.1)"
- #endif
-#endif
-#ifndef COMPILER_FLAGS
- #define COMPILER_FLAGS "-O2"
-#endif
-
-#ifndef MEM_LOCATION
-// #define MEM_LOCATION "STACK"
- #define MEM_LOCATION "STATIC"
-#endif
-
-/* Data Types :
-        To avoid compiler issues, define the data types that need ot be used for 8b, 16b and 32b in <core_portme.h>.
-
-        *Imprtant* :
-        ee_ptr_int needs to be the data type used to hold pointers, otherwise coremark may fail!!!
-*/
-typedef signed short ee_s16;
-typedef unsigned short ee_u16;
-typedef signed int ee_s32;
-typedef double ee_f32;
-typedef unsigned char ee_u8;
-typedef unsigned int ee_u32;
-typedef ee_u32 ee_ptr_int;
-typedef size_t ee_size_t;
-/* align_mem :
-        This macro is used to align an offset to point to a 32b value. It is used in the Matrix algorithm to initialize the input memory blocks.
-*/
-#define align_mem(x) (void *)(4 + (((ee_ptr_int)(x) - 1) & ~3))
-
-/* Configuration : SEED_METHOD
-        Defines method to get seed values that cannot be computed at compile time.
-
-        Valid values :
-        SEED_ARG - from command line.
-        SEED_FUNC - from a system function.
-        SEED_VOLATILE - from volatile variables.
-*/
-#ifndef SEED_METHOD
-#define SEED_METHOD SEED_VOLATILE
-#endif
-
-/* Configuration : MEM_METHOD
-        Defines method to get a block of memry.
-
-        Valid values :
-        MEM_MALLOC - for platforms that implement malloc and have malloc.h.
-        MEM_STATIC - to use a static memory array.
-        MEM_STACK - to allocate the data block on the stack (NYI).
-*/
-#ifndef MEM_METHOD
-//#define MEM_METHOD MEM_STACK
-#define MEM_METHOD MEM_STATIC
-#endif
-
-/* Configuration : MULTITHREAD
-        Define for parallel execution
-
-        Valid values :
-        1 - only one context (default).
-        N>1 - will execute N copies in parallel.
-
-        Note :
-        If this flag is defined to more then 1, an implementation for launching parallel contexts must be defined.
-
-        Two sample implementations are provided. Use <USE_PTHREAD> or <USE_FORK> to enable them.
-
-        It is valid to have a different implementation of <core_start_parallel> and <core_end_parallel> in <core_portme.c>,
-        to fit a particular architecture.
-*/
-#ifndef MULTITHREAD
-#define MULTITHREAD 1
-#define USE_PTHREAD 0
-#define USE_FORK 0
-#define USE_SOCKET 0
-#endif
-
-/* Configuration : MAIN_HAS_NOARGC
-        Needed if platform does not support getting arguments to main.
-
-        Valid values :
-        0 - argc/argv to main is supported
-        1 - argc/argv to main is not supported
-
-        Note :
-        This flag only matters if MULTITHREAD has been defined to a value greater then 1.
-*/
-#ifndef MAIN_HAS_NOARGC
-#define MAIN_HAS_NOARGC 1
-#endif
-
-/* Configuration : MAIN_HAS_NORETURN
-        Needed if platform does not support returning a value from main.
-
-        Valid values :
-        0 - main returns an int, and return value will be 0.
-        1 - platform does not support returning a value from main
-*/
-#ifndef MAIN_HAS_NORETURN
-#define MAIN_HAS_NORETURN 1
-#endif
-
-/* Variable : default_num_contexts
-        Not used for this simple port, must cintain the value 1.
-*/
-extern ee_u32 default_num_contexts;
-
-typedef struct CORE_PORTABLE_S {
-        ee_u8   portable_id;
-} core_portable;
-
-/* target specific init/fini */
-void portable_init(core_portable *p, int *argc, char *argv[]);
-void portable_fini(core_portable *p);
-
-#if !defined(PROFILE_RUN) && !defined(PERFORMANCE_RUN) && !defined(VALIDATION_RUN)
-#if (TOTAL_DATA_SIZE==1200)
-#define PROFILE_RUN 1
-#elif (TOTAL_DATA_SIZE==2000)
-#define PERFORMANCE_RUN 1
-#else
-#define VALIDATION_RUN 1
-#endif
-#endif
-
-#endif /* CORE_PORTME_H */
-
-
-#if HAS_STDIO
-#include <stdio.h>
-#endif
-#if HAS_PRINTF
-#ifndef ee_printf
-#define ee_printf printf
-#endif
-#endif
-
-/* Actual benchmark execution in iterate */
-void *iterate(void *pres);
-
-/* Typedef: secs_ret
-        For machines that have floating point support, get number of seconds as a double.
-        Otherwise an unsigned int.
-*/
-#if HAS_FLOAT
-typedef double secs_ret;
-#else
-typedef ee_u32 secs_ret;
-#endif
-
-#if MAIN_HAS_NORETURN
-#define MAIN_RETURN_VAL
-#define MAIN_RETURN_TYPE void
-#else
-#define MAIN_RETURN_VAL 0
-#define MAIN_RETURN_TYPE int
-#endif
-
-void start_time(void);
-void stop_time(void);
-CORE_TICKS get_time(void);
-secs_ret time_in_secs(CORE_TICKS ticks);
-
-/* Misc useful functions */
-ee_u16 crcu8(ee_u8 data, ee_u16 crc);
-ee_u16 crc16(ee_s16 newval, ee_u16 crc);
-ee_u16 crcu16(ee_u16 newval, ee_u16 crc);
-ee_u16 crcu32(ee_u32 newval, ee_u16 crc);
-ee_u8 check_data_types();
-void *portable_malloc(ee_size_t size);
-void portable_free(void *p);
-ee_s32 parseval(char *valstring);
-
-/* Algorithm IDS */
-#define ID_LIST         (1<<0)
-#define ID_MATRIX       (1<<1)
-#define ID_STATE        (1<<2)
-#define ALL_ALGORITHMS_MASK (ID_LIST|ID_MATRIX|ID_STATE)
-#define NUM_ALGORITHMS 3
-
-/* list data structures */
-typedef struct list_data_s {
-        ee_s16 data16;
-        ee_s16 idx;
-} list_data;
-
-typedef struct list_head_s {
-        struct list_head_s *next;
-        struct list_data_s *info;
-} list_head;
-
-
-/*matrix benchmark related stuff */
-#define MATDAT_INT 1
-#if MATDAT_INT
-typedef ee_s16 MATDAT;
-typedef ee_s32 MATRES;
-#else
-typedef ee_f16 MATDAT;
-typedef ee_f32 MATRES;
-#endif
-
-typedef struct MAT_PARAMS_S {
-        int N;
-        MATDAT *A;
-        MATDAT *B;
-        MATRES *C;
-} mat_params;
-
-/* state machine related stuff */
-/* List of all the possible states for the FSM */
-typedef enum CORE_STATE {
-        CORE_START=0,
-        CORE_INVALID,
-        CORE_S1,
-        CORE_S2,
-        CORE_INT,
-        CORE_FLOAT,
-        CORE_EXPONENT,
-        CORE_SCIENTIFIC,
-        NUM_CORE_STATES
-} core_state_e ;
-
-
-/* Helper structure to hold results */
-typedef struct RESULTS_S {
-        /* inputs */
-        ee_s16  seed1;          /* Initializing seed */
-        ee_s16  seed2;          /* Initializing seed */
-        ee_s16  seed3;          /* Initializing seed */
-        void    *memblock[4];   /* Pointer to safe memory location */
-        ee_u32  size;           /* Size of the data */
-        ee_u32 iterations;              /* Number of iterations to execute */
-        ee_u32  execs;          /* Bitmask of operations to execute */
-        struct list_head_s *list;
-        mat_params mat;
-        /* outputs */
-        ee_u16  crc;
-        ee_u16  crclist;
-        ee_u16  crcmatrix;
-        ee_u16  crcstate;
-        ee_s16  err;
-        /* ultithread specific */
-        core_portable port;
-} core_results;
-
-/* Multicore execution handling */
-#if (MULTITHREAD>1)
-ee_u8 core_start_parallel(core_results *res);
-ee_u8 core_stop_parallel(core_results *res);
-#endif
-
-/* list benchmark functions */
-list_head *core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed);
-ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx);
-
-/* state benchmark functions */
-void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p);
-ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock,
-                ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc);
-
-/* matrix benchmark functions */
-ee_u32 core_init_matrix(ee_u32 blksize, void *memblk, ee_s32 seed, mat_params *p);
-ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc);
-
-
-
-
-
-/*
-Topic: Description
-        Benchmark using a linked list.
-
-        Linked list is a common data structure used in many applications.
-
-        For our purposes, this will excercise the memory units of the processor.
-        In particular, usage of the list pointers to find and alter data.
-
-        We are not using Malloc since some platforms do not support this library.
-
-        Instead, the memory block being passed in is used to create a list,
-        and the benchmark takes care not to add more items then can be
-        accomodated by the memory block. The porting layer will make sure
-        that we have a valid memory block.
-
-        All operations are done in place, without using any extra memory.
-
-        The list itself contains list pointers and pointers to data items.
-        Data items contain the following:
-
-        idx - An index that captures the initial order of the list.
-        data - Variable data initialized based on the input parameters. The 16b are divided as follows:
-        o Upper 8b are backup of original data.
-        o Bit 7 indicates if the lower 7 bits are to be used as is or calculated.
-        o Bits 0-2 indicate type of operation to perform to get a 7b value.
-        o Bits 3-6 provide input for the operation.
-
-*/
-
-/* local functions */
-
-list_head *core_list_find(list_head *list,list_data *info);
-list_head *core_list_reverse(list_head *list);
-list_head *core_list_remove(list_head *item);
-list_head *core_list_undo_remove(list_head *item_removed, list_head *item_modified);
-list_head *core_list_insert_new(list_head *insert_point
-        , list_data *info, list_head **memblock, list_data **datablock
-        , list_head *memblock_end, list_data *datablock_end);
-typedef ee_s32(*list_cmp)(list_data *a, list_data *b, core_results *res);
-list_head *core_list_mergesort(list_head *list, list_cmp cmp, core_results *res);
-
-ee_s16 calc_func(ee_s16 *pdata, core_results *res) {
-        ee_s16 data=*pdata;
-        ee_s16 retval;
-        ee_u8 optype=(data>>7) & 1; /* bit 7 indicates if the function result has been cached */
-        if (optype) /* if cached, use cache */
-                return (data & 0x007f);
-        else { /* otherwise calculate and cache the result */
-                ee_s16 flag=data & 0x7; /* bits 0-2 is type of function to perform */
-                ee_s16 dtype=((data>>3) & 0xf); /* bits 3-6 is specific data for the operation */
-                dtype |= dtype << 4; /* replicate the lower 4 bits to get an 8b value */
-                switch (flag) {
-                        case 0:
-                                if (dtype<0x22) /* set min period for bit corruption */
-                                        dtype=0x22;
-                                retval=core_bench_state(res->size,res->memblock[3],res->seed1,res->seed2,dtype,res->crc);
-                                if (res->crcstate==0)
-                                        res->crcstate=retval;
-                                break;
-                        case 1:
-                                retval=core_bench_matrix(&(res->mat),dtype,res->crc);
-                                if (res->crcmatrix==0)
-                                        res->crcmatrix=retval;
-                                break;
-                        default:
-                                retval=data;
-                                break;
-                }
-                res->crc=crcu16(retval,res->crc);
-                retval &= 0x007f;
-                *pdata = (data & 0xff00) | 0x0080 | retval; /* cache the result */
-                return retval;
-        }
-}
-/* Function: cmp_complex
-        Compare the data item in a list cell.
-
-        Can be used by mergesort.
-*/
-ee_s32 cmp_complex(list_data *a, list_data *b, core_results *res) {
-        ee_s16 val1=calc_func(&(a->data16),res);
-        ee_s16 val2=calc_func(&(b->data16),res);
-        return val1 - val2;
-}
-
-/* Function: cmp_idx
-        Compare the idx item in a list cell, and regen the data.
-
-        Can be used by mergesort.
-*/
-ee_s32 cmp_idx(list_data *a, list_data *b, core_results *res) {
-        if (res==NULL) {
-                a->data16 = (a->data16 & 0xff00) | (0x00ff & (a->data16>>8));
-                b->data16 = (b->data16 & 0xff00) | (0x00ff & (b->data16>>8));
-        }
-        return a->idx - b->idx;
-}
-
-void copy_info(list_data *to,list_data *from) {
-        to->data16=from->data16;
-        to->idx=from->idx;
-}
-
-/* Benchmark for linked list:
-        - Try to find multiple data items.
-        - List sort
-        - Operate on data from list (crc)
-        - Single remove/reinsert
-        * At the end of this function, the list is back to original state
-*/
-ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx) {
-        ee_u16 retval=0;
-        ee_u16 found=0,missed=0;
-        list_head *list=res->list;
-        ee_s16 find_num=res->seed3;
-        list_head *this_find;
-        list_head *finder, *remover;
-        list_data info;
-        ee_s16 i;
-
-        info.idx=finder_idx;
-        /* find <find_num> values in the list, and change the list each time (reverse and cache if value found) */
-        for (i=0; i<find_num; i++) {
-                info.data16= (i & 0xff) ;
-                this_find=core_list_find(list,&info);
-                list=core_list_reverse(list);
-                if (this_find==NULL) {
-                        missed++;
-                        retval+=(list->next->info->data16 >> 8) & 1;
-                }
-                else {
-                        found++;
-                        if (this_find->info->data16 & 0x1) /* use found value */
-                                retval+=(this_find->info->data16 >> 9) & 1;
-                        /* and cache next item at the head of the list (if any) */
-                        if (this_find->next != NULL) {
-                                finder = this_find->next;
-                                this_find->next = finder->next;
-                                finder->next=list->next;
-                                list->next=finder;
-                        }
-                }
-                if (info.idx>=0)
-                        info.idx++;
-#if CORE_DEBUG
-        ee_printf("List find %d: [%d,%d,%d]\n",i,retval,missed,found);
-#endif
-        }
-        retval+=found*4-missed;
-        /* sort the list by data content and remove one item*/
-        if (finder_idx>0)
-                list=core_list_mergesort(list,cmp_complex,res);
-        remover=core_list_remove(list->next);
-        /* CRC data content of list from location of index N forward, and then undo remove */
-        finder=core_list_find(list,&info);
-        if (!finder)
-                finder=list->next;
-        while (finder) {
-                retval=crc16(list->info->data16,retval);
-                finder=finder->next;
-        }
-#if CORE_DEBUG
-        ee_printf("List sort 1: %04x\n",retval);
-#endif
-        remover=core_list_undo_remove(remover,list->next);
-        /* sort the list by index, in effect returning the list to original state */
-        list=core_list_mergesort(list,cmp_idx,NULL);
-        /* CRC data content of list */
-        finder=list->next;
-        while (finder) {
-                retval=crc16(list->info->data16,retval);
-                finder=finder->next;
-        }
-#if CORE_DEBUG
-        ee_printf("List sort 2: %04x\n",retval);
-#endif
-        return retval;
-}
-/* Function: core_list_init
-        Initialize list with data.
-
-        Parameters:
-        blksize - Size of memory to be initialized.
-        memblock - Pointer to memory block.
-        seed -  Actual values chosen depend on the seed parameter.
-                The seed parameter MUST be supplied from a source that cannot be determined at compile time
-
-        Returns:
-        Pointer to the head of the list.
-
-*/
-list_head *core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed) {
-        /* calculated pointers for the list */
-        ee_u32 per_item=16+sizeof(struct list_data_s);
-        ee_u32 size=(blksize/per_item)-2; /* to accomodate systems with 64b pointers, and make sure same code is executed, set max list elements */
-        list_head *memblock_end=memblock+size;
-        list_data *datablock=(list_data *)(memblock_end);
-        list_data *datablock_end=datablock+size;
-        /* some useful variables */
-        ee_u32 i;
-        list_head *finder,*list=memblock;
-        list_data info;
-
-        /* create a fake items for the list head and tail */
-        list->next=NULL;
-        list->info=datablock;
-        list->info->idx=0x0000;
-        list->info->data16=(ee_s16)0x8080;
-        memblock++;
-        datablock++;
-        info.idx=0x7fff;
-        info.data16=(ee_s16)0xffff;
-        core_list_insert_new(list,&info,&memblock,&datablock,memblock_end,datablock_end);
-
-        /* then insert size items */
-        for (i=0; i<size; i++) {
-                ee_u16 datpat=((ee_u16)(seed^i) & 0xf);
-                ee_u16 dat=(datpat<<3) | (i&0x7); /* alternate between algorithms */
-                info.data16=(dat<<8) | dat;             /* fill the data with actual data and upper bits with rebuild value */
-                core_list_insert_new(list,&info,&memblock,&datablock,memblock_end,datablock_end);
-        }
-        /* and now index the list so we know initial seed order of the list */
-        finder=list->next;
-        i=1;
-        while (finder->next!=NULL) {
-                if (i<size/5) /* first 20% of the list in order */
-                        finder->info->idx=i++;
-                else {
-                        ee_u16 pat=(ee_u16)(i++ ^ seed); /* get a pseudo random number */
-                        finder->info->idx=0x3fff & (((i & 0x07) << 8) | pat); /* make sure the mixed items end up after the ones in sequence */
-                }
-                finder=finder->next;
-        }
-        list = core_list_mergesort(list,cmp_idx,NULL);
-#if CORE_DEBUG
-        ee_printf("Initialized list:\n");
-        finder=list;
-        while (finder) {
-                ee_printf("[%04x,%04x]",finder->info->idx,(ee_u16)finder->info->data16);
-                finder=finder->next;
-        }
-        ee_printf("\n");
-#endif
-        return list;
-}
-
-/* Function: core_list_insert
-        Insert an item to the list
-
-        Parameters:
-        insert_point - where to insert the item.
-        info - data for the cell.
-        memblock - pointer for the list header
-        datablock - pointer for the list data
-        memblock_end - end of region for list headers
-        datablock_end - end of region for list data
-
-        Returns:
-        Pointer to new item.
-*/
-list_head *core_list_insert_new(list_head *insert_point, list_data *info, list_head **memblock, list_data **datablock
-        , list_head *memblock_end, list_data *datablock_end) {
-        list_head *newitem;
-
-        if ((*memblock+1) >= memblock_end)
-                return NULL;
-        if ((*datablock+1) >= datablock_end)
-                return NULL;
-
-        newitem=*memblock;
-        (*memblock)++;
-        newitem->next=insert_point->next;
-        insert_point->next=newitem;
-
-        newitem->info=*datablock;
-        (*datablock)++;
-        copy_info(newitem->info,info);
-
-        return newitem;
-}
-
-/* Function: core_list_remove
-        Remove an item from the list.
-
-        Operation:
-        For a singly linked list, remove by copying the data from the next item
-        over to the current cell, and unlinking the next item.
-
-        Note:
-        since there is always a fake item at the end of the list, no need to check for NULL.
-
-        Returns:
-        Removed item.
-*/
-list_head *core_list_remove(list_head *item) {
-        list_data *tmp;
-        list_head *ret=item->next;
-        /* swap data pointers */
-        tmp=item->info;
-        item->info=ret->info;
-        ret->info=tmp;
-        /* and eliminate item */
-        item->next=item->next->next;
-        ret->next=NULL;
-        return ret;
-}
-
-/* Function: core_list_undo_remove
-        Undo a remove operation.
-
-        Operation:
-        Since we want each iteration of the benchmark to be exactly the same,
-        we need to be able to undo a remove.
-        Link the removed item back into the list, and switch the info items.
-
-        Parameters:
-        item_removed - Return value from the <core_list_remove>
-        item_modified - List item that was modified during <core_list_remove>
-
-        Returns:
-        The item that was linked back to the list.
-
-*/
-list_head *core_list_undo_remove(list_head *item_removed, list_head *item_modified) {
-        list_data *tmp;
-        /* swap data pointers */
-        tmp=item_removed->info;
-        item_removed->info=item_modified->info;
-        item_modified->info=tmp;
-        /* and insert item */
-        item_removed->next=item_modified->next;
-        item_modified->next=item_removed;
-        return item_removed;
-}
-
-/* Function: core_list_find
-        Find an item in the list
-
-        Operation:
-        Find an item by idx (if not 0) or specific data value
-
-        Parameters:
-        list - list head
-        info - idx or data to find
-
-        Returns:
-        Found item, or NULL if not found.
-*/
-list_head *core_list_find(list_head *list,list_data *info) {
-        if (info->idx>=0) {
-                while (list && (list->info->idx != info->idx))
-                        list=list->next;
-                return list;
-        } else {
-                while (list && ((list->info->data16 & 0xff) != info->data16))
-                        list=list->next;
-                return list;
-        }
-}
-/* Function: core_list_reverse
-        Reverse a list
-
-        Operation:
-        Rearrange the pointers so the list is reversed.
-
-        Parameters:
-        list - list head
-        info - idx or data to find
-
-        Returns:
-        Found item, or NULL if not found.
-*/
-
-list_head *core_list_reverse(list_head *list) {
-        list_head *next=NULL, *tmp;
-        while (list) {
-                tmp=list->next;
-                list->next=next;
-                next=list;
-                list=tmp;
-        }
-        return next;
-}
-/* Function: core_list_mergesort
-        Sort the list in place without recursion.
-
-        Description:
-        Use mergesort, as for linked list this is a realistic solution.
-        Also, since this is aimed at embedded, care was taken to use iterative rather then recursive algorithm.
-        The sort can either return the list to original order (by idx) ,
-        or use the data item to invoke other other algorithms and change the order of the list.
-
-        Parameters:
-        list - list to be sorted.
-        cmp - cmp function to use
-
-        Returns:
-        New head of the list.
-
-        Note:
-        We have a special header for the list that will always be first,
-        but the algorithm could theoretically modify where the list starts.
-
- */
-list_head *core_list_mergesort(list_head *list, list_cmp cmp, core_results *res) {
-    list_head *p, *q, *e, *tail;
-    ee_s32 insize, nmerges, psize, qsize, i;
-
-    insize = 1;
-
-    while (1) {
-        p = list;
-        list = NULL;
-        tail = NULL;
-
-        nmerges = 0;  /* count number of merges we do in this pass */
-
-        while (p) {
-            nmerges++;  /* there exists a merge to be done */
-            /* step `insize' places along from p */
-            q = p;
-            psize = 0;
-            for (i = 0; i < insize; i++) {
-                psize++;
-                            q = q->next;
-                if (!q) break;
-            }
-
-            /* if q hasn't fallen off end, we have two lists to merge */
-            qsize = insize;
-
-            /* now we have two lists; merge them */
-            while (psize > 0 || (qsize > 0 && q)) {
-
-                                /* decide whether next element of merge comes from p or q */
-                                if (psize == 0) {
-                                    /* p is empty; e must come from q. */
-                                    e = q; q = q->next; qsize--;
-                                } else if (qsize == 0 || !q) {
-                                    /* q is empty; e must come from p. */
-                                    e = p; p = p->next; psize--;
-                                } else if (cmp(p->info,q->info,res) <= 0) {
-                                    /* First element of p is lower (or same); e must come from p. */
-                                    e = p; p = p->next; psize--;
-                                } else {
-                                    /* First element of q is lower; e must come from q. */
-                                    e = q; q = q->next; qsize--;
-                                }
-
-                        /* add the next element to the merged list */
-                                if (tail) {
-                                    tail->next = e;
-                                } else {
-                                    list = e;
-                                }
-                                tail = e;
-                }
-
-                        /* now p has stepped `insize' places along, and q has too */
-                        p = q;
-        }
-
-            tail->next = NULL;
-
-        /* If we have done only one merge, we're finished. */
-        if (nmerges <= 1)   /* allow for nmerges==0, the empty list case */
-            return list;
-
-        /* Otherwise repeat, merging lists twice the size */
-        insize *= 2;
-    }
-#if COMPILER_REQUIRES_SORT_RETURN
-        return list;
-#endif
-}
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-/* File: core_main.c
-        This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
-*/
-//#include "coremark.h"
-
-/* Function: iterate
-        Run the benchmark for a specified number of iterations.
-
-        Operation:
-        For each type of benchmarked algorithm:
-                a - Initialize the data block for the algorithm.
-                b - Execute the algorithm N times.
-
-        Returns:
-        NULL.
-*/
-static ee_u16 list_known_crc[]   =      {(ee_u16)0xd4b0,(ee_u16)0x3340,(ee_u16)0x6a79,(ee_u16)0xe714,(ee_u16)0xe3c1};
-static ee_u16 matrix_known_crc[] =      {(ee_u16)0xbe52,(ee_u16)0x1199,(ee_u16)0x5608,(ee_u16)0x1fd7,(ee_u16)0x0747};
-static ee_u16 state_known_crc[]  =      {(ee_u16)0x5e47,(ee_u16)0x39bf,(ee_u16)0xe5a4,(ee_u16)0x8e3a,(ee_u16)0x8d84};
-void *iterate(void *pres) {
-        ee_u32 i;
-        ee_u16 crc;
-        core_results *res=(core_results *)pres;
-        ee_u32 iterations=res->iterations;
-        res->crc=0;
-        res->crclist=0;
-        res->crcmatrix=0;
-        res->crcstate=0;
-
-        for (i=0; i<iterations; i++) {
-                crc=core_bench_list(res,1);
-                res->crc=crcu16(crc,res->crc);
-                crc=core_bench_list(res,-1);
-                res->crc=crcu16(crc,res->crc);
-                if (i==0) res->crclist=res->crc;
-        }
-        return NULL;
-}
-
-#if (SEED_METHOD==SEED_ARG)
-ee_s32 get_seed_args(int i, int argc, char *argv[]);
-#define get_seed(x) (ee_s16)get_seed_args(x,argc,argv)
-#define get_seed_32(x) get_seed_args(x,argc,argv)
-#else /* via function or volatile */
-ee_s32 get_seed_32(int i);
-#define get_seed(x) (ee_s16)get_seed_32(x)
-#endif
-
-#if (MEM_METHOD==MEM_STATIC)
-ee_u8 static_memblk[TOTAL_DATA_SIZE];
-#endif
-char *mem_name[3] = {"Static","Heap","Stack"};
-/* Function: main
-        Main entry routine for the benchmark.
-        This function is responsible for the following steps:
-
-        1 - Initialize input seeds from a source that cannot be determined at compile time.
-        2 - Initialize memory block for use.
-        3 - Run and time the benchmark.
-        4 - Report results, testing the validity of the output if the seeds are known.
-
-        Arguments:
-        1 - first seed  : Any value
-        2 - second seed : Must be identical to first for iterations to be identical
-        3 - third seed  : Any value, should be at least an order of magnitude less then the input size, but bigger then 32.
-        4 - Iterations  : Special, if set to 0, iterations will be automatically determined such that the benchmark will run between 10 to 100 secs
-
-*/
-
-#if MAIN_HAS_NOARGC
-MAIN_RETURN_TYPE main(void) {
-        int argc=0;
-        char *argv[1];
-#else
-MAIN_RETURN_TYPE main(int argc, char *argv[]) {
-#endif
-        ee_u16 i,j=0,num_algorithms=0;
-        ee_s16 known_id=-1,total_errors=0;
-        ee_u16 seedcrc=0;
-        CORE_TICKS total_time;
-        core_results results[MULTITHREAD];
-#if (MEM_METHOD==MEM_STACK)
-        ee_u8 stack_memblock[TOTAL_DATA_SIZE*MULTITHREAD];
-#endif
-        /* first call any initializations needed */
-        portable_init(&(results[0].port), &argc, argv);
-        /* First some checks to make sure benchmark will run ok */
-        if (sizeof(struct list_head_s)>128) {
-                ee_printf("list_head structure too big for comparable data!\n");
-                return MAIN_RETURN_VAL;
-        }
-        results[0].seed1=get_seed(1);
-        results[0].seed2=get_seed(2);
-        results[0].seed3=get_seed(3);
-        results[0].iterations=get_seed_32(4);
-#if CORE_DEBUG
-        results[0].iterations=1;
-#endif
-        results[0].execs=get_seed_32(5);
-        if (results[0].execs==0) { /* if not supplied, execute all algorithms */
-                results[0].execs=ALL_ALGORITHMS_MASK;
-        }
-                /* put in some default values based on one seed only for easy testing */
-        if ((results[0].seed1==0) && (results[0].seed2==0) && (results[0].seed3==0)) { /* validation run */
-                results[0].seed1=0;
-                results[0].seed2=0;
-                results[0].seed3=0x66;
-        }
-        if ((results[0].seed1==1) && (results[0].seed2==0) && (results[0].seed3==0)) { /* perfromance run */
-                results[0].seed1=0x3415;
-                results[0].seed2=0x3415;
-                results[0].seed3=0x66;
-        }
-#if (MEM_METHOD==MEM_STATIC)
-        results[0].memblock[0]=(void *)static_memblk;
-        results[0].size=TOTAL_DATA_SIZE;
-        results[0].err=0;
-        #if (MULTITHREAD>1)
-        #error "Cannot use a static data area with multiple contexts!"
-        #endif
-#elif (MEM_METHOD==MEM_MALLOC)
-        for (i=0 ; i<MULTITHREAD; i++) {
-                ee_s32 malloc_override=get_seed(7);
-                if (malloc_override != 0)
-                        results[i].size=malloc_override;
-                else
-                        results[i].size=TOTAL_DATA_SIZE;
-                results[i].memblock[0]=portable_malloc(results[i].size);
-                results[i].seed1=results[0].seed1;
-                results[i].seed2=results[0].seed2;
-                results[i].seed3=results[0].seed3;
-                results[i].err=0;
-                results[i].execs=results[0].execs;
-        }
-#elif (MEM_METHOD==MEM_STACK)
-        for (i=0 ; i<MULTITHREAD; i++) {
-                results[i].memblock[0]=stack_memblock+i*TOTAL_DATA_SIZE;
-                results[i].size=TOTAL_DATA_SIZE;
-                results[i].seed1=results[0].seed1;
-                results[i].seed2=results[0].seed2;
-                results[i].seed3=results[0].seed3;
-                results[i].err=0;
-                results[i].execs=results[0].execs;
-        }
-#else
-#error "Please define a way to initialize a memory block."
-#endif
-        /* Data init */
-        /* Find out how space much we have based on number of algorithms */
-        for (i=0; i<NUM_ALGORITHMS; i++) {
-                if ((1<<(ee_u32)i) & results[0].execs)
-                        num_algorithms++;
-        }
-        for (i=0 ; i<MULTITHREAD; i++)
-                results[i].size=results[i].size/num_algorithms;
-        /* Assign pointers */
-        for (i=0; i<NUM_ALGORITHMS; i++) {
-                ee_u32 ctx;
-                if ((1<<(ee_u32)i) & results[0].execs) {
-                        for (ctx=0 ; ctx<MULTITHREAD; ctx++)
-                                results[ctx].memblock[i+1]=(char *)(results[ctx].memblock[0])+results[0].size*j;
-                        j++;
-                }
-        }
-        /* call inits */
-        for (i=0 ; i<MULTITHREAD; i++) {
-                if (results[i].execs & ID_LIST) {
-                        results[i].list=core_list_init(results[0].size,results[i].memblock[1],results[i].seed1);
-                }
-                if (results[i].execs & ID_MATRIX) {
-                        core_init_matrix(results[0].size, results[i].memblock[2], (ee_s32)results[i].seed1 | (((ee_s32)results[i].seed2) << 16), &(results[i].mat) );
-                }
-                if (results[i].execs & ID_STATE) {
-                        core_init_state(results[0].size,results[i].seed1,results[i].memblock[3]);
-                }
-        }
-
-        /* automatically determine number of iterations if not set */
-        if (results[0].iterations==0) {
-                secs_ret secs_passed=0;
-                ee_u32 divisor;
-                results[0].iterations=1;
-                while (secs_passed < (secs_ret)1) {
-                        results[0].iterations*=10;
-                        start_time();
-                        iterate(&results[0]);
-                        stop_time();
-                        secs_passed=time_in_secs(get_time());
-                }
-                /* now we know it executes for at least 1 sec, set actual run time at about 10 secs */
-                divisor=(ee_u32)secs_passed;
-                if (divisor==0) /* some machines cast float to int as 0 since this conversion is not defined by ANSI, but we know at least one second passed */
-                        divisor=1;
-                results[0].iterations*=1+10/divisor;
-        }
-        /* perform actual benchmark */
-        start_time();
-
-        __asm("__perf_start:");
-
-#if (MULTITHREAD>1)
-        if (default_num_contexts>MULTITHREAD) {
-                default_num_contexts=MULTITHREAD;
-        }
-        for (i=0 ; i<default_num_contexts; i++) {
-                results[i].iterations=results[0].iterations;
-                results[i].execs=results[0].execs;
-                core_start_parallel(&results[i]);
-        }
-        for (i=0 ; i<default_num_contexts; i++) {
-                core_stop_parallel(&results[i]);
-        }
-#else
-        iterate(&results[0]);
-#endif
-
-        __asm("__perf_end:");
-
-        stop_time();
-        total_time=get_time();
-        /* get a function of the input to report */
-        seedcrc=crc16(results[0].seed1,seedcrc);
-        seedcrc=crc16(results[0].seed2,seedcrc);
-        seedcrc=crc16(results[0].seed3,seedcrc);
-        seedcrc=crc16(results[0].size,seedcrc);
-
-        switch (seedcrc) { /* test known output for common seeds */
-                case 0x8a02: /* seed1=0, seed2=0, seed3=0x66, size 2000 per algorithm */
-                        known_id=0;
-                        ee_printf("6k performance run parameters for coremark.\n");
-                        break;
-                case 0x7b05: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 2000 per algorithm */
-                        known_id=1;
-                        ee_printf("6k validation run parameters for coremark.\n");
-                        break;
-                case 0x4eaf: /* seed1=0x8, seed2=0x8, seed3=0x8, size 400 per algorithm */
-                        known_id=2;
-                        ee_printf("Profile generation run parameters for coremark.\n");
-                        break;
-                case 0xe9f5: /* seed1=0, seed2=0, seed3=0x66, size 666 per algorithm */
-                        known_id=3;
-                        ee_printf("2K performance run parameters for coremark.\n");
-                        break;
-                case 0x18f2: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 666 per algorithm */
-                        known_id=4;
-                        ee_printf("2K validation run parameters for coremark.\n");
-                        break;
-                default:
-                        total_errors=-1;
-                        break;
-        }
-        if (known_id>=0) {
-                for (i=0 ; i<default_num_contexts; i++) {
-                        results[i].err=0;
-                        if ((results[i].execs & ID_LIST) &&
-                                (results[i].crclist!=list_known_crc[known_id])) {
-                                ee_printf("[%u]ERROR! list crc 0x%04x - should be 0x%04x\n",i,results[i].crclist,list_known_crc[known_id]);
-                                results[i].err++;
-                        }
-                        if ((results[i].execs & ID_MATRIX) &&
-                                (results[i].crcmatrix!=matrix_known_crc[known_id])) {
-                                ee_printf("[%u]ERROR! matrix crc 0x%04x - should be 0x%04x\n",i,results[i].crcmatrix,matrix_known_crc[known_id]);
-                                results[i].err++;
-                        }
-                        if ((results[i].execs & ID_STATE) &&
-                                (results[i].crcstate!=state_known_crc[known_id])) {
-                                ee_printf("[%u]ERROR! state crc 0x%04x - should be 0x%04x\n",i,results[i].crcstate,state_known_crc[known_id]);
-                                results[i].err++;
-                        }
-                        total_errors+=results[i].err;
-                }
-        }
-        total_errors+=check_data_types();
-        /* and report results */
-        ee_printf("CoreMark Size    : %u\n",(ee_u32)results[0].size);
-        ee_printf("Total ticks      : %u\n",(ee_u32)total_time);
-#if HAS_FLOAT
-        ee_printf("Total time (secs): %f\n",time_in_secs(total_time));
-        if (time_in_secs(total_time) > 0)
-                ee_printf("Iterations/Sec   : %f\n",default_num_contexts*results[0].iterations/time_in_secs(total_time));
-#else
-        ee_printf("Total time (secs): %d\n",time_in_secs(total_time));
-        if (time_in_secs(total_time) > 0)
-//              ee_printf("Iterations/Sec   : %d\n",default_num_contexts*results[0].iterations/time_in_secs(total_time));
-                ee_printf("Iterat/Sec/MHz   : %d.%02d\n",1000*default_num_contexts*results[0].iterations/time_in_secs(total_time),
-                             100000*default_num_contexts*results[0].iterations/time_in_secs(total_time) % 100);
-#endif
-        if (time_in_secs(total_time) < 10) {
-                ee_printf("ERROR! Must execute for at least 10 secs for a valid result!\n");
-                total_errors++;
-        }
-
-        ee_printf("Iterations       : %u\n",(ee_u32)default_num_contexts*results[0].iterations);
-        ee_printf("Compiler version : %s\n",COMPILER_VERSION);
-        ee_printf("Compiler flags   : %s\n",COMPILER_FLAGS);
-#if (MULTITHREAD>1)
-        ee_printf("Parallel %s : %d\n",PARALLEL_METHOD,default_num_contexts);
-#endif
-        ee_printf("Memory location  : %s\n",MEM_LOCATION);
-        /* output for verification */
-        ee_printf("seedcrc          : 0x%04x\n",seedcrc);
-        if (results[0].execs & ID_LIST)
-                for (i=0 ; i<default_num_contexts; i++)
-                        ee_printf("[%d]crclist       : 0x%04x\n",i,results[i].crclist);
-        if (results[0].execs & ID_MATRIX)
-                for (i=0 ; i<default_num_contexts; i++)
-                        ee_printf("[%d]crcmatrix     : 0x%04x\n",i,results[i].crcmatrix);
-        if (results[0].execs & ID_STATE)
-                for (i=0 ; i<default_num_contexts; i++)
-                        ee_printf("[%d]crcstate      : 0x%04x\n",i,results[i].crcstate);
-        for (i=0 ; i<default_num_contexts; i++)
-                ee_printf("[%d]crcfinal      : 0x%04x\n",i,results[i].crc);
-        if (total_errors==0) {
-                ee_printf("Correct operation validated. See readme.txt for run and reporting rules.\n");
-#if HAS_FLOAT
-                if (known_id==3) {
-                        ee_printf("CoreMark 1.0 : %f / %s %s",default_num_contexts*results[0].iterations/time_in_secs(total_time),COMPILER_VERSION,COMPILER_FLAGS);
-#if defined(MEM_LOCATION) && !defined(MEM_LOCATION_UNSPEC)
-                        ee_printf(" / %s",MEM_LOCATION);
-#else
-                        ee_printf(" / %s",mem_name[MEM_METHOD]);
-#endif
-
-#if (MULTITHREAD>1)
-                        ee_printf(" / %d:%s",default_num_contexts,PARALLEL_METHOD);
-#endif
-                        ee_printf("\n");
-                }
-#endif
-        }
-        if (total_errors>0)
-                ee_printf("Errors detected\n");
-        if (total_errors<0)
-                ee_printf("Cannot validate operation for these seed values, please compare with results on a known platform.\n");
-
-#if (MEM_METHOD==MEM_MALLOC)
-        for (i=0 ; i<MULTITHREAD; i++)
-                portable_free(results[i].memblock[0]);
-#endif
-        /* And last call any target specific code for finalizing */
-        portable_fini(&(results[0].port));
-
-        return MAIN_RETURN_VAL;
-}
-
-
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-//#include "coremark.h"
-/*
-Topic: Description
-        Matrix manipulation benchmark
-
-        This very simple algorithm forms the basis of many more complex algorithms.
-
-        The tight inner loop is the focus of many optimizations (compiler as well as hardware based)
-        and is thus relevant for embedded processing.
-
-        The total available data space will be divided to 3 parts:
-        NxN Matrix A - initialized with small values (upper 3/4 of the bits all zero).
-        NxN Matrix B - initialized with medium values (upper half of the bits all zero).
-        NxN Matrix C - used for the result.
-
-        The actual values for A and B must be derived based on input that is not available at compile time.
-*/
-ee_s16 matrix_test(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B, MATDAT val);
-ee_s16 matrix_sum(ee_u32 N, MATRES *C, MATDAT clipval);
-void matrix_mul_const(ee_u32 N, MATRES *C, MATDAT *A, MATDAT val);
-void matrix_mul_vect(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B);
-void matrix_mul_matrix(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B);
-void matrix_mul_matrix_bitextract(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B);
-void matrix_add_const(ee_u32 N, MATDAT *A, MATDAT val);
-
-#define matrix_test_next(x) (x+1)
-#define matrix_clip(x,y) ((y) ? (x) & 0x0ff : (x) & 0x0ffff)
-#define matrix_big(x) (0xf000 | (x))
-#define bit_extract(x,from,to) (((x)>>(from)) & (~(0xffffffff << (to))))
-
-#if CORE_DEBUG
-void printmat(MATDAT *A, ee_u32 N, char *name) {
-        ee_u32 i,j;
-        ee_printf("Matrix %s [%dx%d]:\n",name,N,N);
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        if (j!=0)
-                                ee_printf(",");
-                        ee_printf("%d",A[i*N+j]);
-                }
-                ee_printf("\n");
-        }
-}
-void printmatC(MATRES *C, ee_u32 N, char *name) {
-        ee_u32 i,j;
-        ee_printf("Matrix %s [%dx%d]:\n",name,N,N);
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        if (j!=0)
-                                ee_printf(",");
-                        ee_printf("%d",C[i*N+j]);
-                }
-                ee_printf("\n");
-        }
-}
-#endif
-/* Function: core_bench_matrix
-        Benchmark function
-
-        Iterate <matrix_test> N times,
-        changing the matrix values slightly by a constant amount each time.
-*/
-ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc) {
-        ee_u32 N=p->N;
-        MATRES *C=p->C;
-        MATDAT *A=p->A;
-        MATDAT *B=p->B;
-        MATDAT val=(MATDAT)seed;
-
-        crc=crc16(matrix_test(N,C,A,B,val),crc);
-
-        return crc;
-}
-
-/* Function: matrix_test
-        Perform matrix manipulation.
-
-        Parameters:
-        N - Dimensions of the matrix.
-        C - memory for result matrix.
-        A - input matrix
-        B - operator matrix (not changed during operations)
-
-        Returns:
-        A CRC value that captures all results calculated in the function.
-        In particular, crc of the value calculated on the result matrix
-        after each step by <matrix_sum>.
-
-        Operation:
-
-        1 - Add a constant value to all elements of a matrix.
-        2 - Multiply a matrix by a constant.
-        3 - Multiply a matrix by a vector.
-        4 - Multiply a matrix by a matrix.
-        5 - Add a constant value to all elements of a matrix.
-
-        After the last step, matrix A is back to original contents.
-*/
-ee_s16 matrix_test(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B, MATDAT val) {
-        ee_u16 crc=0;
-        MATDAT clipval=matrix_big(val);
-
-        matrix_add_const(N,A,val); /* make sure data changes  */
-#if CORE_DEBUG
-        printmat(A,N,"matrix_add_const");
-#endif
-        matrix_mul_const(N,C,A,val);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_const");
-#endif
-        matrix_mul_vect(N,C,A,B);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_vect");
-#endif
-        matrix_mul_matrix(N,C,A,B);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_matrix");
-#endif
-        matrix_mul_matrix_bitextract(N,C,A,B);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_matrix_bitextract");
-#endif
-
-        matrix_add_const(N,A,-val); /* return matrix to initial value */
-        return crc;
-}
-
-/* Function : matrix_init
-        Initialize the memory block for matrix benchmarking.
-
-        Parameters:
-        blksize - Size of memory to be initialized.
-        memblk - Pointer to memory block.
-        seed - Actual values chosen depend on the seed parameter.
-        p - pointers to <mat_params> containing initialized matrixes.
-
-        Returns:
-        Matrix dimensions.
-
-        Note:
-        The seed parameter MUST be supplied from a source that cannot be determined at compile time
-*/
-ee_u32 core_init_matrix(ee_u32 blksize, void *memblk, ee_s32 seed, mat_params *p) {
-        ee_u32 N=0;
-        MATDAT *A;
-        MATDAT *B;
-        ee_s32 order=1;
-        MATDAT val;
-        ee_u32 i=0,j=0;
-        if (seed==0)
-                seed=1;
-        while (j<blksize) {
-                i++;
-                j=i*i*2*4;
-        }
-        N=i-1;
-        A=(MATDAT *)align_mem(memblk);
-        B=A+N*N;
-
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        seed = ( ( order * seed ) % 65536 );
-                        val = (seed + order);
-                        val=matrix_clip(val,0);
-                        B[i*N+j] = val;
-                        val =  (val + order);
-                        val=matrix_clip(val,1);
-                        A[i*N+j] = val;
-                        order++;
-                }
-        }
-
-        p->A=A;
-        p->B=B;
-        p->C=(MATRES *)align_mem(B+N*N);
-        p->N=N;
-#if CORE_DEBUG
-        printmat(A,N,"A");
-        printmat(B,N,"B");
-#endif
-        return N;
-}
-
-/* Function: matrix_sum
-        Calculate a function that depends on the values of elements in the matrix.
-
-        For each element, accumulate into a temporary variable.
-
-        As long as this value is under the parameter clipval,
-        add 1 to the result if the element is bigger then the previous.
-
-        Otherwise, reset the accumulator and add 10 to the result.
-*/
-ee_s16 matrix_sum(ee_u32 N, MATRES *C, MATDAT clipval) {
-        MATRES tmp=0,prev=0,cur=0;
-        ee_s16 ret=0;
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        cur=C[i*N+j];
-                        tmp+=cur;
-                        if (tmp>clipval) {
-                                ret+=10;
-                                tmp=0;
-                        } else {
-                                ret += (cur>prev) ? 1 : 0;
-                        }
-                        prev=cur;
-                }
-        }
-        return ret;
-}
-
-/* Function: matrix_mul_const
-        Multiply a matrix by a constant.
-        This could be used as a scaler for instance.
-*/
-void matrix_mul_const(ee_u32 N, MATRES *C, MATDAT *A, MATDAT val) {
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        C[i*N+j]=(MATRES)A[i*N+j] * (MATRES)val;
-                }
-        }
-}
-
-/* Function: matrix_add_const
-        Add a constant value to all elements of a matrix.
-*/
-void matrix_add_const(ee_u32 N, MATDAT *A, MATDAT val) {
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        A[i*N+j] += val;
-                }
-        }
-}
-
-/* Function: matrix_mul_vect
-        Multiply a matrix by a vector.
-        This is common in many simple filters (e.g. fir where a vector of coefficients is applied to the matrix.)
-*/
-void matrix_mul_vect(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) {
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                C[i]=0;
-                for (j=0; j<N; j++) {
-                        C[i]+=(MATRES)A[i*N+j] * (MATRES)B[j];
-                }
-        }
-}
-
-/* Function: matrix_mul_matrix
-        Multiply a matrix by a matrix.
-        Basic code is used in many algorithms, mostly with minor changes such as scaling.
-*/
-void matrix_mul_matrix(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) {
-        ee_u32 i,j,k;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        C[i*N+j]=0;
-                        for(k=0;k<N;k++)
-                        {
-                                C[i*N+j]+=(MATRES)A[i*N+k] * (MATRES)B[k*N+j];
-                        }
-                }
-        }
-}
-
-/* Function: matrix_mul_matrix_bitextract
-        Multiply a matrix by a matrix, and extract some bits from the result.
-        Basic code is used in many algorithms, mostly with minor changes such as scaling.
-*/
-void matrix_mul_matrix_bitextract(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) {
-        ee_u32 i,j,k;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        C[i*N+j]=0;
-                        for(k=0;k<N;k++)
-                        {
-                                MATRES tmp=(MATRES)A[i*N+k] * (MATRES)B[k*N+j];
-                                C[i*N+j]+=bit_extract(tmp,2,4)*bit_extract(tmp,5,7);
-                        }
-                }
-        }
-}
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-//#include "coremark.h"
-/* local functions */
-enum CORE_STATE core_state_transition( ee_u8 **instr , ee_u32 *transition_count);
-
-/*
-Topic: Description
-        Simple state machines like this one are used in many embedded products.
-
-        For more complex state machines, sometimes a state transition table implementation is used instead,
-        trading speed of direct coding for ease of maintenance.
-
-        Since the main goal of using a state machine in CoreMark is to excercise the switch/if behaviour,
-        we are using a small moore machine.
-
-        In particular, this machine tests type of string input,
-        trying to determine whether the input is a number or something else.
-        (see core_state.png).
-*/
-
-/* Function: core_bench_state
-        Benchmark function
-
-        Go over the input twice, once direct, and once after introducing some corruption.
-*/
-ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock,
-                ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc)
-{
-        ee_u32 final_counts[NUM_CORE_STATES];
-        ee_u32 track_counts[NUM_CORE_STATES];
-        ee_u8 *p=memblock;
-        ee_u32 i;
-
-
-#if CORE_DEBUG
-        ee_printf("State Bench: %d,%d,%d,%04x\n",seed1,seed2,step,crc);
-#endif
-        for (i=0; i<NUM_CORE_STATES; i++) {
-                final_counts[i]=track_counts[i]=0;
-        }
-        /* run the state machine over the input */
-        while (*p!=0) {
-                enum CORE_STATE fstate=core_state_transition(&p,track_counts);
-                final_counts[fstate]++;
-#if CORE_DEBUG
-        ee_printf("%d,",fstate);
-        }
-        ee_printf("\n");
-#else
-        }
-#endif
-        p=memblock;
-        while (p < (memblock+blksize)) { /* insert some corruption */
-                if (*p!=',')
-                        *p^=(ee_u8)seed1;
-                p+=step;
-        }
-        p=memblock;
-        /* run the state machine over the input again */
-        while (*p!=0) {
-                enum CORE_STATE fstate=core_state_transition(&p,track_counts);
-                final_counts[fstate]++;
-#if CORE_DEBUG
-        ee_printf("%d,",fstate);
-        }
-        ee_printf("\n");
-#else
-        }
-#endif
-        p=memblock;
-        while (p < (memblock+blksize)) { /* undo corruption is seed1 and seed2 are equal */
-                if (*p!=',')
-                        *p^=(ee_u8)seed2;
-                p+=step;
-        }
-        /* end timing */
-        for (i=0; i<NUM_CORE_STATES; i++) {
-                crc=crcu32(final_counts[i],crc);
-                crc=crcu32(track_counts[i],crc);
-        }
-        return crc;
-}
-
-/* Default initialization patterns */
-static ee_u8 *intpat[4]  ={(ee_u8 *)"5012",(ee_u8 *)"1234",(ee_u8 *)"-874",(ee_u8 *)"+122"};
-static ee_u8 *floatpat[4]={(ee_u8 *)"35.54400",(ee_u8 *)".1234500",(ee_u8 *)"-110.700",(ee_u8 *)"+0.64400"};
-static ee_u8 *scipat[4]  ={(ee_u8 *)"5.500e+3",(ee_u8 *)"-.123e-2",(ee_u8 *)"-87e+832",(ee_u8 *)"+0.6e-12"};
-static ee_u8 *errpat[4]  ={(ee_u8 *)"T0.3e-1F",(ee_u8 *)"-T.T++Tq",(ee_u8 *)"1T3.4e4z",(ee_u8 *)"34.0e-T^"};
-
-/* Function: core_init_state
-        Initialize the input data for the state machine.
-
-        Populate the input with several predetermined strings, interspersed.
-        Actual patterns chosen depend on the seed parameter.
-
-        Note:
-        The seed parameter MUST be supplied from a source that cannot be determined at compile time
-*/
-void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p) {
-        ee_u32 total=0,next=0,i;
-        ee_u8 *buf=0;
-#if CORE_DEBUG
-        ee_u8 *start=p;
-        ee_printf("State: %d,%d\n",size,seed);
-#endif
-        size--;
-        next=0;
-        while ((total+next+1)<size) {
-                if (next>0) {
-                        for(i=0;i<next;i++)
-                                *(p+total+i)=buf[i];
-                        *(p+total+i)=',';
-                        total+=next+1;
-                }
-                seed++;
-                switch (seed & 0x7) {
-                        case 0: /* int */
-                        case 1: /* int */
-                        case 2: /* int */
-                                buf=intpat[(seed>>3) & 0x3];
-                                next=4;
-                        break;
-                        case 3: /* float */
-                        case 4: /* float */
-                                buf=floatpat[(seed>>3) & 0x3];
-                                next=8;
-                        break;
-                        case 5: /* scientific */
-                        case 6: /* scientific */
-                                buf=scipat[(seed>>3) & 0x3];
-                                next=8;
-                        break;
-                        case 7: /* invalid */
-                                buf=errpat[(seed>>3) & 0x3];
-                                next=8;
-                        break;
-                        default: /* Never happen, just to make some compilers happy */
-                        break;
-                }
-        }
-        size++;
-        while (total<size) { /* fill the rest with 0 */
-                *(p+total)=0;
-                total++;
-        }
-#if CORE_DEBUG
-        ee_printf("State Input: %s\n",start);
-#endif
-}
-
-static ee_u8 ee_isdigit(ee_u8 c) {
-        ee_u8 retval;
-        retval = ((c>='0') & (c<='9')) ? 1 : 0;
-        return retval;
-}
-
-/* Function: core_state_transition
-        Actual state machine.
-
-        The state machine will continue scanning until either:
-        1 - an invalid input is detcted.
-        2 - a valid number has been detected.
-
-        The input pointer is updated to point to the end of the token, and the end state is returned (either specific format determined or invalid).
-*/
-
-enum CORE_STATE core_state_transition( ee_u8 **instr , ee_u32 *transition_count) {
-        ee_u8 *str=*instr;
-        ee_u8 NEXT_SYMBOL;
-        enum CORE_STATE state=CORE_START;
-        for( ; *str && state != CORE_INVALID; str++ ) {
-                NEXT_SYMBOL = *str;
-                if (NEXT_SYMBOL==',') /* end of this input */ {
-                        str++;
-                        break;
-                }
-                switch(state) {
-                case CORE_START:
-                        if(ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INT;
-                        }
-                        else if( NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-' ) {
-                                state = CORE_S1;
-                        }
-                        else if( NEXT_SYMBOL == '.' ) {
-                                state = CORE_FLOAT;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_INVALID]++;
-                        }
-                        transition_count[CORE_START]++;
-                        break;
-                case CORE_S1:
-                        if(ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INT;
-                                transition_count[CORE_S1]++;
-                        }
-                        else if( NEXT_SYMBOL == '.' ) {
-                                state = CORE_FLOAT;
-                                transition_count[CORE_S1]++;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_S1]++;
-                        }
-                        break;
-                case CORE_INT:
-                        if( NEXT_SYMBOL == '.' ) {
-                                state = CORE_FLOAT;
-                                transition_count[CORE_INT]++;
-                        }
-                        else if(!ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INVALID;
-                                transition_count[CORE_INT]++;
-                        }
-                        break;
-                case CORE_FLOAT:
-                        if( NEXT_SYMBOL == 'E' || NEXT_SYMBOL == 'e' ) {
-                                state = CORE_S2;
-                                transition_count[CORE_FLOAT]++;
-                        }
-                        else if(!ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INVALID;
-                                transition_count[CORE_FLOAT]++;
-                        }
-                        break;
-                case CORE_S2:
-                        if( NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-' ) {
-                                state = CORE_EXPONENT;
-                                transition_count[CORE_S2]++;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_S2]++;
-                        }
-                        break;
-                case CORE_EXPONENT:
-                        if(ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_SCIENTIFIC;
-                                transition_count[CORE_EXPONENT]++;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_EXPONENT]++;
-                        }
-                        break;
-                case CORE_SCIENTIFIC:
-                        if(!ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INVALID;
-                                transition_count[CORE_INVALID]++;
-                        }
-                        break;
-                default:
-                        break;
-                }
-        }
-        *instr=str;
-        return state;
-}
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-//#include "coremark.h"
-/* Function: get_seed
-        Get a values that cannot be determined at compile time.
-
-        Since different embedded systems and compilers are used, 3 different methods are provided:
-        1 - Using a volatile variable. This method is only valid if the compiler is forced to generate code that
-        reads the value of a volatile variable from memory at run time.
-        Please note, if using this method, you would need to modify core_portme.c to generate training profile.
-        2 - Command line arguments. This is the preferred method if command line arguments are supported.
-        3 - System function. If none of the first 2 methods is available on the platform,
-        a system function which is not a stub can be used.
-
-        e.g. read the value on GPIO pins connected to switches, or invoke special simulator functions.
-*/
-#if (SEED_METHOD==SEED_VOLATILE)
-        extern volatile ee_s32 seed1_volatile;
-        extern volatile ee_s32 seed2_volatile;
-        extern volatile ee_s32 seed3_volatile;
-        extern volatile ee_s32 seed4_volatile;
-        extern volatile ee_s32 seed5_volatile;
-        ee_s32 get_seed_32(int i) {
-                ee_s32 retval;
-                switch (i) {
-                        case 1:
-                                retval=seed1_volatile;
-                                break;
-                        case 2:
-                                retval=seed2_volatile;
-                                break;
-                        case 3:
-                                retval=seed3_volatile;
-                                break;
-                        case 4:
-                                retval=seed4_volatile;
-                                break;
-                        case 5:
-                                retval=seed5_volatile;
-                                break;
-                        default:
-                                retval=0;
-                                break;
-                }
-                return retval;
-        }
-#elif (SEED_METHOD==SEED_ARG)
-ee_s32 parseval(char *valstring) {
-        ee_s32 retval=0;
-        ee_s32 neg=1;
-        int hexmode=0;
-        if (*valstring == '-') {
-                neg=-1;
-                valstring++;
-        }
-        if ((valstring[0] == '0') && (valstring[1] == 'x')) {
-                hexmode=1;
-                valstring+=2;
-        }
-                /* first look for digits */
-        if (hexmode) {
-                while (((*valstring >= '0') && (*valstring <= '9')) || ((*valstring >= 'a') && (*valstring <= 'f'))) {
-                        ee_s32 digit=*valstring-'0';
-                        if (digit>9)
-                                digit=10+*valstring-'a';
-                        retval*=16;
-                        retval+=digit;
-                        valstring++;
-                }
-        } else {
-                while ((*valstring >= '0') && (*valstring <= '9')) {
-                        ee_s32 digit=*valstring-'0';
-                        retval*=10;
-                        retval+=digit;
-                        valstring++;
-                }
-        }
-        /* now add qualifiers */
-        if (*valstring=='K')
-                retval*=1024;
-        if (*valstring=='M')
-                retval*=1024*1024;
-
-        retval*=neg;
-        return retval;
-}
-
-ee_s32 get_seed_args(int i, int argc, char *argv[]) {
-        if (argc>i)
-                return parseval(argv[i]);
-        return 0;
-}
-
-#elif (SEED_METHOD==SEED_FUNC)
-/* If using OS based function, you must define and implement the functions below in core_portme.h and core_portme.c ! */
-ee_s32 get_seed_32(int i) {
-        ee_s32 retval;
-        switch (i) {
-                case 1:
-                        retval=portme_sys1();
-                        break;
-                case 2:
-                        retval=portme_sys2();
-                        break;
-                case 3:
-                        retval=portme_sys3();
-                        break;
-                case 4:
-                        retval=portme_sys4();
-                        break;
-                case 5:
-                        retval=portme_sys5();
-                        break;
-                default:
-                        retval=0;
-                        break;
-        }
-        return retval;
-}
-#endif
-
-/* Function: crc*
-        Service functions to calculate 16b CRC code.
-
-*/
-ee_u16 crcu8(ee_u8 data, ee_u16 crc )
-{
-        ee_u8 i=0,x16=0,carry=0;
-
-        for (i = 0; i < 8; i++)
-    {
-                x16 = (ee_u8)((data & 1) ^ ((ee_u8)crc & 1));
-                data >>= 1;
-
-                if (x16 == 1)
-                {
-                   crc ^= 0x4002;
-                   carry = 1;
-                }
-                else
-                        carry = 0;
-                crc >>= 1;
-                if (carry)
-                   crc |= 0x8000;
-                else
-                   crc &= 0x7fff;
-    }
-        return crc;
-}
-ee_u16 crcu16(ee_u16 newval, ee_u16 crc) {
-        crc=crcu8( (ee_u8) (newval)                             ,crc);
-        crc=crcu8( (ee_u8) ((newval)>>8)        ,crc);
-        return crc;
-}
-ee_u16 crcu32(ee_u32 newval, ee_u16 crc) {
-        crc=crc16((ee_s16) newval               ,crc);
-        crc=crc16((ee_s16) (newval>>16) ,crc);
-        return crc;
-}
-ee_u16 crc16(ee_s16 newval, ee_u16 crc) {
-        return crcu16((ee_u16)newval, crc);
-}
-
-ee_u8 check_data_types() {
-        ee_u8 retval=0;
-        if (sizeof(ee_u8) != 1) {
-                ee_printf("ERROR: ee_u8 is not an 8b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_u16) != 2) {
-                ee_printf("ERROR: ee_u16 is not a 16b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_s16) != 2) {
-                ee_printf("ERROR: ee_s16 is not a 16b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_s32) != 4) {
-                ee_printf("ERROR: ee_s32 is not a 32b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_u32) != 4) {
-                ee_printf("ERROR: ee_u32 is not a 32b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_ptr_int) != sizeof(int *)) {
-                ee_printf("ERROR: ee_ptr_int is not a datatype that holds an int pointer!\n");
-                retval++;
-        }
-        if (retval>0) {
-                ee_printf("ERROR: Please modify the datatypes in core_portme.h!\n");
-        }
-        return retval;
-}
-/*
-        File : core_portme.c
-*/
-/*
-        Author : Shay Gal-On, EEMBC
-        Legal : TODO!
-*/
-#include <stdio.h>
-#include <stdlib.h>
-//#include "coremark.h"
-
-#if VALIDATION_RUN
-        volatile ee_s32 seed1_volatile=0x3415;
-        volatile ee_s32 seed2_volatile=0x3415;
-        volatile ee_s32 seed3_volatile=0x66;
-#endif
-#if PERFORMANCE_RUN
-        volatile ee_s32 seed1_volatile=0x0;
-        volatile ee_s32 seed2_volatile=0x0;
-        volatile ee_s32 seed3_volatile=0x66;
-#endif
-#if PROFILE_RUN
-        volatile ee_s32 seed1_volatile=0x8;
-        volatile ee_s32 seed2_volatile=0x8;
-        volatile ee_s32 seed3_volatile=0x8;
-#endif
-        volatile ee_s32 seed4_volatile=ITERATIONS;
-        volatile ee_s32 seed5_volatile=0;
-/* Porting : Timing functions
-        How to capture time and convert to seconds must be ported to whatever is supported by the platform.
-        e.g. Read value from on board RTC, read value from cpu clock cycles performance counter etc.
-        Sample implementation for standard time.h and windows.h definitions included.
-*/
-/* Define : TIMER_RES_DIVIDER
-        Divider to trade off timer resolution and total time that can be measured.
-
-        Use lower values to increase resolution, but make sure that overflow does not occur.
-        If there are issues with the return value overflowing, increase this value.
-        */
-//#define NSECS_PER_SEC CLOCKS_PER_SEC
-#define NSECS_PER_SEC 1000000000
-#define CORETIMETYPE clock_t
-//#define GETMYTIME(_t) (*_t=clock())
-#define GETMYTIME(_t) (*_t=0)
-#define MYTIMEDIFF(fin,ini) ((fin)-(ini))
-#define TIMER_RES_DIVIDER 1
-#define SAMPLE_TIME_IMPLEMENTATION 1
-//#define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER)
-
-#define EE_TICKS_PER_SEC 1000
-
-/** Define Host specific (POSIX), or target specific global time variables. */
-static CORETIMETYPE start_time_val, stop_time_val;
-
-/* Function : start_time
-        This function will be called right before starting the timed portion of the benchmark.
-
-        Implementation may be capturing a system timer (as implemented in the example code)
-        or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0.
-*/
-void start_time(void) {
-uint32_t mcyclel;
-        asm volatile ("csrr %0,mcycle"  : "=r" (mcyclel) );
-        start_time_val = mcyclel;
-}
-/* Function : stop_time
-        This function will be called right after ending the timed portion of the benchmark.
-
-        Implementation may be capturing a system timer (as implemented in the example code)
-        or other system parameters - e.g. reading the current value of cpu cycles counter.
-*/
-void stop_time(void) {
-uint32_t mcyclel;
-        asm volatile ("csrr %0,mcycle"  : "=r" (mcyclel) );
-        stop_time_val = mcyclel;
-}
-/* Function : get_time
-        Return an abstract "ticks" number that signifies time on the system.
-
-        Actual value returned may be cpu cycles, milliseconds or any other value,
-        as long as it can be converted to seconds by <time_in_secs>.
-        This methodology is taken to accomodate any hardware or simulated platform.
-        The sample implementation returns millisecs by default,
-        and the resolution is controlled by <TIMER_RES_DIVIDER>
-*/
-CORE_TICKS get_time(void) {
-        CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
-        return elapsed;
-}
-/* Function : time_in_secs
-        Convert the value returned by get_time to seconds.
-
-        The <secs_ret> type is used to accomodate systems with no support for floating point.
-        Default implementation implemented by the EE_TICKS_PER_SEC macro above.
-*/
-secs_ret time_in_secs(CORE_TICKS ticks) {
-        secs_ret retval=((secs_ret)ticks) / (secs_ret)EE_TICKS_PER_SEC;
-        return retval;
-}
-
-ee_u32 default_num_contexts=1;
-
-/* Function : portable_init
-        Target specific initialization code
-        Test for some common mistakes.
-*/
-void portable_init(core_portable *p, int *argc, char *argv[])
-{
-        if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) {
-                ee_printf("ERROR! Please define ee_ptr_int to a type that holds a pointer!\n");
-        }
-        if (sizeof(ee_u32) != 4) {
-                ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n");
-        }
-        p->portable_id=1;
-}
-/* Function : portable_fini
-        Target specific final code
-*/
-void portable_fini(core_portable *p)
-{
-        p->portable_id=0;
-}
-
-
-void* memset(void* s, int c, size_t n)
-{
-  asm("mv t0, a0");
-  asm("add a2, a2, a0");  // end = s + n
-  asm(".memset_loop: bge a0, a2, .memset_end");
-  asm("sb a1, 0(a0)");
-  asm("addi a0, a0, 1");
-  asm("j .memset_loop");
-  asm(".memset_end:");
-  asm("mv a0, t0");
-  asm("jr ra");
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.ld b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.ld
deleted file mode 120000
index 0d4df6a..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.ld
+++ /dev/null
@@ -1 +0,0 @@
-hello_world.ld
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.mki b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.mki
deleted file mode 100644
index fa1eb19..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark.mki
+++ /dev/null
@@ -1,2 +0,0 @@
-TEST_CFLAGS = -finline-limit=400 -mbranch-cost=1 -Ofast -fno-code-hoisting -funroll-all-loops
-OFILES = crt0.o printf.o cmark.o
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_dccm.ld b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_dccm.ld
deleted file mode 120000
index ae51d23..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_dccm.ld
+++ /dev/null
@@ -1 +0,0 @@
-hello_world_dccm.ld
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_dccm.mki b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_dccm.mki
deleted file mode 120000
index e4bd4bc..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_dccm.mki
+++ /dev/null
@@ -1 +0,0 @@
-cmark.mki
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_iccm.ld b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_iccm.ld
deleted file mode 100644
index d3b816a..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_iccm.ld
+++ /dev/null
@@ -1,18 +0,0 @@
-OUTPUT_ARCH( "riscv" )
-ENTRY(_start)
-
-SECTIONS {
-  .text   : { crt0.o (.text*) }
- _end = .;
-  . = 0xee000000 ;
-  .text.init   : { cmark.o (.text*) }
-  . = 0xd0580000;
-  .data.io .  : { *(.data.io) }
-  . = 0xf0040000;
-  .data  :  { *(.*data) *(.rodata*) *(.sbss) STACK = ALIGN(16) + 0x1000;}
-  .bss : { *(.bss) }
-  . = 0xfffffff0;
-  .iccm.ctl : { LONG(0xee000000); LONG(0xee008000) }
-  . = 0xfffffff8;
-  .data.ctl : { LONG(0xf0040000); LONG(STACK) }
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_iccm.mki b/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_iccm.mki
deleted file mode 100644
index 68f3c67..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/cmark_iccm.mki
+++ /dev/null
@@ -1,2 +0,0 @@
-TEST_CFLAGS = -g -O3 -funroll-all-loops
-OFILES = crt0.o printf.o cmark.o
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/crt0.s b/verilog/rtl/BrqRV_EB1/testbench/asm/crt0.s
deleted file mode 100644
index 82ec1e6..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/crt0.s
+++ /dev/null
@@ -1,48 +0,0 @@
-# SPDX-License-Identifier: Apache-2.0
-# Copyright 2020 MERL Corporation or its affiliates.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-// startup code to support HLL programs
-
-#include "defines.h"
-
-.section .text.init
-.global _start
-_start:
-
-// enable caching, except region 0xd
-        li t0, 0x59555555
-        csrw 0x7c0, t0
-
-        la sp, STACK
-
-        call main
-
-
-.global _finish
-_finish:
-        la t0, tohost
-        li t1, 0xff
-        sb t1, 0(t0) // DemoTB test termination
-        li t1, 1
-        sw t1, 0(t0) // Whisper test termination
-        beq x0, x0, _finish
-        .rept 10
-        nop
-        .endr
-
-.section .data.io
-.global tohost
-tohost: .word 0
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/custom.s b/verilog/rtl/BrqRV_EB1/testbench/asm/custom.s
deleted file mode 100644
index d0ea1cb..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/custom.s
+++ /dev/null
@@ -1,76 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 Western Digital Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// Assembly code for Hello World
-// Not using only ALU ops for creating the string
-
-
-#include "defines.h"
-
-#define STDOUT 0xd0580000
-
-
-// Code to execute
-.section .text
-.global _start
-_start:
-
-    // Clear minstret
-    csrw minstret, zero
-    csrw minstreth, zero
-
-    // Set up MTVEC - not expecting to use it though
-    li x1, 0xee000000
-    csrw mtvec, x1
-
-
-    // Enable Caches in MRAC
-    li x1, 0x5f555555
-    csrw 0x7c0, x1
-    
-    li x1, 4
-    csrw 0x7f9, x1
-
-
-    // Load string from hw_data
-    // and write to stdout address
-
-    li x3, STDOUT
-    la x4, hw_data
-
-loop:
-   lb x5, 0(x4)
-   sb x5, 0(x3)
-   addi x4, x4, 1
-   bnez x5, loop
-   
-
-// Write 0xff to STDOUT for TB to termiate test.
-_finish:
-    li x3, STDOUT
-    addi x5, x0, 0xff
-    sb x5, 0(x3)
-    beq x0, x0, _finish
-.rept 100
-    nop
-.endr
-
-.data
-hw_data:
-.ascii "----------------------------------\n"
-.ascii "Hello World from BrqRV EB1 @WDC !!\n"
-.ascii "----------------------------------\n"
-.byte 0
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/factorial.s b/verilog/rtl/BrqRV_EB1/testbench/asm/factorial.s
deleted file mode 100644
index f75379f..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/factorial.s
+++ /dev/null
@@ -1,88 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 Western Digital Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// Assembly code for Hello World
-// Not using only ALU ops for creating the string
-
-
-#include "defines.h"
-
-#define STDOUT 0xd0580000
-
-
-// Code to execute
-.section .text
-.global _start
-_start:
-
-    // Clear minstret
-    csrw minstret, zero
-    csrw minstreth, zero
-    li x1, 0x5f555555
-    csrw 0x7c0, x1
-    li x1, 4
-    csrw 0x7f9, x1
-
-    li x8, 0xf0040000 // dccm address
-    li x3, STDOUT	
-    li x13, 0x1      // the number whose factorial needs to be calculated  1 till 10
-    addi x9, x0, 0xA
-    addi x6, x0, 0
-    addi x11, x0, 1 // initial value
-    addi x12, x0, 1 
-    nop
-    
-store:    
-    add x5, x0, x6 
-    sw x5, 0(x8)
-    addi x6, x6, 1
-    addi x8, x8, 4
-    bne x9, x6, store
-    li x8, 0xf0040000
-    j factorial_loop
-    
-next:
-    sw x11, 0(x8) 
-    addi x8, x8, 4
-    sw x11, 0(x3)
-    addi x3, x3, 4
-    beq x13, x9,  _finish
-    addi x13, x13, 1 
-    addi x11, x0, 1  
-    addi x12, x0, 1 
-    
-    
-factorial_loop:
-	mul x11, x11, x12
-	beq x12, x13, next
-	addi x12,x12,1
-	j factorial_loop
-	
-
-
-   
-
-// Write 0xff to STDOUT for TB to termiate test.
-_finish:
-    li x3, STDOUT
-    addi x5, x0, 0xff
-    sb x5, 0(x3)
-    beq x0, x0, _finish
-.rept 100
-    nop
-.endr
-
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world.ld b/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world.ld
deleted file mode 100644
index e14adf3..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world.ld
+++ /dev/null
@@ -1,12 +0,0 @@
-OUTPUT_ARCH( "riscv" )
-ENTRY(_start)
-
-SECTIONS {
-    . = 0x80000000;
-  .text   : { *(.text*) }
- _end = .;
-  .data  :  { *(.*data) *(.rodata*) *(.sbss) STACK = ALIGN(16) + 0x1000;}
-  .bss : { *(.bss) }
-  . = 0xd0580000;
-  .data.io .  : { *(.data.io) }
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world.s b/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world.s
deleted file mode 100644
index 0e2d3c5..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world.s
+++ /dev/null
@@ -1,77 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// Assembly code for Hello World
-// Not using only ALU ops for creating the string
-
-
-#include "defines.h"
-
-#define STDOUT 0xd0580000
-
-
-// Code to execute
-.section .text
-.global _start
-_start:
-
-    // Clear minstret
-    csrw minstret, zero
-    csrw minstreth, zero
-    //vsetvli x1, x0, e32,m1,tu,mu
-
-    // Set up MTVEC - not expecting to use it though
-     //li x1, RV_ICCM_SADR
-     //csrw mtvec, x1
-
-
-    // Enable Caches in MRAC
-    li x1, 0x5f555555
-    csrw 0x7c0, x1
-    li  x3, 4
-    csrw 0x7f9, x3 
-    // Load string from hw_data
-    // and write to stdout address
-
-    li x3, STDOUT
-    la x4, hw_data
-    
-    
-   
-
-loop:
-   lb x5, 0(x4)
-   //vle32.v v1, (x4)
-   sb x5, 0(x3)
-   addi x4, x4, 1
-   bnez x5, loop
-
-// Write 0xff to STDOUT for TB to termiate test.
-_finish:
-    li x3, STDOUT
-    addi x5, x0, 0xff
-    sb x5, 0(x3)
-    beq x0, x0, _finish
-.rept 100
-    nop
-.endr
-
-.data
-hw_data:
-.ascii "----------------------------------\n"
-.ascii "Hello World from brqrv eb1 @WDC !!\n"
-.ascii "----------------------------------\n"
-.byte 0
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_dccm.ld b/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_dccm.ld
deleted file mode 100644
index 2ae09af..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_dccm.ld
+++ /dev/null
@@ -1,14 +0,0 @@
-OUTPUT_ARCH( "riscv" )
-ENTRY(_start)
-
-SECTIONS {
-  .text   : { *(.text*) }
- _end = .;
-  . = 0xd0580000;
-  .data.io .  : { *(.data.io) }
-  . = 0xf0040000;
-  .data  :  { *(.*data) *(.rodata*) *(.sbss) STACK = ALIGN(16) + 0x1000;}
-  .bss : { *(.bss) }
-  . = 0xfffffff8;
-  .data.ctl : { LONG(0xf0040000); LONG(STACK) }
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_dccm.s b/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_dccm.s
deleted file mode 120000
index 3418f77..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_dccm.s
+++ /dev/null
@@ -1 +0,0 @@
-hello_world.s
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_iccm.ld b/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_iccm.ld
deleted file mode 100644
index 0692d8c..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_iccm.ld
+++ /dev/null
@@ -1,13 +0,0 @@
-OUTPUT_ARCH( "riscv" )
-ENTRY(_start)
-
-SECTIONS {
-  .text  :  { *(.text*) }
-  . = 0x10000;
-  .data  :  { *(.*data) *(.rodata*)}
-  . = ALIGN(4);
-  printf_start = .;
-  . = 0xee000000;
-  .data_load : AT(printf_start) {*(.data_text)}
-  printf_end = printf_start + SIZEOF(.data_load);
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_iccm.s b/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_iccm.s
deleted file mode 100644
index 6d1bb71..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/hello_world_iccm.s
+++ /dev/null
@@ -1,85 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// Assembly code for Hello World
-// Not using only ALU ops for creating the string
-
-
-#include "defines.h"
-
-#define STDOUT 0xd0580000
-
-    .set    mfdc, 0x7f9
-.extern printf_start, printf_end
-// Code to execute
-.section .text
-.global _start
-_start:
-
-
-
-    // Enable Caches in MRAC
-    li x1, 0x5f555555
-    csrw 0x7c0, x1
-    li  x3, 4
-    csrw    mfdc, x3        // disable store merging
-    li  x3, RV_ICCM_SADR
-    la  x4, printf_start
-    la  x5, printf_end
-
-
-load:
-    lw  x6, 0 (x4)
-    sw  x6, 0 (x3)
-    addi    x4,x4,4
-    addi    x3,x3,4
-    bltu x4, x5, load
-
-    fence.i
-    call printf
-
-// Write 0xff to STDOUT for TB to termiate test.
-_finish:
-    li x3, STDOUT
-    addi x5, x0, 0xff
-    sb x5, 0(x3)
-    beq x0, x0, _finish
-.rept 100
-    nop
-.endr
-
-.data
-hw_data:
-.ascii "----------------------------------------\n"
-.ascii "Hello World from brqrv eb1 ICCM  @WDC !!\n"
-.ascii "----------------------------------------\n"
-.byte 0
-
-.section .data_text, "ax"
-    // Load string from hw_data
-    // and write to stdout address
-
-printf:
-    li x3, STDOUT
-    la x4, hw_data
-
-loop:
-   lb x5, 0(x4)
-   sb x5, 0(x3)
-   addi x4, x4, 1
-   bnez x5, loop
-   ret
-.long   0,1,2,3,4
diff --git a/verilog/rtl/BrqRV_EB1/testbench/asm/printf.c b/verilog/rtl/BrqRV_EB1/testbench/asm/printf.c
deleted file mode 100644
index 1268bd1..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/asm/printf.c
+++ /dev/null
@@ -1,310 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2020 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-#include <stdarg.h>
-#include <stdint.h>
-extern volatile char tohost;
-
-static int
-whisperPutc(char c)
-{
-  tohost = c;
-  return c;
-}
-
-
-static int
-whisperPuts(const char* s)
-{
-  while (*s)
-    whisperPutc(*s++);
-  return 1;
-}
-
-
-static int
-whisperPrintUnsigned(unsigned value, int width, char pad)
-{
-  char buffer[20];
-  int charCount = 0;
-
-  do
-    {
-      char c = '0' + (value % 10);
-      value = value / 10;
-      buffer[charCount++] = c;
-    }
-  while (value);
-
-  for (int i = charCount; i < width; ++i)
-    whisperPutc(pad);
-
-  char* p = buffer + charCount - 1;
-  for (int i = 0; i < charCount; ++i)
-    whisperPutc(*p--);
-
-  return charCount;
-}
-
-
-static int
-whisperPrintDecimal(int value, int width, char pad)
-{
-  char buffer[20];
-  int charCount = 0;
-
-  unsigned neg = value < 0;
-  if (neg)
-    {
-      value = -value;
-      whisperPutc('-');
-      width--;
-    }
-
-  do
-    {
-      char c = '0' + (value % 10);
-      value = value / 10;
-      buffer[charCount++] = c;
-    }
-  while (value);
-
-  for (int i = charCount; i < width; ++i)
-    whisperPutc(pad);
-
-  char* p = buffer + charCount - 1;
-  for (int i = 0; i < charCount; ++i)
-    whisperPutc(*p--);
-
-  if (neg)
-    charCount++;
-
-  return charCount;
-}
-
-
-static int
-whisperPrintInt(int value, int width, int pad, int base)
-{
-  if (base == 10)
-    return whisperPrintDecimal(value, width, pad);
-
-  char buffer[20];
-  int charCount = 0;
-
-  unsigned uu = value;
-
-  if (base == 8)
-    {
-      do
-        {
-          char c = '0' + (uu & 7);
-          buffer[charCount++] = c;
-          uu >>= 3;
-        }
-      while (uu);
-    }
-  else if (base == 16)
-    {
-      do
-        {
-          int digit = uu & 0xf;
-          char c = digit < 10 ? '0' + digit : 'a' + digit - 10;
-          buffer[charCount++] = c;
-          uu >>= 4;
-        }
-      while (uu);
-    }
-  else
-    return -1;
-
-  char* p = buffer + charCount - 1;
-  for (unsigned i = 0; i < charCount; ++i)
-    whisperPutc(*p--);
-
-  return charCount;
-}
-
-/*
-// Print with g format
-static int
-whisperPrintDoubleG(double value)
-{
-  return 0;
-}
-
-
-// Print with f format
-static int
-whisperPrintDoubleF(double value)
-{
-  return 0;
-}
-*/
-
-int
-whisperPrintfImpl(const char* format, va_list ap)
-{
-  int count = 0;  // Printed character count
-
-  for (const char* fp = format; *fp; fp++)
-    {
-      char pad = ' ';
-      int width = 0;  // Field width
-
-      if (*fp != '%')
-        {
-          whisperPutc(*fp);
-          ++count;
-          continue;
-        }
-
-      ++fp;  // Skip %
-
-      if (*fp == 0)
-        break;
-
-      if (*fp == '%')
-        {
-          whisperPutc('%');
-          continue;
-        }
-
-      while (*fp == '0')
-        {
-          pad = '0';
-          fp++;  // Pad zero not yet implented.
-        }
-
-      if (*fp == '-')
-        {
-          fp++;  // Pad right not yet implemented.
-        }
-
-      if (*fp == '*')
-        {
-          int outWidth = va_arg(ap, int);
-          fp++;  // Width not yet implemented.
-        }
-      else if (*fp >= '0' && *fp <= '9')
-        {    // Width not yet implemented.
-          while (*fp >= '0' && *fp <= '9')
-            width = width * 10 + (*fp++ - '0');
-        }
-
-      switch (*fp)
-        {
-        case 'd':
-          count += whisperPrintDecimal(va_arg(ap, int), width, pad);
-          break;
-
-        case 'u':
-          count += whisperPrintUnsigned((unsigned) va_arg(ap, unsigned), width, pad);
-          break;
-
-        case 'x':
-        case 'X':
-          count += whisperPrintInt(va_arg(ap, int), width, pad, 16);
-          break;
-
-        case 'o':
-          count += whisperPrintInt(va_arg(ap, int), width, pad, 8);
-          break;
-
-        case 'c':
-          whisperPutc(va_arg(ap, int));
-          ++count;
-          break;
-
-        case 's':
-          count += whisperPuts(va_arg(ap, char*));
-          break;
-/*
-        case 'g':
-          count += whisperPrintDoubleG(va_arg(ap, double));
-          break;
-
-        case 'f':
-          count += whisperPrintDoubleF(va_arg(ap, double));
-*/
-        }
-    }
-
-  return count;
-}
-
-
-int
-whisperPrintf(const char* format, ...)
-{
-  va_list ap;
-
-  va_start(ap, format);
-  int code = whisperPrintfImpl(format, ap);
-  va_end(ap);
-
-  return code;
-}
-
-int
-putchar(int c)
-{
-  return whisperPutc(c);
-}
-
-struct FILE;
-
-int
-putc(int c, struct FILE* f)
-{
-  return whisperPutc(c);
-}
-
-
-int
-puts(const char* s)
-{
-  return whisperPuts(s);
-}
-
-int
-printf(const char* format, ...)
-{
-  va_list ap;
-
-  va_start(ap, format);
-  int code = whisperPrintfImpl(format, ap);
-  va_end(ap);
-
-  return code;
-}
-
-// function to read cpu mcycle csr for performance measurements
-// simplified version
-uint64_t get_mcycle(){
-unsigned int mcyclel;
-unsigned int mcycleh0 = 0, mcycleh1=1;
-uint64_t cycles;
-
-while(mcycleh0 != mcycleh1) {
-    asm volatile ("csrr %0,mcycleh"  : "=r" (mcycleh0) );
-    asm volatile ("csrr %0,mcycle"   : "=r" (mcyclel)  );
-    asm volatile ("csrr %0,mcycleh"  : "=r" (mcycleh1) );
-}
-cycles = mcycleh1;
-return (cycles << 32) | mcyclel;
-
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/axi_lsu_dma_bridge.sv b/verilog/rtl/BrqRV_EB1/testbench/axi_lsu_dma_bridge.sv
deleted file mode 100644
index 2c3b844..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/axi_lsu_dma_bridge.sv
+++ /dev/null
@@ -1,201 +0,0 @@
-
-// connects LSI master to external AXI slave and DMA slave
-module axi_lsu_dma_bridge
-#(
-parameter M_ID_WIDTH = 8,
-parameter S0_ID_WIDTH = 8
-)
-(
-input                   clk,
-input                   reset_l,
-
-// master read bus
-input                   m_arvalid,
-input [M_ID_WIDTH-1:0]  m_arid,
-input[31:0]             m_araddr,
-output                  m_arready,
-
-output                  m_rvalid,
-input                   m_rready,
-output [63:0]           m_rdata,
-output [M_ID_WIDTH-1:0] m_rid,
-output [1:0]            m_rresp,
-output                  m_rlast,
-
-// master write bus
-input                   m_awvalid,
-input [M_ID_WIDTH-1:0]  m_awid,
-input[31:0]             m_awaddr,
-output                  m_awready,
-
-input                   m_wvalid,
-output                  m_wready,
-
-output[1:0]             m_bresp,
-output                  m_bvalid,
-output[M_ID_WIDTH-1:0]  m_bid,
-input                   m_bready,
-
-// slave 0 if general ext memory
-output                  s0_arvalid,
-input                   s0_arready,
-
-input                   s0_rvalid,
-input[S0_ID_WIDTH-1:0]  s0_rid,
-input[1:0]              s0_rresp,
-input[63:0]             s0_rdata,
-input                   s0_rlast,
-output                  s0_rready,
-
-output                  s0_awvalid,
-input                   s0_awready,
-
-output                  s0_wvalid,
-input                   s0_wready,
-
-input[1:0]              s0_bresp,
-input                   s0_bvalid,
-input[S0_ID_WIDTH-1:0]  s0_bid,
-output                  s0_bready,
-
-// slave 1 if DMA port
-output                  s1_arvalid,
-input                   s1_arready,
-
-input                   s1_rvalid,
-input[1:0]              s1_rresp,
-input[63:0]             s1_rdata,
-input                   s1_rlast,
-output                  s1_rready,
-
-output                  s1_awvalid,
-input                   s1_awready,
-
-output                  s1_wvalid,
-input                   s1_wready,
-
-input[1:0]              s1_bresp,
-input                   s1_bvalid,
-output                  s1_bready
-);
-
-parameter ICCM_BASE = `RV_ICCM_BITS; // in LSBs
-localparam IDFIFOSZ = $clog2(`RV_DMA_BUF_DEPTH);
-bit[31:0] iccm_real_base_addr = `RV_ICCM_SADR ;
-
-wire ar_slave_select;
-wire aw_slave_select;
-wire w_slave_select;
-
-wire rresp_select;
-wire bresp_select;
-wire ar_iccm_select;
-wire aw_iccm_select;
-
-reg [1:0] wsel_iptr, wsel_optr;
-reg [2:0] wsel_count;
-reg [3:0] wsel;
-
-
-reg [M_ID_WIDTH-1:0] arid [1<<IDFIFOSZ];
-reg [M_ID_WIDTH-1:0] awid [1<<IDFIFOSZ];
-reg [IDFIFOSZ-1:0] arid_cnt;
-reg [IDFIFOSZ-1:0] awid_cnt;
-reg [IDFIFOSZ-1:0] rid_cnt;
-reg [IDFIFOSZ-1:0] bid_cnt;
-
-
-// 1 select slave 1; 0 - slave 0
-assign ar_slave_select = ar_iccm_select;
-assign aw_slave_select = aw_iccm_select;
-
-assign ar_iccm_select = m_araddr[31:ICCM_BASE] == iccm_real_base_addr[31:ICCM_BASE];
-assign aw_iccm_select = m_awaddr[31:ICCM_BASE] == iccm_real_base_addr[31:ICCM_BASE];
-
-assign s0_arvalid = m_arvalid & ~ar_slave_select;
-assign s1_arvalid = m_arvalid &  ar_slave_select;
-assign m_arready = ar_slave_select ? s1_arready : s0_arready;
-
-
-assign s0_awvalid = m_awvalid & ~aw_slave_select;
-assign s1_awvalid = m_awvalid & aw_slave_select;
-assign m_awready = aw_slave_select ? s1_awready : s0_awready;
-
-
-assign s0_wvalid = m_wvalid & ~w_slave_select;
-assign s1_wvalid = m_wvalid &  w_slave_select;
-assign m_wready = w_slave_select ? s1_wready : s0_wready;
-assign w_slave_select = (wsel_count == 0 || wsel_count[2]) ? aw_slave_select : wsel[wsel_optr];
-
-assign m_rvalid = s0_rvalid | s1_rvalid;
-assign s0_rready = m_rready & ~rresp_select;
-assign s1_rready = m_rready &  rresp_select;
-assign m_rdata = rresp_select ? s1_rdata : s0_rdata;
-assign m_rresp = rresp_select ? s1_rresp : s0_rresp;
-assign m_rid = rresp_select ? arid[rid_cnt] : s0_rid;
-assign m_rlast = rresp_select ? s1_rlast : s0_rlast;
-
-assign rresp_select = s1_rvalid & ~s0_rvalid;
-
-assign m_bvalid = s0_bvalid | s1_bvalid;
-assign s0_bready = m_bready & ~bresp_select;
-assign s1_bready = m_bready &  bresp_select;
-assign m_bid = bresp_select ? awid[bid_cnt] : s0_bid;
-assign m_bresp = bresp_select ? s1_bresp : s0_bresp;
-
-
-assign bresp_select = s1_bvalid & ~s0_bvalid;
-
-
-// W-channel select fifo
-always @ (posedge clk or negedge reset_l)
-    if(!reset_l) begin
-        wsel_count <= '0;
-        wsel_iptr <= '0;
-        wsel_optr <= '0;
-    end
-    else begin
-        if(m_awvalid & m_awready) begin
-            wsel[wsel_iptr] <= aw_slave_select;
-            if(!(m_wready & m_wvalid )) wsel_count <= wsel_count + 1;
-            wsel_iptr <= wsel_iptr + 1;
-        end
-        if(m_wvalid & m_wready) begin
-           if(!(m_awready & m_awvalid ) ) wsel_count <= wsel_count - 1;
-           wsel_optr <= wsel_optr + 1;
-        end
-    end
-
-// id replacement for narrow ID slave
-always @ (posedge clk or negedge reset_l)
-    if(!reset_l) begin
-        arid_cnt <= '0;
-        rid_cnt <= '0;
-    end
-    else begin
-        if(ar_slave_select & m_arready & m_arvalid) begin
-            arid[arid_cnt] <= m_arid;
-            arid_cnt <= arid_cnt + 1;
-        end
-        if(rresp_select & m_rready & m_rvalid) begin
-            rid_cnt <= rid_cnt + 1;
-        end
-
-    end
-
-always @ (posedge clk or negedge reset_l)
-    if(!reset_l) begin
-        awid_cnt <= '0;
-        bid_cnt <= '0;
-    end
-    else begin
-        if(aw_slave_select & m_awready & m_awvalid) begin
-            awid[awid_cnt] <= m_awid;
-            awid_cnt <= awid_cnt + 1;
-        end
-        if(bresp_select & m_bready & m_bvalid) begin
-            bid_cnt <= bid_cnt + 1;
-        end
-    end
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/testbench/dasm.svi b/verilog/rtl/BrqRV_EB1/testbench/dasm.svi
deleted file mode 100644
index 59ad83a..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/dasm.svi
+++ /dev/null
@@ -1,374 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// Run time disassembler functions
-// supports  RISCV extentions I, C, M
-
-bit[31:0] gpr[32];
-
-// main DASM function
-function string dasm(input[31:0] opcode, input[31:0] pc, input[4:0] regn, input[31:0] regv);
-    if(regn) gpr[regn] = regv;
-
-    if( opcode[1:0] == 2'b11 ) return dasm32(opcode, pc);
-    else return dasm16(opcode, pc);
-endfunction
-
-
-///////////////// 16 bits instructions ///////////////////////
-
-function string dasm16( input[31:0] opcode, input[31:0] pc);
-    case(opcode[1:0])
-    0: return dasm16_0(opcode);
-    1: return dasm16_1(opcode, pc);
-    2: return dasm16_2(opcode);
-    endcase
-    return $sformatf(".short 0x%h", opcode[15:0]);
-endfunction
-
-function string dasm16_0( input[31:0] opcode);
-    case(opcode[15:13])
-    3'b000: return dasm16_ciw(opcode);
-    3'b001: return {"c.fld", dasm16_cl(opcode)};
-    3'b010: return {"c.lw",  dasm16_cl(opcode)};
-    3'b011: return {"c.flw", dasm16_cl(opcode)};
-    3'b101: return {"c.fsd", dasm16_cl(opcode)};
-    3'b110: return {"c.sw",  dasm16_cl(opcode)};
-    3'b111: return {"c.fsw", dasm16_cl(opcode)};
-    endcase
-    return $sformatf(".short 0x%h", opcode[15:0]);
-endfunction
-
-function string dasm16_ciw( input[31:0] opcode);
-int imm;
-    imm=0;
-    if(opcode[15:0] == 0) return ".short 0";
-    {imm[5:4],imm[9:6],imm[2],imm[3]} = opcode[12:5];
-    return $sformatf("c.addi4spn %s, 0x%0h", abi_reg[opcode[4:2]+8], imm);
-endfunction
-
-function string dasm16_cl( input[31:0] opcode);
-int imm;
-    imm=0;
-    imm[5:3] = opcode[12:10];
-    imm[7:6] = opcode[6:5];
-
-    return $sformatf(" %s, %0d(%s) [%h]", abi_reg[opcode[4:2]+8], imm, abi_reg[opcode[9:7]+8], gpr[opcode[9:7]+8]+imm);
-endfunction
-
-function string dasm16_1( input[31:0] opcode, input[31:0] pc);
-    case(opcode[15:13])
-    3'b000: return opcode[11:7]==0 ? "c.nop" : {"c.addi",dasm16_ci(opcode)};
-    3'b001: return {"c.jal", dasm16_cj(opcode, pc)};
-    3'b010: return {"c.li",  dasm16_ci(opcode)};
-    3'b011: return dasm16_1_3(opcode);
-    3'b100: return dasm16_cr(opcode);
-    3'b101: return {"c.j", dasm16_cj(opcode, pc)};
-    3'b110: return {"c.beqz", dasm16_cb(opcode, pc)};
-    3'b111: return {"c.bnez", dasm16_cb(opcode, pc)};
-    endcase
-endfunction
-
-function string dasm16_ci( input[31:0] opcode);
-int imm;
-    imm=0;
-    imm[4:0] = opcode[6:2];
-    if(opcode[12]) imm [31:5] = '1;
-    return $sformatf(" %s, %0d", abi_reg[opcode[11:7]], imm);
-endfunction
-
-function string dasm16_cj( input[31:0] opcode, input[31:0] pc);
-bit[31:0] imm;
-    imm=0;
-    {imm[11],imm[4],imm[9:8],imm[10],imm[6], imm[7],imm[3:1], imm[5]} = opcode[12:2];
-    if(opcode[12]) imm [31:12] = '1;
-    return $sformatf(" 0x%h", imm+pc);
-endfunction
-
-function string dasm16_cb( input[31:0] opcode, input[31:0] pc);
-bit[31:0] imm;
-    imm=0;
-    {imm[11],imm[4:3]} = opcode[12:10];
-    {imm[7], imm[6],imm[2:1], imm[5]} = opcode[6:2];
-    if(opcode[12]) imm [31:9] = '1;
-    return $sformatf(" %s, 0x%h",abi_reg[opcode[9:7]+8], imm+pc);
-endfunction
-
-function string dasm16_cr( input[31:0] opcode);
-bit[31:0] imm;
-
-    imm = 0;
-    imm[4:0] = opcode[6:2];
-    if(opcode[5]) imm [31:5] = '1;
-    case(opcode[11:10])
-    0: return $sformatf("c.srli %s, %0d",  abi_reg[opcode[9:7]+8], imm[5:0]);
-    1: return $sformatf("c.srai %s, %0d",  abi_reg[opcode[9:7]+8], imm[5:0]);
-    2: return $sformatf("c.andi %s, 0x%h", abi_reg[opcode[9:7]+8], imm);
-    endcase
-
-    case(opcode[6:5])
-    0: return $sformatf("c.sub %s, %s", abi_reg[opcode[9:7]+8], abi_reg[opcode[4:2]+8]);
-    1: return $sformatf("c.xor %s, %s", abi_reg[opcode[9:7]+8], abi_reg[opcode[4:2]+8]);
-    2: return $sformatf("c.or  %s, %s", abi_reg[opcode[9:7]+8], abi_reg[opcode[4:2]+8]);
-    3: return $sformatf("c.and %s, %s", abi_reg[opcode[9:7]+8], abi_reg[opcode[4:2]+8]);
-    endcase
-endfunction
-
-function string dasm16_1_3( input[31:0] opcode);
-int imm;
-
-    imm=0;
-    if(opcode[11:7] == 2) begin
-        {imm[4], imm[6],imm[8:7], imm[5]} = opcode[6:2];
-        if(opcode[12]) imm [31:9] = '1;
-        return $sformatf("c.addi16sp %0d", imm);
-    end
-    else begin
-    //    {imm[4], imm[6],imm[8:7], imm[5]} = opcode[6:2];
-        imm[16:12] = opcode[6:2];
-        if(opcode[12]) imm [31:17] = '1;
-        return $sformatf("c.lui %3s, 0x%h", abi_reg[opcode[11:7]], imm);
-
-    end
-endfunction
-
-function string dasm16_2( input[31:0] opcode);
-    case(opcode[15:13])
-    3'b000: return {"c.slli",  dasm16_ci(opcode)};
-    3'b001: return {"c.fldsp", dasm16_cls(opcode,1)};
-    3'b010: return {"c.lwsp",  dasm16_cls(opcode)};
-    3'b011: return {"c.flwsp", dasm16_cls(opcode)};
-    3'b101: return {"c.fsdsp", dasm16_css(opcode,1)};
-    3'b110: return {"c.swsp",  dasm16_css(opcode)};
-    3'b111: return {"c.fswsp", dasm16_css(opcode)};
-    endcase
-    if(opcode[12]) begin
-        if(opcode[12:2] == 0) return "c.ebreak";
-        else if(opcode[6:2] == 0) return $sformatf("c.jalr %s", abi_reg[opcode[11:7]]);
-        else return $sformatf("c.add %s, %s", abi_reg[opcode[11:7]], abi_reg[opcode[6:2]]);
-    end
-    else begin
-        if(opcode[6:2] == 0) return $sformatf("c.jr %s", abi_reg[opcode[11:7]]);
-        else return $sformatf("c.mv %s, %s", abi_reg[opcode[11:7]], abi_reg[opcode[6:2]]);
-    end
-endfunction
-
-
-function string dasm16_cls( input[31:0] opcode, input sh1=0);
-bit[31:0] imm;
-    imm=0;
-    if(sh1) {imm[4:3],imm[8:6]} = opcode[6:2];
-    else    {imm[4:2],imm[7:6]} = opcode[6:2];
-    imm[5] = opcode[12];
-    return $sformatf(" %s, 0x%0h [%h]", abi_reg[opcode[11:7]], imm, gpr[2]+imm);
-endfunction
-
-function string dasm16_css( input[31:0] opcode, input sh1=0);
-bit[31:0] imm;
-    imm=0;
-    if(sh1) {imm[5:3],imm[8:6]} = opcode[12:7];
-    else {imm[5:2],imm[7:6]} = opcode[12:7];
-    return $sformatf(" %s, 0x%0h [%h]", abi_reg[opcode[6:2]], imm, gpr[2]+imm);
-endfunction
-
-///////////////// 32 bit instructions ///////////////////////
-
-function string dasm32( input[31:0] opcode, input[31:0] pc);
-    case(opcode[6:0])
-    7'b0110111: return {"lui",   dasm32_u(opcode)};
-    7'b0010111: return {"auipc", dasm32_u(opcode)};
-    7'b1101111: return {"jal",   dasm32_j(opcode,pc)};
-    7'b1100111: return {"jalr",  dasm32_jr(opcode,pc)};
-    7'b1100011: return dasm32_b(opcode,pc);
-    7'b0000011: return dasm32_l(opcode);
-    7'b0100011: return dasm32_s(opcode);
-    7'b0010011: return dasm32_ai(opcode);
-    7'b0110011: return dasm32_ar(opcode);
-    7'b0001111: return {"fence", dasm32_fence(opcode)};
-    7'b1110011: return dasm32_e(opcode);
-
-    endcase
-    return $sformatf(".long 0x%h", opcode);
-endfunction
-
-function string dasm32_u( input[31:0] opcode);
-bit[31:0] imm;
-    imm=0;
-    imm[31:12] = opcode[31:12];
-    return $sformatf(" %s, 0x%0h", abi_reg[opcode[11:7]], imm);
-endfunction
-
-function string dasm32_j( input[31:0] opcode, input[31:0] pc);
-int imm;
-    imm=0;
-    {imm[20], imm[10:1], imm[11], imm[19:12]} = opcode[31:12];
-    if(opcode[31]) imm[31:20] = '1;
-    return $sformatf(" %s, 0x%0h",abi_reg[opcode[11:7]], imm+pc);
-endfunction
-
-function string dasm32_jr( input[31:0] opcode, input[31:0] pc);
-int imm;
-    imm=0;
-    imm[11:1] = opcode[31:19];
-    if(opcode[31]) imm[31:12] = '1;
-    return $sformatf(" %s, %s, 0x%0h",abi_reg[opcode[11:7]], abi_reg[opcode[19:15]], imm+pc);
-endfunction
-
-function string dasm32_b( input[31:0] opcode, input[31:0] pc);
-int imm;
-string mn;
-    imm=0;
-    {imm[12],imm[10:5]} = opcode[31:25];
-    {imm[4:1],imm[11]} = opcode[11:7];
-    if(opcode[31]) imm[31:12] = '1;
-    case(opcode[14:12])
-    0: mn = "beq";
-    1: mn = "bne";
-    2,3 : return $sformatf(".long 0x%h", opcode);
-    4: mn = "blt";
-    5: mn = "bge";
-    6: mn = "bltu";
-    7: mn = "bgeu";
-    endcase
-    return $sformatf("%s %s, %s, 0x%0h", mn, abi_reg[opcode[11:7]], abi_reg[opcode[19:15]], imm+pc);
-endfunction
-
-function string dasm32_l( input[31:0] opcode);
-int imm;
-string mn;
-    imm=0;
-    imm[11:0] = opcode[31:20];
-    if(opcode[31]) imm[31:12] = '1;
-    case(opcode[14:12])
-    0: mn = "lb";
-    1: mn = "lh";
-    2: mn = "lw";
-    4: mn = "lbu";
-    5: mn = "lhu";
-    default : return $sformatf(".long 0x%h", opcode);
-    endcase
-    return $sformatf("%s %s, %0d(%s) [%h]", mn, abi_reg[opcode[11:7]], imm, abi_reg[opcode[19:15]], imm+gpr[opcode[19:15]]);
-endfunction
-
-function string dasm32_s( input[31:0] opcode);
-int imm;
-string mn;
-    imm=0;
-    imm[11:5] = opcode[31:25];
-    imm[4:0] = opcode[11:7];
-    if(opcode[31]) imm[31:12] = '1;
-    case(opcode[14:12])
-    0: mn = "sb";
-    1: mn = "sh";
-    2: mn = "sw";
-    default : return $sformatf(".long 0x%h", opcode);
-    endcase
-    return $sformatf("%s %s, %0d(%s) [%h]", mn, abi_reg[opcode[24:20]], imm, abi_reg[opcode[19:15]], imm+gpr[opcode[19:15]]);
-endfunction
-
-function string dasm32_ai( input[31:0] opcode);
-int imm;
-string mn;
-    imm=0;
-    imm[11:0] = opcode[31:20];
-    if(opcode[31]) imm[31:12] = '1;
-    case(opcode[14:12])
-    0: mn = "addi";
-    2: mn = "slti";
-    3: mn = "sltiu";
-    4: mn = "xori";
-    6: mn = "ori";
-    7: mn = "andi";
-    default: return dasm32_si(opcode);
-endcase
-
-return $sformatf("%s %s, %s, %0d", mn, abi_reg[opcode[11:7]], abi_reg[opcode[19:15]], imm);
-endfunction
-
-function string dasm32_si( input[31:0] opcode);
-int imm;
-string mn;
-    imm = opcode[24:20];
-    case(opcode[14:12])
-    1: mn = "slli";
-    5: mn = opcode[30] ? "srli": "srai";
-    endcase
-
-    return $sformatf("%s %s, %s, %0d", mn, abi_reg[opcode[11:7]], abi_reg[opcode[19:15]], imm);
-endfunction
-
-
-
-function string dasm32_ar( input[31:0] opcode);
-string mn;
-    if(opcode[25])
-        case(opcode[14:12])
-        0: mn = "mul";
-        1: mn = "mulh";
-        2: mn = "mulhsu";
-        3: mn = "mulhu";
-        4: mn = "div";
-        5: mn = "divu";
-        6: mn = "rem";
-        7: mn = "remu";
-        endcase
-    else
-        case(opcode[14:12])
-        0: mn = opcode[30]? "sub":"add";
-        1: mn = "sll";
-        2: mn = "slt";
-        3: mn = "sltu";
-        4: mn = "xor";
-        5: mn = opcode[30]? "sra" :"srl";
-        6: mn = "or";
-        7: mn = "and";
-        endcase
-    return $sformatf("%s %s, %s, %s", mn, abi_reg[opcode[11:7]], abi_reg[opcode[19:15]], abi_reg[opcode[24:20]]);
-endfunction
-
-function string dasm32_fence( input[31:0] opcode);
-    return  opcode[12] ? ".i" : "";
-endfunction
-
-function string dasm32_e(input[31:0] opcode);
-    if(opcode[31:7] == 0) return "ecall";
-    else if({opcode[31:21],opcode [19:7]} == 0) return "ebreak";
-    else
-        case(opcode[14:12])
-        1: return {"csrrw", dasm32_csr(opcode)};
-        2: return {"csrrs", dasm32_csr(opcode)};
-        3: return {"csrrc", dasm32_csr(opcode)};
-        5: return {"csrrwi", dasm32_csr(opcode, 1)};
-        6: return {"csrrsi", dasm32_csr(opcode, 1)};
-        7: return {"csrrci", dasm32_csr(opcode, 1)};
-        endcase
-
-endfunction
-
-
-function string dasm32_csr(input[31:0] opcode, input im=0);
-bit[11:0] csr;
-    csr = opcode[31:20];
-    if(im) begin
-        return $sformatf(" %s, csr_%0h, 0x%h",  abi_reg[opcode[11:7]], csr, opcode[19:15]);
-    end
-    else begin
-        return $sformatf(" %s, csr_%0h, %s",  abi_reg[opcode[11:7]], csr, abi_reg[opcode[19:15]]);
-    end
-
-endfunction
-
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/flist b/verilog/rtl/BrqRV_EB1/testbench/flist
deleted file mode 100644
index ff4a16d..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/flist
+++ /dev/null
@@ -1,51 +0,0 @@
-+libext+.v+.sv
-//-y $SYNOPSYS_SYN_ROOT/dw/sim_ver
-+define+RV_OPENSOURCE
-+incdir+$RV_ROOT/testbench
-$RV_ROOT/design/soc_files/tb_prog.v
-$RV_ROOT/design/eb1_brqrv_wrapper.sv
-$RV_ROOT/design/eb1_mem.sv
-$RV_ROOT/design/eb1_pic_ctrl.sv
-$RV_ROOT/design/eb1_brqrv.sv
-$RV_ROOT/design/eb1_dma_ctrl.sv
-$RV_ROOT/design/ifu/eb1_ifu_aln_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_compress_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_ifc_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_bp_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_ic_mem.sv
-$RV_ROOT/design/ifu/eb1_ifu_mem_ctl.sv
-$RV_ROOT/design/ifu/eb1_ifu_iccm_mem.sv
-$RV_ROOT/design/ifu/eb1_ifu.sv
-$RV_ROOT/design/dec/eb1_dec_decode_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_gpr_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_ib_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_tlu_ctl.sv
-$RV_ROOT/design/dec/eb1_dec_trigger.sv
-$RV_ROOT/design/dec/eb1_dec.sv
-$RV_ROOT/design/exu/eb1_exu_alu_ctl.sv
-$RV_ROOT/design/exu/eb1_exu_mul_ctl.sv
-$RV_ROOT/design/exu/eb1_exu_div_ctl.sv
-$RV_ROOT/design/exu/eb1_exu.sv
-$RV_ROOT/design/lsu/eb1_lsu.sv
-$RV_ROOT/design/lsu/eb1_lsu_clkdomain.sv
-$RV_ROOT/design/lsu/eb1_lsu_addrcheck.sv
-$RV_ROOT/design/lsu/eb1_lsu_lsc_ctl.sv
-$RV_ROOT/design/lsu/eb1_lsu_stbuf.sv
-$RV_ROOT/design/lsu/eb1_lsu_bus_buffer.sv
-$RV_ROOT/design/lsu/eb1_lsu_bus_intf.sv
-$RV_ROOT/design/lsu/eb1_lsu_ecc.sv
-$RV_ROOT/design/lsu/eb1_lsu_dccm_mem.sv
-$RV_ROOT/design/lsu/eb1_lsu_dccm_ctl.sv
-$RV_ROOT/design/lsu/eb1_lsu_trigger.sv
-$RV_ROOT/design/dbg/eb1_dbg.sv
-$RV_ROOT/design/dmi/dmi_wrapper.v
-$RV_ROOT/design/dmi/dmi_jtag_to_core_sync.v
-$RV_ROOT/design/dmi/rvjtag_tap.v
-$RV_ROOT/design/soc_files/uart_rx_prog.v
-$RV_ROOT/design/soc_files/iccm_controller.v
-$RV_ROOT/design/sky130_sram_1kbyte_1rw1r_32x256_8.v
-$RV_ROOT/design/lib/eb1_lib.sv
--v $RV_ROOT/design/lib/beh_lib.sv
--v $RV_ROOT/design/lib/mem_lib.sv
--y $RV_ROOT/design/lib
--v $RV_ROOT/testbench/axi_lsu_dma_bridge.sv
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/cmark.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/cmark.hex
deleted file mode 100755
index 30a105f..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/cmark.hex
+++ /dev/null
@@ -1,2251 +0,0 @@
-@80000000
-B7 52 55 5F 93 82 52 55 73 90 02 7C 17 A1 00 00
-13 01 41 C5 EF 70 D0 11 97 02 58 50 93 82 82 FE
-13 03 F0 0F 23 80 62 00 05 43 23 A0 62 00 E3 05
-00 FE 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 03 47 05 00 E3 09 07 2A 39 71
-B7 82 00 80 22 DE 26 DC 2A 86 4A DA 4E D8 52 D6
-56 D4 5A D2 5E D0 01 45 13 0E 50 02 37 08 58 D0
-93 08 00 03 93 03 D0 02 93 04 A0 02 13 04 00 02
-93 82 42 68 93 0F B1 00 25 4F A9 4E 19 A8 BE 86
-23 00 E8 00 B2 87 05 05 36 86 03 C7 17 00 63 06
-07 20 93 07 16 00 E3 14 C7 FF 03 43 16 00 63 0E
-03 1E 09 06 63 05 C3 1F E3 15 13 23 03 C7 17 00
-3E 86 85 07 BE 86 63 12 17 07 03 C7 17 00 3E 86
-85 07 63 1C 17 05 03 C7 26 00 3E 86 93 87 26 00
-63 15 17 05 03 C7 36 00 3E 86 93 87 36 00 63 1E
-17 03 03 C7 46 00 3E 86 93 87 46 00 63 17 17 03
-03 C7 56 00 3E 86 93 87 56 00 63 10 17 03 03 C7
-66 00 3E 86 93 87 66 00 63 19 17 01 03 C7 76 00
-3E 86 93 87 76 00 E3 0B 17 F9 09 06 63 08 77 02
-63 0C 97 02 93 09 07 FD 13 F9 F9 0F 81 46 63 73
-2F 0B 13 07 87 FA 13 79 F7 0F E3 68 24 F5 13 1A
-29 00 B3 0B 5A 00 83 A9 0B 00 82 89 03 C7 17 00
-B2 87 05 06 E3 18 97 FC 03 C7 17 00 91 05 B2 87
-81 46 05 06 F9 B7 03 47 59 00 13 9B 26 00 B3 0A
-DB 00 93 0B 07 FD 93 96 1A 00 93 F9 FB 0F 3E 86
-D2 96 93 07 59 00 63 62 3F 11 03 47 69 00 13 96
-26 00 33 0B D6 00 13 0A 07 FD 93 16 1B 00 93 7A
-FA 0F 3E 86 DE 96 93 07 69 00 63 60 5F 0F 03 47
-79 00 93 9B 26 00 33 86 DB 00 93 09 07 FD 13 1B
-16 00 93 FA F9 0F 3E 86 B3 06 6A 01 93 07 79 00
-63 6D 5F 0B 03 C7 17 00 13 9A 26 00 B3 0A DA 00
-13 0B 07 FD 3E 86 93 9B 1A 00 85 07 13 7A FB 0F
-3E 89 B3 86 79 01 63 6A 4F 09 03 C7 17 00 93 99
-26 00 CE 96 93 0B 07 FD 13 9A 16 00 93 FA FB 0F
-3E 86 B3 06 4B 01 85 07 63 69 5F 07 03 47 29 00
-13 96 26 00 33 0B D6 00 13 0A 07 FD 93 19 1B 00
-93 7A FA 0F 3E 86 B3 86 3B 01 93 07 29 00 63 66
-5F 05 03 47 39 00 93 9B 26 00 DE 96 13 0B 07 FD
-93 99 16 00 93 7A FB 0F 3E 86 B3 06 3A 01 93 07
-39 00 63 64 5F 03 03 47 49 00 13 96 26 00 B3 0B
-D6 00 13 0A 07 FD 93 96 1B 00 93 79 FA 0F 3E 86
-DA 96 93 07 49 00 E3 70 3F EF 09 06 5D B5 23 00
-C8 01 03 C7 17 00 E3 1E 07 DE 72 54 E2 54 52 59
-C2 59 32 5A A2 5A 12 5B 82 5B 21 61 82 80 98 41
-81 49 91 05 11 A0 B6 89 93 7A F7 00 13 83 7A 05
-63 44 5F 01 13 83 0A 03 93 86 19 00 13 0B C1 00
-33 0A DB 00 A3 0F 6A FE 11 83 71 FF 13 09 C1 00
-33 07 39 01 B3 09 F7 41 93 FA 79 00 63 89 0A 06
-85 4B 63 8F 7A 05 09 43 63 87 6A 04 0D 4B 63 8F
-6A 03 11 4A 63 87 4A 03 15 49 63 8F 2A 01 99 49
-63 87 3A 01 83 4A 07 00 7D 17 23 00 58 01 83 4B
-07 00 7D 17 23 00 78 01 03 43 07 00 7D 17 23 00
-68 00 03 4B 07 00 7D 17 23 00 68 01 03 4A 07 00
-7D 17 23 00 48 01 03 49 07 00 7D 17 23 00 28 01
-83 49 07 00 7D 17 23 00 38 01 63 05 F7 05 83 4A
-07 00 61 17 23 00 58 01 83 4B 77 00 23 00 78 01
-03 43 67 00 23 00 68 00 03 4B 57 00 23 00 68 01
-03 4A 47 00 23 00 48 01 03 49 37 00 23 00 28 01
-83 49 27 00 23 00 38 01 83 4A 17 00 23 00 58 01
-E3 1F F7 FB 36 95 D5 B1 03 C9 05 00 05 05 91 05
-23 00 28 01 D9 B9 03 AA 05 00 01 49 91 05 B3 7A
-DA 03 4A 87 13 0B C1 00 05 09 B3 0B 2B 01 CA 89
-93 8A 0A 03 A3 8F 5B FF B3 5B DA 03 63 78 4F 0F
-4A 87 13 0B C1 00 05 09 B3 0A 2B 01 33 FA DB 03
-13 0A 0A 03 A3 8F 4A FF 33 DA DB 03 63 78 7F 0D
-93 0B C1 00 4A 87 13 89 29 00 33 8B 2B 01 B3 7A
-DA 03 93 8B 0A 03 A3 0F 7B FF B3 5A DA 03 63 77
-4F 0B 13 0A C1 00 4A 87 13 89 39 00 33 0B 2A 01
-B3 FB DA 03 13 8A 0B 03 A3 0F 4B FF B3 DB DA 03
-63 76 5F 09 93 0A C1 00 4A 87 13 89 49 00 33 8B
-2A 01 33 FA DB 03 93 0A 0A 03 A3 0F 5B FF B3 DA
-DB 03 63 75 7F 07 93 0B C1 00 4A 87 13 89 59 00
-33 8B 2B 01 33 FA DA 03 93 0B 0A 03 A3 0F 7B FF
-33 DA DA 03 63 74 5F 05 93 0A C1 00 4A 87 13 89
-69 00 33 8B 2A 01 B3 7B DA 03 93 8A 0B 03 A3 0F
-5B FF 33 5B DA 03 63 73 4F 03 4A 87 13 89 79 00
-93 09 C1 00 33 8A 29 01 B3 7B DB 03 93 8A 0B 03
-A3 0F 5A FF 33 5A DB 03 E3 6B 6F EF CA 89 63 55
-D9 08 33 8B 26 41 93 7B 7B 00 63 8C 0B 04 85 4A
-63 84 5B 05 09 4A 63 8E 4B 03 0D 4B 63 88 6B 03
-91 4A 63 82 5B 03 15 4A 63 8C 4B 01 19 4B 63 86
-6B 01 23 00 68 00 93 09 19 00 23 00 68 00 85 09
-23 00 68 00 85 09 23 00 68 00 85 09 23 00 68 00
-85 09 23 00 68 00 85 09 23 00 68 00 85 09 63 85
-36 03 23 00 68 00 23 00 68 00 23 00 68 00 23 00
-68 00 23 00 68 00 23 00 68 00 23 00 68 00 23 00
-68 00 A1 09 E3 9F 36 FD 13 03 C1 00 1A 97 B3 06
-F7 41 93 FB 76 00 63 89 0B 06 85 4A 63 8F 5B 05
-09 4A 63 87 4B 05 0D 4B 63 8F 6B 03 91 49 63 87
-3B 03 15 43 63 8F 6B 00 99 46 63 87 DB 00 83 4B
-07 00 7D 17 23 00 78 01 83 4A 07 00 7D 17 23 00
-58 01 03 4A 07 00 7D 17 23 00 48 01 03 4B 07 00
-7D 17 23 00 68 01 83 49 07 00 7D 17 23 00 38 01
-03 43 07 00 7D 17 23 00 68 00 83 46 07 00 7D 17
-23 00 D8 00 63 05 F7 05 83 4B 07 00 61 17 23 00
-78 01 83 4A 77 00 23 00 58 01 03 4A 67 00 23 00
-48 01 03 4B 57 00 23 00 68 01 83 49 47 00 23 00
-38 01 03 43 37 00 23 00 68 00 83 46 27 00 23 00
-D8 00 83 4B 17 00 23 00 78 01 E3 1F F7 FB 4A 95
-AD B4 98 41 91 05 83 4B 07 00 63 82 0B 06 23 00
-78 01 03 49 17 00 63 0C 09 04 23 00 28 01 83 4A
-27 00 63 86 0A 04 23 00 58 01 03 4A 37 00 63 00
-0A 04 23 00 48 01 03 4B 47 00 63 0A 0B 02 23 00
-68 01 83 49 57 00 63 84 09 02 23 00 38 01 03 43
-67 00 63 0E 03 00 23 00 68 00 83 46 77 00 81 CA
-21 07 23 00 D8 00 83 4B 07 00 E3 92 0B FA 05 05
-ED BA 03 A3 05 00 01 47 91 05 BA 86 13 79 73 00
-05 07 93 0A C1 00 33 8A EA 00 13 0B 09 03 A3 0F
-6A FF 93 5B 33 00 BA 89 63 88 0B 0E 13 F9 7B 00
-BA 86 93 0A C1 00 05 07 33 8A EA 00 13 0B 09 03
-A3 0F 6A FF 93 5B 63 00 63 88 0B 0C 13 F9 7B 00
-BA 86 93 0A C1 00 13 87 29 00 33 8A EA 00 13 0B
-09 03 A3 0F 6A FF 93 5B 93 00 63 87 0B 0A 13 F9
-7B 00 BA 86 93 0A C1 00 13 87 39 00 33 8A EA 00
-13 0B 09 03 A3 0F 6A FF 93 5B C3 00 63 86 0B 08
-13 F9 7B 00 BA 86 93 0A C1 00 13 87 49 00 33 8A
-EA 00 13 0B 09 03 A3 0F 6A FF 93 5B F3 00 63 85
-0B 06 13 F9 7B 00 BA 86 93 0A C1 00 13 87 59 00
-33 8A EA 00 13 0B 09 03 A3 0F 6A FF 93 5B 23 01
-63 84 0B 04 13 F9 7B 00 BA 86 93 0A C1 00 13 87
-69 00 33 8A EA 00 13 0B 09 03 A3 0F 6A FF 93 5B
-53 01 63 83 0B 02 BA 86 13 F9 7B 00 13 87 79 00
-93 09 C1 00 B3 8A E9 00 13 0A 09 03 A3 8F 4A FF
-13 53 83 01 E3 1B 03 EE 13 0B C1 00 DA 96 B3 8B
-F6 41 93 F9 7B 00 63 89 09 06 05 49 63 8F 29 05
-89 4A 63 87 59 05 0D 4A 63 8F 49 03 11 43 63 87
-69 02 15 4B 63 8F 69 01 99 4B 63 87 79 01 83 C9
-06 00 FD 16 23 00 38 01 03 C9 06 00 FD 16 23 00
-28 01 83 CA 06 00 FD 16 23 00 58 01 03 CA 06 00
-FD 16 23 00 48 01 03 C3 06 00 FD 16 23 00 68 00
-03 CB 06 00 FD 16 23 00 68 01 83 CB 06 00 FD 16
-23 00 78 01 63 85 F6 05 83 C9 06 00 E1 16 23 00
-38 01 03 C9 76 00 23 00 28 01 83 CA 66 00 23 00
-58 01 03 CA 56 00 23 00 48 01 03 C3 46 00 23 00
-68 00 03 CB 36 00 23 00 68 01 83 CB 26 00 23 00
-78 01 83 C9 16 00 23 00 38 01 E3 9F F6 FB 3A 95
-29 B8 83 AA 05 00 91 05 56 87 63 C3 0A 26 01 49
-33 6B D7 03 13 0A C1 00 CA 89 05 09 B3 0B 2A 01
-4A 8A 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF 71 CB
-33 6B D7 03 CA 89 93 0B C1 00 05 09 CA 9B 33 47
-D7 03 13 0B 0B 03 A3 8F 6B FF 45 CF 33 6B D7 03
-CA 89 93 0B C1 00 13 09 2A 00 CA 9B 33 47 D7 03
-13 0B 0B 03 A3 8F 6B FF 49 CF 33 6B D7 03 CA 89
-93 0B C1 00 13 09 3A 00 CA 9B 33 47 D7 03 13 0B
-0B 03 A3 8F 6B FF 35 CF 33 6B D7 03 CA 89 93 0B
-C1 00 13 09 4A 00 CA 9B 33 47 D7 03 13 0B 0B 03
-A3 8F 6B FF 39 CF 33 6B D7 03 CA 89 93 0B C1 00
-13 09 5A 00 CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F
-6B FF 21 C3 33 6B D7 03 CA 89 93 0B C1 00 13 09
-6A 00 CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF
-0D C3 33 6B D7 03 CA 89 13 09 7A 00 13 0A C1 00
-B3 0B 2A 01 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF
-01 FB 4A 87 63 55 D9 08 33 8A 26 41 93 7B 7A 00
-63 8C 0B 04 05 4B 63 84 6B 05 09 4A 63 8E 4B 03
-0D 4B 63 88 6B 03 11 4A 63 82 4B 03 15 4B 63 8C
-6B 01 19 4A 63 86 4B 01 23 00 68 00 13 07 19 00
-23 00 68 00 05 07 23 00 68 00 05 07 23 00 68 00
-05 07 23 00 68 00 05 07 23 00 68 00 05 07 23 00
-68 00 05 07 63 05 D7 02 23 00 68 00 23 00 68 00
-23 00 68 00 23 00 68 00 23 00 68 00 23 00 68 00
-23 00 68 00 23 00 68 00 21 07 E3 1F D7 FC 74 00
-33 87 36 01 33 03 F7 41 93 7B 73 00 63 89 0B 06
-05 4B 63 8F 6B 05 09 4A 63 87 4B 05 8D 46 63 8F
-DB 02 11 43 63 87 6B 02 15 4B 63 8F 6B 01 19 4A
-63 87 4B 01 83 4B 07 00 7D 17 23 00 78 01 83 46
-07 00 7D 17 23 00 D8 00 03 43 07 00 7D 17 23 00
-68 00 03 4B 07 00 7D 17 23 00 68 01 03 4A 07 00
-7D 17 23 00 48 01 83 4B 07 00 7D 17 23 00 78 01
-83 46 07 00 7D 17 23 00 D8 00 63 05 F7 05 03 43
-07 00 61 17 23 00 68 00 03 4B 77 00 23 00 68 01
-03 4A 67 00 23 00 48 01 83 4B 57 00 23 00 78 01
-83 46 47 00 23 00 D8 00 03 43 37 00 23 00 68 00
-03 4B 27 00 23 00 68 01 03 4A 17 00 23 00 48 01
-E3 1F F7 FB E3 DD 0A B4 13 89 29 00 4A 95 6F F0
-CF DB 1A 87 13 03 00 02 63 14 77 E4 6F F0 0F E7
-33 07 50 41 23 00 78 00 FD 16 51 BB 01 45 82 80
-39 71 13 03 41 02 2E D2 9A 85 06 CE 32 D4 36 D6
-3A D8 3E DA 42 DC 46 DE 1A C6 EF F0 CF D2 F2 40
-21 61 82 80 39 71 13 03 41 02 2E D2 9A 85 06 CE
-32 D4 36 D6 3A D8 3E DA 42 DC 46 DE 1A C6 EF F0
-8F D0 F2 40 21 61 82 80 19 C6 03 15 25 00 83 95
-25 00 0D 8D 82 80 83 17 05 00 13 97 07 01 93 52
-07 01 13 F3 07 F0 93 D3 82 00 33 66 73 00 23 10
-C5 00 83 96 05 00 03 15 25 00 13 98 06 01 93 58
-08 01 13 FE 06 F0 93 DE 88 00 33 6F DE 01 23 90
-E5 01 83 95 25 00 0D 8D 82 80 03 97 05 00 83 97
-25 00 23 10 E5 00 23 11 F5 00 82 80 D1 48 B3 52
-15 03 61 73 23 A0 05 00 13 07 03 08 93 87 05 01
-93 86 85 00 93 88 E2 FF 13 98 38 00 2E 98 23 A2
-05 01 13 9E 28 00 23 11 08 00 23 10 E8 00 42 9E
-13 05 48 00 63 FB 07 3F 13 07 88 00 63 77 C7 3F
-23 A4 05 00 94 C1 C8 C5 93 43 F3 FF FD 5E 23 12
-D8 01 23 13 78 00 63 8D 08 20 13 1F 06 01 E1 7F
-93 F2 38 00 13 5F 0F 01 01 45 93 CE FF FF 63 8D
-02 0C 05 43 63 84 62 08 89 43 63 8D 72 02 93 82
-87 00 63 F8 02 03 93 0F 47 00 63 F4 CF 03 13 15
-3F 00 94 C3 93 76 85 07 9C C1 13 93 86 00 D8 C3
-B3 63 D3 00 23 10 77 00 23 11 D7 01 BE 86 7E 87
-96 87 05 45 93 82 87 00 63 F1 02 05 93 03 47 00
-63 FD C3 03 93 1F 05 01 93 DF 0F 01 33 C3 EF 01
-0E 03 13 73 83 07 93 FF 7F 00 94 C3 B3 66 F3 01
-9C C1 13 93 86 00 D8 C3 B3 6F D3 00 23 10 F7 01
-23 11 D7 01 BE 86 1E 87 96 87 05 05 93 82 87 00
-63 F1 02 05 93 03 47 00 63 FD C3 03 13 13 05 01
-93 5F 03 01 33 C3 EF 01 0E 03 13 73 83 07 93 FF
-7F 00 94 C3 B3 66 F3 01 9C C1 13 93 86 00 D8 C3
-B3 6F D3 00 23 10 F7 01 23 11 D7 01 BE 86 1E 87
-96 87 05 05 63 86 A8 12 93 82 87 00 63 F1 02 05
-93 03 47 00 63 FD C3 03 13 13 05 01 93 5F 03 01
-33 C3 EF 01 0E 03 13 73 83 07 93 FF 7F 00 94 C3
-B3 66 F3 01 9C C1 13 93 86 00 D8 C3 B3 6F D3 00
-23 10 F7 01 23 11 D7 01 BE 86 1E 87 96 87 93 82
-87 00 05 05 63 F1 02 05 93 03 47 00 63 FD C3 03
-13 13 05 01 93 5F 03 01 33 C3 EF 01 0E 03 13 73
-83 07 93 FF 7F 00 94 C3 B3 66 F3 01 9C C1 13 93
-86 00 D8 C3 B3 6F D3 00 23 10 F7 01 23 11 D7 01
-BE 86 1E 87 96 87 93 82 87 00 13 03 15 00 63 F1
-02 05 93 03 47 00 63 FD C3 03 93 1F 03 01 93 DF
-0F 01 33 C3 EF 01 0E 03 13 73 83 07 93 FF 7F 00
-94 C3 B3 66 F3 01 9C C1 13 93 86 00 D8 C3 B3 6F
-D3 00 23 10 F7 01 23 11 D7 01 BE 86 1E 87 96 87
-93 82 87 00 13 03 25 00 63 F1 02 05 93 03 47 00
-63 FD C3 03 93 1F 03 01 93 DF 0F 01 33 C3 EF 01
-0E 03 13 73 83 07 93 FF 7F 00 94 C3 B3 66 F3 01
-9C C1 13 93 86 00 D8 C3 B3 6F D3 00 23 10 F7 01
-23 11 D7 01 BE 86 1E 87 96 87 0D 05 E3 9E A8 EC
-88 42 29 CD 15 48 33 DF 08 03 91 68 05 47 13 8E
-F8 FF 11 A8 03 28 05 00 23 91 EE 00 05 07 63 0F
-08 02 AA 86 42 85 83 AE 46 00 E3 65 E7 FF 93 12
-07 01 93 D3 02 01 13 83 13 00 93 1F 83 00 93 F7
-0F 70 B3 C6 C3 00 03 28 05 00 B3 E8 D7 00 B3 F2
-C8 01 23 91 5E 00 05 07 E3 15 08 FC 05 48 81 48
-01 45 81 4F 85 42 13 7F 78 00 85 0F AE 87 01 47
-63 0B 0F 04 05 46 63 03 CF 04 09 4E 63 0D CF 03
-8D 4E 63 07 DF 03 91 43 63 01 7F 02 15 43 63 0B
-6F 00 99 46 63 05 DF 00 9C 41 05 47 A5 C7 9C 43
-05 07 AD C3 9C 43 05 07 B1 CF 9C 43 05 07 B9 CB
-9C 43 05 07 A1 CB 9C 43 05 07 A9 C7 9C 43 05 07
-B1 C3 63 02 E8 0C 9C 43 05 07 3A 8F 85 CF 9C 43
-05 07 8D CB 9C 43 13 07 2F 00 8D C7 9C 43 13 07
-3F 00 8D C3 9C 43 13 07 4F 00 89 CF 9C 43 13 07
-5F 00 89 CB 9C 43 13 07 6F 00 89 C7 9C 43 13 07
-7F 00 E1 F3 AE 86 42 86 BE 85 25 C7 51 C2 C9 C1
-83 AE 46 00 03 AE 45 00 83 97 0E 00 83 13 2E 00
-03 93 2E 00 13 9F 07 01 13 5F 0F 01 13 5F 8F 00
-93 F7 07 F0 B3 E7 E7 01 23 90 FE 00 03 1F 0E 00
-33 03 73 40 93 1E 0F 01 93 D3 0E 01 93 77 0F F0
-13 DF 83 00 B3 EE E7 01 23 10 DE 01 63 5A 60 02
-2E 8E 8C 41 7D 16 63 8D 08 00 23 A0 C8 01 F2 88
-51 FF 1D C2 85 C5 2E 8E 7D 16 8C 41 E3 97 08 FE
-72 85 F2 88 F5 B7 AE 86 42 87 42 86 BE 85 B5 BF
-36 8E 7D 17 94 42 C1 BF E3 97 05 EC 23 A0 08 00
-63 89 5F 00 06 08 19 C5 AA 85 81 4F 81 48 01 45
-5D BD 82 80 23 20 00 00 02 90 B6 87 2A 87 81 46
-1D B1 03 28 06 00 93 08 88 00 63 F1 E8 04 98 42
-13 03 47 00 63 7C F3 02 23 20 16 01 1C 41 83 92
-05 00 03 96 25 00 23 20 F8 00 23 20 05 01 23 22
-E8 00 83 A3 06 00 13 85 43 00 88 C2 83 25 48 00
-42 85 23 90 55 00 23 91 C5 00 82 80 01 48 42 85
-82 80 AA 87 08 41 D4 43 50 41 18 41 D0 C3 54 C1
-98 C3 23 20 05 00 82 80 D0 41 54 41 98 41 50 C1
-D4 C1 18 C1 88 C1 82 80 03 96 25 00 63 4D 06 00
-01 E5 05 A8 08 41 05 C5 03 23 45 00 83 13 23 00
-E3 9A C3 FE 82 80 01 CD 03 97 05 00 19 A0 08 41
-01 C9 5C 41 83 C2 07 00 E3 9B E2 FE 82 80 01 45
-82 80 82 80 2D C9 1C 41 81 48 23 20 15 01 AA 86
-BD C3 98 43 94 C3 3E 85 25 C3 83 22 07 00 1C C3
-3A 85 63 8A 02 04 03 A3 02 00 23 A0 E2 00 16 85
-63 03 03 04 83 23 03 00 23 20 53 00 1A 85 63 8C
-03 02 83 A5 03 00 23 A0 63 00 1E 85 8D C5 03 A8
-05 00 23 A0 75 00 2E 85 63 0F 08 00 03 26 08 00
-23 20 B8 00 42 85 C2 88 19 C6 32 85 1C 41 23 20
-15 01 AA 86 D9 FF 82 80 82 80 79 71 22 D4 5A C8
-5E C6 66 C2 6A C0 06 D6 26 D2 4A D0 4E CE 52 CC
-56 CA 62 C4 2A 84 2E 8B 32 8D 85 4B 85 4C 63 01
-04 10 01 4C 81 44 81 4A 13 F7 7B 00 05 0C A2 87
-01 49 31 CB 85 46 63 03 D7 04 89 40 63 0D 17 02
-8D 42 63 07 57 02 11 43 63 01 67 02 95 43 63 0B
-77 00 19 45 63 05 A7 00 1C 40 05 49 A5 C7 9C 43
-05 09 AD C3 9C 43 05 09 B1 CF 9C 43 05 09 B9 CB
-9C 43 05 09 A1 CB 9C 43 05 09 A9 C7 9C 43 05 09
-B1 C3 63 81 2B 05 9C 43 05 09 CA 85 85 CF 9C 43
-05 09 8D CB 9C 43 13 89 25 00 8D C7 9C 43 13 89
-35 00 8D C3 9C 43 13 89 45 00 89 CF 9C 43 13 89
-55 00 89 CB 9C 43 13 89 65 00 89 C7 9C 43 13 89
-75 00 E1 F3 22 8A DE 89 3E 84 63 04 09 02 63 8C
-09 02 15 C8 4C 40 03 25 4A 00 6A 86 02 9B 63 54
-A0 02 22 86 00 40 FD 19 81 CC 90 C0 B2 84 E3 10
-09 FE 63 8F 09 00 11 CC 22 86 FD 19 00 40 F5 F4
-B2 8A B2 84 ED B7 52 86 7D 19 03 2A 0A 00 E9 BF
-01 FC 23 A0 04 00 63 08 9C 01 86 0B 56 84 01 B7
-23 20 00 00 02 90 B2 50 22 54 92 54 02 59 F2 49
-62 4A 42 4B B2 4B 22 4C 92 4C 02 4D 56 85 D2 4A
-45 61 82 80 1D 71 A6 CA CE C6 D2 C4 5E DE FD 74
-13 1A 07 01 86 CE A2 CC CA C8 D6 C2 DA C0 62 DC
-66 DA 6A D8 6E D6 2E C2 32 C6 AA 89 B6 8B D9 8C
-13 5A 0A 01 19 E1 6F 10 70 48 93 18 15 00 33 0F
-A0 40 B2 98 13 13 1F 00 C6 86 01 46 0A 0F 33 05
-D3 00 B3 85 A6 40 93 80 E5 FF 93 D2 10 00 93 83
-12 00 13 F4 73 00 AA 87 59 C4 05 48 63 0C 04 07
-09 49 63 02 24 07 8D 4A 63 08 54 05 11 4B 63 0E
-64 03 15 4C 63 04 84 03 99 4C 63 0A 94 01 03 5D
-05 00 93 07 25 00 33 0E AA 01 23 10 C5 01 83 DE
-07 00 89 07 B3 0F DA 01 23 9F F7 FF 83 DD 07 00
-89 07 B3 05 BA 01 23 9F B7 FE 83 D0 07 00 89 07
-B3 02 1A 00 23 9F 57 FE 83 D3 07 00 89 07 33 04
-7A 00 23 9F 87 FE 03 D8 07 00 89 07 33 09 0A 01
-23 9F 27 FF 83 DA 07 00 89 07 33 0B 5A 01 23 9F
-67 FF 63 85 D7 06 03 DC 07 00 83 DC 27 00 03 DD
-47 00 83 DF 67 00 83 DE 87 00 03 DE A7 00 83 DD
-C7 00 83 D5 E7 00 B3 00 8A 01 B3 03 9A 01 B3 02
-AA 01 33 04 FA 01 33 09 DA 01 B3 0A CA 01 33 08
-BA 01 33 0B BA 00 23 90 17 00 23 91 77 00 23 92
-57 00 23 93 87 00 23 94 27 01 23 95 57 01 23 96
-07 01 23 97 67 01 C1 07 E3 9F D7 F8 93 0E 16 00
-B3 06 E5 41 63 84 D9 01 76 86 D5 B5 92 43 33 08
-30 41 01 4F 81 4F 13 15 28 00 33 8D 68 00 B3 87
-A8 41 13 8C E7 FF 93 5C 1C 00 13 8E 1C 00 93 1D
-2F 00 93 75 7E 00 B3 87 7D 00 EA 86 D1 CD 85 40
-63 82 15 08 89 42 63 87 55 06 0D 44 63 8C 85 04
-11 49 63 81 25 05 95 4A 63 86 55 03 19 4B 63 8B
-65 01 03 1C 0D 00 93 06 2D 00 91 07 B3 0C EC 02
-23 AE 97 FF 03 9E 06 00 91 07 89 06 B3 0D EE 02
-23 AE B7 FF 83 95 06 00 91 07 89 06 B3 80 E5 02
-23 AE 17 FE 83 92 06 00 91 07 89 06 33 84 E2 02
-23 AE 87 FE 03 99 06 00 91 07 89 06 B3 0A E9 02
-23 AE 57 FF 03 9B 06 00 91 07 89 06 33 0C EB 02
-23 AE 87 FF 83 9C 06 00 91 07 89 06 33 8E EC 02
-23 AE C7 FF 63 87 16 07 83 9D 06 00 83 90 26 00
-03 9B 46 00 83 9A 66 00 03 99 86 00 03 94 A6 00
-83 92 C6 00 83 95 E6 00 B3 8C ED 02 C1 06 93 87
-07 02 33 8C E0 02 23 A0 97 FF 33 0E EB 02 23 A2
-87 FF B3 8D EA 02 23 A4 C7 FF B3 00 E9 02 23 A6
-B7 FF 33 0B E4 02 23 A8 17 FE B3 8A E2 02 23 AA
-67 FF 33 89 E5 02 23 AC 57 FF 23 AE 27 FF E3 9D
-16 F9 93 86 1F 00 76 9F B3 08 AD 40 63 84 CF 00
-B6 8F E1 B5 92 4F 13 97 2E 00 81 40 7E 97 01 4E
-81 46 81 45 0E 08 33 0D A7 00 33 03 A7 41 93 03
-C3 FF 93 DE 23 00 13 84 1E 00 93 72 34 00 6A 8F
-63 8C 02 0E 85 4C 63 8A 92 05 09 4C 63 85 82 03
-F2 8D 03 2E 0D 00 93 97 00 01 93 D0 07 01 F2 96
-63 D7 D4 1A 13 8F A0 00 93 18 0F 01 93 D0 08 41
-81 46 13 0F 4D 00 F2 8F 03 2E 0F 00 13 93 00 01
-93 53 03 01 F2 96 63 DB D4 16 93 86 A3 00 93 9C
-06 01 93 D0 0C 41 81 46 11 0F 72 8C 03 2E 0F 00
-93 9D 00 01 93 D7 0D 01 F2 96 63 DC D4 12 93 88
-A7 00 93 9F 08 01 13 93 08 01 93 DE 0F 01 93 50
-03 41 81 46 11 0F 63 19 E7 07 93 8D 15 00 33 07
-0D 41 63 07 B6 14 EE 85 B9 B7 83 22 4F 00 93 8E
-AA 00 13 94 0E 01 93 53 04 41 01 49 13 9E 03 01
-B3 06 59 00 93 5C 0E 01 63 DF D4 08 03 2E 8F 00
-93 87 AC 00 93 9A 07 01 13 DB 0A 41 81 46 13 19
-0B 01 F2 96 93 58 09 01 63 D0 D4 0A 93 82 A8 00
-93 9C 02 01 13 9C 02 01 93 DE 0C 01 93 50 0C 41
-81 46 31 0F E3 0B E7 F9 83 23 0F 00 93 9E 00 01
-13 D4 0E 01 B3 80 76 00 63 C5 14 08 33 2E 7E 00
-B3 02 C4 01 93 9C 02 01 93 DD 0C 41 03 2B 4F 00
-93 97 0D 01 11 0F 33 89 60 01 93 DA 07 01 E3 C6
-24 F7 B3 A8 63 01 83 22 4F 00 B3 8F 1A 01 13 93
-0F 01 93 53 03 41 13 9E 03 01 B3 06 59 00 93 5C
-0E 01 E3 C5 D4 F6 33 2C 5B 00 03 2E 8F 00 B3 8D
-8C 01 93 90 0D 01 13 DB 00 41 13 19 0B 01 F2 96
-93 58 09 01 E3 C4 D4 F6 B3 AF C2 01 33 83 F8 01
-93 13 03 01 13 14 03 01 93 DE 03 01 93 50 04 41
-8D B7 93 06 A4 00 13 9C 06 01 93 5D 0C 41 81 40
-B5 BF B3 20 CC 01 33 8B 17 00 93 1A 0B 01 13 19
-0B 01 93 DE 0A 01 93 50 09 41 E9 B5 B3 AE CF 01
-33 84 D3 01 93 12 04 01 93 D0 02 41 71 B5 33 AB
-CD 01 B3 8A 60 01 13 99 0A 01 93 50 09 41 91 BD
-A9 67 93 F5 10 00 13 FD F0 0F 93 8A 17 00 33 0B
-B0 40 33 FE 6A 01 13 59 1D 00 B3 48 2E 01 93 F6
-18 00 13 D7 8E 00 93 57 2D 00 93 5D 1E 00 91 CA
-E9 7F 13 83 1F 00 B3 C3 6D 00 93 9E 03 01 93 DD
-0E 01 33 C4 B7 01 93 70 14 00 93 D2 17 00 13 D8
-1D 00 63 8B 00 00 E9 7C 13 8C 1C 00 33 4F 88 01
-13 15 0F 01 13 58 05 01 33 C6 02 01 93 75 16 00
-13 DD 27 00 13 59 18 00 91 C9 69 7B 93 0A 1B 00
-B3 4D 59 01 13 9E 0D 01 13 59 0E 01 B3 48 A9 01
-93 F6 18 00 93 DF 37 00 93 50 19 00 91 CA 69 73
-93 03 13 00 B3 CE 70 00 13 94 0E 01 93 50 04 01
-B3 C2 F0 01 93 FC 12 00 13 DC 47 00 93 D5 10 00
-63 8B 0C 00 69 7F 13 05 1F 00 33 C8 A5 00 13 16
-08 01 93 55 06 01 33 4D BC 00 13 7B 1D 00 95 83
-93 D8 15 00 63 0B 0B 00 E9 7A 13 8E 1A 00 B3 CD
-C8 01 13 99 0D 01 93 58 09 01 93 F6 18 00 13 D4
-18 00 63 8B F6 00 E9 7F 13 83 1F 00 B3 43 64 00
-93 9E 03 01 13 D4 0E 01 B3 40 87 00 93 F2 10 00
-93 5C 17 00 13 56 14 00 63 8B 02 00 69 7C 13 0F
-1C 00 33 45 E6 01 13 18 05 01 13 56 08 01 B3 C5
-CC 00 13 FD 15 00 13 5B 27 00 13 59 16 00 63 0B
-0D 00 E9 77 93 8A 17 00 33 4E 59 01 93 1D 0E 01
-13 D9 0D 01 B3 48 69 01 93 FF 18 00 93 56 37 00
-93 50 19 00 63 8B 0F 00 69 73 93 03 13 00 B3 CE
-70 00 13 94 0E 01 93 50 04 01 B3 C2 D0 00 93 FC
-12 00 13 5C 47 00 93 D5 10 00 63 8B 0C 00 69 7F
-13 05 1F 00 33 C8 A5 00 13 16 08 01 93 55 06 01
-33 4D BC 00 13 7B 1D 00 93 5A 57 00 93 D8 15 00
-63 0B 0B 00 E9 77 13 8E 17 00 B3 CD C8 01 13 99
-0D 01 93 58 09 01 B3 CF 1A 01 93 F6 1F 00 13 53
-67 00 93 D2 18 00 91 CA E9 73 93 8E 13 00 33 C4
-D2 01 93 10 04 01 93 D2 00 01 B3 4C 53 00 13 FC
-1C 00 1D 83 93 D5 12 00 63 0B 0C 00 69 7F 13 05
-1F 00 33 C8 A5 00 13 16 08 01 93 55 06 01 13 FD
-15 00 93 DD 15 00 63 0B ED 00 69 7B 93 0A 1B 00
-B3 C7 5D 01 13 9E 07 01 93 5D 0E 01 63 94 09 00
-6F 10 60 5C 92 4C 13 94 29 00 81 45 22 86 66 85
-EF 50 B0 7B 32 4D 93 9F 19 00 66 85 B3 05 94 01
-B3 82 7F 01 81 43 26 C4 B3 84 72 41 13 83 E4 FF
-93 5E 13 00 93 80 1E 00 13 9C 13 00 13 F7 70 00
-B3 06 8D 01 5E 86 81 47 45 C7 05 4F 63 07 E7 09
-09 48 63 0B 07 07 0D 4B 63 0F 67 05 91 4A 63 03
-57 05 15 4E 63 07 C7 03 19 49 63 0B 27 01 83 98
-06 00 83 97 0B 00 89 06 13 86 2B 00 B3 87 F8 02
-03 94 06 00 83 1C 06 00 89 06 09 06 B3 0F 94 03
-FE 97 83 94 06 00 03 13 06 00 89 06 09 06 B3 8E
-64 02 F6 97 83 90 06 00 03 1C 06 00 89 06 09 06
-33 87 80 03 BA 97 03 9F 06 00 03 18 06 00 89 06
-09 06 33 0B 0F 03 DA 97 83 9A 06 00 03 1E 06 00
-89 06 09 06 33 89 CA 03 CA 97 83 98 06 00 03 14
-06 00 09 06 89 06 B3 8C 88 02 E6 97 63 06 56 08
-83 9F 06 00 03 13 06 00 83 90 26 00 83 1A 26 00
-33 87 6F 02 83 94 46 00 03 1C 46 00 83 9E 66 00
-03 1B 66 00 03 9E 86 00 03 19 86 00 83 9C A6 00
-03 14 A6 00 83 98 C6 00 33 83 50 03 B3 80 E7 00
-83 1F C6 00 03 98 E6 00 03 1F E6 00 41 06 C1 06
-B3 87 84 03 B3 8A 60 00 B3 84 6E 03 33 8C FA 00
-B3 0E 2E 03 33 0B 9C 00 33 87 8C 02 33 0E DB 01
-33 89 F8 03 B3 0C EE 00 33 04 E8 03 B3 88 2C 01
-B3 87 88 00 E3 1E 56 F6 1C C1 11 05 CE 93 E3 95
-A5 EA A2 44 B3 02 30 41 13 95 22 00 81 47 01 43
-01 48 81 46 13 96 32 00 33 8D A5 00 B3 8F A5 41
-13 8F CF FF 93 50 2F 00 93 8A 10 00 13 FC 3A 00
-EA 8E 63 02 0C 52 05 4B 63 09 6C 05 09 47 63 04
-EC 02 9A 8E 03 23 0D 00 C2 07 13 DE 07 01 1A 98
-63 DF 04 5D 13 08 AE 00 93 18 08 01 93 D7 08 41
-01 48 93 0E 4D 00 9A 83 03 A3 0E 00 93 92 07 01
-93 DF 02 01 1A 98 63 D3 04 5B 13 8C AF 00 13 1B
-0C 01 93 57 0B 41 01 48 91 0E 1A 87 03 A3 0E 00
-C2 07 13 DE 07 01 1A 98 63 D5 04 57 13 08 AE 00
-93 13 08 01 93 12 08 01 93 D0 03 01 93 D7 02 41
-01 48 91 0E 63 91 D5 4B 85 06 B3 05 CD 40 E3 9D
-D9 F4 93 F8 F7 0F 13 D9 80 00 33 CD B8 01 13 7E
-1D 00 93 DC 18 00 93 D2 1D 00 63 0B 0E 00 69 74
-13 03 14 00 B3 C3 62 00 13 98 03 01 93 52 08 01
-B3 CF 5C 00 13 FF 1F 00 93 D0 28 00 13 D7 12 00
-63 0B 0F 00 E9 7A 13 8C 1A 00 B3 47 87 01 13 9B
-07 01 13 57 0B 01 B3 CE E0 00 13 F5 1E 00 93 DD
-38 00 13 5E 17 00 11 C9 69 76 93 06 16 00 B3 45
-DE 00 13 9D 05 01 13 5E 0D 01 B3 CC CD 01 13 F4
-1C 00 13 D3 48 00 13 5F 1E 00 11 C8 E9 73 13 88
-13 00 B3 42 0F 01 93 9F 02 01 13 DF 0F 01 B3 40
-E3 01 93 FA 10 00 13 DC 58 00 13 55 1F 00 63 8B
-0A 00 69 7B 13 07 1B 00 B3 47 E5 00 93 9E 07 01
-13 D5 0E 01 B3 4D AC 00 93 F6 1D 00 13 D6 68 00
-13 54 15 00 91 CA E9 75 13 8D 15 00 33 4E A4 01
-93 1C 0E 01 13 D4 0C 01 33 43 86 00 93 73 13 00
-93 D8 78 00 93 50 14 00 63 8B 03 00 69 78 93 02
-18 00 B3 CF 50 00 13 9F 0F 01 93 50 0F 01 93 FA
-10 00 93 DE 10 00 63 8B 1A 01 69 7C 13 0B 1C 00
-33 C7 6E 01 93 17 07 01 93 DE 07 01 33 C5 2E 01
-93 7D 15 00 13 56 19 00 93 DC 1E 00 63 8B 0D 00
-E9 76 93 85 16 00 33 CD BC 00 13 1E 0D 01 93 5C
-0E 01 33 C4 CC 00 13 73 14 00 93 53 29 00 13 DF
-1C 00 63 0B 03 00 E9 78 13 88 18 00 B3 42 0F 01
-93 9F 02 01 13 DF 0F 01 B3 40 7F 00 93 FA 10 00
-13 5C 39 00 13 55 1F 00 63 8B 0A 00 69 7B 13 07
-1B 00 B3 47 E5 00 93 9E 07 01 13 D5 0E 01 B3 4D
-AC 00 13 F6 1D 00 93 56 49 00 13 54 15 00 11 CA
-E9 75 13 8D 15 00 33 4E A4 01 93 1C 0E 01 13 D4
-0C 01 33 C3 86 00 93 73 13 00 93 58 59 00 93 50
-14 00 63 8B 03 00 69 78 93 02 18 00 B3 CF 50 00
-13 9F 0F 01 93 50 0F 01 B3 CA 18 00 13 FC 1A 00
-13 5B 69 00 93 DD 10 00 63 0B 0C 00 69 77 93 0E
-17 00 B3 C7 DD 01 13 95 07 01 93 5D 05 01 33 46
-BB 01 93 76 16 00 13 59 79 00 13 D4 1D 00 91 CA
-E9 75 13 8D 15 00 33 4E A4 01 93 1C 0E 01 13 D4
-0C 01 93 53 14 00 13 73 14 00 1E C8 63 0C 23 01
-E9 78 13 88 18 00 B3 C2 03 01 93 9F 02 01 13 DF
-0F 01 7A C8 81 4A 81 42 63 88 09 32 B2 40 13 9C
-29 00 13 94 19 00 01 47 52 CE 5E C4 86 8A 33 09
-14 00 62 CA 01 4B 26 CC 3A 8A E2 8B 92 4E 93 14
-2A 00 5E 86 33 85 D4 01 81 45 EF 50 10 30 A2 4F
-2A 8F 01 45 B3 07 59 41 93 8D E7 FF 13 D6 1D 00
-93 06 16 00 13 FD 76 00 7E 86 D6 86 81 47 63 06
-0D 0A 85 45 63 08 BD 08 09 4E 63 0C CD 07 8D 4C
-63 00 9D 07 11 43 63 04 6D 04 95 43 63 08 7D 02
-99 48 63 0C 1D 01 03 98 0A 00 83 92 0F 00 93 86
-2A 00 33 86 8F 00 B3 07 58 02 83 90 06 00 03 1C
-06 00 89 06 22 96 33 87 80 03 BA 97 83 94 06 00
-83 1E 06 00 89 06 22 96 B3 8D D4 03 EE 97 03 9D
-06 00 83 15 06 00 89 06 22 96 33 0E BD 02 F2 97
-83 9C 06 00 03 13 06 00 89 06 22 96 B3 83 6C 02
-9E 97 83 98 06 00 03 18 06 00 89 06 22 96 B3 82
-08 03 96 97 83 90 06 00 03 1C 06 00 89 06 22 96
-33 87 80 03 BA 97 63 03 D9 0A B3 04 86 00 83 9C
-06 00 03 13 06 00 B3 8E 84 00 03 9E 04 00 03 9D
-26 00 B3 83 8E 00 83 90 46 00 83 9D 0E 00 33 87
-6C 02 B3 85 83 00 83 9E 66 00 83 9C 03 00 33 88
-85 00 03 93 86 00 03 9C 05 00 83 98 A6 00 83 13
-08 00 B3 02 88 00 33 0D CD 03 03 98 C6 00 33 86
-82 00 83 92 02 00 83 95 E6 00 03 1E 06 00 BA 97
-C1 06 22 96 B3 84 B0 03 B3 80 A7 01 B3 8D 9E 03
-B3 8E 90 00 B3 0C 83 03 33 87 BE 01 33 83 78 02
-33 0C 97 01 B3 08 58 02 B3 03 6C 00 33 88 C5 03
-33 8D 13 01 B3 07 0D 01 E3 11 D9 F6 23 20 FF 00
-93 06 15 00 11 0F 89 0F 63 84 D9 12 36 85 59 B5
-33 23 F3 01 03 A9 4E 00 B3 8A 60 00 13 9C 0A 01
-93 57 0C 41 93 9C 07 01 B3 08 2E 01 91 0E 13 D4
-0C 01 63 DE 14 09 83 AA 4E 00 13 0F A4 00 93 10
-0F 01 93 DF 00 41 81 48 13 93 0F 01 33 8B 58 01
-13 5C 03 01 63 DF 64 09 03 A3 8E 00 93 0C AC 00
-13 94 0C 01 13 59 04 41 01 4B 93 18 09 01 33 08
-6B 00 93 D3 08 01 63 D0 04 0B 13 8C A3 00 13 1B
-0C 01 13 17 0C 01 93 50 0B 01 93 57 07 41 01 48
-B1 0E E3 83 D5 B7 83 AF 0E 00 13 9F 07 01 93 50
-0F 01 33 0E F8 01 E3 D5 C4 F7 03 A9 4E 00 13 8B
-A0 00 13 17 0B 01 93 57 07 41 01 4E 93 9C 07 01
-B3 08 2E 01 91 0E 13 D4 0C 01 E3 C6 14 F7 33 A8
-2F 01 83 AA 4E 00 B3 03 04 01 93 92 03 01 93 DF
-02 41 13 93 0F 01 33 8B 58 01 13 5C 03 01 E3 C5
-64 F7 33 27 59 01 03 A3 8E 00 B3 07 EC 00 13 9E
-07 01 13 59 0E 41 93 18 09 01 33 08 6B 00 93 D3
-08 01 E3 C4 04 F7 B3 A2 6A 00 B3 8F 53 00 13 9F
-0F 01 93 9A 0F 01 93 50 0F 01 93 D7 0A 41 8D B7
-13 0F 1B 00 A2 9A 4E 9A 22 99 63 00 AB 7E 7A 8B
-35 BB 33 29 67 00 B3 0C 2E 01 13 94 0C 01 93 98
-0C 01 93 50 04 01 93 D7 08 41 61 BC 33 AF 63 00
-B3 80 EF 01 93 9A 00 01 93 D7 0A 41 B1 BC 33 A9
-6E 00 B3 0C 2E 01 13 94 0C 01 93 57 04 41 15 B4
-93 72 FD 0F 93 DA 8E 00 C2 47 93 DF 12 00 33 C9
-57 00 13 7E 19 00 93 DC 17 00 63 0B 0E 00 E9 76
-93 80 16 00 B3 CD 1C 00 93 9E 0D 01 93 DC 0E 01
-33 CD 9F 01 13 73 1D 00 13 DC 22 00 13 D8 1C 00
-63 0B 03 00 E9 78 13 8F 18 00 33 45 E8 01 93 15
-05 01 13 D8 05 01 B3 43 0C 01 13 F7 13 00 13 D6
-32 00 13 5E 18 00 11 CB 69 7B 93 07 1B 00 33 44
-FE 00 13 19 04 01 13 5E 09 01 B3 4F CE 00 93 F0
-1F 00 93 D6 42 00 13 53 1E 00 63 8B 00 00 E9 7D
-93 8E 1D 00 B3 4C D3 01 13 9D 0C 01 13 53 0D 01
-33 4C D3 00 93 78 1C 00 13 DF 52 00 13 57 13 00
-63 8B 08 00 69 75 93 05 15 00 33 48 B7 00 93 13
-08 01 13 D7 03 01 33 46 E7 01 13 7B 16 00 93 D7
-62 00 93 50 17 00 63 0B 0B 00 69 79 13 0E 19 00
-33 C4 C0 01 93 1F 04 01 93 D0 0F 01 B3 C6 F0 00
-93 FD 16 00 93 D2 72 00 13 DC 10 00 63 8B 0D 00
-E9 7E 93 8C 1E 00 33 4D 9C 01 13 13 0D 01 13 5C
-03 01 93 78 1C 00 93 53 1C 00 63 8B 58 00 69 7F
-13 05 1F 00 B3 C5 A3 00 13 98 05 01 93 53 08 01
-33 C7 53 01 13 76 17 00 13 DB 1A 00 93 DF 13 00
-11 CA E9 77 13 89 17 00 33 CE 2F 01 13 14 0E 01
-93 5F 04 01 B3 40 FB 01 93 F6 10 00 93 DD 2A 00
-13 D3 1F 00 91 CA E9 72 93 8E 12 00 B3 4C D3 01
-13 9D 0C 01 13 53 0D 01 33 4C B3 01 93 78 1C 00
-13 DF 3A 00 13 56 13 00 63 8B 08 00 69 75 93 05
-15 00 33 48 B6 00 93 13 08 01 13 D6 03 01 33 47
-E6 01 13 7B 17 00 93 D7 4A 00 93 50 16 00 63 0B
-0B 00 69 79 13 0E 19 00 33 C4 C0 01 93 1F 04 01
-93 D0 0F 01 B3 C6 17 00 93 FD 16 00 93 D2 5A 00
-13 DC 10 00 63 8B 0D 00 E9 7E 93 8C 1E 00 33 4D
-9C 01 13 13 0D 01 13 5C 03 01 B3 C8 82 01 13 FF
-18 00 13 D5 6A 00 13 5B 1C 00 63 0B 0F 00 E9 75
-13 88 15 00 B3 43 0B 01 13 96 03 01 13 5B 06 01
-33 47 AB 00 13 79 17 00 93 DA 7A 00 93 50 1B 00
-63 0B 09 00 E9 77 13 8E 17 00 33 C4 C0 01 93 1F
-04 01 93 D0 0F 01 93 F6 10 00 13 D4 10 00 63 8B
-56 01 E9 7D 93 82 1D 00 B3 4E 54 00 93 9C 0E 01
-13 D4 0C 01 81 4D 81 46 63 80 09 1A 32 4D 92 4D
-93 9A 19 00 6A 8C 33 8B AA 01 13 99 29 00 81 4C
-01 4D 13 93 2C 00 81 45 33 05 B3 01 4A 86 EF 50
-C0 58 AA 86 81 45 5E 85 B3 08 8B 41 13 8F E8 FF
-13 58 1F 00 93 03 18 00 13 F6 33 00 2A 83 E2 88
-81 4E 59 C2 05 47 63 0C E6 04 89 47 63 06 F6 02
-03 1E 0C 00 83 1F 05 00 93 08 2C 00 33 03 55 01
-B3 00 FE 03 93 DE 50 40 93 D2 20 40 13 FF F2 00
-13 F8 FE 07 B3 0E 0F 03 83 93 08 00 03 16 03 00
-89 08 56 93 B3 87 C3 02 13 D7 27 40 13 DE 57 40
-93 7F F7 00 93 70 FE 07 B3 82 1F 02 96 9E 03 9F
-08 00 03 18 03 00 89 08 56 93 B3 03 0F 03 13 D6
-23 40 93 D7 53 40 13 77 F6 00 13 FE F7 07 B3 0F
-C7 03 FE 9E 63 03 1B 0B B3 00 53 01 03 9F 08 00
-03 18 03 00 33 86 50 01 83 93 28 00 03 97 00 00
-03 1E 06 00 33 03 56 01 83 92 48 00 B3 0F 0F 03
-83 17 03 00 83 90 68 00 A1 08 56 93 33 8F E3 02
-13 D8 5F 40 93 D3 2F 40 13 F7 F3 00 93 73 F8 07
-B3 82 C2 03 13 56 5F 40 13 5E 2F 40 93 7F FE 00
-13 76 F6 07 B3 80 F0 02 13 D8 52 40 93 D7 22 40
-13 FF F7 00 93 72 F8 07 33 07 77 02 13 DE 50 40
-93 D3 20 40 93 F0 F3 00 93 77 FE 07 B3 8F CF 02
-BA 9E 33 06 5F 02 33 88 FE 01 33 8F F0 02 B3 02
-C8 00 B3 8E E2 01 E3 11 1B F7 23 A0 D6 01 93 88
-15 00 91 06 09 05 63 84 19 01 C6 85 75 B5 93 06
-1D 00 56 9C CE 9C 56 9B 63 81 A5 5F 36 8D 51 B5
-93 F6 FA 0F 93 5D 8B 00 B3 C0 86 00 13 F3 10 00
-93 DF 16 00 93 52 14 00 63 0B 03 00 69 7E 93 0E
-1E 00 33 CF D2 01 93 18 0F 01 93 D2 08 01 33 CC
-5F 00 93 7C 1C 00 13 DB 26 00 93 D4 12 00 63 8B
-0C 00 69 77 13 08 17 00 B3 C7 04 01 13 94 07 01
-93 54 04 01 33 45 9B 00 13 76 15 00 93 D5 36 00
-93 DB 14 00 11 CA E9 73 13 8D 13 00 33 C9 AB 01
-93 1A 09 01 93 DB 0A 01 B3 C0 75 01 13 F3 10 00
-93 DF 46 00 93 D2 1B 00 63 0B 03 00 69 7E 93 0E
-1E 00 33 CF D2 01 93 18 0F 01 93 D2 08 01 33 CC
-5F 00 93 7C 1C 00 13 DB 56 00 93 D4 12 00 63 8B
-0C 00 69 77 13 08 17 00 B3 C7 04 01 13 94 07 01
-93 54 04 01 33 C5 64 01 93 75 15 00 13 D6 66 00
-93 DB 14 00 91 C9 E9 73 13 8D 13 00 33 C9 AB 01
-93 1A 09 01 93 DB 0A 01 B3 C0 CB 00 13 F3 10 00
-9D 82 93 D8 1B 00 63 0B 03 00 E9 7F 13 8E 1F 00
-B3 CE C8 01 13 9F 0E 01 93 58 0F 01 93 F2 18 00
-13 D8 18 00 63 8B D2 00 69 7C 93 0C 1C 00 33 4B
-98 01 13 17 0B 01 13 58 07 01 B3 C7 0D 01 13 F4
-17 00 93 D4 1D 00 13 5D 18 00 11 C8 69 75 93 05
-15 00 33 46 BD 00 93 13 06 01 13 DD 03 01 33 C9
-A4 01 93 7A 19 00 93 DB 2D 00 13 5E 1D 00 63 8B
-0A 00 E9 70 13 83 10 00 B3 46 6E 00 93 9F 06 01
-13 DE 0F 01 B3 CE CB 01 13 FF 1E 00 93 D8 3D 00
-13 57 1E 00 63 0B 0F 00 E9 72 13 8C 12 00 B3 4C
-87 01 13 9B 0C 01 13 57 0B 01 33 C8 E8 00 13 74
-18 00 93 D4 4D 00 93 53 17 00 11 C8 69 75 93 05
-15 00 B3 C7 B3 00 13 96 07 01 93 53 06 01 33 CD
-74 00 13 79 1D 00 93 DA 5D 00 93 DF 13 00 63 0B
-09 00 E9 7B 93 80 1B 00 33 C3 1F 00 93 16 03 01
-93 DF 06 01 33 CE 5F 01 93 7E 1E 00 13 DF 6D 00
-13 DB 1F 00 63 8B 0E 00 E9 78 93 82 18 00 33 4C
-5B 00 93 1C 0C 01 13 DB 0C 01 33 47 6F 01 13 78
-17 00 93 DD 7D 00 93 57 1B 00 63 0B 08 00 69 74
-93 04 14 00 33 C5 97 00 93 15 05 01 93 D7 05 01
-13 F6 17 00 13 D5 17 00 63 0B B6 01 E9 73 13 8D
-13 00 33 49 A5 01 93 1A 09 01 13 D5 0A 01 63 8B
-09 12 32 43 B3 0B 30 41 93 90 19 00 B3 06 13 00
-93 92 1B 00 01 4F 93 9F 2B 00 33 8C 56 00 33 8E
-86 41 93 0E EE FF 93 D8 1E 00 93 8C 18 00 13 FB
-7C 00 E2 87 63 08 0B 08 05 47 63 0C EB 06 09 48
-63 02 0B 07 8D 4D 63 08 BB 05 11 44 63 0E 8B 02
-95 44 63 04 9B 02 99 45 63 0A BB 00 03 56 0C 00
-93 07 2C 00 B3 03 46 41 23 10 7C 00 03 DD 07 00
-89 07 33 09 4D 41 23 9F 27 FF 83 DA 07 00 89 07
-B3 8B 4A 41 23 9F 77 FF 83 D0 07 00 89 07 33 83
-40 41 23 9F 67 FE 03 DE 07 00 89 07 B3 0E 4E 41
-23 9F D7 FF 83 D8 07 00 89 07 B3 8C 48 41 23 9F
-97 FF 03 DB 07 00 89 07 33 07 4B 41 23 9F E7 FE
-63 85 D7 06 83 DD 07 00 03 D4 27 00 83 D4 47 00
-03 D6 67 00 03 DD 87 00 03 D8 A7 00 83 D5 C7 00
-03 D9 E7 00 B3 83 4D 41 B3 0A 44 41 B3 8B 44 41
-B3 00 46 41 33 03 4D 41 33 0E 48 41 B3 8E 45 41
-B3 08 49 41 23 90 77 00 23 91 57 01 23 92 77 01
-23 93 17 00 23 94 67 00 23 95 C7 01 23 96 D7 01
-23 97 17 01 C1 07 E3 9F D7 F8 05 0F B3 06 FC 41
-E3 95 E9 EF F6 40 66 44 13 1C 05 01 D6 44 46 49
-B6 49 26 4A 96 4A 06 4B F2 5B D2 5C 42 5D B2 5D
-13 55 0C 41 62 5C 25 61 82 80 12 44 D2 4F E2 44
-72 4A A2 4B 33 0B 30 41 33 07 F4 01 13 18 2B 00
-01 4D 01 4E 81 46 01 46 93 15 3B 00 B3 02 07 01
-B3 00 57 40 93 8D C0 FF 93 DE 2D 00 93 8C 1E 00
-13 F3 3C 00 16 8F 63 0F 03 10 05 4C 63 0A 83 05
-89 48 63 05 13 03 F2 83 03 AE 02 00 93 17 0D 01
-13 DD 07 01 F2 96 63 D1 D4 1C 13 0B AD 00 13 14
-0B 01 13 5D 04 41 81 46 13 8F 42 00 F2 8F 03 2E
-0F 00 93 10 0D 01 93 DD 00 01 F2 96 63 D5 D4 18
-93 86 AD 00 13 9C 06 01 13 5D 0C 41 81 46 11 0F
-F2 88 03 2E 0F 00 93 13 0D 01 93 D7 03 01 F2 96
-63 D6 D4 14 13 84 A7 00 93 1F 04 01 93 10 04 01
-93 DE 0F 01 13 DD 00 41 81 46 11 0F 63 1C E7 09
-93 03 16 00 33 87 B2 40 63 0C C5 F8 1E 86 B9 B7
-33 2E BE 01 83 2A 4F 00 33 83 CC 01 13 1C 03 01
-93 53 0C 41 93 97 03 01 33 0B 5D 01 11 0F 13 D9
-07 01 63 DD 64 09 03 23 4F 00 93 0E A9 00 93 9C
-0E 01 93 DD 0C 41 01 4B 13 9E 0D 01 B3 06 6B 00
-13 5C 0E 01 63 DE D4 08 03 2E 8F 00 93 07 AC 00
-13 99 07 01 93 5A 09 41 81 46 13 9B 0A 01 F2 96
-13 54 0B 01 63 DF D4 08 13 03 A4 00 13 1C 03 01
-93 18 03 01 93 5E 0C 01 13 DD 08 41 81 46 31 0F
-E3 08 E7 F7 83 2D 0F 00 93 1E 0D 01 93 DC 0E 01
-33 8D B6 01 E3 D6 A4 F7 83 2A 4F 00 93 86 AC 00
-93 98 06 01 93 D3 08 41 01 4D 93 97 03 01 33 0B
-5D 01 11 0F 13 D9 07 01 E3 C7 64 F7 33 A4 5D 01
-03 23 4F 00 B3 0F 89 00 93 90 0F 01 93 DD 00 41
-13 9E 0D 01 B3 06 6B 00 13 5C 0E 01 E3 C6 D4 F6
-B3 A8 6A 00 03 2E 8F 00 B3 03 1C 01 13 9D 03 01
-93 5A 0D 41 13 9B 0A 01 F2 96 13 54 0B 01 E3 C5
-D4 F6 B3 2F C3 01 B3 00 F4 01 93 9D 00 01 93 9C
-00 01 93 DE 0D 01 13 DD 0C 41 95 B7 33 AD C8 01
-B3 8A A7 01 13 99 0A 01 13 9B 0A 01 93 5E 09 01
-13 5D 0B 41 5D BD B3 AE CF 01 B3 8C DD 01 13 93
-0C 01 13 5D 03 41 A5 BD 33 AF C3 01 B3 0A ED 01
-13 99 0A 01 13 5D 09 41 81 B5 92 4A B3 0B 30 41
-13 95 2B 00 56 99 01 4E 81 4A 81 48 81 46 13 96
-3B 00 B3 0D A9 00 33 0D B9 41 13 03 CD FF 13 57
-23 00 93 03 17 00 93 F0 73 00 6E 88 63 88 00 24
-85 4F 63 8E F0 0F 89 4E 63 89 D0 0D 0D 4F 63 84
-E0 0B 91 42 63 8F 50 06 15 4C 63 8A 80 05 99 4C
-63 85 90 03 72 88 03 AE 0D 00 93 97 0A 01 13 DB
-07 01 F2 98 63 DB 14 3B 93 08 AB 00 13 93 08 01
-93 5A 03 41 81 48 13 88 4D 00 72 87 03 2E 08 00
-93 93 0A 01 93 D0 03 01 F2 98 63 DF 14 37 93 82
-A0 00 13 9C 02 01 93 5A 0C 41 81 48 11 08 F2 8C
-03 2E 08 00 93 97 0A 01 13 DB 07 01 F2 98 63 D4
-14 35 93 08 AB 00 13 93 08 01 93 5A 03 41 81 48
-11 08 72 87 03 2E 08 00 93 93 0A 01 93 D0 03 01
-F2 98 63 D9 14 31 93 82 A0 00 13 9C 02 01 93 5A
-0C 41 81 48 11 08 F2 8C 03 2E 08 00 93 97 0A 01
-13 DB 07 01 F2 98 63 DE 14 2D 93 08 AB 00 13 93
-08 01 93 5A 03 41 81 48 11 08 72 87 03 2E 08 00
-93 93 0A 01 93 D0 03 01 F2 98 63 D3 14 2B 93 82
-A0 00 13 9C 02 01 93 5A 0C 41 81 48 11 08 F2 8C
-03 2E 08 00 93 97 0A 01 13 DB 07 01 F2 98 63 D4
-14 27 93 08 AB 00 13 93 08 01 93 93 08 01 13 5B
-03 01 93 DA 03 41 81 48 11 08 63 11 28 13 93 83
-16 00 33 89 CD 40 E3 8D D5 8A 9E 86 5D B5 33 2E
-1E 00 83 2B 48 00 33 8F CE 01 93 12 0F 01 93 D7
-02 41 93 9A 07 01 33 07 7B 01 11 08 13 DD 0A 01
-63 D2 E4 12 03 2F 48 00 93 0F AD 00 93 9E 0F 01
-93 D0 0E 41 01 47 13 9E 00 01 33 0C E7 01 93 52
-0E 01 63 D3 84 13 03 27 88 00 93 8A A2 00 13 9D
-0A 01 93 5B 0D 41 01 4C 93 98 0B 01 B3 00 EC 00
-93 D3 08 01 63 D4 14 12 03 2C C8 00 13 8E A3 00
-93 12 0E 01 13 DF 02 41 81 40 93 1C 0F 01 33 8B
-80 01 93 D7 0C 01 63 D5 64 13 83 20 08 01 93 88
-A7 00 93 93 08 01 13 D7 03 41 01 4B 13 13 07 01
-B3 0E 1B 00 93 5F 03 01 63 D6 D4 13 03 2B 48 01
-93 8C AF 00 93 97 0C 01 13 DC 07 41 81 4E 93 1B
-0C 01 33 8D 6E 01 93 DA 0B 01 63 D7 A4 13 03 2E
-88 01 13 83 AA 00 93 1F 03 01 93 D0 0F 41 01 4D
-93 9E 00 01 B3 08 CD 01 13 DF 0E 01 63 D8 14 13
-93 0B AF 00 13 9D 0B 01 13 97 0B 01 13 5B 0D 01
-93 5A 07 41 81 48 71 08 E3 03 28 EF 83 20 08 00
-93 9F 0A 01 93 DE 0F 01 33 8B 18 00 E3 D1 64 EF
-83 2B 48 00 13 8C AE 00 93 1C 0C 01 93 D7 0C 41
-01 4B 93 9A 07 01 33 07 7B 01 11 08 13 DD 0A 01
-E3 C2 E4 EE B3 A8 70 01 03 2F 48 00 33 03 1D 01
-93 13 03 01 93 D0 03 41 13 9E 00 01 33 0C E7 01
-93 52 0E 01 E3 C1 84 EF B3 AC EB 01 03 27 88 00
-B3 87 92 01 13 9B 07 01 93 5B 0B 41 93 98 0B 01
-B3 00 EC 00 93 D3 08 01 E3 C0 14 EE 33 23 EF 00
-03 2C C8 00 B3 8F 63 00 93 9E 0F 01 13 DF 0E 41
-93 1C 0F 01 33 8B 80 01 93 D7 0C 01 E3 CF 64 ED
-B3 2B 87 01 83 20 08 01 B3 8A 77 01 13 9D 0A 01
-13 57 0D 41 13 13 07 01 B3 0E 1B 00 93 5F 03 01
-E3 CE D4 ED 33 2F 1C 00 03 2B 48 01 33 8E EF 01
-93 12 0E 01 13 DC 02 41 93 1B 0C 01 33 8D 6E 01
-93 DA 0B 01 E3 CD A4 ED 33 A7 60 01 B3 88 EA 00
-03 2E 88 01 93 93 08 01 93 D0 03 41 93 9E 00 01
-B3 08 CD 01 13 DF 0E 01 E3 CC 14 ED B3 22 CB 01
-33 0C 5F 00 93 1C 0C 01 93 17 0C 01 13 DB 0C 01
-93 DA 07 41 C9 BD B3 AB CC 01 B3 0A 7B 01 13 9D
-0A 01 13 97 0A 01 13 5B 0D 01 93 5A 07 41 69 BB
-B3 2F C7 01 B3 8E F0 01 13 9F 0E 01 93 5A 0F 41
-B1 BB B3 AB CC 01 B3 0A 7B 01 13 9D 0A 01 93 5A
-0D 41 1D B3 B3 2F C7 01 B3 8E F0 01 13 9F 0E 01
-93 5A 0F 41 C5 B9 B3 AB CC 01 B3 0A 7B 01 13 9D
-0A 01 93 5A 0D 41 6D B9 B3 2F C7 01 B3 8E F0 01
-13 9F 0E 01 93 5A 0F 41 51 B1 B3 2B C8 01 B3 0A
-7B 01 13 9D 0A 01 93 5A 0D 41 B1 B1 81 47 01 47
-81 4D 6F E0 1F 84 01 49 81 48 6F E0 1F C8 41 11
-14 45 2E 87 22 C4 4C 45 32 84 50 41 08 41 06 C6
-EF E0 4F B2 B3 46 A4 00 13 77 F5 0F 93 17 05 01
-93 F2 16 00 13 D3 07 01 13 56 17 00 13 58 14 00
-63 8B 02 00 E9 70 93 83 10 00 33 45 78 00 93 15
-05 01 13 D8 05 01 B3 48 C8 00 13 FE 18 00 93 5E
-27 00 93 52 18 00 63 0B 0E 00 69 7F 93 0F 1F 00
-33 C4 F2 01 93 16 04 01 93 D2 06 01 B3 C7 D2 01
-93 F0 17 00 13 56 37 00 93 D8 12 00 63 8B 00 00
-E9 73 93 85 13 00 33 C5 B8 00 13 18 05 01 93 58
-08 01 33 CE C8 00 93 7E 1E 00 13 5F 47 00 93 D7
-18 00 63 8B 0E 00 E9 7F 13 84 1F 00 B3 C6 87 00
-93 92 06 01 93 D7 02 01 B3 C0 E7 01 93 F3 10 00
-13 56 57 00 13 DE 17 00 63 8B 03 00 E9 75 13 88
-15 00 33 45 0E 01 93 18 05 01 13 DE 08 01 B3 4E
-CE 00 13 FF 1E 00 93 5F 67 00 93 50 1E 00 63 0B
-0F 00 69 74 93 06 14 00 B3 C2 D0 00 93 97 02 01
-93 D0 07 01 B3 C3 F0 01 13 F6 13 00 1D 83 13 DE
-10 00 11 CA E9 75 13 88 15 00 33 45 0E 01 93 18
-05 01 13 DE 08 01 93 7E 1E 00 93 52 1E 00 63 8B
-EE 00 69 7F 93 0F 1F 00 33 C4 F2 01 93 16 04 01
-93 D2 06 01 93 57 83 00 B3 C0 57 00 93 F3 10 00
-13 56 83 00 93 D8 12 00 13 53 93 00 63 8B 03 00
-69 77 93 05 17 00 33 C8 B8 00 13 15 08 01 93 58
-05 01 33 4E 13 01 93 7E 1E 00 13 5F 26 00 93 D0
-18 00 63 8B 0E 00 E9 7F 13 84 1F 00 B3 C6 80 00
-93 92 06 01 93 D0 02 01 B3 C7 E0 01 93 F3 17 00
-13 53 36 00 93 D8 10 00 63 8B 03 00 69 77 93 05
-17 00 33 C8 B8 00 13 15 08 01 93 58 05 01 33 CE
-68 00 93 7E 1E 00 13 5F 46 00 93 D0 18 00 63 8B
-0E 00 E9 7F 13 84 1F 00 B3 C6 80 00 93 92 06 01
-93 D0 02 01 B3 C7 E0 01 93 F3 17 00 13 53 56 00
-93 D8 10 00 63 8B 03 00 69 77 93 05 17 00 33 C8
-B8 00 13 15 08 01 93 58 05 01 33 CE 68 00 93 7E
-1E 00 13 5F 66 00 93 D0 18 00 63 8B 0E 00 E9 7F
-13 84 1F 00 B3 C6 80 00 93 92 06 01 93 D0 02 01
-B3 C7 E0 01 93 F3 17 00 1D 82 13 D5 10 00 63 8B
-03 00 69 73 13 07 13 00 B3 45 E5 00 13 98 05 01
-13 55 08 01 93 78 15 00 05 81 63 8B C8 00 69 7E
-93 0E 1E 00 33 4F D5 01 93 1F 0F 01 13 D5 0F 01
-B2 40 22 44 41 01 82 80 79 71 4A D2 22 D6 26 D4
-4E D0 52 CE 56 CC 5A CA 5E C8 62 C6 66 C4 6A C2
-2A 87 36 89 11 E2 05 46 FD 15 13 F4 C5 FF 13 0A
-44 00 81 47 63 02 07 34 93 82 17 00 B3 86 52 02
-13 88 27 00 13 8E 37 00 13 8F 47 00 93 8E 57 00
-93 88 67 00 13 83 77 00 3E 85 A1 07 93 93 36 00
-63 F3 E3 06 B3 09 08 03 16 85 13 9B 39 00 63 7C
-EB 04 B3 0B CE 03 42 85 13 9C 3B 00 63 75 EC 04
-B3 0C EF 03 72 85 13 9D 3C 00 63 7E ED 02 B3 8F
-DE 03 7A 85 93 95 3F 00 63 F7 E5 02 33 84 18 03
-76 85 93 1A 34 00 63 F0 EA 02 B3 04 63 02 46 85
-93 92 34 00 63 F9 E2 00 33 88 F7 02 1A 85 13 1E
-38 00 E3 6B EE F6 33 07 A5 02 AA 8A 93 14 17 00
-33 04 9A 00 63 06 05 26 C1 6E 81 46 81 43 85 4F
-33 0F 8A 40 FD 1E 93 09 F5 FF 33 06 F6 03 93 98
-0F 01 93 D7 08 01 13 93 16 00 33 0B 83 00 13 0C
-F5 FF 93 7C 3C 00 B3 0B 6F 01 05 4E 13 88 1F 00
-13 5D F6 41 93 52 0D 01 33 07 56 00 33 76 D7 01
-33 06 56 40 B3 88 C7 00 13 93 08 01 13 5C 03 01
-E2 97 23 10 8B 01 13 FD F7 0F 23 90 AB 01 93 05
-2B 00 63 76 AE 1E 63 83 0C 0E 63 8C CC 09 89 4B
-63 86 7C 05 B3 0C 06 03 42 08 93 52 08 01 B3 08
-BF 00 93 05 4B 00 13 88 2F 00 09 4E 13 D7 FC 41
-13 53 07 01 33 86 6C 00 33 7C D6 01 33 06 6C 40
-B3 87 C2 00 13 9D 07 01 93 5B 0D 01 B3 8C 5B 00
-23 11 7B 01 13 FB FC 0F 23 90 68 01 B3 02 06 03
-93 18 08 01 13 D3 08 01 33 0C BF 00 05 0E 05 08
-89 05 13 D7 F2 41 93 57 07 01 33 86 F2 00 33 7D
-D6 01 33 06 FD 40 B3 0B C3 00 93 9C 0B 01 13 DB
-0C 01 B3 02 6B 00 23 9F 65 FF 93 F8 F2 0F 23 10
-1C 01 33 03 06 03 13 1C 08 01 93 57 0C 01 33 0D
-BF 00 89 05 05 0E 05 08 13 57 F3 41 93 5B 07 01
-33 06 73 01 B3 7C D6 01 33 86 7C 41 33 8B C7 00
-93 12 0B 01 93 D8 02 01 33 83 F8 00 23 9F 15 FF
-13 7C F3 0F 23 10 8D 01 63 73 AE 10 33 06 06 03
-93 07 28 00 13 0B 38 00 13 1D 08 01 93 52 0D 01
-93 98 07 01 13 1D 0B 01 13 D3 08 01 93 58 0D 01
-13 07 18 00 13 5D F6 41 13 5D 0D 01 6A 96 33 76
-D6 01 33 0D A6 41 93 1B 07 01 33 07 ED 02 33 86
-A2 01 13 1D 06 01 13 56 0D 01 B2 92 B3 0C BF 00
-23 90 C5 00 13 FD F2 0F 23 90 AC 01 66 8C 66 86
-E6 82 93 5C F7 41 13 DD 0C 01 6A 97 B3 7C D7 01
-33 8D AC 41 B3 07 FD 02 93 DB 0B 01 33 87 AB 01
-93 1C 07 01 13 DD 0C 01 EA 9B 23 91 A5 01 13 F7
-FB 0F 23 11 EC 00 A1 05 13 DC F7 41 93 5C 0C 01
-E6 97 33 FD D7 01 B3 0B 9D 41 33 8B 6B 03 33 07
-73 01 13 1C 07 01 93 5C 0C 01 66 93 23 9E 95 FF
-93 77 F3 0F 23 12 F6 00 11 0E 11 08 13 56 FB 41
-13 5D 06 01 B3 0B AB 01 33 FB DB 01 33 06 AB 41
-33 87 C8 00 13 1C 07 01 93 5C 0C 01 E6 98 23 9F
-95 FF 13 F3 F8 0F 23 93 62 00 E3 61 AE F0 85 0F
-01 4E 11 C1 4E 8E 85 03 F2 9F AA 96 E3 E7 A3 DA
-A2 94 93 86 F4 FF 23 24 89 00 93 F3 C6 FF 32 54
-13 8F 43 00 23 22 49 01 23 20 59 01 23 26 E9 01
-A2 54 12 59 82 59 72 4A E2 4A 52 4B C2 4B 32 4C
-A2 4C 12 4D 45 61 82 80 19 04 FD 5A 7D 55 89 44
-A1 BB 2A 88 63 06 05 3E B3 08 A0 40 13 17 25 00
-2E 97 13 93 28 00 81 45 01 45 81 4F 81 4E 8E 08
-B3 06 E3 00 B3 07 D7 40 93 82 C7 FF 93 D3 22 00
-13 8E 13 00 93 77 7E 00 36 8E 63 80 07 22 05 4F
-63 89 E7 0F 89 42 63 84 57 0C 8D 43 63 81 77 0A
-11 4F 63 8C E7 07 95 42 63 87 57 04 99 43 63 84
-77 02 7E 8E 83 AF 06 00 42 05 13 5F 05 01 FE 9E
-63 57 D6 37 93 0E AF 00 13 9E 0E 01 13 55 0E 41
-81 4E 13 8E 46 00 7E 8F 83 2F 0E 00 42 05 93 52
-05 01 FE 9E 63 5C D6 33 93 8E A2 00 13 95 0E 01
-41 85 81 4E 11 0E FE 82 83 2F 0E 00 93 17 05 01
-93 D3 07 01 FE 9E 63 52 D6 31 93 8E A3 00 93 97
-0E 01 13 D5 07 41 81 4E 11 0E FE 83 83 2F 0E 00
-13 1F 05 01 13 55 0F 01 FE 9E 63 57 D6 2D 93 0E
-A5 00 13 9F 0E 01 13 55 0F 41 81 4E 11 0E FE 82
-83 2F 0E 00 42 05 93 53 05 01 FE 9E 63 5D D6 29
-93 8E A3 00 13 95 0E 01 41 85 81 4E 11 0E FE 83
-83 2F 0E 00 93 17 05 01 13 DF 07 01 FE 9E 63 53
-D6 27 93 0E AF 00 93 97 0E 01 13 D5 07 41 81 4E
-11 0E 7E 8F 83 2F 0E 00 93 12 05 01 13 D5 02 01
-FE 9E 63 58 D6 23 93 0E A5 00 93 92 0E 01 13 D5
-02 41 81 4E 11 0E 63 12 C7 11 85 05 33 87 16 41
-E3 10 B8 EC 82 80 B3 AF 7F 00 B3 07 FF 01 83 2F
-4E 00 93 92 07 01 13 DF 02 41 93 17 0F 01 33 85
-FE 01 11 0E 93 D2 07 01 63 53 A6 10 83 23 4E 00
-A9 02 13 95 02 01 93 57 05 41 01 45 13 9F 07 01
-B3 0E 75 00 93 57 0F 01 63 55 D6 11 83 2F 8E 00
-A9 07 93 9E 07 01 13 DF 0E 41 81 4E 93 12 0F 01
-FE 9E 13 D5 02 01 63 57 D6 11 83 23 CE 00 29 05
-93 1E 05 01 93 D2 0E 41 81 4E 13 9F 02 01 B3 82
-7E 00 93 57 0F 01 63 59 56 10 A9 07 83 2F 0E 01
-93 92 07 01 13 DF 02 41 81 42 13 15 0F 01 B3 8E
-F2 01 93 57 05 01 63 5B D6 11 83 23 4E 01 A9 07
-93 9E 07 01 13 D5 0E 41 81 4E 13 1F 05 01 9E 9E
-93 52 0F 01 63 5D D6 11 83 2F 8E 01 A9 02 93 9E
-02 01 13 DF 0E 41 81 4E 13 15 0F 01 FE 9E 93 57
-05 01 63 5F D6 11 13 85 A7 00 93 17 05 01 13 D5
-07 41 81 4E 71 0E E3 02 C7 F1 83 23 0E 00 42 05
-13 5F 05 01 9E 9E E3 50 D6 F1 93 0E AF 00 83 2F
-4E 00 13 95 0E 01 13 5F 05 41 81 4E 93 17 0F 01
-33 85 FE 01 11 0E 93 D2 07 01 E3 41 A6 F0 B3 A3
-F3 01 33 8F 72 00 83 23 4E 00 93 1E 0F 01 93 D7
-0E 41 13 9F 07 01 B3 0E 75 00 93 57 0F 01 E3 4F
-D6 EF B3 AF 7F 00 B3 82 F7 01 83 2F 8E 00 13 95
-02 01 13 5F 05 41 93 12 0F 01 FE 9E 13 D5 02 01
-E3 4D D6 EF B3 A3 F3 01 33 0F 75 00 83 23 CE 00
-93 17 0F 01 93 D2 07 41 13 9F 02 01 B3 82 7E 00
-93 57 0F 01 E3 4B 56 EE B3 AF 7F 00 33 85 F7 01
-83 2F 0E 01 93 1E 05 01 13 DF 0E 41 13 15 0F 01
-B3 8E F2 01 93 57 05 01 E3 49 D6 EF B3 A3 F3 01
-33 8F 77 00 83 23 4E 01 93 12 0F 01 13 D5 02 41
-13 1F 05 01 9E 9E 93 52 0F 01 E3 47 D6 EF B3 AF
-7F 00 33 85 F2 01 83 2F 8E 01 93 17 05 01 13 DF
-07 41 13 15 0F 01 FE 9E 93 57 05 01 E3 45 D6 EF
-B3 A3 F3 01 33 8F 77 00 93 12 0F 01 13 D5 02 41
-D5 B5 B3 23 FF 01 B3 07 75 00 13 9F 07 01 13 55
-0F 41 C9 BB B3 A2 F3 01 33 05 5F 00 93 13 05 01
-13 D5 03 41 71 BB B3 A7 F2 01 33 8F F3 00 93 12
-0F 01 13 D5 02 41 9D B3 B3 A2 F3 01 B3 07 55 00
-93 93 07 01 13 D5 03 41 15 BB 33 AF F2 01 33 85
-E3 01 93 12 05 01 13 D5 02 41 FD B9 B3 27 FF 01
-B3 83 F2 00 13 9F 03 01 13 55 0F 41 E1 B1 B3 27
-FE 01 B3 02 FF 00 93 93 02 01 13 D5 03 41 51 B9
-01 45 82 80 63 01 05 16 41 11 B3 03 A0 40 13 18
-15 00 22 C6 26 C4 13 94 13 00 4A C2 4E C0 32 98
-81 4F 81 42 8A 03 B3 08 04 01 33 06 18 41 13 03
-E6 FF 93 54 13 00 13 87 14 00 93 97 2F 00 13 79
-77 00 AE 97 46 87 63 0F 09 08 85 49 63 02 39 09
-09 4E 63 07 C9 07 8D 4E 63 0C D9 05 11 4F 63 01
-E9 05 15 46 63 06 C9 02 19 43 63 0B 69 00 83 94
-08 00 13 87 28 00 91 07 33 89 D4 02 23 AE 27 FF
-83 19 07 00 91 07 09 07 33 8E D9 02 23 AE C7 FF
-83 1E 07 00 91 07 09 07 33 8F DE 02 23 AE E7 FF
-03 16 07 00 91 07 09 07 33 03 D6 02 23 AE 67 FE
-83 14 07 00 91 07 09 07 33 89 D4 02 23 AE 27 FF
-83 19 07 00 91 07 09 07 33 8E D9 02 23 AE C7 FF
-83 1E 07 00 91 07 09 07 33 8F DE 02 23 AE E7 FF
-63 07 E8 06 83 19 07 00 03 19 27 00 83 14 47 00
-03 1F 67 00 83 1E 87 00 03 1E A7 00 03 13 C7 00
-03 16 E7 00 B3 89 D9 02 41 07 93 87 07 02 33 09
-D9 02 23 A0 37 FF B3 84 D4 02 23 A2 27 FF 33 0F
-DF 02 23 A4 97 FE B3 8E DE 02 23 A6 E7 FF 33 0E
-DE 02 23 A8 D7 FF 33 03 D3 02 23 AA C7 FF 33 06
-D6 02 23 AC 67 FE 23 AE C7 FE E3 1D E8 F8 85 02
-AA 9F 33 88 78 40 E3 18 55 EC 32 44 A2 44 12 49
-82 49 41 01 82 80 82 80 63 00 05 1E B3 02 A0 40
-93 16 06 01 93 17 15 00 93 93 12 00 C1 82 33 86
-F5 00 81 4F 8A 02 B3 85 C3 00 33 07 B6 40 13 03
-E7 FF 13 58 13 00 93 08 18 00 13 FE 78 00 AE 87
-63 08 0E 08 85 4E 63 0C DE 07 09 4F 63 02 EE 07
-0D 47 63 08 EE 04 11 43 63 0E 6E 02 15 48 63 04
-0E 03 99 48 63 0A 1E 01 03 DE 05 00 93 87 25 00
-B3 8E C6 01 23 90 D5 01 03 DF 07 00 89 07 33 87
-E6 01 23 9F E7 FE 03 D3 07 00 89 07 33 88 66 00
-23 9F 07 FF 83 D8 07 00 89 07 33 8E 16 01 23 9F
-C7 FF 83 DE 07 00 89 07 33 8F D6 01 23 9F E7 FF
-03 D7 07 00 89 07 33 83 E6 00 23 9F 67 FE 03 D8
-07 00 89 07 B3 88 06 01 23 9F 17 FF 63 09 F6 10
-41 11 22 C6 03 D4 07 00 03 DF 27 00 83 DE 47 00
-03 DE 67 00 03 D3 87 00 83 D8 A7 00 03 D8 C7 00
-03 D7 E7 00 36 94 36 9F B6 9E 36 9E 36 93 B6 98
-36 98 36 97 23 90 87 00 23 91 E7 01 23 92 D7 01
-23 93 C7 01 23 94 67 00 23 95 17 01 23 96 07 01
-23 97 E7 00 C1 07 E3 17 F6 FA 85 0F 33 86 55 40
-63 04 F5 0B B3 85 C3 00 B3 07 B6 40 13 84 E7 FF
-13 5F 14 00 93 0E 1F 00 13 FE 7E 00 AE 87 E3 03
-0E F8 05 43 63 04 6E 06 89 48 63 0A 1E 05 0D 48
-63 00 0E 05 11 47 63 06 EE 02 15 44 63 0C 8E 00
-19 4F 63 1C EE 07 03 D3 07 00 89 07 B3 88 66 00
-23 9F 17 FF 03 D8 07 00 89 07 33 87 06 01 23 9F
-E7 FE 03 D4 07 00 89 07 33 8F 86 00 23 9F E7 FF
-83 DE 07 00 89 07 33 8E D6 01 23 9F C7 FF 03 D3
-07 00 89 07 B3 88 66 00 23 9F 17 FF 03 D8 07 00
-89 07 33 87 06 01 23 9F E7 FE E3 15 F6 F0 85 0F
-33 86 55 40 E3 10 F5 F7 32 44 41 01 82 80 85 0F
-33 86 55 40 E3 11 F5 E5 82 80 83 DE 05 00 93 87
-25 00 33 8E D6 01 23 90 C5 01 B5 BF 63 08 05 1A
-79 71 26 D2 AA 84 4E CE 93 99 24 00 4A D0 2E 85
-32 89 81 45 4E 86 22 D4 06 D6 36 84 52 CC 56 CA
-5A C8 5E C6 62 C4 66 C2 EF 30 30 49 93 96 14 00
-AA 85 A2 96 4E 95 01 46 33 83 86 40 93 00 E3 FF
-93 D2 10 00 93 83 12 00 93 17 16 00 93 F8 73 00
-CA 97 22 87 01 4E 63 85 08 0A 05 48 63 87 08 09
-09 4A 63 8B 48 07 8D 4A 63 8F 58 05 11 4B 63 83
-68 05 95 4B 63 87 78 03 19 4C 63 8B 88 01 83 9C
-07 00 03 1E 04 00 89 07 13 07 24 00 33 8E CC 03
-83 9E 07 00 03 1F 07 00 89 07 09 07 B3 8F EE 03
-7E 9E 83 99 07 00 03 13 07 00 89 07 09 07 B3 80
-69 02 06 9E 83 92 07 00 83 13 07 00 89 07 09 07
-B3 88 72 02 46 9E 03 98 07 00 03 1A 07 00 89 07
-09 07 B3 0A 48 03 56 9E 03 9B 07 00 83 1B 07 00
-89 07 09 07 33 0C 7B 03 62 9E 83 9C 07 00 83 1E
-07 00 09 07 89 07 33 8F DC 03 7A 9E 63 85 E6 08
-83 9F 07 00 83 19 07 00 83 90 27 00 83 1A 27 00
-B3 88 3F 03 03 98 47 00 03 1C 47 00 83 92 67 00
-83 1B 67 00 83 9C 87 00 03 1B 87 00 03 9F A7 00
-03 1A A7 00 83 9E C7 00 B3 8F 50 03 83 19 C7 00
-03 93 E7 00 83 13 E7 00 46 9E 41 07 C1 07 B3 00
-88 03 B3 0A FE 01 33 8C 72 03 33 88 1A 00 B3 82
-6C 03 B3 0B 88 01 B3 08 4F 03 B3 8C 5B 00 33 8B
-3E 03 33 8F 1C 01 33 0A 73 02 B3 0E 6F 01 33 8E
-4E 01 E3 9F E6 F6 23 A0 C5 01 91 05 26 96 E3 15
-B5 EA B2 50 22 54 92 54 02 59 F2 49 62 4A D2 4A
-42 4B B2 4B 22 4C 92 4C 45 61 82 80 82 80 5D 71
-86 C6 A2 C4 A6 C2 CA C0 4E DE 52 DC 56 DA 5A D8
-5E D6 62 D4 66 D2 6A D0 6E CE 2E C4 36 C6 63 0F
-05 1A 13 14 15 00 AA 8A B2 89 33 09 86 00 93 14
-25 00 01 4B 81 4B A2 47 13 1F 2B 00 26 86 33 85
-E7 01 81 45 EF 30 70 2C 32 46 2A 8F 81 4F 33 07
-39 41 93 00 E7 FF 93 D2 10 00 13 83 12 00 93 73
-73 00 B2 85 CE 86 81 47 63 86 03 0A 05 48 63 88
-03 09 89 48 63 8C 13 07 0D 4A 63 80 43 07 11 4C
-63 84 83 05 95 4C 63 88 93 03 19 4D 63 8C A3 01
-83 9D 09 00 03 1E 06 00 93 86 29 00 B3 05 86 00
-B3 87 CD 03 83 9E 06 00 03 95 05 00 89 06 A2 95
-33 87 AE 02 BA 97 83 90 06 00 83 92 05 00 89 06
-A2 95 33 83 50 02 9A 97 83 93 06 00 03 98 05 00
-89 06 A2 95 B3 88 03 03 C6 97 03 9A 06 00 03 9C
-05 00 89 06 A2 95 B3 0C 8A 03 E6 97 03 9D 06 00
-83 9D 05 00 89 06 A2 95 33 0E BD 03 F2 97 83 9E
-06 00 03 95 05 00 89 06 A2 95 33 87 AE 02 BA 97
-63 03 D9 0A 03 93 06 00 83 93 05 00 B3 80 85 00
-B3 82 80 00 33 07 73 02 03 9E 00 00 03 9D 26 00
-33 88 82 00 83 9D 02 00 03 9A 46 00 B3 08 88 00
-83 1C 08 00 83 90 66 00 B3 8E 88 00 33 0D CD 03
-03 93 86 00 03 9C 08 00 83 92 A6 00 83 93 0E 00
-33 85 8E 00 03 98 C6 00 B3 05 85 00 83 1E 05 00
-BA 97 33 0A BA 03 03 95 E6 00 03 9E 05 00 B3 8D
-A7 01 C1 06 A2 95 B3 80 90 03 B3 88 4D 01 33 07
-83 03 B3 8C 18 00 33 83 72 02 33 8C EC 00 B3 02
-D8 03 B3 03 6C 00 33 08 C5 03 33 8D 53 00 B3 07
-0D 01 E3 11 D9 F6 23 20 FF 00 93 86 1F 00 11 0F
-09 06 63 84 DA 00 B6 8F 59 B5 13 8F 1B 00 A2 99
-56 9B 22 99 63 84 FB 01 FA 8B B1 BD B6 40 26 44
-96 44 06 49 F2 59 62 5A D2 5A 42 5B B2 5B 22 5C
-92 5C 02 5D F2 4D 61 61 82 80 63 04 05 1C 79 71
-4E CE 93 19 15 00 22 D4 26 D2 4A D0 52 CC 56 CA
-5A C8 5E C6 62 C4 06 D6 2A 8B 2E 84 B6 84 B2 8A
-33 0A 36 01 13 19 25 00 81 4B 01 4C 13 98 2B 00
-33 05 04 01 4A 86 81 45 EF 30 30 0D AA 83 A6 88
-01 43 B3 07 5A 41 93 80 E7 FF 93 D2 10 00 93 85
-12 00 13 F6 35 00 46 85 D6 86 81 4E 59 C2 05 47
-63 0C E6 04 09 4E 63 06 C6 03 83 9E 0A 00 03 9F
-08 00 93 86 2A 00 33 85 38 01 B3 8F EE 03 13 D8
-2F 40 93 D7 5F 40 93 70 F8 00 93 F2 F7 07 B3 8E
-50 02 83 95 06 00 03 16 05 00 89 06 4E 95 33 8E
-C5 02 13 57 2E 40 13 5F 5E 40 93 7F F7 00 13 78
-FF 07 B3 87 0F 03 BE 9E 83 90 06 00 83 12 05 00
-89 06 4E 95 B3 85 50 02 13 D6 25 40 13 DE 55 40
-13 77 F6 00 13 7F FE 07 B3 0F E7 03 FE 9E 63 03
-DA 0A 33 08 35 01 83 90 06 00 83 12 05 00 B3 07
-38 01 03 9E 26 00 03 17 08 00 83 9F 07 00 33 85
-37 01 03 96 46 00 33 8F 50 02 03 18 05 00 83 95
-66 00 A1 06 4E 95 B3 00 EE 02 93 52 2F 40 13 5E
-5F 40 13 F7 F2 00 93 77 FE 07 33 06 F6 03 13 DF
-50 40 93 DF 20 40 93 72 FF 07 93 F0 FF 00 B3 85
-05 03 13 5E 56 40 13 58 26 40 93 7F F8 00 13 76
-FE 07 B3 07 F7 02 13 DF 55 40 13 D7 25 40 13 78
-F7 00 93 75 FF 07 B3 80 50 02 BE 9E B3 82 CF 02
-33 8E 1E 00 B3 0F B8 02 33 06 5E 00 B3 0E F6 01
-E3 11 DA F6 23 A0 D3 01 93 06 13 00 91 03 89 08
-63 04 DB 00 36 83 75 B5 93 03 1C 00 CE 9A DA 9B
-4E 9A 63 04 6C 00 1E 8C 51 B5 B2 50 22 54 92 54
-02 59 F2 49 62 4A D2 4A 42 4B B2 4B 22 4C 45 61
-82 80 82 80 13 03 F5 FF 85 47 B2 88 63 FA 67 16
-85 05 93 92 05 01 93 D5 02 01 37 86 00 80 93 D3
-35 00 9D 4E 93 F6 75 00 01 47 13 06 C6 72 A1 4F
-11 48 05 4E 13 0F C0 02 93 F7 33 00 63 8C D6 11
-63 68 D8 12 93 83 D6 FF 93 92 03 01 8A 07 93 D6
-02 01 B3 03 F6 00 63 68 DE 10 83 A6 03 01 A5 47
-A1 43 B3 02 F7 00 63 F5 62 12 41 11 22 C6 35 A0
-63 66 88 0C 93 06 D4 FF 93 97 06 01 13 94 23 00
-93 D2 07 01 B3 03 86 00 63 65 5E 0A 83 A6 03 01
-A5 42 A1 43 BA 92 63 F3 62 08 03 C4 06 00 B3 87
-E8 00 23 80 87 00 03 C7 16 00 A3 80 E7 00 03 C4
-26 00 23 81 87 00 03 C7 36 00 A3 81 E7 00 63 84
-03 03 03 C4 46 00 23 82 87 00 03 C7 56 00 A3 82
-E7 00 03 C4 66 00 23 83 87 00 63 96 F3 01 83 C6
-76 00 A3 83 D7 00 85 05 BE 93 93 97 05 01 93 D5
-07 01 23 80 E3 01 16 87 13 F4 75 00 93 D2 35 00
-93 F3 32 00 E3 16 D4 F7 93 96 23 00 A5 42 B3 07
-D6 00 BA 92 94 5B A1 43 E3 E1 62 F8 63 79 A7 02
-32 44 33 06 E5 40 81 45 33 85 E8 00 41 01 6F 30
-C0 61 83 A6 03 00 95 42 91 43 A9 BF 13 94 23 00
-B3 03 86 00 83 A6 03 02 A5 42 A1 43 A1 B7 32 44
-41 01 82 80 93 92 27 00 B3 03 56 00 83 A6 03 03
-A5 47 A1 43 FD BD 83 A6 03 00 95 47 91 43 D5 BD
-93 92 27 00 B3 06 56 00 94 52 A5 47 A1 43 D5 B5
-01 47 33 06 E5 40 81 45 33 85 E8 00 6F 30 E0 5B
-E3 69 A7 FE 82 80 1C 41 2A 8E 01 45 03 C7 07 00
-3E 88 61 C3 93 06 C0 02 13 88 17 00 63 07 D7 24
-88 41 13 06 07 FD 93 72 F6 0F A5 48 13 03 15 00
-63 E4 58 0A 23 A0 65 00 83 C8 17 00 63 8A 08 12
-13 87 27 00 63 85 D8 12 13 86 08 FD 13 0F E0 02
-A5 4F 93 07 C0 02 93 76 F6 0F 63 84 E8 03 63 E4
-DF 0A 83 48 18 00 13 05 17 00 3A 88 63 81 08 10
-63 8C F8 20 13 86 08 FD 2A 87 93 76 F6 0F E3 90
-E8 FF 03 A3 05 01 15 45 93 03 13 00 23 A8 75 00
-03 43 18 00 3A 88 63 0E 03 02 13 08 C0 02 93 08
-17 00 63 01 03 1D 93 0E 50 04 25 4F 93 0F C0 02
-93 07 03 FD 13 76 F3 0D 93 F6 F7 0F 63 0C D6 0B
-63 7F DF 14 83 A2 45 01 46 88 05 45 13 87 12 00
-D8 C9 23 20 0E 01 82 80 93 03 B0 02 63 0F 77 02
-93 0E D0 02 63 0B D7 03 13 0F E0 02 63 04 E7 15
-83 AF 45 00 23 A0 65 00 05 45 93 87 1F 00 DC C1
-23 20 0E 01 82 80 83 A2 05 01 3A 88 05 45 13 87
-12 00 98 C9 23 20 0E 01 82 80 23 A0 65 00 03 C6
-17 00 63 0E 06 14 13 88 27 00 63 0A D6 14 94 45
-13 07 06 FD 93 72 F7 0F 25 45 93 88 16 00 63 7C
-55 00 13 03 E0 02 63 03 66 10 23 A4 15 01 05 45
-23 20 0E 01 82 80 23 A4 15 01 83 C8 27 00 63 89
-08 00 93 0E C0 02 13 07 18 00 E3 9F D8 ED 3A 88
-11 45 85 B7 C8 49 93 03 15 00 23 AA 75 00 83 4E
-17 00 63 89 0E 0E 13 0F C0 02 13 88 18 00 63 84
-EE 0F 83 AF C5 00 93 87 5E FD 13 F6 D7 0F 93 86
-1F 00 D4 C5 09 C6 05 45 23 20 0E 01 82 80 83 C2
-18 00 63 84 02 0C 13 88 28 00 63 80 E2 0D 03 A3
-85 01 13 87 02 FD 13 75 F7 0F 93 0E 13 00 A5 43
-23 AC D5 01 E3 E9 A3 FC 83 C2 28 00 63 8A 02 08
-13 87 38 00 63 85 E2 09 A5 48 13 0F C0 02 93 8F
-02 FD 13 F6 FF 0F 63 F9 C8 00 D4 41 3A 88 05 45
-93 87 16 00 DC C1 F1 B5 83 42 18 00 13 03 17 00
-3A 88 63 8E 02 04 63 86 E2 07 1A 87 C9 BF 03 43
-17 00 13 88 18 00 46 87 63 0E 03 02 63 0D F3 03
-C2 88 BD BD 23 A0 65 00 03 C3 17 00 63 05 03 02
-93 88 27 00 63 00 D3 02 42 87 B1 BD 23 A4 15 01
-03 C3 27 00 63 09 03 00 93 03 C0 02 93 08 18 00
-E3 14 73 FE 46 88 15 45 AD B5 01 45 9D B5 3A 88
-1D 45 85 B5 46 88 0D 45 A9 BD 19 45 99 BD 09 45
-89 BD 1A 88 1D 45 B1 B5 2A 88 11 45 99 B5 19 71
-A2 DC A6 DA CA D8 D2 D4 D6 D2 DA D0 DE CE 86 DE
-CE D6 2E 89 83 C5 05 00 4A C6 02 D8 02 C8 02 DA
-02 DC 02 DE 82 C0 82 C2 82 C4 82 C6 02 CA 02 CC
-02 CE 02 D0 02 D2 02 D4 02 D6 04 18 2A 8A B2 8B
-36 8B BA 8A 3E 84 E3 8C 05 1C 93 09 C1 00 A6 85
-4E 85 15 33 AA 87 93 92 27 00 98 08 33 03 57 00
-B2 46 83 23 03 FC A6 85 03 C6 06 00 13 88 13 00
-23 20 03 FD 4E 85 35 CA FD 39 AA 88 13 9E 28 00
-93 0E 01 05 33 8F CE 01 B2 47 83 2F 0F FC A6 85
-83 C2 07 00 13 87 1F 00 23 20 EF FC 4E 85 63 86
-02 04 D1 39 2A 83 93 13 23 00 94 08 33 86 76 00
-B2 48 03 28 06 FC A6 85 03 CE 08 00 93 0E 18 00
-23 20 D6 FD 4E 85 63 02 0E 02 75 31 0A 05 8C 08
-33 8F A5 00 B2 47 83 2F 0F FC 83 C2 07 00 13 87
-1F 00 23 20 EF FC E3 94 02 F6 4A C6 4A 9A 83 45
-09 00 E3 7C 49 13 93 00 C0 02 4A 83 B3 C9 75 01
-63 80 15 02 23 00 33 01 B2 43 33 83 53 01 1A C6
-63 7C 43 01 83 45 03 00 B3 C9 75 01 E3 94 15 FE
-56 93 1A C6 E3 68 43 FF 83 4B 09 00 4A C6 93 09
-C1 00 63 83 0B 0A A6 85 4E 85 35 39 AA 86 13 96
-26 00 13 08 01 05 B3 08 C8 00 B2 4E 03 AE 08 FC
-A6 85 03 CF 0E 00 93 0F 1E 00 23 A0 F8 FD 4E 85
-63 09 0F 06 09 39 AA 87 93 92 27 00 98 08 33 03
-57 00 B2 4B 83 23 03 FC A6 85 83 C6 0B 00 13 86
-13 00 23 20 C3 FC 4E 85 A9 C6 F5 36 2A 88 93 18
-28 00 13 0E 01 05 B3 0E 1E 01 B2 4F 03 AF 0E FC
-A6 85 83 C7 0F 00 93 02 1F 00 23 A0 5E FC 4E 85
-8D C3 D1 36 0A 05 8C 08 33 83 A5 00 32 47 83 23
-03 FC 83 4B 07 00 93 86 13 00 23 20 D3 FC E3 94
-0B F6 4A C6 63 72 49 03 93 00 C0 02 83 49 09 00
-33 C6 69 01 E3 87 19 02 23 00 C9 00 32 48 33 09
-58 01 4A C6 E3 64 49 FF 69 7A 14 08 26 86 13 0E
-1A 00 83 AE 06 00 93 53 14 00 33 C4 8E 00 13 FF
-FE 0F 93 9F 0E 01 93 78 14 00 93 D2 0F 01 13 55
-1F 00 63 88 08 00 B3 C7 C3 01 93 95 07 01 93 D3
-05 01 33 C3 A3 00 13 77 13 00 93 5B 2F 00 93 D0
-13 00 19 C7 B3 CA C0 01 13 9B 0A 01 93 50 0B 01
-B3 C9 70 01 13 F9 19 00 13 58 3F 00 93 DF 10 00
-63 08 09 00 33 CA CF 01 13 14 0A 01 93 5F 04 01
-B3 C8 0F 01 13 F5 18 00 93 55 4F 00 13 D7 1F 00
-19 C5 B3 47 C7 01 93 93 07 01 13 D7 03 01 33 C3
-E5 00 93 7B 13 00 93 5A 5F 00 93 59 17 00 63 88
-0B 00 33 CB C9 01 93 10 0B 01 93 D9 00 01 33 C9
-59 01 13 78 19 00 13 5A 6F 00 13 D5 19 00 63 08
-08 00 33 44 C5 01 93 1F 04 01 13 D5 0F 01 B3 48
-AA 00 93 F5 18 00 13 5F 7F 00 13 57 15 00 99 C5
-B3 47 C7 01 93 93 07 01 13 D7 03 01 13 73 17 00
-13 5B 17 00 63 08 E3 01 B3 4B CB 01 93 9A 0B 01
-13 DB 0A 01 93 D0 82 00 B3 C9 60 01 13 F9 19 00
-13 D8 82 00 93 5F 1B 00 93 D2 92 00 63 08 09 00
-33 CA CF 01 13 14 0A 01 93 5F 04 01 33 C5 F2 01
-93 75 15 00 93 58 28 00 93 D3 1F 00 99 C5 33 CF
-C3 01 93 17 0F 01 93 D3 07 01 33 C7 78 00 13 73
-17 00 93 5B 38 00 93 D0 13 00 63 08 03 00 B3 CA
-C0 01 13 9B 0A 01 93 50 0B 01 B3 C9 1B 00 13 F9
-19 00 93 52 48 00 93 DF 10 00 63 08 09 00 33 CA
-CF 01 13 14 0A 01 93 5F 04 01 33 C5 F2 01 93 75
-15 00 93 58 58 00 93 D3 1F 00 99 C5 33 CF C3 01
-93 17 0F 01 93 D3 07 01 33 C7 78 00 13 73 17 00
-93 5B 68 00 93 D0 13 00 63 08 03 00 B3 CA C0 01
-13 9B 0A 01 93 50 0B 01 B3 C9 1B 00 13 F9 19 00
-13 58 78 00 13 D4 10 00 63 08 09 00 B3 42 C4 01
-13 9A 02 01 13 54 0A 01 93 7F 14 00 13 5F 14 00
-63 88 0F 01 33 45 CF 01 93 15 05 01 13 DF 05 01
-93 D8 0E 01 B3 C7 E8 01 93 F3 F8 0F 13 F7 17 00
-93 DE 0E 01 13 D3 13 00 13 5B 1F 00 19 C7 B3 4B
-CB 01 93 9A 0B 01 13 DB 0A 01 B3 40 63 01 93 F9
-10 00 13 D9 23 00 13 5A 1B 00 63 88 09 00 33 48
-CA 01 93 12 08 01 13 DA 02 01 33 44 49 01 93 7F
-14 00 13 D5 33 00 93 57 1A 00 63 88 0F 00 B3 C5
-C7 01 13 9F 05 01 93 57 0F 01 B3 48 F5 00 13 F7
-18 00 13 D3 43 00 13 DB 17 00 19 C7 B3 4B CB 01
-93 9A 0B 01 13 DB 0A 01 B3 40 63 01 93 F9 10 00
-13 D9 53 00 13 5A 1B 00 63 88 09 00 33 48 CA 01
-93 12 08 01 13 DA 02 01 33 44 49 01 93 7F 14 00
-13 D5 63 00 93 57 1A 00 63 88 0F 00 B3 C5 C7 01
-13 9F 05 01 93 57 0F 01 B3 48 F5 00 13 F7 18 00
-93 D3 73 00 93 DA 17 00 19 C7 33 C3 CA 01 93 1B
-03 01 93 DA 0B 01 13 FB 1A 00 13 D9 1A 00 63 08
-7B 00 B3 40 C9 01 93 99 00 01 13 D9 09 01 13 D8
-8E 00 B3 42 28 01 13 FA 12 00 13 D4 8E 00 13 5F
-19 00 93 DE 9E 00 63 08 0A 00 B3 4F CF 01 13 95
-0F 01 13 5F 05 01 B3 C5 EE 01 93 F8 15 00 13 57
-24 00 13 53 1F 00 63 88 08 00 B3 47 C3 01 93 93
-07 01 13 D3 03 01 B3 4B 67 00 93 FA 1B 00 13 5B
-34 00 13 59 13 00 63 88 0A 00 B3 40 C9 01 93 99
-00 01 13 D9 09 01 33 48 2B 01 93 72 18 00 13 5A
-44 00 13 55 19 00 63 88 02 00 B3 4E C5 01 93 9F
-0E 01 13 D5 0F 01 33 4F AA 00 93 75 1F 00 93 58
-54 00 93 53 15 00 99 C5 33 C7 C3 01 93 17 07 01
-93 D3 07 01 33 C3 78 00 93 7B 13 00 93 5A 64 00
-93 D9 13 00 63 88 0B 00 33 CB C9 01 93 10 0B 01
-93 D9 00 01 33 C9 3A 01 13 78 19 00 1D 80 93 DE
-19 00 63 08 08 00 B3 C2 CE 01 13 9A 02 01 93 5E
-0A 01 93 FF 1E 00 93 D8 1E 00 63 88 8F 00 33 C5
-C8 01 13 1F 05 01 93 58 0F 01 0C 42 93 D9 18 00
-33 C7 15 01 93 F3 F5 0F 13 93 05 01 93 77 17 00
-93 5B 03 01 93 DA 13 00 99 C7 33 CB C9 01 93 10
-0B 01 93 D9 00 01 33 C9 3A 01 13 78 19 00 93 D2
-23 00 93 DE 19 00 63 08 08 00 33 C4 CE 01 13 1A
-04 01 93 5E 0A 01 B3 CF D2 01 13 F5 1F 00 13 DF
-33 00 13 D3 1E 00 19 C5 B3 48 C3 01 13 97 08 01
-13 53 07 01 B3 47 6F 00 93 FA 17 00 13 DB 43 00
-13 59 13 00 63 88 0A 00 B3 40 C9 01 93 99 00 01
-13 D9 09 01 33 48 2B 01 93 72 18 00 13 DA 53 00
-93 5F 19 00 63 88 02 00 33 C4 CF 01 93 1E 04 01
-93 DF 0E 01 33 45 FA 01 13 7F 15 00 93 D8 63 00
-93 DA 1F 00 63 08 0F 00 33 C7 CA 01 13 13 07 01
-93 5A 03 01 B3 C7 58 01 13 FB 17 00 93 D3 73 00
-13 D9 1A 00 63 08 0B 00 B3 40 C9 01 93 99 00 01
-13 D9 09 01 13 78 19 00 13 54 19 00 63 08 78 00
-B3 42 C4 01 13 9A 02 01 13 54 0A 01 93 DE 8B 00
-B3 CF 8E 00 13 FF 1F 00 13 D5 8B 00 13 53 14 00
-93 DB 9B 00 63 08 0F 00 B3 48 C3 01 13 97 08 01
-13 53 07 01 B3 CA 6B 00 93 F7 1A 00 13 5B 25 00
-93 59 13 00 99 C7 B3 C3 C9 01 93 90 03 01 93 D9
-00 01 33 49 3B 01 93 72 19 00 13 58 35 00 93 DE
-19 00 63 88 02 00 33 CA CE 01 13 14 0A 01 93 5E
-04 01 B3 4F D8 01 13 FF 1F 00 93 5B 45 00 13 D3
-1E 00 63 08 0F 00 B3 48 C3 01 13 97 08 01 13 53
-07 01 B3 CA 6B 00 93 F7 1A 00 13 5B 55 00 93 59
-13 00 99 C7 B3 C3 C9 01 93 90 03 01 93 D9 00 01
-33 49 3B 01 93 72 19 00 13 58 65 00 93 DE 19 00
-63 88 02 00 33 CA CE 01 13 14 0A 01 93 5E 04 01
-B3 4F D8 01 13 FF 1F 00 1D 81 13 D7 1E 00 63 08
-0F 00 B3 4B C7 01 93 98 0B 01 13 D7 08 01 13 73
-17 00 13 5B 17 00 63 08 A3 00 B3 4A CB 01 93 97
-0A 01 13 DB 07 01 93 D3 05 01 B3 C0 63 01 93 F9
-F3 0F 13 F9 10 00 C1 81 93 D2 19 00 13 54 1B 00
-63 08 09 00 33 48 C4 01 13 1A 08 01 13 54 0A 01
-B3 CE 82 00 93 FF 1E 00 13 DF 29 00 93 58 14 00
-63 88 0F 00 33 C5 C8 01 93 1B 05 01 93 D8 0B 01
-33 47 1F 01 13 73 17 00 93 DA 39 00 93 D3 18 00
-63 08 03 00 B3 C7 C3 01 13 9B 07 01 93 53 0B 01
-B3 C0 7A 00 13 F9 10 00 93 D2 49 00 13 D4 13 00
-63 08 09 00 33 48 C4 01 13 1A 08 01 13 54 0A 01
-B3 CE 82 00 93 FF 1E 00 13 DF 59 00 93 58 14 00
-63 88 0F 00 33 C5 C8 01 93 1B 05 01 93 D8 0B 01
-33 47 1F 01 13 73 17 00 93 DA 69 00 93 D3 18 00
-63 08 03 00 B3 C7 C3 01 13 9B 07 01 93 53 0B 01
-B3 C0 7A 00 13 F9 10 00 93 D9 79 00 13 DA 13 00
-63 08 09 00 B3 42 CA 01 13 98 02 01 13 5A 08 01
-93 7E 1A 00 13 5F 1A 00 63 88 3E 01 33 44 CF 01
-93 1F 04 01 13 DF 0F 01 13 D5 85 00 B3 4B E5 01
-93 F8 1B 00 13 D7 85 00 93 57 1F 00 A5 81 63 88
-08 00 33 C3 C7 01 93 1A 03 01 93 D7 0A 01 33 CB
-F5 00 93 73 1B 00 93 50 27 00 93 D2 17 00 63 88
-03 00 33 C9 C2 01 93 19 09 01 93 D2 09 01 33 C8
-50 00 13 7A 18 00 93 5E 37 00 13 DF 12 00 63 08
-0A 00 33 44 CF 01 93 1F 04 01 13 DF 0F 01 33 C5
-EE 01 93 7B 15 00 93 58 47 00 93 5A 1F 00 63 88
-0B 00 B3 C5 CA 01 13 93 05 01 93 5A 03 01 B3 C7
-58 01 13 FB 17 00 93 53 57 00 93 D9 1A 00 63 08
-0B 00 B3 C0 C9 01 13 99 00 01 93 59 09 01 B3 C2
-33 01 13 F8 12 00 13 5A 67 00 93 DF 19 00 63 08
-08 00 B3 CE CF 01 13 94 0E 01 93 5F 04 01 33 4F
-FA 01 13 75 1F 00 1D 83 13 D3 1F 00 19 C5 B3 4B
-C3 01 93 98 0B 01 13 D3 08 01 93 75 13 00 13 54
-13 00 63 88 E5 00 B3 4A C4 01 93 97 0A 01 13 D4
-07 01 91 06 11 06 E3 96 D4 80 F6 50 22 85 66 54
-D6 54 46 59 B6 59 26 5A 96 5A 06 5B F6 4B 09 61
-82 80 56 99 4A C6 63 63 49 FD 6F F0 EF FD 33 0A
-A9 00 63 6A 49 ED 6F F0 2F FD 63 96 05 F0 6F F0
-AF FC 01 11 26 CA 83 14 05 00 06 CE 22 CC 93 D7
-74 40 4A C8 4E C6 93 F0 17 00 63 8B 00 00 F2 40
-62 44 42 49 B2 49 13 F5 F4 07 D2 44 05 61 82 80
-13 D7 34 40 93 72 F7 00 13 93 42 00 93 F6 74 00
-03 D4 85 03 AA 89 2E 89 33 67 53 00 63 87 06 50
-05 45 63 83 A6 28 13 95 04 01 41 81 A6 8E B3 CF
-8E 00 93 F0 FE 0F 93 F8 1F 00 13 DF 10 00 93 53
-14 00 63 8B 08 00 69 77 93 02 17 00 B3 C7 53 00
-13 93 07 01 93 53 03 01 33 48 7F 00 93 75 18 00
-93 D6 20 00 93 D8 13 00 91 C9 69 76 13 04 16 00
-33 CE 88 00 93 1F 0E 01 93 D8 0F 01 33 CF 16 01
-13 77 1F 00 93 D2 30 00 93 D6 18 00 11 CB 69 73
-93 03 13 00 B3 C7 76 00 13 98 07 01 93 56 08 01
-B3 C5 D2 00 13 F4 15 00 13 D6 40 00 13 D7 16 00
-11 C8 69 7E 93 0F 1E 00 B3 48 F7 01 13 9F 08 01
-13 57 0F 01 B3 42 C7 00 13 F3 12 00 93 D3 50 00
-13 54 17 00 63 0B 03 00 69 78 93 06 18 00 B3 47
-D4 00 93 95 07 01 13 D4 05 01 33 46 74 00 13 7E
-16 00 93 DF 60 00 13 53 14 00 63 0B 0E 00 E9 78
-13 8F 18 00 33 47 E3 01 93 12 07 01 13 D3 02 01
-B3 43 F3 01 13 F8 13 00 93 D0 70 00 13 5E 13 00
-63 0B 08 00 E9 76 93 85 16 00 B3 47 BE 00 13 94
-07 01 13 5E 04 01 13 76 1E 00 93 52 1E 00 63 0B
-16 00 E9 7F 93 88 1F 00 33 CF 12 01 13 17 0F 01
-93 52 07 01 21 81 33 43 55 00 93 73 F5 0F 13 78
-13 00 93 D0 13 00 13 DE 12 00 63 0B 08 00 E9 76
-93 85 16 00 B3 47 BE 00 13 94 07 01 13 5E 04 01
-33 46 1E 00 93 7F 16 00 93 D8 23 00 13 53 1E 00
-63 8B 0F 00 69 7F 13 07 1F 00 B3 42 E3 00 13 95
-02 01 13 53 05 01 33 C8 68 00 93 70 18 00 93 D5
-33 00 93 5F 13 00 63 8B 00 00 E9 76 13 84 16 00
-B3 C7 8F 00 13 9E 07 01 93 5F 0E 01 33 C6 F5 01
-93 78 16 00 13 DF 43 00 13 D8 1F 00 63 8B 08 00
-69 77 93 02 17 00 33 45 58 00 13 13 05 01 13 58
-03 01 B3 40 0F 01 93 F5 10 00 13 D4 53 00 93 58
-18 00 91 C9 E9 76 13 8E 16 00 B3 C7 C8 01 93 9F
-07 01 93 D8 0F 01 33 46 14 01 13 7F 16 00 13 D7
-63 00 93 D0 18 00 63 0B 0F 00 E9 72 13 85 12 00
-33 C3 A0 00 13 18 03 01 93 50 08 01 B3 45 17 00
-13 F4 15 00 93 D3 73 00 93 D8 10 00 11 C8 E9 76
-13 8E 16 00 B3 C7 C8 01 93 9F 07 01 93 D8 0F 01
-33 C6 13 01 13 7F 16 00 13 D8 18 00 63 0B 0F 00
-69 77 93 02 17 00 33 45 58 00 13 13 05 01 13 58
-03 01 13 F5 FE 07 93 F4 04 F0 F2 40 62 44 B3 6E
-95 00 23 1C 09 03 13 E9 0E 08 23 90 29 01 D2 44
-42 49 B2 49 05 61 82 80 D0 55 94 59 03 25 89 02
-CC 59 EF B0 3F F5 33 46 A4 00 93 78 F5 0F 93 1E
-05 01 13 7E 16 00 13 DF 0E 01 93 DF 18 00 13 53
-14 00 63 0B 0E 00 E9 77 93 80 17 00 33 47 13 00
-93 12 07 01 13 D3 02 01 B3 46 F3 01 93 F3 16 00
-13 D8 28 00 13 5E 13 00 63 8B 03 00 E9 75 13 84
-15 00 33 45 8E 00 13 16 05 01 13 5E 06 01 B3 4E
-0E 01 93 FF 1E 00 93 D7 38 00 93 53 1E 00 63 8B
-0F 00 E9 70 13 87 10 00 B3 C2 E3 00 13 93 02 01
-93 53 03 01 B3 C6 F3 00 13 F8 16 00 93 D5 48 00
-93 DE 13 00 63 0B 08 00 69 74 13 06 14 00 33 C5
-CE 00 13 1E 05 01 93 5E 0E 01 B3 CF BE 00 93 F7
-1F 00 93 D0 58 00 13 D8 1E 00 91 CB 69 77 93 02
-17 00 33 43 58 00 93 13 03 01 13 D8 03 01 B3 46
-18 00 93 F5 16 00 13 D4 68 00 93 5F 18 00 91 C9
-69 76 13 0E 16 00 33 C5 CF 01 93 1E 05 01 93 DF
-0E 01 B3 C7 8F 00 93 F0 17 00 93 D8 78 00 13 D8
-1F 00 63 8B 00 00 69 77 93 02 17 00 33 43 58 00
-93 13 03 01 13 D8 03 01 93 76 18 00 13 55 18 00
-63 8B 16 01 E9 75 13 84 15 00 33 46 85 00 13 1E
-06 01 13 55 0E 01 93 5E 8F 00 B3 4F D5 01 93 F0
-1F 00 93 58 8F 00 93 53 15 00 13 5F 9F 00 63 8B
-00 00 E9 77 13 87 17 00 B3 C2 E3 00 13 93 02 01
-93 53 03 01 33 C8 E3 01 93 75 18 00 93 D6 28 00
-93 DE 13 00 91 C9 69 74 13 06 14 00 33 CE CE 00
-13 15 0E 01 93 5E 05 01 B3 CF DE 00 93 F0 1F 00
-13 DF 38 00 93 D3 1E 00 63 8B 00 00 E9 77 13 87
-17 00 B3 C2 E3 00 13 93 02 01 93 53 03 01 33 C8
-E3 01 93 75 18 00 13 D4 48 00 93 DE 13 00 91 C9
-E9 76 13 86 16 00 33 CE CE 00 13 15 0E 01 93 5E
-05 01 B3 CF 8E 00 93 F0 1F 00 13 DF 58 00 93 D3
-1E 00 63 8B 00 00 E9 77 13 87 17 00 B3 C2 E3 00
-13 93 02 01 93 53 03 01 33 C8 E3 01 93 75 18 00
-13 D4 68 00 93 DE 13 00 91 C9 E9 76 13 86 16 00
-33 CE CE 00 13 15 0E 01 93 5E 05 01 B3 CF 8E 00
-93 F0 1F 00 93 D8 78 00 13 D3 1E 00 63 8B 00 00
-69 7F 93 07 1F 00 33 47 F3 00 93 12 07 01 13 D3
-02 01 93 73 13 00 13 55 13 00 63 8B 13 01 69 78
-93 05 18 00 33 44 B5 00 93 16 04 01 13 D5 06 01
-03 56 C9 03 13 1E 05 01 03 54 89 03 93 5E 0E 41
-E3 17 06 B0 23 1E A9 02 19 B6 93 03 20 02 3A 88
-63 54 77 00 13 08 20 02 83 25 49 01 83 16 29 00
-03 16 09 00 03 25 89 01 A2 87 13 77 F8 0F EF F0
-0F 85 83 55 E9 03 13 14 05 01 93 5E 04 41 03 54
-89 03 E3 96 05 AC 23 1F A9 02 D1 B4 01 11 4A C8
-03 19 05 00 06 CE 22 CC 93 57 79 40 26 CA 52 C4
-4E C6 93 F0 17 00 2E 8A B2 84 13 74 F9 07 63 9E
-00 28 13 57 39 40 93 72 F7 00 93 96 42 00 13 73
-79 00 03 54 86 03 AA 89 33 E7 D2 00 63 00 03 7C
-05 45 63 0D A3 52 13 15 09 01 41 81 CA 8E B3 4F
-D4 01 93 F0 FE 0F 93 F8 1F 00 13 DF 10 00 93 53
-14 00 63 8B 08 00 69 77 93 02 17 00 B3 C7 53 00
-13 93 07 01 93 53 03 01 33 C8 E3 01 93 75 18 00
-93 D6 20 00 93 D8 13 00 91 C9 69 76 13 04 16 00
-33 CE 88 00 93 1F 0E 01 93 D8 0F 01 33 CF D8 00
-13 77 1F 00 93 D2 30 00 93 D6 18 00 11 CB 69 73
-93 03 13 00 B3 C7 76 00 13 98 07 01 93 56 08 01
-B3 C5 56 00 13 F4 15 00 13 D6 40 00 13 D7 16 00
-11 C8 69 7E 93 0F 1E 00 B3 48 F7 01 13 9F 08 01
-13 57 0F 01 B3 42 C7 00 13 F3 12 00 93 D3 50 00
-13 54 17 00 63 0B 03 00 69 78 93 06 18 00 B3 47
-D4 00 93 95 07 01 13 D4 05 01 33 46 74 00 13 7E
-16 00 93 DF 60 00 13 53 14 00 63 0B 0E 00 E9 78
-13 8F 18 00 33 47 E3 01 93 12 07 01 13 D3 02 01
-B3 43 F3 01 13 F8 13 00 93 D0 70 00 13 5E 13 00
-63 0B 08 00 E9 76 93 85 16 00 B3 47 BE 00 13 94
-07 01 13 5E 04 01 13 76 1E 00 93 52 1E 00 63 0B
-16 00 E9 7F 93 88 1F 00 33 CF 12 01 13 17 0F 01
-93 52 07 01 21 81 33 43 55 00 93 73 F5 0F 13 78
-13 00 93 D0 13 00 13 DE 12 00 63 0B 08 00 E9 76
-93 85 16 00 B3 47 BE 00 13 94 07 01 13 5E 04 01
-33 46 1E 00 93 7F 16 00 93 D8 23 00 13 53 1E 00
-63 8B 0F 00 69 7F 13 07 1F 00 B3 42 E3 00 13 95
-02 01 13 53 05 01 33 48 13 01 93 70 18 00 93 D5
-33 00 93 5F 13 00 63 8B 00 00 E9 76 13 84 16 00
-B3 C7 8F 00 13 9E 07 01 93 5F 0E 01 33 C6 BF 00
-93 78 16 00 13 DF 43 00 13 D8 1F 00 63 8B 08 00
-69 77 93 02 17 00 33 45 58 00 13 13 05 01 13 58
-03 01 B3 40 E8 01 93 F5 10 00 13 D4 53 00 93 58
-18 00 91 C9 E9 76 13 8E 16 00 B3 C7 C8 01 93 9F
-07 01 93 D8 0F 01 33 C6 88 00 13 7F 16 00 13 D7
-63 00 93 D0 18 00 63 0B 0F 00 E9 72 13 85 12 00
-33 C3 A0 00 13 18 03 01 93 50 08 01 B3 C5 E0 00
-13 F4 15 00 93 D3 73 00 93 D8 10 00 11 C8 E9 76
-13 8E 16 00 B3 C7 C8 01 93 9F 07 01 93 D8 0F 01
-33 C6 13 01 13 7F 16 00 13 D8 18 00 63 0B 0F 00
-69 77 93 02 17 00 33 45 58 00 13 13 05 01 13 58
-03 01 13 F4 FE 07 13 79 09 F0 B3 6E 24 01 23 9C
-04 03 93 E0 0E 08 23 90 19 00 03 19 0A 00 93 59
-79 40 93 F5 19 00 13 78 F9 07 63 9F 05 28 93 53
-39 40 13 FE F3 00 93 16 4E 00 93 77 79 00 83 D9
-84 03 33 67 DE 00 63 8A 07 54 85 42 63 86 57 58
-13 15 09 01 41 81 4A 88 B3 45 38 01 93 70 F8 0F
-93 FE 15 00 13 D7 10 00 93 D8 19 00 63 8B 0E 00
-E9 73 13 8E 13 00 B3 CF C8 01 93 97 0F 01 93 D8
-07 01 33 4F 17 01 93 72 1F 00 93 D6 20 00 93 DE
-18 00 63 8B 02 00 69 76 93 09 16 00 33 C3 3E 01
-93 15 03 01 93 DE 05 01 33 C7 DE 00 93 73 17 00
-13 DE 30 00 93 D2 1E 00 63 8B 03 00 E9 7F 93 88
-1F 00 B3 C7 12 01 13 9F 07 01 93 52 0F 01 B3 C6
-C2 01 13 F6 16 00 93 D9 40 00 93 D3 12 00 11 CA
-69 73 93 05 13 00 B3 CE B3 00 13 97 0E 01 93 53
-07 01 33 CE 33 01 93 7F 1E 00 93 D8 50 00 13 D6
-13 00 63 8B 0F 00 69 7F 93 02 1F 00 B3 47 56 00
-93 96 07 01 13 D6 06 01 B3 49 16 01 13 F3 19 00
-93 DE 60 00 93 5F 16 00 63 0B 03 00 E9 75 13 87
-15 00 B3 C3 EF 00 13 9E 03 01 93 5F 0E 01 B3 C8
-FE 01 13 FF 18 00 93 D0 70 00 93 D9 1F 00 63 0B
-0F 00 E9 72 93 86 12 00 B3 C7 D9 00 13 96 07 01
-93 59 06 01 13 F3 19 00 13 DE 19 00 63 0B 13 00
-E9 7E 93 85 1E 00 33 47 BE 00 93 13 07 01 13 DE
-03 01 21 81 B3 4F C5 01 93 78 F5 0F 13 FF 1F 00
-93 D0 18 00 93 59 1E 00 63 0B 0F 00 E9 72 93 86
-12 00 B3 C7 D9 00 13 96 07 01 93 59 06 01 33 C3
-19 00 93 7E 13 00 13 D7 28 00 93 DF 19 00 63 8B
-0E 00 E9 75 93 83 15 00 33 CE 7F 00 13 15 0E 01
-93 5F 05 01 33 CF EF 00 93 70 1F 00 93 D2 38 00
-13 D3 1F 00 63 8B 00 00 E9 76 13 86 16 00 B3 47
-C3 00 93 99 07 01 13 D3 09 01 B3 4E 53 00 13 F7
-1E 00 93 D3 48 00 13 5F 13 00 11 CB E9 75 13 8E
-15 00 33 45 CF 01 93 1F 05 01 13 DF 0F 01 B3 C0
-E3 01 93 F2 10 00 93 D6 58 00 93 5E 1F 00 63 8B
-02 00 69 76 93 09 16 00 B3 C7 3E 01 13 93 07 01
-93 5E 03 01 33 C7 D6 01 93 73 17 00 13 DE 68 00
-93 D0 1E 00 63 8B 03 00 E9 75 13 85 15 00 B3 CF
-A0 00 13 9F 0F 01 93 50 0F 01 B3 42 1E 00 13 F6
-12 00 93 D8 78 00 93 DE 10 00 11 CA E9 76 93 89
-16 00 B3 C7 3E 01 13 93 07 01 93 5E 03 01 33 C7
-D8 01 93 73 17 00 13 DF 1E 00 63 8B 03 00 69 7E
-93 05 1E 00 33 45 BF 00 93 1F 05 01 13 DF 0F 01
-13 78 F8 07 13 79 09 F0 B3 60 28 01 23 9C E4 03
-93 E4 00 08 23 10 9A 00 F2 40 33 05 04 41 62 44
-D2 44 42 49 B2 49 22 4A 05 61 82 80 14 5A CC 58
-50 56 88 54 EF B0 0F F1 33 46 A4 00 93 78 F5 0F
-93 1E 05 01 13 7E 16 00 13 DF 0E 01 93 DF 18 00
-13 53 14 00 63 0B 0E 00 E9 77 93 80 17 00 33 47
-13 00 93 12 07 01 13 D3 02 01 B3 46 F3 01 93 F3
-16 00 13 D8 28 00 13 5E 13 00 63 8B 03 00 E9 75
-13 84 15 00 33 45 8E 00 13 16 05 01 13 5E 06 01
-B3 4E 0E 01 93 FF 1E 00 93 D7 38 00 93 53 1E 00
-63 8B 0F 00 E9 70 13 87 10 00 B3 C2 E3 00 13 93
-02 01 93 53 03 01 B3 C6 F3 00 13 F8 16 00 93 D5
-48 00 93 DE 13 00 63 0B 08 00 69 74 13 06 14 00
-33 C5 CE 00 13 1E 05 01 93 5E 0E 01 B3 CF BE 00
-93 F7 1F 00 93 D0 58 00 13 D8 1E 00 91 CB 69 77
-93 02 17 00 33 43 58 00 93 13 03 01 13 D8 03 01
-B3 46 18 00 93 F5 16 00 13 D4 68 00 93 5F 18 00
-91 C9 69 76 13 0E 16 00 33 C5 CF 01 93 1E 05 01
-93 DF 0E 01 B3 C7 8F 00 93 F0 17 00 93 D8 78 00
-13 D8 1F 00 63 8B 00 00 69 77 93 02 17 00 33 43
-58 00 93 13 03 01 13 D8 03 01 93 76 18 00 13 55
-18 00 63 8B 16 01 E9 75 13 84 15 00 33 46 85 00
-13 1E 06 01 13 55 0E 01 93 5E 8F 00 B3 4F D5 01
-93 F0 1F 00 93 58 8F 00 93 53 15 00 13 5F 9F 00
-63 8B 00 00 E9 77 13 87 17 00 B3 C2 E3 00 13 93
-02 01 93 53 03 01 33 C8 E3 01 93 75 18 00 93 D6
-28 00 93 DE 13 00 91 C9 69 74 13 06 14 00 33 CE
-CE 00 13 15 0E 01 93 5E 05 01 B3 CF DE 00 93 F0
-1F 00 13 DF 38 00 93 D3 1E 00 63 8B 00 00 E9 77
-13 87 17 00 B3 C2 E3 00 13 93 02 01 93 53 03 01
-33 C8 E3 01 93 75 18 00 13 D4 48 00 93 DE 13 00
-91 C9 E9 76 13 86 16 00 33 CE CE 00 13 15 0E 01
-93 5E 05 01 B3 CF 8E 00 93 F0 1F 00 13 DF 58 00
-93 D3 1E 00 63 8B 00 00 E9 77 13 87 17 00 B3 C2
-E3 00 13 93 02 01 93 53 03 01 33 C8 E3 01 93 75
-18 00 13 D4 68 00 93 DE 13 00 91 C9 E9 76 13 86
-16 00 33 CE CE 00 13 15 0E 01 93 5E 05 01 B3 CF
-8E 00 93 F0 1F 00 93 D8 78 00 13 D3 1E 00 63 8B
-00 00 69 7F 93 07 1F 00 33 47 F3 00 93 12 07 01
-13 D3 02 01 93 73 13 00 13 55 13 00 63 8B 13 01
-69 78 93 05 18 00 33 44 B5 00 93 16 04 01 13 D5
-06 01 03 D6 C4 03 13 1E 05 01 03 D4 84 03 93 5E
-0E 41 E3 1E 06 84 23 9E A4 02 91 B8 93 03 20 02
-3A 88 63 54 77 00 13 08 20 02 CC 48 83 96 24 00
-03 96 04 00 88 4C A2 87 13 77 F8 0F EF E0 3F 81
-83 D5 E4 03 13 14 05 01 93 5E 04 41 03 D4 84 03
-E3 9F 05 80 23 9F A4 02 19 B8 93 0F 20 02 BA 88
-63 54 F7 01 93 08 20 02 03 96 04 00 83 96 24 00
-CC 48 88 4C CE 87 13 F7 F8 0F EF E0 4F FD 03 D6
-E4 03 13 1F 05 01 83 D9 84 03 13 58 0F 41 E3 15
-06 A8 23 9F A4 02 49 B4 CC 58 94 58 D0 54 88 54
-EF B0 4F C1 33 43 35 01 13 77 F5 0F 13 78 13 00
-42 05 93 5E 05 01 93 55 17 00 93 D7 19 00 63 0B
-08 00 E9 70 93 89 10 00 B3 C3 37 01 13 9E 03 01
-93 57 0E 01 B3 C6 F5 00 93 FF 16 00 93 58 27 00
-13 D8 17 00 63 8B 0F 00 69 76 13 0F 16 00 B3 42
-E8 01 13 93 02 01 13 58 03 01 33 45 18 01 93 75
-15 00 93 50 37 00 93 5F 18 00 91 C9 E9 79 93 83
-19 00 33 CE 7F 00 93 17 0E 01 93 DF 07 01 B3 C6
-F0 01 93 F8 16 00 13 5F 47 00 13 D5 1F 00 63 8B
-08 00 69 76 93 02 16 00 33 43 55 00 13 18 03 01
-13 55 08 01 B3 45 AF 00 93 F0 15 00 93 59 57 00
-93 58 15 00 63 8B 00 00 E9 73 13 8E 13 00 B3 C7
-C8 01 93 9F 07 01 93 D8 0F 01 B3 C6 38 01 13 FF
-16 00 93 52 67 00 93 D5 18 00 63 0B 0F 00 69 76
-13 03 16 00 33 C8 65 00 13 15 08 01 93 55 05 01
-B3 C0 55 00 93 F9 10 00 1D 83 93 D8 15 00 63 8B
-09 00 E9 73 13 8E 13 00 B3 C7 C8 01 93 9F 07 01
-93 D8 0F 01 93 F6 18 00 13 D8 18 00 63 8B E6 00
-69 7F 93 02 1F 00 33 46 58 00 13 13 06 01 13 58
-03 01 13 D5 8E 00 B3 45 05 01 93 F0 15 00 93 D9
-8E 00 93 5F 18 00 93 DE 9E 00 63 8B 00 00 69 77
-93 03 17 00 33 CE 7F 00 93 17 0E 01 93 DF 07 01
-B3 C8 FE 01 13 FF 18 00 93 D6 29 00 13 D5 1F 00
-63 0B 0F 00 E9 72 13 86 12 00 33 43 C5 00 13 18
-03 01 13 55 08 01 B3 C5 A6 00 93 F0 15 00 93 DE
-39 00 93 5F 15 00 63 8B 00 00 69 77 93 03 17 00
-33 CE 7F 00 93 17 0E 01 93 DF 07 01 B3 C8 FE 01
-13 FF 18 00 93 D2 49 00 13 D5 1F 00 63 0B 0F 00
-E9 76 13 86 16 00 33 43 C5 00 13 18 03 01 13 55
-08 01 B3 C5 A2 00 93 F0 15 00 93 DE 59 00 93 5F
-15 00 63 8B 00 00 69 77 93 03 17 00 33 CE 7F 00
-93 17 0E 01 93 DF 07 01 B3 C8 FE 01 13 FF 18 00
-93 D2 69 00 13 D5 1F 00 63 0B 0F 00 E9 76 13 86
-16 00 33 43 C5 00 13 18 03 01 13 55 08 01 B3 C5
-A2 00 93 F0 15 00 93 D9 79 00 93 5F 15 00 63 8B
-00 00 E9 7E 13 87 1E 00 B3 C3 EF 00 13 9E 03 01
-93 5F 0E 01 93 F7 1F 00 13 D5 1F 00 63 8B 37 01
-E9 78 13 8F 18 00 B3 42 E5 01 93 96 02 01 13 D5
-06 01 03 D6 C4 03 13 13 05 01 83 D9 84 03 13 58
-03 41 E3 13 06 80 23 9E A4 02 6F F0 EF FF 03 1E
-45 00 39 71 22 DC 6A C8 06 DE 26 DA 4A D8 4E D6
-52 D4 56 D2 5A D0 5E CE 62 CC 66 CA 6E C6 40 51
-2A 8D E3 52 C0 0B 2E 8B 01 48 81 4E 81 4C 01 4F
-13 7C F8 0F 63 4D 0B 38 E3 0D 04 08 A2 87 19 A0
-9C 43 99 C7 83 A2 47 00 83 93 22 00 E3 9A 63 FF
-22 8A 03 26 0A 00 01 47 23 20 EA 00 52 84 3D C6
-08 42 23 20 46 01 52 87 32 84 2D C1 14 41 10 C1
-32 87 2A 84 A1 CE 84 42 88 C2 2A 87 36 84 B9 C4
-03 A9 04 00 94 C0 36 87 26 84 63 01 09 04 83 28
-09 00 23 20 99 00 26 87 4A 84 63 89 08 02 83 A9
-08 00 23 A0 28 01 4A 87 46 84 63 81 09 02 03 AA
-09 00 23 A0 19 01 46 87 4E 84 63 09 0A 00 03 26
-0A 00 4E 87 23 20 EA 00 52 84 59 FA 63 8E 07 30
-83 AA 47 00 13 83 1C 00 93 1B 03 01 83 9D 0A 00
-93 DC 0B 01 93 FF 1D 00 63 8B 0F 00 13 D7 9D 40
-93 70 17 00 06 9F 93 12 0F 01 13 DF 02 01 83 A3
-07 00 63 8A 03 00 03 A6 03 00 90 C3 1C 40 23 A0
-F3 00 23 20 74 00 63 47 0B 00 05 0B 13 1A 0B 01
-13 5B 0A 41 05 08 93 1A 08 01 13 D8 0A 41 E3 11
-0E F1 13 9E 2C 00 33 03 DE 41 B3 0B 6F 00 93 9C
-0B 01 93 D4 0C 01 63 49 B0 66 03 2D 04 00 A2 8D
-83 2A 0D 00 83 2B 4D 00 83 A7 4A 00 03 A5 0A 00
-23 22 FD 00 23 A2 7A 01 23 20 AD 00 23 A0 0A 00
-63 48 0B 22 03 AC 4D 00 83 AD 0D 00 83 18 2C 00
-63 82 68 25 E3 98 0D FE 03 2B 04 00 83 2D 0B 00
-6E 87 83 29 44 00 69 78 93 00 18 00 03 9E 09 00
-13 13 0E 01 93 5C 03 01 13 DD 8C 00 13 7F FE 0F
-93 15 8E 01 13 15 8D 01 13 5A 1F 00 13 5C 2F 00
-13 59 3F 00 93 53 4F 00 93 52 5F 00 93 5F 6F 00
-13 56 7F 00 93 D7 85 41 93 59 85 41 13 DF 9C 00
-93 DE AC 00 13 DE BC 00 13 D3 CC 00 93 D8 DC 00
-13 D8 EC 00 93 D6 FC 00 B3 CC 97 00 13 FD 1C 00
-13 D5 14 00 63 08 0D 00 B3 44 15 00 93 95 04 01
-13 D5 05 01 B3 4C AA 00 13 FD 1C 00 05 81 63 08
-0D 00 B3 44 15 00 93 95 04 01 13 D5 05 01 B3 4C
-AC 00 13 FD 1C 00 05 81 63 08 0D 00 B3 44 15 00
-93 95 04 01 13 D5 05 01 B3 4C A9 00 13 FD 1C 00
-05 81 63 08 0D 00 B3 44 15 00 93 95 04 01 13 D5
-05 01 B3 CC A3 00 13 FD 1C 00 05 81 63 08 0D 00
-B3 44 15 00 93 95 04 01 13 D5 05 01 B3 CC A2 00
-13 FD 1C 00 05 81 63 08 0D 00 B3 44 15 00 93 95
-04 01 13 D5 05 01 B3 CC AF 00 13 FD 1C 00 05 81
-63 08 0D 00 B3 44 15 00 93 95 04 01 13 D5 05 01
-93 7C 15 00 93 55 15 00 63 88 CC 00 33 CD 15 00
-93 14 0D 01 93 D5 04 01 33 C5 B9 00 93 7C 15 00
-85 81 63 88 0C 00 33 CD 15 00 93 14 0D 01 93 D5
-04 01 33 45 BF 00 93 7C 15 00 85 81 63 88 0C 00
-33 CD 15 00 93 14 0D 01 93 D5 04 01 33 C5 BE 00
-93 7C 15 00 85 81 63 88 0C 00 33 CD 15 00 93 14
-0D 01 93 D5 04 01 33 45 BE 00 93 7C 15 00 85 81
-63 88 0C 00 33 CD 15 00 93 14 0D 01 93 D5 04 01
-33 45 B3 00 93 7C 15 00 85 81 63 88 0C 00 33 CD
-15 00 93 14 0D 01 93 D5 04 01 33 C5 B8 00 93 7C
-15 00 85 81 63 88 0C 00 33 CD 15 00 93 14 0D 01
-93 D5 04 01 33 45 B8 00 93 7C 15 00 85 81 63 88
-0C 00 33 CD 15 00 93 14 0D 01 93 D5 04 01 13 F5
-15 00 93 D4 15 00 63 08 D5 00 B3 CC 14 00 13 9D
-0C 01 93 54 0D 01 63 8A 0D 06 83 AD 0D 00 A9 BD
-83 AE 4D 00 83 AD 0D 00 83 C6 0E 00 63 8C 86 01
-E3 8C 0D DC 83 AE 4D 00 83 AD 0D 00 83 C6 0E 00
-E3 98 86 FF 03 2B 04 00 03 27 0B 00 D9 B3 63 02
-04 50 A2 87 21 A0 9C 43 E3 8C 07 C6 D8 43 83 40
-07 00 E3 9A 80 FF AD B1 48 43 85 0E 93 96 0E 01
-83 04 15 00 93 DE 06 01 13 F9 14 00 B3 08 2F 01
-93 99 08 01 13 DF 09 01 39 B3 83 2D 4B 00 01 4E
-01 43 23 A2 BA 01 23 22 7B 01 23 A0 EA 00 23 20
-5B 01 85 49 81 4C 05 4D 93 FA 79 00 85 0C A2 87
-01 47 63 8B 0A 04 05 4B 63 83 6A 05 89 4B 63 8D
-7A 03 8D 40 63 87 1A 02 11 4A 63 81 4A 03 15 4C
-63 8B 8A 01 19 49 63 85 2A 01 1C 40 05 47 A5 C7
-9C 43 05 07 AD C3 9C 43 05 07 B1 CF 9C 43 05 07
-B9 CB 9C 43 05 07 A1 CB 9C 43 05 07 A9 C7 9C 43
-05 07 B1 C3 63 01 37 05 9C 43 05 07 BA 83 85 CF
-9C 43 05 07 8D CB 9C 43 13 87 23 00 8D C7 9C 43
-13 87 33 00 8D C3 9C 43 13 87 43 00 89 CF 9C 43
-13 87 53 00 89 CB 9C 43 13 87 63 00 89 C7 9C 43
-13 87 73 00 E1 F3 CE 86 25 C7 AD CE A5 CF 83 2D
-44 00 83 AA 47 00 03 9B 0D 00 83 9B 2A 00 83 95
-2D 00 93 10 0B 01 13 DC 00 01 13 75 0B F0 13 59
-8C 00 B3 63 25 01 23 90 7D 00 83 98 0A 00 B3 8E
-75 41 13 98 08 01 13 5A 08 01 93 F2 08 F0 93 5F
-8A 00 33 E6 F2 01 23 90 CA 00 63 55 D0 03 3E 8F
-9C 43 FD 16 63 0D 0E 00 23 20 EE 01 7A 8E 51 FF
-91 CE 85 C3 3E 8F FD 16 9C 43 E3 17 0E FE 7A 83
-7A 8E F5 B7 22 8F 7D 17 00 40 E9 BF 99 C3 3E 84
-E1 BD 23 20 0E 00 63 8E AC 01 86 09 63 08 03 00
-9A 87 01 4E 01 43 81 4C 3E 84 7D BD 23 20 00 00
-02 90 03 27 03 00 63 01 07 22 03 24 43 00 E9 72
-93 8C 12 00 83 1F 04 00 13 96 0F 01 93 56 06 01
-93 DE 86 00 13 FF FF 0F 13 9E 8F 01 13 93 8E 01
-93 55 8E 41 13 5D 1F 00 93 5D 2F 00 93 5A 3F 00
-13 5B 4F 00 93 5B 5F 00 93 50 6F 00 13 5C 7F 00
-13 55 83 41 13 D9 96 00 93 D3 A6 00 93 D7 B6 00
-93 D9 C6 00 93 D8 D6 00 13 D8 E6 00 13 D4 F6 00
-33 CA 95 00 93 72 1A 00 13 D6 14 00 63 88 02 00
-B3 44 96 01 93 9F 04 01 13 D6 0F 01 B3 46 CD 00
-13 FF 16 00 13 53 16 00 63 08 0F 00 B3 4E 93 01
-13 9E 0E 01 13 53 0E 01 33 CA 6D 00 93 72 1A 00
-13 56 13 00 63 88 02 00 B3 44 96 01 93 9F 04 01
-13 D6 0F 01 B3 C6 CA 00 13 FF 16 00 13 53 16 00
-63 08 0F 00 B3 4E 93 01 13 9E 0E 01 13 53 0E 01
-33 4A 6B 00 93 72 1A 00 13 56 13 00 63 88 02 00
-B3 44 96 01 93 9F 04 01 13 D6 0F 01 B3 C6 CB 00
-13 FF 16 00 13 53 16 00 63 08 0F 00 B3 4E 93 01
-13 9E 0E 01 13 53 0E 01 33 CA 60 00 93 72 1A 00
-13 56 13 00 63 88 02 00 B3 44 96 01 93 9F 04 01
-13 D6 0F 01 93 76 16 00 13 5E 16 00 63 88 86 01
-33 4F 9E 01 93 1E 0F 01 13 DE 0E 01 33 43 C5 01
-13 7A 13 00 93 5F 1E 00 63 08 0A 00 B3 C2 9F 01
-93 94 02 01 93 DF 04 01 33 46 F9 01 93 76 16 00
-13 DE 1F 00 99 C6 33 4F 9E 01 93 1E 0F 01 13 DE
-0E 01 33 C3 C3 01 13 7A 13 00 93 5F 1E 00 63 08
-0A 00 B3 C2 9F 01 93 94 02 01 93 DF 04 01 33 C6
-F7 01 93 76 16 00 13 DE 1F 00 99 C6 33 4F 9E 01
-93 1E 0F 01 13 DE 0E 01 33 C3 C9 01 13 7A 13 00
-93 5F 1E 00 63 08 0A 00 B3 C2 9F 01 93 94 02 01
-93 DF 04 01 33 C6 F8 01 93 76 16 00 13 DE 1F 00
-99 C6 33 4F 9E 01 93 1E 0F 01 13 DE 0E 01 33 43
-C8 01 13 7A 13 00 93 5F 1E 00 63 08 0A 00 B3 C2
-9F 01 93 94 02 01 93 DF 04 01 13 F6 1F 00 93 D4
-1F 00 63 08 86 00 B3 C6 94 01 13 9F 06 01 93 54
-0F 01 18 43 E3 16 07 E4 F2 50 62 54 42 59 B2 59
-22 5A 92 5A 02 5B F2 4B 62 4C D2 4C 42 4D B2 4D
-26 85 D2 54 21 61 82 80 05 4A E3 09 04 DA 81 4C
-81 4A 81 4B 93 75 7A 00 85 0B 22 86 01 49 B1 C9
-85 4D 63 83 B5 05 89 4F 63 8D F5 03 0D 47 63 87
-E5 02 91 40 63 81 15 02 95 42 63 8B 55 00 19 4F
-63 85 E5 01 10 40 05 49 25 C6 10 42 05 09 2D C2
-10 42 05 09 31 CE 10 42 05 09 39 CA 10 42 05 09
-21 CA 10 42 05 09 29 C6 10 42 05 09 31 C2 63 01
-49 05 10 42 05 09 CA 83 05 CE 10 42 05 09 0D CA
-10 42 13 89 23 00 0D C6 10 42 13 89 33 00 0D C2
-10 42 13 89 43 00 09 CE 10 42 13 89 53 00 09 CA
-10 42 13 89 63 00 09 C6 10 42 13 89 73 00 61 F2
-A2 89 D2 8D 32 84 63 07 09 02 63 80 0D 04 15 CC
-4C 40 03 A5 49 00 6A 86 EF E0 5F C8 63 57 A0 02
-A2 87 00 40 FD 1D 63 8F 0C 00 23 A0 FC 00 BE 8C
-E3 1D 09 FC 63 80 0D 02 19 CC A2 87 FD 1D 00 40
-E3 95 0C FE BE 8A BE 8C E5 B7 CE 87 7D 19 83 A9
-09 00 D1 BF 01 F8 23 A0 0C 00 05 44 63 89 8B 00
-06 0A 56 84 DD BD 01 4C 2E 8B 81 44 AD B8 56 84
-AD B8 83 27 00 00 02 90 01 11 26 CA 44 4D 22 CC
-4A C8 4E C6 06 CE 69 79 23 2C 05 02 23 2E 05 02
-AA 89 01 44 05 09 63 8E 04 40 85 45 4E 85 EF F0
-0F F0 83 D7 89 03 13 77 F5 0F 13 56 17 00 B3 C6
-A7 00 93 F2 16 00 93 D3 17 00 63 88 02 00 B3 C0
-23 01 13 93 00 01 93 53 03 01 B3 C5 C3 00 13 F8
-15 00 93 58 27 00 13 DF 13 00 63 08 08 00 33 4E
-2F 01 93 1E 0E 01 13 DF 0E 01 B3 4F 1F 01 93 F6
-1F 00 93 52 37 00 93 50 1F 00 99 C6 B3 C7 20 01
-13 96 07 01 93 50 06 01 33 C3 50 00 93 73 13 00
-93 55 47 00 13 DE 10 00 63 88 03 00 33 48 2E 01
-93 18 08 01 13 DE 08 01 B3 4E BE 00 13 FF 1E 00
-93 5F 57 00 93 57 1E 00 63 08 0F 00 B3 C6 27 01
-93 92 06 01 93 D7 02 01 33 C6 F7 01 93 70 16 00
-13 53 67 00 13 D8 17 00 63 88 00 00 B3 43 28 01
-93 95 03 01 13 D8 05 01 B3 48 68 00 13 FE 18 00
-1D 83 93 5F 18 00 63 08 0E 00 B3 CE 2F 01 13 9F
-0E 01 93 5F 0F 01 93 F6 1F 00 13 D6 1F 00 63 88
-E6 00 B3 42 26 01 93 97 02 01 13 D6 07 01 21 81
-B3 40 C5 00 13 73 F5 0F 93 F3 10 00 93 55 13 00
-13 5E 16 00 63 88 03 00 33 48 2E 01 93 18 08 01
-13 DE 08 01 33 47 BE 00 93 7E 17 00 13 5F 23 00
-93 52 1E 00 63 88 0E 00 B3 CF 22 01 93 96 0F 01
-93 D2 06 01 B3 C7 E2 01 13 F6 17 00 13 55 33 00
-93 D5 12 00 19 C6 B3 C0 25 01 93 93 00 01 93 D5
-03 01 33 C8 A5 00 93 78 18 00 13 5E 43 00 13 DF
-15 00 63 88 08 00 33 47 2F 01 93 1E 07 01 13 DF
-0E 01 B3 4F CF 01 93 F2 1F 00 93 56 53 00 13 55
-1F 00 63 88 02 00 B3 47 25 01 13 96 07 01 13 55
-06 01 B3 40 D5 00 93 F3 10 00 93 55 63 00 13 5E
-15 00 63 88 03 00 33 48 2E 01 93 18 08 01 13 DE
-08 01 33 47 BE 00 93 7E 17 00 13 53 73 00 93 52
-1E 00 63 88 0E 00 33 CF 22 01 93 1F 0F 01 93 D2
-0F 01 B3 C6 62 00 13 F6 16 00 93 D0 12 00 19 C6
-B3 C7 20 01 13 95 07 01 93 50 05 01 FD 55 23 9C
-19 02 4E 85 EF F0 AF CF 83 D3 89 03 13 78 F5 0F
-13 5E 18 00 B3 C5 A3 00 93 F8 15 00 13 D3 13 00
-63 88 08 00 33 47 23 01 93 1E 07 01 13 D3 0E 01
-33 4F C3 01 93 7F 1F 00 93 52 28 00 93 57 13 00
-63 88 0F 00 B3 C6 27 01 13 96 06 01 93 57 06 01
-B3 C0 57 00 93 F3 10 00 93 55 38 00 13 D7 17 00
-63 88 03 00 B3 48 27 01 13 9E 08 01 13 57 0E 01
-B3 4E B7 00 13 F3 1E 00 13 5F 48 00 93 57 17 00
-63 08 03 00 B3 CF 27 01 93 92 0F 01 93 D7 02 01
-B3 C6 E7 01 93 F0 16 00 13 56 58 00 93 D8 17 00
-63 88 00 00 B3 C3 28 01 93 95 03 01 93 D8 05 01
-33 CE C8 00 13 77 1E 00 93 5E 68 00 93 DF 18 00
-19 C7 33 C3 2F 01 13 1F 03 01 93 5F 0F 01 B3 C2
-DF 01 93 F6 12 00 13 58 78 00 13 D6 1F 00 99 C6
-B3 47 26 01 93 90 07 01 13 D6 00 01 93 73 16 00
-13 5E 16 00 63 88 03 01 B3 45 2E 01 93 98 05 01
-13 DE 08 01 21 81 33 47 C5 01 93 7E F5 0F 13 73
-17 00 13 DF 1E 00 13 58 1E 00 63 08 03 00 B3 4F
-28 01 93 92 0F 01 13 D8 02 01 B3 46 E8 01 93 F0
-16 00 13 D6 2E 00 93 55 18 00 63 88 00 00 B3 C7
-25 01 93 93 07 01 93 D5 03 01 B3 C8 C5 00 13 FE
-18 00 13 D5 3E 00 13 DF 15 00 63 08 0E 00 33 47
-2F 01 13 13 07 01 13 5F 03 01 B3 4F AF 00 93 F2
-1F 00 13 D8 4E 00 13 56 1F 00 63 88 02 00 B3 46
-26 01 93 90 06 01 13 D6 00 01 B3 47 06 01 93 F3
-17 00 93 D5 5E 00 13 55 16 00 63 88 03 00 B3 48
-25 01 13 9E 08 01 13 55 0E 01 33 47 B5 00 13 73
-17 00 13 DF 6E 00 13 58 15 00 63 08 03 00 B3 4F
-28 01 93 92 0F 01 13 D8 02 01 B3 46 E8 01 93 F0
-16 00 93 DE 7E 00 93 53 18 00 63 88 00 00 33 C6
-23 01 93 17 06 01 93 D3 07 01 B3 C5 D3 01 93 F8
-15 00 13 D7 13 00 63 88 08 00 33 4E 27 01 13 15
-0E 01 13 57 05 01 23 9C E9 02 01 CC 05 04 E3 96
-84 BE F2 40 62 44 D2 44 42 49 B2 49 01 45 05 61
-82 80 23 9D E9 02 05 44 E3 85 84 FE 05 44 F1 B6
-95 47 63 E5 A7 04 B7 82 00 80 0A 05 13 83 42 71
-B3 03 65 00 83 A5 03 00 82 85 37 96 00 80 03 25
-C6 C4 82 80 B7 98 00 80 03 A5 48 C5 82 80 37 98
-00 80 03 25 08 C5 82 80 37 87 00 80 03 25 47 77
-82 80 B7 86 00 80 03 A5 06 77 82 80 01 45 82 80
-B3 46 B5 00 93 F2 16 00 13 57 15 00 13 D6 15 00
-63 8B 02 00 69 73 93 03 13 00 B3 47 76 00 93 95
-07 01 13 D6 05 01 33 48 E6 00 93 78 18 00 13 5E
-25 00 93 52 16 00 63 8B 08 00 E9 7E 13 8F 1E 00
-B3 CF E2 01 93 96 0F 01 93 D2 06 01 33 C7 C2 01
-13 73 17 00 93 53 35 00 93 D8 12 00 63 0B 03 00
-E9 75 13 86 15 00 B3 C7 C8 00 13 98 07 01 93 58
-08 01 33 CE 78 00 93 7E 1E 00 13 5F 45 00 13 D3
-18 00 63 8B 0E 00 E9 7F 93 86 1F 00 B3 42 D3 00
-13 97 02 01 13 53 07 01 B3 43 E3 01 93 F5 13 00
-13 56 55 00 93 5E 13 00 91 C9 69 78 93 08 18 00
-B3 C7 1E 01 13 9E 07 01 93 5E 0E 01 33 CF CE 00
-93 7F 1F 00 93 56 65 00 93 D5 1E 00 63 8B 0F 00
-E9 72 13 87 12 00 33 C3 E5 00 93 13 03 01 93 D5
-03 01 33 C6 D5 00 13 78 16 00 93 58 75 00 13 DF
-15 00 63 0B 08 00 E9 77 13 8E 17 00 33 45 CF 01
-93 1E 05 01 13 DF 0E 01 93 7F 1F 00 13 55 1F 00
-63 8B 1F 01 E9 76 93 82 16 00 33 47 55 00 13 13
-07 01 13 55 03 01 82 80 B3 C6 A5 00 13 77 F5 0F
-93 F2 16 00 AA 87 13 56 17 00 13 D8 15 00 63 8B
-02 00 E9 75 13 83 15 00 B3 43 68 00 13 95 03 01
-13 58 05 01 B3 48 C8 00 13 FE 18 00 93 5E 27 00
-93 55 18 00 63 0B 0E 00 69 7F 93 0F 1F 00 B3 C6
-F5 01 93 92 06 01 93 D5 02 01 33 C6 D5 01 13 73
-16 00 93 53 37 00 93 DE 15 00 63 0B 03 00 69 78
-93 08 18 00 33 C5 1E 01 13 1E 05 01 93 5E 0E 01
-33 CF 7E 00 93 7F 1F 00 93 56 47 00 93 D3 1E 00
-63 8B 0F 00 E9 72 93 85 12 00 33 C6 B3 00 13 13
-06 01 93 53 03 01 33 C8 D3 00 93 78 18 00 13 5E
-57 00 93 D2 13 00 63 8B 08 00 E9 7E 13 8F 1E 00
-33 C5 E2 01 93 1F 05 01 93 D2 0F 01 B3 C6 C2 01
-93 F5 16 00 13 53 67 00 13 DE 12 00 91 C9 69 76
-93 03 16 00 33 48 7E 00 93 18 08 01 13 DE 08 01
-B3 4E 6E 00 13 FF 1E 00 1D 83 93 55 1E 00 63 0B
-0F 00 E9 7F 93 82 1F 00 33 C5 55 00 93 16 05 01
-93 D5 06 01 13 F3 15 00 13 DE 15 00 63 0B E3 00
-69 76 93 03 16 00 33 48 7E 00 93 18 08 01 13 DE
-08 01 93 DE 87 00 33 CF CE 01 93 7F 1F 00 13 D7
-87 00 13 53 1E 00 A5 83 63 8B 0F 00 E9 72 93 86
-12 00 33 45 D3 00 93 15 05 01 13 D3 05 01 33 C6
-67 00 93 73 16 00 13 58 27 00 93 5F 13 00 63 8B
-03 00 E9 78 13 8E 18 00 B3 CE CF 01 13 9F 0E 01
-93 5F 0F 01 B3 C7 0F 01 93 F2 17 00 93 56 37 00
-93 D3 1F 00 63 8B 02 00 E9 75 13 83 15 00 33 C5
-63 00 13 16 05 01 93 53 06 01 33 C8 D3 00 93 78
-18 00 13 5E 47 00 93 D2 13 00 63 8B 08 00 E9 7E
-13 8F 1E 00 B3 CF E2 01 93 97 0F 01 93 D2 07 01
-B3 C6 C2 01 93 F5 16 00 13 53 57 00 93 D8 12 00
-91 C9 69 76 93 03 16 00 33 C5 78 00 13 18 05 01
-93 58 08 01 33 CE 68 00 93 7E 1E 00 13 5F 67 00
-93 D5 18 00 63 8B 0E 00 E9 7F 93 87 1F 00 B3 C2
-F5 00 93 96 02 01 93 D5 06 01 33 C3 E5 01 13 76
-13 00 1D 83 13 DE 15 00 11 CA E9 73 13 88 13 00
-33 45 0E 01 93 18 05 01 13 DE 08 01 93 7E 1E 00
-13 55 1E 00 63 8B EE 00 69 7F 93 0F 1F 00 B3 47
-F5 01 93 92 07 01 13 D5 02 01 82 80 33 C6 A5 00
-93 76 F5 0F 13 17 05 01 93 72 16 00 AA 87 13 53
-07 01 13 D8 16 00 13 DE 15 00 63 8B 02 00 69 75
-93 03 15 00 B3 45 7E 00 93 98 05 01 13 DE 08 01
-B3 4E 0E 01 13 FF 1E 00 93 DF 26 00 13 55 1E 00
-63 0B 0F 00 69 76 93 02 16 00 33 47 55 00 13 18
-07 01 13 55 08 01 B3 43 F5 01 93 F8 13 00 93 D5
-36 00 93 52 15 00 63 8B 08 00 69 7E 93 0E 1E 00
-33 CF D2 01 93 1F 0F 01 93 D2 0F 01 33 C6 B2 00
-13 77 16 00 13 D8 46 00 13 DE 12 00 11 CB E9 73
-93 88 13 00 33 45 1E 01 93 15 05 01 13 DE 05 01
-B3 4E 0E 01 13 FF 1E 00 93 DF 56 00 93 53 1E 00
-63 0B 0F 00 E9 72 13 86 12 00 33 C7 C3 00 13 18
-07 01 93 53 08 01 B3 C8 F3 01 93 F5 18 00 13 DE
-66 00 93 D2 13 00 91 C9 E9 7E 13 8F 1E 00 33 C5
-E2 01 93 1F 05 01 93 D2 0F 01 33 C6 C2 01 13 77
-16 00 9D 82 13 DE 12 00 11 CB 69 78 93 03 18 00
-B3 48 7E 00 93 95 08 01 13 DE 05 01 93 7E 1E 00
-13 58 1E 00 63 94 DE 38 13 56 83 00 33 47 C8 00
-93 73 17 00 93 56 83 00 13 5F 18 00 13 53 93 00
-63 8B 03 00 E9 78 93 85 18 00 33 4E BF 00 93 1E
-0E 01 13 DF 0E 01 B3 4F 6F 00 93 F2 1F 00 13 D8
-26 00 13 53 1F 00 63 8B 02 00 69 76 13 07 16 00
-33 45 E3 00 93 13 05 01 13 D3 03 01 B3 48 03 01
-93 F5 18 00 13 DE 36 00 13 58 13 00 91 C9 E9 7E
-13 8F 1E 00 B3 4F E8 01 93 92 0F 01 13 D8 02 01
-33 46 C8 01 93 73 16 00 13 D7 46 00 13 5E 18 00
-63 8B 03 00 69 73 93 08 13 00 33 45 1E 01 93 15
-05 01 13 DE 05 01 B3 4E EE 00 13 FF 1E 00 93 DF
-56 00 13 53 1E 00 63 0B 0F 00 E9 72 13 88 12 00
-33 46 03 01 93 13 06 01 13 D3 03 01 33 47 F3 01
-93 78 17 00 93 D5 66 00 93 5F 13 00 63 8B 08 00
-69 7E 93 0E 1E 00 33 C5 DF 01 13 1F 05 01 93 5F
-0F 01 B3 C2 BF 00 13 F8 12 00 9D 82 93 D8 1F 00
-63 0B 08 00 69 76 93 03 16 00 33 C3 78 00 13 17
-03 01 93 58 07 01 93 F5 18 00 93 DF 18 00 63 8B
-D5 00 69 7E 93 0E 1E 00 33 C5 DF 01 13 1F 05 01
-93 5F 0F 01 93 D2 07 01 33 C8 5F 00 93 F3 F2 0F
-93 76 18 00 C1 83 13 D6 13 00 13 DE 1F 00 91 CA
-69 73 13 07 13 00 B3 48 EE 00 93 95 08 01 13 DE
-05 01 B3 4E CE 00 13 FF 1E 00 93 DF 23 00 13 53
-1E 00 63 0B 0F 00 E9 72 13 88 12 00 33 45 03 01
-93 16 05 01 13 D3 06 01 33 46 F3 01 13 77 16 00
-93 D8 33 00 93 5F 13 00 11 CB E9 75 13 8E 15 00
-B3 CE CF 01 13 9F 0E 01 93 5F 0F 01 B3 C2 1F 01
-13 F8 12 00 93 D6 43 00 93 D8 1F 00 63 0B 08 00
-69 73 13 06 13 00 33 C5 C8 00 13 17 05 01 93 58
-07 01 B3 C5 D8 00 13 FE 15 00 93 DE 53 00 13 D3
-18 00 63 0B 0E 00 69 7F 93 0F 1F 00 B3 42 F3 01
-13 98 02 01 13 53 08 01 B3 46 D3 01 13 F6 16 00
-13 D7 63 00 93 5E 13 00 11 CA E9 78 93 85 18 00
-33 C5 BE 00 13 1E 05 01 93 5E 0E 01 33 CF EE 00
-93 7F 1F 00 93 D3 73 00 13 D6 1E 00 63 8B 0F 00
-E9 72 13 88 12 00 33 43 06 01 93 16 03 01 13 D6
-06 01 13 77 16 00 93 5E 16 00 63 17 77 12 13 DF
-87 00 B3 4F DF 01 93 F3 1F 00 93 D2 87 00 13 D7
-1E 00 A5 83 63 8B 03 00 69 78 13 03 18 00 B3 46
-67 00 13 96 06 01 13 57 06 01 B3 48 F7 00 93 F5
-18 00 13 DE 22 00 93 53 17 00 91 C9 E9 7E 13 8F
-1E 00 33 C5 E3 01 93 1F 05 01 93 D3 0F 01 B3 47
-7E 00 13 F8 17 00 13 D3 32 00 93 D5 13 00 63 0B
-08 00 E9 76 13 86 16 00 33 C7 C5 00 93 18 07 01
-93 D5 08 01 33 4E B3 00 93 7E 1E 00 13 DF 42 00
-13 D8 15 00 63 8B 0E 00 E9 7F 93 83 1F 00 33 45
-78 00 93 17 05 01 13 D8 07 01 33 43 0F 01 13 76
-13 00 93 D6 52 00 93 5E 18 00 11 CA 69 77 93 08
-17 00 B3 C5 1E 01 13 9E 05 01 93 5E 0E 01 33 CF
-D6 01 93 7F 1F 00 93 D3 62 00 13 D6 1E 00 63 8B
-0F 00 E9 77 13 88 17 00 33 45 06 01 13 13 05 01
-13 56 03 01 B3 C6 C3 00 93 F8 16 00 93 D2 72 00
-13 5F 16 00 63 8B 08 00 69 77 93 05 17 00 33 4E
-BF 00 93 1E 0E 01 13 DF 0E 01 93 7F 1F 00 13 55
-1F 00 63 8A 5F 00 E9 73 93 87 13 00 33 48 F5 00
-13 15 08 01 41 81 82 80 E9 78 93 85 18 00 33 C5
-BE 00 13 1E 05 01 93 5E 0E 01 D1 B5 69 7F 93 0F
-1F 00 33 45 F8 01 93 12 05 01 13 D8 02 01 AD B1
-B3 C6 A5 00 13 77 F5 0F 93 17 05 01 93 F2 16 00
-13 D3 07 01 13 56 17 00 93 D8 15 00 63 8B 02 00
-E9 75 93 83 15 00 33 C5 78 00 13 18 05 01 93 58
-08 01 33 CE C8 00 93 7E 1E 00 13 5F 27 00 93 D5
-18 00 63 8B 0E 00 E9 7F 93 86 1F 00 B3 C2 D5 00
-93 97 02 01 93 D5 07 01 33 C6 E5 01 93 73 16 00
-13 58 37 00 13 DF 15 00 63 8B 03 00 E9 78 13 8E
-18 00 33 45 CF 01 93 1E 05 01 13 DF 0E 01 B3 4F
-0F 01 93 F2 1F 00 93 56 47 00 13 58 1F 00 63 8B
-02 00 E9 77 93 85 17 00 33 46 B8 00 93 13 06 01
-13 D8 03 01 B3 48 D8 00 13 FE 18 00 93 5E 57 00
-93 57 18 00 63 0B 0E 00 69 7F 93 0F 1F 00 33 C5
-F7 01 93 12 05 01 93 D7 02 01 B3 C6 D7 01 93 F5
-16 00 93 53 67 00 93 DE 17 00 91 C9 69 76 13 08
-16 00 B3 C8 0E 01 13 9E 08 01 93 5E 0E 01 33 CF
-7E 00 93 7F 1F 00 1D 83 93 D5 1E 00 63 8B 0F 00
-E9 72 93 87 12 00 33 C5 F5 00 93 16 05 01 93 D5
-06 01 93 F3 15 00 93 DE 15 00 63 8B E3 00 69 76
-13 08 16 00 B3 C8 0E 01 13 9E 08 01 93 5E 0E 01
-13 5F 83 00 B3 4F DF 01 93 F2 1F 00 13 57 83 00
-93 D3 1E 00 13 53 93 00 63 8B 02 00 E9 77 93 86
-17 00 33 C5 D3 00 93 15 05 01 93 D3 05 01 33 46
-73 00 13 78 16 00 93 58 27 00 93 D2 13 00 63 0B
-08 00 69 7E 93 0E 1E 00 33 CF D2 01 93 1F 0F 01
-93 D2 0F 01 33 C3 12 01 93 77 13 00 93 56 37 00
-13 D8 12 00 91 CB E9 75 93 83 15 00 33 45 78 00
-13 16 05 01 13 58 06 01 B3 48 D8 00 13 FE 18 00
-93 5E 47 00 93 55 18 00 63 0B 0E 00 69 7F 93 0F
-1F 00 B3 C2 F5 01 13 93 02 01 93 55 03 01 B3 C7
-D5 01 93 F3 17 00 93 56 57 00 13 DE 15 00 63 8B
-03 00 69 76 13 08 16 00 33 45 0E 01 93 18 05 01
-13 DE 08 01 B3 4E DE 00 13 FF 1E 00 93 5F 67 00
-93 53 1E 00 63 0B 0F 00 E9 72 13 83 12 00 B3 C5
-63 00 93 97 05 01 93 D3 07 01 B3 C6 F3 01 13 F6
-16 00 1D 83 93 DE 13 00 11 CA 69 78 93 08 18 00
-33 C5 1E 01 13 1E 05 01 93 5E 0E 01 13 FF 1E 00
-13 D5 1E 00 63 0B EF 00 E9 7F 93 82 1F 00 33 43
-55 00 93 15 03 01 13 D5 05 01 82 80 01 45 82 80
-73 27 00 B0 B7 97 00 80 23 A4 E7 C4 82 80 73 27
-00 B0 B7 97 00 80 23 A2 E7 C4 82 80 B7 97 00 80
-B7 92 00 80 03 A5 47 C4 03 A3 82 C4 33 05 65 40
-82 80 93 07 80 3E 33 55 F5 02 82 80 85 47 23 00
-F5 00 82 80 23 00 05 00 82 80 AA 82 2A 96 63 56
-C5 00 23 00 B5 00 05 05 DD BF 16 85 82 80 82 80
-75 71 06 C7 B7 97 00 80 B7 90 00 80 B7 82 00 80
-03 A6 47 C5 83 A5 00 C5 03 A3 42 77 37 87 00 80
-83 26 07 77 B7 93 00 80 22 C5 26 C3 13 14 06 01
-93 14 03 01 83 A8 C3 C4 13 56 04 41 13 D8 04 41
-05 45 4A C1 CE DE D2 DC D6 DA DA D8 DE D6 E2 D4
-E6 D2 EA D0 EE CE 23 07 A1 04 23 16 C1 00 23 17
-B1 00 23 18 01 01 36 D4 63 93 08 00 9D 48 32 49
-46 D6 E3 1B 09 3C E3 0F 08 42 B2 59 B7 9C 00 80
-13 8D 8C C5 13 F7 29 00 93 FD 19 00 33 3E E0 00
-6A CA 23 16 01 04 93 FE 49 00 6E 8F B3 85 CD 01
-63 88 0E 00 93 8F 15 00 93 90 0F 01 93 D5 00 01
-93 02 00 7D 33 D5 B2 02 01 44 2A D2 E3 10 0F 3E
-E3 10 07 3C E3 95 0E 3A 63 10 0F 1C 63 17 07 1C
-13 F5 49 00 19 C5 02 56 83 15 C1 00 12 55 EF C0
-6F FC 22 5A 63 0F 0A 6C 37 9C 00 80 B7 9C 00 80
-13 0D C1 00 F3 23 00 B0 23 24 7C C4 6A 85 EF E0
-BF F6 73 2D 00 B0 03 55 C1 00 81 45 23 A2 AC C5
-EF F0 8F D2 AA 85 03 55 E1 00 03 2C 8C C4 EF F0
-AF D1 AA 85 03 55 01 01 B3 0A 8D 41 EF F0 CF D0
-92 54 AA 85 93 9C 04 01 13 D5 0C 01 EF F0 CF CF
-21 68 93 06 58 B0 AA 89 E3 06 D5 3A 63 E6 A6 16
-89 6D 93 82 2D 8F E3 01 55 3C 15 6D 93 00 FD EA
-E3 12 15 3E B7 8C 00 80 13 85 4C 7D EF 90 4F 86
-93 0B 8D 60 39 68 9D 66 13 0A 48 5A 5E 8C 13 8B
-96 A7 B7 8C 00 80 83 A8 CC 76 01 49 01 4D E3 87
-08 3A B7 9D 00 80 89 A8 03 D6 A4 FF 63 03 46 0F
-37 97 00 80 D2 86 EA 85 13 05 87 8C EF 90 4F 82
-83 D7 C4 FF 13 8E 17 00 93 1E 0E 01 93 DF 0E 01
-23 9E F4 FF 05 0D 83 A2 CC 76 7E 99 93 15 0D 01
-13 1F 09 01 13 13 09 01 13 DD 05 01 13 54 0F 01
-13 59 03 41 63 74 5D 10 13 14 4D 00 33 06 A4 01
-13 15 26 00 98 08 B3 04 A7 00 83 A7 C4 FD 23 9E
-04 FE 13 FE 17 00 63 02 0E 02 03 D6 64 FF 63 0E
-66 01 DA 86 EA 85 13 85 4D 86 EF 80 7F FB 83 DE
-C4 FF 93 8F 1E 00 23 9E F4 FF B3 05 A4 01 93 92
-25 00 13 0F 01 05 B3 04 5F 00 83 A8 C4 FD 13 F3
-28 00 63 06 03 02 03 D6 84 FF 63 02 86 03 B7 93
-00 80 DE 86 EA 85 13 85 43 89 EF 80 7F F7 03 D8
-C4 FF 83 A8 C4 FD 93 06 18 00 23 9E D4 FE 6A 94
-13 16 24 00 88 08 93 F0 48 00 B3 04 C5 00 E3 9D
-00 F0 83 DF C4 FF 3D BF E2 45 EF 80 3F FF B2 59
-2A D8 13 F7 29 00 E3 0D 07 E2 83 17 E1 00 03 16
-C1 00 F2 45 12 55 13 99 07 01 54 18 33 66 C9 00
-EF B0 8F DB B2 59 29 BD 25 6A 13 07 2A A0 E3 09
-E5 20 BD 6B 13 84 5B 9F E3 1E 85 26 B7 95 00 80
-89 64 13 85 85 80 93 8B 74 FD 39 6B EF 80 5F EF
-13 0A AA E3 5E 8C 13 0B 4B 71 61 BD 92 54 B7 9B
-00 80 A6 85 13 85 8B 8F EF 80 9F ED 37 9C 00 80
-D6 85 13 05 0C 91 13 0B 80 3E EF 80 7F EC B3 DD
-6A 03 B7 93 00 80 13 85 83 92 EE 85 EF 80 5F EB
-13 08 70 3E 63 6F 58 45 B7 9A 00 80 05 04 13 85
-0A 94 13 1D 04 01 EF 80 BF E9 13 59 0D 41 03 AF
-CC 76 22 53 B7 95 00 80 13 85 C5 99 B3 05 E3 03
-37 9A 00 80 B7 9B 00 80 37 9C 00 80 37 9B 00 80
-B7 9D 00 80 EF 80 DF E6 93 05 4A 9B 13 85 0B 9C
-EF 80 1F E6 93 05 8C 9D 13 05 4B 9F EF 80 5F E5
-B7 93 00 80 93 85 CD A0 13 85 43 A1 EF 80 5F E4
-CE 85 B7 99 00 80 13 85 C9 A2 EF 80 7F E3 32 5A
-13 78 1A 00 63 05 08 0E 83 A8 CC 76 63 81 08 0E
-01 4D B7 94 00 80 93 16 4D 00 B3 80 A6 01 13 96
-20 00 98 08 B3 07 C7 00 03 D6 67 FF EA 85 13 85
-84 A4 EF 80 FF DF 93 0E 1D 00 93 9F 0E 01 93 DA
-0F 01 93 92 4A 00 03 AE CC 76 33 84 52 01 13 1D
-24 00 13 0F 01 05 13 85 84 A4 33 03 AF 01 D6 85
-63 F6 CA 09 03 56 63 FF 93 09 01 05 EF 80 5F DC
-93 85 1A 00 93 9B 05 01 13 DC 0B 01 13 1B 4C 00
-03 AA CC 76 B3 0D 8B 01 93 93 2D 00 13 85 84 A4
-33 88 79 00 E2 85 63 7B 4C 05 03 56 68 FF EF 80
-3F D9 93 06 1C 00 13 96 06 01 93 5A 06 01 13 97
-4A 00 83 A8 CC 76 B3 07 57 01 13 9E 27 00 93 0E
-01 05 13 85 84 A4 B3 8F CE 01 D6 85 63 F0 1A 03
-03 D6 6F FF EF 80 DF D5 93 82 1A 00 03 A5 CC 76
-13 94 02 01 13 5D 04 01 E3 67 AD F2 32 5A 93 74
-2A 00 FD C0 83 A0 CC 76 63 8F 00 1E 01 44 37 9A
-00 80 13 13 44 00 B3 05 83 00 93 9B 25 00 13 0C
-01 05 33 0B 7C 01 03 56 8B FF A2 85 13 05 4A A6
-EF 80 1F D1 93 03 14 00 93 99 03 01 93 DA 09 01
-13 98 4A 00 83 AD CC 76 B3 08 58 01 93 96 28 00
-90 08 13 05 4A A6 33 07 D6 00 D6 85 63 F5 BA 09
-03 56 87 FF 84 08 EF 80 BF CD 93 87 1A 00 93 9E
-07 01 13 D4 0E 01 93 1F 44 00 03 AE CC 76 B3 82
-8F 00 13 9D 22 00 13 05 4A A6 33 8F A4 01 A2 85
-63 7B C4 05 03 56 8F FF 93 09 01 05 EF 80 5F CA
-93 05 14 00 93 9B 05 01 13 DC 0B 01 13 1B 4C 00
-03 A3 CC 76 B3 0D 8B 01 93 93 2D 00 13 05 4A A6
-B3 8A 79 00 E2 85 63 70 6C 02 03 D6 8A FF EF 80
-3F C7 13 08 1C 00 03 A5 CC 76 93 18 08 01 13 D4
-08 01 E3 68 A4 F2 32 5A 93 70 4A 00 63 91 00 12
-83 A0 CC 76 81 44 37 9D 00 80 63 8D 00 0C 93 95
-44 00 33 8B 95 00 93 03 01 05 93 1D 2B 00 B3 89
-B3 01 03 D6 49 FF A6 85 13 05 CD A9 EF 80 5F C2
-13 88 14 00 93 18 08 01 13 D4 08 01 13 1A 44 00
-83 AA CC 76 B3 06 8A 00 13 96 26 00 98 08 13 05
-CD A9 33 0E C7 00 A2 85 63 76 54 09 03 56 4E FF
-EF 80 1F BF 93 07 14 00 93 9E 07 01 93 DB 0E 01
-93 9F 4B 00 83 A4 CC 76 B3 82 7F 01 13 9F 22 00
-13 03 01 05 13 05 CD A9 33 0C E3 01 DE 85 63 FB
-9B 04 03 56 4C FF EF 80 BF BB 93 85 1B 00 93 9D
-05 01 93 D9 0D 01 93 93 49 00 03 AB CC 76 B3 8A
-33 01 13 98 2A 00 93 08 01 05 13 05 CD A9 33 84
-08 01 CE 85 63 F0 69 03 03 56 44 FF 13 8A 19 00
-EF 80 1F B8 03 A5 CC 76 93 16 0A 01 93 D4 06 01
-E3 E7 A4 F2 63 0F 09 64 63 5F 20 63 37 99 00 80
-13 05 49 B0 EF 80 DF B5 BA 40 2A 44 9A 44 0A 49
-F6 59 66 5A D6 5A 46 5B B6 5B 26 5C 96 5C 06 5D
-F6 4D 49 61 82 80 13 7F 4A 00 E3 05 0F FC 83 A6
-CC 76 E9 D2 01 4C 37 9D 00 80 13 16 4C 00 33 07
-86 01 13 1E 27 00 9C 08 B3 8E C7 01 03 D6 AE FF
-E2 85 13 05 0D A8 EF 80 BF B0 93 02 1C 00 93 94
-02 01 93 DB 04 01 13 9F 4B 00 83 AF CC 76 33 03
-7F 01 93 15 23 00 13 0C 01 05 33 0B BC 00 13 05
-0D A8 DE 85 E3 F6 FB E9 03 56 AB FF 13 0A 01 05
-EF 80 1F AD 93 83 1B 00 93 99 03 01 93 DA 09 01
-13 98 4A 00 83 AD CC 76 B3 08 58 01 13 94 28 00
-13 05 0D A8 B3 06 8A 00 D6 85 E3 FB BA E5 03 D6
-A6 FF EF 80 FF A9 13 87 1A 00 13 1E 07 01 93 54
-0E 01 93 97 44 00 03 A6 CC 76 B3 8E 97 00 93 9F
-2E 00 93 02 01 05 13 05 0D A8 B3 8B F2 01 A6 85
-E3 F0 C4 E2 03 D6 AB FF EF 80 9F A6 13 8F 14 00
-03 A5 CC 76 13 13 0F 01 13 5C 03 01 E3 67 AC F2
-01 B5 83 A8 CC 76 A2 56 E1 64 13 87 04 6A B3 80
-16 03 37 96 00 80 93 0F 40 06 13 05 06 98 B3 87
-E0 02 33 DE B7 03 B3 8E 60 03 33 76 FE 03 B3 D5
-BE 03 EF 80 FF A1 09 65 93 02 F5 70 E3 E1 52 B9
-A5 B6 E9 7A 05 44 37 9C 00 80 B7 9C 00 80 13 0D
-C1 00 13 8B 1A 00 93 0D 70 3E 93 1B 24 00 33 8E
-8B 00 13 14 1E 00 22 D4 F3 24 00 B0 23 24 9C C4
-82 C2 82 C4 81 4B 63 0F 04 40 85 45 6A 85 EF D0
-1F F9 83 5E 41 04 13 7F F5 0F 93 52 1F 00 B3 CF
-AE 00 93 F5 1F 00 93 D3 1E 00 99 C5 B3 C0 63 01
-13 93 00 01 93 53 03 01 B3 C6 53 00 13 F8 16 00
-93 58 2F 00 13 D9 13 00 63 08 08 00 33 47 69 01
-93 17 07 01 13 D9 07 01 33 46 19 01 93 79 16 00
-13 5A 3F 00 93 5E 19 00 63 88 09 00 B3 CA 6E 01
-13 9E 0A 01 93 5E 0E 01 B3 CF 4E 01 93 F5 1F 00
-93 52 4F 00 93 D3 1E 00 99 C5 B3 C0 63 01 13 93
-00 01 93 53 03 01 B3 C6 53 00 13 F8 16 00 93 58
-5F 00 13 D9 13 00 63 08 08 00 33 47 69 01 93 17
-07 01 13 D9 07 01 33 46 19 01 93 79 16 00 13 5A
-6F 00 93 5E 19 00 63 88 09 00 B3 CA 6E 01 13 9E
-0A 01 93 5E 0E 01 B3 CF 4E 01 93 F5 1F 00 13 5F
-7F 00 13 D3 1E 00 99 C5 B3 42 63 01 93 90 02 01
-13 D3 00 01 93 73 13 00 93 58 13 00 63 88 E3 01
-B3 C6 68 01 13 98 06 01 93 58 08 01 21 81 33 47
-15 01 13 79 F5 0F 13 76 17 00 93 59 19 00 93 DA
-18 00 19 C6 B3 C7 6A 01 13 9A 07 01 93 5A 0A 01
-33 CE 3A 01 93 7E 1E 00 93 5F 29 00 93 D2 1A 00
-63 88 0E 00 B3 C5 62 01 13 9F 05 01 93 52 0F 01
-B3 C0 F2 01 13 F3 10 00 93 53 39 00 93 D8 12 00
-63 08 03 00 B3 C6 68 01 13 98 06 01 93 58 08 01
-33 C5 78 00 13 76 15 00 13 57 49 00 13 DA 18 00
-19 C6 B3 49 6A 01 93 97 09 01 13 DA 07 01 B3 4A
-EA 00 13 FE 1A 00 93 5E 59 00 13 5F 1A 00 63 08
-0E 00 B3 4F 6F 01 93 95 0F 01 13 DF 05 01 B3 42
-DF 01 93 F0 12 00 13 53 69 00 13 58 1F 00 63 88
-00 00 B3 43 68 01 93 96 03 01 13 D8 06 01 B3 48
-68 00 13 F6 18 00 13 59 79 00 93 59 18 00 19 C6
-33 C5 69 01 13 17 05 01 93 59 07 01 B3 C7 29 01
-13 FA 17 00 93 DE 19 00 63 08 0A 00 B3 CA 6E 01
-13 9E 0A 01 93 5E 0E 01 FD 55 6A 85 23 12 D1 05
-EF D0 FF D8 83 5F 41 04 13 7F F5 0F 13 53 1F 00
-B3 C5 AF 00 93 F2 15 00 13 D8 1F 00 63 88 02 00
-B3 40 68 01 93 93 00 01 13 D8 03 01 B3 46 68 00
-93 F8 16 00 13 56 2F 00 93 59 18 00 63 88 08 00
-33 C9 69 01 13 17 09 01 93 59 07 01 B3 C7 C9 00
-13 FA 17 00 93 5A 3F 00 93 DF 19 00 63 08 0A 00
-33 CE 6F 01 93 1E 0E 01 93 DF 0E 01 B3 C5 5F 01
-93 F2 15 00 13 53 4F 00 13 D8 1F 00 63 88 02 00
-B3 40 68 01 93 93 00 01 13 D8 03 01 B3 46 68 00
-93 F8 16 00 13 56 5F 00 93 59 18 00 63 88 08 00
-33 C9 69 01 13 17 09 01 93 59 07 01 B3 C7 C9 00
-13 FA 17 00 93 5A 6F 00 93 DF 19 00 63 08 0A 00
-33 CE 6F 01 93 1E 0E 01 93 DF 0E 01 B3 C5 5F 01
-93 F2 15 00 13 5F 7F 00 93 D3 1F 00 63 88 02 00
-33 C3 63 01 93 10 03 01 93 D3 00 01 13 F8 13 00
-13 D6 13 00 63 08 E8 01 B3 46 66 01 93 98 06 01
-13 D6 08 01 21 81 33 49 C5 00 93 79 F5 0F 13 77
-19 00 13 DA 19 00 13 5E 16 00 19 C7 B3 47 6E 01
-93 9A 07 01 13 DE 0A 01 B3 4E 4E 01 93 FF 1E 00
-93 D5 29 00 13 53 1E 00 63 88 0F 00 B3 42 63 01
-13 9F 02 01 13 53 0F 01 B3 40 B3 00 93 F3 10 00
-13 D8 39 00 13 56 13 00 63 88 03 00 B3 46 66 01
-93 98 06 01 13 D6 08 01 33 45 06 01 13 79 15 00
-13 D7 49 00 93 5A 16 00 63 08 09 00 33 CA 6A 01
-93 17 0A 01 93 DA 07 01 33 CE EA 00 93 7E 1E 00
-93 DF 59 00 13 DF 1A 00 63 88 0E 00 B3 45 6F 01
-93 92 05 01 13 DF 02 01 33 43 FF 01 93 70 13 00
-93 D3 69 00 93 58 1F 00 63 88 00 00 33 C8 68 01
-93 16 08 01 93 D8 06 01 33 C6 78 00 13 79 16 00
-93 D9 79 00 13 DA 18 00 63 08 09 00 33 45 6A 01
-13 17 05 01 13 5A 07 01 B3 47 3A 01 93 FA 17 00
-93 5F 1A 00 63 88 0A 00 33 CE 6F 01 93 1E 0E 01
-93 DF 0E 01 23 12 F1 05 63 8C 0B 02 85 0B E3 16
-74 BF 22 54 F3 25 00 B0 23 A2 BC C4 B3 84 95 40
-E3 FD 9D BA 13 0B 80 3E B3 DD 64 03 A9 42 33 DF
-B2 03 13 03 1F 00 B3 00 64 02 06 D4 6F F0 8F CB
-23 13 F1 05 85 4B 55 BE 85 49 63 18 39 C3 63 16
-08 C2 37 3A 15 34 93 0A 5A 41 13 0B 60 06 8D 6B
-56 C6 23 18 61 01 13 86 5B 41 6F F0 0F C1 33 08
-A4 02 B3 08 0D 01 46 D0 63 0A 0F C4 6F F0 CF E0
-33 03 A4 02 93 06 14 00 93 93 06 01 13 D4 03 01
-B3 04 6D 00 26 CE 63 89 0E C2 D1 BF 6A CC 05 44
-63 02 07 C2 F1 BF B7 9C 00 80 13 85 8C B1 EF 80
-2F D2 D9 B2 13 0C 60 06 23 18 81 01 01 46 6F F0
-CF BB B7 90 00 80 13 85 80 AB EF 80 6F D0 6D B2
-B7 87 00 80 13 85 87 77 EF 80 8F CF 31 6E 93 0B
-2E E5 99 6E B5 6F 13 8A 7E E4 5E 8C 13 8B 0F 4B
-6F F0 2F C9 B7 88 00 80 13 85 88 7A EF 80 4F CD
-05 66 93 0B 96 19 11 69 0D 65 13 0A F9 9B 5E 8C
-13 0B 05 34 6F F0 EF C6 37 9F 00 80 13 05 8F 83
-EF 80 0F CB 25 63 B9 63 13 0A 43 D8 93 0B 70 74
-13 0C 70 74 13 8B 13 3C 6F F0 AF C4 92 54 01 44
-6F F0 EF DA 41 6A 13 04 FA FF 7D 59 B7 8C 00 80
-6F F0 EF D9
-@80008684
-BE 02 00 80 9A 00 00 80 9A 00 00 80 9A 00 00 80
-9A 00 00 80 9A 00 00 80 9A 00 00 80 9A 00 00 80
-9A 00 00 80 9A 00 00 80 9A 00 00 80 B8 03 00 80
-82 08 00 80 9A 00 00 80 9A 00 00 80 9A 00 00 80
-9A 00 00 80 9A 00 00 80 9A 00 00 80 9A 00 00 80
-9A 00 00 80 9A 00 00 80 9A 00 00 80 A2 06 00 80
-9A 00 00 80 9A 00 00 80 9A 00 00 80 32 06 00 80
-9A 00 00 80 C6 03 00 80 9A 00 00 80 9A 00 00 80
-BE 02 00 80 2C 8C 00 80 34 8C 00 80 3C 8C 00 80
-3C 6E 00 80 14 6E 00 80 1E 6E 00 80 28 6E 00 80
-32 6E 00 80 0A 6E 00 80 0C 8C 00 80 14 8C 00 80
-1C 8C 00 80 24 8C 00 80 DC 8B 00 80 E8 8B 00 80
-F4 8B 00 80 00 8C 00 80 AC 8B 00 80 B8 8B 00 80
-C4 8B 00 80 D0 8B 00 80 7C 8B 00 80 88 8B 00 80
-94 8B 00 80 A0 8B 00 80 01 00 00 00 01 00 00 00
-66 00 00 00 36 6B 20 70 65 72 66 6F 72 6D 61 6E
-63 65 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 36 6B 20 76 61 6C 69 64 61 74 69 6F
-6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72 73
-20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A 00
-50 72 6F 66 69 6C 65 20 67 65 6E 65 72 61 74 69
-6F 6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 32 4B 20 70 65 72 66 6F 72 6D 61 6E
-63 65 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 32 4B 20 76 61 6C 69 64 61 74 69 6F
-6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72 73
-20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A 00
-5B 25 75 5D 45 52 52 4F 52 21 20 6C 69 73 74 20
-63 72 63 20 30 78 25 30 34 78 20 2D 20 73 68 6F
-75 6C 64 20 62 65 20 30 78 25 30 34 78 0A 00 00
-5B 25 75 5D 45 52 52 4F 52 21 20 6D 61 74 72 69
-78 20 63 72 63 20 30 78 25 30 34 78 20 2D 20 73
-68 6F 75 6C 64 20 62 65 20 30 78 25 30 34 78 0A
-00 00 00 00 5B 25 75 5D 45 52 52 4F 52 21 20 73
-74 61 74 65 20 63 72 63 20 30 78 25 30 34 78 20
-2D 20 73 68 6F 75 6C 64 20 62 65 20 30 78 25 30
-34 78 0A 00 43 6F 72 65 4D 61 72 6B 20 53 69 7A
-65 20 20 20 20 3A 20 25 75 0A 00 00 54 6F 74 61
-6C 20 74 69 63 6B 73 20 20 20 20 20 20 3A 20 25
-75 0A 00 00 54 6F 74 61 6C 20 74 69 6D 65 20 28
-73 65 63 73 29 3A 20 25 64 0A 00 00 45 52 52 4F
-52 21 20 4D 75 73 74 20 65 78 65 63 75 74 65 20
-66 6F 72 20 61 74 20 6C 65 61 73 74 20 31 30 20
-73 65 63 73 20 66 6F 72 20 61 20 76 61 6C 69 64
-20 72 65 73 75 6C 74 21 0A 00 00 00 49 74 65 72
-61 74 2F 53 65 63 2F 4D 48 7A 20 20 20 3A 20 25
-64 2E 25 30 32 64 0A 00 49 74 65 72 61 74 69 6F
-6E 73 20 20 20 20 20 20 20 3A 20 25 75 0A 00 00
-47 43 43 39 2E 32 2E 30 00 00 00 00 43 6F 6D 70
-69 6C 65 72 20 76 65 72 73 69 6F 6E 20 3A 20 25
-73 0A 00 00 2D 67 20 2D 4F 33 20 2D 66 75 6E 72
-6F 6C 6C 2D 61 6C 6C 2D 6C 6F 6F 70 73 00 00 00
-43 6F 6D 70 69 6C 65 72 20 66 6C 61 67 73 20 20
-20 3A 20 25 73 0A 00 00 53 54 41 54 49 43 00 00
-4D 65 6D 6F 72 79 20 6C 6F 63 61 74 69 6F 6E 20
-20 3A 20 25 73 0A 00 00 73 65 65 64 63 72 63 20
-20 20 20 20 20 20 20 20 20 3A 20 30 78 25 30 34
-78 0A 00 00 5B 25 64 5D 63 72 63 6C 69 73 74 20
-20 20 20 20 20 20 3A 20 30 78 25 30 34 78 0A 00
-5B 25 64 5D 63 72 63 6D 61 74 72 69 78 20 20 20
-20 20 3A 20 30 78 25 30 34 78 0A 00 5B 25 64 5D
-63 72 63 73 74 61 74 65 20 20 20 20 20 20 3A 20
-30 78 25 30 34 78 0A 00 5B 25 64 5D 63 72 63 66
-69 6E 61 6C 20 20 20 20 20 20 3A 20 30 78 25 30
-34 78 0A 00 43 6F 72 72 65 63 74 20 6F 70 65 72
-61 74 69 6F 6E 20 76 61 6C 69 64 61 74 65 64 2E
-20 53 65 65 20 72 65 61 64 6D 65 2E 74 78 74 20
-66 6F 72 20 72 75 6E 20 61 6E 64 20 72 65 70 6F
-72 74 69 6E 67 20 72 75 6C 65 73 2E 0A 00 00 00
-45 72 72 6F 72 73 20 64 65 74 65 63 74 65 64 0A
-00 00 00 00 43 61 6E 6E 6F 74 20 76 61 6C 69 64
-61 74 65 20 6F 70 65 72 61 74 69 6F 6E 20 66 6F
-72 20 74 68 65 73 65 20 73 65 65 64 20 76 61 6C
-75 65 73 2C 20 70 6C 65 61 73 65 20 63 6F 6D 70
-61 72 65 20 77 69 74 68 20 72 65 73 75 6C 74 73
-20 6F 6E 20 61 20 6B 6E 6F 77 6E 20 70 6C 61 74
-66 6F 72 6D 2E 0A 00 00 54 30 2E 33 65 2D 31 46
-00 00 00 00 2D 54 2E 54 2B 2B 54 71 00 00 00 00
-31 54 33 2E 34 65 34 7A 00 00 00 00 33 34 2E 30
-65 2D 54 5E 00 00 00 00 35 2E 35 30 30 65 2B 33
-00 00 00 00 2D 2E 31 32 33 65 2D 32 00 00 00 00
-2D 38 37 65 2B 38 33 32 00 00 00 00 2B 30 2E 36
-65 2D 31 32 00 00 00 00 33 35 2E 35 34 34 30 30
-00 00 00 00 2E 31 32 33 34 35 30 30 00 00 00 00
-2D 31 31 30 2E 37 30 30 00 00 00 00 2B 30 2E 36
-34 34 30 30 00 00 00 00 35 30 31 32 00 00 00 00
-31 32 33 34 00 00 00 00 2D 38 37 34 00 00 00 00
-2B 31 32 32 00 00 00 00 53 74 61 74 69 63 00 00
-48 65 61 70 00 00 00 00 53 74 61 63 6B 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00
-@D0580000
-00 00 00 00
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/cmark_dccm.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/cmark_dccm.hex
deleted file mode 100755
index 119b842..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/cmark_dccm.hex
+++ /dev/null
@@ -1,2251 +0,0 @@
-@00000000
-00 00 00 00 B7 52 55 5F 93 82 52 55 73 90 02 7C
-17 11 04 F0 13 01 01 5D EF 70 F0 11 97 05 00 00
-93 85 45 FE 05 45 88 C1 B7 02 58 D0 13 03 F0 0F
-23 80 62 00 E3 0A 00 FE 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 03 47 05 00
-E3 09 07 2A 39 71 B7 02 04 F0 22 DE 26 DC 2A 86
-4A DA 4E D8 52 D6 56 D4 5A D2 5E D0 01 45 13 0E
-50 02 37 08 58 D0 93 08 00 03 93 03 D0 02 93 04
-A0 02 13 04 00 02 93 82 02 00 93 0F B1 00 25 4F
-A9 4E 19 A8 BE 86 23 00 E8 00 B2 87 05 05 36 86
-03 C7 17 00 63 06 07 20 93 07 16 00 E3 14 C7 FF
-03 43 16 00 63 0E 03 1E 09 06 63 05 C3 1F E3 15
-13 23 03 C7 17 00 3E 86 85 07 BE 86 63 12 17 07
-03 C7 17 00 3E 86 85 07 63 1C 17 05 03 C7 26 00
-3E 86 93 87 26 00 63 15 17 05 03 C7 36 00 3E 86
-93 87 36 00 63 1E 17 03 03 C7 46 00 3E 86 93 87
-46 00 63 17 17 03 03 C7 56 00 3E 86 93 87 56 00
-63 10 17 03 03 C7 66 00 3E 86 93 87 66 00 63 19
-17 01 03 C7 76 00 3E 86 93 87 76 00 E3 0B 17 F9
-09 06 63 08 77 02 63 0C 97 02 93 09 07 FD 13 F9
-F9 0F 81 46 63 73 2F 0B 13 07 87 FA 13 79 F7 0F
-E3 68 24 F5 13 1A 29 00 B3 0B 5A 00 83 A9 0B 00
-82 89 03 C7 17 00 B2 87 05 06 E3 18 97 FC 03 C7
-17 00 91 05 B2 87 81 46 05 06 F9 B7 03 47 59 00
-13 9B 26 00 B3 0A DB 00 93 0B 07 FD 93 96 1A 00
-93 F9 FB 0F 3E 86 D2 96 93 07 59 00 63 62 3F 11
-03 47 69 00 13 96 26 00 33 0B D6 00 13 0A 07 FD
-93 16 1B 00 93 7A FA 0F 3E 86 DE 96 93 07 69 00
-63 60 5F 0F 03 47 79 00 93 9B 26 00 33 86 DB 00
-93 09 07 FD 13 1B 16 00 93 FA F9 0F 3E 86 B3 06
-6A 01 93 07 79 00 63 6D 5F 0B 03 C7 17 00 13 9A
-26 00 B3 0A DA 00 13 0B 07 FD 3E 86 93 9B 1A 00
-85 07 13 7A FB 0F 3E 89 B3 86 79 01 63 6A 4F 09
-03 C7 17 00 93 99 26 00 CE 96 93 0B 07 FD 13 9A
-16 00 93 FA FB 0F 3E 86 B3 06 4B 01 85 07 63 69
-5F 07 03 47 29 00 13 96 26 00 33 0B D6 00 13 0A
-07 FD 93 19 1B 00 93 7A FA 0F 3E 86 B3 86 3B 01
-93 07 29 00 63 66 5F 05 03 47 39 00 93 9B 26 00
-DE 96 13 0B 07 FD 93 99 16 00 93 7A FB 0F 3E 86
-B3 06 3A 01 93 07 39 00 63 64 5F 03 03 47 49 00
-13 96 26 00 B3 0B D6 00 13 0A 07 FD 93 96 1B 00
-93 79 FA 0F 3E 86 DA 96 93 07 49 00 E3 70 3F EF
-09 06 5D B5 23 00 C8 01 03 C7 17 00 E3 1E 07 DE
-72 54 E2 54 52 59 C2 59 32 5A A2 5A 12 5B 82 5B
-21 61 82 80 98 41 81 49 91 05 11 A0 B6 89 93 7A
-F7 00 13 83 7A 05 63 44 5F 01 13 83 0A 03 93 86
-19 00 13 0B C1 00 33 0A DB 00 A3 0F 6A FE 11 83
-71 FF 13 09 C1 00 33 07 39 01 B3 09 F7 41 93 FA
-79 00 63 89 0A 06 85 4B 63 8F 7A 05 09 43 63 87
-6A 04 0D 4B 63 8F 6A 03 11 4A 63 87 4A 03 15 49
-63 8F 2A 01 99 49 63 87 3A 01 83 4A 07 00 7D 17
-23 00 58 01 83 4B 07 00 7D 17 23 00 78 01 03 43
-07 00 7D 17 23 00 68 00 03 4B 07 00 7D 17 23 00
-68 01 03 4A 07 00 7D 17 23 00 48 01 03 49 07 00
-7D 17 23 00 28 01 83 49 07 00 7D 17 23 00 38 01
-63 05 F7 05 83 4A 07 00 61 17 23 00 58 01 83 4B
-77 00 23 00 78 01 03 43 67 00 23 00 68 00 03 4B
-57 00 23 00 68 01 03 4A 47 00 23 00 48 01 03 49
-37 00 23 00 28 01 83 49 27 00 23 00 38 01 83 4A
-17 00 23 00 58 01 E3 1F F7 FB 36 95 D5 B1 03 C9
-05 00 05 05 91 05 23 00 28 01 D9 B9 03 AA 05 00
-01 49 91 05 B3 7A DA 03 4A 87 13 0B C1 00 05 09
-B3 0B 2B 01 CA 89 93 8A 0A 03 A3 8F 5B FF B3 5B
-DA 03 63 78 4F 0F 4A 87 13 0B C1 00 05 09 B3 0A
-2B 01 33 FA DB 03 13 0A 0A 03 A3 8F 4A FF 33 DA
-DB 03 63 78 7F 0D 93 0B C1 00 4A 87 13 89 29 00
-33 8B 2B 01 B3 7A DA 03 93 8B 0A 03 A3 0F 7B FF
-B3 5A DA 03 63 77 4F 0B 13 0A C1 00 4A 87 13 89
-39 00 33 0B 2A 01 B3 FB DA 03 13 8A 0B 03 A3 0F
-4B FF B3 DB DA 03 63 76 5F 09 93 0A C1 00 4A 87
-13 89 49 00 33 8B 2A 01 33 FA DB 03 93 0A 0A 03
-A3 0F 5B FF B3 DA DB 03 63 75 7F 07 93 0B C1 00
-4A 87 13 89 59 00 33 8B 2B 01 33 FA DA 03 93 0B
-0A 03 A3 0F 7B FF 33 DA DA 03 63 74 5F 05 93 0A
-C1 00 4A 87 13 89 69 00 33 8B 2A 01 B3 7B DA 03
-93 8A 0B 03 A3 0F 5B FF 33 5B DA 03 63 73 4F 03
-4A 87 13 89 79 00 93 09 C1 00 33 8A 29 01 B3 7B
-DB 03 93 8A 0B 03 A3 0F 5A FF 33 5A DB 03 E3 6B
-6F EF CA 89 63 55 D9 08 33 8B 26 41 93 7B 7B 00
-63 8C 0B 04 85 4A 63 84 5B 05 09 4A 63 8E 4B 03
-0D 4B 63 88 6B 03 91 4A 63 82 5B 03 15 4A 63 8C
-4B 01 19 4B 63 86 6B 01 23 00 68 00 93 09 19 00
-23 00 68 00 85 09 23 00 68 00 85 09 23 00 68 00
-85 09 23 00 68 00 85 09 23 00 68 00 85 09 23 00
-68 00 85 09 63 85 36 03 23 00 68 00 23 00 68 00
-23 00 68 00 23 00 68 00 23 00 68 00 23 00 68 00
-23 00 68 00 23 00 68 00 A1 09 E3 9F 36 FD 13 03
-C1 00 1A 97 B3 06 F7 41 93 FB 76 00 63 89 0B 06
-85 4A 63 8F 5B 05 09 4A 63 87 4B 05 0D 4B 63 8F
-6B 03 91 49 63 87 3B 03 15 43 63 8F 6B 00 99 46
-63 87 DB 00 83 4B 07 00 7D 17 23 00 78 01 83 4A
-07 00 7D 17 23 00 58 01 03 4A 07 00 7D 17 23 00
-48 01 03 4B 07 00 7D 17 23 00 68 01 83 49 07 00
-7D 17 23 00 38 01 03 43 07 00 7D 17 23 00 68 00
-83 46 07 00 7D 17 23 00 D8 00 63 05 F7 05 83 4B
-07 00 61 17 23 00 78 01 83 4A 77 00 23 00 58 01
-03 4A 67 00 23 00 48 01 03 4B 57 00 23 00 68 01
-83 49 47 00 23 00 38 01 03 43 37 00 23 00 68 00
-83 46 27 00 23 00 D8 00 83 4B 17 00 23 00 78 01
-E3 1F F7 FB 4A 95 AD B4 98 41 91 05 83 4B 07 00
-63 82 0B 06 23 00 78 01 03 49 17 00 63 0C 09 04
-23 00 28 01 83 4A 27 00 63 86 0A 04 23 00 58 01
-03 4A 37 00 63 00 0A 04 23 00 48 01 03 4B 47 00
-63 0A 0B 02 23 00 68 01 83 49 57 00 63 84 09 02
-23 00 38 01 03 43 67 00 63 0E 03 00 23 00 68 00
-83 46 77 00 81 CA 21 07 23 00 D8 00 83 4B 07 00
-E3 92 0B FA 05 05 ED BA 03 A3 05 00 01 47 91 05
-BA 86 13 79 73 00 05 07 93 0A C1 00 33 8A EA 00
-13 0B 09 03 A3 0F 6A FF 93 5B 33 00 BA 89 63 88
-0B 0E 13 F9 7B 00 BA 86 93 0A C1 00 05 07 33 8A
-EA 00 13 0B 09 03 A3 0F 6A FF 93 5B 63 00 63 88
-0B 0C 13 F9 7B 00 BA 86 93 0A C1 00 13 87 29 00
-33 8A EA 00 13 0B 09 03 A3 0F 6A FF 93 5B 93 00
-63 87 0B 0A 13 F9 7B 00 BA 86 93 0A C1 00 13 87
-39 00 33 8A EA 00 13 0B 09 03 A3 0F 6A FF 93 5B
-C3 00 63 86 0B 08 13 F9 7B 00 BA 86 93 0A C1 00
-13 87 49 00 33 8A EA 00 13 0B 09 03 A3 0F 6A FF
-93 5B F3 00 63 85 0B 06 13 F9 7B 00 BA 86 93 0A
-C1 00 13 87 59 00 33 8A EA 00 13 0B 09 03 A3 0F
-6A FF 93 5B 23 01 63 84 0B 04 13 F9 7B 00 BA 86
-93 0A C1 00 13 87 69 00 33 8A EA 00 13 0B 09 03
-A3 0F 6A FF 93 5B 53 01 63 83 0B 02 BA 86 13 F9
-7B 00 13 87 79 00 93 09 C1 00 B3 8A E9 00 13 0A
-09 03 A3 8F 4A FF 13 53 83 01 E3 1B 03 EE 13 0B
-C1 00 DA 96 B3 8B F6 41 93 F9 7B 00 63 89 09 06
-05 49 63 8F 29 05 89 4A 63 87 59 05 0D 4A 63 8F
-49 03 11 43 63 87 69 02 15 4B 63 8F 69 01 99 4B
-63 87 79 01 83 C9 06 00 FD 16 23 00 38 01 03 C9
-06 00 FD 16 23 00 28 01 83 CA 06 00 FD 16 23 00
-58 01 03 CA 06 00 FD 16 23 00 48 01 03 C3 06 00
-FD 16 23 00 68 00 03 CB 06 00 FD 16 23 00 68 01
-83 CB 06 00 FD 16 23 00 78 01 63 85 F6 05 83 C9
-06 00 E1 16 23 00 38 01 03 C9 76 00 23 00 28 01
-83 CA 66 00 23 00 58 01 03 CA 56 00 23 00 48 01
-03 C3 46 00 23 00 68 00 03 CB 36 00 23 00 68 01
-83 CB 26 00 23 00 78 01 83 C9 16 00 23 00 38 01
-E3 9F F6 FB 3A 95 29 B8 83 AA 05 00 91 05 56 87
-63 C3 0A 26 01 49 33 6B D7 03 13 0A C1 00 CA 89
-05 09 B3 0B 2A 01 4A 8A 33 47 D7 03 13 0B 0B 03
-A3 8F 6B FF 71 CB 33 6B D7 03 CA 89 93 0B C1 00
-05 09 CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF
-45 CF 33 6B D7 03 CA 89 93 0B C1 00 13 09 2A 00
-CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF 49 CF
-33 6B D7 03 CA 89 93 0B C1 00 13 09 3A 00 CA 9B
-33 47 D7 03 13 0B 0B 03 A3 8F 6B FF 35 CF 33 6B
-D7 03 CA 89 93 0B C1 00 13 09 4A 00 CA 9B 33 47
-D7 03 13 0B 0B 03 A3 8F 6B FF 39 CF 33 6B D7 03
-CA 89 93 0B C1 00 13 09 5A 00 CA 9B 33 47 D7 03
-13 0B 0B 03 A3 8F 6B FF 21 C3 33 6B D7 03 CA 89
-93 0B C1 00 13 09 6A 00 CA 9B 33 47 D7 03 13 0B
-0B 03 A3 8F 6B FF 0D C3 33 6B D7 03 CA 89 13 09
-7A 00 13 0A C1 00 B3 0B 2A 01 33 47 D7 03 13 0B
-0B 03 A3 8F 6B FF 01 FB 4A 87 63 55 D9 08 33 8A
-26 41 93 7B 7A 00 63 8C 0B 04 05 4B 63 84 6B 05
-09 4A 63 8E 4B 03 0D 4B 63 88 6B 03 11 4A 63 82
-4B 03 15 4B 63 8C 6B 01 19 4A 63 86 4B 01 23 00
-68 00 13 07 19 00 23 00 68 00 05 07 23 00 68 00
-05 07 23 00 68 00 05 07 23 00 68 00 05 07 23 00
-68 00 05 07 23 00 68 00 05 07 63 05 D7 02 23 00
-68 00 23 00 68 00 23 00 68 00 23 00 68 00 23 00
-68 00 23 00 68 00 23 00 68 00 23 00 68 00 21 07
-E3 1F D7 FC 74 00 33 87 36 01 33 03 F7 41 93 7B
-73 00 63 89 0B 06 05 4B 63 8F 6B 05 09 4A 63 87
-4B 05 8D 46 63 8F DB 02 11 43 63 87 6B 02 15 4B
-63 8F 6B 01 19 4A 63 87 4B 01 83 4B 07 00 7D 17
-23 00 78 01 83 46 07 00 7D 17 23 00 D8 00 03 43
-07 00 7D 17 23 00 68 00 03 4B 07 00 7D 17 23 00
-68 01 03 4A 07 00 7D 17 23 00 48 01 83 4B 07 00
-7D 17 23 00 78 01 83 46 07 00 7D 17 23 00 D8 00
-63 05 F7 05 03 43 07 00 61 17 23 00 68 00 03 4B
-77 00 23 00 68 01 03 4A 67 00 23 00 48 01 83 4B
-57 00 23 00 78 01 83 46 47 00 23 00 D8 00 03 43
-37 00 23 00 68 00 03 4B 27 00 23 00 68 01 03 4A
-17 00 23 00 48 01 E3 1F F7 FB E3 DD 0A B4 13 89
-29 00 4A 95 6F F0 CF DB 1A 87 13 03 00 02 63 14
-77 E4 6F F0 0F E7 33 07 50 41 23 00 78 00 FD 16
-51 BB 01 45 82 80 39 71 13 03 41 02 2E D2 9A 85
-06 CE 32 D4 36 D6 3A D8 3E DA 42 DC 46 DE 1A C6
-EF F0 CF D2 F2 40 21 61 82 80 39 71 13 03 41 02
-2E D2 9A 85 06 CE 32 D4 36 D6 3A D8 3E DA 42 DC
-46 DE 1A C6 EF F0 8F D0 F2 40 21 61 82 80 19 C6
-03 15 25 00 83 95 25 00 0D 8D 82 80 83 17 05 00
-13 97 07 01 93 52 07 01 13 F3 07 F0 93 D3 82 00
-33 66 73 00 23 10 C5 00 83 96 05 00 03 15 25 00
-13 98 06 01 93 58 08 01 13 FE 06 F0 93 DE 88 00
-33 6F DE 01 23 90 E5 01 83 95 25 00 0D 8D 82 80
-03 97 05 00 83 97 25 00 23 10 E5 00 23 11 F5 00
-82 80 D1 48 B3 52 15 03 61 73 23 A0 05 00 13 07
-03 08 93 87 05 01 93 86 85 00 93 88 E2 FF 13 98
-38 00 2E 98 23 A2 05 01 13 9E 28 00 23 11 08 00
-23 10 E8 00 42 9E 13 05 48 00 63 FB 07 3F 13 07
-88 00 63 77 C7 3F 23 A4 05 00 94 C1 C8 C5 93 43
-F3 FF FD 5E 23 12 D8 01 23 13 78 00 63 8D 08 20
-13 1F 06 01 E1 7F 93 F2 38 00 13 5F 0F 01 01 45
-93 CE FF FF 63 8D 02 0C 05 43 63 84 62 08 89 43
-63 8D 72 02 93 82 87 00 63 F8 02 03 93 0F 47 00
-63 F4 CF 03 13 15 3F 00 94 C3 93 76 85 07 9C C1
-13 93 86 00 D8 C3 B3 63 D3 00 23 10 77 00 23 11
-D7 01 BE 86 7E 87 96 87 05 45 93 82 87 00 63 F1
-02 05 93 03 47 00 63 FD C3 03 93 1F 05 01 93 DF
-0F 01 33 C3 EF 01 0E 03 13 73 83 07 93 FF 7F 00
-94 C3 B3 66 F3 01 9C C1 13 93 86 00 D8 C3 B3 6F
-D3 00 23 10 F7 01 23 11 D7 01 BE 86 1E 87 96 87
-05 05 93 82 87 00 63 F1 02 05 93 03 47 00 63 FD
-C3 03 13 13 05 01 93 5F 03 01 33 C3 EF 01 0E 03
-13 73 83 07 93 FF 7F 00 94 C3 B3 66 F3 01 9C C1
-13 93 86 00 D8 C3 B3 6F D3 00 23 10 F7 01 23 11
-D7 01 BE 86 1E 87 96 87 05 05 63 86 A8 12 93 82
-87 00 63 F1 02 05 93 03 47 00 63 FD C3 03 13 13
-05 01 93 5F 03 01 33 C3 EF 01 0E 03 13 73 83 07
-93 FF 7F 00 94 C3 B3 66 F3 01 9C C1 13 93 86 00
-D8 C3 B3 6F D3 00 23 10 F7 01 23 11 D7 01 BE 86
-1E 87 96 87 93 82 87 00 05 05 63 F1 02 05 93 03
-47 00 63 FD C3 03 13 13 05 01 93 5F 03 01 33 C3
-EF 01 0E 03 13 73 83 07 93 FF 7F 00 94 C3 B3 66
-F3 01 9C C1 13 93 86 00 D8 C3 B3 6F D3 00 23 10
-F7 01 23 11 D7 01 BE 86 1E 87 96 87 93 82 87 00
-13 03 15 00 63 F1 02 05 93 03 47 00 63 FD C3 03
-93 1F 03 01 93 DF 0F 01 33 C3 EF 01 0E 03 13 73
-83 07 93 FF 7F 00 94 C3 B3 66 F3 01 9C C1 13 93
-86 00 D8 C3 B3 6F D3 00 23 10 F7 01 23 11 D7 01
-BE 86 1E 87 96 87 93 82 87 00 13 03 25 00 63 F1
-02 05 93 03 47 00 63 FD C3 03 93 1F 03 01 93 DF
-0F 01 33 C3 EF 01 0E 03 13 73 83 07 93 FF 7F 00
-94 C3 B3 66 F3 01 9C C1 13 93 86 00 D8 C3 B3 6F
-D3 00 23 10 F7 01 23 11 D7 01 BE 86 1E 87 96 87
-0D 05 E3 9E A8 EC 88 42 29 CD 15 48 33 DF 08 03
-91 68 05 47 13 8E F8 FF 11 A8 03 28 05 00 23 91
-EE 00 05 07 63 0F 08 02 AA 86 42 85 83 AE 46 00
-E3 65 E7 FF 93 12 07 01 93 D3 02 01 13 83 13 00
-93 1F 83 00 93 F7 0F 70 B3 C6 C3 00 03 28 05 00
-B3 E8 D7 00 B3 F2 C8 01 23 91 5E 00 05 07 E3 15
-08 FC 05 48 81 48 01 45 81 4F 85 42 13 7F 78 00
-85 0F AE 87 01 47 63 0B 0F 04 05 46 63 03 CF 04
-09 4E 63 0D CF 03 8D 4E 63 07 DF 03 91 43 63 01
-7F 02 15 43 63 0B 6F 00 99 46 63 05 DF 00 9C 41
-05 47 A5 C7 9C 43 05 07 AD C3 9C 43 05 07 B1 CF
-9C 43 05 07 B9 CB 9C 43 05 07 A1 CB 9C 43 05 07
-A9 C7 9C 43 05 07 B1 C3 63 02 E8 0C 9C 43 05 07
-3A 8F 85 CF 9C 43 05 07 8D CB 9C 43 13 07 2F 00
-8D C7 9C 43 13 07 3F 00 8D C3 9C 43 13 07 4F 00
-89 CF 9C 43 13 07 5F 00 89 CB 9C 43 13 07 6F 00
-89 C7 9C 43 13 07 7F 00 E1 F3 AE 86 42 86 BE 85
-25 C7 51 C2 C9 C1 83 AE 46 00 03 AE 45 00 83 97
-0E 00 83 13 2E 00 03 93 2E 00 13 9F 07 01 13 5F
-0F 01 13 5F 8F 00 93 F7 07 F0 B3 E7 E7 01 23 90
-FE 00 03 1F 0E 00 33 03 73 40 93 1E 0F 01 93 D3
-0E 01 93 77 0F F0 13 DF 83 00 B3 EE E7 01 23 10
-DE 01 63 5A 60 02 2E 8E 8C 41 7D 16 63 8D 08 00
-23 A0 C8 01 F2 88 51 FF 1D C2 85 C5 2E 8E 7D 16
-8C 41 E3 97 08 FE 72 85 F2 88 F5 B7 AE 86 42 87
-42 86 BE 85 B5 BF 36 8E 7D 17 94 42 C1 BF E3 97
-05 EC 23 A0 08 00 63 89 5F 00 06 08 19 C5 AA 85
-81 4F 81 48 01 45 5D BD 82 80 23 20 00 00 02 90
-B6 87 2A 87 81 46 1D B1 03 28 06 00 93 08 88 00
-63 F1 E8 04 98 42 13 03 47 00 63 7C F3 02 23 20
-16 01 1C 41 83 92 05 00 03 96 25 00 23 20 F8 00
-23 20 05 01 23 22 E8 00 83 A3 06 00 13 85 43 00
-88 C2 83 25 48 00 42 85 23 90 55 00 23 91 C5 00
-82 80 01 48 42 85 82 80 AA 87 08 41 D4 43 50 41
-18 41 D0 C3 54 C1 98 C3 23 20 05 00 82 80 D0 41
-54 41 98 41 50 C1 D4 C1 18 C1 88 C1 82 80 03 96
-25 00 63 4D 06 00 01 E5 05 A8 08 41 05 C5 03 23
-45 00 83 13 23 00 E3 9A C3 FE 82 80 01 CD 03 97
-05 00 19 A0 08 41 01 C9 5C 41 83 C2 07 00 E3 9B
-E2 FE 82 80 01 45 82 80 82 80 2D C9 1C 41 81 48
-23 20 15 01 AA 86 BD C3 98 43 94 C3 3E 85 25 C3
-83 22 07 00 1C C3 3A 85 63 8A 02 04 03 A3 02 00
-23 A0 E2 00 16 85 63 03 03 04 83 23 03 00 23 20
-53 00 1A 85 63 8C 03 02 83 A5 03 00 23 A0 63 00
-1E 85 8D C5 03 A8 05 00 23 A0 75 00 2E 85 63 0F
-08 00 03 26 08 00 23 20 B8 00 42 85 C2 88 19 C6
-32 85 1C 41 23 20 15 01 AA 86 D9 FF 82 80 82 80
-79 71 22 D4 5A C8 5E C6 66 C2 6A C0 06 D6 26 D2
-4A D0 4E CE 52 CC 56 CA 62 C4 2A 84 2E 8B 32 8D
-85 4B 85 4C 63 01 04 10 01 4C 81 44 81 4A 13 F7
-7B 00 05 0C A2 87 01 49 31 CB 85 46 63 03 D7 04
-89 40 63 0D 17 02 8D 42 63 07 57 02 11 43 63 01
-67 02 95 43 63 0B 77 00 19 45 63 05 A7 00 1C 40
-05 49 A5 C7 9C 43 05 09 AD C3 9C 43 05 09 B1 CF
-9C 43 05 09 B9 CB 9C 43 05 09 A1 CB 9C 43 05 09
-A9 C7 9C 43 05 09 B1 C3 63 81 2B 05 9C 43 05 09
-CA 85 85 CF 9C 43 05 09 8D CB 9C 43 13 89 25 00
-8D C7 9C 43 13 89 35 00 8D C3 9C 43 13 89 45 00
-89 CF 9C 43 13 89 55 00 89 CB 9C 43 13 89 65 00
-89 C7 9C 43 13 89 75 00 E1 F3 22 8A DE 89 3E 84
-63 04 09 02 63 8C 09 02 15 C8 4C 40 03 25 4A 00
-6A 86 02 9B 63 54 A0 02 22 86 00 40 FD 19 81 CC
-90 C0 B2 84 E3 10 09 FE 63 8F 09 00 11 CC 22 86
-FD 19 00 40 F5 F4 B2 8A B2 84 ED B7 52 86 7D 19
-03 2A 0A 00 E9 BF 01 FC 23 A0 04 00 63 08 9C 01
-86 0B 56 84 01 B7 23 20 00 00 02 90 B2 50 22 54
-92 54 02 59 F2 49 62 4A 42 4B B2 4B 22 4C 92 4C
-02 4D 56 85 D2 4A 45 61 82 80 1D 71 A6 CA CE C6
-D2 C4 5E DE FD 74 13 1A 07 01 86 CE A2 CC CA C8
-D6 C2 DA C0 62 DC 66 DA 6A D8 6E D6 2E C2 32 C6
-AA 89 B6 8B D9 8C 13 5A 0A 01 19 E1 6F 10 70 48
-93 18 15 00 33 0F A0 40 B2 98 13 13 1F 00 C6 86
-01 46 0A 0F 33 05 D3 00 B3 85 A6 40 93 80 E5 FF
-93 D2 10 00 93 83 12 00 13 F4 73 00 AA 87 59 C4
-05 48 63 0C 04 07 09 49 63 02 24 07 8D 4A 63 08
-54 05 11 4B 63 0E 64 03 15 4C 63 04 84 03 99 4C
-63 0A 94 01 03 5D 05 00 93 07 25 00 33 0E AA 01
-23 10 C5 01 83 DE 07 00 89 07 B3 0F DA 01 23 9F
-F7 FF 83 DD 07 00 89 07 B3 05 BA 01 23 9F B7 FE
-83 D0 07 00 89 07 B3 02 1A 00 23 9F 57 FE 83 D3
-07 00 89 07 33 04 7A 00 23 9F 87 FE 03 D8 07 00
-89 07 33 09 0A 01 23 9F 27 FF 83 DA 07 00 89 07
-33 0B 5A 01 23 9F 67 FF 63 85 D7 06 03 DC 07 00
-83 DC 27 00 03 DD 47 00 83 DF 67 00 83 DE 87 00
-03 DE A7 00 83 DD C7 00 83 D5 E7 00 B3 00 8A 01
-B3 03 9A 01 B3 02 AA 01 33 04 FA 01 33 09 DA 01
-B3 0A CA 01 33 08 BA 01 33 0B BA 00 23 90 17 00
-23 91 77 00 23 92 57 00 23 93 87 00 23 94 27 01
-23 95 57 01 23 96 07 01 23 97 67 01 C1 07 E3 9F
-D7 F8 93 0E 16 00 B3 06 E5 41 63 84 D9 01 76 86
-D5 B5 92 43 33 08 30 41 01 4F 81 4F 13 15 28 00
-33 8D 68 00 B3 87 A8 41 13 8C E7 FF 93 5C 1C 00
-13 8E 1C 00 93 1D 2F 00 93 75 7E 00 B3 87 7D 00
-EA 86 D1 CD 85 40 63 82 15 08 89 42 63 87 55 06
-0D 44 63 8C 85 04 11 49 63 81 25 05 95 4A 63 86
-55 03 19 4B 63 8B 65 01 03 1C 0D 00 93 06 2D 00
-91 07 B3 0C EC 02 23 AE 97 FF 03 9E 06 00 91 07
-89 06 B3 0D EE 02 23 AE B7 FF 83 95 06 00 91 07
-89 06 B3 80 E5 02 23 AE 17 FE 83 92 06 00 91 07
-89 06 33 84 E2 02 23 AE 87 FE 03 99 06 00 91 07
-89 06 B3 0A E9 02 23 AE 57 FF 03 9B 06 00 91 07
-89 06 33 0C EB 02 23 AE 87 FF 83 9C 06 00 91 07
-89 06 33 8E EC 02 23 AE C7 FF 63 87 16 07 83 9D
-06 00 83 90 26 00 03 9B 46 00 83 9A 66 00 03 99
-86 00 03 94 A6 00 83 92 C6 00 83 95 E6 00 B3 8C
-ED 02 C1 06 93 87 07 02 33 8C E0 02 23 A0 97 FF
-33 0E EB 02 23 A2 87 FF B3 8D EA 02 23 A4 C7 FF
-B3 00 E9 02 23 A6 B7 FF 33 0B E4 02 23 A8 17 FE
-B3 8A E2 02 23 AA 67 FF 33 89 E5 02 23 AC 57 FF
-23 AE 27 FF E3 9D 16 F9 93 86 1F 00 76 9F B3 08
-AD 40 63 84 CF 00 B6 8F E1 B5 92 4F 13 97 2E 00
-81 40 7E 97 01 4E 81 46 81 45 0E 08 33 0D A7 00
-33 03 A7 41 93 03 C3 FF 93 DE 23 00 13 84 1E 00
-93 72 34 00 6A 8F 63 8C 02 0E 85 4C 63 8A 92 05
-09 4C 63 85 82 03 F2 8D 03 2E 0D 00 93 97 00 01
-93 D0 07 01 F2 96 63 D7 D4 1A 13 8F A0 00 93 18
-0F 01 93 D0 08 41 81 46 13 0F 4D 00 F2 8F 03 2E
-0F 00 13 93 00 01 93 53 03 01 F2 96 63 DB D4 16
-93 86 A3 00 93 9C 06 01 93 D0 0C 41 81 46 11 0F
-72 8C 03 2E 0F 00 93 9D 00 01 93 D7 0D 01 F2 96
-63 DC D4 12 93 88 A7 00 93 9F 08 01 13 93 08 01
-93 DE 0F 01 93 50 03 41 81 46 11 0F 63 19 E7 07
-93 8D 15 00 33 07 0D 41 63 07 B6 14 EE 85 B9 B7
-83 22 4F 00 93 8E AA 00 13 94 0E 01 93 53 04 41
-01 49 13 9E 03 01 B3 06 59 00 93 5C 0E 01 63 DF
-D4 08 03 2E 8F 00 93 87 AC 00 93 9A 07 01 13 DB
-0A 41 81 46 13 19 0B 01 F2 96 93 58 09 01 63 D0
-D4 0A 93 82 A8 00 93 9C 02 01 13 9C 02 01 93 DE
-0C 01 93 50 0C 41 81 46 31 0F E3 0B E7 F9 83 23
-0F 00 93 9E 00 01 13 D4 0E 01 B3 80 76 00 63 C5
-14 08 33 2E 7E 00 B3 02 C4 01 93 9C 02 01 93 DD
-0C 41 03 2B 4F 00 93 97 0D 01 11 0F 33 89 60 01
-93 DA 07 01 E3 C6 24 F7 B3 A8 63 01 83 22 4F 00
-B3 8F 1A 01 13 93 0F 01 93 53 03 41 13 9E 03 01
-B3 06 59 00 93 5C 0E 01 E3 C5 D4 F6 33 2C 5B 00
-03 2E 8F 00 B3 8D 8C 01 93 90 0D 01 13 DB 00 41
-13 19 0B 01 F2 96 93 58 09 01 E3 C4 D4 F6 B3 AF
-C2 01 33 83 F8 01 93 13 03 01 13 14 03 01 93 DE
-03 01 93 50 04 41 8D B7 93 06 A4 00 13 9C 06 01
-93 5D 0C 41 81 40 B5 BF B3 20 CC 01 33 8B 17 00
-93 1A 0B 01 13 19 0B 01 93 DE 0A 01 93 50 09 41
-E9 B5 B3 AE CF 01 33 84 D3 01 93 12 04 01 93 D0
-02 41 71 B5 33 AB CD 01 B3 8A 60 01 13 99 0A 01
-93 50 09 41 91 BD A9 67 93 F5 10 00 13 FD F0 0F
-93 8A 17 00 33 0B B0 40 33 FE 6A 01 13 59 1D 00
-B3 48 2E 01 93 F6 18 00 13 D7 8E 00 93 57 2D 00
-93 5D 1E 00 91 CA E9 7F 13 83 1F 00 B3 C3 6D 00
-93 9E 03 01 93 DD 0E 01 33 C4 B7 01 93 70 14 00
-93 D2 17 00 13 D8 1D 00 63 8B 00 00 E9 7C 13 8C
-1C 00 33 4F 88 01 13 15 0F 01 13 58 05 01 33 C6
-02 01 93 75 16 00 13 DD 27 00 13 59 18 00 91 C9
-69 7B 93 0A 1B 00 B3 4D 59 01 13 9E 0D 01 13 59
-0E 01 B3 48 A9 01 93 F6 18 00 93 DF 37 00 93 50
-19 00 91 CA 69 73 93 03 13 00 B3 CE 70 00 13 94
-0E 01 93 50 04 01 B3 C2 F0 01 93 FC 12 00 13 DC
-47 00 93 D5 10 00 63 8B 0C 00 69 7F 13 05 1F 00
-33 C8 A5 00 13 16 08 01 93 55 06 01 33 4D BC 00
-13 7B 1D 00 95 83 93 D8 15 00 63 0B 0B 00 E9 7A
-13 8E 1A 00 B3 CD C8 01 13 99 0D 01 93 58 09 01
-93 F6 18 00 13 D4 18 00 63 8B F6 00 E9 7F 13 83
-1F 00 B3 43 64 00 93 9E 03 01 13 D4 0E 01 B3 40
-87 00 93 F2 10 00 93 5C 17 00 13 56 14 00 63 8B
-02 00 69 7C 13 0F 1C 00 33 45 E6 01 13 18 05 01
-13 56 08 01 B3 C5 CC 00 13 FD 15 00 13 5B 27 00
-13 59 16 00 63 0B 0D 00 E9 77 93 8A 17 00 33 4E
-59 01 93 1D 0E 01 13 D9 0D 01 B3 48 69 01 93 FF
-18 00 93 56 37 00 93 50 19 00 63 8B 0F 00 69 73
-93 03 13 00 B3 CE 70 00 13 94 0E 01 93 50 04 01
-B3 C2 D0 00 93 FC 12 00 13 5C 47 00 93 D5 10 00
-63 8B 0C 00 69 7F 13 05 1F 00 33 C8 A5 00 13 16
-08 01 93 55 06 01 33 4D BC 00 13 7B 1D 00 93 5A
-57 00 93 D8 15 00 63 0B 0B 00 E9 77 13 8E 17 00
-B3 CD C8 01 13 99 0D 01 93 58 09 01 B3 CF 1A 01
-93 F6 1F 00 13 53 67 00 93 D2 18 00 91 CA E9 73
-93 8E 13 00 33 C4 D2 01 93 10 04 01 93 D2 00 01
-B3 4C 53 00 13 FC 1C 00 1D 83 93 D5 12 00 63 0B
-0C 00 69 7F 13 05 1F 00 33 C8 A5 00 13 16 08 01
-93 55 06 01 13 FD 15 00 93 DD 15 00 63 0B ED 00
-69 7B 93 0A 1B 00 B3 C7 5D 01 13 9E 07 01 93 5D
-0E 01 63 94 09 00 6F 10 60 5C 92 4C 13 94 29 00
-81 45 22 86 66 85 EF 50 B0 7B 32 4D 93 9F 19 00
-66 85 B3 05 94 01 B3 82 7F 01 81 43 26 C4 B3 84
-72 41 13 83 E4 FF 93 5E 13 00 93 80 1E 00 13 9C
-13 00 13 F7 70 00 B3 06 8D 01 5E 86 81 47 45 C7
-05 4F 63 07 E7 09 09 48 63 0B 07 07 0D 4B 63 0F
-67 05 91 4A 63 03 57 05 15 4E 63 07 C7 03 19 49
-63 0B 27 01 83 98 06 00 83 97 0B 00 89 06 13 86
-2B 00 B3 87 F8 02 03 94 06 00 83 1C 06 00 89 06
-09 06 B3 0F 94 03 FE 97 83 94 06 00 03 13 06 00
-89 06 09 06 B3 8E 64 02 F6 97 83 90 06 00 03 1C
-06 00 89 06 09 06 33 87 80 03 BA 97 03 9F 06 00
-03 18 06 00 89 06 09 06 33 0B 0F 03 DA 97 83 9A
-06 00 03 1E 06 00 89 06 09 06 33 89 CA 03 CA 97
-83 98 06 00 03 14 06 00 09 06 89 06 B3 8C 88 02
-E6 97 63 06 56 08 83 9F 06 00 03 13 06 00 83 90
-26 00 83 1A 26 00 33 87 6F 02 83 94 46 00 03 1C
-46 00 83 9E 66 00 03 1B 66 00 03 9E 86 00 03 19
-86 00 83 9C A6 00 03 14 A6 00 83 98 C6 00 33 83
-50 03 B3 80 E7 00 83 1F C6 00 03 98 E6 00 03 1F
-E6 00 41 06 C1 06 B3 87 84 03 B3 8A 60 00 B3 84
-6E 03 33 8C FA 00 B3 0E 2E 03 33 0B 9C 00 33 87
-8C 02 33 0E DB 01 33 89 F8 03 B3 0C EE 00 33 04
-E8 03 B3 88 2C 01 B3 87 88 00 E3 1E 56 F6 1C C1
-11 05 CE 93 E3 95 A5 EA A2 44 B3 02 30 41 13 95
-22 00 81 47 01 43 01 48 81 46 13 96 32 00 33 8D
-A5 00 B3 8F A5 41 13 8F CF FF 93 50 2F 00 93 8A
-10 00 13 FC 3A 00 EA 8E 63 02 0C 52 05 4B 63 09
-6C 05 09 47 63 04 EC 02 9A 8E 03 23 0D 00 C2 07
-13 DE 07 01 1A 98 63 DF 04 5D 13 08 AE 00 93 18
-08 01 93 D7 08 41 01 48 93 0E 4D 00 9A 83 03 A3
-0E 00 93 92 07 01 93 DF 02 01 1A 98 63 D3 04 5B
-13 8C AF 00 13 1B 0C 01 93 57 0B 41 01 48 91 0E
-1A 87 03 A3 0E 00 C2 07 13 DE 07 01 1A 98 63 D5
-04 57 13 08 AE 00 93 13 08 01 93 12 08 01 93 D0
-03 01 93 D7 02 41 01 48 91 0E 63 91 D5 4B 85 06
-B3 05 CD 40 E3 9D D9 F4 93 F8 F7 0F 13 D9 80 00
-33 CD B8 01 13 7E 1D 00 93 DC 18 00 93 D2 1D 00
-63 0B 0E 00 69 74 13 03 14 00 B3 C3 62 00 13 98
-03 01 93 52 08 01 B3 CF 5C 00 13 FF 1F 00 93 D0
-28 00 13 D7 12 00 63 0B 0F 00 E9 7A 13 8C 1A 00
-B3 47 87 01 13 9B 07 01 13 57 0B 01 B3 CE E0 00
-13 F5 1E 00 93 DD 38 00 13 5E 17 00 11 C9 69 76
-93 06 16 00 B3 45 DE 00 13 9D 05 01 13 5E 0D 01
-B3 CC CD 01 13 F4 1C 00 13 D3 48 00 13 5F 1E 00
-11 C8 E9 73 13 88 13 00 B3 42 0F 01 93 9F 02 01
-13 DF 0F 01 B3 40 E3 01 93 FA 10 00 13 DC 58 00
-13 55 1F 00 63 8B 0A 00 69 7B 13 07 1B 00 B3 47
-E5 00 93 9E 07 01 13 D5 0E 01 B3 4D AC 00 93 F6
-1D 00 13 D6 68 00 13 54 15 00 91 CA E9 75 13 8D
-15 00 33 4E A4 01 93 1C 0E 01 13 D4 0C 01 33 43
-86 00 93 73 13 00 93 D8 78 00 93 50 14 00 63 8B
-03 00 69 78 93 02 18 00 B3 CF 50 00 13 9F 0F 01
-93 50 0F 01 93 FA 10 00 93 DE 10 00 63 8B 1A 01
-69 7C 13 0B 1C 00 33 C7 6E 01 93 17 07 01 93 DE
-07 01 33 C5 2E 01 93 7D 15 00 13 56 19 00 93 DC
-1E 00 63 8B 0D 00 E9 76 93 85 16 00 33 CD BC 00
-13 1E 0D 01 93 5C 0E 01 33 C4 CC 00 13 73 14 00
-93 53 29 00 13 DF 1C 00 63 0B 03 00 E9 78 13 88
-18 00 B3 42 0F 01 93 9F 02 01 13 DF 0F 01 B3 40
-7F 00 93 FA 10 00 13 5C 39 00 13 55 1F 00 63 8B
-0A 00 69 7B 13 07 1B 00 B3 47 E5 00 93 9E 07 01
-13 D5 0E 01 B3 4D AC 00 13 F6 1D 00 93 56 49 00
-13 54 15 00 11 CA E9 75 13 8D 15 00 33 4E A4 01
-93 1C 0E 01 13 D4 0C 01 33 C3 86 00 93 73 13 00
-93 58 59 00 93 50 14 00 63 8B 03 00 69 78 93 02
-18 00 B3 CF 50 00 13 9F 0F 01 93 50 0F 01 B3 CA
-18 00 13 FC 1A 00 13 5B 69 00 93 DD 10 00 63 0B
-0C 00 69 77 93 0E 17 00 B3 C7 DD 01 13 95 07 01
-93 5D 05 01 33 46 BB 01 93 76 16 00 13 59 79 00
-13 D4 1D 00 91 CA E9 75 13 8D 15 00 33 4E A4 01
-93 1C 0E 01 13 D4 0C 01 93 53 14 00 13 73 14 00
-1E C8 63 0C 23 01 E9 78 13 88 18 00 B3 C2 03 01
-93 9F 02 01 13 DF 0F 01 7A C8 81 4A 81 42 63 88
-09 32 B2 40 13 9C 29 00 13 94 19 00 01 47 52 CE
-5E C4 86 8A 33 09 14 00 62 CA 01 4B 26 CC 3A 8A
-E2 8B 92 4E 93 14 2A 00 5E 86 33 85 D4 01 81 45
-EF 50 10 30 A2 4F 2A 8F 01 45 B3 07 59 41 93 8D
-E7 FF 13 D6 1D 00 93 06 16 00 13 FD 76 00 7E 86
-D6 86 81 47 63 06 0D 0A 85 45 63 08 BD 08 09 4E
-63 0C CD 07 8D 4C 63 00 9D 07 11 43 63 04 6D 04
-95 43 63 08 7D 02 99 48 63 0C 1D 01 03 98 0A 00
-83 92 0F 00 93 86 2A 00 33 86 8F 00 B3 07 58 02
-83 90 06 00 03 1C 06 00 89 06 22 96 33 87 80 03
-BA 97 83 94 06 00 83 1E 06 00 89 06 22 96 B3 8D
-D4 03 EE 97 03 9D 06 00 83 15 06 00 89 06 22 96
-33 0E BD 02 F2 97 83 9C 06 00 03 13 06 00 89 06
-22 96 B3 83 6C 02 9E 97 83 98 06 00 03 18 06 00
-89 06 22 96 B3 82 08 03 96 97 83 90 06 00 03 1C
-06 00 89 06 22 96 33 87 80 03 BA 97 63 03 D9 0A
-B3 04 86 00 83 9C 06 00 03 13 06 00 B3 8E 84 00
-03 9E 04 00 03 9D 26 00 B3 83 8E 00 83 90 46 00
-83 9D 0E 00 33 87 6C 02 B3 85 83 00 83 9E 66 00
-83 9C 03 00 33 88 85 00 03 93 86 00 03 9C 05 00
-83 98 A6 00 83 13 08 00 B3 02 88 00 33 0D CD 03
-03 98 C6 00 33 86 82 00 83 92 02 00 83 95 E6 00
-03 1E 06 00 BA 97 C1 06 22 96 B3 84 B0 03 B3 80
-A7 01 B3 8D 9E 03 B3 8E 90 00 B3 0C 83 03 33 87
-BE 01 33 83 78 02 33 0C 97 01 B3 08 58 02 B3 03
-6C 00 33 88 C5 03 33 8D 13 01 B3 07 0D 01 E3 11
-D9 F6 23 20 FF 00 93 06 15 00 11 0F 89 0F 63 84
-D9 12 36 85 59 B5 33 23 F3 01 03 A9 4E 00 B3 8A
-60 00 13 9C 0A 01 93 57 0C 41 93 9C 07 01 B3 08
-2E 01 91 0E 13 D4 0C 01 63 DE 14 09 83 AA 4E 00
-13 0F A4 00 93 10 0F 01 93 DF 00 41 81 48 13 93
-0F 01 33 8B 58 01 13 5C 03 01 63 DF 64 09 03 A3
-8E 00 93 0C AC 00 13 94 0C 01 13 59 04 41 01 4B
-93 18 09 01 33 08 6B 00 93 D3 08 01 63 D0 04 0B
-13 8C A3 00 13 1B 0C 01 13 17 0C 01 93 50 0B 01
-93 57 07 41 01 48 B1 0E E3 83 D5 B7 83 AF 0E 00
-13 9F 07 01 93 50 0F 01 33 0E F8 01 E3 D5 C4 F7
-03 A9 4E 00 13 8B A0 00 13 17 0B 01 93 57 07 41
-01 4E 93 9C 07 01 B3 08 2E 01 91 0E 13 D4 0C 01
-E3 C6 14 F7 33 A8 2F 01 83 AA 4E 00 B3 03 04 01
-93 92 03 01 93 DF 02 41 13 93 0F 01 33 8B 58 01
-13 5C 03 01 E3 C5 64 F7 33 27 59 01 03 A3 8E 00
-B3 07 EC 00 13 9E 07 01 13 59 0E 41 93 18 09 01
-33 08 6B 00 93 D3 08 01 E3 C4 04 F7 B3 A2 6A 00
-B3 8F 53 00 13 9F 0F 01 93 9A 0F 01 93 50 0F 01
-93 D7 0A 41 8D B7 13 0F 1B 00 A2 9A 4E 9A 22 99
-63 00 AB 7E 7A 8B 35 BB 33 29 67 00 B3 0C 2E 01
-13 94 0C 01 93 98 0C 01 93 50 04 01 93 D7 08 41
-61 BC 33 AF 63 00 B3 80 EF 01 93 9A 00 01 93 D7
-0A 41 B1 BC 33 A9 6E 00 B3 0C 2E 01 13 94 0C 01
-93 57 04 41 15 B4 93 72 FD 0F 93 DA 8E 00 C2 47
-93 DF 12 00 33 C9 57 00 13 7E 19 00 93 DC 17 00
-63 0B 0E 00 E9 76 93 80 16 00 B3 CD 1C 00 93 9E
-0D 01 93 DC 0E 01 33 CD 9F 01 13 73 1D 00 13 DC
-22 00 13 D8 1C 00 63 0B 03 00 E9 78 13 8F 18 00
-33 45 E8 01 93 15 05 01 13 D8 05 01 B3 43 0C 01
-13 F7 13 00 13 D6 32 00 13 5E 18 00 11 CB 69 7B
-93 07 1B 00 33 44 FE 00 13 19 04 01 13 5E 09 01
-B3 4F CE 00 93 F0 1F 00 93 D6 42 00 13 53 1E 00
-63 8B 00 00 E9 7D 93 8E 1D 00 B3 4C D3 01 13 9D
-0C 01 13 53 0D 01 33 4C D3 00 93 78 1C 00 13 DF
-52 00 13 57 13 00 63 8B 08 00 69 75 93 05 15 00
-33 48 B7 00 93 13 08 01 13 D7 03 01 33 46 E7 01
-13 7B 16 00 93 D7 62 00 93 50 17 00 63 0B 0B 00
-69 79 13 0E 19 00 33 C4 C0 01 93 1F 04 01 93 D0
-0F 01 B3 C6 F0 00 93 FD 16 00 93 D2 72 00 13 DC
-10 00 63 8B 0D 00 E9 7E 93 8C 1E 00 33 4D 9C 01
-13 13 0D 01 13 5C 03 01 93 78 1C 00 93 53 1C 00
-63 8B 58 00 69 7F 13 05 1F 00 B3 C5 A3 00 13 98
-05 01 93 53 08 01 33 C7 53 01 13 76 17 00 13 DB
-1A 00 93 DF 13 00 11 CA E9 77 13 89 17 00 33 CE
-2F 01 13 14 0E 01 93 5F 04 01 B3 40 FB 01 93 F6
-10 00 93 DD 2A 00 13 D3 1F 00 91 CA E9 72 93 8E
-12 00 B3 4C D3 01 13 9D 0C 01 13 53 0D 01 33 4C
-B3 01 93 78 1C 00 13 DF 3A 00 13 56 13 00 63 8B
-08 00 69 75 93 05 15 00 33 48 B6 00 93 13 08 01
-13 D6 03 01 33 47 E6 01 13 7B 17 00 93 D7 4A 00
-93 50 16 00 63 0B 0B 00 69 79 13 0E 19 00 33 C4
-C0 01 93 1F 04 01 93 D0 0F 01 B3 C6 17 00 93 FD
-16 00 93 D2 5A 00 13 DC 10 00 63 8B 0D 00 E9 7E
-93 8C 1E 00 33 4D 9C 01 13 13 0D 01 13 5C 03 01
-B3 C8 82 01 13 FF 18 00 13 D5 6A 00 13 5B 1C 00
-63 0B 0F 00 E9 75 13 88 15 00 B3 43 0B 01 13 96
-03 01 13 5B 06 01 33 47 AB 00 13 79 17 00 93 DA
-7A 00 93 50 1B 00 63 0B 09 00 E9 77 13 8E 17 00
-33 C4 C0 01 93 1F 04 01 93 D0 0F 01 93 F6 10 00
-13 D4 10 00 63 8B 56 01 E9 7D 93 82 1D 00 B3 4E
-54 00 93 9C 0E 01 13 D4 0C 01 81 4D 81 46 63 80
-09 1A 32 4D 92 4D 93 9A 19 00 6A 8C 33 8B AA 01
-13 99 29 00 81 4C 01 4D 13 93 2C 00 81 45 33 05
-B3 01 4A 86 EF 50 C0 58 AA 86 81 45 5E 85 B3 08
-8B 41 13 8F E8 FF 13 58 1F 00 93 03 18 00 13 F6
-33 00 2A 83 E2 88 81 4E 59 C2 05 47 63 0C E6 04
-89 47 63 06 F6 02 03 1E 0C 00 83 1F 05 00 93 08
-2C 00 33 03 55 01 B3 00 FE 03 93 DE 50 40 93 D2
-20 40 13 FF F2 00 13 F8 FE 07 B3 0E 0F 03 83 93
-08 00 03 16 03 00 89 08 56 93 B3 87 C3 02 13 D7
-27 40 13 DE 57 40 93 7F F7 00 93 70 FE 07 B3 82
-1F 02 96 9E 03 9F 08 00 03 18 03 00 89 08 56 93
-B3 03 0F 03 13 D6 23 40 93 D7 53 40 13 77 F6 00
-13 FE F7 07 B3 0F C7 03 FE 9E 63 03 1B 0B B3 00
-53 01 03 9F 08 00 03 18 03 00 33 86 50 01 83 93
-28 00 03 97 00 00 03 1E 06 00 33 03 56 01 83 92
-48 00 B3 0F 0F 03 83 17 03 00 83 90 68 00 A1 08
-56 93 33 8F E3 02 13 D8 5F 40 93 D3 2F 40 13 F7
-F3 00 93 73 F8 07 B3 82 C2 03 13 56 5F 40 13 5E
-2F 40 93 7F FE 00 13 76 F6 07 B3 80 F0 02 13 D8
-52 40 93 D7 22 40 13 FF F7 00 93 72 F8 07 33 07
-77 02 13 DE 50 40 93 D3 20 40 93 F0 F3 00 93 77
-FE 07 B3 8F CF 02 BA 9E 33 06 5F 02 33 88 FE 01
-33 8F F0 02 B3 02 C8 00 B3 8E E2 01 E3 11 1B F7
-23 A0 D6 01 93 88 15 00 91 06 09 05 63 84 19 01
-C6 85 75 B5 93 06 1D 00 56 9C CE 9C 56 9B 63 81
-A5 5F 36 8D 51 B5 93 F6 FA 0F 93 5D 8B 00 B3 C0
-86 00 13 F3 10 00 93 DF 16 00 93 52 14 00 63 0B
-03 00 69 7E 93 0E 1E 00 33 CF D2 01 93 18 0F 01
-93 D2 08 01 33 CC 5F 00 93 7C 1C 00 13 DB 26 00
-93 D4 12 00 63 8B 0C 00 69 77 13 08 17 00 B3 C7
-04 01 13 94 07 01 93 54 04 01 33 45 9B 00 13 76
-15 00 93 D5 36 00 93 DB 14 00 11 CA E9 73 13 8D
-13 00 33 C9 AB 01 93 1A 09 01 93 DB 0A 01 B3 C0
-75 01 13 F3 10 00 93 DF 46 00 93 D2 1B 00 63 0B
-03 00 69 7E 93 0E 1E 00 33 CF D2 01 93 18 0F 01
-93 D2 08 01 33 CC 5F 00 93 7C 1C 00 13 DB 56 00
-93 D4 12 00 63 8B 0C 00 69 77 13 08 17 00 B3 C7
-04 01 13 94 07 01 93 54 04 01 33 C5 64 01 93 75
-15 00 13 D6 66 00 93 DB 14 00 91 C9 E9 73 13 8D
-13 00 33 C9 AB 01 93 1A 09 01 93 DB 0A 01 B3 C0
-CB 00 13 F3 10 00 9D 82 93 D8 1B 00 63 0B 03 00
-E9 7F 13 8E 1F 00 B3 CE C8 01 13 9F 0E 01 93 58
-0F 01 93 F2 18 00 13 D8 18 00 63 8B D2 00 69 7C
-93 0C 1C 00 33 4B 98 01 13 17 0B 01 13 58 07 01
-B3 C7 0D 01 13 F4 17 00 93 D4 1D 00 13 5D 18 00
-11 C8 69 75 93 05 15 00 33 46 BD 00 93 13 06 01
-13 DD 03 01 33 C9 A4 01 93 7A 19 00 93 DB 2D 00
-13 5E 1D 00 63 8B 0A 00 E9 70 13 83 10 00 B3 46
-6E 00 93 9F 06 01 13 DE 0F 01 B3 CE CB 01 13 FF
-1E 00 93 D8 3D 00 13 57 1E 00 63 0B 0F 00 E9 72
-13 8C 12 00 B3 4C 87 01 13 9B 0C 01 13 57 0B 01
-33 C8 E8 00 13 74 18 00 93 D4 4D 00 93 53 17 00
-11 C8 69 75 93 05 15 00 B3 C7 B3 00 13 96 07 01
-93 53 06 01 33 CD 74 00 13 79 1D 00 93 DA 5D 00
-93 DF 13 00 63 0B 09 00 E9 7B 93 80 1B 00 33 C3
-1F 00 93 16 03 01 93 DF 06 01 33 CE 5F 01 93 7E
-1E 00 13 DF 6D 00 13 DB 1F 00 63 8B 0E 00 E9 78
-93 82 18 00 33 4C 5B 00 93 1C 0C 01 13 DB 0C 01
-33 47 6F 01 13 78 17 00 93 DD 7D 00 93 57 1B 00
-63 0B 08 00 69 74 93 04 14 00 33 C5 97 00 93 15
-05 01 93 D7 05 01 13 F6 17 00 13 D5 17 00 63 0B
-B6 01 E9 73 13 8D 13 00 33 49 A5 01 93 1A 09 01
-13 D5 0A 01 63 8B 09 12 32 43 B3 0B 30 41 93 90
-19 00 B3 06 13 00 93 92 1B 00 01 4F 93 9F 2B 00
-33 8C 56 00 33 8E 86 41 93 0E EE FF 93 D8 1E 00
-93 8C 18 00 13 FB 7C 00 E2 87 63 08 0B 08 05 47
-63 0C EB 06 09 48 63 02 0B 07 8D 4D 63 08 BB 05
-11 44 63 0E 8B 02 95 44 63 04 9B 02 99 45 63 0A
-BB 00 03 56 0C 00 93 07 2C 00 B3 03 46 41 23 10
-7C 00 03 DD 07 00 89 07 33 09 4D 41 23 9F 27 FF
-83 DA 07 00 89 07 B3 8B 4A 41 23 9F 77 FF 83 D0
-07 00 89 07 33 83 40 41 23 9F 67 FE 03 DE 07 00
-89 07 B3 0E 4E 41 23 9F D7 FF 83 D8 07 00 89 07
-B3 8C 48 41 23 9F 97 FF 03 DB 07 00 89 07 33 07
-4B 41 23 9F E7 FE 63 85 D7 06 83 DD 07 00 03 D4
-27 00 83 D4 47 00 03 D6 67 00 03 DD 87 00 03 D8
-A7 00 83 D5 C7 00 03 D9 E7 00 B3 83 4D 41 B3 0A
-44 41 B3 8B 44 41 B3 00 46 41 33 03 4D 41 33 0E
-48 41 B3 8E 45 41 B3 08 49 41 23 90 77 00 23 91
-57 01 23 92 77 01 23 93 17 00 23 94 67 00 23 95
-C7 01 23 96 D7 01 23 97 17 01 C1 07 E3 9F D7 F8
-05 0F B3 06 FC 41 E3 95 E9 EF F6 40 66 44 13 1C
-05 01 D6 44 46 49 B6 49 26 4A 96 4A 06 4B F2 5B
-D2 5C 42 5D B2 5D 13 55 0C 41 62 5C 25 61 82 80
-12 44 D2 4F E2 44 72 4A A2 4B 33 0B 30 41 33 07
-F4 01 13 18 2B 00 01 4D 01 4E 81 46 01 46 93 15
-3B 00 B3 02 07 01 B3 00 57 40 93 8D C0 FF 93 DE
-2D 00 93 8C 1E 00 13 F3 3C 00 16 8F 63 0F 03 10
-05 4C 63 0A 83 05 89 48 63 05 13 03 F2 83 03 AE
-02 00 93 17 0D 01 13 DD 07 01 F2 96 63 D1 D4 1C
-13 0B AD 00 13 14 0B 01 13 5D 04 41 81 46 13 8F
-42 00 F2 8F 03 2E 0F 00 93 10 0D 01 93 DD 00 01
-F2 96 63 D5 D4 18 93 86 AD 00 13 9C 06 01 13 5D
-0C 41 81 46 11 0F F2 88 03 2E 0F 00 93 13 0D 01
-93 D7 03 01 F2 96 63 D6 D4 14 13 84 A7 00 93 1F
-04 01 93 10 04 01 93 DE 0F 01 13 DD 00 41 81 46
-11 0F 63 1C E7 09 93 03 16 00 33 87 B2 40 63 0C
-C5 F8 1E 86 B9 B7 33 2E BE 01 83 2A 4F 00 33 83
-CC 01 13 1C 03 01 93 53 0C 41 93 97 03 01 33 0B
-5D 01 11 0F 13 D9 07 01 63 DD 64 09 03 23 4F 00
-93 0E A9 00 93 9C 0E 01 93 DD 0C 41 01 4B 13 9E
-0D 01 B3 06 6B 00 13 5C 0E 01 63 DE D4 08 03 2E
-8F 00 93 07 AC 00 13 99 07 01 93 5A 09 41 81 46
-13 9B 0A 01 F2 96 13 54 0B 01 63 DF D4 08 13 03
-A4 00 13 1C 03 01 93 18 03 01 93 5E 0C 01 13 DD
-08 41 81 46 31 0F E3 08 E7 F7 83 2D 0F 00 93 1E
-0D 01 93 DC 0E 01 33 8D B6 01 E3 D6 A4 F7 83 2A
-4F 00 93 86 AC 00 93 98 06 01 93 D3 08 41 01 4D
-93 97 03 01 33 0B 5D 01 11 0F 13 D9 07 01 E3 C7
-64 F7 33 A4 5D 01 03 23 4F 00 B3 0F 89 00 93 90
-0F 01 93 DD 00 41 13 9E 0D 01 B3 06 6B 00 13 5C
-0E 01 E3 C6 D4 F6 B3 A8 6A 00 03 2E 8F 00 B3 03
-1C 01 13 9D 03 01 93 5A 0D 41 13 9B 0A 01 F2 96
-13 54 0B 01 E3 C5 D4 F6 B3 2F C3 01 B3 00 F4 01
-93 9D 00 01 93 9C 00 01 93 DE 0D 01 13 DD 0C 41
-95 B7 33 AD C8 01 B3 8A A7 01 13 99 0A 01 13 9B
-0A 01 93 5E 09 01 13 5D 0B 41 5D BD B3 AE CF 01
-B3 8C DD 01 13 93 0C 01 13 5D 03 41 A5 BD 33 AF
-C3 01 B3 0A ED 01 13 99 0A 01 13 5D 09 41 81 B5
-92 4A B3 0B 30 41 13 95 2B 00 56 99 01 4E 81 4A
-81 48 81 46 13 96 3B 00 B3 0D A9 00 33 0D B9 41
-13 03 CD FF 13 57 23 00 93 03 17 00 93 F0 73 00
-6E 88 63 88 00 24 85 4F 63 8E F0 0F 89 4E 63 89
-D0 0D 0D 4F 63 84 E0 0B 91 42 63 8F 50 06 15 4C
-63 8A 80 05 99 4C 63 85 90 03 72 88 03 AE 0D 00
-93 97 0A 01 13 DB 07 01 F2 98 63 DB 14 3B 93 08
-AB 00 13 93 08 01 93 5A 03 41 81 48 13 88 4D 00
-72 87 03 2E 08 00 93 93 0A 01 93 D0 03 01 F2 98
-63 DF 14 37 93 82 A0 00 13 9C 02 01 93 5A 0C 41
-81 48 11 08 F2 8C 03 2E 08 00 93 97 0A 01 13 DB
-07 01 F2 98 63 D4 14 35 93 08 AB 00 13 93 08 01
-93 5A 03 41 81 48 11 08 72 87 03 2E 08 00 93 93
-0A 01 93 D0 03 01 F2 98 63 D9 14 31 93 82 A0 00
-13 9C 02 01 93 5A 0C 41 81 48 11 08 F2 8C 03 2E
-08 00 93 97 0A 01 13 DB 07 01 F2 98 63 DE 14 2D
-93 08 AB 00 13 93 08 01 93 5A 03 41 81 48 11 08
-72 87 03 2E 08 00 93 93 0A 01 93 D0 03 01 F2 98
-63 D3 14 2B 93 82 A0 00 13 9C 02 01 93 5A 0C 41
-81 48 11 08 F2 8C 03 2E 08 00 93 97 0A 01 13 DB
-07 01 F2 98 63 D4 14 27 93 08 AB 00 13 93 08 01
-93 93 08 01 13 5B 03 01 93 DA 03 41 81 48 11 08
-63 11 28 13 93 83 16 00 33 89 CD 40 E3 8D D5 8A
-9E 86 5D B5 33 2E 1E 00 83 2B 48 00 33 8F CE 01
-93 12 0F 01 93 D7 02 41 93 9A 07 01 33 07 7B 01
-11 08 13 DD 0A 01 63 D2 E4 12 03 2F 48 00 93 0F
-AD 00 93 9E 0F 01 93 D0 0E 41 01 47 13 9E 00 01
-33 0C E7 01 93 52 0E 01 63 D3 84 13 03 27 88 00
-93 8A A2 00 13 9D 0A 01 93 5B 0D 41 01 4C 93 98
-0B 01 B3 00 EC 00 93 D3 08 01 63 D4 14 12 03 2C
-C8 00 13 8E A3 00 93 12 0E 01 13 DF 02 41 81 40
-93 1C 0F 01 33 8B 80 01 93 D7 0C 01 63 D5 64 13
-83 20 08 01 93 88 A7 00 93 93 08 01 13 D7 03 41
-01 4B 13 13 07 01 B3 0E 1B 00 93 5F 03 01 63 D6
-D4 13 03 2B 48 01 93 8C AF 00 93 97 0C 01 13 DC
-07 41 81 4E 93 1B 0C 01 33 8D 6E 01 93 DA 0B 01
-63 D7 A4 13 03 2E 88 01 13 83 AA 00 93 1F 03 01
-93 D0 0F 41 01 4D 93 9E 00 01 B3 08 CD 01 13 DF
-0E 01 63 D8 14 13 93 0B AF 00 13 9D 0B 01 13 97
-0B 01 13 5B 0D 01 93 5A 07 41 81 48 71 08 E3 03
-28 EF 83 20 08 00 93 9F 0A 01 93 DE 0F 01 33 8B
-18 00 E3 D1 64 EF 83 2B 48 00 13 8C AE 00 93 1C
-0C 01 93 D7 0C 41 01 4B 93 9A 07 01 33 07 7B 01
-11 08 13 DD 0A 01 E3 C2 E4 EE B3 A8 70 01 03 2F
-48 00 33 03 1D 01 93 13 03 01 93 D0 03 41 13 9E
-00 01 33 0C E7 01 93 52 0E 01 E3 C1 84 EF B3 AC
-EB 01 03 27 88 00 B3 87 92 01 13 9B 07 01 93 5B
-0B 41 93 98 0B 01 B3 00 EC 00 93 D3 08 01 E3 C0
-14 EE 33 23 EF 00 03 2C C8 00 B3 8F 63 00 93 9E
-0F 01 13 DF 0E 41 93 1C 0F 01 33 8B 80 01 93 D7
-0C 01 E3 CF 64 ED B3 2B 87 01 83 20 08 01 B3 8A
-77 01 13 9D 0A 01 13 57 0D 41 13 13 07 01 B3 0E
-1B 00 93 5F 03 01 E3 CE D4 ED 33 2F 1C 00 03 2B
-48 01 33 8E EF 01 93 12 0E 01 13 DC 02 41 93 1B
-0C 01 33 8D 6E 01 93 DA 0B 01 E3 CD A4 ED 33 A7
-60 01 B3 88 EA 00 03 2E 88 01 93 93 08 01 93 D0
-03 41 93 9E 00 01 B3 08 CD 01 13 DF 0E 01 E3 CC
-14 ED B3 22 CB 01 33 0C 5F 00 93 1C 0C 01 93 17
-0C 01 13 DB 0C 01 93 DA 07 41 C9 BD B3 AB CC 01
-B3 0A 7B 01 13 9D 0A 01 13 97 0A 01 13 5B 0D 01
-93 5A 07 41 69 BB B3 2F C7 01 B3 8E F0 01 13 9F
-0E 01 93 5A 0F 41 B1 BB B3 AB CC 01 B3 0A 7B 01
-13 9D 0A 01 93 5A 0D 41 1D B3 B3 2F C7 01 B3 8E
-F0 01 13 9F 0E 01 93 5A 0F 41 C5 B9 B3 AB CC 01
-B3 0A 7B 01 13 9D 0A 01 93 5A 0D 41 6D B9 B3 2F
-C7 01 B3 8E F0 01 13 9F 0E 01 93 5A 0F 41 51 B1
-B3 2B C8 01 B3 0A 7B 01 13 9D 0A 01 93 5A 0D 41
-B1 B1 81 47 01 47 81 4D 6F E0 1F 84 01 49 81 48
-6F E0 1F C8 41 11 14 45 2E 87 22 C4 4C 45 32 84
-50 41 08 41 06 C6 EF E0 4F B2 B3 46 A4 00 13 77
-F5 0F 93 17 05 01 93 F2 16 00 13 D3 07 01 13 56
-17 00 13 58 14 00 63 8B 02 00 E9 70 93 83 10 00
-33 45 78 00 93 15 05 01 13 D8 05 01 B3 48 C8 00
-13 FE 18 00 93 5E 27 00 93 52 18 00 63 0B 0E 00
-69 7F 93 0F 1F 00 33 C4 F2 01 93 16 04 01 93 D2
-06 01 B3 C7 D2 01 93 F0 17 00 13 56 37 00 93 D8
-12 00 63 8B 00 00 E9 73 93 85 13 00 33 C5 B8 00
-13 18 05 01 93 58 08 01 33 CE C8 00 93 7E 1E 00
-13 5F 47 00 93 D7 18 00 63 8B 0E 00 E9 7F 13 84
-1F 00 B3 C6 87 00 93 92 06 01 93 D7 02 01 B3 C0
-E7 01 93 F3 10 00 13 56 57 00 13 DE 17 00 63 8B
-03 00 E9 75 13 88 15 00 33 45 0E 01 93 18 05 01
-13 DE 08 01 B3 4E CE 00 13 FF 1E 00 93 5F 67 00
-93 50 1E 00 63 0B 0F 00 69 74 93 06 14 00 B3 C2
-D0 00 93 97 02 01 93 D0 07 01 B3 C3 F0 01 13 F6
-13 00 1D 83 13 DE 10 00 11 CA E9 75 13 88 15 00
-33 45 0E 01 93 18 05 01 13 DE 08 01 93 7E 1E 00
-93 52 1E 00 63 8B EE 00 69 7F 93 0F 1F 00 33 C4
-F2 01 93 16 04 01 93 D2 06 01 93 57 83 00 B3 C0
-57 00 93 F3 10 00 13 56 83 00 93 D8 12 00 13 53
-93 00 63 8B 03 00 69 77 93 05 17 00 33 C8 B8 00
-13 15 08 01 93 58 05 01 33 4E 13 01 93 7E 1E 00
-13 5F 26 00 93 D0 18 00 63 8B 0E 00 E9 7F 13 84
-1F 00 B3 C6 80 00 93 92 06 01 93 D0 02 01 B3 C7
-E0 01 93 F3 17 00 13 53 36 00 93 D8 10 00 63 8B
-03 00 69 77 93 05 17 00 33 C8 B8 00 13 15 08 01
-93 58 05 01 33 CE 68 00 93 7E 1E 00 13 5F 46 00
-93 D0 18 00 63 8B 0E 00 E9 7F 13 84 1F 00 B3 C6
-80 00 93 92 06 01 93 D0 02 01 B3 C7 E0 01 93 F3
-17 00 13 53 56 00 93 D8 10 00 63 8B 03 00 69 77
-93 05 17 00 33 C8 B8 00 13 15 08 01 93 58 05 01
-33 CE 68 00 93 7E 1E 00 13 5F 66 00 93 D0 18 00
-63 8B 0E 00 E9 7F 13 84 1F 00 B3 C6 80 00 93 92
-06 01 93 D0 02 01 B3 C7 E0 01 93 F3 17 00 1D 82
-13 D5 10 00 63 8B 03 00 69 73 13 07 13 00 B3 45
-E5 00 13 98 05 01 13 55 08 01 93 78 15 00 05 81
-63 8B C8 00 69 7E 93 0E 1E 00 33 4F D5 01 93 1F
-0F 01 13 D5 0F 01 B2 40 22 44 41 01 82 80 79 71
-4A D2 22 D6 26 D4 4E D0 52 CE 56 CC 5A CA 5E C8
-62 C6 66 C4 6A C2 2A 87 36 89 11 E2 05 46 FD 15
-13 F4 C5 FF 13 0A 44 00 81 47 63 02 07 34 93 82
-17 00 B3 86 52 02 13 88 27 00 13 8E 37 00 13 8F
-47 00 93 8E 57 00 93 88 67 00 13 83 77 00 3E 85
-A1 07 93 93 36 00 63 F3 E3 06 B3 09 08 03 16 85
-13 9B 39 00 63 7C EB 04 B3 0B CE 03 42 85 13 9C
-3B 00 63 75 EC 04 B3 0C EF 03 72 85 13 9D 3C 00
-63 7E ED 02 B3 8F DE 03 7A 85 93 95 3F 00 63 F7
-E5 02 33 84 18 03 76 85 93 1A 34 00 63 F0 EA 02
-B3 04 63 02 46 85 93 92 34 00 63 F9 E2 00 33 88
-F7 02 1A 85 13 1E 38 00 E3 6B EE F6 33 07 A5 02
-AA 8A 93 14 17 00 33 04 9A 00 63 06 05 26 C1 6E
-81 46 81 43 85 4F 33 0F 8A 40 FD 1E 93 09 F5 FF
-33 06 F6 03 93 98 0F 01 93 D7 08 01 13 93 16 00
-33 0B 83 00 13 0C F5 FF 93 7C 3C 00 B3 0B 6F 01
-05 4E 13 88 1F 00 13 5D F6 41 93 52 0D 01 33 07
-56 00 33 76 D7 01 33 06 56 40 B3 88 C7 00 13 93
-08 01 13 5C 03 01 E2 97 23 10 8B 01 13 FD F7 0F
-23 90 AB 01 93 05 2B 00 63 76 AE 1E 63 83 0C 0E
-63 8C CC 09 89 4B 63 86 7C 05 B3 0C 06 03 42 08
-93 52 08 01 B3 08 BF 00 93 05 4B 00 13 88 2F 00
-09 4E 13 D7 FC 41 13 53 07 01 33 86 6C 00 33 7C
-D6 01 33 06 6C 40 B3 87 C2 00 13 9D 07 01 93 5B
-0D 01 B3 8C 5B 00 23 11 7B 01 13 FB FC 0F 23 90
-68 01 B3 02 06 03 93 18 08 01 13 D3 08 01 33 0C
-BF 00 05 0E 05 08 89 05 13 D7 F2 41 93 57 07 01
-33 86 F2 00 33 7D D6 01 33 06 FD 40 B3 0B C3 00
-93 9C 0B 01 13 DB 0C 01 B3 02 6B 00 23 9F 65 FF
-93 F8 F2 0F 23 10 1C 01 33 03 06 03 13 1C 08 01
-93 57 0C 01 33 0D BF 00 89 05 05 0E 05 08 13 57
-F3 41 93 5B 07 01 33 06 73 01 B3 7C D6 01 33 86
-7C 41 33 8B C7 00 93 12 0B 01 93 D8 02 01 33 83
-F8 00 23 9F 15 FF 13 7C F3 0F 23 10 8D 01 63 73
-AE 10 33 06 06 03 93 07 28 00 13 0B 38 00 13 1D
-08 01 93 52 0D 01 93 98 07 01 13 1D 0B 01 13 D3
-08 01 93 58 0D 01 13 07 18 00 13 5D F6 41 13 5D
-0D 01 6A 96 33 76 D6 01 33 0D A6 41 93 1B 07 01
-33 07 ED 02 33 86 A2 01 13 1D 06 01 13 56 0D 01
-B2 92 B3 0C BF 00 23 90 C5 00 13 FD F2 0F 23 90
-AC 01 66 8C 66 86 E6 82 93 5C F7 41 13 DD 0C 01
-6A 97 B3 7C D7 01 33 8D AC 41 B3 07 FD 02 93 DB
-0B 01 33 87 AB 01 93 1C 07 01 13 DD 0C 01 EA 9B
-23 91 A5 01 13 F7 FB 0F 23 11 EC 00 A1 05 13 DC
-F7 41 93 5C 0C 01 E6 97 33 FD D7 01 B3 0B 9D 41
-33 8B 6B 03 33 07 73 01 13 1C 07 01 93 5C 0C 01
-66 93 23 9E 95 FF 93 77 F3 0F 23 12 F6 00 11 0E
-11 08 13 56 FB 41 13 5D 06 01 B3 0B AB 01 33 FB
-DB 01 33 06 AB 41 33 87 C8 00 13 1C 07 01 93 5C
-0C 01 E6 98 23 9F 95 FF 13 F3 F8 0F 23 93 62 00
-E3 61 AE F0 85 0F 01 4E 11 C1 4E 8E 85 03 F2 9F
-AA 96 E3 E7 A3 DA A2 94 93 86 F4 FF 23 24 89 00
-93 F3 C6 FF 32 54 13 8F 43 00 23 22 49 01 23 20
-59 01 23 26 E9 01 A2 54 12 59 82 59 72 4A E2 4A
-52 4B C2 4B 32 4C A2 4C 12 4D 45 61 82 80 19 04
-FD 5A 7D 55 89 44 A1 BB 2A 88 63 06 05 3E B3 08
-A0 40 13 17 25 00 2E 97 13 93 28 00 81 45 01 45
-81 4F 81 4E 8E 08 B3 06 E3 00 B3 07 D7 40 93 82
-C7 FF 93 D3 22 00 13 8E 13 00 93 77 7E 00 36 8E
-63 80 07 22 05 4F 63 89 E7 0F 89 42 63 84 57 0C
-8D 43 63 81 77 0A 11 4F 63 8C E7 07 95 42 63 87
-57 04 99 43 63 84 77 02 7E 8E 83 AF 06 00 42 05
-13 5F 05 01 FE 9E 63 57 D6 37 93 0E AF 00 13 9E
-0E 01 13 55 0E 41 81 4E 13 8E 46 00 7E 8F 83 2F
-0E 00 42 05 93 52 05 01 FE 9E 63 5C D6 33 93 8E
-A2 00 13 95 0E 01 41 85 81 4E 11 0E FE 82 83 2F
-0E 00 93 17 05 01 93 D3 07 01 FE 9E 63 52 D6 31
-93 8E A3 00 93 97 0E 01 13 D5 07 41 81 4E 11 0E
-FE 83 83 2F 0E 00 13 1F 05 01 13 55 0F 01 FE 9E
-63 57 D6 2D 93 0E A5 00 13 9F 0E 01 13 55 0F 41
-81 4E 11 0E FE 82 83 2F 0E 00 42 05 93 53 05 01
-FE 9E 63 5D D6 29 93 8E A3 00 13 95 0E 01 41 85
-81 4E 11 0E FE 83 83 2F 0E 00 93 17 05 01 13 DF
-07 01 FE 9E 63 53 D6 27 93 0E AF 00 93 97 0E 01
-13 D5 07 41 81 4E 11 0E 7E 8F 83 2F 0E 00 93 12
-05 01 13 D5 02 01 FE 9E 63 58 D6 23 93 0E A5 00
-93 92 0E 01 13 D5 02 41 81 4E 11 0E 63 12 C7 11
-85 05 33 87 16 41 E3 10 B8 EC 82 80 B3 AF 7F 00
-B3 07 FF 01 83 2F 4E 00 93 92 07 01 13 DF 02 41
-93 17 0F 01 33 85 FE 01 11 0E 93 D2 07 01 63 53
-A6 10 83 23 4E 00 A9 02 13 95 02 01 93 57 05 41
-01 45 13 9F 07 01 B3 0E 75 00 93 57 0F 01 63 55
-D6 11 83 2F 8E 00 A9 07 93 9E 07 01 13 DF 0E 41
-81 4E 93 12 0F 01 FE 9E 13 D5 02 01 63 57 D6 11
-83 23 CE 00 29 05 93 1E 05 01 93 D2 0E 41 81 4E
-13 9F 02 01 B3 82 7E 00 93 57 0F 01 63 59 56 10
-A9 07 83 2F 0E 01 93 92 07 01 13 DF 02 41 81 42
-13 15 0F 01 B3 8E F2 01 93 57 05 01 63 5B D6 11
-83 23 4E 01 A9 07 93 9E 07 01 13 D5 0E 41 81 4E
-13 1F 05 01 9E 9E 93 52 0F 01 63 5D D6 11 83 2F
-8E 01 A9 02 93 9E 02 01 13 DF 0E 41 81 4E 13 15
-0F 01 FE 9E 93 57 05 01 63 5F D6 11 13 85 A7 00
-93 17 05 01 13 D5 07 41 81 4E 71 0E E3 02 C7 F1
-83 23 0E 00 42 05 13 5F 05 01 9E 9E E3 50 D6 F1
-93 0E AF 00 83 2F 4E 00 13 95 0E 01 13 5F 05 41
-81 4E 93 17 0F 01 33 85 FE 01 11 0E 93 D2 07 01
-E3 41 A6 F0 B3 A3 F3 01 33 8F 72 00 83 23 4E 00
-93 1E 0F 01 93 D7 0E 41 13 9F 07 01 B3 0E 75 00
-93 57 0F 01 E3 4F D6 EF B3 AF 7F 00 B3 82 F7 01
-83 2F 8E 00 13 95 02 01 13 5F 05 41 93 12 0F 01
-FE 9E 13 D5 02 01 E3 4D D6 EF B3 A3 F3 01 33 0F
-75 00 83 23 CE 00 93 17 0F 01 93 D2 07 41 13 9F
-02 01 B3 82 7E 00 93 57 0F 01 E3 4B 56 EE B3 AF
-7F 00 33 85 F7 01 83 2F 0E 01 93 1E 05 01 13 DF
-0E 41 13 15 0F 01 B3 8E F2 01 93 57 05 01 E3 49
-D6 EF B3 A3 F3 01 33 8F 77 00 83 23 4E 01 93 12
-0F 01 13 D5 02 41 13 1F 05 01 9E 9E 93 52 0F 01
-E3 47 D6 EF B3 AF 7F 00 33 85 F2 01 83 2F 8E 01
-93 17 05 01 13 DF 07 41 13 15 0F 01 FE 9E 93 57
-05 01 E3 45 D6 EF B3 A3 F3 01 33 8F 77 00 93 12
-0F 01 13 D5 02 41 D5 B5 B3 23 FF 01 B3 07 75 00
-13 9F 07 01 13 55 0F 41 C9 BB B3 A2 F3 01 33 05
-5F 00 93 13 05 01 13 D5 03 41 71 BB B3 A7 F2 01
-33 8F F3 00 93 12 0F 01 13 D5 02 41 9D B3 B3 A2
-F3 01 B3 07 55 00 93 93 07 01 13 D5 03 41 15 BB
-33 AF F2 01 33 85 E3 01 93 12 05 01 13 D5 02 41
-FD B9 B3 27 FF 01 B3 83 F2 00 13 9F 03 01 13 55
-0F 41 E1 B1 B3 27 FE 01 B3 02 FF 00 93 93 02 01
-13 D5 03 41 51 B9 01 45 82 80 63 01 05 16 41 11
-B3 03 A0 40 13 18 15 00 22 C6 26 C4 13 94 13 00
-4A C2 4E C0 32 98 81 4F 81 42 8A 03 B3 08 04 01
-33 06 18 41 13 03 E6 FF 93 54 13 00 13 87 14 00
-93 97 2F 00 13 79 77 00 AE 97 46 87 63 0F 09 08
-85 49 63 02 39 09 09 4E 63 07 C9 07 8D 4E 63 0C
-D9 05 11 4F 63 01 E9 05 15 46 63 06 C9 02 19 43
-63 0B 69 00 83 94 08 00 13 87 28 00 91 07 33 89
-D4 02 23 AE 27 FF 83 19 07 00 91 07 09 07 33 8E
-D9 02 23 AE C7 FF 83 1E 07 00 91 07 09 07 33 8F
-DE 02 23 AE E7 FF 03 16 07 00 91 07 09 07 33 03
-D6 02 23 AE 67 FE 83 14 07 00 91 07 09 07 33 89
-D4 02 23 AE 27 FF 83 19 07 00 91 07 09 07 33 8E
-D9 02 23 AE C7 FF 83 1E 07 00 91 07 09 07 33 8F
-DE 02 23 AE E7 FF 63 07 E8 06 83 19 07 00 03 19
-27 00 83 14 47 00 03 1F 67 00 83 1E 87 00 03 1E
-A7 00 03 13 C7 00 03 16 E7 00 B3 89 D9 02 41 07
-93 87 07 02 33 09 D9 02 23 A0 37 FF B3 84 D4 02
-23 A2 27 FF 33 0F DF 02 23 A4 97 FE B3 8E DE 02
-23 A6 E7 FF 33 0E DE 02 23 A8 D7 FF 33 03 D3 02
-23 AA C7 FF 33 06 D6 02 23 AC 67 FE 23 AE C7 FE
-E3 1D E8 F8 85 02 AA 9F 33 88 78 40 E3 18 55 EC
-32 44 A2 44 12 49 82 49 41 01 82 80 82 80 63 00
-05 1E B3 02 A0 40 93 16 06 01 93 17 15 00 93 93
-12 00 C1 82 33 86 F5 00 81 4F 8A 02 B3 85 C3 00
-33 07 B6 40 13 03 E7 FF 13 58 13 00 93 08 18 00
-13 FE 78 00 AE 87 63 08 0E 08 85 4E 63 0C DE 07
-09 4F 63 02 EE 07 0D 47 63 08 EE 04 11 43 63 0E
-6E 02 15 48 63 04 0E 03 99 48 63 0A 1E 01 03 DE
-05 00 93 87 25 00 B3 8E C6 01 23 90 D5 01 03 DF
-07 00 89 07 33 87 E6 01 23 9F E7 FE 03 D3 07 00
-89 07 33 88 66 00 23 9F 07 FF 83 D8 07 00 89 07
-33 8E 16 01 23 9F C7 FF 83 DE 07 00 89 07 33 8F
-D6 01 23 9F E7 FF 03 D7 07 00 89 07 33 83 E6 00
-23 9F 67 FE 03 D8 07 00 89 07 B3 88 06 01 23 9F
-17 FF 63 09 F6 10 41 11 22 C6 03 D4 07 00 03 DF
-27 00 83 DE 47 00 03 DE 67 00 03 D3 87 00 83 D8
-A7 00 03 D8 C7 00 03 D7 E7 00 36 94 36 9F B6 9E
-36 9E 36 93 B6 98 36 98 36 97 23 90 87 00 23 91
-E7 01 23 92 D7 01 23 93 C7 01 23 94 67 00 23 95
-17 01 23 96 07 01 23 97 E7 00 C1 07 E3 17 F6 FA
-85 0F 33 86 55 40 63 04 F5 0B B3 85 C3 00 B3 07
-B6 40 13 84 E7 FF 13 5F 14 00 93 0E 1F 00 13 FE
-7E 00 AE 87 E3 03 0E F8 05 43 63 04 6E 06 89 48
-63 0A 1E 05 0D 48 63 00 0E 05 11 47 63 06 EE 02
-15 44 63 0C 8E 00 19 4F 63 1C EE 07 03 D3 07 00
-89 07 B3 88 66 00 23 9F 17 FF 03 D8 07 00 89 07
-33 87 06 01 23 9F E7 FE 03 D4 07 00 89 07 33 8F
-86 00 23 9F E7 FF 83 DE 07 00 89 07 33 8E D6 01
-23 9F C7 FF 03 D3 07 00 89 07 B3 88 66 00 23 9F
-17 FF 03 D8 07 00 89 07 33 87 06 01 23 9F E7 FE
-E3 15 F6 F0 85 0F 33 86 55 40 E3 10 F5 F7 32 44
-41 01 82 80 85 0F 33 86 55 40 E3 11 F5 E5 82 80
-83 DE 05 00 93 87 25 00 33 8E D6 01 23 90 C5 01
-B5 BF 63 08 05 1A 79 71 26 D2 AA 84 4E CE 93 99
-24 00 4A D0 2E 85 32 89 81 45 4E 86 22 D4 06 D6
-36 84 52 CC 56 CA 5A C8 5E C6 62 C4 66 C2 EF 30
-30 49 93 96 14 00 AA 85 A2 96 4E 95 01 46 33 83
-86 40 93 00 E3 FF 93 D2 10 00 93 83 12 00 93 17
-16 00 93 F8 73 00 CA 97 22 87 01 4E 63 85 08 0A
-05 48 63 87 08 09 09 4A 63 8B 48 07 8D 4A 63 8F
-58 05 11 4B 63 83 68 05 95 4B 63 87 78 03 19 4C
-63 8B 88 01 83 9C 07 00 03 1E 04 00 89 07 13 07
-24 00 33 8E CC 03 83 9E 07 00 03 1F 07 00 89 07
-09 07 B3 8F EE 03 7E 9E 83 99 07 00 03 13 07 00
-89 07 09 07 B3 80 69 02 06 9E 83 92 07 00 83 13
-07 00 89 07 09 07 B3 88 72 02 46 9E 03 98 07 00
-03 1A 07 00 89 07 09 07 B3 0A 48 03 56 9E 03 9B
-07 00 83 1B 07 00 89 07 09 07 33 0C 7B 03 62 9E
-83 9C 07 00 83 1E 07 00 09 07 89 07 33 8F DC 03
-7A 9E 63 85 E6 08 83 9F 07 00 83 19 07 00 83 90
-27 00 83 1A 27 00 B3 88 3F 03 03 98 47 00 03 1C
-47 00 83 92 67 00 83 1B 67 00 83 9C 87 00 03 1B
-87 00 03 9F A7 00 03 1A A7 00 83 9E C7 00 B3 8F
-50 03 83 19 C7 00 03 93 E7 00 83 13 E7 00 46 9E
-41 07 C1 07 B3 00 88 03 B3 0A FE 01 33 8C 72 03
-33 88 1A 00 B3 82 6C 03 B3 0B 88 01 B3 08 4F 03
-B3 8C 5B 00 33 8B 3E 03 33 8F 1C 01 33 0A 73 02
-B3 0E 6F 01 33 8E 4E 01 E3 9F E6 F6 23 A0 C5 01
-91 05 26 96 E3 15 B5 EA B2 50 22 54 92 54 02 59
-F2 49 62 4A D2 4A 42 4B B2 4B 22 4C 92 4C 45 61
-82 80 82 80 5D 71 86 C6 A2 C4 A6 C2 CA C0 4E DE
-52 DC 56 DA 5A D8 5E D6 62 D4 66 D2 6A D0 6E CE
-2E C4 36 C6 63 0F 05 1A 13 14 15 00 AA 8A B2 89
-33 09 86 00 93 14 25 00 01 4B 81 4B A2 47 13 1F
-2B 00 26 86 33 85 E7 01 81 45 EF 30 70 2C 32 46
-2A 8F 81 4F 33 07 39 41 93 00 E7 FF 93 D2 10 00
-13 83 12 00 93 73 73 00 B2 85 CE 86 81 47 63 86
-03 0A 05 48 63 88 03 09 89 48 63 8C 13 07 0D 4A
-63 80 43 07 11 4C 63 84 83 05 95 4C 63 88 93 03
-19 4D 63 8C A3 01 83 9D 09 00 03 1E 06 00 93 86
-29 00 B3 05 86 00 B3 87 CD 03 83 9E 06 00 03 95
-05 00 89 06 A2 95 33 87 AE 02 BA 97 83 90 06 00
-83 92 05 00 89 06 A2 95 33 83 50 02 9A 97 83 93
-06 00 03 98 05 00 89 06 A2 95 B3 88 03 03 C6 97
-03 9A 06 00 03 9C 05 00 89 06 A2 95 B3 0C 8A 03
-E6 97 03 9D 06 00 83 9D 05 00 89 06 A2 95 33 0E
-BD 03 F2 97 83 9E 06 00 03 95 05 00 89 06 A2 95
-33 87 AE 02 BA 97 63 03 D9 0A 03 93 06 00 83 93
-05 00 B3 80 85 00 B3 82 80 00 33 07 73 02 03 9E
-00 00 03 9D 26 00 33 88 82 00 83 9D 02 00 03 9A
-46 00 B3 08 88 00 83 1C 08 00 83 90 66 00 B3 8E
-88 00 33 0D CD 03 03 93 86 00 03 9C 08 00 83 92
-A6 00 83 93 0E 00 33 85 8E 00 03 98 C6 00 B3 05
-85 00 83 1E 05 00 BA 97 33 0A BA 03 03 95 E6 00
-03 9E 05 00 B3 8D A7 01 C1 06 A2 95 B3 80 90 03
-B3 88 4D 01 33 07 83 03 B3 8C 18 00 33 83 72 02
-33 8C EC 00 B3 02 D8 03 B3 03 6C 00 33 08 C5 03
-33 8D 53 00 B3 07 0D 01 E3 11 D9 F6 23 20 FF 00
-93 86 1F 00 11 0F 09 06 63 84 DA 00 B6 8F 59 B5
-13 8F 1B 00 A2 99 56 9B 22 99 63 84 FB 01 FA 8B
-B1 BD B6 40 26 44 96 44 06 49 F2 59 62 5A D2 5A
-42 5B B2 5B 22 5C 92 5C 02 5D F2 4D 61 61 82 80
-63 04 05 1C 79 71 4E CE 93 19 15 00 22 D4 26 D2
-4A D0 52 CC 56 CA 5A C8 5E C6 62 C4 06 D6 2A 8B
-2E 84 B6 84 B2 8A 33 0A 36 01 13 19 25 00 81 4B
-01 4C 13 98 2B 00 33 05 04 01 4A 86 81 45 EF 30
-30 0D AA 83 A6 88 01 43 B3 07 5A 41 93 80 E7 FF
-93 D2 10 00 93 85 12 00 13 F6 35 00 46 85 D6 86
-81 4E 59 C2 05 47 63 0C E6 04 09 4E 63 06 C6 03
-83 9E 0A 00 03 9F 08 00 93 86 2A 00 33 85 38 01
-B3 8F EE 03 13 D8 2F 40 93 D7 5F 40 93 70 F8 00
-93 F2 F7 07 B3 8E 50 02 83 95 06 00 03 16 05 00
-89 06 4E 95 33 8E C5 02 13 57 2E 40 13 5F 5E 40
-93 7F F7 00 13 78 FF 07 B3 87 0F 03 BE 9E 83 90
-06 00 83 12 05 00 89 06 4E 95 B3 85 50 02 13 D6
-25 40 13 DE 55 40 13 77 F6 00 13 7F FE 07 B3 0F
-E7 03 FE 9E 63 03 DA 0A 33 08 35 01 83 90 06 00
-83 12 05 00 B3 07 38 01 03 9E 26 00 03 17 08 00
-83 9F 07 00 33 85 37 01 03 96 46 00 33 8F 50 02
-03 18 05 00 83 95 66 00 A1 06 4E 95 B3 00 EE 02
-93 52 2F 40 13 5E 5F 40 13 F7 F2 00 93 77 FE 07
-33 06 F6 03 13 DF 50 40 93 DF 20 40 93 72 FF 07
-93 F0 FF 00 B3 85 05 03 13 5E 56 40 13 58 26 40
-93 7F F8 00 13 76 FE 07 B3 07 F7 02 13 DF 55 40
-13 D7 25 40 13 78 F7 00 93 75 FF 07 B3 80 50 02
-BE 9E B3 82 CF 02 33 8E 1E 00 B3 0F B8 02 33 06
-5E 00 B3 0E F6 01 E3 11 DA F6 23 A0 D3 01 93 06
-13 00 91 03 89 08 63 04 DB 00 36 83 75 B5 93 03
-1C 00 CE 9A DA 9B 4E 9A 63 04 6C 00 1E 8C 51 B5
-B2 50 22 54 92 54 02 59 F2 49 62 4A D2 4A 42 4B
-B2 4B 22 4C 45 61 82 80 82 80 13 03 F5 FF 85 47
-B2 88 63 FA 67 16 85 05 93 92 05 01 93 D5 02 01
-37 06 04 F0 93 D3 35 00 9D 4E 93 F6 75 00 01 47
-13 06 86 0A A1 4F 11 48 05 4E 13 0F C0 02 93 F7
-33 00 63 8C D6 11 63 68 D8 12 93 83 D6 FF 93 92
-03 01 8A 07 93 D6 02 01 B3 03 F6 00 63 68 DE 10
-83 A6 03 01 A5 47 A1 43 B3 02 F7 00 63 F5 62 12
-41 11 22 C6 35 A0 63 66 88 0C 93 06 D4 FF 93 97
-06 01 13 94 23 00 93 D2 07 01 B3 03 86 00 63 65
-5E 0A 83 A6 03 01 A5 42 A1 43 BA 92 63 F3 62 08
-03 C4 06 00 B3 87 E8 00 23 80 87 00 03 C7 16 00
-A3 80 E7 00 03 C4 26 00 23 81 87 00 03 C7 36 00
-A3 81 E7 00 63 84 03 03 03 C4 46 00 23 82 87 00
-03 C7 56 00 A3 82 E7 00 03 C4 66 00 23 83 87 00
-63 96 F3 01 83 C6 76 00 A3 83 D7 00 85 05 BE 93
-93 97 05 01 93 D5 07 01 23 80 E3 01 16 87 13 F4
-75 00 93 D2 35 00 93 F3 32 00 E3 16 D4 F7 93 96
-23 00 A5 42 B3 07 D6 00 BA 92 94 5B A1 43 E3 E1
-62 F8 63 79 A7 02 32 44 33 06 E5 40 81 45 33 85
-E8 00 41 01 6F 30 C0 61 83 A6 03 00 95 42 91 43
-A9 BF 13 94 23 00 B3 03 86 00 83 A6 03 02 A5 42
-A1 43 A1 B7 32 44 41 01 82 80 93 92 27 00 B3 03
-56 00 83 A6 03 03 A5 47 A1 43 FD BD 83 A6 03 00
-95 47 91 43 D5 BD 93 92 27 00 B3 06 56 00 94 52
-A5 47 A1 43 D5 B5 01 47 33 06 E5 40 81 45 33 85
-E8 00 6F 30 E0 5B E3 69 A7 FE 82 80 1C 41 2A 8E
-01 45 03 C7 07 00 3E 88 61 C3 93 06 C0 02 13 88
-17 00 63 07 D7 24 88 41 13 06 07 FD 93 72 F6 0F
-A5 48 13 03 15 00 63 E4 58 0A 23 A0 65 00 83 C8
-17 00 63 8A 08 12 13 87 27 00 63 85 D8 12 13 86
-08 FD 13 0F E0 02 A5 4F 93 07 C0 02 93 76 F6 0F
-63 84 E8 03 63 E4 DF 0A 83 48 18 00 13 05 17 00
-3A 88 63 81 08 10 63 8C F8 20 13 86 08 FD 2A 87
-93 76 F6 0F E3 90 E8 FF 03 A3 05 01 15 45 93 03
-13 00 23 A8 75 00 03 43 18 00 3A 88 63 0E 03 02
-13 08 C0 02 93 08 17 00 63 01 03 1D 93 0E 50 04
-25 4F 93 0F C0 02 93 07 03 FD 13 76 F3 0D 93 F6
-F7 0F 63 0C D6 0B 63 7F DF 14 83 A2 45 01 46 88
-05 45 13 87 12 00 D8 C9 23 20 0E 01 82 80 93 03
-B0 02 63 0F 77 02 93 0E D0 02 63 0B D7 03 13 0F
-E0 02 63 04 E7 15 83 AF 45 00 23 A0 65 00 05 45
-93 87 1F 00 DC C1 23 20 0E 01 82 80 83 A2 05 01
-3A 88 05 45 13 87 12 00 98 C9 23 20 0E 01 82 80
-23 A0 65 00 03 C6 17 00 63 0E 06 14 13 88 27 00
-63 0A D6 14 94 45 13 07 06 FD 93 72 F7 0F 25 45
-93 88 16 00 63 7C 55 00 13 03 E0 02 63 03 66 10
-23 A4 15 01 05 45 23 20 0E 01 82 80 23 A4 15 01
-83 C8 27 00 63 89 08 00 93 0E C0 02 13 07 18 00
-E3 9F D8 ED 3A 88 11 45 85 B7 C8 49 93 03 15 00
-23 AA 75 00 83 4E 17 00 63 89 0E 0E 13 0F C0 02
-13 88 18 00 63 84 EE 0F 83 AF C5 00 93 87 5E FD
-13 F6 D7 0F 93 86 1F 00 D4 C5 09 C6 05 45 23 20
-0E 01 82 80 83 C2 18 00 63 84 02 0C 13 88 28 00
-63 80 E2 0D 03 A3 85 01 13 87 02 FD 13 75 F7 0F
-93 0E 13 00 A5 43 23 AC D5 01 E3 E9 A3 FC 83 C2
-28 00 63 8A 02 08 13 87 38 00 63 85 E2 09 A5 48
-13 0F C0 02 93 8F 02 FD 13 F6 FF 0F 63 F9 C8 00
-D4 41 3A 88 05 45 93 87 16 00 DC C1 F1 B5 83 42
-18 00 13 03 17 00 3A 88 63 8E 02 04 63 86 E2 07
-1A 87 C9 BF 03 43 17 00 13 88 18 00 46 87 63 0E
-03 02 63 0D F3 03 C2 88 BD BD 23 A0 65 00 03 C3
-17 00 63 05 03 02 93 88 27 00 63 00 D3 02 42 87
-B1 BD 23 A4 15 01 03 C3 27 00 63 09 03 00 93 03
-C0 02 93 08 18 00 E3 14 73 FE 46 88 15 45 AD B5
-01 45 9D B5 3A 88 1D 45 85 B5 46 88 0D 45 A9 BD
-19 45 99 BD 09 45 89 BD 1A 88 1D 45 B1 B5 2A 88
-11 45 99 B5 19 71 A2 DC A6 DA CA D8 D2 D4 D6 D2
-DA D0 DE CE 86 DE CE D6 2E 89 83 C5 05 00 4A C6
-02 D8 02 C8 02 DA 02 DC 02 DE 82 C0 82 C2 82 C4
-82 C6 02 CA 02 CC 02 CE 02 D0 02 D2 02 D4 02 D6
-04 18 2A 8A B2 8B 36 8B BA 8A 3E 84 E3 8C 05 1C
-93 09 C1 00 A6 85 4E 85 15 33 AA 87 93 92 27 00
-98 08 33 03 57 00 B2 46 83 23 03 FC A6 85 03 C6
-06 00 13 88 13 00 23 20 03 FD 4E 85 35 CA FD 39
-AA 88 13 9E 28 00 93 0E 01 05 33 8F CE 01 B2 47
-83 2F 0F FC A6 85 83 C2 07 00 13 87 1F 00 23 20
-EF FC 4E 85 63 86 02 04 D1 39 2A 83 93 13 23 00
-94 08 33 86 76 00 B2 48 03 28 06 FC A6 85 03 CE
-08 00 93 0E 18 00 23 20 D6 FD 4E 85 63 02 0E 02
-75 31 0A 05 8C 08 33 8F A5 00 B2 47 83 2F 0F FC
-83 C2 07 00 13 87 1F 00 23 20 EF FC E3 94 02 F6
-4A C6 4A 9A 83 45 09 00 E3 7C 49 13 93 00 C0 02
-4A 83 B3 C9 75 01 63 80 15 02 23 00 33 01 B2 43
-33 83 53 01 1A C6 63 7C 43 01 83 45 03 00 B3 C9
-75 01 E3 94 15 FE 56 93 1A C6 E3 68 43 FF 83 4B
-09 00 4A C6 93 09 C1 00 63 83 0B 0A A6 85 4E 85
-35 39 AA 86 13 96 26 00 13 08 01 05 B3 08 C8 00
-B2 4E 03 AE 08 FC A6 85 03 CF 0E 00 93 0F 1E 00
-23 A0 F8 FD 4E 85 63 09 0F 06 09 39 AA 87 93 92
-27 00 98 08 33 03 57 00 B2 4B 83 23 03 FC A6 85
-83 C6 0B 00 13 86 13 00 23 20 C3 FC 4E 85 A9 C6
-F5 36 2A 88 93 18 28 00 13 0E 01 05 B3 0E 1E 01
-B2 4F 03 AF 0E FC A6 85 83 C7 0F 00 93 02 1F 00
-23 A0 5E FC 4E 85 8D C3 D1 36 0A 05 8C 08 33 83
-A5 00 32 47 83 23 03 FC 83 4B 07 00 93 86 13 00
-23 20 D3 FC E3 94 0B F6 4A C6 63 72 49 03 93 00
-C0 02 83 49 09 00 33 C6 69 01 E3 87 19 02 23 00
-C9 00 32 48 33 09 58 01 4A C6 E3 64 49 FF 69 7A
-14 08 26 86 13 0E 1A 00 83 AE 06 00 93 53 14 00
-33 C4 8E 00 13 FF FE 0F 93 9F 0E 01 93 78 14 00
-93 D2 0F 01 13 55 1F 00 63 88 08 00 B3 C7 C3 01
-93 95 07 01 93 D3 05 01 33 C3 A3 00 13 77 13 00
-93 5B 2F 00 93 D0 13 00 19 C7 B3 CA C0 01 13 9B
-0A 01 93 50 0B 01 B3 C9 70 01 13 F9 19 00 13 58
-3F 00 93 DF 10 00 63 08 09 00 33 CA CF 01 13 14
-0A 01 93 5F 04 01 B3 C8 0F 01 13 F5 18 00 93 55
-4F 00 13 D7 1F 00 19 C5 B3 47 C7 01 93 93 07 01
-13 D7 03 01 33 C3 E5 00 93 7B 13 00 93 5A 5F 00
-93 59 17 00 63 88 0B 00 33 CB C9 01 93 10 0B 01
-93 D9 00 01 33 C9 59 01 13 78 19 00 13 5A 6F 00
-13 D5 19 00 63 08 08 00 33 44 C5 01 93 1F 04 01
-13 D5 0F 01 B3 48 AA 00 93 F5 18 00 13 5F 7F 00
-13 57 15 00 99 C5 B3 47 C7 01 93 93 07 01 13 D7
-03 01 13 73 17 00 13 5B 17 00 63 08 E3 01 B3 4B
-CB 01 93 9A 0B 01 13 DB 0A 01 93 D0 82 00 B3 C9
-60 01 13 F9 19 00 13 D8 82 00 93 5F 1B 00 93 D2
-92 00 63 08 09 00 33 CA CF 01 13 14 0A 01 93 5F
-04 01 33 C5 F2 01 93 75 15 00 93 58 28 00 93 D3
-1F 00 99 C5 33 CF C3 01 93 17 0F 01 93 D3 07 01
-33 C7 78 00 13 73 17 00 93 5B 38 00 93 D0 13 00
-63 08 03 00 B3 CA C0 01 13 9B 0A 01 93 50 0B 01
-B3 C9 1B 00 13 F9 19 00 93 52 48 00 93 DF 10 00
-63 08 09 00 33 CA CF 01 13 14 0A 01 93 5F 04 01
-33 C5 F2 01 93 75 15 00 93 58 58 00 93 D3 1F 00
-99 C5 33 CF C3 01 93 17 0F 01 93 D3 07 01 33 C7
-78 00 13 73 17 00 93 5B 68 00 93 D0 13 00 63 08
-03 00 B3 CA C0 01 13 9B 0A 01 93 50 0B 01 B3 C9
-1B 00 13 F9 19 00 13 58 78 00 13 D4 10 00 63 08
-09 00 B3 42 C4 01 13 9A 02 01 13 54 0A 01 93 7F
-14 00 13 5F 14 00 63 88 0F 01 33 45 CF 01 93 15
-05 01 13 DF 05 01 93 D8 0E 01 B3 C7 E8 01 93 F3
-F8 0F 13 F7 17 00 93 DE 0E 01 13 D3 13 00 13 5B
-1F 00 19 C7 B3 4B CB 01 93 9A 0B 01 13 DB 0A 01
-B3 40 63 01 93 F9 10 00 13 D9 23 00 13 5A 1B 00
-63 88 09 00 33 48 CA 01 93 12 08 01 13 DA 02 01
-33 44 49 01 93 7F 14 00 13 D5 33 00 93 57 1A 00
-63 88 0F 00 B3 C5 C7 01 13 9F 05 01 93 57 0F 01
-B3 48 F5 00 13 F7 18 00 13 D3 43 00 13 DB 17 00
-19 C7 B3 4B CB 01 93 9A 0B 01 13 DB 0A 01 B3 40
-63 01 93 F9 10 00 13 D9 53 00 13 5A 1B 00 63 88
-09 00 33 48 CA 01 93 12 08 01 13 DA 02 01 33 44
-49 01 93 7F 14 00 13 D5 63 00 93 57 1A 00 63 88
-0F 00 B3 C5 C7 01 13 9F 05 01 93 57 0F 01 B3 48
-F5 00 13 F7 18 00 93 D3 73 00 93 DA 17 00 19 C7
-33 C3 CA 01 93 1B 03 01 93 DA 0B 01 13 FB 1A 00
-13 D9 1A 00 63 08 7B 00 B3 40 C9 01 93 99 00 01
-13 D9 09 01 13 D8 8E 00 B3 42 28 01 13 FA 12 00
-13 D4 8E 00 13 5F 19 00 93 DE 9E 00 63 08 0A 00
-B3 4F CF 01 13 95 0F 01 13 5F 05 01 B3 C5 EE 01
-93 F8 15 00 13 57 24 00 13 53 1F 00 63 88 08 00
-B3 47 C3 01 93 93 07 01 13 D3 03 01 B3 4B 67 00
-93 FA 1B 00 13 5B 34 00 13 59 13 00 63 88 0A 00
-B3 40 C9 01 93 99 00 01 13 D9 09 01 33 48 2B 01
-93 72 18 00 13 5A 44 00 13 55 19 00 63 88 02 00
-B3 4E C5 01 93 9F 0E 01 13 D5 0F 01 33 4F AA 00
-93 75 1F 00 93 58 54 00 93 53 15 00 99 C5 33 C7
-C3 01 93 17 07 01 93 D3 07 01 33 C3 78 00 93 7B
-13 00 93 5A 64 00 93 D9 13 00 63 88 0B 00 33 CB
-C9 01 93 10 0B 01 93 D9 00 01 33 C9 3A 01 13 78
-19 00 1D 80 93 DE 19 00 63 08 08 00 B3 C2 CE 01
-13 9A 02 01 93 5E 0A 01 93 FF 1E 00 93 D8 1E 00
-63 88 8F 00 33 C5 C8 01 13 1F 05 01 93 58 0F 01
-0C 42 93 D9 18 00 33 C7 15 01 93 F3 F5 0F 13 93
-05 01 93 77 17 00 93 5B 03 01 93 DA 13 00 99 C7
-33 CB C9 01 93 10 0B 01 93 D9 00 01 33 C9 3A 01
-13 78 19 00 93 D2 23 00 93 DE 19 00 63 08 08 00
-33 C4 CE 01 13 1A 04 01 93 5E 0A 01 B3 CF D2 01
-13 F5 1F 00 13 DF 33 00 13 D3 1E 00 19 C5 B3 48
-C3 01 13 97 08 01 13 53 07 01 B3 47 6F 00 93 FA
-17 00 13 DB 43 00 13 59 13 00 63 88 0A 00 B3 40
-C9 01 93 99 00 01 13 D9 09 01 33 48 2B 01 93 72
-18 00 13 DA 53 00 93 5F 19 00 63 88 02 00 33 C4
-CF 01 93 1E 04 01 93 DF 0E 01 33 45 FA 01 13 7F
-15 00 93 D8 63 00 93 DA 1F 00 63 08 0F 00 33 C7
-CA 01 13 13 07 01 93 5A 03 01 B3 C7 58 01 13 FB
-17 00 93 D3 73 00 13 D9 1A 00 63 08 0B 00 B3 40
-C9 01 93 99 00 01 13 D9 09 01 13 78 19 00 13 54
-19 00 63 08 78 00 B3 42 C4 01 13 9A 02 01 13 54
-0A 01 93 DE 8B 00 B3 CF 8E 00 13 FF 1F 00 13 D5
-8B 00 13 53 14 00 93 DB 9B 00 63 08 0F 00 B3 48
-C3 01 13 97 08 01 13 53 07 01 B3 CA 6B 00 93 F7
-1A 00 13 5B 25 00 93 59 13 00 99 C7 B3 C3 C9 01
-93 90 03 01 93 D9 00 01 33 49 3B 01 93 72 19 00
-13 58 35 00 93 DE 19 00 63 88 02 00 33 CA CE 01
-13 14 0A 01 93 5E 04 01 B3 4F D8 01 13 FF 1F 00
-93 5B 45 00 13 D3 1E 00 63 08 0F 00 B3 48 C3 01
-13 97 08 01 13 53 07 01 B3 CA 6B 00 93 F7 1A 00
-13 5B 55 00 93 59 13 00 99 C7 B3 C3 C9 01 93 90
-03 01 93 D9 00 01 33 49 3B 01 93 72 19 00 13 58
-65 00 93 DE 19 00 63 88 02 00 33 CA CE 01 13 14
-0A 01 93 5E 04 01 B3 4F D8 01 13 FF 1F 00 1D 81
-13 D7 1E 00 63 08 0F 00 B3 4B C7 01 93 98 0B 01
-13 D7 08 01 13 73 17 00 13 5B 17 00 63 08 A3 00
-B3 4A CB 01 93 97 0A 01 13 DB 07 01 93 D3 05 01
-B3 C0 63 01 93 F9 F3 0F 13 F9 10 00 C1 81 93 D2
-19 00 13 54 1B 00 63 08 09 00 33 48 C4 01 13 1A
-08 01 13 54 0A 01 B3 CE 82 00 93 FF 1E 00 13 DF
-29 00 93 58 14 00 63 88 0F 00 33 C5 C8 01 93 1B
-05 01 93 D8 0B 01 33 47 1F 01 13 73 17 00 93 DA
-39 00 93 D3 18 00 63 08 03 00 B3 C7 C3 01 13 9B
-07 01 93 53 0B 01 B3 C0 7A 00 13 F9 10 00 93 D2
-49 00 13 D4 13 00 63 08 09 00 33 48 C4 01 13 1A
-08 01 13 54 0A 01 B3 CE 82 00 93 FF 1E 00 13 DF
-59 00 93 58 14 00 63 88 0F 00 33 C5 C8 01 93 1B
-05 01 93 D8 0B 01 33 47 1F 01 13 73 17 00 93 DA
-69 00 93 D3 18 00 63 08 03 00 B3 C7 C3 01 13 9B
-07 01 93 53 0B 01 B3 C0 7A 00 13 F9 10 00 93 D9
-79 00 13 DA 13 00 63 08 09 00 B3 42 CA 01 13 98
-02 01 13 5A 08 01 93 7E 1A 00 13 5F 1A 00 63 88
-3E 01 33 44 CF 01 93 1F 04 01 13 DF 0F 01 13 D5
-85 00 B3 4B E5 01 93 F8 1B 00 13 D7 85 00 93 57
-1F 00 A5 81 63 88 08 00 33 C3 C7 01 93 1A 03 01
-93 D7 0A 01 33 CB F5 00 93 73 1B 00 93 50 27 00
-93 D2 17 00 63 88 03 00 33 C9 C2 01 93 19 09 01
-93 D2 09 01 33 C8 50 00 13 7A 18 00 93 5E 37 00
-13 DF 12 00 63 08 0A 00 33 44 CF 01 93 1F 04 01
-13 DF 0F 01 33 C5 EE 01 93 7B 15 00 93 58 47 00
-93 5A 1F 00 63 88 0B 00 B3 C5 CA 01 13 93 05 01
-93 5A 03 01 B3 C7 58 01 13 FB 17 00 93 53 57 00
-93 D9 1A 00 63 08 0B 00 B3 C0 C9 01 13 99 00 01
-93 59 09 01 B3 C2 33 01 13 F8 12 00 13 5A 67 00
-93 DF 19 00 63 08 08 00 B3 CE CF 01 13 94 0E 01
-93 5F 04 01 33 4F FA 01 13 75 1F 00 1D 83 13 D3
-1F 00 19 C5 B3 4B C3 01 93 98 0B 01 13 D3 08 01
-93 75 13 00 13 54 13 00 63 88 E5 00 B3 4A C4 01
-93 97 0A 01 13 D4 07 01 91 06 11 06 E3 96 D4 80
-F6 50 22 85 66 54 D6 54 46 59 B6 59 26 5A 96 5A
-06 5B F6 4B 09 61 82 80 56 99 4A C6 63 63 49 FD
-6F F0 EF FD 33 0A A9 00 63 6A 49 ED 6F F0 2F FD
-63 96 05 F0 6F F0 AF FC 01 11 26 CA 83 14 05 00
-06 CE 22 CC 93 D7 74 40 4A C8 4E C6 93 F0 17 00
-63 8B 00 00 F2 40 62 44 42 49 B2 49 13 F5 F4 07
-D2 44 05 61 82 80 13 D7 34 40 93 72 F7 00 13 93
-42 00 93 F6 74 00 03 D4 85 03 AA 89 2E 89 33 67
-53 00 63 87 06 50 05 45 63 83 A6 28 13 95 04 01
-41 81 A6 8E B3 CF 8E 00 93 F0 FE 0F 93 F8 1F 00
-13 DF 10 00 93 53 14 00 63 8B 08 00 69 77 93 02
-17 00 B3 C7 53 00 13 93 07 01 93 53 03 01 33 48
-7F 00 93 75 18 00 93 D6 20 00 93 D8 13 00 91 C9
-69 76 13 04 16 00 33 CE 88 00 93 1F 0E 01 93 D8
-0F 01 33 CF 16 01 13 77 1F 00 93 D2 30 00 93 D6
-18 00 11 CB 69 73 93 03 13 00 B3 C7 76 00 13 98
-07 01 93 56 08 01 B3 C5 D2 00 13 F4 15 00 13 D6
-40 00 13 D7 16 00 11 C8 69 7E 93 0F 1E 00 B3 48
-F7 01 13 9F 08 01 13 57 0F 01 B3 42 C7 00 13 F3
-12 00 93 D3 50 00 13 54 17 00 63 0B 03 00 69 78
-93 06 18 00 B3 47 D4 00 93 95 07 01 13 D4 05 01
-33 46 74 00 13 7E 16 00 93 DF 60 00 13 53 14 00
-63 0B 0E 00 E9 78 13 8F 18 00 33 47 E3 01 93 12
-07 01 13 D3 02 01 B3 43 F3 01 13 F8 13 00 93 D0
-70 00 13 5E 13 00 63 0B 08 00 E9 76 93 85 16 00
-B3 47 BE 00 13 94 07 01 13 5E 04 01 13 76 1E 00
-93 52 1E 00 63 0B 16 00 E9 7F 93 88 1F 00 33 CF
-12 01 13 17 0F 01 93 52 07 01 21 81 33 43 55 00
-93 73 F5 0F 13 78 13 00 93 D0 13 00 13 DE 12 00
-63 0B 08 00 E9 76 93 85 16 00 B3 47 BE 00 13 94
-07 01 13 5E 04 01 33 46 1E 00 93 7F 16 00 93 D8
-23 00 13 53 1E 00 63 8B 0F 00 69 7F 13 07 1F 00
-B3 42 E3 00 13 95 02 01 13 53 05 01 33 C8 68 00
-93 70 18 00 93 D5 33 00 93 5F 13 00 63 8B 00 00
-E9 76 13 84 16 00 B3 C7 8F 00 13 9E 07 01 93 5F
-0E 01 33 C6 F5 01 93 78 16 00 13 DF 43 00 13 D8
-1F 00 63 8B 08 00 69 77 93 02 17 00 33 45 58 00
-13 13 05 01 13 58 03 01 B3 40 0F 01 93 F5 10 00
-13 D4 53 00 93 58 18 00 91 C9 E9 76 13 8E 16 00
-B3 C7 C8 01 93 9F 07 01 93 D8 0F 01 33 46 14 01
-13 7F 16 00 13 D7 63 00 93 D0 18 00 63 0B 0F 00
-E9 72 13 85 12 00 33 C3 A0 00 13 18 03 01 93 50
-08 01 B3 45 17 00 13 F4 15 00 93 D3 73 00 93 D8
-10 00 11 C8 E9 76 13 8E 16 00 B3 C7 C8 01 93 9F
-07 01 93 D8 0F 01 33 C6 13 01 13 7F 16 00 13 D8
-18 00 63 0B 0F 00 69 77 93 02 17 00 33 45 58 00
-13 13 05 01 13 58 03 01 13 F5 FE 07 93 F4 04 F0
-F2 40 62 44 B3 6E 95 00 23 1C 09 03 13 E9 0E 08
-23 90 29 01 D2 44 42 49 B2 49 05 61 82 80 D0 55
-94 59 03 25 89 02 CC 59 EF B0 3F F5 33 46 A4 00
-93 78 F5 0F 93 1E 05 01 13 7E 16 00 13 DF 0E 01
-93 DF 18 00 13 53 14 00 63 0B 0E 00 E9 77 93 80
-17 00 33 47 13 00 93 12 07 01 13 D3 02 01 B3 46
-F3 01 93 F3 16 00 13 D8 28 00 13 5E 13 00 63 8B
-03 00 E9 75 13 84 15 00 33 45 8E 00 13 16 05 01
-13 5E 06 01 B3 4E 0E 01 93 FF 1E 00 93 D7 38 00
-93 53 1E 00 63 8B 0F 00 E9 70 13 87 10 00 B3 C2
-E3 00 13 93 02 01 93 53 03 01 B3 C6 F3 00 13 F8
-16 00 93 D5 48 00 93 DE 13 00 63 0B 08 00 69 74
-13 06 14 00 33 C5 CE 00 13 1E 05 01 93 5E 0E 01
-B3 CF BE 00 93 F7 1F 00 93 D0 58 00 13 D8 1E 00
-91 CB 69 77 93 02 17 00 33 43 58 00 93 13 03 01
-13 D8 03 01 B3 46 18 00 93 F5 16 00 13 D4 68 00
-93 5F 18 00 91 C9 69 76 13 0E 16 00 33 C5 CF 01
-93 1E 05 01 93 DF 0E 01 B3 C7 8F 00 93 F0 17 00
-93 D8 78 00 13 D8 1F 00 63 8B 00 00 69 77 93 02
-17 00 33 43 58 00 93 13 03 01 13 D8 03 01 93 76
-18 00 13 55 18 00 63 8B 16 01 E9 75 13 84 15 00
-33 46 85 00 13 1E 06 01 13 55 0E 01 93 5E 8F 00
-B3 4F D5 01 93 F0 1F 00 93 58 8F 00 93 53 15 00
-13 5F 9F 00 63 8B 00 00 E9 77 13 87 17 00 B3 C2
-E3 00 13 93 02 01 93 53 03 01 33 C8 E3 01 93 75
-18 00 93 D6 28 00 93 DE 13 00 91 C9 69 74 13 06
-14 00 33 CE CE 00 13 15 0E 01 93 5E 05 01 B3 CF
-DE 00 93 F0 1F 00 13 DF 38 00 93 D3 1E 00 63 8B
-00 00 E9 77 13 87 17 00 B3 C2 E3 00 13 93 02 01
-93 53 03 01 33 C8 E3 01 93 75 18 00 13 D4 48 00
-93 DE 13 00 91 C9 E9 76 13 86 16 00 33 CE CE 00
-13 15 0E 01 93 5E 05 01 B3 CF 8E 00 93 F0 1F 00
-13 DF 58 00 93 D3 1E 00 63 8B 00 00 E9 77 13 87
-17 00 B3 C2 E3 00 13 93 02 01 93 53 03 01 33 C8
-E3 01 93 75 18 00 13 D4 68 00 93 DE 13 00 91 C9
-E9 76 13 86 16 00 33 CE CE 00 13 15 0E 01 93 5E
-05 01 B3 CF 8E 00 93 F0 1F 00 93 D8 78 00 13 D3
-1E 00 63 8B 00 00 69 7F 93 07 1F 00 33 47 F3 00
-93 12 07 01 13 D3 02 01 93 73 13 00 13 55 13 00
-63 8B 13 01 69 78 93 05 18 00 33 44 B5 00 93 16
-04 01 13 D5 06 01 03 56 C9 03 13 1E 05 01 03 54
-89 03 93 5E 0E 41 E3 17 06 B0 23 1E A9 02 19 B6
-93 03 20 02 3A 88 63 54 77 00 13 08 20 02 83 25
-49 01 83 16 29 00 03 16 09 00 03 25 89 01 A2 87
-13 77 F8 0F EF F0 0F 85 83 55 E9 03 13 14 05 01
-93 5E 04 41 03 54 89 03 E3 96 05 AC 23 1F A9 02
-D1 B4 01 11 4A C8 03 19 05 00 06 CE 22 CC 93 57
-79 40 26 CA 52 C4 4E C6 93 F0 17 00 2E 8A B2 84
-13 74 F9 07 63 9E 00 28 13 57 39 40 93 72 F7 00
-93 96 42 00 13 73 79 00 03 54 86 03 AA 89 33 E7
-D2 00 63 00 03 7C 05 45 63 0D A3 52 13 15 09 01
-41 81 CA 8E B3 4F D4 01 93 F0 FE 0F 93 F8 1F 00
-13 DF 10 00 93 53 14 00 63 8B 08 00 69 77 93 02
-17 00 B3 C7 53 00 13 93 07 01 93 53 03 01 33 C8
-E3 01 93 75 18 00 93 D6 20 00 93 D8 13 00 91 C9
-69 76 13 04 16 00 33 CE 88 00 93 1F 0E 01 93 D8
-0F 01 33 CF D8 00 13 77 1F 00 93 D2 30 00 93 D6
-18 00 11 CB 69 73 93 03 13 00 B3 C7 76 00 13 98
-07 01 93 56 08 01 B3 C5 56 00 13 F4 15 00 13 D6
-40 00 13 D7 16 00 11 C8 69 7E 93 0F 1E 00 B3 48
-F7 01 13 9F 08 01 13 57 0F 01 B3 42 C7 00 13 F3
-12 00 93 D3 50 00 13 54 17 00 63 0B 03 00 69 78
-93 06 18 00 B3 47 D4 00 93 95 07 01 13 D4 05 01
-33 46 74 00 13 7E 16 00 93 DF 60 00 13 53 14 00
-63 0B 0E 00 E9 78 13 8F 18 00 33 47 E3 01 93 12
-07 01 13 D3 02 01 B3 43 F3 01 13 F8 13 00 93 D0
-70 00 13 5E 13 00 63 0B 08 00 E9 76 93 85 16 00
-B3 47 BE 00 13 94 07 01 13 5E 04 01 13 76 1E 00
-93 52 1E 00 63 0B 16 00 E9 7F 93 88 1F 00 33 CF
-12 01 13 17 0F 01 93 52 07 01 21 81 33 43 55 00
-93 73 F5 0F 13 78 13 00 93 D0 13 00 13 DE 12 00
-63 0B 08 00 E9 76 93 85 16 00 B3 47 BE 00 13 94
-07 01 13 5E 04 01 33 46 1E 00 93 7F 16 00 93 D8
-23 00 13 53 1E 00 63 8B 0F 00 69 7F 13 07 1F 00
-B3 42 E3 00 13 95 02 01 13 53 05 01 33 48 13 01
-93 70 18 00 93 D5 33 00 93 5F 13 00 63 8B 00 00
-E9 76 13 84 16 00 B3 C7 8F 00 13 9E 07 01 93 5F
-0E 01 33 C6 BF 00 93 78 16 00 13 DF 43 00 13 D8
-1F 00 63 8B 08 00 69 77 93 02 17 00 33 45 58 00
-13 13 05 01 13 58 03 01 B3 40 E8 01 93 F5 10 00
-13 D4 53 00 93 58 18 00 91 C9 E9 76 13 8E 16 00
-B3 C7 C8 01 93 9F 07 01 93 D8 0F 01 33 C6 88 00
-13 7F 16 00 13 D7 63 00 93 D0 18 00 63 0B 0F 00
-E9 72 13 85 12 00 33 C3 A0 00 13 18 03 01 93 50
-08 01 B3 C5 E0 00 13 F4 15 00 93 D3 73 00 93 D8
-10 00 11 C8 E9 76 13 8E 16 00 B3 C7 C8 01 93 9F
-07 01 93 D8 0F 01 33 C6 13 01 13 7F 16 00 13 D8
-18 00 63 0B 0F 00 69 77 93 02 17 00 33 45 58 00
-13 13 05 01 13 58 03 01 13 F4 FE 07 13 79 09 F0
-B3 6E 24 01 23 9C 04 03 93 E0 0E 08 23 90 19 00
-03 19 0A 00 93 59 79 40 93 F5 19 00 13 78 F9 07
-63 9F 05 28 93 53 39 40 13 FE F3 00 93 16 4E 00
-93 77 79 00 83 D9 84 03 33 67 DE 00 63 8A 07 54
-85 42 63 86 57 58 13 15 09 01 41 81 4A 88 B3 45
-38 01 93 70 F8 0F 93 FE 15 00 13 D7 10 00 93 D8
-19 00 63 8B 0E 00 E9 73 13 8E 13 00 B3 CF C8 01
-93 97 0F 01 93 D8 07 01 33 4F 17 01 93 72 1F 00
-93 D6 20 00 93 DE 18 00 63 8B 02 00 69 76 93 09
-16 00 33 C3 3E 01 93 15 03 01 93 DE 05 01 33 C7
-DE 00 93 73 17 00 13 DE 30 00 93 D2 1E 00 63 8B
-03 00 E9 7F 93 88 1F 00 B3 C7 12 01 13 9F 07 01
-93 52 0F 01 B3 C6 C2 01 13 F6 16 00 93 D9 40 00
-93 D3 12 00 11 CA 69 73 93 05 13 00 B3 CE B3 00
-13 97 0E 01 93 53 07 01 33 CE 33 01 93 7F 1E 00
-93 D8 50 00 13 D6 13 00 63 8B 0F 00 69 7F 93 02
-1F 00 B3 47 56 00 93 96 07 01 13 D6 06 01 B3 49
-16 01 13 F3 19 00 93 DE 60 00 93 5F 16 00 63 0B
-03 00 E9 75 13 87 15 00 B3 C3 EF 00 13 9E 03 01
-93 5F 0E 01 B3 C8 FE 01 13 FF 18 00 93 D0 70 00
-93 D9 1F 00 63 0B 0F 00 E9 72 93 86 12 00 B3 C7
-D9 00 13 96 07 01 93 59 06 01 13 F3 19 00 13 DE
-19 00 63 0B 13 00 E9 7E 93 85 1E 00 33 47 BE 00
-93 13 07 01 13 DE 03 01 21 81 B3 4F C5 01 93 78
-F5 0F 13 FF 1F 00 93 D0 18 00 93 59 1E 00 63 0B
-0F 00 E9 72 93 86 12 00 B3 C7 D9 00 13 96 07 01
-93 59 06 01 33 C3 19 00 93 7E 13 00 13 D7 28 00
-93 DF 19 00 63 8B 0E 00 E9 75 93 83 15 00 33 CE
-7F 00 13 15 0E 01 93 5F 05 01 33 CF EF 00 93 70
-1F 00 93 D2 38 00 13 D3 1F 00 63 8B 00 00 E9 76
-13 86 16 00 B3 47 C3 00 93 99 07 01 13 D3 09 01
-B3 4E 53 00 13 F7 1E 00 93 D3 48 00 13 5F 13 00
-11 CB E9 75 13 8E 15 00 33 45 CF 01 93 1F 05 01
-13 DF 0F 01 B3 C0 E3 01 93 F2 10 00 93 D6 58 00
-93 5E 1F 00 63 8B 02 00 69 76 93 09 16 00 B3 C7
-3E 01 13 93 07 01 93 5E 03 01 33 C7 D6 01 93 73
-17 00 13 DE 68 00 93 D0 1E 00 63 8B 03 00 E9 75
-13 85 15 00 B3 CF A0 00 13 9F 0F 01 93 50 0F 01
-B3 42 1E 00 13 F6 12 00 93 D8 78 00 93 DE 10 00
-11 CA E9 76 93 89 16 00 B3 C7 3E 01 13 93 07 01
-93 5E 03 01 33 C7 D8 01 93 73 17 00 13 DF 1E 00
-63 8B 03 00 69 7E 93 05 1E 00 33 45 BF 00 93 1F
-05 01 13 DF 0F 01 13 78 F8 07 13 79 09 F0 B3 60
-28 01 23 9C E4 03 93 E4 00 08 23 10 9A 00 F2 40
-33 05 04 41 62 44 D2 44 42 49 B2 49 22 4A 05 61
-82 80 14 5A CC 58 50 56 88 54 EF B0 0F F1 33 46
-A4 00 93 78 F5 0F 93 1E 05 01 13 7E 16 00 13 DF
-0E 01 93 DF 18 00 13 53 14 00 63 0B 0E 00 E9 77
-93 80 17 00 33 47 13 00 93 12 07 01 13 D3 02 01
-B3 46 F3 01 93 F3 16 00 13 D8 28 00 13 5E 13 00
-63 8B 03 00 E9 75 13 84 15 00 33 45 8E 00 13 16
-05 01 13 5E 06 01 B3 4E 0E 01 93 FF 1E 00 93 D7
-38 00 93 53 1E 00 63 8B 0F 00 E9 70 13 87 10 00
-B3 C2 E3 00 13 93 02 01 93 53 03 01 B3 C6 F3 00
-13 F8 16 00 93 D5 48 00 93 DE 13 00 63 0B 08 00
-69 74 13 06 14 00 33 C5 CE 00 13 1E 05 01 93 5E
-0E 01 B3 CF BE 00 93 F7 1F 00 93 D0 58 00 13 D8
-1E 00 91 CB 69 77 93 02 17 00 33 43 58 00 93 13
-03 01 13 D8 03 01 B3 46 18 00 93 F5 16 00 13 D4
-68 00 93 5F 18 00 91 C9 69 76 13 0E 16 00 33 C5
-CF 01 93 1E 05 01 93 DF 0E 01 B3 C7 8F 00 93 F0
-17 00 93 D8 78 00 13 D8 1F 00 63 8B 00 00 69 77
-93 02 17 00 33 43 58 00 93 13 03 01 13 D8 03 01
-93 76 18 00 13 55 18 00 63 8B 16 01 E9 75 13 84
-15 00 33 46 85 00 13 1E 06 01 13 55 0E 01 93 5E
-8F 00 B3 4F D5 01 93 F0 1F 00 93 58 8F 00 93 53
-15 00 13 5F 9F 00 63 8B 00 00 E9 77 13 87 17 00
-B3 C2 E3 00 13 93 02 01 93 53 03 01 33 C8 E3 01
-93 75 18 00 93 D6 28 00 93 DE 13 00 91 C9 69 74
-13 06 14 00 33 CE CE 00 13 15 0E 01 93 5E 05 01
-B3 CF DE 00 93 F0 1F 00 13 DF 38 00 93 D3 1E 00
-63 8B 00 00 E9 77 13 87 17 00 B3 C2 E3 00 13 93
-02 01 93 53 03 01 33 C8 E3 01 93 75 18 00 13 D4
-48 00 93 DE 13 00 91 C9 E9 76 13 86 16 00 33 CE
-CE 00 13 15 0E 01 93 5E 05 01 B3 CF 8E 00 93 F0
-1F 00 13 DF 58 00 93 D3 1E 00 63 8B 00 00 E9 77
-13 87 17 00 B3 C2 E3 00 13 93 02 01 93 53 03 01
-33 C8 E3 01 93 75 18 00 13 D4 68 00 93 DE 13 00
-91 C9 E9 76 13 86 16 00 33 CE CE 00 13 15 0E 01
-93 5E 05 01 B3 CF 8E 00 93 F0 1F 00 93 D8 78 00
-13 D3 1E 00 63 8B 00 00 69 7F 93 07 1F 00 33 47
-F3 00 93 12 07 01 13 D3 02 01 93 73 13 00 13 55
-13 00 63 8B 13 01 69 78 93 05 18 00 33 44 B5 00
-93 16 04 01 13 D5 06 01 03 D6 C4 03 13 1E 05 01
-03 D4 84 03 93 5E 0E 41 E3 1E 06 84 23 9E A4 02
-91 B8 93 03 20 02 3A 88 63 54 77 00 13 08 20 02
-CC 48 83 96 24 00 03 96 04 00 88 4C A2 87 13 77
-F8 0F EF E0 3F 81 83 D5 E4 03 13 14 05 01 93 5E
-04 41 03 D4 84 03 E3 9F 05 80 23 9F A4 02 19 B8
-93 0F 20 02 BA 88 63 54 F7 01 93 08 20 02 03 96
-04 00 83 96 24 00 CC 48 88 4C CE 87 13 F7 F8 0F
-EF E0 4F FD 03 D6 E4 03 13 1F 05 01 83 D9 84 03
-13 58 0F 41 E3 15 06 A8 23 9F A4 02 49 B4 CC 58
-94 58 D0 54 88 54 EF B0 4F C1 33 43 35 01 13 77
-F5 0F 13 78 13 00 42 05 93 5E 05 01 93 55 17 00
-93 D7 19 00 63 0B 08 00 E9 70 93 89 10 00 B3 C3
-37 01 13 9E 03 01 93 57 0E 01 B3 C6 F5 00 93 FF
-16 00 93 58 27 00 13 D8 17 00 63 8B 0F 00 69 76
-13 0F 16 00 B3 42 E8 01 13 93 02 01 13 58 03 01
-33 45 18 01 93 75 15 00 93 50 37 00 93 5F 18 00
-91 C9 E9 79 93 83 19 00 33 CE 7F 00 93 17 0E 01
-93 DF 07 01 B3 C6 F0 01 93 F8 16 00 13 5F 47 00
-13 D5 1F 00 63 8B 08 00 69 76 93 02 16 00 33 43
-55 00 13 18 03 01 13 55 08 01 B3 45 AF 00 93 F0
-15 00 93 59 57 00 93 58 15 00 63 8B 00 00 E9 73
-13 8E 13 00 B3 C7 C8 01 93 9F 07 01 93 D8 0F 01
-B3 C6 38 01 13 FF 16 00 93 52 67 00 93 D5 18 00
-63 0B 0F 00 69 76 13 03 16 00 33 C8 65 00 13 15
-08 01 93 55 05 01 B3 C0 55 00 93 F9 10 00 1D 83
-93 D8 15 00 63 8B 09 00 E9 73 13 8E 13 00 B3 C7
-C8 01 93 9F 07 01 93 D8 0F 01 93 F6 18 00 13 D8
-18 00 63 8B E6 00 69 7F 93 02 1F 00 33 46 58 00
-13 13 06 01 13 58 03 01 13 D5 8E 00 B3 45 05 01
-93 F0 15 00 93 D9 8E 00 93 5F 18 00 93 DE 9E 00
-63 8B 00 00 69 77 93 03 17 00 33 CE 7F 00 93 17
-0E 01 93 DF 07 01 B3 C8 FE 01 13 FF 18 00 93 D6
-29 00 13 D5 1F 00 63 0B 0F 00 E9 72 13 86 12 00
-33 43 C5 00 13 18 03 01 13 55 08 01 B3 C5 A6 00
-93 F0 15 00 93 DE 39 00 93 5F 15 00 63 8B 00 00
-69 77 93 03 17 00 33 CE 7F 00 93 17 0E 01 93 DF
-07 01 B3 C8 FE 01 13 FF 18 00 93 D2 49 00 13 D5
-1F 00 63 0B 0F 00 E9 76 13 86 16 00 33 43 C5 00
-13 18 03 01 13 55 08 01 B3 C5 A2 00 93 F0 15 00
-93 DE 59 00 93 5F 15 00 63 8B 00 00 69 77 93 03
-17 00 33 CE 7F 00 93 17 0E 01 93 DF 07 01 B3 C8
-FE 01 13 FF 18 00 93 D2 69 00 13 D5 1F 00 63 0B
-0F 00 E9 76 13 86 16 00 33 43 C5 00 13 18 03 01
-13 55 08 01 B3 C5 A2 00 93 F0 15 00 93 D9 79 00
-93 5F 15 00 63 8B 00 00 E9 7E 13 87 1E 00 B3 C3
-EF 00 13 9E 03 01 93 5F 0E 01 93 F7 1F 00 13 D5
-1F 00 63 8B 37 01 E9 78 13 8F 18 00 B3 42 E5 01
-93 96 02 01 13 D5 06 01 03 D6 C4 03 13 13 05 01
-83 D9 84 03 13 58 03 41 E3 13 06 80 23 9E A4 02
-6F F0 EF FF 03 1E 45 00 39 71 22 DC 6A C8 06 DE
-26 DA 4A D8 4E D6 52 D4 56 D2 5A D0 5E CE 62 CC
-66 CA 6E C6 40 51 2A 8D E3 52 C0 0B 2E 8B 01 48
-81 4E 81 4C 01 4F 13 7C F8 0F 63 4D 0B 38 E3 0D
-04 08 A2 87 19 A0 9C 43 99 C7 83 A2 47 00 83 93
-22 00 E3 9A 63 FF 22 8A 03 26 0A 00 01 47 23 20
-EA 00 52 84 3D C6 08 42 23 20 46 01 52 87 32 84
-2D C1 14 41 10 C1 32 87 2A 84 A1 CE 84 42 88 C2
-2A 87 36 84 B9 C4 03 A9 04 00 94 C0 36 87 26 84
-63 01 09 04 83 28 09 00 23 20 99 00 26 87 4A 84
-63 89 08 02 83 A9 08 00 23 A0 28 01 4A 87 46 84
-63 81 09 02 03 AA 09 00 23 A0 19 01 46 87 4E 84
-63 09 0A 00 03 26 0A 00 4E 87 23 20 EA 00 52 84
-59 FA 63 8E 07 30 83 AA 47 00 13 83 1C 00 93 1B
-03 01 83 9D 0A 00 93 DC 0B 01 93 FF 1D 00 63 8B
-0F 00 13 D7 9D 40 93 70 17 00 06 9F 93 12 0F 01
-13 DF 02 01 83 A3 07 00 63 8A 03 00 03 A6 03 00
-90 C3 1C 40 23 A0 F3 00 23 20 74 00 63 47 0B 00
-05 0B 13 1A 0B 01 13 5B 0A 41 05 08 93 1A 08 01
-13 D8 0A 41 E3 11 0E F1 13 9E 2C 00 33 03 DE 41
-B3 0B 6F 00 93 9C 0B 01 93 D4 0C 01 63 49 B0 66
-03 2D 04 00 A2 8D 83 2A 0D 00 83 2B 4D 00 83 A7
-4A 00 03 A5 0A 00 23 22 FD 00 23 A2 7A 01 23 20
-AD 00 23 A0 0A 00 63 48 0B 22 03 AC 4D 00 83 AD
-0D 00 83 18 2C 00 63 82 68 25 E3 98 0D FE 03 2B
-04 00 83 2D 0B 00 6E 87 83 29 44 00 69 78 93 00
-18 00 03 9E 09 00 13 13 0E 01 93 5C 03 01 13 DD
-8C 00 13 7F FE 0F 93 15 8E 01 13 15 8D 01 13 5A
-1F 00 13 5C 2F 00 13 59 3F 00 93 53 4F 00 93 52
-5F 00 93 5F 6F 00 13 56 7F 00 93 D7 85 41 93 59
-85 41 13 DF 9C 00 93 DE AC 00 13 DE BC 00 13 D3
-CC 00 93 D8 DC 00 13 D8 EC 00 93 D6 FC 00 B3 CC
-97 00 13 FD 1C 00 13 D5 14 00 63 08 0D 00 B3 44
-15 00 93 95 04 01 13 D5 05 01 B3 4C AA 00 13 FD
-1C 00 05 81 63 08 0D 00 B3 44 15 00 93 95 04 01
-13 D5 05 01 B3 4C AC 00 13 FD 1C 00 05 81 63 08
-0D 00 B3 44 15 00 93 95 04 01 13 D5 05 01 B3 4C
-A9 00 13 FD 1C 00 05 81 63 08 0D 00 B3 44 15 00
-93 95 04 01 13 D5 05 01 B3 CC A3 00 13 FD 1C 00
-05 81 63 08 0D 00 B3 44 15 00 93 95 04 01 13 D5
-05 01 B3 CC A2 00 13 FD 1C 00 05 81 63 08 0D 00
-B3 44 15 00 93 95 04 01 13 D5 05 01 B3 CC AF 00
-13 FD 1C 00 05 81 63 08 0D 00 B3 44 15 00 93 95
-04 01 13 D5 05 01 93 7C 15 00 93 55 15 00 63 88
-CC 00 33 CD 15 00 93 14 0D 01 93 D5 04 01 33 C5
-B9 00 93 7C 15 00 85 81 63 88 0C 00 33 CD 15 00
-93 14 0D 01 93 D5 04 01 33 45 BF 00 93 7C 15 00
-85 81 63 88 0C 00 33 CD 15 00 93 14 0D 01 93 D5
-04 01 33 C5 BE 00 93 7C 15 00 85 81 63 88 0C 00
-33 CD 15 00 93 14 0D 01 93 D5 04 01 33 45 BE 00
-93 7C 15 00 85 81 63 88 0C 00 33 CD 15 00 93 14
-0D 01 93 D5 04 01 33 45 B3 00 93 7C 15 00 85 81
-63 88 0C 00 33 CD 15 00 93 14 0D 01 93 D5 04 01
-33 C5 B8 00 93 7C 15 00 85 81 63 88 0C 00 33 CD
-15 00 93 14 0D 01 93 D5 04 01 33 45 B8 00 93 7C
-15 00 85 81 63 88 0C 00 33 CD 15 00 93 14 0D 01
-93 D5 04 01 13 F5 15 00 93 D4 15 00 63 08 D5 00
-B3 CC 14 00 13 9D 0C 01 93 54 0D 01 63 8A 0D 06
-83 AD 0D 00 A9 BD 83 AE 4D 00 83 AD 0D 00 83 C6
-0E 00 63 8C 86 01 E3 8C 0D DC 83 AE 4D 00 83 AD
-0D 00 83 C6 0E 00 E3 98 86 FF 03 2B 04 00 03 27
-0B 00 D9 B3 63 02 04 50 A2 87 21 A0 9C 43 E3 8C
-07 C6 D8 43 83 40 07 00 E3 9A 80 FF AD B1 48 43
-85 0E 93 96 0E 01 83 04 15 00 93 DE 06 01 13 F9
-14 00 B3 08 2F 01 93 99 08 01 13 DF 09 01 39 B3
-83 2D 4B 00 01 4E 01 43 23 A2 BA 01 23 22 7B 01
-23 A0 EA 00 23 20 5B 01 85 49 81 4C 05 4D 93 FA
-79 00 85 0C A2 87 01 47 63 8B 0A 04 05 4B 63 83
-6A 05 89 4B 63 8D 7A 03 8D 40 63 87 1A 02 11 4A
-63 81 4A 03 15 4C 63 8B 8A 01 19 49 63 85 2A 01
-1C 40 05 47 A5 C7 9C 43 05 07 AD C3 9C 43 05 07
-B1 CF 9C 43 05 07 B9 CB 9C 43 05 07 A1 CB 9C 43
-05 07 A9 C7 9C 43 05 07 B1 C3 63 01 37 05 9C 43
-05 07 BA 83 85 CF 9C 43 05 07 8D CB 9C 43 13 87
-23 00 8D C7 9C 43 13 87 33 00 8D C3 9C 43 13 87
-43 00 89 CF 9C 43 13 87 53 00 89 CB 9C 43 13 87
-63 00 89 C7 9C 43 13 87 73 00 E1 F3 CE 86 25 C7
-AD CE A5 CF 83 2D 44 00 83 AA 47 00 03 9B 0D 00
-83 9B 2A 00 83 95 2D 00 93 10 0B 01 13 DC 00 01
-13 75 0B F0 13 59 8C 00 B3 63 25 01 23 90 7D 00
-83 98 0A 00 B3 8E 75 41 13 98 08 01 13 5A 08 01
-93 F2 08 F0 93 5F 8A 00 33 E6 F2 01 23 90 CA 00
-63 55 D0 03 3E 8F 9C 43 FD 16 63 0D 0E 00 23 20
-EE 01 7A 8E 51 FF 91 CE 85 C3 3E 8F FD 16 9C 43
-E3 17 0E FE 7A 83 7A 8E F5 B7 22 8F 7D 17 00 40
-E9 BF 99 C3 3E 84 E1 BD 23 20 0E 00 63 8E AC 01
-86 09 63 08 03 00 9A 87 01 4E 01 43 81 4C 3E 84
-7D BD 23 20 00 00 02 90 03 27 03 00 63 01 07 22
-03 24 43 00 E9 72 93 8C 12 00 83 1F 04 00 13 96
-0F 01 93 56 06 01 93 DE 86 00 13 FF FF 0F 13 9E
-8F 01 13 93 8E 01 93 55 8E 41 13 5D 1F 00 93 5D
-2F 00 93 5A 3F 00 13 5B 4F 00 93 5B 5F 00 93 50
-6F 00 13 5C 7F 00 13 55 83 41 13 D9 96 00 93 D3
-A6 00 93 D7 B6 00 93 D9 C6 00 93 D8 D6 00 13 D8
-E6 00 13 D4 F6 00 33 CA 95 00 93 72 1A 00 13 D6
-14 00 63 88 02 00 B3 44 96 01 93 9F 04 01 13 D6
-0F 01 B3 46 CD 00 13 FF 16 00 13 53 16 00 63 08
-0F 00 B3 4E 93 01 13 9E 0E 01 13 53 0E 01 33 CA
-6D 00 93 72 1A 00 13 56 13 00 63 88 02 00 B3 44
-96 01 93 9F 04 01 13 D6 0F 01 B3 C6 CA 00 13 FF
-16 00 13 53 16 00 63 08 0F 00 B3 4E 93 01 13 9E
-0E 01 13 53 0E 01 33 4A 6B 00 93 72 1A 00 13 56
-13 00 63 88 02 00 B3 44 96 01 93 9F 04 01 13 D6
-0F 01 B3 C6 CB 00 13 FF 16 00 13 53 16 00 63 08
-0F 00 B3 4E 93 01 13 9E 0E 01 13 53 0E 01 33 CA
-60 00 93 72 1A 00 13 56 13 00 63 88 02 00 B3 44
-96 01 93 9F 04 01 13 D6 0F 01 93 76 16 00 13 5E
-16 00 63 88 86 01 33 4F 9E 01 93 1E 0F 01 13 DE
-0E 01 33 43 C5 01 13 7A 13 00 93 5F 1E 00 63 08
-0A 00 B3 C2 9F 01 93 94 02 01 93 DF 04 01 33 46
-F9 01 93 76 16 00 13 DE 1F 00 99 C6 33 4F 9E 01
-93 1E 0F 01 13 DE 0E 01 33 C3 C3 01 13 7A 13 00
-93 5F 1E 00 63 08 0A 00 B3 C2 9F 01 93 94 02 01
-93 DF 04 01 33 C6 F7 01 93 76 16 00 13 DE 1F 00
-99 C6 33 4F 9E 01 93 1E 0F 01 13 DE 0E 01 33 C3
-C9 01 13 7A 13 00 93 5F 1E 00 63 08 0A 00 B3 C2
-9F 01 93 94 02 01 93 DF 04 01 33 C6 F8 01 93 76
-16 00 13 DE 1F 00 99 C6 33 4F 9E 01 93 1E 0F 01
-13 DE 0E 01 33 43 C8 01 13 7A 13 00 93 5F 1E 00
-63 08 0A 00 B3 C2 9F 01 93 94 02 01 93 DF 04 01
-13 F6 1F 00 93 D4 1F 00 63 08 86 00 B3 C6 94 01
-13 9F 06 01 93 54 0F 01 18 43 E3 16 07 E4 F2 50
-62 54 42 59 B2 59 22 5A 92 5A 02 5B F2 4B 62 4C
-D2 4C 42 4D B2 4D 26 85 D2 54 21 61 82 80 05 4A
-E3 09 04 DA 81 4C 81 4A 81 4B 93 75 7A 00 85 0B
-22 86 01 49 B1 C9 85 4D 63 83 B5 05 89 4F 63 8D
-F5 03 0D 47 63 87 E5 02 91 40 63 81 15 02 95 42
-63 8B 55 00 19 4F 63 85 E5 01 10 40 05 49 25 C6
-10 42 05 09 2D C2 10 42 05 09 31 CE 10 42 05 09
-39 CA 10 42 05 09 21 CA 10 42 05 09 29 C6 10 42
-05 09 31 C2 63 01 49 05 10 42 05 09 CA 83 05 CE
-10 42 05 09 0D CA 10 42 13 89 23 00 0D C6 10 42
-13 89 33 00 0D C2 10 42 13 89 43 00 09 CE 10 42
-13 89 53 00 09 CA 10 42 13 89 63 00 09 C6 10 42
-13 89 73 00 61 F2 A2 89 D2 8D 32 84 63 07 09 02
-63 80 0D 04 15 CC 4C 40 03 A5 49 00 6A 86 EF E0
-5F C8 63 57 A0 02 A2 87 00 40 FD 1D 63 8F 0C 00
-23 A0 FC 00 BE 8C E3 1D 09 FC 63 80 0D 02 19 CC
-A2 87 FD 1D 00 40 E3 95 0C FE BE 8A BE 8C E5 B7
-CE 87 7D 19 83 A9 09 00 D1 BF 01 F8 23 A0 0C 00
-05 44 63 89 8B 00 06 0A 56 84 DD BD 01 4C 2E 8B
-81 44 AD B8 56 84 AD B8 83 27 00 00 02 90 01 11
-26 CA 44 4D 22 CC 4A C8 4E C6 06 CE 69 79 23 2C
-05 02 23 2E 05 02 AA 89 01 44 05 09 63 8E 04 40
-85 45 4E 85 EF F0 0F F0 83 D7 89 03 13 77 F5 0F
-13 56 17 00 B3 C6 A7 00 93 F2 16 00 93 D3 17 00
-63 88 02 00 B3 C0 23 01 13 93 00 01 93 53 03 01
-B3 C5 C3 00 13 F8 15 00 93 58 27 00 13 DF 13 00
-63 08 08 00 33 4E 2F 01 93 1E 0E 01 13 DF 0E 01
-B3 4F 1F 01 93 F6 1F 00 93 52 37 00 93 50 1F 00
-99 C6 B3 C7 20 01 13 96 07 01 93 50 06 01 33 C3
-50 00 93 73 13 00 93 55 47 00 13 DE 10 00 63 88
-03 00 33 48 2E 01 93 18 08 01 13 DE 08 01 B3 4E
-BE 00 13 FF 1E 00 93 5F 57 00 93 57 1E 00 63 08
-0F 00 B3 C6 27 01 93 92 06 01 93 D7 02 01 33 C6
-F7 01 93 70 16 00 13 53 67 00 13 D8 17 00 63 88
-00 00 B3 43 28 01 93 95 03 01 13 D8 05 01 B3 48
-68 00 13 FE 18 00 1D 83 93 5F 18 00 63 08 0E 00
-B3 CE 2F 01 13 9F 0E 01 93 5F 0F 01 93 F6 1F 00
-13 D6 1F 00 63 88 E6 00 B3 42 26 01 93 97 02 01
-13 D6 07 01 21 81 B3 40 C5 00 13 73 F5 0F 93 F3
-10 00 93 55 13 00 13 5E 16 00 63 88 03 00 33 48
-2E 01 93 18 08 01 13 DE 08 01 33 47 BE 00 93 7E
-17 00 13 5F 23 00 93 52 1E 00 63 88 0E 00 B3 CF
-22 01 93 96 0F 01 93 D2 06 01 B3 C7 E2 01 13 F6
-17 00 13 55 33 00 93 D5 12 00 19 C6 B3 C0 25 01
-93 93 00 01 93 D5 03 01 33 C8 A5 00 93 78 18 00
-13 5E 43 00 13 DF 15 00 63 88 08 00 33 47 2F 01
-93 1E 07 01 13 DF 0E 01 B3 4F CF 01 93 F2 1F 00
-93 56 53 00 13 55 1F 00 63 88 02 00 B3 47 25 01
-13 96 07 01 13 55 06 01 B3 40 D5 00 93 F3 10 00
-93 55 63 00 13 5E 15 00 63 88 03 00 33 48 2E 01
-93 18 08 01 13 DE 08 01 33 47 BE 00 93 7E 17 00
-13 53 73 00 93 52 1E 00 63 88 0E 00 33 CF 22 01
-93 1F 0F 01 93 D2 0F 01 B3 C6 62 00 13 F6 16 00
-93 D0 12 00 19 C6 B3 C7 20 01 13 95 07 01 93 50
-05 01 FD 55 23 9C 19 02 4E 85 EF F0 AF CF 83 D3
-89 03 13 78 F5 0F 13 5E 18 00 B3 C5 A3 00 93 F8
-15 00 13 D3 13 00 63 88 08 00 33 47 23 01 93 1E
-07 01 13 D3 0E 01 33 4F C3 01 93 7F 1F 00 93 52
-28 00 93 57 13 00 63 88 0F 00 B3 C6 27 01 13 96
-06 01 93 57 06 01 B3 C0 57 00 93 F3 10 00 93 55
-38 00 13 D7 17 00 63 88 03 00 B3 48 27 01 13 9E
-08 01 13 57 0E 01 B3 4E B7 00 13 F3 1E 00 13 5F
-48 00 93 57 17 00 63 08 03 00 B3 CF 27 01 93 92
-0F 01 93 D7 02 01 B3 C6 E7 01 93 F0 16 00 13 56
-58 00 93 D8 17 00 63 88 00 00 B3 C3 28 01 93 95
-03 01 93 D8 05 01 33 CE C8 00 13 77 1E 00 93 5E
-68 00 93 DF 18 00 19 C7 33 C3 2F 01 13 1F 03 01
-93 5F 0F 01 B3 C2 DF 01 93 F6 12 00 13 58 78 00
-13 D6 1F 00 99 C6 B3 47 26 01 93 90 07 01 13 D6
-00 01 93 73 16 00 13 5E 16 00 63 88 03 01 B3 45
-2E 01 93 98 05 01 13 DE 08 01 21 81 33 47 C5 01
-93 7E F5 0F 13 73 17 00 13 DF 1E 00 13 58 1E 00
-63 08 03 00 B3 4F 28 01 93 92 0F 01 13 D8 02 01
-B3 46 E8 01 93 F0 16 00 13 D6 2E 00 93 55 18 00
-63 88 00 00 B3 C7 25 01 93 93 07 01 93 D5 03 01
-B3 C8 C5 00 13 FE 18 00 13 D5 3E 00 13 DF 15 00
-63 08 0E 00 33 47 2F 01 13 13 07 01 13 5F 03 01
-B3 4F AF 00 93 F2 1F 00 13 D8 4E 00 13 56 1F 00
-63 88 02 00 B3 46 26 01 93 90 06 01 13 D6 00 01
-B3 47 06 01 93 F3 17 00 93 D5 5E 00 13 55 16 00
-63 88 03 00 B3 48 25 01 13 9E 08 01 13 55 0E 01
-33 47 B5 00 13 73 17 00 13 DF 6E 00 13 58 15 00
-63 08 03 00 B3 4F 28 01 93 92 0F 01 13 D8 02 01
-B3 46 E8 01 93 F0 16 00 93 DE 7E 00 93 53 18 00
-63 88 00 00 33 C6 23 01 93 17 06 01 93 D3 07 01
-B3 C5 D3 01 93 F8 15 00 13 D7 13 00 63 88 08 00
-33 4E 27 01 13 15 0E 01 13 57 05 01 23 9C E9 02
-01 CC 05 04 E3 96 84 BE F2 40 62 44 D2 44 42 49
-B2 49 01 45 05 61 82 80 23 9D E9 02 05 44 E3 85
-84 FE 05 44 F1 B6 95 47 63 E5 A7 04 B7 02 04 F0
-0A 05 13 83 02 09 B3 03 65 00 83 A5 03 00 82 85
-37 06 04 F0 03 25 86 5C 82 80 B7 08 04 F0 03 A5
-08 5D 82 80 37 08 04 F0 03 25 C8 5C 82 80 37 07
-04 F0 03 25 07 0F 82 80 B7 06 04 F0 03 A5 C6 0E
-82 80 01 45 82 80 B3 46 B5 00 93 F2 16 00 13 57
-15 00 13 D6 15 00 63 8B 02 00 69 73 93 03 13 00
-B3 47 76 00 93 95 07 01 13 D6 05 01 33 48 E6 00
-93 78 18 00 13 5E 25 00 93 52 16 00 63 8B 08 00
-E9 7E 13 8F 1E 00 B3 CF E2 01 93 96 0F 01 93 D2
-06 01 33 C7 C2 01 13 73 17 00 93 53 35 00 93 D8
-12 00 63 0B 03 00 E9 75 13 86 15 00 B3 C7 C8 00
-13 98 07 01 93 58 08 01 33 CE 78 00 93 7E 1E 00
-13 5F 45 00 13 D3 18 00 63 8B 0E 00 E9 7F 93 86
-1F 00 B3 42 D3 00 13 97 02 01 13 53 07 01 B3 43
-E3 01 93 F5 13 00 13 56 55 00 93 5E 13 00 91 C9
-69 78 93 08 18 00 B3 C7 1E 01 13 9E 07 01 93 5E
-0E 01 33 CF CE 00 93 7F 1F 00 93 56 65 00 93 D5
-1E 00 63 8B 0F 00 E9 72 13 87 12 00 33 C3 E5 00
-93 13 03 01 93 D5 03 01 33 C6 D5 00 13 78 16 00
-93 58 75 00 13 DF 15 00 63 0B 08 00 E9 77 13 8E
-17 00 33 45 CF 01 93 1E 05 01 13 DF 0E 01 93 7F
-1F 00 13 55 1F 00 63 8B 1F 01 E9 76 93 82 16 00
-33 47 55 00 13 13 07 01 13 55 03 01 82 80 B3 C6
-A5 00 13 77 F5 0F 93 F2 16 00 AA 87 13 56 17 00
-13 D8 15 00 63 8B 02 00 E9 75 13 83 15 00 B3 43
-68 00 13 95 03 01 13 58 05 01 B3 48 C8 00 13 FE
-18 00 93 5E 27 00 93 55 18 00 63 0B 0E 00 69 7F
-93 0F 1F 00 B3 C6 F5 01 93 92 06 01 93 D5 02 01
-33 C6 D5 01 13 73 16 00 93 53 37 00 93 DE 15 00
-63 0B 03 00 69 78 93 08 18 00 33 C5 1E 01 13 1E
-05 01 93 5E 0E 01 33 CF 7E 00 93 7F 1F 00 93 56
-47 00 93 D3 1E 00 63 8B 0F 00 E9 72 93 85 12 00
-33 C6 B3 00 13 13 06 01 93 53 03 01 33 C8 D3 00
-93 78 18 00 13 5E 57 00 93 D2 13 00 63 8B 08 00
-E9 7E 13 8F 1E 00 33 C5 E2 01 93 1F 05 01 93 D2
-0F 01 B3 C6 C2 01 93 F5 16 00 13 53 67 00 13 DE
-12 00 91 C9 69 76 93 03 16 00 33 48 7E 00 93 18
-08 01 13 DE 08 01 B3 4E 6E 00 13 FF 1E 00 1D 83
-93 55 1E 00 63 0B 0F 00 E9 7F 93 82 1F 00 33 C5
-55 00 93 16 05 01 93 D5 06 01 13 F3 15 00 13 DE
-15 00 63 0B E3 00 69 76 93 03 16 00 33 48 7E 00
-93 18 08 01 13 DE 08 01 93 DE 87 00 33 CF CE 01
-93 7F 1F 00 13 D7 87 00 13 53 1E 00 A5 83 63 8B
-0F 00 E9 72 93 86 12 00 33 45 D3 00 93 15 05 01
-13 D3 05 01 33 C6 67 00 93 73 16 00 13 58 27 00
-93 5F 13 00 63 8B 03 00 E9 78 13 8E 18 00 B3 CE
-CF 01 13 9F 0E 01 93 5F 0F 01 B3 C7 0F 01 93 F2
-17 00 93 56 37 00 93 D3 1F 00 63 8B 02 00 E9 75
-13 83 15 00 33 C5 63 00 13 16 05 01 93 53 06 01
-33 C8 D3 00 93 78 18 00 13 5E 47 00 93 D2 13 00
-63 8B 08 00 E9 7E 13 8F 1E 00 B3 CF E2 01 93 97
-0F 01 93 D2 07 01 B3 C6 C2 01 93 F5 16 00 13 53
-57 00 93 D8 12 00 91 C9 69 76 93 03 16 00 33 C5
-78 00 13 18 05 01 93 58 08 01 33 CE 68 00 93 7E
-1E 00 13 5F 67 00 93 D5 18 00 63 8B 0E 00 E9 7F
-93 87 1F 00 B3 C2 F5 00 93 96 02 01 93 D5 06 01
-33 C3 E5 01 13 76 13 00 1D 83 13 DE 15 00 11 CA
-E9 73 13 88 13 00 33 45 0E 01 93 18 05 01 13 DE
-08 01 93 7E 1E 00 13 55 1E 00 63 8B EE 00 69 7F
-93 0F 1F 00 B3 47 F5 01 93 92 07 01 13 D5 02 01
-82 80 33 C6 A5 00 93 76 F5 0F 13 17 05 01 93 72
-16 00 AA 87 13 53 07 01 13 D8 16 00 13 DE 15 00
-63 8B 02 00 69 75 93 03 15 00 B3 45 7E 00 93 98
-05 01 13 DE 08 01 B3 4E 0E 01 13 FF 1E 00 93 DF
-26 00 13 55 1E 00 63 0B 0F 00 69 76 93 02 16 00
-33 47 55 00 13 18 07 01 13 55 08 01 B3 43 F5 01
-93 F8 13 00 93 D5 36 00 93 52 15 00 63 8B 08 00
-69 7E 93 0E 1E 00 33 CF D2 01 93 1F 0F 01 93 D2
-0F 01 33 C6 B2 00 13 77 16 00 13 D8 46 00 13 DE
-12 00 11 CB E9 73 93 88 13 00 33 45 1E 01 93 15
-05 01 13 DE 05 01 B3 4E 0E 01 13 FF 1E 00 93 DF
-56 00 93 53 1E 00 63 0B 0F 00 E9 72 13 86 12 00
-33 C7 C3 00 13 18 07 01 93 53 08 01 B3 C8 F3 01
-93 F5 18 00 13 DE 66 00 93 D2 13 00 91 C9 E9 7E
-13 8F 1E 00 33 C5 E2 01 93 1F 05 01 93 D2 0F 01
-33 C6 C2 01 13 77 16 00 9D 82 13 DE 12 00 11 CB
-69 78 93 03 18 00 B3 48 7E 00 93 95 08 01 13 DE
-05 01 93 7E 1E 00 13 58 1E 00 63 94 DE 38 13 56
-83 00 33 47 C8 00 93 73 17 00 93 56 83 00 13 5F
-18 00 13 53 93 00 63 8B 03 00 E9 78 93 85 18 00
-33 4E BF 00 93 1E 0E 01 13 DF 0E 01 B3 4F 6F 00
-93 F2 1F 00 13 D8 26 00 13 53 1F 00 63 8B 02 00
-69 76 13 07 16 00 33 45 E3 00 93 13 05 01 13 D3
-03 01 B3 48 03 01 93 F5 18 00 13 DE 36 00 13 58
-13 00 91 C9 E9 7E 13 8F 1E 00 B3 4F E8 01 93 92
-0F 01 13 D8 02 01 33 46 C8 01 93 73 16 00 13 D7
-46 00 13 5E 18 00 63 8B 03 00 69 73 93 08 13 00
-33 45 1E 01 93 15 05 01 13 DE 05 01 B3 4E EE 00
-13 FF 1E 00 93 DF 56 00 13 53 1E 00 63 0B 0F 00
-E9 72 13 88 12 00 33 46 03 01 93 13 06 01 13 D3
-03 01 33 47 F3 01 93 78 17 00 93 D5 66 00 93 5F
-13 00 63 8B 08 00 69 7E 93 0E 1E 00 33 C5 DF 01
-13 1F 05 01 93 5F 0F 01 B3 C2 BF 00 13 F8 12 00
-9D 82 93 D8 1F 00 63 0B 08 00 69 76 93 03 16 00
-33 C3 78 00 13 17 03 01 93 58 07 01 93 F5 18 00
-93 DF 18 00 63 8B D5 00 69 7E 93 0E 1E 00 33 C5
-DF 01 13 1F 05 01 93 5F 0F 01 93 D2 07 01 33 C8
-5F 00 93 F3 F2 0F 93 76 18 00 C1 83 13 D6 13 00
-13 DE 1F 00 91 CA 69 73 13 07 13 00 B3 48 EE 00
-93 95 08 01 13 DE 05 01 B3 4E CE 00 13 FF 1E 00
-93 DF 23 00 13 53 1E 00 63 0B 0F 00 E9 72 13 88
-12 00 33 45 03 01 93 16 05 01 13 D3 06 01 33 46
-F3 01 13 77 16 00 93 D8 33 00 93 5F 13 00 11 CB
-E9 75 13 8E 15 00 B3 CE CF 01 13 9F 0E 01 93 5F
-0F 01 B3 C2 1F 01 13 F8 12 00 93 D6 43 00 93 D8
-1F 00 63 0B 08 00 69 73 13 06 13 00 33 C5 C8 00
-13 17 05 01 93 58 07 01 B3 C5 D8 00 13 FE 15 00
-93 DE 53 00 13 D3 18 00 63 0B 0E 00 69 7F 93 0F
-1F 00 B3 42 F3 01 13 98 02 01 13 53 08 01 B3 46
-D3 01 13 F6 16 00 13 D7 63 00 93 5E 13 00 11 CA
-E9 78 93 85 18 00 33 C5 BE 00 13 1E 05 01 93 5E
-0E 01 33 CF EE 00 93 7F 1F 00 93 D3 73 00 13 D6
-1E 00 63 8B 0F 00 E9 72 13 88 12 00 33 43 06 01
-93 16 03 01 13 D6 06 01 13 77 16 00 93 5E 16 00
-63 17 77 12 13 DF 87 00 B3 4F DF 01 93 F3 1F 00
-93 D2 87 00 13 D7 1E 00 A5 83 63 8B 03 00 69 78
-13 03 18 00 B3 46 67 00 13 96 06 01 13 57 06 01
-B3 48 F7 00 93 F5 18 00 13 DE 22 00 93 53 17 00
-91 C9 E9 7E 13 8F 1E 00 33 C5 E3 01 93 1F 05 01
-93 D3 0F 01 B3 47 7E 00 13 F8 17 00 13 D3 32 00
-93 D5 13 00 63 0B 08 00 E9 76 13 86 16 00 33 C7
-C5 00 93 18 07 01 93 D5 08 01 33 4E B3 00 93 7E
-1E 00 13 DF 42 00 13 D8 15 00 63 8B 0E 00 E9 7F
-93 83 1F 00 33 45 78 00 93 17 05 01 13 D8 07 01
-33 43 0F 01 13 76 13 00 93 D6 52 00 93 5E 18 00
-11 CA 69 77 93 08 17 00 B3 C5 1E 01 13 9E 05 01
-93 5E 0E 01 33 CF D6 01 93 7F 1F 00 93 D3 62 00
-13 D6 1E 00 63 8B 0F 00 E9 77 13 88 17 00 33 45
-06 01 13 13 05 01 13 56 03 01 B3 C6 C3 00 93 F8
-16 00 93 D2 72 00 13 5F 16 00 63 8B 08 00 69 77
-93 05 17 00 33 4E BF 00 93 1E 0E 01 13 DF 0E 01
-93 7F 1F 00 13 55 1F 00 63 8A 5F 00 E9 73 93 87
-13 00 33 48 F5 00 13 15 08 01 41 81 82 80 E9 78
-93 85 18 00 33 C5 BE 00 13 1E 05 01 93 5E 0E 01
-D1 B5 69 7F 93 0F 1F 00 33 45 F8 01 93 12 05 01
-13 D8 02 01 AD B1 B3 C6 A5 00 13 77 F5 0F 93 17
-05 01 93 F2 16 00 13 D3 07 01 13 56 17 00 93 D8
-15 00 63 8B 02 00 E9 75 93 83 15 00 33 C5 78 00
-13 18 05 01 93 58 08 01 33 CE C8 00 93 7E 1E 00
-13 5F 27 00 93 D5 18 00 63 8B 0E 00 E9 7F 93 86
-1F 00 B3 C2 D5 00 93 97 02 01 93 D5 07 01 33 C6
-E5 01 93 73 16 00 13 58 37 00 13 DF 15 00 63 8B
-03 00 E9 78 13 8E 18 00 33 45 CF 01 93 1E 05 01
-13 DF 0E 01 B3 4F 0F 01 93 F2 1F 00 93 56 47 00
-13 58 1F 00 63 8B 02 00 E9 77 93 85 17 00 33 46
-B8 00 93 13 06 01 13 D8 03 01 B3 48 D8 00 13 FE
-18 00 93 5E 57 00 93 57 18 00 63 0B 0E 00 69 7F
-93 0F 1F 00 33 C5 F7 01 93 12 05 01 93 D7 02 01
-B3 C6 D7 01 93 F5 16 00 93 53 67 00 93 DE 17 00
-91 C9 69 76 13 08 16 00 B3 C8 0E 01 13 9E 08 01
-93 5E 0E 01 33 CF 7E 00 93 7F 1F 00 1D 83 93 D5
-1E 00 63 8B 0F 00 E9 72 93 87 12 00 33 C5 F5 00
-93 16 05 01 93 D5 06 01 93 F3 15 00 93 DE 15 00
-63 8B E3 00 69 76 13 08 16 00 B3 C8 0E 01 13 9E
-08 01 93 5E 0E 01 13 5F 83 00 B3 4F DF 01 93 F2
-1F 00 13 57 83 00 93 D3 1E 00 13 53 93 00 63 8B
-02 00 E9 77 93 86 17 00 33 C5 D3 00 93 15 05 01
-93 D3 05 01 33 46 73 00 13 78 16 00 93 58 27 00
-93 D2 13 00 63 0B 08 00 69 7E 93 0E 1E 00 33 CF
-D2 01 93 1F 0F 01 93 D2 0F 01 33 C3 12 01 93 77
-13 00 93 56 37 00 13 D8 12 00 91 CB E9 75 93 83
-15 00 33 45 78 00 13 16 05 01 13 58 06 01 B3 48
-D8 00 13 FE 18 00 93 5E 47 00 93 55 18 00 63 0B
-0E 00 69 7F 93 0F 1F 00 B3 C2 F5 01 13 93 02 01
-93 55 03 01 B3 C7 D5 01 93 F3 17 00 93 56 57 00
-13 DE 15 00 63 8B 03 00 69 76 13 08 16 00 33 45
-0E 01 93 18 05 01 13 DE 08 01 B3 4E DE 00 13 FF
-1E 00 93 5F 67 00 93 53 1E 00 63 0B 0F 00 E9 72
-13 83 12 00 B3 C5 63 00 93 97 05 01 93 D3 07 01
-B3 C6 F3 01 13 F6 16 00 1D 83 93 DE 13 00 11 CA
-69 78 93 08 18 00 33 C5 1E 01 13 1E 05 01 93 5E
-0E 01 13 FF 1E 00 13 D5 1E 00 63 0B EF 00 E9 7F
-93 82 1F 00 33 43 55 00 93 15 03 01 13 D5 05 01
-82 80 01 45 82 80 73 27 00 B0 B7 07 04 F0 23 A2
-E7 5C 82 80 73 27 00 B0 B7 07 04 F0 23 A0 E7 5C
-82 80 B7 07 04 F0 B7 02 04 F0 03 A5 07 5C 03 A3
-42 5C 33 05 65 40 82 80 93 07 80 3E 33 55 F5 02
-82 80 85 47 23 00 F5 00 82 80 23 00 05 00 82 80
-AA 82 2A 96 63 56 C5 00 23 00 B5 00 05 05 DD BF
-16 85 82 80 82 80 75 71 06 C7 B7 07 04 F0 B7 00
-04 F0 B7 02 04 F0 03 A6 07 5D 83 A5 C0 5C 03 A3
-02 0F 37 07 04 F0 83 26 C7 0E B7 03 04 F0 22 C5
-26 C3 13 14 06 01 93 14 03 01 83 A8 83 5C 13 56
-04 41 13 D8 04 41 05 45 4A C1 CE DE D2 DC D6 DA
-DA D8 DE D6 E2 D4 E6 D2 EA D0 EE CE 23 07 A1 04
-23 16 C1 00 23 17 B1 00 23 18 01 01 36 D4 63 93
-08 00 9D 48 32 49 46 D6 E3 1B 09 3C E3 0F 08 42
-B2 59 B7 0C 04 F0 13 8D 4C 5D 13 F7 29 00 93 FD
-19 00 33 3E E0 00 6A CA 23 16 01 04 93 FE 49 00
-6E 8F B3 85 CD 01 63 88 0E 00 93 8F 15 00 93 90
-0F 01 93 D5 00 01 93 02 00 7D 33 D5 B2 02 01 44
-2A D2 E3 10 0F 3E E3 10 07 3C E3 95 0E 3A 63 10
-0F 1C 63 17 07 1C 13 F5 49 00 19 C5 02 56 83 15
-C1 00 12 55 EF C0 6F FC 22 5A 63 0F 0A 6C 37 0C
-04 F0 B7 0C 04 F0 13 0D C1 00 F3 23 00 B0 23 22
-7C 5C 6A 85 EF E0 BF F6 73 2D 00 B0 03 55 C1 00
-81 45 23 A0 AC 5D EF F0 8F D2 AA 85 03 55 E1 00
-03 2C 4C 5C EF F0 AF D1 AA 85 03 55 01 01 B3 0A
-8D 41 EF F0 CF D0 92 54 AA 85 93 9C 04 01 13 D5
-0C 01 EF F0 CF CF 21 68 93 06 58 B0 AA 89 E3 06
-D5 3A 63 E6 A6 16 89 6D 93 82 2D 8F E3 01 55 3C
-15 6D 93 00 FD EA E3 12 15 3E B7 0C 04 F0 13 85
-0C 15 EF 90 4F 86 93 0B 8D 60 39 68 9D 66 13 0A
-48 5A 5E 8C 13 8B 96 A7 B7 0C 04 F0 83 A8 8C 0E
-01 49 01 4D E3 87 08 3A B7 0D 04 F0 89 A8 03 D6
-A4 FF 63 03 46 0F 37 07 04 F0 D2 86 EA 85 13 05
-47 24 EF 90 4F 82 83 D7 C4 FF 13 8E 17 00 93 1E
-0E 01 93 DF 0E 01 23 9E F4 FF 05 0D 83 A2 8C 0E
-7E 99 93 15 0D 01 13 1F 09 01 13 13 09 01 13 DD
-05 01 13 54 0F 01 13 59 03 41 63 74 5D 10 13 14
-4D 00 33 06 A4 01 13 15 26 00 98 08 B3 04 A7 00
-83 A7 C4 FD 23 9E 04 FE 13 FE 17 00 63 02 0E 02
-03 D6 64 FF 63 0E 66 01 DA 86 EA 85 13 85 0D 1E
-EF 80 7F FB 83 DE C4 FF 93 8F 1E 00 23 9E F4 FF
-B3 05 A4 01 93 92 25 00 13 0F 01 05 B3 04 5F 00
-83 A8 C4 FD 13 F3 28 00 63 06 03 02 03 D6 84 FF
-63 02 86 03 B7 03 04 F0 DE 86 EA 85 13 85 03 21
-EF 80 7F F7 03 D8 C4 FF 83 A8 C4 FD 93 06 18 00
-23 9E D4 FE 6A 94 13 16 24 00 88 08 93 F0 48 00
-B3 04 C5 00 E3 9D 00 F0 83 DF C4 FF 3D BF E2 45
-EF 80 3F FF B2 59 2A D8 13 F7 29 00 E3 0D 07 E2
-83 17 E1 00 03 16 C1 00 F2 45 12 55 13 99 07 01
-54 18 33 66 C9 00 EF B0 8F DB B2 59 29 BD 25 6A
-13 07 2A A0 E3 09 E5 20 BD 6B 13 84 5B 9F E3 1E
-85 26 B7 05 04 F0 89 64 13 85 45 18 93 8B 74 FD
-39 6B EF 80 5F EF 13 0A AA E3 5E 8C 13 0B 4B 71
-61 BD 92 54 B7 0B 04 F0 A6 85 13 85 4B 27 EF 80
-9F ED 37 0C 04 F0 D6 85 13 05 CC 28 13 0B 80 3E
-EF 80 7F EC B3 DD 6A 03 B7 03 04 F0 13 85 43 2A
-EE 85 EF 80 5F EB 13 08 70 3E 63 6F 58 45 B7 0A
-04 F0 05 04 13 85 CA 2B 13 1D 04 01 EF 80 BF E9
-13 59 0D 41 03 AF 8C 0E 22 53 B7 05 04 F0 13 85
-85 31 B3 05 E3 03 37 0A 04 F0 B7 0B 04 F0 37 0C
-04 F0 37 0B 04 F0 B7 0D 04 F0 EF 80 DF E6 93 05
-0A 33 13 85 CB 33 EF 80 1F E6 93 05 4C 35 13 05
-0B 37 EF 80 5F E5 B7 03 04 F0 93 85 8D 38 13 85
-03 39 EF 80 5F E4 CE 85 B7 09 04 F0 13 85 89 3A
-EF 80 7F E3 32 5A 13 78 1A 00 63 05 08 0E 83 A8
-8C 0E 63 81 08 0E 01 4D B7 04 04 F0 93 16 4D 00
-B3 80 A6 01 13 96 20 00 98 08 B3 07 C7 00 03 D6
-67 FF EA 85 13 85 44 3C EF 80 FF DF 93 0E 1D 00
-93 9F 0E 01 93 DA 0F 01 93 92 4A 00 03 AE 8C 0E
-33 84 52 01 13 1D 24 00 13 0F 01 05 13 85 44 3C
-33 03 AF 01 D6 85 63 F6 CA 09 03 56 63 FF 93 09
-01 05 EF 80 5F DC 93 85 1A 00 93 9B 05 01 13 DC
-0B 01 13 1B 4C 00 03 AA 8C 0E B3 0D 8B 01 93 93
-2D 00 13 85 44 3C 33 88 79 00 E2 85 63 7B 4C 05
-03 56 68 FF EF 80 3F D9 93 06 1C 00 13 96 06 01
-93 5A 06 01 13 97 4A 00 83 A8 8C 0E B3 07 57 01
-13 9E 27 00 93 0E 01 05 13 85 44 3C B3 8F CE 01
-D6 85 63 F0 1A 03 03 D6 6F FF EF 80 DF D5 93 82
-1A 00 03 A5 8C 0E 13 94 02 01 13 5D 04 01 E3 67
-AD F2 32 5A 93 74 2A 00 FD C0 83 A0 8C 0E 63 8F
-00 1E 01 44 37 0A 04 F0 13 13 44 00 B3 05 83 00
-93 9B 25 00 13 0C 01 05 33 0B 7C 01 03 56 8B FF
-A2 85 13 05 0A 3E EF 80 1F D1 93 03 14 00 93 99
-03 01 93 DA 09 01 13 98 4A 00 83 AD 8C 0E B3 08
-58 01 93 96 28 00 90 08 13 05 0A 3E 33 07 D6 00
-D6 85 63 F5 BA 09 03 56 87 FF 84 08 EF 80 BF CD
-93 87 1A 00 93 9E 07 01 13 D4 0E 01 93 1F 44 00
-03 AE 8C 0E B3 82 8F 00 13 9D 22 00 13 05 0A 3E
-33 8F A4 01 A2 85 63 7B C4 05 03 56 8F FF 93 09
-01 05 EF 80 5F CA 93 05 14 00 93 9B 05 01 13 DC
-0B 01 13 1B 4C 00 03 A3 8C 0E B3 0D 8B 01 93 93
-2D 00 13 05 0A 3E B3 8A 79 00 E2 85 63 70 6C 02
-03 D6 8A FF EF 80 3F C7 13 08 1C 00 03 A5 8C 0E
-93 18 08 01 13 D4 08 01 E3 68 A4 F2 32 5A 93 70
-4A 00 63 91 00 12 83 A0 8C 0E 81 44 37 0D 04 F0
-63 8D 00 0C 93 95 44 00 33 8B 95 00 93 03 01 05
-93 1D 2B 00 B3 89 B3 01 03 D6 49 FF A6 85 13 05
-8D 41 EF 80 5F C2 13 88 14 00 93 18 08 01 13 D4
-08 01 13 1A 44 00 83 AA 8C 0E B3 06 8A 00 13 96
-26 00 98 08 13 05 8D 41 33 0E C7 00 A2 85 63 76
-54 09 03 56 4E FF EF 80 1F BF 93 07 14 00 93 9E
-07 01 93 DB 0E 01 93 9F 4B 00 83 A4 8C 0E B3 82
-7F 01 13 9F 22 00 13 03 01 05 13 05 8D 41 33 0C
-E3 01 DE 85 63 FB 9B 04 03 56 4C FF EF 80 BF BB
-93 85 1B 00 93 9D 05 01 93 D9 0D 01 93 93 49 00
-03 AB 8C 0E B3 8A 33 01 13 98 2A 00 93 08 01 05
-13 05 8D 41 33 84 08 01 CE 85 63 F0 69 03 03 56
-44 FF 13 8A 19 00 EF 80 1F B8 03 A5 8C 0E 93 16
-0A 01 93 D4 06 01 E3 E7 A4 F2 63 0F 09 64 63 5F
-20 63 37 09 04 F0 13 05 09 48 EF 80 DF B5 BA 40
-2A 44 9A 44 0A 49 F6 59 66 5A D6 5A 46 5B B6 5B
-26 5C 96 5C 06 5D F6 4D 49 61 82 80 13 7F 4A 00
-E3 05 0F FC 83 A6 8C 0E E9 D2 01 4C 37 0D 04 F0
-13 16 4C 00 33 07 86 01 13 1E 27 00 9C 08 B3 8E
-C7 01 03 D6 AE FF E2 85 13 05 CD 3F EF 80 BF B0
-93 02 1C 00 93 94 02 01 93 DB 04 01 13 9F 4B 00
-83 AF 8C 0E 33 03 7F 01 93 15 23 00 13 0C 01 05
-33 0B BC 00 13 05 CD 3F DE 85 E3 F6 FB E9 03 56
-AB FF 13 0A 01 05 EF 80 1F AD 93 83 1B 00 93 99
-03 01 93 DA 09 01 13 98 4A 00 83 AD 8C 0E B3 08
-58 01 13 94 28 00 13 05 CD 3F B3 06 8A 00 D6 85
-E3 FB BA E5 03 D6 A6 FF EF 80 FF A9 13 87 1A 00
-13 1E 07 01 93 54 0E 01 93 97 44 00 03 A6 8C 0E
-B3 8E 97 00 93 9F 2E 00 93 02 01 05 13 05 CD 3F
-B3 8B F2 01 A6 85 E3 F0 C4 E2 03 D6 AB FF EF 80
-9F A6 13 8F 14 00 03 A5 8C 0E 13 13 0F 01 13 5C
-03 01 E3 67 AC F2 01 B5 83 A8 8C 0E A2 56 E1 64
-13 87 04 6A B3 80 16 03 37 06 04 F0 93 0F 40 06
-13 05 C6 2F B3 87 E0 02 33 DE B7 03 B3 8E 60 03
-33 76 FE 03 B3 D5 BE 03 EF 80 FF A1 09 65 93 02
-F5 70 E3 E1 52 B9 A5 B6 E9 7A 05 44 37 0C 04 F0
-B7 0C 04 F0 13 0D C1 00 13 8B 1A 00 93 0D 70 3E
-93 1B 24 00 33 8E 8B 00 13 14 1E 00 22 D4 F3 24
-00 B0 23 22 9C 5C 82 C2 82 C4 81 4B 63 0F 04 40
-85 45 6A 85 EF D0 1F F9 83 5E 41 04 13 7F F5 0F
-93 52 1F 00 B3 CF AE 00 93 F5 1F 00 93 D3 1E 00
-99 C5 B3 C0 63 01 13 93 00 01 93 53 03 01 B3 C6
-53 00 13 F8 16 00 93 58 2F 00 13 D9 13 00 63 08
-08 00 33 47 69 01 93 17 07 01 13 D9 07 01 33 46
-19 01 93 79 16 00 13 5A 3F 00 93 5E 19 00 63 88
-09 00 B3 CA 6E 01 13 9E 0A 01 93 5E 0E 01 B3 CF
-4E 01 93 F5 1F 00 93 52 4F 00 93 D3 1E 00 99 C5
-B3 C0 63 01 13 93 00 01 93 53 03 01 B3 C6 53 00
-13 F8 16 00 93 58 5F 00 13 D9 13 00 63 08 08 00
-33 47 69 01 93 17 07 01 13 D9 07 01 33 46 19 01
-93 79 16 00 13 5A 6F 00 93 5E 19 00 63 88 09 00
-B3 CA 6E 01 13 9E 0A 01 93 5E 0E 01 B3 CF 4E 01
-93 F5 1F 00 13 5F 7F 00 13 D3 1E 00 99 C5 B3 42
-63 01 93 90 02 01 13 D3 00 01 93 73 13 00 93 58
-13 00 63 88 E3 01 B3 C6 68 01 13 98 06 01 93 58
-08 01 21 81 33 47 15 01 13 79 F5 0F 13 76 17 00
-93 59 19 00 93 DA 18 00 19 C6 B3 C7 6A 01 13 9A
-07 01 93 5A 0A 01 33 CE 3A 01 93 7E 1E 00 93 5F
-29 00 93 D2 1A 00 63 88 0E 00 B3 C5 62 01 13 9F
-05 01 93 52 0F 01 B3 C0 F2 01 13 F3 10 00 93 53
-39 00 93 D8 12 00 63 08 03 00 B3 C6 68 01 13 98
-06 01 93 58 08 01 33 C5 78 00 13 76 15 00 13 57
-49 00 13 DA 18 00 19 C6 B3 49 6A 01 93 97 09 01
-13 DA 07 01 B3 4A EA 00 13 FE 1A 00 93 5E 59 00
-13 5F 1A 00 63 08 0E 00 B3 4F 6F 01 93 95 0F 01
-13 DF 05 01 B3 42 DF 01 93 F0 12 00 13 53 69 00
-13 58 1F 00 63 88 00 00 B3 43 68 01 93 96 03 01
-13 D8 06 01 B3 48 68 00 13 F6 18 00 13 59 79 00
-93 59 18 00 19 C6 33 C5 69 01 13 17 05 01 93 59
-07 01 B3 C7 29 01 13 FA 17 00 93 DE 19 00 63 08
-0A 00 B3 CA 6E 01 13 9E 0A 01 93 5E 0E 01 FD 55
-6A 85 23 12 D1 05 EF D0 FF D8 83 5F 41 04 13 7F
-F5 0F 13 53 1F 00 B3 C5 AF 00 93 F2 15 00 13 D8
-1F 00 63 88 02 00 B3 40 68 01 93 93 00 01 13 D8
-03 01 B3 46 68 00 93 F8 16 00 13 56 2F 00 93 59
-18 00 63 88 08 00 33 C9 69 01 13 17 09 01 93 59
-07 01 B3 C7 C9 00 13 FA 17 00 93 5A 3F 00 93 DF
-19 00 63 08 0A 00 33 CE 6F 01 93 1E 0E 01 93 DF
-0E 01 B3 C5 5F 01 93 F2 15 00 13 53 4F 00 13 D8
-1F 00 63 88 02 00 B3 40 68 01 93 93 00 01 13 D8
-03 01 B3 46 68 00 93 F8 16 00 13 56 5F 00 93 59
-18 00 63 88 08 00 33 C9 69 01 13 17 09 01 93 59
-07 01 B3 C7 C9 00 13 FA 17 00 93 5A 6F 00 93 DF
-19 00 63 08 0A 00 33 CE 6F 01 93 1E 0E 01 93 DF
-0E 01 B3 C5 5F 01 93 F2 15 00 13 5F 7F 00 93 D3
-1F 00 63 88 02 00 33 C3 63 01 93 10 03 01 93 D3
-00 01 13 F8 13 00 13 D6 13 00 63 08 E8 01 B3 46
-66 01 93 98 06 01 13 D6 08 01 21 81 33 49 C5 00
-93 79 F5 0F 13 77 19 00 13 DA 19 00 13 5E 16 00
-19 C7 B3 47 6E 01 93 9A 07 01 13 DE 0A 01 B3 4E
-4E 01 93 FF 1E 00 93 D5 29 00 13 53 1E 00 63 88
-0F 00 B3 42 63 01 13 9F 02 01 13 53 0F 01 B3 40
-B3 00 93 F3 10 00 13 D8 39 00 13 56 13 00 63 88
-03 00 B3 46 66 01 93 98 06 01 13 D6 08 01 33 45
-06 01 13 79 15 00 13 D7 49 00 93 5A 16 00 63 08
-09 00 33 CA 6A 01 93 17 0A 01 93 DA 07 01 33 CE
-EA 00 93 7E 1E 00 93 DF 59 00 13 DF 1A 00 63 88
-0E 00 B3 45 6F 01 93 92 05 01 13 DF 02 01 33 43
-FF 01 93 70 13 00 93 D3 69 00 93 58 1F 00 63 88
-00 00 33 C8 68 01 93 16 08 01 93 D8 06 01 33 C6
-78 00 13 79 16 00 93 D9 79 00 13 DA 18 00 63 08
-09 00 33 45 6A 01 13 17 05 01 13 5A 07 01 B3 47
-3A 01 93 FA 17 00 93 5F 1A 00 63 88 0A 00 33 CE
-6F 01 93 1E 0E 01 93 DF 0E 01 23 12 F1 05 63 8C
-0B 02 85 0B E3 16 74 BF 22 54 F3 25 00 B0 23 A0
-BC 5C B3 84 95 40 E3 FD 9D BA 13 0B 80 3E B3 DD
-64 03 A9 42 33 DF B2 03 13 03 1F 00 B3 00 64 02
-06 D4 6F F0 8F CB 23 13 F1 05 85 4B 55 BE 85 49
-63 18 39 C3 63 16 08 C2 37 3A 15 34 93 0A 5A 41
-13 0B 60 06 8D 6B 56 C6 23 18 61 01 13 86 5B 41
-6F F0 0F C1 33 08 A4 02 B3 08 0D 01 46 D0 63 0A
-0F C4 6F F0 CF E0 33 03 A4 02 93 06 14 00 93 93
-06 01 13 D4 03 01 B3 04 6D 00 26 CE 63 89 0E C2
-D1 BF 6A CC 05 44 63 02 07 C2 F1 BF B7 0C 04 F0
-13 85 4C 49 EF 80 2F D2 D9 B2 13 0C 60 06 23 18
-81 01 01 46 6F F0 CF BB B7 00 04 F0 13 85 40 43
-EF 80 6F D0 6D B2 B7 07 04 F0 13 85 47 0F EF 80
-8F CF 31 6E 93 0B 2E E5 99 6E B5 6F 13 8A 7E E4
-5E 8C 13 8B 0F 4B 6F F0 2F C9 B7 08 04 F0 13 85
-48 12 EF 80 4F CD 05 66 93 0B 96 19 11 69 0D 65
-13 0A F9 9B 5E 8C 13 0B 05 34 6F F0 EF C6 37 0F
-04 F0 13 05 4F 1B EF 80 0F CB 25 63 B9 63 13 0A
-43 D8 93 0B 70 74 13 0C 70 74 13 8B 13 3C 6F F0
-AF C4 92 54 01 44 6F F0 EF DA 41 6A 13 04 FA FF
-7D 59 B7 0C 04 F0 6F F0 EF D9
-@F0040000
-C4 02 00 00 A0 00 00 00 A0 00 00 00 A0 00 00 00
-A0 00 00 00 A0 00 00 00 A0 00 00 00 A0 00 00 00
-A0 00 00 00 A0 00 00 00 A0 00 00 00 BE 03 00 00
-88 08 00 00 A0 00 00 00 A0 00 00 00 A0 00 00 00
-A0 00 00 00 A0 00 00 00 A0 00 00 00 A0 00 00 00
-A0 00 00 00 A0 00 00 00 A0 00 00 00 A8 06 00 00
-A0 00 00 00 A0 00 00 00 A0 00 00 00 38 06 00 00
-A0 00 00 00 CC 03 00 00 A0 00 00 00 A0 00 00 00
-C4 02 00 00 A8 05 04 F0 B0 05 04 F0 B8 05 04 F0
-42 6E 00 00 1A 6E 00 00 24 6E 00 00 2E 6E 00 00
-38 6E 00 00 10 6E 00 00 88 05 04 F0 90 05 04 F0
-98 05 04 F0 A0 05 04 F0 58 05 04 F0 64 05 04 F0
-70 05 04 F0 7C 05 04 F0 28 05 04 F0 34 05 04 F0
-40 05 04 F0 4C 05 04 F0 F8 04 04 F0 04 05 04 F0
-10 05 04 F0 1C 05 04 F0 01 00 00 00 01 00 00 00
-66 00 00 00 36 6B 20 70 65 72 66 6F 72 6D 61 6E
-63 65 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 36 6B 20 76 61 6C 69 64 61 74 69 6F
-6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72 73
-20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A 00
-50 72 6F 66 69 6C 65 20 67 65 6E 65 72 61 74 69
-6F 6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 32 4B 20 70 65 72 66 6F 72 6D 61 6E
-63 65 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 32 4B 20 76 61 6C 69 64 61 74 69 6F
-6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72 73
-20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A 00
-5B 25 75 5D 45 52 52 4F 52 21 20 6C 69 73 74 20
-63 72 63 20 30 78 25 30 34 78 20 2D 20 73 68 6F
-75 6C 64 20 62 65 20 30 78 25 30 34 78 0A 00 00
-5B 25 75 5D 45 52 52 4F 52 21 20 6D 61 74 72 69
-78 20 63 72 63 20 30 78 25 30 34 78 20 2D 20 73
-68 6F 75 6C 64 20 62 65 20 30 78 25 30 34 78 0A
-00 00 00 00 5B 25 75 5D 45 52 52 4F 52 21 20 73
-74 61 74 65 20 63 72 63 20 30 78 25 30 34 78 20
-2D 20 73 68 6F 75 6C 64 20 62 65 20 30 78 25 30
-34 78 0A 00 43 6F 72 65 4D 61 72 6B 20 53 69 7A
-65 20 20 20 20 3A 20 25 75 0A 00 00 54 6F 74 61
-6C 20 74 69 63 6B 73 20 20 20 20 20 20 3A 20 25
-75 0A 00 00 54 6F 74 61 6C 20 74 69 6D 65 20 28
-73 65 63 73 29 3A 20 25 64 0A 00 00 45 52 52 4F
-52 21 20 4D 75 73 74 20 65 78 65 63 75 74 65 20
-66 6F 72 20 61 74 20 6C 65 61 73 74 20 31 30 20
-73 65 63 73 20 66 6F 72 20 61 20 76 61 6C 69 64
-20 72 65 73 75 6C 74 21 0A 00 00 00 49 74 65 72
-61 74 2F 53 65 63 2F 4D 48 7A 20 20 20 3A 20 25
-64 2E 25 30 32 64 0A 00 49 74 65 72 61 74 69 6F
-6E 73 20 20 20 20 20 20 20 3A 20 25 75 0A 00 00
-47 43 43 39 2E 32 2E 30 00 00 00 00 43 6F 6D 70
-69 6C 65 72 20 76 65 72 73 69 6F 6E 20 3A 20 25
-73 0A 00 00 2D 67 20 2D 4F 33 20 2D 66 75 6E 72
-6F 6C 6C 2D 61 6C 6C 2D 6C 6F 6F 70 73 00 00 00
-43 6F 6D 70 69 6C 65 72 20 66 6C 61 67 73 20 20
-20 3A 20 25 73 0A 00 00 53 54 41 54 49 43 00 00
-4D 65 6D 6F 72 79 20 6C 6F 63 61 74 69 6F 6E 20
-20 3A 20 25 73 0A 00 00 73 65 65 64 63 72 63 20
-20 20 20 20 20 20 20 20 20 3A 20 30 78 25 30 34
-78 0A 00 00 5B 25 64 5D 63 72 63 6C 69 73 74 20
-20 20 20 20 20 20 3A 20 30 78 25 30 34 78 0A 00
-5B 25 64 5D 63 72 63 6D 61 74 72 69 78 20 20 20
-20 20 3A 20 30 78 25 30 34 78 0A 00 5B 25 64 5D
-63 72 63 73 74 61 74 65 20 20 20 20 20 20 3A 20
-30 78 25 30 34 78 0A 00 5B 25 64 5D 63 72 63 66
-69 6E 61 6C 20 20 20 20 20 20 3A 20 30 78 25 30
-34 78 0A 00 43 6F 72 72 65 63 74 20 6F 70 65 72
-61 74 69 6F 6E 20 76 61 6C 69 64 61 74 65 64 2E
-20 53 65 65 20 72 65 61 64 6D 65 2E 74 78 74 20
-66 6F 72 20 72 75 6E 20 61 6E 64 20 72 65 70 6F
-72 74 69 6E 67 20 72 75 6C 65 73 2E 0A 00 00 00
-45 72 72 6F 72 73 20 64 65 74 65 63 74 65 64 0A
-00 00 00 00 43 61 6E 6E 6F 74 20 76 61 6C 69 64
-61 74 65 20 6F 70 65 72 61 74 69 6F 6E 20 66 6F
-72 20 74 68 65 73 65 20 73 65 65 64 20 76 61 6C
-75 65 73 2C 20 70 6C 65 61 73 65 20 63 6F 6D 70
-61 72 65 20 77 69 74 68 20 72 65 73 75 6C 74 73
-20 6F 6E 20 61 20 6B 6E 6F 77 6E 20 70 6C 61 74
-66 6F 72 6D 2E 0A 00 00 54 30 2E 33 65 2D 31 46
-00 00 00 00 2D 54 2E 54 2B 2B 54 71 00 00 00 00
-31 54 33 2E 34 65 34 7A 00 00 00 00 33 34 2E 30
-65 2D 54 5E 00 00 00 00 35 2E 35 30 30 65 2B 33
-00 00 00 00 2D 2E 31 32 33 65 2D 32 00 00 00 00
-2D 38 37 65 2B 38 33 32 00 00 00 00 2B 30 2E 36
-65 2D 31 32 00 00 00 00 33 35 2E 35 34 34 30 30
-00 00 00 00 2E 31 32 33 34 35 30 30 00 00 00 00
-2D 31 31 30 2E 37 30 30 00 00 00 00 2B 30 2E 36
-34 34 30 30 00 00 00 00 35 30 31 32 00 00 00 00
-31 32 33 34 00 00 00 00 2D 38 37 34 00 00 00 00
-2B 31 32 32 00 00 00 00 53 74 61 74 69 63 00 00
-48 65 61 70 00 00 00 00 53 74 61 63 6B 00 00 00
-00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
-00 00 00 00
-@FFFFFFF8
-00 00 04 F0 E0 15 04 F0
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/cmark_iccm.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/cmark_iccm.hex
deleted file mode 100755
index a4e7257..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/cmark_iccm.hex
+++ /dev/null
@@ -1,2254 +0,0 @@
-@80000000
-B7 52 55 5F 93 82 52 55 73 90 02 7C 17 81 04 70
-13 01 41 5B 97 80 00 6E E7 80 A0 8D 97 05 00 6E
-93 85 45 FE 05 45 88 C1 B7 02 58 D0 13 03 F0 0F
-23 80 62 00 E3 0A 00 FE 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00
-@EE000000
-00 00 00 00 03 47 05 00 E3 09 07 2A 39 71 B7 02
-04 F0 22 DE 26 DC 2A 86 4A DA 4E D8 52 D6 56 D4
-5A D2 5E D0 01 45 13 0E 50 02 37 08 58 D0 93 08
-00 03 93 03 D0 02 93 04 A0 02 13 04 00 02 93 82
-02 00 93 0F B1 00 25 4F A9 4E 19 A8 BE 86 23 00
-E8 00 B2 87 05 05 36 86 03 C7 17 00 63 06 07 20
-93 07 16 00 E3 14 C7 FF 03 43 16 00 63 0E 03 1E
-09 06 63 05 C3 1F E3 15 13 23 03 C7 17 00 3E 86
-85 07 BE 86 63 12 17 07 03 C7 17 00 3E 86 85 07
-63 1C 17 05 03 C7 26 00 3E 86 93 87 26 00 63 15
-17 05 03 C7 36 00 3E 86 93 87 36 00 63 1E 17 03
-03 C7 46 00 3E 86 93 87 46 00 63 17 17 03 03 C7
-56 00 3E 86 93 87 56 00 63 10 17 03 03 C7 66 00
-3E 86 93 87 66 00 63 19 17 01 03 C7 76 00 3E 86
-93 87 76 00 E3 0B 17 F9 09 06 63 08 77 02 63 0C
-97 02 93 09 07 FD 13 F9 F9 0F 81 46 63 73 2F 0B
-13 07 87 FA 13 79 F7 0F E3 68 24 F5 13 1A 29 00
-B3 0B 5A 00 83 A9 0B 00 82 89 03 C7 17 00 B2 87
-05 06 E3 18 97 FC 03 C7 17 00 91 05 B2 87 81 46
-05 06 F9 B7 03 47 59 00 13 9B 26 00 B3 0A DB 00
-93 0B 07 FD 93 96 1A 00 93 F9 FB 0F 3E 86 D2 96
-93 07 59 00 63 62 3F 11 03 47 69 00 13 96 26 00
-33 0B D6 00 13 0A 07 FD 93 16 1B 00 93 7A FA 0F
-3E 86 DE 96 93 07 69 00 63 60 5F 0F 03 47 79 00
-93 9B 26 00 33 86 DB 00 93 09 07 FD 13 1B 16 00
-93 FA F9 0F 3E 86 B3 06 6A 01 93 07 79 00 63 6D
-5F 0B 03 C7 17 00 13 9A 26 00 B3 0A DA 00 13 0B
-07 FD 3E 86 93 9B 1A 00 85 07 13 7A FB 0F 3E 89
-B3 86 79 01 63 6A 4F 09 03 C7 17 00 93 99 26 00
-CE 96 93 0B 07 FD 13 9A 16 00 93 FA FB 0F 3E 86
-B3 06 4B 01 85 07 63 69 5F 07 03 47 29 00 13 96
-26 00 33 0B D6 00 13 0A 07 FD 93 19 1B 00 93 7A
-FA 0F 3E 86 B3 86 3B 01 93 07 29 00 63 66 5F 05
-03 47 39 00 93 9B 26 00 DE 96 13 0B 07 FD 93 99
-16 00 93 7A FB 0F 3E 86 B3 06 3A 01 93 07 39 00
-63 64 5F 03 03 47 49 00 13 96 26 00 B3 0B D6 00
-13 0A 07 FD 93 96 1B 00 93 79 FA 0F 3E 86 DA 96
-93 07 49 00 E3 70 3F EF 09 06 5D B5 23 00 C8 01
-03 C7 17 00 E3 1E 07 DE 72 54 E2 54 52 59 C2 59
-32 5A A2 5A 12 5B 82 5B 21 61 82 80 98 41 81 49
-91 05 11 A0 B6 89 93 7A F7 00 13 83 7A 05 63 44
-5F 01 13 83 0A 03 93 86 19 00 13 0B C1 00 33 0A
-DB 00 A3 0F 6A FE 11 83 71 FF 13 09 C1 00 33 07
-39 01 B3 09 F7 41 93 FA 79 00 63 89 0A 06 85 4B
-63 8F 7A 05 09 43 63 87 6A 04 0D 4B 63 8F 6A 03
-11 4A 63 87 4A 03 15 49 63 8F 2A 01 99 49 63 87
-3A 01 83 4A 07 00 7D 17 23 00 58 01 83 4B 07 00
-7D 17 23 00 78 01 03 43 07 00 7D 17 23 00 68 00
-03 4B 07 00 7D 17 23 00 68 01 03 4A 07 00 7D 17
-23 00 48 01 03 49 07 00 7D 17 23 00 28 01 83 49
-07 00 7D 17 23 00 38 01 63 05 F7 05 83 4A 07 00
-61 17 23 00 58 01 83 4B 77 00 23 00 78 01 03 43
-67 00 23 00 68 00 03 4B 57 00 23 00 68 01 03 4A
-47 00 23 00 48 01 03 49 37 00 23 00 28 01 83 49
-27 00 23 00 38 01 83 4A 17 00 23 00 58 01 E3 1F
-F7 FB 36 95 D5 B1 03 C9 05 00 05 05 91 05 23 00
-28 01 D9 B9 03 AA 05 00 01 49 91 05 B3 7A DA 03
-4A 87 13 0B C1 00 05 09 B3 0B 2B 01 CA 89 93 8A
-0A 03 A3 8F 5B FF B3 5B DA 03 63 78 4F 0F 4A 87
-13 0B C1 00 05 09 B3 0A 2B 01 33 FA DB 03 13 0A
-0A 03 A3 8F 4A FF 33 DA DB 03 63 78 7F 0D 93 0B
-C1 00 4A 87 13 89 29 00 33 8B 2B 01 B3 7A DA 03
-93 8B 0A 03 A3 0F 7B FF B3 5A DA 03 63 77 4F 0B
-13 0A C1 00 4A 87 13 89 39 00 33 0B 2A 01 B3 FB
-DA 03 13 8A 0B 03 A3 0F 4B FF B3 DB DA 03 63 76
-5F 09 93 0A C1 00 4A 87 13 89 49 00 33 8B 2A 01
-33 FA DB 03 93 0A 0A 03 A3 0F 5B FF B3 DA DB 03
-63 75 7F 07 93 0B C1 00 4A 87 13 89 59 00 33 8B
-2B 01 33 FA DA 03 93 0B 0A 03 A3 0F 7B FF 33 DA
-DA 03 63 74 5F 05 93 0A C1 00 4A 87 13 89 69 00
-33 8B 2A 01 B3 7B DA 03 93 8A 0B 03 A3 0F 5B FF
-33 5B DA 03 63 73 4F 03 4A 87 13 89 79 00 93 09
-C1 00 33 8A 29 01 B3 7B DB 03 93 8A 0B 03 A3 0F
-5A FF 33 5A DB 03 E3 6B 6F EF CA 89 63 55 D9 08
-33 8B 26 41 93 7B 7B 00 63 8C 0B 04 85 4A 63 84
-5B 05 09 4A 63 8E 4B 03 0D 4B 63 88 6B 03 91 4A
-63 82 5B 03 15 4A 63 8C 4B 01 19 4B 63 86 6B 01
-23 00 68 00 93 09 19 00 23 00 68 00 85 09 23 00
-68 00 85 09 23 00 68 00 85 09 23 00 68 00 85 09
-23 00 68 00 85 09 23 00 68 00 85 09 63 85 36 03
-23 00 68 00 23 00 68 00 23 00 68 00 23 00 68 00
-23 00 68 00 23 00 68 00 23 00 68 00 23 00 68 00
-A1 09 E3 9F 36 FD 13 03 C1 00 1A 97 B3 06 F7 41
-93 FB 76 00 63 89 0B 06 85 4A 63 8F 5B 05 09 4A
-63 87 4B 05 0D 4B 63 8F 6B 03 91 49 63 87 3B 03
-15 43 63 8F 6B 00 99 46 63 87 DB 00 83 4B 07 00
-7D 17 23 00 78 01 83 4A 07 00 7D 17 23 00 58 01
-03 4A 07 00 7D 17 23 00 48 01 03 4B 07 00 7D 17
-23 00 68 01 83 49 07 00 7D 17 23 00 38 01 03 43
-07 00 7D 17 23 00 68 00 83 46 07 00 7D 17 23 00
-D8 00 63 05 F7 05 83 4B 07 00 61 17 23 00 78 01
-83 4A 77 00 23 00 58 01 03 4A 67 00 23 00 48 01
-03 4B 57 00 23 00 68 01 83 49 47 00 23 00 38 01
-03 43 37 00 23 00 68 00 83 46 27 00 23 00 D8 00
-83 4B 17 00 23 00 78 01 E3 1F F7 FB 4A 95 AD B4
-98 41 91 05 83 4B 07 00 63 82 0B 06 23 00 78 01
-03 49 17 00 63 0C 09 04 23 00 28 01 83 4A 27 00
-63 86 0A 04 23 00 58 01 03 4A 37 00 63 00 0A 04
-23 00 48 01 03 4B 47 00 63 0A 0B 02 23 00 68 01
-83 49 57 00 63 84 09 02 23 00 38 01 03 43 67 00
-63 0E 03 00 23 00 68 00 83 46 77 00 81 CA 21 07
-23 00 D8 00 83 4B 07 00 E3 92 0B FA 05 05 ED BA
-03 A3 05 00 01 47 91 05 BA 86 13 79 73 00 05 07
-93 0A C1 00 33 8A EA 00 13 0B 09 03 A3 0F 6A FF
-93 5B 33 00 BA 89 63 88 0B 0E 13 F9 7B 00 BA 86
-93 0A C1 00 05 07 33 8A EA 00 13 0B 09 03 A3 0F
-6A FF 93 5B 63 00 63 88 0B 0C 13 F9 7B 00 BA 86
-93 0A C1 00 13 87 29 00 33 8A EA 00 13 0B 09 03
-A3 0F 6A FF 93 5B 93 00 63 87 0B 0A 13 F9 7B 00
-BA 86 93 0A C1 00 13 87 39 00 33 8A EA 00 13 0B
-09 03 A3 0F 6A FF 93 5B C3 00 63 86 0B 08 13 F9
-7B 00 BA 86 93 0A C1 00 13 87 49 00 33 8A EA 00
-13 0B 09 03 A3 0F 6A FF 93 5B F3 00 63 85 0B 06
-13 F9 7B 00 BA 86 93 0A C1 00 13 87 59 00 33 8A
-EA 00 13 0B 09 03 A3 0F 6A FF 93 5B 23 01 63 84
-0B 04 13 F9 7B 00 BA 86 93 0A C1 00 13 87 69 00
-33 8A EA 00 13 0B 09 03 A3 0F 6A FF 93 5B 53 01
-63 83 0B 02 BA 86 13 F9 7B 00 13 87 79 00 93 09
-C1 00 B3 8A E9 00 13 0A 09 03 A3 8F 4A FF 13 53
-83 01 E3 1B 03 EE 13 0B C1 00 DA 96 B3 8B F6 41
-93 F9 7B 00 63 89 09 06 05 49 63 8F 29 05 89 4A
-63 87 59 05 0D 4A 63 8F 49 03 11 43 63 87 69 02
-15 4B 63 8F 69 01 99 4B 63 87 79 01 83 C9 06 00
-FD 16 23 00 38 01 03 C9 06 00 FD 16 23 00 28 01
-83 CA 06 00 FD 16 23 00 58 01 03 CA 06 00 FD 16
-23 00 48 01 03 C3 06 00 FD 16 23 00 68 00 03 CB
-06 00 FD 16 23 00 68 01 83 CB 06 00 FD 16 23 00
-78 01 63 85 F6 05 83 C9 06 00 E1 16 23 00 38 01
-03 C9 76 00 23 00 28 01 83 CA 66 00 23 00 58 01
-03 CA 56 00 23 00 48 01 03 C3 46 00 23 00 68 00
-03 CB 36 00 23 00 68 01 83 CB 26 00 23 00 78 01
-83 C9 16 00 23 00 38 01 E3 9F F6 FB 3A 95 29 B8
-83 AA 05 00 91 05 56 87 63 C3 0A 26 01 49 33 6B
-D7 03 13 0A C1 00 CA 89 05 09 B3 0B 2A 01 4A 8A
-33 47 D7 03 13 0B 0B 03 A3 8F 6B FF 71 CB 33 6B
-D7 03 CA 89 93 0B C1 00 05 09 CA 9B 33 47 D7 03
-13 0B 0B 03 A3 8F 6B FF 45 CF 33 6B D7 03 CA 89
-93 0B C1 00 13 09 2A 00 CA 9B 33 47 D7 03 13 0B
-0B 03 A3 8F 6B FF 49 CF 33 6B D7 03 CA 89 93 0B
-C1 00 13 09 3A 00 CA 9B 33 47 D7 03 13 0B 0B 03
-A3 8F 6B FF 35 CF 33 6B D7 03 CA 89 93 0B C1 00
-13 09 4A 00 CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F
-6B FF 39 CF 33 6B D7 03 CA 89 93 0B C1 00 13 09
-5A 00 CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF
-21 C3 33 6B D7 03 CA 89 93 0B C1 00 13 09 6A 00
-CA 9B 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF 0D C3
-33 6B D7 03 CA 89 13 09 7A 00 13 0A C1 00 B3 0B
-2A 01 33 47 D7 03 13 0B 0B 03 A3 8F 6B FF 01 FB
-4A 87 63 55 D9 08 33 8A 26 41 93 7B 7A 00 63 8C
-0B 04 05 4B 63 84 6B 05 09 4A 63 8E 4B 03 0D 4B
-63 88 6B 03 11 4A 63 82 4B 03 15 4B 63 8C 6B 01
-19 4A 63 86 4B 01 23 00 68 00 13 07 19 00 23 00
-68 00 05 07 23 00 68 00 05 07 23 00 68 00 05 07
-23 00 68 00 05 07 23 00 68 00 05 07 23 00 68 00
-05 07 63 05 D7 02 23 00 68 00 23 00 68 00 23 00
-68 00 23 00 68 00 23 00 68 00 23 00 68 00 23 00
-68 00 23 00 68 00 21 07 E3 1F D7 FC 74 00 33 87
-36 01 33 03 F7 41 93 7B 73 00 63 89 0B 06 05 4B
-63 8F 6B 05 09 4A 63 87 4B 05 8D 46 63 8F DB 02
-11 43 63 87 6B 02 15 4B 63 8F 6B 01 19 4A 63 87
-4B 01 83 4B 07 00 7D 17 23 00 78 01 83 46 07 00
-7D 17 23 00 D8 00 03 43 07 00 7D 17 23 00 68 00
-03 4B 07 00 7D 17 23 00 68 01 03 4A 07 00 7D 17
-23 00 48 01 83 4B 07 00 7D 17 23 00 78 01 83 46
-07 00 7D 17 23 00 D8 00 63 05 F7 05 03 43 07 00
-61 17 23 00 68 00 03 4B 77 00 23 00 68 01 03 4A
-67 00 23 00 48 01 83 4B 57 00 23 00 78 01 83 46
-47 00 23 00 D8 00 03 43 37 00 23 00 68 00 03 4B
-27 00 23 00 68 01 03 4A 17 00 23 00 48 01 E3 1F
-F7 FB E3 DD 0A B4 13 89 29 00 4A 95 6F F0 CF DB
-1A 87 13 03 00 02 63 14 77 E4 6F F0 0F E7 33 07
-50 41 23 00 78 00 FD 16 51 BB 01 45 82 80 39 71
-13 03 41 02 2E D2 9A 85 06 CE 32 D4 36 D6 3A D8
-3E DA 42 DC 46 DE 1A C6 EF F0 CF D2 F2 40 21 61
-82 80 39 71 13 03 41 02 2E D2 9A 85 06 CE 32 D4
-36 D6 3A D8 3E DA 42 DC 46 DE 1A C6 EF F0 8F D0
-F2 40 21 61 82 80 19 C6 03 15 25 00 83 95 25 00
-0D 8D 82 80 83 17 05 00 13 97 07 01 93 52 07 01
-13 F3 07 F0 93 D3 82 00 33 66 73 00 23 10 C5 00
-83 96 05 00 03 15 25 00 13 98 06 01 93 58 08 01
-13 FE 06 F0 93 DE 88 00 33 6F DE 01 23 90 E5 01
-83 95 25 00 0D 8D 82 80 03 97 05 00 83 97 25 00
-23 10 E5 00 23 11 F5 00 82 80 D1 48 B3 52 15 03
-61 73 23 A0 05 00 13 07 03 08 93 87 05 01 93 86
-85 00 93 88 E2 FF 13 98 38 00 2E 98 23 A2 05 01
-13 9E 28 00 23 11 08 00 23 10 E8 00 42 9E 13 05
-48 00 63 FB 07 3F 13 07 88 00 63 77 C7 3F 23 A4
-05 00 94 C1 C8 C5 93 43 F3 FF FD 5E 23 12 D8 01
-23 13 78 00 63 8D 08 20 13 1F 06 01 E1 7F 93 F2
-38 00 13 5F 0F 01 01 45 93 CE FF FF 63 8D 02 0C
-05 43 63 84 62 08 89 43 63 8D 72 02 93 82 87 00
-63 F8 02 03 93 0F 47 00 63 F4 CF 03 13 15 3F 00
-94 C3 93 76 85 07 9C C1 13 93 86 00 D8 C3 B3 63
-D3 00 23 10 77 00 23 11 D7 01 BE 86 7E 87 96 87
-05 45 93 82 87 00 63 F1 02 05 93 03 47 00 63 FD
-C3 03 93 1F 05 01 93 DF 0F 01 33 C3 EF 01 0E 03
-13 73 83 07 93 FF 7F 00 94 C3 B3 66 F3 01 9C C1
-13 93 86 00 D8 C3 B3 6F D3 00 23 10 F7 01 23 11
-D7 01 BE 86 1E 87 96 87 05 05 93 82 87 00 63 F1
-02 05 93 03 47 00 63 FD C3 03 13 13 05 01 93 5F
-03 01 33 C3 EF 01 0E 03 13 73 83 07 93 FF 7F 00
-94 C3 B3 66 F3 01 9C C1 13 93 86 00 D8 C3 B3 6F
-D3 00 23 10 F7 01 23 11 D7 01 BE 86 1E 87 96 87
-05 05 63 86 A8 12 93 82 87 00 63 F1 02 05 93 03
-47 00 63 FD C3 03 13 13 05 01 93 5F 03 01 33 C3
-EF 01 0E 03 13 73 83 07 93 FF 7F 00 94 C3 B3 66
-F3 01 9C C1 13 93 86 00 D8 C3 B3 6F D3 00 23 10
-F7 01 23 11 D7 01 BE 86 1E 87 96 87 93 82 87 00
-05 05 63 F1 02 05 93 03 47 00 63 FD C3 03 13 13
-05 01 93 5F 03 01 33 C3 EF 01 0E 03 13 73 83 07
-93 FF 7F 00 94 C3 B3 66 F3 01 9C C1 13 93 86 00
-D8 C3 B3 6F D3 00 23 10 F7 01 23 11 D7 01 BE 86
-1E 87 96 87 93 82 87 00 13 03 15 00 63 F1 02 05
-93 03 47 00 63 FD C3 03 93 1F 03 01 93 DF 0F 01
-33 C3 EF 01 0E 03 13 73 83 07 93 FF 7F 00 94 C3
-B3 66 F3 01 9C C1 13 93 86 00 D8 C3 B3 6F D3 00
-23 10 F7 01 23 11 D7 01 BE 86 1E 87 96 87 93 82
-87 00 13 03 25 00 63 F1 02 05 93 03 47 00 63 FD
-C3 03 93 1F 03 01 93 DF 0F 01 33 C3 EF 01 0E 03
-13 73 83 07 93 FF 7F 00 94 C3 B3 66 F3 01 9C C1
-13 93 86 00 D8 C3 B3 6F D3 00 23 10 F7 01 23 11
-D7 01 BE 86 1E 87 96 87 0D 05 E3 9E A8 EC 88 42
-29 CD 15 48 33 DF 08 03 91 68 05 47 13 8E F8 FF
-11 A8 03 28 05 00 23 91 EE 00 05 07 63 0F 08 02
-AA 86 42 85 83 AE 46 00 E3 65 E7 FF 93 12 07 01
-93 D3 02 01 13 83 13 00 93 1F 83 00 93 F7 0F 70
-B3 C6 C3 00 03 28 05 00 B3 E8 D7 00 B3 F2 C8 01
-23 91 5E 00 05 07 E3 15 08 FC 05 48 81 48 01 45
-81 4F 85 42 13 7F 78 00 85 0F AE 87 01 47 63 0B
-0F 04 05 46 63 03 CF 04 09 4E 63 0D CF 03 8D 4E
-63 07 DF 03 91 43 63 01 7F 02 15 43 63 0B 6F 00
-99 46 63 05 DF 00 9C 41 05 47 A5 C7 9C 43 05 07
-AD C3 9C 43 05 07 B1 CF 9C 43 05 07 B9 CB 9C 43
-05 07 A1 CB 9C 43 05 07 A9 C7 9C 43 05 07 B1 C3
-63 02 E8 0C 9C 43 05 07 3A 8F 85 CF 9C 43 05 07
-8D CB 9C 43 13 07 2F 00 8D C7 9C 43 13 07 3F 00
-8D C3 9C 43 13 07 4F 00 89 CF 9C 43 13 07 5F 00
-89 CB 9C 43 13 07 6F 00 89 C7 9C 43 13 07 7F 00
-E1 F3 AE 86 42 86 BE 85 25 C7 51 C2 C9 C1 83 AE
-46 00 03 AE 45 00 83 97 0E 00 83 13 2E 00 03 93
-2E 00 13 9F 07 01 13 5F 0F 01 13 5F 8F 00 93 F7
-07 F0 B3 E7 E7 01 23 90 FE 00 03 1F 0E 00 33 03
-73 40 93 1E 0F 01 93 D3 0E 01 93 77 0F F0 13 DF
-83 00 B3 EE E7 01 23 10 DE 01 63 5A 60 02 2E 8E
-8C 41 7D 16 63 8D 08 00 23 A0 C8 01 F2 88 51 FF
-1D C2 85 C5 2E 8E 7D 16 8C 41 E3 97 08 FE 72 85
-F2 88 F5 B7 AE 86 42 87 42 86 BE 85 B5 BF 36 8E
-7D 17 94 42 C1 BF E3 97 05 EC 23 A0 08 00 63 89
-5F 00 06 08 19 C5 AA 85 81 4F 81 48 01 45 5D BD
-82 80 23 20 00 00 02 90 B6 87 2A 87 81 46 1D B1
-03 28 06 00 93 08 88 00 63 F1 E8 04 98 42 13 03
-47 00 63 7C F3 02 23 20 16 01 1C 41 83 92 05 00
-03 96 25 00 23 20 F8 00 23 20 05 01 23 22 E8 00
-83 A3 06 00 13 85 43 00 88 C2 83 25 48 00 42 85
-23 90 55 00 23 91 C5 00 82 80 01 48 42 85 82 80
-AA 87 08 41 D4 43 50 41 18 41 D0 C3 54 C1 98 C3
-23 20 05 00 82 80 D0 41 54 41 98 41 50 C1 D4 C1
-18 C1 88 C1 82 80 03 96 25 00 63 4D 06 00 01 E5
-05 A8 08 41 05 C5 03 23 45 00 83 13 23 00 E3 9A
-C3 FE 82 80 01 CD 03 97 05 00 19 A0 08 41 01 C9
-5C 41 83 C2 07 00 E3 9B E2 FE 82 80 01 45 82 80
-82 80 2D C9 1C 41 81 48 23 20 15 01 AA 86 BD C3
-98 43 94 C3 3E 85 25 C3 83 22 07 00 1C C3 3A 85
-63 8A 02 04 03 A3 02 00 23 A0 E2 00 16 85 63 03
-03 04 83 23 03 00 23 20 53 00 1A 85 63 8C 03 02
-83 A5 03 00 23 A0 63 00 1E 85 8D C5 03 A8 05 00
-23 A0 75 00 2E 85 63 0F 08 00 03 26 08 00 23 20
-B8 00 42 85 C2 88 19 C6 32 85 1C 41 23 20 15 01
-AA 86 D9 FF 82 80 82 80 79 71 22 D4 5A C8 5E C6
-66 C2 6A C0 06 D6 26 D2 4A D0 4E CE 52 CC 56 CA
-62 C4 2A 84 2E 8B 32 8D 85 4B 85 4C 63 01 04 10
-01 4C 81 44 81 4A 13 F7 7B 00 05 0C A2 87 01 49
-31 CB 85 46 63 03 D7 04 89 40 63 0D 17 02 8D 42
-63 07 57 02 11 43 63 01 67 02 95 43 63 0B 77 00
-19 45 63 05 A7 00 1C 40 05 49 A5 C7 9C 43 05 09
-AD C3 9C 43 05 09 B1 CF 9C 43 05 09 B9 CB 9C 43
-05 09 A1 CB 9C 43 05 09 A9 C7 9C 43 05 09 B1 C3
-63 81 2B 05 9C 43 05 09 CA 85 85 CF 9C 43 05 09
-8D CB 9C 43 13 89 25 00 8D C7 9C 43 13 89 35 00
-8D C3 9C 43 13 89 45 00 89 CF 9C 43 13 89 55 00
-89 CB 9C 43 13 89 65 00 89 C7 9C 43 13 89 75 00
-E1 F3 22 8A DE 89 3E 84 63 04 09 02 63 8C 09 02
-15 C8 4C 40 03 25 4A 00 6A 86 02 9B 63 54 A0 02
-22 86 00 40 FD 19 81 CC 90 C0 B2 84 E3 10 09 FE
-63 8F 09 00 11 CC 22 86 FD 19 00 40 F5 F4 B2 8A
-B2 84 ED B7 52 86 7D 19 03 2A 0A 00 E9 BF 01 FC
-23 A0 04 00 63 08 9C 01 86 0B 56 84 01 B7 23 20
-00 00 02 90 B2 50 22 54 92 54 02 59 F2 49 62 4A
-42 4B B2 4B 22 4C 92 4C 02 4D 56 85 D2 4A 45 61
-82 80 1D 71 A6 CA CE C6 D2 C4 5E DE FD 74 13 1A
-07 01 86 CE A2 CC CA C8 D6 C2 DA C0 62 DC 66 DA
-6A D8 6E D6 2E C2 32 C6 AA 89 B6 8B D9 8C 13 5A
-0A 01 19 E1 6F 10 70 48 93 18 15 00 33 0F A0 40
-B2 98 13 13 1F 00 C6 86 01 46 0A 0F 33 05 D3 00
-B3 85 A6 40 93 80 E5 FF 93 D2 10 00 93 83 12 00
-13 F4 73 00 AA 87 59 C4 05 48 63 0C 04 07 09 49
-63 02 24 07 8D 4A 63 08 54 05 11 4B 63 0E 64 03
-15 4C 63 04 84 03 99 4C 63 0A 94 01 03 5D 05 00
-93 07 25 00 33 0E AA 01 23 10 C5 01 83 DE 07 00
-89 07 B3 0F DA 01 23 9F F7 FF 83 DD 07 00 89 07
-B3 05 BA 01 23 9F B7 FE 83 D0 07 00 89 07 B3 02
-1A 00 23 9F 57 FE 83 D3 07 00 89 07 33 04 7A 00
-23 9F 87 FE 03 D8 07 00 89 07 33 09 0A 01 23 9F
-27 FF 83 DA 07 00 89 07 33 0B 5A 01 23 9F 67 FF
-63 85 D7 06 03 DC 07 00 83 DC 27 00 03 DD 47 00
-83 DF 67 00 83 DE 87 00 03 DE A7 00 83 DD C7 00
-83 D5 E7 00 B3 00 8A 01 B3 03 9A 01 B3 02 AA 01
-33 04 FA 01 33 09 DA 01 B3 0A CA 01 33 08 BA 01
-33 0B BA 00 23 90 17 00 23 91 77 00 23 92 57 00
-23 93 87 00 23 94 27 01 23 95 57 01 23 96 07 01
-23 97 67 01 C1 07 E3 9F D7 F8 93 0E 16 00 B3 06
-E5 41 63 84 D9 01 76 86 D5 B5 92 43 33 08 30 41
-01 4F 81 4F 13 15 28 00 33 8D 68 00 B3 87 A8 41
-13 8C E7 FF 93 5C 1C 00 13 8E 1C 00 93 1D 2F 00
-93 75 7E 00 B3 87 7D 00 EA 86 D1 CD 85 40 63 82
-15 08 89 42 63 87 55 06 0D 44 63 8C 85 04 11 49
-63 81 25 05 95 4A 63 86 55 03 19 4B 63 8B 65 01
-03 1C 0D 00 93 06 2D 00 91 07 B3 0C EC 02 23 AE
-97 FF 03 9E 06 00 91 07 89 06 B3 0D EE 02 23 AE
-B7 FF 83 95 06 00 91 07 89 06 B3 80 E5 02 23 AE
-17 FE 83 92 06 00 91 07 89 06 33 84 E2 02 23 AE
-87 FE 03 99 06 00 91 07 89 06 B3 0A E9 02 23 AE
-57 FF 03 9B 06 00 91 07 89 06 33 0C EB 02 23 AE
-87 FF 83 9C 06 00 91 07 89 06 33 8E EC 02 23 AE
-C7 FF 63 87 16 07 83 9D 06 00 83 90 26 00 03 9B
-46 00 83 9A 66 00 03 99 86 00 03 94 A6 00 83 92
-C6 00 83 95 E6 00 B3 8C ED 02 C1 06 93 87 07 02
-33 8C E0 02 23 A0 97 FF 33 0E EB 02 23 A2 87 FF
-B3 8D EA 02 23 A4 C7 FF B3 00 E9 02 23 A6 B7 FF
-33 0B E4 02 23 A8 17 FE B3 8A E2 02 23 AA 67 FF
-33 89 E5 02 23 AC 57 FF 23 AE 27 FF E3 9D 16 F9
-93 86 1F 00 76 9F B3 08 AD 40 63 84 CF 00 B6 8F
-E1 B5 92 4F 13 97 2E 00 81 40 7E 97 01 4E 81 46
-81 45 0E 08 33 0D A7 00 33 03 A7 41 93 03 C3 FF
-93 DE 23 00 13 84 1E 00 93 72 34 00 6A 8F 63 8C
-02 0E 85 4C 63 8A 92 05 09 4C 63 85 82 03 F2 8D
-03 2E 0D 00 93 97 00 01 93 D0 07 01 F2 96 63 D7
-D4 1A 13 8F A0 00 93 18 0F 01 93 D0 08 41 81 46
-13 0F 4D 00 F2 8F 03 2E 0F 00 13 93 00 01 93 53
-03 01 F2 96 63 DB D4 16 93 86 A3 00 93 9C 06 01
-93 D0 0C 41 81 46 11 0F 72 8C 03 2E 0F 00 93 9D
-00 01 93 D7 0D 01 F2 96 63 DC D4 12 93 88 A7 00
-93 9F 08 01 13 93 08 01 93 DE 0F 01 93 50 03 41
-81 46 11 0F 63 19 E7 07 93 8D 15 00 33 07 0D 41
-63 07 B6 14 EE 85 B9 B7 83 22 4F 00 93 8E AA 00
-13 94 0E 01 93 53 04 41 01 49 13 9E 03 01 B3 06
-59 00 93 5C 0E 01 63 DF D4 08 03 2E 8F 00 93 87
-AC 00 93 9A 07 01 13 DB 0A 41 81 46 13 19 0B 01
-F2 96 93 58 09 01 63 D0 D4 0A 93 82 A8 00 93 9C
-02 01 13 9C 02 01 93 DE 0C 01 93 50 0C 41 81 46
-31 0F E3 0B E7 F9 83 23 0F 00 93 9E 00 01 13 D4
-0E 01 B3 80 76 00 63 C5 14 08 33 2E 7E 00 B3 02
-C4 01 93 9C 02 01 93 DD 0C 41 03 2B 4F 00 93 97
-0D 01 11 0F 33 89 60 01 93 DA 07 01 E3 C6 24 F7
-B3 A8 63 01 83 22 4F 00 B3 8F 1A 01 13 93 0F 01
-93 53 03 41 13 9E 03 01 B3 06 59 00 93 5C 0E 01
-E3 C5 D4 F6 33 2C 5B 00 03 2E 8F 00 B3 8D 8C 01
-93 90 0D 01 13 DB 00 41 13 19 0B 01 F2 96 93 58
-09 01 E3 C4 D4 F6 B3 AF C2 01 33 83 F8 01 93 13
-03 01 13 14 03 01 93 DE 03 01 93 50 04 41 8D B7
-93 06 A4 00 13 9C 06 01 93 5D 0C 41 81 40 B5 BF
-B3 20 CC 01 33 8B 17 00 93 1A 0B 01 13 19 0B 01
-93 DE 0A 01 93 50 09 41 E9 B5 B3 AE CF 01 33 84
-D3 01 93 12 04 01 93 D0 02 41 71 B5 33 AB CD 01
-B3 8A 60 01 13 99 0A 01 93 50 09 41 91 BD A9 67
-93 F5 10 00 13 FD F0 0F 93 8A 17 00 33 0B B0 40
-33 FE 6A 01 13 59 1D 00 B3 48 2E 01 93 F6 18 00
-13 D7 8E 00 93 57 2D 00 93 5D 1E 00 91 CA E9 7F
-13 83 1F 00 B3 C3 6D 00 93 9E 03 01 93 DD 0E 01
-33 C4 B7 01 93 70 14 00 93 D2 17 00 13 D8 1D 00
-63 8B 00 00 E9 7C 13 8C 1C 00 33 4F 88 01 13 15
-0F 01 13 58 05 01 33 C6 02 01 93 75 16 00 13 DD
-27 00 13 59 18 00 91 C9 69 7B 93 0A 1B 00 B3 4D
-59 01 13 9E 0D 01 13 59 0E 01 B3 48 A9 01 93 F6
-18 00 93 DF 37 00 93 50 19 00 91 CA 69 73 93 03
-13 00 B3 CE 70 00 13 94 0E 01 93 50 04 01 B3 C2
-F0 01 93 FC 12 00 13 DC 47 00 93 D5 10 00 63 8B
-0C 00 69 7F 13 05 1F 00 33 C8 A5 00 13 16 08 01
-93 55 06 01 33 4D BC 00 13 7B 1D 00 95 83 93 D8
-15 00 63 0B 0B 00 E9 7A 13 8E 1A 00 B3 CD C8 01
-13 99 0D 01 93 58 09 01 93 F6 18 00 13 D4 18 00
-63 8B F6 00 E9 7F 13 83 1F 00 B3 43 64 00 93 9E
-03 01 13 D4 0E 01 B3 40 87 00 93 F2 10 00 93 5C
-17 00 13 56 14 00 63 8B 02 00 69 7C 13 0F 1C 00
-33 45 E6 01 13 18 05 01 13 56 08 01 B3 C5 CC 00
-13 FD 15 00 13 5B 27 00 13 59 16 00 63 0B 0D 00
-E9 77 93 8A 17 00 33 4E 59 01 93 1D 0E 01 13 D9
-0D 01 B3 48 69 01 93 FF 18 00 93 56 37 00 93 50
-19 00 63 8B 0F 00 69 73 93 03 13 00 B3 CE 70 00
-13 94 0E 01 93 50 04 01 B3 C2 D0 00 93 FC 12 00
-13 5C 47 00 93 D5 10 00 63 8B 0C 00 69 7F 13 05
-1F 00 33 C8 A5 00 13 16 08 01 93 55 06 01 33 4D
-BC 00 13 7B 1D 00 93 5A 57 00 93 D8 15 00 63 0B
-0B 00 E9 77 13 8E 17 00 B3 CD C8 01 13 99 0D 01
-93 58 09 01 B3 CF 1A 01 93 F6 1F 00 13 53 67 00
-93 D2 18 00 91 CA E9 73 93 8E 13 00 33 C4 D2 01
-93 10 04 01 93 D2 00 01 B3 4C 53 00 13 FC 1C 00
-1D 83 93 D5 12 00 63 0B 0C 00 69 7F 13 05 1F 00
-33 C8 A5 00 13 16 08 01 93 55 06 01 13 FD 15 00
-93 DD 15 00 63 0B ED 00 69 7B 93 0A 1B 00 B3 C7
-5D 01 13 9E 07 01 93 5D 0E 01 63 94 09 00 6F 10
-60 5C 92 4C 13 94 29 00 81 45 22 86 66 85 EF 50
-B0 7B 32 4D 93 9F 19 00 66 85 B3 05 94 01 B3 82
-7F 01 81 43 26 C4 B3 84 72 41 13 83 E4 FF 93 5E
-13 00 93 80 1E 00 13 9C 13 00 13 F7 70 00 B3 06
-8D 01 5E 86 81 47 45 C7 05 4F 63 07 E7 09 09 48
-63 0B 07 07 0D 4B 63 0F 67 05 91 4A 63 03 57 05
-15 4E 63 07 C7 03 19 49 63 0B 27 01 83 98 06 00
-83 97 0B 00 89 06 13 86 2B 00 B3 87 F8 02 03 94
-06 00 83 1C 06 00 89 06 09 06 B3 0F 94 03 FE 97
-83 94 06 00 03 13 06 00 89 06 09 06 B3 8E 64 02
-F6 97 83 90 06 00 03 1C 06 00 89 06 09 06 33 87
-80 03 BA 97 03 9F 06 00 03 18 06 00 89 06 09 06
-33 0B 0F 03 DA 97 83 9A 06 00 03 1E 06 00 89 06
-09 06 33 89 CA 03 CA 97 83 98 06 00 03 14 06 00
-09 06 89 06 B3 8C 88 02 E6 97 63 06 56 08 83 9F
-06 00 03 13 06 00 83 90 26 00 83 1A 26 00 33 87
-6F 02 83 94 46 00 03 1C 46 00 83 9E 66 00 03 1B
-66 00 03 9E 86 00 03 19 86 00 83 9C A6 00 03 14
-A6 00 83 98 C6 00 33 83 50 03 B3 80 E7 00 83 1F
-C6 00 03 98 E6 00 03 1F E6 00 41 06 C1 06 B3 87
-84 03 B3 8A 60 00 B3 84 6E 03 33 8C FA 00 B3 0E
-2E 03 33 0B 9C 00 33 87 8C 02 33 0E DB 01 33 89
-F8 03 B3 0C EE 00 33 04 E8 03 B3 88 2C 01 B3 87
-88 00 E3 1E 56 F6 1C C1 11 05 CE 93 E3 95 A5 EA
-A2 44 B3 02 30 41 13 95 22 00 81 47 01 43 01 48
-81 46 13 96 32 00 33 8D A5 00 B3 8F A5 41 13 8F
-CF FF 93 50 2F 00 93 8A 10 00 13 FC 3A 00 EA 8E
-63 02 0C 52 05 4B 63 09 6C 05 09 47 63 04 EC 02
-9A 8E 03 23 0D 00 C2 07 13 DE 07 01 1A 98 63 DF
-04 5D 13 08 AE 00 93 18 08 01 93 D7 08 41 01 48
-93 0E 4D 00 9A 83 03 A3 0E 00 93 92 07 01 93 DF
-02 01 1A 98 63 D3 04 5B 13 8C AF 00 13 1B 0C 01
-93 57 0B 41 01 48 91 0E 1A 87 03 A3 0E 00 C2 07
-13 DE 07 01 1A 98 63 D5 04 57 13 08 AE 00 93 13
-08 01 93 12 08 01 93 D0 03 01 93 D7 02 41 01 48
-91 0E 63 91 D5 4B 85 06 B3 05 CD 40 E3 9D D9 F4
-93 F8 F7 0F 13 D9 80 00 33 CD B8 01 13 7E 1D 00
-93 DC 18 00 93 D2 1D 00 63 0B 0E 00 69 74 13 03
-14 00 B3 C3 62 00 13 98 03 01 93 52 08 01 B3 CF
-5C 00 13 FF 1F 00 93 D0 28 00 13 D7 12 00 63 0B
-0F 00 E9 7A 13 8C 1A 00 B3 47 87 01 13 9B 07 01
-13 57 0B 01 B3 CE E0 00 13 F5 1E 00 93 DD 38 00
-13 5E 17 00 11 C9 69 76 93 06 16 00 B3 45 DE 00
-13 9D 05 01 13 5E 0D 01 B3 CC CD 01 13 F4 1C 00
-13 D3 48 00 13 5F 1E 00 11 C8 E9 73 13 88 13 00
-B3 42 0F 01 93 9F 02 01 13 DF 0F 01 B3 40 E3 01
-93 FA 10 00 13 DC 58 00 13 55 1F 00 63 8B 0A 00
-69 7B 13 07 1B 00 B3 47 E5 00 93 9E 07 01 13 D5
-0E 01 B3 4D AC 00 93 F6 1D 00 13 D6 68 00 13 54
-15 00 91 CA E9 75 13 8D 15 00 33 4E A4 01 93 1C
-0E 01 13 D4 0C 01 33 43 86 00 93 73 13 00 93 D8
-78 00 93 50 14 00 63 8B 03 00 69 78 93 02 18 00
-B3 CF 50 00 13 9F 0F 01 93 50 0F 01 93 FA 10 00
-93 DE 10 00 63 8B 1A 01 69 7C 13 0B 1C 00 33 C7
-6E 01 93 17 07 01 93 DE 07 01 33 C5 2E 01 93 7D
-15 00 13 56 19 00 93 DC 1E 00 63 8B 0D 00 E9 76
-93 85 16 00 33 CD BC 00 13 1E 0D 01 93 5C 0E 01
-33 C4 CC 00 13 73 14 00 93 53 29 00 13 DF 1C 00
-63 0B 03 00 E9 78 13 88 18 00 B3 42 0F 01 93 9F
-02 01 13 DF 0F 01 B3 40 7F 00 93 FA 10 00 13 5C
-39 00 13 55 1F 00 63 8B 0A 00 69 7B 13 07 1B 00
-B3 47 E5 00 93 9E 07 01 13 D5 0E 01 B3 4D AC 00
-13 F6 1D 00 93 56 49 00 13 54 15 00 11 CA E9 75
-13 8D 15 00 33 4E A4 01 93 1C 0E 01 13 D4 0C 01
-33 C3 86 00 93 73 13 00 93 58 59 00 93 50 14 00
-63 8B 03 00 69 78 93 02 18 00 B3 CF 50 00 13 9F
-0F 01 93 50 0F 01 B3 CA 18 00 13 FC 1A 00 13 5B
-69 00 93 DD 10 00 63 0B 0C 00 69 77 93 0E 17 00
-B3 C7 DD 01 13 95 07 01 93 5D 05 01 33 46 BB 01
-93 76 16 00 13 59 79 00 13 D4 1D 00 91 CA E9 75
-13 8D 15 00 33 4E A4 01 93 1C 0E 01 13 D4 0C 01
-93 53 14 00 13 73 14 00 1E C8 63 0C 23 01 E9 78
-13 88 18 00 B3 C2 03 01 93 9F 02 01 13 DF 0F 01
-7A C8 81 4A 81 42 63 88 09 32 B2 40 13 9C 29 00
-13 94 19 00 01 47 52 CE 5E C4 86 8A 33 09 14 00
-62 CA 01 4B 26 CC 3A 8A E2 8B 92 4E 93 14 2A 00
-5E 86 33 85 D4 01 81 45 EF 50 10 30 A2 4F 2A 8F
-01 45 B3 07 59 41 93 8D E7 FF 13 D6 1D 00 93 06
-16 00 13 FD 76 00 7E 86 D6 86 81 47 63 06 0D 0A
-85 45 63 08 BD 08 09 4E 63 0C CD 07 8D 4C 63 00
-9D 07 11 43 63 04 6D 04 95 43 63 08 7D 02 99 48
-63 0C 1D 01 03 98 0A 00 83 92 0F 00 93 86 2A 00
-33 86 8F 00 B3 07 58 02 83 90 06 00 03 1C 06 00
-89 06 22 96 33 87 80 03 BA 97 83 94 06 00 83 1E
-06 00 89 06 22 96 B3 8D D4 03 EE 97 03 9D 06 00
-83 15 06 00 89 06 22 96 33 0E BD 02 F2 97 83 9C
-06 00 03 13 06 00 89 06 22 96 B3 83 6C 02 9E 97
-83 98 06 00 03 18 06 00 89 06 22 96 B3 82 08 03
-96 97 83 90 06 00 03 1C 06 00 89 06 22 96 33 87
-80 03 BA 97 63 03 D9 0A B3 04 86 00 83 9C 06 00
-03 13 06 00 B3 8E 84 00 03 9E 04 00 03 9D 26 00
-B3 83 8E 00 83 90 46 00 83 9D 0E 00 33 87 6C 02
-B3 85 83 00 83 9E 66 00 83 9C 03 00 33 88 85 00
-03 93 86 00 03 9C 05 00 83 98 A6 00 83 13 08 00
-B3 02 88 00 33 0D CD 03 03 98 C6 00 33 86 82 00
-83 92 02 00 83 95 E6 00 03 1E 06 00 BA 97 C1 06
-22 96 B3 84 B0 03 B3 80 A7 01 B3 8D 9E 03 B3 8E
-90 00 B3 0C 83 03 33 87 BE 01 33 83 78 02 33 0C
-97 01 B3 08 58 02 B3 03 6C 00 33 88 C5 03 33 8D
-13 01 B3 07 0D 01 E3 11 D9 F6 23 20 FF 00 93 06
-15 00 11 0F 89 0F 63 84 D9 12 36 85 59 B5 33 23
-F3 01 03 A9 4E 00 B3 8A 60 00 13 9C 0A 01 93 57
-0C 41 93 9C 07 01 B3 08 2E 01 91 0E 13 D4 0C 01
-63 DE 14 09 83 AA 4E 00 13 0F A4 00 93 10 0F 01
-93 DF 00 41 81 48 13 93 0F 01 33 8B 58 01 13 5C
-03 01 63 DF 64 09 03 A3 8E 00 93 0C AC 00 13 94
-0C 01 13 59 04 41 01 4B 93 18 09 01 33 08 6B 00
-93 D3 08 01 63 D0 04 0B 13 8C A3 00 13 1B 0C 01
-13 17 0C 01 93 50 0B 01 93 57 07 41 01 48 B1 0E
-E3 83 D5 B7 83 AF 0E 00 13 9F 07 01 93 50 0F 01
-33 0E F8 01 E3 D5 C4 F7 03 A9 4E 00 13 8B A0 00
-13 17 0B 01 93 57 07 41 01 4E 93 9C 07 01 B3 08
-2E 01 91 0E 13 D4 0C 01 E3 C6 14 F7 33 A8 2F 01
-83 AA 4E 00 B3 03 04 01 93 92 03 01 93 DF 02 41
-13 93 0F 01 33 8B 58 01 13 5C 03 01 E3 C5 64 F7
-33 27 59 01 03 A3 8E 00 B3 07 EC 00 13 9E 07 01
-13 59 0E 41 93 18 09 01 33 08 6B 00 93 D3 08 01
-E3 C4 04 F7 B3 A2 6A 00 B3 8F 53 00 13 9F 0F 01
-93 9A 0F 01 93 50 0F 01 93 D7 0A 41 8D B7 13 0F
-1B 00 A2 9A 4E 9A 22 99 63 00 AB 7E 7A 8B 35 BB
-33 29 67 00 B3 0C 2E 01 13 94 0C 01 93 98 0C 01
-93 50 04 01 93 D7 08 41 61 BC 33 AF 63 00 B3 80
-EF 01 93 9A 00 01 93 D7 0A 41 B1 BC 33 A9 6E 00
-B3 0C 2E 01 13 94 0C 01 93 57 04 41 15 B4 93 72
-FD 0F 93 DA 8E 00 C2 47 93 DF 12 00 33 C9 57 00
-13 7E 19 00 93 DC 17 00 63 0B 0E 00 E9 76 93 80
-16 00 B3 CD 1C 00 93 9E 0D 01 93 DC 0E 01 33 CD
-9F 01 13 73 1D 00 13 DC 22 00 13 D8 1C 00 63 0B
-03 00 E9 78 13 8F 18 00 33 45 E8 01 93 15 05 01
-13 D8 05 01 B3 43 0C 01 13 F7 13 00 13 D6 32 00
-13 5E 18 00 11 CB 69 7B 93 07 1B 00 33 44 FE 00
-13 19 04 01 13 5E 09 01 B3 4F CE 00 93 F0 1F 00
-93 D6 42 00 13 53 1E 00 63 8B 00 00 E9 7D 93 8E
-1D 00 B3 4C D3 01 13 9D 0C 01 13 53 0D 01 33 4C
-D3 00 93 78 1C 00 13 DF 52 00 13 57 13 00 63 8B
-08 00 69 75 93 05 15 00 33 48 B7 00 93 13 08 01
-13 D7 03 01 33 46 E7 01 13 7B 16 00 93 D7 62 00
-93 50 17 00 63 0B 0B 00 69 79 13 0E 19 00 33 C4
-C0 01 93 1F 04 01 93 D0 0F 01 B3 C6 F0 00 93 FD
-16 00 93 D2 72 00 13 DC 10 00 63 8B 0D 00 E9 7E
-93 8C 1E 00 33 4D 9C 01 13 13 0D 01 13 5C 03 01
-93 78 1C 00 93 53 1C 00 63 8B 58 00 69 7F 13 05
-1F 00 B3 C5 A3 00 13 98 05 01 93 53 08 01 33 C7
-53 01 13 76 17 00 13 DB 1A 00 93 DF 13 00 11 CA
-E9 77 13 89 17 00 33 CE 2F 01 13 14 0E 01 93 5F
-04 01 B3 40 FB 01 93 F6 10 00 93 DD 2A 00 13 D3
-1F 00 91 CA E9 72 93 8E 12 00 B3 4C D3 01 13 9D
-0C 01 13 53 0D 01 33 4C B3 01 93 78 1C 00 13 DF
-3A 00 13 56 13 00 63 8B 08 00 69 75 93 05 15 00
-33 48 B6 00 93 13 08 01 13 D6 03 01 33 47 E6 01
-13 7B 17 00 93 D7 4A 00 93 50 16 00 63 0B 0B 00
-69 79 13 0E 19 00 33 C4 C0 01 93 1F 04 01 93 D0
-0F 01 B3 C6 17 00 93 FD 16 00 93 D2 5A 00 13 DC
-10 00 63 8B 0D 00 E9 7E 93 8C 1E 00 33 4D 9C 01
-13 13 0D 01 13 5C 03 01 B3 C8 82 01 13 FF 18 00
-13 D5 6A 00 13 5B 1C 00 63 0B 0F 00 E9 75 13 88
-15 00 B3 43 0B 01 13 96 03 01 13 5B 06 01 33 47
-AB 00 13 79 17 00 93 DA 7A 00 93 50 1B 00 63 0B
-09 00 E9 77 13 8E 17 00 33 C4 C0 01 93 1F 04 01
-93 D0 0F 01 93 F6 10 00 13 D4 10 00 63 8B 56 01
-E9 7D 93 82 1D 00 B3 4E 54 00 93 9C 0E 01 13 D4
-0C 01 81 4D 81 46 63 80 09 1A 32 4D 92 4D 93 9A
-19 00 6A 8C 33 8B AA 01 13 99 29 00 81 4C 01 4D
-13 93 2C 00 81 45 33 05 B3 01 4A 86 EF 50 C0 58
-AA 86 81 45 5E 85 B3 08 8B 41 13 8F E8 FF 13 58
-1F 00 93 03 18 00 13 F6 33 00 2A 83 E2 88 81 4E
-59 C2 05 47 63 0C E6 04 89 47 63 06 F6 02 03 1E
-0C 00 83 1F 05 00 93 08 2C 00 33 03 55 01 B3 00
-FE 03 93 DE 50 40 93 D2 20 40 13 FF F2 00 13 F8
-FE 07 B3 0E 0F 03 83 93 08 00 03 16 03 00 89 08
-56 93 B3 87 C3 02 13 D7 27 40 13 DE 57 40 93 7F
-F7 00 93 70 FE 07 B3 82 1F 02 96 9E 03 9F 08 00
-03 18 03 00 89 08 56 93 B3 03 0F 03 13 D6 23 40
-93 D7 53 40 13 77 F6 00 13 FE F7 07 B3 0F C7 03
-FE 9E 63 03 1B 0B B3 00 53 01 03 9F 08 00 03 18
-03 00 33 86 50 01 83 93 28 00 03 97 00 00 03 1E
-06 00 33 03 56 01 83 92 48 00 B3 0F 0F 03 83 17
-03 00 83 90 68 00 A1 08 56 93 33 8F E3 02 13 D8
-5F 40 93 D3 2F 40 13 F7 F3 00 93 73 F8 07 B3 82
-C2 03 13 56 5F 40 13 5E 2F 40 93 7F FE 00 13 76
-F6 07 B3 80 F0 02 13 D8 52 40 93 D7 22 40 13 FF
-F7 00 93 72 F8 07 33 07 77 02 13 DE 50 40 93 D3
-20 40 93 F0 F3 00 93 77 FE 07 B3 8F CF 02 BA 9E
-33 06 5F 02 33 88 FE 01 33 8F F0 02 B3 02 C8 00
-B3 8E E2 01 E3 11 1B F7 23 A0 D6 01 93 88 15 00
-91 06 09 05 63 84 19 01 C6 85 75 B5 93 06 1D 00
-56 9C CE 9C 56 9B 63 81 A5 5F 36 8D 51 B5 93 F6
-FA 0F 93 5D 8B 00 B3 C0 86 00 13 F3 10 00 93 DF
-16 00 93 52 14 00 63 0B 03 00 69 7E 93 0E 1E 00
-33 CF D2 01 93 18 0F 01 93 D2 08 01 33 CC 5F 00
-93 7C 1C 00 13 DB 26 00 93 D4 12 00 63 8B 0C 00
-69 77 13 08 17 00 B3 C7 04 01 13 94 07 01 93 54
-04 01 33 45 9B 00 13 76 15 00 93 D5 36 00 93 DB
-14 00 11 CA E9 73 13 8D 13 00 33 C9 AB 01 93 1A
-09 01 93 DB 0A 01 B3 C0 75 01 13 F3 10 00 93 DF
-46 00 93 D2 1B 00 63 0B 03 00 69 7E 93 0E 1E 00
-33 CF D2 01 93 18 0F 01 93 D2 08 01 33 CC 5F 00
-93 7C 1C 00 13 DB 56 00 93 D4 12 00 63 8B 0C 00
-69 77 13 08 17 00 B3 C7 04 01 13 94 07 01 93 54
-04 01 33 C5 64 01 93 75 15 00 13 D6 66 00 93 DB
-14 00 91 C9 E9 73 13 8D 13 00 33 C9 AB 01 93 1A
-09 01 93 DB 0A 01 B3 C0 CB 00 13 F3 10 00 9D 82
-93 D8 1B 00 63 0B 03 00 E9 7F 13 8E 1F 00 B3 CE
-C8 01 13 9F 0E 01 93 58 0F 01 93 F2 18 00 13 D8
-18 00 63 8B D2 00 69 7C 93 0C 1C 00 33 4B 98 01
-13 17 0B 01 13 58 07 01 B3 C7 0D 01 13 F4 17 00
-93 D4 1D 00 13 5D 18 00 11 C8 69 75 93 05 15 00
-33 46 BD 00 93 13 06 01 13 DD 03 01 33 C9 A4 01
-93 7A 19 00 93 DB 2D 00 13 5E 1D 00 63 8B 0A 00
-E9 70 13 83 10 00 B3 46 6E 00 93 9F 06 01 13 DE
-0F 01 B3 CE CB 01 13 FF 1E 00 93 D8 3D 00 13 57
-1E 00 63 0B 0F 00 E9 72 13 8C 12 00 B3 4C 87 01
-13 9B 0C 01 13 57 0B 01 33 C8 E8 00 13 74 18 00
-93 D4 4D 00 93 53 17 00 11 C8 69 75 93 05 15 00
-B3 C7 B3 00 13 96 07 01 93 53 06 01 33 CD 74 00
-13 79 1D 00 93 DA 5D 00 93 DF 13 00 63 0B 09 00
-E9 7B 93 80 1B 00 33 C3 1F 00 93 16 03 01 93 DF
-06 01 33 CE 5F 01 93 7E 1E 00 13 DF 6D 00 13 DB
-1F 00 63 8B 0E 00 E9 78 93 82 18 00 33 4C 5B 00
-93 1C 0C 01 13 DB 0C 01 33 47 6F 01 13 78 17 00
-93 DD 7D 00 93 57 1B 00 63 0B 08 00 69 74 93 04
-14 00 33 C5 97 00 93 15 05 01 93 D7 05 01 13 F6
-17 00 13 D5 17 00 63 0B B6 01 E9 73 13 8D 13 00
-33 49 A5 01 93 1A 09 01 13 D5 0A 01 63 8B 09 12
-32 43 B3 0B 30 41 93 90 19 00 B3 06 13 00 93 92
-1B 00 01 4F 93 9F 2B 00 33 8C 56 00 33 8E 86 41
-93 0E EE FF 93 D8 1E 00 93 8C 18 00 13 FB 7C 00
-E2 87 63 08 0B 08 05 47 63 0C EB 06 09 48 63 02
-0B 07 8D 4D 63 08 BB 05 11 44 63 0E 8B 02 95 44
-63 04 9B 02 99 45 63 0A BB 00 03 56 0C 00 93 07
-2C 00 B3 03 46 41 23 10 7C 00 03 DD 07 00 89 07
-33 09 4D 41 23 9F 27 FF 83 DA 07 00 89 07 B3 8B
-4A 41 23 9F 77 FF 83 D0 07 00 89 07 33 83 40 41
-23 9F 67 FE 03 DE 07 00 89 07 B3 0E 4E 41 23 9F
-D7 FF 83 D8 07 00 89 07 B3 8C 48 41 23 9F 97 FF
-03 DB 07 00 89 07 33 07 4B 41 23 9F E7 FE 63 85
-D7 06 83 DD 07 00 03 D4 27 00 83 D4 47 00 03 D6
-67 00 03 DD 87 00 03 D8 A7 00 83 D5 C7 00 03 D9
-E7 00 B3 83 4D 41 B3 0A 44 41 B3 8B 44 41 B3 00
-46 41 33 03 4D 41 33 0E 48 41 B3 8E 45 41 B3 08
-49 41 23 90 77 00 23 91 57 01 23 92 77 01 23 93
-17 00 23 94 67 00 23 95 C7 01 23 96 D7 01 23 97
-17 01 C1 07 E3 9F D7 F8 05 0F B3 06 FC 41 E3 95
-E9 EF F6 40 66 44 13 1C 05 01 D6 44 46 49 B6 49
-26 4A 96 4A 06 4B F2 5B D2 5C 42 5D B2 5D 13 55
-0C 41 62 5C 25 61 82 80 12 44 D2 4F E2 44 72 4A
-A2 4B 33 0B 30 41 33 07 F4 01 13 18 2B 00 01 4D
-01 4E 81 46 01 46 93 15 3B 00 B3 02 07 01 B3 00
-57 40 93 8D C0 FF 93 DE 2D 00 93 8C 1E 00 13 F3
-3C 00 16 8F 63 0F 03 10 05 4C 63 0A 83 05 89 48
-63 05 13 03 F2 83 03 AE 02 00 93 17 0D 01 13 DD
-07 01 F2 96 63 D1 D4 1C 13 0B AD 00 13 14 0B 01
-13 5D 04 41 81 46 13 8F 42 00 F2 8F 03 2E 0F 00
-93 10 0D 01 93 DD 00 01 F2 96 63 D5 D4 18 93 86
-AD 00 13 9C 06 01 13 5D 0C 41 81 46 11 0F F2 88
-03 2E 0F 00 93 13 0D 01 93 D7 03 01 F2 96 63 D6
-D4 14 13 84 A7 00 93 1F 04 01 93 10 04 01 93 DE
-0F 01 13 DD 00 41 81 46 11 0F 63 1C E7 09 93 03
-16 00 33 87 B2 40 63 0C C5 F8 1E 86 B9 B7 33 2E
-BE 01 83 2A 4F 00 33 83 CC 01 13 1C 03 01 93 53
-0C 41 93 97 03 01 33 0B 5D 01 11 0F 13 D9 07 01
-63 DD 64 09 03 23 4F 00 93 0E A9 00 93 9C 0E 01
-93 DD 0C 41 01 4B 13 9E 0D 01 B3 06 6B 00 13 5C
-0E 01 63 DE D4 08 03 2E 8F 00 93 07 AC 00 13 99
-07 01 93 5A 09 41 81 46 13 9B 0A 01 F2 96 13 54
-0B 01 63 DF D4 08 13 03 A4 00 13 1C 03 01 93 18
-03 01 93 5E 0C 01 13 DD 08 41 81 46 31 0F E3 08
-E7 F7 83 2D 0F 00 93 1E 0D 01 93 DC 0E 01 33 8D
-B6 01 E3 D6 A4 F7 83 2A 4F 00 93 86 AC 00 93 98
-06 01 93 D3 08 41 01 4D 93 97 03 01 33 0B 5D 01
-11 0F 13 D9 07 01 E3 C7 64 F7 33 A4 5D 01 03 23
-4F 00 B3 0F 89 00 93 90 0F 01 93 DD 00 41 13 9E
-0D 01 B3 06 6B 00 13 5C 0E 01 E3 C6 D4 F6 B3 A8
-6A 00 03 2E 8F 00 B3 03 1C 01 13 9D 03 01 93 5A
-0D 41 13 9B 0A 01 F2 96 13 54 0B 01 E3 C5 D4 F6
-B3 2F C3 01 B3 00 F4 01 93 9D 00 01 93 9C 00 01
-93 DE 0D 01 13 DD 0C 41 95 B7 33 AD C8 01 B3 8A
-A7 01 13 99 0A 01 13 9B 0A 01 93 5E 09 01 13 5D
-0B 41 5D BD B3 AE CF 01 B3 8C DD 01 13 93 0C 01
-13 5D 03 41 A5 BD 33 AF C3 01 B3 0A ED 01 13 99
-0A 01 13 5D 09 41 81 B5 92 4A B3 0B 30 41 13 95
-2B 00 56 99 01 4E 81 4A 81 48 81 46 13 96 3B 00
-B3 0D A9 00 33 0D B9 41 13 03 CD FF 13 57 23 00
-93 03 17 00 93 F0 73 00 6E 88 63 88 00 24 85 4F
-63 8E F0 0F 89 4E 63 89 D0 0D 0D 4F 63 84 E0 0B
-91 42 63 8F 50 06 15 4C 63 8A 80 05 99 4C 63 85
-90 03 72 88 03 AE 0D 00 93 97 0A 01 13 DB 07 01
-F2 98 63 DB 14 3B 93 08 AB 00 13 93 08 01 93 5A
-03 41 81 48 13 88 4D 00 72 87 03 2E 08 00 93 93
-0A 01 93 D0 03 01 F2 98 63 DF 14 37 93 82 A0 00
-13 9C 02 01 93 5A 0C 41 81 48 11 08 F2 8C 03 2E
-08 00 93 97 0A 01 13 DB 07 01 F2 98 63 D4 14 35
-93 08 AB 00 13 93 08 01 93 5A 03 41 81 48 11 08
-72 87 03 2E 08 00 93 93 0A 01 93 D0 03 01 F2 98
-63 D9 14 31 93 82 A0 00 13 9C 02 01 93 5A 0C 41
-81 48 11 08 F2 8C 03 2E 08 00 93 97 0A 01 13 DB
-07 01 F2 98 63 DE 14 2D 93 08 AB 00 13 93 08 01
-93 5A 03 41 81 48 11 08 72 87 03 2E 08 00 93 93
-0A 01 93 D0 03 01 F2 98 63 D3 14 2B 93 82 A0 00
-13 9C 02 01 93 5A 0C 41 81 48 11 08 F2 8C 03 2E
-08 00 93 97 0A 01 13 DB 07 01 F2 98 63 D4 14 27
-93 08 AB 00 13 93 08 01 93 93 08 01 13 5B 03 01
-93 DA 03 41 81 48 11 08 63 11 28 13 93 83 16 00
-33 89 CD 40 E3 8D D5 8A 9E 86 5D B5 33 2E 1E 00
-83 2B 48 00 33 8F CE 01 93 12 0F 01 93 D7 02 41
-93 9A 07 01 33 07 7B 01 11 08 13 DD 0A 01 63 D2
-E4 12 03 2F 48 00 93 0F AD 00 93 9E 0F 01 93 D0
-0E 41 01 47 13 9E 00 01 33 0C E7 01 93 52 0E 01
-63 D3 84 13 03 27 88 00 93 8A A2 00 13 9D 0A 01
-93 5B 0D 41 01 4C 93 98 0B 01 B3 00 EC 00 93 D3
-08 01 63 D4 14 12 03 2C C8 00 13 8E A3 00 93 12
-0E 01 13 DF 02 41 81 40 93 1C 0F 01 33 8B 80 01
-93 D7 0C 01 63 D5 64 13 83 20 08 01 93 88 A7 00
-93 93 08 01 13 D7 03 41 01 4B 13 13 07 01 B3 0E
-1B 00 93 5F 03 01 63 D6 D4 13 03 2B 48 01 93 8C
-AF 00 93 97 0C 01 13 DC 07 41 81 4E 93 1B 0C 01
-33 8D 6E 01 93 DA 0B 01 63 D7 A4 13 03 2E 88 01
-13 83 AA 00 93 1F 03 01 93 D0 0F 41 01 4D 93 9E
-00 01 B3 08 CD 01 13 DF 0E 01 63 D8 14 13 93 0B
-AF 00 13 9D 0B 01 13 97 0B 01 13 5B 0D 01 93 5A
-07 41 81 48 71 08 E3 03 28 EF 83 20 08 00 93 9F
-0A 01 93 DE 0F 01 33 8B 18 00 E3 D1 64 EF 83 2B
-48 00 13 8C AE 00 93 1C 0C 01 93 D7 0C 41 01 4B
-93 9A 07 01 33 07 7B 01 11 08 13 DD 0A 01 E3 C2
-E4 EE B3 A8 70 01 03 2F 48 00 33 03 1D 01 93 13
-03 01 93 D0 03 41 13 9E 00 01 33 0C E7 01 93 52
-0E 01 E3 C1 84 EF B3 AC EB 01 03 27 88 00 B3 87
-92 01 13 9B 07 01 93 5B 0B 41 93 98 0B 01 B3 00
-EC 00 93 D3 08 01 E3 C0 14 EE 33 23 EF 00 03 2C
-C8 00 B3 8F 63 00 93 9E 0F 01 13 DF 0E 41 93 1C
-0F 01 33 8B 80 01 93 D7 0C 01 E3 CF 64 ED B3 2B
-87 01 83 20 08 01 B3 8A 77 01 13 9D 0A 01 13 57
-0D 41 13 13 07 01 B3 0E 1B 00 93 5F 03 01 E3 CE
-D4 ED 33 2F 1C 00 03 2B 48 01 33 8E EF 01 93 12
-0E 01 13 DC 02 41 93 1B 0C 01 33 8D 6E 01 93 DA
-0B 01 E3 CD A4 ED 33 A7 60 01 B3 88 EA 00 03 2E
-88 01 93 93 08 01 93 D0 03 41 93 9E 00 01 B3 08
-CD 01 13 DF 0E 01 E3 CC 14 ED B3 22 CB 01 33 0C
-5F 00 93 1C 0C 01 93 17 0C 01 13 DB 0C 01 93 DA
-07 41 C9 BD B3 AB CC 01 B3 0A 7B 01 13 9D 0A 01
-13 97 0A 01 13 5B 0D 01 93 5A 07 41 69 BB B3 2F
-C7 01 B3 8E F0 01 13 9F 0E 01 93 5A 0F 41 B1 BB
-B3 AB CC 01 B3 0A 7B 01 13 9D 0A 01 93 5A 0D 41
-1D B3 B3 2F C7 01 B3 8E F0 01 13 9F 0E 01 93 5A
-0F 41 C5 B9 B3 AB CC 01 B3 0A 7B 01 13 9D 0A 01
-93 5A 0D 41 6D B9 B3 2F C7 01 B3 8E F0 01 13 9F
-0E 01 93 5A 0F 41 51 B1 B3 2B C8 01 B3 0A 7B 01
-13 9D 0A 01 93 5A 0D 41 B1 B1 81 47 01 47 81 4D
-6F E0 1F 84 01 49 81 48 6F E0 1F C8 41 11 14 45
-2E 87 22 C4 4C 45 32 84 50 41 08 41 06 C6 EF E0
-4F B2 B3 46 A4 00 13 77 F5 0F 93 17 05 01 93 F2
-16 00 13 D3 07 01 13 56 17 00 13 58 14 00 63 8B
-02 00 E9 70 93 83 10 00 33 45 78 00 93 15 05 01
-13 D8 05 01 B3 48 C8 00 13 FE 18 00 93 5E 27 00
-93 52 18 00 63 0B 0E 00 69 7F 93 0F 1F 00 33 C4
-F2 01 93 16 04 01 93 D2 06 01 B3 C7 D2 01 93 F0
-17 00 13 56 37 00 93 D8 12 00 63 8B 00 00 E9 73
-93 85 13 00 33 C5 B8 00 13 18 05 01 93 58 08 01
-33 CE C8 00 93 7E 1E 00 13 5F 47 00 93 D7 18 00
-63 8B 0E 00 E9 7F 13 84 1F 00 B3 C6 87 00 93 92
-06 01 93 D7 02 01 B3 C0 E7 01 93 F3 10 00 13 56
-57 00 13 DE 17 00 63 8B 03 00 E9 75 13 88 15 00
-33 45 0E 01 93 18 05 01 13 DE 08 01 B3 4E CE 00
-13 FF 1E 00 93 5F 67 00 93 50 1E 00 63 0B 0F 00
-69 74 93 06 14 00 B3 C2 D0 00 93 97 02 01 93 D0
-07 01 B3 C3 F0 01 13 F6 13 00 1D 83 13 DE 10 00
-11 CA E9 75 13 88 15 00 33 45 0E 01 93 18 05 01
-13 DE 08 01 93 7E 1E 00 93 52 1E 00 63 8B EE 00
-69 7F 93 0F 1F 00 33 C4 F2 01 93 16 04 01 93 D2
-06 01 93 57 83 00 B3 C0 57 00 93 F3 10 00 13 56
-83 00 93 D8 12 00 13 53 93 00 63 8B 03 00 69 77
-93 05 17 00 33 C8 B8 00 13 15 08 01 93 58 05 01
-33 4E 13 01 93 7E 1E 00 13 5F 26 00 93 D0 18 00
-63 8B 0E 00 E9 7F 13 84 1F 00 B3 C6 80 00 93 92
-06 01 93 D0 02 01 B3 C7 E0 01 93 F3 17 00 13 53
-36 00 93 D8 10 00 63 8B 03 00 69 77 93 05 17 00
-33 C8 B8 00 13 15 08 01 93 58 05 01 33 CE 68 00
-93 7E 1E 00 13 5F 46 00 93 D0 18 00 63 8B 0E 00
-E9 7F 13 84 1F 00 B3 C6 80 00 93 92 06 01 93 D0
-02 01 B3 C7 E0 01 93 F3 17 00 13 53 56 00 93 D8
-10 00 63 8B 03 00 69 77 93 05 17 00 33 C8 B8 00
-13 15 08 01 93 58 05 01 33 CE 68 00 93 7E 1E 00
-13 5F 66 00 93 D0 18 00 63 8B 0E 00 E9 7F 13 84
-1F 00 B3 C6 80 00 93 92 06 01 93 D0 02 01 B3 C7
-E0 01 93 F3 17 00 1D 82 13 D5 10 00 63 8B 03 00
-69 73 13 07 13 00 B3 45 E5 00 13 98 05 01 13 55
-08 01 93 78 15 00 05 81 63 8B C8 00 69 7E 93 0E
-1E 00 33 4F D5 01 93 1F 0F 01 13 D5 0F 01 B2 40
-22 44 41 01 82 80 79 71 4A D2 22 D6 26 D4 4E D0
-52 CE 56 CC 5A CA 5E C8 62 C6 66 C4 6A C2 2A 87
-36 89 11 E2 05 46 FD 15 13 F4 C5 FF 13 0A 44 00
-81 47 63 02 07 34 93 82 17 00 B3 86 52 02 13 88
-27 00 13 8E 37 00 13 8F 47 00 93 8E 57 00 93 88
-67 00 13 83 77 00 3E 85 A1 07 93 93 36 00 63 F3
-E3 06 B3 09 08 03 16 85 13 9B 39 00 63 7C EB 04
-B3 0B CE 03 42 85 13 9C 3B 00 63 75 EC 04 B3 0C
-EF 03 72 85 13 9D 3C 00 63 7E ED 02 B3 8F DE 03
-7A 85 93 95 3F 00 63 F7 E5 02 33 84 18 03 76 85
-93 1A 34 00 63 F0 EA 02 B3 04 63 02 46 85 93 92
-34 00 63 F9 E2 00 33 88 F7 02 1A 85 13 1E 38 00
-E3 6B EE F6 33 07 A5 02 AA 8A 93 14 17 00 33 04
-9A 00 63 06 05 26 C1 6E 81 46 81 43 85 4F 33 0F
-8A 40 FD 1E 93 09 F5 FF 33 06 F6 03 93 98 0F 01
-93 D7 08 01 13 93 16 00 33 0B 83 00 13 0C F5 FF
-93 7C 3C 00 B3 0B 6F 01 05 4E 13 88 1F 00 13 5D
-F6 41 93 52 0D 01 33 07 56 00 33 76 D7 01 33 06
-56 40 B3 88 C7 00 13 93 08 01 13 5C 03 01 E2 97
-23 10 8B 01 13 FD F7 0F 23 90 AB 01 93 05 2B 00
-63 76 AE 1E 63 83 0C 0E 63 8C CC 09 89 4B 63 86
-7C 05 B3 0C 06 03 42 08 93 52 08 01 B3 08 BF 00
-93 05 4B 00 13 88 2F 00 09 4E 13 D7 FC 41 13 53
-07 01 33 86 6C 00 33 7C D6 01 33 06 6C 40 B3 87
-C2 00 13 9D 07 01 93 5B 0D 01 B3 8C 5B 00 23 11
-7B 01 13 FB FC 0F 23 90 68 01 B3 02 06 03 93 18
-08 01 13 D3 08 01 33 0C BF 00 05 0E 05 08 89 05
-13 D7 F2 41 93 57 07 01 33 86 F2 00 33 7D D6 01
-33 06 FD 40 B3 0B C3 00 93 9C 0B 01 13 DB 0C 01
-B3 02 6B 00 23 9F 65 FF 93 F8 F2 0F 23 10 1C 01
-33 03 06 03 13 1C 08 01 93 57 0C 01 33 0D BF 00
-89 05 05 0E 05 08 13 57 F3 41 93 5B 07 01 33 06
-73 01 B3 7C D6 01 33 86 7C 41 33 8B C7 00 93 12
-0B 01 93 D8 02 01 33 83 F8 00 23 9F 15 FF 13 7C
-F3 0F 23 10 8D 01 63 73 AE 10 33 06 06 03 93 07
-28 00 13 0B 38 00 13 1D 08 01 93 52 0D 01 93 98
-07 01 13 1D 0B 01 13 D3 08 01 93 58 0D 01 13 07
-18 00 13 5D F6 41 13 5D 0D 01 6A 96 33 76 D6 01
-33 0D A6 41 93 1B 07 01 33 07 ED 02 33 86 A2 01
-13 1D 06 01 13 56 0D 01 B2 92 B3 0C BF 00 23 90
-C5 00 13 FD F2 0F 23 90 AC 01 66 8C 66 86 E6 82
-93 5C F7 41 13 DD 0C 01 6A 97 B3 7C D7 01 33 8D
-AC 41 B3 07 FD 02 93 DB 0B 01 33 87 AB 01 93 1C
-07 01 13 DD 0C 01 EA 9B 23 91 A5 01 13 F7 FB 0F
-23 11 EC 00 A1 05 13 DC F7 41 93 5C 0C 01 E6 97
-33 FD D7 01 B3 0B 9D 41 33 8B 6B 03 33 07 73 01
-13 1C 07 01 93 5C 0C 01 66 93 23 9E 95 FF 93 77
-F3 0F 23 12 F6 00 11 0E 11 08 13 56 FB 41 13 5D
-06 01 B3 0B AB 01 33 FB DB 01 33 06 AB 41 33 87
-C8 00 13 1C 07 01 93 5C 0C 01 E6 98 23 9F 95 FF
-13 F3 F8 0F 23 93 62 00 E3 61 AE F0 85 0F 01 4E
-11 C1 4E 8E 85 03 F2 9F AA 96 E3 E7 A3 DA A2 94
-93 86 F4 FF 23 24 89 00 93 F3 C6 FF 32 54 13 8F
-43 00 23 22 49 01 23 20 59 01 23 26 E9 01 A2 54
-12 59 82 59 72 4A E2 4A 52 4B C2 4B 32 4C A2 4C
-12 4D 45 61 82 80 19 04 FD 5A 7D 55 89 44 A1 BB
-2A 88 63 06 05 3E B3 08 A0 40 13 17 25 00 2E 97
-13 93 28 00 81 45 01 45 81 4F 81 4E 8E 08 B3 06
-E3 00 B3 07 D7 40 93 82 C7 FF 93 D3 22 00 13 8E
-13 00 93 77 7E 00 36 8E 63 80 07 22 05 4F 63 89
-E7 0F 89 42 63 84 57 0C 8D 43 63 81 77 0A 11 4F
-63 8C E7 07 95 42 63 87 57 04 99 43 63 84 77 02
-7E 8E 83 AF 06 00 42 05 13 5F 05 01 FE 9E 63 57
-D6 37 93 0E AF 00 13 9E 0E 01 13 55 0E 41 81 4E
-13 8E 46 00 7E 8F 83 2F 0E 00 42 05 93 52 05 01
-FE 9E 63 5C D6 33 93 8E A2 00 13 95 0E 01 41 85
-81 4E 11 0E FE 82 83 2F 0E 00 93 17 05 01 93 D3
-07 01 FE 9E 63 52 D6 31 93 8E A3 00 93 97 0E 01
-13 D5 07 41 81 4E 11 0E FE 83 83 2F 0E 00 13 1F
-05 01 13 55 0F 01 FE 9E 63 57 D6 2D 93 0E A5 00
-13 9F 0E 01 13 55 0F 41 81 4E 11 0E FE 82 83 2F
-0E 00 42 05 93 53 05 01 FE 9E 63 5D D6 29 93 8E
-A3 00 13 95 0E 01 41 85 81 4E 11 0E FE 83 83 2F
-0E 00 93 17 05 01 13 DF 07 01 FE 9E 63 53 D6 27
-93 0E AF 00 93 97 0E 01 13 D5 07 41 81 4E 11 0E
-7E 8F 83 2F 0E 00 93 12 05 01 13 D5 02 01 FE 9E
-63 58 D6 23 93 0E A5 00 93 92 0E 01 13 D5 02 41
-81 4E 11 0E 63 12 C7 11 85 05 33 87 16 41 E3 10
-B8 EC 82 80 B3 AF 7F 00 B3 07 FF 01 83 2F 4E 00
-93 92 07 01 13 DF 02 41 93 17 0F 01 33 85 FE 01
-11 0E 93 D2 07 01 63 53 A6 10 83 23 4E 00 A9 02
-13 95 02 01 93 57 05 41 01 45 13 9F 07 01 B3 0E
-75 00 93 57 0F 01 63 55 D6 11 83 2F 8E 00 A9 07
-93 9E 07 01 13 DF 0E 41 81 4E 93 12 0F 01 FE 9E
-13 D5 02 01 63 57 D6 11 83 23 CE 00 29 05 93 1E
-05 01 93 D2 0E 41 81 4E 13 9F 02 01 B3 82 7E 00
-93 57 0F 01 63 59 56 10 A9 07 83 2F 0E 01 93 92
-07 01 13 DF 02 41 81 42 13 15 0F 01 B3 8E F2 01
-93 57 05 01 63 5B D6 11 83 23 4E 01 A9 07 93 9E
-07 01 13 D5 0E 41 81 4E 13 1F 05 01 9E 9E 93 52
-0F 01 63 5D D6 11 83 2F 8E 01 A9 02 93 9E 02 01
-13 DF 0E 41 81 4E 13 15 0F 01 FE 9E 93 57 05 01
-63 5F D6 11 13 85 A7 00 93 17 05 01 13 D5 07 41
-81 4E 71 0E E3 02 C7 F1 83 23 0E 00 42 05 13 5F
-05 01 9E 9E E3 50 D6 F1 93 0E AF 00 83 2F 4E 00
-13 95 0E 01 13 5F 05 41 81 4E 93 17 0F 01 33 85
-FE 01 11 0E 93 D2 07 01 E3 41 A6 F0 B3 A3 F3 01
-33 8F 72 00 83 23 4E 00 93 1E 0F 01 93 D7 0E 41
-13 9F 07 01 B3 0E 75 00 93 57 0F 01 E3 4F D6 EF
-B3 AF 7F 00 B3 82 F7 01 83 2F 8E 00 13 95 02 01
-13 5F 05 41 93 12 0F 01 FE 9E 13 D5 02 01 E3 4D
-D6 EF B3 A3 F3 01 33 0F 75 00 83 23 CE 00 93 17
-0F 01 93 D2 07 41 13 9F 02 01 B3 82 7E 00 93 57
-0F 01 E3 4B 56 EE B3 AF 7F 00 33 85 F7 01 83 2F
-0E 01 93 1E 05 01 13 DF 0E 41 13 15 0F 01 B3 8E
-F2 01 93 57 05 01 E3 49 D6 EF B3 A3 F3 01 33 8F
-77 00 83 23 4E 01 93 12 0F 01 13 D5 02 41 13 1F
-05 01 9E 9E 93 52 0F 01 E3 47 D6 EF B3 AF 7F 00
-33 85 F2 01 83 2F 8E 01 93 17 05 01 13 DF 07 41
-13 15 0F 01 FE 9E 93 57 05 01 E3 45 D6 EF B3 A3
-F3 01 33 8F 77 00 93 12 0F 01 13 D5 02 41 D5 B5
-B3 23 FF 01 B3 07 75 00 13 9F 07 01 13 55 0F 41
-C9 BB B3 A2 F3 01 33 05 5F 00 93 13 05 01 13 D5
-03 41 71 BB B3 A7 F2 01 33 8F F3 00 93 12 0F 01
-13 D5 02 41 9D B3 B3 A2 F3 01 B3 07 55 00 93 93
-07 01 13 D5 03 41 15 BB 33 AF F2 01 33 85 E3 01
-93 12 05 01 13 D5 02 41 FD B9 B3 27 FF 01 B3 83
-F2 00 13 9F 03 01 13 55 0F 41 E1 B1 B3 27 FE 01
-B3 02 FF 00 93 93 02 01 13 D5 03 41 51 B9 01 45
-82 80 63 01 05 16 41 11 B3 03 A0 40 13 18 15 00
-22 C6 26 C4 13 94 13 00 4A C2 4E C0 32 98 81 4F
-81 42 8A 03 B3 08 04 01 33 06 18 41 13 03 E6 FF
-93 54 13 00 13 87 14 00 93 97 2F 00 13 79 77 00
-AE 97 46 87 63 0F 09 08 85 49 63 02 39 09 09 4E
-63 07 C9 07 8D 4E 63 0C D9 05 11 4F 63 01 E9 05
-15 46 63 06 C9 02 19 43 63 0B 69 00 83 94 08 00
-13 87 28 00 91 07 33 89 D4 02 23 AE 27 FF 83 19
-07 00 91 07 09 07 33 8E D9 02 23 AE C7 FF 83 1E
-07 00 91 07 09 07 33 8F DE 02 23 AE E7 FF 03 16
-07 00 91 07 09 07 33 03 D6 02 23 AE 67 FE 83 14
-07 00 91 07 09 07 33 89 D4 02 23 AE 27 FF 83 19
-07 00 91 07 09 07 33 8E D9 02 23 AE C7 FF 83 1E
-07 00 91 07 09 07 33 8F DE 02 23 AE E7 FF 63 07
-E8 06 83 19 07 00 03 19 27 00 83 14 47 00 03 1F
-67 00 83 1E 87 00 03 1E A7 00 03 13 C7 00 03 16
-E7 00 B3 89 D9 02 41 07 93 87 07 02 33 09 D9 02
-23 A0 37 FF B3 84 D4 02 23 A2 27 FF 33 0F DF 02
-23 A4 97 FE B3 8E DE 02 23 A6 E7 FF 33 0E DE 02
-23 A8 D7 FF 33 03 D3 02 23 AA C7 FF 33 06 D6 02
-23 AC 67 FE 23 AE C7 FE E3 1D E8 F8 85 02 AA 9F
-33 88 78 40 E3 18 55 EC 32 44 A2 44 12 49 82 49
-41 01 82 80 82 80 63 00 05 1E B3 02 A0 40 93 16
-06 01 93 17 15 00 93 93 12 00 C1 82 33 86 F5 00
-81 4F 8A 02 B3 85 C3 00 33 07 B6 40 13 03 E7 FF
-13 58 13 00 93 08 18 00 13 FE 78 00 AE 87 63 08
-0E 08 85 4E 63 0C DE 07 09 4F 63 02 EE 07 0D 47
-63 08 EE 04 11 43 63 0E 6E 02 15 48 63 04 0E 03
-99 48 63 0A 1E 01 03 DE 05 00 93 87 25 00 B3 8E
-C6 01 23 90 D5 01 03 DF 07 00 89 07 33 87 E6 01
-23 9F E7 FE 03 D3 07 00 89 07 33 88 66 00 23 9F
-07 FF 83 D8 07 00 89 07 33 8E 16 01 23 9F C7 FF
-83 DE 07 00 89 07 33 8F D6 01 23 9F E7 FF 03 D7
-07 00 89 07 33 83 E6 00 23 9F 67 FE 03 D8 07 00
-89 07 B3 88 06 01 23 9F 17 FF 63 09 F6 10 41 11
-22 C6 03 D4 07 00 03 DF 27 00 83 DE 47 00 03 DE
-67 00 03 D3 87 00 83 D8 A7 00 03 D8 C7 00 03 D7
-E7 00 36 94 36 9F B6 9E 36 9E 36 93 B6 98 36 98
-36 97 23 90 87 00 23 91 E7 01 23 92 D7 01 23 93
-C7 01 23 94 67 00 23 95 17 01 23 96 07 01 23 97
-E7 00 C1 07 E3 17 F6 FA 85 0F 33 86 55 40 63 04
-F5 0B B3 85 C3 00 B3 07 B6 40 13 84 E7 FF 13 5F
-14 00 93 0E 1F 00 13 FE 7E 00 AE 87 E3 03 0E F8
-05 43 63 04 6E 06 89 48 63 0A 1E 05 0D 48 63 00
-0E 05 11 47 63 06 EE 02 15 44 63 0C 8E 00 19 4F
-63 1C EE 07 03 D3 07 00 89 07 B3 88 66 00 23 9F
-17 FF 03 D8 07 00 89 07 33 87 06 01 23 9F E7 FE
-03 D4 07 00 89 07 33 8F 86 00 23 9F E7 FF 83 DE
-07 00 89 07 33 8E D6 01 23 9F C7 FF 03 D3 07 00
-89 07 B3 88 66 00 23 9F 17 FF 03 D8 07 00 89 07
-33 87 06 01 23 9F E7 FE E3 15 F6 F0 85 0F 33 86
-55 40 E3 10 F5 F7 32 44 41 01 82 80 85 0F 33 86
-55 40 E3 11 F5 E5 82 80 83 DE 05 00 93 87 25 00
-33 8E D6 01 23 90 C5 01 B5 BF 63 08 05 1A 79 71
-26 D2 AA 84 4E CE 93 99 24 00 4A D0 2E 85 32 89
-81 45 4E 86 22 D4 06 D6 36 84 52 CC 56 CA 5A C8
-5E C6 62 C4 66 C2 EF 30 30 49 93 96 14 00 AA 85
-A2 96 4E 95 01 46 33 83 86 40 93 00 E3 FF 93 D2
-10 00 93 83 12 00 93 17 16 00 93 F8 73 00 CA 97
-22 87 01 4E 63 85 08 0A 05 48 63 87 08 09 09 4A
-63 8B 48 07 8D 4A 63 8F 58 05 11 4B 63 83 68 05
-95 4B 63 87 78 03 19 4C 63 8B 88 01 83 9C 07 00
-03 1E 04 00 89 07 13 07 24 00 33 8E CC 03 83 9E
-07 00 03 1F 07 00 89 07 09 07 B3 8F EE 03 7E 9E
-83 99 07 00 03 13 07 00 89 07 09 07 B3 80 69 02
-06 9E 83 92 07 00 83 13 07 00 89 07 09 07 B3 88
-72 02 46 9E 03 98 07 00 03 1A 07 00 89 07 09 07
-B3 0A 48 03 56 9E 03 9B 07 00 83 1B 07 00 89 07
-09 07 33 0C 7B 03 62 9E 83 9C 07 00 83 1E 07 00
-09 07 89 07 33 8F DC 03 7A 9E 63 85 E6 08 83 9F
-07 00 83 19 07 00 83 90 27 00 83 1A 27 00 B3 88
-3F 03 03 98 47 00 03 1C 47 00 83 92 67 00 83 1B
-67 00 83 9C 87 00 03 1B 87 00 03 9F A7 00 03 1A
-A7 00 83 9E C7 00 B3 8F 50 03 83 19 C7 00 03 93
-E7 00 83 13 E7 00 46 9E 41 07 C1 07 B3 00 88 03
-B3 0A FE 01 33 8C 72 03 33 88 1A 00 B3 82 6C 03
-B3 0B 88 01 B3 08 4F 03 B3 8C 5B 00 33 8B 3E 03
-33 8F 1C 01 33 0A 73 02 B3 0E 6F 01 33 8E 4E 01
-E3 9F E6 F6 23 A0 C5 01 91 05 26 96 E3 15 B5 EA
-B2 50 22 54 92 54 02 59 F2 49 62 4A D2 4A 42 4B
-B2 4B 22 4C 92 4C 45 61 82 80 82 80 5D 71 86 C6
-A2 C4 A6 C2 CA C0 4E DE 52 DC 56 DA 5A D8 5E D6
-62 D4 66 D2 6A D0 6E CE 2E C4 36 C6 63 0F 05 1A
-13 14 15 00 AA 8A B2 89 33 09 86 00 93 14 25 00
-01 4B 81 4B A2 47 13 1F 2B 00 26 86 33 85 E7 01
-81 45 EF 30 70 2C 32 46 2A 8F 81 4F 33 07 39 41
-93 00 E7 FF 93 D2 10 00 13 83 12 00 93 73 73 00
-B2 85 CE 86 81 47 63 86 03 0A 05 48 63 88 03 09
-89 48 63 8C 13 07 0D 4A 63 80 43 07 11 4C 63 84
-83 05 95 4C 63 88 93 03 19 4D 63 8C A3 01 83 9D
-09 00 03 1E 06 00 93 86 29 00 B3 05 86 00 B3 87
-CD 03 83 9E 06 00 03 95 05 00 89 06 A2 95 33 87
-AE 02 BA 97 83 90 06 00 83 92 05 00 89 06 A2 95
-33 83 50 02 9A 97 83 93 06 00 03 98 05 00 89 06
-A2 95 B3 88 03 03 C6 97 03 9A 06 00 03 9C 05 00
-89 06 A2 95 B3 0C 8A 03 E6 97 03 9D 06 00 83 9D
-05 00 89 06 A2 95 33 0E BD 03 F2 97 83 9E 06 00
-03 95 05 00 89 06 A2 95 33 87 AE 02 BA 97 63 03
-D9 0A 03 93 06 00 83 93 05 00 B3 80 85 00 B3 82
-80 00 33 07 73 02 03 9E 00 00 03 9D 26 00 33 88
-82 00 83 9D 02 00 03 9A 46 00 B3 08 88 00 83 1C
-08 00 83 90 66 00 B3 8E 88 00 33 0D CD 03 03 93
-86 00 03 9C 08 00 83 92 A6 00 83 93 0E 00 33 85
-8E 00 03 98 C6 00 B3 05 85 00 83 1E 05 00 BA 97
-33 0A BA 03 03 95 E6 00 03 9E 05 00 B3 8D A7 01
-C1 06 A2 95 B3 80 90 03 B3 88 4D 01 33 07 83 03
-B3 8C 18 00 33 83 72 02 33 8C EC 00 B3 02 D8 03
-B3 03 6C 00 33 08 C5 03 33 8D 53 00 B3 07 0D 01
-E3 11 D9 F6 23 20 FF 00 93 86 1F 00 11 0F 09 06
-63 84 DA 00 B6 8F 59 B5 13 8F 1B 00 A2 99 56 9B
-22 99 63 84 FB 01 FA 8B B1 BD B6 40 26 44 96 44
-06 49 F2 59 62 5A D2 5A 42 5B B2 5B 22 5C 92 5C
-02 5D F2 4D 61 61 82 80 63 04 05 1C 79 71 4E CE
-93 19 15 00 22 D4 26 D2 4A D0 52 CC 56 CA 5A C8
-5E C6 62 C4 06 D6 2A 8B 2E 84 B6 84 B2 8A 33 0A
-36 01 13 19 25 00 81 4B 01 4C 13 98 2B 00 33 05
-04 01 4A 86 81 45 EF 30 30 0D AA 83 A6 88 01 43
-B3 07 5A 41 93 80 E7 FF 93 D2 10 00 93 85 12 00
-13 F6 35 00 46 85 D6 86 81 4E 59 C2 05 47 63 0C
-E6 04 09 4E 63 06 C6 03 83 9E 0A 00 03 9F 08 00
-93 86 2A 00 33 85 38 01 B3 8F EE 03 13 D8 2F 40
-93 D7 5F 40 93 70 F8 00 93 F2 F7 07 B3 8E 50 02
-83 95 06 00 03 16 05 00 89 06 4E 95 33 8E C5 02
-13 57 2E 40 13 5F 5E 40 93 7F F7 00 13 78 FF 07
-B3 87 0F 03 BE 9E 83 90 06 00 83 12 05 00 89 06
-4E 95 B3 85 50 02 13 D6 25 40 13 DE 55 40 13 77
-F6 00 13 7F FE 07 B3 0F E7 03 FE 9E 63 03 DA 0A
-33 08 35 01 83 90 06 00 83 12 05 00 B3 07 38 01
-03 9E 26 00 03 17 08 00 83 9F 07 00 33 85 37 01
-03 96 46 00 33 8F 50 02 03 18 05 00 83 95 66 00
-A1 06 4E 95 B3 00 EE 02 93 52 2F 40 13 5E 5F 40
-13 F7 F2 00 93 77 FE 07 33 06 F6 03 13 DF 50 40
-93 DF 20 40 93 72 FF 07 93 F0 FF 00 B3 85 05 03
-13 5E 56 40 13 58 26 40 93 7F F8 00 13 76 FE 07
-B3 07 F7 02 13 DF 55 40 13 D7 25 40 13 78 F7 00
-93 75 FF 07 B3 80 50 02 BE 9E B3 82 CF 02 33 8E
-1E 00 B3 0F B8 02 33 06 5E 00 B3 0E F6 01 E3 11
-DA F6 23 A0 D3 01 93 06 13 00 91 03 89 08 63 04
-DB 00 36 83 75 B5 93 03 1C 00 CE 9A DA 9B 4E 9A
-63 04 6C 00 1E 8C 51 B5 B2 50 22 54 92 54 02 59
-F2 49 62 4A D2 4A 42 4B B2 4B 22 4C 45 61 82 80
-82 80 13 03 F5 FF 85 47 B2 88 63 FA 67 16 85 05
-93 92 05 01 93 D5 02 01 37 06 04 F0 93 D3 35 00
-9D 4E 93 F6 75 00 01 47 13 06 86 0A A1 4F 11 48
-05 4E 13 0F C0 02 93 F7 33 00 63 8C D6 11 63 68
-D8 12 93 83 D6 FF 93 92 03 01 8A 07 93 D6 02 01
-B3 03 F6 00 63 68 DE 10 83 A6 03 01 A5 47 A1 43
-B3 02 F7 00 63 F5 62 12 41 11 22 C6 35 A0 63 66
-88 0C 93 06 D4 FF 93 97 06 01 13 94 23 00 93 D2
-07 01 B3 03 86 00 63 65 5E 0A 83 A6 03 01 A5 42
-A1 43 BA 92 63 F3 62 08 03 C4 06 00 B3 87 E8 00
-23 80 87 00 03 C7 16 00 A3 80 E7 00 03 C4 26 00
-23 81 87 00 03 C7 36 00 A3 81 E7 00 63 84 03 03
-03 C4 46 00 23 82 87 00 03 C7 56 00 A3 82 E7 00
-03 C4 66 00 23 83 87 00 63 96 F3 01 83 C6 76 00
-A3 83 D7 00 85 05 BE 93 93 97 05 01 93 D5 07 01
-23 80 E3 01 16 87 13 F4 75 00 93 D2 35 00 93 F3
-32 00 E3 16 D4 F7 93 96 23 00 A5 42 B3 07 D6 00
-BA 92 94 5B A1 43 E3 E1 62 F8 63 79 A7 02 32 44
-33 06 E5 40 81 45 33 85 E8 00 41 01 6F 30 C0 61
-83 A6 03 00 95 42 91 43 A9 BF 13 94 23 00 B3 03
-86 00 83 A6 03 02 A5 42 A1 43 A1 B7 32 44 41 01
-82 80 93 92 27 00 B3 03 56 00 83 A6 03 03 A5 47
-A1 43 FD BD 83 A6 03 00 95 47 91 43 D5 BD 93 92
-27 00 B3 06 56 00 94 52 A5 47 A1 43 D5 B5 01 47
-33 06 E5 40 81 45 33 85 E8 00 6F 30 E0 5B E3 69
-A7 FE 82 80 1C 41 2A 8E 01 45 03 C7 07 00 3E 88
-61 C3 93 06 C0 02 13 88 17 00 63 07 D7 24 88 41
-13 06 07 FD 93 72 F6 0F A5 48 13 03 15 00 63 E4
-58 0A 23 A0 65 00 83 C8 17 00 63 8A 08 12 13 87
-27 00 63 85 D8 12 13 86 08 FD 13 0F E0 02 A5 4F
-93 07 C0 02 93 76 F6 0F 63 84 E8 03 63 E4 DF 0A
-83 48 18 00 13 05 17 00 3A 88 63 81 08 10 63 8C
-F8 20 13 86 08 FD 2A 87 93 76 F6 0F E3 90 E8 FF
-03 A3 05 01 15 45 93 03 13 00 23 A8 75 00 03 43
-18 00 3A 88 63 0E 03 02 13 08 C0 02 93 08 17 00
-63 01 03 1D 93 0E 50 04 25 4F 93 0F C0 02 93 07
-03 FD 13 76 F3 0D 93 F6 F7 0F 63 0C D6 0B 63 7F
-DF 14 83 A2 45 01 46 88 05 45 13 87 12 00 D8 C9
-23 20 0E 01 82 80 93 03 B0 02 63 0F 77 02 93 0E
-D0 02 63 0B D7 03 13 0F E0 02 63 04 E7 15 83 AF
-45 00 23 A0 65 00 05 45 93 87 1F 00 DC C1 23 20
-0E 01 82 80 83 A2 05 01 3A 88 05 45 13 87 12 00
-98 C9 23 20 0E 01 82 80 23 A0 65 00 03 C6 17 00
-63 0E 06 14 13 88 27 00 63 0A D6 14 94 45 13 07
-06 FD 93 72 F7 0F 25 45 93 88 16 00 63 7C 55 00
-13 03 E0 02 63 03 66 10 23 A4 15 01 05 45 23 20
-0E 01 82 80 23 A4 15 01 83 C8 27 00 63 89 08 00
-93 0E C0 02 13 07 18 00 E3 9F D8 ED 3A 88 11 45
-85 B7 C8 49 93 03 15 00 23 AA 75 00 83 4E 17 00
-63 89 0E 0E 13 0F C0 02 13 88 18 00 63 84 EE 0F
-83 AF C5 00 93 87 5E FD 13 F6 D7 0F 93 86 1F 00
-D4 C5 09 C6 05 45 23 20 0E 01 82 80 83 C2 18 00
-63 84 02 0C 13 88 28 00 63 80 E2 0D 03 A3 85 01
-13 87 02 FD 13 75 F7 0F 93 0E 13 00 A5 43 23 AC
-D5 01 E3 E9 A3 FC 83 C2 28 00 63 8A 02 08 13 87
-38 00 63 85 E2 09 A5 48 13 0F C0 02 93 8F 02 FD
-13 F6 FF 0F 63 F9 C8 00 D4 41 3A 88 05 45 93 87
-16 00 DC C1 F1 B5 83 42 18 00 13 03 17 00 3A 88
-63 8E 02 04 63 86 E2 07 1A 87 C9 BF 03 43 17 00
-13 88 18 00 46 87 63 0E 03 02 63 0D F3 03 C2 88
-BD BD 23 A0 65 00 03 C3 17 00 63 05 03 02 93 88
-27 00 63 00 D3 02 42 87 B1 BD 23 A4 15 01 03 C3
-27 00 63 09 03 00 93 03 C0 02 93 08 18 00 E3 14
-73 FE 46 88 15 45 AD B5 01 45 9D B5 3A 88 1D 45
-85 B5 46 88 0D 45 A9 BD 19 45 99 BD 09 45 89 BD
-1A 88 1D 45 B1 B5 2A 88 11 45 99 B5 19 71 A2 DC
-A6 DA CA D8 D2 D4 D6 D2 DA D0 DE CE 86 DE CE D6
-2E 89 83 C5 05 00 4A C6 02 D8 02 C8 02 DA 02 DC
-02 DE 82 C0 82 C2 82 C4 82 C6 02 CA 02 CC 02 CE
-02 D0 02 D2 02 D4 02 D6 04 18 2A 8A B2 8B 36 8B
-BA 8A 3E 84 E3 8C 05 1C 93 09 C1 00 A6 85 4E 85
-15 33 AA 87 93 92 27 00 98 08 33 03 57 00 B2 46
-83 23 03 FC A6 85 03 C6 06 00 13 88 13 00 23 20
-03 FD 4E 85 35 CA FD 39 AA 88 13 9E 28 00 93 0E
-01 05 33 8F CE 01 B2 47 83 2F 0F FC A6 85 83 C2
-07 00 13 87 1F 00 23 20 EF FC 4E 85 63 86 02 04
-D1 39 2A 83 93 13 23 00 94 08 33 86 76 00 B2 48
-03 28 06 FC A6 85 03 CE 08 00 93 0E 18 00 23 20
-D6 FD 4E 85 63 02 0E 02 75 31 0A 05 8C 08 33 8F
-A5 00 B2 47 83 2F 0F FC 83 C2 07 00 13 87 1F 00
-23 20 EF FC E3 94 02 F6 4A C6 4A 9A 83 45 09 00
-E3 7C 49 13 93 00 C0 02 4A 83 B3 C9 75 01 63 80
-15 02 23 00 33 01 B2 43 33 83 53 01 1A C6 63 7C
-43 01 83 45 03 00 B3 C9 75 01 E3 94 15 FE 56 93
-1A C6 E3 68 43 FF 83 4B 09 00 4A C6 93 09 C1 00
-63 83 0B 0A A6 85 4E 85 35 39 AA 86 13 96 26 00
-13 08 01 05 B3 08 C8 00 B2 4E 03 AE 08 FC A6 85
-03 CF 0E 00 93 0F 1E 00 23 A0 F8 FD 4E 85 63 09
-0F 06 09 39 AA 87 93 92 27 00 98 08 33 03 57 00
-B2 4B 83 23 03 FC A6 85 83 C6 0B 00 13 86 13 00
-23 20 C3 FC 4E 85 A9 C6 F5 36 2A 88 93 18 28 00
-13 0E 01 05 B3 0E 1E 01 B2 4F 03 AF 0E FC A6 85
-83 C7 0F 00 93 02 1F 00 23 A0 5E FC 4E 85 8D C3
-D1 36 0A 05 8C 08 33 83 A5 00 32 47 83 23 03 FC
-83 4B 07 00 93 86 13 00 23 20 D3 FC E3 94 0B F6
-4A C6 63 72 49 03 93 00 C0 02 83 49 09 00 33 C6
-69 01 E3 87 19 02 23 00 C9 00 32 48 33 09 58 01
-4A C6 E3 64 49 FF 69 7A 14 08 26 86 13 0E 1A 00
-83 AE 06 00 93 53 14 00 33 C4 8E 00 13 FF FE 0F
-93 9F 0E 01 93 78 14 00 93 D2 0F 01 13 55 1F 00
-63 88 08 00 B3 C7 C3 01 93 95 07 01 93 D3 05 01
-33 C3 A3 00 13 77 13 00 93 5B 2F 00 93 D0 13 00
-19 C7 B3 CA C0 01 13 9B 0A 01 93 50 0B 01 B3 C9
-70 01 13 F9 19 00 13 58 3F 00 93 DF 10 00 63 08
-09 00 33 CA CF 01 13 14 0A 01 93 5F 04 01 B3 C8
-0F 01 13 F5 18 00 93 55 4F 00 13 D7 1F 00 19 C5
-B3 47 C7 01 93 93 07 01 13 D7 03 01 33 C3 E5 00
-93 7B 13 00 93 5A 5F 00 93 59 17 00 63 88 0B 00
-33 CB C9 01 93 10 0B 01 93 D9 00 01 33 C9 59 01
-13 78 19 00 13 5A 6F 00 13 D5 19 00 63 08 08 00
-33 44 C5 01 93 1F 04 01 13 D5 0F 01 B3 48 AA 00
-93 F5 18 00 13 5F 7F 00 13 57 15 00 99 C5 B3 47
-C7 01 93 93 07 01 13 D7 03 01 13 73 17 00 13 5B
-17 00 63 08 E3 01 B3 4B CB 01 93 9A 0B 01 13 DB
-0A 01 93 D0 82 00 B3 C9 60 01 13 F9 19 00 13 D8
-82 00 93 5F 1B 00 93 D2 92 00 63 08 09 00 33 CA
-CF 01 13 14 0A 01 93 5F 04 01 33 C5 F2 01 93 75
-15 00 93 58 28 00 93 D3 1F 00 99 C5 33 CF C3 01
-93 17 0F 01 93 D3 07 01 33 C7 78 00 13 73 17 00
-93 5B 38 00 93 D0 13 00 63 08 03 00 B3 CA C0 01
-13 9B 0A 01 93 50 0B 01 B3 C9 1B 00 13 F9 19 00
-93 52 48 00 93 DF 10 00 63 08 09 00 33 CA CF 01
-13 14 0A 01 93 5F 04 01 33 C5 F2 01 93 75 15 00
-93 58 58 00 93 D3 1F 00 99 C5 33 CF C3 01 93 17
-0F 01 93 D3 07 01 33 C7 78 00 13 73 17 00 93 5B
-68 00 93 D0 13 00 63 08 03 00 B3 CA C0 01 13 9B
-0A 01 93 50 0B 01 B3 C9 1B 00 13 F9 19 00 13 58
-78 00 13 D4 10 00 63 08 09 00 B3 42 C4 01 13 9A
-02 01 13 54 0A 01 93 7F 14 00 13 5F 14 00 63 88
-0F 01 33 45 CF 01 93 15 05 01 13 DF 05 01 93 D8
-0E 01 B3 C7 E8 01 93 F3 F8 0F 13 F7 17 00 93 DE
-0E 01 13 D3 13 00 13 5B 1F 00 19 C7 B3 4B CB 01
-93 9A 0B 01 13 DB 0A 01 B3 40 63 01 93 F9 10 00
-13 D9 23 00 13 5A 1B 00 63 88 09 00 33 48 CA 01
-93 12 08 01 13 DA 02 01 33 44 49 01 93 7F 14 00
-13 D5 33 00 93 57 1A 00 63 88 0F 00 B3 C5 C7 01
-13 9F 05 01 93 57 0F 01 B3 48 F5 00 13 F7 18 00
-13 D3 43 00 13 DB 17 00 19 C7 B3 4B CB 01 93 9A
-0B 01 13 DB 0A 01 B3 40 63 01 93 F9 10 00 13 D9
-53 00 13 5A 1B 00 63 88 09 00 33 48 CA 01 93 12
-08 01 13 DA 02 01 33 44 49 01 93 7F 14 00 13 D5
-63 00 93 57 1A 00 63 88 0F 00 B3 C5 C7 01 13 9F
-05 01 93 57 0F 01 B3 48 F5 00 13 F7 18 00 93 D3
-73 00 93 DA 17 00 19 C7 33 C3 CA 01 93 1B 03 01
-93 DA 0B 01 13 FB 1A 00 13 D9 1A 00 63 08 7B 00
-B3 40 C9 01 93 99 00 01 13 D9 09 01 13 D8 8E 00
-B3 42 28 01 13 FA 12 00 13 D4 8E 00 13 5F 19 00
-93 DE 9E 00 63 08 0A 00 B3 4F CF 01 13 95 0F 01
-13 5F 05 01 B3 C5 EE 01 93 F8 15 00 13 57 24 00
-13 53 1F 00 63 88 08 00 B3 47 C3 01 93 93 07 01
-13 D3 03 01 B3 4B 67 00 93 FA 1B 00 13 5B 34 00
-13 59 13 00 63 88 0A 00 B3 40 C9 01 93 99 00 01
-13 D9 09 01 33 48 2B 01 93 72 18 00 13 5A 44 00
-13 55 19 00 63 88 02 00 B3 4E C5 01 93 9F 0E 01
-13 D5 0F 01 33 4F AA 00 93 75 1F 00 93 58 54 00
-93 53 15 00 99 C5 33 C7 C3 01 93 17 07 01 93 D3
-07 01 33 C3 78 00 93 7B 13 00 93 5A 64 00 93 D9
-13 00 63 88 0B 00 33 CB C9 01 93 10 0B 01 93 D9
-00 01 33 C9 3A 01 13 78 19 00 1D 80 93 DE 19 00
-63 08 08 00 B3 C2 CE 01 13 9A 02 01 93 5E 0A 01
-93 FF 1E 00 93 D8 1E 00 63 88 8F 00 33 C5 C8 01
-13 1F 05 01 93 58 0F 01 0C 42 93 D9 18 00 33 C7
-15 01 93 F3 F5 0F 13 93 05 01 93 77 17 00 93 5B
-03 01 93 DA 13 00 99 C7 33 CB C9 01 93 10 0B 01
-93 D9 00 01 33 C9 3A 01 13 78 19 00 93 D2 23 00
-93 DE 19 00 63 08 08 00 33 C4 CE 01 13 1A 04 01
-93 5E 0A 01 B3 CF D2 01 13 F5 1F 00 13 DF 33 00
-13 D3 1E 00 19 C5 B3 48 C3 01 13 97 08 01 13 53
-07 01 B3 47 6F 00 93 FA 17 00 13 DB 43 00 13 59
-13 00 63 88 0A 00 B3 40 C9 01 93 99 00 01 13 D9
-09 01 33 48 2B 01 93 72 18 00 13 DA 53 00 93 5F
-19 00 63 88 02 00 33 C4 CF 01 93 1E 04 01 93 DF
-0E 01 33 45 FA 01 13 7F 15 00 93 D8 63 00 93 DA
-1F 00 63 08 0F 00 33 C7 CA 01 13 13 07 01 93 5A
-03 01 B3 C7 58 01 13 FB 17 00 93 D3 73 00 13 D9
-1A 00 63 08 0B 00 B3 40 C9 01 93 99 00 01 13 D9
-09 01 13 78 19 00 13 54 19 00 63 08 78 00 B3 42
-C4 01 13 9A 02 01 13 54 0A 01 93 DE 8B 00 B3 CF
-8E 00 13 FF 1F 00 13 D5 8B 00 13 53 14 00 93 DB
-9B 00 63 08 0F 00 B3 48 C3 01 13 97 08 01 13 53
-07 01 B3 CA 6B 00 93 F7 1A 00 13 5B 25 00 93 59
-13 00 99 C7 B3 C3 C9 01 93 90 03 01 93 D9 00 01
-33 49 3B 01 93 72 19 00 13 58 35 00 93 DE 19 00
-63 88 02 00 33 CA CE 01 13 14 0A 01 93 5E 04 01
-B3 4F D8 01 13 FF 1F 00 93 5B 45 00 13 D3 1E 00
-63 08 0F 00 B3 48 C3 01 13 97 08 01 13 53 07 01
-B3 CA 6B 00 93 F7 1A 00 13 5B 55 00 93 59 13 00
-99 C7 B3 C3 C9 01 93 90 03 01 93 D9 00 01 33 49
-3B 01 93 72 19 00 13 58 65 00 93 DE 19 00 63 88
-02 00 33 CA CE 01 13 14 0A 01 93 5E 04 01 B3 4F
-D8 01 13 FF 1F 00 1D 81 13 D7 1E 00 63 08 0F 00
-B3 4B C7 01 93 98 0B 01 13 D7 08 01 13 73 17 00
-13 5B 17 00 63 08 A3 00 B3 4A CB 01 93 97 0A 01
-13 DB 07 01 93 D3 05 01 B3 C0 63 01 93 F9 F3 0F
-13 F9 10 00 C1 81 93 D2 19 00 13 54 1B 00 63 08
-09 00 33 48 C4 01 13 1A 08 01 13 54 0A 01 B3 CE
-82 00 93 FF 1E 00 13 DF 29 00 93 58 14 00 63 88
-0F 00 33 C5 C8 01 93 1B 05 01 93 D8 0B 01 33 47
-1F 01 13 73 17 00 93 DA 39 00 93 D3 18 00 63 08
-03 00 B3 C7 C3 01 13 9B 07 01 93 53 0B 01 B3 C0
-7A 00 13 F9 10 00 93 D2 49 00 13 D4 13 00 63 08
-09 00 33 48 C4 01 13 1A 08 01 13 54 0A 01 B3 CE
-82 00 93 FF 1E 00 13 DF 59 00 93 58 14 00 63 88
-0F 00 33 C5 C8 01 93 1B 05 01 93 D8 0B 01 33 47
-1F 01 13 73 17 00 93 DA 69 00 93 D3 18 00 63 08
-03 00 B3 C7 C3 01 13 9B 07 01 93 53 0B 01 B3 C0
-7A 00 13 F9 10 00 93 D9 79 00 13 DA 13 00 63 08
-09 00 B3 42 CA 01 13 98 02 01 13 5A 08 01 93 7E
-1A 00 13 5F 1A 00 63 88 3E 01 33 44 CF 01 93 1F
-04 01 13 DF 0F 01 13 D5 85 00 B3 4B E5 01 93 F8
-1B 00 13 D7 85 00 93 57 1F 00 A5 81 63 88 08 00
-33 C3 C7 01 93 1A 03 01 93 D7 0A 01 33 CB F5 00
-93 73 1B 00 93 50 27 00 93 D2 17 00 63 88 03 00
-33 C9 C2 01 93 19 09 01 93 D2 09 01 33 C8 50 00
-13 7A 18 00 93 5E 37 00 13 DF 12 00 63 08 0A 00
-33 44 CF 01 93 1F 04 01 13 DF 0F 01 33 C5 EE 01
-93 7B 15 00 93 58 47 00 93 5A 1F 00 63 88 0B 00
-B3 C5 CA 01 13 93 05 01 93 5A 03 01 B3 C7 58 01
-13 FB 17 00 93 53 57 00 93 D9 1A 00 63 08 0B 00
-B3 C0 C9 01 13 99 00 01 93 59 09 01 B3 C2 33 01
-13 F8 12 00 13 5A 67 00 93 DF 19 00 63 08 08 00
-B3 CE CF 01 13 94 0E 01 93 5F 04 01 33 4F FA 01
-13 75 1F 00 1D 83 13 D3 1F 00 19 C5 B3 4B C3 01
-93 98 0B 01 13 D3 08 01 93 75 13 00 13 54 13 00
-63 88 E5 00 B3 4A C4 01 93 97 0A 01 13 D4 07 01
-91 06 11 06 E3 96 D4 80 F6 50 22 85 66 54 D6 54
-46 59 B6 59 26 5A 96 5A 06 5B F6 4B 09 61 82 80
-56 99 4A C6 63 63 49 FD 6F F0 EF FD 33 0A A9 00
-63 6A 49 ED 6F F0 2F FD 63 96 05 F0 6F F0 AF FC
-01 11 26 CA 83 14 05 00 06 CE 22 CC 93 D7 74 40
-4A C8 4E C6 93 F0 17 00 63 8B 00 00 F2 40 62 44
-42 49 B2 49 13 F5 F4 07 D2 44 05 61 82 80 13 D7
-34 40 93 72 F7 00 13 93 42 00 93 F6 74 00 03 D4
-85 03 AA 89 2E 89 33 67 53 00 63 87 06 50 05 45
-63 83 A6 28 13 95 04 01 41 81 A6 8E B3 CF 8E 00
-93 F0 FE 0F 93 F8 1F 00 13 DF 10 00 93 53 14 00
-63 8B 08 00 69 77 93 02 17 00 B3 C7 53 00 13 93
-07 01 93 53 03 01 33 48 7F 00 93 75 18 00 93 D6
-20 00 93 D8 13 00 91 C9 69 76 13 04 16 00 33 CE
-88 00 93 1F 0E 01 93 D8 0F 01 33 CF 16 01 13 77
-1F 00 93 D2 30 00 93 D6 18 00 11 CB 69 73 93 03
-13 00 B3 C7 76 00 13 98 07 01 93 56 08 01 B3 C5
-D2 00 13 F4 15 00 13 D6 40 00 13 D7 16 00 11 C8
-69 7E 93 0F 1E 00 B3 48 F7 01 13 9F 08 01 13 57
-0F 01 B3 42 C7 00 13 F3 12 00 93 D3 50 00 13 54
-17 00 63 0B 03 00 69 78 93 06 18 00 B3 47 D4 00
-93 95 07 01 13 D4 05 01 33 46 74 00 13 7E 16 00
-93 DF 60 00 13 53 14 00 63 0B 0E 00 E9 78 13 8F
-18 00 33 47 E3 01 93 12 07 01 13 D3 02 01 B3 43
-F3 01 13 F8 13 00 93 D0 70 00 13 5E 13 00 63 0B
-08 00 E9 76 93 85 16 00 B3 47 BE 00 13 94 07 01
-13 5E 04 01 13 76 1E 00 93 52 1E 00 63 0B 16 00
-E9 7F 93 88 1F 00 33 CF 12 01 13 17 0F 01 93 52
-07 01 21 81 33 43 55 00 93 73 F5 0F 13 78 13 00
-93 D0 13 00 13 DE 12 00 63 0B 08 00 E9 76 93 85
-16 00 B3 47 BE 00 13 94 07 01 13 5E 04 01 33 46
-1E 00 93 7F 16 00 93 D8 23 00 13 53 1E 00 63 8B
-0F 00 69 7F 13 07 1F 00 B3 42 E3 00 13 95 02 01
-13 53 05 01 33 C8 68 00 93 70 18 00 93 D5 33 00
-93 5F 13 00 63 8B 00 00 E9 76 13 84 16 00 B3 C7
-8F 00 13 9E 07 01 93 5F 0E 01 33 C6 F5 01 93 78
-16 00 13 DF 43 00 13 D8 1F 00 63 8B 08 00 69 77
-93 02 17 00 33 45 58 00 13 13 05 01 13 58 03 01
-B3 40 0F 01 93 F5 10 00 13 D4 53 00 93 58 18 00
-91 C9 E9 76 13 8E 16 00 B3 C7 C8 01 93 9F 07 01
-93 D8 0F 01 33 46 14 01 13 7F 16 00 13 D7 63 00
-93 D0 18 00 63 0B 0F 00 E9 72 13 85 12 00 33 C3
-A0 00 13 18 03 01 93 50 08 01 B3 45 17 00 13 F4
-15 00 93 D3 73 00 93 D8 10 00 11 C8 E9 76 13 8E
-16 00 B3 C7 C8 01 93 9F 07 01 93 D8 0F 01 33 C6
-13 01 13 7F 16 00 13 D8 18 00 63 0B 0F 00 69 77
-93 02 17 00 33 45 58 00 13 13 05 01 13 58 03 01
-13 F5 FE 07 93 F4 04 F0 F2 40 62 44 B3 6E 95 00
-23 1C 09 03 13 E9 0E 08 23 90 29 01 D2 44 42 49
-B2 49 05 61 82 80 D0 55 94 59 03 25 89 02 CC 59
-EF B0 3F F5 33 46 A4 00 93 78 F5 0F 93 1E 05 01
-13 7E 16 00 13 DF 0E 01 93 DF 18 00 13 53 14 00
-63 0B 0E 00 E9 77 93 80 17 00 33 47 13 00 93 12
-07 01 13 D3 02 01 B3 46 F3 01 93 F3 16 00 13 D8
-28 00 13 5E 13 00 63 8B 03 00 E9 75 13 84 15 00
-33 45 8E 00 13 16 05 01 13 5E 06 01 B3 4E 0E 01
-93 FF 1E 00 93 D7 38 00 93 53 1E 00 63 8B 0F 00
-E9 70 13 87 10 00 B3 C2 E3 00 13 93 02 01 93 53
-03 01 B3 C6 F3 00 13 F8 16 00 93 D5 48 00 93 DE
-13 00 63 0B 08 00 69 74 13 06 14 00 33 C5 CE 00
-13 1E 05 01 93 5E 0E 01 B3 CF BE 00 93 F7 1F 00
-93 D0 58 00 13 D8 1E 00 91 CB 69 77 93 02 17 00
-33 43 58 00 93 13 03 01 13 D8 03 01 B3 46 18 00
-93 F5 16 00 13 D4 68 00 93 5F 18 00 91 C9 69 76
-13 0E 16 00 33 C5 CF 01 93 1E 05 01 93 DF 0E 01
-B3 C7 8F 00 93 F0 17 00 93 D8 78 00 13 D8 1F 00
-63 8B 00 00 69 77 93 02 17 00 33 43 58 00 93 13
-03 01 13 D8 03 01 93 76 18 00 13 55 18 00 63 8B
-16 01 E9 75 13 84 15 00 33 46 85 00 13 1E 06 01
-13 55 0E 01 93 5E 8F 00 B3 4F D5 01 93 F0 1F 00
-93 58 8F 00 93 53 15 00 13 5F 9F 00 63 8B 00 00
-E9 77 13 87 17 00 B3 C2 E3 00 13 93 02 01 93 53
-03 01 33 C8 E3 01 93 75 18 00 93 D6 28 00 93 DE
-13 00 91 C9 69 74 13 06 14 00 33 CE CE 00 13 15
-0E 01 93 5E 05 01 B3 CF DE 00 93 F0 1F 00 13 DF
-38 00 93 D3 1E 00 63 8B 00 00 E9 77 13 87 17 00
-B3 C2 E3 00 13 93 02 01 93 53 03 01 33 C8 E3 01
-93 75 18 00 13 D4 48 00 93 DE 13 00 91 C9 E9 76
-13 86 16 00 33 CE CE 00 13 15 0E 01 93 5E 05 01
-B3 CF 8E 00 93 F0 1F 00 13 DF 58 00 93 D3 1E 00
-63 8B 00 00 E9 77 13 87 17 00 B3 C2 E3 00 13 93
-02 01 93 53 03 01 33 C8 E3 01 93 75 18 00 13 D4
-68 00 93 DE 13 00 91 C9 E9 76 13 86 16 00 33 CE
-CE 00 13 15 0E 01 93 5E 05 01 B3 CF 8E 00 93 F0
-1F 00 93 D8 78 00 13 D3 1E 00 63 8B 00 00 69 7F
-93 07 1F 00 33 47 F3 00 93 12 07 01 13 D3 02 01
-93 73 13 00 13 55 13 00 63 8B 13 01 69 78 93 05
-18 00 33 44 B5 00 93 16 04 01 13 D5 06 01 03 56
-C9 03 13 1E 05 01 03 54 89 03 93 5E 0E 41 E3 17
-06 B0 23 1E A9 02 19 B6 93 03 20 02 3A 88 63 54
-77 00 13 08 20 02 83 25 49 01 83 16 29 00 03 16
-09 00 03 25 89 01 A2 87 13 77 F8 0F EF F0 0F 85
-83 55 E9 03 13 14 05 01 93 5E 04 41 03 54 89 03
-E3 96 05 AC 23 1F A9 02 D1 B4 01 11 4A C8 03 19
-05 00 06 CE 22 CC 93 57 79 40 26 CA 52 C4 4E C6
-93 F0 17 00 2E 8A B2 84 13 74 F9 07 63 9E 00 28
-13 57 39 40 93 72 F7 00 93 96 42 00 13 73 79 00
-03 54 86 03 AA 89 33 E7 D2 00 63 00 03 7C 05 45
-63 0D A3 52 13 15 09 01 41 81 CA 8E B3 4F D4 01
-93 F0 FE 0F 93 F8 1F 00 13 DF 10 00 93 53 14 00
-63 8B 08 00 69 77 93 02 17 00 B3 C7 53 00 13 93
-07 01 93 53 03 01 33 C8 E3 01 93 75 18 00 93 D6
-20 00 93 D8 13 00 91 C9 69 76 13 04 16 00 33 CE
-88 00 93 1F 0E 01 93 D8 0F 01 33 CF D8 00 13 77
-1F 00 93 D2 30 00 93 D6 18 00 11 CB 69 73 93 03
-13 00 B3 C7 76 00 13 98 07 01 93 56 08 01 B3 C5
-56 00 13 F4 15 00 13 D6 40 00 13 D7 16 00 11 C8
-69 7E 93 0F 1E 00 B3 48 F7 01 13 9F 08 01 13 57
-0F 01 B3 42 C7 00 13 F3 12 00 93 D3 50 00 13 54
-17 00 63 0B 03 00 69 78 93 06 18 00 B3 47 D4 00
-93 95 07 01 13 D4 05 01 33 46 74 00 13 7E 16 00
-93 DF 60 00 13 53 14 00 63 0B 0E 00 E9 78 13 8F
-18 00 33 47 E3 01 93 12 07 01 13 D3 02 01 B3 43
-F3 01 13 F8 13 00 93 D0 70 00 13 5E 13 00 63 0B
-08 00 E9 76 93 85 16 00 B3 47 BE 00 13 94 07 01
-13 5E 04 01 13 76 1E 00 93 52 1E 00 63 0B 16 00
-E9 7F 93 88 1F 00 33 CF 12 01 13 17 0F 01 93 52
-07 01 21 81 33 43 55 00 93 73 F5 0F 13 78 13 00
-93 D0 13 00 13 DE 12 00 63 0B 08 00 E9 76 93 85
-16 00 B3 47 BE 00 13 94 07 01 13 5E 04 01 33 46
-1E 00 93 7F 16 00 93 D8 23 00 13 53 1E 00 63 8B
-0F 00 69 7F 13 07 1F 00 B3 42 E3 00 13 95 02 01
-13 53 05 01 33 48 13 01 93 70 18 00 93 D5 33 00
-93 5F 13 00 63 8B 00 00 E9 76 13 84 16 00 B3 C7
-8F 00 13 9E 07 01 93 5F 0E 01 33 C6 BF 00 93 78
-16 00 13 DF 43 00 13 D8 1F 00 63 8B 08 00 69 77
-93 02 17 00 33 45 58 00 13 13 05 01 13 58 03 01
-B3 40 E8 01 93 F5 10 00 13 D4 53 00 93 58 18 00
-91 C9 E9 76 13 8E 16 00 B3 C7 C8 01 93 9F 07 01
-93 D8 0F 01 33 C6 88 00 13 7F 16 00 13 D7 63 00
-93 D0 18 00 63 0B 0F 00 E9 72 13 85 12 00 33 C3
-A0 00 13 18 03 01 93 50 08 01 B3 C5 E0 00 13 F4
-15 00 93 D3 73 00 93 D8 10 00 11 C8 E9 76 13 8E
-16 00 B3 C7 C8 01 93 9F 07 01 93 D8 0F 01 33 C6
-13 01 13 7F 16 00 13 D8 18 00 63 0B 0F 00 69 77
-93 02 17 00 33 45 58 00 13 13 05 01 13 58 03 01
-13 F4 FE 07 13 79 09 F0 B3 6E 24 01 23 9C 04 03
-93 E0 0E 08 23 90 19 00 03 19 0A 00 93 59 79 40
-93 F5 19 00 13 78 F9 07 63 9F 05 28 93 53 39 40
-13 FE F3 00 93 16 4E 00 93 77 79 00 83 D9 84 03
-33 67 DE 00 63 8A 07 54 85 42 63 86 57 58 13 15
-09 01 41 81 4A 88 B3 45 38 01 93 70 F8 0F 93 FE
-15 00 13 D7 10 00 93 D8 19 00 63 8B 0E 00 E9 73
-13 8E 13 00 B3 CF C8 01 93 97 0F 01 93 D8 07 01
-33 4F 17 01 93 72 1F 00 93 D6 20 00 93 DE 18 00
-63 8B 02 00 69 76 93 09 16 00 33 C3 3E 01 93 15
-03 01 93 DE 05 01 33 C7 DE 00 93 73 17 00 13 DE
-30 00 93 D2 1E 00 63 8B 03 00 E9 7F 93 88 1F 00
-B3 C7 12 01 13 9F 07 01 93 52 0F 01 B3 C6 C2 01
-13 F6 16 00 93 D9 40 00 93 D3 12 00 11 CA 69 73
-93 05 13 00 B3 CE B3 00 13 97 0E 01 93 53 07 01
-33 CE 33 01 93 7F 1E 00 93 D8 50 00 13 D6 13 00
-63 8B 0F 00 69 7F 93 02 1F 00 B3 47 56 00 93 96
-07 01 13 D6 06 01 B3 49 16 01 13 F3 19 00 93 DE
-60 00 93 5F 16 00 63 0B 03 00 E9 75 13 87 15 00
-B3 C3 EF 00 13 9E 03 01 93 5F 0E 01 B3 C8 FE 01
-13 FF 18 00 93 D0 70 00 93 D9 1F 00 63 0B 0F 00
-E9 72 93 86 12 00 B3 C7 D9 00 13 96 07 01 93 59
-06 01 13 F3 19 00 13 DE 19 00 63 0B 13 00 E9 7E
-93 85 1E 00 33 47 BE 00 93 13 07 01 13 DE 03 01
-21 81 B3 4F C5 01 93 78 F5 0F 13 FF 1F 00 93 D0
-18 00 93 59 1E 00 63 0B 0F 00 E9 72 93 86 12 00
-B3 C7 D9 00 13 96 07 01 93 59 06 01 33 C3 19 00
-93 7E 13 00 13 D7 28 00 93 DF 19 00 63 8B 0E 00
-E9 75 93 83 15 00 33 CE 7F 00 13 15 0E 01 93 5F
-05 01 33 CF EF 00 93 70 1F 00 93 D2 38 00 13 D3
-1F 00 63 8B 00 00 E9 76 13 86 16 00 B3 47 C3 00
-93 99 07 01 13 D3 09 01 B3 4E 53 00 13 F7 1E 00
-93 D3 48 00 13 5F 13 00 11 CB E9 75 13 8E 15 00
-33 45 CF 01 93 1F 05 01 13 DF 0F 01 B3 C0 E3 01
-93 F2 10 00 93 D6 58 00 93 5E 1F 00 63 8B 02 00
-69 76 93 09 16 00 B3 C7 3E 01 13 93 07 01 93 5E
-03 01 33 C7 D6 01 93 73 17 00 13 DE 68 00 93 D0
-1E 00 63 8B 03 00 E9 75 13 85 15 00 B3 CF A0 00
-13 9F 0F 01 93 50 0F 01 B3 42 1E 00 13 F6 12 00
-93 D8 78 00 93 DE 10 00 11 CA E9 76 93 89 16 00
-B3 C7 3E 01 13 93 07 01 93 5E 03 01 33 C7 D8 01
-93 73 17 00 13 DF 1E 00 63 8B 03 00 69 7E 93 05
-1E 00 33 45 BF 00 93 1F 05 01 13 DF 0F 01 13 78
-F8 07 13 79 09 F0 B3 60 28 01 23 9C E4 03 93 E4
-00 08 23 10 9A 00 F2 40 33 05 04 41 62 44 D2 44
-42 49 B2 49 22 4A 05 61 82 80 14 5A CC 58 50 56
-88 54 EF B0 0F F1 33 46 A4 00 93 78 F5 0F 93 1E
-05 01 13 7E 16 00 13 DF 0E 01 93 DF 18 00 13 53
-14 00 63 0B 0E 00 E9 77 93 80 17 00 33 47 13 00
-93 12 07 01 13 D3 02 01 B3 46 F3 01 93 F3 16 00
-13 D8 28 00 13 5E 13 00 63 8B 03 00 E9 75 13 84
-15 00 33 45 8E 00 13 16 05 01 13 5E 06 01 B3 4E
-0E 01 93 FF 1E 00 93 D7 38 00 93 53 1E 00 63 8B
-0F 00 E9 70 13 87 10 00 B3 C2 E3 00 13 93 02 01
-93 53 03 01 B3 C6 F3 00 13 F8 16 00 93 D5 48 00
-93 DE 13 00 63 0B 08 00 69 74 13 06 14 00 33 C5
-CE 00 13 1E 05 01 93 5E 0E 01 B3 CF BE 00 93 F7
-1F 00 93 D0 58 00 13 D8 1E 00 91 CB 69 77 93 02
-17 00 33 43 58 00 93 13 03 01 13 D8 03 01 B3 46
-18 00 93 F5 16 00 13 D4 68 00 93 5F 18 00 91 C9
-69 76 13 0E 16 00 33 C5 CF 01 93 1E 05 01 93 DF
-0E 01 B3 C7 8F 00 93 F0 17 00 93 D8 78 00 13 D8
-1F 00 63 8B 00 00 69 77 93 02 17 00 33 43 58 00
-93 13 03 01 13 D8 03 01 93 76 18 00 13 55 18 00
-63 8B 16 01 E9 75 13 84 15 00 33 46 85 00 13 1E
-06 01 13 55 0E 01 93 5E 8F 00 B3 4F D5 01 93 F0
-1F 00 93 58 8F 00 93 53 15 00 13 5F 9F 00 63 8B
-00 00 E9 77 13 87 17 00 B3 C2 E3 00 13 93 02 01
-93 53 03 01 33 C8 E3 01 93 75 18 00 93 D6 28 00
-93 DE 13 00 91 C9 69 74 13 06 14 00 33 CE CE 00
-13 15 0E 01 93 5E 05 01 B3 CF DE 00 93 F0 1F 00
-13 DF 38 00 93 D3 1E 00 63 8B 00 00 E9 77 13 87
-17 00 B3 C2 E3 00 13 93 02 01 93 53 03 01 33 C8
-E3 01 93 75 18 00 13 D4 48 00 93 DE 13 00 91 C9
-E9 76 13 86 16 00 33 CE CE 00 13 15 0E 01 93 5E
-05 01 B3 CF 8E 00 93 F0 1F 00 13 DF 58 00 93 D3
-1E 00 63 8B 00 00 E9 77 13 87 17 00 B3 C2 E3 00
-13 93 02 01 93 53 03 01 33 C8 E3 01 93 75 18 00
-13 D4 68 00 93 DE 13 00 91 C9 E9 76 13 86 16 00
-33 CE CE 00 13 15 0E 01 93 5E 05 01 B3 CF 8E 00
-93 F0 1F 00 93 D8 78 00 13 D3 1E 00 63 8B 00 00
-69 7F 93 07 1F 00 33 47 F3 00 93 12 07 01 13 D3
-02 01 93 73 13 00 13 55 13 00 63 8B 13 01 69 78
-93 05 18 00 33 44 B5 00 93 16 04 01 13 D5 06 01
-03 D6 C4 03 13 1E 05 01 03 D4 84 03 93 5E 0E 41
-E3 1E 06 84 23 9E A4 02 91 B8 93 03 20 02 3A 88
-63 54 77 00 13 08 20 02 CC 48 83 96 24 00 03 96
-04 00 88 4C A2 87 13 77 F8 0F EF E0 3F 81 83 D5
-E4 03 13 14 05 01 93 5E 04 41 03 D4 84 03 E3 9F
-05 80 23 9F A4 02 19 B8 93 0F 20 02 BA 88 63 54
-F7 01 93 08 20 02 03 96 04 00 83 96 24 00 CC 48
-88 4C CE 87 13 F7 F8 0F EF E0 4F FD 03 D6 E4 03
-13 1F 05 01 83 D9 84 03 13 58 0F 41 E3 15 06 A8
-23 9F A4 02 49 B4 CC 58 94 58 D0 54 88 54 EF B0
-4F C1 33 43 35 01 13 77 F5 0F 13 78 13 00 42 05
-93 5E 05 01 93 55 17 00 93 D7 19 00 63 0B 08 00
-E9 70 93 89 10 00 B3 C3 37 01 13 9E 03 01 93 57
-0E 01 B3 C6 F5 00 93 FF 16 00 93 58 27 00 13 D8
-17 00 63 8B 0F 00 69 76 13 0F 16 00 B3 42 E8 01
-13 93 02 01 13 58 03 01 33 45 18 01 93 75 15 00
-93 50 37 00 93 5F 18 00 91 C9 E9 79 93 83 19 00
-33 CE 7F 00 93 17 0E 01 93 DF 07 01 B3 C6 F0 01
-93 F8 16 00 13 5F 47 00 13 D5 1F 00 63 8B 08 00
-69 76 93 02 16 00 33 43 55 00 13 18 03 01 13 55
-08 01 B3 45 AF 00 93 F0 15 00 93 59 57 00 93 58
-15 00 63 8B 00 00 E9 73 13 8E 13 00 B3 C7 C8 01
-93 9F 07 01 93 D8 0F 01 B3 C6 38 01 13 FF 16 00
-93 52 67 00 93 D5 18 00 63 0B 0F 00 69 76 13 03
-16 00 33 C8 65 00 13 15 08 01 93 55 05 01 B3 C0
-55 00 93 F9 10 00 1D 83 93 D8 15 00 63 8B 09 00
-E9 73 13 8E 13 00 B3 C7 C8 01 93 9F 07 01 93 D8
-0F 01 93 F6 18 00 13 D8 18 00 63 8B E6 00 69 7F
-93 02 1F 00 33 46 58 00 13 13 06 01 13 58 03 01
-13 D5 8E 00 B3 45 05 01 93 F0 15 00 93 D9 8E 00
-93 5F 18 00 93 DE 9E 00 63 8B 00 00 69 77 93 03
-17 00 33 CE 7F 00 93 17 0E 01 93 DF 07 01 B3 C8
-FE 01 13 FF 18 00 93 D6 29 00 13 D5 1F 00 63 0B
-0F 00 E9 72 13 86 12 00 33 43 C5 00 13 18 03 01
-13 55 08 01 B3 C5 A6 00 93 F0 15 00 93 DE 39 00
-93 5F 15 00 63 8B 00 00 69 77 93 03 17 00 33 CE
-7F 00 93 17 0E 01 93 DF 07 01 B3 C8 FE 01 13 FF
-18 00 93 D2 49 00 13 D5 1F 00 63 0B 0F 00 E9 76
-13 86 16 00 33 43 C5 00 13 18 03 01 13 55 08 01
-B3 C5 A2 00 93 F0 15 00 93 DE 59 00 93 5F 15 00
-63 8B 00 00 69 77 93 03 17 00 33 CE 7F 00 93 17
-0E 01 93 DF 07 01 B3 C8 FE 01 13 FF 18 00 93 D2
-69 00 13 D5 1F 00 63 0B 0F 00 E9 76 13 86 16 00
-33 43 C5 00 13 18 03 01 13 55 08 01 B3 C5 A2 00
-93 F0 15 00 93 D9 79 00 93 5F 15 00 63 8B 00 00
-E9 7E 13 87 1E 00 B3 C3 EF 00 13 9E 03 01 93 5F
-0E 01 93 F7 1F 00 13 D5 1F 00 63 8B 37 01 E9 78
-13 8F 18 00 B3 42 E5 01 93 96 02 01 13 D5 06 01
-03 D6 C4 03 13 13 05 01 83 D9 84 03 13 58 03 41
-E3 13 06 80 23 9E A4 02 6F F0 EF FF 03 1E 45 00
-39 71 22 DC 6A C8 06 DE 26 DA 4A D8 4E D6 52 D4
-56 D2 5A D0 5E CE 62 CC 66 CA 6E C6 40 51 2A 8D
-E3 52 C0 0B 2E 8B 01 48 81 4E 81 4C 01 4F 13 7C
-F8 0F 63 4D 0B 38 E3 0D 04 08 A2 87 19 A0 9C 43
-99 C7 83 A2 47 00 83 93 22 00 E3 9A 63 FF 22 8A
-03 26 0A 00 01 47 23 20 EA 00 52 84 3D C6 08 42
-23 20 46 01 52 87 32 84 2D C1 14 41 10 C1 32 87
-2A 84 A1 CE 84 42 88 C2 2A 87 36 84 B9 C4 03 A9
-04 00 94 C0 36 87 26 84 63 01 09 04 83 28 09 00
-23 20 99 00 26 87 4A 84 63 89 08 02 83 A9 08 00
-23 A0 28 01 4A 87 46 84 63 81 09 02 03 AA 09 00
-23 A0 19 01 46 87 4E 84 63 09 0A 00 03 26 0A 00
-4E 87 23 20 EA 00 52 84 59 FA 63 8E 07 30 83 AA
-47 00 13 83 1C 00 93 1B 03 01 83 9D 0A 00 93 DC
-0B 01 93 FF 1D 00 63 8B 0F 00 13 D7 9D 40 93 70
-17 00 06 9F 93 12 0F 01 13 DF 02 01 83 A3 07 00
-63 8A 03 00 03 A6 03 00 90 C3 1C 40 23 A0 F3 00
-23 20 74 00 63 47 0B 00 05 0B 13 1A 0B 01 13 5B
-0A 41 05 08 93 1A 08 01 13 D8 0A 41 E3 11 0E F1
-13 9E 2C 00 33 03 DE 41 B3 0B 6F 00 93 9C 0B 01
-93 D4 0C 01 63 49 B0 66 03 2D 04 00 A2 8D 83 2A
-0D 00 83 2B 4D 00 83 A7 4A 00 03 A5 0A 00 23 22
-FD 00 23 A2 7A 01 23 20 AD 00 23 A0 0A 00 63 48
-0B 22 03 AC 4D 00 83 AD 0D 00 83 18 2C 00 63 82
-68 25 E3 98 0D FE 03 2B 04 00 83 2D 0B 00 6E 87
-83 29 44 00 69 78 93 00 18 00 03 9E 09 00 13 13
-0E 01 93 5C 03 01 13 DD 8C 00 13 7F FE 0F 93 15
-8E 01 13 15 8D 01 13 5A 1F 00 13 5C 2F 00 13 59
-3F 00 93 53 4F 00 93 52 5F 00 93 5F 6F 00 13 56
-7F 00 93 D7 85 41 93 59 85 41 13 DF 9C 00 93 DE
-AC 00 13 DE BC 00 13 D3 CC 00 93 D8 DC 00 13 D8
-EC 00 93 D6 FC 00 B3 CC 97 00 13 FD 1C 00 13 D5
-14 00 63 08 0D 00 B3 44 15 00 93 95 04 01 13 D5
-05 01 B3 4C AA 00 13 FD 1C 00 05 81 63 08 0D 00
-B3 44 15 00 93 95 04 01 13 D5 05 01 B3 4C AC 00
-13 FD 1C 00 05 81 63 08 0D 00 B3 44 15 00 93 95
-04 01 13 D5 05 01 B3 4C A9 00 13 FD 1C 00 05 81
-63 08 0D 00 B3 44 15 00 93 95 04 01 13 D5 05 01
-B3 CC A3 00 13 FD 1C 00 05 81 63 08 0D 00 B3 44
-15 00 93 95 04 01 13 D5 05 01 B3 CC A2 00 13 FD
-1C 00 05 81 63 08 0D 00 B3 44 15 00 93 95 04 01
-13 D5 05 01 B3 CC AF 00 13 FD 1C 00 05 81 63 08
-0D 00 B3 44 15 00 93 95 04 01 13 D5 05 01 93 7C
-15 00 93 55 15 00 63 88 CC 00 33 CD 15 00 93 14
-0D 01 93 D5 04 01 33 C5 B9 00 93 7C 15 00 85 81
-63 88 0C 00 33 CD 15 00 93 14 0D 01 93 D5 04 01
-33 45 BF 00 93 7C 15 00 85 81 63 88 0C 00 33 CD
-15 00 93 14 0D 01 93 D5 04 01 33 C5 BE 00 93 7C
-15 00 85 81 63 88 0C 00 33 CD 15 00 93 14 0D 01
-93 D5 04 01 33 45 BE 00 93 7C 15 00 85 81 63 88
-0C 00 33 CD 15 00 93 14 0D 01 93 D5 04 01 33 45
-B3 00 93 7C 15 00 85 81 63 88 0C 00 33 CD 15 00
-93 14 0D 01 93 D5 04 01 33 C5 B8 00 93 7C 15 00
-85 81 63 88 0C 00 33 CD 15 00 93 14 0D 01 93 D5
-04 01 33 45 B8 00 93 7C 15 00 85 81 63 88 0C 00
-33 CD 15 00 93 14 0D 01 93 D5 04 01 13 F5 15 00
-93 D4 15 00 63 08 D5 00 B3 CC 14 00 13 9D 0C 01
-93 54 0D 01 63 8A 0D 06 83 AD 0D 00 A9 BD 83 AE
-4D 00 83 AD 0D 00 83 C6 0E 00 63 8C 86 01 E3 8C
-0D DC 83 AE 4D 00 83 AD 0D 00 83 C6 0E 00 E3 98
-86 FF 03 2B 04 00 03 27 0B 00 D9 B3 63 02 04 50
-A2 87 21 A0 9C 43 E3 8C 07 C6 D8 43 83 40 07 00
-E3 9A 80 FF AD B1 48 43 85 0E 93 96 0E 01 83 04
-15 00 93 DE 06 01 13 F9 14 00 B3 08 2F 01 93 99
-08 01 13 DF 09 01 39 B3 83 2D 4B 00 01 4E 01 43
-23 A2 BA 01 23 22 7B 01 23 A0 EA 00 23 20 5B 01
-85 49 81 4C 05 4D 93 FA 79 00 85 0C A2 87 01 47
-63 8B 0A 04 05 4B 63 83 6A 05 89 4B 63 8D 7A 03
-8D 40 63 87 1A 02 11 4A 63 81 4A 03 15 4C 63 8B
-8A 01 19 49 63 85 2A 01 1C 40 05 47 A5 C7 9C 43
-05 07 AD C3 9C 43 05 07 B1 CF 9C 43 05 07 B9 CB
-9C 43 05 07 A1 CB 9C 43 05 07 A9 C7 9C 43 05 07
-B1 C3 63 01 37 05 9C 43 05 07 BA 83 85 CF 9C 43
-05 07 8D CB 9C 43 13 87 23 00 8D C7 9C 43 13 87
-33 00 8D C3 9C 43 13 87 43 00 89 CF 9C 43 13 87
-53 00 89 CB 9C 43 13 87 63 00 89 C7 9C 43 13 87
-73 00 E1 F3 CE 86 25 C7 AD CE A5 CF 83 2D 44 00
-83 AA 47 00 03 9B 0D 00 83 9B 2A 00 83 95 2D 00
-93 10 0B 01 13 DC 00 01 13 75 0B F0 13 59 8C 00
-B3 63 25 01 23 90 7D 00 83 98 0A 00 B3 8E 75 41
-13 98 08 01 13 5A 08 01 93 F2 08 F0 93 5F 8A 00
-33 E6 F2 01 23 90 CA 00 63 55 D0 03 3E 8F 9C 43
-FD 16 63 0D 0E 00 23 20 EE 01 7A 8E 51 FF 91 CE
-85 C3 3E 8F FD 16 9C 43 E3 17 0E FE 7A 83 7A 8E
-F5 B7 22 8F 7D 17 00 40 E9 BF 99 C3 3E 84 E1 BD
-23 20 0E 00 63 8E AC 01 86 09 63 08 03 00 9A 87
-01 4E 01 43 81 4C 3E 84 7D BD 23 20 00 00 02 90
-03 27 03 00 63 01 07 22 03 24 43 00 E9 72 93 8C
-12 00 83 1F 04 00 13 96 0F 01 93 56 06 01 93 DE
-86 00 13 FF FF 0F 13 9E 8F 01 13 93 8E 01 93 55
-8E 41 13 5D 1F 00 93 5D 2F 00 93 5A 3F 00 13 5B
-4F 00 93 5B 5F 00 93 50 6F 00 13 5C 7F 00 13 55
-83 41 13 D9 96 00 93 D3 A6 00 93 D7 B6 00 93 D9
-C6 00 93 D8 D6 00 13 D8 E6 00 13 D4 F6 00 33 CA
-95 00 93 72 1A 00 13 D6 14 00 63 88 02 00 B3 44
-96 01 93 9F 04 01 13 D6 0F 01 B3 46 CD 00 13 FF
-16 00 13 53 16 00 63 08 0F 00 B3 4E 93 01 13 9E
-0E 01 13 53 0E 01 33 CA 6D 00 93 72 1A 00 13 56
-13 00 63 88 02 00 B3 44 96 01 93 9F 04 01 13 D6
-0F 01 B3 C6 CA 00 13 FF 16 00 13 53 16 00 63 08
-0F 00 B3 4E 93 01 13 9E 0E 01 13 53 0E 01 33 4A
-6B 00 93 72 1A 00 13 56 13 00 63 88 02 00 B3 44
-96 01 93 9F 04 01 13 D6 0F 01 B3 C6 CB 00 13 FF
-16 00 13 53 16 00 63 08 0F 00 B3 4E 93 01 13 9E
-0E 01 13 53 0E 01 33 CA 60 00 93 72 1A 00 13 56
-13 00 63 88 02 00 B3 44 96 01 93 9F 04 01 13 D6
-0F 01 93 76 16 00 13 5E 16 00 63 88 86 01 33 4F
-9E 01 93 1E 0F 01 13 DE 0E 01 33 43 C5 01 13 7A
-13 00 93 5F 1E 00 63 08 0A 00 B3 C2 9F 01 93 94
-02 01 93 DF 04 01 33 46 F9 01 93 76 16 00 13 DE
-1F 00 99 C6 33 4F 9E 01 93 1E 0F 01 13 DE 0E 01
-33 C3 C3 01 13 7A 13 00 93 5F 1E 00 63 08 0A 00
-B3 C2 9F 01 93 94 02 01 93 DF 04 01 33 C6 F7 01
-93 76 16 00 13 DE 1F 00 99 C6 33 4F 9E 01 93 1E
-0F 01 13 DE 0E 01 33 C3 C9 01 13 7A 13 00 93 5F
-1E 00 63 08 0A 00 B3 C2 9F 01 93 94 02 01 93 DF
-04 01 33 C6 F8 01 93 76 16 00 13 DE 1F 00 99 C6
-33 4F 9E 01 93 1E 0F 01 13 DE 0E 01 33 43 C8 01
-13 7A 13 00 93 5F 1E 00 63 08 0A 00 B3 C2 9F 01
-93 94 02 01 93 DF 04 01 13 F6 1F 00 93 D4 1F 00
-63 08 86 00 B3 C6 94 01 13 9F 06 01 93 54 0F 01
-18 43 E3 16 07 E4 F2 50 62 54 42 59 B2 59 22 5A
-92 5A 02 5B F2 4B 62 4C D2 4C 42 4D B2 4D 26 85
-D2 54 21 61 82 80 05 4A E3 09 04 DA 81 4C 81 4A
-81 4B 93 75 7A 00 85 0B 22 86 01 49 B1 C9 85 4D
-63 83 B5 05 89 4F 63 8D F5 03 0D 47 63 87 E5 02
-91 40 63 81 15 02 95 42 63 8B 55 00 19 4F 63 85
-E5 01 10 40 05 49 25 C6 10 42 05 09 2D C2 10 42
-05 09 31 CE 10 42 05 09 39 CA 10 42 05 09 21 CA
-10 42 05 09 29 C6 10 42 05 09 31 C2 63 01 49 05
-10 42 05 09 CA 83 05 CE 10 42 05 09 0D CA 10 42
-13 89 23 00 0D C6 10 42 13 89 33 00 0D C2 10 42
-13 89 43 00 09 CE 10 42 13 89 53 00 09 CA 10 42
-13 89 63 00 09 C6 10 42 13 89 73 00 61 F2 A2 89
-D2 8D 32 84 63 07 09 02 63 80 0D 04 15 CC 4C 40
-03 A5 49 00 6A 86 EF E0 5F C8 63 57 A0 02 A2 87
-00 40 FD 1D 63 8F 0C 00 23 A0 FC 00 BE 8C E3 1D
-09 FC 63 80 0D 02 19 CC A2 87 FD 1D 00 40 E3 95
-0C FE BE 8A BE 8C E5 B7 CE 87 7D 19 83 A9 09 00
-D1 BF 01 F8 23 A0 0C 00 05 44 63 89 8B 00 06 0A
-56 84 DD BD 01 4C 2E 8B 81 44 AD B8 56 84 AD B8
-83 27 00 00 02 90 01 11 26 CA 44 4D 22 CC 4A C8
-4E C6 06 CE 69 79 23 2C 05 02 23 2E 05 02 AA 89
-01 44 05 09 63 8E 04 40 85 45 4E 85 EF F0 0F F0
-83 D7 89 03 13 77 F5 0F 13 56 17 00 B3 C6 A7 00
-93 F2 16 00 93 D3 17 00 63 88 02 00 B3 C0 23 01
-13 93 00 01 93 53 03 01 B3 C5 C3 00 13 F8 15 00
-93 58 27 00 13 DF 13 00 63 08 08 00 33 4E 2F 01
-93 1E 0E 01 13 DF 0E 01 B3 4F 1F 01 93 F6 1F 00
-93 52 37 00 93 50 1F 00 99 C6 B3 C7 20 01 13 96
-07 01 93 50 06 01 33 C3 50 00 93 73 13 00 93 55
-47 00 13 DE 10 00 63 88 03 00 33 48 2E 01 93 18
-08 01 13 DE 08 01 B3 4E BE 00 13 FF 1E 00 93 5F
-57 00 93 57 1E 00 63 08 0F 00 B3 C6 27 01 93 92
-06 01 93 D7 02 01 33 C6 F7 01 93 70 16 00 13 53
-67 00 13 D8 17 00 63 88 00 00 B3 43 28 01 93 95
-03 01 13 D8 05 01 B3 48 68 00 13 FE 18 00 1D 83
-93 5F 18 00 63 08 0E 00 B3 CE 2F 01 13 9F 0E 01
-93 5F 0F 01 93 F6 1F 00 13 D6 1F 00 63 88 E6 00
-B3 42 26 01 93 97 02 01 13 D6 07 01 21 81 B3 40
-C5 00 13 73 F5 0F 93 F3 10 00 93 55 13 00 13 5E
-16 00 63 88 03 00 33 48 2E 01 93 18 08 01 13 DE
-08 01 33 47 BE 00 93 7E 17 00 13 5F 23 00 93 52
-1E 00 63 88 0E 00 B3 CF 22 01 93 96 0F 01 93 D2
-06 01 B3 C7 E2 01 13 F6 17 00 13 55 33 00 93 D5
-12 00 19 C6 B3 C0 25 01 93 93 00 01 93 D5 03 01
-33 C8 A5 00 93 78 18 00 13 5E 43 00 13 DF 15 00
-63 88 08 00 33 47 2F 01 93 1E 07 01 13 DF 0E 01
-B3 4F CF 01 93 F2 1F 00 93 56 53 00 13 55 1F 00
-63 88 02 00 B3 47 25 01 13 96 07 01 13 55 06 01
-B3 40 D5 00 93 F3 10 00 93 55 63 00 13 5E 15 00
-63 88 03 00 33 48 2E 01 93 18 08 01 13 DE 08 01
-33 47 BE 00 93 7E 17 00 13 53 73 00 93 52 1E 00
-63 88 0E 00 33 CF 22 01 93 1F 0F 01 93 D2 0F 01
-B3 C6 62 00 13 F6 16 00 93 D0 12 00 19 C6 B3 C7
-20 01 13 95 07 01 93 50 05 01 FD 55 23 9C 19 02
-4E 85 EF F0 AF CF 83 D3 89 03 13 78 F5 0F 13 5E
-18 00 B3 C5 A3 00 93 F8 15 00 13 D3 13 00 63 88
-08 00 33 47 23 01 93 1E 07 01 13 D3 0E 01 33 4F
-C3 01 93 7F 1F 00 93 52 28 00 93 57 13 00 63 88
-0F 00 B3 C6 27 01 13 96 06 01 93 57 06 01 B3 C0
-57 00 93 F3 10 00 93 55 38 00 13 D7 17 00 63 88
-03 00 B3 48 27 01 13 9E 08 01 13 57 0E 01 B3 4E
-B7 00 13 F3 1E 00 13 5F 48 00 93 57 17 00 63 08
-03 00 B3 CF 27 01 93 92 0F 01 93 D7 02 01 B3 C6
-E7 01 93 F0 16 00 13 56 58 00 93 D8 17 00 63 88
-00 00 B3 C3 28 01 93 95 03 01 93 D8 05 01 33 CE
-C8 00 13 77 1E 00 93 5E 68 00 93 DF 18 00 19 C7
-33 C3 2F 01 13 1F 03 01 93 5F 0F 01 B3 C2 DF 01
-93 F6 12 00 13 58 78 00 13 D6 1F 00 99 C6 B3 47
-26 01 93 90 07 01 13 D6 00 01 93 73 16 00 13 5E
-16 00 63 88 03 01 B3 45 2E 01 93 98 05 01 13 DE
-08 01 21 81 33 47 C5 01 93 7E F5 0F 13 73 17 00
-13 DF 1E 00 13 58 1E 00 63 08 03 00 B3 4F 28 01
-93 92 0F 01 13 D8 02 01 B3 46 E8 01 93 F0 16 00
-13 D6 2E 00 93 55 18 00 63 88 00 00 B3 C7 25 01
-93 93 07 01 93 D5 03 01 B3 C8 C5 00 13 FE 18 00
-13 D5 3E 00 13 DF 15 00 63 08 0E 00 33 47 2F 01
-13 13 07 01 13 5F 03 01 B3 4F AF 00 93 F2 1F 00
-13 D8 4E 00 13 56 1F 00 63 88 02 00 B3 46 26 01
-93 90 06 01 13 D6 00 01 B3 47 06 01 93 F3 17 00
-93 D5 5E 00 13 55 16 00 63 88 03 00 B3 48 25 01
-13 9E 08 01 13 55 0E 01 33 47 B5 00 13 73 17 00
-13 DF 6E 00 13 58 15 00 63 08 03 00 B3 4F 28 01
-93 92 0F 01 13 D8 02 01 B3 46 E8 01 93 F0 16 00
-93 DE 7E 00 93 53 18 00 63 88 00 00 33 C6 23 01
-93 17 06 01 93 D3 07 01 B3 C5 D3 01 93 F8 15 00
-13 D7 13 00 63 88 08 00 33 4E 27 01 13 15 0E 01
-13 57 05 01 23 9C E9 02 01 CC 05 04 E3 96 84 BE
-F2 40 62 44 D2 44 42 49 B2 49 01 45 05 61 82 80
-23 9D E9 02 05 44 E3 85 84 FE 05 44 F1 B6 95 47
-63 E5 A7 04 B7 02 04 F0 0A 05 13 83 02 09 B3 03
-65 00 83 A5 03 00 82 85 37 16 04 F0 03 25 86 D9
-82 80 B7 18 04 F0 03 A5 08 DA 82 80 37 18 04 F0
-03 25 C8 D9 82 80 37 07 04 F0 03 25 07 0F 82 80
-B7 06 04 F0 03 A5 C6 0E 82 80 01 45 82 80 B3 46
-B5 00 93 F2 16 00 13 57 15 00 13 D6 15 00 63 8B
-02 00 69 73 93 03 13 00 B3 47 76 00 93 95 07 01
-13 D6 05 01 33 48 E6 00 93 78 18 00 13 5E 25 00
-93 52 16 00 63 8B 08 00 E9 7E 13 8F 1E 00 B3 CF
-E2 01 93 96 0F 01 93 D2 06 01 33 C7 C2 01 13 73
-17 00 93 53 35 00 93 D8 12 00 63 0B 03 00 E9 75
-13 86 15 00 B3 C7 C8 00 13 98 07 01 93 58 08 01
-33 CE 78 00 93 7E 1E 00 13 5F 45 00 13 D3 18 00
-63 8B 0E 00 E9 7F 93 86 1F 00 B3 42 D3 00 13 97
-02 01 13 53 07 01 B3 43 E3 01 93 F5 13 00 13 56
-55 00 93 5E 13 00 91 C9 69 78 93 08 18 00 B3 C7
-1E 01 13 9E 07 01 93 5E 0E 01 33 CF CE 00 93 7F
-1F 00 93 56 65 00 93 D5 1E 00 63 8B 0F 00 E9 72
-13 87 12 00 33 C3 E5 00 93 13 03 01 93 D5 03 01
-33 C6 D5 00 13 78 16 00 93 58 75 00 13 DF 15 00
-63 0B 08 00 E9 77 13 8E 17 00 33 45 CF 01 93 1E
-05 01 13 DF 0E 01 93 7F 1F 00 13 55 1F 00 63 8B
-1F 01 E9 76 93 82 16 00 33 47 55 00 13 13 07 01
-13 55 03 01 82 80 B3 C6 A5 00 13 77 F5 0F 93 F2
-16 00 AA 87 13 56 17 00 13 D8 15 00 63 8B 02 00
-E9 75 13 83 15 00 B3 43 68 00 13 95 03 01 13 58
-05 01 B3 48 C8 00 13 FE 18 00 93 5E 27 00 93 55
-18 00 63 0B 0E 00 69 7F 93 0F 1F 00 B3 C6 F5 01
-93 92 06 01 93 D5 02 01 33 C6 D5 01 13 73 16 00
-93 53 37 00 93 DE 15 00 63 0B 03 00 69 78 93 08
-18 00 33 C5 1E 01 13 1E 05 01 93 5E 0E 01 33 CF
-7E 00 93 7F 1F 00 93 56 47 00 93 D3 1E 00 63 8B
-0F 00 E9 72 93 85 12 00 33 C6 B3 00 13 13 06 01
-93 53 03 01 33 C8 D3 00 93 78 18 00 13 5E 57 00
-93 D2 13 00 63 8B 08 00 E9 7E 13 8F 1E 00 33 C5
-E2 01 93 1F 05 01 93 D2 0F 01 B3 C6 C2 01 93 F5
-16 00 13 53 67 00 13 DE 12 00 91 C9 69 76 93 03
-16 00 33 48 7E 00 93 18 08 01 13 DE 08 01 B3 4E
-6E 00 13 FF 1E 00 1D 83 93 55 1E 00 63 0B 0F 00
-E9 7F 93 82 1F 00 33 C5 55 00 93 16 05 01 93 D5
-06 01 13 F3 15 00 13 DE 15 00 63 0B E3 00 69 76
-93 03 16 00 33 48 7E 00 93 18 08 01 13 DE 08 01
-93 DE 87 00 33 CF CE 01 93 7F 1F 00 13 D7 87 00
-13 53 1E 00 A5 83 63 8B 0F 00 E9 72 93 86 12 00
-33 45 D3 00 93 15 05 01 13 D3 05 01 33 C6 67 00
-93 73 16 00 13 58 27 00 93 5F 13 00 63 8B 03 00
-E9 78 13 8E 18 00 B3 CE CF 01 13 9F 0E 01 93 5F
-0F 01 B3 C7 0F 01 93 F2 17 00 93 56 37 00 93 D3
-1F 00 63 8B 02 00 E9 75 13 83 15 00 33 C5 63 00
-13 16 05 01 93 53 06 01 33 C8 D3 00 93 78 18 00
-13 5E 47 00 93 D2 13 00 63 8B 08 00 E9 7E 13 8F
-1E 00 B3 CF E2 01 93 97 0F 01 93 D2 07 01 B3 C6
-C2 01 93 F5 16 00 13 53 57 00 93 D8 12 00 91 C9
-69 76 93 03 16 00 33 C5 78 00 13 18 05 01 93 58
-08 01 33 CE 68 00 93 7E 1E 00 13 5F 67 00 93 D5
-18 00 63 8B 0E 00 E9 7F 93 87 1F 00 B3 C2 F5 00
-93 96 02 01 93 D5 06 01 33 C3 E5 01 13 76 13 00
-1D 83 13 DE 15 00 11 CA E9 73 13 88 13 00 33 45
-0E 01 93 18 05 01 13 DE 08 01 93 7E 1E 00 13 55
-1E 00 63 8B EE 00 69 7F 93 0F 1F 00 B3 47 F5 01
-93 92 07 01 13 D5 02 01 82 80 33 C6 A5 00 93 76
-F5 0F 13 17 05 01 93 72 16 00 AA 87 13 53 07 01
-13 D8 16 00 13 DE 15 00 63 8B 02 00 69 75 93 03
-15 00 B3 45 7E 00 93 98 05 01 13 DE 08 01 B3 4E
-0E 01 13 FF 1E 00 93 DF 26 00 13 55 1E 00 63 0B
-0F 00 69 76 93 02 16 00 33 47 55 00 13 18 07 01
-13 55 08 01 B3 43 F5 01 93 F8 13 00 93 D5 36 00
-93 52 15 00 63 8B 08 00 69 7E 93 0E 1E 00 33 CF
-D2 01 93 1F 0F 01 93 D2 0F 01 33 C6 B2 00 13 77
-16 00 13 D8 46 00 13 DE 12 00 11 CB E9 73 93 88
-13 00 33 45 1E 01 93 15 05 01 13 DE 05 01 B3 4E
-0E 01 13 FF 1E 00 93 DF 56 00 93 53 1E 00 63 0B
-0F 00 E9 72 13 86 12 00 33 C7 C3 00 13 18 07 01
-93 53 08 01 B3 C8 F3 01 93 F5 18 00 13 DE 66 00
-93 D2 13 00 91 C9 E9 7E 13 8F 1E 00 33 C5 E2 01
-93 1F 05 01 93 D2 0F 01 33 C6 C2 01 13 77 16 00
-9D 82 13 DE 12 00 11 CB 69 78 93 03 18 00 B3 48
-7E 00 93 95 08 01 13 DE 05 01 93 7E 1E 00 13 58
-1E 00 63 94 DE 38 13 56 83 00 33 47 C8 00 93 73
-17 00 93 56 83 00 13 5F 18 00 13 53 93 00 63 8B
-03 00 E9 78 93 85 18 00 33 4E BF 00 93 1E 0E 01
-13 DF 0E 01 B3 4F 6F 00 93 F2 1F 00 13 D8 26 00
-13 53 1F 00 63 8B 02 00 69 76 13 07 16 00 33 45
-E3 00 93 13 05 01 13 D3 03 01 B3 48 03 01 93 F5
-18 00 13 DE 36 00 13 58 13 00 91 C9 E9 7E 13 8F
-1E 00 B3 4F E8 01 93 92 0F 01 13 D8 02 01 33 46
-C8 01 93 73 16 00 13 D7 46 00 13 5E 18 00 63 8B
-03 00 69 73 93 08 13 00 33 45 1E 01 93 15 05 01
-13 DE 05 01 B3 4E EE 00 13 FF 1E 00 93 DF 56 00
-13 53 1E 00 63 0B 0F 00 E9 72 13 88 12 00 33 46
-03 01 93 13 06 01 13 D3 03 01 33 47 F3 01 93 78
-17 00 93 D5 66 00 93 5F 13 00 63 8B 08 00 69 7E
-93 0E 1E 00 33 C5 DF 01 13 1F 05 01 93 5F 0F 01
-B3 C2 BF 00 13 F8 12 00 9D 82 93 D8 1F 00 63 0B
-08 00 69 76 93 03 16 00 33 C3 78 00 13 17 03 01
-93 58 07 01 93 F5 18 00 93 DF 18 00 63 8B D5 00
-69 7E 93 0E 1E 00 33 C5 DF 01 13 1F 05 01 93 5F
-0F 01 93 D2 07 01 33 C8 5F 00 93 F3 F2 0F 93 76
-18 00 C1 83 13 D6 13 00 13 DE 1F 00 91 CA 69 73
-13 07 13 00 B3 48 EE 00 93 95 08 01 13 DE 05 01
-B3 4E CE 00 13 FF 1E 00 93 DF 23 00 13 53 1E 00
-63 0B 0F 00 E9 72 13 88 12 00 33 45 03 01 93 16
-05 01 13 D3 06 01 33 46 F3 01 13 77 16 00 93 D8
-33 00 93 5F 13 00 11 CB E9 75 13 8E 15 00 B3 CE
-CF 01 13 9F 0E 01 93 5F 0F 01 B3 C2 1F 01 13 F8
-12 00 93 D6 43 00 93 D8 1F 00 63 0B 08 00 69 73
-13 06 13 00 33 C5 C8 00 13 17 05 01 93 58 07 01
-B3 C5 D8 00 13 FE 15 00 93 DE 53 00 13 D3 18 00
-63 0B 0E 00 69 7F 93 0F 1F 00 B3 42 F3 01 13 98
-02 01 13 53 08 01 B3 46 D3 01 13 F6 16 00 13 D7
-63 00 93 5E 13 00 11 CA E9 78 93 85 18 00 33 C5
-BE 00 13 1E 05 01 93 5E 0E 01 33 CF EE 00 93 7F
-1F 00 93 D3 73 00 13 D6 1E 00 63 8B 0F 00 E9 72
-13 88 12 00 33 43 06 01 93 16 03 01 13 D6 06 01
-13 77 16 00 93 5E 16 00 63 17 77 12 13 DF 87 00
-B3 4F DF 01 93 F3 1F 00 93 D2 87 00 13 D7 1E 00
-A5 83 63 8B 03 00 69 78 13 03 18 00 B3 46 67 00
-13 96 06 01 13 57 06 01 B3 48 F7 00 93 F5 18 00
-13 DE 22 00 93 53 17 00 91 C9 E9 7E 13 8F 1E 00
-33 C5 E3 01 93 1F 05 01 93 D3 0F 01 B3 47 7E 00
-13 F8 17 00 13 D3 32 00 93 D5 13 00 63 0B 08 00
-E9 76 13 86 16 00 33 C7 C5 00 93 18 07 01 93 D5
-08 01 33 4E B3 00 93 7E 1E 00 13 DF 42 00 13 D8
-15 00 63 8B 0E 00 E9 7F 93 83 1F 00 33 45 78 00
-93 17 05 01 13 D8 07 01 33 43 0F 01 13 76 13 00
-93 D6 52 00 93 5E 18 00 11 CA 69 77 93 08 17 00
-B3 C5 1E 01 13 9E 05 01 93 5E 0E 01 33 CF D6 01
-93 7F 1F 00 93 D3 62 00 13 D6 1E 00 63 8B 0F 00
-E9 77 13 88 17 00 33 45 06 01 13 13 05 01 13 56
-03 01 B3 C6 C3 00 93 F8 16 00 93 D2 72 00 13 5F
-16 00 63 8B 08 00 69 77 93 05 17 00 33 4E BF 00
-93 1E 0E 01 13 DF 0E 01 93 7F 1F 00 13 55 1F 00
-63 8A 5F 00 E9 73 93 87 13 00 33 48 F5 00 13 15
-08 01 41 81 82 80 E9 78 93 85 18 00 33 C5 BE 00
-13 1E 05 01 93 5E 0E 01 D1 B5 69 7F 93 0F 1F 00
-33 45 F8 01 93 12 05 01 13 D8 02 01 AD B1 B3 C6
-A5 00 13 77 F5 0F 93 17 05 01 93 F2 16 00 13 D3
-07 01 13 56 17 00 93 D8 15 00 63 8B 02 00 E9 75
-93 83 15 00 33 C5 78 00 13 18 05 01 93 58 08 01
-33 CE C8 00 93 7E 1E 00 13 5F 27 00 93 D5 18 00
-63 8B 0E 00 E9 7F 93 86 1F 00 B3 C2 D5 00 93 97
-02 01 93 D5 07 01 33 C6 E5 01 93 73 16 00 13 58
-37 00 13 DF 15 00 63 8B 03 00 E9 78 13 8E 18 00
-33 45 CF 01 93 1E 05 01 13 DF 0E 01 B3 4F 0F 01
-93 F2 1F 00 93 56 47 00 13 58 1F 00 63 8B 02 00
-E9 77 93 85 17 00 33 46 B8 00 93 13 06 01 13 D8
-03 01 B3 48 D8 00 13 FE 18 00 93 5E 57 00 93 57
-18 00 63 0B 0E 00 69 7F 93 0F 1F 00 33 C5 F7 01
-93 12 05 01 93 D7 02 01 B3 C6 D7 01 93 F5 16 00
-93 53 67 00 93 DE 17 00 91 C9 69 76 13 08 16 00
-B3 C8 0E 01 13 9E 08 01 93 5E 0E 01 33 CF 7E 00
-93 7F 1F 00 1D 83 93 D5 1E 00 63 8B 0F 00 E9 72
-93 87 12 00 33 C5 F5 00 93 16 05 01 93 D5 06 01
-93 F3 15 00 93 DE 15 00 63 8B E3 00 69 76 13 08
-16 00 B3 C8 0E 01 13 9E 08 01 93 5E 0E 01 13 5F
-83 00 B3 4F DF 01 93 F2 1F 00 13 57 83 00 93 D3
-1E 00 13 53 93 00 63 8B 02 00 E9 77 93 86 17 00
-33 C5 D3 00 93 15 05 01 93 D3 05 01 33 46 73 00
-13 78 16 00 93 58 27 00 93 D2 13 00 63 0B 08 00
-69 7E 93 0E 1E 00 33 CF D2 01 93 1F 0F 01 93 D2
-0F 01 33 C3 12 01 93 77 13 00 93 56 37 00 13 D8
-12 00 91 CB E9 75 93 83 15 00 33 45 78 00 13 16
-05 01 13 58 06 01 B3 48 D8 00 13 FE 18 00 93 5E
-47 00 93 55 18 00 63 0B 0E 00 69 7F 93 0F 1F 00
-B3 C2 F5 01 13 93 02 01 93 55 03 01 B3 C7 D5 01
-93 F3 17 00 93 56 57 00 13 DE 15 00 63 8B 03 00
-69 76 13 08 16 00 33 45 0E 01 93 18 05 01 13 DE
-08 01 B3 4E DE 00 13 FF 1E 00 93 5F 67 00 93 53
-1E 00 63 0B 0F 00 E9 72 13 83 12 00 B3 C5 63 00
-93 97 05 01 93 D3 07 01 B3 C6 F3 01 13 F6 16 00
-1D 83 93 DE 13 00 11 CA 69 78 93 08 18 00 33 C5
-1E 01 13 1E 05 01 93 5E 0E 01 13 FF 1E 00 13 D5
-1E 00 63 0B EF 00 E9 7F 93 82 1F 00 33 43 55 00
-93 15 03 01 13 D5 05 01 82 80 01 45 82 80 73 27
-00 B0 B7 17 04 F0 23 AA E7 D8 82 80 73 27 00 B0
-B7 17 04 F0 23 A8 E7 D8 82 80 B7 17 04 F0 B7 12
-04 F0 03 A5 07 D9 03 A3 42 D9 33 05 65 40 82 80
-93 07 80 3E 33 55 F5 02 82 80 85 47 23 00 F5 00
-82 80 23 00 05 00 82 80 AA 82 2A 96 63 56 C5 00
-23 00 B5 00 05 05 DD BF 16 85 82 80 82 80
-@EE0078EE
-75 71 06 C7 B7 17 04 F0 B7 10 04 F0 B7 02 04 F0
-03 A6 07 DA 83 A5 C0 D9 03 A3 02 0F 37 07 04 F0
-83 26 C7 0E B7 13 04 F0 22 C5 26 C3 13 14 06 01
-93 14 03 01 83 A8 83 D9 13 56 04 41 13 D8 04 41
-05 45 4A C1 CE DE D2 DC D6 DA DA D8 DE D6 E2 D4
-E6 D2 EA D0 EE CE 23 07 A1 04 23 16 C1 00 23 17
-B1 00 23 18 01 01 36 D4 63 93 08 00 9D 48 32 49
-46 D6 E3 1B 09 3C E3 0F 08 42 B2 59 B7 0C 04 F0
-13 8D 0C 5C 13 F7 29 00 93 FD 19 00 33 3E E0 00
-6A CA 23 16 01 04 93 FE 49 00 6E 8F B3 85 CD 01
-63 88 0E 00 93 8F 15 00 93 90 0F 01 93 D5 00 01
-93 02 00 7D 33 D5 B2 02 01 44 2A D2 E3 10 0F 3E
-E3 10 07 3C E3 95 0E 3A 63 10 0F 1C 63 17 07 1C
-13 F5 49 00 19 C5 02 56 83 15 C1 00 12 55 EF C0
-6F FC 22 5A 63 0F 0A 6C 37 1C 04 F0 B7 1C 04 F0
-13 0D C1 00 F3 23 00 B0 23 2A 7C D8 6A 85 EF E0
-BF F6 73 2D 00 B0 03 55 C1 00 81 45 23 A8 AC D9
-EF F0 8F D2 AA 85 03 55 E1 00 03 2C 4C D9 EF F0
-AF D1 AA 85 03 55 01 01 B3 0A 8D 41 EF F0 CF D0
-92 54 AA 85 93 9C 04 01 13 D5 0C 01 EF F0 CF CF
-21 68 93 06 58 B0 AA 89 E3 06 D5 3A 63 E6 A6 16
-89 6D 93 82 2D 8F E3 01 55 3C 15 6D 93 00 FD EA
-E3 12 15 3E B7 0C 04 F0 13 85 0C 15 EF 90 4F 86
-93 0B 8D 60 39 68 9D 66 13 0A 48 5A 5E 8C 13 8B
-96 A7 B7 0C 04 F0 83 A8 8C 0E 01 49 01 4D E3 87
-08 3A B7 0D 04 F0 89 A8 03 D6 A4 FF 63 03 46 0F
-37 07 04 F0 D2 86 EA 85 13 05 47 24 EF 90 4F 82
-83 D7 C4 FF 13 8E 17 00 93 1E 0E 01 93 DF 0E 01
-23 9E F4 FF 05 0D 83 A2 8C 0E 7E 99 93 15 0D 01
-13 1F 09 01 13 13 09 01 13 DD 05 01 13 54 0F 01
-13 59 03 41 63 74 5D 10 13 14 4D 00 33 06 A4 01
-13 15 26 00 98 08 B3 04 A7 00 83 A7 C4 FD 23 9E
-04 FE 13 FE 17 00 63 02 0E 02 03 D6 64 FF 63 0E
-66 01 DA 86 EA 85 13 85 0D 1E EF 80 7F FB 83 DE
-C4 FF 93 8F 1E 00 23 9E F4 FF B3 05 A4 01 93 92
-25 00 13 0F 01 05 B3 04 5F 00 83 A8 C4 FD 13 F3
-28 00 63 06 03 02 03 D6 84 FF 63 02 86 03 B7 03
-04 F0 DE 86 EA 85 13 85 03 21 EF 80 7F F7 03 D8
-C4 FF 83 A8 C4 FD 93 06 18 00 23 9E D4 FE 6A 94
-13 16 24 00 88 08 93 F0 48 00 B3 04 C5 00 E3 9D
-00 F0 83 DF C4 FF 3D BF E2 45 EF 80 3F FF B2 59
-2A D8 13 F7 29 00 E3 0D 07 E2 83 17 E1 00 03 16
-C1 00 F2 45 12 55 13 99 07 01 54 18 33 66 C9 00
-EF B0 8F DB B2 59 29 BD 25 6A 13 07 2A A0 E3 09
-E5 20 BD 6B 13 84 5B 9F E3 1E 85 26 B7 05 04 F0
-89 64 13 85 45 18 93 8B 74 FD 39 6B EF 80 5F EF
-13 0A AA E3 5E 8C 13 0B 4B 71 61 BD 92 54 B7 0B
-04 F0 A6 85 13 85 4B 27 EF 80 9F ED 37 0C 04 F0
-D6 85 13 05 CC 28 13 0B 80 3E EF 80 7F EC B3 DD
-6A 03 B7 03 04 F0 13 85 43 2A EE 85 EF 80 5F EB
-13 08 70 3E 63 6F 58 45 B7 0A 04 F0 05 04 13 85
-CA 2B 13 1D 04 01 EF 80 BF E9 13 59 0D 41 03 AF
-8C 0E 22 53 B7 05 04 F0 13 85 85 31 B3 05 E3 03
-37 0A 04 F0 B7 0B 04 F0 37 0C 04 F0 37 0B 04 F0
-B7 0D 04 F0 EF 80 DF E6 93 05 0A 33 13 85 CB 33
-EF 80 1F E6 93 05 4C 35 13 05 0B 37 EF 80 5F E5
-B7 03 04 F0 93 85 8D 38 13 85 03 39 EF 80 5F E4
-CE 85 B7 09 04 F0 13 85 89 3A EF 80 7F E3 32 5A
-13 78 1A 00 63 05 08 0E 83 A8 8C 0E 63 81 08 0E
-01 4D B7 04 04 F0 93 16 4D 00 B3 80 A6 01 13 96
-20 00 98 08 B3 07 C7 00 03 D6 67 FF EA 85 13 85
-44 3C EF 80 FF DF 93 0E 1D 00 93 9F 0E 01 93 DA
-0F 01 93 92 4A 00 03 AE 8C 0E 33 84 52 01 13 1D
-24 00 13 0F 01 05 13 85 44 3C 33 03 AF 01 D6 85
-63 F6 CA 09 03 56 63 FF 93 09 01 05 EF 80 5F DC
-93 85 1A 00 93 9B 05 01 13 DC 0B 01 13 1B 4C 00
-03 AA 8C 0E B3 0D 8B 01 93 93 2D 00 13 85 44 3C
-33 88 79 00 E2 85 63 7B 4C 05 03 56 68 FF EF 80
-3F D9 93 06 1C 00 13 96 06 01 93 5A 06 01 13 97
-4A 00 83 A8 8C 0E B3 07 57 01 13 9E 27 00 93 0E
-01 05 13 85 44 3C B3 8F CE 01 D6 85 63 F0 1A 03
-03 D6 6F FF EF 80 DF D5 93 82 1A 00 03 A5 8C 0E
-13 94 02 01 13 5D 04 01 E3 67 AD F2 32 5A 93 74
-2A 00 FD C0 83 A0 8C 0E 63 8F 00 1E 01 44 37 0A
-04 F0 13 13 44 00 B3 05 83 00 93 9B 25 00 13 0C
-01 05 33 0B 7C 01 03 56 8B FF A2 85 13 05 0A 3E
-EF 80 1F D1 93 03 14 00 93 99 03 01 93 DA 09 01
-13 98 4A 00 83 AD 8C 0E B3 08 58 01 93 96 28 00
-90 08 13 05 0A 3E 33 07 D6 00 D6 85 63 F5 BA 09
-03 56 87 FF 84 08 EF 80 BF CD 93 87 1A 00 93 9E
-07 01 13 D4 0E 01 93 1F 44 00 03 AE 8C 0E B3 82
-8F 00 13 9D 22 00 13 05 0A 3E 33 8F A4 01 A2 85
-63 7B C4 05 03 56 8F FF 93 09 01 05 EF 80 5F CA
-93 05 14 00 93 9B 05 01 13 DC 0B 01 13 1B 4C 00
-03 A3 8C 0E B3 0D 8B 01 93 93 2D 00 13 05 0A 3E
-B3 8A 79 00 E2 85 63 70 6C 02 03 D6 8A FF EF 80
-3F C7 13 08 1C 00 03 A5 8C 0E 93 18 08 01 13 D4
-08 01 E3 68 A4 F2 32 5A 93 70 4A 00 63 91 00 12
-83 A0 8C 0E 81 44 37 0D 04 F0 63 8D 00 0C 93 95
-44 00 33 8B 95 00 93 03 01 05 93 1D 2B 00 B3 89
-B3 01 03 D6 49 FF A6 85 13 05 8D 41 EF 80 5F C2
-13 88 14 00 93 18 08 01 13 D4 08 01 13 1A 44 00
-83 AA 8C 0E B3 06 8A 00 13 96 26 00 98 08 13 05
-8D 41 33 0E C7 00 A2 85 63 76 54 09 03 56 4E FF
-EF 80 1F BF 93 07 14 00 93 9E 07 01 93 DB 0E 01
-93 9F 4B 00 83 A4 8C 0E B3 82 7F 01 13 9F 22 00
-13 03 01 05 13 05 8D 41 33 0C E3 01 DE 85 63 FB
-9B 04 03 56 4C FF EF 80 BF BB 93 85 1B 00 93 9D
-05 01 93 D9 0D 01 93 93 49 00 03 AB 8C 0E B3 8A
-33 01 13 98 2A 00 93 08 01 05 13 05 8D 41 33 84
-08 01 CE 85 63 F0 69 03 03 56 44 FF 13 8A 19 00
-EF 80 1F B8 03 A5 8C 0E 93 16 0A 01 93 D4 06 01
-E3 E7 A4 F2 63 0F 09 64 63 5F 20 63 37 09 04 F0
-13 05 09 48 EF 80 DF B5 BA 40 2A 44 9A 44 0A 49
-F6 59 66 5A D6 5A 46 5B B6 5B 26 5C 96 5C 06 5D
-F6 4D 49 61 82 80 13 7F 4A 00 E3 05 0F FC 83 A6
-8C 0E E9 D2 01 4C 37 0D 04 F0 13 16 4C 00 33 07
-86 01 13 1E 27 00 9C 08 B3 8E C7 01 03 D6 AE FF
-E2 85 13 05 CD 3F EF 80 BF B0 93 02 1C 00 93 94
-02 01 93 DB 04 01 13 9F 4B 00 83 AF 8C 0E 33 03
-7F 01 93 15 23 00 13 0C 01 05 33 0B BC 00 13 05
-CD 3F DE 85 E3 F6 FB E9 03 56 AB FF 13 0A 01 05
-EF 80 1F AD 93 83 1B 00 93 99 03 01 93 DA 09 01
-13 98 4A 00 83 AD 8C 0E B3 08 58 01 13 94 28 00
-13 05 CD 3F B3 06 8A 00 D6 85 E3 FB BA E5 03 D6
-A6 FF EF 80 FF A9 13 87 1A 00 13 1E 07 01 93 54
-0E 01 93 97 44 00 03 A6 8C 0E B3 8E 97 00 93 9F
-2E 00 93 02 01 05 13 05 CD 3F B3 8B F2 01 A6 85
-E3 F0 C4 E2 03 D6 AB FF EF 80 9F A6 13 8F 14 00
-03 A5 8C 0E 13 13 0F 01 13 5C 03 01 E3 67 AC F2
-01 B5 83 A8 8C 0E A2 56 E1 64 13 87 04 6A B3 80
-16 03 37 06 04 F0 93 0F 40 06 13 05 C6 2F B3 87
-E0 02 33 DE B7 03 B3 8E 60 03 33 76 FE 03 B3 D5
-BE 03 EF 80 FF A1 09 65 93 02 F5 70 E3 E1 52 B9
-A5 B6 E9 7A 05 44 37 1C 04 F0 B7 1C 04 F0 13 0D
-C1 00 13 8B 1A 00 93 0D 70 3E 93 1B 24 00 33 8E
-8B 00 13 14 1E 00 22 D4 F3 24 00 B0 23 2A 9C D8
-82 C2 82 C4 81 4B 63 0F 04 40 85 45 6A 85 EF D0
-1F F9 83 5E 41 04 13 7F F5 0F 93 52 1F 00 B3 CF
-AE 00 93 F5 1F 00 93 D3 1E 00 99 C5 B3 C0 63 01
-13 93 00 01 93 53 03 01 B3 C6 53 00 13 F8 16 00
-93 58 2F 00 13 D9 13 00 63 08 08 00 33 47 69 01
-93 17 07 01 13 D9 07 01 33 46 19 01 93 79 16 00
-13 5A 3F 00 93 5E 19 00 63 88 09 00 B3 CA 6E 01
-13 9E 0A 01 93 5E 0E 01 B3 CF 4E 01 93 F5 1F 00
-93 52 4F 00 93 D3 1E 00 99 C5 B3 C0 63 01 13 93
-00 01 93 53 03 01 B3 C6 53 00 13 F8 16 00 93 58
-5F 00 13 D9 13 00 63 08 08 00 33 47 69 01 93 17
-07 01 13 D9 07 01 33 46 19 01 93 79 16 00 13 5A
-6F 00 93 5E 19 00 63 88 09 00 B3 CA 6E 01 13 9E
-0A 01 93 5E 0E 01 B3 CF 4E 01 93 F5 1F 00 13 5F
-7F 00 13 D3 1E 00 99 C5 B3 42 63 01 93 90 02 01
-13 D3 00 01 93 73 13 00 93 58 13 00 63 88 E3 01
-B3 C6 68 01 13 98 06 01 93 58 08 01 21 81 33 47
-15 01 13 79 F5 0F 13 76 17 00 93 59 19 00 93 DA
-18 00 19 C6 B3 C7 6A 01 13 9A 07 01 93 5A 0A 01
-33 CE 3A 01 93 7E 1E 00 93 5F 29 00 93 D2 1A 00
-63 88 0E 00 B3 C5 62 01 13 9F 05 01 93 52 0F 01
-B3 C0 F2 01 13 F3 10 00 93 53 39 00 93 D8 12 00
-63 08 03 00 B3 C6 68 01 13 98 06 01 93 58 08 01
-33 C5 78 00 13 76 15 00 13 57 49 00 13 DA 18 00
-19 C6 B3 49 6A 01 93 97 09 01 13 DA 07 01 B3 4A
-EA 00 13 FE 1A 00 93 5E 59 00 13 5F 1A 00 63 08
-0E 00 B3 4F 6F 01 93 95 0F 01 13 DF 05 01 B3 42
-DF 01 93 F0 12 00 13 53 69 00 13 58 1F 00 63 88
-00 00 B3 43 68 01 93 96 03 01 13 D8 06 01 B3 48
-68 00 13 F6 18 00 13 59 79 00 93 59 18 00 19 C6
-33 C5 69 01 13 17 05 01 93 59 07 01 B3 C7 29 01
-13 FA 17 00 93 DE 19 00 63 08 0A 00 B3 CA 6E 01
-13 9E 0A 01 93 5E 0E 01 FD 55 6A 85 23 12 D1 05
-EF D0 FF D8 83 5F 41 04 13 7F F5 0F 13 53 1F 00
-B3 C5 AF 00 93 F2 15 00 13 D8 1F 00 63 88 02 00
-B3 40 68 01 93 93 00 01 13 D8 03 01 B3 46 68 00
-93 F8 16 00 13 56 2F 00 93 59 18 00 63 88 08 00
-33 C9 69 01 13 17 09 01 93 59 07 01 B3 C7 C9 00
-13 FA 17 00 93 5A 3F 00 93 DF 19 00 63 08 0A 00
-33 CE 6F 01 93 1E 0E 01 93 DF 0E 01 B3 C5 5F 01
-93 F2 15 00 13 53 4F 00 13 D8 1F 00 63 88 02 00
-B3 40 68 01 93 93 00 01 13 D8 03 01 B3 46 68 00
-93 F8 16 00 13 56 5F 00 93 59 18 00 63 88 08 00
-33 C9 69 01 13 17 09 01 93 59 07 01 B3 C7 C9 00
-13 FA 17 00 93 5A 6F 00 93 DF 19 00 63 08 0A 00
-33 CE 6F 01 93 1E 0E 01 93 DF 0E 01 B3 C5 5F 01
-93 F2 15 00 13 5F 7F 00 93 D3 1F 00 63 88 02 00
-33 C3 63 01 93 10 03 01 93 D3 00 01 13 F8 13 00
-13 D6 13 00 63 08 E8 01 B3 46 66 01 93 98 06 01
-13 D6 08 01 21 81 33 49 C5 00 93 79 F5 0F 13 77
-19 00 13 DA 19 00 13 5E 16 00 19 C7 B3 47 6E 01
-93 9A 07 01 13 DE 0A 01 B3 4E 4E 01 93 FF 1E 00
-93 D5 29 00 13 53 1E 00 63 88 0F 00 B3 42 63 01
-13 9F 02 01 13 53 0F 01 B3 40 B3 00 93 F3 10 00
-13 D8 39 00 13 56 13 00 63 88 03 00 B3 46 66 01
-93 98 06 01 13 D6 08 01 33 45 06 01 13 79 15 00
-13 D7 49 00 93 5A 16 00 63 08 09 00 33 CA 6A 01
-93 17 0A 01 93 DA 07 01 33 CE EA 00 93 7E 1E 00
-93 DF 59 00 13 DF 1A 00 63 88 0E 00 B3 45 6F 01
-93 92 05 01 13 DF 02 01 33 43 FF 01 93 70 13 00
-93 D3 69 00 93 58 1F 00 63 88 00 00 33 C8 68 01
-93 16 08 01 93 D8 06 01 33 C6 78 00 13 79 16 00
-93 D9 79 00 13 DA 18 00 63 08 09 00 33 45 6A 01
-13 17 05 01 13 5A 07 01 B3 47 3A 01 93 FA 17 00
-93 5F 1A 00 63 88 0A 00 33 CE 6F 01 93 1E 0E 01
-93 DF 0E 01 23 12 F1 05 63 8C 0B 02 85 0B E3 16
-74 BF 22 54 F3 25 00 B0 23 A8 BC D8 B3 84 95 40
-E3 FD 9D BA 13 0B 80 3E B3 DD 64 03 A9 42 33 DF
-B2 03 13 03 1F 00 B3 00 64 02 06 D4 6F F0 8F CB
-23 13 F1 05 85 4B 55 BE 85 49 63 18 39 C3 63 16
-08 C2 37 3A 15 34 93 0A 5A 41 13 0B 60 06 8D 6B
-56 C6 23 18 61 01 13 86 5B 41 6F F0 0F C1 33 08
-A4 02 B3 08 0D 01 46 D0 63 0A 0F C4 6F F0 CF E0
-33 03 A4 02 93 06 14 00 93 93 06 01 13 D4 03 01
-B3 04 6D 00 26 CE 63 89 0E C2 D1 BF 6A CC 05 44
-63 02 07 C2 F1 BF B7 0C 04 F0 13 85 4C 49 EF 80
-2F D2 D9 B2 13 0C 60 06 23 18 81 01 01 46 6F F0
-CF BB B7 00 04 F0 13 85 40 43 EF 80 6F D0 6D B2
-B7 07 04 F0 13 85 47 0F EF 80 8F CF 31 6E 93 0B
-2E E5 99 6E B5 6F 13 8A 7E E4 5E 8C 13 8B 0F 4B
-6F F0 2F C9 B7 08 04 F0 13 85 48 12 EF 80 4F CD
-05 66 93 0B 96 19 11 69 0D 65 13 0A F9 9B 5E 8C
-13 0B 05 34 6F F0 EF C6 37 0F 04 F0 13 05 4F 1B
-EF 80 0F CB 25 63 B9 63 13 0A 43 D8 93 0B 70 74
-13 0C 70 74 13 8B 13 3C 6F F0 AF C4 92 54 01 44
-6F F0 EF DA 41 6A 13 04 FA FF 7D 59 B7 0C 04 F0
-6F F0 EF D9
-@F0040000
-7C 02 00 EE 58 00 00 EE 58 00 00 EE 58 00 00 EE
-58 00 00 EE 58 00 00 EE 58 00 00 EE 58 00 00 EE
-58 00 00 EE 58 00 00 EE 58 00 00 EE 76 03 00 EE
-40 08 00 EE 58 00 00 EE 58 00 00 EE 58 00 00 EE
-58 00 00 EE 58 00 00 EE 58 00 00 EE 58 00 00 EE
-58 00 00 EE 58 00 00 EE 58 00 00 EE 60 06 00 EE
-58 00 00 EE 58 00 00 EE 58 00 00 EE F0 05 00 EE
-58 00 00 EE 84 03 00 EE 58 00 00 EE 58 00 00 EE
-7C 02 00 EE A8 05 04 F0 B0 05 04 F0 B8 05 04 F0
-FA 6D 00 EE D2 6D 00 EE DC 6D 00 EE E6 6D 00 EE
-F0 6D 00 EE C8 6D 00 EE 88 05 04 F0 90 05 04 F0
-98 05 04 F0 A0 05 04 F0 58 05 04 F0 64 05 04 F0
-70 05 04 F0 7C 05 04 F0 28 05 04 F0 34 05 04 F0
-40 05 04 F0 4C 05 04 F0 F8 04 04 F0 04 05 04 F0
-10 05 04 F0 1C 05 04 F0 01 00 00 00 01 00 00 00
-66 00 00 00 36 6B 20 70 65 72 66 6F 72 6D 61 6E
-63 65 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 36 6B 20 76 61 6C 69 64 61 74 69 6F
-6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72 73
-20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A 00
-50 72 6F 66 69 6C 65 20 67 65 6E 65 72 61 74 69
-6F 6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 32 4B 20 70 65 72 66 6F 72 6D 61 6E
-63 65 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72
-73 20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A
-00 00 00 00 32 4B 20 76 61 6C 69 64 61 74 69 6F
-6E 20 72 75 6E 20 70 61 72 61 6D 65 74 65 72 73
-20 66 6F 72 20 63 6F 72 65 6D 61 72 6B 2E 0A 00
-5B 25 75 5D 45 52 52 4F 52 21 20 6C 69 73 74 20
-63 72 63 20 30 78 25 30 34 78 20 2D 20 73 68 6F
-75 6C 64 20 62 65 20 30 78 25 30 34 78 0A 00 00
-5B 25 75 5D 45 52 52 4F 52 21 20 6D 61 74 72 69
-78 20 63 72 63 20 30 78 25 30 34 78 20 2D 20 73
-68 6F 75 6C 64 20 62 65 20 30 78 25 30 34 78 0A
-00 00 00 00 5B 25 75 5D 45 52 52 4F 52 21 20 73
-74 61 74 65 20 63 72 63 20 30 78 25 30 34 78 20
-2D 20 73 68 6F 75 6C 64 20 62 65 20 30 78 25 30
-34 78 0A 00 43 6F 72 65 4D 61 72 6B 20 53 69 7A
-65 20 20 20 20 3A 20 25 75 0A 00 00 54 6F 74 61
-6C 20 74 69 63 6B 73 20 20 20 20 20 20 3A 20 25
-75 0A 00 00 54 6F 74 61 6C 20 74 69 6D 65 20 28
-73 65 63 73 29 3A 20 25 64 0A 00 00 45 52 52 4F
-52 21 20 4D 75 73 74 20 65 78 65 63 75 74 65 20
-66 6F 72 20 61 74 20 6C 65 61 73 74 20 31 30 20
-73 65 63 73 20 66 6F 72 20 61 20 76 61 6C 69 64
-20 72 65 73 75 6C 74 21 0A 00 00 00 49 74 65 72
-61 74 2F 53 65 63 2F 4D 48 7A 20 20 20 3A 20 25
-64 2E 25 30 32 64 0A 00 49 74 65 72 61 74 69 6F
-6E 73 20 20 20 20 20 20 20 3A 20 25 75 0A 00 00
-47 43 43 39 2E 32 2E 30 00 00 00 00 43 6F 6D 70
-69 6C 65 72 20 76 65 72 73 69 6F 6E 20 3A 20 25
-73 0A 00 00 2D 67 20 2D 4F 33 20 2D 66 75 6E 72
-6F 6C 6C 2D 61 6C 6C 2D 6C 6F 6F 70 73 00 00 00
-43 6F 6D 70 69 6C 65 72 20 66 6C 61 67 73 20 20
-20 3A 20 25 73 0A 00 00 53 54 41 54 49 43 00 00
-4D 65 6D 6F 72 79 20 6C 6F 63 61 74 69 6F 6E 20
-20 3A 20 25 73 0A 00 00 73 65 65 64 63 72 63 20
-20 20 20 20 20 20 20 20 20 3A 20 30 78 25 30 34
-78 0A 00 00 5B 25 64 5D 63 72 63 6C 69 73 74 20
-20 20 20 20 20 20 3A 20 30 78 25 30 34 78 0A 00
-5B 25 64 5D 63 72 63 6D 61 74 72 69 78 20 20 20
-20 20 3A 20 30 78 25 30 34 78 0A 00 5B 25 64 5D
-63 72 63 73 74 61 74 65 20 20 20 20 20 20 3A 20
-30 78 25 30 34 78 0A 00 5B 25 64 5D 63 72 63 66
-69 6E 61 6C 20 20 20 20 20 20 3A 20 30 78 25 30
-34 78 0A 00 43 6F 72 72 65 63 74 20 6F 70 65 72
-61 74 69 6F 6E 20 76 61 6C 69 64 61 74 65 64 2E
-20 53 65 65 20 72 65 61 64 6D 65 2E 74 78 74 20
-66 6F 72 20 72 75 6E 20 61 6E 64 20 72 65 70 6F
-72 74 69 6E 67 20 72 75 6C 65 73 2E 0A 00 00 00
-45 72 72 6F 72 73 20 64 65 74 65 63 74 65 64 0A
-00 00 00 00 43 61 6E 6E 6F 74 20 76 61 6C 69 64
-61 74 65 20 6F 70 65 72 61 74 69 6F 6E 20 66 6F
-72 20 74 68 65 73 65 20 73 65 65 64 20 76 61 6C
-75 65 73 2C 20 70 6C 65 61 73 65 20 63 6F 6D 70
-61 72 65 20 77 69 74 68 20 72 65 73 75 6C 74 73
-20 6F 6E 20 61 20 6B 6E 6F 77 6E 20 70 6C 61 74
-66 6F 72 6D 2E 0A 00 00 54 30 2E 33 65 2D 31 46
-00 00 00 00 2D 54 2E 54 2B 2B 54 71 00 00 00 00
-31 54 33 2E 34 65 34 7A 00 00 00 00 33 34 2E 30
-65 2D 54 5E 00 00 00 00 35 2E 35 30 30 65 2B 33
-00 00 00 00 2D 2E 31 32 33 65 2D 32 00 00 00 00
-2D 38 37 65 2B 38 33 32 00 00 00 00 2B 30 2E 36
-65 2D 31 32 00 00 00 00 33 35 2E 35 34 34 30 30
-00 00 00 00 2E 31 32 33 34 35 30 30 00 00 00 00
-2D 31 31 30 2E 37 30 30 00 00 00 00 2B 30 2E 36
-34 34 30 30 00 00 00 00 35 30 31 32 00 00 00 00
-31 32 33 34 00 00 00 00 2D 38 37 34 00 00 00 00
-2B 31 32 32 00 00 00 00 53 74 61 74 69 63 00 00
-48 65 61 70 00 00 00 00 53 74 61 63 6B 00
-@FFFFFFF0
-00 00 00 EE FF FF 00 EE
-@FFFFFFF8
-00 00 04 F0 C0 85 04 F0
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/data.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/data.hex
deleted file mode 100755
index b71d0ef..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/data.hex
+++ /dev/null
@@ -1,8 +0,0 @@
-@00001000
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 
-2D 2D 0A 48 65 6C 6C 6F 20 57 6F 72 6C 64 20 66 
-72 6F 6D 20 53 77 65 52 56 20 45 4C 32 20 40 57 
-44 43 20 21 21 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 
-2D 2D 2D 2D 2D 2D 2D 2D 0A 00 
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world.hex
deleted file mode 100755
index 1d3de9b..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world.hex
+++ /dev/null
@@ -1,26 +0,0 @@
-@80000000
-73 10 20 B0 73 10 20 B8 B7 00 00 EE 73 90 50 30
-B7 50 55 5F 93 80 50 55 73 90 00 7C B7 01 58 D0
-17 02 00 00 13 02 E2 0E 83 02 02 00 23 80 51 00
-05 02 E3 9B 02 FE B7 01 58 D0 93 02 F0 0F 23 80
-51 00 E3 0A 00 FE 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00
-@8000010E
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 0A 48 65 6C 6C 6F 20 57 6F 72 6C 64 20 66
-72 6F 6D 20 53 77 65 52 56 20 45 4C 32 20 40 57
-44 43 20 21 21 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 0A 00
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world_dccm.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world_dccm.hex
deleted file mode 100755
index a7b38d8..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world_dccm.hex
+++ /dev/null
@@ -1,28 +0,0 @@
-@00000000
-73 10 20 B0 73 10 20 B8 B7 00 00 EE 73 90 50 30
-B7 50 55 5F 93 80 50 55 73 90 00 7C B7 01 58 D0
-17 02 04 F0 13 02 02 FE 83 02 02 00 23 80 51 00
-05 02 E3 9B 02 FE B7 01 58 D0 93 02 F0 0F 23 80
-51 00 E3 0A 00 FE 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00
-@F0040000
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 0A 48 65 6C 6C 6F 20 57 6F 72 6C 64 20 66
-72 6F 6D 20 53 77 65 52 56 20 45 4C 32 20 40 57
-44 43 20 21 21 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 0A 00
-@FFFFFFF8
-00 00 04 F0 70 10 04 F0
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world_iccm.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world_iccm.hex
deleted file mode 100755
index 657b60f..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/hello_world_iccm.hex
+++ /dev/null
@@ -1,32 +0,0 @@
-@00000000
-B7 50 55 5F 93 80 50 55 73 90 00 7C 91 41 73 90
-91 7F B7 01 00 EE 17 02 01 00 13 02 62 06 97 02
-01 00 93 82 E2 08 03 23 02 00 23 A0 61 00 11 02
-91 01 E3 6A 52 FE 0F 10 00 00 97 00 00 EE E7 80
-60 FC B7 01 58 D0 93 02 F0 0F 23 80 51 00 E3 0A
-00 FE 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00
-01 00 01 00 01 00 01 00 01 00
-@00010000
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 0A 48 65 6C 6C 6F 20 57
-6F 72 6C 64 20 66 72 6F 6D 20 53 77 65 52 56 20
-45 4C 32 20 49 43 43 4D 20 20 40 57 44 43 20 21
-21 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
-2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0A 00
-@0001007C
-B7 01 58 D0 17 02 01 12 13 02 C2 FF 83 02 02 00
-23 80 51 00 05 02 E3 9B 02 FE 82 80 00 00 00 00
-01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00
diff --git a/verilog/rtl/BrqRV_EB1/testbench/hex/program.hex b/verilog/rtl/BrqRV_EB1/testbench/hex/program.hex
deleted file mode 100644
index 0e2bf73..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/hex/program.hex
+++ /dev/null
@@ -1,18 +0,0 @@
-@00000000
-73 10 20 B0 73 10 20 B8 B7 00 00 EE 73 90 50 30 
-B7 50 55 5F 93 80 50 55 73 90 00 7C B7 01 58 D0 
-17 12 00 00 13 02 02 FE 83 02 02 00 23 80 51 00 
-05 02 E3 9B 02 FE B7 01 58 D0 93 02 F0 0F 23 80 
-51 00 E3 0A 00 FE 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 
-01 00 01 00 01 00 01 00 01 00 01 00 01 00 
diff --git a/verilog/rtl/BrqRV_EB1/testbench/input.tcl b/verilog/rtl/BrqRV_EB1/testbench/input.tcl
deleted file mode 100644
index b67324d..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/input.tcl
+++ /dev/null
@@ -1,4 +0,0 @@
-database -open waves -into waves.shm -default
-probe -create tb_top -depth all -database waves -memories -all
-run
-exit
diff --git a/verilog/rtl/BrqRV_EB1/testbench/link.ld b/verilog/rtl/BrqRV_EB1/testbench/link.ld
deleted file mode 100644
index de779f8..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/link.ld
+++ /dev/null
@@ -1,12 +0,0 @@
-
-OUTPUT_ARCH( "riscv" )
-ENTRY(_start)
-
-SECTIONS
-{
-    . = 0;
-  .text   : { *(.text*) }
- _end = .;
-  . = 0x10000;
-  .data  :  ALIGN(0x800) { *(.*data) *(.rodata*) STACK = ALIGN(16) + 0x8000; }
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/remote_bitbang.cc b/verilog/rtl/BrqRV_EB1/testbench/remote_bitbang.cc
deleted file mode 100644
index 6ad7867..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/remote_bitbang.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-// See LICENSE.Berkeley for license details.
-
-#include <arpa/inet.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <algorithm>
-#include <cassert>
-#include <cstdio>
-#include <cstdlib>
-
-#include "remote_bitbang.h"
-
-/////////// remote_bitbang_t
-
-remote_bitbang_t::remote_bitbang_t(uint16_t port) :
-  err(0),
-  socket_fd(0),
-  client_fd(0),
-  recv_start(0),
-  recv_end(0)
-{
-  socket_fd = socket(AF_INET, SOCK_STREAM, 0);
-  if (socket_fd == -1) {
-    fprintf(stderr, "remote_bitbang failed to make socket: %s (%d)\n",
-            strerror(errno), errno);
-    abort();
-  }
-
-  fcntl(socket_fd, F_SETFL, O_NONBLOCK);
-  int reuseaddr = 1;
-  if (setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr,
-                 sizeof(int)) == -1) {
-    fprintf(stderr, "remote_bitbang failed setsockopt: %s (%d)\n",
-            strerror(errno), errno);
-    abort();
-  }
-
-  struct sockaddr_in addr;
-  memset(&addr, 0, sizeof(addr));
-  addr.sin_family = AF_INET;
-  addr.sin_addr.s_addr = INADDR_ANY;
-  addr.sin_port = htons(port);
-
-  if (::bind(socket_fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
-    fprintf(stderr, "remote_bitbang failed to bind socket: %s (%d)\n",
-            strerror(errno), errno);
-    abort();
-  }
-
-  if (listen(socket_fd, 1) == -1) {
-    fprintf(stderr, "remote_bitbang failed to listen on socket: %s (%d)\n",
-            strerror(errno), errno);
-    abort();
-  }
-
-  socklen_t addrlen = sizeof(addr);
-  if (getsockname(socket_fd, (struct sockaddr *) &addr, &addrlen) == -1) {
-    fprintf(stderr, "remote_bitbang getsockname failed: %s (%d)\n",
-            strerror(errno), errno);
-    abort();
-  }
-
-  tck = 1;
-  tms = 1;
-  tdi = 1;
-  trstn = 1;
-  quit = 0;
-  srstn = 1;
-
-  fprintf(stderr, "This emulator compiled with JTAG Remote Bitbang client. To enable, use +jtag_rbb_enable=1.\n");
-  fprintf(stderr, "Listening on port %d\n",
-         ntohs(addr.sin_port));
-}
-
-void remote_bitbang_t::accept()
-{
-
-  fprintf(stderr,"Attempting to accept client socket\n");
-  int again = 1;
-  while (again != 0) {
-    client_fd = ::accept(socket_fd, NULL, NULL);
-    if (client_fd == -1) {
-      if (errno == EAGAIN) {
-        // No client waiting to connect right now.
-      } else {
-        fprintf(stderr, "failed to accept on socket: %s (%d)\n", strerror(errno),
-                errno);
-        again = 0;
-        abort();
-      }
-    } else {
-      fcntl(client_fd, F_SETFL, O_NONBLOCK);
-      fprintf(stderr, "Accepted successfully.");
-      again = 0;
-    }
-  }
-}
-
-void remote_bitbang_t::tick(
-                            unsigned char * jtag_tck,
-                            unsigned char * jtag_tms,
-                            unsigned char * jtag_tdi,
-                            unsigned char * jtag_trstn,
-                            unsigned char * sysrstn,
-                            unsigned char jtag_tdo
-                            )
-{
-  if (client_fd > 0) {
-    tdo = jtag_tdo;
-    execute_command();
-  } else {
-    this->accept();
-  }
-
-  * jtag_tck = tck;
-  * jtag_tms = tms;
-  * jtag_tdi = tdi;
-  * jtag_trstn = trstn;
-  * sysrstn = srstn;
-
-}
-
-void remote_bitbang_t::reset(char cmd){
-  trstn = ((cmd - 'r') & 2) ? 0 : 1;
-  srstn = ((cmd - 'r') & 1) ? 0 : 1;
-}
-
-void remote_bitbang_t::set_pins(char _tck, char _tms, char _tdi){
-  tck = _tck;
-  tms = _tms;
-  tdi = _tdi;
-}
-
-void remote_bitbang_t::execute_command()
-{
-  char command;
-  int again = 1;
-  while (again) {
-    ssize_t num_read = read(client_fd, &command, sizeof(command));
-    if (num_read == -1) {
-      if (errno == EAGAIN) {
-        // We'll try again the next call.
-        //fprintf(stderr, "Received no command. Will try again on the next call\n");
-      } else {
-        fprintf(stderr, "remote_bitbang failed to read on socket: %s (%d)\n",
-                strerror(errno), errno);
-        again = 0;
-        abort();
-      }
-    } else if (num_read == 0) {
-      fprintf(stderr, "No Command Received.\n");
-      again = 1;
-    } else {
-      again = 0;
-    }
-  }
-
-  //fprintf(stderr, "Received a command %c\n", command);
-
-  int dosend = 0;
-
-  char tosend = '?';
-
-  switch (command) {
-  case 'B': /* fprintf(stderr, "*BLINK*\n"); */ break;
-  case 'b': /* fprintf(stderr, "_______\n"); */ break;
-  case 'r':
-  case 's':
-  case 'u':
-  case 't': reset(command); break;
-  case '0': set_pins(0, 0, 0); break;
-  case '1': set_pins(0, 0, 1); break;
-  case '2': set_pins(0, 1, 0); break;
-  case '3': set_pins(0, 1, 1); break;
-  case '4': set_pins(1, 0, 0); break;
-  case '5': set_pins(1, 0, 1); break;
-  case '6': set_pins(1, 1, 0); break;
-  case '7': set_pins(1, 1, 1); break;
-  case 'R': dosend = 1; tosend = tdo ? '1' : '0'; break;
-  case 'Q': quit = 1; break;
-  default:
-    fprintf(stderr, "remote_bitbang got unsupported command '%c'\n",
-            command);
-  }
-
-  if (dosend){
-    while (1) {
-      ssize_t bytes = write(client_fd, &tosend, sizeof(tosend));
-      if (bytes == -1) {
-        fprintf(stderr, "failed to write to socket: %s (%d)\n", strerror(errno), errno);
-        abort();
-      }
-      if (bytes > 0) {
-        break;
-      }
-    }
-  }
-
-  if (quit) {
-    // The remote disconnected.
-    fprintf(stderr, "Remote end disconnected\n");
-    close(client_fd);
-    client_fd = 0;
-  }
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/remote_bitbang.h b/verilog/rtl/BrqRV_EB1/testbench/remote_bitbang.h
deleted file mode 100644
index 554fee4..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/remote_bitbang.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// See LICENSE.Berkeley for license details.
-
-#ifndef REMOTE_BITBANG_H
-#define REMOTE_BITBANG_H
-
-#include <stdint.h>
-#include <sys/types.h>
-
-class remote_bitbang_t
-{
-public:
-  // Create a new server, listening for connections from localhost on the given
-  // port.
-  remote_bitbang_t(uint16_t port);
-
-  // Do a bit of work.
-  void tick(unsigned char * jtag_tck,
-            unsigned char * jtag_tms,
-            unsigned char * jtag_tdi,
-            unsigned char * jtag_trstn,
-            unsigned char * sysrstn,
-            unsigned char jtag_tdo);
-
-  unsigned char done() {return quit;}
-
-  int exit_code() {return err;}
-
- private:
-
-  int err;
-
-  unsigned char tck;
-  unsigned char tms;
-  unsigned char tdi;
-  unsigned char trstn;
-  unsigned char srstn;
-  unsigned char tdo;
-  unsigned char quit;
-
-  int socket_fd;
-  int client_fd;
-
-  static const ssize_t buf_size = 64 * 1024;
-  char recv_buf[buf_size];
-  ssize_t recv_start, recv_end;
-
-  // Check for a client connecting, and accept if there is one.
-  void accept();
-  // Execute any commands the client has for us.
-  // But we only execute 1 because we need time for the
-  // simulation to run.
-  void execute_command();
-
-  // Reset. .
-  void reset(char cmd);
-
-  void set_pins(char _tck, char _tms, char _tdi);
-
-};
-
-#endif
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tb_top.sv b/verilog/rtl/BrqRV_EB1/testbench/tb_top.sv
deleted file mode 100644
index f8a4162..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tb_top.sv
+++ /dev/null
@@ -1,1254 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-`ifndef VERILATOR
-module tb_top;
-`else
-module tb_top ( input bit core_clk );
-`endif
-
-`ifndef VERILATOR
-    bit                         core_clk;
-`endif
-    logic                       rst_l;
-    logic                       porst_l;
-    logic                       nmi_int;
-
-    logic        [31:0]         reset_vector;
-    logic        [31:0]         nmi_vector;
-    logic        [31:1]         jtag_id;
-
-    logic        [31:0]         ic_haddr        ;
-    logic        [2:0]          ic_hburst       ;
-    logic                       ic_hmastlock    ;
-    logic        [3:0]          ic_hprot        ;
-    logic        [2:0]          ic_hsize        ;
-    logic        [1:0]          ic_htrans       ;
-    logic                       ic_hwrite       ;
-    logic        [63:0]         ic_hrdata       ;
-    logic                       ic_hready       ;
-    logic                       ic_hresp        ;
-
-    logic        [31:0]         lsu_haddr       ;
-    logic        [2:0]          lsu_hburst      ;
-    logic                       lsu_hmastlock   ;
-    logic        [3:0]          lsu_hprot       ;
-    logic        [2:0]          lsu_hsize       ;
-    logic        [1:0]          lsu_htrans      ;
-    logic                       lsu_hwrite      ;
-    logic        [63:0]         lsu_hrdata      ;
-    logic        [63:0]         lsu_hwdata      ;
-    logic                       lsu_hready      ;
-    logic                       lsu_hresp        ;
-
-    logic        [31:0]         sb_haddr        ;
-    logic        [2:0]          sb_hburst       ;
-    logic                       sb_hmastlock    ;
-    logic        [3:0]          sb_hprot        ;
-    logic        [2:0]          sb_hsize        ;
-    logic        [1:0]          sb_htrans       ;
-    logic                       sb_hwrite       ;
-
-    logic        [63:0]         sb_hrdata       ;
-    logic        [63:0]         sb_hwdata       ;
-    logic                       sb_hready       ;
-    logic                       sb_hresp        ;
-
-    logic        [31:0]         trace_rv_i_insn_ip;
-    logic        [31:0]         trace_rv_i_address_ip;
-    logic                       trace_rv_i_valid_ip;
-    logic                       trace_rv_i_exception_ip;
-    logic        [4:0]          trace_rv_i_ecause_ip;
-    logic                       trace_rv_i_interrupt_ip;
-    logic        [31:0]         trace_rv_i_tval_ip;
-
-    logic                       o_debug_mode_status;
-
-
-    logic                       jtag_tdo;
-    logic                       o_cpu_halt_ack;
-    logic                       o_cpu_halt_status;
-    logic                       o_cpu_run_ack;
-
-    logic                       mailbox_write;
-    logic        [63:0]         dma_hrdata       ;
-    logic        [63:0]         dma_hwdata       ;
-    logic                       dma_hready       ;
-    logic                       dma_hresp        ;
-
-    logic                       mpc_debug_halt_req;
-    logic                       mpc_debug_run_req;
-    logic                       mpc_reset_run_req;
-    logic                       mpc_debug_halt_ack;
-    logic                       mpc_debug_run_ack;
-    logic                       debug_brkpt_status;
-
-    int                         cycleCnt;
-    logic                       mailbox_data_val;
-
-    wire                        dma_hready_out;
-    int                         commit_count;
-
-    logic                       wb_valid;
-    logic [4:0]                 wb_dest;
-    logic [31:0]                wb_data;
-
-`ifdef RV_BUILD_AXI4
-   //-------------------------- LSU AXI signals--------------------------
-   // AXI Write Channels
-    wire                        lsu_axi_awvalid;
-    wire                        lsu_axi_awready;
-    wire [`RV_LSU_BUS_TAG-1:0]  lsu_axi_awid;
-    wire [31:0]                 lsu_axi_awaddr;
-    wire [3:0]                  lsu_axi_awregion;
-    wire [7:0]                  lsu_axi_awlen;
-    wire [2:0]                  lsu_axi_awsize;
-    wire [1:0]                  lsu_axi_awburst;
-    wire                        lsu_axi_awlock;
-    wire [3:0]                  lsu_axi_awcache;
-    wire [2:0]                  lsu_axi_awprot;
-    wire [3:0]                  lsu_axi_awqos;
-
-    wire                        lsu_axi_wvalid;
-    wire                        lsu_axi_wready;
-    wire [63:0]                 lsu_axi_wdata;
-    wire [7:0]                  lsu_axi_wstrb;
-    wire                        lsu_axi_wlast;
-
-    wire                        lsu_axi_bvalid;
-    wire                        lsu_axi_bready;
-    wire [1:0]                  lsu_axi_bresp;
-    wire [`RV_LSU_BUS_TAG-1:0]  lsu_axi_bid;
-
-    // AXI Read Channels
-    wire                        lsu_axi_arvalid;
-    wire                        lsu_axi_arready;
-    wire [`RV_LSU_BUS_TAG-1:0]  lsu_axi_arid;
-    wire [31:0]                 lsu_axi_araddr;
-    wire [3:0]                  lsu_axi_arregion;
-    wire [7:0]                  lsu_axi_arlen;
-    wire [2:0]                  lsu_axi_arsize;
-    wire [1:0]                  lsu_axi_arburst;
-    wire                        lsu_axi_arlock;
-    wire [3:0]                  lsu_axi_arcache;
-    wire [2:0]                  lsu_axi_arprot;
-    wire [3:0]                  lsu_axi_arqos;
-
-    wire                        lsu_axi_rvalid;
-    wire                        lsu_axi_rready;
-    wire [`RV_LSU_BUS_TAG-1:0]  lsu_axi_rid;
-    wire [63:0]                 lsu_axi_rdata;
-    wire [1:0]                  lsu_axi_rresp;
-    wire                        lsu_axi_rlast;
-
-    //-------------------------- IFU AXI signals--------------------------
-    // AXI Write Channels
-    wire                        ifu_axi_awvalid;
-    wire                        ifu_axi_awready;
-    wire [`RV_IFU_BUS_TAG-1:0]  ifu_axi_awid;
-    wire [31:0]                 ifu_axi_awaddr;
-    wire [3:0]                  ifu_axi_awregion;
-    wire [7:0]                  ifu_axi_awlen;
-    wire [2:0]                  ifu_axi_awsize;
-    wire [1:0]                  ifu_axi_awburst;
-    wire                        ifu_axi_awlock;
-    wire [3:0]                  ifu_axi_awcache;
-    wire [2:0]                  ifu_axi_awprot;
-    wire [3:0]                  ifu_axi_awqos;
-
-    wire                        ifu_axi_wvalid;
-    wire                        ifu_axi_wready;
-    wire [63:0]                 ifu_axi_wdata;
-    wire [7:0]                  ifu_axi_wstrb;
-    wire                        ifu_axi_wlast;
-
-    wire                        ifu_axi_bvalid;
-    wire                        ifu_axi_bready;
-    wire [1:0]                  ifu_axi_bresp;
-    wire [`RV_IFU_BUS_TAG-1:0]  ifu_axi_bid;
-
-    // AXI Read Channels
-    wire                        ifu_axi_arvalid;
-    wire                        ifu_axi_arready;
-    wire [`RV_IFU_BUS_TAG-1:0]  ifu_axi_arid;
-    wire [31:0]                 ifu_axi_araddr;
-    wire [3:0]                  ifu_axi_arregion;
-    wire [7:0]                  ifu_axi_arlen;
-    wire [2:0]                  ifu_axi_arsize;
-    wire [1:0]                  ifu_axi_arburst;
-    wire                        ifu_axi_arlock;
-    wire [3:0]                  ifu_axi_arcache;
-    wire [2:0]                  ifu_axi_arprot;
-    wire [3:0]                  ifu_axi_arqos;
-
-    wire                        ifu_axi_rvalid;
-    wire                        ifu_axi_rready;
-    wire [`RV_IFU_BUS_TAG-1:0]  ifu_axi_rid;
-    wire [63:0]                 ifu_axi_rdata;
-    wire [1:0]                  ifu_axi_rresp;
-    wire                        ifu_axi_rlast;
-
-    //-------------------------- SB AXI signals--------------------------
-    // AXI Write Channels
-    wire                        sb_axi_awvalid;
-    wire                        sb_axi_awready;
-    wire [`RV_SB_BUS_TAG-1:0]   sb_axi_awid;
-    wire [31:0]                 sb_axi_awaddr;
-    wire [3:0]                  sb_axi_awregion;
-    wire [7:0]                  sb_axi_awlen;
-    wire [2:0]                  sb_axi_awsize;
-    wire [1:0]                  sb_axi_awburst;
-    wire                        sb_axi_awlock;
-    wire [3:0]                  sb_axi_awcache;
-    wire [2:0]                  sb_axi_awprot;
-    wire [3:0]                  sb_axi_awqos;
-
-    wire                        sb_axi_wvalid;
-    wire                        sb_axi_wready;
-    wire [63:0]                 sb_axi_wdata;
-    wire [7:0]                  sb_axi_wstrb;
-    wire                        sb_axi_wlast;
-
-    wire                        sb_axi_bvalid;
-    wire                        sb_axi_bready;
-    wire [1:0]                  sb_axi_bresp;
-    wire [`RV_SB_BUS_TAG-1:0]   sb_axi_bid;
-
-    // AXI Read Channels
-    wire                        sb_axi_arvalid;
-    wire                        sb_axi_arready;
-    wire [`RV_SB_BUS_TAG-1:0]   sb_axi_arid;
-    wire [31:0]                 sb_axi_araddr;
-    wire [3:0]                  sb_axi_arregion;
-    wire [7:0]                  sb_axi_arlen;
-    wire [2:0]                  sb_axi_arsize;
-    wire [1:0]                  sb_axi_arburst;
-    wire                        sb_axi_arlock;
-    wire [3:0]                  sb_axi_arcache;
-    wire [2:0]                  sb_axi_arprot;
-    wire [3:0]                  sb_axi_arqos;
-
-    wire                        sb_axi_rvalid;
-    wire                        sb_axi_rready;
-    wire [`RV_SB_BUS_TAG-1:0]   sb_axi_rid;
-    wire [63:0]                 sb_axi_rdata;
-    wire [1:0]                  sb_axi_rresp;
-    wire                        sb_axi_rlast;
-
-   //-------------------------- DMA AXI signals--------------------------
-   // AXI Write Channels
-    wire                        dma_axi_awvalid;
-    wire                        dma_axi_awready;
-    wire [`RV_DMA_BUS_TAG-1:0]  dma_axi_awid;
-    wire [31:0]                 dma_axi_awaddr;
-    wire [2:0]                  dma_axi_awsize;
-    wire [2:0]                  dma_axi_awprot;
-    wire [7:0]                  dma_axi_awlen;
-    wire [1:0]                  dma_axi_awburst;
-
-
-    wire                        dma_axi_wvalid;
-    wire                        dma_axi_wready;
-    wire [63:0]                 dma_axi_wdata;
-    wire [7:0]                  dma_axi_wstrb;
-    wire                        dma_axi_wlast;
-
-    wire                        dma_axi_bvalid;
-    wire                        dma_axi_bready;
-    wire [1:0]                  dma_axi_bresp;
-    wire [`RV_DMA_BUS_TAG-1:0]  dma_axi_bid;
-
-    // AXI Read Channels
-    wire                        dma_axi_arvalid;
-    wire                        dma_axi_arready;
-    wire [`RV_DMA_BUS_TAG-1:0]  dma_axi_arid;
-    wire [31:0]                 dma_axi_araddr;
-    wire [2:0]                  dma_axi_arsize;
-    wire [2:0]                  dma_axi_arprot;
-    wire [7:0]                  dma_axi_arlen;
-    wire [1:0]                  dma_axi_arburst;
-
-    wire                        dma_axi_rvalid;
-    wire                        dma_axi_rready;
-    wire [`RV_DMA_BUS_TAG-1:0]  dma_axi_rid;
-    wire [63:0]                 dma_axi_rdata;
-    wire [1:0]                  dma_axi_rresp;
-    wire                        dma_axi_rlast;
-
-    wire                        lmem_axi_arvalid;
-    wire                        lmem_axi_arready;
-
-    wire                        lmem_axi_rvalid;
-    wire [`RV_LSU_BUS_TAG-1:0]  lmem_axi_rid;
-    wire [1:0]                  lmem_axi_rresp;
-    wire [63:0]                 lmem_axi_rdata;
-    wire                        lmem_axi_rlast;
-    wire                        lmem_axi_rready;
-
-    wire                        lmem_axi_awvalid;
-    wire                        lmem_axi_awready;
-
-    wire                        lmem_axi_wvalid;
-    wire                        lmem_axi_wready;
-
-    wire [1:0]                  lmem_axi_bresp;
-    wire                        lmem_axi_bvalid;
-    wire [`RV_LSU_BUS_TAG-1:0]  lmem_axi_bid;
-    wire                        lmem_axi_bready;
-
-`endif
-    wire[63:0] WriteData;
-    reg [31:0][31:0] scalar_expected;
-    reg [31:0][31:0] scalar_actual; 
-    reg [5:0] scalar_count;
-    //reg [5:0] vector_count;
-    string                      abi_reg[32]; // ABI register names
-
-
-    assign mailbox_write = lmem.mailbox_write;
-    assign WriteData = lmem.WriteData;
-    assign mailbox_data_val = WriteData[7:0] > 8'h5 && WriteData[7:0] < 8'h7f;
-    
-    
-    always @(posedge core_clk) begin
-    	if(mailbox_write & (scalar_count < 6'h20) & ~o_cpu_halt_status) begin
-    		if(scalar_count % 2 == 1'b0) begin
-    			scalar_actual[scalar_count][31:0] = WriteData[31:0];
-    		end
-    		else begin
-    			scalar_actual[scalar_count][31:0] = WriteData[63:32];
-    		end
-    		scalar_count = scalar_count + 1'b1;
-    	end
-    	/*else if(mailbox_write & (vector_count < 6'h20) & o_cpu_halt_status) begin
-    		vector_expected[vector_count][31:0] = WriteData[31:0];
-    		vector_count = vector_count + 1'b1;
-    	end*/
-    end 
-
-    parameter MAX_CYCLES = 2_000_000;
-
-    integer fd, tp, el;
-
-    always @(negedge core_clk) begin
-        cycleCnt <= cycleCnt+1;
-        // Test timeout monitor
-        if(cycleCnt == MAX_CYCLES) begin
-            $display ("Hit max cycle count (%0d) .. stopping",cycleCnt);
-            $finish;
-        end
-        // console Monitor
-        if( mailbox_data_val & mailbox_write) begin
-            $fwrite(fd,"%c", WriteData[7:0]);
-            $write("%c", WriteData[7:0]);
-        end
-        // End Of test monitor
-        if(mailbox_write && WriteData[7:0] == 8'hff) begin
-            if(scalar_expected == scalar_actual) begin
-            		$display("Self Checking TEST Passed");
-            end
-            else begin
-            		$display("Self Checking TEST Failed");
-            end
-            //$display("TEST_PASSED");
-            $display("\nFinished : minstret = %0d, mcycle = %0d", rvtop.brqrv.dec.tlu.minstretl[31:0],rvtop.brqrv.dec.tlu.mcyclel[31:0]);
-            $display("See \"exec.log\" for execution trace with register updates..\n");
-            $finish;
-        end
-      //  else if(mailbox_write && WriteData[7:0] == 8'h1) begin
-      //      $display("TEST_FAILED");
-      //      $finish;
-      //  end
-    end
-
-
-    // trace monitor
-    always @(posedge core_clk) begin
-        wb_valid  <= rvtop.brqrv.dec.dec_i0_wen_r;
-        wb_dest   <= rvtop.brqrv.dec.dec_i0_waddr_r;
-        wb_data   <= rvtop.brqrv.dec.dec_i0_wdata_r;
-        if (trace_rv_i_valid_ip) begin
-           $fwrite(tp,"%b,%h,%h,%0h,%0h,3,%b,%h,%h,%b\n", trace_rv_i_valid_ip, 0, trace_rv_i_address_ip,
-                  0, trace_rv_i_insn_ip,trace_rv_i_exception_ip,trace_rv_i_ecause_ip,
-                  trace_rv_i_tval_ip,trace_rv_i_interrupt_ip);
-           // Basic trace - no exception register updates
-           // #1 0 ee000000 b0201073 c 0b02       00000000
-           commit_count++;
-           $fwrite (el, "%10d : %8s 0 %h %h%13s ; %s\n", cycleCnt, $sformatf("#%0d",commit_count),
-                        trace_rv_i_address_ip, trace_rv_i_insn_ip,
-                        (wb_dest !=0 && wb_valid)?  $sformatf("%s=%h", abi_reg[wb_dest], wb_data) : "             ",
-                        dasm(trace_rv_i_insn_ip, trace_rv_i_address_ip, wb_dest & {5{wb_valid}}, wb_data)
-                   );
-        end
-        if(rvtop.brqrv.dec.dec_nonblock_load_wen)
-           $fwrite (el, "%10d : %32s=%h ; nbL\n", cycleCnt, abi_reg[rvtop.brqrv.dec.dec_nonblock_load_waddr], rvtop.brqrv.dec.lsu_nonblock_load_data);
-        if(rvtop.brqrv.dec.exu_div_wren)
-           $fwrite (el, "%10d : %32s=%h ; nbD\n", cycleCnt, abi_reg[rvtop.brqrv.dec.div_waddr_wb], rvtop.brqrv.dec.exu_div_result);
-    end
-
-
-    initial begin
-        abi_reg[0] = "zero";
-        abi_reg[1] = "ra";
-        abi_reg[2] = "sp";
-        abi_reg[3] = "gp";
-        abi_reg[4] = "tp";
-        abi_reg[5] = "t0";
-        abi_reg[6] = "t1";
-        abi_reg[7] = "t2";
-        abi_reg[8] = "s0";
-        abi_reg[9] = "s1";
-        abi_reg[10] = "a0";
-        abi_reg[11] = "a1";
-        abi_reg[12] = "a2";
-        abi_reg[13] = "a3";
-        abi_reg[14] = "a4";
-        abi_reg[15] = "a5";
-        abi_reg[16] = "a6";
-        abi_reg[17] = "a7";
-        abi_reg[18] = "s2";
-        abi_reg[19] = "s3";
-        abi_reg[20] = "s4";
-        abi_reg[21] = "s5";
-        abi_reg[22] = "s6";
-        abi_reg[23] = "s7";
-        abi_reg[24] = "s8";
-        abi_reg[25] = "s9";
-        abi_reg[26] = "s10";
-        abi_reg[27] = "s11";
-        abi_reg[28] = "t3";
-        abi_reg[29] = "t4";
-        abi_reg[30] = "t5";
-        abi_reg[31] = "t6";
-        
-        // Scalar expected result
-        scalar_expected[0] = 32'd1;
-        scalar_expected[1] = 32'd2;
-        scalar_expected[2] = 32'd6;
-        scalar_expected[3] = 32'd24;
-        scalar_expected[4] = 32'd120;
-        scalar_expected[5] = 32'd720;
-        scalar_expected[6] = 32'd5040;
-        scalar_expected[7] = 32'd40320;
-        scalar_expected[8] = 32'd362880;
-        scalar_expected[9] = 32'd3628800;
-        scalar_expected[10] = 32'd0;
-        scalar_expected[11] = 32'h0;
-        scalar_expected[12] = 32'h0;
-        scalar_expected[13] = 32'h0;
-        scalar_expected[14] = 32'h0;
-        scalar_expected[15] = 32'h0;
-        scalar_expected[16] = 32'h0;
-        scalar_expected[17] = 32'h0;
-        scalar_expected[18] = 32'h0;
-        scalar_expected[19] = 32'h0;
-        scalar_expected[20] = 32'h0;
-        scalar_expected[21] = 32'h0;
-        scalar_expected[22] = 32'h0;
-        scalar_expected[23] = 32'h0;
-        scalar_expected[24] = 32'h0;
-        scalar_expected[25] = 32'h0;
-        scalar_expected[26] = 32'h0;
-        scalar_expected[27] = 32'h0;
-        scalar_expected[28] = 32'h0;
-        scalar_expected[29] = 32'h0;
-        scalar_expected[30] = 32'h0;
-        scalar_expected[31] = 32'h0;
-        
-        
-        
-        
-    // tie offs
-        jtag_id[31:28] = 4'b1;
-        jtag_id[27:12] = '0;
-        jtag_id[11:1]  = 11'h45;
-        reset_vector = `RV_RESET_VEC;
-        nmi_vector   = 32'hee000000;
-        nmi_int   = 0;
-        scalar_count = 6'h00;
-        scalar_actual = {1024{1'b0}};
-        //vector_count = 6'h00;
-        //scalar_actual = {1024{1'b0}};
-        //vector_expected = {1024{1'b0}};
-
-        $readmemh("program.hex",  lmem.mem);
-        $readmemh("program.hex",  imem.mem);
-        //$readmemh("program.hex",  uart_programmer.INSTR);
-        tp = $fopen("trace_port.csv","w");
-        el = $fopen("exec.log","w");
-        $fwrite (el, "//   Cycle : #inst    0    pc    opcode    reg=value   ; mnemonic\n");
-        fd = $fopen("console.log","w");
-        commit_count = 0;
-        //preload_dccm();
-        //preload_iccm();
-
-`ifndef VERILATOR
-        if($test$plusargs("dumpon")) $dumpvars;
-        forever  core_clk = #5 ~core_clk;
-`endif
-    end
-
-
-    assign rst_l = cycleCnt > 5;
-    assign porst_l = cycleCnt > 2;
-
-// UART Testbench
-logic rx_valid;
-wire i_rx;
-assign rx_valid = 1'b1;
-
-// UART Programming Testbench module
-uartprog #(.FILENAME("uart.hex"))
-       uart_programmer (
-       	.clk(core_clk),
-    		.mprj_ready(rx_valid),
-    		.r_Rx_Serial(i_rx) // used by task UART_WRITE_BYTE
-);
-   //=========================================================================-
-   // RTL instance
-   //=========================================================================-
-eb1_brqrv_wrapper rvtop (
-    .vccd1		     (1'b1           ),
-    .vssd1		     (1'b0           ),
-    .rst_l                  ( rst_l         ),
-    .dbg_rst_l              ( porst_l       ),
-    .clk                    ( core_clk      ),
-    .rst_vec                ( reset_vector[31:1]),
-    .nmi_int                ( nmi_int       ),
-    .nmi_vec                ( nmi_vector[31:1]),
-    .jtag_id                ( jtag_id[31:1]),
-    .uart_rx		     (i_rx),
-    .CLKS_PER_BIT           (16'd10),
-
-`ifdef RV_BUILD_AHB_LITE
-    .haddr                  ( ic_haddr      ),
-    .hburst                 ( ic_hburst     ),
-    .hmastlock              ( ic_hmastlock  ),
-    .hprot                  ( ic_hprot      ),
-    .hsize                  ( ic_hsize      ),
-    .htrans                 ( ic_htrans     ),
-    .hwrite                 ( ic_hwrite     ),
-
-    .hrdata                 ( ic_hrdata[63:0]),
-    .hready                 ( ic_hready     ),
-    .hresp                  ( ic_hresp      ),
-
-    //---------------------------------------------------------------
-    // Debug AHB Master
-    //---------------------------------------------------------------
-    .sb_haddr               ( sb_haddr      ),
-    .sb_hburst              ( sb_hburst     ),
-    .sb_hmastlock           ( sb_hmastlock  ),
-    .sb_hprot               ( sb_hprot      ),
-    .sb_hsize               ( sb_hsize      ),
-    .sb_htrans              ( sb_htrans     ),
-    .sb_hwrite              ( sb_hwrite     ),
-    .sb_hwdata              ( sb_hwdata     ),
-
-    .sb_hrdata              ( sb_hrdata     ),
-    .sb_hready              ( sb_hready     ),
-    .sb_hresp               ( sb_hresp      ),
-
-    //---------------------------------------------------------------
-    // LSU AHB Master
-    //---------------------------------------------------------------
-    .lsu_haddr              ( lsu_haddr       ),
-    .lsu_hburst             ( lsu_hburst      ),
-    .lsu_hmastlock          ( lsu_hmastlock   ),
-    .lsu_hprot              ( lsu_hprot       ),
-    .lsu_hsize              ( lsu_hsize       ),
-    .lsu_htrans             ( lsu_htrans      ),
-    .lsu_hwrite             ( lsu_hwrite      ),
-    .lsu_hwdata             ( lsu_hwdata      ),
-
-    .lsu_hrdata             ( lsu_hrdata[63:0]),
-    .lsu_hready             ( lsu_hready      ),
-    .lsu_hresp              ( lsu_hresp       ),
-
-    //---------------------------------------------------------------
-    // DMA Slave
-    //---------------------------------------------------------------
-    .dma_haddr              ( '0 ),
-    .dma_hburst             ( '0 ),
-    .dma_hmastlock          ( '0 ),
-    .dma_hprot              ( '0 ),
-    .dma_hsize              ( '0 ),
-    .dma_htrans             ( '0 ),
-    .dma_hwrite             ( '0 ),
-    .dma_hwdata             ( '0 ),
-
-    .dma_hrdata             ( dma_hrdata    ),
-    .dma_hresp              ( dma_hresp     ),
-    .dma_hsel               ( 1'b1            ),
-    .dma_hreadyin           ( dma_hready_out  ),
-    .dma_hreadyout          ( dma_hready_out  ),
-`endif
-`ifdef RV_BUILD_AXI4
-    //-------------------------- LSU AXI signals--------------------------
-    // AXI Write Channels
-    .lsu_axi_awvalid        (lsu_axi_awvalid),
-    .lsu_axi_awready        (lsu_axi_awready),
-    .lsu_axi_awid           (lsu_axi_awid),
-    .lsu_axi_awaddr         (lsu_axi_awaddr),
-    .lsu_axi_awregion       (lsu_axi_awregion),
-    .lsu_axi_awlen          (lsu_axi_awlen),
-    .lsu_axi_awsize         (lsu_axi_awsize),
-    .lsu_axi_awburst        (lsu_axi_awburst),
-    .lsu_axi_awlock         (lsu_axi_awlock),
-    .lsu_axi_awcache        (lsu_axi_awcache),
-    .lsu_axi_awprot         (lsu_axi_awprot),
-    .lsu_axi_awqos          (lsu_axi_awqos),
-
-    .lsu_axi_wvalid         (lsu_axi_wvalid),
-    .lsu_axi_wready         (lsu_axi_wready),
-    .lsu_axi_wdata          (lsu_axi_wdata),
-    .lsu_axi_wstrb          (lsu_axi_wstrb),
-    .lsu_axi_wlast          (lsu_axi_wlast),
-
-    .lsu_axi_bvalid         (lsu_axi_bvalid),
-    .lsu_axi_bready         (lsu_axi_bready),
-    .lsu_axi_bresp          (lsu_axi_bresp),
-    .lsu_axi_bid            (lsu_axi_bid),
-
-
-    .lsu_axi_arvalid        (lsu_axi_arvalid),
-    .lsu_axi_arready        (lsu_axi_arready),
-    .lsu_axi_arid           (lsu_axi_arid),
-    .lsu_axi_araddr         (lsu_axi_araddr),
-    .lsu_axi_arregion       (lsu_axi_arregion),
-    .lsu_axi_arlen          (lsu_axi_arlen),
-    .lsu_axi_arsize         (lsu_axi_arsize),
-    .lsu_axi_arburst        (lsu_axi_arburst),
-    .lsu_axi_arlock         (lsu_axi_arlock),
-    .lsu_axi_arcache        (lsu_axi_arcache),
-    .lsu_axi_arprot         (lsu_axi_arprot),
-    .lsu_axi_arqos          (lsu_axi_arqos),
-
-    .lsu_axi_rvalid         (lsu_axi_rvalid),
-    .lsu_axi_rready         (lsu_axi_rready),
-    .lsu_axi_rid            (lsu_axi_rid),
-    .lsu_axi_rdata          (lsu_axi_rdata),
-    .lsu_axi_rresp          (lsu_axi_rresp),
-    .lsu_axi_rlast          (lsu_axi_rlast),
-
-    //-------------------------- IFU AXI signals--------------------------
-    // AXI Write Channels
-    .ifu_axi_awvalid        (ifu_axi_awvalid),
-    .ifu_axi_awready        (ifu_axi_awready),
-    .ifu_axi_awid           (ifu_axi_awid),
-    .ifu_axi_awaddr         (ifu_axi_awaddr),
-    .ifu_axi_awregion       (ifu_axi_awregion),
-    .ifu_axi_awlen          (ifu_axi_awlen),
-    .ifu_axi_awsize         (ifu_axi_awsize),
-    .ifu_axi_awburst        (ifu_axi_awburst),
-    .ifu_axi_awlock         (ifu_axi_awlock),
-    .ifu_axi_awcache        (ifu_axi_awcache),
-    .ifu_axi_awprot         (ifu_axi_awprot),
-    .ifu_axi_awqos          (ifu_axi_awqos),
-
-    .ifu_axi_wvalid         (ifu_axi_wvalid),
-    .ifu_axi_wready         (ifu_axi_wready),
-    .ifu_axi_wdata          (ifu_axi_wdata),
-    .ifu_axi_wstrb          (ifu_axi_wstrb),
-    .ifu_axi_wlast          (ifu_axi_wlast),
-
-    .ifu_axi_bvalid         (ifu_axi_bvalid),
-    .ifu_axi_bready         (ifu_axi_bready),
-    .ifu_axi_bresp          (ifu_axi_bresp),
-    .ifu_axi_bid            (ifu_axi_bid),
-
-    .ifu_axi_arvalid        (ifu_axi_arvalid),
-    .ifu_axi_arready        (ifu_axi_arready),
-    .ifu_axi_arid           (ifu_axi_arid),
-    .ifu_axi_araddr         (ifu_axi_araddr),
-    .ifu_axi_arregion       (ifu_axi_arregion),
-    .ifu_axi_arlen          (ifu_axi_arlen),
-    .ifu_axi_arsize         (ifu_axi_arsize),
-    .ifu_axi_arburst        (ifu_axi_arburst),
-    .ifu_axi_arlock         (ifu_axi_arlock),
-    .ifu_axi_arcache        (ifu_axi_arcache),
-    .ifu_axi_arprot         (ifu_axi_arprot),
-    .ifu_axi_arqos          (ifu_axi_arqos),
-
-    .ifu_axi_rvalid         (ifu_axi_rvalid),
-    .ifu_axi_rready         (ifu_axi_rready),
-    .ifu_axi_rid            (ifu_axi_rid),
-    .ifu_axi_rdata          (ifu_axi_rdata),
-    .ifu_axi_rresp          (ifu_axi_rresp),
-    .ifu_axi_rlast          (ifu_axi_rlast),
-
-    //-------------------------- SB AXI signals--------------------------
-    // AXI Write Channels
-    .sb_axi_awvalid         (sb_axi_awvalid),
-    .sb_axi_awready         (sb_axi_awready),
-    .sb_axi_awid            (sb_axi_awid),
-    .sb_axi_awaddr          (sb_axi_awaddr),
-    .sb_axi_awregion        (sb_axi_awregion),
-    .sb_axi_awlen           (sb_axi_awlen),
-    .sb_axi_awsize          (sb_axi_awsize),
-    .sb_axi_awburst         (sb_axi_awburst),
-    .sb_axi_awlock          (sb_axi_awlock),
-    .sb_axi_awcache         (sb_axi_awcache),
-    .sb_axi_awprot          (sb_axi_awprot),
-    .sb_axi_awqos           (sb_axi_awqos),
-
-    .sb_axi_wvalid          (sb_axi_wvalid),
-    .sb_axi_wready          (sb_axi_wready),
-    .sb_axi_wdata           (sb_axi_wdata),
-    .sb_axi_wstrb           (sb_axi_wstrb),
-    .sb_axi_wlast           (sb_axi_wlast),
-
-    .sb_axi_bvalid          (sb_axi_bvalid),
-    .sb_axi_bready          (sb_axi_bready),
-    .sb_axi_bresp           (sb_axi_bresp),
-    .sb_axi_bid             (sb_axi_bid),
-
-
-    .sb_axi_arvalid         (sb_axi_arvalid),
-    .sb_axi_arready         (sb_axi_arready),
-    .sb_axi_arid            (sb_axi_arid),
-    .sb_axi_araddr          (sb_axi_araddr),
-    .sb_axi_arregion        (sb_axi_arregion),
-    .sb_axi_arlen           (sb_axi_arlen),
-    .sb_axi_arsize          (sb_axi_arsize),
-    .sb_axi_arburst         (sb_axi_arburst),
-    .sb_axi_arlock          (sb_axi_arlock),
-    .sb_axi_arcache         (sb_axi_arcache),
-    .sb_axi_arprot          (sb_axi_arprot),
-    .sb_axi_arqos           (sb_axi_arqos),
-
-    .sb_axi_rvalid          (sb_axi_rvalid),
-    .sb_axi_rready          (sb_axi_rready),
-    .sb_axi_rid             (sb_axi_rid),
-    .sb_axi_rdata           (sb_axi_rdata),
-    .sb_axi_rresp           (sb_axi_rresp),
-    .sb_axi_rlast           (sb_axi_rlast),
-
-    //-------------------------- DMA AXI signals--------------------------
-    // AXI Write Channels
-    .dma_axi_awvalid        (dma_axi_awvalid),
-    .dma_axi_awready        (dma_axi_awready),
-    .dma_axi_awid           ('0),
-    .dma_axi_awaddr         (lsu_axi_awaddr),
-    .dma_axi_awsize         (lsu_axi_awsize),
-    .dma_axi_awprot         (lsu_axi_awprot),
-    .dma_axi_awlen          (lsu_axi_awlen),
-    .dma_axi_awburst        (lsu_axi_awburst),
-
-
-    .dma_axi_wvalid         (dma_axi_wvalid),
-    .dma_axi_wready         (dma_axi_wready),
-    .dma_axi_wdata          (lsu_axi_wdata),
-    .dma_axi_wstrb          (lsu_axi_wstrb),
-    .dma_axi_wlast          (lsu_axi_wlast),
-
-    .dma_axi_bvalid         (dma_axi_bvalid),
-    .dma_axi_bready         (dma_axi_bready),
-    .dma_axi_bresp          (dma_axi_bresp),
-    .dma_axi_bid            (),
-
-
-    .dma_axi_arvalid        (dma_axi_arvalid),
-    .dma_axi_arready        (dma_axi_arready),
-    .dma_axi_arid           ('0),
-    .dma_axi_araddr         (lsu_axi_araddr),
-    .dma_axi_arsize         (lsu_axi_arsize),
-    .dma_axi_arprot         (lsu_axi_arprot),
-    .dma_axi_arlen          (lsu_axi_arlen),
-    .dma_axi_arburst        (lsu_axi_arburst),
-
-    .dma_axi_rvalid         (dma_axi_rvalid),
-    .dma_axi_rready         (dma_axi_rready),
-    .dma_axi_rid            (),
-    .dma_axi_rdata          (dma_axi_rdata),
-    .dma_axi_rresp          (dma_axi_rresp),
-    .dma_axi_rlast          (dma_axi_rlast),
-`endif
-    .timer_int              ( 1'b0     ),
-    .extintsrc_req          ( '0  ),
-
-    .lsu_bus_clk_en         ( 1'b1  ),// Clock ratio b/w cpu core clk & AHB master interface
-    .ifu_bus_clk_en         ( 1'b1  ),// Clock ratio b/w cpu core clk & AHB master interface
-    .dbg_bus_clk_en         ( 1'b1  ),// Clock ratio b/w cpu core clk & AHB Debug master interface
-    .dma_bus_clk_en         ( 1'b1  ),// Clock ratio b/w cpu core clk & AHB slave interface
-
-    .trace_rv_i_insn_ip     (trace_rv_i_insn_ip),
-    .trace_rv_i_address_ip  (trace_rv_i_address_ip),
-    .trace_rv_i_valid_ip    (trace_rv_i_valid_ip),
-    .trace_rv_i_exception_ip(trace_rv_i_exception_ip),
-    .trace_rv_i_ecause_ip   (trace_rv_i_ecause_ip),
-    .trace_rv_i_interrupt_ip(trace_rv_i_interrupt_ip),
-    .trace_rv_i_tval_ip     (trace_rv_i_tval_ip),
-
-    .jtag_tck               ( 1'b0  ),
-    .jtag_tms               ( 1'b0  ),
-    .jtag_tdi               ( 1'b0  ),
-    .jtag_trst_n            ( 1'b0  ),
-    .jtag_tdo               ( jtag_tdo ),
-
-    .mpc_debug_halt_ack     ( mpc_debug_halt_ack),
-    .mpc_debug_halt_req     ( 1'b0),
-    .mpc_debug_run_ack      ( mpc_debug_run_ack),
-    .mpc_debug_run_req      ( 1'b1),
-    .mpc_reset_run_req      ( 1'b1),             // Start running after reset
-     .debug_brkpt_status    (debug_brkpt_status),
-
-    .i_cpu_halt_req         ( 1'b0  ),    // Async halt req to CPU
-    .o_cpu_halt_ack         ( o_cpu_halt_ack ),    // core response to halt
-    .o_cpu_halt_status      ( o_cpu_halt_status ), // 1'b1 indicates core is halted
-    .i_cpu_run_req          ( 1'b0  ),     // Async restart req to CPU
-    .o_debug_mode_status    (o_debug_mode_status),
-    .o_cpu_run_ack          ( o_cpu_run_ack ),     // Core response to run req
-
-    .dec_tlu_perfcnt0       (),
-    .dec_tlu_perfcnt1       (),
-    .dec_tlu_perfcnt2       (),
-    .dec_tlu_perfcnt3       (),
-
-// remove mems DFT pins for opensource
-    .dccm_ext_in_pkt        ('0),
-    .iccm_ext_in_pkt        ('0),
-    .ic_data_ext_in_pkt     ('0),
-    .ic_tag_ext_in_pkt      ('0),
-
-    .soft_int               ('0),
-    .core_id                ('0),
-    .scan_mode              ( 1'b0 ),         // To enable scan mode
-    .mbist_mode             ( 1'b0 )        // to enable mbist
-
-);
-
-
-   //=========================================================================-
-   // AHB I$ instance
-   //=========================================================================-
-`ifdef RV_BUILD_AHB_LITE
-
-ahb_sif imem (
-     // Inputs
-     .HWDATA(64'h0),
-     .HCLK(core_clk),
-     .HSEL(1'b1),
-     .HPROT(ic_hprot),
-     .HWRITE(ic_hwrite),
-     .HTRANS(ic_htrans),
-     .HSIZE(ic_hsize),
-     .HREADY(ic_hready),
-     .HRESETn(rst_l),
-     .HADDR(ic_haddr),
-     .HBURST(ic_hburst),
-
-     // Outputs
-     .HREADYOUT(ic_hready),
-     .HRESP(ic_hresp),
-     .HRDATA(ic_hrdata[63:0])
-);
-
-
-ahb_sif lmem (
-     // Inputs
-     .HWDATA(lsu_hwdata),
-     .HCLK(core_clk),
-     .HSEL(1'b1),
-     .HPROT(lsu_hprot),
-     .HWRITE(lsu_hwrite),
-     .HTRANS(lsu_htrans),
-     .HSIZE(lsu_hsize),
-     .HREADY(lsu_hready),
-     .HRESETn(rst_l),
-     .HADDR(lsu_haddr),
-     .HBURST(lsu_hburst),
-
-     // Outputs
-     .HREADYOUT(lsu_hready),
-     .HRESP(lsu_hresp),
-     .HRDATA(lsu_hrdata[63:0])
-);
-
-`endif
-`ifdef RV_BUILD_AXI4
-axi_slv #(.TAGW(`RV_IFU_BUS_TAG)) imem(
-    .aclk(core_clk),
-    .rst_l(rst_l),
-    .arvalid(ifu_axi_arvalid),
-    .arready(ifu_axi_arready),
-    .araddr(ifu_axi_araddr),
-    .arid(ifu_axi_arid),
-    .arlen(ifu_axi_arlen),
-    .arburst(ifu_axi_arburst),
-    .arsize(ifu_axi_arsize),
-
-    .rvalid(ifu_axi_rvalid),
-    .rready(ifu_axi_rready),
-    .rdata(ifu_axi_rdata),
-    .rresp(ifu_axi_rresp),
-    .rid(ifu_axi_rid),
-    .rlast(ifu_axi_rlast),
-
-    .awvalid(1'b0),
-    .awready(),
-    .awaddr('0),
-    .awid('0),
-    .awlen('0),
-    .awburst('0),
-    .awsize('0),
-
-    .wdata('0),
-    .wstrb('0),
-    .wvalid(1'b0),
-    .wready(),
-
-    .bvalid(),
-    .bready(1'b0),
-    .bresp(),
-    .bid()
-);
-
-defparam lmem.TAGW =`RV_LSU_BUS_TAG;
-
-//axi_slv #(.TAGW(`RV_LSU_BUS_TAG)) lmem(
-axi_slv  lmem(
-    .aclk(core_clk),
-    .rst_l(rst_l),
-    .arvalid(lmem_axi_arvalid),
-    .arready(lmem_axi_arready),
-    .araddr(lsu_axi_araddr),
-    .arid(lsu_axi_arid),
-    .arlen(lsu_axi_arlen),
-    .arburst(lsu_axi_arburst),
-    .arsize(lsu_axi_arsize),
-
-    .rvalid(lmem_axi_rvalid),
-    .rready(lmem_axi_rready),
-    .rdata(lmem_axi_rdata),
-    .rresp(lmem_axi_rresp),
-    .rid(lmem_axi_rid),
-    .rlast(lmem_axi_rlast),
-
-    .awvalid(lmem_axi_awvalid),
-    .awready(lmem_axi_awready),
-    .awaddr(lsu_axi_awaddr),
-    .awid(lsu_axi_awid),
-    .awlen(lsu_axi_awlen),
-    .awburst(lsu_axi_awburst),
-    .awsize(lsu_axi_awsize),
-
-    .wdata(lsu_axi_wdata),
-    .wstrb(lsu_axi_wstrb),
-    .wvalid(lmem_axi_wvalid),
-    .wready(lmem_axi_wready),
-
-    .bvalid(lmem_axi_bvalid),
-    .bready(lmem_axi_bready),
-    .bresp(lmem_axi_bresp),
-    .bid(lmem_axi_bid)
-);
-
-axi_lsu_dma_bridge # (`RV_LSU_BUS_TAG,`RV_LSU_BUS_TAG ) bridge(
-    .clk(core_clk),
-    .reset_l(rst_l),
-
-    .m_arvalid(lsu_axi_arvalid),
-    .m_arid(lsu_axi_arid),
-    .m_araddr(lsu_axi_araddr),
-    .m_arready(lsu_axi_arready),
-
-    .m_rvalid(lsu_axi_rvalid),
-    .m_rready(lsu_axi_rready),
-    .m_rdata(lsu_axi_rdata),
-    .m_rid(lsu_axi_rid),
-    .m_rresp(lsu_axi_rresp),
-    .m_rlast(lsu_axi_rlast),
-
-    .m_awvalid(lsu_axi_awvalid),
-    .m_awid(lsu_axi_awid),
-    .m_awaddr(lsu_axi_awaddr),
-    .m_awready(lsu_axi_awready),
-
-    .m_wvalid(lsu_axi_wvalid),
-    .m_wready(lsu_axi_wready),
-
-    .m_bresp(lsu_axi_bresp),
-    .m_bvalid(lsu_axi_bvalid),
-    .m_bid(lsu_axi_bid),
-    .m_bready(lsu_axi_bready),
-
-    .s0_arvalid(lmem_axi_arvalid),
-    .s0_arready(lmem_axi_arready),
-
-    .s0_rvalid(lmem_axi_rvalid),
-    .s0_rid(lmem_axi_rid),
-    .s0_rresp(lmem_axi_rresp),
-    .s0_rdata(lmem_axi_rdata),
-    .s0_rlast(lmem_axi_rlast),
-    .s0_rready(lmem_axi_rready),
-
-    .s0_awvalid(lmem_axi_awvalid),
-    .s0_awready(lmem_axi_awready),
-
-    .s0_wvalid(lmem_axi_wvalid),
-    .s0_wready(lmem_axi_wready),
-
-    .s0_bresp(lmem_axi_bresp),
-    .s0_bvalid(lmem_axi_bvalid),
-    .s0_bid(lmem_axi_bid),
-    .s0_bready(lmem_axi_bready),
-
-
-    .s1_arvalid(dma_axi_arvalid),
-    .s1_arready(dma_axi_arready),
-
-    .s1_rvalid(dma_axi_rvalid),
-    .s1_rresp(dma_axi_rresp),
-    .s1_rdata(dma_axi_rdata),
-    .s1_rlast(dma_axi_rlast),
-    .s1_rready(dma_axi_rready),
-
-    .s1_awvalid(dma_axi_awvalid),
-    .s1_awready(dma_axi_awready),
-
-    .s1_wvalid(dma_axi_wvalid),
-    .s1_wready(dma_axi_wready),
-
-    .s1_bresp(dma_axi_bresp),
-    .s1_bvalid(dma_axi_bvalid),
-    .s1_bready(dma_axi_bready)
-);
-
-
-`endif
-
-
-/*
-task preload_iccm;
-bit[31:0] data;
-bit[31:0] addr, eaddr, saddr;
-
-/*
-addresses:
- 0xfffffff0 - ICCM start address to load
- 0xfffffff4 - ICCM end address to load
-*/
-/*
-addr = 'hffff_fff0;
-saddr = {lmem.mem[addr+3],lmem.mem[addr+2],lmem.mem[addr+1],lmem.mem[addr]};
-if ( (saddr < `RV_ICCM_SADR) || (saddr > `RV_ICCM_EADR)) return;
-`ifndef RV_ICCM_ENABLE
-    $display("********************************************************");
-    $display("ICCM preload: there is no ICCM in brqrv, terminating !!!");
-    $display("********************************************************");
-    $finish;
-`endif
-addr += 4;
-eaddr = {lmem.mem[addr+3],lmem.mem[addr+2],lmem.mem[addr+1],lmem.mem[addr]};
-$display("ICCM pre-load from %h to %h", saddr, eaddr);
-
-for(addr= saddr; addr <= eaddr; addr+=4) begin
-    data = {imem.mem[addr+3],imem.mem[addr+2],imem.mem[addr+1],imem.mem[addr]};
-    slam_iccm_ram(addr, data == 0 ? 0 : {riscv_ecc32(data),data});
-end
-
-endtask
-*/
-/*
-task preload_dccm;
-bit[31:0] data;
-bit[31:0] addr, saddr, eaddr;
-
-/*
-addresses:
- 0xffff_fff8 - DCCM start address to load
- 0xffff_fffc - DCCM end address to load
-*/
-/*
-addr = 'hffff_fff8;
-saddr = {lmem.mem[addr+3],lmem.mem[addr+2],lmem.mem[addr+1],lmem.mem[addr]}; // f0040000
-if (saddr < `RV_DCCM_SADR || saddr > `RV_DCCM_EADR) return;
-`ifndef RV_DCCM_ENABLE
-    $display("********************************************************");
-    $display("DCCM preload: there is no DCCM in brqrv, terminating !!!");
-    $display("********************************************************");
-    $finish;
-`endif
-addr += 4;
-eaddr = {lmem.mem[addr+3],lmem.mem[addr+2],lmem.mem[addr+1],lmem.mem[addr]};
-$display("DCCM pre-load from %h to %h", saddr, eaddr);
-
-for(addr=saddr; addr <= eaddr; addr+=4) begin
-    data = {lmem.mem[addr+3],lmem.mem[addr+2],lmem.mem[addr+1],lmem.mem[addr]};
-    slam_dccm_ram(addr, data == 0 ? 0 : {riscv_ecc32(data),data});
-end
-
-endtask
-
-
-
-//`define ICCM_PATH `RV_TOP.mem.iccm.iccm
-`ifdef VERILATOR
-`define DRAM(bk) rvtop.mem.Gen_dccm_enable.dccm.mem_bank[bk].sram.mem
-//`define IRAM(bk) `ICCM_PATH.mem_bank[bk].iccm_bank.ram_core
-//`define IRAM(bk) `ICCM_PATH.mem_bank[bk].sram.mem
-`else
-`define DRAM(bk) rvtop.mem.Gen_dccm_enable.dccm.mem_bank[bk].dccm.dccm_bank.ram_core
-//`define IRAM(bk) `ICCM_PATH.mem_bank[bk].iccm.iccm_bank.ram_core
-`endif
-
-
-task slam_dccm_ram(input [31:0] addr, input[38:0] data);
-int bank, indx;
-bank = get_dccm_bank(addr, indx);
-`ifdef RV_DCCM_ENABLE
-case(bank)
-0: `DRAM(0)[indx] = data;
-1: `DRAM(1)[indx] = data;
-`ifdef RV_DCCM_NUM_BANKS_4
-2: `DRAM(2)[indx] = data;
-3: `DRAM(3)[indx] = data;
-`endif
-`ifdef RV_DCCM_NUM_BANKS_8
-2: `DRAM(2)[indx] = data;
-3: `DRAM(3)[indx] = data;
-4: `DRAM(4)[indx] = data;
-5: `DRAM(5)[indx] = data;
-6: `DRAM(6)[indx] = data;
-7: `DRAM(7)[indx] = data;
-`endif
-endcase
-`endif
-//$display("Writing bank %0d indx=%0d A=%h, D=%h",bank, indx, addr, data);
-endtask
-
-
-/*task slam_iccm_ram( input[31:0] addr, input[38:0] data);
-int bank, idx;
-
-bank = get_iccm_bank(addr, idx);
-`ifdef RV_ICCM_ENABLE
-case(bank) // {
-  0: `IRAM(0)[idx] = data;
-  1: `IRAM(1)[idx] = data;
- `ifdef RV_ICCM_NUM_BANKS_4
-  2: `IRAM(2)[idx] = data;
-  3: `IRAM(3)[idx] = data;
- `endif
- `ifdef RV_ICCM_NUM_BANKS_8
-  2: `IRAM(2)[idx] = data;
-  3: `IRAM(3)[idx] = data;
-  4: `IRAM(4)[idx] = data;
-  5: `IRAM(5)[idx] = data;
-  6: `IRAM(6)[idx] = data;
-  7: `IRAM(7)[idx] = data;
- `endif
-
- `ifdef RV_ICCM_NUM_BANKS_16
-  2: `IRAM(2)[idx] = data;
-  3: `IRAM(3)[idx] = data;
-  4: `IRAM(4)[idx] = data;
-  5: `IRAM(5)[idx] = data;
-  6: `IRAM(6)[idx] = data;
-  7: `IRAM(7)[idx] = data;
-  8: `IRAM(8)[idx] = data;
-  9: `IRAM(9)[idx] = data;
-  10: `IRAM(10)[idx] = data;
-  11: `IRAM(11)[idx] = data;
-  12: `IRAM(12)[idx] = data;
-  13: `IRAM(13)[idx] = data;
-  14: `IRAM(14)[idx] = data;
-  15: `IRAM(15)[idx] = data;
- `endif
-endcase // }
-`endif
-endtask
-
-task init_iccm;
-`ifdef RV_ICCM_ENABLE
-    `IRAM(0) = '{default:39'h0};
-    `IRAM(1) = '{default:39'h0};
-`ifdef RV_ICCM_NUM_BANKS_4
-    `IRAM(2) = '{default:39'h0};
-    `IRAM(3) = '{default:39'h0};
-`endif
-`ifdef RV_ICCM_NUM_BANKS_8
-    `IRAM(4) = '{default:39'h0};
-    `IRAM(5) = '{default:39'h0};
-    `IRAM(6) = '{default:39'h0};
-    `IRAM(7) = '{default:39'h0};
-`endif
-
-`ifdef RV_ICCM_NUM_BANKS_16
-    `IRAM(4) = '{default:39'h0};
-    `IRAM(5) = '{default:39'h0};
-    `IRAM(6) = '{default:39'h0};
-    `IRAM(7) = '{default:39'h0};
-    `IRAM(8) = '{default:39'h0};
-    `IRAM(9) = '{default:39'h0};
-    `IRAM(10) = '{default:39'h0};
-    `IRAM(11) = '{default:39'h0};
-    `IRAM(12) = '{default:39'h0};
-    `IRAM(13) = '{default:39'h0};
-    `IRAM(14) = '{default:39'h0};
-    `IRAM(15) = '{default:39'h0};
- `endif
-`endif
-endtask
-*/
-/*
-function[6:0] riscv_ecc32(input[31:0] data);
-reg[6:0] synd;
-synd[0] = ^(data & 32'h56aa_ad5b);
-synd[1] = ^(data & 32'h9b33_366d);
-synd[2] = ^(data & 32'he3c3_c78e);
-synd[3] = ^(data & 32'h03fc_07f0);
-synd[4] = ^(data & 32'h03ff_f800);
-synd[5] = ^(data & 32'hfc00_0000);
-synd[6] = ^{data, synd[5:0]};
-return synd;
-endfunction
-
-function int get_dccm_bank(input[31:0] addr,  output int bank_idx);
-`ifdef RV_DCCM_NUM_BANKS_2
-    bank_idx = int'(addr[`RV_DCCM_BITS-1:3]);
-    return int'( addr[2]);
-`elsif RV_DCCM_NUM_BANKS_4
-    bank_idx = int'(addr[`RV_DCCM_BITS-1:4]);
-    return int'(addr[3:2]);
-`elsif RV_DCCM_NUM_BANKS_8
-    bank_idx = int'(addr[`RV_DCCM_BITS-1:5]);
-    return int'( addr[4:2]);
-`endif
-endfunction
-/*
-function int get_iccm_bank(input[31:0] addr,  output int bank_idx);
-`ifdef RV_DCCM_NUM_BANKS_2
-    bank_idx = int'(addr[`RV_DCCM_BITS-1:3]);
-    return int'( addr[2]);
-`elsif RV_ICCM_NUM_BANKS_4
-    bank_idx = int'(addr[`RV_ICCM_BITS-1:4]);
-    return int'(addr[3:2]);
-`elsif RV_ICCM_NUM_BANKS_8
-    bank_idx = int'(addr[`RV_ICCM_BITS-1:5]);
-    return int'( addr[4:2]);
-`elsif RV_ICCM_NUM_BANKS_16
-    bank_idx = int'(addr[`RV_ICCM_BITS-1:6]);
-    return int'( addr[5:2]);
-`endif
-endfunction
-*/
-/* verilator lint_off CASEINCOMPLETE */
-`include "dasm.svi"
-/* verilator lint_on CASEINCOMPLETE */
-
-endmodule
diff --git a/verilog/rtl/BrqRV_EB1/testbench/test_tb_top.cpp b/verilog/rtl/BrqRV_EB1/testbench/test_tb_top.cpp
deleted file mode 100644
index d2aa1c2..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/test_tb_top.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-#include <stdlib.h>
-#include <iostream>
-#include <utility>
-#include <string>
-#include "Vtb_top.h"
-#include "verilated.h"
-#include "verilated_vcd_c.h"
-
-
-vluint64_t main_time = 0;
-
-double sc_time_stamp () {
- return main_time;
-}
-
-
-int main(int argc, char** argv) {
-  std::cout << "\nVerilatorTB: Start of sim\n" << std::endl;
-
-  Verilated::commandArgs(argc, argv);
-
-  Vtb_top* tb = new Vtb_top;
-
-  // init trace dump
-  VerilatedVcdC* tfp = NULL;
-
-#if VM_TRACE
-  Verilated::traceEverOn(true);
-  tfp = new VerilatedVcdC;
-  tb->trace (tfp, 24);
-  tfp->open ("sim.vcd");
-#endif
-  // Simulate
-  while(!Verilated::gotFinish()){
-#if VM_TRACE
-      tfp->dump (main_time);
-#endif
-      main_time += 12.5;
-      tb->core_clk = !tb->core_clk;
-      tb->eval();
-      
-      //if(main_time > 100) {
-     // 	tb->r_clk = !tb->r_clk; 
-     // }
-  }
-
-
-#if VM_TRACE
-  tfp->close();
-#endif
-
-  std::cout << "\nVerilatorTB: End of sim" << std::endl;
-  exit(EXIT_SUCCESS);
-
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/Makefile b/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/Makefile
deleted file mode 100644
index 2313be7..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-export TEST = cmark
-#export CONF_PARAMS= -set=btb_size=512 -set=bht_size=2048 -set=iccm_size=128
-export CONF_PARAMS= -set=btb_size=512 -set=bht_size=2048 -set=iccm_enable=0
-export OFILES = crt0.o cmark.o printf.o 
-export BUILD_PATH = $(shell pwd)/snapshots/default
-export TEST_CFLAGS = -finline-limit=400 -mbranch-cost=1 -Ofast -fno-code-hoisting -funroll-all-loops
-
-program.hex:
-	$(MAKE) -e -f $(RV_ROOT)/tools/make.common $(BUILD_PATH)/defines.h
-	$(MAKE) -e -f $(RV_ROOT)/tools/make.common $@
-
-.DEFAULT:
-	$(MAKE) -e program.hex
-	$(MAKE) -e -f $(RV_ROOT)/tools/make.common $@
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/cmark.c b/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/cmark.c
deleted file mode 100644
index b366c80..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/cmark.c
+++ /dev/null
@@ -1,2167 +0,0 @@
-#include "defines.h"
-
-#define ITERATIONS 1
-
-
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-
-//#include "/wd/users/jrahmeh/coremark_v1.0/riscv/coremark.h"
-
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-/* Topic: Description
-        This file contains  declarations of the various benchmark functions.
-*/
-
-/* Configuration: TOTAL_DATA_SIZE
-        Define total size for data algorithms will operate on
-*/
-#ifndef TOTAL_DATA_SIZE
-#define TOTAL_DATA_SIZE 2*1000
-#endif
-
-#define SEED_ARG 0
-#define SEED_FUNC 1
-#define SEED_VOLATILE 2
-
-#define MEM_STATIC 0
-#define MEM_MALLOC 1
-#define MEM_STACK 2
-
-/* File : core_portme.h */
-
-/*
-        Author : Shay Gal-On, EEMBC
-        Legal : TODO!
-*/
-/* Topic : Description
-        This file contains configuration constants required to execute on different platforms
-*/
-#ifndef CORE_PORTME_H
-#define CORE_PORTME_H
-/************************/
-/* Data types and settings */
-/************************/
-/* Configuration : HAS_FLOAT
-        Define to 1 if the platform supports floating point.
-*/
-#ifndef HAS_FLOAT
-#define HAS_FLOAT 0
-#endif
-/* Configuration : HAS_TIME_H
-        Define to 1 if platform has the time.h header file,
-        and implementation of functions thereof.
-*/
-#ifndef HAS_TIME_H
-#define HAS_TIME_H 0
-#endif
-/* Configuration : USE_CLOCK
-        Define to 1 if platform has the time.h header file,
-        and implementation of functions thereof.
-*/
-#ifndef USE_CLOCK
-#define USE_CLOCK 0
-#endif
-/* Configuration : HAS_STDIO
-        Define to 1 if the platform has stdio.h.
-*/
-#ifndef HAS_STDIO
-#define HAS_STDIO 0
-#endif
-/* Configuration : HAS_PRINTF
-        Define to 1 if the platform has stdio.h and implements the printf function.
-*/
-#ifndef HAS_PRINTF
-#define HAS_PRINTF 1
-int whisperPrintf(const char* format, ...);
-#define ee_printf whisperPrintf
-#endif
-
-/* Configuration : CORE_TICKS
-        Define type of return from the timing functions.
- */
-#include <time.h>
-typedef clock_t CORE_TICKS;
-
-/* Definitions : COMPILER_VERSION, COMPILER_FLAGS, MEM_LOCATION
-        Initialize these strings per platform
-*/
-#ifndef COMPILER_VERSION
- #ifdef __GNUC__
- #define COMPILER_VERSION "GCC"__VERSION__
- #else
- #define COMPILER_VERSION "Please put compiler version here (e.g. gcc 4.1)"
- #endif
-#endif
-#ifndef COMPILER_FLAGS
- #define COMPILER_FLAGS "-O2"
-#endif
-
-#ifndef MEM_LOCATION
-// #define MEM_LOCATION "STACK"
- #define MEM_LOCATION "STATIC"
-#endif
-
-/* Data Types :
-        To avoid compiler issues, define the data types that need ot be used for 8b, 16b and 32b in <core_portme.h>.
-
-        *Imprtant* :
-        ee_ptr_int needs to be the data type used to hold pointers, otherwise coremark may fail!!!
-*/
-typedef signed short ee_s16;
-typedef unsigned short ee_u16;
-typedef signed int ee_s32;
-typedef double ee_f32;
-typedef unsigned char ee_u8;
-typedef unsigned int ee_u32;
-typedef ee_u32 ee_ptr_int;
-typedef size_t ee_size_t;
-/* align_mem :
-        This macro is used to align an offset to point to a 32b value. It is used in the Matrix algorithm to initialize the input memory blocks.
-*/
-#define align_mem(x) (void *)(4 + (((ee_ptr_int)(x) - 1) & ~3))
-
-/* Configuration : SEED_METHOD
-        Defines method to get seed values that cannot be computed at compile time.
-
-        Valid values :
-        SEED_ARG - from command line.
-        SEED_FUNC - from a system function.
-        SEED_VOLATILE - from volatile variables.
-*/
-#ifndef SEED_METHOD
-#define SEED_METHOD SEED_VOLATILE
-#endif
-
-/* Configuration : MEM_METHOD
-        Defines method to get a block of memry.
-
-        Valid values :
-        MEM_MALLOC - for platforms that implement malloc and have malloc.h.
-        MEM_STATIC - to use a static memory array.
-        MEM_STACK - to allocate the data block on the stack (NYI).
-*/
-#ifndef MEM_METHOD
-//#define MEM_METHOD MEM_STACK
-#define MEM_METHOD MEM_STATIC
-#endif
-
-/* Configuration : MULTITHREAD
-        Define for parallel execution
-
-        Valid values :
-        1 - only one context (default).
-        N>1 - will execute N copies in parallel.
-
-        Note :
-        If this flag is defined to more then 1, an implementation for launching parallel contexts must be defined.
-
-        Two sample implementations are provided. Use <USE_PTHREAD> or <USE_FORK> to enable them.
-
-        It is valid to have a different implementation of <core_start_parallel> and <core_end_parallel> in <core_portme.c>,
-        to fit a particular architecture.
-*/
-#ifndef MULTITHREAD
-#define MULTITHREAD 1
-#define USE_PTHREAD 0
-#define USE_FORK 0
-#define USE_SOCKET 0
-#endif
-
-/* Configuration : MAIN_HAS_NOARGC
-        Needed if platform does not support getting arguments to main.
-
-        Valid values :
-        0 - argc/argv to main is supported
-        1 - argc/argv to main is not supported
-
-        Note :
-        This flag only matters if MULTITHREAD has been defined to a value greater then 1.
-*/
-#ifndef MAIN_HAS_NOARGC
-#define MAIN_HAS_NOARGC 1
-#endif
-
-/* Configuration : MAIN_HAS_NORETURN
-        Needed if platform does not support returning a value from main.
-
-        Valid values :
-        0 - main returns an int, and return value will be 0.
-        1 - platform does not support returning a value from main
-*/
-#ifndef MAIN_HAS_NORETURN
-#define MAIN_HAS_NORETURN 1
-#endif
-
-/* Variable : default_num_contexts
-        Not used for this simple port, must cintain the value 1.
-*/
-extern ee_u32 default_num_contexts;
-
-typedef struct CORE_PORTABLE_S {
-        ee_u8   portable_id;
-} core_portable;
-
-/* target specific init/fini */
-void portable_init(core_portable *p, int *argc, char *argv[]);
-void portable_fini(core_portable *p);
-
-#if !defined(PROFILE_RUN) && !defined(PERFORMANCE_RUN) && !defined(VALIDATION_RUN)
-#if (TOTAL_DATA_SIZE==1200)
-#define PROFILE_RUN 1
-#elif (TOTAL_DATA_SIZE==2000)
-#define PERFORMANCE_RUN 1
-#else
-#define VALIDATION_RUN 1
-#endif
-#endif
-
-#endif /* CORE_PORTME_H */
-
-
-#if HAS_STDIO
-#include <stdio.h>
-#endif
-#if HAS_PRINTF
-#ifndef ee_printf
-#define ee_printf printf
-#endif
-#endif
-
-/* Actual benchmark execution in iterate */
-void *iterate(void *pres);
-
-/* Typedef: secs_ret
-        For machines that have floating point support, get number of seconds as a double.
-        Otherwise an unsigned int.
-*/
-#if HAS_FLOAT
-typedef double secs_ret;
-#else
-typedef ee_u32 secs_ret;
-#endif
-
-#if MAIN_HAS_NORETURN
-#define MAIN_RETURN_VAL
-#define MAIN_RETURN_TYPE void
-#else
-#define MAIN_RETURN_VAL 0
-#define MAIN_RETURN_TYPE int
-#endif
-
-void start_time(void);
-void stop_time(void);
-CORE_TICKS get_time(void);
-secs_ret time_in_secs(CORE_TICKS ticks);
-
-/* Misc useful functions */
-ee_u16 crcu8(ee_u8 data, ee_u16 crc);
-ee_u16 crc16(ee_s16 newval, ee_u16 crc);
-ee_u16 crcu16(ee_u16 newval, ee_u16 crc);
-ee_u16 crcu32(ee_u32 newval, ee_u16 crc);
-ee_u8 check_data_types();
-void *portable_malloc(ee_size_t size);
-void portable_free(void *p);
-ee_s32 parseval(char *valstring);
-
-/* Algorithm IDS */
-#define ID_LIST         (1<<0)
-#define ID_MATRIX       (1<<1)
-#define ID_STATE        (1<<2)
-#define ALL_ALGORITHMS_MASK (ID_LIST|ID_MATRIX|ID_STATE)
-#define NUM_ALGORITHMS 3
-
-/* list data structures */
-typedef struct list_data_s {
-        ee_s16 data16;
-        ee_s16 idx;
-} list_data;
-
-typedef struct list_head_s {
-        struct list_head_s *next;
-        struct list_data_s *info;
-} list_head;
-
-
-/*matrix benchmark related stuff */
-#define MATDAT_INT 1
-#if MATDAT_INT
-typedef ee_s16 MATDAT;
-typedef ee_s32 MATRES;
-#else
-typedef ee_f16 MATDAT;
-typedef ee_f32 MATRES;
-#endif
-
-typedef struct MAT_PARAMS_S {
-        int N;
-        MATDAT *A;
-        MATDAT *B;
-        MATRES *C;
-} mat_params;
-
-/* state machine related stuff */
-/* List of all the possible states for the FSM */
-typedef enum CORE_STATE {
-        CORE_START=0,
-        CORE_INVALID,
-        CORE_S1,
-        CORE_S2,
-        CORE_INT,
-        CORE_FLOAT,
-        CORE_EXPONENT,
-        CORE_SCIENTIFIC,
-        NUM_CORE_STATES
-} core_state_e ;
-
-
-/* Helper structure to hold results */
-typedef struct RESULTS_S {
-        /* inputs */
-        ee_s16  seed1;          /* Initializing seed */
-        ee_s16  seed2;          /* Initializing seed */
-        ee_s16  seed3;          /* Initializing seed */
-        void    *memblock[4];   /* Pointer to safe memory location */
-        ee_u32  size;           /* Size of the data */
-        ee_u32 iterations;              /* Number of iterations to execute */
-        ee_u32  execs;          /* Bitmask of operations to execute */
-        struct list_head_s *list;
-        mat_params mat;
-        /* outputs */
-        ee_u16  crc;
-        ee_u16  crclist;
-        ee_u16  crcmatrix;
-        ee_u16  crcstate;
-        ee_s16  err;
-        /* ultithread specific */
-        core_portable port;
-} core_results;
-
-/* Multicore execution handling */
-#if (MULTITHREAD>1)
-ee_u8 core_start_parallel(core_results *res);
-ee_u8 core_stop_parallel(core_results *res);
-#endif
-
-/* list benchmark functions */
-list_head *core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed);
-ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx);
-
-/* state benchmark functions */
-void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p);
-ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock,
-                ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc);
-
-/* matrix benchmark functions */
-ee_u32 core_init_matrix(ee_u32 blksize, void *memblk, ee_s32 seed, mat_params *p);
-ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc);
-
-
-
-
-
-/*
-Topic: Description
-        Benchmark using a linked list.
-
-        Linked list is a common data structure used in many applications.
-
-        For our purposes, this will excercise the memory units of the processor.
-        In particular, usage of the list pointers to find and alter data.
-
-        We are not using Malloc since some platforms do not support this library.
-
-        Instead, the memory block being passed in is used to create a list,
-        and the benchmark takes care not to add more items then can be
-        accomodated by the memory block. The porting layer will make sure
-        that we have a valid memory block.
-
-        All operations are done in place, without using any extra memory.
-
-        The list itself contains list pointers and pointers to data items.
-        Data items contain the following:
-
-        idx - An index that captures the initial order of the list.
-        data - Variable data initialized based on the input parameters. The 16b are divided as follows:
-        o Upper 8b are backup of original data.
-        o Bit 7 indicates if the lower 7 bits are to be used as is or calculated.
-        o Bits 0-2 indicate type of operation to perform to get a 7b value.
-        o Bits 3-6 provide input for the operation.
-
-*/
-
-/* local functions */
-
-list_head *core_list_find(list_head *list,list_data *info);
-list_head *core_list_reverse(list_head *list);
-list_head *core_list_remove(list_head *item);
-list_head *core_list_undo_remove(list_head *item_removed, list_head *item_modified);
-list_head *core_list_insert_new(list_head *insert_point
-        , list_data *info, list_head **memblock, list_data **datablock
-        , list_head *memblock_end, list_data *datablock_end);
-typedef ee_s32(*list_cmp)(list_data *a, list_data *b, core_results *res);
-list_head *core_list_mergesort(list_head *list, list_cmp cmp, core_results *res);
-
-ee_s16 calc_func(ee_s16 *pdata, core_results *res) {
-        ee_s16 data=*pdata;
-        ee_s16 retval;
-        ee_u8 optype=(data>>7) & 1; /* bit 7 indicates if the function result has been cached */
-        if (optype) /* if cached, use cache */
-                return (data & 0x007f);
-        else { /* otherwise calculate and cache the result */
-                ee_s16 flag=data & 0x7; /* bits 0-2 is type of function to perform */
-                ee_s16 dtype=((data>>3) & 0xf); /* bits 3-6 is specific data for the operation */
-                dtype |= dtype << 4; /* replicate the lower 4 bits to get an 8b value */
-                switch (flag) {
-                        case 0:
-                                if (dtype<0x22) /* set min period for bit corruption */
-                                        dtype=0x22;
-                                retval=core_bench_state(res->size,res->memblock[3],res->seed1,res->seed2,dtype,res->crc);
-                                if (res->crcstate==0)
-                                        res->crcstate=retval;
-                                break;
-                        case 1:
-                                retval=core_bench_matrix(&(res->mat),dtype,res->crc);
-                                if (res->crcmatrix==0)
-                                        res->crcmatrix=retval;
-                                break;
-                        default:
-                                retval=data;
-                                break;
-                }
-                res->crc=crcu16(retval,res->crc);
-                retval &= 0x007f;
-                *pdata = (data & 0xff00) | 0x0080 | retval; /* cache the result */
-                return retval;
-        }
-}
-/* Function: cmp_complex
-        Compare the data item in a list cell.
-
-        Can be used by mergesort.
-*/
-ee_s32 cmp_complex(list_data *a, list_data *b, core_results *res) {
-        ee_s16 val1=calc_func(&(a->data16),res);
-        ee_s16 val2=calc_func(&(b->data16),res);
-        return val1 - val2;
-}
-
-/* Function: cmp_idx
-        Compare the idx item in a list cell, and regen the data.
-
-        Can be used by mergesort.
-*/
-ee_s32 cmp_idx(list_data *a, list_data *b, core_results *res) {
-        if (res==NULL) {
-                a->data16 = (a->data16 & 0xff00) | (0x00ff & (a->data16>>8));
-                b->data16 = (b->data16 & 0xff00) | (0x00ff & (b->data16>>8));
-        }
-        return a->idx - b->idx;
-}
-
-void copy_info(list_data *to,list_data *from) {
-        to->data16=from->data16;
-        to->idx=from->idx;
-}
-
-/* Benchmark for linked list:
-        - Try to find multiple data items.
-        - List sort
-        - Operate on data from list (crc)
-        - Single remove/reinsert
-        * At the end of this function, the list is back to original state
-*/
-ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx) {
-        ee_u16 retval=0;
-        ee_u16 found=0,missed=0;
-        list_head *list=res->list;
-        ee_s16 find_num=res->seed3;
-        list_head *this_find;
-        list_head *finder, *remover;
-        list_data info;
-        ee_s16 i;
-
-        info.idx=finder_idx;
-        /* find <find_num> values in the list, and change the list each time (reverse and cache if value found) */
-        for (i=0; i<find_num; i++) {
-                info.data16= (i & 0xff) ;
-                this_find=core_list_find(list,&info);
-                list=core_list_reverse(list);
-                if (this_find==NULL) {
-                        missed++;
-                        retval+=(list->next->info->data16 >> 8) & 1;
-                }
-                else {
-                        found++;
-                        if (this_find->info->data16 & 0x1) /* use found value */
-                                retval+=(this_find->info->data16 >> 9) & 1;
-                        /* and cache next item at the head of the list (if any) */
-                        if (this_find->next != NULL) {
-                                finder = this_find->next;
-                                this_find->next = finder->next;
-                                finder->next=list->next;
-                                list->next=finder;
-                        }
-                }
-                if (info.idx>=0)
-                        info.idx++;
-#if CORE_DEBUG
-        ee_printf("List find %d: [%d,%d,%d]\n",i,retval,missed,found);
-#endif
-        }
-        retval+=found*4-missed;
-        /* sort the list by data content and remove one item*/
-        if (finder_idx>0)
-                list=core_list_mergesort(list,cmp_complex,res);
-        remover=core_list_remove(list->next);
-        /* CRC data content of list from location of index N forward, and then undo remove */
-        finder=core_list_find(list,&info);
-        if (!finder)
-                finder=list->next;
-        while (finder) {
-                retval=crc16(list->info->data16,retval);
-                finder=finder->next;
-        }
-#if CORE_DEBUG
-        ee_printf("List sort 1: %04x\n",retval);
-#endif
-        remover=core_list_undo_remove(remover,list->next);
-        /* sort the list by index, in effect returning the list to original state */
-        list=core_list_mergesort(list,cmp_idx,NULL);
-        /* CRC data content of list */
-        finder=list->next;
-        while (finder) {
-                retval=crc16(list->info->data16,retval);
-                finder=finder->next;
-        }
-#if CORE_DEBUG
-        ee_printf("List sort 2: %04x\n",retval);
-#endif
-        return retval;
-}
-/* Function: core_list_init
-        Initialize list with data.
-
-        Parameters:
-        blksize - Size of memory to be initialized.
-        memblock - Pointer to memory block.
-        seed -  Actual values chosen depend on the seed parameter.
-                The seed parameter MUST be supplied from a source that cannot be determined at compile time
-
-        Returns:
-        Pointer to the head of the list.
-
-*/
-list_head *core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed) {
-        /* calculated pointers for the list */
-        ee_u32 per_item=16+sizeof(struct list_data_s);
-        ee_u32 size=(blksize/per_item)-2; /* to accomodate systems with 64b pointers, and make sure same code is executed, set max list elements */
-        list_head *memblock_end=memblock+size;
-        list_data *datablock=(list_data *)(memblock_end);
-        list_data *datablock_end=datablock+size;
-        /* some useful variables */
-        ee_u32 i;
-        list_head *finder,*list=memblock;
-        list_data info;
-
-        /* create a fake items for the list head and tail */
-        list->next=NULL;
-        list->info=datablock;
-        list->info->idx=0x0000;
-        list->info->data16=(ee_s16)0x8080;
-        memblock++;
-        datablock++;
-        info.idx=0x7fff;
-        info.data16=(ee_s16)0xffff;
-        core_list_insert_new(list,&info,&memblock,&datablock,memblock_end,datablock_end);
-
-        /* then insert size items */
-        for (i=0; i<size; i++) {
-                ee_u16 datpat=((ee_u16)(seed^i) & 0xf);
-                ee_u16 dat=(datpat<<3) | (i&0x7); /* alternate between algorithms */
-                info.data16=(dat<<8) | dat;             /* fill the data with actual data and upper bits with rebuild value */
-                core_list_insert_new(list,&info,&memblock,&datablock,memblock_end,datablock_end);
-        }
-        /* and now index the list so we know initial seed order of the list */
-        finder=list->next;
-        i=1;
-        while (finder->next!=NULL) {
-                if (i<size/5) /* first 20% of the list in order */
-                        finder->info->idx=i++;
-                else {
-                        ee_u16 pat=(ee_u16)(i++ ^ seed); /* get a pseudo random number */
-                        finder->info->idx=0x3fff & (((i & 0x07) << 8) | pat); /* make sure the mixed items end up after the ones in sequence */
-                }
-                finder=finder->next;
-        }
-        list = core_list_mergesort(list,cmp_idx,NULL);
-#if CORE_DEBUG
-        ee_printf("Initialized list:\n");
-        finder=list;
-        while (finder) {
-                ee_printf("[%04x,%04x]",finder->info->idx,(ee_u16)finder->info->data16);
-                finder=finder->next;
-        }
-        ee_printf("\n");
-#endif
-        return list;
-}
-
-/* Function: core_list_insert
-        Insert an item to the list
-
-        Parameters:
-        insert_point - where to insert the item.
-        info - data for the cell.
-        memblock - pointer for the list header
-        datablock - pointer for the list data
-        memblock_end - end of region for list headers
-        datablock_end - end of region for list data
-
-        Returns:
-        Pointer to new item.
-*/
-list_head *core_list_insert_new(list_head *insert_point, list_data *info, list_head **memblock, list_data **datablock
-        , list_head *memblock_end, list_data *datablock_end) {
-        list_head *newitem;
-
-        if ((*memblock+1) >= memblock_end)
-                return NULL;
-        if ((*datablock+1) >= datablock_end)
-                return NULL;
-
-        newitem=*memblock;
-        (*memblock)++;
-        newitem->next=insert_point->next;
-        insert_point->next=newitem;
-
-        newitem->info=*datablock;
-        (*datablock)++;
-        copy_info(newitem->info,info);
-
-        return newitem;
-}
-
-/* Function: core_list_remove
-        Remove an item from the list.
-
-        Operation:
-        For a singly linked list, remove by copying the data from the next item
-        over to the current cell, and unlinking the next item.
-
-        Note:
-        since there is always a fake item at the end of the list, no need to check for NULL.
-
-        Returns:
-        Removed item.
-*/
-list_head *core_list_remove(list_head *item) {
-        list_data *tmp;
-        list_head *ret=item->next;
-        /* swap data pointers */
-        tmp=item->info;
-        item->info=ret->info;
-        ret->info=tmp;
-        /* and eliminate item */
-        item->next=item->next->next;
-        ret->next=NULL;
-        return ret;
-}
-
-/* Function: core_list_undo_remove
-        Undo a remove operation.
-
-        Operation:
-        Since we want each iteration of the benchmark to be exactly the same,
-        we need to be able to undo a remove.
-        Link the removed item back into the list, and switch the info items.
-
-        Parameters:
-        item_removed - Return value from the <core_list_remove>
-        item_modified - List item that was modified during <core_list_remove>
-
-        Returns:
-        The item that was linked back to the list.
-
-*/
-list_head *core_list_undo_remove(list_head *item_removed, list_head *item_modified) {
-        list_data *tmp;
-        /* swap data pointers */
-        tmp=item_removed->info;
-        item_removed->info=item_modified->info;
-        item_modified->info=tmp;
-        /* and insert item */
-        item_removed->next=item_modified->next;
-        item_modified->next=item_removed;
-        return item_removed;
-}
-
-/* Function: core_list_find
-        Find an item in the list
-
-        Operation:
-        Find an item by idx (if not 0) or specific data value
-
-        Parameters:
-        list - list head
-        info - idx or data to find
-
-        Returns:
-        Found item, or NULL if not found.
-*/
-list_head *core_list_find(list_head *list,list_data *info) {
-        if (info->idx>=0) {
-                while (list && (list->info->idx != info->idx))
-                        list=list->next;
-                return list;
-        } else {
-                while (list && ((list->info->data16 & 0xff) != info->data16))
-                        list=list->next;
-                return list;
-        }
-}
-/* Function: core_list_reverse
-        Reverse a list
-
-        Operation:
-        Rearrange the pointers so the list is reversed.
-
-        Parameters:
-        list - list head
-        info - idx or data to find
-
-        Returns:
-        Found item, or NULL if not found.
-*/
-
-list_head *core_list_reverse(list_head *list) {
-        list_head *next=NULL, *tmp;
-        while (list) {
-                tmp=list->next;
-                list->next=next;
-                next=list;
-                list=tmp;
-        }
-        return next;
-}
-/* Function: core_list_mergesort
-        Sort the list in place without recursion.
-
-        Description:
-        Use mergesort, as for linked list this is a realistic solution.
-        Also, since this is aimed at embedded, care was taken to use iterative rather then recursive algorithm.
-        The sort can either return the list to original order (by idx) ,
-        or use the data item to invoke other other algorithms and change the order of the list.
-
-        Parameters:
-        list - list to be sorted.
-        cmp - cmp function to use
-
-        Returns:
-        New head of the list.
-
-        Note:
-        We have a special header for the list that will always be first,
-        but the algorithm could theoretically modify where the list starts.
-
- */
-list_head *core_list_mergesort(list_head *list, list_cmp cmp, core_results *res) {
-    list_head *p, *q, *e, *tail;
-    ee_s32 insize, nmerges, psize, qsize, i;
-
-    insize = 1;
-
-    while (1) {
-        p = list;
-        list = NULL;
-        tail = NULL;
-
-        nmerges = 0;  /* count number of merges we do in this pass */
-
-        while (p) {
-            nmerges++;  /* there exists a merge to be done */
-            /* step `insize' places along from p */
-            q = p;
-            psize = 0;
-            for (i = 0; i < insize; i++) {
-                psize++;
-                            q = q->next;
-                if (!q) break;
-            }
-
-            /* if q hasn't fallen off end, we have two lists to merge */
-            qsize = insize;
-
-            /* now we have two lists; merge them */
-            while (psize > 0 || (qsize > 0 && q)) {
-
-                                /* decide whether next element of merge comes from p or q */
-                                if (psize == 0) {
-                                    /* p is empty; e must come from q. */
-                                    e = q; q = q->next; qsize--;
-                                } else if (qsize == 0 || !q) {
-                                    /* q is empty; e must come from p. */
-                                    e = p; p = p->next; psize--;
-                                } else if (cmp(p->info,q->info,res) <= 0) {
-                                    /* First element of p is lower (or same); e must come from p. */
-                                    e = p; p = p->next; psize--;
-                                } else {
-                                    /* First element of q is lower; e must come from q. */
-                                    e = q; q = q->next; qsize--;
-                                }
-
-                        /* add the next element to the merged list */
-                                if (tail) {
-                                    tail->next = e;
-                                } else {
-                                    list = e;
-                                }
-                                tail = e;
-                }
-
-                        /* now p has stepped `insize' places along, and q has too */
-                        p = q;
-        }
-
-            tail->next = NULL;
-
-        /* If we have done only one merge, we're finished. */
-        if (nmerges <= 1)   /* allow for nmerges==0, the empty list case */
-            return list;
-
-        /* Otherwise repeat, merging lists twice the size */
-        insize *= 2;
-    }
-#if COMPILER_REQUIRES_SORT_RETURN
-        return list;
-#endif
-}
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-/* File: core_main.c
-        This file contains the framework to acquire a block of memory, seed initial parameters, tun t he benchmark and report the results.
-*/
-//#include "coremark.h"
-
-/* Function: iterate
-        Run the benchmark for a specified number of iterations.
-
-        Operation:
-        For each type of benchmarked algorithm:
-                a - Initialize the data block for the algorithm.
-                b - Execute the algorithm N times.
-
-        Returns:
-        NULL.
-*/
-static ee_u16 list_known_crc[]   =      {(ee_u16)0xd4b0,(ee_u16)0x3340,(ee_u16)0x6a79,(ee_u16)0xe714,(ee_u16)0xe3c1};
-static ee_u16 matrix_known_crc[] =      {(ee_u16)0xbe52,(ee_u16)0x1199,(ee_u16)0x5608,(ee_u16)0x1fd7,(ee_u16)0x0747};
-static ee_u16 state_known_crc[]  =      {(ee_u16)0x5e47,(ee_u16)0x39bf,(ee_u16)0xe5a4,(ee_u16)0x8e3a,(ee_u16)0x8d84};
-void *iterate(void *pres) {
-        ee_u32 i;
-        ee_u16 crc;
-        core_results *res=(core_results *)pres;
-        ee_u32 iterations=res->iterations;
-        res->crc=0;
-        res->crclist=0;
-        res->crcmatrix=0;
-        res->crcstate=0;
-
-        for (i=0; i<iterations; i++) {
-                crc=core_bench_list(res,1);
-                res->crc=crcu16(crc,res->crc);
-                crc=core_bench_list(res,-1);
-                res->crc=crcu16(crc,res->crc);
-                if (i==0) res->crclist=res->crc;
-        }
-        return NULL;
-}
-
-#if (SEED_METHOD==SEED_ARG)
-ee_s32 get_seed_args(int i, int argc, char *argv[]);
-#define get_seed(x) (ee_s16)get_seed_args(x,argc,argv)
-#define get_seed_32(x) get_seed_args(x,argc,argv)
-#else /* via function or volatile */
-ee_s32 get_seed_32(int i);
-#define get_seed(x) (ee_s16)get_seed_32(x)
-#endif
-
-#if (MEM_METHOD==MEM_STATIC)
-ee_u8 static_memblk[TOTAL_DATA_SIZE];
-#endif
-char *mem_name[3] = {"Static","Heap","Stack"};
-/* Function: main
-        Main entry routine for the benchmark.
-        This function is responsible for the following steps:
-
-        1 - Initialize input seeds from a source that cannot be determined at compile time.
-        2 - Initialize memory block for use.
-        3 - Run and time the benchmark.
-        4 - Report results, testing the validity of the output if the seeds are known.
-
-        Arguments:
-        1 - first seed  : Any value
-        2 - second seed : Must be identical to first for iterations to be identical
-        3 - third seed  : Any value, should be at least an order of magnitude less then the input size, but bigger then 32.
-        4 - Iterations  : Special, if set to 0, iterations will be automatically determined such that the benchmark will run between 10 to 100 secs
-
-*/
-
-#if MAIN_HAS_NOARGC
-MAIN_RETURN_TYPE main(void) {
-        int argc=0;
-        char *argv[1];
-#else
-MAIN_RETURN_TYPE main(int argc, char *argv[]) {
-#endif
-        ee_u16 i,j=0,num_algorithms=0;
-        ee_s16 known_id=-1,total_errors=0;
-        ee_u16 seedcrc=0;
-        CORE_TICKS total_time;
-        core_results results[MULTITHREAD];
-#if (MEM_METHOD==MEM_STACK)
-        ee_u8 stack_memblock[TOTAL_DATA_SIZE*MULTITHREAD];
-#endif
-        /* first call any initializations needed */
-        portable_init(&(results[0].port), &argc, argv);
-        /* First some checks to make sure benchmark will run ok */
-        if (sizeof(struct list_head_s)>128) {
-                ee_printf("list_head structure too big for comparable data!\n");
-                return MAIN_RETURN_VAL;
-        }
-        results[0].seed1=get_seed(1);
-        results[0].seed2=get_seed(2);
-        results[0].seed3=get_seed(3);
-        results[0].iterations=get_seed_32(4);
-#if CORE_DEBUG
-        results[0].iterations=1;
-#endif
-        results[0].execs=get_seed_32(5);
-        if (results[0].execs==0) { /* if not supplied, execute all algorithms */
-                results[0].execs=ALL_ALGORITHMS_MASK;
-        }
-                /* put in some default values based on one seed only for easy testing */
-        if ((results[0].seed1==0) && (results[0].seed2==0) && (results[0].seed3==0)) { /* validation run */
-                results[0].seed1=0;
-                results[0].seed2=0;
-                results[0].seed3=0x66;
-        }
-        if ((results[0].seed1==1) && (results[0].seed2==0) && (results[0].seed3==0)) { /* perfromance run */
-                results[0].seed1=0x3415;
-                results[0].seed2=0x3415;
-                results[0].seed3=0x66;
-        }
-#if (MEM_METHOD==MEM_STATIC)
-        results[0].memblock[0]=(void *)static_memblk;
-        results[0].size=TOTAL_DATA_SIZE;
-        results[0].err=0;
-        #if (MULTITHREAD>1)
-        #error "Cannot use a static data area with multiple contexts!"
-        #endif
-#elif (MEM_METHOD==MEM_MALLOC)
-        for (i=0 ; i<MULTITHREAD; i++) {
-                ee_s32 malloc_override=get_seed(7);
-                if (malloc_override != 0)
-                        results[i].size=malloc_override;
-                else
-                        results[i].size=TOTAL_DATA_SIZE;
-                results[i].memblock[0]=portable_malloc(results[i].size);
-                results[i].seed1=results[0].seed1;
-                results[i].seed2=results[0].seed2;
-                results[i].seed3=results[0].seed3;
-                results[i].err=0;
-                results[i].execs=results[0].execs;
-        }
-#elif (MEM_METHOD==MEM_STACK)
-        for (i=0 ; i<MULTITHREAD; i++) {
-                results[i].memblock[0]=stack_memblock+i*TOTAL_DATA_SIZE;
-                results[i].size=TOTAL_DATA_SIZE;
-                results[i].seed1=results[0].seed1;
-                results[i].seed2=results[0].seed2;
-                results[i].seed3=results[0].seed3;
-                results[i].err=0;
-                results[i].execs=results[0].execs;
-        }
-#else
-#error "Please define a way to initialize a memory block."
-#endif
-        /* Data init */
-        /* Find out how space much we have based on number of algorithms */
-        for (i=0; i<NUM_ALGORITHMS; i++) {
-                if ((1<<(ee_u32)i) & results[0].execs)
-                        num_algorithms++;
-        }
-        for (i=0 ; i<MULTITHREAD; i++)
-                results[i].size=results[i].size/num_algorithms;
-        /* Assign pointers */
-        for (i=0; i<NUM_ALGORITHMS; i++) {
-                ee_u32 ctx;
-                if ((1<<(ee_u32)i) & results[0].execs) {
-                        for (ctx=0 ; ctx<MULTITHREAD; ctx++)
-                                results[ctx].memblock[i+1]=(char *)(results[ctx].memblock[0])+results[0].size*j;
-                        j++;
-                }
-        }
-        /* call inits */
-        for (i=0 ; i<MULTITHREAD; i++) {
-                if (results[i].execs & ID_LIST) {
-                        results[i].list=core_list_init(results[0].size,results[i].memblock[1],results[i].seed1);
-                }
-                if (results[i].execs & ID_MATRIX) {
-                        core_init_matrix(results[0].size, results[i].memblock[2], (ee_s32)results[i].seed1 | (((ee_s32)results[i].seed2) << 16), &(results[i].mat) );
-                }
-                if (results[i].execs & ID_STATE) {
-                        core_init_state(results[0].size,results[i].seed1,results[i].memblock[3]);
-                }
-        }
-
-        /* automatically determine number of iterations if not set */
-        if (results[0].iterations==0) {
-                secs_ret secs_passed=0;
-                ee_u32 divisor;
-                results[0].iterations=1;
-                while (secs_passed < (secs_ret)1) {
-                        results[0].iterations*=10;
-                        start_time();
-                        iterate(&results[0]);
-                        stop_time();
-                        secs_passed=time_in_secs(get_time());
-                }
-                /* now we know it executes for at least 1 sec, set actual run time at about 10 secs */
-                divisor=(ee_u32)secs_passed;
-                if (divisor==0) /* some machines cast float to int as 0 since this conversion is not defined by ANSI, but we know at least one second passed */
-                        divisor=1;
-                results[0].iterations*=1+10/divisor;
-        }
-        /* perform actual benchmark */
-        start_time();
-
-        __asm("__perf_start:");
-
-#if (MULTITHREAD>1)
-        if (default_num_contexts>MULTITHREAD) {
-                default_num_contexts=MULTITHREAD;
-        }
-        for (i=0 ; i<default_num_contexts; i++) {
-                results[i].iterations=results[0].iterations;
-                results[i].execs=results[0].execs;
-                core_start_parallel(&results[i]);
-        }
-        for (i=0 ; i<default_num_contexts; i++) {
-                core_stop_parallel(&results[i]);
-        }
-#else
-        iterate(&results[0]);
-#endif
-
-        __asm("__perf_end:");
-
-        stop_time();
-        total_time=get_time();
-        /* get a function of the input to report */
-        seedcrc=crc16(results[0].seed1,seedcrc);
-        seedcrc=crc16(results[0].seed2,seedcrc);
-        seedcrc=crc16(results[0].seed3,seedcrc);
-        seedcrc=crc16(results[0].size,seedcrc);
-
-        switch (seedcrc) { /* test known output for common seeds */
-                case 0x8a02: /* seed1=0, seed2=0, seed3=0x66, size 2000 per algorithm */
-                        known_id=0;
-                        ee_printf("6k performance run parameters for coremark.\n");
-                        break;
-                case 0x7b05: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 2000 per algorithm */
-                        known_id=1;
-                        ee_printf("6k validation run parameters for coremark.\n");
-                        break;
-                case 0x4eaf: /* seed1=0x8, seed2=0x8, seed3=0x8, size 400 per algorithm */
-                        known_id=2;
-                        ee_printf("Profile generation run parameters for coremark.\n");
-                        break;
-                case 0xe9f5: /* seed1=0, seed2=0, seed3=0x66, size 666 per algorithm */
-                        known_id=3;
-                        ee_printf("2K performance run parameters for coremark.\n");
-                        break;
-                case 0x18f2: /*  seed1=0x3415, seed2=0x3415, seed3=0x66, size 666 per algorithm */
-                        known_id=4;
-                        ee_printf("2K validation run parameters for coremark.\n");
-                        break;
-                default:
-                        total_errors=-1;
-                        break;
-        }
-        if (known_id>=0) {
-                for (i=0 ; i<default_num_contexts; i++) {
-                        results[i].err=0;
-                        if ((results[i].execs & ID_LIST) &&
-                                (results[i].crclist!=list_known_crc[known_id])) {
-                                ee_printf("[%u]ERROR! list crc 0x%04x - should be 0x%04x\n",i,results[i].crclist,list_known_crc[known_id]);
-                                results[i].err++;
-                        }
-                        if ((results[i].execs & ID_MATRIX) &&
-                                (results[i].crcmatrix!=matrix_known_crc[known_id])) {
-                                ee_printf("[%u]ERROR! matrix crc 0x%04x - should be 0x%04x\n",i,results[i].crcmatrix,matrix_known_crc[known_id]);
-                                results[i].err++;
-                        }
-                        if ((results[i].execs & ID_STATE) &&
-                                (results[i].crcstate!=state_known_crc[known_id])) {
-                                ee_printf("[%u]ERROR! state crc 0x%04x - should be 0x%04x\n",i,results[i].crcstate,state_known_crc[known_id]);
-                                results[i].err++;
-                        }
-                        total_errors+=results[i].err;
-                }
-        }
-        total_errors+=check_data_types();
-        /* and report results */
-        ee_printf("CoreMark Size    : %u\n",(ee_u32)results[0].size);
-        ee_printf("Total ticks      : %u\n",(ee_u32)total_time);
-#if HAS_FLOAT
-        ee_printf("Total time (secs): %f\n",time_in_secs(total_time));
-        if (time_in_secs(total_time) > 0)
-                ee_printf("Iterations/Sec   : %f\n",default_num_contexts*results[0].iterations/time_in_secs(total_time));
-#else
-        ee_printf("Total time (secs): %d\n",time_in_secs(total_time));
-        if (time_in_secs(total_time) > 0)
-//              ee_printf("Iterations/Sec   : %d\n",default_num_contexts*results[0].iterations/time_in_secs(total_time));
-                ee_printf("Iterat/Sec/MHz   : %d.%02d\n",1000*default_num_contexts*results[0].iterations/time_in_secs(total_time),
-                             100000*default_num_contexts*results[0].iterations/time_in_secs(total_time) % 100);
-#endif
-        if (time_in_secs(total_time) < 10) {
-                ee_printf("ERROR! Must execute for at least 10 secs for a valid result!\n");
-                total_errors++;
-        }
-
-        ee_printf("Iterations       : %u\n",(ee_u32)default_num_contexts*results[0].iterations);
-        ee_printf("Compiler version : %s\n",COMPILER_VERSION);
-        ee_printf("Compiler flags   : %s\n",COMPILER_FLAGS);
-#if (MULTITHREAD>1)
-        ee_printf("Parallel %s : %d\n",PARALLEL_METHOD,default_num_contexts);
-#endif
-        ee_printf("Memory location  : %s\n",MEM_LOCATION);
-        /* output for verification */
-        ee_printf("seedcrc          : 0x%04x\n",seedcrc);
-        if (results[0].execs & ID_LIST)
-                for (i=0 ; i<default_num_contexts; i++)
-                        ee_printf("[%d]crclist       : 0x%04x\n",i,results[i].crclist);
-        if (results[0].execs & ID_MATRIX)
-                for (i=0 ; i<default_num_contexts; i++)
-                        ee_printf("[%d]crcmatrix     : 0x%04x\n",i,results[i].crcmatrix);
-        if (results[0].execs & ID_STATE)
-                for (i=0 ; i<default_num_contexts; i++)
-                        ee_printf("[%d]crcstate      : 0x%04x\n",i,results[i].crcstate);
-        for (i=0 ; i<default_num_contexts; i++)
-                ee_printf("[%d]crcfinal      : 0x%04x\n",i,results[i].crc);
-        if (total_errors==0) {
-                ee_printf("Correct operation validated. See readme.txt for run and reporting rules.\n");
-#if HAS_FLOAT
-                if (known_id==3) {
-                        ee_printf("CoreMark 1.0 : %f / %s %s",default_num_contexts*results[0].iterations/time_in_secs(total_time),COMPILER_VERSION,COMPILER_FLAGS);
-#if defined(MEM_LOCATION) && !defined(MEM_LOCATION_UNSPEC)
-                        ee_printf(" / %s",MEM_LOCATION);
-#else
-                        ee_printf(" / %s",mem_name[MEM_METHOD]);
-#endif
-
-#if (MULTITHREAD>1)
-                        ee_printf(" / %d:%s",default_num_contexts,PARALLEL_METHOD);
-#endif
-                        ee_printf("\n");
-                }
-#endif
-        }
-        if (total_errors>0)
-                ee_printf("Errors detected\n");
-        if (total_errors<0)
-                ee_printf("Cannot validate operation for these seed values, please compare with results on a known platform.\n");
-
-#if (MEM_METHOD==MEM_MALLOC)
-        for (i=0 ; i<MULTITHREAD; i++)
-                portable_free(results[i].memblock[0]);
-#endif
-        /* And last call any target specific code for finalizing */
-        portable_fini(&(results[0].port));
-
-        return MAIN_RETURN_VAL;
-}
-
-
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-//#include "coremark.h"
-/*
-Topic: Description
-        Matrix manipulation benchmark
-
-        This very simple algorithm forms the basis of many more complex algorithms.
-
-        The tight inner loop is the focus of many optimizations (compiler as well as hardware based)
-        and is thus relevant for embedded processing.
-
-        The total available data space will be divided to 3 parts:
-        NxN Matrix A - initialized with small values (upper 3/4 of the bits all zero).
-        NxN Matrix B - initialized with medium values (upper half of the bits all zero).
-        NxN Matrix C - used for the result.
-
-        The actual values for A and B must be derived based on input that is not available at compile time.
-*/
-ee_s16 matrix_test(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B, MATDAT val);
-ee_s16 matrix_sum(ee_u32 N, MATRES *C, MATDAT clipval);
-void matrix_mul_const(ee_u32 N, MATRES *C, MATDAT *A, MATDAT val);
-void matrix_mul_vect(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B);
-void matrix_mul_matrix(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B);
-void matrix_mul_matrix_bitextract(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B);
-void matrix_add_const(ee_u32 N, MATDAT *A, MATDAT val);
-
-#define matrix_test_next(x) (x+1)
-#define matrix_clip(x,y) ((y) ? (x) & 0x0ff : (x) & 0x0ffff)
-#define matrix_big(x) (0xf000 | (x))
-#define bit_extract(x,from,to) (((x)>>(from)) & (~(0xffffffff << (to))))
-
-#if CORE_DEBUG
-void printmat(MATDAT *A, ee_u32 N, char *name) {
-        ee_u32 i,j;
-        ee_printf("Matrix %s [%dx%d]:\n",name,N,N);
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        if (j!=0)
-                                ee_printf(",");
-                        ee_printf("%d",A[i*N+j]);
-                }
-                ee_printf("\n");
-        }
-}
-void printmatC(MATRES *C, ee_u32 N, char *name) {
-        ee_u32 i,j;
-        ee_printf("Matrix %s [%dx%d]:\n",name,N,N);
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        if (j!=0)
-                                ee_printf(",");
-                        ee_printf("%d",C[i*N+j]);
-                }
-                ee_printf("\n");
-        }
-}
-#endif
-/* Function: core_bench_matrix
-        Benchmark function
-
-        Iterate <matrix_test> N times,
-        changing the matrix values slightly by a constant amount each time.
-*/
-ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc) {
-        ee_u32 N=p->N;
-        MATRES *C=p->C;
-        MATDAT *A=p->A;
-        MATDAT *B=p->B;
-        MATDAT val=(MATDAT)seed;
-
-        crc=crc16(matrix_test(N,C,A,B,val),crc);
-
-        return crc;
-}
-
-/* Function: matrix_test
-        Perform matrix manipulation.
-
-        Parameters:
-        N - Dimensions of the matrix.
-        C - memory for result matrix.
-        A - input matrix
-        B - operator matrix (not changed during operations)
-
-        Returns:
-        A CRC value that captures all results calculated in the function.
-        In particular, crc of the value calculated on the result matrix
-        after each step by <matrix_sum>.
-
-        Operation:
-
-        1 - Add a constant value to all elements of a matrix.
-        2 - Multiply a matrix by a constant.
-        3 - Multiply a matrix by a vector.
-        4 - Multiply a matrix by a matrix.
-        5 - Add a constant value to all elements of a matrix.
-
-        After the last step, matrix A is back to original contents.
-*/
-ee_s16 matrix_test(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B, MATDAT val) {
-        ee_u16 crc=0;
-        MATDAT clipval=matrix_big(val);
-
-        matrix_add_const(N,A,val); /* make sure data changes  */
-#if CORE_DEBUG
-        printmat(A,N,"matrix_add_const");
-#endif
-        matrix_mul_const(N,C,A,val);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_const");
-#endif
-        matrix_mul_vect(N,C,A,B);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_vect");
-#endif
-        matrix_mul_matrix(N,C,A,B);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_matrix");
-#endif
-        matrix_mul_matrix_bitextract(N,C,A,B);
-        crc=crc16(matrix_sum(N,C,clipval),crc);
-#if CORE_DEBUG
-        printmatC(C,N,"matrix_mul_matrix_bitextract");
-#endif
-
-        matrix_add_const(N,A,-val); /* return matrix to initial value */
-        return crc;
-}
-
-/* Function : matrix_init
-        Initialize the memory block for matrix benchmarking.
-
-        Parameters:
-        blksize - Size of memory to be initialized.
-        memblk - Pointer to memory block.
-        seed - Actual values chosen depend on the seed parameter.
-        p - pointers to <mat_params> containing initialized matrixes.
-
-        Returns:
-        Matrix dimensions.
-
-        Note:
-        The seed parameter MUST be supplied from a source that cannot be determined at compile time
-*/
-ee_u32 core_init_matrix(ee_u32 blksize, void *memblk, ee_s32 seed, mat_params *p) {
-        ee_u32 N=0;
-        MATDAT *A;
-        MATDAT *B;
-        ee_s32 order=1;
-        MATDAT val;
-        ee_u32 i=0,j=0;
-        if (seed==0)
-                seed=1;
-        while (j<blksize) {
-                i++;
-                j=i*i*2*4;
-        }
-        N=i-1;
-        A=(MATDAT *)align_mem(memblk);
-        B=A+N*N;
-
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        seed = ( ( order * seed ) % 65536 );
-                        val = (seed + order);
-                        val=matrix_clip(val,0);
-                        B[i*N+j] = val;
-                        val =  (val + order);
-                        val=matrix_clip(val,1);
-                        A[i*N+j] = val;
-                        order++;
-                }
-        }
-
-        p->A=A;
-        p->B=B;
-        p->C=(MATRES *)align_mem(B+N*N);
-        p->N=N;
-#if CORE_DEBUG
-        printmat(A,N,"A");
-        printmat(B,N,"B");
-#endif
-        return N;
-}
-
-/* Function: matrix_sum
-        Calculate a function that depends on the values of elements in the matrix.
-
-        For each element, accumulate into a temporary variable.
-
-        As long as this value is under the parameter clipval,
-        add 1 to the result if the element is bigger then the previous.
-
-        Otherwise, reset the accumulator and add 10 to the result.
-*/
-ee_s16 matrix_sum(ee_u32 N, MATRES *C, MATDAT clipval) {
-        MATRES tmp=0,prev=0,cur=0;
-        ee_s16 ret=0;
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        cur=C[i*N+j];
-                        tmp+=cur;
-                        if (tmp>clipval) {
-                                ret+=10;
-                                tmp=0;
-                        } else {
-                                ret += (cur>prev) ? 1 : 0;
-                        }
-                        prev=cur;
-                }
-        }
-        return ret;
-}
-
-/* Function: matrix_mul_const
-        Multiply a matrix by a constant.
-        This could be used as a scaler for instance.
-*/
-void matrix_mul_const(ee_u32 N, MATRES *C, MATDAT *A, MATDAT val) {
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        C[i*N+j]=(MATRES)A[i*N+j] * (MATRES)val;
-                }
-        }
-}
-
-/* Function: matrix_add_const
-        Add a constant value to all elements of a matrix.
-*/
-void matrix_add_const(ee_u32 N, MATDAT *A, MATDAT val) {
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        A[i*N+j] += val;
-                }
-        }
-}
-
-/* Function: matrix_mul_vect
-        Multiply a matrix by a vector.
-        This is common in many simple filters (e.g. fir where a vector of coefficients is applied to the matrix.)
-*/
-void matrix_mul_vect(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) {
-        ee_u32 i,j;
-        for (i=0; i<N; i++) {
-                C[i]=0;
-                for (j=0; j<N; j++) {
-                        C[i]+=(MATRES)A[i*N+j] * (MATRES)B[j];
-                }
-        }
-}
-
-/* Function: matrix_mul_matrix
-        Multiply a matrix by a matrix.
-        Basic code is used in many algorithms, mostly with minor changes such as scaling.
-*/
-void matrix_mul_matrix(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) {
-        ee_u32 i,j,k;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        C[i*N+j]=0;
-                        for(k=0;k<N;k++)
-                        {
-                                C[i*N+j]+=(MATRES)A[i*N+k] * (MATRES)B[k*N+j];
-                        }
-                }
-        }
-}
-
-/* Function: matrix_mul_matrix_bitextract
-        Multiply a matrix by a matrix, and extract some bits from the result.
-        Basic code is used in many algorithms, mostly with minor changes such as scaling.
-*/
-void matrix_mul_matrix_bitextract(ee_u32 N, MATRES *C, MATDAT *A, MATDAT *B) {
-        ee_u32 i,j,k;
-        for (i=0; i<N; i++) {
-                for (j=0; j<N; j++) {
-                        C[i*N+j]=0;
-                        for(k=0;k<N;k++)
-                        {
-                                MATRES tmp=(MATRES)A[i*N+k] * (MATRES)B[k*N+j];
-                                C[i*N+j]+=bit_extract(tmp,2,4)*bit_extract(tmp,5,7);
-                        }
-                }
-        }
-}
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-//#include "coremark.h"
-/* local functions */
-enum CORE_STATE core_state_transition( ee_u8 **instr , ee_u32 *transition_count);
-
-/*
-Topic: Description
-        Simple state machines like this one are used in many embedded products.
-
-        For more complex state machines, sometimes a state transition table implementation is used instead,
-        trading speed of direct coding for ease of maintenance.
-
-        Since the main goal of using a state machine in CoreMark is to excercise the switch/if behaviour,
-        we are using a small moore machine.
-
-        In particular, this machine tests type of string input,
-        trying to determine whether the input is a number or something else.
-        (see core_state.png).
-*/
-
-/* Function: core_bench_state
-        Benchmark function
-
-        Go over the input twice, once direct, and once after introducing some corruption.
-*/
-ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock,
-                ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc)
-{
-        ee_u32 final_counts[NUM_CORE_STATES];
-        ee_u32 track_counts[NUM_CORE_STATES];
-        ee_u8 *p=memblock;
-        ee_u32 i;
-
-
-#if CORE_DEBUG
-        ee_printf("State Bench: %d,%d,%d,%04x\n",seed1,seed2,step,crc);
-#endif
-        for (i=0; i<NUM_CORE_STATES; i++) {
-                final_counts[i]=track_counts[i]=0;
-        }
-        /* run the state machine over the input */
-        while (*p!=0) {
-                enum CORE_STATE fstate=core_state_transition(&p,track_counts);
-                final_counts[fstate]++;
-#if CORE_DEBUG
-        ee_printf("%d,",fstate);
-        }
-        ee_printf("\n");
-#else
-        }
-#endif
-        p=memblock;
-        while (p < (memblock+blksize)) { /* insert some corruption */
-                if (*p!=',')
-                        *p^=(ee_u8)seed1;
-                p+=step;
-        }
-        p=memblock;
-        /* run the state machine over the input again */
-        while (*p!=0) {
-                enum CORE_STATE fstate=core_state_transition(&p,track_counts);
-                final_counts[fstate]++;
-#if CORE_DEBUG
-        ee_printf("%d,",fstate);
-        }
-        ee_printf("\n");
-#else
-        }
-#endif
-        p=memblock;
-        while (p < (memblock+blksize)) { /* undo corruption is seed1 and seed2 are equal */
-                if (*p!=',')
-                        *p^=(ee_u8)seed2;
-                p+=step;
-        }
-        /* end timing */
-        for (i=0; i<NUM_CORE_STATES; i++) {
-                crc=crcu32(final_counts[i],crc);
-                crc=crcu32(track_counts[i],crc);
-        }
-        return crc;
-}
-
-/* Default initialization patterns */
-static ee_u8 *intpat[4]  ={(ee_u8 *)"5012",(ee_u8 *)"1234",(ee_u8 *)"-874",(ee_u8 *)"+122"};
-static ee_u8 *floatpat[4]={(ee_u8 *)"35.54400",(ee_u8 *)".1234500",(ee_u8 *)"-110.700",(ee_u8 *)"+0.64400"};
-static ee_u8 *scipat[4]  ={(ee_u8 *)"5.500e+3",(ee_u8 *)"-.123e-2",(ee_u8 *)"-87e+832",(ee_u8 *)"+0.6e-12"};
-static ee_u8 *errpat[4]  ={(ee_u8 *)"T0.3e-1F",(ee_u8 *)"-T.T++Tq",(ee_u8 *)"1T3.4e4z",(ee_u8 *)"34.0e-T^"};
-
-/* Function: core_init_state
-        Initialize the input data for the state machine.
-
-        Populate the input with several predetermined strings, interspersed.
-        Actual patterns chosen depend on the seed parameter.
-
-        Note:
-        The seed parameter MUST be supplied from a source that cannot be determined at compile time
-*/
-void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p) {
-        ee_u32 total=0,next=0,i;
-        ee_u8 *buf=0;
-#if CORE_DEBUG
-        ee_u8 *start=p;
-        ee_printf("State: %d,%d\n",size,seed);
-#endif
-        size--;
-        next=0;
-        while ((total+next+1)<size) {
-                if (next>0) {
-                        for(i=0;i<next;i++)
-                                *(p+total+i)=buf[i];
-                        *(p+total+i)=',';
-                        total+=next+1;
-                }
-                seed++;
-                switch (seed & 0x7) {
-                        case 0: /* int */
-                        case 1: /* int */
-                        case 2: /* int */
-                                buf=intpat[(seed>>3) & 0x3];
-                                next=4;
-                        break;
-                        case 3: /* float */
-                        case 4: /* float */
-                                buf=floatpat[(seed>>3) & 0x3];
-                                next=8;
-                        break;
-                        case 5: /* scientific */
-                        case 6: /* scientific */
-                                buf=scipat[(seed>>3) & 0x3];
-                                next=8;
-                        break;
-                        case 7: /* invalid */
-                                buf=errpat[(seed>>3) & 0x3];
-                                next=8;
-                        break;
-                        default: /* Never happen, just to make some compilers happy */
-                        break;
-                }
-        }
-        size++;
-        while (total<size) { /* fill the rest with 0 */
-                *(p+total)=0;
-                total++;
-        }
-#if CORE_DEBUG
-        ee_printf("State Input: %s\n",start);
-#endif
-}
-
-static ee_u8 ee_isdigit(ee_u8 c) {
-        ee_u8 retval;
-        retval = ((c>='0') & (c<='9')) ? 1 : 0;
-        return retval;
-}
-
-/* Function: core_state_transition
-        Actual state machine.
-
-        The state machine will continue scanning until either:
-        1 - an invalid input is detcted.
-        2 - a valid number has been detected.
-
-        The input pointer is updated to point to the end of the token, and the end state is returned (either specific format determined or invalid).
-*/
-
-enum CORE_STATE core_state_transition( ee_u8 **instr , ee_u32 *transition_count) {
-        ee_u8 *str=*instr;
-        ee_u8 NEXT_SYMBOL;
-        enum CORE_STATE state=CORE_START;
-        for( ; *str && state != CORE_INVALID; str++ ) {
-                NEXT_SYMBOL = *str;
-                if (NEXT_SYMBOL==',') /* end of this input */ {
-                        str++;
-                        break;
-                }
-                switch(state) {
-                case CORE_START:
-                        if(ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INT;
-                        }
-                        else if( NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-' ) {
-                                state = CORE_S1;
-                        }
-                        else if( NEXT_SYMBOL == '.' ) {
-                                state = CORE_FLOAT;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_INVALID]++;
-                        }
-                        transition_count[CORE_START]++;
-                        break;
-                case CORE_S1:
-                        if(ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INT;
-                                transition_count[CORE_S1]++;
-                        }
-                        else if( NEXT_SYMBOL == '.' ) {
-                                state = CORE_FLOAT;
-                                transition_count[CORE_S1]++;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_S1]++;
-                        }
-                        break;
-                case CORE_INT:
-                        if( NEXT_SYMBOL == '.' ) {
-                                state = CORE_FLOAT;
-                                transition_count[CORE_INT]++;
-                        }
-                        else if(!ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INVALID;
-                                transition_count[CORE_INT]++;
-                        }
-                        break;
-                case CORE_FLOAT:
-                        if( NEXT_SYMBOL == 'E' || NEXT_SYMBOL == 'e' ) {
-                                state = CORE_S2;
-                                transition_count[CORE_FLOAT]++;
-                        }
-                        else if(!ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INVALID;
-                                transition_count[CORE_FLOAT]++;
-                        }
-                        break;
-                case CORE_S2:
-                        if( NEXT_SYMBOL == '+' || NEXT_SYMBOL == '-' ) {
-                                state = CORE_EXPONENT;
-                                transition_count[CORE_S2]++;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_S2]++;
-                        }
-                        break;
-                case CORE_EXPONENT:
-                        if(ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_SCIENTIFIC;
-                                transition_count[CORE_EXPONENT]++;
-                        }
-                        else {
-                                state = CORE_INVALID;
-                                transition_count[CORE_EXPONENT]++;
-                        }
-                        break;
-                case CORE_SCIENTIFIC:
-                        if(!ee_isdigit(NEXT_SYMBOL)) {
-                                state = CORE_INVALID;
-                                transition_count[CORE_INVALID]++;
-                        }
-                        break;
-                default:
-                        break;
-                }
-        }
-        *instr=str;
-        return state;
-}
-/*
-Author : Shay Gal-On, EEMBC
-
-This file is part of  EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
-All rights reserved.
-
-EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
-CoreMark License that is distributed with the official EEMBC COREMARK Software release.
-If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
-you must discontinue use and download the official release from www.coremark.org.
-
-Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
-make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
-
-EEMBC
-4354 Town Center Blvd. Suite 114-200
-El Dorado Hills, CA, 95762
-*/
-//#include "coremark.h"
-/* Function: get_seed
-        Get a values that cannot be determined at compile time.
-
-        Since different embedded systems and compilers are used, 3 different methods are provided:
-        1 - Using a volatile variable. This method is only valid if the compiler is forced to generate code that
-        reads the value of a volatile variable from memory at run time.
-        Please note, if using this method, you would need to modify core_portme.c to generate training profile.
-        2 - Command line arguments. This is the preferred method if command line arguments are supported.
-        3 - System function. If none of the first 2 methods is available on the platform,
-        a system function which is not a stub can be used.
-
-        e.g. read the value on GPIO pins connected to switches, or invoke special simulator functions.
-*/
-#if (SEED_METHOD==SEED_VOLATILE)
-        extern volatile ee_s32 seed1_volatile;
-        extern volatile ee_s32 seed2_volatile;
-        extern volatile ee_s32 seed3_volatile;
-        extern volatile ee_s32 seed4_volatile;
-        extern volatile ee_s32 seed5_volatile;
-        ee_s32 get_seed_32(int i) {
-                ee_s32 retval;
-                switch (i) {
-                        case 1:
-                                retval=seed1_volatile;
-                                break;
-                        case 2:
-                                retval=seed2_volatile;
-                                break;
-                        case 3:
-                                retval=seed3_volatile;
-                                break;
-                        case 4:
-                                retval=seed4_volatile;
-                                break;
-                        case 5:
-                                retval=seed5_volatile;
-                                break;
-                        default:
-                                retval=0;
-                                break;
-                }
-                return retval;
-        }
-#elif (SEED_METHOD==SEED_ARG)
-ee_s32 parseval(char *valstring) {
-        ee_s32 retval=0;
-        ee_s32 neg=1;
-        int hexmode=0;
-        if (*valstring == '-') {
-                neg=-1;
-                valstring++;
-        }
-        if ((valstring[0] == '0') && (valstring[1] == 'x')) {
-                hexmode=1;
-                valstring+=2;
-        }
-                /* first look for digits */
-        if (hexmode) {
-                while (((*valstring >= '0') && (*valstring <= '9')) || ((*valstring >= 'a') && (*valstring <= 'f'))) {
-                        ee_s32 digit=*valstring-'0';
-                        if (digit>9)
-                                digit=10+*valstring-'a';
-                        retval*=16;
-                        retval+=digit;
-                        valstring++;
-                }
-        } else {
-                while ((*valstring >= '0') && (*valstring <= '9')) {
-                        ee_s32 digit=*valstring-'0';
-                        retval*=10;
-                        retval+=digit;
-                        valstring++;
-                }
-        }
-        /* now add qualifiers */
-        if (*valstring=='K')
-                retval*=1024;
-        if (*valstring=='M')
-                retval*=1024*1024;
-
-        retval*=neg;
-        return retval;
-}
-
-ee_s32 get_seed_args(int i, int argc, char *argv[]) {
-        if (argc>i)
-                return parseval(argv[i]);
-        return 0;
-}
-
-#elif (SEED_METHOD==SEED_FUNC)
-/* If using OS based function, you must define and implement the functions below in core_portme.h and core_portme.c ! */
-ee_s32 get_seed_32(int i) {
-        ee_s32 retval;
-        switch (i) {
-                case 1:
-                        retval=portme_sys1();
-                        break;
-                case 2:
-                        retval=portme_sys2();
-                        break;
-                case 3:
-                        retval=portme_sys3();
-                        break;
-                case 4:
-                        retval=portme_sys4();
-                        break;
-                case 5:
-                        retval=portme_sys5();
-                        break;
-                default:
-                        retval=0;
-                        break;
-        }
-        return retval;
-}
-#endif
-
-/* Function: crc*
-        Service functions to calculate 16b CRC code.
-
-*/
-ee_u16 crcu8(ee_u8 data, ee_u16 crc )
-{
-        ee_u8 i=0,x16=0,carry=0;
-
-        for (i = 0; i < 8; i++)
-    {
-                x16 = (ee_u8)((data & 1) ^ ((ee_u8)crc & 1));
-                data >>= 1;
-
-                if (x16 == 1)
-                {
-                   crc ^= 0x4002;
-                   carry = 1;
-                }
-                else
-                        carry = 0;
-                crc >>= 1;
-                if (carry)
-                   crc |= 0x8000;
-                else
-                   crc &= 0x7fff;
-    }
-        return crc;
-}
-ee_u16 crcu16(ee_u16 newval, ee_u16 crc) {
-        crc=crcu8( (ee_u8) (newval)                             ,crc);
-        crc=crcu8( (ee_u8) ((newval)>>8)        ,crc);
-        return crc;
-}
-ee_u16 crcu32(ee_u32 newval, ee_u16 crc) {
-        crc=crc16((ee_s16) newval               ,crc);
-        crc=crc16((ee_s16) (newval>>16) ,crc);
-        return crc;
-}
-ee_u16 crc16(ee_s16 newval, ee_u16 crc) {
-        return crcu16((ee_u16)newval, crc);
-}
-
-ee_u8 check_data_types() {
-        ee_u8 retval=0;
-        if (sizeof(ee_u8) != 1) {
-                ee_printf("ERROR: ee_u8 is not an 8b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_u16) != 2) {
-                ee_printf("ERROR: ee_u16 is not a 16b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_s16) != 2) {
-                ee_printf("ERROR: ee_s16 is not a 16b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_s32) != 4) {
-                ee_printf("ERROR: ee_s32 is not a 32b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_u32) != 4) {
-                ee_printf("ERROR: ee_u32 is not a 32b datatype!\n");
-                retval++;
-        }
-        if (sizeof(ee_ptr_int) != sizeof(int *)) {
-                ee_printf("ERROR: ee_ptr_int is not a datatype that holds an int pointer!\n");
-                retval++;
-        }
-        if (retval>0) {
-                ee_printf("ERROR: Please modify the datatypes in core_portme.h!\n");
-        }
-        return retval;
-}
-/*
-        File : core_portme.c
-*/
-/*
-        Author : Shay Gal-On, EEMBC
-        Legal : TODO!
-*/
-#include <stdio.h>
-#include <stdlib.h>
-//#include "coremark.h"
-
-#if VALIDATION_RUN
-        volatile ee_s32 seed1_volatile=0x3415;
-        volatile ee_s32 seed2_volatile=0x3415;
-        volatile ee_s32 seed3_volatile=0x66;
-#endif
-#if PERFORMANCE_RUN
-        volatile ee_s32 seed1_volatile=0x0;
-        volatile ee_s32 seed2_volatile=0x0;
-        volatile ee_s32 seed3_volatile=0x66;
-#endif
-#if PROFILE_RUN
-        volatile ee_s32 seed1_volatile=0x8;
-        volatile ee_s32 seed2_volatile=0x8;
-        volatile ee_s32 seed3_volatile=0x8;
-#endif
-        volatile ee_s32 seed4_volatile=ITERATIONS;
-        volatile ee_s32 seed5_volatile=0;
-/* Porting : Timing functions
-        How to capture time and convert to seconds must be ported to whatever is supported by the platform.
-        e.g. Read value from on board RTC, read value from cpu clock cycles performance counter etc.
-        Sample implementation for standard time.h and windows.h definitions included.
-*/
-/* Define : TIMER_RES_DIVIDER
-        Divider to trade off timer resolution and total time that can be measured.
-
-        Use lower values to increase resolution, but make sure that overflow does not occur.
-        If there are issues with the return value overflowing, increase this value.
-        */
-//#define NSECS_PER_SEC CLOCKS_PER_SEC
-#define NSECS_PER_SEC 1000000000
-#define CORETIMETYPE clock_t
-//#define GETMYTIME(_t) (*_t=clock())
-#define GETMYTIME(_t) (*_t=0)
-#define MYTIMEDIFF(fin,ini) ((fin)-(ini))
-#define TIMER_RES_DIVIDER 1
-#define SAMPLE_TIME_IMPLEMENTATION 1
-//#define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER)
-
-#define EE_TICKS_PER_SEC 1000
-
-/** Define Host specific (POSIX), or target specific global time variables. */
-static CORETIMETYPE start_time_val, stop_time_val;
-
-/* Function : start_time
-        This function will be called right before starting the timed portion of the benchmark.
-
-        Implementation may be capturing a system timer (as implemented in the example code)
-        or zeroing some system parameters - e.g. setting the cpu clocks cycles to 0.
-*/
-void start_time(void) {
-uint32_t mcyclel;
-        asm volatile ("csrr %0,mcycle"  : "=r" (mcyclel) );
-        start_time_val = mcyclel;
-}
-/* Function : stop_time
-        This function will be called right after ending the timed portion of the benchmark.
-
-        Implementation may be capturing a system timer (as implemented in the example code)
-        or other system parameters - e.g. reading the current value of cpu cycles counter.
-*/
-void stop_time(void) {
-uint32_t mcyclel;
-        asm volatile ("csrr %0,mcycle"  : "=r" (mcyclel) );
-        stop_time_val = mcyclel;
-}
-/* Function : get_time
-        Return an abstract "ticks" number that signifies time on the system.
-
-        Actual value returned may be cpu cycles, milliseconds or any other value,
-        as long as it can be converted to seconds by <time_in_secs>.
-        This methodology is taken to accomodate any hardware or simulated platform.
-        The sample implementation returns millisecs by default,
-        and the resolution is controlled by <TIMER_RES_DIVIDER>
-*/
-CORE_TICKS get_time(void) {
-        CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
-        return elapsed;
-}
-/* Function : time_in_secs
-        Convert the value returned by get_time to seconds.
-
-        The <secs_ret> type is used to accomodate systems with no support for floating point.
-        Default implementation implemented by the EE_TICKS_PER_SEC macro above.
-*/
-secs_ret time_in_secs(CORE_TICKS ticks) {
-        secs_ret retval=((secs_ret)ticks) / (secs_ret)EE_TICKS_PER_SEC;
-        return retval;
-}
-
-ee_u32 default_num_contexts=1;
-
-/* Function : portable_init
-        Target specific initialization code
-        Test for some common mistakes.
-*/
-void portable_init(core_portable *p, int *argc, char *argv[])
-{
-        if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) {
-                ee_printf("ERROR! Please define ee_ptr_int to a type that holds a pointer!\n");
-        }
-        if (sizeof(ee_u32) != 4) {
-                ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n");
-        }
-        p->portable_id=1;
-}
-/* Function : portable_fini
-        Target specific final code
-*/
-void portable_fini(core_portable *p)
-{
-        p->portable_id=0;
-}
-
-
-void* memset(void* s, int c, size_t n)
-{
-  asm("mv t0, a0");
-  asm("add a2, a2, a0");  // end = s + n
-  asm(".memset_loop: bge a0, a2, .memset_end");
-  asm("sb a1, 0(a0)");
-  asm("addi a0, a0, 1");
-  asm("j .memset_loop");
-  asm(".memset_end:");
-  asm("mv a0, t0");
-  asm("jr ra");
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/printf.c b/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/printf.c
deleted file mode 100644
index 5ce56a9..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/Coremark/printf.c
+++ /dev/null
@@ -1,262 +0,0 @@
-#include <stdarg.h>
-#include "defines.h"
-
-static int
-whisperPutc(char c)
-{
-//  __whisper_console_io = c;
-//  __whisper_console_io = c;
-  *(volatile char*)(RV_SERIALIO) = c;
-  return c;
-}
-
-
-static int
-whisperPuts(const char* s)
-{
-  while (*s)
-    whisperPutc(*s++);
-  return 1;
-}
-
-
-static int
-whisperPrintUnsigned(unsigned value, int width, char pad)
-{
-  char buffer[20];
-  int charCount = 0;
-
-  do
-    {
-      char c = '0' + (value % 10);
-      value = value / 10;
-      buffer[charCount++] = c;
-    }
-  while (value);
-
-  for (int i = charCount; i < width; ++i)
-    whisperPutc(pad);
-
-  char* p = buffer + charCount - 1;
-  for (int i = 0; i < charCount; ++i)
-    whisperPutc(*p--);
-
-  return charCount;
-}
-
-
-static int
-whisperPrintDecimal(int value, int width, char pad)
-{
-  char buffer[20];
-  int charCount = 0;
-
-  unsigned neg = value < 0;
-  if (neg)
-    {
-      value = -value;
-      whisperPutc('-');
-      width--;
-    }
-
-  do
-    {
-      char c = '0' + (value % 10);
-      value = value / 10;
-      buffer[charCount++] = c;
-    }
-  while (value);
-
-  for (int i = charCount; i < width; ++i)
-    whisperPutc(pad);
-
-  char* p = buffer + charCount - 1;
-  for (int i = 0; i < charCount; ++i)
-    whisperPutc(*p--);
-
-  if (neg)
-    charCount++;
-
-  return charCount;
-}
-
-
-static int
-whisperPrintInt(int value, int width, int pad, int base)
-{
-  if (base == 10)
-    return whisperPrintDecimal(value, width, pad);
-
-  char buffer[20];
-  int charCount = 0;
-
-  unsigned uu = value;
-
-  if (base == 8)
-    {
-      do
-        {
-          char c = '0' + (uu & 7);
-          buffer[charCount++] = c;
-          uu >>= 3;
-        }
-      while (uu);
-    }
-  else if (base == 16)
-    {
-      do
-        {
-          int digit = uu & 0xf;
-          char c = digit < 10 ? '0' + digit : 'a' + digit - 10;
-          buffer[charCount++] = c;
-          uu >>= 4;
-        }
-      while (uu);
-    }
-  else
-    return -1;
-
-  char* p = buffer + charCount - 1;
-  for (unsigned i = 0; i < charCount; ++i)
-    whisperPutc(*p--);
-
-  return charCount;
-}
-
-
-#if 0
-// Print with g format
-static int
-whisperPrintDoubleG(double value)
-{
-  return 0;
-}
-
-
-// Print with f format
-static int
-whisperPrintDoubleF(double value)
-{
-  return 0;
-}
-#endif
-
-
-int
-whisperPrintfImpl(const char* format, va_list ap)
-{
-  int count = 0;  // Printed character count
-
-  for (const char* fp = format; *fp; fp++)
-    {
-      char pad = ' ';
-      int width = 0;  // Field width
-
-      if (*fp != '%')
-        {
-          whisperPutc(*fp);
-          ++count;
-          continue;
-        }
-
-      ++fp;  // Skip %
-
-      if (*fp == 0)
-        break;
-
-      if (*fp == '%')
-        {
-          whisperPutc('%');
-          continue;
-        }
-
-      while (*fp == '0')
-        {
-          pad = '0';
-          fp++;  // Pad zero not yet implented.
-        }
-
-      if (*fp == '-')
-        {
-          fp++;  // Pad right not yet implemented.
-        }
-
-      if (*fp == '*')
-        {
-          int outWidth = va_arg(ap, int);
-          fp++;  // Width not yet implemented.
-        }
-      else if (*fp >= '0' && *fp <= '9')
-        {    // Width not yet implemented.
-          while (*fp >= '0' && *fp <= '9')
-            width = width * 10 + (*fp++ - '0');
-        }
-
-      switch (*fp)
-        {
-        case 'd':
-          count += whisperPrintDecimal(va_arg(ap, int), width, pad);
-          break;
-
-        case 'u':
-          count += whisperPrintUnsigned((unsigned) va_arg(ap, unsigned), width, pad);
-          break;
-
-        case 'x':
-        case 'X':
-          count += whisperPrintInt(va_arg(ap, int), width, pad, 16);
-          break;
-
-        case 'o':
-          count += whisperPrintInt(va_arg(ap, int), width, pad, 8);
-          break;
-
-        case 'c':
-          whisperPutc(va_arg(ap, int));
-          ++count;
-          break;
-
-        case 's':
-          count += whisperPuts(va_arg(ap, char*));
-          break;
-
-#if 0
-        case 'g':
-          count += whisperPrintDoubleG(va_arg(ap, double));
-          break;
-
-        case 'f':
-          count += whisperPrintDoubleF(va_arg(ap, double));
-#endif
-
-        }
-    }
-
-  return count;
-}
-
-
-int
-whisperPrintf(const char* format, ...)
-{
-  va_list ap;
-
-  va_start(ap, format);
-  int code = whisperPrintfImpl(format, ap);
-  va_end(ap);
-
-  return code;
-}
-
-
-int
-printf(const char* format, ...)
-{
-  va_list ap;
-
-  va_start(ap, format);
-  int code = whisperPrintfImpl(format, ap);
-  va_end(ap);
-
-  return code;
-}
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/README b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/README
deleted file mode 100644
index 9e7b668..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/README
+++ /dev/null
@@ -1,7 +0,0 @@
-This is dhrystone, compiled according to the spec:
- 1. Files dhry_1.c and dhry2_.c compiled separately.
- 2. No inlining.
- to run in demo TB:
-
-  make -f $RV_ROOT/tools/Makefile [<simulator>] TEST=dhry
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/crt0.s b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/crt0.s
deleted file mode 120000
index d09de58..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/crt0.s
+++ /dev/null
@@ -1 +0,0 @@
-../../asm/crt0.s
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry.h b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry.h
deleted file mode 100644
index d894ba1..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry.h
+++ /dev/null
@@ -1,437 +0,0 @@
-#pragma once
-
-/*
- ****************************************************************************
- *
- *                   "DHRYSTONE" Benchmark Program
- *                   -----------------------------
- *
- *  Version:    C, Version 2.1
- *
- *  File:       dhry.h (part 1 of 3)
- *
- *  Date:       May 25, 1988
- *
- *  Author:     Reinhold P. Weicker
- *                      Siemens AG, E STE 35
- *                      Postfach 3240
- *                      8520 Erlangen
- *                      Germany (West)
- *                              Phone:  [xxx-49]-9131-7-20330
- *                                      (8-17 Central European Time)
- *                              Usenet: ..!mcvax!unido!estevax!weicker
- *
- *              Original Version (in Ada) published in
- *              "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
- *              pp. 1013 - 1030, together with the statistics
- *              on which the distribution of statements etc. is based.
- *
- *              In this C version, the following C library functions are used:
- *              - strcpy, strcmp (inside the measurement loop)
- *              - printf, scanf (outside the measurement loop)
- *              In addition, Berkeley UNIX system calls "times ()" or "time ()"
- *              are used for execution time measurement. For measurements
- *              on other systems, these calls have to be changed.
- *
- *  Collection of Results:
- *              Reinhold Weicker (address see above) and
- *
- *              Rick Richardson
- *              PC Research. Inc.
- *              94 Apple Orchard Drive
- *              Tinton Falls, NJ 07724
- *                      Phone:  (201) 389-8963 (9-17 EST)
- *                      Usenet: ...!uunet!pcrat!rick
- *
- *      Please send results to Rick Richardson and/or Reinhold Weicker.
- *      Complete information should be given on hardware and software used.
- *      Hardware information includes: Machine type, CPU, type and size
- *      of caches; for microprocessors: clock frequency, memory speed
- *      (number of wait states).
- *      Software information includes: Compiler (and runtime library)
- *      manufacturer and version, compilation switches, OS version.
- *      The Operating System version may give an indication about the
- *      compiler; Dhrystone itself performs no OS calls in the measurement loop.
- *
- *      The complete output generated by the program should be mailed
- *      such that at least some checks for correctness can be made.
- *
- ***************************************************************************
- *
- *  History:    This version C/2.1 has been made for two reasons:
- *
- *              1) There is an obvious need for a common C version of
- *              Dhrystone, since C is at present the most popular system
- *              programming language for the class of processors
- *              (microcomputers, minicomputers) where Dhrystone is used most.
- *              There should be, as far as possible, only one C version of
- *              Dhrystone such that results can be compared without
- *              restrictions. In the past, the C versions distributed
- *              by Rick Richardson (Version 1.1) and by Reinhold Weicker
- *              had small (though not significant) differences.
- *
- *              2) As far as it is possible without changes to the Dhrystone
- *              statistics, optimizing compilers should be prevented from
- *              removing significant statements.
- *
- *              This C version has been developed in cooperation with
- *              Rick Richardson (Tinton Falls, NJ), it incorporates many
- *              ideas from the "Version 1.1" distributed previously by
- *              him over the UNIX network Usenet.
- *              I also thank Chaim Benedelac (National Semiconductor),
- *              David Ditzel (SUN), Earl Killian and John Mashey (MIPS),
- *              Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)
- *              for their help with comments on earlier versions of the
- *              benchmark.
- *
- *  Changes:    In the initialization part, this version follows mostly
- *              Rick Richardson's version distributed via Usenet, not the
- *              version distributed earlier via floppy disk by Reinhold Weicker.
- *              As a concession to older compilers, names have been made
- *              unique within the first 8 characters.
- *              Inside the measurement loop, this version follows the
- *              version previously distributed by Reinhold Weicker.
- *
- *              At several places in the benchmark, code has been added,
- *              but within the measurement loop only in branches that
- *              are not executed. The intention is that optimizing compilers
- *              should be prevented from moving code out of the measurement
- *              loop, or from removing code altogether. Since the statements
- *              that are executed within the measurement loop have NOT been
- *              changed, the numbers defining the "Dhrystone distribution"
- *              (distribution of statements, operand types and locality)
- *              still hold. Except for sophisticated optimizing compilers,
- *              execution times for this version should be the same as
- *              for previous versions.
- *
- *              Since it has proven difficult to subtract the time for the
- *              measurement loop overhead in a correct way, the loop check
- *              has been made a part of the benchmark. This does have
- *              an impact - though a very minor one - on the distribution
- *              statistics which have been updated for this version.
- *
- *              All changes within the measurement loop are described
- *              and discussed in the companion paper "Rationale for
- *              Dhrystone version 2".
- *
- *              Because of the self-imposed limitation that the order and
- *              distribution of the executed statements should not be
- *              changed, there are still cases where optimizing compilers
- *              may not generate code for some statements. To a certain
- *              degree, this is unavoidable for small synthetic benchmarks.
- *              Users of the benchmark are advised to check code listings
- *              whether code is generated for all statements of Dhrystone.
- *
- *              Version 2.1 is identical to version 2.0 distributed via
- *              the UNIX network Usenet in March 1988 except that it corrects
- *              some minor deficiencies that were found by users of version 2.0.
- *              The only change within the measurement loop is that a
- *              non-executed "else" part was added to the "if" statement in
- *              Func_3, and a non-executed "else" part removed from Proc_3.
- *
- ***************************************************************************
- *
- * Defines:     The following "Defines" are possible:
- *              -DREG=register          (default: Not defined)
- *                      As an approximation to what an average C programmer
- *                      might do, the "register" storage class is applied
- *                      (if enabled by -DREG=register)
- *                      - for local variables, if they are used (dynamically)
- *                        five or more times
- *                      - for parameters if they are used (dynamically)
- *                        six or more times
- *                      Note that an optimal "register" strategy is
- *                      compiler-dependent, and that "register" declarations
- *                      do not necessarily lead to faster execution.
- *              -DNOSTRUCTASSIGN        (default: Not defined)
- *                      Define if the C compiler does not support
- *                      assignment of structures.
- *              -DNOENUMS               (default: Not defined)
- *                      Define if the C compiler does not support
- *                      enumeration types.
- *              -DTIMES                 (default)
- *              -DTIME
- *                      The "times" function of UNIX (returning process times)
- *                      or the "time" function (returning wallclock time)
- *                      is used for measurement.
- *                      For single user machines, "time ()" is adequate. For
- *                      multi-user machines where you cannot get single-user
- *                      access, use the "times ()" function. If you have
- *                      neither, use a stopwatch in the dead of night.
- *                      "printf"s are provided marking the points "Start Timer"
- *                      and "Stop Timer". DO NOT use the UNIX "time(1)"
- *                      command, as this will measure the total time to
- *                      run this program, which will (erroneously) include
- *                      the time to allocate storage (malloc) and to perform
- *                      the initialization.
- *              -DHZ=nnn
- *                      In Berkeley UNIX, the function "times" returns process
- *                      time in 1/HZ seconds, with HZ = 60 for most systems.
- *                      CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY
- *                      A VALUE.
- *
- ***************************************************************************
- *
- *  Compilation model and measurement (IMPORTANT):
- *
- *  This C version of Dhrystone consists of three files:
- *  - dhry.h (this file, containing global definitions and comments)
- *  - dhry_1.c (containing the code corresponding to Ada package Pack_1)
- *  - dhry_2.c (containing the code corresponding to Ada package Pack_2)
- *
- *  The following "ground rules" apply for measurements:
- *  - Separate compilation
- *  - No procedure merging
- *  - Otherwise, compiler optimizations are allowed but should be indicated
- *  - Default results are those without register declarations
- *  See the companion paper "Rationale for Dhrystone Version 2" for a more
- *  detailed discussion of these ground rules.
- *
- *  For 16-Bit processors (e.g. 80186, 80286), times for all compilation
- *  models ("small", "medium", "large" etc.) should be given if possible,
- *  together with a definition of these models for the compiler system used.
- *
- **************************************************************************
- *
- *  Dhrystone (C version) statistics:
- *
- *  [Comment from the first distribution, updated for version 2.
- *   Note that because of language differences, the numbers are slightly
- *   different from the Ada version.]
- *
- *  The following program contains statements of a high level programming
- *  language (here: C) in a distribution considered representative:
- *
- *    assignments                  52 (51.0 %)
- *    control statements           33 (32.4 %)
- *    procedure, function calls    17 (16.7 %)
- *
- *  103 statements are dynamically executed. The program is balanced with
- *  respect to the three aspects:
- *
- *    - statement type
- *    - operand type
- *    - operand locality
- *         operand global, local, parameter, or constant.
- *
- *  The combination of these three aspects is balanced only approximately.
- *
- *  1. Statement Type:
- *  -----------------             number
- *
- *     V1 = V2                     9
- *       (incl. V1 = F(..)
- *     V = Constant               12
- *     Assignment,                 7
- *       with array element
- *     Assignment,                 6
- *       with record component
- *                                --
- *                                34       34
- *
- *     X = Y +|-|"&&"|"|" Z        5
- *     X = Y +|-|"==" Constant     6
- *     X = X +|- 1                 3
- *     X = Y *|/ Z                 2
- *     X = Expression,             1
- *           two operators
- *     X = Expression,             1
- *           three operators
- *                                --
- *                                18       18
- *
- *     if ....                    14
- *       with "else"      7
- *       without "else"   7
- *           executed        3
- *           not executed    4
- *     for ...                     7  |  counted every time
- *     while ...                   4  |  the loop condition
- *     do ... while                1  |  is evaluated
- *     switch ...                  1
- *     break                       1
- *     declaration with            1
- *       initialization
- *                                --
- *                                34       34
- *
- *     P (...)  procedure call    11
- *       user procedure      10
- *       library procedure    1
- *     X = F (...)
- *             function  call      6
- *       user function        5
- *       library function     1
- *                                --
- *                                17       17
- *                                        ---
- *                                        103
- *
- *    The average number of parameters in procedure or function calls
- *    is 1.82 (not counting the function values aX *
- *
- *  2. Operators
- *  ------------
- *                          number    approximate
- *                                    percentage
- *
- *    Arithmetic             32          50.8
- *
- *       +                     21          33.3
- *       -                      7          11.1
- *       *                      3           4.8
- *       / (int div)            1           1.6
- *
- *    Comparison             27           42.8
- *
- *       ==                     9           14.3
- *       /=                     4            6.3
- *       >                      1            1.6
- *       <                      3            4.8
- *       >=                     1            1.6
- *       <=                     9           14.3
- *
- *    Logic                   4            6.3
- *
- *       && (AND-THEN)          1            1.6
- *       |  (OR)                1            1.6
- *       !  (NOT)               2            3.2
- *
- *                           --          -----
- *                           63          100.1
- *
- *
- *  3. Operand Type (counted once per operand reference):
- *  ---------------
- *                          number    approximate
- *                                    percentage
- *
- *     Integer               175        72.3 %
- *     Character              45        18.6 %
- *     Pointer                12         5.0 %
- *     String30                6         2.5 %
- *     Array                   2         0.8 %
- *     Record                  2         0.8 %
- *                           ---       -------
- *                           242       100.0 %
- *
- *  When there is an access path leading to the final operand (e.g. a record
- *  component), only the final data type on the access path is counted.
- *
- *
- *  4. Operand Locality:
- *  -------------------
- *                                number    approximate
- *                                          percentage
- *
- *     local variable              114        47.1 %
- *     global variable              22         9.1 %
- *     parameter                    45        18.6 %
- *        value                        23         9.5 %
- *        reference                    22         9.1 %
- *     function result               6         2.5 %
- *     constant                     55        22.7 %
- *                                 ---       -------
- *                                 242       100.0 %
- *
- *
- *  The program does not compute anything meaningful, but it is syntactically
- *  and semantically correct. All variables have a value assigned to them
- *  before they are used as a source operand.
- *
- *  There has been no explicit effort to account for the effects of a
- *  cache, or to balance the use of long or short displacements for code or
- *  data.
- *
- ***************************************************************************
- */
-
-/* Compiler and system dependent definitions: */
-
-#ifndef TIME
-#undef TIMES
-#define TIMES
-#endif
-                /* Use times(2) time function unless    */
-                /* explicitly defined otherwise         */
-
-#ifdef MSC_CLOCK
-#undef HZ
-#undef TIMES
-#include <time.h>
-#define HZ      CLK_TCK
-#endif
-                /* Use Microsoft C hi-res clock */
-
-#ifdef TIMES
-#include <sys/types.h>
-#include <sys/times.h>
-
-#ifndef HZ
-#define HZ      100
-#endif
-                /* for "times" */
-#endif
-
-#define Mic_secs_Per_Second     1000000.0
-                /* Berkeley UNIX C returns process times in seconds/HZ */
-
-#ifdef  NOSTRUCTASSIGN
-#define structassign(d, s)      memcpy(&(d), &(s), sizeof(d))
-#else
-#define structassign(d, s)      d = s
-#endif
-
-#ifdef  NOENUM
-#define Ident_1 0
-#define Ident_2 1
-#define Ident_3 2
-#define Ident_4 3
-#define Ident_5 4
-  typedef int   Enumeration;
-#else
-  typedef       enum    {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
-                Enumeration;
-#endif
-        /* for boolean and enumeration types in Ada, Pascal */
-
-/* General definitions: */
-
-//#include <stdio.h>
-                /* for strcpy, strcmp */
-
-#define Null 0
-                /* Value of a Null pointer */
-#define true  1
-#define false 0
-
-typedef int     One_Thirty;
-typedef int     One_Fifty;
-typedef char    Capital_Letter;
-typedef int     Boolean;
-typedef char    Str_30 [31];
-typedef int     Arr_1_Dim [50];
-typedef int     Arr_2_Dim [50] [50];
-
-typedef struct record
-    {
-    struct record *Ptr_Comp;
-    Enumeration    Discr;
-    union {
-          struct {
-                  Enumeration Enum_Comp;
-                  int         Int_Comp;
-                  char        Str_Comp [31];
-                  } var_1;
-          struct {
-                  Enumeration E_Comp_2;
-                  char        Str_2_Comp [31];
-                  } var_2;
-          struct {
-                  char        Ch_1_Comp;
-                  char        Ch_2_Comp;
-                  } var_3;
-          } variant;
-      } Rec_Type, *Rec_Pointer;
-
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry.mki b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry.mki
deleted file mode 100644
index aa1d63c..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry.mki
+++ /dev/null
@@ -1,2 +0,0 @@
-OFILES = crt0.o dhry_1.o dhry_2.o printf.o
-TEST_CFLAGS = -g -O3
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry_1.c b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry_1.c
deleted file mode 100644
index bd4a290..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry_1.c
+++ /dev/null
@@ -1,462 +0,0 @@
-#define brqrv
-/*
- ****************************************************************************
- *
- *                   "DHRYSTONE" Benchmark Program
- *                   -----------------------------
- *
- *  Version:    C, Version 2.1
- *
- *  File:       dhry_1.c (part 2 of 3)
- *
- *  Date:       May 25, 1988
- *
- *  Author:     Reinhold P. Weicker
- *
- ****************************************************************************
- */
-
-#ifdef brqrv
-#include <stdio.h>
-#include <stdint.h>
-extern uint64_t get_mcycle();
-#endif
-
-#include "dhry.h"
-
-/* Global Variables: */
-
-Rec_Pointer     Ptr_Glob,
-                Next_Ptr_Glob;
-int             Int_Glob;
-Boolean         Bool_Glob;
-char            Ch_1_Glob,
-                Ch_2_Glob;
-int             Arr_1_Glob [50];
-int             Arr_2_Glob [50] [50];
-
-Enumeration     Func_1 ();
-  /* forward declaration necessary since Enumeration may not simply be int */
-
-#ifndef REG
-        Boolean Reg = false;
-#define REG
-        /* REG becomes defined as empty */
-        /* i.e. no register variables   */
-#else
-        Boolean Reg = true;
-#endif
-
-/* variables for time measurement: */
-
-#ifdef TIMES
-struct tms      time_info;
-#define Too_Small_Time (2*HZ)
-                /* Measurements should last at least about 2 seconds */
-#endif
-#ifdef TIME
-extern long     time();
-                /* see library function "time"  */
-#define Too_Small_Time 2
-                /* Measurements should last at least 2 seconds */
-#endif
-#ifdef MSC_CLOCK
-extern clock_t  clock();
-#define Too_Small_Time (2*HZ)
-#endif
-
-long
-                Begin_Time,
-                End_Time,
-                User_Time;
-
-float           Microseconds,
-                Dhrystones_Per_Second;
-
-/* end of variables for time measurement */
-
-
-extern char* strcpy(char*, const char*);
-
-extern Boolean Func_2 (Str_30, Str_30);
-extern void Proc_7 (One_Fifty Int_1_Par_Val, One_Fifty Int_2_Par_Val,
-                    One_Fifty *Int_Par_Ref);
-
-extern void Proc_8 (Arr_1_Dim Arr_1_Par_Ref, Arr_2_Dim Arr_2_Par_Ref,
-                    int Int_1_Par_Val, int Int_2_Par_Val);
-
-extern void Proc_6 (Enumeration Enum_Val_Par,
-                    Enumeration *Enum_Ref_Par);
-
-void Proc_5();
-void Proc_4();
-
-void Proc_1(Rec_Pointer Ptr_Val_Par);
-void Proc_2(One_Fifty *Int_Par_Ref);
-void Proc_3(Rec_Pointer *Ptr_Ref_Par);
-
-
-int
-main ()
-/*****/
-
-  /* main program, corresponds to procedures        */
-  /* Main and Proc_0 in the Ada version             */
-{
-        One_Fifty       Int_1_Loc;
-  REG   One_Fifty       Int_2_Loc;
-        One_Fifty       Int_3_Loc;
-  REG   char            Ch_Index;
-        Enumeration     Enum_Loc;
-        Str_30          Str_1_Loc;
-        Str_30          Str_2_Loc;
-  REG   int             Run_Index;
-  REG   int             Number_Of_Runs;
-
-  /* Initializations */
-
-  Rec_Type rec0;
-  Rec_Type rec1;
-
-  Next_Ptr_Glob = &rec0;
-  Ptr_Glob = &rec1;
-
-  Ptr_Glob->Ptr_Comp                    = Next_Ptr_Glob;
-  Ptr_Glob->Discr                       = Ident_1;
-  Ptr_Glob->variant.var_1.Enum_Comp     = Ident_3;
-  Ptr_Glob->variant.var_1.Int_Comp      = 40;
-  strcpy (Ptr_Glob->variant.var_1.Str_Comp,
-          "DHRYSTONE PROGRAM, SOME STRING");
-  strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING");
-
-  Arr_2_Glob [8][7] = 10;
-        /* Was missing in published program. Without this statement,    */
-        /* Arr_2_Glob [8][7] would have an undefined value.             */
-        /* Warning: With 16-Bit processors and Number_Of_Runs > 32000,  */
-        /* overflow may occur for this array element.                   */
-
-  printf ("\n");
-  printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n");
-  printf ("\n");
-  if (Reg)
-  {
-    printf ("Program compiled with 'register' attribute\n");
-    printf ("\n");
-  }
-  else
-  {
-    printf ("Program compiled without 'register' attribute\n");
-    printf ("\n");
-  }
-
-  #ifndef brqrv
-  printf ("Please give the number of runs through the benchmark: ");
-  {
-    int n = 1000;
-    scanf ("%d", &n);
-    Number_Of_Runs = n;
-  }
-  printf ("\n");
-  #else
-  // We do not have scanf.  Hardwire number of runs.
-  Number_Of_Runs = 1000;
-  #endif
-
-  printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs);
-
-  /***************/
-  /* Start timer */
-  /***************/
-
-#ifdef brqrv
-    Begin_Time = get_mcycle();
-#else
-
-#ifdef TIMES
-  times (&time_info);
-  Begin_Time = (long) time_info.tms_utime;
-#endif
-#ifdef TIME
-  Begin_Time = time ( (long *) 0);
-#endif
-#ifdef MSC_CLOCK
-  Begin_Time = clock();
-#endif
-
-#endif
-
-  __asm("__perf_start:");
-
-  for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
-  {
-    __asm("__loop_start:");
-
-    Proc_5();
-    Proc_4();
-      /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
-    Int_1_Loc = 2;
-    Int_2_Loc = 3;
-    strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
-    Enum_Loc = Ident_2;
-    Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
-      /* Bool_Glob == 1 */
-    while (Int_1_Loc < Int_2_Loc)  /* loop body executed once */
-    {
-      Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
-        /* Int_3_Loc == 7 */
-      Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
-        /* Int_3_Loc == 7 */
-      Int_1_Loc += 1;
-    } /* while */
-      /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
-    Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
-      /* Int_Glob == 5 */
-    Proc_1 (Ptr_Glob);
-    for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
-                             /* loop body executed twice */
-    {
-      if (Enum_Loc == Func_1 (Ch_Index, 'C'))
-          /* then, not executed */
-        {
-        Proc_6 (Ident_1, &Enum_Loc);
-        strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
-        Int_2_Loc = Run_Index;
-        Int_Glob = Run_Index;
-        }
-    }
-      /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
-    Int_2_Loc = Int_2_Loc * Int_1_Loc;
-    Int_1_Loc = Int_2_Loc / Int_3_Loc;
-    Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
-      /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
-    Proc_2 (&Int_1_Loc);
-      /* Int_1_Loc == 5 */
-
-  } /* loop "for Run_Index" */
-
-  __asm("__perf_end:");
-
-  /**************/
-  /* Stop timer */
-  /**************/
-
-#ifdef brqrv
-    End_Time = get_mcycle();
-    printf("End_time=%d\n", (int) End_Time);
-#else
-#ifdef TIMES
-  times (&time_info);
-  End_Time = (long) time_info.tms_utime;
-#endif
-#ifdef TIME
-  End_Time = time ( (long *) 0);
-#endif
-#ifdef MSC_CLOCK
-  End_Time = clock();
-#endif
-
-#endif
-
-  printf ("Execution ends\n");
-  printf ("\n");
-  printf ("Final values of the variables used in the benchmark:\n");
-  printf ("\n");
-  printf ("Int_Glob:            %d\n", Int_Glob);
-  printf ("        should be:   %d\n", 5);
-  printf ("Bool_Glob:           %d\n", Bool_Glob);
-  printf ("        should be:   %d\n", 1);
-  printf ("Ch_1_Glob:           %c\n", Ch_1_Glob);
-  printf ("        should be:   %c\n", 'A');
-  printf ("Ch_2_Glob:           %c\n", Ch_2_Glob);
-  printf ("        should be:   %c\n", 'B');
-  printf ("Arr_1_Glob[8]:       %d\n", Arr_1_Glob[8]);
-  printf ("        should be:   %d\n", 7);
-  printf ("Arr_2_Glob[8][7]:    %d\n", Arr_2_Glob[8][7]);
-  printf ("        should be:   Number_Of_Runs + 10\n");
-  printf ("Ptr_Glob->\n");
-  printf ("  Ptr_Comp:          %d\n", (int) Ptr_Glob->Ptr_Comp);
-  printf ("        should be:   (implementation-dependent)\n");
-  printf ("  Discr:             %d\n", Ptr_Glob->Discr);
-  printf ("        should be:   %d\n", 0);
-  printf ("  Enum_Comp:         %d\n", Ptr_Glob->variant.var_1.Enum_Comp);
-  printf ("        should be:   %d\n", 2);
-  printf ("  Int_Comp:          %d\n", Ptr_Glob->variant.var_1.Int_Comp);
-  printf ("        should be:   %d\n", 17);
-  printf ("  Str_Comp:          %s\n", Ptr_Glob->variant.var_1.Str_Comp);
-  printf ("        should be:   DHRYSTONE PROGRAM, SOME STRING\n");
-  printf ("Next_Ptr_Glob->\n");
-  printf ("  Ptr_Comp:          %d\n", (int) Next_Ptr_Glob->Ptr_Comp);
-  printf ("        should be:   (implementation-dependent), same as above\n");
-  printf ("  Discr:             %d\n", Next_Ptr_Glob->Discr);
-  printf ("        should be:   %d\n", 0);
-  printf ("  Enum_Comp:         %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp);
-  printf ("        should be:   %d\n", 1);
-  printf ("  Int_Comp:          %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp);
-  printf ("        should be:   %d\n", 18);
-  printf ("  Str_Comp:          %s\n",
-                                Next_Ptr_Glob->variant.var_1.Str_Comp);
-  printf ("        should be:   DHRYSTONE PROGRAM, SOME STRING\n");
-  printf ("Int_1_Loc:           %d\n", Int_1_Loc);
-  printf ("        should be:   %d\n", 5);
-  printf ("Int_2_Loc:           %d\n", Int_2_Loc);
-  printf ("        should be:   %d\n", 13);
-  printf ("Int_3_Loc:           %d\n", Int_3_Loc);
-  printf ("        should be:   %d\n", 7);
-  printf ("Enum_Loc:            %d\n", Enum_Loc);
-  printf ("        should be:   %d\n", 1);
-  printf ("Str_1_Loc:           %s\n", Str_1_Loc);
-  printf ("        should be:   DHRYSTONE PROGRAM, 1'ST STRING\n");
-  printf ("Str_2_Loc:           %s\n", Str_2_Loc);
-  printf ("        should be:   DHRYSTONE PROGRAM, 2'ND STRING\n");
-  printf ("\n");
-
-  User_Time = End_Time - Begin_Time;
-
-  if (User_Time < Too_Small_Time)
-  {
-    printf ("User time %d\n", User_Time);
-    printf ("Measured time too small to obtain meaningful results\n");
-    printf ("Please increase number of runs\n");
-    printf ("\n");
-  }
-  else
-  {
-#ifdef brqrv
-    printf ("Run time = %d clocks for %d Dhrystones\n", User_Time, Number_Of_Runs );
-    printf ("Dhrystones per Second per MHz: ");
-    printf ("%d.%02d", 1000000*Number_Of_Runs/User_Time,(100000000*Number_Of_Runs/User_Time) % 100);
-#else
-#ifdef TIME
-    Microseconds = (float) User_Time * Mic_secs_Per_Second
-                        / (float) Number_Of_Runs;
-    Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time;
-#else
-    Microseconds = (float) User_Time * Mic_secs_Per_Second
-                        / ((float) HZ * ((float) Number_Of_Runs));
-    Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs)
-                        / (float) User_Time;
-#endif
-    printf ("Microseconds for one run through Dhrystone: ");
-    printf ("%6.1f \n", Microseconds);
-    printf ("Dhrystones per Second:                      ");
-    printf ("%6.1f \n", Dhrystones_Per_Second);
-
-#endif
-
-    printf ("\n");
-  }
-
-}
-
-
-void
-Proc_1 (Ptr_Val_Par)
-/******************/
-
-REG Rec_Pointer Ptr_Val_Par;
-    /* executed once */
-{
-  REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp;
-                                        /* == Ptr_Glob_Next */
-  /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp,    */
-  /* corresponds to "rename" in Ada, "with" in Pascal           */
-
-  structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
-  Ptr_Val_Par->variant.var_1.Int_Comp = 5;
-  Next_Record->variant.var_1.Int_Comp
-        = Ptr_Val_Par->variant.var_1.Int_Comp;
-  Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
-  Proc_3 (&Next_Record->Ptr_Comp);
-    /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp
-                        == Ptr_Glob->Ptr_Comp */
-  if (Next_Record->Discr == Ident_1)
-    /* then, executed */
-  {
-    Next_Record->variant.var_1.Int_Comp = 6;
-    Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp,
-           &Next_Record->variant.var_1.Enum_Comp);
-    Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
-    Proc_7 (Next_Record->variant.var_1.Int_Comp, 10,
-           &Next_Record->variant.var_1.Int_Comp);
-  }
-  else /* not executed */
-    structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp);
-} /* Proc_1 */
-
-
-void
-Proc_2 (Int_Par_Ref)
-/******************/
-    /* executed once */
-    /* *Int_Par_Ref == 1, becomes 4 */
-
-One_Fifty   *Int_Par_Ref;
-{
-  One_Fifty  Int_Loc;
-  Enumeration   Enum_Loc;
-
-  Int_Loc = *Int_Par_Ref + 10;
-  do /* executed once */
-    if (Ch_1_Glob == 'A')
-      /* then, executed */
-    {
-      Int_Loc -= 1;
-      *Int_Par_Ref = Int_Loc - Int_Glob;
-      Enum_Loc = Ident_1;
-    } /* if */
-  while (Enum_Loc != Ident_1); /* true */
-} /* Proc_2 */
-
-
-void
-Proc_3 (Ptr_Ref_Par)
-/******************/
-    /* executed once */
-    /* Ptr_Ref_Par becomes Ptr_Glob */
-
-Rec_Pointer *Ptr_Ref_Par;
-
-{
-  if (Ptr_Glob != Null)
-    /* then, executed */
-    *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
-  Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
-} /* Proc_3 */
-
-
-void
-Proc_4 () /* without parameters */
-/*******/
-    /* executed once */
-{
-  Boolean Bool_Loc;
-
-  Bool_Loc = Ch_1_Glob == 'A';
-  Bool_Glob = Bool_Loc | Bool_Glob;
-  Ch_2_Glob = 'B';
-} /* Proc_4 */
-
-
-void
-Proc_5 () /* without parameters */
-/*******/
-    /* executed once */
-{
-  Ch_1_Glob = 'A';
-  Bool_Glob = false;
-} /* Proc_5 */
-
-
-        /* Procedure for the assignment of structures,          */
-        /* if the C compiler doesn't support this feature       */
-#ifdef  NOSTRUCTASSIGN
-memcpy (d, s, l)
-register char   *d;
-register char   *s;
-register int    l;
-{
-        while (l--) *d++ = *s++;
-}
-#endif
-
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry_2.c b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry_2.c
deleted file mode 100644
index ecf4de3..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/dhry_2.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- ****************************************************************************
- *
- *                   "DHRYSTONE" Benchmark Program
- *                   -----------------------------
- *
- *  Version:    C, Version 2.1
- *
- *  File:       dhry_2.c (part 3 of 3)
- *
- *  Date:       May 25, 1988
- *
- *  Author:     Reinhold P. Weicker
- *
- ****************************************************************************
- */
-
-#include "dhry.h"
-
-#ifndef REG
-#define REG
-        /* REG becomes defined as empty */
-        /* i.e. no register variables   */
-#endif
-
-extern  int     Int_Glob;
-extern  char    Ch_1_Glob;
-
-
-int
-strcmp(const char* s1, const char* s2)
-{
-  while (*s1 && *s1 == *s2)
-    {
-      s1++;
-      s2++;
-    }
-  if (*s1 == *s2)
-    return 0;
-  return *s1 > *s2? 1 : -1;
-}
-
-
-Boolean Func_3 (Enumeration Enum_Par_Val);
-
-
-void
-Proc_6 (Enum_Val_Par, Enum_Ref_Par)
-/*********************************/
-    /* executed once */
-    /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */
-
-Enumeration  Enum_Val_Par;
-Enumeration *Enum_Ref_Par;
-{
-  *Enum_Ref_Par = Enum_Val_Par;
-  if (! Func_3 (Enum_Val_Par))
-    /* then, not executed */
-    *Enum_Ref_Par = Ident_4;
-  switch (Enum_Val_Par)
-  {
-    case Ident_1:
-      *Enum_Ref_Par = Ident_1;
-      break;
-    case Ident_2:
-      if (Int_Glob > 100)
-        /* then */
-      *Enum_Ref_Par = Ident_1;
-      else *Enum_Ref_Par = Ident_4;
-      break;
-    case Ident_3: /* executed */
-      *Enum_Ref_Par = Ident_2;
-      break;
-    case Ident_4: break;
-    case Ident_5:
-      *Enum_Ref_Par = Ident_3;
-      break;
-  } /* switch */
-} /* Proc_6 */
-
-
-void
-Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref)
-/**********************************************/
-    /* executed three times                                      */
-    /* first call:      Int_1_Par_Val == 2, Int_2_Par_Val == 3,  */
-    /*                  Int_Par_Ref becomes 7                    */
-    /* second call:     Int_1_Par_Val == 10, Int_2_Par_Val == 5, */
-    /*                  Int_Par_Ref becomes 17                   */
-    /* third call:      Int_1_Par_Val == 6, Int_2_Par_Val == 10, */
-    /*                  Int_Par_Ref becomes 18                   */
-One_Fifty       Int_1_Par_Val;
-One_Fifty       Int_2_Par_Val;
-One_Fifty      *Int_Par_Ref;
-{
-  One_Fifty Int_Loc;
-
-  Int_Loc = Int_1_Par_Val + 2;
-  *Int_Par_Ref = Int_2_Par_Val + Int_Loc;
-} /* Proc_7 */
-
-
-void
-Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val)
-/*********************************************************************/
-    /* executed once      */
-    /* Int_Par_Val_1 == 3 */
-    /* Int_Par_Val_2 == 7 */
-Arr_1_Dim       Arr_1_Par_Ref;
-Arr_2_Dim       Arr_2_Par_Ref;
-int             Int_1_Par_Val;
-int             Int_2_Par_Val;
-{
-  REG One_Fifty Int_Index;
-  REG One_Fifty Int_Loc;
-
-  Int_Loc = Int_1_Par_Val + 5;
-  Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
-  Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc];
-  Arr_1_Par_Ref [Int_Loc+30] = Int_Loc;
-  for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index)
-    Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc;
-  Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1;
-  Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc];
-  Int_Glob = 5;
-} /* Proc_8 */
-
-
-Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val)
-/*************************************************/
-    /* executed three times                                         */
-    /* first call:      Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R'    */
-    /* second call:     Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C'    */
-    /* third call:      Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C'    */
-
-Capital_Letter   Ch_1_Par_Val;
-Capital_Letter   Ch_2_Par_Val;
-{
-  Capital_Letter        Ch_1_Loc;
-  Capital_Letter        Ch_2_Loc;
-
-  Ch_1_Loc = Ch_1_Par_Val;
-  Ch_2_Loc = Ch_1_Loc;
-  if (Ch_2_Loc != Ch_2_Par_Val)
-    /* then, executed */
-    return (Ident_1);
-  else  /* not executed */
-  {
-    Ch_1_Glob = Ch_1_Loc;
-    return (Ident_2);
-   }
-} /* Func_1 */
-
-
-Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref)
-/*************************************************/
-    /* executed once */
-    /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */
-    /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */
-
-Str_30  Str_1_Par_Ref;
-Str_30  Str_2_Par_Ref;
-{
-  REG One_Thirty        Int_Loc;
-      Capital_Letter    Ch_Loc;
-
-  Int_Loc = 2;
-  while (Int_Loc <= 2) /* loop body executed once */
-    if (Func_1 (Str_1_Par_Ref[Int_Loc],
-                Str_2_Par_Ref[Int_Loc+1]) == Ident_1)
-      /* then, executed */
-    {
-      Ch_Loc = 'A';
-      Int_Loc += 1;
-    } /* if, while */
-  if (Ch_Loc >= 'W' && Ch_Loc < 'Z')
-    /* then, not executed */
-    Int_Loc = 7;
-  if (Ch_Loc == 'R')
-    /* then, not executed */
-    return (true);
-  else /* executed */
-  {
-    if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0)
-      /* then, not executed */
-    {
-      Int_Loc += 7;
-      Int_Glob = Int_Loc;
-      return (true);
-    }
-    else /* executed */
-      return (false);
-  } /* if Ch_Loc */
-} /* Func_2 */
-
-
-Boolean Func_3 (Enum_Par_Val)
-/***************************/
-    /* executed once        */
-    /* Enum_Par_Val == Ident_3 */
-Enumeration Enum_Par_Val;
-{
-  Enumeration Enum_Loc;
-
-  Enum_Loc = Enum_Par_Val;
-  if (Enum_Loc == Ident_3)
-    /* then, executed */
-    return (true);
-  else /* not executed */
-    return (false);
-} /* Func_3 */
-
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/printf.c b/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/printf.c
deleted file mode 120000
index 430ba5d..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/dhry/printf.c
+++ /dev/null
@@ -1 +0,0 @@
-../../asm/printf.c
\ No newline at end of file
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/hello_world/Makefile b/verilog/rtl/BrqRV_EB1/testbench/tests/hello_world/Makefile
deleted file mode 100644
index ef32c88..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/hello_world/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-export TEST = hello_world
-export OFILES = crt0.o hello_world.o
-export BUILD_PATH = $(shell pwd)/snapshots/default
-
-program.hex:
-	$(MAKE) -e -f $(RV_ROOT)/tools/make.common $(BUILD_PATH)/defines.h
-	$(MAKE) -e -f $(RV_ROOT)/tools/make.common $@
-
-.DEFAULT:
-	$(MAKE) -e program.hex
-	$(MAKE) -e -f $(RV_ROOT)/tools/make.common $@
diff --git a/verilog/rtl/BrqRV_EB1/testbench/tests/hello_world/hello_world.s b/verilog/rtl/BrqRV_EB1/testbench/tests/hello_world/hello_world.s
deleted file mode 100644
index bfe8346..0000000
--- a/verilog/rtl/BrqRV_EB1/testbench/tests/hello_world/hello_world.s
+++ /dev/null
@@ -1,42 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright 2019 MERL Corporation or its affiliates.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-// Assembly code for Hello World
-// Not using only ALU ops for creating the string
-
-
-#include "defines.h"
-
-.section .text
-.global main
-
-main:
-    li x3, RV_SERIALIO
-    la x4, hw_data
-
-loop:
-   lb x5, 0(x4)
-   sb x5, 0(x3)
-   addi x4, x4, 1
-   bnez x5, loop
-   ret
-
-.data
-hw_data:
-.ascii "----------------------------------\n"
-.ascii "Hello World from brqrv eb1 @WDC !!\n"
-.ascii "----------------------------------\n"
-.byte 0
diff --git a/verilog/rtl/BrqRV_EB1/tools/JSON.pm b/verilog/rtl/BrqRV_EB1/tools/JSON.pm
deleted file mode 100644
index 6fb7a90..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/JSON.pm
+++ /dev/null
@@ -1,2267 +0,0 @@
-package JSON;
-
-
-use strict;
-use Carp ();
-use base qw(Exporter);
-@JSON::EXPORT = qw(from_json to_json jsonToObj objToJson encode_json decode_json);
-
-BEGIN {
-    $JSON::VERSION = '2.53';
-    $JSON::DEBUG   = 0 unless (defined $JSON::DEBUG);
-    $JSON::DEBUG   = $ENV{ PERL_JSON_DEBUG } if exists $ENV{ PERL_JSON_DEBUG };
-}
-
-my $Module_XS  = 'JSON::XS';
-my $Module_PP  = 'JSON::PP';
-my $Module_bp  = 'JSON::backportPP'; # included in JSON distribution
-my $PP_Version = '2.27200';
-my $XS_Version = '2.27';
-
-
-# XS and PP common methods
-
-my @PublicMethods = qw/
-    ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref
-    allow_blessed convert_blessed filter_json_object filter_json_single_key_object
-    shrink max_depth max_size encode decode decode_prefix allow_unknown
-/;
-
-my @Properties = qw/
-    ascii latin1 utf8 indent space_before space_after relaxed canonical allow_nonref
-    allow_blessed convert_blessed shrink max_depth max_size allow_unknown
-/;
-
-my @XSOnlyMethods = qw//; # Currently nothing
-
-my @PPOnlyMethods = qw/
-    indent_length sort_by
-    allow_singlequote allow_bignum loose allow_barekey escape_slash as_nonblessed
-/; # JSON::PP specific
-
-
-# used in _load_xs and _load_pp ($INSTALL_ONLY is not used currently)
-my $_INSTALL_DONT_DIE  = 1; # When _load_xs fails to load XS, don't die.
-my $_INSTALL_ONLY      = 2; # Don't call _set_methods()
-my $_ALLOW_UNSUPPORTED = 0;
-my $_UNIV_CONV_BLESSED = 0;
-my $_USSING_bpPP       = 0;
-
-
-# Check the environment variable to decide worker module.
-
-unless ($JSON::Backend) {
-    $JSON::DEBUG and  Carp::carp("Check used worker module...");
-
-    my $backend = exists $ENV{PERL_JSON_BACKEND} ? $ENV{PERL_JSON_BACKEND} : 1;
-
-    if ($backend eq '1' or $backend =~ /JSON::XS\s*,\s*JSON::PP/) {
-        _load_xs($_INSTALL_DONT_DIE) or _load_pp();
-    }
-    elsif ($backend eq '0' or $backend eq 'JSON::PP') {
-        _load_pp();
-    }
-    elsif ($backend eq '2' or $backend eq 'JSON::XS') {
-        _load_xs();
-    }
-    elsif ($backend eq 'JSON::backportPP') {
-        $_USSING_bpPP = 1;
-        _load_pp();
-    }
-    else {
-        Carp::croak "The value of environmental variable 'PERL_JSON_BACKEND' is invalid.";
-    }
-}
-
-
-sub import {
-    my $pkg = shift;
-    my @what_to_export;
-    my $no_export;
-
-    for my $tag (@_) {
-        if ($tag eq '-support_by_pp') {
-            if (!$_ALLOW_UNSUPPORTED++) {
-                JSON::Backend::XS
-                    ->support_by_pp(@PPOnlyMethods) if ($JSON::Backend eq $Module_XS);
-            }
-            next;
-        }
-        elsif ($tag eq '-no_export') {
-            $no_export++, next;
-        }
-        elsif ( $tag eq '-convert_blessed_universally' ) {
-            eval q|
-                require B;
-                *UNIVERSAL::TO_JSON = sub {
-                    my $b_obj = B::svref_2object( $_[0] );
-                    return    $b_obj->isa('B::HV') ? { %{ $_[0] } }
-                            : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
-                            : undef
-                            ;
-                }
-            | if ( !$_UNIV_CONV_BLESSED++ );
-            next;
-        }
-        push @what_to_export, $tag;
-    }
-
-    return if ($no_export);
-
-    __PACKAGE__->export_to_level(1, $pkg, @what_to_export);
-}
-
-
-# OBSOLETED
-
-sub jsonToObj {
-    my $alternative = 'from_json';
-    if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
-        shift @_; $alternative = 'decode';
-    }
-    Carp::carp "'jsonToObj' will be obsoleted. Please use '$alternative' instead.";
-    return JSON::from_json(@_);
-};
-
-sub objToJson {
-    my $alternative = 'to_json';
-    if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
-        shift @_; $alternative = 'encode';
-    }
-    Carp::carp "'objToJson' will be obsoleted. Please use '$alternative' instead.";
-    JSON::to_json(@_);
-};
-
-
-# INTERFACES
-
-sub to_json ($@) {
-    if (
-        ref($_[0]) eq 'JSON'
-        or (@_ > 2 and $_[0] eq 'JSON')
-    ) {
-        Carp::croak "to_json should not be called as a method.";
-    }
-    my $json = new JSON;
-
-    if (@_ == 2 and ref $_[1] eq 'HASH') {
-        my $opt  = $_[1];
-        for my $method (keys %$opt) {
-            $json->$method( $opt->{$method} );
-        }
-    }
-
-    $json->encode($_[0]);
-}
-
-
-sub from_json ($@) {
-    if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) {
-        Carp::croak "from_json should not be called as a method.";
-    }
-    my $json = new JSON;
-
-    if (@_ == 2 and ref $_[1] eq 'HASH') {
-        my $opt  = $_[1];
-        for my $method (keys %$opt) {
-            $json->$method( $opt->{$method} );
-        }
-    }
-
-    return $json->decode( $_[0] );
-}
-
-
-sub true  { $JSON::true  }
-
-sub false { $JSON::false }
-
-sub null  { undef; }
-
-
-sub require_xs_version { $XS_Version; }
-
-sub backend {
-    my $proto = shift;
-    $JSON::Backend;
-}
-
-#*module = *backend;
-
-
-sub is_xs {
-    return $_[0]->module eq $Module_XS;
-}
-
-
-sub is_pp {
-    return not $_[0]->xs;
-}
-
-
-sub pureperl_only_methods { @PPOnlyMethods; }
-
-
-sub property {
-    my ($self, $name, $value) = @_;
-
-    if (@_ == 1) {
-        my %props;
-        for $name (@Properties) {
-            my $method = 'get_' . $name;
-            if ($name eq 'max_size') {
-                my $value = $self->$method();
-                $props{$name} = $value == 1 ? 0 : $value;
-                next;
-            }
-            $props{$name} = $self->$method();
-        }
-        return \%props;
-    }
-    elsif (@_ > 3) {
-        Carp::croak('property() can take only the option within 2 arguments.');
-    }
-    elsif (@_ == 2) {
-        if ( my $method = $self->can('get_' . $name) ) {
-            if ($name eq 'max_size') {
-                my $value = $self->$method();
-                return $value == 1 ? 0 : $value;
-            }
-            $self->$method();
-        }
-    }
-    else {
-        $self->$name($value);
-    }
-
-}
-
-
-
-# INTERNAL
-
-sub _load_xs {
-    my $opt = shift;
-
-    $JSON::DEBUG and Carp::carp "Load $Module_XS.";
-
-    # if called after install module, overload is disable.... why?
-    JSON::Boolean::_overrride_overload($Module_XS);
-    JSON::Boolean::_overrride_overload($Module_PP);
-
-    eval qq|
-        use $Module_XS $XS_Version ();
-    |;
-
-    if ($@) {
-        if (defined $opt and $opt & $_INSTALL_DONT_DIE) {
-            $JSON::DEBUG and Carp::carp "Can't load $Module_XS...($@)";
-            return 0;
-        }
-        Carp::croak $@;
-    }
-
-    unless (defined $opt and $opt & $_INSTALL_ONLY) {
-        _set_module( $JSON::Backend = $Module_XS );
-        my $data = join("", <DATA>); # this code is from Jcode 2.xx.
-        close(DATA);
-        eval $data;
-        JSON::Backend::XS->init;
-    }
-
-    return 1;
-};
-
-
-sub _load_pp {
-    my $opt = shift;
-    my $backend = $_USSING_bpPP ? $Module_bp : $Module_PP;
-
-    $JSON::DEBUG and Carp::carp "Load $backend.";
-
-    # if called after install module, overload is disable.... why?
-    JSON::Boolean::_overrride_overload($Module_XS);
-    JSON::Boolean::_overrride_overload($backend);
-
-    if ( $_USSING_bpPP ) {
-        eval qq| require $backend |;
-    }
-    else {
-        eval qq| use $backend $PP_Version () |;
-    }
-
-    if ($@) {
-        if ( $backend eq $Module_PP ) {
-            $JSON::DEBUG and Carp::carp "Can't load $Module_PP ($@), so try to load $Module_bp";
-            $_USSING_bpPP++;
-            $backend = $Module_bp;
-            JSON::Boolean::_overrride_overload($backend);
-            local $^W; # if PP installed but invalid version, backportPP redifines methods.
-            eval qq| require $Module_bp |;
-        }
-        Carp::croak $@ if $@;
-    }
-
-    unless (defined $opt and $opt & $_INSTALL_ONLY) {
-        _set_module( $JSON::Backend = $Module_PP ); # even if backportPP, set $Backend with 'JSON::PP'
-        JSON::Backend::PP->init;
-    }
-};
-
-
-sub _set_module {
-    return if defined $JSON::true;
-
-    my $module = shift;
-
-    local $^W;
-    no strict qw(refs);
-
-    $JSON::true  = ${"$module\::true"};
-    $JSON::false = ${"$module\::false"};
-
-    push @JSON::ISA, $module;
-    push @{"$module\::Boolean::ISA"}, qw(JSON::Boolean);
-
-    *{"JSON::is_bool"} = \&{"$module\::is_bool"};
-
-    for my $method ($module eq $Module_XS ? @PPOnlyMethods : @XSOnlyMethods) {
-        *{"JSON::$method"} = sub {
-            Carp::carp("$method is not supported in $module.");
-            $_[0];
-        };
-    }
-
-    return 1;
-}
-
-
-
-#
-# JSON Boolean
-#
-
-package JSON::Boolean;
-
-my %Installed;
-
-sub _overrride_overload {
-    return if ($Installed{ $_[0] }++);
-
-    my $boolean = $_[0] . '::Boolean';
-
-    eval sprintf(q|
-        package %s;
-        use overload (
-            '""' => sub { ${$_[0]} == 1 ? 'true' : 'false' },
-            'eq' => sub {
-                my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]);
-                if ($op eq 'true' or $op eq 'false') {
-                    return "$obj" eq 'true' ? 'true' eq $op : 'false' eq $op;
-                }
-                else {
-                    return $obj ? 1 == $op : 0 == $op;
-                }
-            },
-        );
-    |, $boolean);
-
-    if ($@) { Carp::croak $@; }
-
-    return 1;
-}
-
-
-#
-# Helper classes for Backend Module (PP)
-#
-
-package JSON::Backend::PP;
-
-sub init {
-    local $^W;
-    no strict qw(refs); # this routine may be called after JSON::Backend::XS init was called.
-    *{"JSON::decode_json"} = \&{"JSON::PP::decode_json"};
-    *{"JSON::encode_json"} = \&{"JSON::PP::encode_json"};
-    *{"JSON::PP::is_xs"}  = sub { 0 };
-    *{"JSON::PP::is_pp"}  = sub { 1 };
-    return 1;
-}
-
-#
-# To save memory, the below lines are read only when XS backend is used.
-#
-
-package JSON;
-
-1;
-__DATA__
-
-
-#
-# Helper classes for Backend Module (XS)
-#
-
-package JSON::Backend::XS;
-
-use constant INDENT_LENGTH_FLAG => 15 << 12;
-
-use constant UNSUPPORTED_ENCODE_FLAG => {
-    ESCAPE_SLASH      => 0x00000010,
-    ALLOW_BIGNUM      => 0x00000020,
-    AS_NONBLESSED     => 0x00000040,
-    EXPANDED          => 0x10000000, # for developer's
-};
-
-use constant UNSUPPORTED_DECODE_FLAG => {
-    LOOSE             => 0x00000001,
-    ALLOW_BIGNUM      => 0x00000002,
-    ALLOW_BAREKEY     => 0x00000004,
-    ALLOW_SINGLEQUOTE => 0x00000008,
-    EXPANDED          => 0x20000000, # for developer's
-};
-
-
-sub init {
-    local $^W;
-    no strict qw(refs);
-    *{"JSON::decode_json"} = \&{"JSON::XS::decode_json"};
-    *{"JSON::encode_json"} = \&{"JSON::XS::encode_json"};
-    *{"JSON::XS::is_xs"}  = sub { 1 };
-    *{"JSON::XS::is_pp"}  = sub { 0 };
-    return 1;
-}
-
-
-sub support_by_pp {
-    my ($class, @methods) = @_;
-
-    local $^W;
-    no strict qw(refs);
-
-    my $JSON_XS_encode_orignal     = \&JSON::XS::encode;
-    my $JSON_XS_decode_orignal     = \&JSON::XS::decode;
-    my $JSON_XS_incr_parse_orignal = \&JSON::XS::incr_parse;
-
-    *JSON::XS::decode     = \&JSON::Backend::XS::Supportable::_decode;
-    *JSON::XS::encode     = \&JSON::Backend::XS::Supportable::_encode;
-    *JSON::XS::incr_parse = \&JSON::Backend::XS::Supportable::_incr_parse;
-
-    *{JSON::XS::_original_decode}     = $JSON_XS_decode_orignal;
-    *{JSON::XS::_original_encode}     = $JSON_XS_encode_orignal;
-    *{JSON::XS::_original_incr_parse} = $JSON_XS_incr_parse_orignal;
-
-    push @JSON::Backend::XS::Supportable::ISA, 'JSON';
-
-    my $pkg = 'JSON::Backend::XS::Supportable';
-
-    *{JSON::new} = sub {
-        my $proto = new JSON::XS; $$proto = 0;
-        bless  $proto, $pkg;
-    };
-
-
-    for my $method (@methods) {
-        my $flag = uc($method);
-        my $type |= (UNSUPPORTED_ENCODE_FLAG->{$flag} || 0);
-           $type |= (UNSUPPORTED_DECODE_FLAG->{$flag} || 0);
-
-        next unless($type);
-
-        $pkg->_make_unsupported_method($method => $type);
-    }
-
-    push @{"JSON::XS::Boolean::ISA"}, qw(JSON::PP::Boolean);
-    push @{"JSON::PP::Boolean::ISA"}, qw(JSON::Boolean);
-
-    $JSON::DEBUG and Carp::carp("set -support_by_pp mode.");
-
-    return 1;
-}
-
-
-
-
-#
-# Helper classes for XS
-#
-
-package JSON::Backend::XS::Supportable;
-
-$Carp::Internal{'JSON::Backend::XS::Supportable'} = 1;
-
-sub _make_unsupported_method {
-    my ($pkg, $method, $type) = @_;
-
-    local $^W;
-    no strict qw(refs);
-
-    *{"$pkg\::$method"} = sub {
-        local $^W;
-        if (defined $_[1] ? $_[1] : 1) {
-            ${$_[0]} |= $type;
-        }
-        else {
-            ${$_[0]} &= ~$type;
-        }
-        $_[0];
-    };
-
-    *{"$pkg\::get_$method"} = sub {
-        ${$_[0]} & $type ? 1 : '';
-    };
-
-}
-
-
-sub _set_for_pp {
-    JSON::_load_pp( $_INSTALL_ONLY );
-
-    my $type  = shift;
-    my $pp    = new JSON::PP;
-    my $prop = $_[0]->property;
-
-    for my $name (keys %$prop) {
-        $pp->$name( $prop->{$name} ? $prop->{$name} : 0 );
-    }
-
-    my $unsupported = $type eq 'encode' ? JSON::Backend::XS::UNSUPPORTED_ENCODE_FLAG
-                                        : JSON::Backend::XS::UNSUPPORTED_DECODE_FLAG;
-    my $flags       = ${$_[0]} || 0;
-
-    for my $name (keys %$unsupported) {
-        next if ($name eq 'EXPANDED'); # for developer's
-        my $enable = ($flags & $unsupported->{$name}) ? 1 : 0;
-        my $method = lc $name;
-        $pp->$method($enable);
-    }
-
-    $pp->indent_length( $_[0]->get_indent_length );
-
-    return $pp;
-}
-
-sub _encode { # using with PP encod
-    if (${$_[0]}) {
-        _set_for_pp('encode' => @_)->encode($_[1]);
-    }
-    else {
-        $_[0]->_original_encode( $_[1] );
-    }
-}
-
-
-sub _decode { # if unsupported-flag is set, use PP
-    if (${$_[0]}) {
-        _set_for_pp('decode' => @_)->decode($_[1]);
-    }
-    else {
-        $_[0]->_original_decode( $_[1] );
-    }
-}
-
-
-sub decode_prefix { # if unsupported-flag is set, use PP
-    _set_for_pp('decode' => @_)->decode_prefix($_[1]);
-}
-
-
-sub _incr_parse {
-    if (${$_[0]}) {
-        _set_for_pp('decode' => @_)->incr_parse($_[1]);
-    }
-    else {
-        $_[0]->_original_incr_parse( $_[1] );
-    }
-}
-
-
-sub get_indent_length {
-    ${$_[0]} << 4 >> 16;
-}
-
-
-sub indent_length {
-    my $length = $_[1];
-
-    if (!defined $length or $length > 15 or $length < 0) {
-        Carp::carp "The acceptable range of indent_length() is 0 to 15.";
-    }
-    else {
-        local $^W;
-        $length <<= 12;
-        ${$_[0]} &= ~ JSON::Backend::XS::INDENT_LENGTH_FLAG;
-        ${$_[0]} |= $length;
-        *JSON::XS::encode = \&JSON::Backend::XS::Supportable::_encode;
-    }
-
-    $_[0];
-}
-
-
-1;
-__END__
-
-=head1 NAME
-
-JSON - JSON (JavaScript Object Notation) encoder/decoder
-
-=head1 SYNOPSIS
-
- use JSON; # imports encode_json, decode_json, to_json and from_json.
-
- # simple and fast interfaces (expect/generate UTF-8)
-
- $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
- $perl_hash_or_arrayref  = decode_json $utf8_encoded_json_text;
-
- # OO-interface
-
- $json = JSON->new->allow_nonref;
-
- $json_text   = $json->encode( $perl_scalar );
- $perl_scalar = $json->decode( $json_text );
-
- $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing
-
- # If you want to use PP only support features, call with '-support_by_pp'
- # When XS unsupported feature is enable, using PP (de|en)code instead of XS ones.
-
- use JSON -support_by_pp;
-
- # option-acceptable interfaces (expect/generate UNICODE by default)
-
- $json_text   = to_json( $perl_scalar, { ascii => 1, pretty => 1 } );
- $perl_scalar = from_json( $json_text, { utf8  => 1 } );
-
- # Between (en|de)code_json and (to|from)_json, if you want to write
- # a code which communicates to an outer world (encoded in UTF-8),
- # recommend to use (en|de)code_json.
-
-=head1 VERSION
-
-    2.53
-
-This version is compatible with JSON::XS B<2.27> and later.
-
-
-=head1 NOTE
-
-JSON::PP was inculded in C<JSON> distribution.
-It comes to be a perl core module in Perl 5.14.
-And L<JSON::PP> will be split away it.
-
-C<JSON> distribution will inculde yet another JSON::PP modules.
-They are JSNO::backportPP and so on. JSON.pm should work as it did at all.
-
-=head1 DESCRIPTION
-
- ************************** CAUTION ********************************
- * This is 'JSON module version 2' and there are many differences  *
- * to version 1.xx                                                 *
- * Please check your applications useing old version.              *
- *   See to 'INCOMPATIBLE CHANGES TO OLD VERSION'                  *
- *******************************************************************
-
-JSON (JavaScript Object Notation) is a simple data format.
-See to L<http://www.json.org/> and C<RFC4627>(L<http://www.ietf.org/rfc/rfc4627.txt>).
-
-This module converts Perl data structures to JSON and vice versa using either
-L<JSON::XS> or L<JSON::PP>.
-
-JSON::XS is the fastest and most proper JSON module on CPAN which must be
-compiled and installed in your environment.
-JSON::PP is a pure-Perl module which is bundled in this distribution and
-has a strong compatibility to JSON::XS.
-
-This module try to use JSON::XS by default and fail to it, use JSON::PP instead.
-So its features completely depend on JSON::XS or JSON::PP.
-
-See to L<BACKEND MODULE DECISION>.
-
-To distinguish the module name 'JSON' and the format type JSON,
-the former is quoted by CE<lt>E<gt> (its results vary with your using media),
-and the latter is left just as it is.
-
-Module name : C<JSON>
-
-Format type : JSON
-
-=head2 FEATURES
-
-=over
-
-=item * correct unicode handling
-
-This module (i.e. backend modules) knows how to handle Unicode, documents
-how and when it does so, and even documents what "correct" means.
-
-Even though there are limitations, this feature is available since Perl version 5.6.
-
-JSON::XS requires Perl 5.8.2 (but works correctly in 5.8.8 or later), so in older versions
-C<JSON> sholud call JSON::PP as the backend which can be used since Perl 5.005.
-
-With Perl 5.8.x JSON::PP works, but from 5.8.0 to 5.8.2, because of a Perl side problem,
-JSON::PP works slower in the versions. And in 5.005, the Unicode handling is not available.
-See to L<JSON::PP/UNICODE HANDLING ON PERLS> for more information.
-
-See also to L<JSON::XS/A FEW NOTES ON UNICODE AND PERL>
-and L<JSON::XS/ENCODING/CODESET_FLAG_NOTES>.
-
-
-=item * round-trip integrity
-
-When you serialise a perl data structure using only data types supported
-by JSON and Perl, the deserialised data structure is identical on the Perl
-level. (e.g. the string "2.0" doesn't suddenly become "2" just because
-it looks like a number). There I<are> minor exceptions to this, read the
-L</MAPPING> section below to learn about those.
-
-
-=item * strict checking of JSON correctness
-
-There is no guessing, no generating of illegal JSON texts by default,
-and only JSON is accepted as input by default (the latter is a security
-feature).
-
-See to L<JSON::XS/FEATURES> and L<JSON::PP/FEATURES>.
-
-=item * fast
-
-This module returns a JSON::XS object itself if available.
-Compared to other JSON modules and other serialisers such as Storable,
-JSON::XS usually compares favourably in terms of speed, too.
-
-If not available, C<JSON> returns a JSON::PP object instead of JSON::XS and
-it is very slow as pure-Perl.
-
-=item * simple to use
-
-This module has both a simple functional interface as well as an
-object oriented interface interface.
-
-=item * reasonably versatile output formats
-
-You can choose between the most compact guaranteed-single-line format possible
-(nice for simple line-based protocols), a pure-ASCII format (for when your transport
-is not 8-bit clean, still supports the whole Unicode range), or a pretty-printed
-format (for when you want to read that stuff). Or you can combine those features
-in whatever way you like.
-
-=back
-
-=head1 FUNCTIONAL INTERFACE
-
-Some documents are copied and modified from L<JSON::XS/FUNCTIONAL INTERFACE>.
-C<to_json> and C<from_json> are additional functions.
-
-=head2 encode_json
-
-    $json_text = encode_json $perl_scalar
-
-Converts the given Perl data structure to a UTF-8 encoded, binary string.
-
-This function call is functionally identical to:
-
-    $json_text = JSON->new->utf8->encode($perl_scalar)
-
-=head2 decode_json
-
-    $perl_scalar = decode_json $json_text
-
-The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
-to parse that as an UTF-8 encoded JSON text, returning the resulting
-reference.
-
-This function call is functionally identical to:
-
-    $perl_scalar = JSON->new->utf8->decode($json_text)
-
-
-=head2 to_json
-
-   $json_text = to_json($perl_scalar)
-
-Converts the given Perl data structure to a json string.
-
-This function call is functionally identical to:
-
-   $json_text = JSON->new->encode($perl_scalar)
-
-Takes a hash reference as the second.
-
-   $json_text = to_json($perl_scalar, $flag_hashref)
-
-So,
-
-   $json_text = to_json($perl_scalar, {utf8 => 1, pretty => 1})
-
-equivalent to:
-
-   $json_text = JSON->new->utf8(1)->pretty(1)->encode($perl_scalar)
-
-If you want to write a modern perl code which communicates to outer world,
-you should use C<encode_json> (supposed that JSON data are encoded in UTF-8).
-
-=head2 from_json
-
-   $perl_scalar = from_json($json_text)
-
-The opposite of C<to_json>: expects a json string and tries
-to parse it, returning the resulting reference.
-
-This function call is functionally identical to:
-
-    $perl_scalar = JSON->decode($json_text)
-
-Takes a hash reference as the second.
-
-    $perl_scalar = from_json($json_text, $flag_hashref)
-
-So,
-
-    $perl_scalar = from_json($json_text, {utf8 => 1})
-
-equivalent to:
-
-    $perl_scalar = JSON->new->utf8(1)->decode($json_text)
-
-If you want to write a modern perl code which communicates to outer world,
-you should use C<decode_json> (supposed that JSON data are encoded in UTF-8).
-
-=head2 JSON::is_bool
-
-    $is_boolean = JSON::is_bool($scalar)
-
-Returns true if the passed scalar represents either JSON::true or
-JSON::false, two constants that act like C<1> and C<0> respectively
-and are also used to represent JSON C<true> and C<false> in Perl strings.
-
-=head2 JSON::true
-
-Returns JSON true value which is blessed object.
-It C<isa> JSON::Boolean object.
-
-=head2 JSON::false
-
-Returns JSON false value which is blessed object.
-It C<isa> JSON::Boolean object.
-
-=head2 JSON::null
-
-Returns C<undef>.
-
-See L<MAPPING>, below, for more information on how JSON values are mapped to
-Perl.
-
-=head1 HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER
-
-This section supposes that your perl vresion is 5.8 or later.
-
-If you know a JSON text from an outer world - a network, a file content, and so on,
-is encoded in UTF-8, you should use C<decode_json> or C<JSON> module object
-with C<utf8> enable. And the decoded result will contain UNICODE characters.
-
-  # from network
-  my $json        = JSON->new->utf8;
-  my $json_text   = CGI->new->param( 'json_data' );
-  my $perl_scalar = $json->decode( $json_text );
-
-  # from file content
-  local $/;
-  open( my $fh, '<', 'json.data' );
-  $json_text   = <$fh>;
-  $perl_scalar = decode_json( $json_text );
-
-If an outer data is not encoded in UTF-8, firstly you should C<decode> it.
-
-  use Encode;
-  local $/;
-  open( my $fh, '<', 'json.data' );
-  my $encoding = 'cp932';
-  my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE
-
-  # or you can write the below code.
-  #
-  # open( my $fh, "<:encoding($encoding)", 'json.data' );
-  # $unicode_json_text = <$fh>;
-
-In this case, C<$unicode_json_text> is of course UNICODE string.
-So you B<cannot> use C<decode_json> nor C<JSON> module object with C<utf8> enable.
-Instead of them, you use C<JSON> module object with C<utf8> disable or C<from_json>.
-
-  $perl_scalar = $json->utf8(0)->decode( $unicode_json_text );
-  # or
-  $perl_scalar = from_json( $unicode_json_text );
-
-Or C<encode 'utf8'> and C<decode_json>:
-
-  $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) );
-  # this way is not efficient.
-
-And now, you want to convert your C<$perl_scalar> into JSON data and
-send it to an outer world - a network or a file content, and so on.
-
-Your data usually contains UNICODE strings and you want the converted data to be encoded
-in UTF-8, you should use C<encode_json> or C<JSON> module object with C<utf8> enable.
-
-  print encode_json( $perl_scalar ); # to a network? file? or display?
-  # or
-  print $json->utf8->encode( $perl_scalar );
-
-If C<$perl_scalar> does not contain UNICODE but C<$encoding>-encoded strings
-for some reason, then its characters are regarded as B<latin1> for perl
-(because it does not concern with your $encoding).
-You B<cannot> use C<encode_json> nor C<JSON> module object with C<utf8> enable.
-Instead of them, you use C<JSON> module object with C<utf8> disable or C<to_json>.
-Note that the resulted text is a UNICODE string but no problem to print it.
-
-  # $perl_scalar contains $encoding encoded string values
-  $unicode_json_text = $json->utf8(0)->encode( $perl_scalar );
-  # or
-  $unicode_json_text = to_json( $perl_scalar );
-  # $unicode_json_text consists of characters less than 0x100
-  print $unicode_json_text;
-
-Or C<decode $encoding> all string values and C<encode_json>:
-
-  $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } );
-  # ... do it to each string values, then encode_json
-  $json_text = encode_json( $perl_scalar );
-
-This method is a proper way but probably not efficient.
-
-See to L<Encode>, L<perluniintro>.
-
-
-=head1 COMMON OBJECT-ORIENTED INTERFACE
-
-=head2 new
-
-    $json = new JSON
-
-Returns a new C<JSON> object inherited from either JSON::XS or JSON::PP
-that can be used to de/encode JSON strings.
-
-All boolean flags described below are by default I<disabled>.
-
-The mutators for flags all return the JSON object again and thus calls can
-be chained:
-
-   my $json = JSON->new->utf8->space_after->encode({a => [1,2]})
-   => {"a": [1, 2]}
-
-=head2 ascii
-
-    $json = $json->ascii([$enable])
-
-    $enabled = $json->get_ascii
-
-If $enable is true (or missing), then the encode method will not generate characters outside
-the code range 0..127. Any Unicode characters outside that range will be escaped using either
-a single \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627.
-
-If $enable is false, then the encode method will not escape Unicode characters unless
-required by the JSON syntax or other flags. This results in a faster and more compact format.
-
-This feature depends on the used Perl version and environment.
-
-See to L<JSON::PP/UNICODE HANDLING ON PERLS> if the backend is PP.
-
-  JSON->new->ascii(1)->encode([chr 0x10401])
-  => ["\ud801\udc01"]
-
-=head2 latin1
-
-    $json = $json->latin1([$enable])
-
-    $enabled = $json->get_latin1
-
-If $enable is true (or missing), then the encode method will encode the resulting JSON
-text as latin1 (or iso-8859-1), escaping any characters outside the code range 0..255.
-
-If $enable is false, then the encode method will not escape Unicode characters
-unless required by the JSON syntax or other flags.
-
-  JSON->new->latin1->encode (["\x{89}\x{abc}"]
-  => ["\x{89}\\u0abc"]    # (perl syntax, U+abc escaped, U+89 not)
-
-=head2 utf8
-
-    $json = $json->utf8([$enable])
-
-    $enabled = $json->get_utf8
-
-If $enable is true (or missing), then the encode method will encode the JSON result
-into UTF-8, as required by many protocols, while the decode method expects to be handled
-an UTF-8-encoded string. Please note that UTF-8-encoded strings do not contain any
-characters outside the range 0..255, they are thus useful for bytewise/binary I/O.
-
-In future versions, enabling this option might enable autodetection of the UTF-16 and UTF-32
-encoding families, as described in RFC4627.
-
-If $enable is false, then the encode method will return the JSON string as a (non-encoded)
-Unicode string, while decode expects thus a Unicode string. Any decoding or encoding
-(e.g. to UTF-8 or UTF-16) needs to be done yourself, e.g. using the Encode module.
-
-
-Example, output UTF-16BE-encoded JSON:
-
-  use Encode;
-  $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
-
-Example, decode UTF-32LE-encoded JSON:
-
-  use Encode;
-  $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
-
-See to L<JSON::PP/UNICODE HANDLING ON PERLS> if the backend is PP.
-
-
-=head2 pretty
-
-    $json = $json->pretty([$enable])
-
-This enables (or disables) all of the C<indent>, C<space_before> and
-C<space_after> (and in the future possibly more) flags in one call to
-generate the most readable (or most compact) form possible.
-
-Equivalent to:
-
-   $json->indent->space_before->space_after
-
-The indent space length is three and JSON::XS cannot change the indent
-space length.
-
-=head2 indent
-
-    $json = $json->indent([$enable])
-
-    $enabled = $json->get_indent
-
-If C<$enable> is true (or missing), then the C<encode> method will use a multiline
-format as output, putting every array member or object/hash key-value pair
-into its own line, identing them properly.
-
-If C<$enable> is false, no newlines or indenting will be produced, and the
-resulting JSON text is guarenteed not to contain any C<newlines>.
-
-This setting has no effect when decoding JSON texts.
-
-The indent space length is three.
-With JSON::PP, you can also access C<indent_length> to change indent space length.
-
-
-=head2 space_before
-
-    $json = $json->space_before([$enable])
-
-    $enabled = $json->get_space_before
-
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space before the C<:> separating keys from values in JSON objects.
-
-If C<$enable> is false, then the C<encode> method will not add any extra
-space at those places.
-
-This setting has no effect when decoding JSON texts.
-
-Example, space_before enabled, space_after and indent disabled:
-
-   {"key" :"value"}
-
-
-=head2 space_after
-
-    $json = $json->space_after([$enable])
-
-    $enabled = $json->get_space_after
-
-If C<$enable> is true (or missing), then the C<encode> method will add an extra
-optional space after the C<:> separating keys from values in JSON objects
-and extra whitespace after the C<,> separating key-value pairs and array
-members.
-
-If C<$enable> is false, then the C<encode> method will not add any extra
-space at those places.
-
-This setting has no effect when decoding JSON texts.
-
-Example, space_before and indent disabled, space_after enabled:
-
-   {"key": "value"}
-
-
-=head2 relaxed
-
-    $json = $json->relaxed([$enable])
-
-    $enabled = $json->get_relaxed
-
-If C<$enable> is true (or missing), then C<decode> will accept some
-extensions to normal JSON syntax (see below). C<encode> will not be
-affected in anyway. I<Be aware that this option makes you accept invalid
-JSON texts as if they were valid!>. I suggest only to use this option to
-parse application-specific files written by humans (configuration files,
-resource files etc.)
-
-If C<$enable> is false (the default), then C<decode> will only accept
-valid JSON texts.
-
-Currently accepted extensions are:
-
-=over 4
-
-=item * list items can have an end-comma
-
-JSON I<separates> array elements and key-value pairs with commas. This
-can be annoying if you write JSON texts manually and want to be able to
-quickly append elements, so this extension accepts comma at the end of
-such items not just between them:
-
-   [
-      1,
-      2, <- this comma not normally allowed
-   ]
-   {
-      "k1": "v1",
-      "k2": "v2", <- this comma not normally allowed
-   }
-
-=item * shell-style '#'-comments
-
-Whenever JSON allows whitespace, shell-style comments are additionally
-allowed. They are terminated by the first carriage-return or line-feed
-character, after which more white-space and comments are allowed.
-
-  [
-     1, # this comment not allowed in JSON
-        # neither this one...
-  ]
-
-=back
-
-
-=head2 canonical
-
-    $json = $json->canonical([$enable])
-
-    $enabled = $json->get_canonical
-
-If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
-by sorting their keys. This is adding a comparatively high overhead.
-
-If C<$enable> is false, then the C<encode> method will output key-value
-pairs in the order Perl stores them (which will likely change between runs
-of the same script).
-
-This option is useful if you want the same data structure to be encoded as
-the same JSON text (given the same overall settings). If it is disabled,
-the same hash might be encoded differently even if contains the same data,
-as key-value pairs have no inherent ordering in Perl.
-
-This setting has no effect when decoding JSON texts.
-
-=head2 allow_nonref
-
-    $json = $json->allow_nonref([$enable])
-
-    $enabled = $json->get_allow_nonref
-
-If C<$enable> is true (or missing), then the C<encode> method can convert a
-non-reference into its corresponding string, number or null JSON value,
-which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
-values instead of croaking.
-
-If C<$enable> is false, then the C<encode> method will croak if it isn't
-passed an arrayref or hashref, as JSON texts must either be an object
-or array. Likewise, C<decode> will croak if given something that is not a
-JSON object or array.
-
-   JSON->new->allow_nonref->encode ("Hello, World!")
-   => "Hello, World!"
-
-=head2 allow_unknown
-
-    $json = $json->allow_unknown ([$enable])
-
-    $enabled = $json->get_allow_unknown
-
-If $enable is true (or missing), then "encode" will *not* throw an
-exception when it encounters values it cannot represent in JSON (for
-example, filehandles) but instead will encode a JSON "null" value.
-Note that blessed objects are not included here and are handled
-separately by c<allow_nonref>.
-
-If $enable is false (the default), then "encode" will throw an
-exception when it encounters anything it cannot encode as JSON.
-
-This option does not affect "decode" in any way, and it is
-recommended to leave it off unless you know your communications
-partner.
-
-=head2 allow_blessed
-
-    $json = $json->allow_blessed([$enable])
-
-    $enabled = $json->get_allow_blessed
-
-If C<$enable> is true (or missing), then the C<encode> method will not
-barf when it encounters a blessed reference. Instead, the value of the
-B<convert_blessed> option will decide whether C<null> (C<convert_blessed>
-disabled or no C<TO_JSON> method found) or a representation of the
-object (C<convert_blessed> enabled and C<TO_JSON> method found) is being
-encoded. Has no effect on C<decode>.
-
-If C<$enable> is false (the default), then C<encode> will throw an
-exception when it encounters a blessed object.
-
-
-=head2 convert_blessed
-
-    $json = $json->convert_blessed([$enable])
-
-    $enabled = $json->get_convert_blessed
-
-If C<$enable> is true (or missing), then C<encode>, upon encountering a
-blessed object, will check for the availability of the C<TO_JSON> method
-on the object's class. If found, it will be called in scalar context
-and the resulting scalar will be encoded instead of the object. If no
-C<TO_JSON> method is found, the value of C<allow_blessed> will decide what
-to do.
-
-The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
-returns other blessed objects, those will be handled in the same
-way. C<TO_JSON> must take care of not causing an endless recursion cycle
-(== crash) in this case. The name of C<TO_JSON> was chosen because other
-methods called by the Perl core (== not by the user of the object) are
-usually in upper case letters and to avoid collisions with the C<to_json>
-function or method.
-
-This setting does not yet influence C<decode> in any way.
-
-If C<$enable> is false, then the C<allow_blessed> setting will decide what
-to do when a blessed object is found.
-
-=over
-
-=item convert_blessed_universally mode
-
-If use C<JSON> with C<-convert_blessed_universally>, the C<UNIVERSAL::TO_JSON>
-subroutine is defined as the below code:
-
-   *UNIVERSAL::TO_JSON = sub {
-       my $b_obj = B::svref_2object( $_[0] );
-       return    $b_obj->isa('B::HV') ? { %{ $_[0] } }
-               : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
-               : undef
-               ;
-   }
-
-This will cause that C<encode> method converts simple blessed objects into
-JSON objects as non-blessed object.
-
-   JSON -convert_blessed_universally;
-   $json->allow_blessed->convert_blessed->encode( $blessed_object )
-
-This feature is experimental and may be removed in the future.
-
-=back
-
-=head2 filter_json_object
-
-    $json = $json->filter_json_object([$coderef])
-
-When C<$coderef> is specified, it will be called from C<decode> each
-time it decodes a JSON object. The only argument passed to the coderef
-is a reference to the newly-created hash. If the code references returns
-a single scalar (which need not be a reference), this value
-(i.e. a copy of that scalar to avoid aliasing) is inserted into the
-deserialised data structure. If it returns an empty list
-(NOTE: I<not> C<undef>, which is a valid scalar), the original deserialised
-hash will be inserted. This setting can slow down decoding considerably.
-
-When C<$coderef> is omitted or undefined, any existing callback will
-be removed and C<decode> will not change the deserialised hash in any
-way.
-
-Example, convert all JSON objects into the integer 5:
-
-   my $js = JSON->new->filter_json_object (sub { 5 });
-   # returns [5]
-   $js->decode ('[{}]'); # the given subroutine takes a hash reference.
-   # throw an exception because allow_nonref is not enabled
-   # so a lone 5 is not allowed.
-   $js->decode ('{"a":1, "b":2}');
-
-
-=head2 filter_json_single_key_object
-
-    $json = $json->filter_json_single_key_object($key [=> $coderef])
-
-Works remotely similar to C<filter_json_object>, but is only called for
-JSON objects having a single key named C<$key>.
-
-This C<$coderef> is called before the one specified via
-C<filter_json_object>, if any. It gets passed the single value in the JSON
-object. If it returns a single value, it will be inserted into the data
-structure. If it returns nothing (not even C<undef> but the empty list),
-the callback from C<filter_json_object> will be called next, as if no
-single-key callback were specified.
-
-If C<$coderef> is omitted or undefined, the corresponding callback will be
-disabled. There can only ever be one callback for a given key.
-
-As this callback gets called less often then the C<filter_json_object>
-one, decoding speed will not usually suffer as much. Therefore, single-key
-objects make excellent targets to serialise Perl objects into, especially
-as single-key JSON objects are as close to the type-tagged value concept
-as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
-support this in any way, so you need to make sure your data never looks
-like a serialised Perl hash.
-
-Typical names for the single object key are C<__class_whatever__>, or
-C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
-things like C<__class_md5sum(classname)__>, to reduce the risk of clashing
-with real hashes.
-
-Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
-into the corresponding C<< $WIDGET{<id>} >> object:
-
-   # return whatever is in $WIDGET{5}:
-   JSON
-      ->new
-      ->filter_json_single_key_object (__widget__ => sub {
-            $WIDGET{ $_[0] }
-         })
-      ->decode ('{"__widget__": 5')
-
-   # this can be used with a TO_JSON method in some "widget" class
-   # for serialisation to json:
-   sub WidgetBase::TO_JSON {
-      my ($self) = @_;
-
-      unless ($self->{id}) {
-         $self->{id} = ..get..some..id..;
-         $WIDGET{$self->{id}} = $self;
-      }
-
-      { __widget__ => $self->{id} }
-   }
-
-
-=head2 shrink
-
-    $json = $json->shrink([$enable])
-
-    $enabled = $json->get_shrink
-
-With JSON::XS, this flag resizes strings generated by either
-C<encode> or C<decode> to their minimum size possible. This can save
-memory when your JSON texts are either very very long or you have many
-short strings. It will also try to downgrade any strings to octet-form
-if possible: perl stores strings internally either in an encoding called
-UTF-X or in octet-form. The latter cannot store everything but uses less
-space in general (and some buggy Perl or C code might even rely on that
-internal representation being used).
-
-With JSON::PP, it is noop about resizing strings but tries
-C<utf8::downgrade> to the returned string by C<encode>. See to L<utf8>.
-
-See to L<JSON::XS/OBJECT-ORIENTED INTERFACE> and L<JSON::PP/METHODS>.
-
-=head2 max_depth
-
-    $json = $json->max_depth([$maximum_nesting_depth])
-
-    $max_depth = $json->get_max_depth
-
-Sets the maximum nesting level (default C<512>) accepted while encoding
-or decoding. If a higher nesting level is detected in JSON text or a Perl
-data structure, then the encoder and decoder will stop and croak at that
-point.
-
-Nesting level is defined by number of hash- or arrayrefs that the encoder
-needs to traverse to reach a given point or the number of C<{> or C<[>
-characters without their matching closing parenthesis crossed to reach a
-given character in a string.
-
-If no argument is given, the highest possible setting will be used, which
-is rarely useful.
-
-Note that nesting is implemented by recursion in C. The default value has
-been chosen to be as large as typical operating systems allow without
-crashing. (JSON::XS)
-
-With JSON::PP as the backend, when a large value (100 or more) was set and
-it de/encodes a deep nested object/text, it may raise a warning
-'Deep recursion on subroutin' at the perl runtime phase.
-
-See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful.
-
-=head2 max_size
-
-    $json = $json->max_size([$maximum_string_size])
-
-    $max_size = $json->get_max_size
-
-Set the maximum length a JSON text may have (in bytes) where decoding is
-being attempted. The default is C<0>, meaning no limit. When C<decode>
-is called on a string that is longer then this many bytes, it will not
-attempt to decode the string but throw an exception. This setting has no
-effect on C<encode> (yet).
-
-If no argument is given, the limit check will be deactivated (same as when
-C<0> is specified).
-
-See L<JSON::XS/SECURITY CONSIDERATIONS>, below, for more info on why this is useful.
-
-=head2 encode
-
-    $json_text = $json->encode($perl_scalar)
-
-Converts the given Perl data structure (a simple scalar or a reference
-to a hash or array) to its JSON representation. Simple scalars will be
-converted into JSON string or number sequences, while references to arrays
-become JSON arrays and references to hashes become JSON objects. Undefined
-Perl values (e.g. C<undef>) become JSON C<null> values.
-References to the integers C<0> and C<1> are converted into C<true> and C<false>.
-
-=head2 decode
-
-    $perl_scalar = $json->decode($json_text)
-
-The opposite of C<encode>: expects a JSON text and tries to parse it,
-returning the resulting simple scalar or reference. Croaks on error.
-
-JSON numbers and strings become simple Perl scalars. JSON arrays become
-Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
-C<1> (C<JSON::true>), C<false> becomes C<0> (C<JSON::false>) and
-C<null> becomes C<undef>.
-
-=head2 decode_prefix
-
-    ($perl_scalar, $characters) = $json->decode_prefix($json_text)
-
-This works like the C<decode> method, but instead of raising an exception
-when there is trailing garbage after the first JSON object, it will
-silently stop parsing there and return the number of characters consumed
-so far.
-
-   JSON->new->decode_prefix ("[1] the tail")
-   => ([], 3)
-
-See to L<JSON::XS/OBJECT-ORIENTED INTERFACE>
-
-=head2 property
-
-    $boolean = $json->property($property_name)
-
-Returns a boolean value about above some properties.
-
-The available properties are C<ascii>, C<latin1>, C<utf8>,
-C<indent>,C<space_before>, C<space_after>, C<relaxed>, C<canonical>,
-C<allow_nonref>, C<allow_unknown>, C<allow_blessed>, C<convert_blessed>,
-C<shrink>, C<max_depth> and C<max_size>.
-
-   $boolean = $json->property('utf8');
-    => 0
-   $json->utf8;
-   $boolean = $json->property('utf8');
-    => 1
-
-Sets the property with a given boolean value.
-
-    $json = $json->property($property_name => $boolean);
-
-With no argumnt, it returns all the above properties as a hash reference.
-
-    $flag_hashref = $json->property();
-
-=head1 INCREMENTAL PARSING
-
-Most of this section are copied and modified from L<JSON::XS/INCREMENTAL PARSING>.
-
-In some cases, there is the need for incremental parsing of JSON texts.
-This module does allow you to parse a JSON stream incrementally.
-It does so by accumulating text until it has a full JSON object, which
-it then can decode. This process is similar to using C<decode_prefix>
-to see if a full JSON object is available, but is much more efficient
-(and can be implemented with a minimum of method calls).
-
-The backend module will only attempt to parse the JSON text once it is sure it
-has enough text to get a decisive result, using a very simple but
-truly incremental parser. This means that it sometimes won't stop as
-early as the full parser, for example, it doesn't detect parenthese
-mismatches. The only thing it guarantees is that it starts decoding as
-soon as a syntactically valid JSON text has been seen. This means you need
-to set resource limits (e.g. C<max_size>) to ensure the parser will stop
-parsing in the presence if syntax errors.
-
-The following methods implement this incremental parser.
-
-=head2 incr_parse
-
-    $json->incr_parse( [$string] ) # void context
-
-    $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
-
-    @obj_or_empty = $json->incr_parse( [$string] ) # list context
-
-This is the central parsing function. It can both append new text and
-extract objects from the stream accumulated so far (both of these
-functions are optional).
-
-If C<$string> is given, then this string is appended to the already
-existing JSON fragment stored in the C<$json> object.
-
-After that, if the function is called in void context, it will simply
-return without doing anything further. This can be used to add more text
-in as many chunks as you want.
-
-If the method is called in scalar context, then it will try to extract
-exactly I<one> JSON object. If that is successful, it will return this
-object, otherwise it will return C<undef>. If there is a parse error,
-this method will croak just as C<decode> would do (one can then use
-C<incr_skip> to skip the errornous part). This is the most common way of
-using the method.
-
-And finally, in list context, it will try to extract as many objects
-from the stream as it can find and return them, or the empty list
-otherwise. For this to work, there must be no separators between the JSON
-objects or arrays, instead they must be concatenated back-to-back. If
-an error occurs, an exception will be raised as in the scalar context
-case. Note that in this case, any previously-parsed JSON texts will be
-lost.
-
-Example: Parse some JSON arrays/objects in a given string and return them.
-
-    my @objs = JSON->new->incr_parse ("[5][7][1,2]");
-
-=head2 incr_text
-
-    $lvalue_string = $json->incr_text
-
-This method returns the currently stored JSON fragment as an lvalue, that
-is, you can manipulate it. This I<only> works when a preceding call to
-C<incr_parse> in I<scalar context> successfully returned an object. Under
-all other circumstances you must not call this function (I mean it.
-although in simple tests it might actually work, it I<will> fail under
-real world conditions). As a special exception, you can also call this
-method before having parsed anything.
-
-This function is useful in two cases: a) finding the trailing text after a
-JSON object or b) parsing multiple JSON objects separated by non-JSON text
-(such as commas).
-
-    $json->incr_text =~ s/\s*,\s*//;
-
-In Perl 5.005, C<lvalue> attribute is not available.
-You must write codes like the below:
-
-    $string = $json->incr_text;
-    $string =~ s/\s*,\s*//;
-    $json->incr_text( $string );
-
-=head2 incr_skip
-
-    $json->incr_skip
-
-This will reset the state of the incremental parser and will remove the
-parsed text from the input buffer. This is useful after C<incr_parse>
-died, in which case the input buffer and incremental parser state is left
-unchanged, to skip the text parsed so far and to reset the parse state.
-
-=head2 incr_reset
-
-    $json->incr_reset
-
-This completely resets the incremental parser, that is, after this call,
-it will be as if the parser had never parsed anything.
-
-This is useful if you want ot repeatedly parse JSON objects and want to
-ignore any trailing data, which means you have to reset the parser after
-each successful decode.
-
-See to L<JSON::XS/INCREMENTAL PARSING> for examples.
-
-
-=head1 JSON::PP SUPPORT METHODS
-
-The below methods are JSON::PP own methods, so when C<JSON> works
-with JSON::PP (i.e. the created object is a JSON::PP object), available.
-See to L<JSON::PP/JSON::PP OWN METHODS> in detail.
-
-If you use C<JSON> with additonal C<-support_by_pp>, some methods
-are available even with JSON::XS. See to L<USE PP FEATURES EVEN THOUGH XS BACKEND>.
-
-   BEING { $ENV{PERL_JSON_BACKEND} = 'JSON::XS' }
-
-   use JSON -support_by_pp;
-
-   my $json = new JSON;
-   $json->allow_nonref->escape_slash->encode("/");
-
-   # functional interfaces too.
-   print to_json(["/"], {escape_slash => 1});
-   print from_json('["foo"]', {utf8 => 1});
-
-If you do not want to all functions but C<-support_by_pp>,
-use C<-no_export>.
-
-   use JSON -support_by_pp, -no_export;
-   # functional interfaces are not exported.
-
-=head2 allow_singlequote
-
-    $json = $json->allow_singlequote([$enable])
-
-If C<$enable> is true (or missing), then C<decode> will accept
-any JSON strings quoted by single quotations that are invalid JSON
-format.
-
-    $json->allow_singlequote->decode({"foo":'bar'});
-    $json->allow_singlequote->decode({'foo':"bar"});
-    $json->allow_singlequote->decode({'foo':'bar'});
-
-As same as the C<relaxed> option, this option may be used to parse
-application-specific files written by humans.
-
-=head2 allow_barekey
-
-    $json = $json->allow_barekey([$enable])
-
-If C<$enable> is true (or missing), then C<decode> will accept
-bare keys of JSON object that are invalid JSON format.
-
-As same as the C<relaxed> option, this option may be used to parse
-application-specific files written by humans.
-
-    $json->allow_barekey->decode('{foo:"bar"}');
-
-=head2 allow_bignum
-
-    $json = $json->allow_bignum([$enable])
-
-If C<$enable> is true (or missing), then C<decode> will convert
-the big integer Perl cannot handle as integer into a L<Math::BigInt>
-object and convert a floating number (any) into a L<Math::BigFloat>.
-
-On the contary, C<encode> converts C<Math::BigInt> objects and C<Math::BigFloat>
-objects into JSON numbers with C<allow_blessed> enable.
-
-   $json->allow_nonref->allow_blessed->allow_bignum;
-   $bigfloat = $json->decode('2.000000000000000000000000001');
-   print $json->encode($bigfloat);
-   # => 2.000000000000000000000000001
-
-See to L<MAPPING> aboout the conversion of JSON number.
-
-=head2 loose
-
-    $json = $json->loose([$enable])
-
-The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON strings
-and the module doesn't allow to C<decode> to these (except for \x2f).
-If C<$enable> is true (or missing), then C<decode>  will accept these
-unescaped strings.
-
-    $json->loose->decode(qq|["abc
-                                   def"]|);
-
-See to L<JSON::PP/JSON::PP OWN METHODS>.
-
-=head2 escape_slash
-
-    $json = $json->escape_slash([$enable])
-
-According to JSON Grammar, I<slash> (U+002F) is escaped. But by default
-JSON backend modules encode strings without escaping slash.
-
-If C<$enable> is true (or missing), then C<encode> will escape slashes.
-
-=head2 indent_length
-
-    $json = $json->indent_length($length)
-
-With JSON::XS, The indent space length is 3 and cannot be changed.
-With JSON::PP, it sets the indent space length with the given $length.
-The default is 3. The acceptable range is 0 to 15.
-
-=head2 sort_by
-
-    $json = $json->sort_by($function_name)
-    $json = $json->sort_by($subroutine_ref)
-
-If $function_name or $subroutine_ref are set, its sort routine are used.
-
-   $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj);
-   # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
-
-   $js = $pc->sort_by('own_sort')->encode($obj);
-   # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
-
-   sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b }
-
-As the sorting routine runs in the JSON::PP scope, the given
-subroutine name and the special variables C<$a>, C<$b> will begin
-with 'JSON::PP::'.
-
-If $integer is set, then the effect is same as C<canonical> on.
-
-See to L<JSON::PP/JSON::PP OWN METHODS>.
-
-=head1 MAPPING
-
-This section is copied from JSON::XS and modified to C<JSON>.
-JSON::XS and JSON::PP mapping mechanisms are almost equivalent.
-
-See to L<JSON::XS/MAPPING>.
-
-=head2 JSON -> PERL
-
-=over 4
-
-=item object
-
-A JSON object becomes a reference to a hash in Perl. No ordering of object
-keys is preserved (JSON does not preserver object key ordering itself).
-
-=item array
-
-A JSON array becomes a reference to an array in Perl.
-
-=item string
-
-A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
-are represented by the same codepoints in the Perl string, so no manual
-decoding is necessary.
-
-=item number
-
-A JSON number becomes either an integer, numeric (floating point) or
-string scalar in perl, depending on its range and any fractional parts. On
-the Perl level, there is no difference between those as Perl handles all
-the conversion details, but an integer may take slightly less memory and
-might represent more values exactly than floating point numbers.
-
-If the number consists of digits only, C<JSON> will try to represent
-it as an integer value. If that fails, it will try to represent it as
-a numeric (floating point) value if that is possible without loss of
-precision. Otherwise it will preserve the number as a string value (in
-which case you lose roundtripping ability, as the JSON number will be
-re-encoded toa JSON string).
-
-Numbers containing a fractional or exponential part will always be
-represented as numeric (floating point) values, possibly at a loss of
-precision (in which case you might lose perfect roundtripping ability, but
-the JSON number will still be re-encoded as a JSON number).
-
-Note that precision is not accuracy - binary floating point values cannot
-represent most decimal fractions exactly, and when converting from and to
-floating point, C<JSON> only guarantees precision up to but not including
-the leats significant bit.
-
-If the backend is JSON::PP and C<allow_bignum> is enable, the big integers
-and the numeric can be optionally converted into L<Math::BigInt> and
-L<Math::BigFloat> objects.
-
-=item true, false
-
-These JSON atoms become C<JSON::true> and C<JSON::false>,
-respectively. They are overloaded to act almost exactly like the numbers
-C<1> and C<0>. You can check wether a scalar is a JSON boolean by using
-the C<JSON::is_bool> function.
-
-If C<JSON::true> and C<JSON::false> are used as strings or compared as strings,
-they represent as C<true> and C<false> respectively.
-
-   print JSON::true . "\n";
-    => true
-   print JSON::true + 1;
-    => 1
-
-   ok(JSON::true eq 'true');
-   ok(JSON::true eq  '1');
-   ok(JSON::true == 1);
-
-C<JSON> will install these missing overloading features to the backend modules.
-
-
-=item null
-
-A JSON null atom becomes C<undef> in Perl.
-
-C<JSON::null> returns C<unddef>.
-
-=back
-
-
-=head2 PERL -> JSON
-
-The mapping from Perl to JSON is slightly more difficult, as Perl is a
-truly typeless language, so we can only guess which JSON type is meant by
-a Perl value.
-
-=over 4
-
-=item hash references
-
-Perl hash references become JSON objects. As there is no inherent ordering
-in hash keys (or JSON objects), they will usually be encoded in a
-pseudo-random order that can change between runs of the same program but
-stays generally the same within a single run of a program. C<JSON>
-optionally sort the hash keys (determined by the I<canonical> flag), so
-the same datastructure will serialise to the same JSON text (given same
-settings and version of JSON::XS), but this incurs a runtime overhead
-and is only rarely useful, e.g. when you want to compare some JSON text
-against another for equality.
-
-In future, the ordered object feature will be added to JSON::PP using C<tie> mechanism.
-
-
-=item array references
-
-Perl array references become JSON arrays.
-
-=item other references
-
-Other unblessed references are generally not allowed and will cause an
-exception to be thrown, except for references to the integers C<0> and
-C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
-also use C<JSON::false> and C<JSON::true> to improve readability.
-
-   to_json [\0,JSON::true]      # yields [false,true]
-
-=item JSON::true, JSON::false, JSON::null
-
-These special values become JSON true and JSON false values,
-respectively. You can also use C<\1> and C<\0> directly if you want.
-
-JSON::null returns C<undef>.
-
-=item blessed objects
-
-Blessed objects are not directly representable in JSON. See the
-C<allow_blessed> and C<convert_blessed> methods on various options on
-how to deal with this: basically, you can choose between throwing an
-exception, encoding the reference as if it weren't blessed, or provide
-your own serialiser method.
-
-With C<convert_blessed_universally> mode,  C<encode> converts blessed
-hash references or blessed array references (contains other blessed references)
-into JSON members and arrays.
-
-   use JSON -convert_blessed_universally;
-   JSON->new->allow_blessed->convert_blessed->encode( $blessed_object );
-
-See to L<convert_blessed>.
-
-=item simple scalars
-
-Simple Perl scalars (any scalar that is not a reference) are the most
-difficult objects to encode: JSON::XS and JSON::PP will encode undefined scalars as
-JSON C<null> values, scalars that have last been used in a string context
-before encoding as JSON strings, and anything else as number value:
-
-   # dump as number
-   encode_json [2]                      # yields [2]
-   encode_json [-3.0e17]                # yields [-3e+17]
-   my $value = 5; encode_json [$value]  # yields [5]
-
-   # used as string, so dump as string
-   print $value;
-   encode_json [$value]                 # yields ["5"]
-
-   # undef becomes null
-   encode_json [undef]                  # yields [null]
-
-You can force the type to be a string by stringifying it:
-
-   my $x = 3.1; # some variable containing a number
-   "$x";        # stringified
-   $x .= "";    # another, more awkward way to stringify
-   print $x;    # perl does it for you, too, quite often
-
-You can force the type to be a number by numifying it:
-
-   my $x = "3"; # some variable containing a string
-   $x += 0;     # numify it, ensuring it will be dumped as a number
-   $x *= 1;     # same thing, the choise is yours.
-
-You can not currently force the type in other, less obscure, ways.
-
-Note that numerical precision has the same meaning as under Perl (so
-binary to decimal conversion follows the same rules as in Perl, which
-can differ to other languages). Also, your perl interpreter might expose
-extensions to the floating point numbers of your platform, such as
-infinities or NaN's - these cannot be represented in JSON, and it is an
-error to pass those in.
-
-=item Big Number
-
-If the backend is JSON::PP and C<allow_bignum> is enable,
-C<encode> converts C<Math::BigInt> objects and C<Math::BigFloat>
-objects into JSON numbers.
-
-
-=back
-
-=head1 JSON and ECMAscript
-
-See to L<JSON::XS/JSON and ECMAscript>.
-
-=head1 JSON and YAML
-
-JSON is not a subset of YAML.
-See to L<JSON::XS/JSON and YAML>.
-
-
-=head1 BACKEND MODULE DECISION
-
-When you use C<JSON>, C<JSON> tries to C<use> JSON::XS. If this call failed, it will
-C<uses> JSON::PP. The required JSON::XS version is I<2.2> or later.
-
-The C<JSON> constructor method returns an object inherited from the backend module,
-and JSON::XS object is a blessed scaler reference while JSON::PP is a blessed hash
-reference.
-
-So, your program should not depend on the backend module, especially
-returned objects should not be modified.
-
- my $json = JSON->new; # XS or PP?
- $json->{stash} = 'this is xs object'; # this code may raise an error!
-
-To check the backend module, there are some methods - C<backend>, C<is_pp> and C<is_xs>.
-
-  JSON->backend; # 'JSON::XS' or 'JSON::PP'
-
-  JSON->backend->is_pp: # 0 or 1
-
-  JSON->backend->is_xs: # 1 or 0
-
-  $json->is_xs; # 1 or 0
-
-  $json->is_pp; # 0 or 1
-
-
-If you set an enviornment variable C<PERL_JSON_BACKEND>, The calling action will be changed.
-
-=over
-
-=item PERL_JSON_BACKEND = 0 or PERL_JSON_BACKEND = 'JSON::PP'
-
-Always use JSON::PP
-
-=item PERL_JSON_BACKEND == 1 or PERL_JSON_BACKEND = 'JSON::XS,JSON::PP'
-
-(The default) Use compiled JSON::XS if it is properly compiled & installed,
-otherwise use JSON::PP.
-
-=item PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS'
-
-Always use compiled JSON::XS, die if it isn't properly compiled & installed.
-
-=item PERL_JSON_BACKEND = 'JSON::backportPP'
-
-Always use JSON::backportPP.
-JSON::backportPP is JSON::PP back port module.
-C<JSON> includs JSON::backportPP instead of JSON::PP.
-
-=back
-
-These ideas come from L<DBI::PurePerl> mechanism.
-
-example:
-
- BEGIN { $ENV{PERL_JSON_BACKEND} = 'JSON::PP' }
- use JSON; # always uses JSON::PP
-
-In future, it may be able to specify another module.
-
-=head1 USE PP FEATURES EVEN THOUGH XS BACKEND
-
-Many methods are available with either JSON::XS or JSON::PP and
-when the backend module is JSON::XS, if any JSON::PP specific (i.e. JSON::XS unspported)
-method is called, it will C<warn> and be noop.
-
-But If you C<use> C<JSON> passing the optional string C<-support_by_pp>,
-it makes a part of those unupported methods available.
-This feature is achieved by using JSON::PP in C<de/encode>.
-
-   BEGIN { $ENV{PERL_JSON_BACKEND} = 2 } # with JSON::XS
-   use JSON -support_by_pp;
-   my $json = new JSON;
-   $json->allow_nonref->escape_slash->encode("/");
-
-At this time, the returned object is a C<JSON::Backend::XS::Supportable>
-object (re-blessed XS object), and  by checking JSON::XS unsupported flags
-in de/encoding, can support some unsupported methods - C<loose>, C<allow_bignum>,
-C<allow_barekey>, C<allow_singlequote>, C<escape_slash> and C<indent_length>.
-
-When any unsupported methods are not enable, C<XS de/encode> will be
-used as is. The switch is achieved by changing the symbolic tables.
-
-C<-support_by_pp> is effective only when the backend module is JSON::XS
-and it makes the de/encoding speed down a bit.
-
-See to L<JSON::PP SUPPORT METHODS>.
-
-=head1 INCOMPATIBLE CHANGES TO OLD VERSION
-
-There are big incompatibility between new version (2.00) and old (1.xx).
-If you use old C<JSON> 1.xx in your code, please check it.
-
-See to L<Transition ways from 1.xx to 2.xx.>
-
-=over
-
-=item jsonToObj and objToJson are obsoleted.
-
-Non Perl-style name C<jsonToObj> and C<objToJson> are obsoleted
-(but not yet deleted from the source).
-If you use these functions in your code, please replace them
-with C<from_json> and C<to_json>.
-
-
-=item Global variables are no longer available.
-
-C<JSON> class variables - C<$JSON::AUTOCONVERT>, C<$JSON::BareKey>, etc...
-- are not available any longer.
-Instead, various features can be used through object methods.
-
-
-=item Package JSON::Converter and JSON::Parser are deleted.
-
-Now C<JSON> bundles with JSON::PP which can handle JSON more properly than them.
-
-=item Package JSON::NotString is deleted.
-
-There was C<JSON::NotString> class which represents JSON value C<true>, C<false>, C<null>
-and numbers. It was deleted and replaced by C<JSON::Boolean>.
-
-C<JSON::Boolean> represents C<true> and C<false>.
-
-C<JSON::Boolean> does not represent C<null>.
-
-C<JSON::null> returns C<undef>.
-
-C<JSON> makes L<JSON::XS::Boolean> and L<JSON::PP::Boolean> is-a relation
-to L<JSON::Boolean>.
-
-=item function JSON::Number is obsoleted.
-
-C<JSON::Number> is now needless because JSON::XS and JSON::PP have
-round-trip integrity.
-
-=item JSONRPC modules are deleted.
-
-Perl implementation of JSON-RPC protocol - C<JSONRPC >, C<JSONRPC::Transport::HTTP>
-and C<Apache::JSONRPC > are deleted in this distribution.
-Instead of them, there is L<JSON::RPC> which supports JSON-RPC protocol version 1.1.
-
-=back
-
-=head2 Transition ways from 1.xx to 2.xx.
-
-You should set C<suport_by_pp> mode firstly, because
-it is always successful for the below codes even with JSON::XS.
-
-    use JSON -support_by_pp;
-
-=over
-
-=item Exported jsonToObj (simple)
-
-  from_json($json_text);
-
-=item Exported objToJson (simple)
-
-  to_json($perl_scalar);
-
-=item Exported jsonToObj (advanced)
-
-  $flags = {allow_barekey => 1, allow_singlequote => 1};
-  from_json($json_text, $flags);
-
-equivalent to:
-
-  $JSON::BareKey = 1;
-  $JSON::QuotApos = 1;
-  jsonToObj($json_text);
-
-=item Exported objToJson (advanced)
-
-  $flags = {allow_blessed => 1, allow_barekey => 1};
-  to_json($perl_scalar, $flags);
-
-equivalent to:
-
-  $JSON::BareKey = 1;
-  objToJson($perl_scalar);
-
-=item jsonToObj as object method
-
-  $json->decode($json_text);
-
-=item objToJson as object method
-
-  $json->encode($perl_scalar);
-
-=item new method with parameters
-
-The C<new> method in 2.x takes any parameters no longer.
-You can set parameters instead;
-
-   $json = JSON->new->pretty;
-
-=item $JSON::Pretty, $JSON::Indent, $JSON::Delimiter
-
-If C<indent> is enable, that means C<$JSON::Pretty> flag set. And
-C<$JSON::Delimiter> was substituted by C<space_before> and C<space_after>.
-In conclusion:
-
-   $json->indent->space_before->space_after;
-
-Equivalent to:
-
-  $json->pretty;
-
-To change indent length, use C<indent_length>.
-
-(Only with JSON::PP, if C<-support_by_pp> is not used.)
-
-  $json->pretty->indent_length(2)->encode($perl_scalar);
-
-=item $JSON::BareKey
-
-(Only with JSON::PP, if C<-support_by_pp> is not used.)
-
-  $json->allow_barekey->decode($json_text)
-
-=item $JSON::ConvBlessed
-
-use C<-convert_blessed_universally>. See to L<convert_blessed>.
-
-=item $JSON::QuotApos
-
-(Only with JSON::PP, if C<-support_by_pp> is not used.)
-
-  $json->allow_singlequote->decode($json_text)
-
-=item $JSON::SingleQuote
-
-Disable. C<JSON> does not make such a invalid JSON string any longer.
-
-=item $JSON::KeySort
-
-  $json->canonical->encode($perl_scalar)
-
-This is the ascii sort.
-
-If you want to use with your own sort routine, check the C<sort_by> method.
-
-(Only with JSON::PP, even if C<-support_by_pp> is used currently.)
-
-  $json->sort_by($sort_routine_ref)->encode($perl_scalar)
-
-  $json->sort_by(sub { $JSON::PP::a <=> $JSON::PP::b })->encode($perl_scalar)
-
-Can't access C<$a> and C<$b> but C<$JSON::PP::a> and C<$JSON::PP::b>.
-
-=item $JSON::SkipInvalid
-
-  $json->allow_unknown
-
-=item $JSON::AUTOCONVERT
-
-Needless. C<JSON> backend modules have the round-trip integrity.
-
-=item $JSON::UTF8
-
-Needless because C<JSON> (JSON::XS/JSON::PP) sets
-the UTF8 flag on properly.
-
-    # With UTF8-flagged strings
-
-    $json->allow_nonref;
-    $str = chr(1000); # UTF8-flagged
-
-    $json_text  = $json->utf8(0)->encode($str);
-    utf8::is_utf8($json_text);
-    # true
-    $json_text  = $json->utf8(1)->encode($str);
-    utf8::is_utf8($json_text);
-    # false
-
-    $str = '"' . chr(1000) . '"'; # UTF8-flagged
-
-    $perl_scalar  = $json->utf8(0)->decode($str);
-    utf8::is_utf8($perl_scalar);
-    # true
-    $perl_scalar  = $json->utf8(1)->decode($str);
-    # died because of 'Wide character in subroutine'
-
-See to L<JSON::XS/A FEW NOTES ON UNICODE AND PERL>.
-
-=item $JSON::UnMapping
-
-Disable. See to L<MAPPING>.
-
-=item $JSON::SelfConvert
-
-This option was deleted.
-Instead of it, if a givien blessed object has the C<TO_JSON> method,
-C<TO_JSON> will be executed with C<convert_blessed>.
-
-  $json->convert_blessed->encode($bleesed_hashref_or_arrayref)
-  # if need, call allow_blessed
-
-Note that it was C<toJson> in old version, but now not C<toJson> but C<TO_JSON>.
-
-=back
-
-=head1 TODO
-
-=over
-
-=item example programs
-
-=back
-
-=head1 THREADS
-
-No test with JSON::PP. If with JSON::XS, See to L<JSON::XS/THREADS>.
-
-
-=head1 BUGS
-
-Please report bugs relevant to C<JSON> to E<lt>makamaka[at]cpan.orgE<gt>.
-
-
-=head1 SEE ALSO
-
-Most of the document is copied and modified from JSON::XS doc.
-
-L<JSON::XS>, L<JSON::PP>
-
-C<RFC4627>(L<http://www.ietf.org/rfc/rfc4627.txt>)
-
-=head1 AUTHOR
-
-Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
-
-JSON::XS was written by  Marc Lehmann <schmorp[at]schmorp.de>
-
-The relese of this new version owes to the courtesy of Marc Lehmann.
-
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2005-2011 by Makamaka Hannyaharamitu
-
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
diff --git a/verilog/rtl/BrqRV_EB1/tools/Makefile b/verilog/rtl/BrqRV_EB1/tools/Makefile
deleted file mode 100755
index 7fba2df..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/Makefile
+++ /dev/null
@@ -1,217 +0,0 @@
-# SPDX-License-Identifier: Apache-2.0
-# Copyright 2020 MERL Corporation or its affiliates.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-CONF_PARAMS = -set build_axi4
-
-TEST_CFLAGS = -g -O3 -funroll-all-loops
-ABI = -mabi=ilp32 -march=rv32gcv
-
-# Check for RV_ROOT
-ifeq (,$(wildcard ${RV_ROOT}/configs/brqrv.config))
-$(error env var RV_ROOT does not point to a valid dir! Exiting!)
-endif
-
-# Allow snapshot override
-target = default
-snapshot = $(target)
-
-# Allow tool override
-brqrv_CONFIG = ${RV_ROOT}/configs/brqrv.config
-IRUN = xrun
-VCS = vcs
-VLOG = qverilog
-VERILATOR = verilator
-RIVEIRA = riviera
-GCC_PREFIX = riscv64-unknown-elf
-BUILD_DIR = snapshots/${snapshot}
-TBDIR = ${RV_ROOT}/testbench
-
-# Define test name
-TEST = hello_world
-
-# Define test name
-ifneq (,$(wildcard $(TBDIR)/asm/$(TEST).s))
-	TEST_DIR = ${TBDIR}/asm
-else
-ifneq (,$(wildcard $(TBDIR)/asm/$(TEST).c))
-	TEST_DIR = ${TBDIR}/asm
-else
-ifneq (,$(wildcard $(TBDIR)/tests/$(TEST)))
-	TEST_DIR = $(TBDIR)/tests/$(TEST)
-else 
-	TEST_DIR = ${TBDIR}/asm
-endif
-endif
-endif
-HEX_DIR = ${TBDIR}/hex
-
-OFILES = $(TEST).o
-
-ifdef debug
- DEBUG_PLUS = +dumpon
- IRUN_DEBUG = -access +rc
- IRUN_DEBUG_RUN = -input ${RV_ROOT}/testbench/input.tcl
- VCS_DEBUG = -debug_access
- VERILATOR_DEBUG = --trace
- RIVIERA_DEBUG = +access +r
-endif
-
-# provide specific link file
-ifeq (,$(wildcard $(TEST_DIR)/$(TEST).ld))
-	LINK = $(BUILD_DIR)/link.ld
-else
-	LINK = $(TEST_DIR)/$(TEST).ld
-endif
-
-VPATH = $(TEST_DIR) $(BUILD_DIR) $(TBDIR)
-
--include $(TEST_DIR)/$(TEST).mki
-
-
-TBFILES = $(TBDIR)/tb_top.sv $(TBDIR)/ahb_sif.sv
-
-defines  = $(BUILD_DIR)/common_defines.vh
-defines += ${RV_ROOT}/design/include/eb1_def.sv
-defines += $(BUILD_DIR)/eb1_pdef.vh
-includes = -I${BUILD_DIR}
-
-# CFLAGS for verilator generated Makefiles. Without -std=c++11 it
-# complains for `auto` variables
-CFLAGS += "-std=c++11"
-
-# Optimization for better performance; alternative is nothing for
-# slower runtime (faster compiles) -O2 for faster runtime (slower
-# compiles), or -O for balance.
-VERILATOR_MAKE_FLAGS = OPT_FAST="-Os"
-
-# Targets
-all: clean verilator
-
-clean:
-	rm -rf *.log *.s *.hex *.dis *.tbl irun* vcs* simv* snapshots brqrv* \
-	verilator* *.exe obj* *.o ucli.key vc_hdrs.h csrc *.csv work\
-	work dataset.asdb  library.cfg vsimsa.cfg  riviera-build wave.asdb
-
-
-
-############ Model Builds ###############################
-
-# If define files do not exist, then run brqrv.config.
-${BUILD_DIR}/defines.h:
-	BUILD_PATH=${BUILD_DIR} ${RV_ROOT}/configs/brqrv.config -target=$(target) $(CONF_PARAMS)
-
-verilator-build: ${TBFILES} ${BUILD_DIR}/defines.h test_tb_top.cpp
-	echo '`undef RV_ASSERT_ON' >> ${BUILD_DIR}/common_defines.vh
-	$(VERILATOR)  --cc -CFLAGS ${CFLAGS} $(defines) \
-	  $(includes) -I${RV_ROOT}/testbench -f ${RV_ROOT}/testbench/flist \
-	  -Wno-WIDTH -Wno-UNOPTFLAT ${TBFILES} --top-module tb_top \
-	  -exe test_tb_top.cpp --autoflush $(VERILATOR_DEBUG)
-	cp ${RV_ROOT}/testbench/test_tb_top.cpp obj_dir/
-	$(MAKE) -j -e -C obj_dir/ -f Vtb_top.mk $(VERILATOR_MAKE_FLAGS)
-	touch verilator-build
-
-vcs-build: ${TBFILES} ${BUILD_DIR}/defines.h
-	$(VCS) -full64 -assert svaext -sverilog +define+RV_OPENSOURCE \
-	  +error+500 +incdir+${RV_ROOT}/design/lib \
-	  +incdir+${RV_ROOT}/design/include ${BUILD_DIR}/common_defines.vh \
-	  +incdir+$(BUILD_DIR)  +libext+.v $(defines) \
-	  -f ${RV_ROOT}/testbench/flist ${TBFILES} -l vcs.log
-	touch vcs-build
-
-irun-build: ${TBFILES} ${BUILD_DIR}/defines.h
-	$(IRUN) -64bit -elaborate $(IRUN_DEBUG) -q -sv -sysv  -nowarn CUVIHR \
-	  -xmlibdirpath . -xmlibdirname brqrv.build \
-	  -incdir ${RV_ROOT}/design/lib -incdir ${RV_ROOT}/design/include \
-	  -vlog_ext +.vh+.h $(defines) -incdir $(BUILD_DIR) \
-	  -f ${RV_ROOT}/testbench/flist -top tb_top  ${TBFILES} \
-	  -I${RV_ROOT}/testbench -elaborate  -snapshot ${snapshot} $(profile)
-	touch irun-build
-
-riviera-build: ${TBFILES} ${BUILD_DIR}/defines.h
-	vlib work
-	vlog -work work \
-		-err VCP2694 W1 \
-		+incdir+${RV_ROOT}/design/lib \
-		+incdir+${RV_ROOT}/design/include \
-		+incdir+${BUILD_DIR} \
-		-y ${RV_ROOT}/design/lib +libext+.v+.vh \
-		$(defines) \
-		-f ${RV_ROOT}/testbench/flist \
-		${TBFILES}
-	touch riviera-build
-
-############ TEST Simulation ###############################
-
-verilator: program.hex verilator-build
-	./obj_dir/Vtb_top
-
-irun: program.hex irun-build
-	$(IRUN) -64bit -abvglobalfailurelimit 1 +lic_queue -licqueue \
-	  -status -xmlibdirpath . -xmlibdirname brqrv.build \
-	  -snapshot ${snapshot} -r $(snapshot) $(IRUN_DEBUG_RUN) $(profile)
-
-vcs: program.hex vcs-build
-	./simv $(DEBUG_PLUS) +vcs+lic+wait  -l vcs.log
-
-vlog: program.hex ${TBFILES} ${BUILD_DIR}/defines.h
-	$(VLOG) -l vlog.log -sv -mfcu +incdir+${BUILD_DIR}+${RV_ROOT}/design/include+${RV_ROOT}/design/lib\
-        $(defines) -f ${RV_ROOT}/testbench/flist ${TBFILES}  -R +nowarn3829 +nowarn2583 ${DEBUG_PLUS}
-
-riviera: program.hex riviera-build
-	vsim -c -lib work ${DEBUG_PLUS} ${RIVIERA_DEBUG} tb_top -do "run -all; exit" -l riviera.log
-
-
-
-############ TEST build ###############################
-    
-ifeq ($(shell which $(GCC_PREFIX)-gcc 2> /dev/null),)
-program.hex: ${BUILD_DIR}/defines.h
-	@echo " !!! No $(GCC_PREFIX)-gcc in path, using canned hex files !!"
-	cp ${HEX_DIR}/$(TEST).hex program.hex
-else
-ifneq (,$(wildcard $(TEST_DIR)/$(TEST).makefile))
-program.hex:
-	@echo Building $(TEST) via $(TEST_DIR)/$(TEST).makefile
-	$(MAKE) -f $(TEST_DIR)/$(TEST).makefile
-else
-program.hex: $(OFILES) $(LINK)
-	@echo Building $(TEST)
-	$(GCC_PREFIX)-gcc -Wl,-m,elf32lriscv -Wl,--discard-none -T$(LINK) -o $(TEST).exe $(OFILES) -nostartfiles -nostdlib $(TEST_LIBS)
-	$(GCC_PREFIX)-objcopy -O verilog $(TEST).exe program.hex
-	$(GCC_PREFIX)-objcopy -O verilog -j ".text" --change-section-lma ".text"=0x0 --reverse-bytes=4 $(TEST).exe uart.hex 
-	echo '00 00 0F FF ' >> uart.hex
-	$(GCC_PREFIX)-objdump -S  $(TEST).exe > $(TEST).dis
-	@echo Completed building $(TEST)
-
-
-%.o : %.s ${BUILD_DIR}/defines.h
-	$(GCC_PREFIX)-cpp -I${BUILD_DIR}  $<  > $*.cpp.s
-	$(GCC_PREFIX)-as ${ABI} $*.cpp.s -o $@
-
-
-%.o : %.c ${BUILD_DIR}/defines.h
-	$(GCC_PREFIX)-gcc ${includes} ${TEST_CFLAGS} -DCOMPILER_FLAGS="\"${TEST_CFLAGS}\"" ${ABI} -nostdlib -c $< -o $@
-
-endif
-endif
-
-
-help:
-	@echo Make sure the environment variable RV_ROOT is set.
-	@echo Possible targets: verilator vcs irun vlog riviera help clean all verilator-build irun-build vcs-build riviera-build program.hex
-
-.PHONY: help clean verilator vcs irun vlog riviera
-
diff --git a/verilog/rtl/BrqRV_EB1/tools/addassign b/verilog/rtl/BrqRV_EB1/tools/addassign
deleted file mode 100755
index c1b9998..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/addassign
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/perl
-
-use Getopt::Long;
-
-$helpusage = "placeholder";
-
-GetOptions ('in=s'      => \$in,
-            'prefix=s'  => \$prefix) || die("$helpusage");
-
-
-
-@in=`cat $in`;
-
-
-foreach $line (@in) {
-
-    if ($line=~/\#/) { next; }
-
-    if ($line=~/([^=]+)=/) {
-        $sig=$1;
-        $sig=~s/\s+//g;
-        printf("logic $sig;\n");
-    }
-}
-
-foreach $line (@in) {
-
-    if ($line=~/\#/) { next; }
-
-    if ($line=~/([^=]+)=\s*;/) {
-        printf("assign ${prefix}$1 = 1'b0;\n");
-        next;
-    }
-
-    if ($line=~/([^=]+)=\s*\(\s*\);/) {
-        printf("assign ${prefix}$1 = 1'b0;\n");
-        next;
-    }
-
-    if ($line =~ /=/) { printf("assign ${prefix}$line"); }
-    else              { printf("$line"); }
-}
-
-
-exit;
-
diff --git a/verilog/rtl/BrqRV_EB1/tools/coredecode b/verilog/rtl/BrqRV_EB1/tools/coredecode
deleted file mode 100755
index 053f813..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/coredecode
+++ /dev/null
@@ -1,198 +0,0 @@
-#!/usr/bin/perl
-
-use Getopt::Long;
-
-$helpusage = "placeholder";
-
-GetOptions ('legal'  => \$legal,
-            'in=s'   => \$in,
-            'out=s'  => \$out,
-            'view=s' => \$view ) || die("$helpusage");
-
-
-if (!defined($in))  { die("must define -in=input"); }
-if (!defined($out)) { $out="${in}.out"; }
-
-if ($in eq "vector_decode")       { $view="rv32v";  }
-elsif ($in eq "cdecode")   { $view="rv32c";  }
-elsif ($in eq "csrdecode") { $view="csr";  }
-
-if (defined($in)) { printf("in=$in\n"); }
-if (defined($out)) { printf("out=$out\n"); }
-if (defined($view)) { printf("view=$view\n"); }
-
-@in=`cat $in`;
-
-$gather=0;
-
-$TIMEOUT=50;
-
-foreach $line (@in) {
-
-    #printf("$pstate: $line");
-
-    if ($line=~/^\s*\#/) { #printf("skip $line");
-                           next; }
-
-    if ($gather==1) {
-        if ($line=~/(\S+)/) {
-            if ($line=~/}/) { $gather=0; $position=0; next; }
-            $label=$1;
-            $label=~s/,//g;
-            if ($pstate==2) {
-                if (defined($INPUT{$CVIEW}{$label})) { die("input $label already defined"); }
-                $INPUT{$CVIEW}{$label}=$position++;
-                $INPUTLEN{$CVIEW}++;
-                $INPUTSTR{$CVIEW}.=" $label";
-            }
-            elsif ($pstate==3) {
-                if (defined($OUTPUT{$CVIEW}{$label})) { die("output $label already defined"); }
-                $OUTPUT{$CVIEW}{$label}=$position++;
-                $OUTPUTLEN{$CVIEW}++;
-                $OUTPUTSTR{$CVIEW}.=" $label";
-            }
-            else { die("unknown pstate $pstate in gather"); }
-        }
-    }
-
-    if ($line=~/^.definition/) {
-        $pstate=1; next;
-    }
-     if ($pstate==1) {  # definition
-        if ($line!~/^.output/) {
-            if ($line=~/(\S+)\s*=\s*(\S+)/) {
-                $key=$1; $value=$2;
-                $value=~s/\./-/g;
-                $value=~s/\[//g;
-                $value=~s/\]//g;
-                $DEFINITION{$key}=$value;
-            }
-        }
-        else { $pstate=2; next; }
-    }
-
-    if ($line=~/^.input/) {
-        $pstate=2; next;
-    }
-
-    if ($pstate==2) {  # input
-        if ($line=~/(\S+)\s*=\s*\{/) {
-            $CVIEW=$1; $gather=1; next;
-        }
-    }
-
-    if ($line=~/^.output/) {
-        $pstate=3; next;
-    }
-
-    if ($pstate==3) {  # output
-        if ($line=~/(\S+)\s*=\s*\{/) {
-            $CVIEW=$1; $gather=1; next;
-        }
-    }
-
-    if ($line=~/^.decode/) {
-        $pstate=4; next;
-    }
-
-   if ($pstate==4) {  # decode
-        if ($line=~/([^\[]+)\[([^\]]+)\]\s*=\s*\{([^\}]+)\}/) {
-            $dview=$1; $inst=$2; $body=$3;
-            $dview=~s/\s+//g;
-            $inst=~s/\s+//g;
-            #printf("$dview $inst $body\n");
-            if ($inst=~/([^\{]+)\{([^-]+)-([^\}]+)\}/) {
-                $base=$1; $lo=$2; $hi=$3;
-                $hi++;
-                for ($i=0; $i<$TIMEOUT && $lo ne $hi; $i++) {
-                    #printf("decode $dview $base$lo\n");
-
-                    $expand=$base.$lo;
-                    if (!defined($DEFINITION{$expand})) { die("could not find instruction definition for inst $expand"); }
-
-                    $DECODE{$dview}{$expand}=$body;
-                    $lo++;
-                }
-                if ($i == $TIMEOUT) { die("timeout in decode expansion"); }
-
-            }
-            else {
-                if (!defined($DEFINITION{$inst})) { die("could not find instruction definition for inst $inst"); }
-                $DECODE{$dview}{$inst}=$body;
-            }
-        }
-   }
-
-}
-
-
-#printf("view $view len %d\n",$OUTPUTLEN{$view});
-
-#printf("$OUTPUTSTR{$view}\n");
-
-
-# need to switch this somehow based on 16/32
-printf(".i %d\n",$INPUTLEN{$view});
-
-if (defined($legal)) {
-    printf(".o 1\n");
-}
-else {
-    printf(".o %d\n",$OUTPUTLEN{$view});
-}
-
-printf(".ilb %s\n",$INPUTSTR{$view});
-
-if (defined($legal)) {
-    printf(".ob legal\n");
-}
-else {
-    printf(".ob %s\n",$OUTPUTSTR{$view});
-}
-
-if (defined($legal)) {
-    printf(".type fd\n");
-}
-else {
-    printf(".type fr\n");
-}
-
-$DEFAULT_TEMPLATE='0'x$OUTPUTLEN{$view};
-
-foreach $inst (sort keys %{ $DECODE{$view} }) {
-
-    $body=$DECODE{$view}{$inst};
-    @sigs=split(' ',$body);
-
-    $template=$DEFAULT_TEMPLATE;
-    foreach $sig (@sigs) {
-        if (!defined($OUTPUT{$view}{$sig})) { die("could not find output definition for sig $sig in view $view"); }
-        $position=$OUTPUT{$view}{$sig};
-        substr($template,$position,1,1);
-    }
-
-#    if (!defined($DEFINITION{$inst})) { die("could not find instruction defintion for inst $inst"); }
-
-    printf("# $inst\n");
-    if (defined($legal)) {
-        printf("$DEFINITION{$inst} 1\n");
-    }
-    else {
-        printf("$DEFINITION{$inst} $template\n");
-    }
-
-}
-
-
-exit;
-
-foreach $inst (sort keys %DEFINITION) {
-    $value=$DEFINITION{$inst};
-    printf("%-10s = $value\n",$inst);
-}
-
-
-foreach $sig (sort keys %{ $OUTPUT{$view} }) {
-    $position=$OUTPUT{$view}{$sig};
-    printf("$sig $position\n");
-}
diff --git a/verilog/rtl/BrqRV_EB1/tools/picmap b/verilog/rtl/BrqRV_EB1/tools/picmap
deleted file mode 100755
index 06df0d5..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/picmap
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/perl
-
-use Getopt::Long;
-
-use integer;
-
-$helpusage = "placeholder";
-
-GetOptions ('total_int=s'       => \$total_int)|| die("$helpusage");
-
-$LEN=15;
-
-#printf("logic [2:0] mask;\n");
-
-printf("// mask[3:0] = { 4'b1000 - 30b mask,4'b0100 - 31b mask, 4'b0010 - 28b mask, 4'b0001 - 32b mask }\n");
-printf("always_comb begin\n");
-printf("  case \(address[14:0]\)\n");
-printf("    15'b011000000000000 : mask[3:0] = 4'b0100;\n");
-for ($i=1; $i<=$total_int; $i++) {
-    $j=hex("4000");
-    printf("    15'b%s : mask[3:0] = 4'b1000;\n",d2b($j+$i*4));
-}
-for ($i=1; $i<=$total_int; $i++) {
-    $j=hex("2000");
-    printf("    15'b%s : mask[3:0] = 4'b0100;\n",d2b($j+$i*4));
-}
-for ($i=1; $i<=$total_int; $i++) {
-    $j=hex("0");
-    printf("    15'b%s : mask[3:0] = 4'b0010;\n",d2b($j+$i*4));
-}
-    printf("    %-17s : mask[3:0] = 4'b0001;\n","default");
-printf("  endcase\n");
-printf("end\n");
-
-
-sub b2d {
-    my ($v) = @_;
-
-    $v = oct("0b" . $v);
-
-    return($v);
-}
-
-sub d2b {
-    my ($v) = @_;
-
-    my $repeat;
-
-    $v = sprintf "%b",$v;
-    if (length($v)<$LEN) {
-        $repeat=$LEN-length($v);
-        $v="0"x$repeat.$v;
-    }
-    elsif (length($v)>$LEN) {
-        $v=substr($v,length($v)-$LEN,$LEN);
-    }
-
-    return($v);
-}
diff --git a/verilog/rtl/BrqRV_EB1/tools/smalldiv b/verilog/rtl/BrqRV_EB1/tools/smalldiv
deleted file mode 100755
index 48495be..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/smalldiv
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/perl
-
-use Getopt::Long;
-
-use integer;
-
-$helpusage = "placeholder";
-
-GetOptions ('len=s'       => \$len,
-            'num=s'       => \$num,
-            'den=s'       => \$den,
-            'skip'   => \$skip)  || die("$helpusage");
-
-if (!defined($len)) { $len=8; }
-$LEN=$len;
-
-$n=d2b($num);  # numerator - quotient
-$m=d2b($den);  # denominator - divisor
-
-
-printf(".i 8\n");
-printf(".o 4\n");
-printf(".ilb q_ff[3] q_ff[2] q_ff[1] q_ff[0] m_ff[3] m_ff[2] m_ff[1] m_ff[0]\n");
-printf(".ob smallnum[3] smallnum[2] smallnum[1] smallnum[0]\n");
-printf(".type fr\n");
-for ($q=0; $q<16; $q++) {
-    for ($m=0; $m<16; $m++) {
-        if ($m==0) { next; }
-        $result=int($q/$m);
-        printf("%s %s %s\n",d2bl($q,4),d2bl($m,4),d2bl($result,4));
-    }
-}
-
-exit;
-
-#$LEN=length($n);
-
-$a="0"x$LEN;
-$q=$n;
-
-#printf("n=%s, m=%s\n",$n,$m);
-#printf("a=%s, q=%s\n",$a,$q);
-
-for ($i=1; $i<=$LEN; $i++) {
-
-    #printf("iteration $n:\n");
-
-    printf("$i: a=%s q=%s\n",$a,$q);
-
-
-    $signa = substr($a,0,1);
-
-
-    $a = substr($a.$q,1,$LEN);  # new a with q shifted in
-
-    if ($signa==0) { $a=b2d($a)-b2d($m); }
-    else           { $a=b2d($a)+b2d($m); }
-
-    $a=d2b($a);
-
-
-    $signa = substr($a,0,1);
-    if ($signa==0) { $q=substr($q,1,$LEN-1)."1"; }
-    else           { $q=substr($q,1,$LEN-1)."0"; }
-
-}
-
-
-#printf("a=$a\n");
-$signa = substr($a,0,1);
-if ($signa==1 && !defined($skip)) {
-    printf("correction:\n");
-    $a=b2d($a)+b2d($m);
-    $a=d2b($a);
-}
-#printf("a=$a\n");
-printf("%d / %d = %d R %d ",b2d($n),b2d($m),b2d($q),b2d($a));
-if ($a eq $n) { printf("-> remainder equal numerator\n"); }
-else          { printf("\n"); }
-
-sub b2d {
-    my ($v) = @_;
-
-    $v = oct("0b" . $v);
-
-    return($v);
-}
-
-sub d2b {
-    my ($v) = @_;
-
-    my $repeat;
-
-    $v = sprintf "%b",$v;
-    if (length($v)<$LEN) {
-        $repeat=$LEN-length($v);
-        $v="0"x$repeat.$v;
-    }
-    elsif (length($v)>$LEN) {
-        $v=substr($v,length($v)-$LEN,$LEN);
-    }
-
-    return($v);
-}
-
-sub d2bl {
-    my ($v,$LEN) = @_;
-
-    my $repeat;
-
-    $v = sprintf "%b",$v;
-    if (length($v)<$LEN) {
-        $repeat=$LEN-length($v);
-        $v="0"x$repeat.$v;
-    }
-    elsif (length($v)>$LEN) {
-        $v=substr($v,length($v)-$LEN,$LEN);
-    }
-
-    return($v);
-}
diff --git a/verilog/rtl/BrqRV_EB1/tools/unrollforverilator b/verilog/rtl/BrqRV_EB1/tools/unrollforverilator
deleted file mode 100755
index 444b7df..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/unrollforverilator
+++ /dev/null
@@ -1,169 +0,0 @@
-#!/usr/bin/perl
-#use strict;
-#use warnings;
-
-my $RV_ROOT = $ENV{RV_ROOT};
-
-my $TOTAL_INT=$ARGV[0];
-print "// argv=".$ARGV[0]."\n";
-my $NUM_LEVELS;
-if($TOTAL_INT==2){$NUM_LEVELS=1;}
-elsif ($TOTAL_INT==4){$NUM_LEVELS=2;}
-elsif ($TOTAL_INT==8){$NUM_LEVELS=3;}
-elsif ($TOTAL_INT==16){$NUM_LEVELS=4;}
-elsif ($TOTAL_INT==32){$NUM_LEVELS=5;}
-elsif ($TOTAL_INT==64){$NUM_LEVELS=6;}
-elsif ($TOTAL_INT==128){$NUM_LEVELS=7;}
-elsif ($TOTAL_INT==256){$NUM_LEVELS=8;}
-elsif ($TOTAL_INT==512){$NUM_LEVELS=9;}
-elsif ($TOTAL_INT==1024){$NUM_LEVELS=10;}
-else {$NUM_LEVELS=int(log($TOTAL_INT)/log(2))+1;}
-print ("// TOTAL_INT=".$TOTAL_INT." NUM_LEVELS=".$NUM_LEVELS."\n");
-$next_level = 1;
-print ("`ifdef RV_PIC_2CYCLE\n");
-if($TOTAL_INT > 2){
-print ("// LEVEL0\n");
-print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en_".$next_level.";\n");
-print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] level_intpend_id_".$next_level.";\n");
-print ("    for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE0\n");
-print ("       if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n");
-print ("            assign level_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n");
-print ("            assign level_intpend_id_".$next_level."[m+1]         = '0 ;\n");
-print ("       end\n");
-print ("       cmp_and_mux  #(\n");
-print ("                      .ID_BITS(ID_BITS),\n");
-print ("                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n");
-print ("                      .a_id(level_intpend_id[0][2*m]),\n");
-print ("                      .a_priority(level_intpend_w_prior_en[0][2*m]),\n");
-print ("                      .b_id(level_intpend_id[0][2*m+1]),\n");
-print ("                      .b_priority(level_intpend_w_prior_en[0][2*m+1]),\n");
-print ("                      .out_id(level_intpend_id_".$next_level."[m]),\n");
-print ("                      .out_priority(level_intpend_w_prior_en_".$next_level."[m])) ;\n");
-print ("        \n");
-print (" end\n\n");
-for (my $l=1; $l<int($NUM_LEVELS/2) ; $l++) {
-$next_level = $l+1;
-print ("// LEVEL".$l."\n");
-print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en_".$next_level.";\n");
-print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] level_intpend_id_".$next_level.";\n");
-print ("    for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE$l\n");
-print ("       if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n");
-print ("            assign level_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n");
-print ("            assign level_intpend_id_".$next_level."[m+1]         = '0 ;\n");
-print ("       end\n");
-print ("       cmp_and_mux  #(\n");
-print ("                      .ID_BITS(ID_BITS),\n");
-print ("                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n");
-print ("                      .a_id(level_intpend_id_".$l."[2*m]),\n");
-print ("                      .a_priority(level_intpend_w_prior_en_".$l."[2*m]),\n");
-print ("                      .b_id(level_intpend_id_".$l."[2*m+1]),\n");
-print ("                      .b_priority(level_intpend_w_prior_en_".$l."[2*m+1]),\n");
-print ("                      .out_id(level_intpend_id_".$next_level."[m]),\n");
-print ("                      .out_priority(level_intpend_w_prior_en_".$next_level."[m])) ;\n");
-print ("        \n");
-print (" end\n\n");
-}
-### ADD FLOP STAGE
-print ("for (i=0; i<=TOTAL_INT/2**(NUM_LEVELS/2) ; i++) begin : MIDDLE_FLOPS\n");
-print ("  rvdff #(INTPRIORITY_BITS) leveb1_intpend_prior_reg  (.*, .din (level_intpend_w_prior_en_".$next_level."[i]), .dout(l2_intpend_w_prior_en_ff[i]),  .clk(active_clk));\n");
-print ("  rvdff #(ID_BITS)          leveb1_intpend_id_reg     (.*, .din (level_intpend_id_".$next_level."[i]),         .dout(l2_intpend_id_ff[i]),          .clk(active_clk));\n");
-print ("end\n");
-}else{
-print ("for (i=0; i<=TOTAL_INT/2**(NUM_LEVELS/2) ; i++) begin : MIDDLE_FLOPS\n");
-print ("  rvdff #(INTPRIORITY_BITS) leveb1_intpend_prior_reg  (.*, .din (level_intpend_w_prior_en[0][i]), .dout(l2_intpend_w_prior_en_ff[i]),  .clk(active_clk));\n");
-print ("  rvdff #(ID_BITS)          leveb1_intpend_id_reg     (.*, .din (level_intpend_id[0][i]),         .dout(l2_intpend_id_ff[i]),          .clk(active_clk));\n");
-print ("end\n");
-}
-### END FLOP STAGE
-$next_level = int($NUM_LEVELS/2) + 1;
-my $tmp = int($NUM_LEVELS/2);
-print ("// LEVEL".$tmp."\n");
-print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] levelx_intpend_w_prior_en_".$next_level.";\n");
-print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] levelx_intpend_id_".$next_level.";\n");
-print ("    for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE$tmp\n");
-print ("       if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n");
-print ("            assign levelx_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n");
-print ("            assign levelx_intpend_id_".$next_level."[m+1]         = '0 ;\n");
-print ("       end\n");
-print ("       cmp_and_mux  #(\n");
-print ("                      .ID_BITS(ID_BITS),\n");
-print ("                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n");
-print ("                      .a_id(levelx_intpend_id[$tmp][2*m]),\n");
-print ("                      .a_priority(levelx_intpend_w_prior_en[$tmp][2*m]),\n");
-print ("                      .b_id(levelx_intpend_id[$tmp][2*m+1]),\n");
-print ("                      .b_priority(levelx_intpend_w_prior_en[$tmp][2*m+1]),\n");
-print ("                      .out_id(levelx_intpend_id_".$next_level."[m]),\n");
-print ("                      .out_priority(levelx_intpend_w_prior_en_".$next_level."[m])) ;\n");
-print ("        \n");
-print (" end\n\n");
-for (my $l=int($NUM_LEVELS/2)+1; $l<$NUM_LEVELS ; $l++) {
-$next_level = $l+1;
-print ("// LEVEL".$l."\n");
-print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] levelx_intpend_w_prior_en_".$next_level.";\n");
-print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] levelx_intpend_id_".$next_level.";\n");
-print ("    for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE$l\n");
-print ("       if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n");
-print ("            assign levelx_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n");
-print ("            assign levelx_intpend_id_".$next_level."[m+1]         = '0 ;\n");
-print ("       end\n");
-print ("       cmp_and_mux  #(\n");
-print ("                      .ID_BITS(ID_BITS),\n");
-print ("                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n");
-print ("                      .a_id(levelx_intpend_id_".$l."[2*m]),\n");
-print ("                      .a_priority(levelx_intpend_w_prior_en_".$l."[2*m]),\n");
-print ("                      .b_id(levelx_intpend_id_".$l."[2*m+1]),\n");
-print ("                      .b_priority(levelx_intpend_w_prior_en_".$l."[2*m+1]),\n");
-print ("                      .out_id(levelx_intpend_id_".$next_level."[m]),\n");
-print ("                      .out_priority(levelx_intpend_w_prior_en_".$next_level."[m])) ;\n");
-print ("        \n");
-print (" end\n\n");
-}
-print ("assign claimid_in[ID_BITS-1:0]                      =      levelx_intpend_id_".$next_level."[0] ;   // This is the last level output\n");
-print ("assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      levelx_intpend_w_prior_en_".$next_level."[0] ;\n");
-print ("`else\n");
-$next_level = 1;
-print ("// LEVEL0\n");
-print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en_".$next_level.";\n");
-print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] level_intpend_id_".$next_level.";\n");
-print ("    for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE0\n");
-print ("       if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n");
-print ("            assign level_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n");
-print ("            assign level_intpend_id_".$next_level."[m+1]         = '0 ;\n");
-print ("       end\n");
-print ("       cmp_and_mux  #(\n");
-print ("                      .ID_BITS(ID_BITS),\n");
-print ("                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n");
-print ("                      .a_id(level_intpend_id[0][2*m]),\n");
-print ("                      .a_priority(level_intpend_w_prior_en[0][2*m]),\n");
-print ("                      .b_id(level_intpend_id[0][2*m+1]),\n");
-print ("                      .b_priority(level_intpend_w_prior_en[0][2*m+1]),\n");
-print ("                      .out_id(level_intpend_id_".$next_level."[m]),\n");
-print ("                      .out_priority(level_intpend_w_prior_en_".$next_level."[m])) ;\n");
-print ("        \n");
-print (" end\n\n");
-for (my $l=1; $l<$NUM_LEVELS ; $l++) {
-$next_level = $l+1;
-print ("// LEVEL".$l."\n");
-print ("logic [TOTAL_INT+2:0] [INTPRIORITY_BITS-1:0] level_intpend_w_prior_en_".$next_level.";\n");
-print ("logic [TOTAL_INT+2:0] [ID_BITS-1:0] level_intpend_id_".$next_level.";\n");
-print ("    for (m=0; m<=(TOTAL_INT)/(2**(".$next_level.")) ; m++) begin : COMPARE$l\n");
-print ("       if ( m == (TOTAL_INT)/(2**(".$next_level."))) begin \n");
-print ("            assign level_intpend_w_prior_en_".$next_level."[m+1] = '0 ;\n");
-print ("            assign level_intpend_id_".$next_level."[m+1]         = '0 ;\n");
-print ("       end\n");
-print ("       cmp_and_mux  #(\n");
-print ("                      .ID_BITS(ID_BITS),\n");
-print ("                      .INTPRIORITY_BITS(INTPRIORITY_BITS)) cmp_l".$next_level." (\n");
-print ("                      .a_id(level_intpend_id_".$l."[2*m]),\n");
-print ("                      .a_priority(level_intpend_w_prior_en_".$l."[2*m]),\n");
-print ("                      .b_id(level_intpend_id_".$l."[2*m+1]),\n");
-print ("                      .b_priority(level_intpend_w_prior_en_".$l."[2*m+1]),\n");
-print ("                      .out_id(level_intpend_id_".$next_level."[m]),\n");
-print ("                      .out_priority(level_intpend_w_prior_en_".$next_level."[m])) ;\n");
-print ("        \n");
-print (" end\n\n");
-}
-print ("assign claimid_in[ID_BITS-1:0]                      =      level_intpend_id_".$next_level."[0] ;   // This is the last level output\n");
-print ("assign selected_int_priority[INTPRIORITY_BITS-1:0]  =      level_intpend_w_prior_en_".$next_level."[0] ;\n");
-print ("`endif\n");
-
diff --git a/verilog/rtl/BrqRV_EB1/tools/vivado.tcl b/verilog/rtl/BrqRV_EB1/tools/vivado.tcl
deleted file mode 100644
index f3c5ab3..0000000
--- a/verilog/rtl/BrqRV_EB1/tools/vivado.tcl
+++ /dev/null
@@ -1,3 +0,0 @@
-set_property is_global_include true [get_files config/common_defines.vh]
-set_property is_global_include true  [get_files config/eb1_pdef.vh]
-set_property file_type SystemVerilog [get_files config/eb1_pdef.vh]
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index 6742e64..432879e 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -23,12 +23,9 @@
     `default_nettype wire
     `include "gl/user_project_wrapper.v"
     `include "gl/user_proj_example.v"
-    //`include "BrqRV_EB1/design/openlane/powered_netlist.v"   
-    //`include "BrqRV_EB1/design/sky130_sram_1kbyte_1rw1r_32x256_8.v"
 `else
     `include "user_project_wrapper.v"
     `include "user_proj_example.v"
-    `include "BrqRV_EB1/design/openlane/BrqRV_EB1.v"
-    //`include "BrqRV_EB1/design/openlane/powered_netlist.v"   
-    `include "BrqRV_EB1/design/sky130_sram_1kbyte_1rw1r_32x256_8.v"
+    `include "BrqRV_EB1/BrqRV_EB1.v"
+    `include "BrqRV_EB1/sky130_sram_1kbyte_1rw1r_32x256_8.v"
 `endif
