diff --git a/verilog/rtl/BrqRV_EB1/BrqRV_EB1.sv b/verilog/rtl/BrqRV_EB1/BrqRV_EB1.sv
deleted file mode 100644
index 072669a..0000000
--- a/verilog/rtl/BrqRV_EB1/BrqRV_EB1.sv
+++ /dev/null
@@ -1,31621 +0,0 @@
-// SPDX-FileCopyrightText: 2020 Efabless Corporation
-//
-// 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.
-// SPDX-License-Identifier: Apache-2.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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h0404020000E0200000000000008081000030400040081E090B040100060210C00000000000000000000000000000000000000000000000000000000000000000000000000000000003FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC3FFFFFFFC083020401C213848083C3C01000000040818428042010840830C2010281840200081002008E0C0801004040800C010021004006068101040808060C080240410A0AFFFF00000102101800000000000000000000000000000000000000000000000000000000000000000000000000000000007FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF87FFFFFFF8001080C080818080007806000003C043C04003E02008084021; 
-//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/Vector-Extension/"
-`define RV_DATA_ACCESS_ENABLE7 1'h0
-`define RV_DATA_ACCESS_MASK1 'hffffffff
-`define RV_DATA_ACCESS_ADDR6 'h00000000
-`define RV_INST_ACCESS_ENABLE1 1'h0
-`define RV_INST_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ADDR5 'h00000000
-`define RV_DATA_ACCESS_MASK0 'hffffffff
-`define RV_DATA_ACCESS_ADDR7 'h00000000
-`define RV_DATA_ACCESS_ENABLE3 1'h0
-`define RV_DATA_ACCESS_ENABLE4 1'h0
-`define RV_INST_ACCESS_MASK3 'hffffffff
-`define RV_INST_ACCESS_MASK2 'hffffffff
-`define RV_DATA_ACCESS_MASK4 'hffffffff
-`define RV_INST_ACCESS_MASK5 'hffffffff
-`define RV_INST_ACCESS_ADDR0 'h00000000
-`define RV_INST_ACCESS_ENABLE6 1'h0
-`define RV_INST_ACCESS_MASK7 'hffffffff
-`define RV_DATA_ACCESS_ENABLE2 1'h0
-`define RV_DATA_ACCESS_ADDR3 'h00000000
-`define RV_DATA_ACCESS_ADDR2 'h00000000
-`define RV_DATA_ACCESS_ENABLE5 1'h0
-`define RV_INST_ACCESS_ADDR1 'h00000000
-`define RV_INST_ACCESS_MASK6 'hffffffff
-`define RV_INST_ACCESS_ENABLE5 1'h0
-`define RV_DATA_ACCESS_ADDR1 'h00000000
-`define RV_DATA_ACCESS_MASK6 'hffffffff
-`define RV_INST_ACCESS_MASK4 'hffffffff
-`define RV_DATA_ACCESS_MASK5 'hffffffff
-`define RV_DATA_ACCESS_ADDR0 'h00000000
-`define RV_DATA_ACCESS_MASK7 'hffffffff
-`define RV_DATA_ACCESS_ENABLE6 1'h0
-`define RV_INST_ACCESS_ENABLE2 1'h0
-`define RV_INST_ACCESS_ADDR3 'h00000000
-`define RV_INST_ACCESS_ADDR2 'h00000000
-`define RV_DATA_ACCESS_ENABLE1 1'h0
-`define RV_DATA_ACCESS_ADDR4 'h00000000
-`define RV_DATA_ACCESS_ENABLE0 1'h0
-`define RV_INST_ACCESS_ADDR5 'h00000000
-`define RV_INST_ACCESS_MASK0 'hffffffff
-`define RV_INST_ACCESS_ADDR7 'h00000000
-`define RV_INST_ACCESS_ENABLE4 1'h0
-`define RV_INST_ACCESS_ENABLE3 1'h0
-`define RV_DATA_ACCESS_MASK3 'hffffffff
-`define RV_DATA_ACCESS_MASK2 'hffffffff
-`define RV_INST_ACCESS_ENABLE7 1'h0
-`define RV_INST_ACCESS_MASK1 'hffffffff
-`define RV_INST_ACCESS_ADDR6 'h00000000
-`define CPU_TOP `RV_TOP.brqrv
-`define RV_EXT_ADDRWIDTH 32
-`define SDVT_AHB 0
-`define RV_ASSERT_ON 
-`define RV_BUILD_AXI_NATIVE 1
-`define RV_EXT_DATAWIDTH 64
-`define CLOCK_PERIOD 100
-`define RV_LDERR_ROLLBACK 1
-`define RV_BUILD_AXI4 1
-`define RV_STERR_ROLLBACK 0
-`define RV_TOP `TOP.rvtop
-`define TOP tb_top
-`define RV_RET_STACK_SIZE 8
-`define RV_CONFIG_KEY 32'hdeadbeef
-`define RV_PIC_MEIGWCTRL_MASK 'h3
-`define RV_PIC_TOTAL_INT_PLUS1 32
-`define RV_PIC_MEIPT_OFFSET 'h3004
-`define RV_PIC_MPICCFG_COUNT 1
-`define RV_PIC_OFFSET 10'hc0000
-`define RV_PIC_MEIE_OFFSET 'h2000
-`define RV_PIC_MEIP_OFFSET 'h1000
-`define RV_PIC_MEIGWCTRL_COUNT 31
-`define RV_PIC_MEIPL_OFFSET 'h0000
-`define RV_PIC_MPICCFG_MASK 'h1
-`define RV_PIC_SIZE 32
-`define RV_PIC_MEIPL_MASK 'hf
-`define RV_PIC_INT_WORDS 1
-`define RV_PIC_MEIE_COUNT 31
-`define RV_PIC_MEIGWCTRL_OFFSET 'h4000
-`define RV_PIC_MEIPT_MASK 'h0
-`define RV_PIC_MEIP_COUNT 1
-`define RV_PIC_MEIGWCLR_OFFSET 'h5000
-`define RV_PIC_MEIP_MASK 'h0
-`define RV_PIC_BITS 15
-`define RV_PIC_MEIPT_COUNT 31
-`define RV_PIC_REGION 4'hf
-`define RV_PIC_MEIE_MASK 'h1
-`define RV_PIC_MEIGWCLR_MASK 'h0
-`define RV_PIC_MEIGWCLR_COUNT 31
-`define RV_PIC_MPICCFG_OFFSET 'h3000
-`define RV_PIC_TOTAL_INT 31
-`define RV_PIC_MEIPL_COUNT 31
-`define RV_PIC_BASE_ADDR 32'hf00c0000
-`define REGWIDTH 32
-`define RV_TARGET default
-`define RV_BHT_GHR_HASH_1 
-`define RV_BHT_ADDR_HI 8
-`define RV_BHT_SIZE 256
-`define RV_BHT_HASH_STRING {hashin[7+1:2]^ghr[7-1:0]}// cf2
-`define RV_BHT_GHR_RANGE 6:0
-`define RV_BHT_ARRAY_DEPTH 128
-`define RV_BHT_ADDR_LO 2
-`define RV_BHT_GHR_SIZE 7
-`define RV_BTB_ADDR_HI 8
-`define RV_BTB_INDEX3_HI 22
-`define RV_BTB_BTAG_FOLD 0
-`define RV_BTB_ARRAY_DEPTH 128
-`define RV_BTB_ENABLE 1
-`define RV_BTB_TOFFSET_SIZE 12
-`define RV_BTB_INDEX3_LO 16
-`define RV_BTB_INDEX2_HI 15
-`define RV_BTB_INDEX1_HI 8
-`define RV_BTB_BTAG_SIZE 6
-`define RV_BTB_SIZE 256
-`define RV_BTB_ADDR_LO 2
-`define RV_BTB_INDEX1_LO 2
-`define RV_BTB_INDEX2_LO 9
-`define RV_BTB_FOLD2_INDEX_HASH 0
-`define RV_XLEN 32
-`define RV_NUMIREGS 32
-`define TEC_RV_ICG clockhdr
-`define RV_NMI_VEC 'h11110000
-`define RV_DCCM_REGION 4'hf
-`define RV_DCCM_EADR 32'hf0040fff
-`define RV_DCCM_INDEX_BITS 9
-`define RV_DCCM_DATA_CELL ram_512x39
-`define RV_DCCM_RESERVED 'h400
-`define RV_DCCM_BYTE_WIDTH 4
-`define RV_DCCM_SIZE_4 
-`define RV_DCCM_SADR 32'hf0040000
-`define RV_DCCM_NUM_BANKS_2 
-`define RV_DCCM_NUM_BANKS 2
-`define RV_LSU_SB_BITS 12
-`define RV_DCCM_OFFSET 28'h40000
-`define RV_DCCM_WIDTH_BITS 2
-`define RV_DCCM_FDATA_WIDTH 39
-`define RV_DCCM_DATA_WIDTH 32
-`define RV_DCCM_ECC_WIDTH 7
-`define RV_DCCM_ROWS 512
-`define RV_DCCM_BANK_BITS 1
-`define RV_DCCM_BITS 12
-`define RV_DCCM_ENABLE 1
-`define RV_DCCM_SIZE 4
-`define RV_RESET_VEC 'haffff000
-`define RV_ICACHE_DATA_INDEX_LO 4
-`define RV_ICACHE_ECC 1
-`define RV_ICACHE_BANKS_WAY 2
-`define RV_ICACHE_DATA_DEPTH 512
-`define RV_ICACHE_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_NUM_WAYS 2
-`define RV_ICACHE_BANK_LO 3
-`define RV_ICACHE_DATA_WIDTH 64
-`define RV_ICACHE_FDATA_WIDTH 71
-`define RV_ICACHE_BANK_HI 3
-`define RV_ICACHE_SCND_LAST 6
-`define RV_ICACHE_BANK_WIDTH 8
-`define RV_ICACHE_SIZE 16
-`define RV_ICACHE_BANK_BITS 1
-`define RV_ICACHE_TAG_NUM_BYPASS_WIDTH 2
-`define RV_ICACHE_TAG_LO 13
-`define RV_ICACHE_NUM_LINES_WAY 128
-`define RV_ICACHE_TAG_BYPASS_ENABLE 1
-`define RV_ICACHE_TAG_INDEX_LO 6
-`define RV_ICACHE_TAG_NUM_BYPASS 2
-`define RV_ICACHE_NUM_LINES 256
-`define RV_ICACHE_BEAT_BITS 3
-`define RV_ICACHE_BEAT_ADDR_HI 5
-`define RV_ICACHE_NUM_BEATS 8
-`define RV_ICACHE_NUM_BYPASS 2
-`define RV_ICACHE_TAG_CELL ram_128x25
-`define RV_ICACHE_INDEX_HI 12
-`define RV_ICACHE_WAYPACK 1
-`define RV_ICACHE_NUM_LINES_BANK 64
-`define RV_ICACHE_2BANKS 1
-`define RV_ICACHE_STATUS_BITS 1
-`define RV_ICACHE_BYPASS_ENABLE 1
-`define RV_ICACHE_LN_SZ 64
-`define RV_ICACHE_TAG_DEPTH 128
-`define RV_ICACHE_DATA_CELL ram_512x71
-`define RV_EXTERNAL_DATA 'hd0580000
-`define RV_UNUSED_REGION3 'h60000000
-`define RV_UNUSED_REGION8 'h10000000
-`define RV_UNUSED_REGION5 'h40000000
-`define RV_DEBUG_SB_MEM 'hb0580000
-`define RV_UNUSED_REGION1 'h80000000
-`define RV_UNUSED_REGION0 'h90000000
-`define RV_UNUSED_REGION2 'h70000000
-`define RV_UNUSED_REGION6 'h30000000
-`define RV_UNUSED_REGION4 'h50000000
-`define RV_UNUSED_REGION9 'h00000000
-`define RV_SERIALIO 'he0580000
-`define RV_EXTERNAL_DATA_1 'hc0000000
-`define RV_UNUSED_REGION7 'h20000000
-`define RV_FPGA_OPTIMIZE 0
-`define RV_BITMANIP_ZBA 0
-`define RV_BITMANIP_ZBF 0
-`define RV_LSU_NUM_NBLOAD_WIDTH 2
-`define RV_FAST_INTERRUPT_REDIRECT 1
-`define RV_TIMER_LEGAL_EN 1
-`define RV_BITMANIP_ZBP 0
-`define RV_ICCM_ONLY 1
-`define RV_BITMANIP_ZBC 0
-`define RV_LSU_NUM_NBLOAD 4
-`define RV_BITMANIP_ZBR 0
-`define RV_BITMANIP_ZBS 0
-`define RV_DIV_NEW 1
-`define RV_DIV_BIT 3
-`define RV_BITMANIP_ZBB 0
-`define RV_DMA_BUF_DEPTH 5
-`define RV_LSU2DMA 0
-`define RV_BITMANIP_ZBE 0
-`define RV_LSU_STBUF_DEPTH 4
-`define RV_DMA_BUS_ID 1
-`define RV_IFU_BUS_TAG 3
-`define RV_LSU_BUS_TAG 3
-`define RV_BUS_PRTY_DEFAULT 2'h3
-`define RV_SB_BUS_ID 1
-`define RV_DMA_BUS_PRTY 2
-`define RV_IFU_BUS_PRTY 2
-`define RV_LSU_BUS_PRTY 2
-`define RV_DMA_BUS_TAG 1
-`define RV_SB_BUS_PRTY 2
-`define RV_IFU_BUS_ID 1
-`define RV_LSU_BUS_ID 1
-`define RV_SB_BUS_TAG 1
-`define RV_ICCM_BANK_INDEX_LO 3
-`define RV_ICCM_SIZE 4
-`define RV_ICCM_BANK_BITS 1
-`define RV_ICCM_ROWS 512
-`define RV_ICCM_BITS 12
-`define RV_ICCM_ENABLE 1
-`define RV_ICCM_DATA_CELL ram_512x39
-`define RV_ICCM_RESERVED 'h400
-`define RV_ICCM_SIZE_4 
-`define RV_ICCM_REGION 4'ha
-`define RV_ICCM_EADR 32'hafffffff
-`define RV_ICCM_INDEX_BITS 9
-`define RV_ICCM_OFFSET 10'h0ffff000
-`define RV_ICCM_BANK_HI 2
-`define RV_ICCM_NUM_BANKS_2 
-`define RV_ICCM_NUM_BANKS 2
-`define RV_ICCM_SADR 32'haffff000
-`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
-`undef TEC_RV_ICG
-`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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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
-   inout logic			             VPWR,
-   inout logic				     VGND,
-//`endif
-   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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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
-   inout logic         VPWR,
-   inout logic		VGND,
-//`endif
-   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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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 
-   inout logic 					VPWR,
-   inout logic						VGND,
-//`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
-               sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									//`ifdef USE_POWER_PINS
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									//`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(8'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)
-
-                                      );*/
-                          sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									//`ifdef USE_POWER_PINS
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									//`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(8'h00),
-    									.dout1()
-  					);
-                                      
-     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(VPWR),
-    									.vssd1(VGND),
-    									//`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 == 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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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
-   inout logic 	VPWR,
-   inout logic		VGND,
-//`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(VPWR),
-    									.vssd1(VGND),
-    									//`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 == 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
-                                .*
-                                );*/
-                                  sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									//`ifdef USE_POWER_PINS
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									//`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(8'h00),
-    									.dout1()
-    				   );
-      end
-      else if (DCCM_INDEX_DEPTH == 256) begin : dccm
-           sky130_sram_1kbyte_1rw1r_32x256_8 sram(
-    									//`ifdef USE_POWER_PINS
-    									.vccd1(VPWR),
-    									.vssd1(VGND),
-    									//`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(8'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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	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'h09         ,
-	DCCM_NUM_BANKS         : 9'h002        ,
-	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'h01         ,
-	ICCM_BANK_HI           : 9'h002        ,
-	ICCM_BANK_INDEX_LO     : 9'h003        ,
-	ICCM_BITS              : 9'h00C        ,
-	ICCM_ENABLE            : 5'h01         ,
-	ICCM_ICACHE            : 5'h00         ,
-	ICCM_INDEX_BITS        : 8'h09         ,
-	ICCM_NUM_BANKS         : 9'h002        ,
-	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/BrqRV_EB1_new.v b/verilog/rtl/BrqRV_EB1/BrqRV_EB1_new.v
deleted file mode 100644
index afbd673..0000000
--- a/verilog/rtl/BrqRV_EB1/BrqRV_EB1_new.v
+++ /dev/null
@@ -1,23023 +0,0 @@
-// SPDX-FileCopyrightText: 2020 Efabless Corporation
-//
-// 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.
-// SPDX-License-Identifier: Apache-2.0
-
-
-module eb1_brqrv_wrapper (
-`ifdef USE_POWER_PINS
-	vccd1,
-	vssd1,
-`endif	
-	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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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};
-`ifdef USE_POWER_PINS
-	inout wire vccd1;
-	inout wire vssd1;
-`endif
-	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)),
-		`ifdef USE_POWER_PINS
-		.vccd1(vccd1),
-		.vssd1(vssd1),
-		`endif
-		.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)
-	);
-	
-	always @(iccm_instr_we) begin
-	$display("Instruction = %h", iccm_instr_wdata);
-	end
-	
-	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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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 (
-`ifdef USE_POWER_PINS
-	vccd1,
-	vssd1,
-`endif
-	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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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};
-`ifdef USE_POWER_PINS
-	inout wire vccd1;
-	inout wire vssd1;
-`endif
-	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),
-				`ifdef USE_POWER_PINS
-				.vccd1(vccd1),
-				.vssd1(vssd1),
-				`endif
-				.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(
-				`ifdef USE_POWER_PINS
-				.vccd1(vccd1),
-				.vssd1(vssd1),
-				`endif
-				.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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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 (
-`ifdef USE_POWER_PINS	
-	vccd1,
-	vssd1,
-`endif
-	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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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};
-`ifdef USE_POWER_PINS
-	inout wire vccd1;
-	inout wire vssd1;
-`endif
-	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 iccm(
-					`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[((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
-				sky130_sram_1kbyte_1rw1r_32x256_8 iccm(
-					`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[((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] == 10) begin : iccm
-				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[((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(10'h000),
-					.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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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 (
-`ifdef USE_POWER_PINS	
-	vccd1,
-	vssd1,
-`endif
-	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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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};
-`ifdef USE_POWER_PINS
-	inout wire vccd1;
-	inout wire vssd1;
-`endif
-	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 dccm(
-					`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[((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(10'h000),
-					.dout1()
-				);
-			end
-			else if (DCCM_INDEX_DEPTH == 512) begin : dccm
-				sky130_sram_1kbyte_1rw1r_32x256_8 dccm(
-					`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[((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 == 256) begin : dccm
-				sky130_sram_1kbyte_1rw1r_32x256_8 dccm(
-					`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[((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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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'h01, 9'h00c, 7'h04, 10'h020, 7'h07, 5'h01, 10'h027, 8'h09, 9'h002, 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'h01, 9'h002, 9'h003, 9'h00c, 5'h01, 5'h00, 8'h09, 9'h002, 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(
-		`ifdef USE_POWER_PINS
-		.VPWR(1'b1),
-		.VGND(1'b0),
-		`endif
-		.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(
-		`ifdef USE_POWER_PINS
-		.VPWR(1'b1),
-		.VGND(1'b0),
-		`endif
-		.CLK(clk),
-		.GCLK(l1clk),
-		.GATE(en)
-	);
-endmodule
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
index 63506a8..ab93879 100644
--- a/verilog/rtl/uprj_netlists.v
+++ b/verilog/rtl/uprj_netlists.v
@@ -25,9 +25,7 @@
     `include "gl/user_proj_example.v"
 `else
     `include "BrqRV_EB1/sky130_sram_1kbyte_1rw1r_32x256_8.v"
-    //`include "BrqRV_EB1/DFFRAM.v"
-    //`include "BrqRV_EB1/DFFRAMBB.v"
-   
+    
    // for netlist verification
     //`include "../gl/user_project_wrapper.v"
     //`include "../gl/user_proj_example.v"
@@ -35,6 +33,6 @@
   // for rtl verification
     `include "user_project_wrapper.v"
     `include "user_proj_example.v"
-    `include "BrqRV_EB1/BrqRV_EB1_new.v"
+    `include "BrqRV_EB1/BrqRV_EB1.v"
     
 `endif
